@sentropic/design-system-svelte 0.34.0 → 0.34.20

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.
Files changed (98) hide show
  1. package/dist/AppHeader.svelte +159 -1
  2. package/dist/AppHeader.svelte.d.ts +18 -1
  3. package/dist/AppHeader.svelte.d.ts.map +1 -1
  4. package/dist/ArcDiagramChart.svelte +380 -0
  5. package/dist/ArcDiagramChart.svelte.d.ts +43 -0
  6. package/dist/ArcDiagramChart.svelte.d.ts.map +1 -0
  7. package/dist/AreaRangeChart.svelte +487 -0
  8. package/dist/AreaRangeChart.svelte.d.ts +38 -0
  9. package/dist/AreaRangeChart.svelte.d.ts.map +1 -0
  10. package/dist/AreaSplineRangeChart.svelte +478 -0
  11. package/dist/AreaSplineRangeChart.svelte.d.ts +37 -0
  12. package/dist/AreaSplineRangeChart.svelte.d.ts.map +1 -0
  13. package/dist/BellCurveChart.svelte +487 -0
  14. package/dist/BellCurveChart.svelte.d.ts +40 -0
  15. package/dist/BellCurveChart.svelte.d.ts.map +1 -0
  16. package/dist/Calendar.svelte +11 -0
  17. package/dist/ChatThread.svelte +32 -1
  18. package/dist/ChatThread.svelte.d.ts +14 -0
  19. package/dist/ChatThread.svelte.d.ts.map +1 -1
  20. package/dist/ColumnPyramidChart.svelte +332 -0
  21. package/dist/ColumnPyramidChart.svelte.d.ts +35 -0
  22. package/dist/ColumnPyramidChart.svelte.d.ts.map +1 -0
  23. package/dist/ColumnRangeChart.svelte +432 -0
  24. package/dist/ColumnRangeChart.svelte.d.ts +42 -0
  25. package/dist/ColumnRangeChart.svelte.d.ts.map +1 -0
  26. package/dist/Combobox.svelte +3 -0
  27. package/dist/ContentSwitcher.svelte +1 -1
  28. package/dist/DataTable.svelte.d.ts +1 -1
  29. package/dist/DatePicker.svelte +3 -0
  30. package/dist/DependencyWheelChart.svelte +413 -0
  31. package/dist/DependencyWheelChart.svelte.d.ts +42 -0
  32. package/dist/DependencyWheelChart.svelte.d.ts.map +1 -0
  33. package/dist/DumbbellChart.svelte +403 -0
  34. package/dist/DumbbellChart.svelte.d.ts +44 -0
  35. package/dist/DumbbellChart.svelte.d.ts.map +1 -0
  36. package/dist/ErrorBarChart.svelte +428 -0
  37. package/dist/ErrorBarChart.svelte.d.ts +40 -0
  38. package/dist/ErrorBarChart.svelte.d.ts.map +1 -0
  39. package/dist/GanttChart.svelte +410 -0
  40. package/dist/GanttChart.svelte.d.ts +39 -0
  41. package/dist/GanttChart.svelte.d.ts.map +1 -0
  42. package/dist/HLCChart.svelte +330 -0
  43. package/dist/HLCChart.svelte.d.ts +32 -0
  44. package/dist/HLCChart.svelte.d.ts.map +1 -0
  45. package/dist/HeikinAshiChart.svelte +365 -0
  46. package/dist/HeikinAshiChart.svelte.d.ts +37 -0
  47. package/dist/HeikinAshiChart.svelte.d.ts.map +1 -0
  48. package/dist/HollowCandlestickChart.svelte +357 -0
  49. package/dist/HollowCandlestickChart.svelte.d.ts +34 -0
  50. package/dist/HollowCandlestickChart.svelte.d.ts.map +1 -0
  51. package/dist/Input.svelte +3 -0
  52. package/dist/ItemChart.svelte +389 -0
  53. package/dist/ItemChart.svelte.d.ts +67 -0
  54. package/dist/ItemChart.svelte.d.ts.map +1 -0
  55. package/dist/LollipopChart.svelte +1 -1
  56. package/dist/MultiSelect.svelte +3 -0
  57. package/dist/NumberInput.svelte +3 -0
  58. package/dist/OHLCChart.svelte +343 -0
  59. package/dist/OHLCChart.svelte.d.ts +33 -0
  60. package/dist/OHLCChart.svelte.d.ts.map +1 -0
  61. package/dist/OrganizationChart.svelte +284 -0
  62. package/dist/OrganizationChart.svelte.d.ts +19 -0
  63. package/dist/OrganizationChart.svelte.d.ts.map +1 -0
  64. package/dist/PasswordInput.svelte +3 -0
  65. package/dist/PolygonChart.svelte +189 -0
  66. package/dist/PolygonChart.svelte.d.ts +17 -0
  67. package/dist/PolygonChart.svelte.d.ts.map +1 -0
  68. package/dist/Search.svelte +7 -5
  69. package/dist/Select.svelte +3 -0
  70. package/dist/StreamgraphChart.svelte +283 -0
  71. package/dist/StreamgraphChart.svelte.d.ts +23 -0
  72. package/dist/StreamgraphChart.svelte.d.ts.map +1 -0
  73. package/dist/StreamingMessage.svelte +44 -2
  74. package/dist/StreamingMessage.svelte.d.ts +18 -1
  75. package/dist/StreamingMessage.svelte.d.ts.map +1 -1
  76. package/dist/TileMapChart.svelte +314 -0
  77. package/dist/TileMapChart.svelte.d.ts +45 -0
  78. package/dist/TileMapChart.svelte.d.ts.map +1 -0
  79. package/dist/TimePicker.svelte +3 -0
  80. package/dist/TimelineChart.svelte +362 -0
  81. package/dist/TimelineChart.svelte.d.ts +22 -0
  82. package/dist/TimelineChart.svelte.d.ts.map +1 -0
  83. package/dist/TreegraphChart.svelte +281 -0
  84. package/dist/TreegraphChart.svelte.d.ts +19 -0
  85. package/dist/TreegraphChart.svelte.d.ts.map +1 -0
  86. package/dist/VariablePieChart.svelte +313 -0
  87. package/dist/VariablePieChart.svelte.d.ts +52 -0
  88. package/dist/VariablePieChart.svelte.d.ts.map +1 -0
  89. package/dist/VennChart.svelte +348 -0
  90. package/dist/VennChart.svelte.d.ts +72 -0
  91. package/dist/VennChart.svelte.d.ts.map +1 -0
  92. package/dist/WordCloudChart.svelte +279 -0
  93. package/dist/WordCloudChart.svelte.d.ts +18 -0
  94. package/dist/WordCloudChart.svelte.d.ts.map +1 -0
  95. package/dist/index.d.ts +48 -0
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +24 -0
  98. package/package.json +5 -3
