@k2b/ui 0.51.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.css +3 -0
- package/dist/browser/actions/Toolbar.js +8 -2
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/charts/core/bar-labels.js +5 -0
- package/dist/browser/charts/core/bar-labels.js.map +1 -0
- package/dist/browser/charts/core/bubble.js +166 -0
- package/dist/browser/charts/core/bubble.js.map +1 -0
- package/dist/browser/charts/core/default-styles.js +83 -0
- package/dist/browser/charts/core/default-styles.js.map +1 -0
- package/dist/browser/charts/core/funnel-layout.js +79 -0
- package/dist/browser/charts/core/funnel-layout.js.map +1 -0
- package/dist/browser/charts/core/funnel.js +27 -0
- package/dist/browser/charts/core/funnel.js.map +1 -0
- package/dist/browser/charts/core/index.js +6 -1
- package/dist/browser/charts/core/index.js.map +1 -1
- package/dist/browser/charts/core/pareto.js +120 -0
- package/dist/browser/charts/core/pareto.js.map +1 -0
- package/dist/browser/charts/core/radar.js +101 -0
- package/dist/browser/charts/core/radar.js.map +1 -0
- package/dist/browser/charts/core/registry.js +11 -1
- package/dist/browser/charts/core/registry.js.map +1 -1
- package/dist/browser/charts/core/render-size.js +3 -1
- package/dist/browser/charts/core/render-size.js.map +1 -1
- package/dist/browser/charts/core/render.js +19 -0
- package/dist/browser/charts/core/render.js.map +1 -1
- package/dist/browser/charts/core/snapshot.js +1 -1
- package/dist/browser/charts/core/snapshot.js.map +1 -1
- package/dist/browser/charts/core/svg-barGauge.js +67 -0
- package/dist/browser/charts/core/svg-barGauge.js.map +1 -0
- package/dist/browser/charts/core/svg-boxplot.js +127 -0
- package/dist/browser/charts/core/svg-boxplot.js.map +1 -0
- package/dist/browser/charts/core/svg-common.js +1065 -0
- package/dist/browser/charts/core/svg-common.js.map +1 -0
- package/dist/browser/charts/core/svg-gauge.js +185 -0
- package/dist/browser/charts/core/svg-gauge.js.map +1 -0
- package/dist/browser/charts/core/svg-heatmap.js +80 -0
- package/dist/browser/charts/core/svg-heatmap.js.map +1 -0
- package/dist/browser/charts/core/svg-histogram.js +73 -0
- package/dist/browser/charts/core/svg-histogram.js.map +1 -0
- package/dist/browser/charts/core/svg-renderers.js +9 -1777
- package/dist/browser/charts/core/svg-renderers.js.map +1 -1
- package/dist/browser/charts/core/svg-scatter.js +114 -0
- package/dist/browser/charts/core/svg-scatter.js.map +1 -0
- package/dist/browser/charts/core/treemap.js +138 -0
- package/dist/browser/charts/core/treemap.js.map +1 -0
- package/dist/browser/charts/description.js.map +1 -1
- package/dist/browser/content/ChartRoot.js +21 -7
- package/dist/browser/content/ChartRoot.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js +4 -1
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/DataTable.js +186 -193
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/Lightbox.js +55 -23
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/ThumbnailStrip.js +174 -0
- package/dist/browser/content/ThumbnailStrip.js.map +1 -0
- package/dist/browser/content/chart-bar.js +98 -0
- package/dist/browser/content/chart-bar.js.map +1 -1
- package/dist/browser/content/chart-inspection-core.js +28 -8
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/chart-message-catalog.js +18 -0
- package/dist/browser/content/chart-message-catalog.js.map +1 -1
- package/dist/browser/content/index.js +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/thumbnail-strip-messages.js +24 -0
- package/dist/browser/content/thumbnail-strip-messages.js.map +1 -0
- package/dist/browser/inputs/ChoiceInputs.js +132 -101
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/index.js +1 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js +330 -0
- package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
- package/dist/browser/internal/field.js +96 -77
- package/dist/browser/internal/field.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +7 -5
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js +92 -68
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +82 -70
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/stat-cell-messages.js +4 -2
- package/dist/browser/surfaces/stat-cell-messages.js.map +1 -1
- package/dist/browser/widgets/DashboardFrame.js +93 -88
- package/dist/browser/widgets/DashboardFrame.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js +8 -2
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/charts/core/bar-labels.js +5 -0
- package/dist/ssr/charts/core/bar-labels.js.map +1 -0
- package/dist/ssr/charts/core/bubble.js +166 -0
- package/dist/ssr/charts/core/bubble.js.map +1 -0
- package/dist/ssr/charts/core/default-styles.js +83 -0
- package/dist/ssr/charts/core/default-styles.js.map +1 -0
- package/dist/ssr/charts/core/funnel-layout.js +79 -0
- package/dist/ssr/charts/core/funnel-layout.js.map +1 -0
- package/dist/ssr/charts/core/funnel.js +27 -0
- package/dist/ssr/charts/core/funnel.js.map +1 -0
- package/dist/ssr/charts/core/index.js +6 -1
- package/dist/ssr/charts/core/index.js.map +1 -1
- package/dist/ssr/charts/core/pareto.js +120 -0
- package/dist/ssr/charts/core/pareto.js.map +1 -0
- package/dist/ssr/charts/core/radar.js +101 -0
- package/dist/ssr/charts/core/radar.js.map +1 -0
- package/dist/ssr/charts/core/registry.js +11 -1
- package/dist/ssr/charts/core/registry.js.map +1 -1
- package/dist/ssr/charts/core/render-size.js +3 -1
- package/dist/ssr/charts/core/render-size.js.map +1 -1
- package/dist/ssr/charts/core/render.js +19 -0
- package/dist/ssr/charts/core/render.js.map +1 -1
- package/dist/ssr/charts/core/snapshot.js +1 -1
- package/dist/ssr/charts/core/snapshot.js.map +1 -1
- package/dist/ssr/charts/core/svg-barGauge.js +67 -0
- package/dist/ssr/charts/core/svg-barGauge.js.map +1 -0
- package/dist/ssr/charts/core/svg-boxplot.js +127 -0
- package/dist/ssr/charts/core/svg-boxplot.js.map +1 -0
- package/dist/ssr/charts/core/svg-common.js +1065 -0
- package/dist/ssr/charts/core/svg-common.js.map +1 -0
- package/dist/ssr/charts/core/svg-gauge.js +185 -0
- package/dist/ssr/charts/core/svg-gauge.js.map +1 -0
- package/dist/ssr/charts/core/svg-heatmap.js +80 -0
- package/dist/ssr/charts/core/svg-heatmap.js.map +1 -0
- package/dist/ssr/charts/core/svg-histogram.js +73 -0
- package/dist/ssr/charts/core/svg-histogram.js.map +1 -0
- package/dist/ssr/charts/core/svg-renderers.js +9 -1777
- package/dist/ssr/charts/core/svg-renderers.js.map +1 -1
- package/dist/ssr/charts/core/svg-scatter.js +114 -0
- package/dist/ssr/charts/core/svg-scatter.js.map +1 -0
- package/dist/ssr/charts/core/treemap.js +138 -0
- package/dist/ssr/charts/core/treemap.js.map +1 -0
- package/dist/ssr/charts/description.js.map +1 -1
- package/dist/ssr/content/ChartRoot.js +21 -7
- package/dist/ssr/content/ChartRoot.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js +1 -0
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +12 -16
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +32 -3
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/ThumbnailStrip.js +103 -0
- package/dist/ssr/content/ThumbnailStrip.js.map +1 -0
- package/dist/ssr/content/chart-bar.js +98 -0
- package/dist/ssr/content/chart-bar.js.map +1 -1
- package/dist/ssr/content/chart-inspection-core.js +28 -8
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/chart-message-catalog.js +18 -0
- package/dist/ssr/content/chart-message-catalog.js.map +1 -1
- package/dist/ssr/content/index.js +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/thumbnail-strip-messages.js +24 -0
- package/dist/ssr/content/thumbnail-strip-messages.js.map +1 -0
- package/dist/ssr/inputs/ChoiceInputs.js +55 -40
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/index.js +1 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js +293 -0
- package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
- package/dist/ssr/internal/field.js +36 -24
- package/dist/ssr/internal/field.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +5 -1
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +40 -26
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +29 -18
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/stat-cell-messages.js +4 -2
- package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -1
- package/dist/ssr/widgets/DashboardFrame.js +6 -11
- package/dist/ssr/widgets/DashboardFrame.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Toolbar.d.ts +2 -0
- package/dist/types/charts/core/bar-labels.d.ts +1 -0
- package/dist/types/charts/core/bubble.d.ts +66 -0
- package/dist/types/charts/core/default-styles.d.ts +1 -0
- package/dist/types/charts/core/funnel-layout.d.ts +43 -0
- package/dist/types/charts/core/funnel.d.ts +13 -0
- package/dist/types/charts/core/index.d.ts +6 -1
- package/dist/types/charts/core/pareto.d.ts +40 -0
- package/dist/types/charts/core/radar.d.ts +47 -0
- package/dist/types/charts/core/registry.d.ts +10 -0
- package/dist/types/charts/core/render-size.d.ts +1 -1
- package/dist/types/charts/core/svg-barGauge.d.ts +3 -0
- package/dist/types/charts/core/svg-boxplot.d.ts +18 -0
- package/dist/types/charts/core/svg-common.d.ts +612 -0
- package/dist/types/charts/core/svg-gauge.d.ts +6 -0
- package/dist/types/charts/core/svg-heatmap.d.ts +6 -0
- package/dist/types/charts/core/svg-histogram.d.ts +16 -0
- package/dist/types/charts/core/svg-renderers.d.ts +8 -612
- package/dist/types/charts/core/svg-scatter.d.ts +23 -0
- package/dist/types/charts/core/treemap.d.ts +45 -0
- package/dist/types/charts/description.d.ts +63 -0
- package/dist/types/content/ChartRoot.d.ts +1 -1
- package/dist/types/content/Lightbox.d.ts +2 -0
- package/dist/types/content/ThumbnailStrip.d.ts +29 -0
- package/dist/types/content/chart-bar.d.ts +38 -2
- package/dist/types/content/chart-inspection-core.d.ts +7 -0
- package/dist/types/content/chart-inspection.d.ts +1 -0
- package/dist/types/content/chart-message-catalog.d.ts +8 -0
- package/dist/types/content/index.d.ts +1 -0
- package/dist/types/content/thumbnail-strip-messages.d.ts +10 -0
- package/dist/types/inputs/ChoiceInputs.d.ts +2 -0
- package/dist/types/inputs/index.d.ts +2 -0
- package/dist/types/inputs/markdown/MarkdownSelectionToolbar.d.ts +19 -0
- package/dist/types/internal/field.d.ts +2 -0
- package/dist/types/layout/PanelDialog.d.ts +5 -0
- package/dist/types/surfaces/stat-cell-messages.d.ts +1 -0
- package/dist/types/widgets/DashboardFrame.d.ts +4 -1
- package/package.json +2 -2
|
@@ -19,6 +19,9 @@ const categoryRoles = {
|
|
|
19
19
|
histogram: "bin",
|
|
20
20
|
boxplot: "box"
|
|
21
21
|
};
|
|
22
|
+
/** An element's box on screen; one name for the many reads below keeps the framework-free entry small. */
|
|
23
|
+
const box = element => element.getBoundingClientRect();
|
|
24
|
+
|
|
22
25
|
/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */
|
|
23
26
|
export function createChartInspector(options) {
|
|
24
27
|
const source = Symbol("chart cursor");
|
|
@@ -82,7 +85,7 @@ export function createChartInspector(options) {
|
|
|
82
85
|
x: matrix.a * x + matrix.c * y + matrix.e,
|
|
83
86
|
y: matrix.b * x + matrix.d * y + matrix.f
|
|
84
87
|
};
|
|
85
|
-
const rect = entry.element
|
|
88
|
+
const rect = box(entry.element);
|
|
86
89
|
return {
|
|
87
90
|
x: rect.x + rect.width / 2,
|
|
88
91
|
y: rect.y + rect.height / 2
|
|
@@ -137,6 +140,8 @@ export function createChartInspector(options) {
|
|
|
137
140
|
}
|
|
138
141
|
highlighted = [];
|
|
139
142
|
};
|
|
143
|
+
/** The open tooltip came from keyboard focus or keys, not from a pointer: it follows its mark when the page scrolls. */
|
|
144
|
+
let byKeyboard = false;
|
|
140
145
|
const close = (broadcast = true, cancelPending = true) => {
|
|
141
146
|
const state = linkedCursor?.read();
|
|
142
147
|
if (broadcast && state && state.source !== source) return;
|
|
@@ -272,7 +277,7 @@ export function createChartInspector(options) {
|
|
|
272
277
|
tooltip.append(line);
|
|
273
278
|
}
|
|
274
279
|
}
|
|
275
|
-
const rect = container
|
|
280
|
+
const rect = box(container),
|
|
276
281
|
point = screenPoint(entry);
|
|
277
282
|
const slot = categoryBands().find(candidate => candidate.entry === entry);
|
|
278
283
|
// A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.
|
|
@@ -309,10 +314,10 @@ export function createChartInspector(options) {
|
|
|
309
314
|
const rows = rowLayout(container);
|
|
310
315
|
const slots = records().filter(entry => entry.datum.role === role).map(entry => ({
|
|
311
316
|
entry,
|
|
312
|
-
rect: entry.element
|
|
317
|
+
rect: box(entry.element)
|
|
313
318
|
}));
|
|
314
319
|
if (!slots.length) return [];
|
|
315
|
-
const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => node
|
|
320
|
+
const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => box(node));
|
|
316
321
|
// The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose
|
|
317
322
|
// only guide is one vertical baseline, still get a band from the baseline to the longest bar.
|
|
318
323
|
const spans = [...guides, ...slots.map(slot => slot.rect)];
|
|
@@ -345,14 +350,14 @@ export function createChartInspector(options) {
|
|
|
345
350
|
const updatePlotBounds = () => {
|
|
346
351
|
const container = options.container();
|
|
347
352
|
if (!container) return;
|
|
348
|
-
const axes = Array.from(container.querySelectorAll(".stdlib-chart-axis")).map(
|
|
353
|
+
const axes = Array.from(container.querySelectorAll(".stdlib-chart-axis")).map(box);
|
|
349
354
|
if (axes.length < 2) return;
|
|
350
355
|
const left = Math.min(...axes.map(a => a.left)),
|
|
351
356
|
right = Math.max(...axes.map(a => a.right));
|
|
352
357
|
const top = Math.min(...axes.map(a => a.top)),
|
|
353
358
|
bottom = Math.max(...axes.map(a => a.bottom));
|
|
354
359
|
if (right <= left || bottom <= top) return;
|
|
355
|
-
const rect = container
|
|
360
|
+
const rect = box(container);
|
|
356
361
|
for (const [name, value] of Object.entries({
|
|
357
362
|
left: left - rect.left,
|
|
358
363
|
right: rect.right - right,
|
|
@@ -476,11 +481,12 @@ export function createChartInspector(options) {
|
|
|
476
481
|
if (!sample) return;
|
|
477
482
|
const entry = nearest(sample.x, sample.y, sample.target);
|
|
478
483
|
if (entry) {
|
|
484
|
+
byKeyboard = false;
|
|
479
485
|
show(entry, true, true);
|
|
480
486
|
if (seriesChart()) {
|
|
481
487
|
const container = options.container();
|
|
482
488
|
container?.setAttribute("data-cursor-source", "true");
|
|
483
|
-
container?.style.setProperty("--k2b-chart-inspection-y", `${sample.y - container
|
|
489
|
+
container?.style.setProperty("--k2b-chart-inspection-y", `${sample.y - box(container).top}px`);
|
|
484
490
|
}
|
|
485
491
|
} else close();
|
|
486
492
|
});
|
|
@@ -488,6 +494,7 @@ export function createChartInspector(options) {
|
|
|
488
494
|
let pointerFocusing = false;
|
|
489
495
|
const down = event => {
|
|
490
496
|
pointerFocusing = true;
|
|
497
|
+
byKeyboard = false;
|
|
491
498
|
pointerStart = {
|
|
492
499
|
x: event.clientX,
|
|
493
500
|
y: event.clientY
|
|
@@ -518,6 +525,7 @@ export function createChartInspector(options) {
|
|
|
518
525
|
pointerFocusing = false;
|
|
519
526
|
return;
|
|
520
527
|
}
|
|
528
|
+
byKeyboard = !pointerFocusing;
|
|
521
529
|
const nodes = visibleRecords();
|
|
522
530
|
const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === "line" ? sortedPoints.at(-1) : nodes[0];
|
|
523
531
|
if (first) show(first);
|
|
@@ -573,6 +581,7 @@ export function createChartInspector(options) {
|
|
|
573
581
|
const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))];
|
|
574
582
|
options.nav?.()?.reveal?.(next.element);
|
|
575
583
|
show(next);
|
|
584
|
+
byKeyboard = true;
|
|
576
585
|
return true;
|
|
577
586
|
};
|
|
578
587
|
return {
|
|
@@ -586,6 +595,17 @@ export function createChartInspector(options) {
|
|
|
586
595
|
click,
|
|
587
596
|
focus,
|
|
588
597
|
key,
|
|
598
|
+
/**
|
|
599
|
+
* The page scrolled: a keyboard tooltip, or one a linked chart keeps open, follows its mark; others close. A
|
|
600
|
+
* focused chart scrolled into view would otherwise close the tooltip its focus just opened.
|
|
601
|
+
*/
|
|
602
|
+
scroll: () => {
|
|
603
|
+
if (!byKeyboard) close();
|
|
604
|
+
// Still open (keyboard, or a linked chart keeps it): show the same mark again at its new place.
|
|
605
|
+
const entry = active;
|
|
606
|
+
active = undefined;
|
|
607
|
+
if (entry) show(entry, false);
|
|
608
|
+
},
|
|
589
609
|
close: () => close(),
|
|
590
610
|
invalidate,
|
|
591
611
|
leave: () => {
|
|
@@ -602,7 +622,7 @@ export function closeChartInspectionOnOutside(options) {
|
|
|
602
622
|
const scroll = event => {
|
|
603
623
|
if (event.target === options.container() && options.keepScroll?.()) return;
|
|
604
624
|
if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
|
|
605
|
-
options.close();
|
|
625
|
+
(options.scroll ?? options.close)();
|
|
606
626
|
};
|
|
607
627
|
window.addEventListener("pointerdown", outside);
|
|
608
628
|
window.addEventListener("scroll", scroll, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/chart-inspection-core.ts"],"sourcesContent":["import type { ChartDatum, ChartKind } from \"../charts/core/types\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport type { ChartCursor, ChartCursorState } from \"./chart-cursor\";\n\nexport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltip,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\nexport type { ChartKind } from \"../charts/core/types\";\n\nimport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\n\n/** Host policy for inspecting an overflowing drawing. */\nexport type ChartInspectionNavigation = {\n last?: boolean;\n pointer?: boolean;\n reveal?: (element: SVGGraphicsElement) => void;\n keepScroll?: boolean;\n};\n\ntype Entry = { element: SVGGraphicsElement; datum: ChartDatum };\n\n/** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */\nconst describe = (container: HTMLElement, id: string, on: boolean) => {\n const ids = (container.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter((token) => token && token !== id);\n if (on) ids.push(id);\n if (ids.length) container.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else container.removeAttribute(\"aria-describedby\");\n};\n\n/** Mark roles that stand for a whole category: hovering anywhere in its column (or row) inspects it. */\nconst rowLayout = (container: HTMLElement | undefined) => Boolean(container?.querySelector('svg[data-bar-layout=\"rows\"]'));\nconst categoryRoles: Partial<Record<ChartKind, string>> = { bar: \"item\", waterfall: \"item\", histogram: \"bin\", boxplot: \"box\" };\ntype CategoryBand = { entry: Entry; left: number; right: number; top: number; bottom: number };\n\n/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */\nexport function createChartInspector(options: {\n container: () => HTMLElement | undefined;\n cursor?: () => ChartCursor | undefined;\n tooltip: () => HTMLSpanElement | undefined;\n anchor: () => HTMLSpanElement | undefined;\n kind: () => ChartKind;\n enabled: () => boolean;\n /** Locale for unformatted values in an attached series legend. */\n locale?: () => string;\n /** Legend host when it is outside the inspected SVG container. */\n legend?: () => ParentNode | undefined;\n format: ChartTooltipFormatter;\n select: (selection: ChartSelection) => void;\n nav?: () => ChartInspectionNavigation | undefined;\n}) {\n const source = Symbol(\"chart cursor\");\n let entries: Entry[] | undefined;\n let sortedPoints: Entry[] = [];\n const byElement = new Map<Element, Entry>();\n let active: Entry | undefined;\n let highlighted: Entry[] = [];\n let pinned = false;\n let pointerStart: { x: number; y: number } | undefined;\n let moved = false;\n let pending: { x: number; y: number; target: Element | null } | undefined;\n let frame: number | undefined;\n // The cursor this chart is subscribed to. Closing reads it instead of the cursor prop: a chart also closes\n // while it unmounts, when a parent `<Show>` may already have dropped the value the prop came from.\n let linkedCursor: ChartCursor | undefined;\n\n const records = () => {\n if (!entries || (entries.length > 0 && !entries[0]!.element.isConnected)) {\n entries = [];\n byElement.clear();\n sortedPoints = [];\n for (const element of Array.from(options.container()?.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\") ?? [])) {\n try {\n const value: unknown = JSON.parse(element.getAttribute(\"data-chart-datum\") ?? \"null\");\n if (isChartDatum(value)) {\n const entry = { element, datum: value };\n entries.push(entry);\n byElement.set(element, entry);\n }\n } catch {\n /* Only valid renderer metadata participates in inspection. */\n }\n }\n sortedPoints = entries.filter((entry) => entry.datum.role === \"point\").sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n }\n return entries;\n };\n const highlightColor = (item: Entry): string => {\n // Read the actual paint before applying inspection styles, including\n // custom series and threshold colors. Invisible points use their line.\n const point = item.element.querySelector(\".stdlib-chart-inspection-point\");\n const source = point\n ? options\n .container()\n ?.querySelector(\n options.kind() === \"line\"\n ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`\n : \".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline\",\n )\n : (item.element.querySelector(\".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value\") ??\n item.element.querySelector(\":is(rect, path, circle):not(.k2b-chart-category-band)\"));\n const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;\n const color =\n (point || item.element.hasAttribute(\"data-chart-reference\") ? paint?.stroke : paint?.fill) ||\n `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;\n };\n const selectData = (selected: readonly ChartDatumRef[]) => {\n for (const entry of records()) {\n const matches = selected.some((datum) => sameChartDatum(datum, entry.datum));\n if (matches) entry.element.style.setProperty(\"--k2b-chart-selection-color\", highlightColor(entry));\n else entry.element.style.removeProperty(\"--k2b-chart-selection-color\");\n entry.element.toggleAttribute(\"data-selected\", matches);\n }\n };\n const screenPoint = (entry: Entry) => {\n const matrix = entry.element.getScreenCTM?.();\n const [x, y] = entry.datum.anchor;\n if (matrix) return { x: matrix.a * x + matrix.c * y + matrix.e, y: matrix.b * x + matrix.d * y + matrix.f };\n const rect = entry.element.getBoundingClientRect();\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n };\n const visibleRecords = () => {\n const nodes = records();\n if (options.kind() !== \"map\") return nodes;\n const viewport = options.container()?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n if (!viewport?.getScreenCTM?.()) return nodes;\n const root = viewport.ownerSVGElement?.getBoundingClientRect();\n if (!root?.width || !root.height) return nodes;\n const width = viewport?.width?.baseVal.value;\n const height = viewport?.height?.baseVal.value;\n if (!width || !height) return nodes;\n const left = root.left + viewport.x.baseVal.value;\n const top = root.top + viewport.y.baseVal.value;\n const clip = { left, top, right: left + width, bottom: top + height };\n return nodes.filter((entry) => {\n const point = screenPoint(entry);\n return point.x >= clip.left && point.x <= clip.right && point.y >= clip.top && point.y <= clip.bottom;\n });\n };\n const rawX = (entry: Entry) => entry.datum.values.find((field) => field.key === \"x\")?.value;\n const category = (entry: Entry) => (options.kind() === \"area\" ? entry.datum.index : rawX(entry));\n const groupedSeriesChart = () => options.kind() === \"line\" || options.kind() === \"area\";\n const seriesChart = () => groupedSeriesChart() || options.kind() === \"sparkline\";\n const updateLegend = (items: Entry[] | undefined) => {\n const root = options.legend?.() ?? options.container();\n for (const node of root?.querySelectorAll<HTMLElement | SVGElement>(\"[data-chart-legend-value]\") ?? []) {\n if (!items) {\n node.textContent = node.getAttribute(\"data-default\") ?? \"\";\n continue;\n }\n const series = node.dataset.seriesIndex;\n const field = items\n .find((item) => item.datum.seriesIndex?.toString() === series)\n ?.datum.values.find((field) => field.key === node.getAttribute(\"data-field\"));\n node.textContent = field\n ? (field.formatted ??\n (typeof field.value === \"number\"\n ? new Intl.NumberFormat(options.locale?.() ?? \"en\", { maximumFractionDigits: 6 }).format(field.value)\n : field.value))\n : \"—\";\n }\n };\n const clearHighlight = () => {\n for (const entry of highlighted) {\n entry.element.removeAttribute(\"data-inspected\");\n entry.element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!entry.element.getAttribute(\"style\")) entry.element.removeAttribute(\"style\");\n }\n highlighted = [];\n };\n const close = (broadcast = true, cancelPending = true) => {\n const state = linkedCursor?.read();\n if (broadcast && state && state.source !== source) return;\n if (broadcast) linkedCursor?.clear(source);\n options.container()?.removeAttribute(\"data-cursor-source\");\n pinned = false;\n active = undefined;\n updateLegend(undefined);\n clearHighlight();\n const container = options.container(),\n id = options.tooltip()?.id;\n if (container && id) describe(container, id, false);\n options.container()?.removeAttribute(\"data-inspecting\");\n const inspected = options.container();\n if (inspected) {\n for (const name of [\"left\", \"top\", \"width\", \"height\"]) inspected.style.removeProperty(`--k2b-chart-band-${name}`);\n if (!inspected.getAttribute(\"style\")) inspected.removeAttribute(\"style\");\n }\n const tooltip = options.tooltip();\n if (tooltip) {\n try {\n if (tooltip.matches(\":popover-open\")) tooltip.hidePopover();\n } catch {\n /* Detached during navigation. */\n }\n }\n if (cancelPending) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pending = undefined;\n }\n };\n const invalidate = () => {\n options.cursor?.()?.clear(source);\n close(false);\n entries = undefined;\n sortedPoints = [];\n byElement.clear();\n receive(options.cursor?.()?.read() ?? null);\n };\n const show = (entry: Entry, broadcast = true, hover = false) => {\n const x = rawX(entry);\n if (broadcast && options.kind() === \"line\" && typeof x === \"number\") options.cursor?.()?.move(source, x);\n const tooltip = options.tooltip(),\n anchor = options.anchor(),\n container = options.container();\n if (!tooltip || !anchor || !container || !options.enabled()) return;\n if ((active === entry || (seriesChart() && active && category(active) === category(entry))) && tooltip.matches(\":popover-open\")) {\n for (const item of highlighted) item.element.setAttribute(\"data-inspected\", hover ? \"hover\" : \"true\");\n return;\n }\n clearHighlight();\n active = entry;\n highlighted = groupedSeriesChart() ? records().filter((candidate) => category(candidate) === category(entry)) : [entry];\n for (const item of highlighted) {\n item.element.style.setProperty(\"--k2b-chart-inspection-color\", highlightColor(item));\n item.element.setAttribute(\"data-inspected\", hover ? \"hover\" : \"true\");\n }\n updateLegend(highlighted);\n const document = tooltip.ownerDocument;\n const contents = highlighted.map((item) => ({\n item,\n content: options.format({ kind: options.kind(), datum: item.datum }),\n missing: false,\n }));\n if (options.cursor?.() && options.kind() === \"line\") {\n const present = new Set(highlighted.map((item) => item.datum.seriesIndex));\n for (const item of records()) {\n if (present.has(item.datum.seriesIndex)) continue;\n present.add(item.datum.seriesIndex);\n contents.push({ item, content: options.format({ kind: options.kind(), datum: item.datum }), missing: true });\n }\n contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));\n }\n if (options.kind() === \"area\") contents.reverse();\n tooltip.replaceChildren();\n const sharedTitle = typeof x === \"number\" ? options.cursor?.()?.formatX?.(x) : undefined;\n const commonTitle =\n sharedTitle ??\n (contents.every(({ content }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);\n const appendTitle = (text: string) => {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = text;\n tooltip.append(title);\n };\n if (commonTitle) appendTitle(commonTitle);\n for (const { item, content, missing } of contents) {\n if (content.title && !commonTitle) appendTitle(content.title);\n for (const row of content.rows) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n if (groupedSeriesChart()) {\n const swatch = document.createElement(\"i\");\n swatch.setAttribute(\"aria-hidden\", \"true\");\n const series = container.querySelector(\n `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`,\n );\n swatch.style.background = series\n ? getComputedStyle(series).stroke\n : `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n line.append(swatch);\n }\n const label = document.createElement(\"span\");\n label.textContent = `${row.label}: `;\n const value = document.createElement(\"b\");\n value.textContent = missing ? \"—\" : row.value;\n line.append(label, value);\n tooltip.append(line);\n }\n }\n if (options.kind() === \"area\") {\n const total = entry.datum.values.find((field) => field.key === \"total\");\n const totalLabel = container.querySelector(\"svg[data-chart-total-label]\")?.getAttribute(\"data-chart-total-label\");\n if (total && totalLabel) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n const label = document.createElement(\"span\");\n label.textContent = `${totalLabel}: `;\n const value = document.createElement(\"b\");\n value.textContent = total.formatted ?? String(total.value);\n line.append(label, value);\n tooltip.append(line);\n }\n }\n const rect = container.getBoundingClientRect(),\n point = screenPoint(entry);\n const slot = categoryBands().find((candidate) => candidate.entry === entry);\n // A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.\n const band = slot && !entry.element.querySelector(\".k2b-chart-category-band\") ? slot : undefined;\n const rows = rowLayout(container);\n // A column's tooltip waits at the top of the plot, so it stays put while the pointer moves within the column.\n anchor.style.left = `${(slot && !rows ? (slot.left + slot.right) / 2 : point.x) - rect.left + container.scrollLeft}px`;\n anchor.style.top = `${(slot && !rows ? slot.top : point.y) - rect.top + container.scrollTop}px`;\n updatePlotBounds();\n container.style.setProperty(\"--k2b-chart-inspection-x\", `${point.x - rect.left + container.scrollLeft}px`);\n if (band) {\n container.style.setProperty(\"--k2b-chart-band-left\", `${band.left - rect.left + container.scrollLeft}px`);\n container.style.setProperty(\"--k2b-chart-band-top\", `${band.top - rect.top + container.scrollTop}px`);\n container.style.setProperty(\"--k2b-chart-band-width\", `${band.right - band.left}px`);\n container.style.setProperty(\"--k2b-chart-band-height\", `${band.bottom - band.top}px`);\n }\n container.setAttribute(\"data-inspecting\", seriesChart() ? \"series\" : band ? \"category\" : \"datum\");\n\n describe(container, tooltip.id, true);\n try {\n if (!tooltip.matches(\":popover-open\")) tooltip.showPopover();\n positionTooltipSurface(tooltip, anchor);\n } catch {\n /* SVG titles remain available without the Popover API. */\n }\n };\n /**\n * The screen slot of every category, halfway to its neighbours. A light band fills the inspected slot instead of\n * dimming other marks or outlining a bar, and the pointer anywhere in a slot keeps the same category.\n */\n const categoryBands = (): CategoryBand[] => {\n const role = categoryRoles[options.kind()];\n const container = options.container();\n if (!role || !container) return [];\n const rows = rowLayout(container);\n const slots = records()\n .filter((entry) => entry.datum.role === role)\n .map((entry) => ({ entry, rect: entry.element.getBoundingClientRect() }));\n if (!slots.length) return [];\n const guides = Array.from(container.querySelectorAll(\".stdlib-chart-grid, .stdlib-chart-axis\")).map((node) =>\n node.getBoundingClientRect(),\n );\n // The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose\n // only guide is one vertical baseline, still get a band from the baseline to the longest bar.\n const spans = [...guides, ...slots.map((slot) => slot.rect)];\n const start = Math.min(...spans.map((rect) => (rows ? rect.left : rect.top)));\n const end = Math.max(...spans.map((rect) => (rows ? rect.right : rect.bottom)));\n const center = (rect: DOMRect) => (rows ? rect.top + rect.height / 2 : rect.left + rect.width / 2);\n slots.sort((a, b) => center(a.rect) - center(b.rect));\n return slots.map((slot, index) => {\n const middle = center(slot.rect);\n const previous = slots[index - 1],\n next = slots[index + 1];\n const half =\n previous || next ? Math.abs(center((next ?? previous)!.rect) - middle) / 2 : (rows ? slot.rect.height : slot.rect.width) * 0.75;\n const low = previous ? (center(previous.rect) + middle) / 2 : middle - half;\n const high = next ? (center(next.rect) + middle) / 2 : middle + half;\n return rows\n ? { entry: slot.entry, left: start, right: end, top: low, bottom: high }\n : { entry: slot.entry, left: low, right: high, top: start, bottom: end };\n });\n };\n const updatePlotBounds = () => {\n const container = options.container();\n if (!container) return;\n const axes = Array.from(container.querySelectorAll(\".stdlib-chart-axis\")).map((axis) => axis.getBoundingClientRect());\n if (axes.length < 2) return;\n const left = Math.min(...axes.map((a) => a.left)),\n right = Math.max(...axes.map((a) => a.right));\n const top = Math.min(...axes.map((a) => a.top)),\n bottom = Math.max(...axes.map((a) => a.bottom));\n if (right <= left || bottom <= top) return;\n const rect = container.getBoundingClientRect();\n for (const [name, value] of Object.entries({\n left: left - rect.left,\n right: rect.right - right,\n top: top - rect.top,\n bottom: rect.bottom - bottom,\n }))\n container.style.setProperty(`--k2b-chart-plot-${name}`, `${value}px`);\n return { left, right, top, bottom };\n };\n const receive = (state: ChartCursorState) => {\n if (state?.source === source) return;\n close(false, false);\n if (!state || options.kind() !== \"line\") return;\n const entry = records().find((item) => rawX(item) === state.x);\n if (entry) show(entry, false);\n };\n const linkCursor = (cursor: ChartCursor | undefined): (() => void) => {\n linkedCursor = cursor;\n const unsubscribe = cursor?.subscribe(receive);\n return () => {\n unsubscribe?.();\n cursor?.clear(source);\n linkedCursor = undefined;\n };\n };\n const nearest = (x: number, y: number, target: Element | null): Entry | undefined => {\n if (target?.closest(\"button,a\") && !target.closest(\"[data-chart-datum]\")) return;\n const nodes = visibleRecords();\n // A mark wins before the plot bounds: the first and last points of a line sit on the plot's edges, so half of\n // their hit area lies outside it.\n const direct = target?.closest(\"[data-chart-datum]\");\n const hit = direct ? byElement.get(direct) : undefined;\n if (hit && nodes.includes(hit)) return hit;\n const bands = categoryBands();\n if (bands.length) {\n // Marks of their own inside a category, such as box-plot outliers, keep their forgiving hit radius.\n const role = categoryRoles[options.kind()];\n let loose: Entry | undefined,\n gap = 24;\n for (const entry of nodes) {\n if (entry.datum.role === role) continue;\n const point = screenPoint(entry);\n const distance = Math.hypot(point.x - x, point.y - y);\n if (distance <= gap) {\n gap = distance;\n loose = entry;\n }\n }\n if (loose) return loose;\n const rows = rowLayout(options.container());\n const frame = options.container()?.getBoundingClientRect();\n const inside = frame && x >= frame.left && x <= frame.right && y >= frame.top && y <= frame.bottom;\n return inside\n ? bands.find((band) => (rows ? y >= band.top && y <= band.bottom : x >= band.left && x <= band.right))?.entry\n : undefined;\n }\n if (seriesChart()) {\n const plot = updatePlotBounds();\n // SVG transforms and DOM rectangles can round the same painted edge\n // differently. Keep its half-pixel raster fringe inspectable.\n const edgeTolerance = 0.5;\n if (\n plot &&\n (x < plot.left - edgeTolerance || x > plot.right + edgeTolerance || y < plot.top - edgeTolerance || y > plot.bottom + edgeTolerance)\n )\n return;\n }\n // Exact shapes win. A small physical hit radius also reaches tiny or\n // zero-sized marks; distant whitespace leaves the chart unselected.\n const points = seriesChart() ? sortedPoints : nodes;\n if (seriesChart() && points.length) {\n const matrix = points[0]!.element.getScreenCTM?.();\n if (matrix) {\n const determinant = matrix.a * matrix.d - matrix.b * matrix.c;\n if (!determinant) return;\n const targetX = ((x - matrix.e) * matrix.d - (y - matrix.f) * matrix.c) / determinant;\n let low = 0,\n high = points.length - 1;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (points[mid]!.datum.anchor[0] < targetX) low = mid + 1;\n else high = mid;\n }\n const previous = Math.max(0, low - 1);\n return Math.abs(points[previous]!.datum.anchor[0] - targetX) <= Math.abs(points[low]!.datum.anchor[0] - targetX)\n ? points[previous]\n : points[low];\n }\n }\n const matrices = new Map<SVGSVGElement, DOMMatrix | null>();\n let best: Entry | undefined,\n distance = Infinity;\n for (const entry of points) {\n const svg = entry.element.ownerSVGElement;\n if (svg && !matrices.has(svg)) matrices.set(svg, svg.getScreenCTM?.() ?? null);\n const matrix = svg ? matrices.get(svg) : null;\n const [ax, ay] = entry.datum.anchor;\n const point = matrix\n ? { x: matrix.a * ax + matrix.c * ay + matrix.e, y: matrix.b * ax + matrix.d * ay + matrix.f }\n : screenPoint(entry);\n const dx = point.x - x,\n dy = point.y - y;\n const next = seriesChart() ? Math.abs(dx) : Math.hypot(dx, dy);\n if (next < distance) {\n distance = next;\n best = entry;\n }\n }\n return seriesChart() || distance <= 24 ? best : undefined;\n };\n const move = (event: PointerEvent) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;\n if (!options.enabled() || pinned || event.pointerType === \"touch\" || event.buttons) return;\n pending = { x: event.clientX, y: event.clientY, target: event.target instanceof Element ? event.target : null };\n if (frame !== undefined) return;\n frame = requestAnimationFrame(() => {\n frame = undefined;\n const sample = pending;\n pending = undefined;\n if (!sample) return;\n const entry = nearest(sample.x, sample.y, sample.target);\n if (entry) {\n show(entry, true, true);\n if (seriesChart()) {\n const container = options.container();\n container?.setAttribute(\"data-cursor-source\", \"true\");\n container?.style.setProperty(\"--k2b-chart-inspection-y\", `${sample.y - container.getBoundingClientRect().top}px`);\n }\n } else close();\n });\n };\n let pointerFocusing = false;\n const down = (event: PointerEvent) => {\n pointerFocusing = true;\n pointerStart = { x: event.clientX, y: event.clientY };\n moved = false;\n };\n const up = () => {\n pointerFocusing = false;\n };\n const click = (event: MouseEvent) => {\n pointerFocusing = false;\n if (!options.enabled() || moved || (event.target instanceof Element && event.target.closest(\"button,a\"))) return;\n const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);\n if (!entry) {\n close();\n return;\n }\n pinned = true;\n show(entry);\n options.select({ kind: options.kind(), datum: entry.datum });\n };\n const focus = (event: FocusEvent) => {\n if (event.target !== options.container() || !options.enabled()) return;\n if (pointerFocusing && options.nav?.()?.pointer === false) {\n pointerFocusing = false;\n return;\n }\n const nodes = visibleRecords();\n const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === \"line\" ? sortedPoints.at(-1) : nodes[0];\n if (first) show(first);\n };\n const key = (event: KeyboardEvent): boolean => {\n if (!options.enabled() || event.target !== options.container()) return false;\n if (event.key === \"Escape\") {\n close();\n return true;\n }\n if (event.key === \"Enter\" && active) {\n if (options.kind() === \"map\" && !visibleRecords().includes(active)) {\n close();\n return true;\n }\n event.preventDefault();\n pinned = true;\n const link = active.element.closest(\"a\");\n if (link) link.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n else options.select({ kind: options.kind(), datum: active.datum });\n return true;\n }\n const navigationChart = options.kind() === \"map\" || options.kind() === \"stateTimeline\";\n if (navigationChart && !event.altKey) return false;\n if (![\"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return false;\n let nodes = visibleRecords();\n if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n if (groupedSeriesChart()) {\n const seen = new Set<string | number | undefined>();\n nodes = nodes.filter((entry) => {\n const x = category(entry);\n if (seen.has(x)) return false;\n seen.add(x);\n return true;\n });\n }\n if (!nodes.length) return false;\n event.preventDefault();\n pinned = false;\n let index = active\n ? groupedSeriesChart()\n ? nodes.findIndex((entry) => category(entry) === category(active!))\n : nodes.indexOf(active)\n : -1;\n if (event.key === \"Home\") index = 0;\n else if (event.key === \"End\") index = nodes.length - 1;\n else if (active?.datum.grid && [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\n const [x, y] = active.datum.grid;\n const dx = event.key === \"ArrowLeft\" ? -1 : event.key === \"ArrowRight\" ? 1 : 0;\n const dy = event.key === \"ArrowUp\" ? -1 : event.key === \"ArrowDown\" ? 1 : 0;\n const next = nodes\n .filter(\n (entry) =>\n entry.datum.grid &&\n (dx\n ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0\n : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0),\n )\n .sort(\n (a, b) =>\n Math.abs(a.datum.grid![0] - x) +\n Math.abs(a.datum.grid![1] - y) -\n Math.abs(b.datum.grid![0] - x) -\n Math.abs(b.datum.grid![1] - y),\n )[0];\n if (next) index = nodes.indexOf(next);\n } else index += event.key === \"ArrowLeft\" || event.key === \"ArrowUp\" ? -1 : 1;\n const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))]!;\n options.nav?.()?.reveal?.(next.element);\n show(next);\n return true;\n };\n return {\n selectDatum: (selected: ChartDatumRef | null | undefined) => selectData(selected ? [selected] : []),\n selectData,\n linkCursor,\n destroy: () => close(false),\n move,\n down,\n up,\n click,\n focus,\n key,\n close: () => close(),\n invalidate,\n leave: () => {\n if (!pinned) close();\n },\n };\n}\n\n/** Dismiss inspection on outside interaction, but allow the tooltip itself to scroll. */\nexport function closeChartInspectionOnOutside(options: {\n container: () => HTMLElement | undefined;\n tooltip: () => HTMLElement | undefined;\n close: () => void;\n keepScroll?: () => boolean | undefined;\n}): () => void {\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();\n };\n const scroll = (event: Event) => {\n if (event.target === options.container() && options.keepScroll?.()) return;\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n options.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", options.close);\n return () => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", options.close);\n };\n}\n\nexport type InspectChartOptions = {\n kind: ChartKind;\n nav?: ChartInspectionNavigation;\n format: ChartTooltipFormatter;\n select?: (selection: ChartSelection) => void;\n cursor?: ChartCursor;\n locale?: string;\n /** Host for a separately rendered series legend. Defaults to the chart container. */\n legend?: ParentNode;\n};\nexport type ChartInspection = { invalidate(): void; close(): void; destroy(): void };\n\nlet tooltipId = 0;\n\n/** Attach inspection to stdlib SVG rendered with inspect: true, without a framework. */\nexport function inspectChart(container: HTMLElement, options: InspectChartOptions): ChartInspection {\n const document = container.ownerDocument;\n const anchor = document.createElement(\"span\");\n anchor.className = \"k2b-chart__anchor\";\n anchor.setAttribute(\"aria-hidden\", \"true\");\n const tooltip = document.createElement(\"span\");\n tooltip.className = \"k2b-tooltip k2b-chart__tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.setAttribute(\"popover\", \"manual\");\n tooltip.setAttribute(\"data-instant\", \"true\");\n do {\n tooltip.id = `k2b-chart-tooltip-${++tooltipId}`;\n } while (document.getElementById(tooltip.id));\n container.append(anchor, tooltip);\n const addedTabindex = !container.hasAttribute(\"tabindex\");\n if (addedTabindex) container.setAttribute(\"tabindex\", \"0\");\n\n const inspector = createChartInspector({\n container: () => container,\n locale: () => options.locale ?? \"en\",\n legend: () => options.legend,\n cursor: () => options.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => options.kind,\n nav: () => options.nav,\n enabled: () => true,\n format: options.format,\n select: (selection) => options.select?.(selection),\n });\n const listen = <K extends keyof HTMLElementEventMap>(name: K, listener: (event: HTMLElementEventMap[K]) => unknown) => {\n container.addEventListener(name, listener);\n return () => container.removeEventListener(name, listener);\n };\n const removeListeners = [\n listen(\"pointerdown\", inspector.down),\n listen(\"pointerup\", inspector.up),\n listen(\"pointercancel\", inspector.up),\n listen(\"pointermove\", inspector.move),\n listen(\"click\", inspector.click),\n listen(\"pointerleave\", inspector.leave),\n listen(\"focusin\", inspector.focus),\n listen(\"focusout\", inspector.close),\n listen(\"keydown\", inspector.key),\n ];\n const removeOutside = closeChartInspectionOnOutside({\n container: () => container,\n tooltip: () => tooltip,\n close: inspector.close,\n keepScroll: () => options.nav?.keepScroll,\n });\n const unlinkCursor = inspector.linkCursor(options.cursor);\n let destroyed = false;\n return {\n invalidate: () => {\n if (!destroyed) inspector.invalidate();\n },\n close: () => {\n if (!destroyed) inspector.close();\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n for (const remove of removeListeners) remove();\n removeOutside();\n unlinkCursor();\n inspector.destroy();\n for (const element of container.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\")) {\n element.removeAttribute(\"data-inspected\");\n element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!element.getAttribute(\"style\")) element.removeAttribute(\"style\");\n }\n // Inspection geometry the inspector wrote onto the host container.\n for (const name of [\"inspection-x\", \"inspection-y\", \"plot-left\", \"plot-right\", \"plot-top\", \"plot-bottom\"])\n container.style.removeProperty(`--k2b-chart-${name}`);\n anchor.remove();\n tooltip.remove();\n if (addedTabindex) container.removeAttribute(\"tabindex\");\n },\n };\n}\n"],"mappings":"AACA,SAAS,sBAAsB,QAAQ,8BAA8B;AAGrE,SAKE,YAAY,EACZ,cAAc,QACT,2BAA2B;AAGlC,SAIE,YAAY,EACZ,cAAc,QACT,2BAA2B;;AAElC;;AAUA;AACA,MAAM,QAAQ,GAAG,CAAC,SAAsB,EAAE,EAAU,EAAE,EAAW,KAAK;EACpE,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAE,KAAK,IAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC;EACpH,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;EACpB,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KACrE,SAAS,CAAC,eAAe,CAAC,kBAAkB,CAAC;AACpD,CAAC;;AAED;AACA,MAAM,SAAS,GAAI,SAAkC,IAAK,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,6BAA6B,CAAC,CAAC;AAC1H,MAAM,aAAiD,GAAG;EAAE,GAAG,EAAE,MAAM;EAAE,SAAS,EAAE,MAAM;EAAE,SAAS,EAAE,KAAK;EAAE,OAAO,EAAE;AAAM,CAAC;AAG9H;AACA,OAAO,SAAS,oBAAoB,CAAC,OAcpC,EAAE;EACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;EACrC,IAAI,OAA4B;EAChC,IAAI,YAAqB,GAAG,EAAE;EAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAiB,CAAC;EAC3C,IAAI,MAAyB;EAC7B,IAAI,WAAoB,GAAG,EAAE;EAC7B,IAAI,MAAM,GAAG,KAAK;EAClB,IAAI,YAAkD;EACtD,IAAI,KAAK,GAAG,KAAK;EACjB,IAAI,OAAqE;EACzE,IAAI,KAAyB;EAC7B;EACA;EACA,IAAI,YAAqC;EAEzC,MAAM,OAAO,GAAG,MAAM;IACpB,IAAI,CAAC,OAAO,IAAK,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,WAAY,EAAE;MACxE,OAAO,GAAG,EAAE;MACZ,SAAS,CAAC,KAAK,CAAC,CAAC;MACjB,YAAY,GAAG,EAAE;MACjB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAqB,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE;QACvH,IAAI;UACF,MAAM,KAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC;UACrF,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;YACvB,MAAM,KAAK,GAAG;cAAE,OAAO;cAAE,KAAK,EAAE;YAAM,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACnB,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;UAC/B;QACF,CAAC,CAAC,MAAM;UACN;QAAA;MAEJ;MACA,YAAY,GAAG,OAAO,CAAC,MAAM,CAAE,KAAK,IAAK,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9H;IACA,OAAO,OAAO;EAChB,CAAC;EACD,MAAM,cAAc,GAAI,IAAW,IAAa;IAC9C;IACA;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gCAAgC,CAAC;IAC1E,MAAM,MAAM,GAAG,KAAK,GAChB,OAAO,CACJ,SAAS,CAAC,CAAC,EACV,aAAa,CACb,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,GACrB,0CAA0C,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,EAAE,GAC7E,uDACN,CAAC,GACF,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,kFAAkF,CAAC,IAC/G,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,uDAAuD,CAAE;IACxF,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,SAAS;IAC7F,MAAM,KAAK,GACT,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,KACzF,uBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC,GAAG;IACnE,OAAO,sBAAsB,KAAK,uCAAuC;EAC3E,CAAC;EACD,MAAM,UAAU,GAAI,QAAkC,IAAK;IACzD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE;MAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAE,KAAK,IAAK,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;MAC5E,IAAI,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,KAC9F,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,6BAA6B,CAAC;MACtE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC;IACzD;EACF,CAAC;EACD,MAAM,WAAW,GAAI,KAAY,IAAK;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC;IAC7C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;IACjC,IAAI,MAAM,EAAE,OAAO;MAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;MAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAAE,CAAC;IAC3G,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClD,OAAO;MAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;MAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG;IAAE,CAAC;EACpE,CAAC;EACD,MAAM,cAAc,GAAG,MAAM;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC;IACvB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,OAAO,KAAK;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAgB,4BAA4B,CAAC;IAChG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,CAAC,EAAE,OAAO,KAAK;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC9D,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK;IAC5C,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK;IAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;IAC/C,MAAM,IAAI,GAAG;MAAE,IAAI;MAAE,GAAG;MAAE,KAAK,EAAE,IAAI,GAAG,KAAK;MAAE,MAAM,EAAE,GAAG,GAAG;IAAO,CAAC;IACrE,OAAO,KAAK,CAAC,MAAM,CAAE,KAAK,IAAK;MAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;MAChC,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM;IACvG,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,IAAI,GAAI,KAAY,IAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK;EAC3F,MAAM,QAAQ,GAAI,KAAY,IAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAE;EAChG,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM;EACvF,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,WAAW;EAChF,MAAM,YAAY,GAAI,KAA0B,IAAK;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,gBAAgB,CAA2B,2BAA2B,CAAC,IAAI,EAAE,EAAE;MACtG,IAAI,CAAC,KAAK,EAAE;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE;QAC1D;MACF;MACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;MACvC,MAAM,KAAK,GAAG,KAAK,CAChB,IAAI,CAAE,IAAI,IAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,MAAM,CAAC,EAC5D,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;MAC/E,IAAI,CAAC,WAAW,GAAG,KAAK,GACnB,KAAK,CAAC,SAAS,KACf,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,GAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE;QAAE,qBAAqB,EAAE;MAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GACnG,KAAK,CAAC,KAAK,CAAC,GAChB,GAAG;IACT;EACF,CAAC;EACD,MAAM,cAAc,GAAG,MAAM;IAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE;MAC/B,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC;MAC/C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,8BAA8B,CAAC;MAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;IAClF;IACA,WAAW,GAAG,EAAE;EAClB,CAAC;EACD,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK;IACxD,MAAM,KAAK,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;IACnD,IAAI,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;IAC1C,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC;IAC1D,MAAM,GAAG,KAAK;IACd,MAAM,GAAG,SAAS;IAClB,YAAY,CAAC,SAAS,CAAC;IACvB,cAAc,CAAC,CAAC;IAChB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;MACnC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE;IAC5B,IAAI,SAAS,IAAI,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC;IACnD,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,SAAS,EAAE;MACb,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,oBAAoB,IAAI,EAAE,CAAC;MACjH,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC;IAC1E;IACA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,OAAO,EAAE;MACX,IAAI;QACF,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;MAC7D,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;IACA,IAAI,aAAa,EAAE;MACjB,IAAI,KAAK,KAAK,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;MACpD,KAAK,GAAG,SAAS;MACjB,OAAO,GAAG,SAAS;IACrB;EACF,CAAC;EACD,MAAM,UAAU,GAAG,MAAM;IACvB,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IACjC,KAAK,CAAC,KAAK,CAAC;IACZ,OAAO,GAAG,SAAS;IACnB,YAAY,GAAG,EAAE;IACjB,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;EAC7C,CAAC;EACD,MAAM,IAAI,GAAG,CAAC,KAAY,EAAE,SAAS,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,KAAK;IAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACrB,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;MAC/B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;MACzB,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;IAC7D,IAAI,CAAC,MAAM,KAAK,KAAK,IAAK,WAAW,CAAC,CAAC,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAE,KAAK,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;MAC/H,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;MACrG;IACF;IACA,cAAc,CAAC,CAAC;IAChB,MAAM,GAAG,KAAK;IACd,WAAW,GAAG,kBAAkB,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAE,SAAS,IAAK,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACvH,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;MAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;MACpF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;IACvE;IACA,YAAY,CAAC,WAAW,CAAC;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAE,IAAI,KAAM;MAC1C,IAAI;MACJ,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAAE,KAAK,EAAE,IAAI,CAAC;MAAM,CAAC,CAAC;MACpE,OAAO,EAAE;IACX,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE;MACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;MAC1E,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;QACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC;UAAE,IAAI;UAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;YAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAAE,KAAK,EAAE,IAAI,CAAC;UAAM,CAAC,CAAC;UAAE,OAAO,EAAE;QAAK,CAAC,CAAC;MAC9G;MACA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IAC5F;IACA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,eAAe,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS;IACxF,MAAM,WAAW,GACf,WAAW,KACV,QAAQ,CAAC,KAAK,CAAC,CAAC;MAAE;IAAQ,CAAC,KAAK,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAC1H,MAAM,WAAW,GAAI,IAAY,IAAK;MACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;MAC9C,KAAK,CAAC,SAAS,GAAG,0BAA0B;MAC5C,KAAK,CAAC,WAAW,GAAG,IAAI;MACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACvB,CAAC;IACD,IAAI,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC;IACzC,KAAK,MAAM;MAAE,IAAI;MAAE,OAAO;MAAE;IAAQ,CAAC,IAAI,QAAQ,EAAE;MACjD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;MAC7D,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,wBAAwB;QACzC,IAAI,kBAAkB,CAAC,CAAC,EAAE;UACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;UAC1C,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;UAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CACpC,0CAA0C,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,EAClI,CAAC;UACD,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,GAC5B,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,GAC/B,uBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC,GAAG;UACrE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACrB;QACA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5C,KAAK,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QACzC,KAAK,CAAC,WAAW,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;MACtB;IACF;IACA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE;MAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC;MACvE,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,6BAA6B,CAAC,EAAE,YAAY,CAAC,wBAAwB,CAAC;MACjH,IAAI,KAAK,IAAI,UAAU,EAAE;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,wBAAwB;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5C,KAAK,CAAC,WAAW,GAAG,GAAG,UAAU,IAAI;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QACzC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;MACtB;IACF;IACA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC;MAC5C,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAE,SAAS,IAAK,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC;IAC3E;IACA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,0BAA0B,CAAC,GAAG,IAAI,GAAG,SAAS;IAChG,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC;IACjC;IACA,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,UAAU,IAAI;IACtH,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,IAAI;IAC/F,gBAAgB,CAAC,CAAC;IAClB,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,0BAA0B,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,UAAU,IAAI,CAAC;IAC1G,IAAI,IAAI,EAAE;MACR,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,UAAU,IAAI,CAAC;MACzG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,IAAI,CAAC;MACrG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;MACpF,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACvF;IACA,SAAS,CAAC,YAAY,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IAEjG,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC;IACrC,IAAI;MACF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;MAC5D,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;IACzC,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ,CAAC;EACD;AACF;AACA;AACA;EACE,MAAM,aAAa,GAAG,MAAsB;IAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;IAClC,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CACpB,MAAM,CAAE,KAAK,IAAK,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAC5C,GAAG,CAAE,KAAK,KAAM;MAAE,KAAK;MAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;IAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,wCAAwC,CAAC,CAAC,CAAC,GAAG,CAAE,IAAI,IACvG,IAAI,CAAC,qBAAqB,CAAC,CAC7B,CAAC;IACD;IACA;IACA,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAE,IAAI,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAI,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAE,IAAI,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAI,IAAa,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAE;IAClG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;MAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;MAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;MACzB,MAAM,IAAI,GACR,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,QAAQ,EAAG,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI;MACjI,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI;MAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI;MACpE,OAAO,IAAI,GACP;QAAE,KAAK,EAAE,IAAI,CAAC,KAAK;QAAE,IAAI,EAAE,KAAK;QAAE,KAAK,EAAE,GAAG;QAAE,GAAG,EAAE,GAAG;QAAE,MAAM,EAAE;MAAK,CAAC,GACtE;QAAE,KAAK,EAAE,IAAI,CAAC,KAAK;QAAE,IAAI,EAAE,GAAG;QAAE,KAAK,EAAE,IAAI;QAAE,GAAG,EAAE,KAAK;QAAE,MAAM,EAAE;MAAI,CAAC;IAC5E,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,gBAAgB,GAAG,MAAM;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,EAAE;IAChB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACrH,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,CAAC;MAC/C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,CAAC,GAAG,CAAC,CAAC;MAC7C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,GAAG,EAAE;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;MACzC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI;MACtB,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK;MACzB,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG;MACnB,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG;IACxB,CAAC,CAAC,EACA,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,IAAI,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IACvE,OAAO;MAAE,IAAI;MAAE,KAAK;MAAE,GAAG;MAAE;IAAO,CAAC;EACrC,CAAC;EACD,MAAM,OAAO,GAAI,KAAuB,IAAK;IAC3C,IAAI,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE;IAC9B,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IACnB,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAE,IAAI,IAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;EAC/B,CAAC;EACD,MAAM,UAAU,GAAI,MAA+B,IAAmB;IACpE,YAAY,GAAG,MAAM;IACrB,MAAM,WAAW,GAAG,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC;IAC9C,OAAO,MAAM;MACX,WAAW,GAAG,CAAC;MACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;MACrB,YAAY,GAAG,SAAS;IAC1B,CAAC;EACH,CAAC;EACD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,MAAsB,KAAwB;IACnF,IAAI,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;IAC1E,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC;IAC9B;IACA;IACA,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;IACtD,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG;IAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB;MACA,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;MAC1C,IAAI,KAAwB;QAC1B,GAAG,GAAG,EAAE;MACV,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;QACzB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,QAAQ,IAAI,GAAG,EAAE;UACnB,GAAG,GAAG,QAAQ;UACd,KAAK,GAAG,KAAK;QACf;MACF;MACA,IAAI,KAAK,EAAE,OAAO,KAAK;MACvB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;MAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;MAC1D,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;MAClG,OAAO,MAAM,GACT,KAAK,CAAC,IAAI,CAAE,IAAI,IAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAM,CAAC,EAAE,KAAK,GAC3G,SAAS;IACf;IACA,IAAI,WAAW,CAAC,CAAC,EAAE;MACjB,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC;MAC/B;MACA;MACA,MAAM,aAAa,GAAG,GAAG;MACzB,IACE,IAAI,KACH,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,EAEpI;IACJ;IACA;IACA;IACA,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,GAAG,YAAY,GAAG,KAAK;IACnD,IAAI,WAAW,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE;MAClC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,YAAY,GAAG,CAAC;MAClD,IAAI,MAAM,EAAE;QACV,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE;QAClB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,WAAW;QACrF,IAAI,GAAG,GAAG,CAAC;UACT,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;QAC1B,OAAO,GAAG,GAAG,IAAI,EAAE;UACjB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;UACxC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,KACrD,IAAI,GAAG,GAAG;QACjB;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAC5G,MAAM,CAAC,QAAQ,CAAC,GAChB,MAAM,CAAC,GAAG,CAAC;MACjB;IACF;IACA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAkC,CAAC;IAC3D,IAAI,IAAuB;MACzB,QAAQ,GAAG,QAAQ;IACrB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;MAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe;MACzC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC;MAC9E,MAAM,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;MAC7C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;MACnC,MAAM,KAAK,GAAG,MAAM,GAChB;QAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;MAAE,CAAC,GAC5F,WAAW,CAAC,KAAK,CAAC;MACtB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;QACpB,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;MAClB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;MAC9D,IAAI,IAAI,GAAG,QAAQ,EAAE;QACnB,QAAQ,GAAG,IAAI;QACf,IAAI,GAAG,KAAK;MACd;IACF;IACA,OAAO,WAAW,CAAC,CAAC,IAAI,QAAQ,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS;EAC3D,CAAC;EACD,MAAM,IAAI,GAAI,KAAmB,IAAK;IACpC,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;IAC/E,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI;IAChH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;IACpF,OAAO,GAAG;MAAE,CAAC,EAAE,KAAK,CAAC,OAAO;MAAE,CAAC,EAAE,KAAK,CAAC,OAAO;MAAE,MAAM,EAAE,KAAK,CAAC,MAAM,YAAY,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG;IAAK,CAAC;IAC/G,IAAI,KAAK,KAAK,SAAS,EAAE;IACzB,KAAK,GAAG,qBAAqB,CAAC,MAAM;MAClC,KAAK,GAAG,SAAS;MACjB,MAAM,MAAM,GAAG,OAAO;MACtB,OAAO,GAAG,SAAS;MACnB,IAAI,CAAC,MAAM,EAAE;MACb,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;MACxD,IAAI,KAAK,EAAE;QACT,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QACvB,IAAI,WAAW,CAAC,CAAC,EAAE;UACjB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;UACrC,SAAS,EAAE,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC;UACrD,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,0BAA0B,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACnH;MACF,CAAC,MAAM,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC;EACJ,CAAC;EACD,IAAI,eAAe,GAAG,KAAK;EAC3B,MAAM,IAAI,GAAI,KAAmB,IAAK;IACpC,eAAe,GAAG,IAAI;IACtB,YAAY,GAAG;MAAE,CAAC,EAAE,KAAK,CAAC,OAAO;MAAE,CAAC,EAAE,KAAK,CAAC;IAAQ,CAAC;IACrD,KAAK,GAAG,KAAK;EACf,CAAC;EACD,MAAM,EAAE,GAAG,MAAM;IACf,eAAe,GAAG,KAAK;EACzB,CAAC;EACD,MAAM,KAAK,GAAI,KAAiB,IAAK;IACnC,eAAe,GAAG,KAAK;IACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAK,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAE,EAAE;IAC1G,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,YAAY,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IAC1G,IAAI,CAAC,KAAK,EAAE;MACV,KAAK,CAAC,CAAC;MACP;IACF;IACA,MAAM,GAAG,IAAI;IACb,IAAI,CAAC,KAAK,CAAC;IACX,OAAO,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;MAAE,KAAK,EAAE,KAAK,CAAC;IAAM,CAAC,CAAC;EAC9D,CAAC;EACD,MAAM,KAAK,GAAI,KAAiB,IAAK;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;IAChE,IAAI,eAAe,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,KAAK,KAAK,EAAE;MACzD,eAAe,GAAG,KAAK;MACvB;IACF;IACA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC/G,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;EACxB,CAAC;EACD,MAAM,GAAG,GAAI,KAAoB,IAAc;IAC7C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,KAAK;IAC5E,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;MAC1B,KAAK,CAAC,CAAC;MACP,OAAO,IAAI;IACb;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,MAAM,EAAE;MACnC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAClE,KAAK,CAAC,CAAC;QACP,OAAO,IAAI;MACb;MACA,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,MAAM,GAAG,IAAI;MACb,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;MACxC,IAAI,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,IAAI;QAAE,UAAU,EAAE;MAAK,CAAC,CAAC,CAAC,CAAC,KACtF,OAAO,CAAC,MAAM,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;MAAM,CAAC,CAAC;MAClE,OAAO,IAAI;IACb;IACA,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,eAAe;IACtF,IAAI,eAAe,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK;IAClD,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK;IACzG,IAAI,KAAK,GAAG,cAAc,CAAC,CAAC;IAC5B,IAAI,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3F,IAAI,kBAAkB,CAAC,CAAC,EAAE;MACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAA8B,CAAC;MACnD,KAAK,GAAG,KAAK,CAAC,MAAM,CAAE,KAAK,IAAK;QAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACX,OAAO,IAAI;MACb,CAAC,CAAC;IACJ;IACA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK;IAC/B,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,MAAM,GAAG,KAAK;IACd,IAAI,KAAK,GAAG,MAAM,GACd,kBAAkB,CAAC,CAAC,GAClB,KAAK,CAAC,SAAS,CAAE,KAAK,IAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAO,CAAC,CAAC,GACjE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GACvB,CAAC,CAAC;IACN,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,KAC/B,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAClD,IAAI,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;MACtG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI;MAChC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC;MAC9E,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC;MAC3E,MAAM,IAAI,GAAG,KAAK,CACf,MAAM,CACJ,KAAK,IACJ,KAAK,CAAC,KAAK,CAAC,IAAI,KACf,EAAE,GACC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAC/D,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CACvE,CAAC,CACA,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,KACH,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,GAAG,CAAC,CACjC,CAAC,CAAC,CAAC,CAAC;MACN,IAAI,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,CAAC,MAAM,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;IAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAE;IACnE,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC;IACV,OAAO,IAAI;EACb,CAAC;EACD,OAAO;IACL,WAAW,EAAG,QAA0C,IAAK,UAAU,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACnG,UAAU;IACV,UAAU;IACV,OAAO,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC;IAC3B,IAAI;IACJ,IAAI;IACJ,EAAE;IACF,KAAK;IACL,KAAK;IACL,GAAG;IACH,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC;IACpB,UAAU;IACV,KAAK,EAAE,MAAM;MACX,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtB;EACF,CAAC;AACH;;AAEA;AACA,OAAO,SAAS,6BAA6B,CAAC,OAK7C,EAAc;EACb,MAAM,OAAO,GAAI,KAAmB,IAAK;IACvC,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;EACnG,CAAC;EACD,MAAM,MAAM,GAAI,KAAY,IAAK;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE;IACpE,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;IAC/E,OAAO,CAAC,KAAK,CAAC,CAAC;EACjB,CAAC;EACD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC;EAC/C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;EAC/C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;EAChD,OAAO,MAAM;IACX,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC;IAClD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAClD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;EACrD,CAAC;AACH;AAcA,IAAI,SAAS,GAAG,CAAC;;AAEjB;AACA,OAAO,SAAS,YAAY,CAAC,SAAsB,EAAE,OAA4B,EAAmB;EAClG,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa;EACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;EAC7C,MAAM,CAAC,SAAS,GAAG,mBAAmB;EACtC,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;EAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;EAC9C,OAAO,CAAC,SAAS,GAAG,gCAAgC;EACpD,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC;EACvC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;EACzC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;EAC5C,GAAG;IACD,OAAO,CAAC,EAAE,GAAG,qBAAqB,EAAE,SAAS,EAAE;EACjD,CAAC,QAAQ,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;EAC5C,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EACjC,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC;EACzD,IAAI,aAAa,EAAE,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;EAE1D,MAAM,SAAS,GAAG,oBAAoB,CAAC;IACrC,SAAS,EAAE,MAAM,SAAS;IAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,IAAI,IAAI;IACpC,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM;IAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM;IAC5B,OAAO,EAAE,MAAM,OAAO;IACtB,MAAM,EAAE,MAAM,MAAM;IACpB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI;IACxB,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG;IACtB,OAAO,EAAE,MAAM,IAAI;IACnB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAG,SAAS,IAAK,OAAO,CAAC,MAAM,GAAG,SAAS;EACnD,CAAC,CAAC;EACF,MAAM,MAAM,GAAG,CAAsC,IAAO,EAAE,QAAoD,KAAK;IACrH,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC1C,OAAO,MAAM,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC;EAC5D,CAAC;EACD,MAAM,eAAe,GAAG,CACtB,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,EACrC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,EACjC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,CAAC,EACrC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,EACrC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,EAChC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,EACvC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAClC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,EACnC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CACjC;EACD,MAAM,aAAa,GAAG,6BAA6B,CAAC;IAClD,SAAS,EAAE,MAAM,SAAS;IAC1B,OAAO,EAAE,MAAM,OAAO;IACtB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,UAAU,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE;EACjC,CAAC,CAAC;EACF,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;EACzD,IAAI,SAAS,GAAG,KAAK;EACrB,OAAO;IACL,UAAU,EAAE,MAAM;MAChB,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,EAAE,MAAM;MACX,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG;MACR,IAAI,SAAS,EAAE;MACf,SAAS,GAAG,IAAI;MAChB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,MAAM,CAAC,CAAC;MAC9C,aAAa,CAAC,CAAC;MACf,YAAY,CAAC,CAAC;MACd,SAAS,CAAC,OAAO,CAAC,CAAC;MACnB,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,gBAAgB,CAAqB,oBAAoB,CAAC,EAAE;QAC1F,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,8BAA8B,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;MACtE;MACA;MACA,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,EACvG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,IAAI,EAAE,CAAC;MACvD,MAAM,CAAC,MAAM,CAAC,CAAC;MACf,OAAO,CAAC,MAAM,CAAC,CAAC;MAChB,IAAI,aAAa,EAAE,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC;IAC1D;EACF,CAAC;AACH","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/chart-inspection-core.ts"],"sourcesContent":["import type { ChartDatum, ChartKind } from \"../charts/core/types\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport type { ChartCursor, ChartCursorState } from \"./chart-cursor\";\n\nexport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltip,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\nexport type { ChartKind } from \"../charts/core/types\";\n\nimport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\n\n/** Host policy for inspecting an overflowing drawing. */\nexport type ChartInspectionNavigation = {\n last?: boolean;\n pointer?: boolean;\n reveal?: (element: SVGGraphicsElement) => void;\n keepScroll?: boolean;\n};\n\ntype Entry = { element: SVGGraphicsElement; datum: ChartDatum };\n\n/** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */\nconst describe = (container: HTMLElement, id: string, on: boolean) => {\n const ids = (container.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter((token) => token && token !== id);\n if (on) ids.push(id);\n if (ids.length) container.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else container.removeAttribute(\"aria-describedby\");\n};\n\n/** Mark roles that stand for a whole category: hovering anywhere in its column (or row) inspects it. */\nconst rowLayout = (container: HTMLElement | undefined) => Boolean(container?.querySelector('svg[data-bar-layout=\"rows\"]'));\nconst categoryRoles: Partial<Record<ChartKind, string>> = { bar: \"item\", waterfall: \"item\", histogram: \"bin\", boxplot: \"box\" };\ntype CategoryBand = { entry: Entry; left: number; right: number; top: number; bottom: number };\n\n/** An element's box on screen; one name for the many reads below keeps the framework-free entry small. */\nconst box = (element: Element) => element.getBoundingClientRect();\n\n/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */\nexport function createChartInspector(options: {\n container: () => HTMLElement | undefined;\n cursor?: () => ChartCursor | undefined;\n tooltip: () => HTMLSpanElement | undefined;\n anchor: () => HTMLSpanElement | undefined;\n kind: () => ChartKind;\n enabled: () => boolean;\n /** Locale for unformatted values in an attached series legend. */\n locale?: () => string;\n /** Legend host when it is outside the inspected SVG container. */\n legend?: () => ParentNode | undefined;\n format: ChartTooltipFormatter;\n select: (selection: ChartSelection) => void;\n nav?: () => ChartInspectionNavigation | undefined;\n}) {\n const source = Symbol(\"chart cursor\");\n let entries: Entry[] | undefined;\n let sortedPoints: Entry[] = [];\n const byElement = new Map<Element, Entry>();\n let active: Entry | undefined;\n let highlighted: Entry[] = [];\n let pinned = false;\n let pointerStart: { x: number; y: number } | undefined;\n let moved = false;\n let pending: { x: number; y: number; target: Element | null } | undefined;\n let frame: number | undefined;\n // The cursor this chart is subscribed to. Closing reads it instead of the cursor prop: a chart also closes\n // while it unmounts, when a parent `<Show>` may already have dropped the value the prop came from.\n let linkedCursor: ChartCursor | undefined;\n\n const records = () => {\n if (!entries || (entries.length > 0 && !entries[0]!.element.isConnected)) {\n entries = [];\n byElement.clear();\n sortedPoints = [];\n for (const element of Array.from(options.container()?.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\") ?? [])) {\n try {\n const value: unknown = JSON.parse(element.getAttribute(\"data-chart-datum\") ?? \"null\");\n if (isChartDatum(value)) {\n const entry = { element, datum: value };\n entries.push(entry);\n byElement.set(element, entry);\n }\n } catch {\n /* Only valid renderer metadata participates in inspection. */\n }\n }\n sortedPoints = entries.filter((entry) => entry.datum.role === \"point\").sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n }\n return entries;\n };\n const highlightColor = (item: Entry): string => {\n // Read the actual paint before applying inspection styles, including\n // custom series and threshold colors. Invisible points use their line.\n const point = item.element.querySelector(\".stdlib-chart-inspection-point\");\n const source = point\n ? options\n .container()\n ?.querySelector(\n options.kind() === \"line\"\n ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`\n : \".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline\",\n )\n : (item.element.querySelector(\".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value\") ??\n item.element.querySelector(\":is(rect, path, circle):not(.k2b-chart-category-band)\"));\n const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;\n const color =\n (point || item.element.hasAttribute(\"data-chart-reference\") ? paint?.stroke : paint?.fill) ||\n `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;\n };\n const selectData = (selected: readonly ChartDatumRef[]) => {\n for (const entry of records()) {\n const matches = selected.some((datum) => sameChartDatum(datum, entry.datum));\n if (matches) entry.element.style.setProperty(\"--k2b-chart-selection-color\", highlightColor(entry));\n else entry.element.style.removeProperty(\"--k2b-chart-selection-color\");\n entry.element.toggleAttribute(\"data-selected\", matches);\n }\n };\n const screenPoint = (entry: Entry) => {\n const matrix = entry.element.getScreenCTM?.();\n const [x, y] = entry.datum.anchor;\n if (matrix) return { x: matrix.a * x + matrix.c * y + matrix.e, y: matrix.b * x + matrix.d * y + matrix.f };\n const rect = box(entry.element);\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n };\n const visibleRecords = () => {\n const nodes = records();\n if (options.kind() !== \"map\") return nodes;\n const viewport = options.container()?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n if (!viewport?.getScreenCTM?.()) return nodes;\n const root = viewport.ownerSVGElement?.getBoundingClientRect();\n if (!root?.width || !root.height) return nodes;\n const width = viewport?.width?.baseVal.value;\n const height = viewport?.height?.baseVal.value;\n if (!width || !height) return nodes;\n const left = root.left + viewport.x.baseVal.value;\n const top = root.top + viewport.y.baseVal.value;\n const clip = { left, top, right: left + width, bottom: top + height };\n return nodes.filter((entry) => {\n const point = screenPoint(entry);\n return point.x >= clip.left && point.x <= clip.right && point.y >= clip.top && point.y <= clip.bottom;\n });\n };\n const rawX = (entry: Entry) => entry.datum.values.find((field) => field.key === \"x\")?.value;\n const category = (entry: Entry) => (options.kind() === \"area\" ? entry.datum.index : rawX(entry));\n const groupedSeriesChart = () => options.kind() === \"line\" || options.kind() === \"area\";\n const seriesChart = () => groupedSeriesChart() || options.kind() === \"sparkline\";\n const updateLegend = (items: Entry[] | undefined) => {\n const root = options.legend?.() ?? options.container();\n for (const node of root?.querySelectorAll<HTMLElement | SVGElement>(\"[data-chart-legend-value]\") ?? []) {\n if (!items) {\n node.textContent = node.getAttribute(\"data-default\") ?? \"\";\n continue;\n }\n const series = node.dataset.seriesIndex;\n const field = items\n .find((item) => item.datum.seriesIndex?.toString() === series)\n ?.datum.values.find((field) => field.key === node.getAttribute(\"data-field\"));\n node.textContent = field\n ? (field.formatted ??\n (typeof field.value === \"number\"\n ? new Intl.NumberFormat(options.locale?.() ?? \"en\", { maximumFractionDigits: 6 }).format(field.value)\n : field.value))\n : \"—\";\n }\n };\n const clearHighlight = () => {\n for (const entry of highlighted) {\n entry.element.removeAttribute(\"data-inspected\");\n entry.element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!entry.element.getAttribute(\"style\")) entry.element.removeAttribute(\"style\");\n }\n highlighted = [];\n };\n /** The open tooltip came from keyboard focus or keys, not from a pointer: it follows its mark when the page scrolls. */\n let byKeyboard = false;\n const close = (broadcast = true, cancelPending = true) => {\n const state = linkedCursor?.read();\n if (broadcast && state && state.source !== source) return;\n if (broadcast) linkedCursor?.clear(source);\n options.container()?.removeAttribute(\"data-cursor-source\");\n pinned = false;\n active = undefined;\n updateLegend(undefined);\n clearHighlight();\n const container = options.container(),\n id = options.tooltip()?.id;\n if (container && id) describe(container, id, false);\n options.container()?.removeAttribute(\"data-inspecting\");\n const inspected = options.container();\n if (inspected) {\n for (const name of [\"left\", \"top\", \"width\", \"height\"]) inspected.style.removeProperty(`--k2b-chart-band-${name}`);\n if (!inspected.getAttribute(\"style\")) inspected.removeAttribute(\"style\");\n }\n const tooltip = options.tooltip();\n if (tooltip) {\n try {\n if (tooltip.matches(\":popover-open\")) tooltip.hidePopover();\n } catch {\n /* Detached during navigation. */\n }\n }\n if (cancelPending) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pending = undefined;\n }\n };\n const invalidate = () => {\n options.cursor?.()?.clear(source);\n close(false);\n entries = undefined;\n sortedPoints = [];\n byElement.clear();\n receive(options.cursor?.()?.read() ?? null);\n };\n const show = (entry: Entry, broadcast = true, hover = false) => {\n const x = rawX(entry);\n if (broadcast && options.kind() === \"line\" && typeof x === \"number\") options.cursor?.()?.move(source, x);\n const tooltip = options.tooltip(),\n anchor = options.anchor(),\n container = options.container();\n if (!tooltip || !anchor || !container || !options.enabled()) return;\n if ((active === entry || (seriesChart() && active && category(active) === category(entry))) && tooltip.matches(\":popover-open\")) {\n for (const item of highlighted) item.element.setAttribute(\"data-inspected\", hover ? \"hover\" : \"true\");\n return;\n }\n clearHighlight();\n active = entry;\n highlighted = groupedSeriesChart() ? records().filter((candidate) => category(candidate) === category(entry)) : [entry];\n for (const item of highlighted) {\n item.element.style.setProperty(\"--k2b-chart-inspection-color\", highlightColor(item));\n item.element.setAttribute(\"data-inspected\", hover ? \"hover\" : \"true\");\n }\n updateLegend(highlighted);\n const document = tooltip.ownerDocument;\n const contents = highlighted.map((item) => ({\n item,\n content: options.format({ kind: options.kind(), datum: item.datum }),\n missing: false,\n }));\n if (options.cursor?.() && options.kind() === \"line\") {\n const present = new Set(highlighted.map((item) => item.datum.seriesIndex));\n for (const item of records()) {\n if (present.has(item.datum.seriesIndex)) continue;\n present.add(item.datum.seriesIndex);\n contents.push({ item, content: options.format({ kind: options.kind(), datum: item.datum }), missing: true });\n }\n contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));\n }\n if (options.kind() === \"area\") contents.reverse();\n tooltip.replaceChildren();\n const sharedTitle = typeof x === \"number\" ? options.cursor?.()?.formatX?.(x) : undefined;\n const commonTitle =\n sharedTitle ??\n (contents.every(({ content }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);\n const appendTitle = (text: string) => {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = text;\n tooltip.append(title);\n };\n if (commonTitle) appendTitle(commonTitle);\n for (const { item, content, missing } of contents) {\n if (content.title && !commonTitle) appendTitle(content.title);\n for (const row of content.rows) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n if (groupedSeriesChart()) {\n const swatch = document.createElement(\"i\");\n swatch.setAttribute(\"aria-hidden\", \"true\");\n const series = container.querySelector(\n `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`,\n );\n swatch.style.background = series\n ? getComputedStyle(series).stroke\n : `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n line.append(swatch);\n }\n const label = document.createElement(\"span\");\n label.textContent = `${row.label}: `;\n const value = document.createElement(\"b\");\n value.textContent = missing ? \"—\" : row.value;\n line.append(label, value);\n tooltip.append(line);\n }\n }\n if (options.kind() === \"area\") {\n const total = entry.datum.values.find((field) => field.key === \"total\");\n const totalLabel = container.querySelector(\"svg[data-chart-total-label]\")?.getAttribute(\"data-chart-total-label\");\n if (total && totalLabel) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n const label = document.createElement(\"span\");\n label.textContent = `${totalLabel}: `;\n const value = document.createElement(\"b\");\n value.textContent = total.formatted ?? String(total.value);\n line.append(label, value);\n tooltip.append(line);\n }\n }\n const rect = box(container),\n point = screenPoint(entry);\n const slot = categoryBands().find((candidate) => candidate.entry === entry);\n // A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.\n const band = slot && !entry.element.querySelector(\".k2b-chart-category-band\") ? slot : undefined;\n const rows = rowLayout(container);\n // A column's tooltip waits at the top of the plot, so it stays put while the pointer moves within the column.\n anchor.style.left = `${(slot && !rows ? (slot.left + slot.right) / 2 : point.x) - rect.left + container.scrollLeft}px`;\n anchor.style.top = `${(slot && !rows ? slot.top : point.y) - rect.top + container.scrollTop}px`;\n updatePlotBounds();\n container.style.setProperty(\"--k2b-chart-inspection-x\", `${point.x - rect.left + container.scrollLeft}px`);\n if (band) {\n container.style.setProperty(\"--k2b-chart-band-left\", `${band.left - rect.left + container.scrollLeft}px`);\n container.style.setProperty(\"--k2b-chart-band-top\", `${band.top - rect.top + container.scrollTop}px`);\n container.style.setProperty(\"--k2b-chart-band-width\", `${band.right - band.left}px`);\n container.style.setProperty(\"--k2b-chart-band-height\", `${band.bottom - band.top}px`);\n }\n container.setAttribute(\"data-inspecting\", seriesChart() ? \"series\" : band ? \"category\" : \"datum\");\n\n describe(container, tooltip.id, true);\n try {\n if (!tooltip.matches(\":popover-open\")) tooltip.showPopover();\n positionTooltipSurface(tooltip, anchor);\n } catch {\n /* SVG titles remain available without the Popover API. */\n }\n };\n /**\n * The screen slot of every category, halfway to its neighbours. A light band fills the inspected slot instead of\n * dimming other marks or outlining a bar, and the pointer anywhere in a slot keeps the same category.\n */\n const categoryBands = (): CategoryBand[] => {\n const role = categoryRoles[options.kind()];\n const container = options.container();\n if (!role || !container) return [];\n const rows = rowLayout(container);\n const slots = records()\n .filter((entry) => entry.datum.role === role)\n .map((entry) => ({ entry, rect: box(entry.element) }));\n if (!slots.length) return [];\n const guides = Array.from(container.querySelectorAll(\".stdlib-chart-grid, .stdlib-chart-axis\")).map((node) => box(node));\n // The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose\n // only guide is one vertical baseline, still get a band from the baseline to the longest bar.\n const spans = [...guides, ...slots.map((slot) => slot.rect)];\n const start = Math.min(...spans.map((rect) => (rows ? rect.left : rect.top)));\n const end = Math.max(...spans.map((rect) => (rows ? rect.right : rect.bottom)));\n const center = (rect: DOMRect) => (rows ? rect.top + rect.height / 2 : rect.left + rect.width / 2);\n slots.sort((a, b) => center(a.rect) - center(b.rect));\n return slots.map((slot, index) => {\n const middle = center(slot.rect);\n const previous = slots[index - 1],\n next = slots[index + 1];\n const half =\n previous || next ? Math.abs(center((next ?? previous)!.rect) - middle) / 2 : (rows ? slot.rect.height : slot.rect.width) * 0.75;\n const low = previous ? (center(previous.rect) + middle) / 2 : middle - half;\n const high = next ? (center(next.rect) + middle) / 2 : middle + half;\n return rows\n ? { entry: slot.entry, left: start, right: end, top: low, bottom: high }\n : { entry: slot.entry, left: low, right: high, top: start, bottom: end };\n });\n };\n const updatePlotBounds = () => {\n const container = options.container();\n if (!container) return;\n const axes = Array.from(container.querySelectorAll(\".stdlib-chart-axis\")).map(box);\n if (axes.length < 2) return;\n const left = Math.min(...axes.map((a) => a.left)),\n right = Math.max(...axes.map((a) => a.right));\n const top = Math.min(...axes.map((a) => a.top)),\n bottom = Math.max(...axes.map((a) => a.bottom));\n if (right <= left || bottom <= top) return;\n const rect = box(container);\n for (const [name, value] of Object.entries({\n left: left - rect.left,\n right: rect.right - right,\n top: top - rect.top,\n bottom: rect.bottom - bottom,\n }))\n container.style.setProperty(`--k2b-chart-plot-${name}`, `${value}px`);\n return { left, right, top, bottom };\n };\n const receive = (state: ChartCursorState) => {\n if (state?.source === source) return;\n close(false, false);\n if (!state || options.kind() !== \"line\") return;\n const entry = records().find((item) => rawX(item) === state.x);\n if (entry) show(entry, false);\n };\n const linkCursor = (cursor: ChartCursor | undefined): (() => void) => {\n linkedCursor = cursor;\n const unsubscribe = cursor?.subscribe(receive);\n return () => {\n unsubscribe?.();\n cursor?.clear(source);\n linkedCursor = undefined;\n };\n };\n const nearest = (x: number, y: number, target: Element | null): Entry | undefined => {\n if (target?.closest(\"button,a\") && !target.closest(\"[data-chart-datum]\")) return;\n const nodes = visibleRecords();\n // A mark wins before the plot bounds: the first and last points of a line sit on the plot's edges, so half of\n // their hit area lies outside it.\n const direct = target?.closest(\"[data-chart-datum]\");\n const hit = direct ? byElement.get(direct) : undefined;\n if (hit && nodes.includes(hit)) return hit;\n const bands = categoryBands();\n if (bands.length) {\n // Marks of their own inside a category, such as box-plot outliers, keep their forgiving hit radius.\n const role = categoryRoles[options.kind()];\n let loose: Entry | undefined,\n gap = 24;\n for (const entry of nodes) {\n if (entry.datum.role === role) continue;\n const point = screenPoint(entry);\n const distance = Math.hypot(point.x - x, point.y - y);\n if (distance <= gap) {\n gap = distance;\n loose = entry;\n }\n }\n if (loose) return loose;\n const rows = rowLayout(options.container());\n const frame = options.container()?.getBoundingClientRect();\n const inside = frame && x >= frame.left && x <= frame.right && y >= frame.top && y <= frame.bottom;\n return inside\n ? bands.find((band) => (rows ? y >= band.top && y <= band.bottom : x >= band.left && x <= band.right))?.entry\n : undefined;\n }\n if (seriesChart()) {\n const plot = updatePlotBounds();\n // SVG transforms and DOM rectangles can round the same painted edge\n // differently. Keep its half-pixel raster fringe inspectable.\n const edgeTolerance = 0.5;\n if (\n plot &&\n (x < plot.left - edgeTolerance || x > plot.right + edgeTolerance || y < plot.top - edgeTolerance || y > plot.bottom + edgeTolerance)\n )\n return;\n }\n // Exact shapes win. A small physical hit radius also reaches tiny or\n // zero-sized marks; distant whitespace leaves the chart unselected.\n const points = seriesChart() ? sortedPoints : nodes;\n if (seriesChart() && points.length) {\n const matrix = points[0]!.element.getScreenCTM?.();\n if (matrix) {\n const determinant = matrix.a * matrix.d - matrix.b * matrix.c;\n if (!determinant) return;\n const targetX = ((x - matrix.e) * matrix.d - (y - matrix.f) * matrix.c) / determinant;\n let low = 0,\n high = points.length - 1;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (points[mid]!.datum.anchor[0] < targetX) low = mid + 1;\n else high = mid;\n }\n const previous = Math.max(0, low - 1);\n return Math.abs(points[previous]!.datum.anchor[0] - targetX) <= Math.abs(points[low]!.datum.anchor[0] - targetX)\n ? points[previous]\n : points[low];\n }\n }\n const matrices = new Map<SVGSVGElement, DOMMatrix | null>();\n let best: Entry | undefined,\n distance = Infinity;\n for (const entry of points) {\n const svg = entry.element.ownerSVGElement;\n if (svg && !matrices.has(svg)) matrices.set(svg, svg.getScreenCTM?.() ?? null);\n const matrix = svg ? matrices.get(svg) : null;\n const [ax, ay] = entry.datum.anchor;\n const point = matrix\n ? { x: matrix.a * ax + matrix.c * ay + matrix.e, y: matrix.b * ax + matrix.d * ay + matrix.f }\n : screenPoint(entry);\n const dx = point.x - x,\n dy = point.y - y;\n const next = seriesChart() ? Math.abs(dx) : Math.hypot(dx, dy);\n if (next < distance) {\n distance = next;\n best = entry;\n }\n }\n return seriesChart() || distance <= 24 ? best : undefined;\n };\n const move = (event: PointerEvent) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;\n if (!options.enabled() || pinned || event.pointerType === \"touch\" || event.buttons) return;\n pending = { x: event.clientX, y: event.clientY, target: event.target instanceof Element ? event.target : null };\n if (frame !== undefined) return;\n frame = requestAnimationFrame(() => {\n frame = undefined;\n const sample = pending;\n pending = undefined;\n if (!sample) return;\n const entry = nearest(sample.x, sample.y, sample.target);\n if (entry) {\n byKeyboard = false;\n show(entry, true, true);\n if (seriesChart()) {\n const container = options.container();\n container?.setAttribute(\"data-cursor-source\", \"true\");\n container?.style.setProperty(\"--k2b-chart-inspection-y\", `${sample.y - box(container).top}px`);\n }\n } else close();\n });\n };\n let pointerFocusing = false;\n const down = (event: PointerEvent) => {\n pointerFocusing = true;\n byKeyboard = false;\n pointerStart = { x: event.clientX, y: event.clientY };\n moved = false;\n };\n const up = () => {\n pointerFocusing = false;\n };\n const click = (event: MouseEvent) => {\n pointerFocusing = false;\n if (!options.enabled() || moved || (event.target instanceof Element && event.target.closest(\"button,a\"))) return;\n const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);\n if (!entry) {\n close();\n return;\n }\n pinned = true;\n show(entry);\n options.select({ kind: options.kind(), datum: entry.datum });\n };\n const focus = (event: FocusEvent) => {\n if (event.target !== options.container() || !options.enabled()) return;\n if (pointerFocusing && options.nav?.()?.pointer === false) {\n pointerFocusing = false;\n return;\n }\n byKeyboard = !pointerFocusing;\n const nodes = visibleRecords();\n const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === \"line\" ? sortedPoints.at(-1) : nodes[0];\n if (first) show(first);\n };\n const key = (event: KeyboardEvent): boolean => {\n if (!options.enabled() || event.target !== options.container()) return false;\n if (event.key === \"Escape\") {\n close();\n return true;\n }\n if (event.key === \"Enter\" && active) {\n if (options.kind() === \"map\" && !visibleRecords().includes(active)) {\n close();\n return true;\n }\n event.preventDefault();\n pinned = true;\n const link = active.element.closest(\"a\");\n if (link) link.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n else options.select({ kind: options.kind(), datum: active.datum });\n return true;\n }\n const navigationChart = options.kind() === \"map\" || options.kind() === \"stateTimeline\";\n if (navigationChart && !event.altKey) return false;\n if (![\"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return false;\n let nodes = visibleRecords();\n if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n if (groupedSeriesChart()) {\n const seen = new Set<string | number | undefined>();\n nodes = nodes.filter((entry) => {\n const x = category(entry);\n if (seen.has(x)) return false;\n seen.add(x);\n return true;\n });\n }\n if (!nodes.length) return false;\n event.preventDefault();\n pinned = false;\n let index = active\n ? groupedSeriesChart()\n ? nodes.findIndex((entry) => category(entry) === category(active!))\n : nodes.indexOf(active)\n : -1;\n if (event.key === \"Home\") index = 0;\n else if (event.key === \"End\") index = nodes.length - 1;\n else if (active?.datum.grid && [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\n const [x, y] = active.datum.grid;\n const dx = event.key === \"ArrowLeft\" ? -1 : event.key === \"ArrowRight\" ? 1 : 0;\n const dy = event.key === \"ArrowUp\" ? -1 : event.key === \"ArrowDown\" ? 1 : 0;\n const next = nodes\n .filter(\n (entry) =>\n entry.datum.grid &&\n (dx\n ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0\n : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0),\n )\n .sort(\n (a, b) =>\n Math.abs(a.datum.grid![0] - x) +\n Math.abs(a.datum.grid![1] - y) -\n Math.abs(b.datum.grid![0] - x) -\n Math.abs(b.datum.grid![1] - y),\n )[0];\n if (next) index = nodes.indexOf(next);\n } else index += event.key === \"ArrowLeft\" || event.key === \"ArrowUp\" ? -1 : 1;\n const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))]!;\n options.nav?.()?.reveal?.(next.element);\n show(next);\n byKeyboard = true;\n return true;\n };\n return {\n selectDatum: (selected: ChartDatumRef | null | undefined) => selectData(selected ? [selected] : []),\n selectData,\n linkCursor,\n destroy: () => close(false),\n move,\n down,\n up,\n click,\n focus,\n key,\n /**\n * The page scrolled: a keyboard tooltip, or one a linked chart keeps open, follows its mark; others close. A\n * focused chart scrolled into view would otherwise close the tooltip its focus just opened.\n */\n scroll: () => {\n if (!byKeyboard) close();\n // Still open (keyboard, or a linked chart keeps it): show the same mark again at its new place.\n const entry = active;\n active = undefined;\n if (entry) show(entry, false);\n },\n close: () => close(),\n invalidate,\n leave: () => {\n if (!pinned) close();\n },\n };\n}\n\n/** Dismiss inspection on outside interaction, but allow the tooltip itself to scroll. */\nexport function closeChartInspectionOnOutside(options: {\n container: () => HTMLElement | undefined;\n tooltip: () => HTMLElement | undefined;\n close: () => void;\n /** What a page scroll does; defaults to close. An inspector passes its `scroll`, which keeps keyboard tooltips. */\n scroll?: () => void;\n keepScroll?: () => boolean | undefined;\n}): () => void {\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();\n };\n const scroll = (event: Event) => {\n if (event.target === options.container() && options.keepScroll?.()) return;\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n (options.scroll ?? options.close)();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", options.close);\n return () => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", options.close);\n };\n}\n\nexport type InspectChartOptions = {\n kind: ChartKind;\n nav?: ChartInspectionNavigation;\n format: ChartTooltipFormatter;\n select?: (selection: ChartSelection) => void;\n cursor?: ChartCursor;\n locale?: string;\n /** Host for a separately rendered series legend. Defaults to the chart container. */\n legend?: ParentNode;\n};\nexport type ChartInspection = { invalidate(): void; close(): void; destroy(): void };\n\nlet tooltipId = 0;\n\n/** Attach inspection to stdlib SVG rendered with inspect: true, without a framework. */\nexport function inspectChart(container: HTMLElement, options: InspectChartOptions): ChartInspection {\n const document = container.ownerDocument;\n const anchor = document.createElement(\"span\");\n anchor.className = \"k2b-chart__anchor\";\n anchor.setAttribute(\"aria-hidden\", \"true\");\n const tooltip = document.createElement(\"span\");\n tooltip.className = \"k2b-tooltip k2b-chart__tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.setAttribute(\"popover\", \"manual\");\n tooltip.setAttribute(\"data-instant\", \"true\");\n do {\n tooltip.id = `k2b-chart-tooltip-${++tooltipId}`;\n } while (document.getElementById(tooltip.id));\n container.append(anchor, tooltip);\n const addedTabindex = !container.hasAttribute(\"tabindex\");\n if (addedTabindex) container.setAttribute(\"tabindex\", \"0\");\n\n const inspector = createChartInspector({\n container: () => container,\n locale: () => options.locale ?? \"en\",\n legend: () => options.legend,\n cursor: () => options.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => options.kind,\n nav: () => options.nav,\n enabled: () => true,\n format: options.format,\n select: (selection) => options.select?.(selection),\n });\n const listen = <K extends keyof HTMLElementEventMap>(name: K, listener: (event: HTMLElementEventMap[K]) => unknown) => {\n container.addEventListener(name, listener);\n return () => container.removeEventListener(name, listener);\n };\n const removeListeners = [\n listen(\"pointerdown\", inspector.down),\n listen(\"pointerup\", inspector.up),\n listen(\"pointercancel\", inspector.up),\n listen(\"pointermove\", inspector.move),\n listen(\"click\", inspector.click),\n listen(\"pointerleave\", inspector.leave),\n listen(\"focusin\", inspector.focus),\n listen(\"focusout\", inspector.close),\n listen(\"keydown\", inspector.key),\n ];\n const removeOutside = closeChartInspectionOnOutside({\n container: () => container,\n tooltip: () => tooltip,\n close: inspector.close,\n keepScroll: () => options.nav?.keepScroll,\n });\n const unlinkCursor = inspector.linkCursor(options.cursor);\n let destroyed = false;\n return {\n invalidate: () => {\n if (!destroyed) inspector.invalidate();\n },\n close: () => {\n if (!destroyed) inspector.close();\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n for (const remove of removeListeners) remove();\n removeOutside();\n unlinkCursor();\n inspector.destroy();\n for (const element of container.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\")) {\n element.removeAttribute(\"data-inspected\");\n element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!element.getAttribute(\"style\")) element.removeAttribute(\"style\");\n }\n // Inspection geometry the inspector wrote onto the host container.\n for (const name of [\"inspection-x\", \"inspection-y\", \"plot-left\", \"plot-right\", \"plot-top\", \"plot-bottom\"])\n container.style.removeProperty(`--k2b-chart-${name}`);\n anchor.remove();\n tooltip.remove();\n if (addedTabindex) container.removeAttribute(\"tabindex\");\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,6 +3,10 @@ export const chartMessages = i18n.define({
|
|
|
3
3
|
baseLocale: "en",
|
|
4
4
|
messages: {
|
|
5
5
|
en: {
|
|
6
|
+
chartBarStart: "of start",
|
|
7
|
+
chartBarMore: ({
|
|
8
|
+
n
|
|
9
|
+
}) => `${n} more`,
|
|
6
10
|
chartView: "Chart view",
|
|
7
11
|
chartDiagram: "Diagram",
|
|
8
12
|
chartData: "Table",
|
|
@@ -41,6 +45,8 @@ export const chartMessages = i18n.define({
|
|
|
41
45
|
const labels = {
|
|
42
46
|
x: "X",
|
|
43
47
|
y: "Y",
|
|
48
|
+
previous: "Previous",
|
|
49
|
+
cumulative: "Cumulative",
|
|
44
50
|
balance: "Balance",
|
|
45
51
|
inflow: "In",
|
|
46
52
|
outflow: "Out",
|
|
@@ -48,6 +54,9 @@ export const chartMessages = i18n.define({
|
|
|
48
54
|
change: "Change",
|
|
49
55
|
value: "Value",
|
|
50
56
|
percent: "Share",
|
|
57
|
+
startPercent: "Share of start",
|
|
58
|
+
previousPercent: "Share of previous step",
|
|
59
|
+
rank: "Rank",
|
|
51
60
|
total: "Total",
|
|
52
61
|
areaTotal: "Total",
|
|
53
62
|
from: "From",
|
|
@@ -86,6 +95,10 @@ export const chartMessages = i18n.define({
|
|
|
86
95
|
resetTimelineView: "Reset timeline view"
|
|
87
96
|
},
|
|
88
97
|
de: {
|
|
98
|
+
chartBarStart: "vom Start",
|
|
99
|
+
chartBarMore: ({
|
|
100
|
+
n
|
|
101
|
+
}) => `${n} weitere`,
|
|
89
102
|
chartView: "Diagrammansicht",
|
|
90
103
|
chartDiagram: "Diagramm",
|
|
91
104
|
chartData: "Tabelle",
|
|
@@ -124,6 +137,8 @@ export const chartMessages = i18n.define({
|
|
|
124
137
|
const labels = {
|
|
125
138
|
x: "X",
|
|
126
139
|
y: "Y",
|
|
140
|
+
previous: "Vorher",
|
|
141
|
+
cumulative: "Kumuliert",
|
|
127
142
|
balance: "Stand",
|
|
128
143
|
inflow: "Rein",
|
|
129
144
|
outflow: "Raus",
|
|
@@ -131,6 +146,9 @@ export const chartMessages = i18n.define({
|
|
|
131
146
|
change: "Änderung",
|
|
132
147
|
value: "Wert",
|
|
133
148
|
percent: "Anteil",
|
|
149
|
+
startPercent: "Anteil am Start",
|
|
150
|
+
previousPercent: "Anteil am vorigen Schritt",
|
|
151
|
+
rank: "Rang",
|
|
134
152
|
total: "Gesamt",
|
|
135
153
|
areaTotal: "Zusammen",
|
|
136
154
|
from: "Von",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/chart-message-catalog.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\n\nexport const chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n chartLegend: \"Legend\",\n chartLoading: \"Loading …\",\n chartLoadingRange: ({ range }: { range: string }) => `Loading ${range} …`,\n chartLoadFailed: \"The data could not be loaded.\",\n chartLoadFailedKept: \"Range and view stay as they are.\",\n chartAsOf: ({ time }: { time: string }) => `As of ${time}`,\n chartRefreshFailed: \"Refresh failed\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n balance: \"Balance\",\n inflow: \"In\",\n outflow: \"Out\",\n after: \"Balance after\",\n change: \"Change\",\n value: \"Value\",\n percent: \"Share\",\n total: \"Total\",\n areaTotal: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n group: \"Group\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n chartLegend: \"Legende\",\n chartLoading: \"Lädt …\",\n chartLoadingRange: ({ range }: { range: string }) => `Lädt ${range} …`,\n chartLoadFailed: \"Die Daten konnten nicht geladen werden.\",\n chartLoadFailedKept: \"Zeitraum und Ansicht bleiben, wie sie sind.\",\n chartAsOf: ({ time }: { time: string }) => `Stand ${time}`,\n chartRefreshFailed: \"Aktualisieren fehlgeschlagen\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n balance: \"Stand\",\n inflow: \"Rein\",\n outflow: \"Raus\",\n after: \"Stand danach\",\n change: \"Änderung\",\n value: \"Wert\",\n percent: \"Anteil\",\n total: \"Gesamt\",\n areaTotal: \"Zusammen\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n group: \"Bereich\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport const resolveChartMessages = (locale: string) => chartMessages.resolve([locale]).t;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/chart-message-catalog.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\n\nexport const chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartBarStart: \"of start\",\n chartBarMore: ({ n }: { n: number }) => `${n} more`,\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n chartLegend: \"Legend\",\n chartLoading: \"Loading …\",\n chartLoadingRange: ({ range }: { range: string }) => `Loading ${range} …`,\n chartLoadFailed: \"The data could not be loaded.\",\n chartLoadFailedKept: \"Range and view stay as they are.\",\n chartAsOf: ({ time }: { time: string }) => `As of ${time}`,\n chartRefreshFailed: \"Refresh failed\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n previous: \"Previous\",\n cumulative: \"Cumulative\",\n balance: \"Balance\",\n inflow: \"In\",\n outflow: \"Out\",\n after: \"Balance after\",\n change: \"Change\",\n value: \"Value\",\n percent: \"Share\",\n startPercent: \"Share of start\",\n previousPercent: \"Share of previous step\",\n rank: \"Rank\",\n total: \"Total\",\n areaTotal: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n group: \"Group\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartBarStart: \"vom Start\",\n chartBarMore: ({ n }: { n: number }) => `${n} weitere`,\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n chartLegend: \"Legende\",\n chartLoading: \"Lädt …\",\n chartLoadingRange: ({ range }: { range: string }) => `Lädt ${range} …`,\n chartLoadFailed: \"Die Daten konnten nicht geladen werden.\",\n chartLoadFailedKept: \"Zeitraum und Ansicht bleiben, wie sie sind.\",\n chartAsOf: ({ time }: { time: string }) => `Stand ${time}`,\n chartRefreshFailed: \"Aktualisieren fehlgeschlagen\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n previous: \"Vorher\",\n cumulative: \"Kumuliert\",\n balance: \"Stand\",\n inflow: \"Rein\",\n outflow: \"Raus\",\n after: \"Stand danach\",\n change: \"Änderung\",\n value: \"Wert\",\n percent: \"Anteil\",\n startPercent: \"Anteil am Start\",\n previousPercent: \"Anteil am vorigen Schritt\",\n rank: \"Rang\",\n total: \"Gesamt\",\n areaTotal: \"Zusammen\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n group: \"Bereich\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport const resolveChartMessages = (locale: string) => chartMessages.resolve([locale]).t;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,6 +44,7 @@ export { ReactionBar } from "./ReactionBar";
|
|
|
44
44
|
export { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from "./ReferenceChip";
|
|
45
45
|
export { Steps } from "./Steps";
|
|
46
46
|
export { default as StructuredDataPreview, isStructuredDataValue } from "./StructuredDataPreview";
|
|
47
|
+
export { ThumbnailStrip } from "./ThumbnailStrip";
|
|
47
48
|
export { default as Timeline } from "./Timeline";
|
|
48
49
|
export { VideoPlayer } from "./VideoPlayer";
|
|
49
50
|
export { VirtualFeed } from "./VirtualFeed";
|