@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.
@@ -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
- function scaleLinear(v: number, d0: number, d1: number, r0: number, r1: number) {
130
- if (d1 === d0) return r0;
131
- return r0 + ((v - d0) * (r1 - r0)) / (d1 - d0);
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") === "y") fold(r.value);
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
- if (!domain) return null;
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
- let minRaw = validDomain ? validDomain[0] : Math.min(0, ...values);
215
- let maxRaw = validDomain ? validDomain[1] : Math.max(0, ...values);
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
- const errorExtents = data.flatMap((d) =>
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 { domainMin, domainMax, plotWidth, plotHeight } = scales;
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
- const zeroY = scaleLinear(0, domainMin, domainMax, plotHeight, 0);
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 = scaleLinear(d.value, domainMin, domainMax, plotHeight, 0);
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
- const zeroX = scaleLinear(0, domainMin, domainMax, 0, plotWidth);
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 = scaleLinear(d.value, domainMin, domainMax, 0, plotWidth);
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 { domainMin, domainMax, plotWidth, plotHeight } = scales;
403
+ const { plotWidth, plotHeight } = scales;
283
404
  return isVertical
284
- ? MARGIN.top + scaleLinear(v, domainMin, domainMax, plotHeight, 0)
285
- : MARGIN.left + scaleLinear(v, domainMin, domainMax, 0, plotWidth);
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, domainMin, domainMax, plotWidth, plotHeight } = scales;
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 + scaleLinear(tick, domainMin, domainMax, plotHeight, 0),
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 + scaleLinear(tick, domainMin, domainMax, 0, plotWidth),
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;AAMF,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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAyaJ,QAAA,MAAM,QAAQ,mDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,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"}
@@ -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 = scaleLinear(d.y, yDomain.min, yDomain.max, plotHeight, 0);
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 + scaleLinear(b.from, yDomain.min, yDomain.max, plotHeight, 0);
263
- const y2 = MARGIN.top + scaleLinear(b.to, yDomain.min, yDomain.max, plotHeight, 0);
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 + scaleLinear(r.value, yDomain.min, yDomain.max, plotHeight, 0);
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 + scaleLinear(goal.value, yDomain.min, yDomain.max, plotHeight, 0),
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 + scaleLinear(trendModel.slope * trendModel.minX + trendModel.intercept, yDomain.min, yDomain.max, plotHeight, 0),
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 + scaleLinear(trendModel.slope * trendModel.maxX + trendModel.intercept, yDomain.min, yDomain.max, plotHeight, 0)
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
- const linePath = $derived(
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 `${linePath} L${last.x.toFixed(2)},${base.toFixed(2)} L${first.x.toFixed(2)},${base.toFixed(2)} Z`;
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 + scaleLinear(tick, yDomain.min, yDomain.max, plotHeight, 0)
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
- {#if linePath}
657
+ {#each solidPaths as d, i (i)}
494
658
  <path
495
659
  class="st-lineChart__line"
496
- d={linePath}
660
+ {d}
497
661
  fill="none"
498
662
  stroke-width="2"
499
663
  stroke-linecap="round"
500
664
  stroke-linejoin="round"
501
665
  />
502
- {/if}
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="st-lineChart__dot"
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;CACX,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;AAMF,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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAoaJ,QAAA,MAAM,SAAS,oDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,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"}
@@ -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
- const xs = data.map((d) => d.x);
77
- const ys = data.map((d) => d.y);
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 dataValueItems = $derived(
101
- data.map((d) => (d.label ? `${d.label}: x ${d.x}, y ${d.y}` : `x ${d.x}, y ${d.y}`))
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={radius}
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;CACxB,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,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAgJJ,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,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"}
@@ -83,9 +83,8 @@
83
83
  if (!target) return;
84
84
  focusedId = target.node.id;
85
85
  queueMicrotask(() => {
86
- document
87
- .querySelector<HTMLElement>(`[data-tree-id="${CSS.escape(target.node.id)}"]`)
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;AAiHJ,QAAA,MAAM,QAAQ,2DAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,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";
@@ -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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentropic/design-system-svelte",
3
- "version": "0.30.1",
3
+ "version": "0.32.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"