@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,330 @@
1
+ <script lang="ts" module>
2
+ /**
3
+ * HLCChart - barres high/low/close (bâtons financiers, variante d'OHLC sans open).
4
+ * Barre verticale du low au high, tick droite au niveau de la clôture.
5
+ * La couleur hausse/baisse compare close à la clôture précédente.
6
+ * API canonique (référence Svelte, React/Vue doivent s'aligner)
7
+ *
8
+ * Props obligatoires :
9
+ * data HLCChartDatum[] - tableau {label, high, low, close}
10
+ * label string
11
+ *
12
+ * Props optionnelles :
13
+ * width number (défaut 480)
14
+ * height number (défaut 240)
15
+ * class string
16
+ */
17
+ export type HLCChartDatum = {
18
+ label: string;
19
+ high: number;
20
+ low: number;
21
+ close: number;
22
+ };
23
+ </script>
24
+
25
+ <script lang="ts">
26
+ import ChartDataList from "./ChartDataList.svelte";
27
+
28
+ type HLCChartProps = {
29
+ data: HLCChartDatum[];
30
+ label: string;
31
+ width?: number;
32
+ height?: number;
33
+ class?: string;
34
+ };
35
+
36
+ let {
37
+ data = [],
38
+ label,
39
+ width = 480,
40
+ height = 240,
41
+ class: className
42
+ }: HLCChartProps = $props();
43
+
44
+ const MARGIN = { top: 12, right: 16, bottom: 32, left: 52 };
45
+
46
+ function scaleLinear(v: number, d0: number, d1: number, r0: number, r1: number) {
47
+ if (d1 === d0) return r0;
48
+ return r0 + ((v - d0) * (r1 - r0)) / (d1 - d0);
49
+ }
50
+
51
+ function niceTicks(min: number, max: number, target = 5): number[] {
52
+ if (!Number.isFinite(min) || !Number.isFinite(max) || min === max) {
53
+ const base = Number.isFinite(max) ? max : 0;
54
+ return [base];
55
+ }
56
+ const range = max - min;
57
+ const rough = range / Math.max(target - 1, 1);
58
+ const pow = Math.pow(10, Math.floor(Math.log10(rough)));
59
+ const norm = rough / pow;
60
+ let step: number;
61
+ if (norm < 1.5) step = 1 * pow;
62
+ else if (norm < 3) step = 2 * pow;
63
+ else if (norm < 7) step = 5 * pow;
64
+ else step = 10 * pow;
65
+ const start = Math.floor(min / step) * step;
66
+ const end = Math.ceil(max / step) * step;
67
+ const ticks: number[] = [];
68
+ for (let v = start; v <= end + step / 2; v += step) {
69
+ ticks.push(Number(v.toFixed(10)));
70
+ }
71
+ return ticks;
72
+ }
73
+
74
+ function formatTick(v: number): string {
75
+ if (Math.abs(v) >= 1000) return `${(v / 1000).toFixed(v % 1000 === 0 ? 0 : 1)}k`;
76
+ if (Number.isInteger(v)) return String(v);
77
+ return v.toFixed(1);
78
+ }
79
+
80
+ let hoveredIndex: number | null = $state(null);
81
+
82
+ const plotWidth = $derived(Math.max(width - MARGIN.left - MARGIN.right, 1));
83
+ const plotHeight = $derived(Math.max(height - MARGIN.top - MARGIN.bottom, 1));
84
+
85
+ // Filtrer les barres invalides AVANT le domaine
86
+ const validData = $derived(
87
+ data.filter((d) =>
88
+ Number.isFinite(d.high) &&
89
+ Number.isFinite(d.low) &&
90
+ Number.isFinite(d.close)
91
+ )
92
+ );
93
+
94
+ const domainBounds = $derived.by(() => {
95
+ const allVals: number[] = [];
96
+ for (const d of validData) {
97
+ // Domaine inclut high/low/close (pas d'open)
98
+ allVals.push(d.high, d.low, d.close);
99
+ }
100
+ if (allVals.length === 0) return { rawMin: 0, rawMax: 1 };
101
+ const rawMin = Math.min(...allVals);
102
+ const rawMax = Math.max(...allVals);
103
+ // Domaine plat → fallback range 1 pour éviter division par 0
104
+ return { rawMin, rawMax: rawMax === rawMin ? rawMin + 1 : rawMax };
105
+ });
106
+
107
+ const ticks = $derived(niceTicks(domainBounds.rawMin, domainBounds.rawMax, 5));
108
+ const domainMin = $derived(ticks[0]);
109
+ const domainMax = $derived(ticks[ticks.length - 1]);
110
+
111
+ const bars = $derived.by(() => {
112
+ if (validData.length === 0) return [];
113
+ const band = plotWidth / validData.length;
114
+ // longueur du tick close (à droite de la barre)
115
+ const tickW = Math.min(band * 0.3, 12);
116
+
117
+ return validData.map((d, i) => {
118
+ // clamp high/low pour garantir high≥close et low≤close
119
+ const clampedHigh = Math.max(d.high, d.close);
120
+ const clampedLow = Math.min(d.low, d.close);
121
+
122
+ // hausse/baisse = close vs. close précédent (1re barre = hausse)
123
+ const prevClose = i > 0 ? validData[i - 1].close : d.close;
124
+ const bullish = d.close >= prevClose;
125
+ const centerX = MARGIN.left + band * i + band / 2;
126
+
127
+ const highY = MARGIN.top + scaleLinear(clampedHigh, domainMin, domainMax, plotHeight, 0);
128
+ const lowY = MARGIN.top + scaleLinear(clampedLow, domainMin, domainMax, plotHeight, 0);
129
+ const closeY = MARGIN.top + scaleLinear(d.close, domainMin, domainMax, plotHeight, 0);
130
+
131
+ return {
132
+ datum: d,
133
+ index: i,
134
+ bullish,
135
+ centerX,
136
+ barHighY: highY,
137
+ barLowY: lowY,
138
+ closeY,
139
+ closeX: centerX + tickW,
140
+ tooltipY: Math.min(highY, closeY)
141
+ };
142
+ });
143
+ });
144
+
145
+ const dataValueItems = $derived(
146
+ validData.map((d) => `${d.label}: H ${d.high} L ${d.low} C ${d.close}`)
147
+ );
148
+
149
+ function handlePointerMove(event: PointerEvent) {
150
+ const target = event.target;
151
+ if (!(target instanceof Element)) { hoveredIndex = null; return; }
152
+ const idx = Number(target.getAttribute("data-chart-index"));
153
+ hoveredIndex = Number.isInteger(idx) ? idx : null;
154
+ }
155
+
156
+ const classes = () => ["st-hlcChart", className].filter(Boolean).join(" ");
157
+ </script>
158
+
159
+ <div class={classes()}>
160
+ <div
161
+ class="st-hlcChart__visual"
162
+ role="img"
163
+ aria-label={label}
164
+ onpointermove={handlePointerMove}
165
+ onpointerleave={() => (hoveredIndex = null)}
166
+ >
167
+ <svg
168
+ viewBox="0 0 {width} {height}"
169
+ preserveAspectRatio="xMidYMid meet"
170
+ width="100%"
171
+ height="100%"
172
+ focusable="false"
173
+ aria-hidden="true"
174
+ >
175
+ <!-- gridlines + tick labels -->
176
+ {#each ticks as tick (tick)}
177
+ {@const ty = MARGIN.top + scaleLinear(tick, domainMin, domainMax, plotHeight, 0)}
178
+ <line class="st-hlcChart__grid" x1={MARGIN.left} x2={width - MARGIN.right} y1={ty} y2={ty} />
179
+ <text class="st-hlcChart__tickLabel" x={MARGIN.left - 6} y={ty} text-anchor="end" dominant-baseline="middle">
180
+ {formatTick(tick)}
181
+ </text>
182
+ {/each}
183
+
184
+ <!-- axes -->
185
+ <line class="st-hlcChart__axis" x1={MARGIN.left} x2={MARGIN.left} y1={MARGIN.top} y2={height - MARGIN.bottom} />
186
+ <line class="st-hlcChart__axis" x1={MARGIN.left} x2={width - MARGIN.right} y1={height - MARGIN.bottom} y2={height - MARGIN.bottom} />
187
+
188
+ <!-- clé composite pour éviter les doublons -->
189
+ {#each bars as b, i (`${i}-${b.datum.label}`)}
190
+ <g
191
+ class="st-hlcChart__bar st-hlcChart__bar--{b.bullish ? 'up' : 'down'}"
192
+ class:st-hlcChart__bar--dim={hoveredIndex !== null && hoveredIndex !== i}
193
+ >
194
+ <!-- barre verticale low → high -->
195
+ <line
196
+ class="st-hlcChart__range"
197
+ x1={b.centerX}
198
+ x2={b.centerX}
199
+ y1={b.barHighY}
200
+ y2={b.barLowY}
201
+ data-chart-index={i}
202
+ />
203
+ <!-- tick close (droite) -->
204
+ <line
205
+ class="st-hlcChart__close"
206
+ x1={b.centerX}
207
+ x2={b.closeX}
208
+ y1={b.closeY}
209
+ y2={b.closeY}
210
+ data-chart-index={i}
211
+ />
212
+ </g>
213
+ <!-- category label -->
214
+ <text
215
+ class="st-hlcChart__categoryLabel"
216
+ x={b.centerX}
217
+ y={height - MARGIN.bottom + 16}
218
+ text-anchor="middle"
219
+ >
220
+ {b.datum.label}
221
+ </text>
222
+ {/each}
223
+ </svg>
224
+ </div>
225
+
226
+ <ChartDataList {label} items={dataValueItems} />
227
+
228
+ {#if hoveredIndex !== null && bars[hoveredIndex]}
229
+ {@const b = bars[hoveredIndex]}
230
+ <div
231
+ class="st-hlcChart__tooltip"
232
+ role="presentation"
233
+ style="left: {(b.centerX / width) * 100}%; top: {(b.tooltipY / height) * 100}%"
234
+ >
235
+ <span class="st-hlcChart__tooltipLabel">{b.datum.label}</span>
236
+ <span class="st-hlcChart__tooltipValue">H {b.datum.high} L {b.datum.low} C {b.datum.close}</span>
237
+ </div>
238
+ {/if}
239
+ </div>
240
+
241
+ <style>
242
+ .st-hlcChart {
243
+ color: var(--st-semantic-text-secondary);
244
+ display: block;
245
+ font-family: inherit;
246
+ position: relative;
247
+ width: 100%;
248
+ }
249
+
250
+ .st-hlcChart svg {
251
+ display: block;
252
+ overflow: visible;
253
+ }
254
+
255
+ .st-hlcChart__visual {
256
+ display: block;
257
+ }
258
+
259
+ .st-hlcChart__axis {
260
+ stroke: var(--st-semantic-border-subtle);
261
+ stroke-width: 1;
262
+ }
263
+
264
+ .st-hlcChart__grid {
265
+ stroke: var(--st-semantic-border-subtle);
266
+ stroke-dasharray: 2 3;
267
+ stroke-width: 1;
268
+ opacity: 0.7;
269
+ }
270
+
271
+ .st-hlcChart__bar {
272
+ cursor: pointer;
273
+ transition: opacity 120ms ease;
274
+ }
275
+
276
+ .st-hlcChart__bar--dim {
277
+ opacity: 0.4;
278
+ }
279
+
280
+ .st-hlcChart__range,
281
+ .st-hlcChart__close {
282
+ stroke-width: 1.75;
283
+ stroke-linecap: round;
284
+ }
285
+
286
+ .st-hlcChart__bar--up :is(.st-hlcChart__range, .st-hlcChart__close) {
287
+ stroke: var(--st-semantic-feedback-success);
288
+ }
289
+
290
+ .st-hlcChart__bar--down :is(.st-hlcChart__range, .st-hlcChart__close) {
291
+ stroke: var(--st-semantic-feedback-error);
292
+ }
293
+
294
+ @media (prefers-reduced-motion: reduce) {
295
+ .st-hlcChart__bar {
296
+ transition: none;
297
+ }
298
+ }
299
+
300
+ .st-hlcChart__tickLabel,
301
+ .st-hlcChart__categoryLabel {
302
+ fill: var(--st-semantic-text-secondary);
303
+ font-size: 0.6875rem;
304
+ }
305
+
306
+ .st-hlcChart__tooltip {
307
+ background: var(--st-semantic-surface-inverse);
308
+ border-radius: var(--st-radius-sm, 0.25rem);
309
+ color: var(--st-semantic-text-inverse);
310
+ display: inline-flex;
311
+ flex-direction: column;
312
+ font-size: 0.75rem;
313
+ gap: 0.125rem;
314
+ line-height: 1.2;
315
+ padding: 0.375rem 0.5rem;
316
+ pointer-events: none;
317
+ position: absolute;
318
+ transform: translate(-50%, calc(-100% - 8px));
319
+ white-space: nowrap;
320
+ z-index: 1;
321
+ }
322
+
323
+ .st-hlcChart__tooltipLabel {
324
+ font-weight: 600;
325
+ }
326
+
327
+ .st-hlcChart__tooltipValue {
328
+ opacity: 0.85;
329
+ }
330
+ </style>
@@ -0,0 +1,32 @@
1
+ /**
2
+ * HLCChart - barres high/low/close (bâtons financiers, variante d'OHLC sans open).
3
+ * Barre verticale du low au high, tick droite au niveau de la clôture.
4
+ * La couleur hausse/baisse compare close à la clôture précédente.
5
+ * API canonique (référence Svelte, React/Vue doivent s'aligner)
6
+ *
7
+ * Props obligatoires :
8
+ * data HLCChartDatum[] - tableau {label, high, low, close}
9
+ * label string
10
+ *
11
+ * Props optionnelles :
12
+ * width number (défaut 480)
13
+ * height number (défaut 240)
14
+ * class string
15
+ */
16
+ export type HLCChartDatum = {
17
+ label: string;
18
+ high: number;
19
+ low: number;
20
+ close: number;
21
+ };
22
+ type HLCChartProps = {
23
+ data: HLCChartDatum[];
24
+ label: string;
25
+ width?: number;
26
+ height?: number;
27
+ class?: string;
28
+ };
29
+ declare const HLCChart: import("svelte").Component<HLCChartProps, {}, "">;
30
+ type HLCChart = ReturnType<typeof HLCChart>;
31
+ export default HLCChart;
32
+ //# sourceMappingURL=HLCChart.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HLCChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/HLCChart.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAMF,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAiLJ,QAAA,MAAM,QAAQ,mDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}