@sentropic/design-system-svelte 0.34.57 → 0.34.58

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.
@@ -44,6 +44,11 @@
44
44
  * - `accordion` : déclencheur + liste inline (tiroir mobile).
45
45
  */
46
46
  variant?: "dropdown" | "accordion";
47
+ /**
48
+ * Mode compact : n'affiche que l'avatar (2 initiales) sans nom ni chevron.
49
+ * Idéal pour les headers où l'espace est limité.
50
+ */
51
+ compact?: boolean;
47
52
  class?: string;
48
53
  }
49
54
 
@@ -52,6 +57,12 @@
52
57
  const source = user?.displayName || user?.email || "U";
53
58
  return source.charAt(0).toUpperCase();
54
59
  }
60
+
61
+ /** Deux initiales (1re lettre de chaque mot, jusqu'à 2 mots) pour le mode compact. */
62
+ export function identityInitials(user: IdentityUser | null | undefined): string {
63
+ const source = user?.displayName || user?.email || "U";
64
+ return source.trim().split(/\s+/).map((w) => w[0]).slice(0, 2).join("").toUpperCase();
65
+ }
55
66
  </script>
56
67
 
57
68
  <script lang="ts">
@@ -71,6 +82,7 @@
71
82
  settingsLabel = "Paramètres",
72
83
  logoutLabel = "Se déconnecter",
73
84
  variant = "dropdown",
85
+ compact = false,
74
86
  class: className,
75
87
  }: IdentityMenuProps = $props();
76
88
 
@@ -91,8 +103,11 @@
91
103
  onOpenChange?.(next);
92
104
  }
93
105
 
94
- const classes = () => ["st-identityMenu", className].filter(Boolean).join(" ");
95
- const initial = $derived(identityInitial(user));
106
+ const classes = () =>
107
+ ["st-identityMenu", compact ? "st-identityMenu--compact" : null, className]
108
+ .filter(Boolean)
109
+ .join(" ");
110
+ const initial = $derived(compact ? identityInitials(user) : identityInitial(user));
96
111
  const displayName = $derived(user?.displayName || user?.email || "User");
97
112
 
