basalt-ui 1.31.0 → 1.32.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/CHANGELOG.md +34 -0
- package/MIGRATING.md +212 -20
- package/agent/rules/basalt-mantine.md +4 -4
- package/configs/oxlint-plugin.js +240 -59
- package/configs/oxlint-plugin.test.ts +329 -1
- package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
- package/dist/charts/kinds/BandStrip.js +18 -66
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +5 -26
- package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
- package/dist/charts/kinds/MirroredBars.js +10 -68
- package/dist/charts/kinds/band-chrome.d.ts +31 -0
- package/dist/charts/kinds/band-chrome.d.ts.map +1 -0
- package/dist/charts/kinds/band-chrome.js +71 -0
- package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
- package/dist/charts/primitives/CartesianChart.js +49 -76
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +5 -23
- package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
- package/dist/charts/primitives/ChartFrame.js +23 -40
- package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
- package/dist/charts/primitives/ChartLegend.js +5 -133
- package/dist/charts/primitives/ChartTooltip.d.ts +5 -0
- package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
- package/dist/charts/primitives/ChartTooltip.js +16 -1
- package/dist/charts/primitives/HoverOverlay.d.ts +24 -9
- package/dist/charts/primitives/HoverOverlay.d.ts.map +1 -1
- package/dist/charts/primitives/HoverOverlay.js +17 -1
- package/dist/charts/primitives/chart-card-context.d.ts +17 -13
- package/dist/charts/primitives/chart-card-context.d.ts.map +1 -1
- package/dist/charts/primitives/chart-card-context.js +10 -5
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -1
- package/dist/charts/primitives/chart-frame-layout.js +25 -31
- package/dist/charts/primitives/legend-disclosure.d.ts +27 -0
- package/dist/charts/primitives/legend-disclosure.d.ts.map +1 -0
- package/dist/charts/primitives/legend-disclosure.js +153 -0
- package/dist/controls/controls.module.css +5 -0
- package/dist/controls/sync-button.module.css +1 -0
- package/dist/dashboard/stat-group.module.css +19 -64
- package/dist/dashboard/widget-grid.module.css +11 -38
- package/dist/data/data-table-state.d.ts +83 -0
- package/dist/data/data-table-state.d.ts.map +1 -0
- package/dist/data/data-table-state.js +139 -0
- package/dist/data/data-table.d.ts +40 -2
- package/dist/data/data-table.d.ts.map +1 -1
- package/dist/data/data-table.js +179 -277
- package/dist/forms/form-layout.d.ts +6 -1
- package/dist/forms/form-layout.d.ts.map +1 -1
- package/dist/forms/form-layout.module.css +6 -13
- package/dist/guard/index.d.ts +2 -2
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +10 -14
- package/dist/notifications/center.d.ts.map +1 -1
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +12 -10
- package/dist/shell/aside-docking.d.ts +31 -0
- package/dist/shell/aside-docking.d.ts.map +1 -0
- package/dist/shell/aside-docking.js +19 -0
- package/dist/shell/index.d.ts +0 -11
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +13 -14
- package/dist/shell/page-bar.d.ts +24 -0
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/use-breakpoint.d.ts +1 -1
- package/dist/theme/floating.module.css +1 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +2 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +4 -0
- package/llms.txt +2 -2
- package/package.json +2 -1
- package/src/charts/kinds/BandStrip.tsx +18 -64
- package/src/charts/kinds/DualPanel.tsx +4 -24
- package/src/charts/kinds/MirroredBars.tsx +12 -66
- package/src/charts/kinds/band-chrome.tsx +91 -0
- package/src/charts/primitives/CartesianChart.tsx +79 -122
- package/src/charts/primitives/ChartCard.tsx +5 -27
- package/src/charts/primitives/ChartFrame.tsx +37 -76
- package/src/charts/primitives/ChartLegend.tsx +7 -154
- package/src/charts/primitives/ChartTooltip.tsx +16 -0
- package/src/charts/primitives/HoverOverlay.tsx +52 -21
- package/src/charts/primitives/chart-card-context.ts +25 -16
- package/src/charts/primitives/chart-frame-layout.ts +44 -56
- package/src/charts/primitives/legend-disclosure.tsx +177 -0
- package/src/controls/controls.module.css +5 -0
- package/src/controls/sync-button.module.css +1 -0
- package/src/dashboard/stat-group.module.css +19 -64
- package/src/dashboard/widget-grid.module.css +11 -38
- package/src/data/data-table-state.ts +218 -0
- package/src/data/data-table.tsx +134 -218
- package/src/forms/form-layout.module.css +6 -13
- package/src/forms/form-layout.tsx +6 -1
- package/src/guard/index.ts +38 -34
- package/src/notifications/center.tsx +3 -0
- package/src/provider/index.tsx +18 -17
- package/src/shell/aside-docking.ts +54 -0
- package/src/shell/index.tsx +15 -37
- package/src/shell/page-bar.tsx +24 -0
- package/src/shell/use-breakpoint.ts +2 -2
- package/src/theme/floating.module.css +1 -0
- package/src/theme-lab/derive-controls.tsx +2 -0
- package/src/tokens/index.ts +5 -0
|
@@ -6,19 +6,14 @@ import { assertRequiredProps } from "../../common/validate.js";
|
|
|
6
6
|
import { VX, alpha } from "../../tokens/index.js";
|
|
7
7
|
import { useBandPlot } from "../hooks/useBandPlot.js";
|
|
8
8
|
import { probeAxisLabels } from "../layout/auto-margin.js";
|
|
9
|
-
import {
|
|
9
|
+
import { AxisLeftNumeric } from "../primitives/Axes.js";
|
|
10
10
|
import { ChartFrame, resolveLegend } from "../primitives/ChartFrame.js";
|
|
11
|
-
import {
|
|
12
|
-
ChartTooltipFloat,
|
|
13
|
-
TooltipBody,
|
|
14
|
-
TooltipHeader,
|
|
15
|
-
TooltipRow
|
|
16
|
-
} from "../primitives/ChartTooltip.js";
|
|
11
|
+
import { TooltipRows } from "../primitives/ChartTooltip.js";
|
|
17
12
|
import { Crosshair } from "../primitives/Crosshair.js";
|
|
18
13
|
import { HatchPattern, hatchFill, hatchSizeFor } from "../primitives/HatchPattern.js";
|
|
19
|
-
import { HoverOverlay } from "../primitives/HoverOverlay.js";
|
|
20
14
|
import { deriveTooltipRows } from "../series.js";
|
|
21
15
|
import { fmtAxisDate } from "../utils/format.js";
|
|
16
|
+
import { BandAxisOverlay, BandTooltip, clampFraction } from "./band-chrome.js";
|
|
22
17
|
const DEFAULT_UP_FRACTION = 0.35;
|
|
23
18
|
const DEFAULT_PANE_TICKS = 3;
|
|
24
19
|
function assertPaneKey(side, key, resolved, series) {
|
|
@@ -107,7 +102,7 @@ function MirroredBarsPlot(props) {
|
|
|
107
102
|
...marginOverride !== void 0 && { margin: marginOverride },
|
|
108
103
|
...tooltip !== void 0 && { tooltip }
|
|
109
104
|
});
|
|
110
|
-
const { bands, margin, plotWidth,
|
|
105
|
+
const { bands, margin, plotWidth, point, crosshairX, step, bandWidth } = band;
|
|
111
106
|
const barBand = Math.max(plot.height - margin.top - margin.bottom, 2);
|
|
112
107
|
const upHeight = Math.max(Math.round(barBand * upFraction), 1);
|
|
113
108
|
const downHeight = Math.max(barBand - upHeight, 1);
|
|
@@ -198,8 +193,6 @@ function MirroredBarsPlot(props) {
|
|
|
198
193
|
hatchId
|
|
199
194
|
]);
|
|
200
195
|
if (plotWidth <= 0 || bands.length === 0) return null;
|
|
201
|
-
const cfg = tooltip === false ? void 0 : tooltip;
|
|
202
|
-
const badge = cfg?.label === void 0 || point === null ? null : cfg.label(point);
|
|
203
196
|
const visibleSeries = series.filter((s) => !hidden.has(s.key)).map((s) => {
|
|
204
197
|
if (s.formatValue !== void 0) return s;
|
|
205
198
|
if (s.key === up.key) return { ...s, formatValue: (v) => up.format(v) };
|
|
@@ -258,73 +251,22 @@ function MirroredBarsPlot(props) {
|
|
|
258
251
|
),
|
|
259
252
|
crosshairX !== null && /* @__PURE__ */ jsx(Crosshair, { x: crosshairX, top: 0, bottom: barBand }),
|
|
260
253
|
/* @__PURE__ */ jsx(
|
|
261
|
-
|
|
254
|
+
BandAxisOverlay,
|
|
262
255
|
{
|
|
263
|
-
|
|
264
|
-
scale,
|
|
265
|
-
tickValues: band.tickValues,
|
|
266
|
-
tickFormat: (v) => formatX(String(v)),
|
|
267
|
-
anchorTerminals: band.xAnchorTerminals,
|
|
268
|
-
...band.xWrapWidth !== void 0 && { wrapWidth: band.xWrapWidth }
|
|
269
|
-
}
|
|
270
|
-
),
|
|
271
|
-
/* @__PURE__ */ jsx(
|
|
272
|
-
HoverOverlay,
|
|
273
|
-
{
|
|
274
|
-
width: plotWidth,
|
|
256
|
+
band,
|
|
275
257
|
height: barBand,
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
onLeave: cursor.onPointerLeave,
|
|
280
|
-
onKeyDown: cursor.onKeyDown,
|
|
281
|
-
onBlur: cursor.onBlur,
|
|
282
|
-
valueMax: Math.max(bands.length - 1, 0),
|
|
283
|
-
...point !== null && {
|
|
284
|
-
valueNow: bands.indexOf(point),
|
|
285
|
-
valueText: formatX(getX(point))
|
|
286
|
-
},
|
|
287
|
-
...ariaLabel !== void 0 && { ariaLabel }
|
|
258
|
+
getX,
|
|
259
|
+
formatX,
|
|
260
|
+
ariaLabel
|
|
288
261
|
}
|
|
289
262
|
)
|
|
290
263
|
] })
|
|
291
264
|
]
|
|
292
265
|
}
|
|
293
266
|
),
|
|
294
|
-
|
|
295
|
-
/* @__PURE__ */ jsx(
|
|
296
|
-
TooltipHeader,
|
|
297
|
-
{
|
|
298
|
-
date: getX(point),
|
|
299
|
-
...cfg?.formatHeader !== void 0 && {
|
|
300
|
-
format: (key) => cfg.formatHeader?.(key, point) ?? key
|
|
301
|
-
},
|
|
302
|
-
...badge !== null && { label: badge.text, labelColor: badge.color }
|
|
303
|
-
}
|
|
304
|
-
),
|
|
305
|
-
/* @__PURE__ */ jsxs(TooltipBody, { children: [
|
|
306
|
-
cfg?.prependRows?.(point, { hidden }),
|
|
307
|
-
rows.map((row) => /* @__PURE__ */ jsx(
|
|
308
|
-
TooltipRow,
|
|
309
|
-
{
|
|
310
|
-
color: row.color,
|
|
311
|
-
label: row.label,
|
|
312
|
-
value: row.value,
|
|
313
|
-
shape: row.shape,
|
|
314
|
-
dashed: row.dashed,
|
|
315
|
-
...row.strokeWidth !== void 0 && { strokeWidth: row.strokeWidth }
|
|
316
|
-
},
|
|
317
|
-
row.key
|
|
318
|
-
)),
|
|
319
|
-
cfg?.extraRows?.(point, { hidden })
|
|
320
|
-
] })
|
|
321
|
-
] })
|
|
267
|
+
/* @__PURE__ */ jsx(BandTooltip, { band, tooltip, getX, hidden, children: /* @__PURE__ */ jsx(TooltipRows, { rows }) })
|
|
322
268
|
] });
|
|
323
269
|
}
|
|
324
|
-
function clampFraction(value) {
|
|
325
|
-
if (value === void 0 || !Number.isFinite(value)) return 0;
|
|
326
|
-
return Math.min(Math.max(value, 0), 1);
|
|
327
|
-
}
|
|
328
270
|
function finiteOrNull(v) {
|
|
329
271
|
return v === null || v === void 0 || Number.isNaN(v) ? null : v;
|
|
330
272
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { BandPlot, BandTooltipConfig } from '../hooks/useBandPlot.js';
|
|
3
|
+
/**
|
|
4
|
+
* The chrome `BandStrip` and `MirroredBars` share around their own marks — the slot axis, the
|
|
5
|
+
* keyboard/pointer overlay and the tooltip shell — so the two `useBandPlot` kinds cannot drift in
|
|
6
|
+
* any of them. Internal; neither is exported from a barrel.
|
|
7
|
+
*
|
|
8
|
+
* theme-allow-file hand-rolled-plot — the slot axis and overlay of the two declared banded
|
|
9
|
+
* exceptions (`BandStrip`, `MirroredBars`), which carry the same waiver for the same reason.
|
|
10
|
+
*/
|
|
11
|
+
/** A 0..1 share. Non-finite (a 0/0 fold count) reads as "nothing is absent" — the conservative
|
|
12
|
+
* end, since the alternative is a band that does not render at all. */
|
|
13
|
+
export declare function clampFraction(value: number | undefined): number;
|
|
14
|
+
/** The slot axis under a `height`-tall band row, plus the hover/keyboard overlay over it. */
|
|
15
|
+
export declare function BandAxisOverlay<T>({ band, height, getX, formatX, ariaLabel, }: {
|
|
16
|
+
band: BandPlot<T>;
|
|
17
|
+
height: number;
|
|
18
|
+
getX: (d: T) => string;
|
|
19
|
+
formatX: (key: string) => string;
|
|
20
|
+
ariaLabel: string | undefined;
|
|
21
|
+
}): import("react").JSX.Element;
|
|
22
|
+
/** The tooltip shell: header (+ badge), the consumer's prepended rows, the kind's own derived
|
|
23
|
+
* `children` rows, the consumer's extra rows. Renders nothing off-hover or with `tooltip: false`. */
|
|
24
|
+
export declare function BandTooltip<T>({ band, tooltip, getX, hidden, children, }: {
|
|
25
|
+
band: BandPlot<T>;
|
|
26
|
+
tooltip: BandTooltipConfig<T> | false | undefined;
|
|
27
|
+
getX: (d: T) => string;
|
|
28
|
+
hidden: ReadonlySet<string>;
|
|
29
|
+
children: ReactNode;
|
|
30
|
+
}): import("react").JSX.Element | null;
|
|
31
|
+
//# sourceMappingURL=band-chrome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"band-chrome.d.ts","sourceRoot":"","sources":["../../../src/charts/kinds/band-chrome.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAKvE;;;;;;;GAOG;AAEH;uEACuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG/D;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,CAAC,EAAE,EACjC,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,OAAO,EACP,SAAS,GACV,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IACtB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B,+BAkBA;AAED;qGACqG;AACrG,wBAAgB,WAAW,CAAC,CAAC,EAAE,EAC7B,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,MAAM,EACN,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjB,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,SAAS,CAAA;IACjD,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IACtB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC3B,QAAQ,EAAE,SAAS,CAAA;CACpB,sCAqBA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { AxisBottomDate } from "../primitives/Axes.js";
|
|
3
|
+
import { ChartTooltipFloat, TooltipBody, TooltipHeader } from "../primitives/ChartTooltip.js";
|
|
4
|
+
import { cursorSliderProps, HoverOverlay } from "../primitives/HoverOverlay.js";
|
|
5
|
+
function clampFraction(value) {
|
|
6
|
+
if (value === void 0 || !Number.isFinite(value)) return 0;
|
|
7
|
+
return Math.min(Math.max(value, 0), 1);
|
|
8
|
+
}
|
|
9
|
+
function BandAxisOverlay({
|
|
10
|
+
band,
|
|
11
|
+
height,
|
|
12
|
+
getX,
|
|
13
|
+
formatX,
|
|
14
|
+
ariaLabel
|
|
15
|
+
}) {
|
|
16
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
17
|
+
/* @__PURE__ */ jsx(
|
|
18
|
+
AxisBottomDate,
|
|
19
|
+
{
|
|
20
|
+
top: height,
|
|
21
|
+
scale: band.scale,
|
|
22
|
+
tickValues: band.tickValues,
|
|
23
|
+
tickFormat: (v) => formatX(String(v)),
|
|
24
|
+
anchorTerminals: band.xAnchorTerminals,
|
|
25
|
+
...band.xWrapWidth !== void 0 && { wrapWidth: band.xWrapWidth }
|
|
26
|
+
}
|
|
27
|
+
),
|
|
28
|
+
/* @__PURE__ */ jsx(
|
|
29
|
+
HoverOverlay,
|
|
30
|
+
{
|
|
31
|
+
width: band.plotWidth,
|
|
32
|
+
height,
|
|
33
|
+
...cursorSliderProps({ cursor: band.cursor, data: band.bands, getX, formatX, ariaLabel })
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
] });
|
|
37
|
+
}
|
|
38
|
+
function BandTooltip({
|
|
39
|
+
band,
|
|
40
|
+
tooltip,
|
|
41
|
+
getX,
|
|
42
|
+
hidden,
|
|
43
|
+
children
|
|
44
|
+
}) {
|
|
45
|
+
const { point } = band;
|
|
46
|
+
if (!band.showTooltip || point === null) return null;
|
|
47
|
+
const cfg = tooltip === false ? void 0 : tooltip;
|
|
48
|
+
const badge = cfg?.label === void 0 ? null : cfg.label(point);
|
|
49
|
+
return /* @__PURE__ */ jsxs(ChartTooltipFloat, { anchor: band.tooltipAnchor, ariaLive: band.ariaLive, children: [
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
TooltipHeader,
|
|
52
|
+
{
|
|
53
|
+
date: getX(point),
|
|
54
|
+
...cfg?.formatHeader !== void 0 && {
|
|
55
|
+
format: (key) => cfg.formatHeader?.(key, point) ?? key
|
|
56
|
+
},
|
|
57
|
+
...badge !== null && { label: badge.text, labelColor: badge.color }
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
/* @__PURE__ */ jsxs(TooltipBody, { children: [
|
|
61
|
+
cfg?.prependRows?.(point, { hidden }),
|
|
62
|
+
children,
|
|
63
|
+
cfg?.extraRows?.(point, { hidden })
|
|
64
|
+
] })
|
|
65
|
+
] });
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
BandAxisOverlay,
|
|
69
|
+
BandTooltip,
|
|
70
|
+
clampFraction
|
|
71
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartesianChart.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/CartesianChart.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAOzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAM/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAWzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C;;;qGAGqG;AACrG,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AACnG,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAOvD;uFACuF;AACvF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EACH,CAAC,MAAM,EAAE,MAAM,CAAC,GAChB,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClF;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;oFAEgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CACzB,CAAA;AAED;;eAEe;AACf,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC1C,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IAClC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACxD;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IAC5C;;iGAE6F;IAC7F,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;IACrE,0FAA0F;IAC1F,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;IACnE;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,4FAA4F;AAC5F,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,IAAI,EAAE,SAAS,CAAC,EAAE,CAAA;IAClB,yFAAyF;IACzF,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IACzB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,eAAe,CAAA;IACvB,mDAAmD;IACnD,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,CAAA;IACnB,+DAA+D;IAC/D,WAAW,EAAE,CAAC,GAAG,IAAI,CAAA;IACrB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,WAAW,GAAG;IACjD,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IACtB,8EAA8E;IAC9E,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IACxB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IACjB;0EACsE;IACtE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAClB;+BAC2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAA;IAC1E,6DAA6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACjC;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;IAC1B,mEAAmE;IACnE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,CAAA;IACxF;kGAC8F;IAC9F,MAAM,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAA;IAClC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IAC3C,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,KAC/B,MAAM,GAAG,IAAI,CAAA;IAClB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;CAC7C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,EAC9B,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,MAAM,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE;AACjC;;;;;;GAMG;AACH,WAAW,GAAE,SAAS,MAAM,EAAO,GAClC,CAAC,MAAM,EAAE,MAAM,CAAC,CAkDlB;
|
|
1
|
+
{"version":3,"file":"CartesianChart.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/CartesianChart.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAOzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAM/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAWzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C;;;qGAGqG;AACrG,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AACnG,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAOvD;uFACuF;AACvF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EACH,CAAC,MAAM,EAAE,MAAM,CAAC,GAChB,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClF;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;oFAEgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CACzB,CAAA;AAED;;eAEe;AACf,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC1C,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IAClC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACxD;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IAC5C;;iGAE6F;IAC7F,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;IACrE,0FAA0F;IAC1F,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;IACnE;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,4FAA4F;AAC5F,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,IAAI,EAAE,SAAS,CAAC,EAAE,CAAA;IAClB,yFAAyF;IACzF,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IACzB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,eAAe,CAAA;IACvB,mDAAmD;IACnD,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,CAAA;IACnB,+DAA+D;IAC/D,WAAW,EAAE,CAAC,GAAG,IAAI,CAAA;IACrB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,WAAW,GAAG;IACjD,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IACtB,8EAA8E;IAC9E,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IACxB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IACjB;0EACsE;IACtE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAClB;+BAC2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAA;IAC1E,6DAA6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACjC;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;IAC1B,mEAAmE;IACnE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,CAAA;IACxF;kGAC8F;IAC9F,MAAM,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAA;IAClC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IAC3C,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,KAC/B,MAAM,GAAG,IAAI,CAAA;IAClB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;CAC7C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,EAC9B,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,MAAM,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE;AACjC;;;;;;GAMG;AACH,WAAW,GAAE,SAAS,MAAM,EAAO,GAClC,CAAC,MAAM,EAAE,MAAM,CAAC,CAkDlB;AAsHD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAChC,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,MAAM,EACN,CAAC,EACD,EAAE,EACF,MAAM,EACN,WAAW,EACX,OAAqB,EACrB,YAAY,EACZ,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,WAAW,EACX,IAAI,EACJ,MAAM,EACN,OAAO,EACP,MAAM,EAAE,cAAc,EACtB,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,SAAS,CAiDpC"}
|
|
@@ -25,9 +25,9 @@ import {
|
|
|
25
25
|
yTickCount
|
|
26
26
|
} from "./chart-layout.js";
|
|
27
27
|
import { useChartContainerClass, useChartMetrics } from "./chart-tier.js";
|
|
28
|
-
import { ChartTooltipFloat, TooltipBody, TooltipHeader,
|
|
28
|
+
import { ChartTooltipFloat, TooltipBody, TooltipHeader, TooltipRows } from "./ChartTooltip.js";
|
|
29
29
|
import { Crosshair, SeriesDot } from "./Crosshair.js";
|
|
30
|
-
import { HoverOverlay } from "./HoverOverlay.js";
|
|
30
|
+
import { cursorSliderProps, HoverOverlay } from "./HoverOverlay.js";
|
|
31
31
|
import { XZoneRects } from "./XZoneRects.js";
|
|
32
32
|
import { ZoneRects } from "./ZoneRects.js";
|
|
33
33
|
const DEFAULT_AUTO_PAD = 1.1;
|
|
@@ -109,16 +109,23 @@ function buildYScale(cfg, domain, yMax, ticks) {
|
|
|
109
109
|
...cfg?.nice === true && { nice: true }
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
|
-
function
|
|
113
|
-
const {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
112
|
+
function resolveXAxisLayout(input) {
|
|
113
|
+
const { marginInput, flatMargin, rotated45Margin, flatLabelPx, xLabels, fontPx, categorical } = input;
|
|
114
|
+
const flatXMax = Math.max(input.plotWidth - flatMargin.left - flatMargin.right, 0);
|
|
115
|
+
const xPlan = planXLabels({ labels: xLabels, plotWidth: flatXMax, fontPx, categorical });
|
|
116
|
+
const rotate = input.xLabelRotate ?? (categorical ? xPlan.rotate : 0);
|
|
117
|
+
if (rotate === 45) {
|
|
118
|
+
const tickLabelPx = rotatedXLabelPx(xLabels, fontPx);
|
|
119
|
+
return { baseMargin: rotated45Margin, rotate, wrapWidth: void 0, tickLabelPx };
|
|
120
|
+
}
|
|
121
|
+
if (rotate === 90) {
|
|
122
|
+
const baseMargin2 = autoMargin({ ...marginInput, rotate });
|
|
123
|
+
return { baseMargin: baseMargin2, rotate, wrapWidth: void 0, tickLabelPx: flatLabelPx };
|
|
124
|
+
}
|
|
125
|
+
if (!xPlan.wrap)
|
|
126
|
+
return { baseMargin: flatMargin, rotate, wrapWidth: void 0, tickLabelPx: flatLabelPx };
|
|
127
|
+
const baseMargin = autoMargin({ ...marginInput, bottomLines: xPlan.lines });
|
|
128
|
+
return { baseMargin, rotate, wrapWidth: xPlan.wrapPx, tickLabelPx: xPlan.labelPx };
|
|
122
129
|
}
|
|
123
130
|
function CartesianChart({
|
|
124
131
|
data,
|
|
@@ -269,9 +276,9 @@ function CartesianPlot({
|
|
|
269
276
|
const xLabels = useMemo(() => keys.map(formatX), [keys, formatX]);
|
|
270
277
|
const yPlacement = resolveYPlacement(containerClass, { marginOverrideLeft: marginOverride?.left });
|
|
271
278
|
const categorical = tight && classifyDomain(keys) === "band";
|
|
272
|
-
const
|
|
273
|
-
const
|
|
274
|
-
|
|
279
|
+
const flatLabelPx = useMemo(() => xLabelPxFor(xLabels, tier.axisFont), [xLabels, tier.axisFont]);
|
|
280
|
+
const measured = useMemo(() => {
|
|
281
|
+
const marginInput = {
|
|
275
282
|
left: yPlacement === "outside" ? leftLabels : [],
|
|
276
283
|
right: rightLabels,
|
|
277
284
|
bottom: xLabels,
|
|
@@ -281,45 +288,33 @@ function CartesianPlot({
|
|
|
281
288
|
floor: resolveMarginFloor(yPlacement, tier.margin),
|
|
282
289
|
anchorTerminals: tight,
|
|
283
290
|
...marginOverride !== void 0 && { override: marginOverride }
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
leftLabels,
|
|
287
|
-
rightLabels,
|
|
288
|
-
xLabels,
|
|
289
|
-
tier.axisFont,
|
|
290
|
-
tier.margin,
|
|
291
|
-
marginOverride,
|
|
292
|
-
tight,
|
|
293
|
-
yPlacement
|
|
294
|
-
]
|
|
295
|
-
);
|
|
296
|
-
const flatMargin = useMemo(() => autoMargin(marginInput), [marginInput]);
|
|
297
|
-
const rotated45Margin = useMemo(() => autoMargin({ ...marginInput, rotate: 45 }), [marginInput]);
|
|
298
|
-
const flatXMax = Math.max(plot.width - flatMargin.left - flatMargin.right, 0);
|
|
299
|
-
const xPlan = useMemo(
|
|
300
|
-
() => planXLabels({ labels: xLabels, plotWidth: flatXMax, fontPx: tier.axisFont, categorical }),
|
|
301
|
-
[xLabels, flatXMax, tier.axisFont, categorical]
|
|
302
|
-
);
|
|
303
|
-
const rotate = xLabelRotate ?? (categorical ? xPlan.rotate : 0);
|
|
304
|
-
const wrapWidth = rotate === 0 && xPlan.wrap ? xPlan.wrapPx : void 0;
|
|
305
|
-
const tickLabelPx = resolveTickLabelPx({
|
|
306
|
-
rotate,
|
|
307
|
-
wrapWidth,
|
|
308
|
-
xLabels,
|
|
309
|
-
axisFont: tier.axisFont,
|
|
310
|
-
flatLabelPx: xLabelPx,
|
|
311
|
-
wrappedLabelPx: xPlan.labelPx
|
|
312
|
-
});
|
|
313
|
-
const baseMargin = useMemo(
|
|
314
|
-
() => resolveBaseMargin({
|
|
315
|
-
rotate,
|
|
316
|
-
wrapWidth,
|
|
317
|
-
flatMargin,
|
|
318
|
-
rotated45Margin,
|
|
291
|
+
};
|
|
292
|
+
return {
|
|
319
293
|
marginInput,
|
|
320
|
-
|
|
294
|
+
flatMargin: autoMargin(marginInput),
|
|
295
|
+
rotated45Margin: autoMargin({ ...marginInput, rotate: 45 })
|
|
296
|
+
};
|
|
297
|
+
}, [
|
|
298
|
+
leftLabels,
|
|
299
|
+
rightLabels,
|
|
300
|
+
xLabels,
|
|
301
|
+
tier.axisFont,
|
|
302
|
+
tier.margin,
|
|
303
|
+
marginOverride,
|
|
304
|
+
tight,
|
|
305
|
+
yPlacement
|
|
306
|
+
]);
|
|
307
|
+
const { baseMargin, rotate, wrapWidth, tickLabelPx } = useMemo(
|
|
308
|
+
() => resolveXAxisLayout({
|
|
309
|
+
...measured,
|
|
310
|
+
flatLabelPx,
|
|
311
|
+
xLabels,
|
|
312
|
+
fontPx: tier.axisFont,
|
|
313
|
+
plotWidth: plot.width,
|
|
314
|
+
categorical,
|
|
315
|
+
xLabelRotate
|
|
321
316
|
}),
|
|
322
|
-
[
|
|
317
|
+
[measured, flatLabelPx, xLabels, tier.axisFont, plot.width, categorical, xLabelRotate]
|
|
323
318
|
);
|
|
324
319
|
const yMax = Math.max(plot.height - baseMargin.top - baseMargin.bottom, 0);
|
|
325
320
|
const yScale = useMemo(
|
|
@@ -523,18 +518,7 @@ function CartesianPlot({
|
|
|
523
518
|
{
|
|
524
519
|
width: xMax,
|
|
525
520
|
height: yMax,
|
|
526
|
-
|
|
527
|
-
onDown: cursor.onPointerDown,
|
|
528
|
-
onUp: cursor.onPointerUp,
|
|
529
|
-
onLeave: cursor.onPointerLeave,
|
|
530
|
-
onKeyDown: cursor.onKeyDown,
|
|
531
|
-
onBlur: cursor.onBlur,
|
|
532
|
-
valueMax: Math.max(data.length - 1, 0),
|
|
533
|
-
...point !== null && {
|
|
534
|
-
valueNow: data.indexOf(point),
|
|
535
|
-
valueText: formatX(getX(point))
|
|
536
|
-
},
|
|
537
|
-
...ariaLabel !== void 0 && { ariaLabel }
|
|
521
|
+
...cursorSliderProps({ cursor, data, getX, formatX, ariaLabel })
|
|
538
522
|
}
|
|
539
523
|
)
|
|
540
524
|
] })
|
|
@@ -553,18 +537,7 @@ function CartesianPlot({
|
|
|
553
537
|
),
|
|
554
538
|
/* @__PURE__ */ jsxs(TooltipBody, { children: [
|
|
555
539
|
tooltipCfg?.prependRows?.(point, { visible, hidden }),
|
|
556
|
-
|
|
557
|
-
TooltipRow,
|
|
558
|
-
{
|
|
559
|
-
color: row.color,
|
|
560
|
-
label: row.label,
|
|
561
|
-
value: row.value,
|
|
562
|
-
shape: row.shape,
|
|
563
|
-
dashed: row.dashed,
|
|
564
|
-
...row.strokeWidth !== void 0 && { strokeWidth: row.strokeWidth }
|
|
565
|
-
},
|
|
566
|
-
row.key
|
|
567
|
-
)),
|
|
540
|
+
/* @__PURE__ */ jsx(TooltipRows, { rows }),
|
|
568
541
|
tooltipCfg?.extraRows?.(point, { visible, hidden })
|
|
569
542
|
] })
|
|
570
543
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartCard.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartCard.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAKhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAuFhD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GACtC,eAAe,CAAC,aAAa,CAAC,GAAG;IAC/B,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;8FAC0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;kEAC8D;IAC9D,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;sDACkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;oGACgG;IAChG,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAEH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,iBAAuB,EACvB,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,cAAc,+
|
|
1
|
+
{"version":3,"file":"ChartCard.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartCard.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAKhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAuFhD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GACtC,eAAe,CAAC,aAAa,CAAC,GAAG;IAC/B,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;8FAC0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;kEAC8D;IAC9D,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;sDACkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;oGACgG;IAChG,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAEH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,iBAAuB,EACvB,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,cAAc,+BAsFhB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useMemo, useReducer, useState } from "react";
|
|
3
3
|
import { cx } from "../../common/props.js";
|
|
4
4
|
import { VX } from "../../tokens/index.js";
|
|
5
5
|
import { WidgetHeader } from "../../dashboard/widget-header.js";
|
|
6
6
|
import { useChartSize } from "../hooks/useChartSize.js";
|
|
7
7
|
import { useHysteresis } from "../hooks/use-hysteresis.js";
|
|
8
|
-
import { ChartCardContext } from "./chart-card-context.js";
|
|
8
|
+
import { ChartCardContext, legendSlotReducer } from "./chart-card-context.js";
|
|
9
9
|
import { ChartEmpty, ChartError, ChartPending, resolveChartState } from "./ChartPending.js";
|
|
10
10
|
const CARD_SHORT_HEIGHT = 280;
|
|
11
11
|
const SHORT_EXIT_SLACK = 24;
|
|
@@ -68,28 +68,10 @@ function ChartCard({
|
|
|
68
68
|
(wasShort) => measuredHeight > 0 && measuredHeight < (wasShort ? CARD_SHORT_HEIGHT + SHORT_EXIT_SLACK : CARD_SHORT_HEIGHT),
|
|
69
69
|
false
|
|
70
70
|
);
|
|
71
|
-
const
|
|
72
|
-
const [legendSlotVersion, setLegendSlotVersion] = useState(0);
|
|
73
|
-
const claimLegendSlot = useCallback((id) => {
|
|
74
|
-
if (legendOwnerRef.current === null) legendOwnerRef.current = id;
|
|
75
|
-
return legendOwnerRef.current === id;
|
|
76
|
-
}, []);
|
|
77
|
-
const releaseLegendSlot = useCallback((id) => {
|
|
78
|
-
if (legendOwnerRef.current === id) {
|
|
79
|
-
legendOwnerRef.current = null;
|
|
80
|
-
setLegendSlotVersion((v) => v + 1);
|
|
81
|
-
}
|
|
82
|
-
}, []);
|
|
71
|
+
const [legendClaimants, dispatchLegendSlot] = useReducer(legendSlotReducer, []);
|
|
83
72
|
const context = useMemo(
|
|
84
|
-
() => ({
|
|
85
|
-
|
|
86
|
-
inCard: true,
|
|
87
|
-
short,
|
|
88
|
-
claimLegendSlot,
|
|
89
|
-
releaseLegendSlot,
|
|
90
|
-
legendSlotVersion
|
|
91
|
-
}),
|
|
92
|
-
[legendSlot, short, claimLegendSlot, releaseLegendSlot, legendSlotVersion]
|
|
73
|
+
() => ({ legendSlot, inCard: true, short, legendClaimants, dispatchLegendSlot }),
|
|
74
|
+
[legendSlot, short, legendClaimants]
|
|
93
75
|
);
|
|
94
76
|
return /* @__PURE__ */ jsx(ChartCardContext.Provider, { value: context, children: /* @__PURE__ */ jsxs(
|
|
95
77
|
"div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFrame.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartFrame.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChartFrame.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartFrame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useContext, useId, useLayoutEffect, useMemo,
|
|
2
|
+
import { useCallback, useContext, useId, useLayoutEffect, useMemo, useState } from "react";
|
|
3
3
|
import { createPortal } from "react-dom";
|
|
4
4
|
import {
|
|
5
5
|
deprecatedProp,
|
|
@@ -63,52 +63,35 @@ function ChartFrame({
|
|
|
63
63
|
inCard,
|
|
64
64
|
legendSlot,
|
|
65
65
|
short: cardShort,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
legendSlotVersion
|
|
66
|
+
legendClaimants,
|
|
67
|
+
dispatchLegendSlot
|
|
69
68
|
} = useContext(ChartCardContext);
|
|
70
69
|
const frameId = useId();
|
|
71
|
-
const [ownsSlot, setOwnsSlot] = useState(false);
|
|
72
70
|
const [slotSeedW, setSlotSeedW] = useState(0);
|
|
73
|
-
const ownsSlotRef = useRef(false);
|
|
74
71
|
const placement = legend === false ? "bottom" : legend.placement ?? "bottom";
|
|
75
72
|
const vertical = placement === "left" || placement === "right";
|
|
76
|
-
const wantsHeaderSlot = legend !== false && legend.headerSlot !== false && !vertical;
|
|
73
|
+
const wantsHeaderSlot = legendSlot !== null && legend !== false && legend.headerSlot !== false && !vertical;
|
|
77
74
|
const resolvedState = resolveChartState({ ...state !== void 0 && { state }, isPending });
|
|
78
75
|
const legendVisible = legend !== false && resolvedState === null;
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
76
|
+
const ownsSlot = wantsHeaderSlot && legendClaimants[0] === frameId;
|
|
77
|
+
const slotDenied = wantsHeaderSlot && !ownsSlot && legendClaimants.includes(frameId);
|
|
78
|
+
useLayoutEffect(() => {
|
|
79
|
+
if (!wantsHeaderSlot) return void 0;
|
|
80
|
+
dispatchLegendSlot({ type: "claim", id: frameId });
|
|
81
|
+
return () => dispatchLegendSlot({ type: "release", id: frameId });
|
|
82
|
+
}, [wantsHeaderSlot, frameId, dispatchLegendSlot]);
|
|
83
|
+
useLayoutEffect(() => {
|
|
84
|
+
if (slotDenied && legendVisible) reportOnce("ChartFrame", legendSlotContention("ChartFrame"));
|
|
85
|
+
}, [slotDenied, legendVisible]);
|
|
86
|
+
useLayoutEffect(() => {
|
|
87
|
+
if (!ownsSlot || legendSlot === null) return void 0;
|
|
89
88
|
setSlotSeedW(legendSlot.getBoundingClientRect().width);
|
|
90
89
|
slotRef(legendSlot);
|
|
91
|
-
return
|
|
92
|
-
|
|
93
|
-
const releaseIfOwned = useCallback(() => {
|
|
94
|
-
if (!ownsSlotRef.current) return;
|
|
95
|
-
ownsSlotRef.current = false;
|
|
96
|
-
releaseLegendSlot(frameId);
|
|
97
|
-
slotRef(null);
|
|
98
|
-
}, [releaseLegendSlot, frameId, slotRef]);
|
|
99
|
-
useLayoutEffect(() => {
|
|
100
|
-
if (legendSlot === null || !wantsHeaderSlot) {
|
|
101
|
-
setOwnsSlot(false);
|
|
90
|
+
return () => {
|
|
91
|
+
slotRef(null);
|
|
102
92
|
setSlotSeedW(0);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
tryClaim();
|
|
106
|
-
return releaseIfOwned;
|
|
107
|
-
}, [legendSlot, wantsHeaderSlot, tryClaim, releaseIfOwned]);
|
|
108
|
-
useLayoutEffect(() => {
|
|
109
|
-
if (ownsSlotRef.current) return;
|
|
110
|
-
tryClaim();
|
|
111
|
-
}, [legendSlotVersion]);
|
|
93
|
+
};
|
|
94
|
+
}, [ownsSlot, legendSlot, slotRef]);
|
|
112
95
|
const viewportClass = useSizeClass();
|
|
113
96
|
const sizeClass = useContext(SizeClassHintContext) === void 0 ? "medium" : viewportClass;
|
|
114
97
|
const coarse = useCoarsePointer();
|
|
@@ -148,13 +131,13 @@ function ChartFrame({
|
|
|
148
131
|
"legend.maxRows",
|
|
149
132
|
"nothing (the legend fits by measured width)",
|
|
150
133
|
"1.32.0",
|
|
151
|
-
|
|
134
|
+
`Its UNIT changed from rows to entries: \`maxRows: ${legend.maxRows}\` is now read as a cap of ${legend.maxRows} legend ENTRIES (not rows), with the rest folded into an \`All N\` disclosure. An explicit value still wins this release.`
|
|
152
135
|
) : null
|
|
153
136
|
),
|
|
154
137
|
[legend, legendItems.length]
|
|
155
138
|
);
|
|
156
139
|
const statedHeight = height === void 0 ? void 0 : resolveFrameHeight(height, resolveFrameClass({ frameW: containerW, sizeClass }));
|
|
157
|
-
const slotW =
|
|
140
|
+
const slotW = ownsSlot ? Math.max(slotMeasuredW, slotSeedW) : 0;
|
|
158
141
|
const groups = legend !== false && legend.groups === true;
|
|
159
142
|
const legendKey = legendItems.map((item) => `${item.key}\0${item.label}\0${item.role ?? ""}\0${item.note ?? ""}`).join("");
|
|
160
143
|
const layout = useMemo(
|
|
@@ -176,7 +159,7 @@ function ChartFrame({
|
|
|
176
159
|
const fit = layout.legend.mode === "dots" || layout.legend.mode === "chips" ? layout.legend : null;
|
|
177
160
|
const legendMode = fit?.mode;
|
|
178
161
|
const showLegend = legendVisible && fit !== null;
|
|
179
|
-
const inHeader = showLegend &&
|
|
162
|
+
const inHeader = showLegend && ownsSlot && fit?.where === "header";
|
|
180
163
|
const sideLegendWidth = showLegend && vertical ? legendW : 0;
|
|
181
164
|
const topBottomLegendHeight = showLegend && !vertical && !inHeader ? legendH : 0;
|
|
182
165
|
const computedHeight = aspectRatio !== void 0 ? Math.round(containerW / aspectRatio) : layout.height;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartLegend.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartLegend.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChartLegend.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartLegend.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAK5D,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,CAAA;IAC9C,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;0EACsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mFAAmF;IACnF,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;iFAC6E;IAC7E,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IACxB;gCAC4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAsOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAkB,EAClB,WAAW,EACX,MAAkB,EAClB,QAAQ,EACR,OAAY,EACZ,SAAoB,EACpB,MAAc,EACd,OAAO,EACP,IAAc,EACd,SAAS,EACT,KAAK,GACN,EAAE,WAAW,GAAG;IACf,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1C,kCAAkC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACxB,+BA2GA"}
|