@sentropic/design-system-svelte 0.34.49 → 0.34.50
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/AppShell.svelte +284 -28
- package/dist/AppShell.svelte.d.ts +23 -3
- package/dist/AppShell.svelte.d.ts.map +1 -1
- package/dist/ContextPanel.svelte +86 -0
- package/dist/ContextPanel.svelte.d.ts +14 -0
- package/dist/ContextPanel.svelte.d.ts.map +1 -0
- package/dist/NavDrawer.svelte +46 -0
- package/dist/NavDrawer.svelte.d.ts +17 -0
- package/dist/NavDrawer.svelte.d.ts.map +1 -0
- package/dist/NavItem.svelte +3 -5
- package/dist/NavItem.svelte.d.ts.map +1 -1
- package/dist/NavRail.svelte +147 -0
- package/dist/NavRail.svelte.d.ts +23 -0
- package/dist/NavRail.svelte.d.ts.map +1 -0
- package/dist/NavShell.svelte +218 -0
- package/dist/NavShell.svelte.d.ts +38 -0
- package/dist/NavShell.svelte.d.ts.map +1 -0
- package/dist/SelectableRow.svelte +16 -5
- package/dist/SelectableRow.svelte.d.ts +2 -0
- package/dist/SelectableRow.svelte.d.ts.map +1 -1
- package/dist/UtilityPanel.svelte +89 -0
- package/dist/UtilityPanel.svelte.d.ts +18 -0
- package/dist/UtilityPanel.svelte.d.ts.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/package.json +5 -5
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
export interface NavRailItem {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
href?: string;
|
|
8
|
+
active?: boolean;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
badge?: string | number;
|
|
11
|
+
icon?: Snippet;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface NavRailProps {
|
|
15
|
+
items?: NavRailItem[];
|
|
16
|
+
label?: string;
|
|
17
|
+
activeItemId?: string;
|
|
18
|
+
onItemSelect?: (id: string) => void;
|
|
19
|
+
footer?: Snippet;
|
|
20
|
+
children?: Snippet;
|
|
21
|
+
class?: string;
|
|
22
|
+
}
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<script lang="ts">
|
|
26
|
+
let {
|
|
27
|
+
items = [],
|
|
28
|
+
label = "Primary navigation",
|
|
29
|
+
activeItemId,
|
|
30
|
+
onItemSelect,
|
|
31
|
+
footer,
|
|
32
|
+
children,
|
|
33
|
+
class: className
|
|
34
|
+
}: NavRailProps = $props();
|
|
35
|
+
|
|
36
|
+
const classes = $derived(["st-navRail", className].filter(Boolean).join(" "));
|
|
37
|
+
|
|
38
|
+
function isActive(item: NavRailItem) {
|
|
39
|
+
return item.active === true || item.id === activeItemId;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function selectItem(item: NavRailItem) {
|
|
43
|
+
if (!item.disabled) onItemSelect?.(item.id);
|
|
44
|
+
}
|
|
45
|
+
</script>
|
|
46
|
+
|
|
47
|
+
<nav class={classes} aria-label={label}>
|
|
48
|
+
<div class="st-navRail__items">
|
|
49
|
+
{#each items as item (item.id)}
|
|
50
|
+
{#if item.href && !item.disabled}
|
|
51
|
+
<a class="st-navRail__item" class:st-navRail__item--active={isActive(item)} href={item.href} aria-current={isActive(item) ? "page" : undefined} title={item.label} onclick={() => selectItem(item)}>
|
|
52
|
+
{#if item.icon}<span class="st-navRail__icon">{@render item.icon()}</span>{/if}
|
|
53
|
+
<span class="st-navRail__label">{item.label}</span>
|
|
54
|
+
{#if item.badge != null}<span class="st-navRail__badge">{item.badge}</span>{/if}
|
|
55
|
+
</a>
|
|
56
|
+
{:else}
|
|
57
|
+
<button class="st-navRail__item" class:st-navRail__item--active={isActive(item)} type="button" disabled={item.disabled} aria-current={isActive(item) ? "page" : undefined} title={item.label} onclick={() => selectItem(item)}>
|
|
58
|
+
{#if item.icon}<span class="st-navRail__icon">{@render item.icon()}</span>{/if}
|
|
59
|
+
<span class="st-navRail__label">{item.label}</span>
|
|
60
|
+
{#if item.badge != null}<span class="st-navRail__badge">{item.badge}</span>{/if}
|
|
61
|
+
</button>
|
|
62
|
+
{/if}
|
|
63
|
+
{/each}
|
|
64
|
+
{@render children?.()}
|
|
65
|
+
</div>
|
|
66
|
+
{#if footer}
|
|
67
|
+
<footer class="st-navRail__footer">{@render footer()}</footer>
|
|
68
|
+
{/if}
|
|
69
|
+
</nav>
|
|
70
|
+
|
|
71
|
+
<style>
|
|
72
|
+
.st-navRail {
|
|
73
|
+
align-items: stretch;
|
|
74
|
+
background: var(--st-component-navRail-surface, var(--st-semantic-surface-raised));
|
|
75
|
+
color: var(--st-semantic-text-primary);
|
|
76
|
+
display: grid;
|
|
77
|
+
grid-template-rows: 1fr auto;
|
|
78
|
+
block-size: 100%;
|
|
79
|
+
inline-size: var(--st-component-navRail-width, 4.5rem);
|
|
80
|
+
padding: var(--st-spacing-2, 0.5rem);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.st-navRail__items,
|
|
84
|
+
.st-navRail__footer {
|
|
85
|
+
align-items: center;
|
|
86
|
+
display: flex;
|
|
87
|
+
flex-direction: column;
|
|
88
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.st-navRail__items {
|
|
92
|
+
min-block-size: 0;
|
|
93
|
+
overflow-y: auto;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.st-navRail__item {
|
|
97
|
+
align-items: center;
|
|
98
|
+
background: transparent;
|
|
99
|
+
border: 1px solid transparent;
|
|
100
|
+
border-radius: var(--st-radius-md, 0.375rem);
|
|
101
|
+
color: var(--st-semantic-text-secondary);
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
display: inline-flex;
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
font: inherit;
|
|
106
|
+
gap: var(--st-spacing-1, 0.25rem);
|
|
107
|
+
inline-size: 100%;
|
|
108
|
+
min-block-size: 3.25rem;
|
|
109
|
+
padding: var(--st-spacing-2, 0.5rem);
|
|
110
|
+
position: relative;
|
|
111
|
+
text-align: center;
|
|
112
|
+
text-decoration: none;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.st-navRail__item:hover,
|
|
116
|
+
.st-navRail__item--active {
|
|
117
|
+
background: var(--st-component-navRail-activeBackground, var(--st-semantic-surface-subtle));
|
|
118
|
+
color: var(--st-semantic-text-primary);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.st-navRail__item--active {
|
|
122
|
+
border-color: var(--st-component-navRail-activeBorder, var(--st-semantic-border-strong));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.st-navRail__item:disabled {
|
|
126
|
+
cursor: not-allowed;
|
|
127
|
+
opacity: 0.5;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.st-navRail__label {
|
|
131
|
+
font-size: 0.6875rem;
|
|
132
|
+
font-weight: 650;
|
|
133
|
+
line-height: 1.1;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.st-navRail__badge {
|
|
137
|
+
background: var(--st-component-navRail-badgeBackground, var(--st-semantic-surface-inverse));
|
|
138
|
+
border-radius: 999px;
|
|
139
|
+
color: var(--st-semantic-text-inverse);
|
|
140
|
+
font-size: 0.625rem;
|
|
141
|
+
line-height: 1;
|
|
142
|
+
padding: 0.125rem 0.3rem;
|
|
143
|
+
position: absolute;
|
|
144
|
+
right: 0.25rem;
|
|
145
|
+
top: 0.25rem;
|
|
146
|
+
}
|
|
147
|
+
</style>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
export interface NavRailItem {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
href?: string;
|
|
6
|
+
active?: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
badge?: string | number;
|
|
9
|
+
icon?: Snippet;
|
|
10
|
+
}
|
|
11
|
+
export interface NavRailProps {
|
|
12
|
+
items?: NavRailItem[];
|
|
13
|
+
label?: string;
|
|
14
|
+
activeItemId?: string;
|
|
15
|
+
onItemSelect?: (id: string) => void;
|
|
16
|
+
footer?: Snippet;
|
|
17
|
+
children?: Snippet;
|
|
18
|
+
class?: string;
|
|
19
|
+
}
|
|
20
|
+
declare const NavRail: import("svelte").Component<NavRailProps, {}, "">;
|
|
21
|
+
type NavRail = ReturnType<typeof NavRail>;
|
|
22
|
+
export default NavRail;
|
|
23
|
+
//# sourceMappingURL=NavRail.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavRail.svelte.d.ts","sourceRoot":"","sources":["../src/lib/NavRail.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsDH,QAAA,MAAM,OAAO,kDAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/** Variante de chrome du panneau de navigation.
|
|
3
|
+
* - `rail` : panneau latéral persistant (`<aside>` complementary) ;
|
|
4
|
+
* - `drawer` : overlay — DÉLÈGUE au composant Drawer (rôle dialog + Escape + backdrop). */
|
|
5
|
+
export type NavShellVariant = "rail" | "drawer";
|
|
6
|
+
|
|
7
|
+
/** Côté d'ancrage quand `variant="drawer"` (transmis tel quel à Drawer). */
|
|
8
|
+
export type NavShellSide = "left" | "right" | "bottom";
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts">
|
|
12
|
+
// NavShell — CHROME d'un rail / drawer de navigation (vague 3 du NavSystem).
|
|
13
|
+
// Régions EXCLUSIVES pour que les produits ne mélangent plus nav + filtre +
|
|
14
|
+
// action + détail dans une bouillie :
|
|
15
|
+
// • header → titre (optionnel), flèche-retour maître→détail, sous-titre ;
|
|
16
|
+
// • search → slot pleine largeur (le consommateur y met un Search fluid) ;
|
|
17
|
+
// • body → corps SCROLLABLE (NavSection / NavList / NavTree) ;
|
|
18
|
+
// • footer → zone d'actions (le consommateur y met un NavActionStack).
|
|
19
|
+
// ZÉRO-ENTROPIE : en mode `drawer`, on ne réimplémente PAS l'overlay — on
|
|
20
|
+
// RÉUTILISE le composant Drawer (open/side/title + dialog/Escape/backdrop) et
|
|
21
|
+
// on lui passe le même header/search/body/footer via ses slots children/footer.
|
|
22
|
+
// En mode `rail`, panneau persistant <aside> role=complementary.
|
|
23
|
+
// Style token-only scopé, AUCUN hex.
|
|
24
|
+
import type { Snippet } from "svelte";
|
|
25
|
+
import Drawer from "./Drawer.svelte";
|
|
26
|
+
|
|
27
|
+
type NavShellProps = {
|
|
28
|
+
/** Chrome : panneau persistant (`rail`) ou overlay délégué à Drawer (`drawer`). */
|
|
29
|
+
variant?: NavShellVariant;
|
|
30
|
+
/** Titre du panneau, rendu dans le `<header>` (rail) ou via Drawer (drawer). */
|
|
31
|
+
title?: string;
|
|
32
|
+
/** Sous-titre muet sous le titre. */
|
|
33
|
+
subtitle?: string;
|
|
34
|
+
/** Affiche une flèche-retour dans l'en-tête (pattern maître→détail). */
|
|
35
|
+
back?: boolean;
|
|
36
|
+
/** Appelé au clic sur la flèche-retour. */
|
|
37
|
+
onBack?: () => void;
|
|
38
|
+
/** Libellé accessible de la flèche-retour. */
|
|
39
|
+
backLabel?: string;
|
|
40
|
+
/** Libellé accessible du panneau (aria-label de l'aside / du dialog). */
|
|
41
|
+
label?: string;
|
|
42
|
+
/** Slot de recherche rendu PLEINE LARGEUR (ex. Search fluid). */
|
|
43
|
+
search?: Snippet;
|
|
44
|
+
/** Zone d'actions en pied (ex. NavActionStack). */
|
|
45
|
+
footer?: Snippet;
|
|
46
|
+
/** Corps scrollable (NavSection / NavList / NavTree). */
|
|
47
|
+
children: Snippet;
|
|
48
|
+
/** Ouverture du tiroir quand `variant="drawer"` (bindable). */
|
|
49
|
+
open?: boolean;
|
|
50
|
+
/** Côté d'ancrage du tiroir quand `variant="drawer"`. */
|
|
51
|
+
side?: NavShellSide;
|
|
52
|
+
class?: string;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
let {
|
|
56
|
+
variant = "rail",
|
|
57
|
+
title,
|
|
58
|
+
subtitle,
|
|
59
|
+
back = false,
|
|
60
|
+
onBack,
|
|
61
|
+
backLabel = "Retour",
|
|
62
|
+
label,
|
|
63
|
+
search,
|
|
64
|
+
footer,
|
|
65
|
+
children,
|
|
66
|
+
open = $bindable(false),
|
|
67
|
+
side = "left",
|
|
68
|
+
class: className
|
|
69
|
+
}: NavShellProps = $props();
|
|
70
|
+
|
|
71
|
+
const rootClasses = $derived(
|
|
72
|
+
["st-navShell", `st-navShell--${variant}`, className].filter(Boolean).join(" ")
|
|
73
|
+
);
|
|
74
|
+
</script>
|
|
75
|
+
|
|
76
|
+
<!-- Contenu commun aux deux variantes : header (back/titre/sous-titre) + search
|
|
77
|
+
pleine largeur. Le corps et le footer diffèrent selon le contenant. -->
|
|
78
|
+
{#snippet head()}
|
|
79
|
+
{#if back || title || subtitle}
|
|
80
|
+
<header class="st-navShell__header">
|
|
81
|
+
{#if back}
|
|
82
|
+
<button
|
|
83
|
+
type="button"
|
|
84
|
+
class="st-navShell__back"
|
|
85
|
+
aria-label={backLabel}
|
|
86
|
+
onclick={() => onBack?.()}
|
|
87
|
+
>
|
|
88
|
+
<span aria-hidden="true">←</span>
|
|
89
|
+
</button>
|
|
90
|
+
{/if}
|
|
91
|
+
{#if title || subtitle}
|
|
92
|
+
<div class="st-navShell__heading">
|
|
93
|
+
{#if title}<p class="st-navShell__title">{title}</p>{/if}
|
|
94
|
+
{#if subtitle}<p class="st-navShell__subtitle">{subtitle}</p>{/if}
|
|
95
|
+
</div>
|
|
96
|
+
{/if}
|
|
97
|
+
</header>
|
|
98
|
+
{/if}
|
|
99
|
+
{#if search}
|
|
100
|
+
<div class="st-navShell__search">{@render search()}</div>
|
|
101
|
+
{/if}
|
|
102
|
+
{/snippet}
|
|
103
|
+
|
|
104
|
+
{#if variant === "drawer"}
|
|
105
|
+
<!-- Overlay : on délègue le chrome (dialog/Escape/backdrop) à Drawer. Drawer
|
|
106
|
+
exige un `title` ; à défaut on retombe sur `label` puis une valeur sûre.
|
|
107
|
+
Le header/search/body passent dans `children`, le footer dans son slot. -->
|
|
108
|
+
<Drawer
|
|
109
|
+
bind:open
|
|
110
|
+
{side}
|
|
111
|
+
title={title ?? label ?? "Navigation"}
|
|
112
|
+
class={rootClasses}
|
|
113
|
+
{footer}
|
|
114
|
+
>
|
|
115
|
+
{@render head()}
|
|
116
|
+
<div class="st-navShell__body">
|
|
117
|
+
{@render children()}
|
|
118
|
+
</div>
|
|
119
|
+
</Drawer>
|
|
120
|
+
{:else}
|
|
121
|
+
<!-- Panneau persistant : région complementary titrée. -->
|
|
122
|
+
<aside class={rootClasses} aria-label={label ?? title}>
|
|
123
|
+
{@render head()}
|
|
124
|
+
<div class="st-navShell__body">
|
|
125
|
+
{@render children()}
|
|
126
|
+
</div>
|
|
127
|
+
{#if footer}
|
|
128
|
+
<footer class="st-navShell__footer">
|
|
129
|
+
{@render footer()}
|
|
130
|
+
</footer>
|
|
131
|
+
{/if}
|
|
132
|
+
</aside>
|
|
133
|
+
{/if}
|
|
134
|
+
|
|
135
|
+
<style>
|
|
136
|
+
/* Token-only scopé. Rail = grille à 3 rangs (header+search auto / body 1fr /
|
|
137
|
+
footer auto) qui plafonne en hauteur pour que SEUL le corps scrolle. */
|
|
138
|
+
.st-navShell--rail {
|
|
139
|
+
background: var(--st-component-navShell-surface, var(--st-semantic-surface-raised));
|
|
140
|
+
border-color: var(--st-component-navShell-border, var(--st-semantic-border-subtle));
|
|
141
|
+
border-right-style: solid;
|
|
142
|
+
border-right-width: 1px;
|
|
143
|
+
color: var(--st-semantic-text-primary);
|
|
144
|
+
display: grid;
|
|
145
|
+
grid-template-rows: auto 1fr auto;
|
|
146
|
+
height: 100%;
|
|
147
|
+
inline-size: var(--st-component-navShell-width, 18rem);
|
|
148
|
+
max-inline-size: 100%;
|
|
149
|
+
padding: var(--st-spacing-4, 1rem);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.st-navShell__header {
|
|
153
|
+
align-items: center;
|
|
154
|
+
display: flex;
|
|
155
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
156
|
+
padding-block-end: var(--st-spacing-3, 0.75rem);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.st-navShell__back {
|
|
160
|
+
align-items: center;
|
|
161
|
+
background: transparent;
|
|
162
|
+
border: 1px solid var(--st-semantic-border-subtle);
|
|
163
|
+
border-radius: var(--st-radius-small, 0.375rem);
|
|
164
|
+
color: var(--st-semantic-text-primary);
|
|
165
|
+
cursor: pointer;
|
|
166
|
+
display: inline-flex;
|
|
167
|
+
flex: 0 0 auto;
|
|
168
|
+
height: 2rem;
|
|
169
|
+
justify-content: center;
|
|
170
|
+
width: 2rem;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.st-navShell__heading {
|
|
174
|
+
display: flex;
|
|
175
|
+
flex-direction: column;
|
|
176
|
+
gap: var(--st-spacing-1, 0.25rem);
|
|
177
|
+
min-inline-size: 0;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.st-navShell__title {
|
|
181
|
+
font-size: var(--st-component-navShell-titleSize, 1rem);
|
|
182
|
+
font-weight: 600;
|
|
183
|
+
line-height: 1.3;
|
|
184
|
+
margin: 0;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.st-navShell__subtitle {
|
|
188
|
+
color: var(--st-semantic-text-secondary);
|
|
189
|
+
font-size: var(--st-component-navShell-subtitleSize, 0.8125rem);
|
|
190
|
+
line-height: 1.4;
|
|
191
|
+
margin: 0;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* Search pleine largeur du panneau. */
|
|
195
|
+
.st-navShell__search {
|
|
196
|
+
display: block;
|
|
197
|
+
inline-size: 100%;
|
|
198
|
+
padding-block-end: var(--st-spacing-3, 0.75rem);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* Le corps est la SEULE région scrollable (1fr en rail, overflow en drawer). */
|
|
202
|
+
.st-navShell__body {
|
|
203
|
+
display: flex;
|
|
204
|
+
flex-direction: column;
|
|
205
|
+
gap: var(--st-spacing-2, 0.5rem);
|
|
206
|
+
min-block-size: 0;
|
|
207
|
+
overflow-y: auto;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.st-navShell__footer {
|
|
211
|
+
border-color: var(--st-component-navShell-border, var(--st-semantic-border-subtle));
|
|
212
|
+
border-top-style: solid;
|
|
213
|
+
border-top-width: 1px;
|
|
214
|
+
display: block;
|
|
215
|
+
margin-block-start: var(--st-spacing-3, 0.75rem);
|
|
216
|
+
padding-block-start: var(--st-spacing-3, 0.75rem);
|
|
217
|
+
}
|
|
218
|
+
</style>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Variante de chrome du panneau de navigation.
|
|
2
|
+
* - `rail` : panneau latéral persistant (`<aside>` complementary) ;
|
|
3
|
+
* - `drawer` : overlay — DÉLÈGUE au composant Drawer (rôle dialog + Escape + backdrop). */
|
|
4
|
+
export type NavShellVariant = "rail" | "drawer";
|
|
5
|
+
/** Côté d'ancrage quand `variant="drawer"` (transmis tel quel à Drawer). */
|
|
6
|
+
export type NavShellSide = "left" | "right" | "bottom";
|
|
7
|
+
import type { Snippet } from "svelte";
|
|
8
|
+
type NavShellProps = {
|
|
9
|
+
/** Chrome : panneau persistant (`rail`) ou overlay délégué à Drawer (`drawer`). */
|
|
10
|
+
variant?: NavShellVariant;
|
|
11
|
+
/** Titre du panneau, rendu dans le `<header>` (rail) ou via Drawer (drawer). */
|
|
12
|
+
title?: string;
|
|
13
|
+
/** Sous-titre muet sous le titre. */
|
|
14
|
+
subtitle?: string;
|
|
15
|
+
/** Affiche une flèche-retour dans l'en-tête (pattern maître→détail). */
|
|
16
|
+
back?: boolean;
|
|
17
|
+
/** Appelé au clic sur la flèche-retour. */
|
|
18
|
+
onBack?: () => void;
|
|
19
|
+
/** Libellé accessible de la flèche-retour. */
|
|
20
|
+
backLabel?: string;
|
|
21
|
+
/** Libellé accessible du panneau (aria-label de l'aside / du dialog). */
|
|
22
|
+
label?: string;
|
|
23
|
+
/** Slot de recherche rendu PLEINE LARGEUR (ex. Search fluid). */
|
|
24
|
+
search?: Snippet;
|
|
25
|
+
/** Zone d'actions en pied (ex. NavActionStack). */
|
|
26
|
+
footer?: Snippet;
|
|
27
|
+
/** Corps scrollable (NavSection / NavList / NavTree). */
|
|
28
|
+
children: Snippet;
|
|
29
|
+
/** Ouverture du tiroir quand `variant="drawer"` (bindable). */
|
|
30
|
+
open?: boolean;
|
|
31
|
+
/** Côté d'ancrage du tiroir quand `variant="drawer"`. */
|
|
32
|
+
side?: NavShellSide;
|
|
33
|
+
class?: string;
|
|
34
|
+
};
|
|
35
|
+
declare const NavShell: import("svelte").Component<NavShellProps, {}, "open">;
|
|
36
|
+
type NavShell = ReturnType<typeof NavShell>;
|
|
37
|
+
export default NavShell;
|
|
38
|
+
//# sourceMappingURL=NavShell.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavShell.svelte.d.ts","sourceRoot":"","sources":["../src/lib/NavShell.svelte.ts"],"names":[],"mappings":"AAGE;;2FAE2F;AAC3F,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhD,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAezD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIpC,KAAK,aAAa,GAAG;IACnB,mFAAmF;IACnF,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,QAAQ,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yDAAyD;IACzD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA0FJ,QAAA,MAAM,QAAQ,uDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
|
@@ -43,6 +43,8 @@
|
|
|
43
43
|
disabled?: boolean;
|
|
44
44
|
/** Stable value, surfaced as `data-value` and used by the list for `value`. */
|
|
45
45
|
value?: string;
|
|
46
|
+
/** Native link target. When set on a standalone row, the row renders as an anchor. */
|
|
47
|
+
href?: string;
|
|
46
48
|
/**
|
|
47
49
|
* ARIA role for the standalone row. Defaults to "button" for standalone use —
|
|
48
50
|
* "option" is only valid inside a listbox and would be invalid without one.
|
|
@@ -82,6 +84,7 @@
|
|
|
82
84
|
onselect,
|
|
83
85
|
disabled = false,
|
|
84
86
|
value,
|
|
87
|
+
href,
|
|
85
88
|
role = "button",
|
|
86
89
|
accentBar = false,
|
|
87
90
|
leading,
|
|
@@ -122,7 +125,8 @@
|
|
|
122
125
|
const isSelected = $derived(list && el ? list.isSelected(el) : selected);
|
|
123
126
|
|
|
124
127
|
// Effective role: a managed row is always an "option" inside the listbox.
|
|
125
|
-
const effectiveRole = $derived(list ? list.itemRole : role);
|
|
128
|
+
const effectiveRole = $derived(list ? list.itemRole : href ? undefined : role);
|
|
129
|
+
const rowTag = $derived(href ? "a" : "div");
|
|
126
130
|
|
|
127
131
|
// Roving tabindex: in a list, exactly one enabled row is the tab stop (0), the
|
|
128
132
|
// rest are -1. Standalone enabled rows are always tabbable (0). Disabled = -1.
|
|
@@ -143,8 +147,12 @@
|
|
|
143
147
|
.join(" ")
|
|
144
148
|
);
|
|
145
149
|
|
|
146
|
-
function activate() {
|
|
147
|
-
if (disabled)
|
|
150
|
+
function activate(event?: MouseEvent) {
|
|
151
|
+
if (disabled) {
|
|
152
|
+
event?.preventDefault();
|
|
153
|
+
event?.stopPropagation();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
148
156
|
if (list && el) {
|
|
149
157
|
list.activate(el);
|
|
150
158
|
return;
|
|
@@ -155,6 +163,7 @@
|
|
|
155
163
|
|
|
156
164
|
function handleKeydown(e: KeyboardEvent) {
|
|
157
165
|
if (disabled) return;
|
|
166
|
+
if (href && !list) return;
|
|
158
167
|
if (e.key === "Enter" || e.key === " ") {
|
|
159
168
|
e.preventDefault();
|
|
160
169
|
activate();
|
|
@@ -186,9 +195,11 @@
|
|
|
186
195
|
tabindex is correct; the role is dynamic, which the static a11y check cannot
|
|
187
196
|
verify, hence the targeted ignore. -->
|
|
188
197
|
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
189
|
-
<
|
|
198
|
+
<svelte:element
|
|
199
|
+
this={rowTag}
|
|
190
200
|
bind:this={el}
|
|
191
201
|
class={classes}
|
|
202
|
+
href={href && !disabled ? href : undefined}
|
|
192
203
|
role={effectiveRole}
|
|
193
204
|
aria-selected={effectiveRole === "option" ? isSelected : undefined}
|
|
194
205
|
aria-pressed={effectiveRole === "button" ? isSelected : undefined}
|
|
@@ -216,7 +227,7 @@
|
|
|
216
227
|
{#if trailing}
|
|
217
228
|
<span class="st-selectableRow__trailing">{@render trailing()}</span>
|
|
218
229
|
{/if}
|
|
219
|
-
</
|
|
230
|
+
</svelte:element>
|
|
220
231
|
|
|
221
232
|
<style>
|
|
222
233
|
/* Compact, full-width selectable list/rail row. By DEFAULT the selected state
|
|
@@ -39,6 +39,8 @@ export type SelectableRowProps = {
|
|
|
39
39
|
disabled?: boolean;
|
|
40
40
|
/** Stable value, surfaced as `data-value` and used by the list for `value`. */
|
|
41
41
|
value?: string;
|
|
42
|
+
/** Native link target. When set on a standalone row, the row renders as an anchor. */
|
|
43
|
+
href?: string;
|
|
42
44
|
/**
|
|
43
45
|
* ARIA role for the standalone row. Defaults to "button" for standalone use —
|
|
44
46
|
* "option" is only valid inside a listbox and would be invalid without one.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectableRow.svelte.d.ts","sourceRoot":"","sources":["../src/lib/SelectableRow.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,eAA+B,CAAC;AAEhE,MAAM,MAAM,qBAAqB,GAAG;IAClC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,wIAAwI;IACxI,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;IACzF,uDAAuD;IACvD,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;IACzC,iFAAiF;IACjF,SAAS,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;IACxC,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,wDAAwD;IACxD,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,gDAAgD;IAChD,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"SelectableRow.svelte.d.ts","sourceRoot":"","sources":["../src/lib/SelectableRow.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,eAA+B,CAAC;AAEhE,MAAM,MAAM,qBAAqB,GAAG;IAClC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,wIAAwI;IACxI,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;IACzF,uDAAuD;IACvD,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;IACzC,iFAAiF;IACjF,SAAS,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;IACxC,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,wDAAwD;IACxD,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,gDAAgD;IAChD,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkJJ,QAAA,MAAM,aAAa,gEAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
export type UtilityPanelMode = "reserve" | "overlay" | "floating";
|
|
5
|
+
export type UtilityPanelSide = "left" | "right" | "bottom";
|
|
6
|
+
|
|
7
|
+
export interface UtilityPanelProps {
|
|
8
|
+
mode?: UtilityPanelMode;
|
|
9
|
+
side?: UtilityPanelSide;
|
|
10
|
+
title?: string;
|
|
11
|
+
label?: string;
|
|
12
|
+
collapsed?: boolean;
|
|
13
|
+
header?: Snippet;
|
|
14
|
+
footer?: Snippet;
|
|
15
|
+
children?: Snippet;
|
|
16
|
+
class?: string;
|
|
17
|
+
}
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<script lang="ts">
|
|
21
|
+
let {
|
|
22
|
+
mode = "reserve",
|
|
23
|
+
side = "right",
|
|
24
|
+
title,
|
|
25
|
+
label,
|
|
26
|
+
collapsed = false,
|
|
27
|
+
header,
|
|
28
|
+
footer,
|
|
29
|
+
children,
|
|
30
|
+
class: className
|
|
31
|
+
}: UtilityPanelProps = $props();
|
|
32
|
+
|
|
33
|
+
const classes = $derived(["st-utilityPanel", `st-utilityPanel--${mode}`, `st-utilityPanel--${side}`, collapsed && "st-utilityPanel--collapsed", className].filter(Boolean).join(" "));
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<aside class={classes} aria-label={label ?? title ?? "Utility panel"} data-mode={mode} data-side={side}>
|
|
37
|
+
{#if header || title}
|
|
38
|
+
<header class="st-utilityPanel__header">
|
|
39
|
+
{#if header}{@render header()}{:else}<h2 class="st-utilityPanel__title">{title}</h2>{/if}
|
|
40
|
+
</header>
|
|
41
|
+
{/if}
|
|
42
|
+
{#if !collapsed}
|
|
43
|
+
<div class="st-utilityPanel__body">{@render children?.()}</div>
|
|
44
|
+
{#if footer}<footer class="st-utilityPanel__footer">{@render footer()}</footer>{/if}
|
|
45
|
+
{/if}
|
|
46
|
+
</aside>
|
|
47
|
+
|
|
48
|
+
<style>
|
|
49
|
+
.st-utilityPanel {
|
|
50
|
+
background: var(--st-component-utilityPanel-surface, var(--st-semantic-surface-raised));
|
|
51
|
+
color: var(--st-semantic-text-primary);
|
|
52
|
+
display: grid;
|
|
53
|
+
grid-template-rows: auto 1fr auto;
|
|
54
|
+
block-size: 100%;
|
|
55
|
+
min-block-size: 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.st-utilityPanel--floating,
|
|
59
|
+
.st-utilityPanel--overlay {
|
|
60
|
+
box-shadow: var(--st-component-utilityPanel-shadow, 0 18px 45px rgb(15 23 42 / 0.18));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.st-utilityPanel__header,
|
|
64
|
+
.st-utilityPanel__footer {
|
|
65
|
+
border-color: var(--st-component-utilityPanel-border, var(--st-semantic-border-subtle));
|
|
66
|
+
padding: var(--st-spacing-4, 1rem);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.st-utilityPanel__header {
|
|
70
|
+
border-block-end-style: solid;
|
|
71
|
+
border-block-end-width: 1px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.st-utilityPanel__footer {
|
|
75
|
+
border-block-start-style: solid;
|
|
76
|
+
border-block-start-width: 1px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.st-utilityPanel__title {
|
|
80
|
+
font-size: 1rem;
|
|
81
|
+
line-height: 1.3;
|
|
82
|
+
margin: 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.st-utilityPanel__body {
|
|
86
|
+
min-block-size: 0;
|
|
87
|
+
overflow: auto;
|
|
88
|
+
}
|
|
89
|
+
</style>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
export type UtilityPanelMode = "reserve" | "overlay" | "floating";
|
|
3
|
+
export type UtilityPanelSide = "left" | "right" | "bottom";
|
|
4
|
+
export interface UtilityPanelProps {
|
|
5
|
+
mode?: UtilityPanelMode;
|
|
6
|
+
side?: UtilityPanelSide;
|
|
7
|
+
title?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
collapsed?: boolean;
|
|
10
|
+
header?: Snippet;
|
|
11
|
+
footer?: Snippet;
|
|
12
|
+
children?: Snippet;
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
declare const UtilityPanel: import("svelte").Component<UtilityPanelProps, {}, "">;
|
|
16
|
+
type UtilityPanel = ReturnType<typeof UtilityPanel>;
|
|
17
|
+
export default UtilityPanel;
|
|
18
|
+
//# sourceMappingURL=UtilityPanel.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UtilityPanel.svelte.d.ts","sourceRoot":"","sources":["../src/lib/UtilityPanel.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoCH,QAAA,MAAM,YAAY,uDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -178,6 +178,16 @@ export { default as SelectableRow } from "./SelectableRow.svelte";
|
|
|
178
178
|
export { default as SelectionChip } from "./SelectionChip.svelte";
|
|
179
179
|
export { default as SelectableList } from "./SelectableList.svelte";
|
|
180
180
|
export { default as SideNav } from "./SideNav.svelte";
|
|
181
|
+
export { default as NavShell } from "./NavShell.svelte";
|
|
182
|
+
export type { NavShellSide, NavShellVariant } from "./NavShell.svelte";
|
|
183
|
+
export { default as NavRail } from "./NavRail.svelte";
|
|
184
|
+
export type { NavRailItem, NavRailProps } from "./NavRail.svelte";
|
|
185
|
+
export { default as NavDrawer } from "./NavDrawer.svelte";
|
|
186
|
+
export type { NavDrawerProps } from "./NavDrawer.svelte";
|
|
187
|
+
export { default as ContextPanel } from "./ContextPanel.svelte";
|
|
188
|
+
export type { ContextPanelProps } from "./ContextPanel.svelte";
|
|
189
|
+
export { default as UtilityPanel } from "./UtilityPanel.svelte";
|
|
190
|
+
export type { UtilityPanelMode, UtilityPanelProps, UtilityPanelSide } from "./UtilityPanel.svelte";
|
|
181
191
|
export { default as SkeletonText } from "./SkeletonText.svelte";
|
|
182
192
|
export { default as SkipLink } from "./SkipLink.svelte";
|
|
183
193
|
export { default as SlideIndicator } from "./SlideIndicator.svelte";
|
|
@@ -196,6 +206,7 @@ export { default as Tabs } from "./Tabs.svelte";
|
|
|
196
206
|
export { default as Tag } from "./Tag.svelte";
|
|
197
207
|
export { default as ThemeProvider } from "./ThemeProvider.svelte";
|
|
198
208
|
export { default as AppShell } from "./AppShell.svelte";
|
|
209
|
+
export type { AppShellProps, AppShellUtilityMode, AppShellUtilitySide, AppShellVariant } from "./AppShell.svelte";
|
|
199
210
|
export { default as IdentityButton } from "./IdentityButton.svelte";
|
|
200
211
|
export type { SiteConfig, SiteNavItem, ThemeOption, ColorMode, ActionMode } from "./site-config";
|
|
201
212
|
export { SITE_CONFIG_SCHEMA_VERSION, SHELL_TOKEN_CONTRACT } from "./site-config";
|