98
113
  function getMenuItems(): HTMLElement[] {
@@ -234,17 +249,19 @@
234
249
  onkeydown={onTriggerKeydown}
235
250
  >
236
251
  <span class="st-identityMenu__avatar" aria-hidden="true">{initial}</span>
237
- <span class="st-identityMenu__meta">
238
- <span class="st-identityMenu__name">{displayName}</span>
239
- {#if variant === "accordion" && user.email}
240
- <span class="st-identityMenu__email">{user.email}</span>
241
- {/if}
242
- </span>
243
- <ChevronDown
244
- class={`st-identityMenu__chevron${isOpen ? " st-identityMenu__chevron--open" : ""}`}
245
- size={16}
246
- aria-hidden="true"
247
- />
252
+ {#if !compact}
253
+ <span class="st-identityMenu__meta">
254
+ <span class="st-identityMenu__name">{displayName}</span>
255
+ {#if variant === "accordion" && user.email}
256
+ <span class="st-identityMenu__email">{user.email}</span>
257
+ {/if}
258
+ </span>
259
+ <ChevronDown
260
+ class={`st-identityMenu__chevron${isOpen ? " st-identityMenu__chevron--open" : ""}`}
261
+ size={16}
262
+ aria-hidden="true"
263
+ />
264
+ {/if}
248
265
  </button>
249
266
 
250
267
  {#if isOpen}
@@ -309,6 +326,10 @@
309
326
  width: 100%;
310
327
  }
311
328
 
329
+ .st-identityMenu--compact .st-identityMenu__trigger {
330
+ padding: var(--st-spacing-1, 0.25rem);
331
+ }
332
+
312
333
  .st-identityMenu__trigger {
313
334
  align-items: center;
314
335
  background: transparent;
@@ -42,10 +42,17 @@ export interface IdentityMenuProps {
42
42
  * - `accordion` : déclencheur + liste inline (tiroir mobile).
43
43
  */
44
44
  variant?: "dropdown" | "accordion";
45
+ /**
46
+ * Mode compact : n'affiche que l'avatar (2 initiales) sans nom ni chevron.
47
+ * Idéal pour les headers où l'espace est limité.
48
+ */
49
+ compact?: boolean;
45
50
  class?: string;
46
51
  }
47
52
  /** Première lettre du displayName, en majuscule (calque de la source). */
48
53
  export declare function identityInitial(user: IdentityUser | null | undefined): string;
54
+ /** Deux initiales (1re lettre de chaque mot, jusqu'à 2 mots) pour le mode compact. */
55
+ export declare function identityInitials(user: IdentityUser | null | undefined): string;
49
56
  declare const IdentityMenu: import("svelte").Component<IdentityMenuProps, {}, "open">;
50
57
  type IdentityMenu = ReturnType<typeof IdentityMenu>;
51
58
  export default IdentityMenu;
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityMenu.svelte.d.ts","sourceRoot":"","sources":["../src/lib/IdentityMenu.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,oEAAoE;IACpE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG7E;AA8MH,QAAA,MAAM,YAAY,2DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"IdentityMenu.svelte.d.ts","sourceRoot":"","sources":["../src/lib/IdentityMenu.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,oEAAoE;IACpE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG7E;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG9E;AAoNH,QAAA,MAAM,YAAY,2DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
package/dist/Menu.svelte CHANGED
@@ -8,7 +8,7 @@
8
8
  class?: string;
9
9
  } & Record<`data-${string}`, unknown>;
10
10
 
11
- export type MenuIcon = Component<MenuIconProps>;
11
+ export type MenuIcon = Component<MenuIconProps> | string;
12
12
 
13
13
  export interface MenuActionItem {
14
14
  kind?: "item";
@@ -158,7 +158,11 @@
158
158
  >
159
159
  {#if Icon}
160
160
  <span class="st-menu__itemIcon" aria-hidden="true">
161
- <Icon size={16} strokeWidth={2} />
161
+ {#if typeof Icon === "string"}
162
+ {Icon}
163
+ {:else}
164
+ <Icon size={16} strokeWidth={2} />
165
+ {/if}
162
166
  </span>
163
167
  {/if}
164
168
  <span class="st-menu__itemLabel">{item.label}</span>
@@ -201,6 +205,7 @@
201
205
  cursor: pointer;
202
206
  display: flex;
203
207
  font: inherit;
208
+ font-size: var(--st-component-menu-fontSize, 0.875rem);
204
209
  gap: var(--st-spacing-2, 0.5rem);
205
210
  padding: var(--st-spacing-2, 0.5rem) var(--st-spacing-3, 0.75rem);
206
211
  text-align: left;
@@ -239,6 +244,8 @@
239
244
  display: inline-flex;
240
245
  flex: 0 0 auto;
241
246
  justify-content: center;
247
+ line-height: 1;
248
+ width: 1rem;
242
249
  }
243
250
 
244
251
  .st-menu__itemLabel {
@@ -5,7 +5,7 @@ export type MenuIconProps = {
5
5
  color?: string;
6
6
  class?: string;
7
7
  } & Record<`data-${string}`, unknown>;
8
- export type MenuIcon = Component<MenuIconProps>;
8
+ export type MenuIcon = Component<MenuIconProps> | string;
9
9
  export interface MenuActionItem {
10
10
  kind?: "item";
11
11
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Menu.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAAC,QAAQ,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;AAS1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AA+HJ,QAAA,MAAM,IAAI,kCAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Menu.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Menu.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAAC,QAAQ,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;AAS1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAmIJ,QAAA,MAAM,IAAI,kCAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
@@ -8,7 +8,7 @@
8
8
  class?: string;
9
9
  } & Record<`data-${string}`, unknown>;
10
10
 
11
- export type OverflowMenuIcon = Component<OverflowMenuIconProps>;
11
+ export type OverflowMenuIcon = Component<OverflowMenuIconProps> | string;
12
12
 
13
13
  export interface OverflowMenuActionItem {
14
14
  kind?: "item";
@@ -66,6 +66,37 @@
66
66
  let host: HTMLDivElement | undefined = $state();
67
67
  let list: HTMLUListElement | undefined = $state();
68
68
 
69
+ // Cap viewport-aware (aligné sur MenuPopover) : sans ça, une longue liste
70
+ // (~12+ items) déborde du viewport en mobile <768px sans scroll. On borne la
71
+ // hauteur du panneau à l'espace réellement disponible sous (ou au-dessus, en
72
+ // placement `top`) le déclencheur, et `overflow-y:auto` (CSS) rend scrollable.
73
+ let maxHeight = $state(0);
74
+ const VIEWPORT_GAP = 4;
75
+ const VIEWPORT_MARGIN = 8;
76
+ const MIN_PANEL_HEIGHT = 160;
77
+
78
+ function computeMaxHeight() {
79
+ if (!host || typeof window === "undefined") return;
80
+ const rect = host.getBoundingClientRect();
81
+ const up = placement === "top-start" || placement === "top-end";
82
+ maxHeight = up
83
+ ? Math.max(rect.top - VIEWPORT_GAP - VIEWPORT_MARGIN, MIN_PANEL_HEIGHT)
84
+ : Math.max(window.innerHeight - rect.bottom - VIEWPORT_GAP - VIEWPORT_MARGIN, MIN_PANEL_HEIGHT);
85
+ }
86
+
87
+ // À l'ouverture : calcule la hauteur dispo et suit scroll/resize tant qu'ouvert.
88
+ $effect(() => {
89
+ if (!open) return;
90
+ computeMaxHeight();
91
+ const recompute = () => computeMaxHeight();
92
+ window.addEventListener("scroll", recompute, true);
93
+ window.addEventListener("resize", recompute);
94
+ return () => {
95
+ window.removeEventListener("scroll", recompute, true);
96
+ window.removeEventListener("resize", recompute);
97
+ };
98
+ });
99
+
69
100
  function getFocusableItems(): HTMLButtonElement[] {
70
101
  return Array.from(
71
102
  list?.querySelectorAll<HTMLButtonElement>('[role="menuitem"]:not(:disabled)') ?? []
@@ -196,7 +227,13 @@
196
227
  <Ellipsis size={18} strokeWidth={2.25} aria-hidden="true" />
197
228
  </button>
198
229
  {#if open}
199
- <ul bind:this={list} class="st-overflowMenu__list" role="menu" aria-label={label}>
230
+ <ul
231
+ bind:this={list}
232
+ class="st-overflowMenu__list"
233
+ role="menu"
234
+ aria-label={label}
235
+ style={maxHeight ? `max-height: ${maxHeight}px` : undefined}
236
+ >
200
237
  {#each items as item, index (index)}
201
238
  {#if isAction(item)}
202
239
  {@const Icon = item.icon}
@@ -214,7 +251,11 @@
214
251
  >
215
252
  {#if Icon}
216
253
  <span class="st-overflowMenu__itemIcon" aria-hidden="true">
217
- <Icon size={16} strokeWidth={2} />
254
+ {#if typeof Icon === "string"}
255
+ {Icon}
256
+ {:else}
257
+ <Icon size={16} strokeWidth={2} />
258
+ {/if}
218
259
  </span>
219
260
  {/if}
220
261
  <span class="st-overflowMenu__itemLabel">{item.label}</span>
@@ -277,6 +318,10 @@
277
318
  margin: 0;
278
319
  min-width: var(--st-component-menu-minWidth, 12rem);
279
320
  max-width: var(--st-component-menu-maxWidth, 18rem);
321
+ /* Fallback CSS si le calcul JS n'a pas encore posé le max-height inline ;
322
+ overflow-y:auto rend la liste scrollable quand elle dépasse le viewport. */
323
+ max-height: calc(100vh - 2rem);
324
+ overflow-y: auto;
280
325
  padding: var(--st-spacing-1, 0.25rem);
281
326
  position: absolute;
282
327
  z-index: var(--st-component-popover-zIndex, 80);
@@ -5,7 +5,7 @@ export type OverflowMenuIconProps = {
5
5
  color?: string;
6
6
  class?: string;
7
7
  } & Record<`data-${string}`, unknown>;
8
- export type OverflowMenuIcon = Component<OverflowMenuIconProps>;
8
+ export type OverflowMenuIcon = Component<OverflowMenuIconProps> | string;
9
9
  export interface OverflowMenuActionItem {
10
10
  kind?: "item";
11
11
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"OverflowMenu.svelte.d.ts","sourceRoot":"","sources":["../src/lib/OverflowMenu.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAAC,QAAQ,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAEhE,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,uBAAuB,GACvB,qBAAqB,CAAC;AAI5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIpD,KAAK,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACpF,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AA8KJ,QAAA,MAAM,YAAY,0CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"OverflowMenu.svelte.d.ts","sourceRoot":"","sources":["../src/lib/OverflowMenu.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAAC,QAAQ,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,uBAAuB,GACvB,qBAAqB,CAAC;AAI5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIpD,KAAK,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACpF,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAiNJ,QAAA,MAAM,YAAY,0CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -44,7 +44,7 @@
44
44
  Array.from({ length: max }, (_, i) => i < filled)
45
45
  );
46
46
  const ariaLabel = $derived(
47
- `${title}, ${score.toFixed(1)} ${unit}, ${filled} sur ${max}`
47
+ `${title}, ${(score ?? 0).toFixed(1)} ${unit}, ${filled} sur ${max}`
48
48
  );
49
49
 
50
50
  const classes = $derived(
@@ -80,7 +80,7 @@
80
80
  {/each}
81
81
  </div>
82
82
  <span class="st-scoreCard__score">
83
- {score.toFixed(1)} {unit}
83
+ {(score ?? 0).toFixed(1)} {unit}
84
84
  </span>
85
85
  </div>
86
86
  </article>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentropic/design-system-svelte",
3
- "version": "0.34.57",
3
+ "version": "0.34.58",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"