@neo4j-ndl/react 3.0.18 → 3.0.20
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/lib/cjs/charts/CartesianGrid.js +49 -15
- package/lib/cjs/charts/CartesianGrid.js.map +1 -1
- package/lib/cjs/charts/Chart.js +62 -60
- package/lib/cjs/charts/Chart.js.map +1 -1
- package/lib/cjs/charts/ChartTooltip.js +5 -6
- package/lib/cjs/charts/ChartTooltip.js.map +1 -1
- package/lib/cjs/charts/Charts.js +33 -13
- package/lib/cjs/charts/Charts.js.map +1 -1
- package/lib/cjs/charts/HollowDot.js +27 -4
- package/lib/cjs/charts/HollowDot.js.map +1 -1
- package/lib/cjs/charts/Line.js +1 -1
- package/lib/cjs/charts/Line.js.map +1 -1
- package/lib/cjs/charts/axis/XAxis.js +205 -0
- package/lib/cjs/charts/axis/XAxis.js.map +1 -0
- package/lib/cjs/charts/axis/YAxis.js +170 -0
- package/lib/cjs/charts/axis/YAxis.js.map +1 -0
- package/lib/cjs/charts/axis/chart-axis-utils.js +42 -0
- package/lib/cjs/charts/axis/chart-axis-utils.js.map +1 -0
- package/lib/cjs/charts/axis/chart-tick-generation.js +245 -0
- package/lib/cjs/charts/axis/chart-tick-generation.js.map +1 -0
- package/lib/cjs/dialog/Dialog.js.map +1 -1
- package/lib/cjs/popover/Popover.js +2 -1
- package/lib/cjs/popover/Popover.js.map +1 -1
- package/lib/cjs/popover/use-popover.js +7 -2
- package/lib/cjs/popover/use-popover.js.map +1 -1
- package/lib/esm/charts/CartesianGrid.js +49 -15
- package/lib/esm/charts/CartesianGrid.js.map +1 -1
- package/lib/esm/charts/Chart.js +63 -61
- package/lib/esm/charts/Chart.js.map +1 -1
- package/lib/esm/charts/ChartTooltip.js +5 -6
- package/lib/esm/charts/ChartTooltip.js.map +1 -1
- package/lib/esm/charts/Charts.js +32 -12
- package/lib/esm/charts/Charts.js.map +1 -1
- package/lib/esm/charts/HollowDot.js +4 -4
- package/lib/esm/charts/HollowDot.js.map +1 -1
- package/lib/esm/charts/Line.js +1 -1
- package/lib/esm/charts/Line.js.map +1 -1
- package/lib/esm/charts/axis/XAxis.js +176 -0
- package/lib/esm/charts/axis/XAxis.js.map +1 -0
- package/lib/esm/charts/axis/YAxis.js +164 -0
- package/lib/esm/charts/axis/YAxis.js.map +1 -0
- package/lib/esm/charts/axis/chart-axis-utils.js +38 -0
- package/lib/esm/charts/axis/chart-axis-utils.js.map +1 -0
- package/lib/esm/charts/axis/chart-tick-generation.js +217 -0
- package/lib/esm/charts/axis/chart-tick-generation.js.map +1 -0
- package/lib/esm/dialog/Dialog.js.map +1 -1
- package/lib/esm/popover/Popover.js +2 -1
- package/lib/esm/popover/Popover.js.map +1 -1
- package/lib/esm/popover/use-popover.js +8 -3
- package/lib/esm/popover/use-popover.js.map +1 -1
- package/lib/types/charts/CartesianGrid.d.ts +3 -1
- package/lib/types/charts/Chart.d.ts +0 -2
- package/lib/types/charts/ChartTooltip.d.ts +4 -1
- package/lib/types/charts/Charts.d.ts +11 -3
- package/lib/types/charts/HollowDot.d.ts +3 -2
- package/lib/types/charts/axis/XAxis.d.ts +28 -0
- package/lib/types/charts/{Axis.d.ts → axis/YAxis.d.ts} +5 -14
- package/lib/types/charts/axis/chart-axis-utils.d.ts +33 -0
- package/lib/types/charts/axis/chart-tick-generation.d.ts +33 -0
- package/lib/types/popover/Popover.d.ts +6 -1
- package/lib/types/popover/use-popover.d.ts +5 -1
- package/package.json +2 -2
- package/lib/cjs/charts/Axis.js +0 -216
- package/lib/cjs/charts/Axis.js.map +0 -1
- package/lib/esm/charts/Axis.js +0 -187
- package/lib/esm/charts/Axis.js.map +0 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) "Neo4j"
|
|
5
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
6
|
+
*
|
|
7
|
+
* This file is part of Neo4j.
|
|
8
|
+
*
|
|
9
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
10
|
+
* it under the terms of the GNU General Public License as published by
|
|
11
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
12
|
+
* (at your option) any later version.
|
|
13
|
+
*
|
|
14
|
+
* This program is distributed in the hope that it will be useful,
|
|
15
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17
|
+
* GNU General Public License for more details.
|
|
18
|
+
*
|
|
19
|
+
* You should have received a copy of the GNU General Public License
|
|
20
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
21
|
+
*/
|
|
22
|
+
import React, { forwardRef, useContext, useEffect, useMemo, useRef, useState, useImperativeHandle, } from 'react';
|
|
23
|
+
import classNames from 'classnames';
|
|
24
|
+
import { useDebounceCallback, useResizeObserver } from 'usehooks-ts';
|
|
25
|
+
import { Typography } from '../../typography';
|
|
26
|
+
import { ChartsChartContext } from '../Chart';
|
|
27
|
+
import * as d3 from 'd3';
|
|
28
|
+
import { generateAxisTicks } from './chart-axis-utils';
|
|
29
|
+
import { getTickLabelFormatterForDate } from './chart-tick-generation';
|
|
30
|
+
import { ChartsContext } from '../Charts';
|
|
31
|
+
const domainStrokeWidth = 2;
|
|
32
|
+
const tickLength = domainStrokeWidth + 8;
|
|
33
|
+
const marginBetweenTickAndLabel = tickLength + 8;
|
|
34
|
+
const height = '2';
|
|
35
|
+
const XAxisComponent = forwardRef(function XAxis({ position, title, labelFormat: labelFormatProp, scale: scaleId, shouldRotateTicks, }, ref) {
|
|
36
|
+
var _a, _b, _c, _d, _e;
|
|
37
|
+
const classes = useMemo(() => classNames('ndl-charts-chart-axis', 'ndl-charts-chart-axis-x', {
|
|
38
|
+
'ndl-charts-chart-axis-top': position === 'top',
|
|
39
|
+
'ndl-charts-chart-axis-bottom': position === 'bottom',
|
|
40
|
+
}), [position]);
|
|
41
|
+
const svgRef = useRef(null);
|
|
42
|
+
const chartsChartContextValue = useContext(ChartsChartContext);
|
|
43
|
+
const setScalerGridLines = useContext(ChartsContext).setScalerGridLines;
|
|
44
|
+
const xAxisRef = useRef(null);
|
|
45
|
+
const [largestTextWidth, setLargestTextWidth] = useState(50);
|
|
46
|
+
const prevDomain = useRef([0, 1]);
|
|
47
|
+
const prevRange = useRef([0, 1]);
|
|
48
|
+
const containerRef = useRef(null);
|
|
49
|
+
const scale = (_a = chartsChartContextValue === null || chartsChartContextValue === void 0 ? void 0 : chartsChartContextValue.scales) === null || _a === void 0 ? void 0 : _a[scaleId];
|
|
50
|
+
const [ticks, setTicks] = useState([]);
|
|
51
|
+
useImperativeHandle(ref, () => {
|
|
52
|
+
const svgChart = containerRef.current;
|
|
53
|
+
if (!svgChart) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return svgChart;
|
|
57
|
+
});
|
|
58
|
+
const onResize = useDebounceCallback(() => {
|
|
59
|
+
var _a;
|
|
60
|
+
// Get text element widths
|
|
61
|
+
const textElements = (_a = svgRef.current) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('text');
|
|
62
|
+
if (!textElements || textElements.length === 0)
|
|
63
|
+
return;
|
|
64
|
+
// Calculate largest text width
|
|
65
|
+
const textWidths = Array.from(textElements).map((current) => {
|
|
66
|
+
const currentWidth = Math.ceil(current.getBoundingClientRect().width);
|
|
67
|
+
return currentWidth;
|
|
68
|
+
});
|
|
69
|
+
setLargestTextWidth(Math.max(...textWidths));
|
|
70
|
+
// Check for overlapping text elements
|
|
71
|
+
const hasOverlap = Array.from(textElements)
|
|
72
|
+
.slice(0, -1)
|
|
73
|
+
.some((current, i) => {
|
|
74
|
+
const next = textElements[i + 1];
|
|
75
|
+
// Temporarily remove transforms to check raw positions
|
|
76
|
+
const currentTransform = current.style.transform;
|
|
77
|
+
const nextTransform = next.style.transform;
|
|
78
|
+
current.style.transform = '';
|
|
79
|
+
next.style.transform = '';
|
|
80
|
+
// Get bounding boxes
|
|
81
|
+
const currentBox = current.getBoundingClientRect();
|
|
82
|
+
const nextBox = next.getBoundingClientRect();
|
|
83
|
+
// Restore transforms
|
|
84
|
+
current.style.transform = currentTransform;
|
|
85
|
+
next.style.transform = nextTransform;
|
|
86
|
+
// Check for overlap with padding
|
|
87
|
+
const padding = 12;
|
|
88
|
+
return !(currentBox.right < nextBox.left - padding ||
|
|
89
|
+
currentBox.left > nextBox.right + padding ||
|
|
90
|
+
currentBox.bottom < nextBox.top ||
|
|
91
|
+
currentBox.top > nextBox.bottom);
|
|
92
|
+
});
|
|
93
|
+
// Apply rotated or normal styles based on overlap
|
|
94
|
+
const transform = hasOverlap || shouldRotateTicks
|
|
95
|
+
? 'rotate(315deg) translate(-10px, -10px)'
|
|
96
|
+
: 'none';
|
|
97
|
+
const anchor = hasOverlap || shouldRotateTicks ? 'end' : 'middle';
|
|
98
|
+
Array.from(textElements).forEach((el) => {
|
|
99
|
+
el.style.transform = transform;
|
|
100
|
+
el.style.textAnchor = anchor;
|
|
101
|
+
});
|
|
102
|
+
// Update SVG height to fit rotated text
|
|
103
|
+
if (svgRef.current) {
|
|
104
|
+
const maxHeight = Math.max(...Array.from(textElements).map((el) => el.getBoundingClientRect().height));
|
|
105
|
+
svgRef.current.setAttribute('height', `${maxHeight + 12}px`);
|
|
106
|
+
}
|
|
107
|
+
}, 200);
|
|
108
|
+
useResizeObserver({
|
|
109
|
+
ref: containerRef,
|
|
110
|
+
onResize: () => onResize(),
|
|
111
|
+
});
|
|
112
|
+
const xScale = scale === null || scale === void 0 ? void 0 : scale.functionWithContentWidthAsRange;
|
|
113
|
+
/* @ts-expect-error we don't have the correct type for the tick values */
|
|
114
|
+
const labelFormat = useMemo(() => {
|
|
115
|
+
if (labelFormatProp) {
|
|
116
|
+
return labelFormatProp;
|
|
117
|
+
}
|
|
118
|
+
else if (xScale.domain()[0] instanceof Date &&
|
|
119
|
+
xScale.domain()[1] instanceof Date) {
|
|
120
|
+
return getTickLabelFormatterForDate(xScale.domain()[0], xScale.domain()[1]);
|
|
121
|
+
}
|
|
122
|
+
else if (xScale === undefined) {
|
|
123
|
+
return (dataPoint) => dataPoint.toString();
|
|
124
|
+
}
|
|
125
|
+
return xScale.tickFormat();
|
|
126
|
+
}, [labelFormatProp, xScale]);
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
const AxisRefCurrent = xAxisRef.current;
|
|
129
|
+
if (AxisRefCurrent === null || xScale === undefined) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const xAxis = d3
|
|
133
|
+
.axisBottom(xScale)
|
|
134
|
+
.tickValues([xScale.domain()[0], ...xScale.ticks(), xScale.domain()[1]]); // Ensure the start and end ticks
|
|
135
|
+
xAxis.tickPadding(8);
|
|
136
|
+
d3.select(AxisRefCurrent).call(xAxis);
|
|
137
|
+
return () => {
|
|
138
|
+
d3.select(AxisRefCurrent).selectAll('*').remove();
|
|
139
|
+
};
|
|
140
|
+
}, [xScale]);
|
|
141
|
+
const pixelsAvailable = (_c = (_b = chartsChartContextValue.contentSize) === null || _b === void 0 ? void 0 : _b.width) !== null && _c !== void 0 ? _c : 0;
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
const currentDomain = xScale.domain();
|
|
144
|
+
const currentRange = xScale.range();
|
|
145
|
+
const isDomainEqual = prevDomain.current[0] === currentDomain[0] &&
|
|
146
|
+
prevDomain.current[1] === currentDomain[1];
|
|
147
|
+
const isRangeEqual = prevRange.current[0] === currentRange[0] &&
|
|
148
|
+
prevRange.current[1] === currentRange[1];
|
|
149
|
+
if (!isDomainEqual || !isRangeEqual) {
|
|
150
|
+
const newTicks = generateAxisTicks({
|
|
151
|
+
scale: xScale,
|
|
152
|
+
pixelsAvailable,
|
|
153
|
+
largestTickSize: largestTextWidth,
|
|
154
|
+
});
|
|
155
|
+
setScalerGridLines(scaleId, newTicks);
|
|
156
|
+
setTicks(newTicks);
|
|
157
|
+
}
|
|
158
|
+
prevDomain.current = currentDomain;
|
|
159
|
+
prevRange.current = currentRange;
|
|
160
|
+
}, [scale, prevDomain, prevRange]);
|
|
161
|
+
if (xScale === undefined) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return (_jsxs("div", { ref: containerRef, className: classes, children: [position === 'top' && (_jsx(Typography, { className: "ndl-charts-chart-axis-title", variant: "body-medium", children: title })), _jsx("svg", { ref: svgRef, height: 31, children: _jsxs("g", { children: [_jsx("line", { x1: 0, x2: (_e = (_d = svgRef.current) === null || _d === void 0 ? void 0 : _d.getBoundingClientRect().width) !== null && _e !== void 0 ? _e : 0, y1: 0, y2: height, className: "domain" }), ticks.map((tick, index) => {
|
|
165
|
+
const x = xScale(tick);
|
|
166
|
+
return (_jsxs("g", { className: "tick", transform: `translate(${x} 0)`, children: [_jsx("text", { y: position === 'bottom'
|
|
167
|
+
? marginBetweenTickAndLabel + tickLength
|
|
168
|
+
: 0, textAnchor: "middle", fill: "currentColor", children: labelFormat(tick) }), _jsx("line", { y1: position === 'bottom'
|
|
169
|
+
? 0
|
|
170
|
+
: marginBetweenTickAndLabel + tickLength, y2: position === 'bottom'
|
|
171
|
+
? tickLength
|
|
172
|
+
: marginBetweenTickAndLabel, stroke: "currentColor" })] }, index));
|
|
173
|
+
})] }) }), position === 'bottom' && (_jsx(Typography, { className: "ndl-charts-chart-axis-title", variant: "body-medium", children: title }))] }));
|
|
174
|
+
});
|
|
175
|
+
export const XAxis = React.memo(XAxisComponent);
|
|
176
|
+
//# sourceMappingURL=XAxis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XAxis.js","sourceRoot":"","sources":["../../../../src/charts/axis/XAxis.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) "Neo4j"
|
|
5
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
6
|
+
*
|
|
7
|
+
* This file is part of Neo4j.
|
|
8
|
+
*
|
|
9
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
10
|
+
* it under the terms of the GNU General Public License as published by
|
|
11
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
12
|
+
* (at your option) any later version.
|
|
13
|
+
*
|
|
14
|
+
* This program is distributed in the hope that it will be useful,
|
|
15
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17
|
+
* GNU General Public License for more details.
|
|
18
|
+
*
|
|
19
|
+
* You should have received a copy of the GNU General Public License
|
|
20
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
21
|
+
*/
|
|
22
|
+
import { forwardRef, useContext, useMemo, useRef, useState, useImperativeHandle, useEffect, } from 'react';
|
|
23
|
+
import classNames from 'classnames';
|
|
24
|
+
import { useResizeObserver } from 'usehooks-ts';
|
|
25
|
+
import { Typography } from '../../typography';
|
|
26
|
+
import { ChartsChartContext } from '../Chart';
|
|
27
|
+
import { generateAxisTicks } from './chart-axis-utils';
|
|
28
|
+
import { ChartsContext } from '../Charts';
|
|
29
|
+
export const YAxis = forwardRef(function YAxis({ position, title, labelFormat: labelFormatProp, scale: scaleId, shouldRotateTicks, }, ref) {
|
|
30
|
+
var _a, _b, _c;
|
|
31
|
+
const [largestTextWidth, setLargestTextWidth] = useState(0);
|
|
32
|
+
const chartsChartContextValue = useContext(ChartsChartContext);
|
|
33
|
+
const scale = (_a = chartsChartContextValue === null || chartsChartContextValue === void 0 ? void 0 : chartsChartContextValue.scales) === null || _a === void 0 ? void 0 : _a[scaleId];
|
|
34
|
+
const svgRef = useRef(null);
|
|
35
|
+
const prevDomain = useRef([0, 1]);
|
|
36
|
+
const prevRange = useRef([0, 1]);
|
|
37
|
+
const [ticks, setTicks] = useState([]);
|
|
38
|
+
const setScalerGridLines = useContext(ChartsContext).setScalerGridLines;
|
|
39
|
+
const classes = useMemo(() => classNames('ndl-charts-chart-axis', 'ndl-charts-chart-axis-y', {
|
|
40
|
+
'ndl-charts-chart-axis-left': position === 'left',
|
|
41
|
+
'ndl-charts-chart-axis-right': position === 'right',
|
|
42
|
+
}), [position]);
|
|
43
|
+
const containerRef = useRef(null);
|
|
44
|
+
useImperativeHandle(ref, () => {
|
|
45
|
+
// console.info('Axis.tsx - useImperativeHandle');
|
|
46
|
+
const svgChart = containerRef.current;
|
|
47
|
+
if (!svgChart) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return svgChart;
|
|
51
|
+
});
|
|
52
|
+
const onResize = () => {
|
|
53
|
+
var _a;
|
|
54
|
+
if (svgRef.current === null) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const textElements = (_a = svgRef.current) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('text');
|
|
58
|
+
if (!textElements) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (shouldRotateTicks) {
|
|
62
|
+
Array.from(textElements).forEach((element) => {
|
|
63
|
+
element.style.transform = `rotate(315deg)`;
|
|
64
|
+
element.style.textAnchor = position === 'left' ? 'end' : 'start';
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
Array.from(textElements).forEach((element) => {
|
|
69
|
+
element.style.transform = '';
|
|
70
|
+
element.style.textAnchor = position === 'left' ? 'end' : 'start';
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// Wait for the rotation transform to be applied
|
|
74
|
+
requestAnimationFrame(() => {
|
|
75
|
+
// Now measure the rotated text widths
|
|
76
|
+
const textWidths = Array.from(textElements).map((element) => {
|
|
77
|
+
const bbox = element.getBoundingClientRect();
|
|
78
|
+
// For rotated text, we need to account for both width and height
|
|
79
|
+
return shouldRotateTicks
|
|
80
|
+
? Math.sqrt(Math.pow(bbox.width, 2) + Math.pow(bbox.height, 2))
|
|
81
|
+
: bbox.width;
|
|
82
|
+
});
|
|
83
|
+
if (textWidths.length === 0) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
setLargestTextWidth(Math.max(...textWidths));
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
useResizeObserver({
|
|
90
|
+
ref: containerRef,
|
|
91
|
+
onResize,
|
|
92
|
+
});
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
onResize();
|
|
95
|
+
}, [ticks]);
|
|
96
|
+
// the 14 is the height of the tick label, the 8 is the padding
|
|
97
|
+
const pixelsPerTick = 14 * (shouldRotateTicks ? 2 : 1) + 8;
|
|
98
|
+
const pixelsAvailable = (_c = (_b = chartsChartContextValue.contentSize) === null || _b === void 0 ? void 0 : _b.height) !== null && _c !== void 0 ? _c : 0;
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
const currentDomain = yScale.domain();
|
|
101
|
+
const currentRange = yScale.range();
|
|
102
|
+
const isDomainEqual = prevDomain.current[0] === currentDomain[0] &&
|
|
103
|
+
prevDomain.current[1] === currentDomain[1];
|
|
104
|
+
const isRangeEqual = prevRange.current[0] === currentRange[0] &&
|
|
105
|
+
prevRange.current[1] === currentRange[1];
|
|
106
|
+
if (pixelsAvailable === 0) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (!isDomainEqual || !isRangeEqual) {
|
|
110
|
+
const newTicks = generateAxisTicks({
|
|
111
|
+
scale: yScale,
|
|
112
|
+
pixelsAvailable,
|
|
113
|
+
largestTickSize: pixelsPerTick,
|
|
114
|
+
});
|
|
115
|
+
setScalerGridLines(scaleId, newTicks);
|
|
116
|
+
setTicks(newTicks);
|
|
117
|
+
prevDomain.current = currentDomain;
|
|
118
|
+
prevRange.current = currentRange;
|
|
119
|
+
}
|
|
120
|
+
}, [scale, prevDomain, prevRange, pixelsAvailable]);
|
|
121
|
+
//const yScale = scale?.function.copy().range(range);
|
|
122
|
+
const yScale = scale === null || scale === void 0 ? void 0 : scale.functionWithContentHeightAsRange;
|
|
123
|
+
//@ts-expect-error - this is a hack to get the yScale to work
|
|
124
|
+
const labelFormat = useMemo(() => {
|
|
125
|
+
var _a;
|
|
126
|
+
if (labelFormatProp) {
|
|
127
|
+
return labelFormatProp;
|
|
128
|
+
}
|
|
129
|
+
return (_a = yScale === null || yScale === void 0 ? void 0 : yScale.tickFormat()) !== null && _a !== void 0 ? _a : (() => '');
|
|
130
|
+
}, [labelFormatProp, yScale]);
|
|
131
|
+
/*useEffect(() => {
|
|
132
|
+
requestAnimationFrame(() => {
|
|
133
|
+
const newTicks = generateAxisTicks({
|
|
134
|
+
scale: yScale,
|
|
135
|
+
pixelsAvailable,
|
|
136
|
+
largestTickSize: pixelsPerTick,
|
|
137
|
+
});
|
|
138
|
+
setTicks(newTicks);
|
|
139
|
+
chartsContextValue.setScalerGridLines(scaleId, newTicks);
|
|
140
|
+
});
|
|
141
|
+
}, [
|
|
142
|
+
yScale,
|
|
143
|
+
pixelsAvailable,
|
|
144
|
+
pixelsPerTick,
|
|
145
|
+
position,
|
|
146
|
+
labelFormat,
|
|
147
|
+
chartsContextValue.setScalerGridLines,
|
|
148
|
+
scaleId,
|
|
149
|
+
]);*/
|
|
150
|
+
if (yScale === undefined) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return (_jsxs("div", { ref: containerRef, className: classes, style: { paddingLeft: '8px', paddingRight: '8px' }, children: [position === 'left' && (_jsx(Typography, { className: "ndl-charts-chart-axis-title", variant: "body-medium", children: title })), _jsx("svg", { style: {
|
|
154
|
+
position: 'relative',
|
|
155
|
+
width: largestTextWidth,
|
|
156
|
+
overflow: 'visible',
|
|
157
|
+
}, ref: svgRef, children: ticks.map((tick) => {
|
|
158
|
+
const y = yScale(tick);
|
|
159
|
+
return (_jsx("g", { className: "tick", transform: `translate(0 ${y})`, children: _jsx("text", { textAnchor: position === 'left' ? 'end' : 'start', x: position === 'left' ? '100%' : 0, dy: shouldRotateTicks ? '2.4em' : 0, dx: shouldRotateTicks ? '-1.6em' : 0, style: {
|
|
160
|
+
alignmentBaseline: 'middle',
|
|
161
|
+
}, children: labelFormat(tick) }) }, labelFormat(tick)));
|
|
162
|
+
}) }), position === 'right' && (_jsx(Typography, { className: "ndl-charts-chart-axis-title", variant: "body-medium", children: title }))] }));
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=YAxis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YAxis.js","sourceRoot":"","sources":["../../../../src/charts/axis/YAxis.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
import { ExtendedWilkinsonDate, ExtendedWilkinson, } from './chart-tick-generation';
|
|
22
|
+
export const generateAxisTicks = ({ scale, pixelsAvailable, largestTickSize, }) => {
|
|
23
|
+
var _a;
|
|
24
|
+
let tickCount = Math.floor(pixelsAvailable / largestTickSize); // Adjust the number of ticks based on width (example logic)
|
|
25
|
+
if (tickCount <= 0) {
|
|
26
|
+
tickCount = 1;
|
|
27
|
+
}
|
|
28
|
+
const domain = scale.domain();
|
|
29
|
+
if (domain[0] instanceof Date || domain[1] instanceof Date) {
|
|
30
|
+
const wilkinsonResult = ExtendedWilkinsonDate([domain[0], domain[1]], tickCount, true);
|
|
31
|
+
return wilkinsonResult.ticks;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const wilkinsonResult = ExtendedWilkinson([domain[0], domain[1]], tickCount, true);
|
|
35
|
+
return (_a = wilkinsonResult.ticks) !== null && _a !== void 0 ? _a : [];
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chart-axis-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-axis-utils.js","sourceRoot":"","sources":["../../../../src/charts/axis/chart-axis-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAUjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,KAAK,EACL,eAAe,EACf,eAAe,GAKhB,EAAE,EAAE;;IACH,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,4DAA4D;IAC3H,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,SAAS,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAE9B,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;QAC3D,MAAM,eAAe,GAAG,qBAAqB,CAC3C,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,MAAM,CAAC,CAAC,CAAS,CAAC,EACtC,SAAS,EACT,IAAI,CACL,CAAC;QACF,OAAO,eAAe,CAAC,KAAK,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,iBAAiB,CACvC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EACtB,SAAS,EACT,IAAI,CACL,CAAC;QACF,OAAO,MAAA,eAAe,CAAC,KAAK,mCAAI,EAAE,CAAC;IACrC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
/* This file implements the Extended Wilkinson algorithm for tick generation.
|
|
22
|
+
* It is based on the original implementation by @d3.
|
|
23
|
+
* https://github.com/d3/d3-axis/blob/main/src/tick.js
|
|
24
|
+
*
|
|
25
|
+
* The extended algorithm is described in "An Extension of Wilkinson’s Algorithm
|
|
26
|
+
* for Positioning Tick Labels on Axes" by Justin Talbot, Sharon Lin, Pat Hanrahan
|
|
27
|
+
*
|
|
28
|
+
* http://vis.stanford.edu/files/2010-TickLabels-InfoVis.pdf
|
|
29
|
+
*/
|
|
30
|
+
import * as d3 from 'd3';
|
|
31
|
+
function match(a, b) {
|
|
32
|
+
if (Array.isArray(a)) {
|
|
33
|
+
return a.map((d) => b.indexOf(d)).map((d) => (d > -1 ? d : null));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const index = b.indexOf(a);
|
|
37
|
+
return index > -1 ? [index + 1] : [null];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function simplicity(q, Q, j, lmin, lmax, lstep) {
|
|
41
|
+
var _a;
|
|
42
|
+
const eps = Number.EPSILON * 100;
|
|
43
|
+
const n = Q.length;
|
|
44
|
+
const i = (_a = match(q, Q)[0]) !== null && _a !== void 0 ? _a : 0;
|
|
45
|
+
const v = (lmin % lstep < eps || lstep - (lmin % lstep) < eps) &&
|
|
46
|
+
lmin <= 0 &&
|
|
47
|
+
lmin >= 0
|
|
48
|
+
? 1
|
|
49
|
+
: 0;
|
|
50
|
+
return 1 - (i - 1) / (n - 1) - j + v;
|
|
51
|
+
}
|
|
52
|
+
simplicity.max = (q, Q, j) => {
|
|
53
|
+
var _a;
|
|
54
|
+
const n = Q.length;
|
|
55
|
+
const i = (_a = match(q, Q)[0]) !== null && _a !== void 0 ? _a : 0;
|
|
56
|
+
const v = 1;
|
|
57
|
+
return 1 - (i - 1) / (n - 1) - j + v;
|
|
58
|
+
};
|
|
59
|
+
function coverage(dmin, dmax, lmin, lmax) {
|
|
60
|
+
const range = dmax - dmin;
|
|
61
|
+
return (1 -
|
|
62
|
+
(0.5 * (Math.pow(dmax - lmax, 2) + Math.pow(dmin - lmin, 2))) /
|
|
63
|
+
Math.pow(0.1 * range, 2));
|
|
64
|
+
}
|
|
65
|
+
coverage.max = (dmin, dmax, span) => {
|
|
66
|
+
const range = dmax - dmin;
|
|
67
|
+
if (span > range) {
|
|
68
|
+
const half = (span - range) / 2;
|
|
69
|
+
return (1 -
|
|
70
|
+
(0.5 * (Math.pow(half, 2) + Math.pow(half, 2))) / Math.pow(0.1 * range, 2));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
function density(k, m, dmin, dmax, lmin, lmax) {
|
|
77
|
+
const r = (k - 1) / (lmax - lmin);
|
|
78
|
+
const rt = (m - 1) / (Math.max(lmax, dmax) - Math.min(dmin, lmin));
|
|
79
|
+
return 2 - Math.max(r / rt, rt / r);
|
|
80
|
+
}
|
|
81
|
+
density.max = (k, m) => {
|
|
82
|
+
return k >= m ? 2 - (k - 1) / (m - 1) : 1;
|
|
83
|
+
};
|
|
84
|
+
// the arguments are not used, but they are kept for consistency with the original implementation
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
86
|
+
const legibility = (lmin, lmax, lstep) => 1;
|
|
87
|
+
export function ExtendedWilkinson([dmin, dmax], m, onlyLoose = false, Q = [1, 5, 2, 2.5, 4, 3], w = [0.25, 0.2, 0.5, 0.05], nice = true) {
|
|
88
|
+
const eps = Number.EPSILON * 100;
|
|
89
|
+
if (m <= 0) {
|
|
90
|
+
throw new Error('m must be greater than 0');
|
|
91
|
+
}
|
|
92
|
+
if (dmin > dmax) {
|
|
93
|
+
const temp = dmin;
|
|
94
|
+
dmin = dmax;
|
|
95
|
+
dmax = temp;
|
|
96
|
+
}
|
|
97
|
+
if (dmax - dmin < eps) {
|
|
98
|
+
return {
|
|
99
|
+
score: -2,
|
|
100
|
+
ticks: d3.range(dmin, dmax, (dmax - dmin) / m),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const best = { score: -2 };
|
|
104
|
+
let j = 1;
|
|
105
|
+
while (j < Infinity) {
|
|
106
|
+
for (const q of Q) {
|
|
107
|
+
const sm = simplicity.max(q, Q, j);
|
|
108
|
+
if (w[0] * sm + w[1] + w[2] + w[3] < best.score) {
|
|
109
|
+
j = Infinity;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
let k = 2;
|
|
113
|
+
while (k < Infinity) {
|
|
114
|
+
const dm = density.max(k, m);
|
|
115
|
+
if (w[0] * sm + w[1] + w[2] * dm + w[3] < best.score) {
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
const delta = (dmax - dmin) / (k + 1) / j / q;
|
|
119
|
+
let z = Math.ceil(Math.log10(delta));
|
|
120
|
+
while (z < Infinity) {
|
|
121
|
+
const step = j * q * Math.pow(10, z);
|
|
122
|
+
const cm = coverage.max(dmin, dmax, step * (k - 1));
|
|
123
|
+
if (w[0] * sm + w[1] * cm + w[2] * dm + w[3] < best.score) {
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
const min_start = Math.floor(dmax / step) * j - (k - 1) * j;
|
|
127
|
+
const max_start = Math.ceil(dmin / step) * j;
|
|
128
|
+
if (min_start > max_start) {
|
|
129
|
+
z += 1;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
for (let start = min_start; start <= max_start; start++) {
|
|
133
|
+
const lmin = start * (step / j);
|
|
134
|
+
const lmax = lmin + step * (k - 1);
|
|
135
|
+
const lstep = step;
|
|
136
|
+
const s = simplicity(q, Q, j, lmin, lmax, lstep);
|
|
137
|
+
const c = coverage(dmin, dmax, lmin, lmax);
|
|
138
|
+
const g = density(k, m, dmin, dmax, lmin, lmax);
|
|
139
|
+
const l = legibility(lmin, lmax, lstep);
|
|
140
|
+
const score = w[0] * s + w[1] * c + w[2] * g + w[3] * l;
|
|
141
|
+
if (score > best.score &&
|
|
142
|
+
(!onlyLoose || (lmin <= dmin && lmax >= dmax))) {
|
|
143
|
+
best.lmin = lmin;
|
|
144
|
+
best.lmax = lmax;
|
|
145
|
+
if (nice) {
|
|
146
|
+
best.lmin =
|
|
147
|
+
lmin < lmax
|
|
148
|
+
? Math.floor(dmin / lstep) * lstep
|
|
149
|
+
: Math.ceil(dmin / lstep) * lstep;
|
|
150
|
+
best.lmax =
|
|
151
|
+
lmax > lmin
|
|
152
|
+
? Math.ceil(dmax / lstep) * lstep
|
|
153
|
+
: Math.floor(dmax / lstep) * lstep;
|
|
154
|
+
}
|
|
155
|
+
best.lstep = lstep;
|
|
156
|
+
best.score = score;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
z += 1;
|
|
160
|
+
}
|
|
161
|
+
k += 1;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
j += 1;
|
|
165
|
+
}
|
|
166
|
+
best.ticks = d3.range(best.lmin, best.lmax, best.lstep).concat(best.lmax);
|
|
167
|
+
best.ticks = best.ticks.filter((t) => t < dmax && t > dmin);
|
|
168
|
+
return best;
|
|
169
|
+
}
|
|
170
|
+
export function ExtendedWilkinsonDate([dminDate, dmaxDate], m, onlyLoose = false, Q = [1, 5, 2, 2.5, 4, 3], w = [0.25, 0.2, 0.5, 0.05], nice = true) {
|
|
171
|
+
var _a;
|
|
172
|
+
// Convert dates to timestamps
|
|
173
|
+
const dmin = dminDate.getTime();
|
|
174
|
+
const dmax = dmaxDate.getTime();
|
|
175
|
+
// Get numeric results
|
|
176
|
+
const result = ExtendedWilkinson([dmin, dmax], m, onlyLoose, Q, w, nice);
|
|
177
|
+
// Convert numeric ticks back to dates
|
|
178
|
+
return Object.assign(Object.assign({}, result), { ticks: ((_a = result.ticks) === null || _a === void 0 ? void 0 : _a.map((t) => new Date(t))) || [] });
|
|
179
|
+
}
|
|
180
|
+
export function getTickLabelFormatterForDate(minDate, maxDate) {
|
|
181
|
+
const timeSpanMs = maxDate.getTime() - minDate.getTime();
|
|
182
|
+
const minuteMs = 1000 * 60;
|
|
183
|
+
const hourMs = minuteMs * 60;
|
|
184
|
+
const dayMs = hourMs * 24;
|
|
185
|
+
const weekMs = dayMs * 7;
|
|
186
|
+
const monthMs = dayMs * 30;
|
|
187
|
+
const yearMs = dayMs * 365;
|
|
188
|
+
let dateTimeFormatOptions;
|
|
189
|
+
if (timeSpanMs <= hourMs) {
|
|
190
|
+
// If the time span is less than or equal to 1 hour, show minutes and seconds
|
|
191
|
+
dateTimeFormatOptions = { minute: '2-digit', second: '2-digit' };
|
|
192
|
+
}
|
|
193
|
+
else if (timeSpanMs <= dayMs) {
|
|
194
|
+
// If less than or equal to 1 day, show hours and minutes
|
|
195
|
+
dateTimeFormatOptions = { hour: '2-digit', minute: '2-digit' };
|
|
196
|
+
}
|
|
197
|
+
else if (timeSpanMs <= weekMs) {
|
|
198
|
+
// If less than or equal to 1 week, show weekday and hour
|
|
199
|
+
dateTimeFormatOptions = { weekday: 'short', hour: '2-digit' };
|
|
200
|
+
}
|
|
201
|
+
else if (timeSpanMs <= monthMs) {
|
|
202
|
+
// If less than or equal to 1 month, show day and month
|
|
203
|
+
dateTimeFormatOptions = { month: 'short', day: 'numeric' };
|
|
204
|
+
}
|
|
205
|
+
else if (timeSpanMs <= yearMs) {
|
|
206
|
+
// If less than or equal to 1 year, show month
|
|
207
|
+
dateTimeFormatOptions = { month: 'short' };
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// If over a year, show year and month
|
|
211
|
+
dateTimeFormatOptions = { year: 'numeric', month: 'short' };
|
|
212
|
+
}
|
|
213
|
+
return (date) => {
|
|
214
|
+
return date.toLocaleDateString([], dateTimeFormatOptions);
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=chart-tick-generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-tick-generation.js","sourceRoot":"","sources":["../../../../src/charts/axis/chart-tick-generation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAIzB,SAAS,KAAK,CAAC,CAAoB,EAAE,CAAW;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CACjB,CAAS,EACT,CAAW,EACX,CAAS,EACT,IAAY,EACZ,IAAY,EACZ,KAAa;;IAEb,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,GACL,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;QACpD,IAAI,IAAI,CAAC;QACT,IAAI,IAAI,CAAC;QACP,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;IAER,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,UAAU,CAAC,GAAG,GAAG,CAAC,CAAS,EAAE,CAAW,EAAE,CAAS,EAAU,EAAE;;IAC7D,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,SAAS,QAAQ,CACf,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY;IAEZ,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,CACL,CAAC;QACD,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY,EAAU,EAAE;IAClE,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CACL,CAAC;YACD,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAC3E,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,OAAO,CACd,CAAS,EACT,CAAS,EACT,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY;IAEZ,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,OAAO,CAAC,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,iGAAiG;AACjG,6DAA6D;AAC7D,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,CAAC,CAAC;AAU5E,MAAM,UAAU,iBAAiB,CAC/B,CAAC,IAAI,EAAE,IAAI,CAAmB,EAC9B,CAAS,EACT,YAAqB,KAAK,EAC1B,IAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAClC,IAAc,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EACpC,OAAgB,IAAI;IAEpB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;IAEjC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC;QACZ,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,CAAC,CAAC;YACT,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAoB,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;IAE5C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,QAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChD,CAAC,GAAG,QAAQ,CAAC;gBACb,MAAM;YACR,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,QAAQ,EAAE,CAAC;gBACpB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;oBACrD,MAAM;gBACR,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,GAAG,QAAQ,EAAE,CAAC;oBACpB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC1D,MAAM;oBACR,CAAC;oBACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;oBAE7C,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;wBAC1B,CAAC,IAAI,CAAC,CAAC;wBACP,SAAS;oBACX,CAAC;oBACD,KAAK,IAAI,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;wBACxD,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;wBAChC,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACnC,MAAM,KAAK,GAAG,IAAI,CAAC;wBAEnB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;wBACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBAChD,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;wBAExC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAExD,IACE,KAAK,GAAG,IAAI,CAAC,KAAK;4BAClB,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,EAC9C,CAAC;4BACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;4BACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;4BAEjB,IAAI,IAAI,EAAE,CAAC;gCACT,IAAI,CAAC,IAAI;oCACP,IAAI,GAAG,IAAI;wCACT,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK;wCAClC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;gCACtC,IAAI,CAAC,IAAI;oCACP,IAAI,GAAG,IAAI;wCACT,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK;wCACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;4BACzC,CAAC;4BAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;4BACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;wBACrB,CAAC;oBACH,CAAC;oBACD,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;gBAED,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;QACD,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAK,EAAE,IAAI,CAAC,IAAK,EAAE,IAAI,CAAC,KAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,CAAC,QAAQ,EAAE,QAAQ,CAAe,EAClC,CAAS,EACT,YAAqB,KAAK,EAC1B,IAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAClC,IAAc,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EACpC,OAAgB,IAAI;;IAEpB,8BAA8B;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAEhC,sBAAsB;IACtB,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEzE,sCAAsC;IACtC,uCACK,MAAM,KACT,KAAK,EAAE,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAI,EAAE,IAClD;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAAa,EACb,OAAa;IAEb,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAEzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;IAE3B,IAAI,qBAAiD,CAAC;IAEtD,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QACzB,6EAA6E;QAC7E,qBAAqB,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACnE,CAAC;SAAM,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,yDAAyD;QACzD,qBAAqB,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjE,CAAC;SAAM,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAChC,yDAAyD;QACzD,qBAAqB,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAChE,CAAC;SAAM,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;QACjC,uDAAuD;QACvD,qBAAqB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC7D,CAAC;SAAM,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAChC,8CAA8C;QAC9C,qBAAqB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,qBAAqB,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,IAAU,EAAU,EAAE;QAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC"}
|