@sentropic/design-system-svelte 0.34.23 → 0.34.25
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/AreaChart.svelte +100 -4
- package/dist/AreaChart.svelte.d.ts +23 -0
- package/dist/AreaChart.svelte.d.ts.map +1 -1
- package/dist/BarChart.svelte +107 -4
- package/dist/BarChart.svelte.d.ts +23 -0
- package/dist/BarChart.svelte.d.ts.map +1 -1
- package/dist/DonutChart.svelte +52 -2
- package/dist/DonutChart.svelte.d.ts +9 -0
- package/dist/DonutChart.svelte.d.ts.map +1 -1
- package/dist/LineChart.svelte +99 -4
- package/dist/LineChart.svelte.d.ts +23 -0
- package/dist/LineChart.svelte.d.ts.map +1 -1
- package/dist/StackedBarChart.svelte +44 -0
- package/dist/StackedBarChart.svelte.d.ts +9 -0
- package/dist/StackedBarChart.svelte.d.ts.map +1 -1
- package/dist/chartCrosshair.d.ts +19 -0
- package/dist/chartCrosshair.d.ts.map +1 -0
- package/dist/chartCrosshair.js +51 -0
- package/dist/chartDataLabels.d.ts +35 -0
- package/dist/chartDataLabels.d.ts.map +1 -0
- package/dist/chartDataLabels.js +31 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/AreaChart.svelte
CHANGED
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
polygonPoints,
|
|
24
24
|
type ChartAnnotation
|
|
25
25
|
} from "./chartAnnotations.js";
|
|
26
|
+
import { formatDataLabel, normalizeDataLabels, type DataLabelsProp } from "./chartDataLabels.js";
|
|
27
|
+
import { keyForX, resolveActiveIndex } from "./chartCrosshair.js";
|
|
26
28
|
|
|
27
29
|
type AreaChartProps = {
|
|
28
30
|
data: (number | AreaChartDatum)[];
|
|
@@ -37,6 +39,28 @@
|
|
|
37
39
|
* the area, every other kind above it. Additive: absent ⇒ unchanged.
|
|
38
40
|
*/
|
|
39
41
|
annotations?: ChartAnnotation[];
|
|
42
|
+
/**
|
|
43
|
+
* Per-point value labels. `false`/absent (default) → none. `true` → each
|
|
44
|
+
* point's value with the chart's numeric formatter. Object → `format(value)`
|
|
45
|
+
* and/or a `position` override. Default position is `top` (above the point).
|
|
46
|
+
* Labels are `aria-hidden` — the values already live in the accessible
|
|
47
|
+
* ChartDataList.
|
|
48
|
+
*/
|
|
49
|
+
dataLabels?: DataLabelsProp;
|
|
50
|
+
/**
|
|
51
|
+
* CONTROLLED synchronised hover key (FR-3). A datum's key is `String(x)`. When
|
|
52
|
+
* provided (string or null), the crosshair + tooltip track this key instead of
|
|
53
|
+
* the chart's internal pointer hover (null ⇒ nothing shown), letting a parent
|
|
54
|
+
* share one hover channel across several aligned charts. Absent (`undefined`)
|
|
55
|
+
* keeps the legacy uncontrolled behaviour.
|
|
56
|
+
*/
|
|
57
|
+
hoverKey?: string | null;
|
|
58
|
+
/**
|
|
59
|
+
* Emitted when the user hovers a datum (its key) or leaves the plot (`null`).
|
|
60
|
+
* Always fired on pointer move/leave — even while CONTROLLED — so dataviz can
|
|
61
|
+
* keep the shared hover channel in sync.
|
|
62
|
+
*/
|
|
63
|
+
onHoverKeyChange?: (key: string | null) => void;
|
|
40
64
|
class?: string;
|
|
41
65
|
};
|
|
42
66
|
|
|
@@ -48,6 +72,9 @@
|
|
|
48
72
|
smooth = false,
|
|
49
73
|
label,
|
|
50
74
|
annotations,
|
|
75
|
+
dataLabels,
|
|
76
|
+
hoverKey,
|
|
77
|
+
onHoverKeyChange,
|
|
51
78
|
class: className
|
|
52
79
|
}: AreaChartProps = $props();
|
|
53
80
|
|
|
@@ -186,6 +213,19 @@
|
|
|
186
213
|
const annotationRegions = $derived(resolvedAnnotations.filter((a) => a.kind === "region"));
|
|
187
214
|
const annotationAbove = $derived(resolvedAnnotations.filter((a) => a.kind !== "region"));
|
|
188
215
|
|
|
216
|
+
// --- Data labels ----------------------------------------------------------
|
|
217
|
+
// One value label per point. Default `top`: just above the dot. `center` sits
|
|
218
|
+
// on the dot. aria-hidden (values are in the ChartDataList already).
|
|
219
|
+
const dataLabelOpts = $derived(normalizeDataLabels(dataLabels));
|
|
220
|
+
const dataLabelItems = $derived.by(() => {
|
|
221
|
+
if (!dataLabelOpts.enabled) return [] as { key: number; x: number; y: number; text: string; baseline: string }[];
|
|
222
|
+
return points.map((p) => {
|
|
223
|
+
const text = formatDataLabel(p.datum.y, dataLabelOpts, formatTick);
|
|
224
|
+
const center = dataLabelOpts.position === "center" || dataLabelOpts.position === "inside";
|
|
225
|
+
return { key: p.index, x: p.x, y: center ? p.y : p.y - 8, text, baseline: center ? "middle" : "auto" };
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
|
|
189
229
|
function buildLinearPath(pts: { x: number; y: number }[]): string {
|
|
190
230
|
return pts.map((p, i) => `${i === 0 ? "M" : "L"}${p.x.toFixed(2)},${p.y.toFixed(2)}`).join(" ");
|
|
191
231
|
}
|
|
@@ -248,19 +288,34 @@
|
|
|
248
288
|
return entries;
|
|
249
289
|
});
|
|
250
290
|
|
|
291
|
+
// Stable key per datum (FR-3): `String(x)` of the normalised datum (a bare
|
|
292
|
+
// number becomes its index). Resolves a controlled `hoverKey` to an index and
|
|
293
|
+
// feeds `onHoverKeyChange` from pointer events.
|
|
294
|
+
const hoverKeys = $derived(normalizedData.map((d) => keyForX(d.x)));
|
|
295
|
+
function emitHoverKey(index: number | null) {
|
|
296
|
+
onHoverKeyChange?.(index == null ? null : hoverKeys[index] ?? null);
|
|
297
|
+
}
|
|
251
298
|
function handleLeave() {
|
|
252
299
|
hoveredIndex = null;
|
|
300
|
+
emitHoverKey(null);
|
|
253
301
|
}
|
|
254
302
|
function handleVisualPointerMove(event: PointerEvent) {
|
|
255
303
|
const target = event.target;
|
|
256
304
|
if (!(target instanceof Element)) {
|
|
257
305
|
hoveredIndex = null;
|
|
306
|
+
emitHoverKey(null);
|
|
258
307
|
return;
|
|
259
308
|
}
|
|
260
|
-
const
|
|
261
|
-
|
|
309
|
+
const raw = Number(target.getAttribute("data-chart-index"));
|
|
310
|
+
const index = Number.isInteger(raw) ? raw : null;
|
|
311
|
+
hoveredIndex = index;
|
|
312
|
+
emitHoverKey(index);
|
|
262
313
|
}
|
|
263
314
|
|
|
315
|
+
// Index whose crosshair/tooltip is DISPLAYED: the controlled `hoverKey` when
|
|
316
|
+
// provided (resolved against `hoverKeys`), else the internal pointer index.
|
|
317
|
+
const activeIndex = $derived(resolveActiveIndex(hoverKey, hoveredIndex, hoverKeys));
|
|
318
|
+
|
|
264
319
|
// Generates a unique gradient id to avoid conflicts when rendering multiple charts on the same page
|
|
265
320
|
const gradientId = $derived.by(() => {
|
|
266
321
|
return `st-areachart-gradient-${Math.random().toString(36).substring(2, 9)}`;
|
|
@@ -409,13 +464,32 @@
|
|
|
409
464
|
{/each}
|
|
410
465
|
</g>
|
|
411
466
|
{/if}
|
|
467
|
+
|
|
468
|
+
<!-- Data labels — one value per point, drawn on top. aria-hidden. -->
|
|
469
|
+
{#if dataLabelItems.length > 0}
|
|
470
|
+
<g class="st-areaChart__dataLabels" aria-hidden="true">
|
|
471
|
+
{#each dataLabelItems as d (d.key)}
|
|
472
|
+
<text class="st-areaChart__dataLabel" x={d.x} y={d.y} text-anchor="middle" dominant-baseline={d.baseline}>{d.text}</text>
|
|
473
|
+
{/each}
|
|
474
|
+
</g>
|
|
475
|
+
{/if}
|
|
476
|
+
|
|
477
|
+
<!-- Crosshair (FR-3) — a tokenised vertical line + marker at the active key.
|
|
478
|
+
Decorative (aria-hidden); the value is in the tooltip + ChartDataList. -->
|
|
479
|
+
{#if activeIndex >= 0 && points[activeIndex]}
|
|
480
|
+
{@const cp = points[activeIndex]}
|
|
481
|
+
<g class="st-areaChart__crosshair" aria-hidden="true">
|
|
482
|
+
<line class="st-areaChart__crosshairLine" x1={cp.x} x2={cp.x} y1={MARGIN.top} y2={MARGIN.top + plotHeight} />
|
|
483
|
+
<circle class="st-areaChart__crosshairMarker" cx={cp.x} cy={cp.y} r="5" />
|
|
484
|
+
</g>
|
|
485
|
+
{/if}
|
|
412
486
|
</svg>
|
|
413
487
|
</div>
|
|
414
488
|
|
|
415
489
|
<ChartDataList {label} items={dataValueItems} />
|
|
416
490
|
|
|
417
|
-
{#if
|
|
418
|
-
{@const p = points[
|
|
491
|
+
{#if activeIndex >= 0 && points[activeIndex]}
|
|
492
|
+
{@const p = points[activeIndex]}
|
|
419
493
|
<div
|
|
420
494
|
class="st-areaChart__tooltip"
|
|
421
495
|
role="presentation"
|
|
@@ -549,4 +623,26 @@
|
|
|
549
623
|
font-size: 0.625rem;
|
|
550
624
|
font-weight: 600;
|
|
551
625
|
}
|
|
626
|
+
|
|
627
|
+
/* Data labels — per-point value, drawn on top. Token-only colour. */
|
|
628
|
+
.st-areaChart__dataLabel {
|
|
629
|
+
fill: var(--st-semantic-text-primary);
|
|
630
|
+
font-size: 0.6875rem;
|
|
631
|
+
font-weight: 600;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
/* --- Crosshair layer (FR-3) ----------------------------------------------
|
|
635
|
+
A tokenised dashed vertical line at the active (hovered/controlled) key,
|
|
636
|
+
plus an emphasised marker on the point. Decorative (aria-hidden). */
|
|
637
|
+
.st-areaChart__crosshairLine {
|
|
638
|
+
stroke: var(--st-semantic-border-strong);
|
|
639
|
+
stroke-width: 1;
|
|
640
|
+
stroke-dasharray: 3 3;
|
|
641
|
+
opacity: 0.7;
|
|
642
|
+
}
|
|
643
|
+
.st-areaChart__crosshairMarker {
|
|
644
|
+
fill: currentColor;
|
|
645
|
+
stroke: var(--st-semantic-surface-default);
|
|
646
|
+
stroke-width: 2;
|
|
647
|
+
}
|
|
552
648
|
</style>
|
|
@@ -4,6 +4,7 @@ export type AreaChartDatum = {
|
|
|
4
4
|
y: number;
|
|
5
5
|
};
|
|
6
6
|
import { type ChartAnnotation } from "./chartAnnotations.js";
|
|
7
|
+
import { type DataLabelsProp } from "./chartDataLabels.js";
|
|
7
8
|
type AreaChartProps = {
|
|
8
9
|
data: (number | AreaChartDatum)[];
|
|
9
10
|
width?: number;
|
|
@@ -17,6 +18,28 @@ type AreaChartProps = {
|
|
|
17
18
|
* the area, every other kind above it. Additive: absent ⇒ unchanged.
|
|
18
19
|
*/
|
|
19
20
|
annotations?: ChartAnnotation[];
|
|
21
|
+
/**
|
|
22
|
+
* Per-point value labels. `false`/absent (default) → none. `true` → each
|
|
23
|
+
* point's value with the chart's numeric formatter. Object → `format(value)`
|
|
24
|
+
* and/or a `position` override. Default position is `top` (above the point).
|
|
25
|
+
* Labels are `aria-hidden` — the values already live in the accessible
|
|
26
|
+
* ChartDataList.
|
|
27
|
+
*/
|
|
28
|
+
dataLabels?: DataLabelsProp;
|
|
29
|
+
/**
|
|
30
|
+
* CONTROLLED synchronised hover key (FR-3). A datum's key is `String(x)`. When
|
|
31
|
+
* provided (string or null), the crosshair + tooltip track this key instead of
|
|
32
|
+
* the chart's internal pointer hover (null ⇒ nothing shown), letting a parent
|
|
33
|
+
* share one hover channel across several aligned charts. Absent (`undefined`)
|
|
34
|
+
* keeps the legacy uncontrolled behaviour.
|
|
35
|
+
*/
|
|
36
|
+
hoverKey?: string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Emitted when the user hovers a datum (its key) or leaves the plot (`null`).
|
|
39
|
+
* Always fired on pointer move/leave — even while CONTROLLED — so dataviz can
|
|
40
|
+
* keep the shared hover channel in sync.
|
|
41
|
+
*/
|
|
42
|
+
onHoverKeyChange?: (key: string | null) => void;
|
|
20
43
|
class?: string;
|
|
21
44
|
};
|
|
22
45
|
declare const AreaChart: import("svelte").Component<AreaChartProps, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AreaChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/AreaChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAIJ,OAAO,EAIH,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"AreaChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/AreaChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAIJ,OAAO,EAIH,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AACjC,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI/F,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkYJ,QAAA,MAAM,SAAS,oDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
package/dist/BarChart.svelte
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
polygonPoints,
|
|
57
57
|
type ChartAnnotation
|
|
58
58
|
} from "./chartAnnotations.js";
|
|
59
|
+
import { formatDataLabel, normalizeDataLabels, type DataLabelsProp } from "./chartDataLabels.js";
|
|
60
|
+
import { resolveActiveIndex } from "./chartCrosshair.js";
|
|
59
61
|
|
|
60
62
|
type BarChartProps = {
|
|
61
63
|
data: BarChartDatum[];
|
|
@@ -100,6 +102,14 @@
|
|
|
100
102
|
* unchanged.
|
|
101
103
|
*/
|
|
102
104
|
annotations?: ChartAnnotation[];
|
|
105
|
+
/**
|
|
106
|
+
* Per-bar value labels. `false`/absent (default) → none. `true` → each bar's
|
|
107
|
+
* value with the chart's numeric formatter. Object → `format(value)` and/or
|
|
108
|
+
* a `position` override. Default position is `outside` (above the bar in
|
|
109
|
+
* vertical mode, past the bar end in horizontal mode). Labels are
|
|
110
|
+
* `aria-hidden` — the values already live in the accessible ChartDataList.
|
|
111
|
+
*/
|
|
112
|
+
dataLabels?: DataLabelsProp;
|
|
103
113
|
/**
|
|
104
114
|
* Value-axis scale. `"linear"` (default) is unchanged. `"log"` switches the
|
|
105
115
|
* value axis to a base-10 logarithmic scale — values `<= 0` are ignored for
|
|
@@ -115,6 +125,20 @@
|
|
|
115
125
|
* cross-chart parity and otherwise ignored.
|
|
116
126
|
*/
|
|
117
127
|
showLegend?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* CONTROLLED synchronised hover key (FR-3). A bar's key is its `label`. When
|
|
130
|
+
* provided (string or null), the crosshair + tooltip track this key instead of
|
|
131
|
+
* the chart's internal pointer hover (null ⇒ nothing shown), letting a parent
|
|
132
|
+
* share one hover channel across several aligned charts. Absent (`undefined`)
|
|
133
|
+
* keeps the legacy uncontrolled behaviour. Independent of `selectedKeys`.
|
|
134
|
+
*/
|
|
135
|
+
hoverKey?: string | null;
|
|
136
|
+
/**
|
|
137
|
+
* Emitted when the user hovers a bar (its `label`) or leaves the plot (`null`).
|
|
138
|
+
* Always fired on pointer move/leave — even while CONTROLLED — so dataviz can
|
|
139
|
+
* keep the shared hover channel in sync.
|
|
140
|
+
*/
|
|
141
|
+
onHoverKeyChange?: (key: string | null) => void;
|
|
118
142
|
class?: string;
|
|
119
143
|
};
|
|
120
144
|
|
|
@@ -131,9 +155,12 @@
|
|
|
131
155
|
bands,
|
|
132
156
|
goalLine,
|
|
133
157
|
annotations,
|
|
158
|
+
dataLabels,
|
|
134
159
|
scale = "linear",
|
|
135
160
|
invertAxis = false,
|
|
136
161
|
showLegend,
|
|
162
|
+
hoverKey,
|
|
163
|
+
onHoverKeyChange,
|
|
137
164
|
class: className
|
|
138
165
|
}: BarChartProps = $props();
|
|
139
166
|
|
|
@@ -537,6 +564,28 @@
|
|
|
537
564
|
const annotationRegions = $derived(resolvedAnnotations.filter((a) => a.kind === "region"));
|
|
538
565
|
const annotationAbove = $derived(resolvedAnnotations.filter((a) => a.kind !== "region"));
|
|
539
566
|
|
|
567
|
+
// --- Data labels ----------------------------------------------------------
|
|
568
|
+
// One value label per bar, placed at the bar's value end. Default `outside`:
|
|
569
|
+
// above the bar (vertical) / past the bar end (horizontal). `inside`/`center`
|
|
570
|
+
// sit at the bar's mid-length. aria-hidden (values are in the ChartDataList).
|
|
571
|
+
const dataLabelOpts = $derived(normalizeDataLabels(dataLabels));
|
|
572
|
+
const dataLabelItems = $derived.by(() => {
|
|
573
|
+
if (!dataLabelOpts.enabled) return [] as { key: string; x: number; y: number; text: string; anchor: "start" | "middle" | "end"; baseline: string }[];
|
|
574
|
+
return bars.map((bar) => {
|
|
575
|
+
const text = formatDataLabel(bar.datum.value, dataLabelOpts, formatTick);
|
|
576
|
+
const pos = dataLabelOpts.position ?? "outside";
|
|
577
|
+
const inside = pos === "inside" || pos === "center";
|
|
578
|
+
if (isVertical) {
|
|
579
|
+
const x = bar.cx;
|
|
580
|
+
const y = inside ? bar.y + bar.height / 2 : bar.cy - 6;
|
|
581
|
+
return { key: bar.datum.label, x, y, text, anchor: "middle" as const, baseline: inside ? "middle" : "auto" };
|
|
582
|
+
}
|
|
583
|
+
const y = bar.cy;
|
|
584
|
+
const x = inside ? bar.x + bar.width / 2 : bar.cx + 4;
|
|
585
|
+
return { key: bar.datum.label, x, y, text, anchor: inside ? ("middle" as const) : ("start" as const), baseline: "middle" };
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
|
|
540
589
|
const dataValueItems = $derived([
|
|
541
590
|
...data.map((d) => `${d.label}: ${d.value}`),
|
|
542
591
|
...overlayDataListItems(referenceLines, bands, goal),
|
|
@@ -567,19 +616,33 @@
|
|
|
567
616
|
}));
|
|
568
617
|
});
|
|
569
618
|
|
|
619
|
+
// Stable key per bar (FR-3): its `label`. Resolves a controlled `hoverKey` to
|
|
620
|
+
// an index and feeds `onHoverKeyChange` from pointer events.
|
|
621
|
+
const hoverKeys = $derived(bars.map((b) => b.datum.label));
|
|
622
|
+
function emitHoverKey(index: number | null) {
|
|
623
|
+
onHoverKeyChange?.(index == null ? null : hoverKeys[index] ?? null);
|
|
624
|
+
}
|
|
570
625
|
function handleLeave() {
|
|
571
626
|
hoveredIndex = null;
|
|
627
|
+
emitHoverKey(null);
|
|
572
628
|
}
|
|
573
629
|
function handleVisualPointerMove(event: PointerEvent) {
|
|
574
630
|
const target = event.target;
|
|
575
631
|
if (!(target instanceof Element)) {
|
|
576
632
|
hoveredIndex = null;
|
|
633
|
+
emitHoverKey(null);
|
|
577
634
|
return;
|
|
578
635
|
}
|
|
579
|
-
const
|
|
580
|
-
|
|
636
|
+
const raw = Number(target.getAttribute("data-chart-index"));
|
|
637
|
+
const index = Number.isInteger(raw) ? raw : null;
|
|
638
|
+
hoveredIndex = index;
|
|
639
|
+
emitHoverKey(index);
|
|
581
640
|
}
|
|
582
641
|
|
|
642
|
+
// Index whose crosshair/tooltip is DISPLAYED: the controlled `hoverKey` when
|
|
643
|
+
// provided (resolved against `hoverKeys`), else the internal pointer index.
|
|
644
|
+
const activeIndex = $derived(resolveActiveIndex(hoverKey, hoveredIndex, hoverKeys));
|
|
645
|
+
|
|
583
646
|
const classes = () => ["st-barChart", className].filter(Boolean).join(" ");
|
|
584
647
|
</script>
|
|
585
648
|
|
|
@@ -795,6 +858,29 @@
|
|
|
795
858
|
{/each}
|
|
796
859
|
</g>
|
|
797
860
|
{/if}
|
|
861
|
+
|
|
862
|
+
<!-- Data labels — one value per bar, drawn on top. aria-hidden. -->
|
|
863
|
+
{#if dataLabelItems.length > 0}
|
|
864
|
+
<g class="st-barChart__dataLabels" aria-hidden="true">
|
|
865
|
+
{#each dataLabelItems as d (d.key)}
|
|
866
|
+
<text class="st-barChart__dataLabel" x={d.x} y={d.y} text-anchor={d.anchor} dominant-baseline={d.baseline}>{d.text}</text>
|
|
867
|
+
{/each}
|
|
868
|
+
</g>
|
|
869
|
+
{/if}
|
|
870
|
+
|
|
871
|
+
<!-- Crosshair (FR-3) — a tokenised dashed line on the CATEGORY axis at the
|
|
872
|
+
active bar: vertical (vertical bars) / horizontal (horizontal bars).
|
|
873
|
+
Decorative (aria-hidden); the value is in the tooltip + ChartDataList. -->
|
|
874
|
+
{#if activeIndex >= 0 && bars[activeIndex]}
|
|
875
|
+
{@const cb = bars[activeIndex]}
|
|
876
|
+
<g class="st-barChart__crosshair" aria-hidden="true">
|
|
877
|
+
{#if isVertical}
|
|
878
|
+
<line class="st-barChart__crosshairLine" x1={cb.cx} x2={cb.cx} y1={MARGIN.top} y2={MARGIN.top + scales.plotHeight} />
|
|
879
|
+
{:else}
|
|
880
|
+
<line class="st-barChart__crosshairLine" x1={MARGIN.left} x2={MARGIN.left + scales.plotWidth} y1={cb.cy} y2={cb.cy} />
|
|
881
|
+
{/if}
|
|
882
|
+
</g>
|
|
883
|
+
{/if}
|
|
798
884
|
</svg>
|
|
799
885
|
</div>
|
|
800
886
|
|
|
@@ -820,8 +906,8 @@
|
|
|
820
906
|
|
|
821
907
|
<ChartDataList {label} items={dataValueItems} />
|
|
822
908
|
|
|
823
|
-
{#if
|
|
824
|
-
{@const bar = bars[
|
|
909
|
+
{#if activeIndex >= 0 && bars[activeIndex]}
|
|
910
|
+
{@const bar = bars[activeIndex]}
|
|
825
911
|
<div
|
|
826
912
|
class="st-barChart__tooltip"
|
|
827
913
|
role="presentation"
|
|
@@ -1076,4 +1162,21 @@
|
|
|
1076
1162
|
font-size: 0.625rem;
|
|
1077
1163
|
font-weight: 600;
|
|
1078
1164
|
}
|
|
1165
|
+
|
|
1166
|
+
/* Data labels — per-bar value, drawn on top. Token-only colour. */
|
|
1167
|
+
.st-barChart__dataLabel {
|
|
1168
|
+
fill: var(--st-semantic-text-primary);
|
|
1169
|
+
font-size: 0.6875rem;
|
|
1170
|
+
font-weight: 600;
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
/* --- Crosshair layer (FR-3) ----------------------------------------------
|
|
1174
|
+
A tokenised dashed line on the CATEGORY axis at the active (hovered/
|
|
1175
|
+
controlled) bar. Decorative (aria-hidden). */
|
|
1176
|
+
.st-barChart__crosshairLine {
|
|
1177
|
+
stroke: var(--st-semantic-border-strong);
|
|
1178
|
+
stroke-width: 1;
|
|
1179
|
+
stroke-dasharray: 3 3;
|
|
1180
|
+
opacity: 0.7;
|
|
1181
|
+
}
|
|
1079
1182
|
</style>
|
|
@@ -32,6 +32,7 @@ export type ChartGoalLine = {
|
|
|
32
32
|
/** Value-axis scale type. `log` requires strictly positive values. */
|
|
33
33
|
export type ChartScale = "linear" | "log";
|
|
34
34
|
import { type ChartAnnotation } from "./chartAnnotations.js";
|
|
35
|
+
import { type DataLabelsProp } from "./chartDataLabels.js";
|
|
35
36
|
type BarChartProps = {
|
|
36
37
|
data: BarChartDatum[];
|
|
37
38
|
width?: number;
|
|
@@ -75,6 +76,14 @@ type BarChartProps = {
|
|
|
75
76
|
* unchanged.
|
|
76
77
|
*/
|
|
77
78
|
annotations?: ChartAnnotation[];
|
|
79
|
+
/**
|
|
80
|
+
* Per-bar value labels. `false`/absent (default) → none. `true` → each bar's
|
|
81
|
+
* value with the chart's numeric formatter. Object → `format(value)` and/or
|
|
82
|
+
* a `position` override. Default position is `outside` (above the bar in
|
|
83
|
+
* vertical mode, past the bar end in horizontal mode). Labels are
|
|
84
|
+
* `aria-hidden` — the values already live in the accessible ChartDataList.
|
|
85
|
+
*/
|
|
86
|
+
dataLabels?: DataLabelsProp;
|
|
78
87
|
/**
|
|
79
88
|
* Value-axis scale. `"linear"` (default) is unchanged. `"log"` switches the
|
|
80
89
|
* value axis to a base-10 logarithmic scale — values `<= 0` are ignored for
|
|
@@ -90,6 +99,20 @@ type BarChartProps = {
|
|
|
90
99
|
* cross-chart parity and otherwise ignored.
|
|
91
100
|
*/
|
|
92
101
|
showLegend?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* CONTROLLED synchronised hover key (FR-3). A bar's key is its `label`. When
|
|
104
|
+
* provided (string or null), the crosshair + tooltip track this key instead of
|
|
105
|
+
* the chart's internal pointer hover (null ⇒ nothing shown), letting a parent
|
|
106
|
+
* share one hover channel across several aligned charts. Absent (`undefined`)
|
|
107
|
+
* keeps the legacy uncontrolled behaviour. Independent of `selectedKeys`.
|
|
108
|
+
*/
|
|
109
|
+
hoverKey?: string | null;
|
|
110
|
+
/**
|
|
111
|
+
* Emitted when the user hovers a bar (its `label`) or leaves the plot (`null`).
|
|
112
|
+
* Always fired on pointer move/leave — even while CONTROLLED — so dataviz can
|
|
113
|
+
* keep the shared hover channel in sync.
|
|
114
|
+
*/
|
|
115
|
+
onHoverKeyChange?: (key: string | null) => void;
|
|
93
116
|
class?: string;
|
|
94
117
|
};
|
|
95
118
|
declare const BarChart: import("svelte").Component<BarChartProps, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BarChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/BarChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;AAI5C,OAAO,EAIH,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"BarChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/BarChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;AAI5C,OAAO,EAIH,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AACjC,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI/F,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACtC,oDAAoD;IACpD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA8qBJ,QAAA,MAAM,QAAQ,mDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
package/dist/DonutChart.svelte
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
<script lang="ts">
|
|
14
14
|
import ChartDataList from "./ChartDataList.svelte";
|
|
15
|
+
import { formatDataLabel, normalizeDataLabels, type DataLabelsProp } from "./chartDataLabels.js";
|
|
15
16
|
|
|
16
17
|
type DonutChartProps = {
|
|
17
18
|
data: DonutChartDatum[];
|
|
@@ -21,6 +22,14 @@
|
|
|
21
22
|
thickness?: number;
|
|
22
23
|
/** Texte au centre (sinon le total). null pour masquer. */
|
|
23
24
|
centerLabel?: string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Per-slice value labels. `false`/absent (default) → none. `true` → each
|
|
27
|
+
* slice's value with the default formatter. Object → `format(value)` and/or a
|
|
28
|
+
* `position` override (default `center` of the arc). Slices too thin to fit a
|
|
29
|
+
* legible label are skipped. Labels are `aria-hidden` — the values already
|
|
30
|
+
* live in the accessible ChartDataList.
|
|
31
|
+
*/
|
|
32
|
+
dataLabels?: DataLabelsProp;
|
|
24
33
|
label: string;
|
|
25
34
|
class?: string;
|
|
26
35
|
};
|
|
@@ -30,6 +39,7 @@
|
|
|
30
39
|
size = 220,
|
|
31
40
|
thickness = 34,
|
|
32
41
|
centerLabel,
|
|
42
|
+
dataLabels,
|
|
33
43
|
label,
|
|
34
44
|
class: className
|
|
35
45
|
}: DonutChartProps = $props();
|
|
@@ -39,11 +49,14 @@
|
|
|
39
49
|
"category5", "category6", "category7", "category8"
|
|
40
50
|
];
|
|
41
51
|
|
|
52
|
+
// A slice must span at least this many degrees to host a legible label.
|
|
53
|
+
const DATA_LABEL_MIN_DEG = 18;
|
|
54
|
+
|
|
42
55
|
let hoveredIndex: number | null = $state(null);
|
|
43
56
|
|
|
44
57
|
const slices = $derived.by(() => {
|
|
45
58
|
const total = data.reduce((sum, d) => sum + Math.max(d.value, 0), 0);
|
|
46
|
-
if (total <= 0) return { total: 0, items: [] as Array<{ d: DonutChartDatum; path: string; tone: DonutChartTone; pct: number }> };
|
|
59
|
+
if (total <= 0) return { total: 0, items: [] as Array<{ d: DonutChartDatum; path: string; tone: DonutChartTone; pct: number; spanDeg: number; labelX: number; labelY: number }> };
|
|
47
60
|
const cx = size / 2;
|
|
48
61
|
const cy = size / 2;
|
|
49
62
|
const rOuter = size / 2 - 2;
|
|
@@ -64,7 +77,11 @@
|
|
|
64
77
|
const [x1i, y1i] = polar(rInner, a1);
|
|
65
78
|
const [x0i, y0i] = polar(rInner, a0);
|
|
66
79
|
const path = `M ${x0o} ${y0o} A ${rOuter} ${rOuter} 0 ${large} 1 ${x1o} ${y1o} L ${x1i} ${y1i} A ${rInner} ${rInner} 0 ${large} 0 ${x0i} ${y0i} Z`;
|
|
67
|
-
|
|
80
|
+
// Label anchor: centre of the arc (mid-angle, mid-radius of the ring).
|
|
81
|
+
const aMid = (a0 + a1) / 2;
|
|
82
|
+
const rMid = (rOuter + rInner) / 2;
|
|
83
|
+
const [labelX, labelY] = polar(rMid, aMid);
|
|
84
|
+
return { d, path, tone: d.tone ?? TONES[i % TONES.length], pct: frac * 100, spanDeg: (span * 180) / Math.PI, labelX, labelY };
|
|
68
85
|
});
|
|
69
86
|
return { total, items };
|
|
70
87
|
});
|
|
@@ -75,6 +92,24 @@
|
|
|
75
92
|
slices.items.map((slice) => `${slice.d.label}: ${slice.d.value} (${fmtPct(slice.pct)})`)
|
|
76
93
|
);
|
|
77
94
|
|
|
95
|
+
// --- Data labels ----------------------------------------------------------
|
|
96
|
+
// One value label centred in each arc (default `center`). Slices thinner than
|
|
97
|
+
// DATA_LABEL_MIN_DEG are skipped so labels stay legible. aria-hidden (values
|
|
98
|
+
// are in the ChartDataList already).
|
|
99
|
+
const dataLabelOpts = $derived(normalizeDataLabels(dataLabels));
|
|
100
|
+
const dataLabelItems = $derived(
|
|
101
|
+
dataLabelOpts.enabled
|
|
102
|
+
? slices.items
|
|
103
|
+
.filter((slice) => slice.spanDeg >= DATA_LABEL_MIN_DEG)
|
|
104
|
+
.map((slice) => ({
|
|
105
|
+
key: slice.d.label,
|
|
106
|
+
x: slice.labelX,
|
|
107
|
+
y: slice.labelY,
|
|
108
|
+
text: formatDataLabel(slice.d.value, dataLabelOpts, (v) => String(v))
|
|
109
|
+
}))
|
|
110
|
+
: []
|
|
111
|
+
);
|
|
112
|
+
|
|
78
113
|
function handleVisualPointerMove(event: PointerEvent) {
|
|
79
114
|
const target = event.target;
|
|
80
115
|
if (!(target instanceof Element)) {
|
|
@@ -109,6 +144,14 @@
|
|
|
109
144
|
{centerLabel ?? slices.total}
|
|
110
145
|
</text>
|
|
111
146
|
{/if}
|
|
147
|
+
<!-- Data labels — one value per slice, centred in the arc. aria-hidden. -->
|
|
148
|
+
{#if dataLabelItems.length > 0}
|
|
149
|
+
<g class="st-donutChart__dataLabels" aria-hidden="true">
|
|
150
|
+
{#each dataLabelItems as d (d.key)}
|
|
151
|
+
<text class="st-donutChart__dataLabel" x={d.x} y={d.y} text-anchor="middle" dominant-baseline="central">{d.text}</text>
|
|
152
|
+
{/each}
|
|
153
|
+
</g>
|
|
154
|
+
{/if}
|
|
112
155
|
{/if}
|
|
113
156
|
</svg>
|
|
114
157
|
</div>
|
|
@@ -160,6 +203,13 @@
|
|
|
160
203
|
font-weight: 650;
|
|
161
204
|
}
|
|
162
205
|
|
|
206
|
+
/* Data labels — per-slice value, centred in the arc. Token-only colour. */
|
|
207
|
+
.st-donutChart__dataLabel {
|
|
208
|
+
fill: var(--st-semantic-text-inverse);
|
|
209
|
+
font-size: 0.6875rem;
|
|
210
|
+
font-weight: 600;
|
|
211
|
+
}
|
|
212
|
+
|
|
163
213
|
.st-donutChart__tooltip {
|
|
164
214
|
background: var(--st-semantic-surface-inverse);
|
|
165
215
|
border-radius: var(--st-radius-sm, 0.25rem);
|
|
@@ -4,6 +4,7 @@ export type DonutChartDatum = {
|
|
|
4
4
|
value: number;
|
|
5
5
|
tone?: DonutChartTone;
|
|
6
6
|
};
|
|
7
|
+
import { type DataLabelsProp } from "./chartDataLabels.js";
|
|
7
8
|
type DonutChartProps = {
|
|
8
9
|
data: DonutChartDatum[];
|
|
9
10
|
/** Diamètre du SVG. */
|
|
@@ -12,6 +13,14 @@ type DonutChartProps = {
|
|
|
12
13
|
thickness?: number;
|
|
13
14
|
/** Texte au centre (sinon le total). null pour masquer. */
|
|
14
15
|
centerLabel?: string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Per-slice value labels. `false`/absent (default) → none. `true` → each
|
|
18
|
+
* slice's value with the default formatter. Object → `format(value)` and/or a
|
|
19
|
+
* `position` override (default `center` of the arc). Slices too thin to fit a
|
|
20
|
+
* legible label are skipped. Labels are `aria-hidden` — the values already
|
|
21
|
+
* live in the accessible ChartDataList.
|
|
22
|
+
*/
|
|
23
|
+
dataLabels?: DataLabelsProp;
|
|
15
24
|
label: string;
|
|
16
25
|
class?: string;
|
|
17
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonutChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/DonutChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,cAAc,GACtB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"DonutChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/DonutChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,cAAc,GACtB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAIJ,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG/F,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsIJ,QAAA,MAAM,UAAU,qDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
package/dist/LineChart.svelte
CHANGED
|
@@ -59,6 +59,8 @@
|
|
|
59
59
|
polygonPoints,
|
|
60
60
|
type ChartAnnotation
|
|
61
61
|
} from "./chartAnnotations.js";
|
|
62
|
+
import { formatDataLabel, normalizeDataLabels, type DataLabelsProp } from "./chartDataLabels.js";
|
|
63
|
+
import { keyForX, resolveActiveIndex } from "./chartCrosshair.js";
|
|
62
64
|
|
|
63
65
|
type LineChartProps = {
|
|
64
66
|
data: LineChartDatum[];
|
|
@@ -83,6 +85,14 @@
|
|
|
83
85
|
* series, every other kind above it. Additive: absent ⇒ unchanged.
|
|
84
86
|
*/
|
|
85
87
|
annotations?: ChartAnnotation[];
|
|
88
|
+
/**
|
|
89
|
+
* Per-point value labels. `false`/absent (default) → none. `true` → each
|
|
90
|
+
* point's value with the chart's numeric formatter. Object → `format(value)`
|
|
91
|
+
* and/or a `position` override. Default position is `top` (above the point).
|
|
92
|
+
* Labels are `aria-hidden` — the values already live in the accessible
|
|
93
|
+
* ChartDataList.
|
|
94
|
+
*/
|
|
95
|
+
dataLabels?: DataLabelsProp;
|
|
86
96
|
/**
|
|
87
97
|
* Fixed value-axis (y) domain `[min, max]`. When provided (and finite,
|
|
88
98
|
* min<max) the y scale uses it instead of the data-derived range — letting
|
|
@@ -102,6 +112,20 @@
|
|
|
102
112
|
* no legend surface, so this prop is accepted for parity and otherwise ignored.
|
|
103
113
|
*/
|
|
104
114
|
showLegend?: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* CONTROLLED synchronised hover key (FR-3). A datum's key is `String(x)`. When
|
|
117
|
+
* provided (string or null), the crosshair + tooltip track this key instead of
|
|
118
|
+
* the chart's internal pointer hover (null ⇒ nothing shown), letting a parent
|
|
119
|
+
* share one hover channel across several aligned charts. Absent (`undefined`)
|
|
120
|
+
* keeps the legacy uncontrolled behaviour.
|
|
121
|
+
*/
|
|
122
|
+
hoverKey?: string | null;
|
|
123
|
+
/**
|
|
124
|
+
* Emitted when the user hovers a datum (its key) or leaves the plot (`null`).
|
|
125
|
+
* Always fired on pointer move/leave — even while CONTROLLED — so dataviz can
|
|
126
|
+
* keep the shared hover channel in sync.
|
|
127
|
+
*/
|
|
128
|
+
onHoverKeyChange?: (key: string | null) => void;
|
|
105
129
|
class?: string;
|
|
106
130
|
};
|
|
107
131
|
|
|
@@ -118,10 +142,13 @@
|
|
|
118
142
|
goalLine,
|
|
119
143
|
trend = false,
|
|
120
144
|
annotations,
|
|
145
|
+
dataLabels,
|
|
121
146
|
domain,
|
|
122
147
|
scale = "linear",
|
|
123
148
|
invertAxis = false,
|
|
124
149
|
showLegend,
|
|
150
|
+
hoverKey,
|
|
151
|
+
onHoverKeyChange,
|
|
125
152
|
class: className
|
|
126
153
|
}: LineChartProps = $props();
|
|
127
154
|
|
|
@@ -489,6 +516,19 @@
|
|
|
489
516
|
const annotationRegions = $derived(resolvedAnnotations.filter((a) => a.kind === "region"));
|
|
490
517
|
const annotationAbove = $derived(resolvedAnnotations.filter((a) => a.kind !== "region"));
|
|
491
518
|
|
|
519
|
+
// --- Data labels ----------------------------------------------------------
|
|
520
|
+
// One value label per point. Default `top`: just above the dot. `center` sits
|
|
521
|
+
// on the dot. aria-hidden (values are in the ChartDataList already).
|
|
522
|
+
const dataLabelOpts = $derived(normalizeDataLabels(dataLabels));
|
|
523
|
+
const dataLabelItems = $derived.by(() => {
|
|
524
|
+
if (!dataLabelOpts.enabled) return [] as { key: number; x: number; y: number; text: string; baseline: string }[];
|
|
525
|
+
return points.map((p) => {
|
|
526
|
+
const text = formatDataLabel(p.datum.y, dataLabelOpts, formatTick);
|
|
527
|
+
const center = dataLabelOpts.position === "center" || dataLabelOpts.position === "inside";
|
|
528
|
+
return { key: p.index, x: p.x, y: center ? p.y : p.y - 8, text, baseline: center ? "middle" : "auto" };
|
|
529
|
+
});
|
|
530
|
+
});
|
|
531
|
+
|
|
492
532
|
// --- Forecast segments ------------------------------------------------------
|
|
493
533
|
// A datum with `forecast: true` renders as a forecast point: its dot takes
|
|
494
534
|
// the forecast tone and every segment touching a forecast point is dashed,
|
|
@@ -594,19 +634,33 @@
|
|
|
594
634
|
return entries;
|
|
595
635
|
});
|
|
596
636
|
|
|
637
|
+
// Stable key per datum (FR-3): `String(x)`. Resolves a controlled `hoverKey`
|
|
638
|
+
// to an index and feeds `onHoverKeyChange` from pointer events.
|
|
639
|
+
const hoverKeys = $derived(data.map((d) => keyForX(d.x)));
|
|
640
|
+
function emitHoverKey(index: number | null) {
|
|
641
|
+
onHoverKeyChange?.(index == null ? null : hoverKeys[index] ?? null);
|
|
642
|
+
}
|
|
597
643
|
function handleLeave() {
|
|
598
644
|
hoveredIndex = null;
|
|
645
|
+
emitHoverKey(null);
|
|
599
646
|
}
|
|
600
647
|
function handleVisualPointerMove(event: PointerEvent) {
|
|
601
648
|
const target = event.target;
|
|
602
649
|
if (!(target instanceof Element)) {
|
|
603
650
|
hoveredIndex = null;
|
|
651
|
+
emitHoverKey(null);
|
|
604
652
|
return;
|
|
605
653
|
}
|
|
606
|
-
const
|
|
607
|
-
|
|
654
|
+
const raw = Number(target.getAttribute("data-chart-index"));
|
|
655
|
+
const index = Number.isInteger(raw) ? raw : null;
|
|
656
|
+
hoveredIndex = index;
|
|
657
|
+
emitHoverKey(index);
|
|
608
658
|
}
|
|
609
659
|
|
|
660
|
+
// Index whose crosshair/tooltip is DISPLAYED: the controlled `hoverKey` when
|
|
661
|
+
// provided (resolved against `hoverKeys`), else the internal pointer index.
|
|
662
|
+
const activeIndex = $derived(resolveActiveIndex(hoverKey, hoveredIndex, hoverKeys));
|
|
663
|
+
|
|
610
664
|
const classes = () =>
|
|
611
665
|
["st-lineChart", `st-lineChart--${tone}`, className].filter(Boolean).join(" ");
|
|
612
666
|
</script>
|
|
@@ -788,13 +842,32 @@
|
|
|
788
842
|
{/each}
|
|
789
843
|
</g>
|
|
790
844
|
{/if}
|
|
845
|
+
|
|
846
|
+
<!-- Data labels — one value per point, drawn on top. aria-hidden. -->
|
|
847
|
+
{#if dataLabelItems.length > 0}
|
|
848
|
+
<g class="st-lineChart__dataLabels" aria-hidden="true">
|
|
849
|
+
{#each dataLabelItems as d (d.key)}
|
|
850
|
+
<text class="st-lineChart__dataLabel" x={d.x} y={d.y} text-anchor="middle" dominant-baseline={d.baseline}>{d.text}</text>
|
|
851
|
+
{/each}
|
|
852
|
+
</g>
|
|
853
|
+
{/if}
|
|
854
|
+
|
|
855
|
+
<!-- Crosshair (FR-3) — a tokenised vertical line + marker at the active key.
|
|
856
|
+
Decorative (aria-hidden); the value is in the tooltip + ChartDataList. -->
|
|
857
|
+
{#if activeIndex >= 0 && points[activeIndex]}
|
|
858
|
+
{@const cp = points[activeIndex]}
|
|
859
|
+
<g class="st-lineChart__crosshair" aria-hidden="true">
|
|
860
|
+
<line class="st-lineChart__crosshairLine" x1={cp.x} x2={cp.x} y1={MARGIN.top} y2={MARGIN.top + plotHeight} />
|
|
861
|
+
<circle class="st-lineChart__crosshairMarker" cx={cp.x} cy={cp.y} r="5" />
|
|
862
|
+
</g>
|
|
863
|
+
{/if}
|
|
791
864
|
</svg>
|
|
792
865
|
</div>
|
|
793
866
|
|
|
794
867
|
<ChartDataList {label} items={dataValueItems} />
|
|
795
868
|
|
|
796
|
-
{#if
|
|
797
|
-
{@const p = points[
|
|
869
|
+
{#if activeIndex >= 0 && points[activeIndex]}
|
|
870
|
+
{@const p = points[activeIndex]}
|
|
798
871
|
<div
|
|
799
872
|
class="st-lineChart__tooltip"
|
|
800
873
|
role="presentation"
|
|
@@ -989,4 +1062,26 @@
|
|
|
989
1062
|
font-size: 0.625rem;
|
|
990
1063
|
font-weight: 600;
|
|
991
1064
|
}
|
|
1065
|
+
|
|
1066
|
+
/* Data labels — per-point value, drawn on top. Token-only colour. */
|
|
1067
|
+
.st-lineChart__dataLabel {
|
|
1068
|
+
fill: var(--st-semantic-text-primary);
|
|
1069
|
+
font-size: 0.6875rem;
|
|
1070
|
+
font-weight: 600;
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
/* --- Crosshair layer (FR-3) ----------------------------------------------
|
|
1074
|
+
A tokenised dashed vertical line at the active (hovered/controlled) key,
|
|
1075
|
+
plus an emphasised marker on the point. Decorative (aria-hidden). */
|
|
1076
|
+
.st-lineChart__crosshairLine {
|
|
1077
|
+
stroke: var(--st-semantic-border-strong);
|
|
1078
|
+
stroke-width: 1;
|
|
1079
|
+
stroke-dasharray: 3 3;
|
|
1080
|
+
opacity: 0.7;
|
|
1081
|
+
}
|
|
1082
|
+
.st-lineChart__crosshairMarker {
|
|
1083
|
+
fill: currentColor;
|
|
1084
|
+
stroke: var(--st-semantic-surface-default);
|
|
1085
|
+
stroke-width: 2;
|
|
1086
|
+
}
|
|
992
1087
|
</style>
|
|
@@ -35,6 +35,7 @@ export type ChartGoalLine = {
|
|
|
35
35
|
/** Value-axis scale type. `log` requires strictly positive values. */
|
|
36
36
|
export type ChartScale = "linear" | "log";
|
|
37
37
|
import { type ChartAnnotation } from "./chartAnnotations.js";
|
|
38
|
+
import { type DataLabelsProp } from "./chartDataLabels.js";
|
|
38
39
|
type LineChartProps = {
|
|
39
40
|
data: LineChartDatum[];
|
|
40
41
|
width?: number;
|
|
@@ -58,6 +59,14 @@ type LineChartProps = {
|
|
|
58
59
|
* series, every other kind above it. Additive: absent ⇒ unchanged.
|
|
59
60
|
*/
|
|
60
61
|
annotations?: ChartAnnotation[];
|
|
62
|
+
/**
|
|
63
|
+
* Per-point value labels. `false`/absent (default) → none. `true` → each
|
|
64
|
+
* point's value with the chart's numeric formatter. Object → `format(value)`
|
|
65
|
+
* and/or a `position` override. Default position is `top` (above the point).
|
|
66
|
+
* Labels are `aria-hidden` — the values already live in the accessible
|
|
67
|
+
* ChartDataList.
|
|
68
|
+
*/
|
|
69
|
+
dataLabels?: DataLabelsProp;
|
|
61
70
|
/**
|
|
62
71
|
* Fixed value-axis (y) domain `[min, max]`. When provided (and finite,
|
|
63
72
|
* min<max) the y scale uses it instead of the data-derived range — letting
|
|
@@ -77,6 +86,20 @@ type LineChartProps = {
|
|
|
77
86
|
* no legend surface, so this prop is accepted for parity and otherwise ignored.
|
|
78
87
|
*/
|
|
79
88
|
showLegend?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* CONTROLLED synchronised hover key (FR-3). A datum's key is `String(x)`. When
|
|
91
|
+
* provided (string or null), the crosshair + tooltip track this key instead of
|
|
92
|
+
* the chart's internal pointer hover (null ⇒ nothing shown), letting a parent
|
|
93
|
+
* share one hover channel across several aligned charts. Absent (`undefined`)
|
|
94
|
+
* keeps the legacy uncontrolled behaviour.
|
|
95
|
+
*/
|
|
96
|
+
hoverKey?: string | null;
|
|
97
|
+
/**
|
|
98
|
+
* Emitted when the user hovers a datum (its key) or leaves the plot (`null`).
|
|
99
|
+
* Always fired on pointer move/leave — even while CONTROLLED — so dataviz can
|
|
100
|
+
* keep the shared hover channel in sync.
|
|
101
|
+
*/
|
|
102
|
+
onHoverKeyChange?: (key: string | null) => void;
|
|
80
103
|
class?: string;
|
|
81
104
|
};
|
|
82
105
|
declare const LineChart: import("svelte").Component<LineChartProps, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/LineChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;AAI5C,OAAO,EAIH,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"LineChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/LineChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;AAI5C,OAAO,EAIH,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AACjC,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI/F,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACtC,oDAAoD;IACpD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA+qBJ,QAAA,MAAM,SAAS,oDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
<script lang="ts">
|
|
19
19
|
import ChartDataList from "./ChartDataList.svelte";
|
|
20
|
+
import { formatDataLabel, normalizeDataLabels, type DataLabelsProp } from "./chartDataLabels.js";
|
|
20
21
|
|
|
21
22
|
type StackedBarChartProps = {
|
|
22
23
|
data: StackedBarDatum[];
|
|
@@ -24,6 +25,14 @@
|
|
|
24
25
|
height?: number;
|
|
25
26
|
label: string;
|
|
26
27
|
showLegend?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Per-segment value labels. `false`/absent (default) → none. `true` → each
|
|
30
|
+
* segment's value with the chart's numeric formatter. Object → `format(value)`
|
|
31
|
+
* and/or a `position` override (default `center` of the segment). Segments too
|
|
32
|
+
* short to host a legible label are skipped. Labels are `aria-hidden` — the
|
|
33
|
+
* values already live in the accessible ChartDataList.
|
|
34
|
+
*/
|
|
35
|
+
dataLabels?: DataLabelsProp;
|
|
27
36
|
class?: string;
|
|
28
37
|
};
|
|
29
38
|
|
|
@@ -33,12 +42,16 @@
|
|
|
33
42
|
height = 260,
|
|
34
43
|
label,
|
|
35
44
|
showLegend = true,
|
|
45
|
+
dataLabels,
|
|
36
46
|
class: className
|
|
37
47
|
}: StackedBarChartProps = $props();
|
|
38
48
|
|
|
39
49
|
const MARGIN = { top: 14, right: 16, bottom: 34, left: 44 };
|
|
40
50
|
const TONES = ["category1","category2","category3","category4","category5","category6","category7","category8"] as const;
|
|
41
51
|
|
|
52
|
+
// A segment must be at least this tall (px) to host a legible label.
|
|
53
|
+
const DATA_LABEL_MIN_SEG_PX = 14;
|
|
54
|
+
|
|
42
55
|
function niceTicks(min: number, max: number, target = 5): number[] {
|
|
43
56
|
if (!Number.isFinite(min) || !Number.isFinite(max) || min === max) return [Number.isFinite(max) ? max : 0];
|
|
44
57
|
const range = max - min;
|
|
@@ -104,6 +117,26 @@
|
|
|
104
117
|
data.flatMap((bar) => bar.segments.map((seg) => `${bar.label}, ${seg.label}: ${seg.value}`))
|
|
105
118
|
);
|
|
106
119
|
|
|
120
|
+
// --- Data labels ----------------------------------------------------------
|
|
121
|
+
// One value label centred in each segment (default `center`). Segments shorter
|
|
122
|
+
// than DATA_LABEL_MIN_SEG_PX are skipped so labels stay legible. aria-hidden
|
|
123
|
+
// (values are in the ChartDataList already).
|
|
124
|
+
const dataLabelOpts = $derived(normalizeDataLabels(dataLabels));
|
|
125
|
+
const dataLabelItems = $derived(
|
|
126
|
+
dataLabelOpts.enabled
|
|
127
|
+
? bars.flatMap((bar) =>
|
|
128
|
+
bar.segs
|
|
129
|
+
.filter((s) => s.height >= DATA_LABEL_MIN_SEG_PX)
|
|
130
|
+
.map((s) => ({
|
|
131
|
+
key: `${bar.label}-${s.seg.label}`,
|
|
132
|
+
x: s.cx,
|
|
133
|
+
y: s.cy,
|
|
134
|
+
text: formatDataLabel(s.seg.value, dataLabelOpts, fmt)
|
|
135
|
+
}))
|
|
136
|
+
)
|
|
137
|
+
: []
|
|
138
|
+
);
|
|
139
|
+
|
|
107
140
|
function handleVisualPointerMove(event: PointerEvent) {
|
|
108
141
|
const target = event.target;
|
|
109
142
|
if (!(target instanceof Element)) {
|
|
@@ -148,6 +181,15 @@
|
|
|
148
181
|
/>
|
|
149
182
|
{/each}
|
|
150
183
|
{/each}
|
|
184
|
+
|
|
185
|
+
<!-- Data labels — one value per segment, drawn on top. aria-hidden. -->
|
|
186
|
+
{#if dataLabelItems.length > 0}
|
|
187
|
+
<g class="st-stackedBar__dataLabels" aria-hidden="true">
|
|
188
|
+
{#each dataLabelItems as d (d.key)}
|
|
189
|
+
<text class="st-stackedBar__dataLabel" x={d.x} y={d.y} text-anchor="middle" dominant-baseline="central">{d.text}</text>
|
|
190
|
+
{/each}
|
|
191
|
+
</g>
|
|
192
|
+
{/if}
|
|
151
193
|
</svg>
|
|
152
194
|
</div>
|
|
153
195
|
|
|
@@ -189,6 +231,8 @@
|
|
|
189
231
|
.st-stackedBar__seg--category6 { fill: var(--st-semantic-data-category6); }
|
|
190
232
|
.st-stackedBar__seg--category7 { fill: var(--st-semantic-data-category7); }
|
|
191
233
|
.st-stackedBar__seg--category8 { fill: var(--st-semantic-data-category8); }
|
|
234
|
+
/* Data labels — per-segment value, centred. Token-only colour. */
|
|
235
|
+
.st-stackedBar__dataLabel { fill: var(--st-semantic-text-inverse); font-size: 0.6875rem; font-weight: 600; }
|
|
192
236
|
.st-stackedBar__tooltip {
|
|
193
237
|
background: var(--st-semantic-surface-inverse); border-radius: var(--st-radius-sm, 0.25rem);
|
|
194
238
|
color: var(--st-semantic-text-inverse); display: inline-flex; flex-direction: column; font-size: 0.75rem;
|
|
@@ -8,12 +8,21 @@ export type StackedBarDatum = {
|
|
|
8
8
|
label: string;
|
|
9
9
|
segments: StackedBarSegment[];
|
|
10
10
|
};
|
|
11
|
+
import { type DataLabelsProp } from "./chartDataLabels.js";
|
|
11
12
|
type StackedBarChartProps = {
|
|
12
13
|
data: StackedBarDatum[];
|
|
13
14
|
width?: number;
|
|
14
15
|
height?: number;
|
|
15
16
|
label: string;
|
|
16
17
|
showLegend?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Per-segment value labels. `false`/absent (default) → none. `true` → each
|
|
20
|
+
* segment's value with the chart's numeric formatter. Object → `format(value)`
|
|
21
|
+
* and/or a `position` override (default `center` of the segment). Segments too
|
|
22
|
+
* short to host a legible label are skipped. Labels are `aria-hidden` — the
|
|
23
|
+
* values already live in the accessible ChartDataList.
|
|
24
|
+
*/
|
|
25
|
+
dataLabels?: DataLabelsProp;
|
|
17
26
|
class?: string;
|
|
18
27
|
};
|
|
19
28
|
declare const StackedBarChart: import("svelte").Component<StackedBarChartProps, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackedBarChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/StackedBarChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,cAAc,GACtB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"StackedBarChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/StackedBarChart.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,cAAc,GACtB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC;AAIJ,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG/F,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAmLJ,QAAA,MAAM,eAAe,0DAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Serialises a Line/Area datum's `x` to its stable hover key. */
|
|
2
|
+
export declare function keyForX(x: number | string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Resolves the hover key to a datum index within `keys` (the ordered list of
|
|
5
|
+
* every datum's key). Returns -1 when the key is null/undefined or unmatched.
|
|
6
|
+
*/
|
|
7
|
+
export declare function indexForHoverKey(hoverKey: string | null | undefined, keys: string[]): number;
|
|
8
|
+
/**
|
|
9
|
+
* Picks the datum index to DISPLAY the crosshair/tooltip at.
|
|
10
|
+
* - Controlled (`hoverKey !== undefined`): the index of `hoverKey` in `keys`
|
|
11
|
+
* (or -1 when null/unmatched). The internal pointer index is ignored for
|
|
12
|
+
* display.
|
|
13
|
+
* - Uncontrolled (`hoverKey === undefined`): the internal pointer index.
|
|
14
|
+
* Returns -1 when nothing should be shown.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveActiveIndex(hoverKey: string | null | undefined, internalIndex: number | null, keys: string[]): number;
|
|
17
|
+
/** True when the chart is CONTROLLED (the parent supplied `hoverKey`). */
|
|
18
|
+
export declare function isControlled(hoverKey: string | null | undefined): boolean;
|
|
19
|
+
//# sourceMappingURL=chartCrosshair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartCrosshair.d.ts","sourceRoot":"","sources":["../src/lib/chartCrosshair.ts"],"names":[],"mappings":"AAsBA,kEAAkE;AAClE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAG5F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,IAAI,EAAE,MAAM,EAAE,GACb,MAAM,CAGR;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEzE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// --- Chart crosshair / synchronised hover layer (shared, framework-agnostic) -
|
|
2
|
+
//
|
|
3
|
+
// FR-3: a CONTROLLED crosshair + tooltip whose position is driven by a `hoverKey`
|
|
4
|
+
// string the parent owns, so dataviz can share one hover channel across several
|
|
5
|
+
// aligned panels (a "linked" tooltip). The DS stays presentational: it resolves
|
|
6
|
+
// the key to a datum index, draws a tokenised vertical line at that x (plus a
|
|
7
|
+
// marker on the point for Line/Area), and reuses the existing tooltip surface.
|
|
8
|
+
//
|
|
9
|
+
// The "key" is the stable identifier of a datum on the categorical/x axis:
|
|
10
|
+
// - Bar: the bar's `label`.
|
|
11
|
+
// - Line/Area: the point's `x`, serialised with `String(x)`.
|
|
12
|
+
//
|
|
13
|
+
// Behaviour:
|
|
14
|
+
// - `hoverKey === undefined` → UNCONTROLLED (internal hover, unchanged, fully
|
|
15
|
+
// backward compatible).
|
|
16
|
+
// - `hoverKey` provided (string or null) → CONTROLLED: the displayed
|
|
17
|
+
// crosshair/tooltip tracks `hoverKey` (null = nothing shown), the chart's own
|
|
18
|
+
// pointer hover no longer drives the DISPLAY, but `onHoverKeyChange` is still
|
|
19
|
+
// emitted so the parent can keep the shared channel in sync.
|
|
20
|
+
//
|
|
21
|
+
// Purely additive: a chart that passes neither prop renders exactly as before.
|
|
22
|
+
/** Serialises a Line/Area datum's `x` to its stable hover key. */
|
|
23
|
+
export function keyForX(x) {
|
|
24
|
+
return String(x);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolves the hover key to a datum index within `keys` (the ordered list of
|
|
28
|
+
* every datum's key). Returns -1 when the key is null/undefined or unmatched.
|
|
29
|
+
*/
|
|
30
|
+
export function indexForHoverKey(hoverKey, keys) {
|
|
31
|
+
if (hoverKey == null)
|
|
32
|
+
return -1;
|
|
33
|
+
return keys.indexOf(hoverKey);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Picks the datum index to DISPLAY the crosshair/tooltip at.
|
|
37
|
+
* - Controlled (`hoverKey !== undefined`): the index of `hoverKey` in `keys`
|
|
38
|
+
* (or -1 when null/unmatched). The internal pointer index is ignored for
|
|
39
|
+
* display.
|
|
40
|
+
* - Uncontrolled (`hoverKey === undefined`): the internal pointer index.
|
|
41
|
+
* Returns -1 when nothing should be shown.
|
|
42
|
+
*/
|
|
43
|
+
export function resolveActiveIndex(hoverKey, internalIndex, keys) {
|
|
44
|
+
if (hoverKey !== undefined)
|
|
45
|
+
return indexForHoverKey(hoverKey, keys);
|
|
46
|
+
return internalIndex == null ? -1 : internalIndex;
|
|
47
|
+
}
|
|
48
|
+
/** True when the chart is CONTROLLED (the parent supplied `hoverKey`). */
|
|
49
|
+
export function isControlled(hoverKey) {
|
|
50
|
+
return hoverKey !== undefined;
|
|
51
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Where a data label sits relative to its datum. Default is per-chart. */
|
|
2
|
+
export type DataLabelPosition = "auto" | "inside" | "outside" | "top" | "center";
|
|
3
|
+
/**
|
|
4
|
+
* The `dataLabels` prop, homogeneous across every series chart:
|
|
5
|
+
* - `false` / absent (default) → no labels, behaviour unchanged.
|
|
6
|
+
* - `true` → every datum's value with the chart's default numeric formatter.
|
|
7
|
+
* - object → `format(value)` applied when provided (dataviz supplies an Intl
|
|
8
|
+
* formatter from core; the DS just calls it), `position` overriding the
|
|
9
|
+
* chart's sensible default when provided.
|
|
10
|
+
*/
|
|
11
|
+
export type DataLabelsProp = boolean | {
|
|
12
|
+
/** Maps a numeric value to its displayed string. */
|
|
13
|
+
format?: (value: number) => string;
|
|
14
|
+
/** Placement hint; each chart picks a sensible default when omitted. */
|
|
15
|
+
position?: DataLabelPosition;
|
|
16
|
+
};
|
|
17
|
+
/** Normalised data-label options. `enabled` gates all rendering. */
|
|
18
|
+
export type DataLabelsOptions = {
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
format?: (value: number) => string;
|
|
21
|
+
position?: DataLabelPosition;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Normalises the `dataLabels` prop to `{ enabled, format, position }`. Pure and
|
|
25
|
+
* identical across frameworks: `true` → enabled with no overrides; an object →
|
|
26
|
+
* enabled, carrying any `format`/`position`; anything else → disabled.
|
|
27
|
+
*/
|
|
28
|
+
export declare function normalizeDataLabels(prop: DataLabelsProp | undefined): DataLabelsOptions;
|
|
29
|
+
/**
|
|
30
|
+
* Resolves the string shown for a value. The caller-provided `format` wins;
|
|
31
|
+
* otherwise the chart's own numeric formatter (`fallback`) is used. Non-finite
|
|
32
|
+
* values yield an empty string so callers can skip rendering them.
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatDataLabel(value: number, opts: DataLabelsOptions, fallback: (value: number) => string): string;
|
|
35
|
+
//# sourceMappingURL=chartDataLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartDataLabels.d.ts","sourceRoot":"","sources":["../src/lib/chartDataLabels.ts"],"names":[],"mappings":"AASA,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEjF;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GACP;IACE,oDAAoD;IACpD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEN,oEAAoE;AACpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,iBAAiB,CAMvF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAClC,MAAM,CAGR"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// --- Chart data-label layer (shared, framework-agnostic) -------------------
|
|
2
|
+
//
|
|
3
|
+
// Uniform value labels rendered next to each datum/series of a chart. The prop
|
|
4
|
+
// is normalised here to a single `{ enabled, format, position }` shape so the
|
|
5
|
+
// three renderers (react / vue / svelte) stay in strict parity, and a single
|
|
6
|
+
// `formatDataLabel` helper resolves the displayed string (the caller's
|
|
7
|
+
// `format` wins, otherwise the chart's own numeric formatter). Purely additive:
|
|
8
|
+
// `false`/absent yields `enabled: false` and no labels.
|
|
9
|
+
/**
|
|
10
|
+
* Normalises the `dataLabels` prop to `{ enabled, format, position }`. Pure and
|
|
11
|
+
* identical across frameworks: `true` → enabled with no overrides; an object →
|
|
12
|
+
* enabled, carrying any `format`/`position`; anything else → disabled.
|
|
13
|
+
*/
|
|
14
|
+
export function normalizeDataLabels(prop) {
|
|
15
|
+
if (prop === true)
|
|
16
|
+
return { enabled: true };
|
|
17
|
+
if (prop && typeof prop === "object") {
|
|
18
|
+
return { enabled: true, format: prop.format, position: prop.position };
|
|
19
|
+
}
|
|
20
|
+
return { enabled: false };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolves the string shown for a value. The caller-provided `format` wins;
|
|
24
|
+
* otherwise the chart's own numeric formatter (`fallback`) is used. Non-finite
|
|
25
|
+
* values yield an empty string so callers can skip rendering them.
|
|
26
|
+
*/
|
|
27
|
+
export function formatDataLabel(value, opts, fallback) {
|
|
28
|
+
if (!Number.isFinite(value))
|
|
29
|
+
return "";
|
|
30
|
+
return opts.format ? opts.format(value) : fallback(value);
|
|
31
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -215,6 +215,7 @@ export type { StackedBarDatum, StackedBarSegment, StackedBarTone } from "./Stack
|
|
|
215
215
|
export type { LineChartDatum, LineChartTone } from "./LineChart.svelte";
|
|
216
216
|
export type { ChartOverlayTone, ChartReferenceLine, ChartBand, ChartGoalLine, ChartScale } from "./LineChart.svelte";
|
|
217
217
|
export type { ChartAnnotation, ChartAnnotationMarker } from "./chartAnnotations.js";
|
|
218
|
+
export type { DataLabelsProp, DataLabelsOptions, DataLabelPosition } from "./chartDataLabels.js";
|
|
218
219
|
export type { ComboChartTone, ComboChartBarSeries, ComboChartLineSeries } from "./ComboChart.svelte";
|
|
219
220
|
export type { GaugeChartTone, GaugeChartThreshold, GaugeChartFormat } from "./GaugeChart.svelte";
|
|
220
221
|
export type { FunnelChartTone, FunnelChartDatum } from "./FunnelChart.svelte";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"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"}
|