@@ -0,0 +1,487 @@
1
+ <script lang="ts" module>
2
+ /**
3
+ * AreaRangeChart — bande remplie entre une série BASSE et une série HAUTE le
4
+ * long d'un axe X continu (ex. fourchette de température jour par jour,
5
+ * min/max boursier). API canonique (référence Svelte ; React/Vue s'alignent).
6
+ *
7
+ * Props obligatoires :
8
+ * data AreaRangeChartDatum[] - tableau {x, low, high}
9
+ * label string - aria-label du graphique
10
+ *
11
+ * Props optionnelles :
12
+ * tone "category1".."category8" (défaut "category1")
13
+ * smooth boolean - bords de bande lissés (défaut false)
14
+ * width number (défaut 480)
15
+ * height number (défaut 240)
16
+ * class string
17
+ *
18
+ * Le tracé `.st-areaRangeChart__area` ferme la bande : ligne HAUTE (sens
19
+ * direct) puis ligne BASSE (sens inverse) puis `Z`.
20
+ */
21
+ export type AreaRangeChartTone =
22
+ | "category1"
23
+ | "category2"
24
+ | "category3"
25
+ | "category4"
26
+ | "category5"
27
+ | "category6"
28
+ | "category7"
29
+ | "category8";
30
+
31
+ export type AreaRangeChartDatum = {
32
+ x: number | string;
33
+ low: number;
34
+ high: number;
35
+ };
36
+ </script>
37
+
38
+ <script lang="ts">
39
+ import ChartDataList from "./ChartDataList.svelte";
40
+
41
+ type AreaRangeChartProps = {
42
+ data: AreaRangeChartDatum[];
43
+ width?: number;
44
+ height?: number;
45
+ tone?: AreaRangeChartTone;
46
+ smooth?: boolean;
47
+ label: string;
48
+ class?: string;
49
+ };
50
+
51
+ let {
52
+ data = [],
53
+ width = 480,
54
+ height = 240,
55
+ tone = "category1",
56
+ smooth = false,
57
+ label,
58
+ class: className
59
+ }: AreaRangeChartProps = $props();
60
+
61
+ const MARGIN = { top: 12, right: 16, bottom: 32, left: 44 };
62
+
63
+ function niceTicks(min: number, max: number, target = 5): number[] {
64
+ if (!Number.isFinite(min) || !Number.isFinite(max) || min === max) {
65
+ const base = Number.isFinite(max) ? max : 0;
66
+ return [base];
67
+ }
68
+ const range = max - min;
69
+ const rough = range / Math.max(target - 1, 1);
70
+ const pow = Math.pow(10, Math.floor(Math.log10(rough)));
71
+ const norm = rough / pow;
72
+ let step: number;
73
+ if (norm < 1.5) step = 1 * pow;
74
+ else if (norm < 3) step = 2 * pow;
75
+ else if (norm < 7) step = 5 * pow;
76
+ else step = 10 * pow;
77
+ const start = Math.floor(min / step) * step;
78
+ const end = Math.ceil(max / step) * step;
79
+ const ticks: number[] = [];
80
+ for (let v = start; v <= end + step / 2; v += step) {
81
+ ticks.push(Number(v.toFixed(10)));
82
+ }
83
+ return ticks;
84
+ }
85
+
86
+ function scaleLinear(v: number, d0: number, d1: number, r0: number, r1: number) {
87
+ if (d1 === d0) return r0;
88
+ return r0 + ((v - d0) * (r1 - r0)) / (d1 - d0);
89
+ }
90
+
91
+ function formatTick(v: number): string {
92
+ if (Math.abs(v) >= 1000) return `${(v / 1000).toFixed(v % 1000 === 0 ? 0 : 1)}k`;
93
+ if (Number.isInteger(v)) return String(v);
94
+ return v.toFixed(1);
95
+ }
96
+
97
+ function isNumeric(x: number | string): x is number {
98
+ return typeof x === "number" && Number.isFinite(x);
99
+ }
100
+
101
+ // Normalise un point : low/high finis, ordonnés (lo <= hi).
102
+ function normalize(d: AreaRangeChartDatum): { lo: number; hi: number } | null {
103
+ if (!Number.isFinite(d.low) || !Number.isFinite(d.high)) return null;
104
+ return { lo: Math.min(d.low, d.high), hi: Math.max(d.low, d.high) };
105
+ }
106
+
107
+ // Données valides : low + high finis.
108
+ const validData = $derived(data.filter((d) => normalize(d) !== null));
109
+
110
+ const dataValueItems = $derived(
111
+ validData.map((d) => {
112
+ const r = normalize(d)!;
113
+ return `${d.x}: ${r.lo} – ${r.hi}`;
114
+ })
115
+ );
116
+
117
+ let hoveredIndex: number | null = $state(null);
118
+
119
+ const plotWidth = $derived(Math.max(width - MARGIN.left - MARGIN.right, 1));
120
+ const plotHeight = $derived(Math.max(height - MARGIN.top - MARGIN.bottom, 1));
121
+
122
+ const xDomain = $derived.by(() => {
123
+ if (validData.length === 0) return { kind: "ordinal" as const, values: [] as (number | string)[] };
124
+ const allNumeric = validData.every((d) => isNumeric(d.x));
125
+ if (allNumeric) {
126
+ const xs = validData.map((d) => d.x as number);
127
+ return { kind: "numeric" as const, min: Math.min(...xs), max: Math.max(...xs) };
128
+ }
129
+ return { kind: "ordinal" as const, values: validData.map((d) => d.x) };
130
+ });
131
+
132
+ const yTicks = $derived.by(() => {
133
+ if (validData.length === 0) return [0];
134
+ const lows = validData.map((d) => normalize(d)!.lo);
135
+ const highs = validData.map((d) => normalize(d)!.hi);
136
+ const minRaw = Math.min(...lows);
137
+ const maxRaw = Math.max(...highs);
138
+ const padded = (maxRaw - minRaw) * 0.08 || Math.max(Math.abs(maxRaw), 1) * 0.1;
139
+ return niceTicks(minRaw - padded, maxRaw + padded, 5);
140
+ });
141
+
142
+ const yDomain = $derived.by(() => {
143
+ if (yTicks.length === 0) return { min: 0, max: 1 };
144
+ return { min: yTicks[0], max: yTicks[yTicks.length - 1] };
145
+ });
146
+
147
+ const points = $derived.by(() => {
148
+ if (validData.length === 0) return [];
149
+ return validData.map((d, i) => {
150
+ let x: number;
151
+ if (xDomain.kind === "numeric") {
152
+ x = scaleLinear(d.x as number, xDomain.min, xDomain.max, 0, plotWidth);
153
+ } else {
154
+ const denom = Math.max(validData.length - 1, 1);
155
+ x = validData.length === 1 ? plotWidth / 2 : (i / denom) * plotWidth;
156
+ }
157
+ const r = normalize(d)!;
158
+ const yLow = scaleLinear(r.lo, yDomain.min, yDomain.max, plotHeight, 0);
159
+ const yHigh = scaleLinear(r.hi, yDomain.min, yDomain.max, plotHeight, 0);
160
+ return {
161
+ x: MARGIN.left + x,
162
+ yLow: MARGIN.top + yLow,
163
+ yHigh: MARGIN.top + yHigh,
164
+ datum: d,
165
+ range: r,
166
+ index: i
167
+ };
168
+ });
169
+ });
170
+
171
+ function buildLinearPath(pts: { x: number; y: number }[]): string {
172
+ return pts.map((p, i) => `${i === 0 ? "M" : "L"}${p.x.toFixed(2)},${p.y.toFixed(2)}`).join(" ");
173
+ }
174
+
175
+ function buildSmoothPath(pts: { x: number; y: number }[]): string {
176
+ if (pts.length < 2) return buildLinearPath(pts);
177
+ const t = 0.18;
178
+ let d = `M${pts[0].x.toFixed(2)},${pts[0].y.toFixed(2)}`;
179
+ for (let i = 0; i < pts.length - 1; i++) {
180
+ const p0 = pts[i - 1] ?? pts[i];
181
+ const p1 = pts[i];
182
+ const p2 = pts[i + 1];
183
+ const p3 = pts[i + 2] ?? p2;
184
+ const c1x = p1.x + (p2.x - p0.x) * t;
185
+ const c1y = p1.y + (p2.y - p0.y) * t;
186
+ const c2x = p2.x - (p3.x - p1.x) * t;
187
+ const c2y = p2.y - (p3.y - p1.y) * t;
188
+ d += ` C${c1x.toFixed(2)},${c1y.toFixed(2)} ${c2x.toFixed(2)},${c2y.toFixed(2)} ${p2.x.toFixed(2)},${p2.y.toFixed(2)}`;
189
+ }
190
+ return d;
191
+ }
192
+
193
+ // Continue un tracé existant le long de `pts` SANS `M` initial (la bande
194
+ // enchaîne ligne haute puis ligne basse inversée en un seul sous-tracé).
195
+ function continuePath(prefix: string, pts: { x: number; y: number }[], curve: boolean): string {
196
+ if (pts.length === 0) return prefix;
197
+ const full = curve ? buildSmoothPath(pts) : buildLinearPath(pts);
198
+ // Remplace le `M` de tête par `L` pour rester dans le même sous-tracé.
199
+ return `${prefix} L${full.slice(1)}`;
200
+ }
201
+
202
+ const highPath = $derived(
203
+ points.length === 0
204
+ ? ""
205
+ : smooth
206
+ ? buildSmoothPath(points.map((p) => ({ x: p.x, y: p.yHigh })))
207
+ : buildLinearPath(points.map((p) => ({ x: p.x, y: p.yHigh })))
208
+ );
209
+
210
+ const lowPath = $derived(
211
+ points.length === 0
212
+ ? ""
213
+ : smooth
214
+ ? buildSmoothPath(points.map((p) => ({ x: p.x, y: p.yLow })))
215
+ : buildLinearPath(points.map((p) => ({ x: p.x, y: p.yLow })))
216
+ );
217
+
218
+ // Bande : ligne HAUTE (gauche→droite) puis ligne BASSE (droite→gauche) + Z.
219
+ const areaPath = $derived.by(() => {
220
+ if (points.length === 0) return "";
221
+ const lowReversed = [...points].reverse().map((p) => ({ x: p.x, y: p.yLow }));
222
+ return `${continuePath(highPath, lowReversed, smooth)} Z`;
223
+ });
224
+
225
+ const gridLines = $derived(
226
+ yTicks.map((tick) => ({
227
+ value: tick,
228
+ y: MARGIN.top + scaleLinear(tick, yDomain.min, yDomain.max, plotHeight, 0)
229
+ }))
230
+ );
231
+
232
+ const xTickEntries = $derived.by(() => {
233
+ if (validData.length === 0) return [];
234
+ if (xDomain.kind === "ordinal") {
235
+ return points.map((p, i) => ({ x: p.x, label: String(validData[i].x) }));
236
+ }
237
+ const target = Math.min(5, validData.length);
238
+ const stride = Math.max(1, Math.round((validData.length - 1) / (target - 1 || 1)));
239
+ const entries: { x: number; label: string }[] = [];
240
+ for (let i = 0; i < validData.length; i += stride) {
241
+ entries.push({ x: points[i].x, label: String(validData[i].x) });
242
+ }
243
+ const lastIdx = validData.length - 1;
244
+ if (entries[entries.length - 1]?.label !== String(validData[lastIdx].x)) {
245
+ entries.push({ x: points[lastIdx].x, label: String(validData[lastIdx].x) });
246
+ }
247
+ return entries;
248
+ });
249
+
250
+ function handleLeave() {
251
+ hoveredIndex = null;
252
+ }
253
+ function handleVisualPointerMove(event: PointerEvent) {
254
+ const target = event.target;
255
+ if (!(target instanceof Element)) {
256
+ hoveredIndex = null;
257
+ return;
258
+ }
259
+ const index = Number(target.getAttribute("data-chart-index"));
260
+ hoveredIndex = Number.isInteger(index) ? index : null;
261
+ }
262
+
263
+ // Identifiant de dégradé unique pour éviter les conflits multi-charts.
264
+ const gradientId = $derived.by(() => {
265
+ return `st-arearangechart-gradient-${Math.random().toString(36).substring(2, 9)}`;
266
+ });
267
+
268
+ const classes = () =>
269
+ ["st-areaRangeChart", `st-areaRangeChart--${tone}`, className].filter(Boolean).join(" ");
270
+ </script>
271
+
272
+ <div class={classes()}>
273
+ <div
274
+ class="st-areaRangeChart__visual"
275
+ role="img"
276
+ aria-label={label}
277
+ onpointermove={handleVisualPointerMove}
278
+ onpointerleave={handleLeave}
279
+ >
280
+ <svg
281
+ viewBox="0 0 {width} {height}"
282
+ preserveAspectRatio="xMidYMid meet"
283
+ width="100%"
284
+ height="100%"
285
+ focusable="false"
286
+ aria-hidden="true"
287
+ >
288
+ <defs>
289
+ <linearGradient id={gradientId} x1="0" y1="0" x2="0" y2="1">
290
+ <stop offset="0%" stop-color="currentColor" stop-opacity="0.32" />
291
+ <stop offset="100%" stop-color="currentColor" stop-opacity="0.12" />
292
+ </linearGradient>
293
+ </defs>
294
+
295
+ <!-- gridlines + Y axis ticks -->
296
+ {#each gridLines as g (g.value)}
297
+ <line
298
+ class="st-areaRangeChart__grid"
299
+ x1={MARGIN.left}
300
+ x2={width - MARGIN.right}
301
+ y1={g.y}
302
+ y2={g.y}
303
+ />
304
+ <text
305
+ class="st-areaRangeChart__tickLabel"
306
+ x={MARGIN.left - 6}
307
+ y={g.y}
308
+ text-anchor="end"
309
+ dominant-baseline="middle"
310
+ >
311
+ {formatTick(g.value)}
312
+ </text>
313
+ {/each}
314
+
315
+ <!-- axes -->
316
+ <line
317
+ class="st-areaRangeChart__axis"
318
+ x1={MARGIN.left}
319
+ x2={MARGIN.left}
320
+ y1={MARGIN.top}
321
+ y2={height - MARGIN.bottom}
322
+ />
323
+ <line
324
+ class="st-areaRangeChart__axis"
325
+ x1={MARGIN.left}
326
+ x2={width - MARGIN.right}
327
+ y1={height - MARGIN.bottom}
328
+ y2={height - MARGIN.bottom}
329
+ />
330
+
331
+ <!-- X tick labels -->
332
+ {#each xTickEntries as tick, i (i)}
333
+ <text
334
+ class="st-areaRangeChart__tickLabel"
335
+ x={tick.x}
336
+ y={height - MARGIN.bottom + 16}
337
+ text-anchor="middle"
338
+ >
339
+ {tick.label}
340
+ </text>
341
+ {/each}
342
+
343
+ {#if areaPath}
344
+ <path class="st-areaRangeChart__area" d={areaPath} fill="url(#{gradientId})" />
345
+ {/if}
346
+ {#if highPath}
347
+ <path
348
+ class="st-areaRangeChart__line st-areaRangeChart__line--high"
349
+ d={highPath}
350
+ fill="none"
351
+ stroke-width="2"
352
+ stroke-linecap="round"
353
+ stroke-linejoin="round"
354
+ />
355
+ {/if}
356
+ {#if lowPath}
357
+ <path
358
+ class="st-areaRangeChart__line st-areaRangeChart__line--low"
359
+ d={lowPath}
360
+ fill="none"
361
+ stroke-width="2"
362
+ stroke-linecap="round"
363
+ stroke-linejoin="round"
364
+ />
365
+ {/if}
366
+
367
+ {#each points as p (p.index)}
368
+ <circle class="st-areaRangeChart__dot" cx={p.x} cy={p.yHigh} r="3.5" data-chart-index={p.index} />
369
+ <circle class="st-areaRangeChart__dot" cx={p.x} cy={p.yLow} r="3.5" data-chart-index={p.index} />
370
+ {/each}
371
+ </svg>
372
+ </div>
373
+
374
+ <ChartDataList {label} items={dataValueItems} />
375
+
376
+ {#if hoveredIndex !== null && points[hoveredIndex]}
377
+ {@const p = points[hoveredIndex]}
378
+ <div
379
+ class="st-areaRangeChart__tooltip"
380
+ role="presentation"
381
+ style="left: {(p.x / width) * 100}%; top: {(p.yHigh / height) * 100}%"
382
+ >
383
+ <span class="st-areaRangeChart__tooltipLabel">{p.datum.x}</span>
384
+ <span class="st-areaRangeChart__tooltipValue">{p.range.lo} – {p.range.hi}</span>
385
+ </div>
386
+ {/if}
387
+ </div>
388
+
389
+ <style>
390
+ .st-areaRangeChart {
391
+ color: var(--st-semantic-data-category1);
392
+ display: block;
393
+ font-family: inherit;
394
+ position: relative;
395
+ width: 100%;
396
+ }
397
+
398
+ .st-areaRangeChart--category1 { color: var(--st-semantic-data-category1); }
399
+ .st-areaRangeChart--category2 { color: var(--st-semantic-data-category2); }
400
+ .st-areaRangeChart--category3 { color: var(--st-semantic-data-category3); }
401
+ .st-areaRangeChart--category4 { color: var(--st-semantic-data-category4); }
402
+ .st-areaRangeChart--category5 { color: var(--st-semantic-data-category5); }
403
+ .st-areaRangeChart--category6 { color: var(--st-semantic-data-category6); }
404
+ .st-areaRangeChart--category7 { color: var(--st-semantic-data-category7); }
405
+ .st-areaRangeChart--category8 { color: var(--st-semantic-data-category8); }
406
+
407
+ .st-areaRangeChart svg {
408
+ display: block;
409
+ overflow: visible;
410
+ }
411
+
412
+ .st-areaRangeChart__visual {
413
+ display: block;
414
+ }
415
+
416
+ .st-areaRangeChart__grid {
417
+ stroke: var(--st-component-areaRangeChart-gridStroke, var(--st-semantic-border-subtle));
418
+ stroke-dasharray: 2 3;
419
+ stroke-width: 1;
420
+ opacity: 0.7;
421
+ }
422
+
423
+ .st-areaRangeChart__axis {
424
+ stroke: var(--st-component-areaRangeChart-axisStroke, var(--st-semantic-border-subtle));
425
+ stroke-width: 1;
426
+ }
427
+
428
+ .st-areaRangeChart__tickLabel {
429
+ fill: var(--st-component-areaRangeChart-labelColor, var(--st-semantic-text-secondary));
430
+ font-size: 0.6875rem;
431
+ }
432
+
433
+ .st-areaRangeChart__line {
434
+ stroke: currentColor;
435
+ }
436
+
437
+ .st-areaRangeChart__line--low {
438
+ opacity: 0.7;
439
+ }
440
+
441
+ .st-areaRangeChart__area {
442
+ stroke: none;
443
+ }
444
+
445
+ .st-areaRangeChart__dot {
446
+ fill: currentColor;
447
+ stroke: var(--st-semantic-surface-default);
448
+ stroke-width: 1.5;
449
+ cursor: pointer;
450
+ transition: r 120ms ease;
451
+ }
452
+
453
+ .st-areaRangeChart__dot:hover {
454
+ r: 5;
455
+ }
456
+
457
+ @media (prefers-reduced-motion: reduce) {
458
+ .st-areaRangeChart__dot {
459
+ transition: none;
460
+ }
461
+ }
462
+
463
+ .st-areaRangeChart__tooltip {
464
+ background: var(--st-component-areaRangeChart-tooltipBackground, var(--st-semantic-surface-inverse));
465
+ border-radius: var(--st-radius-sm, 0.25rem);
466
+ color: var(--st-component-areaRangeChart-tooltipText, var(--st-semantic-text-inverse));
467
+ display: inline-flex;
468
+ flex-direction: column;
469
+ font-size: 0.75rem;
470
+ gap: 0.125rem;
471
+ line-height: 1.2;
472
+ padding: 0.375rem 0.5rem;
473
+ pointer-events: none;
474
+ position: absolute;
475
+ transform: translate(-50%, calc(-100% - 8px));
476
+ white-space: nowrap;
477
+ z-index: 1;
478
+ }
479
+
480
+ .st-areaRangeChart__tooltipLabel {
481
+ font-weight: 600;
482
+ }
483
+
484
+ .st-areaRangeChart__tooltipValue {
485
+ opacity: 0.85;
486
+ }
487
+ </style>
@@ -0,0 +1,38 @@
1
+ /**
2
+ * AreaRangeChart — bande remplie entre une série BASSE et une série HAUTE le
3
+ * long d'un axe X continu (ex. fourchette de température jour par jour,
4
+ * min/max boursier). API canonique (référence Svelte ; React/Vue s'alignent).
5
+ *
6
+ * Props obligatoires :
7
+ * data AreaRangeChartDatum[] - tableau {x, low, high}
8
+ * label string - aria-label du graphique
9
+ *
10
+ * Props optionnelles :
11
+ * tone "category1".."category8" (défaut "category1")
12
+ * smooth boolean - bords de bande lissés (défaut false)
13
+ * width number (défaut 480)
14
+ * height number (défaut 240)
15
+ * class string
16
+ *
17
+ * Le tracé `.st-areaRangeChart__area` ferme la bande : ligne HAUTE (sens
18
+ * direct) puis ligne BASSE (sens inverse) puis `Z`.
19
+ */
20
+ export type AreaRangeChartTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8";
21
+ export type AreaRangeChartDatum = {
22
+ x: number | string;
23
+ low: number;
24
+ high: number;
25
+ };
26
+ type AreaRangeChartProps = {
27
+ data: AreaRangeChartDatum[];
28
+ width?: number;
29
+ height?: number;
30
+ tone?: AreaRangeChartTone;
31
+ smooth?: boolean;
32
+ label: string;
33
+ class?: string;
34
+ };
35
+ declare const AreaRangeChart: import("svelte").Component<AreaRangeChartProps, {}, "">;
36
+ type AreaRangeChart = ReturnType<typeof AreaRangeChart>;
37
+ export default AreaRangeChart;
38
+ //# sourceMappingURL=AreaRangeChart.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AreaRangeChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/AreaRangeChart.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAMF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAiSJ,QAAA,MAAM,cAAc,yDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}