@sentropic/design-system-svelte 0.34.39 → 0.34.40
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/ContourChart.svelte +398 -0
- package/dist/ContourChart.svelte.d.ts +44 -0
- package/dist/ContourChart.svelte.d.ts.map +1 -0
- package/dist/ContourChart.test.d.ts +2 -0
- package/dist/ContourChart.test.d.ts.map +1 -0
- package/dist/ContourChart.test.js +59 -0
- package/dist/WindBarbChart.svelte +367 -0
- package/dist/WindBarbChart.svelte.d.ts +45 -0
- package/dist/WindBarbChart.svelte.d.ts.map +1 -0
- package/dist/WindBarbChart.test.d.ts +2 -0
- package/dist/WindBarbChart.test.d.ts.map +1 -0
- package/dist/WindBarbChart.test.js +65 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* ContourChart — lignes/zones de contour sur une grille 2D régulière (façon
|
|
4
|
+
* Highcharts « contour » / carte topographique). Chaque cellule de la grille
|
|
5
|
+
* est peinte d'une bande de couleur fonction de sa `value` normalisée, sur
|
|
6
|
+
* l'échelle catégorielle continue category1..8 (reprise de AnomalySwimLane /
|
|
7
|
+
* Density2D). Axes X/Y gradués (mêmes « niceTicks » que les autres charts) et
|
|
8
|
+
* légende des paliers. a11y : `role="img"` + liste accessible des points.
|
|
9
|
+
* API canonique (référence Svelte, React/Vue/Angular doivent s'aligner).
|
|
10
|
+
*
|
|
11
|
+
* La grille est supposée régulière : les valeurs distinctes de `x` et `y`
|
|
12
|
+
* définissent les colonnes et lignes ; chaque cellule est un rectangle peint
|
|
13
|
+
* du ton correspondant à sa `value`, découpée en `levels` paliers.
|
|
14
|
+
*
|
|
15
|
+
* Props obligatoires :
|
|
16
|
+
* data ContourChartDatum[] - {x, y, value}
|
|
17
|
+
*
|
|
18
|
+
* Props optionnelles :
|
|
19
|
+
* levels number (nombre de paliers de couleur ; défaut 6)
|
|
20
|
+
* label string
|
|
21
|
+
* width number (défaut 640)
|
|
22
|
+
* height number (défaut 320)
|
|
23
|
+
* size number (non utilisé pour le rendu ; réservé parité d'API)
|
|
24
|
+
* class string
|
|
25
|
+
*/
|
|
26
|
+
export type ContourChartTone =
|
|
27
|
+
| "category1" | "category2" | "category3" | "category4"
|
|
28
|
+
| "category5" | "category6" | "category7" | "category8";
|
|
29
|
+
|
|
30
|
+
export type ContourChartDatum = {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
/** Valeur scalaire de la cellule : pilote la bande de couleur. */
|
|
34
|
+
value: number;
|
|
35
|
+
};
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<script lang="ts">
|
|
39
|
+
import ChartDataList from "./ChartDataList.svelte";
|
|
40
|
+
|
|
41
|
+
type ContourChartProps = {
|
|
42
|
+
data: ContourChartDatum[];
|
|
43
|
+
levels?: number;
|
|
44
|
+
label?: string;
|
|
45
|
+
width?: number;
|
|
46
|
+
height?: number;
|
|
47
|
+
size?: number;
|
|
48
|
+
class?: string;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
let {
|
|
52
|
+
data = [],
|
|
53
|
+
levels = 6,
|
|
54
|
+
label,
|
|
55
|
+
width = 640,
|
|
56
|
+
height = 320,
|
|
57
|
+
size,
|
|
58
|
+
class: className
|
|
59
|
+
}: ContourChartProps = $props();
|
|
60
|
+
|
|
61
|
+
const MARGIN = { top: 16, right: 18, bottom: 36, left: 48 };
|
|
62
|
+
|
|
63
|
+
const TONES = [
|
|
64
|
+
"category1","category2","category3","category4",
|
|
65
|
+
"category5","category6","category7","category8"
|
|
66
|
+
] as const;
|
|
67
|
+
|
|
68
|
+
function niceTicks(min: number, max: number, target = 5): number[] {
|
|
69
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || min === max) {
|
|
70
|
+
return [Number.isFinite(max) ? max : 0];
|
|
71
|
+
}
|
|
72
|
+
const range = max - min;
|
|
73
|
+
const rough = range / Math.max(target - 1, 1);
|
|
74
|
+
const pow = Math.pow(10, Math.floor(Math.log10(rough)));
|
|
75
|
+
const norm = rough / pow;
|
|
76
|
+
let step: number;
|
|
77
|
+
if (norm < 1.5) step = pow;
|
|
78
|
+
else if (norm < 3) step = 2 * pow;
|
|
79
|
+
else if (norm < 7) step = 5 * pow;
|
|
80
|
+
else step = 10 * pow;
|
|
81
|
+
const start = Math.floor(min / step) * step;
|
|
82
|
+
const end = Math.ceil(max / step) * step;
|
|
83
|
+
const ticks: number[] = [];
|
|
84
|
+
for (let v = start; v <= end + step / 2; v += step) ticks.push(Number(v.toFixed(10)));
|
|
85
|
+
return ticks;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function scaleLinear(v: number, d0: number, d1: number, r0: number, r1: number) {
|
|
89
|
+
if (d1 === d0) return r0;
|
|
90
|
+
return r0 + ((v - d0) * (r1 - r0)) / (d1 - d0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function fmt(v: number): string {
|
|
94
|
+
if (Math.abs(v) >= 1000) return `${(v / 1000).toFixed(v % 1000 === 0 ? 0 : 1)}k`;
|
|
95
|
+
return Number.isInteger(v) ? String(v) : v.toFixed(1);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
let hoveredKey: string | null = $state(null);
|
|
99
|
+
|
|
100
|
+
// Points valides : coordonnées finies, valeur finie.
|
|
101
|
+
const validData = $derived(
|
|
102
|
+
data.filter(
|
|
103
|
+
(d) =>
|
|
104
|
+
d &&
|
|
105
|
+
Number.isFinite(d.x) &&
|
|
106
|
+
Number.isFinite(d.y) &&
|
|
107
|
+
Number.isFinite(d.value)
|
|
108
|
+
)
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
// Nombre de paliers effectif : entier ≥ 1, plafonné à 8 (les tons disponibles).
|
|
112
|
+
const levelCount = $derived(
|
|
113
|
+
Math.max(1, Math.min(TONES.length, Math.floor(Number.isFinite(levels) ? levels : 6)))
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
const valueRange = $derived.by(() => {
|
|
117
|
+
const vals = validData.map((d) => d.value);
|
|
118
|
+
const min = vals.length ? Math.min(...vals) : 0;
|
|
119
|
+
const max = vals.length ? Math.max(...vals) : 0;
|
|
120
|
+
return { min, max };
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// Palier (0..levelCount-1) puis ton catégoriel : valeur normalisée 0..1 → bande.
|
|
124
|
+
function bandOf(value: number): { band: number; tone: ContourChartTone } {
|
|
125
|
+
const { min, max } = valueRange;
|
|
126
|
+
const ratio = max > min ? (value - min) / (max - min) : 0;
|
|
127
|
+
const band = Math.max(0, Math.min(levelCount - 1, Math.floor(ratio * levelCount)));
|
|
128
|
+
const toneIndex = Math.max(0, Math.min(TONES.length - 1, Math.floor((band / Math.max(levelCount - 1, 1)) * (TONES.length - 1))));
|
|
129
|
+
return { band, tone: TONES[toneIndex] };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const scales = $derived.by(() => {
|
|
133
|
+
const xs = validData.map((d) => d.x);
|
|
134
|
+
const ys = validData.map((d) => d.y);
|
|
135
|
+
const xValues = Array.from(new Set(xs)).sort((a, b) => a - b);
|
|
136
|
+
const yValues = Array.from(new Set(ys)).sort((a, b) => a - b);
|
|
137
|
+
const xTicks = niceTicks(Math.min(...xs), Math.max(...xs));
|
|
138
|
+
const yTicks = niceTicks(Math.min(...ys), Math.max(...ys));
|
|
139
|
+
const plotW = Math.max(width - MARGIN.left - MARGIN.right, 1);
|
|
140
|
+
const plotH = Math.max(height - MARGIN.top - MARGIN.bottom, 1);
|
|
141
|
+
return {
|
|
142
|
+
xValues, yValues,
|
|
143
|
+
xTicks, yTicks,
|
|
144
|
+
xMin: xTicks[0], xMax: xTicks[xTicks.length - 1],
|
|
145
|
+
yMin: yTicks[0], yMax: yTicks[yTicks.length - 1],
|
|
146
|
+
plotW, plotH
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Largeur/hauteur d'une cellule en espace data (grille régulière), avec repli.
|
|
151
|
+
const cellSpan = $derived.by(() => {
|
|
152
|
+
const { xValues, yValues } = scales;
|
|
153
|
+
const dx = xValues.length > 1 ? xValues[1] - xValues[0] : 1;
|
|
154
|
+
const dy = yValues.length > 1 ? yValues[1] - yValues[0] : 1;
|
|
155
|
+
return { dx, dy };
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// Une bande rectangulaire par cellule de grille, peinte selon sa value.
|
|
159
|
+
const cells = $derived.by(() => {
|
|
160
|
+
const { xMin, xMax, yMin, yMax, plotW, plotH } = scales;
|
|
161
|
+
const { dx, dy } = cellSpan;
|
|
162
|
+
return validData.map((d, i) => {
|
|
163
|
+
const left = MARGIN.left + scaleLinear(d.x - dx / 2, xMin, xMax, 0, plotW);
|
|
164
|
+
const right = MARGIN.left + scaleLinear(d.x + dx / 2, xMin, xMax, 0, plotW);
|
|
165
|
+
const top = MARGIN.top + scaleLinear(d.y + dy / 2, yMin, yMax, plotH, 0);
|
|
166
|
+
const bottom = MARGIN.top + scaleLinear(d.y - dy / 2, yMin, yMax, plotH, 0);
|
|
167
|
+
const { tone } = bandOf(d.value);
|
|
168
|
+
return {
|
|
169
|
+
key: `${i}`,
|
|
170
|
+
datum: d,
|
|
171
|
+
x: Math.min(left, right),
|
|
172
|
+
y: Math.min(top, bottom),
|
|
173
|
+
width: Math.abs(right - left),
|
|
174
|
+
height: Math.abs(bottom - top),
|
|
175
|
+
cx: (left + right) / 2,
|
|
176
|
+
cy: (top + bottom) / 2,
|
|
177
|
+
tone
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const dataValueItems = $derived(
|
|
183
|
+
validData.map((d) => `x ${d.x}, y ${d.y} · ${fmt(d.value)}`)
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
const legendItems = $derived(
|
|
187
|
+
Array.from({ length: levelCount }, (_, band) => {
|
|
188
|
+
const toneIndex = Math.max(0, Math.min(TONES.length - 1, Math.floor((band / Math.max(levelCount - 1, 1)) * (TONES.length - 1))));
|
|
189
|
+
return { band, tone: TONES[toneIndex] };
|
|
190
|
+
})
|
|
191
|
+
);
|
|
192
|
+
const hasLegend = $derived(validData.length > 0);
|
|
193
|
+
|
|
194
|
+
function handlePointerMove(event: PointerEvent) {
|
|
195
|
+
const target = event.target;
|
|
196
|
+
if (!(target instanceof Element)) {
|
|
197
|
+
hoveredKey = null;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
hoveredKey = target.getAttribute("data-chart-key");
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const hoveredCell = $derived.by(() => {
|
|
204
|
+
if (hoveredKey === null) return null;
|
|
205
|
+
return cells.find((c) => c.key === hoveredKey) ?? null;
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
const classes = () => ["st-contourChart", className].filter(Boolean).join(" ");
|
|
209
|
+
</script>
|
|
210
|
+
|
|
211
|
+
<div class={classes()}>
|
|
212
|
+
<div
|
|
213
|
+
class="st-contourChart__visual"
|
|
214
|
+
role="img"
|
|
215
|
+
aria-label={label}
|
|
216
|
+
onpointermove={handlePointerMove}
|
|
217
|
+
onpointerleave={() => (hoveredKey = null)}
|
|
218
|
+
>
|
|
219
|
+
<svg
|
|
220
|
+
viewBox="0 0 {width} {height}"
|
|
221
|
+
preserveAspectRatio="xMidYMid meet"
|
|
222
|
+
width="100%"
|
|
223
|
+
height="100%"
|
|
224
|
+
focusable="false"
|
|
225
|
+
aria-hidden="true"
|
|
226
|
+
>
|
|
227
|
+
<!-- bandes de contour : une cellule peinte par point de grille -->
|
|
228
|
+
{#each cells as cell (cell.key)}
|
|
229
|
+
<rect
|
|
230
|
+
class="st-contourChart__cell st-contourChart__cell--{cell.tone}"
|
|
231
|
+
class:st-contourChart__cell--dim={hoveredKey !== null && hoveredKey !== cell.key}
|
|
232
|
+
x={cell.x}
|
|
233
|
+
y={cell.y}
|
|
234
|
+
width={cell.width}
|
|
235
|
+
height={cell.height}
|
|
236
|
+
data-chart-key={cell.key}
|
|
237
|
+
/>
|
|
238
|
+
{/each}
|
|
239
|
+
|
|
240
|
+
<!-- gridlines + ticks Y -->
|
|
241
|
+
{#each scales.yTicks as t (t)}
|
|
242
|
+
{@const y = MARGIN.top + scaleLinear(t, scales.yMin, scales.yMax, scales.plotH, 0)}
|
|
243
|
+
<line class="st-contourChart__grid" x1={MARGIN.left} x2={width - MARGIN.right} y1={y} y2={y} />
|
|
244
|
+
<text class="st-contourChart__tick" x={MARGIN.left - 6} y={y} text-anchor="end" dominant-baseline="middle">{fmt(t)}</text>
|
|
245
|
+
{/each}
|
|
246
|
+
<!-- ticks X -->
|
|
247
|
+
{#each scales.xTicks as t (t)}
|
|
248
|
+
{@const x = MARGIN.left + scaleLinear(t, scales.xMin, scales.xMax, 0, scales.plotW)}
|
|
249
|
+
<text class="st-contourChart__tick" x={x} y={height - MARGIN.bottom + 16} text-anchor="middle">{fmt(t)}</text>
|
|
250
|
+
{/each}
|
|
251
|
+
|
|
252
|
+
<!-- axes -->
|
|
253
|
+
<line class="st-contourChart__axis" x1={MARGIN.left} x2={MARGIN.left} y1={MARGIN.top} y2={height - MARGIN.bottom} />
|
|
254
|
+
<line class="st-contourChart__axis" x1={MARGIN.left} x2={width - MARGIN.right} y1={height - MARGIN.bottom} y2={height - MARGIN.bottom} />
|
|
255
|
+
</svg>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
{#if hasLegend}
|
|
259
|
+
<div class="st-contourChart__legend" aria-hidden="true">
|
|
260
|
+
<span class="st-contourChart__legendText">Low</span>
|
|
261
|
+
<span class="st-contourChart__legendRamp">
|
|
262
|
+
{#each legendItems as item (item.band)}
|
|
263
|
+
<span class="st-contourChart__legendSwatch st-contourChart__legendSwatch--{item.tone}"></span>
|
|
264
|
+
{/each}
|
|
265
|
+
</span>
|
|
266
|
+
<span class="st-contourChart__legendText">High</span>
|
|
267
|
+
</div>
|
|
268
|
+
{/if}
|
|
269
|
+
|
|
270
|
+
<ChartDataList label={label ?? "contour"} items={dataValueItems} />
|
|
271
|
+
|
|
272
|
+
{#if hoveredCell}
|
|
273
|
+
{@const cell = hoveredCell}
|
|
274
|
+
<div
|
|
275
|
+
class="st-contourChart__tooltip"
|
|
276
|
+
role="presentation"
|
|
277
|
+
style="left: {(cell.cx / width) * 100}%; top: {(cell.cy / height) * 100}%"
|
|
278
|
+
>
|
|
279
|
+
<span class="st-contourChart__tooltipLabel">x {cell.datum.x} · y {cell.datum.y}</span>
|
|
280
|
+
<span class="st-contourChart__tooltipValue">{fmt(cell.datum.value)}</span>
|
|
281
|
+
</div>
|
|
282
|
+
{/if}
|
|
283
|
+
</div>
|
|
284
|
+
|
|
285
|
+
<style>
|
|
286
|
+
.st-contourChart {
|
|
287
|
+
color: var(--st-semantic-text-secondary);
|
|
288
|
+
display: block;
|
|
289
|
+
font-family: inherit;
|
|
290
|
+
position: relative;
|
|
291
|
+
width: 100%;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.st-contourChart svg {
|
|
295
|
+
display: block;
|
|
296
|
+
overflow: visible;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.st-contourChart__visual {
|
|
300
|
+
display: block;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.st-contourChart__grid {
|
|
304
|
+
opacity: 0.5;
|
|
305
|
+
stroke: var(--st-semantic-border-subtle);
|
|
306
|
+
stroke-dasharray: 2 3;
|
|
307
|
+
stroke-width: 1;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.st-contourChart__axis {
|
|
311
|
+
stroke: var(--st-semantic-border-subtle);
|
|
312
|
+
stroke-width: 1;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.st-contourChart__tick {
|
|
316
|
+
fill: var(--st-semantic-text-secondary);
|
|
317
|
+
font-size: 0.6875rem;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.st-contourChart__cell {
|
|
321
|
+
cursor: pointer;
|
|
322
|
+
stroke: var(--st-semantic-surface-default, Canvas);
|
|
323
|
+
stroke-width: 0.5;
|
|
324
|
+
transition: opacity 120ms ease;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.st-contourChart__cell--dim {
|
|
328
|
+
opacity: 0.35;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.st-contourChart__cell--category1 { fill: var(--st-semantic-data-category1); }
|
|
332
|
+
.st-contourChart__cell--category2 { fill: var(--st-semantic-data-category2); }
|
|
333
|
+
.st-contourChart__cell--category3 { fill: var(--st-semantic-data-category3); }
|
|
334
|
+
.st-contourChart__cell--category4 { fill: var(--st-semantic-data-category4); }
|
|
335
|
+
.st-contourChart__cell--category5 { fill: var(--st-semantic-data-category5); }
|
|
336
|
+
.st-contourChart__cell--category6 { fill: var(--st-semantic-data-category6); }
|
|
337
|
+
.st-contourChart__cell--category7 { fill: var(--st-semantic-data-category7); }
|
|
338
|
+
.st-contourChart__cell--category8 { fill: var(--st-semantic-data-category8); }
|
|
339
|
+
|
|
340
|
+
.st-contourChart__legend {
|
|
341
|
+
align-items: center;
|
|
342
|
+
color: var(--st-semantic-text-secondary);
|
|
343
|
+
display: flex;
|
|
344
|
+
font-size: 0.6875rem;
|
|
345
|
+
gap: 0.375rem;
|
|
346
|
+
margin-top: 0.5rem;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.st-contourChart__legendRamp {
|
|
350
|
+
display: inline-flex;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.st-contourChart__legendSwatch {
|
|
354
|
+
display: inline-block;
|
|
355
|
+
height: 0.75rem;
|
|
356
|
+
width: 1.25rem;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.st-contourChart__legendSwatch--category1 { background: var(--st-semantic-data-category1); }
|
|
360
|
+
.st-contourChart__legendSwatch--category2 { background: var(--st-semantic-data-category2); }
|
|
361
|
+
.st-contourChart__legendSwatch--category3 { background: var(--st-semantic-data-category3); }
|
|
362
|
+
.st-contourChart__legendSwatch--category4 { background: var(--st-semantic-data-category4); }
|
|
363
|
+
.st-contourChart__legendSwatch--category5 { background: var(--st-semantic-data-category5); }
|
|
364
|
+
.st-contourChart__legendSwatch--category6 { background: var(--st-semantic-data-category6); }
|
|
365
|
+
.st-contourChart__legendSwatch--category7 { background: var(--st-semantic-data-category7); }
|
|
366
|
+
.st-contourChart__legendSwatch--category8 { background: var(--st-semantic-data-category8); }
|
|
367
|
+
|
|
368
|
+
.st-contourChart__tooltip {
|
|
369
|
+
background: var(--st-semantic-surface-inverse);
|
|
370
|
+
border-radius: var(--st-radius-sm, 0.25rem);
|
|
371
|
+
color: var(--st-semantic-text-inverse);
|
|
372
|
+
display: inline-flex;
|
|
373
|
+
flex-direction: column;
|
|
374
|
+
font-size: 0.75rem;
|
|
375
|
+
gap: 0.125rem;
|
|
376
|
+
line-height: 1.2;
|
|
377
|
+
padding: 0.375rem 0.5rem;
|
|
378
|
+
pointer-events: none;
|
|
379
|
+
position: absolute;
|
|
380
|
+
transform: translate(-50%, calc(-100% - 8px));
|
|
381
|
+
white-space: nowrap;
|
|
382
|
+
z-index: 1;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.st-contourChart__tooltipLabel {
|
|
386
|
+
font-weight: 600;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.st-contourChart__tooltipValue {
|
|
390
|
+
opacity: 0.85;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
@media (prefers-reduced-motion: reduce) {
|
|
394
|
+
.st-contourChart__cell {
|
|
395
|
+
transition: none;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
</style>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContourChart — lignes/zones de contour sur une grille 2D régulière (façon
|
|
3
|
+
* Highcharts « contour » / carte topographique). Chaque cellule de la grille
|
|
4
|
+
* est peinte d'une bande de couleur fonction de sa `value` normalisée, sur
|
|
5
|
+
* l'échelle catégorielle continue category1..8 (reprise de AnomalySwimLane /
|
|
6
|
+
* Density2D). Axes X/Y gradués (mêmes « niceTicks » que les autres charts) et
|
|
7
|
+
* légende des paliers. a11y : `role="img"` + liste accessible des points.
|
|
8
|
+
* API canonique (référence Svelte, React/Vue/Angular doivent s'aligner).
|
|
9
|
+
*
|
|
10
|
+
* La grille est supposée régulière : les valeurs distinctes de `x` et `y`
|
|
11
|
+
* définissent les colonnes et lignes ; chaque cellule est un rectangle peint
|
|
12
|
+
* du ton correspondant à sa `value`, découpée en `levels` paliers.
|
|
13
|
+
*
|
|
14
|
+
* Props obligatoires :
|
|
15
|
+
* data ContourChartDatum[] - {x, y, value}
|
|
16
|
+
*
|
|
17
|
+
* Props optionnelles :
|
|
18
|
+
* levels number (nombre de paliers de couleur ; défaut 6)
|
|
19
|
+
* label string
|
|
20
|
+
* width number (défaut 640)
|
|
21
|
+
* height number (défaut 320)
|
|
22
|
+
* size number (non utilisé pour le rendu ; réservé parité d'API)
|
|
23
|
+
* class string
|
|
24
|
+
*/
|
|
25
|
+
export type ContourChartTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8";
|
|
26
|
+
export type ContourChartDatum = {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
/** Valeur scalaire de la cellule : pilote la bande de couleur. */
|
|
30
|
+
value: number;
|
|
31
|
+
};
|
|
32
|
+
type ContourChartProps = {
|
|
33
|
+
data: ContourChartDatum[];
|
|
34
|
+
levels?: number;
|
|
35
|
+
label?: string;
|
|
36
|
+
width?: number;
|
|
37
|
+
height?: number;
|
|
38
|
+
size?: number;
|
|
39
|
+
class?: string;
|
|
40
|
+
};
|
|
41
|
+
declare const ContourChart: import("svelte").Component<ContourChartProps, {}, "">;
|
|
42
|
+
type ContourChart = ReturnType<typeof ContourChart>;
|
|
43
|
+
export default ContourChart;
|
|
44
|
+
//# sourceMappingURL=ContourChart.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContourChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/ContourChart.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,gBAAgB,GACxB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAMF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA4NJ,QAAA,MAAM,YAAY,uDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContourChart.test.d.ts","sourceRoot":"","sources":["../src/lib/ContourChart.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { render } from "@testing-library/svelte";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import ContourChart from "./ContourChart.svelte";
|
|
4
|
+
// Grille 2×2 régulière, valeurs croissantes.
|
|
5
|
+
const grid = [
|
|
6
|
+
{ x: 0, y: 0, value: 1 },
|
|
7
|
+
{ x: 1, y: 0, value: 2 },
|
|
8
|
+
{ x: 0, y: 1, value: 3 },
|
|
9
|
+
{ x: 1, y: 1, value: 4 }
|
|
10
|
+
];
|
|
11
|
+
const cells = (container) => Array.from(container.querySelectorAll(".st-contourChart__cell"));
|
|
12
|
+
const listItems = (container) => Array.from(container.querySelectorAll(".st-chartDataList li")).map((n) => n.textContent?.trim());
|
|
13
|
+
const structuralClass = (el) => el.className.split(/\s+/)[0];
|
|
14
|
+
describe("ContourChart", () => {
|
|
15
|
+
it("renders an img role and one cell per datum", () => {
|
|
16
|
+
const { container } = render(ContourChart, { props: { data: grid, label: "Relief" } });
|
|
17
|
+
expect(container.querySelector('[role="img"]')).toBeTruthy();
|
|
18
|
+
expect(cells(container).length).toBe(4);
|
|
19
|
+
});
|
|
20
|
+
it("colours cells by value band (largest value → category8)", () => {
|
|
21
|
+
const { container } = render(ContourChart, { props: { data: grid, label: "C" } });
|
|
22
|
+
const last = cells(container).at(-1);
|
|
23
|
+
expect(last.classList.contains("st-contourChart__cell--category8")).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
it("renders graduated X/Y axes with nice ticks", () => {
|
|
26
|
+
const { container } = render(ContourChart, { props: { data: grid, label: "C" } });
|
|
27
|
+
expect(container.querySelectorAll(".st-contourChart__axis").length).toBe(2);
|
|
28
|
+
expect(container.querySelectorAll(".st-contourChart__tick").length).toBeGreaterThan(0);
|
|
29
|
+
});
|
|
30
|
+
it("renders a level legend ramp", () => {
|
|
31
|
+
const { container } = render(ContourChart, { props: { data: grid, levels: 4, label: "C" } });
|
|
32
|
+
expect(container.querySelectorAll(".st-contourChart__legendSwatch").length).toBe(4);
|
|
33
|
+
});
|
|
34
|
+
it("lists every datum in the accessible data list", () => {
|
|
35
|
+
const { container } = render(ContourChart, {
|
|
36
|
+
props: { data: [{ x: 2, y: 3, value: 5 }], label: "C" }
|
|
37
|
+
});
|
|
38
|
+
expect(listItems(container)[0]).toBe("x 2, y 3 · 5");
|
|
39
|
+
});
|
|
40
|
+
it("drops non-finite points before rendering", () => {
|
|
41
|
+
const { container } = render(ContourChart, {
|
|
42
|
+
props: {
|
|
43
|
+
data: [
|
|
44
|
+
{ x: Number.NaN, y: 0, value: 1 },
|
|
45
|
+
{ x: 0, y: 0, value: Number.NaN },
|
|
46
|
+
{ x: 1, y: 1, value: 2 }
|
|
47
|
+
],
|
|
48
|
+
label: "C"
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
expect(cells(container).length).toBe(1);
|
|
52
|
+
});
|
|
53
|
+
it("merges a custom class onto the root", () => {
|
|
54
|
+
const { container } = render(ContourChart, { props: { data: grid, class: "mine" } });
|
|
55
|
+
const root = container.querySelector(".st-contourChart");
|
|
56
|
+
expect(structuralClass(root)).toBe("st-contourChart");
|
|
57
|
+
expect(root.classList.contains("mine")).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* WindBarbChart — barbes de vent (symboles météo : vitesse + direction) le
|
|
4
|
+
* long d'un axe temporel (façon Highcharts « windbarb »). Une barbe par point :
|
|
5
|
+
* la hampe est orientée selon `direction` (en degrés) et les barbules encodent
|
|
6
|
+
* la `speed` (en nœuds) par paliers météo standard (demi-barbule = 5 kt,
|
|
7
|
+
* barbule pleine = 10 kt, fanion = 50 kt). La couleur encode la vitesse sur
|
|
8
|
+
* l'échelle catégorielle continue category1..8. a11y : `role="img"` +
|
|
9
|
+
* `data-chart-key` + liste accessible des points.
|
|
10
|
+
* API canonique (référence Svelte, React/Vue/Angular doivent s'aligner).
|
|
11
|
+
*
|
|
12
|
+
* Convention de direction (météo) : `direction` est la direction d'où vient le
|
|
13
|
+
* vent, en degrés (0° = Nord). La hampe pointe vers la source et les barbules
|
|
14
|
+
* sont placées du côté droit de la hampe (hémisphère nord).
|
|
15
|
+
*
|
|
16
|
+
* Props obligatoires :
|
|
17
|
+
* data WindBarbChartDatum[] - {at, speed, direction}
|
|
18
|
+
*
|
|
19
|
+
* Props optionnelles :
|
|
20
|
+
* label string
|
|
21
|
+
* width number (défaut 640)
|
|
22
|
+
* height number (défaut 160)
|
|
23
|
+
* size number (longueur de la hampe en px ; défaut 32)
|
|
24
|
+
* class string
|
|
25
|
+
*/
|
|
26
|
+
export type WindBarbChartTone =
|
|
27
|
+
| "category1" | "category2" | "category3" | "category4"
|
|
28
|
+
| "category5" | "category6" | "category7" | "category8";
|
|
29
|
+
|
|
30
|
+
export type WindBarbChartDatum = {
|
|
31
|
+
/** Position sur l'axe temporel (timestamp ou index). */
|
|
32
|
+
at: number;
|
|
33
|
+
/** Vitesse du vent en nœuds (≥ 0) : pilote les barbules et la couleur. */
|
|
34
|
+
speed: number;
|
|
35
|
+
/** Direction (d'où vient le vent) en DEGRÉS (0° = Nord). */
|
|
36
|
+
direction: number;
|
|
37
|
+
};
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<script lang="ts">
|
|
41
|
+
import ChartDataList from "./ChartDataList.svelte";
|
|
42
|
+
|
|
43
|
+
type WindBarbChartProps = {
|
|
44
|
+
data: WindBarbChartDatum[];
|
|
45
|
+
label?: string;
|
|
46
|
+
width?: number;
|
|
47
|
+
height?: number;
|
|
48
|
+
size?: number;
|
|
49
|
+
class?: string;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
let {
|
|
53
|
+
data = [],
|
|
54
|
+
label,
|
|
55
|
+
width = 640,
|
|
56
|
+
height = 160,
|
|
57
|
+
size = 32,
|
|
58
|
+
class: className
|
|
59
|
+
}: WindBarbChartProps = $props();
|
|
60
|
+
|
|
61
|
+
const MARGIN = { top: 16, right: 18, bottom: 36, left: 24 };
|
|
62
|
+
|
|
63
|
+
const TONES = [
|
|
64
|
+
"category1","category2","category3","category4",
|
|
65
|
+
"category5","category6","category7","category8"
|
|
66
|
+
] as const;
|
|
67
|
+
|
|
68
|
+
function niceTicks(min: number, max: number, target = 5): number[] {
|
|
69
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || min === max) {
|
|
70
|
+
return [Number.isFinite(max) ? max : 0];
|
|
71
|
+
}
|
|
72
|
+
const range = max - min;
|
|
73
|
+
const rough = range / Math.max(target - 1, 1);
|
|
74
|
+
const pow = Math.pow(10, Math.floor(Math.log10(rough)));
|
|
75
|
+
const norm = rough / pow;
|
|
76
|
+
let step: number;
|
|
77
|
+
if (norm < 1.5) step = pow;
|
|
78
|
+
else if (norm < 3) step = 2 * pow;
|
|
79
|
+
else if (norm < 7) step = 5 * pow;
|
|
80
|
+
else step = 10 * pow;
|
|
81
|
+
const start = Math.floor(min / step) * step;
|
|
82
|
+
const end = Math.ceil(max / step) * step;
|
|
83
|
+
const ticks: number[] = [];
|
|
84
|
+
for (let v = start; v <= end + step / 2; v += step) ticks.push(Number(v.toFixed(10)));
|
|
85
|
+
return ticks;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function scaleLinear(v: number, d0: number, d1: number, r0: number, r1: number) {
|
|
89
|
+
if (d1 === d0) return r0;
|
|
90
|
+
return r0 + ((v - d0) * (r1 - r0)) / (d1 - d0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function fmt(v: number): string {
|
|
94
|
+
if (Math.abs(v) >= 1000) return `${(v / 1000).toFixed(v % 1000 === 0 ? 0 : 1)}k`;
|
|
95
|
+
return Number.isInteger(v) ? String(v) : v.toFixed(1);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Décompose une vitesse (kt) en barbules météo : fanions (50), pleines (10),
|
|
99
|
+
// demi (5). On arrondit au plus proche multiple de 5 (convention standard).
|
|
100
|
+
function barbCounts(speed: number): { flags: number; full: number; half: number } {
|
|
101
|
+
let rounded = Math.round(speed / 5) * 5;
|
|
102
|
+
if (rounded < 0) rounded = 0;
|
|
103
|
+
const flags = Math.floor(rounded / 50);
|
|
104
|
+
rounded -= flags * 50;
|
|
105
|
+
const full = Math.floor(rounded / 10);
|
|
106
|
+
rounded -= full * 10;
|
|
107
|
+
const half = Math.floor(rounded / 5);
|
|
108
|
+
return { flags, full, half };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
let hoveredKey: string | null = $state(null);
|
|
112
|
+
|
|
113
|
+
// Points valides : position finie, vitesse finie ≥ 0, direction finie.
|
|
114
|
+
const validData = $derived(
|
|
115
|
+
data.filter(
|
|
116
|
+
(d) =>
|
|
117
|
+
d &&
|
|
118
|
+
Number.isFinite(d.at) &&
|
|
119
|
+
Number.isFinite(d.speed) &&
|
|
120
|
+
d.speed >= 0 &&
|
|
121
|
+
Number.isFinite(d.direction)
|
|
122
|
+
)
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
const scales = $derived.by(() => {
|
|
126
|
+
const ats = validData.map((d) => d.at);
|
|
127
|
+
const xTicks = niceTicks(Math.min(...ats), Math.max(...ats));
|
|
128
|
+
const plotW = Math.max(width - MARGIN.left - MARGIN.right, 1);
|
|
129
|
+
return {
|
|
130
|
+
xTicks,
|
|
131
|
+
xMin: xTicks[0], xMax: xTicks[xTicks.length - 1],
|
|
132
|
+
plotW
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
const maxSpeed = $derived(
|
|
137
|
+
validData.reduce((max, d) => (d.speed > max ? d.speed : max), 0)
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
// Ligne de base des barbes : centrée verticalement dans la zone de tracé.
|
|
141
|
+
const baseY = $derived(MARGIN.top + (height - MARGIN.top - MARGIN.bottom) / 2);
|
|
142
|
+
|
|
143
|
+
// Une barbe par point : hampe orientée + barbules le long de la hampe.
|
|
144
|
+
const barbs = $derived.by(() => {
|
|
145
|
+
const { xMin, xMax, plotW } = scales;
|
|
146
|
+
const max = maxSpeed > 0 ? maxSpeed : 1;
|
|
147
|
+
return validData.map((d, i) => {
|
|
148
|
+
const cx = MARGIN.left + scaleLinear(d.at, xMin, xMax, 0, plotW);
|
|
149
|
+
const cy = baseY;
|
|
150
|
+
// Direction météo : 0° = Nord (vers le haut). On oriente la hampe vers la
|
|
151
|
+
// source du vent. Angle écran (Y descend) : haut = -90°.
|
|
152
|
+
const rad = ((d.direction - 90) * Math.PI) / 180;
|
|
153
|
+
const ux = Math.cos(rad);
|
|
154
|
+
const uy = Math.sin(rad);
|
|
155
|
+
// Pointe de la hampe (extrémité libre, côté source du vent).
|
|
156
|
+
const tipX = cx + ux * size;
|
|
157
|
+
const tipY = cy + uy * size;
|
|
158
|
+
// Vecteur perpendiculaire (côté barbules, à droite de la hampe).
|
|
159
|
+
const px = -uy;
|
|
160
|
+
const py = ux;
|
|
161
|
+
const { flags, full, half } = barbCounts(d.speed);
|
|
162
|
+
const barbLen = size * 0.42;
|
|
163
|
+
const halfLen = barbLen * 0.55;
|
|
164
|
+
const spacing = size * 0.16;
|
|
165
|
+
const ticks: { x1: number; y1: number; x2: number; y2: number; kind: "full" | "half" | "flag1" | "flag2" }[] = [];
|
|
166
|
+
// On place les symboles depuis la pointe vers la base.
|
|
167
|
+
let along = size - spacing;
|
|
168
|
+
for (let f = 0; f < flags; f++) {
|
|
169
|
+
const aX = cx + ux * along;
|
|
170
|
+
const aY = cy + uy * along;
|
|
171
|
+
const bAlong = along - spacing;
|
|
172
|
+
const bX = cx + ux * bAlong;
|
|
173
|
+
const bY = cy + uy * bAlong;
|
|
174
|
+
const tipFX = aX + px * barbLen;
|
|
175
|
+
const tipFY = aY + py * barbLen;
|
|
176
|
+
ticks.push({ x1: aX, y1: aY, x2: tipFX, y2: tipFY, kind: "flag1" });
|
|
177
|
+
ticks.push({ x1: bX, y1: bY, x2: tipFX, y2: tipFY, kind: "flag2" });
|
|
178
|
+
along = bAlong - spacing;
|
|
179
|
+
}
|
|
180
|
+
for (let f = 0; f < full; f++) {
|
|
181
|
+
const aX = cx + ux * along;
|
|
182
|
+
const aY = cy + uy * along;
|
|
183
|
+
ticks.push({ x1: aX, y1: aY, x2: aX + px * barbLen, y2: aY + py * barbLen, kind: "full" });
|
|
184
|
+
along -= spacing;
|
|
185
|
+
}
|
|
186
|
+
for (let h = 0; h < half; h++) {
|
|
187
|
+
const aX = cx + ux * along;
|
|
188
|
+
const aY = cy + uy * along;
|
|
189
|
+
ticks.push({ x1: aX, y1: aY, x2: aX + px * halfLen, y2: aY + py * halfLen, kind: "half" });
|
|
190
|
+
along -= spacing;
|
|
191
|
+
}
|
|
192
|
+
// Ton catégoriel par bin de vitesse (max → category8).
|
|
193
|
+
const bin = Math.min(Math.floor((d.speed / max) * TONES.length), TONES.length - 1);
|
|
194
|
+
return {
|
|
195
|
+
key: `${i}`,
|
|
196
|
+
datum: d,
|
|
197
|
+
cx, cy, tipX, tipY, ticks,
|
|
198
|
+
tone: TONES[Math.max(0, bin)]
|
|
199
|
+
};
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
const dataValueItems = $derived(
|
|
204
|
+
validData.map((d) => `${fmt(d.at)} · ${fmt(d.speed)} kt @ ${fmt(d.direction)}°`)
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
function handlePointerMove(event: PointerEvent) {
|
|
208
|
+
const target = event.target;
|
|
209
|
+
if (!(target instanceof Element)) {
|
|
210
|
+
hoveredKey = null;
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
hoveredKey = target.getAttribute("data-chart-key");
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const hoveredBarb = $derived.by(() => {
|
|
217
|
+
if (hoveredKey === null) return null;
|
|
218
|
+
return barbs.find((b) => b.key === hoveredKey) ?? null;
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
const classes = () => ["st-windBarbChart", className].filter(Boolean).join(" ");
|
|
222
|
+
</script>
|
|
223
|
+
|
|
224
|
+
<div class={classes()}>
|
|
225
|
+
<div
|
|
226
|
+
class="st-windBarbChart__visual"
|
|
227
|
+
role="img"
|
|
228
|
+
aria-label={label}
|
|
229
|
+
onpointermove={handlePointerMove}
|
|
230
|
+
onpointerleave={() => (hoveredKey = null)}
|
|
231
|
+
>
|
|
232
|
+
<svg
|
|
233
|
+
viewBox="0 0 {width} {height}"
|
|
234
|
+
preserveAspectRatio="xMidYMid meet"
|
|
235
|
+
width="100%"
|
|
236
|
+
height="100%"
|
|
237
|
+
focusable="false"
|
|
238
|
+
aria-hidden="true"
|
|
239
|
+
>
|
|
240
|
+
<!-- axe temporel X : ticks -->
|
|
241
|
+
{#each scales.xTicks as t (t)}
|
|
242
|
+
{@const x = MARGIN.left + scaleLinear(t, scales.xMin, scales.xMax, 0, scales.plotW)}
|
|
243
|
+
<text class="st-windBarbChart__tick" x={x} y={height - MARGIN.bottom + 16} text-anchor="middle">{fmt(t)}</text>
|
|
244
|
+
{/each}
|
|
245
|
+
|
|
246
|
+
<!-- axe de base -->
|
|
247
|
+
<line class="st-windBarbChart__axis" x1={MARGIN.left} x2={width - MARGIN.right} y1={height - MARGIN.bottom} y2={height - MARGIN.bottom} />
|
|
248
|
+
|
|
249
|
+
<!-- une barbe par point : hampe + barbules -->
|
|
250
|
+
{#each barbs as b (b.key)}
|
|
251
|
+
<g
|
|
252
|
+
class="st-windBarbChart__barb st-windBarbChart__barb--{b.tone}"
|
|
253
|
+
class:st-windBarbChart__barb--dim={hoveredKey !== null && hoveredKey !== b.key}
|
|
254
|
+
>
|
|
255
|
+
<line class="st-windBarbChart__shaft" x1={b.cx} y1={b.cy} x2={b.tipX} y2={b.tipY} data-chart-key={b.key} />
|
|
256
|
+
{#each b.ticks as tk, ti (ti)}
|
|
257
|
+
<line class="st-windBarbChart__feather st-windBarbChart__feather--{tk.kind}" x1={tk.x1} y1={tk.y1} x2={tk.x2} y2={tk.y2} />
|
|
258
|
+
{/each}
|
|
259
|
+
</g>
|
|
260
|
+
{/each}
|
|
261
|
+
</svg>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
<ChartDataList label={label ?? "wind barb"} items={dataValueItems} />
|
|
265
|
+
|
|
266
|
+
{#if hoveredBarb}
|
|
267
|
+
{@const b = hoveredBarb}
|
|
268
|
+
<div
|
|
269
|
+
class="st-windBarbChart__tooltip"
|
|
270
|
+
role="presentation"
|
|
271
|
+
style="left: {(b.cx / width) * 100}%; top: {(b.cy / height) * 100}%"
|
|
272
|
+
>
|
|
273
|
+
<span class="st-windBarbChart__tooltipLabel">{fmt(b.datum.at)}</span>
|
|
274
|
+
<span class="st-windBarbChart__tooltipValue">{fmt(b.datum.speed)} kt @ {fmt(b.datum.direction)}°</span>
|
|
275
|
+
</div>
|
|
276
|
+
{/if}
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
<style>
|
|
280
|
+
.st-windBarbChart {
|
|
281
|
+
color: var(--st-semantic-text-secondary);
|
|
282
|
+
display: block;
|
|
283
|
+
font-family: inherit;
|
|
284
|
+
position: relative;
|
|
285
|
+
width: 100%;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.st-windBarbChart svg {
|
|
289
|
+
display: block;
|
|
290
|
+
overflow: visible;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.st-windBarbChart__visual {
|
|
294
|
+
display: block;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.st-windBarbChart__axis {
|
|
298
|
+
stroke: var(--st-semantic-border-subtle);
|
|
299
|
+
stroke-width: 1;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.st-windBarbChart__tick {
|
|
303
|
+
fill: var(--st-semantic-text-secondary);
|
|
304
|
+
font-size: 0.6875rem;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.st-windBarbChart__barb {
|
|
308
|
+
transition: opacity 120ms ease;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.st-windBarbChart__barb--dim {
|
|
312
|
+
opacity: 0.35;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.st-windBarbChart__shaft {
|
|
316
|
+
cursor: pointer;
|
|
317
|
+
stroke: currentColor;
|
|
318
|
+
stroke-linecap: round;
|
|
319
|
+
stroke-width: 2;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.st-windBarbChart__feather {
|
|
323
|
+
stroke: currentColor;
|
|
324
|
+
stroke-linecap: round;
|
|
325
|
+
stroke-width: 2;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.st-windBarbChart__barb--category1 { color: var(--st-semantic-data-category1); }
|
|
329
|
+
.st-windBarbChart__barb--category2 { color: var(--st-semantic-data-category2); }
|
|
330
|
+
.st-windBarbChart__barb--category3 { color: var(--st-semantic-data-category3); }
|
|
331
|
+
.st-windBarbChart__barb--category4 { color: var(--st-semantic-data-category4); }
|
|
332
|
+
.st-windBarbChart__barb--category5 { color: var(--st-semantic-data-category5); }
|
|
333
|
+
.st-windBarbChart__barb--category6 { color: var(--st-semantic-data-category6); }
|
|
334
|
+
.st-windBarbChart__barb--category7 { color: var(--st-semantic-data-category7); }
|
|
335
|
+
.st-windBarbChart__barb--category8 { color: var(--st-semantic-data-category8); }
|
|
336
|
+
|
|
337
|
+
.st-windBarbChart__tooltip {
|
|
338
|
+
background: var(--st-semantic-surface-inverse);
|
|
339
|
+
border-radius: var(--st-radius-sm, 0.25rem);
|
|
340
|
+
color: var(--st-semantic-text-inverse);
|
|
341
|
+
display: inline-flex;
|
|
342
|
+
flex-direction: column;
|
|
343
|
+
font-size: 0.75rem;
|
|
344
|
+
gap: 0.125rem;
|
|
345
|
+
line-height: 1.2;
|
|
346
|
+
padding: 0.375rem 0.5rem;
|
|
347
|
+
pointer-events: none;
|
|
348
|
+
position: absolute;
|
|
349
|
+
transform: translate(-50%, calc(-100% - 8px));
|
|
350
|
+
white-space: nowrap;
|
|
351
|
+
z-index: 1;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.st-windBarbChart__tooltipLabel {
|
|
355
|
+
font-weight: 600;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.st-windBarbChart__tooltipValue {
|
|
359
|
+
opacity: 0.85;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
@media (prefers-reduced-motion: reduce) {
|
|
363
|
+
.st-windBarbChart__barb {
|
|
364
|
+
transition: none;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
</style>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WindBarbChart — barbes de vent (symboles météo : vitesse + direction) le
|
|
3
|
+
* long d'un axe temporel (façon Highcharts « windbarb »). Une barbe par point :
|
|
4
|
+
* la hampe est orientée selon `direction` (en degrés) et les barbules encodent
|
|
5
|
+
* la `speed` (en nœuds) par paliers météo standard (demi-barbule = 5 kt,
|
|
6
|
+
* barbule pleine = 10 kt, fanion = 50 kt). La couleur encode la vitesse sur
|
|
7
|
+
* l'échelle catégorielle continue category1..8. a11y : `role="img"` +
|
|
8
|
+
* `data-chart-key` + liste accessible des points.
|
|
9
|
+
* API canonique (référence Svelte, React/Vue/Angular doivent s'aligner).
|
|
10
|
+
*
|
|
11
|
+
* Convention de direction (météo) : `direction` est la direction d'où vient le
|
|
12
|
+
* vent, en degrés (0° = Nord). La hampe pointe vers la source et les barbules
|
|
13
|
+
* sont placées du côté droit de la hampe (hémisphère nord).
|
|
14
|
+
*
|
|
15
|
+
* Props obligatoires :
|
|
16
|
+
* data WindBarbChartDatum[] - {at, speed, direction}
|
|
17
|
+
*
|
|
18
|
+
* Props optionnelles :
|
|
19
|
+
* label string
|
|
20
|
+
* width number (défaut 640)
|
|
21
|
+
* height number (défaut 160)
|
|
22
|
+
* size number (longueur de la hampe en px ; défaut 32)
|
|
23
|
+
* class string
|
|
24
|
+
*/
|
|
25
|
+
export type WindBarbChartTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8";
|
|
26
|
+
export type WindBarbChartDatum = {
|
|
27
|
+
/** Position sur l'axe temporel (timestamp ou index). */
|
|
28
|
+
at: number;
|
|
29
|
+
/** Vitesse du vent en nœuds (≥ 0) : pilote les barbules et la couleur. */
|
|
30
|
+
speed: number;
|
|
31
|
+
/** Direction (d'où vient le vent) en DEGRÉS (0° = Nord). */
|
|
32
|
+
direction: number;
|
|
33
|
+
};
|
|
34
|
+
type WindBarbChartProps = {
|
|
35
|
+
data: WindBarbChartDatum[];
|
|
36
|
+
label?: string;
|
|
37
|
+
width?: number;
|
|
38
|
+
height?: number;
|
|
39
|
+
size?: number;
|
|
40
|
+
class?: string;
|
|
41
|
+
};
|
|
42
|
+
declare const WindBarbChart: import("svelte").Component<WindBarbChartProps, {}, "">;
|
|
43
|
+
type WindBarbChart = ReturnType<typeof WindBarbChart>;
|
|
44
|
+
export default WindBarbChart;
|
|
45
|
+
//# sourceMappingURL=WindBarbChart.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindBarbChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/WindBarbChart.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,iBAAiB,GACzB,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GACrD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAMF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA0NJ,QAAA,MAAM,aAAa,wDAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindBarbChart.test.d.ts","sourceRoot":"","sources":["../src/lib/WindBarbChart.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { render } from "@testing-library/svelte";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import WindBarbChart from "./WindBarbChart.svelte";
|
|
4
|
+
const series = [
|
|
5
|
+
{ at: 0, speed: 5, direction: 0 },
|
|
6
|
+
{ at: 1, speed: 15, direction: 90 },
|
|
7
|
+
{ at: 2, speed: 30, direction: 180 },
|
|
8
|
+
{ at: 3, speed: 65, direction: 270 }
|
|
9
|
+
];
|
|
10
|
+
const barbs = (container) => Array.from(container.querySelectorAll(".st-windBarbChart__barb"));
|
|
11
|
+
const listItems = (container) => Array.from(container.querySelectorAll(".st-chartDataList li")).map((n) => n.textContent?.trim());
|
|
12
|
+
const structuralClass = (el) => el.className.split(/\s+/)[0];
|
|
13
|
+
describe("WindBarbChart", () => {
|
|
14
|
+
it("renders an img role and one barb per datum", () => {
|
|
15
|
+
const { container } = render(WindBarbChart, { props: { data: series, label: "Vent" } });
|
|
16
|
+
expect(container.querySelector('[role="img"]')).toBeTruthy();
|
|
17
|
+
expect(barbs(container).length).toBe(4);
|
|
18
|
+
});
|
|
19
|
+
it("draws a shaft per barb", () => {
|
|
20
|
+
const { container } = render(WindBarbChart, { props: { data: series, label: "W" } });
|
|
21
|
+
expect(container.querySelectorAll(".st-windBarbChart__shaft").length).toBe(4);
|
|
22
|
+
});
|
|
23
|
+
it("draws feather symbols encoding the speed (half / full / flag)", () => {
|
|
24
|
+
// 65 kt = 1 fanion (50) + 1 barbule pleine (10) + 1 demi (5) = 2 + 1 + 1 = 4 traits.
|
|
25
|
+
const { container } = render(WindBarbChart, {
|
|
26
|
+
props: { data: [{ at: 0, speed: 65, direction: 0 }], label: "W" }
|
|
27
|
+
});
|
|
28
|
+
expect(container.querySelectorAll(".st-windBarbChart__feather").length).toBe(4);
|
|
29
|
+
});
|
|
30
|
+
it("colours barbs by speed bin (largest speed → category8)", () => {
|
|
31
|
+
const { container } = render(WindBarbChart, { props: { data: series, label: "W" } });
|
|
32
|
+
const last = barbs(container).at(-1);
|
|
33
|
+
expect(last.classList.contains("st-windBarbChart__barb--category8")).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it("renders a graduated time axis with nice ticks", () => {
|
|
36
|
+
const { container } = render(WindBarbChart, { props: { data: series, label: "W" } });
|
|
37
|
+
expect(container.querySelectorAll(".st-windBarbChart__axis").length).toBe(1);
|
|
38
|
+
expect(container.querySelectorAll(".st-windBarbChart__tick").length).toBeGreaterThan(0);
|
|
39
|
+
});
|
|
40
|
+
it("lists every datum in the accessible data list", () => {
|
|
41
|
+
const { container } = render(WindBarbChart, {
|
|
42
|
+
props: { data: [{ at: 2, speed: 10, direction: 45 }], label: "W" }
|
|
43
|
+
});
|
|
44
|
+
expect(listItems(container)[0]).toBe("2 · 10 kt @ 45°");
|
|
45
|
+
});
|
|
46
|
+
it("drops non-finite or negative-speed points before rendering", () => {
|
|
47
|
+
const { container } = render(WindBarbChart, {
|
|
48
|
+
props: {
|
|
49
|
+
data: [
|
|
50
|
+
{ at: Number.NaN, speed: 5, direction: 0 },
|
|
51
|
+
{ at: 0, speed: -1, direction: 0 },
|
|
52
|
+
{ at: 1, speed: 10, direction: 0 }
|
|
53
|
+
],
|
|
54
|
+
label: "W"
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
expect(barbs(container).length).toBe(1);
|
|
58
|
+
});
|
|
59
|
+
it("merges a custom class onto the root", () => {
|
|
60
|
+
const { container } = render(WindBarbChart, { props: { data: series, class: "mine" } });
|
|
61
|
+
const root = container.querySelector(".st-windBarbChart");
|
|
62
|
+
expect(structuralClass(root)).toBe("st-windBarbChart");
|
|
63
|
+
expect(root.classList.contains("mine")).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
});
|
package/dist/index.d.ts
CHANGED
|
@@ -101,6 +101,8 @@ export { default as StateTimelineChart } from "./StateTimelineChart.svelte";
|
|
|
101
101
|
export { default as StatusHistoryChart } from "./StatusHistoryChart.svelte";
|
|
102
102
|
export { default as EventFeedPanel } from "./EventFeedPanel.svelte";
|
|
103
103
|
export { default as VectorFieldChart } from "./VectorFieldChart.svelte";
|
|
104
|
+
export { default as ContourChart } from "./ContourChart.svelte";
|
|
105
|
+
export { default as WindBarbChart } from "./WindBarbChart.svelte";
|
|
104
106
|
export { default as WaffleChart } from "./WaffleChart.svelte";
|
|
105
107
|
export { default as RibbonChart } from "./RibbonChart.svelte";
|
|
106
108
|
export { default as AnomalySwimLaneChart } from "./AnomalySwimLaneChart.svelte";
|
|
@@ -235,6 +237,8 @@ export type { StateTimelineTone, StateTimelineSegment, StateTimelineSeries } fro
|
|
|
235
237
|
export type { StatusHistoryTone, StatusHistoryBucket, StatusHistorySeries } from "./StatusHistoryChart.svelte";
|
|
236
238
|
export type { EventFeedPanelSeverity, EventFeedPanelEvent } from "./EventFeedPanel.svelte";
|
|
237
239
|
export type { VectorFieldChartTone, VectorFieldChartDatum } from "./VectorFieldChart.svelte";
|
|
240
|
+
export type { ContourChartTone, ContourChartDatum } from "./ContourChart.svelte";
|
|
241
|
+
export type { WindBarbChartTone, WindBarbChartDatum } from "./WindBarbChart.svelte";
|
|
238
242
|
export type { WaffleTone, WaffleChartDatum } from "./WaffleChart.svelte";
|
|
239
243
|
export type { RibbonChartTone, RibbonChartDatum } from "./RibbonChart.svelte";
|
|
240
244
|
export type { AnomalySwimLaneTone, AnomalySwimLaneBucket, AnomalySwimLaneSeries } from "./AnomalySwimLaneChart.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
|
@@ -91,6 +91,8 @@ export { default as StateTimelineChart } from "./StateTimelineChart.svelte";
|
|
|
91
91
|
export { default as StatusHistoryChart } from "./StatusHistoryChart.svelte";
|
|
92
92
|
export { default as EventFeedPanel } from "./EventFeedPanel.svelte";
|
|
93
93
|
export { default as VectorFieldChart } from "./VectorFieldChart.svelte";
|
|
94
|
+
export { default as ContourChart } from "./ContourChart.svelte";
|
|
95
|
+
export { default as WindBarbChart } from "./WindBarbChart.svelte";
|
|
94
96
|
export { default as WaffleChart } from "./WaffleChart.svelte";
|
|
95
97
|
export { default as RibbonChart } from "./RibbonChart.svelte";
|
|
96
98
|
export { default as AnomalySwimLaneChart } from "./AnomalySwimLaneChart.svelte";
|