@elliemae/ds-dataviz 3.8.1 → 3.9.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/graphs/Chart/Chart.js.map +2 -2
- package/dist/cjs/graphs/Chart/ChartContext.js +3 -1
- package/dist/cjs/graphs/Chart/ChartContext.js.map +2 -2
- package/dist/cjs/graphs/Chart/config/useChart.js +86 -33
- package/dist/cjs/graphs/Chart/config/useChart.js.map +3 -3
- package/dist/cjs/graphs/Chart/config/useInternalMargins.js +103 -0
- package/dist/cjs/graphs/Chart/config/useInternalMargins.js.map +7 -0
- package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js +25 -15
- package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
- package/dist/cjs/graphs/Chart/config/useScales.js +43 -17
- package/dist/cjs/graphs/Chart/config/useScales.js.map +2 -2
- package/dist/cjs/graphs/Chart/helpers/index.js +9 -13
- package/dist/cjs/graphs/Chart/helpers/index.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/ActivePoint.js +1 -1
- package/dist/cjs/graphs/Chart/parts/ActivePoint.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js +17 -25
- package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js.map +3 -3
- package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js +33 -38
- package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js +6 -11
- package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/ChartContainer.js +65 -16
- package/dist/cjs/graphs/Chart/parts/ChartContainer.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/FocusableRegion.js +17 -68
- package/dist/cjs/graphs/Chart/parts/FocusableRegion.js.map +2 -2
- package/dist/cjs/graphs/Chart/{series/Pie.js → parts/Labels/BottomLabel.js} +20 -12
- package/dist/cjs/graphs/Chart/parts/Labels/BottomLabel.js.map +7 -0
- package/dist/cjs/graphs/Chart/parts/Labels/Label.js +52 -0
- package/dist/cjs/graphs/Chart/parts/Labels/Label.js.map +7 -0
- package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js +61 -0
- package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js.map +7 -0
- package/dist/cjs/graphs/Chart/parts/Labels/RightLabel.js +65 -0
- package/dist/cjs/graphs/Chart/parts/Labels/RightLabel.js.map +7 -0
- package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js +28 -30
- package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Legend/LeftLegend.js +14 -19
- package/dist/cjs/graphs/Chart/parts/Legend/LeftLegend.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js +100 -0
- package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js.map +7 -0
- package/dist/cjs/graphs/Chart/parts/Legend/RightLegend.js +31 -25
- package/dist/cjs/graphs/Chart/parts/Legend/RightLegend.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Legend/TopLegend.js +3 -13
- package/dist/cjs/graphs/Chart/parts/Legend/TopLegend.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Scrapper/Scrapper.js +50 -16
- package/dist/cjs/graphs/Chart/parts/Scrapper/Scrapper.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js +3 -1
- package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js +39 -17
- package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +29 -28
- package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerX.js +2 -2
- package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerX.js.map +2 -2
- package/dist/cjs/graphs/Chart/parts/SeriesFactory.js +57 -41
- package/dist/cjs/graphs/Chart/parts/SeriesFactory.js.map +2 -2
- package/dist/cjs/graphs/Chart/react-desc-prop-types.js +1 -12
- package/dist/cjs/graphs/Chart/react-desc-prop-types.js.map +2 -2
- package/dist/cjs/graphs/Chart/series/Bars.js +29 -27
- package/dist/cjs/graphs/Chart/series/Bars.js.map +2 -2
- package/dist/cjs/graphs/Chart/series/HorizontalBars.js +85 -0
- package/dist/cjs/graphs/Chart/series/HorizontalBars.js.map +7 -0
- package/dist/cjs/graphs/Chart/series/HorizontalStackedBars.js +77 -0
- package/dist/cjs/graphs/Chart/series/HorizontalStackedBars.js.map +7 -0
- package/dist/cjs/graphs/Chart/series/Line.js +23 -19
- package/dist/cjs/graphs/Chart/series/Line.js.map +2 -2
- package/dist/cjs/graphs/Chart/series/Point.js +88 -18
- package/dist/cjs/graphs/Chart/series/Point.js.map +2 -2
- package/dist/cjs/graphs/Chart/series/Points.js +23 -27
- package/dist/cjs/graphs/Chart/series/Points.js.map +2 -2
- package/dist/cjs/graphs/Chart/series/Rect.js +105 -8
- package/dist/cjs/graphs/Chart/series/Rect.js.map +2 -2
- package/dist/cjs/graphs/Chart/series/StackedBar.js +23 -30
- package/dist/cjs/graphs/Chart/series/StackedBar.js.map +2 -2
- package/dist/cjs/graphs/Chart/series/index.js +0 -1
- package/dist/cjs/graphs/Chart/series/index.js.map +2 -2
- package/dist/cjs/graphs/Chart/styles.js +5 -20
- package/dist/cjs/graphs/Chart/styles.js.map +2 -2
- package/dist/cjs/graphs/constants.js +20 -0
- package/dist/cjs/graphs/constants.js.map +2 -2
- package/dist/esm/graphs/Chart/Chart.js.map +2 -2
- package/dist/esm/graphs/Chart/ChartContext.js +3 -1
- package/dist/esm/graphs/Chart/ChartContext.js.map +2 -2
- package/dist/esm/graphs/Chart/config/useChart.js +87 -34
- package/dist/esm/graphs/Chart/config/useChart.js.map +2 -2
- package/dist/esm/graphs/Chart/config/useInternalMargins.js +77 -0
- package/dist/esm/graphs/Chart/config/useInternalMargins.js.map +7 -0
- package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js +26 -16
- package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
- package/dist/esm/graphs/Chart/config/useScales.js +44 -18
- package/dist/esm/graphs/Chart/config/useScales.js.map +2 -2
- package/dist/esm/graphs/Chart/helpers/index.js +10 -14
- package/dist/esm/graphs/Chart/helpers/index.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/ActivePoint.js +1 -1
- package/dist/esm/graphs/Chart/parts/ActivePoint.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js +18 -26
- package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js.map +3 -3
- package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js +34 -39
- package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js +6 -11
- package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/ChartContainer.js +66 -17
- package/dist/esm/graphs/Chart/parts/ChartContainer.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/FocusableRegion.js +18 -69
- package/dist/esm/graphs/Chart/parts/FocusableRegion.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js +28 -0
- package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js.map +7 -0
- package/dist/esm/graphs/Chart/parts/Labels/Label.js +26 -0
- package/dist/esm/graphs/Chart/parts/Labels/Label.js.map +7 -0
- package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js +35 -0
- package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js.map +7 -0
- package/dist/esm/graphs/Chart/parts/Labels/RightLabel.js +39 -0
- package/dist/esm/graphs/Chart/parts/Labels/RightLabel.js.map +7 -0
- package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js +28 -30
- package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Legend/LeftLegend.js +16 -21
- package/dist/esm/graphs/Chart/parts/Legend/LeftLegend.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js +74 -0
- package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js.map +7 -0
- package/dist/esm/graphs/Chart/parts/Legend/RightLegend.js +32 -26
- package/dist/esm/graphs/Chart/parts/Legend/RightLegend.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Legend/TopLegend.js +3 -13
- package/dist/esm/graphs/Chart/parts/Legend/TopLegend.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Scrapper/Scrapper.js +51 -17
- package/dist/esm/graphs/Chart/parts/Scrapper/Scrapper.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js +3 -1
- package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js +39 -17
- package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +29 -28
- package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerX.js +2 -2
- package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerX.js.map +2 -2
- package/dist/esm/graphs/Chart/parts/SeriesFactory.js +58 -42
- package/dist/esm/graphs/Chart/parts/SeriesFactory.js.map +2 -2
- package/dist/esm/graphs/Chart/react-desc-prop-types.js +1 -12
- package/dist/esm/graphs/Chart/react-desc-prop-types.js.map +2 -2
- package/dist/esm/graphs/Chart/series/Bars.js +30 -28
- package/dist/esm/graphs/Chart/series/Bars.js.map +2 -2
- package/dist/esm/graphs/Chart/series/HorizontalBars.js +59 -0
- package/dist/esm/graphs/Chart/series/HorizontalBars.js.map +7 -0
- package/dist/esm/graphs/Chart/series/HorizontalStackedBars.js +51 -0
- package/dist/esm/graphs/Chart/series/HorizontalStackedBars.js.map +7 -0
- package/dist/esm/graphs/Chart/series/Line.js +25 -21
- package/dist/esm/graphs/Chart/series/Line.js.map +2 -2
- package/dist/esm/graphs/Chart/series/Point.js +89 -19
- package/dist/esm/graphs/Chart/series/Point.js.map +2 -2
- package/dist/esm/graphs/Chart/series/Points.js +24 -28
- package/dist/esm/graphs/Chart/series/Points.js.map +2 -2
- package/dist/esm/graphs/Chart/series/Rect.js +106 -9
- package/dist/esm/graphs/Chart/series/Rect.js.map +2 -2
- package/dist/esm/graphs/Chart/series/StackedBar.js +24 -31
- package/dist/esm/graphs/Chart/series/StackedBar.js.map +2 -2
- package/dist/esm/graphs/Chart/series/index.js +0 -1
- package/dist/esm/graphs/Chart/series/index.js.map +2 -2
- package/dist/esm/graphs/Chart/styles.js +5 -20
- package/dist/esm/graphs/Chart/styles.js.map +2 -2
- package/dist/esm/graphs/constants.js +20 -0
- package/dist/esm/graphs/constants.js.map +2 -2
- package/package.json +8 -8
- package/dist/cjs/graphs/Chart/series/Pie.js.map +0 -7
- package/dist/esm/graphs/Chart/series/Pie.js +0 -20
- package/dist/esm/graphs/Chart/series/Pie.js.map +0 -7
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useContext, useEffect, useRef } from "react";
|
|
3
|
+
import React2, { useContext, useEffect, useRef } from "react";
|
|
4
4
|
import { select, axisBottom, timeFormat } from "d3";
|
|
5
|
-
import { StyledAxis, StyledGrid
|
|
5
|
+
import { StyledAxis, StyledGrid } from "../../styles";
|
|
6
6
|
import { ChartContext } from "../../ChartContext";
|
|
7
|
-
const AxisBottom = () => {
|
|
7
|
+
const AxisBottom = React2.memo(() => {
|
|
8
8
|
const {
|
|
9
|
-
props: { xAxis,
|
|
9
|
+
props: { xAxis, width },
|
|
10
10
|
innerHeight,
|
|
11
|
-
innerWidth,
|
|
12
11
|
xScale,
|
|
13
|
-
|
|
14
|
-
tickOffset = 3
|
|
12
|
+
setAxisBottomRef
|
|
15
13
|
} = useContext(ChartContext);
|
|
14
|
+
if (xAxis.hideAxis)
|
|
15
|
+
return null;
|
|
16
16
|
const axisRef = useRef();
|
|
17
17
|
const gridRef = useRef();
|
|
18
|
-
const ticks = xScale.ticks?.();
|
|
18
|
+
const ticks = xScale.ticks?.(xAxis.tickCount ?? width / 100);
|
|
19
19
|
useEffect(() => {
|
|
20
20
|
const grid = axisBottom(xScale).tickSize(xAxis?.showGrid ? -innerHeight : 0).tickFormat("").tickSizeOuter(0);
|
|
21
|
-
const axis = axisBottom(xScale);
|
|
21
|
+
const axis = axisBottom(xScale).tickSizeOuter(0);
|
|
22
22
|
if (xAxis.tickValues && ticks) {
|
|
23
23
|
const finalTicks = xAxis.overwriteTicks ? xAxis.tickValues : [...ticks, ...xAxis.tickValues];
|
|
24
24
|
axis.tickValues(finalTicks);
|
|
25
|
+
} else {
|
|
26
|
+
axis.tickValues(ticks);
|
|
27
|
+
grid.tickValues(ticks);
|
|
25
28
|
}
|
|
26
29
|
if (xAxis.tickFormat) {
|
|
27
30
|
if (typeof xAxis.tickFormat === "string") {
|
|
@@ -38,29 +41,18 @@ const AxisBottom = () => {
|
|
|
38
41
|
return /* @__PURE__ */ jsxs("g", {
|
|
39
42
|
transform: `translate(0,${innerHeight})`,
|
|
40
43
|
children: [
|
|
41
|
-
/* @__PURE__ */
|
|
42
|
-
ref:
|
|
43
|
-
children:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
children: /* @__PURE__ */ jsx(StyledAxisLabel, {
|
|
47
|
-
className: "axis-label",
|
|
48
|
-
textAnchor: "middle",
|
|
49
|
-
dy: 50,
|
|
50
|
-
children: xAxis?.label
|
|
51
|
-
})
|
|
52
|
-
}),
|
|
53
|
-
/* @__PURE__ */ jsx(StyledAxis, {
|
|
54
|
-
ref: axisRef
|
|
55
|
-
})
|
|
56
|
-
]
|
|
44
|
+
/* @__PURE__ */ jsx("g", {
|
|
45
|
+
ref: setAxisBottomRef,
|
|
46
|
+
children: /* @__PURE__ */ jsx(StyledAxis, {
|
|
47
|
+
ref: axisRef
|
|
48
|
+
})
|
|
57
49
|
}),
|
|
58
50
|
/* @__PURE__ */ jsx(StyledGrid, {
|
|
59
51
|
ref: gridRef
|
|
60
52
|
})
|
|
61
53
|
]
|
|
62
54
|
});
|
|
63
|
-
};
|
|
55
|
+
});
|
|
64
56
|
export {
|
|
65
57
|
AxisBottom
|
|
66
58
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Axis/AxisBottom.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useEffect, useRef } from 'react';\nimport { select, axisBottom, timeFormat } from 'd3';\nimport { StyledAxis, StyledGrid, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\n\nexport const AxisBottom = () => {\n const {\n props: { xAxis,
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo, useEffect, useRef } from 'react';\nimport { select, axisBottom, timeFormat } from 'd3';\nimport { StyledAxis, StyledGrid, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\n\nexport const AxisBottom = React.memo(() => {\n const {\n props: { xAxis, width },\n innerHeight,\n xScale,\n setAxisBottomRef,\n } = useContext(ChartContext);\n if (xAxis.hideAxis) return null;\n const axisRef = useRef();\n const gridRef = useRef();\n const ticks = xScale.ticks?.(xAxis.tickCount ?? width / 100);\n\n useEffect(() => {\n const grid = axisBottom(xScale)\n .tickSize(xAxis?.showGrid ? -innerHeight : 0)\n .tickFormat('')\n .tickSizeOuter(0);\n\n const axis = axisBottom(xScale).tickSizeOuter(0);\n\n if (xAxis.tickValues && ticks) {\n const finalTicks = xAxis.overwriteTicks ? xAxis.tickValues : [...ticks, ...xAxis.tickValues];\n axis.tickValues(finalTicks);\n } else {\n axis.tickValues(ticks);\n grid.tickValues(ticks);\n }\n\n if (xAxis.tickFormat) {\n if (typeof xAxis.tickFormat === 'string') {\n const formatGenerator = timeFormat(xAxis.tickFormat);\n axis.tickFormat((d) => formatGenerator(d));\n }\n if (typeof xAxis.tickFormat === 'function') {\n axis.tickFormat(xAxis.tickFormat);\n }\n }\n\n select(gridRef.current).call(grid);\n select(axisRef.current).call(axis);\n }, [innerHeight, ticks, xAxis.overwriteTicks, xAxis?.showGrid, xAxis.tickFormat, xAxis.tickValues, xScale]);\n\n return (\n <g transform={`translate(0,${innerHeight})`}>\n <g ref={setAxisBottomRef}>\n <StyledAxis ref={axisRef}></StyledAxis>\n </g>\n\n <StyledGrid ref={gridRef}></StyledGrid>\n </g>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,OAAOA,UAAS,YAAqB,WAAW,cAAc;AAC9D,SAAS,QAAQ,YAAY,kBAAkB;AAC/C,SAAS,YAAY,kBAAmC;AACxD,SAAS,oBAAoB;AAEtB,MAAM,aAAaA,OAAM,KAAK,MAAM;AACzC,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,MAAM;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAC3B,MAAI,MAAM;AAAU,WAAO;AAC3B,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,OAAO;AACvB,QAAM,QAAQ,OAAO,QAAQ,MAAM,aAAa,QAAQ,GAAG;AAE3D,YAAU,MAAM;AACd,UAAM,OAAO,WAAW,MAAM,EAC3B,SAAS,OAAO,WAAW,CAAC,cAAc,CAAC,EAC3C,WAAW,EAAE,EACb,cAAc,CAAC;AAElB,UAAM,OAAO,WAAW,MAAM,EAAE,cAAc,CAAC;AAE/C,QAAI,MAAM,cAAc,OAAO;AAC7B,YAAM,aAAa,MAAM,iBAAiB,MAAM,aAAa,CAAC,GAAG,OAAO,GAAG,MAAM,UAAU;AAC3F,WAAK,WAAW,UAAU;AAAA,IAC5B,OAAO;AACL,WAAK,WAAW,KAAK;AACrB,WAAK,WAAW,KAAK;AAAA,IACvB;AAEA,QAAI,MAAM,YAAY;AACpB,UAAI,OAAO,MAAM,eAAe,UAAU;AACxC,cAAM,kBAAkB,WAAW,MAAM,UAAU;AACnD,aAAK,WAAW,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC3C;AACA,UAAI,OAAO,MAAM,eAAe,YAAY;AAC1C,aAAK,WAAW,MAAM,UAAU;AAAA,MAClC;AAAA,IACF;AAEA,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AACjC,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AAAA,EACnC,GAAG,CAAC,aAAa,OAAO,MAAM,gBAAgB,OAAO,UAAU,MAAM,YAAY,MAAM,YAAY,MAAM,CAAC;AAE1G,SACE,qBAAC;AAAA,IAAE,WAAW,eAAe;AAAA,IAC3B;AAAA,0BAAC;AAAA,QAAE,KAAK;AAAA,QACN,8BAAC;AAAA,UAAW,KAAK;AAAA,SAAS;AAAA,OAC5B;AAAA,MAEA,oBAAC;AAAA,QAAW,KAAK;AAAA,OAAS;AAAA;AAAA,GAC5B;AAEJ,CAAC;",
|
|
6
|
+
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -2,62 +2,57 @@ import * as React from "react";
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useContext, useEffect, useRef } from "react";
|
|
4
4
|
import { select, axisLeft } from "d3";
|
|
5
|
-
import { StyledAxis, StyledGrid
|
|
5
|
+
import { StyledAxis, StyledGrid } from "../../styles";
|
|
6
6
|
import { ChartContext } from "../../ChartContext";
|
|
7
|
+
import { getFormatGenerator } from "../../helpers";
|
|
7
8
|
const AxisLeft = () => {
|
|
8
9
|
const {
|
|
9
|
-
props: { yAxis,
|
|
10
|
+
props: { yAxis, height },
|
|
10
11
|
innerHeight,
|
|
11
12
|
innerWidth,
|
|
12
13
|
yScale,
|
|
13
|
-
|
|
14
|
-
setAxisLeftWidth
|
|
14
|
+
setAxisLeftRef
|
|
15
15
|
} = useContext(ChartContext);
|
|
16
|
+
if (yAxis.hideAxis)
|
|
17
|
+
return null;
|
|
16
18
|
const ref = useRef();
|
|
17
19
|
const gridRef = useRef();
|
|
18
|
-
const ticks = yScale.ticks?.();
|
|
20
|
+
const ticks = yScale.ticks?.(yAxis.tickCount ?? height / 80);
|
|
21
|
+
const hasNegativeDomain = yScale(innerHeight) < 0;
|
|
22
|
+
const { tickFormat, type } = yAxis;
|
|
19
23
|
useEffect(() => {
|
|
20
|
-
const axis = axisLeft(yScale);
|
|
24
|
+
const axis = axisLeft(yScale).tickSizeOuter(0);
|
|
25
|
+
const grid = axisLeft(yScale).tickFormat((_) => "").tickSize(yAxis?.showGrid ? -innerWidth : 0).tickSizeOuter(0);
|
|
21
26
|
if (yAxis.tickValues && ticks) {
|
|
22
27
|
const finalTicks = yAxis.overwriteTicks ? yAxis.tickValues : [...ticks, ...yAxis.tickValues];
|
|
23
28
|
axis.tickValues(finalTicks);
|
|
29
|
+
} else {
|
|
30
|
+
axis.tickValues(ticks);
|
|
31
|
+
grid.tickValues(ticks);
|
|
24
32
|
}
|
|
25
|
-
if (
|
|
26
|
-
|
|
33
|
+
if (tickFormat) {
|
|
34
|
+
if (typeof tickFormat === "string") {
|
|
35
|
+
const formatGenerator = getFormatGenerator(type ?? "linear");
|
|
36
|
+
axis.tickFormat((d) => formatGenerator(tickFormat)(d));
|
|
37
|
+
}
|
|
38
|
+
if (typeof tickFormat === "function") {
|
|
39
|
+
axis.tickFormat(tickFormat);
|
|
40
|
+
}
|
|
27
41
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
innerWidth,
|
|
34
|
-
ticks,
|
|
35
|
-
yAxis.overwriteTicks,
|
|
36
|
-
yAxis?.showGrid,
|
|
37
|
-
yAxis.tickFormat,
|
|
38
|
-
yAxis.tickValues,
|
|
39
|
-
yScale
|
|
40
|
-
]);
|
|
42
|
+
if (ref?.current && gridRef?.current) {
|
|
43
|
+
select(gridRef.current).call(grid);
|
|
44
|
+
select(ref.current).call(axis);
|
|
45
|
+
}
|
|
46
|
+
}, [hasNegativeDomain, innerHeight, innerWidth, tickFormat, ticks, type, yAxis, yScale]);
|
|
41
47
|
return /* @__PURE__ */ jsxs("g", {
|
|
42
48
|
children: [
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
-
ref:
|
|
45
|
-
children:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
textAnchor: "middle",
|
|
51
|
-
dy: -15,
|
|
52
|
-
children: yAxis?.label
|
|
53
|
-
})
|
|
54
|
-
}),
|
|
55
|
-
/* @__PURE__ */ jsx(StyledAxis, {
|
|
56
|
-
ref,
|
|
57
|
-
color: yAxis.color,
|
|
58
|
-
className: "axis-left"
|
|
59
|
-
})
|
|
60
|
-
]
|
|
49
|
+
/* @__PURE__ */ jsx("g", {
|
|
50
|
+
ref: setAxisLeftRef,
|
|
51
|
+
children: /* @__PURE__ */ jsx(StyledAxis, {
|
|
52
|
+
ref,
|
|
53
|
+
color: yAxis.color,
|
|
54
|
+
className: "axis-left"
|
|
55
|
+
})
|
|
61
56
|
}),
|
|
62
57
|
/* @__PURE__ */ jsx(StyledGrid, {
|
|
63
58
|
ref: gridRef
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Axis/AxisLeft.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useContext, useEffect, useRef } from 'react';\nimport { select, axisLeft } from 'd3';\nimport { StyledAxis, StyledGrid } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\nimport { getFormatGenerator } from '../../helpers';\nexport const AxisLeft = () => {\n const {\n props: { yAxis, height },\n innerHeight,\n innerWidth,\n yScale,\n setAxisLeftRef,\n } = useContext(ChartContext);\n if (yAxis.hideAxis) return null;\n\n const ref = useRef<SVGSVGElement>();\n const gridRef = useRef<SVGSVGElement>();\n const ticks = yScale.ticks?.(yAxis.tickCount ?? height / 80);\n const hasNegativeDomain = yScale(innerHeight) < 0;\n const { tickFormat, type } = yAxis;\n useEffect(() => {\n const axis = axisLeft(yScale).tickSizeOuter(0);\n\n const grid = axisLeft(yScale)\n .tickFormat((_) => '')\n .tickSize(yAxis?.showGrid ? -innerWidth : 0)\n .tickSizeOuter(0);\n\n if (yAxis.tickValues && ticks) {\n const finalTicks = yAxis.overwriteTicks ? yAxis.tickValues : [...ticks, ...yAxis.tickValues];\n axis.tickValues(finalTicks);\n } else {\n axis.tickValues(ticks);\n grid.tickValues(ticks);\n }\n\n if (tickFormat) {\n if (typeof tickFormat === 'string') {\n const formatGenerator = getFormatGenerator(type ?? 'linear');\n\n axis.tickFormat((d) => formatGenerator(tickFormat)(d));\n }\n if (typeof tickFormat === 'function') {\n axis.tickFormat(tickFormat);\n }\n }\n\n if (ref?.current && gridRef?.current) {\n select(gridRef.current).call(grid);\n select(ref.current).call(axis);\n\n // if (yAxis.hideAxis) {\n // select(ref.current).call((g) => {\n // g.selectAll('.tick').remove();\n // g.select('.domain').remove();\n // });\n // select(gridRef.current).call((g) => g.select('.domain').remove());\n // }\n }\n }, [hasNegativeDomain, innerHeight, innerWidth, tickFormat, ticks, type, yAxis, yScale]);\n return (\n <g>\n <g ref={setAxisLeftRef}>\n <StyledAxis ref={ref} color={yAxis.color} className=\"axis-left\"></StyledAxis>\n </g>\n\n <StyledGrid ref={gridRef}></StyledGrid>\n {/* {hasNegativeDomain ? (\n <line stroke=\"black\" strokeWidth={2} x1={0} x2={innerWidth} y1={yScale(0)} y2={yScale(0)} />\n ) : null} */}\n </g>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB;AAEA,SAAgB,YAAY,WAAW,cAAc;AACrD,SAAS,QAAQ,gBAAgB;AACjC,SAAS,YAAY,kBAAkB;AACvC,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AAC5B,MAAM,WAAW,MAAM;AAC5B,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAC3B,MAAI,MAAM;AAAU,WAAO;AAE3B,QAAM,MAAM,OAAsB;AAClC,QAAM,UAAU,OAAsB;AACtC,QAAM,QAAQ,OAAO,QAAQ,MAAM,aAAa,SAAS,EAAE;AAC3D,QAAM,oBAAoB,OAAO,WAAW,IAAI;AAChD,QAAM,EAAE,YAAY,KAAK,IAAI;AAC7B,YAAU,MAAM;AACd,UAAM,OAAO,SAAS,MAAM,EAAE,cAAc,CAAC;AAE7C,UAAM,OAAO,SAAS,MAAM,EACzB,WAAW,CAAC,MAAM,EAAE,EACpB,SAAS,OAAO,WAAW,CAAC,aAAa,CAAC,EAC1C,cAAc,CAAC;AAElB,QAAI,MAAM,cAAc,OAAO;AAC7B,YAAM,aAAa,MAAM,iBAAiB,MAAM,aAAa,CAAC,GAAG,OAAO,GAAG,MAAM,UAAU;AAC3F,WAAK,WAAW,UAAU;AAAA,IAC5B,OAAO;AACL,WAAK,WAAW,KAAK;AACrB,WAAK,WAAW,KAAK;AAAA,IACvB;AAEA,QAAI,YAAY;AACd,UAAI,OAAO,eAAe,UAAU;AAClC,cAAM,kBAAkB,mBAAmB,QAAQ,QAAQ;AAE3D,aAAK,WAAW,CAAC,MAAM,gBAAgB,UAAU,EAAE,CAAC,CAAC;AAAA,MACvD;AACA,UAAI,OAAO,eAAe,YAAY;AACpC,aAAK,WAAW,UAAU;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,SAAS,SAAS;AACpC,aAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AACjC,aAAO,IAAI,OAAO,EAAE,KAAK,IAAI;AAAA,IAS/B;AAAA,EACF,GAAG,CAAC,mBAAmB,aAAa,YAAY,YAAY,OAAO,MAAM,OAAO,MAAM,CAAC;AACvF,SACE,qBAAC;AAAA,IACC;AAAA,0BAAC;AAAA,QAAE,KAAK;AAAA,QACN,8BAAC;AAAA,UAAW;AAAA,UAAU,OAAO,MAAM;AAAA,UAAO,WAAU;AAAA,SAAY;AAAA,OAClE;AAAA,MAEA,oBAAC;AAAA,QAAW,KAAK;AAAA,OAAS;AAAA;AAAA,GAI5B;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -6,32 +6,27 @@ import { StyledAxis } from "../../styles";
|
|
|
6
6
|
import { ChartContext } from "../../ChartContext";
|
|
7
7
|
const AxisRight = () => {
|
|
8
8
|
const {
|
|
9
|
-
props: { y2Axis,
|
|
10
|
-
innerHeight,
|
|
9
|
+
props: { y2Axis, height },
|
|
11
10
|
innerWidth,
|
|
12
11
|
y2Scale,
|
|
13
|
-
|
|
12
|
+
setAxisRightRef
|
|
14
13
|
} = useContext(ChartContext);
|
|
15
14
|
if (!y2Axis)
|
|
16
15
|
return null;
|
|
16
|
+
const ticks = y2Scale.ticks?.(y2Axis.tickCount ?? height / 80);
|
|
17
17
|
const ref = useRef();
|
|
18
18
|
useEffect(() => {
|
|
19
19
|
const axis = axisRight(y2Scale).tickSizeOuter(0);
|
|
20
20
|
select(ref.current).call(axis);
|
|
21
21
|
}, [innerWidth, y2Scale]);
|
|
22
22
|
return /* @__PURE__ */ jsx("g", {
|
|
23
|
-
ref:
|
|
23
|
+
ref: setAxisRightRef,
|
|
24
24
|
transform: `translate(${innerWidth},0)`,
|
|
25
25
|
children: /* @__PURE__ */ jsx(StyledAxis, {
|
|
26
26
|
ref,
|
|
27
|
-
color: y2Axis.color
|
|
28
|
-
children: /* @__PURE__ */ jsx("text", {
|
|
29
|
-
className: "axis-label",
|
|
30
|
-
textAnchor: "middle",
|
|
31
|
-
transform: `translate(${-yAxisLabelOffset},${innerHeight / 2}) rotate(-90)`
|
|
32
|
-
})
|
|
27
|
+
color: y2Axis.color
|
|
33
28
|
})
|
|
34
|
-
});
|
|
29
|
+
}, ticks.toString());
|
|
35
30
|
};
|
|
36
31
|
export {
|
|
37
32
|
AxisRight
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Axis/AxisRight.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useEffect, useRef } from 'react';\nimport { select, axisRight } from 'd3';\nimport { StyledAxis } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useEffect, useMemo, useRef } from 'react';\nimport { select, axisRight } from 'd3';\nimport { StyledAxis, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\nexport const AxisRight = () => {\n const {\n props: { y2Axis, height },\n innerWidth,\n y2Scale,\n setAxisRightRef,\n } = useContext(ChartContext);\n if (!y2Axis) return null;\n\n const ticks = y2Scale.ticks?.(y2Axis.tickCount ?? height / 80);\n\n const ref = useRef();\n useEffect(() => {\n const axis = axisRight(y2Scale).tickSizeOuter(0);\n\n select(ref.current).call(axis);\n }, [innerWidth, y2Scale]);\n\n return (\n <g key={ticks.toString()} ref={setAxisRightRef} transform={`translate(${innerWidth},0)`}>\n <StyledAxis ref={ref} color={y2Axis.color} />\n </g>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,WAAoB,cAAc;AAC9D,SAAS,QAAQ,iBAAiB;AAClC,SAAS,kBAAmC;AAC5C,SAAS,oBAAoB;AACtB,MAAM,YAAY,MAAM;AAC7B,QAAM;AAAA,IACJ,OAAO,EAAE,QAAQ,OAAO;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAC3B,MAAI,CAAC;AAAQ,WAAO;AAEpB,QAAM,QAAQ,QAAQ,QAAQ,OAAO,aAAa,SAAS,EAAE;AAE7D,QAAM,MAAM,OAAO;AACnB,YAAU,MAAM;AACd,UAAM,OAAO,UAAU,OAAO,EAAE,cAAc,CAAC;AAE/C,WAAO,IAAI,OAAO,EAAE,KAAK,IAAI;AAAA,EAC/B,GAAG,CAAC,YAAY,OAAO,CAAC;AAExB,SACE,oBAAC;AAAA,IAAyB,KAAK;AAAA,IAAiB,WAAW,aAAa;AAAA,IACtE,8BAAC;AAAA,MAAW;AAAA,MAAU,OAAO,OAAO;AAAA,KAAO;AAAA,KADrC,MAAM,SAAS,CAEvB;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useContext, useCallback } from "react";
|
|
3
|
+
import { useContext, useMemo, useCallback, useEffect } from "react";
|
|
4
4
|
import { StyledSVGWrapper } from "../styles";
|
|
5
5
|
import { ChartContext } from "../ChartContext";
|
|
6
6
|
import { useKeyboardNavigation } from "../config/useKeyboardNavigation";
|
|
7
7
|
import { Legend } from "./Legend/Legend";
|
|
8
|
+
import { Label } from "./Labels/Label";
|
|
8
9
|
const ChartContainer = ({ children }) => {
|
|
9
10
|
const {
|
|
10
11
|
props: { width, height },
|
|
@@ -18,12 +19,15 @@ const ChartContainer = ({ children }) => {
|
|
|
18
19
|
setIsGrabbed,
|
|
19
20
|
startPosition,
|
|
20
21
|
innerWidth,
|
|
22
|
+
innerHeight,
|
|
21
23
|
setActivePoint,
|
|
22
24
|
setXScrollbarPosition,
|
|
23
25
|
xScrollbarPosition,
|
|
24
26
|
containerRatio,
|
|
25
27
|
oldLastPosition,
|
|
26
|
-
setIsScrollbarVisible
|
|
28
|
+
setIsScrollbarVisible,
|
|
29
|
+
chartId,
|
|
30
|
+
yScale
|
|
27
31
|
} = useContext(ChartContext);
|
|
28
32
|
const { onInputKeyDown, handleOnBlur, handleOnFocus } = useKeyboardNavigation();
|
|
29
33
|
const onMouseEnterHandler = useCallback(() => {
|
|
@@ -39,7 +43,7 @@ const ChartContainer = ({ children }) => {
|
|
|
39
43
|
(e) => {
|
|
40
44
|
if (!isGrabbed)
|
|
41
45
|
return;
|
|
42
|
-
setActivePoint(
|
|
46
|
+
setActivePoint(null);
|
|
43
47
|
const newPosition = oldLastPosition?.current + e.clientX - startPosition;
|
|
44
48
|
if (newPosition < 0)
|
|
45
49
|
setXScrollbarPosition(0);
|
|
@@ -54,7 +58,16 @@ const ChartContainer = ({ children }) => {
|
|
|
54
58
|
oldLastPosition.current = xScrollbarPosition;
|
|
55
59
|
setIsGrabbed(false);
|
|
56
60
|
}, [oldLastPosition, setIsGrabbed, xScrollbarPosition]);
|
|
57
|
-
const key =
|
|
61
|
+
const key = useMemo(
|
|
62
|
+
() => `translate(${internalMargin.left},${internalMargin.top},${internalMargin.right})`,
|
|
63
|
+
[internalMargin]
|
|
64
|
+
);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
containerRef?.current?.addEventListener("mousemove", handleMouseMove);
|
|
67
|
+
return () => {
|
|
68
|
+
containerRef?.current?.removeEventListener("mousemove", handleMouseMove);
|
|
69
|
+
};
|
|
70
|
+
}, [containerRef, handleMouseMove]);
|
|
58
71
|
return /* @__PURE__ */ jsx(StyledSVGWrapper, {
|
|
59
72
|
ref: containerRef,
|
|
60
73
|
onKeyDown: onInputKeyDown,
|
|
@@ -64,27 +77,63 @@ const ChartContainer = ({ children }) => {
|
|
|
64
77
|
onFocus: handleOnFocus,
|
|
65
78
|
onMouseEnter: onMouseEnterHandler,
|
|
66
79
|
onMouseLeave: onMouseLeaveHandler,
|
|
67
|
-
onMouseMove: handleMouseMove,
|
|
68
80
|
onMouseUp: handleMouseUp,
|
|
69
81
|
onMouseDown: (e) => e.preventDefault(),
|
|
70
82
|
isGrabbed,
|
|
71
83
|
style: { width },
|
|
72
|
-
children: /* @__PURE__ */
|
|
84
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
73
85
|
ref: svgRef,
|
|
74
86
|
width,
|
|
75
87
|
height,
|
|
76
|
-
children:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
children: /* @__PURE__ */ jsxs("g", {
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ jsxs("g", {
|
|
91
|
+
children: [
|
|
92
|
+
/* @__PURE__ */ jsx(Legend, {}),
|
|
93
|
+
/* @__PURE__ */ jsx(Label, {})
|
|
94
|
+
]
|
|
95
|
+
}),
|
|
96
|
+
/* @__PURE__ */ jsx("g", {
|
|
97
|
+
className: "container",
|
|
98
|
+
transform: `translate(${internalMargin.left},${internalMargin.top})`,
|
|
99
|
+
children
|
|
100
|
+
}),
|
|
101
|
+
/* @__PURE__ */ jsx("defs", {
|
|
102
|
+
children: /* @__PURE__ */ jsx("clipPath", {
|
|
103
|
+
id: `rect-focus-ring-${chartId}`,
|
|
104
|
+
children: /* @__PURE__ */ jsx("rect", {
|
|
105
|
+
width: innerWidth * containerRatio,
|
|
106
|
+
height: innerHeight + 4,
|
|
107
|
+
y: -4
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ jsx("defs", {
|
|
112
|
+
children: /* @__PURE__ */ jsx("clipPath", {
|
|
113
|
+
id: `rects-positive-${chartId}`,
|
|
114
|
+
children: /* @__PURE__ */ jsx("rect", {
|
|
115
|
+
width: innerWidth * containerRatio,
|
|
116
|
+
height: yScale(0) + 8,
|
|
117
|
+
y: -8,
|
|
118
|
+
x: -10
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
}),
|
|
122
|
+
innerHeight - yScale(0) > 0 ? /* @__PURE__ */ jsx("defs", {
|
|
123
|
+
children: /* @__PURE__ */ jsx("clipPath", {
|
|
124
|
+
id: `rects-negative-${chartId}`,
|
|
125
|
+
children: /* @__PURE__ */ jsx("rect", {
|
|
126
|
+
width: innerWidth * containerRatio,
|
|
127
|
+
height: innerHeight - yScale(0),
|
|
128
|
+
x: -10,
|
|
129
|
+
y: yScale(0)
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
}) : null
|
|
133
|
+
]
|
|
134
|
+
}, key)
|
|
86
135
|
})
|
|
87
|
-
}
|
|
136
|
+
});
|
|
88
137
|
};
|
|
89
138
|
export {
|
|
90
139
|
ChartContainer
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/parts/ChartContainer.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useCallback,
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo, useCallback, useEffect } from 'react';\nimport { StyledSVGWrapper } from '../styles';\n\nimport { ChartContext } from '../ChartContext';\nimport { useKeyboardNavigation } from '../config/useKeyboardNavigation';\nimport { Legend } from './Legend/Legend';\nimport { Label } from './Labels/Label';\ninterface ChartContainerT {\n children: JSX.Element | JSX.Element[] | string | string[];\n}\nexport const ChartContainer: React.ComponentType<ChartContainerT> = ({ children }) => {\n const {\n props: { width, height },\n containerRef,\n activePoint,\n internalMargin,\n setScrapperPosY,\n setScrapperPosX,\n svgRef,\n isGrabbed,\n setIsGrabbed,\n startPosition,\n innerWidth,\n innerHeight,\n setActivePoint,\n setXScrollbarPosition,\n xScrollbarPosition,\n containerRatio,\n oldLastPosition,\n setIsScrollbarVisible,\n chartId,\n yScale,\n } = useContext(ChartContext);\n\n const { onInputKeyDown, handleOnBlur, handleOnFocus } = useKeyboardNavigation();\n\n const onMouseEnterHandler = useCallback(() => {\n setIsScrollbarVisible(true);\n }, [setIsScrollbarVisible]);\n const onMouseLeaveHandler = useCallback(() => {\n setScrapperPosY('');\n setScrapperPosX('');\n setIsScrollbarVisible(false);\n setIsGrabbed(false);\n }, [setIsGrabbed, setIsScrollbarVisible, setScrapperPosX, setScrapperPosY]);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n if (!isGrabbed) return;\n setActivePoint(null);\n const newPosition = oldLastPosition?.current + e.clientX - startPosition;\n if (newPosition < 0) setXScrollbarPosition(0);\n else if (newPosition > innerWidth - innerWidth / containerRatio)\n setXScrollbarPosition(innerWidth - innerWidth / containerRatio);\n else setXScrollbarPosition(newPosition);\n },\n [isGrabbed, setActivePoint, oldLastPosition, startPosition, setXScrollbarPosition, innerWidth, containerRatio],\n );\n const handleMouseUp = useCallback(() => {\n oldLastPosition.current = xScrollbarPosition;\n setIsGrabbed(false);\n }, [oldLastPosition, setIsGrabbed, xScrollbarPosition]);\n const key = useMemo(\n () => `translate(${internalMargin.left},${internalMargin.top},${internalMargin.right})`,\n [internalMargin],\n );\n\n useEffect(() => {\n containerRef?.current?.addEventListener('mousemove', handleMouseMove);\n // containerRef?.current?.addEventListener('wheel', handleScroll);\n\n return () => {\n containerRef?.current?.removeEventListener('mousemove', handleMouseMove);\n // containerRef?.current?.removeEventListener('wheel', handleScroll);\n };\n }, [containerRef, handleMouseMove]);\n\n return (\n <StyledSVGWrapper\n ref={containerRef}\n onKeyDown={onInputKeyDown}\n aria-hidden=\"true\"\n tabIndex={activePoint ? -1 : 0}\n onBlur={handleOnBlur}\n onFocus={handleOnFocus}\n onMouseEnter={onMouseEnterHandler}\n onMouseLeave={onMouseLeaveHandler}\n // // onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseDown={(e) => e.preventDefault()}\n isGrabbed={isGrabbed}\n style={{ width }}\n >\n <svg ref={svgRef} width={width} height={height}>\n <g key={key}>\n <g>\n <Legend />\n <Label />\n </g>\n <g className=\"container\" transform={`translate(${internalMargin.left},${internalMargin.top})`}>\n {children}\n </g>\n {/* @todo we need to put this somewhere. this will clip the focus ring bottom line */}\n <defs>\n <clipPath id={`rect-focus-ring-${chartId}`}>\n <rect width={innerWidth * containerRatio} height={innerHeight + 4} y={-4} />\n </clipPath>\n </defs>\n <defs>\n <clipPath id={`rects-positive-${chartId}`}>\n <rect width={innerWidth * containerRatio} height={yScale(0) + 8} y={-8} x={-10} />\n </clipPath>\n </defs>\n {innerHeight - yScale(0) > 0 ? (\n <defs>\n <clipPath id={`rects-negative-${chartId}`}>\n <rect width={innerWidth * containerRatio} height={innerHeight - yScale(0)} x={-10} y={yScale(0)} />\n </clipPath>\n </defs>\n ) : null}\n </g>\n </svg>\n </StyledSVGWrapper>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,88 +1,37 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState,
|
|
3
|
+
import { useState, useContext, useMemo } from "react";
|
|
4
4
|
import { DSPopperJS } from "@elliemae/ds-popperjs";
|
|
5
|
-
import { ThemeContext
|
|
6
|
-
import {
|
|
7
|
-
import { StyleFocusableRegion } from "../styles";
|
|
8
|
-
const StyledTooltipContainer = styled.div`
|
|
9
|
-
text-align: center;
|
|
10
|
-
min-width: ${({ theme }) => theme.space.l};
|
|
11
|
-
max-width: 250px;
|
|
12
|
-
min-height: 30px;
|
|
13
|
-
display: grid;
|
|
14
|
-
align-items: center;
|
|
15
|
-
padding: ${({ theme }) => `${theme.space.xxxs} ${theme.space.xs}`};
|
|
16
|
-
position: relative;
|
|
17
|
-
background-color: white;
|
|
18
|
-
border-radius: 2px;
|
|
19
|
-
font-size: 13px;
|
|
20
|
-
color: ${({ theme }) => theme.colors.neutral[600]};
|
|
21
|
-
`;
|
|
22
|
-
const StyledMouseOverDetectionBox = styled.div`
|
|
23
|
-
position: absolute;
|
|
24
|
-
top: -15px;
|
|
25
|
-
right: -15px;
|
|
26
|
-
width: calc(100% + 30px);
|
|
27
|
-
height: calc(100% + 30px);
|
|
28
|
-
z-index: -1;
|
|
29
|
-
`;
|
|
5
|
+
import { ThemeContext } from "@elliemae/ds-system";
|
|
6
|
+
import { StyledTooltipContainer, StyledMouseOverDetectionBox } from "../styles";
|
|
30
7
|
const FocusableRegion = (props) => {
|
|
31
|
-
const { activePoint } = useContext(ChartContext);
|
|
32
8
|
const [referenceElement, setReferenceElement] = useState();
|
|
33
9
|
const theme = useContext(ThemeContext);
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
focusableElement.current = newRef;
|
|
42
|
-
if (isFocused)
|
|
43
|
-
newRef?.focus();
|
|
44
|
-
},
|
|
45
|
-
[isFocused]
|
|
46
|
-
);
|
|
47
|
-
const onMouseEnter = () => {
|
|
48
|
-
setShowPopover(true);
|
|
49
|
-
};
|
|
50
|
-
const onMouseLeave = () => {
|
|
51
|
-
setShowPopover(false);
|
|
52
|
-
};
|
|
53
|
-
const onFocus = () => {
|
|
54
|
-
setShowPopover(true);
|
|
55
|
-
};
|
|
56
|
-
const onBlur = () => {
|
|
57
|
-
setShowPopover(false);
|
|
58
|
-
};
|
|
59
|
-
return /* @__PURE__ */ jsx("foreignObject", {
|
|
60
|
-
...rest,
|
|
61
|
-
onFocus,
|
|
62
|
-
onBlur,
|
|
63
|
-
ref: setReferenceElement,
|
|
64
|
-
children: /* @__PURE__ */ jsxs("div", {
|
|
65
|
-
children: [
|
|
66
|
-
/* @__PURE__ */ jsx(StyleFocusableRegion, {
|
|
67
|
-
s: pointRadius,
|
|
68
|
-
tabIndex: -1,
|
|
69
|
-
ref: handleRef
|
|
70
|
-
}),
|
|
71
|
-
showPopover && /* @__PURE__ */ jsxs(DSPopperJS, {
|
|
10
|
+
const { content, ...rest } = props;
|
|
11
|
+
return useMemo(
|
|
12
|
+
() => /* @__PURE__ */ jsx("foreignObject", {
|
|
13
|
+
...rest,
|
|
14
|
+
ref: setReferenceElement,
|
|
15
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
16
|
+
children: /* @__PURE__ */ jsxs(DSPopperJS, {
|
|
72
17
|
withoutAnimation: true,
|
|
73
18
|
referenceElement,
|
|
74
|
-
showPopover,
|
|
19
|
+
showPopover: true,
|
|
75
20
|
zIndex: theme.zIndex.tooltip,
|
|
76
21
|
children: [
|
|
77
22
|
/* @__PURE__ */ jsx(StyledMouseOverDetectionBox, {}),
|
|
78
23
|
/* @__PURE__ */ jsx(StyledTooltipContainer, {
|
|
24
|
+
"aria-live": "polite",
|
|
25
|
+
"aria-atomic": "false",
|
|
26
|
+
"aria-relevant": "additions text",
|
|
79
27
|
children: content
|
|
80
28
|
})
|
|
81
29
|
]
|
|
82
30
|
})
|
|
83
|
-
|
|
84
|
-
})
|
|
85
|
-
|
|
31
|
+
})
|
|
32
|
+
}),
|
|
33
|
+
[content, referenceElement, rest, theme.zIndex.tooltip]
|
|
34
|
+
);
|
|
86
35
|
};
|
|
87
36
|
export {
|
|
88
37
|
FocusableRegion
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/parts/FocusableRegion.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport React, { useState,
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB;AACA,SAAgB,UAAU,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport React, { useState, useContext, useMemo } from 'react';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport { ThemeContext } from '@elliemae/ds-system';\n\nimport { StyledTooltipContainer, StyledMouseOverDetectionBox } from '../styles';\n\nexport const FocusableRegion: React.ComponentType<any> = (props) => {\n const [referenceElement, setReferenceElement] = useState<HTMLSpanElement | null>();\n const theme = useContext(ThemeContext);\n\n const { content, ...rest } = props;\n\n return useMemo(\n () => (\n <foreignObject {...rest} ref={setReferenceElement}>\n <div>\n <DSPopperJS withoutAnimation referenceElement={referenceElement} showPopover zIndex={theme.zIndex.tooltip}>\n <StyledMouseOverDetectionBox />\n <StyledTooltipContainer aria-live=\"polite\" aria-atomic=\"false\" aria-relevant=\"additions text\">\n {content}\n </StyledTooltipContainer>\n </DSPopperJS>\n </div>\n </foreignObject>\n ),\n [content, referenceElement, rest, theme.zIndex.tooltip],\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB;AACA,SAAgB,UAAU,YAAY,eAAe;AACrD,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAE7B,SAAS,wBAAwB,mCAAmC;AAE7D,MAAM,kBAA4C,CAAC,UAAU;AAClE,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAiC;AACjF,QAAM,QAAQ,WAAW,YAAY;AAErC,QAAM,EAAE,YAAY,KAAK,IAAI;AAE7B,SAAO;AAAA,IACL,MACE,oBAAC;AAAA,MAAe,GAAG;AAAA,MAAM,KAAK;AAAA,MAC5B,8BAAC;AAAA,QACC,+BAAC;AAAA,UAAW,kBAAgB;AAAA,UAAC;AAAA,UAAoC,aAAW;AAAA,UAAC,QAAQ,MAAM,OAAO;AAAA,UAChG;AAAA,gCAAC,+BAA4B;AAAA,YAC7B,oBAAC;AAAA,cAAuB,aAAU;AAAA,cAAS,eAAY;AAAA,cAAQ,iBAAc;AAAA,cAC1E;AAAA,aACH;AAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IAEF,CAAC,SAAS,kBAAkB,MAAM,MAAM,OAAO,OAAO;AAAA,EACxD;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useContext } from "react";
|
|
4
|
+
import { ChartContext } from "../../ChartContext";
|
|
5
|
+
import { StyledAxisLabel } from "../../styles";
|
|
6
|
+
const BottomLabel = () => {
|
|
7
|
+
const {
|
|
8
|
+
internalMargin,
|
|
9
|
+
setBottomLabel,
|
|
10
|
+
innerHeight,
|
|
11
|
+
innerWidth,
|
|
12
|
+
props: { xAxis }
|
|
13
|
+
} = useContext(ChartContext);
|
|
14
|
+
return /* @__PURE__ */ jsx("g", {
|
|
15
|
+
ref: setBottomLabel,
|
|
16
|
+
transform: `translate(${innerWidth / 2 + internalMargin.left},${innerHeight + internalMargin.top})`,
|
|
17
|
+
children: /* @__PURE__ */ jsx(StyledAxisLabel, {
|
|
18
|
+
className: "axis-label",
|
|
19
|
+
textAnchor: "middle",
|
|
20
|
+
dy: 35,
|
|
21
|
+
children: xAxis?.label
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
BottomLabel
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=BottomLabel.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Labels/BottomLabel.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo } from 'react';\nimport { ChartContext } from '../../ChartContext';\nimport { StyledAxisLabel } from '../../styles';\n\nexport const BottomLabel = () => {\n const {\n internalMargin,\n setBottomLabel,\n innerHeight,\n innerWidth,\n props: { xAxis },\n } = useContext(ChartContext);\n\n return (\n <g\n ref={setBottomLabel}\n transform={`translate(${innerWidth / 2 + internalMargin.left},${innerHeight + internalMargin.top})`}\n >\n <StyledAxisLabel className=\"axis-label\" textAnchor=\"middle\" dy={35}>\n {xAxis?.label}\n </StyledAxisLabel>\n </g>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,kBAA2B;AAC3C,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAEzB,MAAM,cAAc,MAAM;AAC/B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,MAAM;AAAA,EACjB,IAAI,WAAW,YAAY;AAE3B,SACE,oBAAC;AAAA,IACC,KAAK;AAAA,IACL,WAAW,aAAa,aAAa,IAAI,eAAe,QAAQ,cAAc,eAAe;AAAA,IAE7F,8BAAC;AAAA,MAAgB,WAAU;AAAA,MAAa,YAAW;AAAA,MAAS,IAAI;AAAA,MAC7D,iBAAO;AAAA,KACV;AAAA,GACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|