@sentropic/design-system-svelte 0.30.1 → 0.32.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/BarChart.svelte +149 -28
- package/dist/BarChart.svelte.d.ts +17 -0
- package/dist/BarChart.svelte.d.ts.map +1 -1
- package/dist/DataImage.svelte +77 -0
- package/dist/DataImage.svelte.d.ts +21 -0
- package/dist/DataImage.svelte.d.ts.map +1 -0
- package/dist/Embed.svelte +73 -0
- package/dist/Embed.svelte.d.ts +26 -0
- package/dist/Embed.svelte.d.ts.map +1 -0
- package/dist/LineChart.svelte +208 -15
- package/dist/LineChart.svelte.d.ts +29 -0
- package/dist/LineChart.svelte.d.ts.map +1 -1
- package/dist/ScatterPlot.svelte +74 -6
- package/dist/ScatterPlot.svelte.d.ts +17 -0
- package/dist/ScatterPlot.svelte.d.ts.map +1 -1
- package/dist/TreeView.svelte +2 -3
- package/dist/TreeView.svelte.d.ts.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/package.json +1 -1
package/dist/BarChart.svelte
CHANGED
|
@@ -43,6 +43,9 @@
|
|
|
43
43
|
value: number;
|
|
44
44
|
label?: string;
|
|
45
45
|
};
|
|
46
|
+
|
|
47
|
+
/** Value-axis scale type. `log` requires strictly positive values. */
|
|
48
|
+
export type ChartScale = "linear" | "log";
|
|
46
49
|
</script>
|
|
47
50
|
|
|
48
51
|
<script lang="ts">
|
|
@@ -83,6 +86,21 @@
|
|
|
83
86
|
bands?: ChartBand[];
|
|
84
87
|
/** A single goal line, emphasised above the bars. */
|
|
85
88
|
goalLine?: ChartGoalLine;
|
|
89
|
+
/**
|
|
90
|
+
* Value-axis scale. `"linear"` (default) is unchanged. `"log"` switches the
|
|
91
|
+
* value axis to a base-10 logarithmic scale — values `<= 0` are ignored for
|
|
92
|
+
* domain/ticks and clamped to the lowest tick when positioned, since the log
|
|
93
|
+
* of a non-positive number is undefined.
|
|
94
|
+
*/
|
|
95
|
+
scale?: ChartScale;
|
|
96
|
+
/** Inverts the value axis (high values toward the origin). Default false. */
|
|
97
|
+
invertAxis?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Toggles the legend if the chart has one. BarChart has no separate legend
|
|
100
|
+
* surface (its filter chips double as one), so this prop is accepted for
|
|
101
|
+
* cross-chart parity and otherwise ignored.
|
|
102
|
+
*/
|
|
103
|
+
showLegend?: boolean;
|
|
86
104
|
class?: string;
|
|
87
105
|
};
|
|
88
106
|
|
|
@@ -98,9 +116,16 @@
|
|
|
98
116
|
referenceLines,
|
|
99
117
|
bands,
|
|
100
118
|
goalLine,
|
|
119
|
+
scale = "linear",
|
|
120
|
+
invertAxis = false,
|
|
121
|
+
showLegend,
|
|
101
122
|
class: className
|
|
102
123
|
}: BarChartProps = $props();
|
|
103
124
|
|
|
125
|
+
// `showLegend` has no dedicated legend surface on BarChart (the filter chips
|
|
126
|
+
// double as one); it is part of the contract for cross-chart parity and is a
|
|
127
|
+
// deliberate no-op here. Intentionally destructured-but-unused.
|
|
128
|
+
|
|
104
129
|
const MARGIN = { top: 12, right: 16, bottom: 32, left: 44 };
|
|
105
130
|
|
|
106
131
|
function niceTicks(min: number, max: number, target = 5): number[] {
|
|
@@ -126,9 +151,51 @@
|
|
|
126
151
|
return ticks;
|
|
127
152
|
}
|
|
128
153
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
154
|
+
const uniqueSortedTicks = (values: number[]) =>
|
|
155
|
+
Array.from(new Set(values.filter(Number.isFinite).map((v) => Number(v.toFixed(10))))).sort((a, b) => a - b);
|
|
156
|
+
|
|
157
|
+
function fixedTicks(min: number, max: number, target = 5): number[] {
|
|
158
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || min >= max) return niceTicks(min, max, target);
|
|
159
|
+
return uniqueSortedTicks([min, ...niceTicks(min, max, target).filter((tick) => tick > min && tick < max), max]);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Lowest strictly-positive value across the data + finite overlays; used as a
|
|
163
|
+
// floor for a log domain when the raw min is <= 0.
|
|
164
|
+
function smallestPositive(...vals: number[]): number {
|
|
165
|
+
let lo = Infinity;
|
|
166
|
+
for (const v of vals) if (Number.isFinite(v) && v > 0 && v < lo) lo = v;
|
|
167
|
+
return Number.isFinite(lo) ? lo : 1;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// "Nice" decade ticks for a log axis: powers of ten spanning [min, max].
|
|
171
|
+
function logTicks(min: number, max: number): number[] {
|
|
172
|
+
const lo = min > 0 ? min : 1;
|
|
173
|
+
const hi = max > lo ? max : lo * 10;
|
|
174
|
+
const startExp = Math.floor(Math.log10(lo));
|
|
175
|
+
const endExp = Math.ceil(Math.log10(hi));
|
|
176
|
+
const ticks: number[] = [];
|
|
177
|
+
for (let e = startExp; e <= endExp; e++) ticks.push(Number(Math.pow(10, e).toFixed(10)));
|
|
178
|
+
return ticks.length ? ticks : [lo];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function fixedLogTicks(min: number, max: number): number[] {
|
|
182
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || min <= 0 || min >= max) return logTicks(min, max);
|
|
183
|
+
return uniqueSortedTicks([min, ...logTicks(min, max).filter((tick) => tick > min && tick < max), max]);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function validLinearDomainCandidate(value: [number, number] | undefined): [number, number] | null {
|
|
187
|
+
return value && Number.isFinite(value[0]) && Number.isFinite(value[1]) && value[0] < value[1] ? value : null;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function validLogDomainCandidate(value: [number, number] | undefined): [number, number] | null {
|
|
191
|
+
return value && Number.isFinite(value[0]) && Number.isFinite(value[1]) && value[0] > 0 && value[0] < value[1]
|
|
192
|
+
? value
|
|
193
|
+
: null;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function clampFraction(value: number): number {
|
|
197
|
+
if (!Number.isFinite(value)) return 0;
|
|
198
|
+
return Math.min(1, Math.max(0, value));
|
|
132
199
|
}
|
|
133
200
|
|
|
134
201
|
function formatTick(v: number): string {
|
|
@@ -148,7 +215,8 @@
|
|
|
148
215
|
refs: ChartReferenceLine[] | undefined,
|
|
149
216
|
bnds: ChartBand[] | undefined,
|
|
150
217
|
goal: ChartGoalLine | null,
|
|
151
|
-
extras: number[]
|
|
218
|
+
extras: number[],
|
|
219
|
+
referenceAxis: "x" | "y" = "y"
|
|
152
220
|
): [number, number] {
|
|
153
221
|
let lo = minV;
|
|
154
222
|
let hi = maxV;
|
|
@@ -157,7 +225,7 @@
|
|
|
157
225
|
if (v < lo) lo = v;
|
|
158
226
|
if (v > hi) hi = v;
|
|
159
227
|
};
|
|
160
|
-
for (const r of refs ?? []) if ((r.axis ?? "y") ===
|
|
228
|
+
for (const r of refs ?? []) if ((r.axis ?? "y") === referenceAxis) fold(r.value);
|
|
161
229
|
for (const b of bnds ?? []) {
|
|
162
230
|
fold(b.from);
|
|
163
231
|
fold(b.to);
|
|
@@ -197,31 +265,58 @@
|
|
|
197
265
|
const hasSelection = $derived(selectedSet.size > 0);
|
|
198
266
|
const interactive = $derived(typeof onSelect === "function");
|
|
199
267
|
|
|
268
|
+
const isLog = $derived(scale === "log");
|
|
269
|
+
|
|
200
270
|
// A domain is honoured only when both bounds are finite and ordered (min<max).
|
|
201
271
|
// Otherwise we fall back to the auto data range.
|
|
202
272
|
const validDomain = $derived.by<[number, number] | null>(() => {
|
|
203
|
-
|
|
204
|
-
const [d0, d1] = domain;
|
|
205
|
-
if (!Number.isFinite(d0) || !Number.isFinite(d1) || d0 >= d1) return null;
|
|
206
|
-
return [d0, d1];
|
|
273
|
+
return isLog ? validLogDomainCandidate(domain) : validLinearDomainCandidate(domain);
|
|
207
274
|
});
|
|
208
275
|
|
|
209
276
|
// A finite goal value is required; otherwise the goal line is ignored.
|
|
210
277
|
const goal = $derived(goalLine && Number.isFinite(goalLine.value) ? goalLine : null);
|
|
211
278
|
|
|
279
|
+
const valueAxis = $derived(orientation === "vertical" ? "y" : "x");
|
|
280
|
+
|
|
212
281
|
const scales = $derived.by(() => {
|
|
213
282
|
const values = data.map((d) => d.value);
|
|
214
|
-
|
|
215
|
-
|
|
283
|
+
const errorExtents = data.flatMap((d) =>
|
|
284
|
+
[d.errorLow, d.errorHigh].filter((v): v is number => v !== undefined && Number.isFinite(v))
|
|
285
|
+
);
|
|
286
|
+
let minRaw: number;
|
|
287
|
+
let maxRaw: number;
|
|
288
|
+
if (isLog) {
|
|
289
|
+
// A log axis is undefined for values <= 0; the floor is the smallest
|
|
290
|
+
// strictly-positive value across the data + finite overlays, the ceil the
|
|
291
|
+
// largest. The "0 baseline" of a linear axis has no meaning here.
|
|
292
|
+
const posOverlays = [
|
|
293
|
+
...(referenceLines ?? []).filter((r) => (r.axis ?? "y") === valueAxis).map((r) => r.value),
|
|
294
|
+
...(bands ?? []).flatMap((b) => [b.from, b.to]),
|
|
295
|
+
...(goal ? [goal.value] : []),
|
|
296
|
+
...errorExtents
|
|
297
|
+
];
|
|
298
|
+
if (validDomain) {
|
|
299
|
+
minRaw = validDomain[0];
|
|
300
|
+
maxRaw = validDomain[1];
|
|
301
|
+
} else {
|
|
302
|
+
minRaw = smallestPositive(...values, ...posOverlays);
|
|
303
|
+
maxRaw = Math.max(minRaw, ...values.filter((v) => v > 0), ...posOverlays.filter((v) => v > 0));
|
|
304
|
+
}
|
|
305
|
+
const ticks = validDomain ? fixedLogTicks(minRaw, maxRaw) : logTicks(minRaw, maxRaw);
|
|
306
|
+
const domainMin = ticks[0];
|
|
307
|
+
const domainMax = ticks[ticks.length - 1];
|
|
308
|
+
const plotWidth = Math.max(width - MARGIN.left - MARGIN.right, 1);
|
|
309
|
+
const plotHeight = Math.max(height - MARGIN.top - MARGIN.bottom, 1);
|
|
310
|
+
return { ticks, domainMin, domainMax, plotWidth, plotHeight };
|
|
311
|
+
}
|
|
312
|
+
minRaw = validDomain ? validDomain[0] : Math.min(0, ...values);
|
|
313
|
+
maxRaw = validDomain ? validDomain[1] : Math.max(0, ...values);
|
|
216
314
|
// A pinned domain is authoritative (small-multiples); only the auto domain
|
|
217
315
|
// is widened to keep finite overlays + error bars on-plot.
|
|
218
316
|
if (!validDomain) {
|
|
219
|
-
|
|
220
|
-
[d.errorLow, d.errorHigh].filter((v): v is number => v !== undefined && Number.isFinite(v))
|
|
221
|
-
);
|
|
222
|
-
[minRaw, maxRaw] = extendValueDomain(minRaw, maxRaw, referenceLines, bands, goal, errorExtents);
|
|
317
|
+
[minRaw, maxRaw] = extendValueDomain(minRaw, maxRaw, referenceLines, bands, goal, errorExtents, valueAxis);
|
|
223
318
|
}
|
|
224
|
-
const ticks = niceTicks(minRaw, maxRaw, 5);
|
|
319
|
+
const ticks = validDomain ? fixedTicks(minRaw, maxRaw, 5) : niceTicks(minRaw, maxRaw, 5);
|
|
225
320
|
const domainMin = ticks[0];
|
|
226
321
|
const domainMax = ticks[ticks.length - 1];
|
|
227
322
|
const plotWidth = Math.max(width - MARGIN.left - MARGIN.right, 1);
|
|
@@ -229,15 +324,38 @@
|
|
|
229
324
|
return { ticks, domainMin, domainMax, plotWidth, plotHeight };
|
|
230
325
|
});
|
|
231
326
|
|
|
327
|
+
// Maps a value to a fraction in [0,1] along the value axis (0 = domainMin end,
|
|
328
|
+
// 1 = domainMax end), honouring log scale and axis inversion. Linear + no
|
|
329
|
+
// invert reproduces the previous behaviour exactly.
|
|
330
|
+
const valueFraction = $derived((v: number) => {
|
|
331
|
+
const { domainMin, domainMax } = scales;
|
|
332
|
+
let f: number;
|
|
333
|
+
if (isLog) {
|
|
334
|
+
const lo = Math.log10(domainMin);
|
|
335
|
+
const hi = Math.log10(domainMax);
|
|
336
|
+
const clamped = v > 0 ? v : domainMin; // log undefined for v<=0 → clamp to floor
|
|
337
|
+
f = hi === lo ? 0 : (Math.log10(clamped) - lo) / (hi - lo);
|
|
338
|
+
} else {
|
|
339
|
+
f = domainMax === domainMin ? 0 : (v - domainMin) / (domainMax - domainMin);
|
|
340
|
+
}
|
|
341
|
+
return clampFraction(invertAxis ? 1 - f : f);
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// The value used as the bar baseline. Linear: 0 (or the nearest in-domain
|
|
345
|
+
// bound). Log: the lowest tick (domainMin), since 0 is off a log axis.
|
|
346
|
+
const baselineValue = $derived(isLog ? scales.domainMin : Math.min(scales.domainMax, Math.max(scales.domainMin, 0)));
|
|
347
|
+
|
|
232
348
|
const bars = $derived.by(() => {
|
|
233
|
-
const {
|
|
349
|
+
const { plotWidth, plotHeight } = scales;
|
|
234
350
|
if (data.length === 0) return [];
|
|
235
351
|
if (orientation === "vertical") {
|
|
236
352
|
const band = plotWidth / data.length;
|
|
237
353
|
const barWidth = band * 0.62;
|
|
238
|
-
|
|
354
|
+
// Pixel y for a value (fraction 0 → bottom, 1 → top of the plot).
|
|
355
|
+
const yOf = (v: number) => plotHeight * (1 - valueFraction(v));
|
|
356
|
+
const zeroY = yOf(baselineValue);
|
|
239
357
|
return data.map((d, i) => {
|
|
240
|
-
const valueY =
|
|
358
|
+
const valueY = yOf(d.value);
|
|
241
359
|
const y = Math.min(valueY, zeroY);
|
|
242
360
|
const h = Math.abs(zeroY - valueY);
|
|
243
361
|
const x = MARGIN.left + band * i + (band - barWidth) / 2;
|
|
@@ -256,9 +374,11 @@
|
|
|
256
374
|
// horizontal
|
|
257
375
|
const band = plotHeight / data.length;
|
|
258
376
|
const barHeight = band * 0.62;
|
|
259
|
-
|
|
377
|
+
// Pixel x for a value (fraction 0 → left, 1 → right of the plot).
|
|
378
|
+
const xOf = (v: number) => plotWidth * valueFraction(v);
|
|
379
|
+
const zeroX = xOf(baselineValue);
|
|
260
380
|
return data.map((d, i) => {
|
|
261
|
-
const valueX =
|
|
381
|
+
const valueX = xOf(d.value);
|
|
262
382
|
const x = Math.min(valueX, zeroX);
|
|
263
383
|
const w = Math.abs(valueX - zeroX);
|
|
264
384
|
const y = MARGIN.top + band * i + (band - barHeight) / 2;
|
|
@@ -277,12 +397,13 @@
|
|
|
277
397
|
|
|
278
398
|
// --- Analytical overlays + error bars ------------------------------------
|
|
279
399
|
const isVertical = $derived(orientation === "vertical");
|
|
280
|
-
// Map a value to its pixel on the value axis (y for vertical, x for horizontal)
|
|
400
|
+
// Map a value to its pixel on the value axis (y for vertical, x for horizontal),
|
|
401
|
+
// honouring scale + invert via the shared `valueFraction`.
|
|
281
402
|
const valuePos = $derived((v: number) => {
|
|
282
|
-
const {
|
|
403
|
+
const { plotWidth, plotHeight } = scales;
|
|
283
404
|
return isVertical
|
|
284
|
-
? MARGIN.top +
|
|
285
|
-
: MARGIN.left +
|
|
405
|
+
? MARGIN.top + plotHeight * (1 - valueFraction(v))
|
|
406
|
+
: MARGIN.left + plotWidth * valueFraction(v);
|
|
286
407
|
});
|
|
287
408
|
|
|
288
409
|
const bandRects = $derived(
|
|
@@ -354,13 +475,13 @@
|
|
|
354
475
|
]);
|
|
355
476
|
|
|
356
477
|
const valueAxisTicks = $derived.by(() => {
|
|
357
|
-
const { ticks,
|
|
478
|
+
const { ticks, plotWidth, plotHeight } = scales;
|
|
358
479
|
if (orientation === "vertical") {
|
|
359
480
|
return ticks.map((tick) => ({
|
|
360
481
|
value: tick,
|
|
361
482
|
x1: MARGIN.left,
|
|
362
483
|
x2: MARGIN.left + plotWidth,
|
|
363
|
-
y: MARGIN.top +
|
|
484
|
+
y: MARGIN.top + plotHeight * (1 - valueFraction(tick)),
|
|
364
485
|
x: undefined,
|
|
365
486
|
y1: undefined,
|
|
366
487
|
y2: undefined
|
|
@@ -368,7 +489,7 @@
|
|
|
368
489
|
}
|
|
369
490
|
return ticks.map((tick) => ({
|
|
370
491
|
value: tick,
|
|
371
|
-
x: MARGIN.left +
|
|
492
|
+
x: MARGIN.left + plotWidth * valueFraction(tick),
|
|
372
493
|
y1: MARGIN.top,
|
|
373
494
|
y2: MARGIN.top + plotHeight,
|
|
374
495
|
x1: undefined,
|
|
@@ -29,6 +29,8 @@ export type ChartGoalLine = {
|
|
|
29
29
|
value: number;
|
|
30
30
|
label?: string;
|
|
31
31
|
};
|
|
32
|
+
/** Value-axis scale type. `log` requires strictly positive values. */
|
|
33
|
+
export type ChartScale = "linear" | "log";
|
|
32
34
|
type BarChartProps = {
|
|
33
35
|
data: BarChartDatum[];
|
|
34
36
|
width?: number;
|
|
@@ -64,6 +66,21 @@ type BarChartProps = {
|
|
|
64
66
|
bands?: ChartBand[];
|
|
65
67
|
/** A single goal line, emphasised above the bars. */
|
|
66
68
|
goalLine?: ChartGoalLine;
|
|
69
|
+
/**
|
|
70
|
+
* Value-axis scale. `"linear"` (default) is unchanged. `"log"` switches the
|
|
71
|
+
* value axis to a base-10 logarithmic scale — values `<= 0` are ignored for
|
|
72
|
+
* domain/ticks and clamped to the lowest tick when positioned, since the log
|
|
73
|
+
* of a non-positive number is undefined.
|
|
74
|
+
*/
|
|
75
|
+
scale?: ChartScale;
|
|
76
|
+
/** Inverts the value axis (high values toward the origin). Default false. */
|
|
77
|
+
invertAxis?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Toggles the legend if the chart has one. BarChart has no separate legend
|
|
80
|
+
* surface (its filter chips double as one), so this prop is accepted for
|
|
81
|
+
* cross-chart parity and otherwise ignored.
|
|
82
|
+
*/
|
|
83
|
+
showLegend?: boolean;
|
|
67
84
|
class?: string;
|
|
68
85
|
};
|
|
69
86
|
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;
|
|
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;AAM1C,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;;;;;OAKG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAghBJ,QAAA,MAAM,QAAQ,mDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export type DataImageFit = "cover" | "contain";
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import type { HTMLImgAttributes } from "svelte/elements";
|
|
7
|
+
|
|
8
|
+
type DataImageProps = Omit<HTMLImgAttributes, "class" | "src" | "alt" | "width" | "height"> & {
|
|
9
|
+
/** Image URL (required). */
|
|
10
|
+
src: string;
|
|
11
|
+
/** Alternative text (required for a11y; pass "" only for purely decorative images). */
|
|
12
|
+
alt: string;
|
|
13
|
+
/** Intrinsic / box width (number → px, or any CSS length). */
|
|
14
|
+
width?: number | string;
|
|
15
|
+
/** Intrinsic / box height (number → px, or any CSS length). */
|
|
16
|
+
height?: number | string;
|
|
17
|
+
/** `object-fit` behaviour inside its box. Default `cover`. */
|
|
18
|
+
fit?: DataImageFit;
|
|
19
|
+
/** Border radius (CSS length). */
|
|
20
|
+
radius?: number | string;
|
|
21
|
+
class?: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
let {
|
|
25
|
+
src,
|
|
26
|
+
alt,
|
|
27
|
+
width,
|
|
28
|
+
height,
|
|
29
|
+
fit = "cover",
|
|
30
|
+
radius,
|
|
31
|
+
loading = "lazy",
|
|
32
|
+
decoding = "async",
|
|
33
|
+
style: styleProp,
|
|
34
|
+
class: className,
|
|
35
|
+
...rest
|
|
36
|
+
}: DataImageProps = $props();
|
|
37
|
+
|
|
38
|
+
const len = (v: number | string | undefined) =>
|
|
39
|
+
v === undefined ? undefined : typeof v === "number" ? `${v}px` : v;
|
|
40
|
+
|
|
41
|
+
const classes = () => ["st-dataImage", `st-dataImage--${fit}`, className].filter(Boolean).join(" ");
|
|
42
|
+
|
|
43
|
+
const dimensionStyle = $derived(
|
|
44
|
+
[len(width) ? `width:${len(width)}` : "", len(height) ? `height:${len(height)}` : "", len(radius) ? `border-radius:${len(radius)}` : ""]
|
|
45
|
+
.filter(Boolean)
|
|
46
|
+
.join(";")
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const style = $derived(
|
|
50
|
+
[dimensionStyle, styleProp ? String(styleProp).trim().replace(/;?\s*$/, "") : ""].filter(Boolean).join(";") || undefined
|
|
51
|
+
);
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
<img
|
|
55
|
+
{...rest}
|
|
56
|
+
class={classes()}
|
|
57
|
+
{src}
|
|
58
|
+
{alt}
|
|
59
|
+
{style}
|
|
60
|
+
{loading}
|
|
61
|
+
{decoding}
|
|
62
|
+
/>
|
|
63
|
+
|
|
64
|
+
<style>
|
|
65
|
+
.st-dataImage {
|
|
66
|
+
display: block;
|
|
67
|
+
max-inline-size: 100%;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.st-dataImage--cover {
|
|
71
|
+
object-fit: cover;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.st-dataImage--contain {
|
|
75
|
+
object-fit: contain;
|
|
76
|
+
}
|
|
77
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type DataImageFit = "cover" | "contain";
|
|
2
|
+
import type { HTMLImgAttributes } from "svelte/elements";
|
|
3
|
+
type DataImageProps = Omit<HTMLImgAttributes, "class" | "src" | "alt" | "width" | "height"> & {
|
|
4
|
+
/** Image URL (required). */
|
|
5
|
+
src: string;
|
|
6
|
+
/** Alternative text (required for a11y; pass "" only for purely decorative images). */
|
|
7
|
+
alt: string;
|
|
8
|
+
/** Intrinsic / box width (number → px, or any CSS length). */
|
|
9
|
+
width?: number | string;
|
|
10
|
+
/** Intrinsic / box height (number → px, or any CSS length). */
|
|
11
|
+
height?: number | string;
|
|
12
|
+
/** `object-fit` behaviour inside its box. Default `cover`. */
|
|
13
|
+
fit?: DataImageFit;
|
|
14
|
+
/** Border radius (CSS length). */
|
|
15
|
+
radius?: number | string;
|
|
16
|
+
class?: string;
|
|
17
|
+
};
|
|
18
|
+
declare const DataImage: import("svelte").Component<DataImageProps, {}, "">;
|
|
19
|
+
type DataImage = ReturnType<typeof DataImage>;
|
|
20
|
+
export default DataImage;
|
|
21
|
+
//# sourceMappingURL=DataImage.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataImage.svelte.d.ts","sourceRoot":"","sources":["../src/lib/DataImage.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAGjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGvD,KAAK,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG;IAC5F,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA2CJ,QAAA,MAAM,SAAS,oDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
+
import AspectRatio from "./AspectRatio.svelte";
|
|
4
|
+
|
|
5
|
+
type EmbedProps = Omit<HTMLAttributes<HTMLDivElement>, "class" | "title"> & {
|
|
6
|
+
/** URL of the embedded document (required). */
|
|
7
|
+
src: string;
|
|
8
|
+
/**
|
|
9
|
+
* Accessible name of the frame (required for a11y — every iframe must carry
|
|
10
|
+
* a meaningful `title`).
|
|
11
|
+
*/
|
|
12
|
+
title: string;
|
|
13
|
+
/**
|
|
14
|
+
* `sandbox` token list. Defaults to `""` for the strictest sandbox. Pass
|
|
15
|
+
* your own token list to relax it deliberately.
|
|
16
|
+
*/
|
|
17
|
+
sandbox?: string;
|
|
18
|
+
/** Aspect ratio of the frame container (CSS `aspect-ratio`). Default `16/9`. */
|
|
19
|
+
aspectRatio?: string;
|
|
20
|
+
/** `allow` permissions policy (e.g. `"fullscreen; picture-in-picture"`). */
|
|
21
|
+
allow?: string;
|
|
22
|
+
/** Iframe loading strategy. Default `lazy`; use `eager` for above-the-fold embeds. */
|
|
23
|
+
loading?: "eager" | "lazy";
|
|
24
|
+
class?: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
let {
|
|
28
|
+
src,
|
|
29
|
+
title,
|
|
30
|
+
sandbox = "",
|
|
31
|
+
aspectRatio = "16/9",
|
|
32
|
+
allow,
|
|
33
|
+
loading = "lazy",
|
|
34
|
+
class: className,
|
|
35
|
+
...rest
|
|
36
|
+
}: EmbedProps = $props();
|
|
37
|
+
|
|
38
|
+
const classes = () => ["st-embed", className].filter(Boolean).join(" ");
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<div {...rest} class={classes()}>
|
|
42
|
+
<AspectRatio ratio={aspectRatio}>
|
|
43
|
+
<iframe
|
|
44
|
+
class="st-embed__frame"
|
|
45
|
+
{src}
|
|
46
|
+
{title}
|
|
47
|
+
{sandbox}
|
|
48
|
+
{allow}
|
|
49
|
+
{loading}
|
|
50
|
+
></iframe>
|
|
51
|
+
</AspectRatio>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<style>
|
|
55
|
+
.st-embed {
|
|
56
|
+
display: block;
|
|
57
|
+
width: 100%;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.st-embed :global(.st-aspectRatio) {
|
|
61
|
+
background: var(--st-semantic-surface-subtle);
|
|
62
|
+
border: 1px solid var(--st-semantic-border-subtle);
|
|
63
|
+
border-radius: var(--st-radius-md, 0.375rem);
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.st-embed__frame {
|
|
68
|
+
block-size: 100%;
|
|
69
|
+
border: 0;
|
|
70
|
+
display: block;
|
|
71
|
+
inline-size: 100%;
|
|
72
|
+
}
|
|
73
|
+
</style>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
2
|
+
type EmbedProps = Omit<HTMLAttributes<HTMLDivElement>, "class" | "title"> & {
|
|
3
|
+
/** URL of the embedded document (required). */
|
|
4
|
+
src: string;
|
|
5
|
+
/**
|
|
6
|
+
* Accessible name of the frame (required for a11y — every iframe must carry
|
|
7
|
+
* a meaningful `title`).
|
|
8
|
+
*/
|
|
9
|
+
title: string;
|
|
10
|
+
/**
|
|
11
|
+
* `sandbox` token list. Defaults to `""` for the strictest sandbox. Pass
|
|
12
|
+
* your own token list to relax it deliberately.
|
|
13
|
+
*/
|
|
14
|
+
sandbox?: string;
|
|
15
|
+
/** Aspect ratio of the frame container (CSS `aspect-ratio`). Default `16/9`. */
|
|
16
|
+
aspectRatio?: string;
|
|
17
|
+
/** `allow` permissions policy (e.g. `"fullscreen; picture-in-picture"`). */
|
|
18
|
+
allow?: string;
|
|
19
|
+
/** Iframe loading strategy. Default `lazy`; use `eager` for above-the-fold embeds. */
|
|
20
|
+
loading?: "eager" | "lazy";
|
|
21
|
+
class?: string;
|
|
22
|
+
};
|
|
23
|
+
declare const Embed: import("svelte").Component<EmbedProps, {}, "">;
|
|
24
|
+
type Embed = ReturnType<typeof Embed>;
|
|
25
|
+
export default Embed;
|
|
26
|
+
//# sourceMappingURL=Embed.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Embed.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Embed.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIpD,KAAK,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG;IAC1E,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA8BJ,QAAA,MAAM,KAAK,gDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
|
package/dist/LineChart.svelte
CHANGED
|
@@ -12,6 +12,14 @@
|
|
|
12
12
|
export type LineChartDatum = {
|
|
13
13
|
x: number | string;
|
|
14
14
|
y: number;
|
|
15
|
+
/**
|
|
16
|
+
* Marks the datum as a FORECAST point. Forecast points render with the
|
|
17
|
+
* dedicated forecast tone and every segment touching a forecast point is
|
|
18
|
+
* dashed — including the segment between the last actual point and the
|
|
19
|
+
* first forecast point, so the line stays connected. Absent/false ⇒
|
|
20
|
+
* rendering unchanged (additive).
|
|
21
|
+
*/
|
|
22
|
+
forecast?: boolean;
|
|
15
23
|
};
|
|
16
24
|
|
|
17
25
|
/**
|
|
@@ -38,6 +46,9 @@
|
|
|
38
46
|
value: number;
|
|
39
47
|
label?: string;
|
|
40
48
|
};
|
|
49
|
+
|
|
50
|
+
/** Value-axis scale type. `log` requires strictly positive values. */
|
|
51
|
+
export type ChartScale = "linear" | "log";
|
|
41
52
|
</script>
|
|
42
53
|
|
|
43
54
|
<script lang="ts">
|
|
@@ -59,6 +70,25 @@
|
|
|
59
70
|
goalLine?: ChartGoalLine;
|
|
60
71
|
/** Least-squares trend line over the data points. */
|
|
61
72
|
trend?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Fixed value-axis (y) domain `[min, max]`. When provided (and finite,
|
|
75
|
+
* min<max) the y scale uses it instead of the data-derived range — letting
|
|
76
|
+
* several LineCharts share one scale. Invalid/absent → auto range (unchanged).
|
|
77
|
+
*/
|
|
78
|
+
domain?: [number, number];
|
|
79
|
+
/**
|
|
80
|
+
* Value-axis scale. `"linear"` (default) is unchanged. `"log"` switches the
|
|
81
|
+
* y axis to base-10 logarithmic — values `<= 0` are ignored for domain/ticks
|
|
82
|
+
* and clamped to the lowest tick when positioned.
|
|
83
|
+
*/
|
|
84
|
+
scale?: ChartScale;
|
|
85
|
+
/** Inverts the value (y) axis. Default false. */
|
|
86
|
+
invertAxis?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Toggles the legend if the chart has one. LineChart is single-series and has
|
|
89
|
+
* no legend surface, so this prop is accepted for parity and otherwise ignored.
|
|
90
|
+
*/
|
|
91
|
+
showLegend?: boolean;
|
|
62
92
|
class?: string;
|
|
63
93
|
};
|
|
64
94
|
|
|
@@ -74,9 +104,17 @@
|
|
|
74
104
|
bands,
|
|
75
105
|
goalLine,
|
|
76
106
|
trend = false,
|
|
107
|
+
domain,
|
|
108
|
+
scale = "linear",
|
|
109
|
+
invertAxis = false,
|
|
110
|
+
showLegend,
|
|
77
111
|
class: className
|
|
78
112
|
}: LineChartProps = $props();
|
|
79
113
|
|
|
114
|
+
// LineChart is single-series and has no legend surface; `showLegend` is part
|
|
115
|
+
// of the contract for cross-chart parity and is a deliberate no-op here.
|
|
116
|
+
// Intentionally destructured-but-unused.
|
|
117
|
+
|
|
80
118
|
const MARGIN = { top: 12, right: 16, bottom: 32, left: 44 };
|
|
81
119
|
|
|
82
120
|
function niceTicks(min: number, max: number, target = 5): number[] {
|
|
@@ -102,11 +140,57 @@
|
|
|
102
140
|
return ticks;
|
|
103
141
|
}
|
|
104
142
|
|
|
143
|
+
const uniqueSortedTicks = (values: number[]) =>
|
|
144
|
+
Array.from(new Set(values.filter(Number.isFinite).map((v) => Number(v.toFixed(10))))).sort((a, b) => a - b);
|
|
145
|
+
|
|
146
|
+
function fixedTicks(min: number, max: number, target = 5): number[] {
|
|
147
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || min >= max) return niceTicks(min, max, target);
|
|
148
|
+
return uniqueSortedTicks([min, ...niceTicks(min, max, target).filter((tick) => tick > min && tick < max), max]);
|
|
149
|
+
}
|
|
150
|
+
|
|
105
151
|
function scaleLinear(v: number, d0: number, d1: number, r0: number, r1: number) {
|
|
106
152
|
if (d1 === d0) return r0;
|
|
107
153
|
return r0 + ((v - d0) * (r1 - r0)) / (d1 - d0);
|
|
108
154
|
}
|
|
109
155
|
|
|
156
|
+
// Lowest strictly-positive value among the args; floor for a log domain.
|
|
157
|
+
function smallestPositive(...vals: number[]): number {
|
|
158
|
+
let lo = Infinity;
|
|
159
|
+
for (const v of vals) if (Number.isFinite(v) && v > 0 && v < lo) lo = v;
|
|
160
|
+
return Number.isFinite(lo) ? lo : 1;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Power-of-ten ticks spanning [min, max] for a log axis.
|
|
164
|
+
function logTicks(min: number, max: number): number[] {
|
|
165
|
+
const lo = min > 0 ? min : 1;
|
|
166
|
+
const hi = max > lo ? max : lo * 10;
|
|
167
|
+
const startExp = Math.floor(Math.log10(lo));
|
|
168
|
+
const endExp = Math.ceil(Math.log10(hi));
|
|
169
|
+
const ticks: number[] = [];
|
|
170
|
+
for (let e = startExp; e <= endExp; e++) ticks.push(Number(Math.pow(10, e).toFixed(10)));
|
|
171
|
+
return ticks.length ? ticks : [lo];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function fixedLogTicks(min: number, max: number): number[] {
|
|
175
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || min <= 0 || min >= max) return logTicks(min, max);
|
|
176
|
+
return uniqueSortedTicks([min, ...logTicks(min, max).filter((tick) => tick > min && tick < max), max]);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function validLinearDomainCandidate(value: [number, number] | undefined): [number, number] | null {
|
|
180
|
+
return value && Number.isFinite(value[0]) && Number.isFinite(value[1]) && value[0] < value[1] ? value : null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function validLogDomainCandidate(value: [number, number] | undefined): [number, number] | null {
|
|
184
|
+
return value && Number.isFinite(value[0]) && Number.isFinite(value[1]) && value[0] > 0 && value[0] < value[1]
|
|
185
|
+
? value
|
|
186
|
+
: null;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function clampFraction(value: number): number {
|
|
190
|
+
if (!Number.isFinite(value)) return 0;
|
|
191
|
+
return Math.min(1, Math.max(0, value));
|
|
192
|
+
}
|
|
193
|
+
|
|
110
194
|
function formatTick(v: number): string {
|
|
111
195
|
if (Math.abs(v) >= 1000) return `${(v / 1000).toFixed(v % 1000 === 0 ? 0 : 1)}k`;
|
|
112
196
|
if (Number.isInteger(v)) return String(v);
|
|
@@ -215,8 +299,33 @@
|
|
|
215
299
|
// A valid goal line needs a finite value; otherwise it is ignored entirely.
|
|
216
300
|
const goal = $derived(goalLine && Number.isFinite(goalLine.value) ? goalLine : null);
|
|
217
301
|
|
|
302
|
+
const isLog = $derived(scale === "log");
|
|
303
|
+
|
|
304
|
+
// A y domain is honoured only when both bounds are finite and ordered (min<max).
|
|
305
|
+
const validDomain = $derived.by<[number, number] | null>(() => {
|
|
306
|
+
return isLog ? validLogDomainCandidate(domain) : validLinearDomainCandidate(domain);
|
|
307
|
+
});
|
|
308
|
+
|
|
218
309
|
const yTicks = $derived.by(() => {
|
|
219
310
|
const ys = data.map((d) => d.y).filter((y) => Number.isFinite(y));
|
|
311
|
+
if (isLog) {
|
|
312
|
+
const posOverlays = [
|
|
313
|
+
...(referenceLines ?? []).filter((r) => (r.axis ?? "y") === "y").map((r) => r.value),
|
|
314
|
+
...(bands ?? []).flatMap((b) => [b.from, b.to]),
|
|
315
|
+
...(goal ? [goal.value] : [])
|
|
316
|
+
];
|
|
317
|
+
let lo: number;
|
|
318
|
+
let hi: number;
|
|
319
|
+
if (validDomain) {
|
|
320
|
+
lo = validDomain[0];
|
|
321
|
+
hi = validDomain[1];
|
|
322
|
+
} else {
|
|
323
|
+
lo = smallestPositive(...ys, ...posOverlays);
|
|
324
|
+
hi = Math.max(lo, ...ys.filter((y) => y > 0), ...posOverlays.filter((v) => v > 0));
|
|
325
|
+
}
|
|
326
|
+
return validDomain ? fixedLogTicks(lo, hi) : logTicks(lo, hi);
|
|
327
|
+
}
|
|
328
|
+
if (validDomain) return fixedTicks(validDomain[0], validDomain[1], 5);
|
|
220
329
|
if (ys.length === 0 && !referenceLines?.length && !bands?.length && !goal) return [0];
|
|
221
330
|
let minRaw = ys.length ? Math.min(...ys) : 0;
|
|
222
331
|
let maxRaw = ys.length ? Math.max(...ys) : 0;
|
|
@@ -231,6 +340,24 @@
|
|
|
231
340
|
return { min: yTicks[0], max: yTicks[yTicks.length - 1] };
|
|
232
341
|
});
|
|
233
342
|
|
|
343
|
+
// Maps a y value to a fraction in [0,1] (0 = yDomain.min, 1 = yDomain.max),
|
|
344
|
+
// honouring log scale + axis inversion. Linear + no invert is unchanged.
|
|
345
|
+
const valueFraction = $derived((v: number) => {
|
|
346
|
+
let f: number;
|
|
347
|
+
if (isLog) {
|
|
348
|
+
const lo = Math.log10(yDomain.min);
|
|
349
|
+
const hi = Math.log10(yDomain.max);
|
|
350
|
+
const clamped = v > 0 ? v : yDomain.min;
|
|
351
|
+
f = hi === lo ? 0 : (Math.log10(clamped) - lo) / (hi - lo);
|
|
352
|
+
} else {
|
|
353
|
+
f = yDomain.max === yDomain.min ? 0 : (v - yDomain.min) / (yDomain.max - yDomain.min);
|
|
354
|
+
}
|
|
355
|
+
return clampFraction(invertAxis ? 1 - f : f);
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
// Pixel y for a value (top of plot = fraction 1). Relative to plot, add MARGIN.top.
|
|
359
|
+
const yPixel = $derived((v: number) => plotHeight * (1 - valueFraction(v)));
|
|
360
|
+
|
|
234
361
|
const points = $derived.by(() => {
|
|
235
362
|
if (data.length === 0) return [];
|
|
236
363
|
return data.map((d, i) => {
|
|
@@ -242,7 +369,7 @@
|
|
|
242
369
|
const denom = Math.max(data.length - 1, 1);
|
|
243
370
|
x = data.length === 1 ? plotWidth / 2 : (i / denom) * plotWidth;
|
|
244
371
|
}
|
|
245
|
-
const y =
|
|
372
|
+
const y = yPixel(d.y);
|
|
246
373
|
return {
|
|
247
374
|
x: MARGIN.left + x,
|
|
248
375
|
y: MARGIN.top + y,
|
|
@@ -259,8 +386,8 @@
|
|
|
259
386
|
(bands ?? [])
|
|
260
387
|
.filter((b) => Number.isFinite(b.from) && Number.isFinite(b.to))
|
|
261
388
|
.map((b, i) => {
|
|
262
|
-
const y1 = MARGIN.top +
|
|
263
|
-
const y2 = MARGIN.top +
|
|
389
|
+
const y1 = MARGIN.top + yPixel(b.from);
|
|
390
|
+
const y2 = MARGIN.top + yPixel(b.to);
|
|
264
391
|
return {
|
|
265
392
|
key: i,
|
|
266
393
|
x: MARGIN.left,
|
|
@@ -283,7 +410,7 @@
|
|
|
283
410
|
const x = MARGIN.left + scaleLinear(r.value, xDomain.min, xDomain.max, 0, plotWidth);
|
|
284
411
|
return { key: i, axis, x1: x, x2: x, y1: MARGIN.top, y2: MARGIN.top + plotHeight, label: r.label, tone: r.tone };
|
|
285
412
|
}
|
|
286
|
-
const y = MARGIN.top +
|
|
413
|
+
const y = MARGIN.top + yPixel(r.value);
|
|
287
414
|
return { key: i, axis, x1: MARGIN.left, x2: MARGIN.left + plotWidth, y1: y, y2: y, label: r.label, tone: r.tone };
|
|
288
415
|
})
|
|
289
416
|
.filter((r): r is NonNullable<typeof r> => r !== null)
|
|
@@ -292,7 +419,7 @@
|
|
|
292
419
|
const goalGeom = $derived(
|
|
293
420
|
goal
|
|
294
421
|
? {
|
|
295
|
-
y: MARGIN.top +
|
|
422
|
+
y: MARGIN.top + yPixel(goal.value),
|
|
296
423
|
label: goal.label,
|
|
297
424
|
value: goal.value
|
|
298
425
|
}
|
|
@@ -308,14 +435,37 @@
|
|
|
308
435
|
if (!trendModel || xDomain.kind !== "numeric") return null;
|
|
309
436
|
return {
|
|
310
437
|
x1: MARGIN.left + scaleLinear(trendModel.minX, xDomain.min, xDomain.max, 0, plotWidth),
|
|
311
|
-
y1: MARGIN.top +
|
|
438
|
+
y1: MARGIN.top + yPixel(trendModel.slope * trendModel.minX + trendModel.intercept),
|
|
312
439
|
x2: MARGIN.left + scaleLinear(trendModel.maxX, xDomain.min, xDomain.max, 0, plotWidth),
|
|
313
|
-
y2: MARGIN.top +
|
|
440
|
+
y2: MARGIN.top + yPixel(trendModel.slope * trendModel.maxX + trendModel.intercept)
|
|
314
441
|
};
|
|
315
442
|
});
|
|
316
443
|
|
|
444
|
+
// --- Forecast segments ------------------------------------------------------
|
|
445
|
+
// A datum with `forecast: true` renders as a forecast point: its dot takes
|
|
446
|
+
// the forecast tone and every segment touching a forecast point is dashed,
|
|
447
|
+
// so the actual→forecast transition stays connected. Without any forecast
|
|
448
|
+
// datum the single solid path below is identical to before (additive).
|
|
449
|
+
const forecastFlags = $derived(data.map((d) => d.forecast === true));
|
|
450
|
+
const hasForecast = $derived(forecastFlags.some(Boolean));
|
|
451
|
+
|
|
452
|
+
// Maximal runs of consecutive segments sharing the same (solid/dashed) kind;
|
|
453
|
+
// `start`/`end` are inclusive point indices. A segment between two
|
|
454
|
+
// consecutive points is dashed when EITHER endpoint is a forecast datum.
|
|
455
|
+
type ForecastRun = { start: number; end: number; forecast: boolean };
|
|
456
|
+
function forecastRuns(flags: boolean[]): ForecastRun[] {
|
|
457
|
+
const runs: ForecastRun[] = [];
|
|
458
|
+
for (let i = 0; i < flags.length - 1; i++) {
|
|
459
|
+
const dashed = Boolean(flags[i] || flags[i + 1]);
|
|
460
|
+
const last = runs[runs.length - 1];
|
|
461
|
+
if (last && last.forecast === dashed) last.end = i + 1;
|
|
462
|
+
else runs.push({ start: i, end: i + 1, forecast: dashed });
|
|
463
|
+
}
|
|
464
|
+
return runs;
|
|
465
|
+
}
|
|
466
|
+
|
|
317
467
|
const dataValueItems = $derived([
|
|
318
|
-
...data.map((d) => `${d.x}: ${d.y}`),
|
|
468
|
+
...data.map((d, i) => (forecastFlags[i] ? `${d.x}: ${d.y} (prévision)` : `${d.x}: ${d.y}`)),
|
|
319
469
|
...overlayDataListItems(referenceLines, bands, goal, trendModel)
|
|
320
470
|
]);
|
|
321
471
|
|
|
@@ -341,22 +491,36 @@
|
|
|
341
491
|
return d;
|
|
342
492
|
}
|
|
343
493
|
|
|
344
|
-
|
|
494
|
+
// Full-series path (area fill always covers the whole series).
|
|
495
|
+
const fullLinePath = $derived(
|
|
345
496
|
points.length === 0 ? "" : smooth ? buildSmoothPath(points) : buildLinearPath(points)
|
|
346
497
|
);
|
|
347
498
|
|
|
499
|
+
// Solid (actual) + dashed (forecast) sub-paths. Without any forecast datum
|
|
500
|
+
// the solid list is exactly [fullLinePath] — the previous single path.
|
|
501
|
+
const segmentPath = $derived((run: ForecastRun) => {
|
|
502
|
+
const seg = points.slice(run.start, run.end + 1);
|
|
503
|
+
return smooth ? buildSmoothPath(seg) : buildLinearPath(seg);
|
|
504
|
+
});
|
|
505
|
+
const runs = $derived(hasForecast ? forecastRuns(forecastFlags) : []);
|
|
506
|
+
const solidPaths = $derived.by(() => {
|
|
507
|
+
if (!hasForecast) return fullLinePath ? [fullLinePath] : [];
|
|
508
|
+
return runs.filter((r) => !r.forecast).map(segmentPath);
|
|
509
|
+
});
|
|
510
|
+
const forecastPaths = $derived(runs.filter((r) => r.forecast).map(segmentPath));
|
|
511
|
+
|
|
348
512
|
const areaPath = $derived.by(() => {
|
|
349
513
|
if (!area || points.length === 0) return "";
|
|
350
514
|
const base = MARGIN.top + plotHeight;
|
|
351
515
|
const first = points[0];
|
|
352
516
|
const last = points[points.length - 1];
|
|
353
|
-
return `${
|
|
517
|
+
return `${fullLinePath} L${last.x.toFixed(2)},${base.toFixed(2)} L${first.x.toFixed(2)},${base.toFixed(2)} Z`;
|
|
354
518
|
});
|
|
355
519
|
|
|
356
520
|
const gridLines = $derived(
|
|
357
521
|
yTicks.map((tick) => ({
|
|
358
522
|
value: tick,
|
|
359
|
-
y: MARGIN.top +
|
|
523
|
+
y: MARGIN.top + yPixel(tick)
|
|
360
524
|
}))
|
|
361
525
|
);
|
|
362
526
|
|
|
@@ -490,20 +654,32 @@
|
|
|
490
654
|
{#if area && areaPath}
|
|
491
655
|
<path class="st-lineChart__area" d={areaPath} />
|
|
492
656
|
{/if}
|
|
493
|
-
{#
|
|
657
|
+
{#each solidPaths as d, i (i)}
|
|
494
658
|
<path
|
|
495
659
|
class="st-lineChart__line"
|
|
496
|
-
d
|
|
660
|
+
{d}
|
|
497
661
|
fill="none"
|
|
498
662
|
stroke-width="2"
|
|
499
663
|
stroke-linecap="round"
|
|
500
664
|
stroke-linejoin="round"
|
|
501
665
|
/>
|
|
502
|
-
{/
|
|
666
|
+
{/each}
|
|
667
|
+
{#each forecastPaths as d, i (i)}
|
|
668
|
+
<path
|
|
669
|
+
class="st-lineChart__line st-lineChart__line--forecast"
|
|
670
|
+
{d}
|
|
671
|
+
fill="none"
|
|
672
|
+
stroke-width="2"
|
|
673
|
+
stroke-linecap="round"
|
|
674
|
+
stroke-linejoin="round"
|
|
675
|
+
/>
|
|
676
|
+
{/each}
|
|
503
677
|
|
|
504
678
|
{#each points as p (p.index)}
|
|
505
679
|
<circle
|
|
506
|
-
class=
|
|
680
|
+
class={forecastFlags[p.index]
|
|
681
|
+
? "st-lineChart__dot st-lineChart__dot--forecast"
|
|
682
|
+
: "st-lineChart__dot"}
|
|
507
683
|
cx={p.x}
|
|
508
684
|
cy={p.y}
|
|
509
685
|
r="4"
|
|
@@ -584,6 +760,13 @@
|
|
|
584
760
|
stroke: currentColor;
|
|
585
761
|
}
|
|
586
762
|
|
|
763
|
+
/* Forecast segment — dashed, dedicated tokenized tone (palette purple),
|
|
764
|
+
mirrors the dataviz ForecastLineChart fallback (dasharray 5 4). */
|
|
765
|
+
.st-lineChart__line--forecast {
|
|
766
|
+
stroke: var(--st-component-lineChart-forecastStroke, var(--st-semantic-data-category7));
|
|
767
|
+
stroke-dasharray: 5 4;
|
|
768
|
+
}
|
|
769
|
+
|
|
587
770
|
.st-lineChart__area {
|
|
588
771
|
fill: currentColor;
|
|
589
772
|
opacity: 0.18;
|
|
@@ -602,6 +785,16 @@
|
|
|
602
785
|
r: 5.5;
|
|
603
786
|
}
|
|
604
787
|
|
|
788
|
+
.st-lineChart__dot--forecast {
|
|
789
|
+
fill: var(--st-component-lineChart-forecastStroke, var(--st-semantic-data-category7));
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
@media (prefers-reduced-motion: reduce) {
|
|
793
|
+
.st-lineChart__dot {
|
|
794
|
+
transition: none;
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
|
|
605
798
|
.st-lineChart__tooltip {
|
|
606
799
|
background: var(--st-component-lineChart-tooltipBackground, var(--st-semantic-surface-inverse));
|
|
607
800
|
border-radius: var(--st-radius-sm, 0.25rem);
|
|
@@ -2,6 +2,14 @@ export type LineChartTone = "category1" | "category2" | "category3" | "category4
|
|
|
2
2
|
export type LineChartDatum = {
|
|
3
3
|
x: number | string;
|
|
4
4
|
y: number;
|
|
5
|
+
/**
|
|
6
|
+
* Marks the datum as a FORECAST point. Forecast points render with the
|
|
7
|
+
* dedicated forecast tone and every segment touching a forecast point is
|
|
8
|
+
* dashed — including the segment between the last actual point and the
|
|
9
|
+
* first forecast point, so the line stays connected. Absent/false ⇒
|
|
10
|
+
* rendering unchanged (additive).
|
|
11
|
+
*/
|
|
12
|
+
forecast?: boolean;
|
|
5
13
|
};
|
|
6
14
|
/**
|
|
7
15
|
* Semantic tone for an analytical overlay (reference line / band / goal).
|
|
@@ -24,6 +32,8 @@ export type ChartGoalLine = {
|
|
|
24
32
|
value: number;
|
|
25
33
|
label?: string;
|
|
26
34
|
};
|
|
35
|
+
/** Value-axis scale type. `log` requires strictly positive values. */
|
|
36
|
+
export type ChartScale = "linear" | "log";
|
|
27
37
|
type LineChartProps = {
|
|
28
38
|
data: LineChartDatum[];
|
|
29
39
|
width?: number;
|
|
@@ -40,6 +50,25 @@ type LineChartProps = {
|
|
|
40
50
|
goalLine?: ChartGoalLine;
|
|
41
51
|
/** Least-squares trend line over the data points. */
|
|
42
52
|
trend?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Fixed value-axis (y) domain `[min, max]`. When provided (and finite,
|
|
55
|
+
* min<max) the y scale uses it instead of the data-derived range — letting
|
|
56
|
+
* several LineCharts share one scale. Invalid/absent → auto range (unchanged).
|
|
57
|
+
*/
|
|
58
|
+
domain?: [number, number];
|
|
59
|
+
/**
|
|
60
|
+
* Value-axis scale. `"linear"` (default) is unchanged. `"log"` switches the
|
|
61
|
+
* y axis to base-10 logarithmic — values `<= 0` are ignored for domain/ticks
|
|
62
|
+
* and clamped to the lowest tick when positioned.
|
|
63
|
+
*/
|
|
64
|
+
scale?: ChartScale;
|
|
65
|
+
/** Inverts the value (y) axis. Default false. */
|
|
66
|
+
invertAxis?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Toggles the legend if the chart has one. LineChart is single-series and has
|
|
69
|
+
* no legend surface, so this prop is accepted for parity and otherwise ignored.
|
|
70
|
+
*/
|
|
71
|
+
showLegend?: boolean;
|
|
43
72
|
class?: string;
|
|
44
73
|
};
|
|
45
74
|
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;
|
|
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;AAM1C,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;;;;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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAgjBJ,QAAA,MAAM,SAAS,oDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
package/dist/ScatterPlot.svelte
CHANGED
|
@@ -8,6 +8,19 @@
|
|
|
8
8
|
y: number;
|
|
9
9
|
label?: string;
|
|
10
10
|
tone?: ScatterPlotTone;
|
|
11
|
+
/**
|
|
12
|
+
* Per-datum radius, clamped to a sane maximum (32). Non-finite or
|
|
13
|
+
* negative ⇒ falls back to the global `radius`.
|
|
14
|
+
*/
|
|
15
|
+
r?: number;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** Cluster centroid marker (ring + cross), drawn above the data points. */
|
|
19
|
+
export type ScatterPlotCentroid = {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
tone?: ScatterPlotTone;
|
|
23
|
+
label?: string;
|
|
11
24
|
};
|
|
12
25
|
</script>
|
|
13
26
|
|
|
@@ -21,6 +34,11 @@
|
|
|
21
34
|
xLabel?: string;
|
|
22
35
|
yLabel?: string;
|
|
23
36
|
radius?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Cluster centroid markers (ring + cross), drawn above the points. Their
|
|
39
|
+
* coordinates are folded into the axis domain. Non-finite x/y are skipped.
|
|
40
|
+
*/
|
|
41
|
+
centroids?: ScatterPlotCentroid[];
|
|
24
42
|
label: string;
|
|
25
43
|
class?: string;
|
|
26
44
|
};
|
|
@@ -32,6 +50,7 @@
|
|
|
32
50
|
xLabel,
|
|
33
51
|
yLabel,
|
|
34
52
|
radius = 5,
|
|
53
|
+
centroids,
|
|
35
54
|
label,
|
|
36
55
|
class: className
|
|
37
56
|
}: ScatterPlotProps = $props();
|
|
@@ -72,9 +91,20 @@
|
|
|
72
91
|
|
|
73
92
|
const TONES = ["category1","category2","category3","category4","category5","category6","category7","category8"] as const;
|
|
74
93
|
|
|
94
|
+
// Sane upper bound for a per-datum radius (keeps oversized bubbles inside
|
|
95
|
+
// the plot); non-finite/negative values fall back to the global radius.
|
|
96
|
+
const MAX_POINT_RADIUS = 32;
|
|
97
|
+
|
|
98
|
+
// Centroids guarded once: non-finite coordinates are skipped entirely.
|
|
99
|
+
const validCentroids = $derived(
|
|
100
|
+
(centroids ?? []).filter((c) => Number.isFinite(c.x) && Number.isFinite(c.y))
|
|
101
|
+
);
|
|
102
|
+
|
|
75
103
|
const scales = $derived.by(() => {
|
|
76
|
-
|
|
77
|
-
|
|
104
|
+
// Centroid coordinates are folded into the domain so markers always sit
|
|
105
|
+
// inside the plot (and a centroids-only chart still gets a real scale).
|
|
106
|
+
const xs = [...data.map((d) => d.x), ...validCentroids.map((c) => c.x)].filter(Number.isFinite);
|
|
107
|
+
const ys = [...data.map((d) => d.y), ...validCentroids.map((c) => c.y)].filter(Number.isFinite);
|
|
78
108
|
const xTicks = niceTicks(Math.min(...xs), Math.max(...xs));
|
|
79
109
|
const yTicks = niceTicks(Math.min(...ys), Math.max(...ys));
|
|
80
110
|
const plotW = Math.max(width - MARGIN.left - MARGIN.right, 1);
|
|
@@ -92,14 +122,28 @@
|
|
|
92
122
|
return data.map((d, i) => ({
|
|
93
123
|
cx: MARGIN.left + scaleLinear(d.x, xMin, xMax, 0, plotW),
|
|
94
124
|
cy: MARGIN.top + scaleLinear(d.y, yMin, yMax, plotH, 0),
|
|
125
|
+
r: typeof d.r === "number" && Number.isFinite(d.r) && d.r >= 0 ? Math.min(d.r, MAX_POINT_RADIUS) : radius,
|
|
95
126
|
datum: d,
|
|
96
127
|
tone: d.tone ?? TONES[i % TONES.length]
|
|
97
128
|
}));
|
|
98
129
|
});
|
|
99
130
|
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
131
|
+
const centroidMarks = $derived.by(() => {
|
|
132
|
+
const { xMin, xMax, yMin, yMax, plotW, plotH } = scales;
|
|
133
|
+
return validCentroids.map((c, i) => ({
|
|
134
|
+
cx: MARGIN.left + scaleLinear(c.x, xMin, xMax, 0, plotW),
|
|
135
|
+
cy: MARGIN.top + scaleLinear(c.y, yMin, yMax, plotH, 0),
|
|
136
|
+
tone: c.tone ?? TONES[i % TONES.length],
|
|
137
|
+
label: c.label
|
|
138
|
+
}));
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
const dataValueItems = $derived([
|
|
142
|
+
...data.map((d) => (d.label ? `${d.label}: x ${d.x}, y ${d.y}` : `x ${d.x}, y ${d.y}`)),
|
|
143
|
+
...validCentroids.map((c) =>
|
|
144
|
+
c.label ? `Centroïde ${c.label}: (${c.x}, ${c.y})` : `Centroïde: (${c.x}, ${c.y})`
|
|
145
|
+
)
|
|
146
|
+
]);
|
|
103
147
|
|
|
104
148
|
function handleVisualPointerMove(event: PointerEvent) {
|
|
105
149
|
const target = event.target;
|
|
@@ -152,10 +196,19 @@
|
|
|
152
196
|
class="st-scatterPlot__point st-scatterPlot__point--{p.tone}"
|
|
153
197
|
cx={p.cx}
|
|
154
198
|
cy={p.cy}
|
|
155
|
-
r={
|
|
199
|
+
r={p.r}
|
|
156
200
|
data-chart-index={i}
|
|
157
201
|
/>
|
|
158
202
|
{/each}
|
|
203
|
+
|
|
204
|
+
<!-- cluster centroids — distinct ring + cross markers, above the points -->
|
|
205
|
+
{#each centroidMarks as c, i (i)}
|
|
206
|
+
<g class="st-scatterPlot__centroid st-scatterPlot__centroid--{c.tone}">
|
|
207
|
+
<circle class="st-scatterPlot__centroidRing" cx={c.cx} cy={c.cy} r="7" />
|
|
208
|
+
<line class="st-scatterPlot__centroidCross" x1={c.cx - 3.5} x2={c.cx + 3.5} y1={c.cy} y2={c.cy} />
|
|
209
|
+
<line class="st-scatterPlot__centroidCross" x1={c.cx} x2={c.cx} y1={c.cy - 3.5} y2={c.cy + 3.5} />
|
|
210
|
+
</g>
|
|
211
|
+
{/each}
|
|
159
212
|
</svg>
|
|
160
213
|
</div>
|
|
161
214
|
|
|
@@ -187,6 +240,21 @@
|
|
|
187
240
|
.st-scatterPlot__point--category6 { fill: var(--st-semantic-data-category6); }
|
|
188
241
|
.st-scatterPlot__point--category7 { fill: var(--st-semantic-data-category7); }
|
|
189
242
|
.st-scatterPlot__point--category8 { fill: var(--st-semantic-data-category8); }
|
|
243
|
+
/* Centroid markers — non-interactive ring + cross, toned via currentColor. */
|
|
244
|
+
.st-scatterPlot__centroid { pointer-events: none; }
|
|
245
|
+
.st-scatterPlot__centroidRing { fill: none; stroke: currentColor; stroke-width: 2; }
|
|
246
|
+
.st-scatterPlot__centroidCross { stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
|
|
247
|
+
.st-scatterPlot__centroid--category1 { color: var(--st-semantic-data-category1); }
|
|
248
|
+
.st-scatterPlot__centroid--category2 { color: var(--st-semantic-data-category2); }
|
|
249
|
+
.st-scatterPlot__centroid--category3 { color: var(--st-semantic-data-category3); }
|
|
250
|
+
.st-scatterPlot__centroid--category4 { color: var(--st-semantic-data-category4); }
|
|
251
|
+
.st-scatterPlot__centroid--category5 { color: var(--st-semantic-data-category5); }
|
|
252
|
+
.st-scatterPlot__centroid--category6 { color: var(--st-semantic-data-category6); }
|
|
253
|
+
.st-scatterPlot__centroid--category7 { color: var(--st-semantic-data-category7); }
|
|
254
|
+
.st-scatterPlot__centroid--category8 { color: var(--st-semantic-data-category8); }
|
|
255
|
+
@media (prefers-reduced-motion: reduce) {
|
|
256
|
+
.st-scatterPlot__point { transition: none; }
|
|
257
|
+
}
|
|
190
258
|
.st-scatterPlot__tooltip {
|
|
191
259
|
background: var(--st-semantic-surface-inverse); border-radius: var(--st-radius-sm, 0.25rem);
|
|
192
260
|
color: var(--st-semantic-text-inverse); display: inline-flex; flex-direction: column;
|
|
@@ -4,6 +4,18 @@ export type ScatterPlotDatum = {
|
|
|
4
4
|
y: number;
|
|
5
5
|
label?: string;
|
|
6
6
|
tone?: ScatterPlotTone;
|
|
7
|
+
/**
|
|
8
|
+
* Per-datum radius, clamped to a sane maximum (32). Non-finite or
|
|
9
|
+
* negative ⇒ falls back to the global `radius`.
|
|
10
|
+
*/
|
|
11
|
+
r?: number;
|
|
12
|
+
};
|
|
13
|
+
/** Cluster centroid marker (ring + cross), drawn above the data points. */
|
|
14
|
+
export type ScatterPlotCentroid = {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
tone?: ScatterPlotTone;
|
|
18
|
+
label?: string;
|
|
7
19
|
};
|
|
8
20
|
type ScatterPlotProps = {
|
|
9
21
|
data: ScatterPlotDatum[];
|
|
@@ -12,6 +24,11 @@ type ScatterPlotProps = {
|
|
|
12
24
|
xLabel?: string;
|
|
13
25
|
yLabel?: string;
|
|
14
26
|
radius?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Cluster centroid markers (ring + cross), drawn above the points. Their
|
|
29
|
+
* coordinates are folded into the axis domain. Non-finite x/y are skipped.
|
|
30
|
+
*/
|
|
31
|
+
centroids?: ScatterPlotCentroid[];
|
|
15
32
|
label: string;
|
|
16
33
|
class?: string;
|
|
17
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScatterPlot.svelte.d.ts","sourceRoot":"","sources":["../src/lib/ScatterPlot.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,eAAe,GACvB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ScatterPlot.svelte.d.ts","sourceRoot":"","sources":["../src/lib/ScatterPlot.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,eAAe,GACvB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB;;;OAGG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAMF,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAmLJ,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
package/dist/TreeView.svelte
CHANGED
|
@@ -83,9 +83,8 @@
|
|
|
83
83
|
if (!target) return;
|
|
84
84
|
focusedId = target.node.id;
|
|
85
85
|
queueMicrotask(() => {
|
|
86
|
-
document
|
|
87
|
-
|
|
88
|
-
?.focus();
|
|
86
|
+
const rows = Array.from(document.querySelectorAll<HTMLElement>("[data-tree-id]"));
|
|
87
|
+
rows.find((row) => row.dataset.treeId === target.node.id)?.focus();
|
|
89
88
|
});
|
|
90
89
|
}
|
|
91
90
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeView.svelte.d.ts","sourceRoot":"","sources":["../src/lib/TreeView.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAcD,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"TreeView.svelte.d.ts","sourceRoot":"","sources":["../src/lib/TreeView.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAcD,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAgHJ,QAAA,MAAM,QAAQ,2DAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -52,12 +52,14 @@ export { default as ComboChart } from "./ComboChart.svelte";
|
|
|
52
52
|
export { default as Container } from "./Container.svelte";
|
|
53
53
|
export { default as ContentSwitcher } from "./ContentSwitcher.svelte";
|
|
54
54
|
export { default as CopyButton } from "./CopyButton.svelte";
|
|
55
|
+
export { default as DataImage } from "./DataImage.svelte";
|
|
55
56
|
export { default as DataTable } from "./DataTable.svelte";
|
|
56
57
|
export { default as DatePicker } from "./DatePicker.svelte";
|
|
57
58
|
export { default as Divider } from "./Divider.svelte";
|
|
58
59
|
export { default as DonutChart } from "./DonutChart.svelte";
|
|
59
60
|
export { default as Drawer } from "./Drawer.svelte";
|
|
60
61
|
export { default as Dropdown } from "./Dropdown.svelte";
|
|
62
|
+
export { default as Embed } from "./Embed.svelte";
|
|
61
63
|
export { default as EmptyState } from "./EmptyState.svelte";
|
|
62
64
|
export { default as FileUploader } from "./FileUploader.svelte";
|
|
63
65
|
export { default as FilterBar } from "./FilterBar.svelte";
|
|
@@ -161,10 +163,10 @@ export type { RadarChartSeries, RadarChartTone } from "./RadarChart.svelte";
|
|
|
161
163
|
export type { RoseChartDatum, RoseChartTone } from "./RoseChart.svelte";
|
|
162
164
|
export type { SankeyChartLink, SankeyChartNode, SankeyChartTone } from "./SankeyChart.svelte";
|
|
163
165
|
export type { SunburstChartDatum, SunburstChartTone } from "./SunburstChart.svelte";
|
|
164
|
-
export type { ScatterPlotDatum, ScatterPlotTone } from "./ScatterPlot.svelte";
|
|
166
|
+
export type { ScatterPlotDatum, ScatterPlotTone, ScatterPlotCentroid } from "./ScatterPlot.svelte";
|
|
165
167
|
export type { StackedBarDatum, StackedBarSegment, StackedBarTone } from "./StackedBarChart.svelte";
|
|
166
168
|
export type { LineChartDatum, LineChartTone } from "./LineChart.svelte";
|
|
167
|
-
export type { ChartOverlayTone, ChartReferenceLine, ChartBand, ChartGoalLine } from "./LineChart.svelte";
|
|
169
|
+
export type { ChartOverlayTone, ChartReferenceLine, ChartBand, ChartGoalLine, ChartScale } from "./LineChart.svelte";
|
|
168
170
|
export type { ComboChartTone, ComboChartBarSeries, ComboChartLineSeries } from "./ComboChart.svelte";
|
|
169
171
|
export type { GaugeChartTone, GaugeChartThreshold, GaugeChartFormat } from "./GaugeChart.svelte";
|
|
170
172
|
export type { FunnelChartTone, FunnelChartDatum } from "./FunnelChart.svelte";
|
|
@@ -192,6 +194,7 @@ export type { TimePickerFormat } from "./TimePicker.svelte";
|
|
|
192
194
|
export type { CalendarValue } from "./Calendar.svelte";
|
|
193
195
|
export type { SlideIndicatorVariant } from "./SlideIndicator.svelte";
|
|
194
196
|
export type { AutosaveStatus, AutosaveLabels } from "./Autosave.svelte";
|
|
197
|
+
export type { DataImageFit } from "./DataImage.svelte";
|
|
195
198
|
export type { DonutChartDatum, DonutChartTone } from "./DonutChart.svelte";
|
|
196
199
|
export type { ForceGraphNode, ForceGraphEdge, ForceGraphTone, ForceGraphNodeShape, ForceGraphEdgeDash, ForceGraphLegendEntry } from "./ForceGraph.svelte";
|
|
197
200
|
export { nodeShapePath, edgeDashArray } from "./ForceGraph.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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"}
|
package/dist/index.js
CHANGED
|
@@ -45,12 +45,14 @@ export { default as ComboChart } from "./ComboChart.svelte";
|
|
|
45
45
|
export { default as Container } from "./Container.svelte";
|
|
46
46
|
export { default as ContentSwitcher } from "./ContentSwitcher.svelte";
|
|
47
47
|
export { default as CopyButton } from "./CopyButton.svelte";
|
|
48
|
+
export { default as DataImage } from "./DataImage.svelte";
|
|
48
49
|
export { default as DataTable } from "./DataTable.svelte";
|
|
49
50
|
export { default as DatePicker } from "./DatePicker.svelte";
|
|
50
51
|
export { default as Divider } from "./Divider.svelte";
|
|
51
52
|
export { default as DonutChart } from "./DonutChart.svelte";
|
|
52
53
|
export { default as Drawer } from "./Drawer.svelte";
|
|
53
54
|
export { default as Dropdown } from "./Dropdown.svelte";
|
|
55
|
+
export { default as Embed } from "./Embed.svelte";
|
|
54
56
|
export { default as EmptyState } from "./EmptyState.svelte";
|
|
55
57
|
export { default as FileUploader } from "./FileUploader.svelte";
|
|
56
58
|
export { default as FilterBar } from "./FilterBar.svelte";
|