@ledgerhq/lumen-ui-react-visualization 0.1.11 → 0.1.12
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/index.js +13 -9
- package/dist/lib/Components/CartesianChart/CartesianChart.d.ts +1 -1
- package/dist/lib/Components/CartesianChart/CartesianChart.d.ts.map +1 -1
- package/dist/lib/Components/CartesianChart/CartesianChart.js +78 -79
- package/dist/lib/Components/CartesianChart/RevealClip/RevealClipDefs.d.ts +3 -0
- package/dist/lib/Components/CartesianChart/RevealClip/RevealClipDefs.d.ts.map +1 -0
- package/dist/lib/Components/CartesianChart/RevealClip/RevealClipDefs.js +41 -0
- package/dist/lib/Components/CartesianChart/RevealClip/context.d.ts +7 -0
- package/dist/lib/Components/CartesianChart/RevealClip/context.d.ts.map +1 -0
- package/dist/lib/Components/CartesianChart/RevealClip/context.js +6 -0
- package/dist/lib/Components/CartesianChart/RevealClip/index.d.ts +3 -0
- package/dist/lib/Components/CartesianChart/RevealClip/index.d.ts.map +1 -0
- package/dist/lib/Components/CartesianChart/RevealClip/types.d.ts +37 -0
- package/dist/lib/Components/CartesianChart/RevealClip/types.d.ts.map +1 -0
- package/dist/lib/Components/CartesianChart/RevealClip/utils.d.ts +17 -0
- package/dist/lib/Components/CartesianChart/RevealClip/utils.d.ts.map +1 -0
- package/dist/lib/Components/CartesianChart/RevealClip/utils.js +23 -0
- package/dist/lib/Components/CartesianChart/types.d.ts +6 -0
- package/dist/lib/Components/CartesianChart/types.d.ts.map +1 -1
- package/dist/lib/Components/CartesianChart/utils.js +8 -8
- package/dist/lib/Components/Line/Line.d.ts.map +1 -1
- package/dist/lib/Components/Line/Line.js +22 -21
- package/dist/lib/Components/LineChart/LineChart.d.ts +1 -1
- package/dist/lib/Components/LineChart/LineChart.d.ts.map +1 -1
- package/dist/lib/Components/LineChart/LineChart.js +36 -34
- package/dist/lib/Components/LineChart/types.d.ts +5 -0
- package/dist/lib/Components/LineChart/types.d.ts.map +1 -1
- package/dist/lib/Components/Point/Point.d.ts.map +1 -1
- package/dist/lib/Components/Point/Point.js +19 -17
- package/dist/lib/Components/ReferenceLine/ReferenceLine.d.ts +3 -0
- package/dist/lib/Components/ReferenceLine/ReferenceLine.d.ts.map +1 -0
- package/dist/lib/Components/ReferenceLine/ReferenceLine.js +122 -0
- package/dist/lib/Components/ReferenceLine/constants.d.ts +4 -0
- package/dist/lib/Components/ReferenceLine/constants.d.ts.map +1 -0
- package/dist/lib/Components/ReferenceLine/constants.js +7 -0
- package/dist/lib/Components/ReferenceLine/index.d.ts +3 -0
- package/dist/lib/Components/ReferenceLine/index.d.ts.map +1 -0
- package/dist/lib/Components/ReferenceLine/types.d.ts +74 -0
- package/dist/lib/Components/ReferenceLine/types.d.ts.map +1 -0
- package/dist/lib/Components/ReferenceLine/utils.d.ts +49 -0
- package/dist/lib/Components/ReferenceLine/utils.d.ts.map +1 -0
- package/dist/lib/Components/ReferenceLine/utils.js +65 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.d.ts +3 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.d.ts.map +1 -0
- package/dist/lib/Components/{ChartTooltip → Scrubber/DefaultScrubberTooltip}/ChartTooltipItem.js +13 -9
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.d.ts +12 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.d.ts.map +1 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.js +85 -0
- package/dist/lib/Components/{ChartTooltip → Scrubber/DefaultScrubberTooltip}/constants.d.ts +2 -1
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/constants.d.ts.map +1 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/constants.js +13 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/index.d.ts +3 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/index.d.ts.map +1 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/utils.d.ts +43 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/utils.d.ts.map +1 -0
- package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/utils.js +59 -0
- package/dist/lib/Components/Scrubber/Scrubber.d.ts +14 -2
- package/dist/lib/Components/Scrubber/Scrubber.d.ts.map +1 -1
- package/dist/lib/Components/Scrubber/Scrubber.js +107 -81
- package/dist/lib/Components/Scrubber/index.d.ts +2 -1
- package/dist/lib/Components/Scrubber/index.d.ts.map +1 -1
- package/dist/lib/Components/Scrubber/types.d.ts +99 -1
- package/dist/lib/Components/Scrubber/types.d.ts.map +1 -1
- package/dist/lib/Components/index.d.ts +1 -1
- package/dist/lib/Components/index.d.ts.map +1 -1
- package/dist/package.json +3 -3
- package/package.json +2 -2
- package/dist/lib/Components/ChartTooltip/ChartTooltip.d.ts +0 -23
- package/dist/lib/Components/ChartTooltip/ChartTooltip.d.ts.map +0 -1
- package/dist/lib/Components/ChartTooltip/ChartTooltip.js +0 -81
- package/dist/lib/Components/ChartTooltip/ChartTooltipItem.d.ts +0 -3
- package/dist/lib/Components/ChartTooltip/ChartTooltipItem.d.ts.map +0 -1
- package/dist/lib/Components/ChartTooltip/constants.d.ts.map +0 -1
- package/dist/lib/Components/ChartTooltip/constants.js +0 -12
- package/dist/lib/Components/ChartTooltip/index.d.ts +0 -3
- package/dist/lib/Components/ChartTooltip/index.d.ts.map +0 -1
- package/dist/lib/Components/ChartTooltip/types.d.ts +0 -61
- package/dist/lib/Components/ChartTooltip/types.d.ts.map +0 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsxs as R, jsx as f } from "react/jsx-runtime";
|
|
2
|
+
import { ChartTooltipItem as _ } from "./ChartTooltipItem.js";
|
|
3
|
+
import { TOOLTIP_TRANSITION as D, BORDER_RADIUS as x, PADDING_Y as O, ROW_HEIGHT as u, PADDING_X as E, ROW_GAP as g, DEFAULT_OFFSET as L, DEFAULT_TOOLTIP_MIN_WIDTH as S } from "./constants.js";
|
|
4
|
+
import { useTooltipMeasurement as W, computeTooltipWidth as F, computeTooltipHeight as H, computeTooltipX as N, computeItemsBaseY as P } from "./utils.js";
|
|
5
|
+
import { cssVar as o } from "../../../../libs/design-core/dist/lib/cssVar/cssVar.js";
|
|
6
|
+
const A = {
|
|
7
|
+
fontSize: o("var(--font-style-body-4-size)"),
|
|
8
|
+
fontFamily: o("var(--font-family-font)"),
|
|
9
|
+
fill: o("var(--text-base)"),
|
|
10
|
+
fontWeight: o("var(--font-style-body-4-weight-medium)")
|
|
11
|
+
};
|
|
12
|
+
function $({
|
|
13
|
+
pixelX: T,
|
|
14
|
+
drawingArea: e,
|
|
15
|
+
title: l,
|
|
16
|
+
items: i,
|
|
17
|
+
offset: m = L,
|
|
18
|
+
minWidth: h = S
|
|
19
|
+
}) {
|
|
20
|
+
const t = l != null, { widths: c, titleRef: d, labelRefs: y, valueRefs: I } = W(
|
|
21
|
+
i,
|
|
22
|
+
t,
|
|
23
|
+
l
|
|
24
|
+
);
|
|
25
|
+
if (i.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
const a = F(c, t, h), s = N(T, m, a, e), v = H(i.length, t), b = P(e.y, t);
|
|
28
|
+
return /* @__PURE__ */ R(
|
|
29
|
+
"g",
|
|
30
|
+
{
|
|
31
|
+
"data-testid": "chart-tooltip",
|
|
32
|
+
role: "tooltip",
|
|
33
|
+
style: {
|
|
34
|
+
opacity: c === null ? 0 : 1,
|
|
35
|
+
transition: D,
|
|
36
|
+
pointerEvents: "none"
|
|
37
|
+
},
|
|
38
|
+
children: [
|
|
39
|
+
/* @__PURE__ */ f(
|
|
40
|
+
"rect",
|
|
41
|
+
{
|
|
42
|
+
x: s,
|
|
43
|
+
y: e.y,
|
|
44
|
+
width: a,
|
|
45
|
+
height: v,
|
|
46
|
+
rx: x,
|
|
47
|
+
fill: o("var(--background-muted)")
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
t && /* @__PURE__ */ f(
|
|
51
|
+
"text",
|
|
52
|
+
{
|
|
53
|
+
ref: d,
|
|
54
|
+
"data-testid": "chart-tooltip-title",
|
|
55
|
+
x: s + E,
|
|
56
|
+
y: e.y + O + u / 2,
|
|
57
|
+
dominantBaseline: "middle",
|
|
58
|
+
style: A,
|
|
59
|
+
children: l
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
i.map((n, r) => /* @__PURE__ */ f(
|
|
63
|
+
_,
|
|
64
|
+
{
|
|
65
|
+
label: n.label,
|
|
66
|
+
value: n.value,
|
|
67
|
+
x: s,
|
|
68
|
+
y: b + r * (u + g) + u / 2,
|
|
69
|
+
width: a,
|
|
70
|
+
labelRef: (p) => {
|
|
71
|
+
y.current[r] = p;
|
|
72
|
+
},
|
|
73
|
+
valueRef: (p) => {
|
|
74
|
+
I.current[r] = p;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
`${n.label}-${n.value}-${r}`
|
|
78
|
+
))
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
export {
|
|
84
|
+
$ as DefaultScrubberTooltip
|
|
85
|
+
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare const DEFAULT_OFFSET = 10;
|
|
2
|
-
export declare const DEFAULT_TOOLTIP_WIDTH = 120;
|
|
3
2
|
export declare const PADDING_X = 8;
|
|
4
3
|
export declare const PADDING_Y = 8;
|
|
5
4
|
export declare const ROW_HEIGHT = 16;
|
|
@@ -7,4 +6,6 @@ export declare const ROW_GAP = 6;
|
|
|
7
6
|
export declare const TITLE_GAP = 6;
|
|
8
7
|
export declare const BORDER_RADIUS = 4;
|
|
9
8
|
export declare const TOOLTIP_TRANSITION = "opacity 0.15s ease-out 0.05s";
|
|
9
|
+
export declare const LABEL_VALUE_GAP = 12;
|
|
10
|
+
export declare const DEFAULT_TOOLTIP_MIN_WIDTH = 80;
|
|
10
11
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Scrubber/DefaultScrubberTooltip/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,kBAAkB,iCAAiC,CAAC;AACjE,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,yBAAyB,KAAK,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const o = 10, s = 8, t = 8, T = 16, _ = 6, c = 6, A = 4, I = "opacity 0.15s ease-out 0.05s", n = 12, D = 80;
|
|
2
|
+
export {
|
|
3
|
+
A as BORDER_RADIUS,
|
|
4
|
+
o as DEFAULT_OFFSET,
|
|
5
|
+
D as DEFAULT_TOOLTIP_MIN_WIDTH,
|
|
6
|
+
n as LABEL_VALUE_GAP,
|
|
7
|
+
s as PADDING_X,
|
|
8
|
+
t as PADDING_Y,
|
|
9
|
+
_ as ROW_GAP,
|
|
10
|
+
T as ROW_HEIGHT,
|
|
11
|
+
c as TITLE_GAP,
|
|
12
|
+
I as TOOLTIP_TRANSITION
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Scrubber/DefaultScrubberTooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { DrawingArea } from '../../../utils/types';
|
|
3
|
+
import { ChartTooltipItemData, SvgTextContent } from '../types';
|
|
4
|
+
type Widths = {
|
|
5
|
+
title: number;
|
|
6
|
+
labels: number[];
|
|
7
|
+
values: number[];
|
|
8
|
+
};
|
|
9
|
+
type UseTooltipMeasurementReturn = {
|
|
10
|
+
widths: Widths | null;
|
|
11
|
+
titleRef: RefObject<SVGTextElement | null>;
|
|
12
|
+
labelRefs: RefObject<(SVGTextElement | null)[]>;
|
|
13
|
+
valueRefs: RefObject<(SVGTextElement | null)[]>;
|
|
14
|
+
};
|
|
15
|
+
export declare const safeGetBBoxWidth: (el: SVGGraphicsElement | null) => number;
|
|
16
|
+
/**
|
|
17
|
+
* Derive the auto-fit tooltip width from measured text widths,
|
|
18
|
+
* clamped to a minimum floor.
|
|
19
|
+
*/
|
|
20
|
+
export declare const computeTooltipWidth: (widths: Widths | null, hasTitle: boolean, minWidth: number) => number;
|
|
21
|
+
/**
|
|
22
|
+
* Compute the tooltip's horizontal position, flipping to the left
|
|
23
|
+
* of the scrubber line when it would overflow the drawing area.
|
|
24
|
+
*/
|
|
25
|
+
export declare const computeTooltipX: (pixelX: number, offset: number, tooltipWidth: number, drawingArea: DrawingArea) => number;
|
|
26
|
+
/**
|
|
27
|
+
* Compute the total tooltip height from item count and title presence.
|
|
28
|
+
*/
|
|
29
|
+
export declare const computeTooltipHeight: (itemCount: number, hasTitle: boolean) => number;
|
|
30
|
+
/**
|
|
31
|
+
* Vertical offset where tooltip rows begin, accounting for title presence.
|
|
32
|
+
*/
|
|
33
|
+
export declare const computeItemsBaseY: (drawingAreaY: number, hasTitle: boolean) => number;
|
|
34
|
+
/**
|
|
35
|
+
* Manages SVG text measurement for the tooltip via `getBBox`.
|
|
36
|
+
*
|
|
37
|
+
* A single `ResizeObserver` is created on mount and reused for the
|
|
38
|
+
* component's entire lifetime, avoiding the cost of tearing down and
|
|
39
|
+
* recreating an observer on every scrubber movement.
|
|
40
|
+
*/
|
|
41
|
+
export declare function useTooltipMeasurement(items: ChartTooltipItemData[], hasTitle: boolean, title: SvgTextContent | null | undefined): UseTooltipMeasurementReturn;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Scrubber/DefaultScrubberTooltip/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAUrE,KAAK,MAAM,GAAG;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,SAAS,EAAE,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,SAAS,EAAE,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,IAAI,kBAAkB,GAAG,IAAI,KAAG,MAOhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,GAAG,IAAI,EACrB,UAAU,OAAO,EACjB,UAAU,MAAM,KACf,MAUF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,cAAc,MAAM,EACpB,aAAa,WAAW,KACvB,MAOF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,UAAU,OAAO,KAChB,MAQF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,cAAc,MAAM,EACpB,UAAU,OAAO,KAChB,MAGF,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAAE,EAC7B,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,2BAA2B,CAkD7B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useRef as i, useState as W, useEffect as _, useLayoutEffect as g } from "react";
|
|
2
|
+
import { LABEL_VALUE_GAP as E, PADDING_Y as d, ROW_HEIGHT as p, ROW_GAP as x, PADDING_X as G, TITLE_GAP as b } from "./constants.js";
|
|
3
|
+
const m = (t) => {
|
|
4
|
+
if (!t || typeof t.getBBox != "function") return 0;
|
|
5
|
+
try {
|
|
6
|
+
return t.getBBox().width;
|
|
7
|
+
} catch {
|
|
8
|
+
return 0;
|
|
9
|
+
}
|
|
10
|
+
}, A = (t, e, r) => {
|
|
11
|
+
const n = t && e ? t.title : 0, c = t ? t.labels.map(
|
|
12
|
+
(a, f) => a + E + (t.values[f] ?? 0)
|
|
13
|
+
) : [], l = Math.max(n, ...c) + G * 2;
|
|
14
|
+
return Math.max(l, r);
|
|
15
|
+
}, H = (t, e, r, n) => {
|
|
16
|
+
const c = t + e + r > n.x + n.width;
|
|
17
|
+
return Math.max(
|
|
18
|
+
n.x,
|
|
19
|
+
c ? t - e - r : t + e
|
|
20
|
+
);
|
|
21
|
+
}, I = (t, e) => {
|
|
22
|
+
const r = e ? p + b : 0;
|
|
23
|
+
return d * 2 + r + t * p + (t - 1) * x;
|
|
24
|
+
}, P = (t, e) => {
|
|
25
|
+
const r = e ? p + b : 0;
|
|
26
|
+
return t + d + r;
|
|
27
|
+
};
|
|
28
|
+
function y(t, e, r) {
|
|
29
|
+
const n = i(null), c = i([]), s = i([]), l = i(null), a = i(() => {
|
|
30
|
+
}), [f, v] = W(null);
|
|
31
|
+
return a.current = () => {
|
|
32
|
+
const o = e ? m(n.current) : 0, u = t.map(
|
|
33
|
+
(R, h) => m(c.current[h])
|
|
34
|
+
), B = t.map(
|
|
35
|
+
(R, h) => m(s.current[h])
|
|
36
|
+
);
|
|
37
|
+
v({
|
|
38
|
+
title: o,
|
|
39
|
+
labels: u,
|
|
40
|
+
values: B
|
|
41
|
+
});
|
|
42
|
+
}, _(() => {
|
|
43
|
+
if (!(typeof ResizeObserver > "u"))
|
|
44
|
+
return l.current = new ResizeObserver(() => a.current()), () => l.current?.disconnect();
|
|
45
|
+
}, []), g(() => {
|
|
46
|
+
if (t.length === 0) return;
|
|
47
|
+
c.current.length = t.length, s.current.length = t.length, a.current();
|
|
48
|
+
const o = l.current;
|
|
49
|
+
o && (o.disconnect(), n.current && o.observe(n.current), c.current.forEach((u) => u && o.observe(u)), s.current.forEach((u) => u && o.observe(u)));
|
|
50
|
+
}, [t, r, e]), { widths: f, titleRef: n, labelRefs: c, valueRefs: s };
|
|
51
|
+
}
|
|
52
|
+
export {
|
|
53
|
+
P as computeItemsBaseY,
|
|
54
|
+
I as computeTooltipHeight,
|
|
55
|
+
A as computeTooltipWidth,
|
|
56
|
+
H as computeTooltipX,
|
|
57
|
+
m as safeGetBBoxWidth,
|
|
58
|
+
y as useTooltipMeasurement
|
|
59
|
+
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ScrubberProps } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Renders the scrubber visuals: vertical reference line, future-data overlay
|
|
4
|
-
* rect, per-series beacon dots,
|
|
4
|
+
* rect, per-series beacon dots, optional label above the line, and an optional
|
|
5
|
+
* tooltip when {@link ScrubberProps.tooltip} is set, using {@link DefaultScrubberTooltip}.
|
|
5
6
|
*
|
|
6
7
|
* Must be used as a child of `LineChart` (or `CartesianChart`) with
|
|
7
8
|
* `enableScrubbing` enabled. Renders nothing when no scrubber position is active.
|
|
@@ -12,6 +13,17 @@ import { ScrubberProps } from './types';
|
|
|
12
13
|
* <Scrubber label={(i) => data[i].date} />
|
|
13
14
|
* </LineChart>
|
|
14
15
|
* ```
|
|
16
|
+
*
|
|
17
|
+
* @example Tooltip
|
|
18
|
+
* ```tsx
|
|
19
|
+
* <Scrubber
|
|
20
|
+
* tooltip={(i) => ({
|
|
21
|
+
* title: `${counts[i]} Transactions`,
|
|
22
|
+
* items: [{ label: 'Index', value: String(i) }],
|
|
23
|
+
* minWidth: 160,
|
|
24
|
+
* })}
|
|
25
|
+
* />
|
|
26
|
+
* ```
|
|
15
27
|
*/
|
|
16
|
-
export declare function Scrubber({ label, hideLine, hideOverlay, showBeacons, }: Readonly<ScrubberProps>): import("react/jsx-runtime").JSX.Element | null;
|
|
28
|
+
export declare function Scrubber({ label, hideLine, hideOverlay, showBeacons, tooltip, }: Readonly<ScrubberProps>): import("react/jsx-runtime").JSX.Element | null;
|
|
17
29
|
//# sourceMappingURL=Scrubber.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scrubber.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/Scrubber.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Scrubber.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/Scrubber.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAa7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,OAAO,GACR,EAAE,QAAQ,CAAC,aAAa,CAAC,kDA2KzB"}
|
|
@@ -1,134 +1,160 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useId as N, useMemo as
|
|
3
|
-
import { resolvePixelX as
|
|
4
|
-
import { useScrubberContext as
|
|
5
|
-
import { useCartesianChartContext as
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { jsxs as v, jsx as o, Fragment as F } from "react/jsx-runtime";
|
|
2
|
+
import { useId as N, useMemo as d } from "react";
|
|
3
|
+
import { resolvePixelX as P, resolvePixelY as R, LINE_GRADIENT_EDGE_OPACITY as O, OVERLAY_OPACITY as X, LABEL_OFFSET_Y as G, BEACON_STROKE_WIDTH as V, BEACON_RADIUS as H, OVERLAY_OFFSET as m, OVERLAY_LINE_INSET as S } from "./utils.js";
|
|
4
|
+
import { useScrubberContext as M } from "./context/scrubberContext.js";
|
|
5
|
+
import { useCartesianChartContext as U } from "../CartesianChart/context/cartesianChartContext.js";
|
|
6
|
+
import { DefaultScrubberTooltip as j } from "./DefaultScrubberTooltip/DefaultScrubberTooltip.js";
|
|
7
|
+
import { cssVar as r } from "../../../libs/design-core/dist/lib/cssVar/cssVar.js";
|
|
8
|
+
function Z({
|
|
9
|
+
label: n,
|
|
10
|
+
hideLine: Y = !1,
|
|
11
|
+
hideOverlay: _ = !1,
|
|
12
|
+
showBeacons: l = !1,
|
|
13
|
+
tooltip: f
|
|
12
14
|
}) {
|
|
13
|
-
const
|
|
14
|
-
getXScale:
|
|
15
|
-
getXAxisConfig:
|
|
16
|
-
getYScale:
|
|
17
|
-
drawingArea:
|
|
18
|
-
series:
|
|
19
|
-
seriesMap:
|
|
20
|
-
} =
|
|
15
|
+
const b = N(), { scrubberPosition: e } = M(), {
|
|
16
|
+
getXScale: p,
|
|
17
|
+
getXAxisConfig: h,
|
|
18
|
+
getYScale: y,
|
|
19
|
+
drawingArea: x,
|
|
20
|
+
series: g,
|
|
21
|
+
seriesMap: E
|
|
22
|
+
} = U(), i = d(() => {
|
|
21
23
|
if (e !== void 0)
|
|
22
|
-
return
|
|
23
|
-
}, [e,
|
|
24
|
-
const
|
|
25
|
-
return
|
|
24
|
+
return P(e, p, h());
|
|
25
|
+
}, [e, p, h]), I = d(() => e === void 0 || !l ? [] : g.map((t) => {
|
|
26
|
+
const u = E.get(t.id)?.data, C = R(e, u, y);
|
|
27
|
+
return C === void 0 ? null : { id: t.id, stroke: t.stroke, pixelY: C };
|
|
26
28
|
}).filter(
|
|
27
|
-
(
|
|
28
|
-
), [e,
|
|
29
|
-
if (!(e === void 0 || !
|
|
30
|
-
return
|
|
31
|
-
}, [e,
|
|
32
|
-
|
|
29
|
+
(t) => t !== null
|
|
30
|
+
), [e, l, g, E, y]), A = d(() => {
|
|
31
|
+
if (!(e === void 0 || !n))
|
|
32
|
+
return n(e);
|
|
33
|
+
}, [e, n]), a = d(() => {
|
|
34
|
+
if (e === void 0 || !f)
|
|
35
|
+
return;
|
|
36
|
+
const t = f(e);
|
|
37
|
+
if (t.items.length === 0) return;
|
|
38
|
+
const u = typeof t.title == "function" ? t.title(e) : t.title;
|
|
39
|
+
return {
|
|
40
|
+
items: t.items,
|
|
41
|
+
resolvedTitle: u,
|
|
42
|
+
offset: t.offset,
|
|
43
|
+
minWidth: t.minWidth
|
|
44
|
+
};
|
|
45
|
+
}, [e, f]);
|
|
46
|
+
if (e === void 0 || i === void 0)
|
|
33
47
|
return null;
|
|
34
48
|
const {
|
|
35
|
-
x:
|
|
49
|
+
x: T,
|
|
36
50
|
y: s,
|
|
37
|
-
width:
|
|
38
|
-
height:
|
|
39
|
-
} =
|
|
51
|
+
width: k,
|
|
52
|
+
height: c
|
|
53
|
+
} = x, W = i + S, L = s - m, w = Math.max(
|
|
40
54
|
0,
|
|
41
|
-
|
|
42
|
-
),
|
|
43
|
-
return /* @__PURE__ */
|
|
44
|
-
!
|
|
45
|
-
/* @__PURE__ */
|
|
55
|
+
T + k - i - S + m
|
|
56
|
+
), D = c + m * 2;
|
|
57
|
+
return /* @__PURE__ */ v("g", { "data-testid": "scrubber", children: [
|
|
58
|
+
!Y && /* @__PURE__ */ v(F, { children: [
|
|
59
|
+
/* @__PURE__ */ o("defs", { children: /* @__PURE__ */ v(
|
|
46
60
|
"linearGradient",
|
|
47
61
|
{
|
|
48
|
-
id:
|
|
62
|
+
id: b,
|
|
49
63
|
gradientUnits: "userSpaceOnUse",
|
|
50
|
-
x1:
|
|
64
|
+
x1: i,
|
|
51
65
|
y1: s,
|
|
52
|
-
x2:
|
|
53
|
-
y2: s +
|
|
66
|
+
x2: i,
|
|
67
|
+
y2: s + c,
|
|
54
68
|
children: [
|
|
55
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ o(
|
|
56
70
|
"stop",
|
|
57
71
|
{
|
|
58
72
|
offset: "0%",
|
|
59
|
-
stopColor:
|
|
60
|
-
stopOpacity:
|
|
73
|
+
stopColor: r("var(--border-base)"),
|
|
74
|
+
stopOpacity: O
|
|
61
75
|
}
|
|
62
76
|
),
|
|
63
|
-
/* @__PURE__ */
|
|
64
|
-
/* @__PURE__ */
|
|
65
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ o("stop", { offset: "20%", stopColor: r("var(--border-base)") }),
|
|
78
|
+
/* @__PURE__ */ o("stop", { offset: "80%", stopColor: r("var(--border-base)") }),
|
|
79
|
+
/* @__PURE__ */ o(
|
|
66
80
|
"stop",
|
|
67
81
|
{
|
|
68
82
|
offset: "100%",
|
|
69
|
-
stopColor:
|
|
70
|
-
stopOpacity:
|
|
83
|
+
stopColor: r("var(--border-base)"),
|
|
84
|
+
stopOpacity: O
|
|
71
85
|
}
|
|
72
86
|
)
|
|
73
87
|
]
|
|
74
88
|
}
|
|
75
89
|
) }),
|
|
76
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ o(
|
|
77
91
|
"line",
|
|
78
92
|
{
|
|
79
93
|
"data-testid": "scrubber-line",
|
|
80
|
-
x1:
|
|
94
|
+
x1: i,
|
|
81
95
|
y1: s,
|
|
82
|
-
x2:
|
|
83
|
-
y2: s +
|
|
84
|
-
stroke: `url(#${
|
|
85
|
-
strokeWidth:
|
|
96
|
+
x2: i,
|
|
97
|
+
y2: s + c,
|
|
98
|
+
stroke: `url(#${b})`,
|
|
99
|
+
strokeWidth: r("var(--stroke-1)")
|
|
86
100
|
}
|
|
87
101
|
)
|
|
88
102
|
] }),
|
|
89
|
-
!
|
|
103
|
+
!_ && /* @__PURE__ */ o(
|
|
90
104
|
"rect",
|
|
91
105
|
{
|
|
92
106
|
"data-testid": "scrubber-overlay",
|
|
93
|
-
x:
|
|
94
|
-
y:
|
|
95
|
-
width:
|
|
96
|
-
height:
|
|
97
|
-
fill:
|
|
107
|
+
x: W,
|
|
108
|
+
y: L,
|
|
109
|
+
width: w,
|
|
110
|
+
height: D,
|
|
111
|
+
fill: r("var(--background-base)"),
|
|
98
112
|
opacity: X
|
|
99
113
|
}
|
|
100
114
|
),
|
|
101
|
-
|
|
115
|
+
A !== void 0 && /* @__PURE__ */ o(
|
|
102
116
|
"text",
|
|
103
117
|
{
|
|
104
118
|
"data-testid": "scrubber-label",
|
|
105
|
-
x:
|
|
106
|
-
y: s -
|
|
119
|
+
x: i,
|
|
120
|
+
y: s - G,
|
|
107
121
|
textAnchor: "middle",
|
|
108
122
|
style: {
|
|
109
|
-
fill:
|
|
110
|
-
fontSize:
|
|
111
|
-
fontWeight:
|
|
112
|
-
fontFamily:
|
|
123
|
+
fill: r("var(--text-base)"),
|
|
124
|
+
fontSize: r("var(--font-style-body-4-size)"),
|
|
125
|
+
fontWeight: r("var(--font-style-body-4-weight-medium)"),
|
|
126
|
+
fontFamily: r("var(--font-family-font)")
|
|
113
127
|
},
|
|
114
|
-
children:
|
|
128
|
+
children: A
|
|
115
129
|
}
|
|
116
130
|
),
|
|
117
|
-
|
|
131
|
+
l && I.map((t) => /* @__PURE__ */ o(
|
|
118
132
|
"circle",
|
|
119
133
|
{
|
|
120
|
-
"data-testid": `scrubber-beacon-${
|
|
121
|
-
cx:
|
|
122
|
-
cy:
|
|
123
|
-
r:
|
|
124
|
-
fill:
|
|
125
|
-
stroke:
|
|
126
|
-
strokeWidth:
|
|
134
|
+
"data-testid": `scrubber-beacon-${t.id}`,
|
|
135
|
+
cx: i,
|
|
136
|
+
cy: t.pixelY,
|
|
137
|
+
r: H,
|
|
138
|
+
fill: t.stroke,
|
|
139
|
+
stroke: r("var(--background-canvas)"),
|
|
140
|
+
strokeWidth: V
|
|
127
141
|
},
|
|
128
|
-
|
|
129
|
-
))
|
|
142
|
+
t.id
|
|
143
|
+
)),
|
|
144
|
+
a !== void 0 && /* @__PURE__ */ o(
|
|
145
|
+
j,
|
|
146
|
+
{
|
|
147
|
+
pixelX: i,
|
|
148
|
+
drawingArea: x,
|
|
149
|
+
dataIndex: e,
|
|
150
|
+
title: a.resolvedTitle,
|
|
151
|
+
items: a.items,
|
|
152
|
+
offset: a.offset,
|
|
153
|
+
minWidth: a.minWidth
|
|
154
|
+
}
|
|
155
|
+
)
|
|
130
156
|
] });
|
|
131
157
|
}
|
|
132
158
|
export {
|
|
133
|
-
|
|
159
|
+
Z as Scrubber
|
|
134
160
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { Scrubber } from './Scrubber';
|
|
2
2
|
export { useScrubberContext } from './context';
|
|
3
|
-
export
|
|
3
|
+
export { ChartTooltipItem, DefaultScrubberTooltip, } from './DefaultScrubberTooltip';
|
|
4
|
+
export type { ChartTooltipItemData, ChartTooltipItemProps, ScrubberContextValue, ScrubberProps, ScrubberTooltipContent, ScrubberTooltipProps, SvgTextContent, } from './types';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ReactNode, RefObject } from 'react';
|
|
1
|
+
import { ReactElement, ReactNode, Ref, RefObject, SVGProps } from 'react';
|
|
2
|
+
import { DrawingArea } from '../../utils/types';
|
|
2
3
|
export type ScrubberContextValue = {
|
|
3
4
|
/**
|
|
4
5
|
* Whether scrubbing interactions are enabled.
|
|
@@ -28,6 +29,97 @@ export type ScrubberProviderProps = {
|
|
|
28
29
|
*/
|
|
29
30
|
onScrubberPositionChange?: (index: number | undefined) => void;
|
|
30
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* Valid content for an SVG `<text>` element: a plain string,
|
|
34
|
+
* a number, or a `<tspan>` element.
|
|
35
|
+
*/
|
|
36
|
+
export type SvgTextContent = string | number | ReactElement<SVGProps<SVGTSpanElement>, 'tspan'>;
|
|
37
|
+
export type ChartTooltipItemData = {
|
|
38
|
+
/** Label displayed on the left side of the row. */
|
|
39
|
+
label: SvgTextContent;
|
|
40
|
+
/** Value displayed on the right side of the row. */
|
|
41
|
+
value: SvgTextContent;
|
|
42
|
+
};
|
|
43
|
+
export type ChartTooltipItemProps = ChartTooltipItemData & {
|
|
44
|
+
/**
|
|
45
|
+
* X position in SVG coordinate space.
|
|
46
|
+
* @default 0
|
|
47
|
+
*/
|
|
48
|
+
x?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Y midline position in SVG coordinate space.
|
|
51
|
+
* @default 0
|
|
52
|
+
*/
|
|
53
|
+
y?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Width allocated to this row, used to right-align the value text.
|
|
56
|
+
*/
|
|
57
|
+
width: number;
|
|
58
|
+
/**
|
|
59
|
+
* Optional ref forwarded to the label `<text>` element. Useful to measure
|
|
60
|
+
* the label's natural width via `getBBox` for auto-fit layouts.
|
|
61
|
+
*/
|
|
62
|
+
labelRef?: Ref<SVGTextElement>;
|
|
63
|
+
/**
|
|
64
|
+
* Optional ref forwarded to the value `<text>` element. Useful to measure
|
|
65
|
+
* the value's natural width via `getBBox` for auto-fit layouts.
|
|
66
|
+
*/
|
|
67
|
+
valueRef?: Ref<SVGTextElement>;
|
|
68
|
+
};
|
|
69
|
+
export type ScrubberTooltipLayoutProps = {
|
|
70
|
+
/**
|
|
71
|
+
* Horizontal gap in pixels between the scrubber line and the tooltip box.
|
|
72
|
+
* @default 10
|
|
73
|
+
*/
|
|
74
|
+
offset?: number;
|
|
75
|
+
/**
|
|
76
|
+
* Minimum width in pixels. The tooltip auto-fits to the rendered content
|
|
77
|
+
* but never collapses below this floor; raise it to avoid jitter when
|
|
78
|
+
* value length changes between indices.
|
|
79
|
+
* @default 80
|
|
80
|
+
*/
|
|
81
|
+
minWidth?: number;
|
|
82
|
+
};
|
|
83
|
+
export type ScrubberTooltipProps = ScrubberTooltipLayoutProps & {
|
|
84
|
+
/**
|
|
85
|
+
* Horizontal pixel position of the scrubber line within the SVG coordinate
|
|
86
|
+
* space. Used to place the tooltip left or right of the line.
|
|
87
|
+
*/
|
|
88
|
+
pixelX: number;
|
|
89
|
+
/**
|
|
90
|
+
* Bounding box of the chart's drawing area (x, y, width, height). Used to
|
|
91
|
+
* constrain the tooltip so it never overflows the chart boundaries.
|
|
92
|
+
*/
|
|
93
|
+
drawingArea: DrawingArea;
|
|
94
|
+
/**
|
|
95
|
+
* Zero-based index of the data point currently under the scrubber. Maps
|
|
96
|
+
* directly to the series data arrays so consumers can look up values.
|
|
97
|
+
*/
|
|
98
|
+
dataIndex: number;
|
|
99
|
+
/**
|
|
100
|
+
* Optional title displayed at the top of the tooltip. Pass `null` or omit
|
|
101
|
+
* to render the tooltip without a title row.
|
|
102
|
+
*/
|
|
103
|
+
title?: SvgTextContent | null;
|
|
104
|
+
/**
|
|
105
|
+
* List of label/value pairs rendered as rows inside the tooltip body.
|
|
106
|
+
*/
|
|
107
|
+
items: ChartTooltipItemData[];
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Return value of the `tooltip` callback on {@link ScrubberProps}.
|
|
111
|
+
*/
|
|
112
|
+
export type ScrubberTooltipContent = ScrubberTooltipLayoutProps & {
|
|
113
|
+
/**
|
|
114
|
+
* Optional header. Static value or callback per data index.
|
|
115
|
+
* A callback may return `null` or `undefined` to suppress the title.
|
|
116
|
+
*/
|
|
117
|
+
title?: SvgTextContent | ((index: number) => SvgTextContent | null | undefined);
|
|
118
|
+
/**
|
|
119
|
+
* Tooltip rows for this index. Return an empty array to hide the tooltip.
|
|
120
|
+
*/
|
|
121
|
+
items: ChartTooltipItemData[];
|
|
122
|
+
};
|
|
31
123
|
export type ScrubberProps = {
|
|
32
124
|
/**
|
|
33
125
|
* Formats a label string shown above the reference line for a given data index.
|
|
@@ -49,5 +141,11 @@ export type ScrubberProps = {
|
|
|
49
141
|
* @default false
|
|
50
142
|
*/
|
|
51
143
|
showBeacons?: boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Produces tooltip content for the active data index. When set, {@link DefaultScrubberTooltip}
|
|
146
|
+
* is rendered. Optional `offset` and `minWidth` on the returned object tune layout.
|
|
147
|
+
* Return `{ items: [] }` to hide the tooltip at an index.
|
|
148
|
+
*/
|
|
149
|
+
tooltip?: (dataIndex: number) => ScrubberTooltipContent;
|
|
52
150
|
};
|
|
53
151
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC;;OAEG;IACH,wBAAwB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACxC;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG;IACjC,mDAAmD;IACnD,KAAK,EAAE,cAAc,CAAC;IACtB,oDAAoD;IACpD,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,GAAG;IACzD;;;OAGG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,GAAG;IAC9D;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B;;OAEG;IACH,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAAG;IAChE;;;OAGG;IACH,KAAK,CAAC,EACF,cAAc,GACd,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC3D;;OAEG;IACH,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,sBAAsB,CAAC;CACzD,CAAC"}
|