@sentropic/design-system-svelte 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BoxPlotChart.svelte +302 -0
- package/dist/BoxPlotChart.svelte.d.ts +40 -0
- package/dist/BoxPlotChart.svelte.d.ts.map +1 -0
- package/dist/HeatmapChart.svelte +337 -0
- package/dist/HeatmapChart.svelte.d.ts +35 -0
- package/dist/HeatmapChart.svelte.d.ts.map +1 -0
- package/dist/HistogramChart.svelte +294 -0
- package/dist/HistogramChart.svelte.d.ts +38 -0
- package/dist/HistogramChart.svelte.d.ts.map +1 -0
- package/dist/RadarChart.svelte +340 -0
- package/dist/RadarChart.svelte.d.ts +43 -0
- package/dist/RadarChart.svelte.d.ts.map +1 -0
- package/dist/SankeyChart.svelte +364 -0
- package/dist/SankeyChart.svelte.d.ts +45 -0
- package/dist/SankeyChart.svelte.d.ts.map +1 -0
- package/dist/SunburstChart.svelte +388 -0
- package/dist/SunburstChart.svelte.d.ts +39 -0
- package/dist/SunburstChart.svelte.d.ts.map +1 -0
- package/dist/chartContrast.d.ts +0 -4
- package/dist/chartContrast.d.ts.map +1 -1
- package/dist/chartContrast.js +4 -56
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* RadarChart - API canonique (référence Svelte, React/Vue doivent s'aligner)
|
|
4
|
+
*
|
|
5
|
+
* Props obligatoires :
|
|
6
|
+
* axes string[] - libellés des axes (N axes = polygone à N côtés)
|
|
7
|
+
* series RadarChartSeries[] - séries {label, values: number[], tone?}
|
|
8
|
+
* label string - aria-label du graphique
|
|
9
|
+
*
|
|
10
|
+
* Props optionnelles :
|
|
11
|
+
* maxValue number (défaut : max des valeurs, min 1) - valeur plafond du
|
|
12
|
+
* domaine. PAS de plancher arbitraire à 100 - l'échelle
|
|
13
|
+
* s'adapte aux données. React/Vue doivent supprimer leur
|
|
14
|
+
* `Math.max(100, …)` pour s'aligner sur ce comportement.
|
|
15
|
+
* levels number (défaut 4) - nombre de cercles / anneaux de grille
|
|
16
|
+
* legend boolean (défaut false) - affiche la légende des séries
|
|
17
|
+
* width number (défaut 360) - largeur du viewBox en px
|
|
18
|
+
* height number (défaut 320) - hauteur du viewBox en px
|
|
19
|
+
* class string - classe CSS supplémentaire
|
|
20
|
+
*
|
|
21
|
+
* NaN/vide : les valeurs non-finies sont exclues du calcul du domaine
|
|
22
|
+
* (filter Number.isFinite). Séries vides → polygone nul sans crash.
|
|
23
|
+
*/
|
|
24
|
+
export type RadarChartTone =
|
|
25
|
+
| "category1"
|
|
26
|
+
| "category2"
|
|
27
|
+
| "category3"
|
|
28
|
+
| "category4"
|
|
29
|
+
| "category5"
|
|
30
|
+
| "category6"
|
|
31
|
+
| "category7"
|
|
32
|
+
| "category8";
|
|
33
|
+
|
|
34
|
+
export type RadarChartSeries = {
|
|
35
|
+
label: string;
|
|
36
|
+
values: number[];
|
|
37
|
+
tone?: RadarChartTone;
|
|
38
|
+
};
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<script lang="ts">
|
|
42
|
+
import ChartDataList from "./ChartDataList.svelte";
|
|
43
|
+
|
|
44
|
+
type RadarChartProps = {
|
|
45
|
+
axes: string[];
|
|
46
|
+
series: RadarChartSeries[];
|
|
47
|
+
label: string;
|
|
48
|
+
legend?: boolean;
|
|
49
|
+
maxValue?: number;
|
|
50
|
+
levels?: number;
|
|
51
|
+
width?: number;
|
|
52
|
+
height?: number;
|
|
53
|
+
class?: string;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
let {
|
|
57
|
+
axes,
|
|
58
|
+
series,
|
|
59
|
+
label,
|
|
60
|
+
legend = false,
|
|
61
|
+
maxValue,
|
|
62
|
+
levels = 4,
|
|
63
|
+
width = 360,
|
|
64
|
+
height = 320,
|
|
65
|
+
class: className
|
|
66
|
+
}: RadarChartProps = $props();
|
|
67
|
+
|
|
68
|
+
const TONES = [
|
|
69
|
+
"category1",
|
|
70
|
+
"category2",
|
|
71
|
+
"category3",
|
|
72
|
+
"category4",
|
|
73
|
+
"category5",
|
|
74
|
+
"category6",
|
|
75
|
+
"category7",
|
|
76
|
+
"category8"
|
|
77
|
+
] as const;
|
|
78
|
+
|
|
79
|
+
function pointAt(cx: number, cy: number, radius: number, angle: number) {
|
|
80
|
+
return {
|
|
81
|
+
x: cx + radius * Math.cos(angle),
|
|
82
|
+
y: cy + radius * Math.sin(angle)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let hoveredIndex: number | null = $state(null);
|
|
87
|
+
|
|
88
|
+
const center = $derived({ x: width / 2, y: height / 2 });
|
|
89
|
+
const radius = $derived(Math.max(Math.min(width, height) / 2 - 42, 1));
|
|
90
|
+
const safeLevelCount = $derived(Math.max(1, Math.floor(levels)));
|
|
91
|
+
const domainMax = $derived.by(() => {
|
|
92
|
+
if (Number.isFinite(maxValue) && (maxValue ?? 0) > 0) return maxValue as number;
|
|
93
|
+
const values = series.flatMap((entry) => entry.values).filter(Number.isFinite);
|
|
94
|
+
return Math.max(1, ...values);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const axisEntries = $derived(
|
|
98
|
+
axes.map((axis, index) => {
|
|
99
|
+
const angle = -Math.PI / 2 + (Math.PI * 2 * index) / Math.max(axes.length, 1);
|
|
100
|
+
const end = pointAt(center.x, center.y, radius, angle);
|
|
101
|
+
const labelPoint = pointAt(center.x, center.y, radius + 22, angle);
|
|
102
|
+
return { axis, index, angle, end, labelPoint };
|
|
103
|
+
})
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const rings = $derived(
|
|
107
|
+
Array.from({ length: safeLevelCount }, (_, index) => {
|
|
108
|
+
const ringRadius = (radius * (index + 1)) / safeLevelCount;
|
|
109
|
+
return axisEntries.map((axis) => pointAt(center.x, center.y, ringRadius, axis.angle)).map((point) => `${point.x},${point.y}`).join(" ");
|
|
110
|
+
})
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
const polygons = $derived(
|
|
114
|
+
series.map((entry, seriesIndex) => {
|
|
115
|
+
const tone = entry.tone ?? TONES[seriesIndex % TONES.length];
|
|
116
|
+
const points = axes.map((_, axisIndex) => {
|
|
117
|
+
const value = Math.max(0, entry.values[axisIndex] ?? 0);
|
|
118
|
+
const scaled = Math.min(value / domainMax, 1) * radius;
|
|
119
|
+
const angle = -Math.PI / 2 + (Math.PI * 2 * axisIndex) / Math.max(axes.length, 1);
|
|
120
|
+
return pointAt(center.x, center.y, scaled, angle);
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
entry,
|
|
124
|
+
tone,
|
|
125
|
+
points,
|
|
126
|
+
pointString: points.map((point) => `${point.x},${point.y}`).join(" ")
|
|
127
|
+
};
|
|
128
|
+
})
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
const legendItems = $derived(series.map((entry, index) => ({ label: entry.label, tone: entry.tone ?? TONES[index % TONES.length] })));
|
|
132
|
+
|
|
133
|
+
const dataValueItems = $derived(
|
|
134
|
+
series.flatMap((entry) => axes.map((axis, axisIndex) => `${entry.label}, ${axis}: ${entry.values[axisIndex] ?? 0}`))
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
function handleVisualPointerMove(event: PointerEvent) {
|
|
138
|
+
const target = event.target;
|
|
139
|
+
if (!(target instanceof Element)) {
|
|
140
|
+
hoveredIndex = null;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const index = Number(target.getAttribute("data-chart-index"));
|
|
144
|
+
hoveredIndex = Number.isInteger(index) ? index : null;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const classes = () => ["st-radarChart", className].filter(Boolean).join(" ");
|
|
148
|
+
</script>
|
|
149
|
+
|
|
150
|
+
<div class={classes()}>
|
|
151
|
+
<div
|
|
152
|
+
class="st-radarChart__visual"
|
|
153
|
+
role="img"
|
|
154
|
+
aria-label={label}
|
|
155
|
+
onpointermove={handleVisualPointerMove}
|
|
156
|
+
onpointerleave={() => (hoveredIndex = null)}
|
|
157
|
+
>
|
|
158
|
+
<svg
|
|
159
|
+
viewBox="0 0 {width} {height}"
|
|
160
|
+
preserveAspectRatio="xMidYMid meet"
|
|
161
|
+
width="100%"
|
|
162
|
+
height="100%"
|
|
163
|
+
focusable="false"
|
|
164
|
+
aria-hidden="true"
|
|
165
|
+
>
|
|
166
|
+
{#each rings as ring, i (i)}
|
|
167
|
+
<polygon class="st-radarChart__ring" points={ring} />
|
|
168
|
+
{/each}
|
|
169
|
+
|
|
170
|
+
{#each axisEntries as axis (axis.axis)}
|
|
171
|
+
<line class="st-radarChart__axis" x1={center.x} x2={axis.end.x} y1={center.y} y2={axis.end.y} />
|
|
172
|
+
<text
|
|
173
|
+
class="st-radarChart__axisLabel"
|
|
174
|
+
x={axis.labelPoint.x}
|
|
175
|
+
y={axis.labelPoint.y}
|
|
176
|
+
text-anchor="middle"
|
|
177
|
+
dominant-baseline="middle"
|
|
178
|
+
>
|
|
179
|
+
{axis.axis}
|
|
180
|
+
</text>
|
|
181
|
+
{/each}
|
|
182
|
+
|
|
183
|
+
{#each polygons as polygon, i (polygon.entry.label)}
|
|
184
|
+
<polygon
|
|
185
|
+
class="st-radarChart__polygon st-radarChart__polygon--{polygon.tone}"
|
|
186
|
+
class:st-radarChart__polygon--dim={hoveredIndex !== null && hoveredIndex !== i}
|
|
187
|
+
points={polygon.pointString}
|
|
188
|
+
data-chart-index={i}
|
|
189
|
+
/>
|
|
190
|
+
{#each polygon.points as point, pointIndex (`${polygon.entry.label}-${pointIndex}`)}
|
|
191
|
+
<circle class="st-radarChart__point st-radarChart__point--{polygon.tone}" cx={point.x} cy={point.y} r="3" data-chart-index={i} />
|
|
192
|
+
{/each}
|
|
193
|
+
{/each}
|
|
194
|
+
</svg>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<ChartDataList {label} items={dataValueItems} />
|
|
198
|
+
|
|
199
|
+
{#if hoveredIndex !== null && polygons[hoveredIndex]}
|
|
200
|
+
{@const polygon = polygons[hoveredIndex]}
|
|
201
|
+
<div class="st-radarChart__tooltip" role="presentation">
|
|
202
|
+
<span class="st-radarChart__tooltipLabel">{polygon.entry.label}</span>
|
|
203
|
+
</div>
|
|
204
|
+
{/if}
|
|
205
|
+
|
|
206
|
+
{#if legend && legendItems.length > 0}
|
|
207
|
+
<ul class="st-radarChart__legend" aria-hidden="true">
|
|
208
|
+
{#each legendItems as item (item.label)}
|
|
209
|
+
<li class="st-radarChart__legendItem">
|
|
210
|
+
<span class="st-radarChart__legendSwatch st-radarChart__legendSwatch--{item.tone}"></span>
|
|
211
|
+
{item.label}
|
|
212
|
+
</li>
|
|
213
|
+
{/each}
|
|
214
|
+
</ul>
|
|
215
|
+
{/if}
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<style>
|
|
219
|
+
.st-radarChart {
|
|
220
|
+
color: var(--st-semantic-text-secondary);
|
|
221
|
+
display: block;
|
|
222
|
+
font-family: inherit;
|
|
223
|
+
max-width: 100%;
|
|
224
|
+
position: relative;
|
|
225
|
+
width: 100%;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.st-radarChart svg,
|
|
229
|
+
.st-radarChart__visual {
|
|
230
|
+
display: block;
|
|
231
|
+
overflow: visible;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.st-radarChart__ring {
|
|
235
|
+
fill: none;
|
|
236
|
+
stroke: var(--st-semantic-border-subtle);
|
|
237
|
+
stroke-width: 1;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.st-radarChart__axis {
|
|
241
|
+
stroke: var(--st-semantic-border-subtle);
|
|
242
|
+
stroke-width: 1;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.st-radarChart__axisLabel {
|
|
246
|
+
fill: var(--st-semantic-text-secondary);
|
|
247
|
+
font-size: 0.72rem;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.st-radarChart__polygon {
|
|
251
|
+
cursor: pointer;
|
|
252
|
+
fill-opacity: 0.16;
|
|
253
|
+
stroke-width: 2;
|
|
254
|
+
transition: opacity 120ms ease;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.st-radarChart__polygon--dim {
|
|
258
|
+
opacity: 0.35;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
@media (prefers-reduced-motion: reduce) {
|
|
262
|
+
.st-radarChart__polygon {
|
|
263
|
+
transition: none;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.st-radarChart__point {
|
|
268
|
+
stroke: var(--st-semantic-surface-default, Canvas);
|
|
269
|
+
stroke-width: 1;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.st-radarChart__polygon--category1,
|
|
273
|
+
.st-radarChart__point--category1,
|
|
274
|
+
.st-radarChart__legendSwatch--category1 { fill: var(--st-semantic-data-category1); stroke: var(--st-semantic-data-category1); background: var(--st-semantic-data-category1); }
|
|
275
|
+
.st-radarChart__polygon--category2,
|
|
276
|
+
.st-radarChart__point--category2,
|
|
277
|
+
.st-radarChart__legendSwatch--category2 { fill: var(--st-semantic-data-category2); stroke: var(--st-semantic-data-category2); background: var(--st-semantic-data-category2); }
|
|
278
|
+
.st-radarChart__polygon--category3,
|
|
279
|
+
.st-radarChart__point--category3,
|
|
280
|
+
.st-radarChart__legendSwatch--category3 { fill: var(--st-semantic-data-category3); stroke: var(--st-semantic-data-category3); background: var(--st-semantic-data-category3); }
|
|
281
|
+
.st-radarChart__polygon--category4,
|
|
282
|
+
.st-radarChart__point--category4,
|
|
283
|
+
.st-radarChart__legendSwatch--category4 { fill: var(--st-semantic-data-category4); stroke: var(--st-semantic-data-category4); background: var(--st-semantic-data-category4); }
|
|
284
|
+
.st-radarChart__polygon--category5,
|
|
285
|
+
.st-radarChart__point--category5,
|
|
286
|
+
.st-radarChart__legendSwatch--category5 { fill: var(--st-semantic-data-category5); stroke: var(--st-semantic-data-category5); background: var(--st-semantic-data-category5); }
|
|
287
|
+
.st-radarChart__polygon--category6,
|
|
288
|
+
.st-radarChart__point--category6,
|
|
289
|
+
.st-radarChart__legendSwatch--category6 { fill: var(--st-semantic-data-category6); stroke: var(--st-semantic-data-category6); background: var(--st-semantic-data-category6); }
|
|
290
|
+
.st-radarChart__polygon--category7,
|
|
291
|
+
.st-radarChart__point--category7,
|
|
292
|
+
.st-radarChart__legendSwatch--category7 { fill: var(--st-semantic-data-category7); stroke: var(--st-semantic-data-category7); background: var(--st-semantic-data-category7); }
|
|
293
|
+
.st-radarChart__polygon--category8,
|
|
294
|
+
.st-radarChart__point--category8,
|
|
295
|
+
.st-radarChart__legendSwatch--category8 { fill: var(--st-semantic-data-category8); stroke: var(--st-semantic-data-category8); background: var(--st-semantic-data-category8); }
|
|
296
|
+
|
|
297
|
+
.st-radarChart__legend {
|
|
298
|
+
display: flex;
|
|
299
|
+
flex-wrap: wrap;
|
|
300
|
+
gap: var(--st-spacing-2, 0.5rem) var(--st-spacing-4, 1rem);
|
|
301
|
+
list-style: none;
|
|
302
|
+
margin: var(--st-spacing-2, 0.5rem) 0 0;
|
|
303
|
+
padding: 0;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.st-radarChart__legendItem {
|
|
307
|
+
align-items: center;
|
|
308
|
+
color: var(--st-semantic-text-secondary);
|
|
309
|
+
display: inline-flex;
|
|
310
|
+
font-size: 0.75rem;
|
|
311
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.st-radarChart__legendSwatch {
|
|
315
|
+
display: inline-block;
|
|
316
|
+
height: 0.625rem;
|
|
317
|
+
width: 0.625rem;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.st-radarChart__tooltip {
|
|
321
|
+
background: var(--st-semantic-surface-inverse);
|
|
322
|
+
border-radius: var(--st-radius-sm, 0.25rem);
|
|
323
|
+
color: var(--st-semantic-text-inverse);
|
|
324
|
+
display: inline-flex;
|
|
325
|
+
font-size: 0.75rem;
|
|
326
|
+
left: 50%;
|
|
327
|
+
line-height: 1.2;
|
|
328
|
+
padding: 0.375rem 0.5rem;
|
|
329
|
+
pointer-events: none;
|
|
330
|
+
position: absolute;
|
|
331
|
+
top: 50%;
|
|
332
|
+
transform: translate(-50%, -50%);
|
|
333
|
+
white-space: nowrap;
|
|
334
|
+
z-index: 1;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
.st-radarChart__tooltipLabel {
|
|
338
|
+
font-weight: 600;
|
|
339
|
+
}
|
|
340
|
+
</style>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RadarChart - API canonique (référence Svelte, React/Vue doivent s'aligner)
|
|
3
|
+
*
|
|
4
|
+
* Props obligatoires :
|
|
5
|
+
* axes string[] - libellés des axes (N axes = polygone à N côtés)
|
|
6
|
+
* series RadarChartSeries[] - séries {label, values: number[], tone?}
|
|
7
|
+
* label string - aria-label du graphique
|
|
8
|
+
*
|
|
9
|
+
* Props optionnelles :
|
|
10
|
+
* maxValue number (défaut : max des valeurs, min 1) - valeur plafond du
|
|
11
|
+
* domaine. PAS de plancher arbitraire à 100 - l'échelle
|
|
12
|
+
* s'adapte aux données. React/Vue doivent supprimer leur
|
|
13
|
+
* `Math.max(100, …)` pour s'aligner sur ce comportement.
|
|
14
|
+
* levels number (défaut 4) - nombre de cercles / anneaux de grille
|
|
15
|
+
* legend boolean (défaut false) - affiche la légende des séries
|
|
16
|
+
* width number (défaut 360) - largeur du viewBox en px
|
|
17
|
+
* height number (défaut 320) - hauteur du viewBox en px
|
|
18
|
+
* class string - classe CSS supplémentaire
|
|
19
|
+
*
|
|
20
|
+
* NaN/vide : les valeurs non-finies sont exclues du calcul du domaine
|
|
21
|
+
* (filter Number.isFinite). Séries vides → polygone nul sans crash.
|
|
22
|
+
*/
|
|
23
|
+
export type RadarChartTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8";
|
|
24
|
+
export type RadarChartSeries = {
|
|
25
|
+
label: string;
|
|
26
|
+
values: number[];
|
|
27
|
+
tone?: RadarChartTone;
|
|
28
|
+
};
|
|
29
|
+
type RadarChartProps = {
|
|
30
|
+
axes: string[];
|
|
31
|
+
series: RadarChartSeries[];
|
|
32
|
+
label: string;
|
|
33
|
+
legend?: boolean;
|
|
34
|
+
maxValue?: number;
|
|
35
|
+
levels?: number;
|
|
36
|
+
width?: number;
|
|
37
|
+
height?: number;
|
|
38
|
+
class?: string;
|
|
39
|
+
};
|
|
40
|
+
declare const RadarChart: import("svelte").Component<RadarChartProps, {}, "">;
|
|
41
|
+
type RadarChart = ReturnType<typeof RadarChart>;
|
|
42
|
+
export default RadarChart;
|
|
43
|
+
//# sourceMappingURL=RadarChart.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadarChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/RadarChart.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAMF,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAqJJ,QAAA,MAAM,UAAU,qDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|