@sentropic/design-system-svelte 0.34.50 → 0.34.52
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/README.md +62 -0
- package/dist/AnomalySwimLaneChart.svelte +10 -1
- package/dist/AnomalySwimLaneChart.svelte.d.ts +2 -0
- package/dist/AnomalySwimLaneChart.svelte.d.ts.map +1 -1
- package/dist/CalendarHeatmapChart.svelte +11 -1
- package/dist/CalendarHeatmapChart.svelte.d.ts +2 -0
- package/dist/CalendarHeatmapChart.svelte.d.ts.map +1 -1
- package/dist/Combobox.svelte +5 -1
- package/dist/Combobox.svelte.d.ts.map +1 -1
- package/dist/ContourChart.svelte +76 -13
- package/dist/ContourChart.svelte.d.ts +3 -1
- package/dist/ContourChart.svelte.d.ts.map +1 -1
- package/dist/CopyButton.svelte +9 -3
- package/dist/CopyButton.svelte.d.ts +1 -0
- package/dist/CopyButton.svelte.d.ts.map +1 -1
- package/dist/Dashboard.svelte +155 -0
- package/dist/Dashboard.svelte.d.ts +21 -0
- package/dist/Dashboard.svelte.d.ts.map +1 -0
- package/dist/DashboardGrid.svelte +237 -0
- package/dist/DashboardGrid.svelte.d.ts +24 -0
- package/dist/DashboardGrid.svelte.d.ts.map +1 -0
- package/dist/DataTable.svelte +3 -1
- package/dist/DataTable.svelte.d.ts +1 -0
- package/dist/DataTable.svelte.d.ts.map +1 -1
- package/dist/DatePicker.svelte +33 -28
- package/dist/DatePicker.svelte.d.ts.map +1 -1
- package/dist/Density2DChart.svelte +10 -1
- package/dist/Density2DChart.svelte.d.ts +2 -0
- package/dist/Density2DChart.svelte.d.ts.map +1 -1
- package/dist/Dropdown.svelte +40 -11
- package/dist/Dropdown.svelte.d.ts +1 -0
- package/dist/Dropdown.svelte.d.ts.map +1 -1
- package/dist/EventFeedPanel.svelte +3 -3
- package/dist/EventFeedPanel.svelte.d.ts +1 -1
- package/dist/EventFeedPanel.svelte.d.ts.map +1 -1
- package/dist/FileUploader.svelte +7 -3
- package/dist/Footer.svelte +75 -11
- package/dist/Footer.svelte.d.ts +16 -6
- package/dist/Footer.svelte.d.ts.map +1 -1
- package/dist/ForceGraph.svelte +9 -3
- package/dist/ForceGraph.svelte.d.ts +4 -0
- package/dist/ForceGraph.svelte.d.ts.map +1 -1
- package/dist/HeatmapChart.svelte +39 -3
- package/dist/HeatmapChart.svelte.d.ts +4 -1
- package/dist/HeatmapChart.svelte.d.ts.map +1 -1
- package/dist/KanbanBoard.svelte +144 -0
- package/dist/KanbanBoard.svelte.d.ts +23 -0
- package/dist/KanbanBoard.svelte.d.ts.map +1 -0
- package/dist/ListReportPage.svelte +184 -0
- package/dist/ListReportPage.svelte.d.ts +46 -0
- package/dist/ListReportPage.svelte.d.ts.map +1 -0
- package/dist/MasterDetail.svelte +267 -0
- package/dist/MasterDetail.svelte.d.ts +35 -0
- package/dist/MasterDetail.svelte.d.ts.map +1 -0
- package/dist/MultiSelect.svelte +20 -11
- package/dist/MultiSelect.svelte.d.ts +1 -0
- package/dist/MultiSelect.svelte.d.ts.map +1 -1
- package/dist/NavItem.svelte +6 -6
- package/dist/ObjectPage.svelte +222 -0
- package/dist/ObjectPage.svelte.d.ts +46 -0
- package/dist/ObjectPage.svelte.d.ts.map +1 -0
- package/dist/OrderedList.svelte +7 -12
- package/dist/OrderedList.svelte.d.ts.map +1 -1
- package/dist/PaginationNav.svelte +10 -4
- package/dist/PaginationNav.svelte.d.ts +1 -0
- package/dist/PaginationNav.svelte.d.ts.map +1 -1
- package/dist/PointAndFigureChart.svelte +18 -11
- package/dist/PointAndFigureChart.svelte.d.ts +1 -1
- package/dist/PointAndFigureChart.svelte.d.ts.map +1 -1
- package/dist/RenkoChart.svelte +40 -13
- package/dist/RenkoChart.svelte.d.ts +1 -1
- package/dist/RenkoChart.svelte.d.ts.map +1 -1
- package/dist/VectorFieldChart.svelte +5 -5
- package/dist/VectorFieldChart.svelte.d.ts +1 -1
- package/dist/VectorFieldChart.svelte.d.ts.map +1 -1
- package/dist/WindBarbChart.svelte +5 -5
- package/dist/WindBarbChart.svelte.d.ts +1 -1
- package/dist/WindBarbChart.svelte.d.ts.map +1 -1
- package/dist/Wizard.svelte +125 -0
- package/dist/Wizard.svelte.d.ts +25 -0
- package/dist/Wizard.svelte.d.ts.map +1 -0
- package/dist/index.d.ts +24 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventFeedPanel.svelte.d.ts","sourceRoot":"","sources":["../src/lib/EventFeedPanel.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG;IAChC,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,EAAE,sBAAsB,CAAC;IACjC,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"EventFeedPanel.svelte.d.ts","sourceRoot":"","sources":["../src/lib/EventFeedPanel.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG;IAChC,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,EAAE,sBAAsB,CAAC;IACjC,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA8EJ,QAAA,MAAM,cAAc,yDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
package/dist/FileUploader.svelte
CHANGED
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
{/if}
|
|
237
237
|
</span>
|
|
238
238
|
<span class="st-fileUploader__itemMeta">
|
|
239
|
-
<span class="st-fileUploader__itemName">{item.file.name}</span>
|
|
239
|
+
<span class="st-fileUploader__itemName st-fileUploader__name">{item.file.name}</span>
|
|
240
240
|
<span class="st-fileUploader__itemSize">{formatSize(item.file.size)}</span>
|
|
241
241
|
{#if item.status === "error" && item.error}
|
|
242
242
|
<span class="st-fileUploader__itemError">{item.error}</span>
|
|
@@ -274,7 +274,7 @@
|
|
|
274
274
|
{/if}
|
|
275
275
|
</span>
|
|
276
276
|
<span class="st-fileUploader__itemMeta">
|
|
277
|
-
<span class="st-fileUploader__itemName">{file.name}</span>
|
|
277
|
+
<span class="st-fileUploader__itemName st-fileUploader__name">{file.name}</span>
|
|
278
278
|
<span class="st-fileUploader__itemSize">{formatSize(file.size)}</span>
|
|
279
279
|
{#if itemError}
|
|
280
280
|
<span class="st-fileUploader__itemError">{itemError}</span>
|
|
@@ -407,7 +407,10 @@
|
|
|
407
407
|
}
|
|
408
408
|
|
|
409
409
|
.st-fileUploader__trigger:hover:not(:disabled) {
|
|
410
|
-
background: var(
|
|
410
|
+
background: var(
|
|
411
|
+
--st-component-button-anatomy-states-hover-bg,
|
|
412
|
+
color-mix(in srgb, var(--st-semantic-action-primary) 85%, black)
|
|
413
|
+
);
|
|
411
414
|
}
|
|
412
415
|
|
|
413
416
|
.st-fileUploader__trigger:focus-visible {
|
|
@@ -491,6 +494,7 @@
|
|
|
491
494
|
|
|
492
495
|
.st-fileUploader__itemMeta {
|
|
493
496
|
display: grid;
|
|
497
|
+
flex: 1 1 0;
|
|
494
498
|
gap: 0.125rem;
|
|
495
499
|
min-width: 0;
|
|
496
500
|
}
|
package/dist/Footer.svelte
CHANGED
|
@@ -2,18 +2,23 @@
|
|
|
2
2
|
import type { Snippet } from "svelte";
|
|
3
3
|
import type { HTMLAttributes } from "svelte/elements";
|
|
4
4
|
|
|
5
|
+
type LinkItem = { label: string; href: string };
|
|
6
|
+
type ColumnItem = { title?: string; links: LinkItem[] };
|
|
7
|
+
|
|
5
8
|
type FooterProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
|
|
6
9
|
/** Texte de copyright (bas de pied de page). */
|
|
7
10
|
copyright?: string;
|
|
8
11
|
/** aria-label de la région contentinfo. */
|
|
9
12
|
label?: string;
|
|
10
13
|
class?: string;
|
|
11
|
-
/** Marque / logo
|
|
12
|
-
brand?: Snippet;
|
|
13
|
-
/** Colonnes de liens
|
|
14
|
-
columns?: Snippet;
|
|
15
|
-
/** Liens légaux
|
|
16
|
-
legal?: Snippet;
|
|
14
|
+
/** Marque / logo : Snippet OU chaîne de texte. */
|
|
15
|
+
brand?: Snippet | string;
|
|
16
|
+
/** Colonnes de liens : Snippet OU tableau de données. */
|
|
17
|
+
columns?: Snippet | ColumnItem[];
|
|
18
|
+
/** Liens légaux : Snippet OU tableau de données. */
|
|
19
|
+
legal?: Snippet | LinkItem[];
|
|
20
|
+
/** Alias data-driven pour les liens légaux (parité React). */
|
|
21
|
+
legalLinks?: LinkItem[];
|
|
17
22
|
/** Contenu libre additionnel sous la barre du bas. */
|
|
18
23
|
children?: Snippet;
|
|
19
24
|
};
|
|
@@ -25,23 +30,50 @@
|
|
|
25
30
|
brand,
|
|
26
31
|
columns,
|
|
27
32
|
legal,
|
|
33
|
+
legalLinks,
|
|
28
34
|
children,
|
|
29
35
|
...rest
|
|
30
36
|
}: FooterProps = $props();
|
|
31
37
|
|
|
38
|
+
const isSnippet = (v: unknown): v is Snippet => typeof v === "function";
|
|
39
|
+
|
|
40
|
+
// Résoudre la zone légale : prop `legal` OU prop `legalLinks`
|
|
41
|
+
const resolvedLegal = $derived(legal ?? legalLinks);
|
|
42
|
+
|
|
32
43
|
const classes = () => ["st-footer", className].filter(Boolean).join(" ");
|
|
33
44
|
const hasTop = () => Boolean(brand || columns);
|
|
34
|
-
const hasBottom = () => Boolean(copyright ||
|
|
45
|
+
const hasBottom = () => Boolean(copyright || resolvedLegal);
|
|
35
46
|
</script>
|
|
36
47
|
|
|
37
48
|
<footer {...rest} class={classes()} aria-label={label}>
|
|
38
49
|
{#if hasTop()}
|
|
39
50
|
<div class="st-footer__top">
|
|
40
51
|
{#if brand}
|
|
41
|
-
<div class="st-footer__brand">
|
|
52
|
+
<div class="st-footer__brand">
|
|
53
|
+
{#if isSnippet(brand)}
|
|
54
|
+
{@render brand()}
|
|
55
|
+
{:else}
|
|
56
|
+
{brand}
|
|
57
|
+
{/if}
|
|
58
|
+
</div>
|
|
42
59
|
{/if}
|
|
43
60
|
{#if columns}
|
|
44
|
-
<div class="st-footer__columns">
|
|
61
|
+
<div class="st-footer__columns">
|
|
62
|
+
{#if isSnippet(columns)}
|
|
63
|
+
{@render columns()}
|
|
64
|
+
{:else if Array.isArray(columns)}
|
|
65
|
+
{#each columns as col}
|
|
66
|
+
<nav>
|
|
67
|
+
{#if col.title}<h2 class="st-footer__col-title">{col.title}</h2>{/if}
|
|
68
|
+
<ul class="st-footer__col-links">
|
|
69
|
+
{#each col.links as link}
|
|
70
|
+
<li><a href={link.href}>{link.label}</a></li>
|
|
71
|
+
{/each}
|
|
72
|
+
</ul>
|
|
73
|
+
</nav>
|
|
74
|
+
{/each}
|
|
75
|
+
{/if}
|
|
76
|
+
</div>
|
|
45
77
|
{/if}
|
|
46
78
|
</div>
|
|
47
79
|
{/if}
|
|
@@ -51,9 +83,15 @@
|
|
|
51
83
|
{#if copyright}
|
|
52
84
|
<span class="st-footer__copyright">{copyright}</span>
|
|
53
85
|
{/if}
|
|
54
|
-
{#if
|
|
86
|
+
{#if resolvedLegal}
|
|
55
87
|
<nav class="st-footer__legal" aria-label="Liens légaux">
|
|
56
|
-
{
|
|
88
|
+
{#if isSnippet(resolvedLegal)}
|
|
89
|
+
{@render resolvedLegal()}
|
|
90
|
+
{:else if Array.isArray(resolvedLegal)}
|
|
91
|
+
{#each resolvedLegal as link}
|
|
92
|
+
<a href={link.href}>{link.label}</a>
|
|
93
|
+
{/each}
|
|
94
|
+
{/if}
|
|
57
95
|
</nav>
|
|
58
96
|
{/if}
|
|
59
97
|
</div>
|
|
@@ -121,4 +159,30 @@
|
|
|
121
159
|
gap: var(--st-spacing-4, 1rem);
|
|
122
160
|
font-size: 0.8125rem;
|
|
123
161
|
}
|
|
162
|
+
|
|
163
|
+
.st-footer__col-title {
|
|
164
|
+
font-size: 0.875rem;
|
|
165
|
+
font-weight: 600;
|
|
166
|
+
margin: 0 0 var(--st-spacing-2, 0.5rem);
|
|
167
|
+
color: var(--st-semantic-text-primary);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.st-footer__col-links {
|
|
171
|
+
display: flex;
|
|
172
|
+
flex-direction: column;
|
|
173
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
174
|
+
list-style: none;
|
|
175
|
+
margin: 0;
|
|
176
|
+
padding: 0;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.st-footer__col-links a {
|
|
180
|
+
color: inherit;
|
|
181
|
+
font-size: 0.875rem;
|
|
182
|
+
text-decoration: none;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.st-footer__col-links a:hover {
|
|
186
|
+
text-decoration: underline;
|
|
187
|
+
}
|
|
124
188
|
</style>
|
package/dist/Footer.svelte.d.ts
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
2
|
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
+
type LinkItem = {
|
|
4
|
+
label: string;
|
|
5
|
+
href: string;
|
|
6
|
+
};
|
|
7
|
+
type ColumnItem = {
|
|
8
|
+
title?: string;
|
|
9
|
+
links: LinkItem[];
|
|
10
|
+
};
|
|
3
11
|
type FooterProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
|
|
4
12
|
/** Texte de copyright (bas de pied de page). */
|
|
5
13
|
copyright?: string;
|
|
6
14
|
/** aria-label de la région contentinfo. */
|
|
7
15
|
label?: string;
|
|
8
16
|
class?: string;
|
|
9
|
-
/** Marque / logo
|
|
10
|
-
brand?: Snippet;
|
|
11
|
-
/** Colonnes de liens
|
|
12
|
-
columns?: Snippet;
|
|
13
|
-
/** Liens légaux
|
|
14
|
-
legal?: Snippet;
|
|
17
|
+
/** Marque / logo : Snippet OU chaîne de texte. */
|
|
18
|
+
brand?: Snippet | string;
|
|
19
|
+
/** Colonnes de liens : Snippet OU tableau de données. */
|
|
20
|
+
columns?: Snippet | ColumnItem[];
|
|
21
|
+
/** Liens légaux : Snippet OU tableau de données. */
|
|
22
|
+
legal?: Snippet | LinkItem[];
|
|
23
|
+
/** Alias data-driven pour les liens légaux (parité React). */
|
|
24
|
+
legalLinks?: LinkItem[];
|
|
15
25
|
/** Contenu libre additionnel sous la barre du bas. */
|
|
16
26
|
children?: Snippet;
|
|
17
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Footer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAC9D,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"Footer.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Footer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAChD,KAAK,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC;AAExD,KAAK,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAC9D,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,CAAC;IACjC,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;IAC7B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AA2FJ,QAAA,MAAM,MAAM,iDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
|
package/dist/ForceGraph.svelte
CHANGED
|
@@ -273,6 +273,10 @@
|
|
|
273
273
|
* `id`. Receives the same pair so the consumer can drop `from` from the data.
|
|
274
274
|
*/
|
|
275
275
|
onMergeComplete?: (pair: { id: string; from: string; into: string }) => void;
|
|
276
|
+
/** Accessible label for the reset-view button (shown when zoomed/panned). */
|
|
277
|
+
resetViewLabel?: string;
|
|
278
|
+
/** Accessible label for the legend overlay. */
|
|
279
|
+
legendLabel?: string;
|
|
276
280
|
class?: string;
|
|
277
281
|
};
|
|
278
282
|
|
|
@@ -296,6 +300,8 @@
|
|
|
296
300
|
onNodeHover,
|
|
297
301
|
mergePair = null,
|
|
298
302
|
onMergeComplete,
|
|
303
|
+
resetViewLabel = "Reset view",
|
|
304
|
+
legendLabel = "Graph legend",
|
|
299
305
|
class: className
|
|
300
306
|
}: ForceGraphProps = $props();
|
|
301
307
|
|
|
@@ -1051,7 +1057,7 @@
|
|
|
1051
1057
|
>
|
|
1052
1058
|
{#if p.shapePath}
|
|
1053
1059
|
<path
|
|
1054
|
-
class="st-forceGraph__dot"
|
|
1060
|
+
class="st-forceGraph__shape st-forceGraph__dot"
|
|
1055
1061
|
d={p.shapePath}
|
|
1056
1062
|
tabindex="0"
|
|
1057
1063
|
role="button"
|
|
@@ -1134,7 +1140,7 @@
|
|
|
1134
1140
|
<button
|
|
1135
1141
|
class="st-forceGraph__resetBtn"
|
|
1136
1142
|
type="button"
|
|
1137
|
-
aria-label=
|
|
1143
|
+
aria-label={resetViewLabel}
|
|
1138
1144
|
onclick={resetView}
|
|
1139
1145
|
>
|
|
1140
1146
|
↺
|
|
@@ -1143,7 +1149,7 @@
|
|
|
1143
1149
|
|
|
1144
1150
|
<!-- Legend overlay -->
|
|
1145
1151
|
{#if legend && legend.length > 0}
|
|
1146
|
-
<div class="st-forceGraph__legend" aria-label=
|
|
1152
|
+
<div class="st-forceGraph__legend" aria-label={legendLabel}>
|
|
1147
1153
|
{#each legend as entry}
|
|
1148
1154
|
{@const swatchPath = entry.shape !== undefined ? nodeShapePath(entry.shape, 7) : null}
|
|
1149
1155
|
{@const swatchTone = entry.tone ?? "category1"}
|
|
@@ -170,6 +170,10 @@ type ForceGraphProps = {
|
|
|
170
170
|
from: string;
|
|
171
171
|
into: string;
|
|
172
172
|
}) => void;
|
|
173
|
+
/** Accessible label for the reset-view button (shown when zoomed/panned). */
|
|
174
|
+
resetViewLabel?: string;
|
|
175
|
+
/** Accessible label for the legend overlay. */
|
|
176
|
+
legendLabel?: string;
|
|
173
177
|
class?: string;
|
|
174
178
|
};
|
|
175
179
|
declare const ForceGraph: import("svelte").Component<ForceGraphProps, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForceGraph.svelte.d.ts","sourceRoot":"","sources":["../src/lib/ForceGraph.svelte.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ForceGraph.svelte.d.ts","sourceRoot":"","sources":["../src/lib/ForceGraph.svelte.ts"],"names":[],"mappings":"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"}
|
package/dist/HeatmapChart.svelte
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
2
|
/**
|
|
3
|
-
* HeatmapChart - API canonique (référence Svelte, React/Vue doivent s'aligner)
|
|
3
|
+
* HeatmapChart - API canonique (référence Svelte, React/Vue/Angular doivent s'aligner)
|
|
4
4
|
*
|
|
5
5
|
* Props obligatoires :
|
|
6
6
|
* data HeatmapChartDatum[] - tableau {x, y, value, tone?}
|
|
7
7
|
* label string - aria-label du graphique
|
|
8
8
|
*
|
|
9
9
|
* Props optionnelles :
|
|
10
|
+
* scale "categorical" | "sequential" (défaut categorical)
|
|
10
11
|
* legend boolean (défaut false) - affiche le gradient Low→High
|
|
11
12
|
* width number (défaut 480) - largeur du viewBox en px
|
|
12
13
|
* height number (défaut 300) - hauteur du viewBox en px
|
|
@@ -25,6 +26,8 @@
|
|
|
25
26
|
| "category7"
|
|
26
27
|
| "category8";
|
|
27
28
|
|
|
29
|
+
export type HeatmapChartScale = "categorical" | "sequential";
|
|
30
|
+
|
|
28
31
|
export type HeatmapChartDatum = {
|
|
29
32
|
x: string;
|
|
30
33
|
y: string;
|
|
@@ -39,6 +42,7 @@
|
|
|
39
42
|
type HeatmapChartProps = {
|
|
40
43
|
data: HeatmapChartDatum[];
|
|
41
44
|
label: string;
|
|
45
|
+
scale?: HeatmapChartScale;
|
|
42
46
|
legend?: boolean;
|
|
43
47
|
width?: number;
|
|
44
48
|
height?: number;
|
|
@@ -48,6 +52,7 @@
|
|
|
48
52
|
let {
|
|
49
53
|
data,
|
|
50
54
|
label,
|
|
55
|
+
scale = "categorical",
|
|
51
56
|
legend = false,
|
|
52
57
|
width = 480,
|
|
53
58
|
height = 300,
|
|
@@ -78,6 +83,10 @@
|
|
|
78
83
|
return out;
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
function normalizedScale(value: HeatmapChartScale | undefined): HeatmapChartScale {
|
|
87
|
+
return value === "sequential" ? "sequential" : "categorical";
|
|
88
|
+
}
|
|
89
|
+
|
|
81
90
|
function toneForValue(value: number, min: number, max: number): HeatmapChartTone {
|
|
82
91
|
if (!Number.isFinite(value) || max <= min) return "category1";
|
|
83
92
|
const index = Math.max(0, Math.min(TONES.length - 1, Math.floor(((value - min) / (max - min)) * TONES.length)));
|
|
@@ -86,6 +95,7 @@
|
|
|
86
95
|
|
|
87
96
|
let hoveredIndex: number | null = $state(null);
|
|
88
97
|
|
|
98
|
+
const resolvedScale = $derived(normalizedScale(scale));
|
|
89
99
|
const xLabels = $derived(uniqueInOrder(data.map((d) => d.x)));
|
|
90
100
|
const yLabels = $derived(uniqueInOrder(data.map((d) => d.y)));
|
|
91
101
|
const plotWidth = $derived(Math.max(width - MARGIN.left - MARGIN.right, 1));
|
|
@@ -104,7 +114,7 @@
|
|
|
104
114
|
return {
|
|
105
115
|
datum,
|
|
106
116
|
index,
|
|
107
|
-
tone: datum.tone ?? toneForValue(datum.value, min, max),
|
|
117
|
+
tone: resolvedScale === "sequential" ? toneForValue(datum.value, min, max) : datum.tone ?? toneForValue(datum.value, min, max),
|
|
108
118
|
x: MARGIN.left + xIndex * cellWidth,
|
|
109
119
|
y: MARGIN.top + yIndex * cellHeight,
|
|
110
120
|
width: Math.max(cellWidth - 2, 1),
|
|
@@ -134,7 +144,7 @@
|
|
|
134
144
|
hoveredIndex = Number.isInteger(index) ? index : null;
|
|
135
145
|
}
|
|
136
146
|
|
|
137
|
-
const classes = () => ["st-heatmapChart", className].filter(Boolean).join(" ");
|
|
147
|
+
const classes = () => ["st-heatmapChart", `st-heatmapChart--${resolvedScale}`, className].filter(Boolean).join(" ");
|
|
138
148
|
</script>
|
|
139
149
|
|
|
140
150
|
<div class={classes()}>
|
|
@@ -228,6 +238,15 @@
|
|
|
228
238
|
|
|
229
239
|
<style>
|
|
230
240
|
.st-heatmapChart {
|
|
241
|
+
--st-heatmapChart-ramp-base: var(--st-semantic-data-category1);
|
|
242
|
+
--st-heatmapChart-ramp-1: color-mix(in srgb, var(--st-semantic-surface-default, Canvas) 86%, var(--st-heatmapChart-ramp-base) 14%);
|
|
243
|
+
--st-heatmapChart-ramp-2: color-mix(in srgb, var(--st-semantic-surface-default, Canvas) 74%, var(--st-heatmapChart-ramp-base) 26%);
|
|
244
|
+
--st-heatmapChart-ramp-3: color-mix(in srgb, var(--st-semantic-surface-default, Canvas) 62%, var(--st-heatmapChart-ramp-base) 38%);
|
|
245
|
+
--st-heatmapChart-ramp-4: color-mix(in srgb, var(--st-semantic-surface-default, Canvas) 50%, var(--st-heatmapChart-ramp-base) 50%);
|
|
246
|
+
--st-heatmapChart-ramp-5: color-mix(in srgb, var(--st-semantic-surface-default, Canvas) 38%, var(--st-heatmapChart-ramp-base) 62%);
|
|
247
|
+
--st-heatmapChart-ramp-6: color-mix(in srgb, var(--st-semantic-surface-default, Canvas) 26%, var(--st-heatmapChart-ramp-base) 74%);
|
|
248
|
+
--st-heatmapChart-ramp-7: color-mix(in srgb, var(--st-semantic-surface-default, Canvas) 14%, var(--st-heatmapChart-ramp-base) 86%);
|
|
249
|
+
--st-heatmapChart-ramp-8: var(--st-heatmapChart-ramp-base);
|
|
231
250
|
color: var(--st-semantic-text-secondary);
|
|
232
251
|
display: block;
|
|
233
252
|
font-family: inherit;
|
|
@@ -287,6 +306,23 @@
|
|
|
287
306
|
.st-heatmapChart__cell--category8,
|
|
288
307
|
.st-heatmapChart__legendSwatch--category8 { fill: var(--st-semantic-data-category8); background: var(--st-semantic-data-category8); }
|
|
289
308
|
|
|
309
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category1,
|
|
310
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category1 { fill: var(--st-heatmapChart-ramp-1); background: var(--st-heatmapChart-ramp-1); }
|
|
311
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category2,
|
|
312
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category2 { fill: var(--st-heatmapChart-ramp-2); background: var(--st-heatmapChart-ramp-2); }
|
|
313
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category3,
|
|
314
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category3 { fill: var(--st-heatmapChart-ramp-3); background: var(--st-heatmapChart-ramp-3); }
|
|
315
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category4,
|
|
316
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category4 { fill: var(--st-heatmapChart-ramp-4); background: var(--st-heatmapChart-ramp-4); }
|
|
317
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category5,
|
|
318
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category5 { fill: var(--st-heatmapChart-ramp-5); background: var(--st-heatmapChart-ramp-5); }
|
|
319
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category6,
|
|
320
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category6 { fill: var(--st-heatmapChart-ramp-6); background: var(--st-heatmapChart-ramp-6); }
|
|
321
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category7,
|
|
322
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category7 { fill: var(--st-heatmapChart-ramp-7); background: var(--st-heatmapChart-ramp-7); }
|
|
323
|
+
.st-heatmapChart--sequential .st-heatmapChart__cell--category8,
|
|
324
|
+
.st-heatmapChart--sequential .st-heatmapChart__legendSwatch--category8 { fill: var(--st-heatmapChart-ramp-8); background: var(--st-heatmapChart-ramp-8); }
|
|
325
|
+
|
|
290
326
|
.st-heatmapChart__legend {
|
|
291
327
|
align-items: center;
|
|
292
328
|
display: flex;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HeatmapChart - API canonique (référence Svelte, React/Vue doivent s'aligner)
|
|
2
|
+
* HeatmapChart - API canonique (référence Svelte, React/Vue/Angular doivent s'aligner)
|
|
3
3
|
*
|
|
4
4
|
* Props obligatoires :
|
|
5
5
|
* data HeatmapChartDatum[] - tableau {x, y, value, tone?}
|
|
6
6
|
* label string - aria-label du graphique
|
|
7
7
|
*
|
|
8
8
|
* Props optionnelles :
|
|
9
|
+
* scale "categorical" | "sequential" (défaut categorical)
|
|
9
10
|
* legend boolean (défaut false) - affiche le gradient Low→High
|
|
10
11
|
* width number (défaut 480) - largeur du viewBox en px
|
|
11
12
|
* height number (défaut 300) - hauteur du viewBox en px
|
|
@@ -15,6 +16,7 @@
|
|
|
15
16
|
* Number.isFinite). Tableau vide ou tout-NaN → rendu vide sans crash.
|
|
16
17
|
*/
|
|
17
18
|
export type HeatmapChartTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8";
|
|
19
|
+
export type HeatmapChartScale = "categorical" | "sequential";
|
|
18
20
|
export type HeatmapChartDatum = {
|
|
19
21
|
x: string;
|
|
20
22
|
y: string;
|
|
@@ -24,6 +26,7 @@ export type HeatmapChartDatum = {
|
|
|
24
26
|
type HeatmapChartProps = {
|
|
25
27
|
data: HeatmapChartDatum[];
|
|
26
28
|
label: string;
|
|
29
|
+
scale?: HeatmapChartScale;
|
|
27
30
|
legend?: boolean;
|
|
28
31
|
width?: number;
|
|
29
32
|
height?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeatmapChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/HeatmapChart.svelte.ts"],"names":[],"mappings":"AAGE
|
|
1
|
+
{"version":3,"file":"HeatmapChart.svelte.d.ts","sourceRoot":"","sources":["../src/lib/HeatmapChart.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,YAAY,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAMF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA2JJ,QAAA,MAAM,YAAY,uDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export type KanbanBoardTone = "neutral" | "info" | "success" | "warning" | "error";
|
|
3
|
+
|
|
4
|
+
export interface KanbanBoardCard {
|
|
5
|
+
id: string;
|
|
6
|
+
title: string;
|
|
7
|
+
subtitle?: string;
|
|
8
|
+
owner?: string;
|
|
9
|
+
badgeLabel?: string;
|
|
10
|
+
badgeTone?: KanbanBoardTone;
|
|
11
|
+
progress?: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface KanbanBoardColumn {
|
|
15
|
+
label: string;
|
|
16
|
+
badgeTone?: KanbanBoardTone;
|
|
17
|
+
cards: KanbanBoardCard[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type KanbanBoardProps = {
|
|
21
|
+
columns: KanbanBoardColumn[];
|
|
22
|
+
progressLabel?: string;
|
|
23
|
+
};
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<script lang="ts">
|
|
27
|
+
import Badge from "./Badge.svelte";
|
|
28
|
+
import Card from "./Card.svelte";
|
|
29
|
+
import Avatar from "./Avatar.svelte";
|
|
30
|
+
import ProgressBar from "./ProgressBar.svelte";
|
|
31
|
+
|
|
32
|
+
let { columns, progressLabel }: KanbanBoardProps = $props();
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<div class="st-kb">
|
|
36
|
+
{#each columns as col}
|
|
37
|
+
<div class="st-kb__column">
|
|
38
|
+
<div class="st-kb__head">
|
|
39
|
+
<span class="st-kb__colLabel">{col.label}</span>
|
|
40
|
+
<Badge tone={col.badgeTone ?? "neutral"}>{col.cards.length}</Badge>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="st-kb__body">
|
|
43
|
+
{#each col.cards as card (card.id)}
|
|
44
|
+
<Card class="st-kb__card">
|
|
45
|
+
<div class="st-kb__cardInner">
|
|
46
|
+
<div class="st-kb__cardTop">
|
|
47
|
+
<span class="st-kb__cardTitle">{card.title}</span>
|
|
48
|
+
{#if card.badgeLabel}
|
|
49
|
+
<Badge tone={card.badgeTone ?? "neutral"}>{card.badgeLabel}</Badge>
|
|
50
|
+
{/if}
|
|
51
|
+
</div>
|
|
52
|
+
{#if card.subtitle}
|
|
53
|
+
<span class="st-kb__cardSubtitle">{card.subtitle}</span>
|
|
54
|
+
{/if}
|
|
55
|
+
{#if card.progress !== undefined}
|
|
56
|
+
<ProgressBar
|
|
57
|
+
value={card.progress}
|
|
58
|
+
max={100}
|
|
59
|
+
label={progressLabel ?? "Progression"}
|
|
60
|
+
showValue
|
|
61
|
+
size="sm"
|
|
62
|
+
/>
|
|
63
|
+
{/if}
|
|
64
|
+
{#if card.owner}
|
|
65
|
+
<div class="st-kb__cardOwner">
|
|
66
|
+
<Avatar name={card.owner} size="sm" />
|
|
67
|
+
<span class="st-kb__ownerName">{card.owner}</span>
|
|
68
|
+
</div>
|
|
69
|
+
{/if}
|
|
70
|
+
</div>
|
|
71
|
+
</Card>
|
|
72
|
+
{/each}
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
{/each}
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<style>
|
|
79
|
+
.st-kb {
|
|
80
|
+
display: flex;
|
|
81
|
+
gap: var(--st-spacing-4, 1rem);
|
|
82
|
+
padding: var(--st-spacing-6, 1.5rem);
|
|
83
|
+
overflow-x: auto;
|
|
84
|
+
align-items: flex-start;
|
|
85
|
+
background: var(--st-semantic-surface-default);
|
|
86
|
+
min-block-size: 100%;
|
|
87
|
+
}
|
|
88
|
+
.st-kb__column {
|
|
89
|
+
display: flex;
|
|
90
|
+
flex-direction: column;
|
|
91
|
+
gap: var(--st-spacing-3, 0.75rem);
|
|
92
|
+
min-inline-size: 18rem;
|
|
93
|
+
flex-shrink: 0;
|
|
94
|
+
}
|
|
95
|
+
.st-kb__head {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
justify-content: space-between;
|
|
99
|
+
padding: var(--st-spacing-2, 0.5rem) var(--st-spacing-3, 0.75rem);
|
|
100
|
+
background: var(--st-semantic-surface-raised);
|
|
101
|
+
border: 1px solid var(--st-semantic-border-subtle);
|
|
102
|
+
border-radius: var(--st-radius-md, 0.5rem);
|
|
103
|
+
}
|
|
104
|
+
.st-kb__colLabel {
|
|
105
|
+
font-weight: 650;
|
|
106
|
+
font-size: 0.875rem;
|
|
107
|
+
color: var(--st-semantic-text-primary);
|
|
108
|
+
}
|
|
109
|
+
.st-kb__body {
|
|
110
|
+
display: flex;
|
|
111
|
+
flex-direction: column;
|
|
112
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
113
|
+
}
|
|
114
|
+
.st-kb__cardInner {
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
118
|
+
padding: var(--st-spacing-3, 0.75rem);
|
|
119
|
+
}
|
|
120
|
+
.st-kb__cardTop {
|
|
121
|
+
display: flex;
|
|
122
|
+
align-items: flex-start;
|
|
123
|
+
justify-content: space-between;
|
|
124
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
125
|
+
}
|
|
126
|
+
.st-kb__cardTitle {
|
|
127
|
+
font-weight: 600;
|
|
128
|
+
font-size: 0.875rem;
|
|
129
|
+
color: var(--st-semantic-text-primary);
|
|
130
|
+
}
|
|
131
|
+
.st-kb__cardSubtitle {
|
|
132
|
+
font-size: 0.75rem;
|
|
133
|
+
color: var(--st-semantic-text-secondary);
|
|
134
|
+
}
|
|
135
|
+
.st-kb__cardOwner {
|
|
136
|
+
display: flex;
|
|
137
|
+
align-items: center;
|
|
138
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
139
|
+
}
|
|
140
|
+
.st-kb__ownerName {
|
|
141
|
+
font-size: 0.75rem;
|
|
142
|
+
color: var(--st-semantic-text-secondary);
|
|
143
|
+
}
|
|
144
|
+
</style>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type KanbanBoardTone = "neutral" | "info" | "success" | "warning" | "error";
|
|
2
|
+
export interface KanbanBoardCard {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
subtitle?: string;
|
|
6
|
+
owner?: string;
|
|
7
|
+
badgeLabel?: string;
|
|
8
|
+
badgeTone?: KanbanBoardTone;
|
|
9
|
+
progress?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface KanbanBoardColumn {
|
|
12
|
+
label: string;
|
|
13
|
+
badgeTone?: KanbanBoardTone;
|
|
14
|
+
cards: KanbanBoardCard[];
|
|
15
|
+
}
|
|
16
|
+
export type KanbanBoardProps = {
|
|
17
|
+
columns: KanbanBoardColumn[];
|
|
18
|
+
progressLabel?: string;
|
|
19
|
+
};
|
|
20
|
+
declare const KanbanBoard: import("svelte").Component<KanbanBoardProps, {}, "">;
|
|
21
|
+
type KanbanBoard = ReturnType<typeof KanbanBoard>;
|
|
22
|
+
export default KanbanBoard;
|
|
23
|
+
//# sourceMappingURL=KanbanBoard.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KanbanBoard.svelte.d.ts","sourceRoot":"","sources":["../src/lib/KanbanBoard.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AA4DJ,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|