@besaitech/ng-design-system 0.0.66 → 0.0.68

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/index.d.ts CHANGED
@@ -3,7 +3,6 @@ import { OnDestroy, ElementRef, TemplateRef, WritableSignal, OnInit, InjectionTo
3
3
  import { SafeHtml } from '@angular/platform-browser';
4
4
  import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
5
5
  import * as _besaitech_ng_design_system from '@besaitech/ng-design-system';
6
- import * as d3_scale from 'd3-scale';
7
6
 
8
7
  /**
9
8
  * Curated set of line icons (Lucide-style, 24x24 viewBox, stroke-based).
@@ -2093,6 +2092,18 @@ declare function isOutOfRange(d: Date, min: Date | null, max: Date | null): bool
2093
2092
  declare function isoDay(d: Date): string;
2094
2093
  /** Format a date as dd/MM/yyyy (default display format). */
2095
2094
  declare function formatDdMmYyyy(d: Date): string;
2095
+ /** Whole calendar days from `a` to `b` (b − a), ignoring time-of-day and DST shifts. */
2096
+ declare function diffInDays(a: Date, b: Date): number;
2097
+ /**
2098
+ * Format an inclusive day range for display, e.g. `1–7 Oct 2026`, `28 Sept – 4 Oct 2026` or
2099
+ * `20 Dec 2026 – 3 Jan 2027` (en-GB). Uses `Intl.DateTimeFormat#formatRange`, which collapses the
2100
+ * parts both ends share; falls back to `start – end` where it is unavailable. A one-day range prints
2101
+ * a single date.
2102
+ */
2103
+ declare function formatDateRange(range: {
2104
+ start: Date;
2105
+ end: Date;
2106
+ }, locale?: string, options?: Intl.DateTimeFormatOptions): string;
2096
2107
 
2097
2108
  type CalView = 'day' | 'month' | 'year';
2098
2109
  interface DayCell {
@@ -2340,6 +2351,273 @@ declare class SdsDatePicker implements ControlValueAccessor, OnDestroy {
2340
2351
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsDatePicker, "sds-date-picker", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showTime": { "alias": "showTime"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "timeLabel": { "alias": "timeLabel"; "required": false; "isSignal": true; }; "hoursLabel": { "alias": "hoursLabel"; "required": false; "isSignal": true; }; "minutesLabel": { "alias": "minutesLabel"; "required": false; "isSignal": true; }; "doneLabel": { "alias": "doneLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "openCalendarLabel": { "alias": "openCalendarLabel"; "required": false; "isSignal": true; }; "closeCalendarLabel": { "alias": "closeCalendarLabel"; "required": false; "isSignal": true; }; "panelLabel": { "alias": "panelLabel"; "required": false; "isSignal": true; }; "calendarLabel": { "alias": "calendarLabel"; "required": false; "isSignal": true; }; "previousLabel": { "alias": "previousLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "todayActionLabel": { "alias": "todayActionLabel"; "required": false; "isSignal": true; }; "clearActionLabel": { "alias": "clearActionLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2341
2352
  }
2342
2353
 
2354
+ /**
2355
+ * An inclusive range of whole days. Both ends are local midnight (`startOfDay`); `end` is the last
2356
+ * day IN the range, so a one-day range has `start` and `end` on the same day.
2357
+ */
2358
+ interface SdsDateRange {
2359
+ start: Date;
2360
+ end: Date;
2361
+ }
2362
+ /**
2363
+ * A quick range shown in the left column of `<sds-date-range-picker>`. `range` is a function so
2364
+ * relative presets ("last 30 days") are computed when the panel opens, not when the app boots.
2365
+ */
2366
+ interface SdsDateRangePreset {
2367
+ /** Stable id, emitted by `(presetSelect)` — e.g. `'30d'`; keep it out of the translated text. */
2368
+ id: string;
2369
+ /** Visible text (translate it in the app). */
2370
+ label: string;
2371
+ range: () => SdsDateRange;
2372
+ }
2373
+ /** Same first and last day (time-of-day ignored). `null` only equals `null`. */
2374
+ declare function isSameRange(a: SdsDateRange | null | undefined, b: SdsDateRange | null | undefined): boolean;
2375
+ /** The last `days` days, today included: `sdsLastDays(7)` = today − 6 … today. */
2376
+ declare function sdsLastDays(days: number, today?: Date): SdsDateRange;
2377
+ /**
2378
+ * The last `months` months, today included: `sdsLastMonths(12)` on 13 Oct 2026 = 14 Oct 2025 …
2379
+ * 13 Oct 2026 (the day after the same day `months` months ago, clamped to short months).
2380
+ */
2381
+ declare function sdsLastMonths(months: number, today?: Date): SdsDateRange;
2382
+
2383
+ /** Where the soft in-range band sits behind a day: none, the whole cell, or one half of it. */
2384
+ type Band = 'none' | 'full' | 'right' | 'left';
2385
+ interface RangeCell {
2386
+ key: string;
2387
+ /** `null` = a filler cell before the 1st / after the last day of the month (rendered empty). */
2388
+ date: Date | null;
2389
+ day: number;
2390
+ today: boolean;
2391
+ disabled: boolean;
2392
+ tabbable: boolean;
2393
+ /** First day of the range. */
2394
+ isStart: boolean;
2395
+ /** Last day of a COMMITTED range (end set). */
2396
+ isEnd: boolean;
2397
+ /** Hovered/focused day previewed as the end while choosing it. */
2398
+ isPreviewEnd: boolean;
2399
+ /** Strictly between start and the (committed or previewed) end. */
2400
+ inRange: boolean;
2401
+ band: Band;
2402
+ roundLeft: boolean;
2403
+ roundRight: boolean;
2404
+ }
2405
+ interface MonthView {
2406
+ key: string;
2407
+ title: string;
2408
+ weeks: RangeCell[][];
2409
+ }
2410
+ /**
2411
+ * Range calendar: one or two side-by-side months on which a day range is picked with two clicks.
2412
+ * Used by `<sds-date-range-picker>`, and usable on its own (bind `[(start)]` and `[(end)]`).
2413
+ *
2414
+ * Selection rule: the first click sets `start` (and clears `end`); the second sets `end` — or, when
2415
+ * it lands BEFORE `start`, becomes the new `start`. Clicking the start day again gives a one-day
2416
+ * range. While the end is being chosen, the band previews start → hovered (or keyboard-focused) day.
2417
+ * `maxDays` caps the span: once a start is picked, days past `start + maxDays − 1` are disabled.
2418
+ *
2419
+ * Bare (no border / shadow / background): place it in your own card or panel.
2420
+ *
2421
+ * Keyboard: arrows move by day / week, Home / End to the week's start / end, PageUp / PageDown by
2422
+ * month (roving tabindex across both months); Enter / Space picks the focused day.
2423
+ *
2424
+ * @example
2425
+ * <sds-range-calendar [(start)]="from" [(end)]="to" [max]="today" />
2426
+ */
2427
+ declare class SdsRangeCalendar {
2428
+ private readonly host;
2429
+ private readonly injector;
2430
+ /** First day of the range (two-way: `[(start)]`). */
2431
+ readonly start: _angular_core.ModelSignal<Date | null>;
2432
+ /** Last day of the range, inclusive (two-way: `[(end)]`). `null` while the end is being chosen. */
2433
+ readonly end: _angular_core.ModelSignal<Date | null>;
2434
+ readonly min: _angular_core.InputSignal<Date | null>;
2435
+ readonly max: _angular_core.InputSignal<Date | null>;
2436
+ /** Longest selectable span in days (start and end included). `null` = no limit. */
2437
+ readonly maxDays: _angular_core.InputSignal<number | null>;
2438
+ /** 0 = Sunday, 1 = Monday (default, European). */
2439
+ readonly firstDayOfWeek: _angular_core.InputSignal<0 | 1>;
2440
+ /** BCP 47 locale for month and weekday names. Defaults to `en-GB`; pass the app's locale. */
2441
+ readonly locale: _angular_core.InputSignal<string>;
2442
+ /** Months shown side by side (from the `sm` breakpoint; always one below it). */
2443
+ readonly months: _angular_core.InputSignal<2 | 1>;
2444
+ /** Accessible name of the calendar group. English default — translate it in the app. */
2445
+ readonly calendarLabel: _angular_core.InputSignal<string>;
2446
+ /** Accessible name of the icon-only "previous month" button (its ONLY name — translate it). */
2447
+ readonly previousLabel: _angular_core.InputSignal<string>;
2448
+ /** Accessible name of the icon-only "next month" button. See {@link previousLabel}. */
2449
+ readonly nextLabel: _angular_core.InputSignal<string>;
2450
+ /** Emitted on every day pick (start or end). */
2451
+ readonly daySelect: _angular_core.OutputEmitterRef<Date>;
2452
+ /** Emitted when a pick completes the range (both ends set). */
2453
+ readonly rangeSelect: _angular_core.OutputEmitterRef<SdsDateRange>;
2454
+ /** The day under the pointer / keyboard focus (`null` when the pointer leaves the grid). */
2455
+ readonly dayHover: _angular_core.OutputEmitterRef<Date | null>;
2456
+ /** First month on screen. */
2457
+ protected readonly viewDate: _angular_core.WritableSignal<Date>;
2458
+ protected readonly focusedDate: _angular_core.WritableSignal<Date>;
2459
+ protected readonly hovered: _angular_core.WritableSignal<Date | null>;
2460
+ private readonly wide;
2461
+ /** Months actually rendered: {@link months}, but one on narrow viewports. */
2462
+ protected readonly monthsShown: _angular_core.Signal<2 | 1>;
2463
+ constructor();
2464
+ private watchViewport;
2465
+ protected readonly navBtn = "inline-flex h-8 w-8 items-center justify-center rounded-control text-ink-soft hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40";
2466
+ protected readonly weekdayLabels: _angular_core.Signal<string[]>;
2467
+ /** The end used for drawing: the committed end, else the previewed (hovered) one. */
2468
+ private readonly previewEnd;
2469
+ protected readonly prevDisabled: _angular_core.Signal<boolean>;
2470
+ protected readonly nextDisabled: _angular_core.Signal<boolean>;
2471
+ protected readonly monthViews: _angular_core.Signal<MonthView[]>;
2472
+ private isDisabled;
2473
+ protected selectDay(d: Date): void;
2474
+ protected setHover(d: Date | null): void;
2475
+ protected onDayFocus(d: Date): void;
2476
+ protected shiftView(delta: number): void;
2477
+ private isVisible;
2478
+ /** Show `d`'s month first, or — with `last` — as the right-most month. */
2479
+ private anchorView;
2480
+ protected onGridKeydown(e: KeyboardEvent): void;
2481
+ /**
2482
+ * Show and focus the active day: the range's end (as the right-most month), else its start, else
2483
+ * today (right-most when `max` is this month or earlier, so a "past only" calendar does not open on
2484
+ * an all-disabled next month). Called by the picker when its panel opens.
2485
+ */
2486
+ focusActiveCell(): void;
2487
+ private focusHandle?;
2488
+ /**
2489
+ * Focus a day once it is rendered. A month change re-renders the grid, so try after the next
2490
+ * render AND on a timer: whichever runs once the cell exists wins (focusing twice is harmless),
2491
+ * and the timer still fires when nothing changed and no render is coming.
2492
+ */
2493
+ private focusCell;
2494
+ protected iso(d: Date): string;
2495
+ protected fullLabel(d: Date): string;
2496
+ protected bandClass(cell: RangeCell): string;
2497
+ protected dayClass(cell: RangeCell): string;
2498
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsRangeCalendar, never>;
2499
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsRangeCalendar, "sds-range-calendar", never, { "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "maxDays": { "alias": "maxDays"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "months": { "alias": "months"; "required": false; "isSignal": true; }; "calendarLabel": { "alias": "calendarLabel"; "required": false; "isSignal": true; }; "previousLabel": { "alias": "previousLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; }, { "start": "startChange"; "end": "endChange"; "daySelect": "daySelect"; "rangeSelect": "rangeSelect"; "dayHover": "dayHover"; }, never, never, true, never>;
2500
+ }
2501
+
2502
+ type SdsDateRangePickerSize = 'sm' | 'md' | 'lg';
2503
+ /**
2504
+ * Date range picker: a field that opens a panel with quick ranges (presets) on the left and a
2505
+ * two-month range calendar on the right. A preset applies at once and closes the panel; a custom
2506
+ * range is picked with two clicks and stays PENDING until "Apply" (Cancel, Escape and a click away
2507
+ * discard it).
2508
+ *
2509
+ * The value is an inclusive `SdsDateRange` (`{ start, end }`, local midnight) or `null`, bound with
2510
+ * `[(value)]` (a `model`, not a ControlValueAccessor). `(presetSelect)` emits the preset `id` when
2511
+ * one is chosen, and `activePresetId()` tells which preset the current value equals (`null` = a
2512
+ * custom range), so an app can remember "30d" rather than two dates.
2513
+ *
2514
+ * Every visible and accessible string is an input with an English default — translate them all.
2515
+ *
2516
+ * @example
2517
+ * <sds-date-range-picker label="Period" [presets]="presets" [max]="today" [(value)]="range" />
2518
+ */
2519
+ declare class SdsDateRangePicker implements OnDestroy {
2520
+ private readonly host;
2521
+ private readonly injector;
2522
+ private readonly uid;
2523
+ protected readonly fieldId: string;
2524
+ protected readonly labelId: string;
2525
+ protected readonly valueId: string;
2526
+ /** The selected range (two-way: `[(value)]`), `null` when none. Day granularity, end inclusive. */
2527
+ readonly value: _angular_core.ModelSignal<SdsDateRange | null>;
2528
+ /** Quick ranges listed on the left of the panel; choosing one applies it and closes the panel. */
2529
+ readonly presets: _angular_core.InputSignal<readonly SdsDateRangePreset[]>;
2530
+ readonly min: _angular_core.InputSignal<Date | null>;
2531
+ readonly max: _angular_core.InputSignal<Date | null>;
2532
+ /** Longest custom range in days (start and end included). `null` = no limit. */
2533
+ readonly maxDays: _angular_core.InputSignal<number | null>;
2534
+ /** 0 = Sunday, 1 = Monday (default, European). */
2535
+ readonly firstDayOfWeek: _angular_core.InputSignal<0 | 1>;
2536
+ /** BCP 47 locale for the calendar and the default range format. Defaults to `en-GB`. */
2537
+ readonly locale: _angular_core.InputSignal<string>;
2538
+ readonly size: _angular_core.InputSignal<SdsDateRangePickerSize>;
2539
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2540
+ /** Months side by side in the panel (from the `sm` breakpoint; always one below it). */
2541
+ readonly months: _angular_core.InputSignal<2 | 1>;
2542
+ /**
2543
+ * Display formatter for the field. Default: `Intl.DateTimeFormat#formatRange` with day, short
2544
+ * month and year in {@link locale} (e.g. `1–7 Oct 2026`) — see `formatDateRange`.
2545
+ */
2546
+ readonly format: _angular_core.InputSignal<((range: SdsDateRange) => string) | null>;
2547
+ /** Visible label above the field. */
2548
+ readonly label: _angular_core.InputSignal<string>;
2549
+ /** Accessible name when there is no visible {@link label}. */
2550
+ readonly ariaLabel: _angular_core.InputSignal<string>;
2551
+ /** Field text when no range is selected. */
2552
+ readonly placeholder: _angular_core.InputSignal<string>;
2553
+ /** Accessible name of the overlay dialog. */
2554
+ readonly panelLabel: _angular_core.InputSignal<string>;
2555
+ /** Heading (and group name) of the presets column. */
2556
+ readonly presetsLabel: _angular_core.InputSignal<string>;
2557
+ /** Caption of the pending start date in the panel footer. */
2558
+ readonly startLabel: _angular_core.InputSignal<string>;
2559
+ /** Caption of the pending end date in the panel footer. */
2560
+ readonly endLabel: _angular_core.InputSignal<string>;
2561
+ /** Text of the footer's apply action. */
2562
+ readonly applyLabel: _angular_core.InputSignal<string>;
2563
+ /** Text of the footer's cancel action. */
2564
+ readonly cancelLabel: _angular_core.InputSignal<string>;
2565
+ /** Accessible name of the calendar group (forwarded to `<sds-range-calendar>`). */
2566
+ readonly calendarLabel: _angular_core.InputSignal<string>;
2567
+ /** Accessible name of the icon-only "previous month" button. */
2568
+ readonly previousLabel: _angular_core.InputSignal<string>;
2569
+ /** Accessible name of the icon-only "next month" button. */
2570
+ readonly nextLabel: _angular_core.InputSignal<string>;
2571
+ /** Emits the preset `id` when a preset is chosen (after `value` has been updated). */
2572
+ readonly presetSelect: _angular_core.OutputEmitterRef<string>;
2573
+ protected readonly open: _angular_core.WritableSignal<boolean>;
2574
+ protected readonly pendingStart: _angular_core.WritableSignal<Date | null>;
2575
+ protected readonly pendingEnd: _angular_core.WritableSignal<Date | null>;
2576
+ private readonly calendar;
2577
+ private readonly trigger;
2578
+ /** The overlay panel, relocated to document.body while open. */
2579
+ private panelEl;
2580
+ /** Id of the preset the current value equals, or `null` (no value, or a custom range). */
2581
+ readonly activePresetId: _angular_core.Signal<string | null>;
2582
+ protected readonly pendingPresetId: _angular_core.Signal<string | null>;
2583
+ protected readonly displayValue: _angular_core.Signal<string>;
2584
+ private readonly dayFmt;
2585
+ protected readonly pendingStartText: _angular_core.Signal<string>;
2586
+ protected readonly pendingEndText: _angular_core.Signal<string>;
2587
+ protected readonly canApply: _angular_core.Signal<boolean>;
2588
+ protected readonly triggerClasses: _angular_core.Signal<string>;
2589
+ protected readonly cancelBtn = "rounded-control px-3 py-1.5 text-sm font-medium text-ink-soft hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500";
2590
+ protected readonly applyBtn = "rounded-control bg-brand-600 px-3 py-1.5 text-sm font-semibold text-white hover:bg-brand-700 dark:hover:bg-[color:var(--sds-dark-primary-hover,var(--color-brand-700))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 focus-visible:ring-offset-surface disabled:cursor-not-allowed disabled:opacity-40";
2591
+ protected presetClass(active: boolean): string;
2592
+ private presetIdFor;
2593
+ protected toggle(event?: Event): void;
2594
+ protected onTriggerArrowDown(event: Event): void;
2595
+ protected openPanel(): void;
2596
+ /** Close the panel, discarding a pending (un-applied) custom range. */
2597
+ protected close(returnFocus?: boolean): void;
2598
+ protected choosePreset(p: SdsDateRangePreset): void;
2599
+ protected apply(): void;
2600
+ /**
2601
+ * Escape closes the panel and consumes the event while it is open, so an ancestor modal does not
2602
+ * also dismiss on the same keystroke. When closed, the event passes through.
2603
+ */
2604
+ protected onEscape(event: Event): void;
2605
+ /**
2606
+ * Self-contained Tab trap for the overlay. The panel lives in document.body, outside any ancestor
2607
+ * modal's focus trap; this keeps Tab / Shift+Tab cycling within the panel's own focusables.
2608
+ */
2609
+ protected onPanelKeydown(event: KeyboardEvent): void;
2610
+ protected onDocumentClick(event: MouseEvent): void;
2611
+ private readonly reflow;
2612
+ private listening;
2613
+ private addReflowListeners;
2614
+ private removeReflowListeners;
2615
+ private positionPanel;
2616
+ ngOnDestroy(): void;
2617
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsDateRangePicker, never>;
2618
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsDateRangePicker, "sds-date-range-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "maxDays": { "alias": "maxDays"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "months": { "alias": "months"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "panelLabel": { "alias": "panelLabel"; "required": false; "isSignal": true; }; "presetsLabel": { "alias": "presetsLabel"; "required": false; "isSignal": true; }; "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "endLabel": { "alias": "endLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "calendarLabel": { "alias": "calendarLabel"; "required": false; "isSignal": true; }; "previousLabel": { "alias": "previousLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "presetSelect": "presetSelect"; }, never, never, true, never>;
2619
+ }
2620
+
2343
2621
  /**
2344
2622
  * Context handed to a custom option template. Lets consumers destructure with
2345
2623
  * `let-option`, `let-selected="selected"`, `let-label="label"`, etc., with full
@@ -4962,109 +5240,115 @@ declare class SdsEnvBanner {
4962
5240
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsEnvBanner, "sds-env-banner", never, { "env": { "alias": "env"; "required": false; "isSignal": true; }; "devSrLabel": { "alias": "devSrLabel"; "required": false; "isSignal": true; }; "testSrLabel": { "alias": "testSrLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4963
5241
  }
4964
5242
 
4965
- /** A value the x / category axis can carry. ISO date strings (`2026-03-01`) are read as dates. */
4966
- type SdsXValue = string | number | Date;
4967
- /**
4968
- * How a chart reads a field from a row: either the property name, or a function. The function form
4969
- * covers derived values (`row => row.cost / row.units`) and nested data (`row => row.stats.total`).
4970
- */
4971
- type SdsAccessor<T, R> = (keyof T & string) | ((row: T, index: number) => R);
4972
- /** A number format: `Intl.NumberFormatOptions` (locale-aware, the default) or your own function. */
4973
- type SdsNumberFormat = Intl.NumberFormatOptions | ((value: number) => string);
4974
- /**
4975
- * An x-axis format. Options objects are interpreted from the axis kind: `Intl.DateTimeFormatOptions`
4976
- * on a time axis, `Intl.NumberFormatOptions` on a numeric one. Category axes print the value as-is
4977
- * unless a function is given.
4978
- */
4979
- type SdsXFormat = Intl.DateTimeFormatOptions | Intl.NumberFormatOptions | ((value: SdsXValue) => string);
4980
- /** What the x axis is. `auto` infers it from the data: Date / ISO string → time, number → linear. */
4981
- type SdsChartXType = 'auto' | 'time' | 'linear' | 'category';
4982
- /** Value-axis scale. `log` needs strictly positive values (non-positive points are dropped). */
4983
- type SdsChartScale = 'linear' | 'log';
5243
+ /** Direction of a KPI change. */
5244
+ type SdsTrendDirection = 'up' | 'down' | 'flat';
5245
+ /** What `SdsChartLabels.kpiChange` receives to build the KPI's spoken change sentence. */
5246
+ interface SdsKpiChangeText {
5247
+ direction: SdsTrendDirection;
5248
+ /** The formatted change WITHOUT its sign, e.g. `12.4%` (empty when `flat`). */
5249
+ delta: string;
5250
+ /** The KPI's `deltaLabel` (e.g. "vs last week"), or `''`. */
5251
+ period: string;
5252
+ /** Whether the change is good news (`upIsGood`); `null` when flat. */
5253
+ good: boolean | null;
5254
+ }
5255
+ /** What `SdsChartLabels.sparklineSummary` receives (numbers already formatted). */
5256
+ interface SdsSparklineSummaryText {
5257
+ /** The sparkline's `label` ('' when none — use `trend` then). */
5258
+ label: string;
5259
+ first: string;
5260
+ last: string;
5261
+ min: string;
5262
+ max: string;
5263
+ count: number;
5264
+ }
4984
5265
  /**
4985
- * Where the legend sits. `auto` picks the chart's natural place (top for two or more series, none for
4986
- * one; right for a donut). `right` falls back to below on narrow containers.
5266
+ * Every built-in string of the chart family — visible text (empty state, table toggle, table headers,
5267
+ * tooltips) and accessible text (summaries, role descriptions, live announcements). English defaults
5268
+ * ({@link SDS_CHART_LABELS_EN}); translate them once with `provideSdsCharts({ labels })`. Per-chart
5269
+ * inputs (`emptyText`, `otherLabel`, `centerLabel`, `valueLabel`, `rootLabel`, `sizeLabel`) still
5270
+ * override these for one chart.
4987
5271
  */
4988
- type SdsChartLegend = 'auto' | 'top' | 'bottom' | 'right' | 'none';
4989
- /** Which gridlines to draw. They are always solid hairlines, never dashed. */
4990
- type SdsChartGrid = 'y' | 'x' | 'both' | 'none';
4991
- /** Stacking: `stacked` piles the series, `percent` normalises every stack to 100 %. */
4992
- type SdsChartStack = 'none' | 'stacked' | 'percent';
4993
- /** Semantic tone for annotations and single-colour charts. */
4994
- type SdsChartTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';
4995
- /** One plotted measure. `key` is both the row property it reads and the series' identity. */
4996
- interface SdsChartSeries<T = any> {
4997
- /** Row property holding the value — and the stable id used for colour, legend and toggling. */
4998
- key: string;
4999
- /** Human label (legend, tooltip, table header). Defaults to `key`. */
5000
- label?: string;
5001
- /** Read the value with a function instead of `row[key]` (derived or nested values). */
5002
- value?: (row: T, index: number) => number | null | undefined;
5003
- /** Any CSS colour, including `var(--token)`. Defaults to the categorical slot of its index. */
5004
- color?: string;
5005
- /** Per-series value format (tooltip, labels, table). Falls back to the chart's `valueFormat`. */
5006
- format?: SdsNumberFormat;
5007
- /** Line charts: draw dashed — a forecast, a target or a projection. */
5008
- dashed?: boolean;
5009
- /** Bar charts: draw this series as a line over the bars (a combo chart, on the SAME axis). */
5010
- type?: 'bar' | 'line';
5011
- }
5012
- /** A horizontal/vertical reference line — a target, a threshold, a mean. */
5013
- interface SdsChartReferenceLine {
5014
- type: 'line';
5015
- /** `y` (default) draws across the plot at a value; `x` draws down it at an x position. */
5016
- axis?: 'x' | 'y';
5017
- value: SdsXValue;
5018
- label?: string;
5019
- tone?: SdsChartTone;
5020
- }
5021
- /** A shaded range — a normal range, a target zone, a holiday period. */
5022
- interface SdsChartReferenceBand {
5023
- type: 'band';
5024
- axis?: 'x' | 'y';
5025
- from: SdsXValue;
5026
- to: SdsXValue;
5027
- label?: string;
5028
- tone?: SdsChartTone;
5029
- }
5030
- type SdsChartAnnotation = SdsChartReferenceLine | SdsChartReferenceBand;
5031
- /** One line of the tooltip. `value` is already formatted; `raw` is the number behind it. */
5032
- interface SdsChartTooltipRow {
5033
- key: string;
5034
- label: string;
5272
+ interface SdsChartLabels {
5273
+ /** Accessible name of the legend list. */
5274
+ legend: string;
5275
+ /** Table-toggle button text while the chart shows. */
5276
+ showTable: string;
5277
+ /** Table-toggle button text while the table shows. */
5278
+ showChart: string;
5279
+ /** Empty-state text (no data). */
5280
+ empty: string;
5281
+ /** A heatmap cell without a value (tooltip). */
5282
+ noData: string;
5283
+ /** `aria-roledescription` of the chart surfaces. */
5284
+ chartRole: string;
5285
+ /** `aria-roledescription` of the heatmap matrix. */
5286
+ heatmapRole: string;
5287
+ /** Default names used in the generated summaries when there is no `heading`. */
5288
+ lineChart: string;
5289
+ barChart: string;
5290
+ donutChart: string;
5291
+ scatterChart: string;
5292
+ heatmap: string;
5293
+ treemap: string;
5294
+ /** Accessible name of the treemap breadcrumb. */
5295
+ breadcrumb: string;
5296
+ /** Spoken name of a sparkline without a `label`. */
5297
+ trend: string;
5298
+ /** Table header of the category column (bar / line / donut). */
5299
+ category: string;
5300
+ /** Table header of a time x column (line). */
5301
+ date: string;
5302
+ /** Name of a measure (donut / treemap table, treemap tooltip, heatmap default `valueLabel`). */
5035
5303
  value: string;
5036
- raw: number | null;
5037
- color: string;
5038
- /** Shape of the key glyph: a short line for lines, a square for bars/areas/slices, a dot for points. */
5039
- shape: 'line' | 'rect' | 'dot';
5040
- }
5041
- /** Context handed to a custom `<ng-template sdsChartTooltip let-tip>` template. */
5042
- interface SdsChartTooltipContext<T = any> {
5043
- /** Formatted heading (the x value, the category, the slice…). */
5044
- title: string;
5045
- rows: SdsChartTooltipRow[];
5046
- /** Optional footer line (a total, a share…). */
5047
- footer?: string;
5048
- /** The source row(s) behind the hovered position. */
5049
- data: T[];
5050
- index: number;
5051
- }
5052
- /** Emitted when a mark is clicked (or activated with Enter on the keyboard). */
5053
- interface SdsChartPointEvent<T = any> {
5054
- /** Series key — or the slice / cell / node id on charts without series. */
5055
- key: string;
5056
- /** The source row (null when the mark aggregates several rows, e.g. the "Other" slice). */
5057
- row: T | null;
5058
- index: number;
5059
- value: number | null;
5060
- x?: SdsXValue;
5061
- /** The row dimension (heatmap). */
5062
- y?: SdsXValue;
5063
- }
5304
+ /** Table header of the share-of-total column (donut / treemap). */
5305
+ share: string;
5306
+ /** Table header of the treemap's leaf column. */
5307
+ item: string;
5308
+ /** Table header of the scatter's group column. */
5309
+ group: string;
5310
+ /** Default scatter `sizeLabel` (bubble size). */
5311
+ size: string;
5312
+ /** Donut centre default and the stacked-tooltip footer. */
5313
+ total: string;
5314
+ /** Default donut `otherLabel` (the folded tail). */
5315
+ other: string;
5316
+ /** Default treemap `rootLabel` (breadcrumb root). */
5317
+ all: string;
5318
+ /** Treemap tooltip row: the tile's share of the whole. */
5319
+ shareOfTotal: string;
5320
+ /** Treemap tooltip row: the tile's share of its parent branch. */
5321
+ shareOf: (parent: string) => string;
5322
+ /** One "label: value" pair in spoken readouts (French typography wants `label : value`). */
5323
+ labelValue: (label: string, value: string) => string;
5324
+ /** Donut summary, e.g. "5 slices". */
5325
+ sliceCount: (count: number) => string;
5326
+ /** Donut / treemap summary, e.g. "total 1,284". */
5327
+ totalOf: (value: string) => string;
5328
+ /** Heatmap summary, e.g. "7 rows × 24 columns". */
5329
+ gridSize: (rows: number, columns: number) => string;
5330
+ /** Treemap announcement, e.g. "12 items". */
5331
+ itemCount: (count: number) => string;
5332
+ /** Treemap summary / announcement while zoomed, e.g. "zoomed to Staff › Doctors". */
5333
+ zoomedTo: (path: string) => string;
5334
+ /** Scatter summary from its axis titles, e.g. "Length of stay vs Age". */
5335
+ versus: (y: string, x: string) => string;
5336
+ /** The sparkline's spoken summary. */
5337
+ sparklineSummary: (s: SdsSparklineSummaryText) => string;
5338
+ /** The KPI's spoken change, e.g. "up 12.4% vs last week, favourable". */
5339
+ kpiChange: (c: SdsKpiChangeText) => string;
5340
+ }
5341
+ /** English defaults of {@link SdsChartLabels}. Spread it to override a few keys. */
5342
+ declare const SDS_CHART_LABELS_EN: SdsChartLabels;
5064
5343
  /** App-wide defaults for every chart. Provide once with `provideSdsCharts()`. */
5065
5344
  interface SdsChartConfig {
5066
5345
  /** BCP-47 locale for numbers and dates. A function may read a signal (it is tracked). */
5067
5346
  locale?: string | (() => string);
5347
+ /**
5348
+ * Translations of the built-in strings (merged over {@link SDS_CHART_LABELS_EN}). A function may
5349
+ * read a signal (it is tracked), so returning the current language's labels switches them live.
5350
+ */
5351
+ labels?: Partial<SdsChartLabels> | (() => Partial<SdsChartLabels>);
5068
5352
  /** Turn entrance / update animation off everywhere. Reduced-motion users never get it anyway. */
5069
5353
  animate?: boolean;
5070
5354
  /** Replace the 8 categorical slots (CSS colours, `var(--x)` allowed). Validate any new order! */
@@ -5075,1128 +5359,14 @@ declare const SDS_CHART_CONFIG: InjectionToken<SdsChartConfig>;
5075
5359
  * App-wide chart defaults.
5076
5360
  *
5077
5361
  * @example
5078
- * providers: [provideSdsCharts({ locale: () => translate.currentLang() })]
5362
+ * providers: [
5363
+ * provideSdsCharts({
5364
+ * locale: () => translate.currentLang(),
5365
+ * labels: () => (translate.currentLang() === 'fr' ? CHART_LABELS_FR : {}),
5366
+ * }),
5367
+ * ]
5079
5368
  */
5080
5369
  declare function provideSdsCharts(config: SdsChartConfig): Provider;
5081
5370
 
5082
- /**
5083
- * Replace a chart's default tooltip body with your own markup. The template receives the hovered
5084
- * position as `$implicit` ({ title, rows, footer, data, index }) — `data` holds the source rows, so the
5085
- * tooltip can show fields the chart does not plot (a comment, a status, a unit).
5086
- *
5087
- * Works on line, bar, scatter, donut, heatmap and treemap charts (not the sparkline). The chart still
5088
- * positions, flips and clamps the box; you style the body. The box is visual and pointer-transparent:
5089
- * never put links or buttons in it, and keep anything essential in the plotted data too — keyboard and
5090
- * screen-reader users get the default rows through the live region and the table twin.
5091
- *
5092
- * @example
5093
- * <sds-line-chart [data]="rows" x="day" [series]="series">
5094
- * <ng-template sdsChartTooltip let-tip>
5095
- * <p class="font-semibold">{{ tip.title }}</p>
5096
- * <p>{{ tip.data[0].comment }}</p>
5097
- * </ng-template>
5098
- * </sds-line-chart>
5099
- */
5100
- declare class SdsChartTooltip {
5101
- readonly template: TemplateRef<{
5102
- $implicit: SdsChartTooltipContext;
5103
- }>;
5104
- static ngTemplateContextGuard(_dir: SdsChartTooltip, ctx: unknown): ctx is {
5105
- $implicit: SdsChartTooltipContext;
5106
- };
5107
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsChartTooltip, never>;
5108
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SdsChartTooltip, "ng-template[sdsChartTooltip]", never, {}, {}, never, never, true, never>;
5109
- }
5110
-
5111
- interface PlotRect {
5112
- left: number;
5113
- top: number;
5114
- width: number;
5115
- height: number;
5116
- }
5117
- interface AxisTick {
5118
- pos: number;
5119
- label: string;
5120
- }
5121
- interface ResolvedAnnotation {
5122
- kind: 'line' | 'band';
5123
- x1: number;
5124
- y1: number;
5125
- x2: number;
5126
- y2: number;
5127
- label: string;
5128
- color: string;
5129
- labelX: number;
5130
- labelY: number;
5131
- anchor: 'start' | 'middle' | 'end';
5132
- }
5133
-
5134
- interface LegendItem {
5135
- key: string;
5136
- label: string;
5137
- color: string;
5138
- shape: 'line' | 'rect' | 'dot';
5139
- /** Optional trailing text — a value or a share (the donut's direct labels). */
5140
- detail?: string;
5141
- dashed?: boolean;
5142
- }
5143
- interface ChartTable {
5144
- columns: string[];
5145
- rows: string[][];
5146
- }
5147
-
5148
- /** Line interpolation. `monotone` (default) is smooth but never overshoots the data. */
5149
- type SdsLineCurve = 'linear' | 'monotone' | 'step' | 'natural';
5150
- /** Point markers: `auto` = every point on sparse plain lines (≤ 16), only the last on dense lines and plain areas, none on stacks. */
5151
- type SdsLineMarkers = 'auto' | 'all' | 'last' | 'none';
5152
- interface Point<T> {
5153
- row: T;
5154
- index: number;
5155
- x: SdsXValue;
5156
- key: string;
5157
- }
5158
- /** [x, y, y0] in pixels; undefined where the value is missing (the line breaks there). */
5159
- type P3 = readonly number[];
5160
- /**
5161
- * Line and area chart for anything over an ordered axis — time series, numeric x, or categories.
5162
- * Multi-series, stacked or 100 % areas, smooth / step curves, log scale, reference lines and bands,
5163
- * dashed forecast series, a crosshair tooltip listing every series, legend toggling, keyboard
5164
- * navigation and a data-table twin. Rows are read with accessors, so API data plots as-is.
5165
- *
5166
- * @example
5167
- * <sds-line-chart
5168
- * heading="Admissions"
5169
- * [data]="rows"
5170
- * x="date"
5171
- * [series]="[{ key: 'urgences', label: 'Urgences' }, { key: 'programmees', label: 'Programmées' }]"
5172
- * />
5173
- */
5174
- declare class SdsLineChart<T = any> {
5175
- /** The rows to plot — any shape; fields are read through `x` and each series' `key` / `value`. */
5176
- readonly data: _angular_core.InputSignal<readonly T[] | null | undefined>;
5177
- /** The x field: a property name or `(row, i) => value`. Dates, ISO strings, numbers or labels. */
5178
- readonly x: _angular_core.InputSignal<SdsAccessor<T, SdsXValue>>;
5179
- /** The measures to draw. A series keeps its colour slot (its index here) even when hidden. */
5180
- readonly series: _angular_core.InputSignal<readonly SdsChartSeries<T>[]>;
5181
- /** Force the x-axis kind instead of inferring it from the data. */
5182
- readonly xType: _angular_core.InputSignal<SdsChartXType>;
5183
- readonly heading: _angular_core.InputSignal<string>;
5184
- readonly subtitle: _angular_core.InputSignal<string>;
5185
- /** Plot height in px, axis labels included (the chart never scrolls inside itself). */
5186
- readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
5187
- readonly curve: _angular_core.InputSignal<SdsLineCurve>;
5188
- /** Fill under each line with a soft wash of its colour. */
5189
- readonly area: _angular_core.InputSignalWithTransform<boolean, unknown>;
5190
- /** Stack the series as areas (`stacked`) or as shares of 100 % (`percent`). */
5191
- readonly stack: _angular_core.InputSignal<SdsChartStack>;
5192
- readonly markers: _angular_core.InputSignal<SdsLineMarkers>;
5193
- /** Label each line at its last point; converging labels spread apart with leader lines (dropped if they cannot fit). */
5194
- readonly endLabels: _angular_core.InputSignalWithTransform<boolean, unknown>;
5195
- readonly grid: _angular_core.InputSignal<SdsChartGrid>;
5196
- readonly legend: _angular_core.InputSignal<SdsChartLegend>;
5197
- /** Emphasise one series: the others fade back. */
5198
- readonly highlight: _angular_core.InputSignal<string | null>;
5199
- readonly annotations: _angular_core.InputSignal<readonly SdsChartAnnotation[]>;
5200
- readonly yScale: _angular_core.InputSignal<SdsChartScale>;
5201
- readonly yMin: _angular_core.InputSignal<number | null>;
5202
- readonly yMax: _angular_core.InputSignal<number | null>;
5203
- /** Start the value axis at zero. Defaults to true for areas/stacks, false for plain lines. */
5204
- readonly includeZero: _angular_core.InputSignal<boolean | null>;
5205
- /** Format of values in the tooltip, labels and table. Axis ticks derive a compact version. */
5206
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5207
- /** Override the value-axis tick format. */
5208
- readonly axisFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5209
- /** Format of x values (ticks + tooltip heading). Time axes pick a sensible multi-scale default. */
5210
- readonly xFormat: _angular_core.InputSignal<SdsXFormat | null>;
5211
- readonly xLabel: _angular_core.InputSignal<string>;
5212
- readonly yLabel: _angular_core.InputSignal<string>;
5213
- /** BCP-47 locale for numbers and dates. Defaults to provideSdsCharts() / LOCALE_ID. */
5214
- readonly locale: _angular_core.InputSignal<string | null>;
5215
- readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
5216
- readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
5217
- /** Hold the current render at reduced opacity while new data loads (no skeleton flash). */
5218
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
5219
- readonly emptyText: _angular_core.InputSignal<string>;
5220
- /** Show a button that swaps the plot for its data table. */
5221
- readonly tableToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
5222
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
5223
- /** Keys of the series currently hidden (legend toggles write it back — two-way bindable). */
5224
- readonly hidden: _angular_core.ModelSignal<readonly string[]>;
5225
- /** A point was clicked (the series nearest the pointer) or activated with Enter. */
5226
- readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
5227
- protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
5228
- protected readonly uid: string;
5229
- protected readonly legendFocus: _angular_core.WritableSignal<string | null>;
5230
- protected readonly active: _angular_core.WritableSignal<number | null>;
5231
- protected readonly keyboard: _angular_core.WritableSignal<boolean>;
5232
- /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */
5233
- protected onBlur(): void;
5234
- private readonly pointerY;
5235
- private readonly width;
5236
- private readonly loc;
5237
- private readonly animates;
5238
- private readonly palette;
5239
- protected readonly stacked: _angular_core.Signal<boolean>;
5240
- private readonly model;
5241
- private readonly allSeries;
5242
- private readonly visible;
5243
- /** Raw values per series, aligned with the sorted points (null = missing → a gap). */
5244
- private readonly values;
5245
- /** [y0, y1] per series and point — stacked offsets, or a baseline of 0 for plain lines. */
5246
- private readonly bands;
5247
- protected readonly isEmpty: _angular_core.Signal<boolean>;
5248
- /** Axis formatter at a given precision (uniqueLabels raises it until ticks stop repeating). */
5249
- private readonly axisMaker;
5250
- private readonly fmtX;
5251
- protected readonly layout: _angular_core.Signal<{
5252
- width: number;
5253
- height: number;
5254
- plot: PlotRect;
5255
- y: d3_scale.ScaleLinear<number, number, never>;
5256
- xPos: (p: Point<T>) => number;
5257
- mapX: (v: SdsXValue) => number | null;
5258
- xTicks: AxisTick[];
5259
- yTicks: AxisTick[];
5260
- baseline: number;
5261
- baseY: number;
5262
- } | null>;
5263
- private timeTicks;
5264
- private readonly target;
5265
- /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */
5266
- private readonly ready;
5267
- private readonly version;
5268
- private readonly geometry;
5269
- protected readonly drawn: _angular_core.Signal<{
5270
- key: string;
5271
- color: string;
5272
- dashed: boolean;
5273
- dim: boolean;
5274
- line: string;
5275
- area: string | null;
5276
- markers: P3[];
5277
- }[]>;
5278
- protected readonly annotationsPx: _angular_core.Signal<ResolvedAnnotation[]>;
5279
- /**
5280
- * End labels. Where lines converge the labels are spread apart (never stacked on each other) and a
5281
- * hairline leader ties each displaced label back to its line end. If they cannot all fit in the plot
5282
- * height the set is dropped — the legend then carries identity.
5283
- */
5284
- protected readonly endLabelsPx: _angular_core.Signal<{
5285
- tx: number;
5286
- leader: boolean;
5287
- key: string;
5288
- label: string;
5289
- x: number;
5290
- anchorY: number;
5291
- y: number;
5292
- dim: boolean;
5293
- }[]>;
5294
- protected readonly activePx: _angular_core.Signal<{
5295
- x: number;
5296
- dots: {
5297
- key: string;
5298
- y: number;
5299
- color: string;
5300
- }[];
5301
- } | null>;
5302
- protected readonly tooltipY: _angular_core.Signal<number>;
5303
- protected readonly tooltipCtx: _angular_core.Signal<SdsChartTooltipContext<T> | null>;
5304
- protected readonly liveText: _angular_core.Signal<string>;
5305
- protected onPointer(event: PointerEvent): void;
5306
- private nearestIndex;
5307
- protected onClick(): void;
5308
- protected onKey(event: KeyboardEvent): void;
5309
- protected toggleSeries(key: string): void;
5310
- protected readonly legendPosition: _angular_core.Signal<"none" | "bottom" | "top" | "right">;
5311
- protected readonly legendItems: _angular_core.Signal<LegendItem[]>;
5312
- protected readonly label: _angular_core.Signal<string>;
5313
- protected readonly table: _angular_core.Signal<ChartTable>;
5314
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsLineChart<any>, never>;
5315
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsLineChart<any>, "sds-line-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "xType": { "alias": "xType"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "curve": { "alias": "curve"; "required": false; "isSignal": true; }; "area": { "alias": "area"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "endLabels": { "alias": "endLabels"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "highlight": { "alias": "highlight"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "yScale": { "alias": "yScale"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "includeZero": { "alias": "includeZero"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
5316
- }
5317
-
5318
- /** `vertical` = columns rising from the category axis; `horizontal` = bars (best for long labels / rankings). */
5319
- type SdsBarOrientation = 'vertical' | 'horizontal';
5320
- /** Order the categories by their total. `none` keeps the data order. */
5321
- type SdsBarSort = 'none' | 'asc' | 'desc';
5322
- /**
5323
- * Bar and column chart for comparing categories: grouped, stacked or 100 % stacked, vertical or
5324
- * horizontal, with negative values, value labels that are only drawn where they fit, sorting,
5325
- * per-bar colours, a combo `type: 'line'` series on the same axis, reference lines (targets) and a
5326
- * per-category tooltip listing every series. Bars are capped in thickness, rounded on their data end
5327
- * only, and separated by a 2 px surface gap — never outlined.
5328
- *
5329
- * @example
5330
- * <sds-bar-chart
5331
- * heading="Séjours par service"
5332
- * [data]="rows"
5333
- * x="mois"
5334
- * [series]="[{ key: 'cardio', label: 'Cardiologie' }, { key: 'neuro', label: 'Neurologie' }]"
5335
- * stack="stacked"
5336
- * />
5337
- */
5338
- declare class SdsBarChart<T = any> {
5339
- readonly data: _angular_core.InputSignal<readonly T[] | null | undefined>;
5340
- /** The category field: a property name or `(row, i) => value`. */
5341
- readonly x: _angular_core.InputSignal<SdsAccessor<T, SdsXValue>>;
5342
- /** The measures. A `type: 'line'` series is drawn as a line over the bars (vertical only). */
5343
- readonly series: _angular_core.InputSignal<readonly SdsChartSeries<T>[]>;
5344
- readonly heading: _angular_core.InputSignal<string>;
5345
- readonly subtitle: _angular_core.InputSignal<string>;
5346
- readonly orientation: _angular_core.InputSignal<SdsBarOrientation>;
5347
- readonly stack: _angular_core.InputSignal<SdsChartStack>;
5348
- /** Height in px, axes included. Defaults to 300 (vertical) or one row per category (horizontal). */
5349
- readonly height: _angular_core.InputSignalWithTransform<number | null, unknown>;
5350
- /** Maximum bar thickness in px — bars never fill their slot; the leftover is air. */
5351
- readonly maxBarSize: _angular_core.InputSignalWithTransform<number, unknown>;
5352
- /** Corner radius of the bar's data end (its baseline end stays square). */
5353
- readonly radius: _angular_core.InputSignalWithTransform<number, unknown>;
5354
- /** Print each bar's value at its tip (each stack's total when stacked) — only where it fits. */
5355
- readonly showValues: _angular_core.InputSignalWithTransform<boolean, unknown>;
5356
- readonly sort: _angular_core.InputSignal<SdsBarSort>;
5357
- /** Emphasise some categories (their x values): the other bars fade back. (Series emphasis: hover the legend.) */
5358
- readonly highlightCategories: _angular_core.InputSignal<SdsXValue | readonly SdsXValue[] | null>;
5359
- /** Colour one bar from its data — e.g. negatives in red, or a status. Return null to keep the series colour. */
5360
- readonly barColor: _angular_core.InputSignal<((row: T, seriesKey: string, value: number) => string | null | undefined) | null>;
5361
- readonly grid: _angular_core.InputSignal<SdsChartGrid | null>;
5362
- readonly legend: _angular_core.InputSignal<SdsChartLegend>;
5363
- /** Reference lines / bands. `axis: 'y'` (default) is the VALUE axis in both orientations. */
5364
- readonly annotations: _angular_core.InputSignal<readonly SdsChartAnnotation[]>;
5365
- readonly yMin: _angular_core.InputSignal<number | null>;
5366
- readonly yMax: _angular_core.InputSignal<number | null>;
5367
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5368
- readonly axisFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5369
- /** Format of the category labels (dates are formatted at their granularity by default). */
5370
- readonly xFormat: _angular_core.InputSignal<SdsXFormat | null>;
5371
- readonly xLabel: _angular_core.InputSignal<string>;
5372
- readonly yLabel: _angular_core.InputSignal<string>;
5373
- readonly locale: _angular_core.InputSignal<string | null>;
5374
- readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
5375
- readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
5376
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
5377
- readonly emptyText: _angular_core.InputSignal<string>;
5378
- readonly tableToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
5379
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
5380
- readonly hidden: _angular_core.ModelSignal<readonly string[]>;
5381
- /** A bar (or a category, from the keyboard) was clicked. */
5382
- readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
5383
- protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
5384
- protected readonly legendFocus: _angular_core.WritableSignal<string | null>;
5385
- protected readonly active: _angular_core.WritableSignal<number | null>;
5386
- protected readonly keyboard: _angular_core.WritableSignal<boolean>;
5387
- /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */
5388
- protected onBlur(): void;
5389
- private readonly pointer;
5390
- private readonly width;
5391
- private readonly loc;
5392
- private readonly animates;
5393
- private readonly palette;
5394
- private readonly horizontal;
5395
- private readonly stacked;
5396
- private readonly allSeries;
5397
- private readonly visible;
5398
- private readonly barSeries;
5399
- private readonly lineSeries;
5400
- private readonly raw;
5401
- private readonly rawValues;
5402
- /** Categories in display order (sorted by total of the visible bar series when asked). */
5403
- private readonly order;
5404
- /** [v0, v1] per bar series per category (value space). */
5405
- private readonly extents;
5406
- protected readonly isEmpty: _angular_core.Signal<boolean>;
5407
- private readonly axisMaker;
5408
- private readonly fmtCat;
5409
- /** Bars-per-group (1 when stacked) — drives row height for auto-sized horizontal charts. */
5410
- private readonly groupCount;
5411
- protected readonly resolvedHeight: _angular_core.Signal<number>;
5412
- protected readonly layout: _angular_core.Signal<{
5413
- readonly width: number;
5414
- readonly height: number;
5415
- readonly horizontal: boolean;
5416
- readonly plot: PlotRect;
5417
- readonly value: d3_scale.ScaleLinear<number, number, never>;
5418
- readonly band: d3_scale.ScaleBand<number>;
5419
- readonly bw: number;
5420
- readonly barSize: number;
5421
- readonly groupSize: number;
5422
- readonly base: number;
5423
- readonly grid: SdsChartGrid;
5424
- readonly xTicks: AxisTick[];
5425
- readonly yTicks: AxisTick[];
5426
- } | null>;
5427
- /** Formatted values that may be printed as labels (for margin sizing). */
5428
- private readonly labelTexts;
5429
- /** Target pixel geometry per bar / line point, plus the non-animated facts about each bar. */
5430
- private readonly targetModel;
5431
- private readonly target;
5432
- private readonly meta;
5433
- /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */
5434
- private readonly ready;
5435
- private readonly version;
5436
- private readonly geometry;
5437
- private readonly highlightSet;
5438
- protected readonly bars: _angular_core.Signal<{
5439
- id: string;
5440
- d: string;
5441
- color: string;
5442
- dim: boolean;
5443
- }[]>;
5444
- protected readonly lines: _angular_core.Signal<{
5445
- key: string;
5446
- color: string;
5447
- dashed: boolean;
5448
- dim: boolean;
5449
- d: string;
5450
- points: (readonly number[])[];
5451
- }[]>;
5452
- /** Value labels at the bar tips — dropped wherever they would not fit or would collide. */
5453
- protected readonly valueLabels: _angular_core.Signal<{
5454
- id: string;
5455
- x: number;
5456
- y: number;
5457
- text: string;
5458
- anchor: "start" | "middle" | "end";
5459
- }[]>;
5460
- protected readonly annotationsPx: _angular_core.Signal<ResolvedAnnotation[]>;
5461
- /** One hit target per category — the whole band step, bigger than any bar in it. */
5462
- protected readonly hits: _angular_core.Signal<{
5463
- index: number;
5464
- x: number;
5465
- y: number;
5466
- w: number;
5467
- h: number;
5468
- }[]>;
5469
- protected readonly hoverBand: _angular_core.Signal<{
5470
- x: number;
5471
- y: number;
5472
- w: number;
5473
- h: number;
5474
- } | null>;
5475
- protected readonly tooltipAt: _angular_core.Signal<{
5476
- x: number;
5477
- y: number;
5478
- }>;
5479
- protected readonly tooltipCtx: _angular_core.Signal<SdsChartTooltipContext<T> | null>;
5480
- protected readonly liveText: _angular_core.Signal<string>;
5481
- private local;
5482
- protected enter(index: number, event: PointerEvent): void;
5483
- protected move(event: PointerEvent): void;
5484
- protected onClick(index: number, event?: MouseEvent): void;
5485
- protected onKey(event: KeyboardEvent): void;
5486
- protected toggleSeries(key: string): void;
5487
- protected readonly legendPosition: _angular_core.Signal<"none" | "bottom" | "top" | "right">;
5488
- protected readonly legendItems: _angular_core.Signal<LegendItem[]>;
5489
- protected readonly label: _angular_core.Signal<string>;
5490
- protected readonly table: _angular_core.Signal<ChartTable>;
5491
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsBarChart<any>, never>;
5492
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsBarChart<any>, "sds-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxBarSize": { "alias": "maxBarSize"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "highlightCategories": { "alias": "highlightCategories"; "required": false; "isSignal": true; }; "barColor": { "alias": "barColor"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
5493
- }
5494
-
5495
- interface Dot<T> {
5496
- row: T;
5497
- index: number;
5498
- id: string;
5499
- x: number;
5500
- xDate: boolean;
5501
- y: number;
5502
- size: number | null;
5503
- group: string;
5504
- label: string;
5505
- }
5506
- /**
5507
- * Scatter and bubble chart for relationships between two measures — with an optional third measure
5508
- * as bubble area and a categorical group as colour. Linear / log / time axes, per-group least-squares
5509
- * trend lines, reference lines and bands on either axis, nearest-point hover (a Delaunay search, so
5510
- * the pointer only has to be closest — never dead-centre on an 8 px dot), keyboard stepping and a
5511
- * data-table twin. Keep groups to three or fewer: past that, colours stop separating in a cloud.
5512
- *
5513
- * @example
5514
- * <sds-scatter-chart
5515
- * [data]="patients"
5516
- * x="age"
5517
- * y="duree"
5518
- * group="service"
5519
- * size="cout"
5520
- * xLabel="Âge"
5521
- * yLabel="Durée de séjour (j)"
5522
- * trendline
5523
- * />
5524
- */
5525
- declare class SdsScatterChart<T = any> {
5526
- readonly data: _angular_core.InputSignal<readonly T[] | null | undefined>;
5527
- /** Horizontal measure: numbers, Dates or ISO strings. */
5528
- readonly x: _angular_core.InputSignal<SdsAccessor<T, SdsXValue>>;
5529
- /** Vertical measure. */
5530
- readonly y: _angular_core.InputSignal<SdsAccessor<T, number | null | undefined>>;
5531
- /** Optional third measure, encoded as bubble AREA (not radius — area reads true). */
5532
- readonly size: _angular_core.InputSignal<SdsAccessor<T, number | null | undefined> | null>;
5533
- /** Optional categorical field coloured by slot. Three groups or fewer read best. */
5534
- readonly group: _angular_core.InputSignal<SdsAccessor<T, string | null | undefined> | null>;
5535
- /** Optional point name for the tooltip heading and the table (also the point's animation identity). */
5536
- readonly pointLabel: _angular_core.InputSignal<SdsAccessor<T, string | null | undefined> | null>;
5537
- /** Fix the group order (and so their colours) instead of first-appearance order. */
5538
- readonly groupOrder: _angular_core.InputSignal<readonly string[] | null>;
5539
- readonly heading: _angular_core.InputSignal<string>;
5540
- readonly subtitle: _angular_core.InputSignal<string>;
5541
- readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
5542
- /** Dot radius when there is no `size` measure. */
5543
- readonly radius: _angular_core.InputSignalWithTransform<number, unknown>;
5544
- /** Largest bubble radius when `size` is set. */
5545
- readonly maxRadius: _angular_core.InputSignalWithTransform<number, unknown>;
5546
- /** Draw a least-squares trend line per group (dashed — it is a model, not data). Linear axes only. */
5547
- readonly trendline: _angular_core.InputSignalWithTransform<boolean, unknown>;
5548
- readonly grid: _angular_core.InputSignal<SdsChartGrid>;
5549
- readonly legend: _angular_core.InputSignal<SdsChartLegend>;
5550
- readonly annotations: _angular_core.InputSignal<readonly SdsChartAnnotation[]>;
5551
- readonly xScale: _angular_core.InputSignal<SdsChartScale>;
5552
- readonly yScale: _angular_core.InputSignal<SdsChartScale>;
5553
- readonly xMin: _angular_core.InputSignal<number | null>;
5554
- readonly xMax: _angular_core.InputSignal<number | null>;
5555
- readonly yMin: _angular_core.InputSignal<number | null>;
5556
- readonly yMax: _angular_core.InputSignal<number | null>;
5557
- readonly includeZero: _angular_core.InputSignalWithTransform<boolean, unknown>;
5558
- readonly xFormat: _angular_core.InputSignal<SdsXFormat | null>;
5559
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5560
- /** Override the y-axis tick format (defaults to a compact form of `valueFormat`). */
5561
- readonly axisFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5562
- readonly sizeFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5563
- readonly xLabel: _angular_core.InputSignal<string>;
5564
- readonly yLabel: _angular_core.InputSignal<string>;
5565
- readonly sizeLabel: _angular_core.InputSignal<string>;
5566
- readonly locale: _angular_core.InputSignal<string | null>;
5567
- readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
5568
- readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
5569
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
5570
- readonly emptyText: _angular_core.InputSignal<string>;
5571
- readonly tableToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
5572
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
5573
- /** Hidden group names (two-way bindable; the legend toggles them). */
5574
- readonly hidden: _angular_core.ModelSignal<readonly string[]>;
5575
- readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
5576
- protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
5577
- protected readonly uid: string;
5578
- protected readonly legendFocus: _angular_core.WritableSignal<string | null>;
5579
- protected readonly active: _angular_core.WritableSignal<number | null>;
5580
- protected readonly keyboard: _angular_core.WritableSignal<boolean>;
5581
- /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */
5582
- protected onBlur(): void;
5583
- private readonly width;
5584
- private readonly loc;
5585
- private readonly animates;
5586
- private readonly palette;
5587
- protected readonly bubbles: _angular_core.Signal<boolean>;
5588
- private readonly points;
5589
- private readonly xIsTime;
5590
- /** Groups in colour order; a group keeps its slot when others are hidden. */
5591
- protected readonly groups: _angular_core.Signal<{
5592
- name: string;
5593
- color: string;
5594
- }[]>;
5595
- private readonly colorOf;
5596
- private readonly visiblePoints;
5597
- protected readonly isEmpty: _angular_core.Signal<boolean>;
5598
- private readonly fmtY;
5599
- private readonly fmtSize;
5600
- private readonly fmtX;
5601
- protected readonly layout: _angular_core.Signal<{
5602
- width: number;
5603
- height: number;
5604
- plot: PlotRect;
5605
- x: (v: number) => number;
5606
- y: (v: number) => number;
5607
- radius: (p: Dot<T>) => number;
5608
- xTicks: AxisTick[];
5609
- yTicks: {
5610
- pos: number;
5611
- label: string;
5612
- }[];
5613
- clipPad: number;
5614
- } | null>;
5615
- private readonly target;
5616
- /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */
5617
- private readonly ready;
5618
- private readonly version;
5619
- private readonly geometry;
5620
- protected readonly dots: _angular_core.Signal<{
5621
- id: string;
5622
- cx: number;
5623
- cy: number;
5624
- r: number;
5625
- color: string;
5626
- dim: boolean;
5627
- size: number;
5628
- }[]>;
5629
- /** Least-squares fit per visible group, drawn across that group's own x range. */
5630
- protected readonly trends: _angular_core.Signal<{
5631
- group: string;
5632
- x1: number;
5633
- y1: number;
5634
- x2: number;
5635
- y2: number;
5636
- color: string;
5637
- dim: boolean;
5638
- }[]>;
5639
- protected readonly annotationsPx: _angular_core.Signal<ResolvedAnnotation[]>;
5640
- /** Nearest-point index, rebuilt only when the geometry settles. */
5641
- private readonly delaunay;
5642
- protected readonly activeDot: _angular_core.Signal<{
5643
- cx: number;
5644
- cy: number;
5645
- r: number;
5646
- color: string;
5647
- } | null>;
5648
- protected readonly tooltipCtx: _angular_core.Signal<SdsChartTooltipContext<T> | null>;
5649
- protected readonly liveText: _angular_core.Signal<string>;
5650
- protected onPointer(event: PointerEvent): void;
5651
- protected onClick(): void;
5652
- /** Arrow keys step through the points in x order. */
5653
- protected onKey(event: KeyboardEvent): void;
5654
- protected toggleGroup(name: string): void;
5655
- protected readonly legendPosition: _angular_core.Signal<"none" | "bottom" | "top" | "right">;
5656
- protected readonly legendItems: _angular_core.Signal<LegendItem[]>;
5657
- protected readonly label: _angular_core.Signal<string>;
5658
- protected readonly table: _angular_core.Signal<ChartTable>;
5659
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsScatterChart<any>, never>;
5660
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsScatterChart<any>, "sds-scatter-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; "pointLabel": { "alias": "pointLabel"; "required": false; "isSignal": true; }; "groupOrder": { "alias": "groupOrder"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "maxRadius": { "alias": "maxRadius"; "required": false; "isSignal": true; }; "trendline": { "alias": "trendline"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "xScale": { "alias": "xScale"; "required": false; "isSignal": true; }; "yScale": { "alias": "yScale"; "required": false; "isSignal": true; }; "xMin": { "alias": "xMin"; "required": false; "isSignal": true; }; "xMax": { "alias": "xMax"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "includeZero": { "alias": "includeZero"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "sizeFormat": { "alias": "sizeFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "sizeLabel": { "alias": "sizeLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
5661
- }
5662
-
5663
- /** `donut` has a hole for a headline figure; `pie` is solid. */
5664
- type SdsDonutVariant = 'donut' | 'pie';
5665
- /** What the legend prints after each label (the chart's direct labels). */
5666
- type SdsDonutLegendValue = 'percent' | 'value' | 'both' | 'none';
5667
- /** Slice order: `desc` = largest first, `none` = data order. */
5668
- type SdsDonutSort = 'desc' | 'none';
5669
- /** Key of the folded "Autres" slice — in `hidden` and in `pointClick.key`. */
5670
- declare const SDS_DONUT_OTHER_KEY = "__sds_other__";
5671
- /**
5672
- * Donut, pie and half-donut for part-to-whole at a glance. Small tails fold into "Autres" past
5673
- * `maxSlices` (a pie stops reading beyond ~6 parts), the legend doubles as direct labels with each
5674
- * share, the centre states the total and swaps to the hovered slice, slices separate with a
5675
- * constant 2 px gap, and the whole thing is keyboard-navigable with a data-table twin. Colour follows
5676
- * the category (its position in the data), never its rank.
5677
- *
5678
- * @example
5679
- * <sds-donut-chart heading="Motifs de séjour" [data]="rows" category="motif" value="sejours" />
5680
- */
5681
- declare class SdsDonutChart<T = any> {
5682
- readonly data: _angular_core.InputSignal<readonly T[] | null | undefined>;
5683
- /** The part's name. Rows sharing a name are summed into one slice. */
5684
- readonly category: _angular_core.InputSignal<SdsAccessor<T, string | null | undefined>>;
5685
- /** The part's size (negative and missing values are ignored). */
5686
- readonly value: _angular_core.InputSignal<SdsAccessor<T, number | null | undefined>>;
5687
- /** Optional per-row colour (any CSS colour) — e.g. a status palette. */
5688
- readonly color: _angular_core.InputSignal<SdsAccessor<T, string | null | undefined> | null>;
5689
- readonly heading: _angular_core.InputSignal<string>;
5690
- readonly subtitle: _angular_core.InputSignal<string>;
5691
- readonly variant: _angular_core.InputSignal<SdsDonutVariant>;
5692
- /** Draw a half-donut (a gauge-like arc) instead of a full circle. */
5693
- readonly half: _angular_core.InputSignalWithTransform<boolean, unknown>;
5694
- /** Diameter cap in px (the chart also shrinks to its container). */
5695
- readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
5696
- /** Ring thickness in px. Defaults to ~26 % of the radius. */
5697
- readonly thickness: _angular_core.InputSignalWithTransform<number | null, unknown>;
5698
- /** Beyond this many slices the smallest fold into one "Autres" slice. */
5699
- readonly maxSlices: _angular_core.InputSignalWithTransform<number, unknown>;
5700
- readonly otherLabel: _angular_core.InputSignal<string>;
5701
- /** `desc` (default) orders slices largest first; `none` keeps the data order. */
5702
- readonly sort: _angular_core.InputSignal<SdsDonutSort>;
5703
- /** `auto` = right of the ring (below it on narrow containers). */
5704
- readonly legend: _angular_core.InputSignal<SdsChartLegend>;
5705
- readonly legendValue: _angular_core.InputSignal<SdsDonutLegendValue>;
5706
- /** Headline in the hole. `null` hides it; default "Total". */
5707
- readonly centerLabel: _angular_core.InputSignal<string | null>;
5708
- /** Override the centre figure (e.g. "72 %" for a completion donut). */
5709
- readonly centerValue: _angular_core.InputSignal<string | null>;
5710
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5711
- readonly locale: _angular_core.InputSignal<string | null>;
5712
- readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
5713
- readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
5714
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
5715
- readonly emptyText: _angular_core.InputSignal<string>;
5716
- readonly tableToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
5717
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
5718
- /** Hidden slice keys (category names, or the "Autres" slice). Two-way bindable. */
5719
- readonly hidden: _angular_core.ModelSignal<readonly string[]>;
5720
- readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
5721
- protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
5722
- protected readonly focus: _angular_core.WritableSignal<string | null>;
5723
- protected readonly active: _angular_core.WritableSignal<string | null>;
5724
- protected readonly keyboard: _angular_core.WritableSignal<boolean>;
5725
- /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */
5726
- protected onBlur(): void;
5727
- protected readonly pointer: _angular_core.WritableSignal<{
5728
- x: number;
5729
- y: number;
5730
- }>;
5731
- private readonly width;
5732
- private readonly loc;
5733
- private readonly animates;
5734
- private readonly palette;
5735
- private readonly fmt;
5736
- private readonly pct;
5737
- /** Slices after grouping, sorting and folding the tail into "Autres". */
5738
- private readonly slices;
5739
- private readonly visible;
5740
- private readonly total;
5741
- protected readonly isEmpty: _angular_core.Signal<boolean>;
5742
- protected readonly size: _angular_core.Signal<number>;
5743
- protected readonly boxHeight: _angular_core.Signal<number>;
5744
- protected readonly showCenter: _angular_core.Signal<boolean>;
5745
- protected readonly showTooltip: _angular_core.Signal<boolean>;
5746
- protected readonly geo: _angular_core.Signal<{
5747
- cx: number;
5748
- cy: number;
5749
- outer: number;
5750
- inner: number;
5751
- start: number;
5752
- end: number;
5753
- valueSize: number;
5754
- labelSize: number;
5755
- labelY: number;
5756
- valueY: number;
5757
- subY: number;
5758
- } | null>;
5759
- private readonly target;
5760
- /** Boolean, so a resize (width A → B) never counts as a data change: resizes snap, data animates. */
5761
- private readonly ready;
5762
- private readonly version;
5763
- private readonly tween;
5764
- protected readonly arcs: _angular_core.Signal<{
5765
- key: string;
5766
- color: string;
5767
- d: string;
5768
- shift: string | null;
5769
- dim: boolean;
5770
- }[]>;
5771
- protected readonly center: _angular_core.Signal<{
5772
- label: string;
5773
- value: string;
5774
- sub: string;
5775
- }>;
5776
- protected readonly tooltipCtx: _angular_core.Signal<SdsChartTooltipContext<T> | null>;
5777
- /** Spoken readout — from the full label (the centre one is truncated to fit the hole). */
5778
- protected readonly liveText: _angular_core.Signal<string>;
5779
- protected readonly legendPosition: _angular_core.Signal<"none" | "bottom" | "top" | "right">;
5780
- protected hover(key: string, event: PointerEvent): void;
5781
- protected track(event: PointerEvent): void;
5782
- protected emit(key: string): void;
5783
- protected onKey(event: KeyboardEvent): void;
5784
- protected toggleSlice(key: string): void;
5785
- protected readonly legendItems: _angular_core.Signal<LegendItem[]>;
5786
- protected readonly label: _angular_core.Signal<string>;
5787
- protected readonly table: _angular_core.Signal<ChartTable>;
5788
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsDonutChart<any>, never>;
5789
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsDonutChart<any>, "sds-donut-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "category": { "alias": "category"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "half": { "alias": "half"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "maxSlices": { "alias": "maxSlices"; "required": false; "isSignal": true; }; "otherLabel": { "alias": "otherLabel"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "legendValue": { "alias": "legendValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
5790
- }
5791
-
5792
- /** `sequential` = magnitude (one hue, pale → strong); `diverging` = polarity around a midpoint. */
5793
- type SdsHeatmapScheme = 'sequential' | 'diverging';
5794
- /**
5795
- * Heatmap — a matrix of two categorical dimensions coloured by a measure: weekday × hour, service ×
5796
- * month, product × region. Sequential (one hue, light → dark) or diverging (two opposite hues around
5797
- * a neutral gray midpoint) colour, mixed by the browser in OKLab from theme tokens so it re-themes and
5798
- * flips to dark mode on its own. Values print inside cells only where they fit, missing cells read
5799
- * as empty (not as zero), arrow keys move cell by cell, and a scale legend states the range.
5800
- *
5801
- * @example
5802
- * <sds-heatmap [data]="rows" x="heure" y="jour" value="arrivees" heading="Arrivées aux urgences" />
5803
- */
5804
- declare class SdsHeatmap<T = any> {
5805
- readonly data: _angular_core.InputSignal<readonly T[] | null | undefined>;
5806
- /** Column dimension. */
5807
- readonly x: _angular_core.InputSignal<SdsAccessor<T, SdsXValue>>;
5808
- /** Row dimension. */
5809
- readonly y: _angular_core.InputSignal<SdsAccessor<T, SdsXValue>>;
5810
- /** The measure colouring each cell. Rows sharing an (x, y) pair are summed. */
5811
- readonly value: _angular_core.InputSignal<SdsAccessor<T, number | null | undefined>>;
5812
- /** Fix column order (default: first appearance). */
5813
- readonly xOrder: _angular_core.InputSignal<readonly SdsXValue[] | null>;
5814
- /** Fix row order (default: first appearance). */
5815
- readonly yOrder: _angular_core.InputSignal<readonly SdsXValue[] | null>;
5816
- readonly heading: _angular_core.InputSignal<string>;
5817
- readonly subtitle: _angular_core.InputSignal<string>;
5818
- readonly scheme: _angular_core.InputSignal<SdsHeatmapScheme>;
5819
- /** Fix the colour domain instead of the data extent. */
5820
- readonly domain: _angular_core.InputSignal<readonly [number, number] | null>;
5821
- /** The diverging scheme's neutral value. */
5822
- readonly midpoint: _angular_core.InputSignalWithTransform<number, unknown>;
5823
- /** Height in px. Defaults to `cellHeight` per row. */
5824
- readonly height: _angular_core.InputSignalWithTransform<number | null, unknown>;
5825
- readonly cellHeight: _angular_core.InputSignalWithTransform<number, unknown>;
5826
- readonly radius: _angular_core.InputSignalWithTransform<number, unknown>;
5827
- /** Print each value inside its cell — only when every value fits (never a partial matrix). */
5828
- readonly showValues: _angular_core.InputSignalWithTransform<boolean, unknown>;
5829
- /** Show the colour-scale legend under the matrix. */
5830
- readonly scaleLegend: _angular_core.InputSignalWithTransform<boolean, unknown>;
5831
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5832
- /** Format of the column / row labels (a function; dates default to their day). */
5833
- readonly xFormat: _angular_core.InputSignal<SdsXFormat | null>;
5834
- /** Name of the measure in the tooltip (e.g. "Arrivées"). */
5835
- readonly valueLabel: _angular_core.InputSignal<string>;
5836
- /** Column-axis title, drawn under the matrix. */
5837
- readonly xLabel: _angular_core.InputSignal<string>;
5838
- /** Row-axis title, drawn vertically on the left (and the table's first column header). */
5839
- readonly yLabel: _angular_core.InputSignal<string>;
5840
- readonly locale: _angular_core.InputSignal<string | null>;
5841
- readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
5842
- /** Cross-fade cell colours when the data changes. */
5843
- readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
5844
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
5845
- readonly emptyText: _angular_core.InputSignal<string>;
5846
- readonly tableToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
5847
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
5848
- readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
5849
- protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
5850
- protected readonly active: _angular_core.WritableSignal<number | null>;
5851
- protected readonly keyboard: _angular_core.WritableSignal<boolean>;
5852
- /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */
5853
- protected onBlur(): void;
5854
- private readonly width;
5855
- private readonly loc;
5856
- protected readonly animates: _angular_core.Signal<boolean>;
5857
- private readonly fmt;
5858
- private readonly matrix;
5859
- protected readonly isEmpty: _angular_core.Signal<boolean>;
5860
- private readonly fmtX;
5861
- /** Colour domain; the diverging arms are made symmetric so equal distances read as equal. */
5862
- protected readonly scale: _angular_core.Signal<{
5863
- lo: number;
5864
- hi: number;
5865
- mid: number;
5866
- minLabel: string;
5867
- maxLabel: string;
5868
- midLabel: string;
5869
- gradient: string;
5870
- }>;
5871
- /** Signed position on the scale: 0…1 sequential, −1…1 diverging. */
5872
- private position;
5873
- /**
5874
- * Where a cell label switches to the strong-end ink — measured, not guessed: the point where the
5875
- * strong ink starts to out-contrast the pale one, per ramp, in both modes.
5876
- */
5877
- private strongEnd;
5878
- protected readonly resolvedHeight: _angular_core.Signal<number>;
5879
- protected readonly layout: _angular_core.Signal<{
5880
- width: number;
5881
- height: number;
5882
- plot: {
5883
- left: number;
5884
- top: number;
5885
- width: number;
5886
- height: number;
5887
- };
5888
- bx: d3_scale.ScaleBand<number>;
5889
- by: d3_scale.ScaleBand<number>;
5890
- xTicks: AxisTick[];
5891
- yTicks: {
5892
- pos: number;
5893
- label: string;
5894
- }[];
5895
- } | null>;
5896
- protected readonly cells: _angular_core.Signal<{
5897
- id: string;
5898
- i: number;
5899
- x: number;
5900
- y: number;
5901
- w: number;
5902
- h: number;
5903
- fill: string;
5904
- text: string;
5905
- ink: string;
5906
- missing: boolean;
5907
- }[]>;
5908
- protected readonly activeCell: _angular_core.Signal<{
5909
- id: string;
5910
- i: number;
5911
- x: number;
5912
- y: number;
5913
- w: number;
5914
- h: number;
5915
- fill: string;
5916
- text: string;
5917
- ink: string;
5918
- missing: boolean;
5919
- } | null>;
5920
- protected readonly tooltipCtx: _angular_core.Signal<SdsChartTooltipContext<T> | null>;
5921
- protected readonly liveText: _angular_core.Signal<string>;
5922
- protected hover(i: number, _event: PointerEvent): void;
5923
- protected emit(i: number): void;
5924
- /** Arrow keys move one cell in any direction. */
5925
- protected onKey(event: KeyboardEvent): void;
5926
- protected readonly label: _angular_core.Signal<string>;
5927
- protected readonly table: _angular_core.Signal<ChartTable>;
5928
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsHeatmap<any>, never>;
5929
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsHeatmap<any>, "sds-heatmap", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "xOrder": { "alias": "xOrder"; "required": false; "isSignal": true; }; "yOrder": { "alias": "yOrder"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "scheme": { "alias": "scheme"; "required": false; "isSignal": true; }; "domain": { "alias": "domain"; "required": false; "isSignal": true; }; "midpoint": { "alias": "midpoint"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "cellHeight": { "alias": "cellHeight"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "scaleLegend": { "alias": "scaleLegend"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "valueLabel": { "alias": "valueLabel"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
5930
- }
5931
-
5932
- /** A treemap node: a leaf carries `value`; a branch carries `children` (its value is their sum). */
5933
- interface SdsTreemapNode {
5934
- name: string;
5935
- value?: number | null;
5936
- children?: readonly SdsTreemapNode[];
5937
- /** Override the colour of this node's whole branch (top-level nodes) or of one leaf. */
5938
- color?: string;
5939
- /** Label ink for a custom `color` (defaults to white). */
5940
- ink?: string;
5941
- }
5942
- /**
5943
- * Treemap for part-to-whole across many items or a hierarchy — budget lines, stock by family, stays
5944
- * by service and unit. Squarified tiles sized by value, coloured by their top-level branch,
5945
- * separated by surface gaps (wider between branches), labelled only where the name fits, with a
5946
- * breadcrumb drill-down: click a branch to zoom into it, the breadcrumb to come back. Leaf clicks
5947
- * emit `pointClick`.
5948
- *
5949
- * @example
5950
- * <sds-treemap heading="Budget 2026" [data]="[{ name: 'Personnel', children: [{ name: 'Soins', value: 48 }] }]" />
5951
- */
5952
- declare class SdsTreemap {
5953
- readonly data: _angular_core.InputSignal<readonly SdsTreemapNode[] | null | undefined>;
5954
- readonly heading: _angular_core.InputSignal<string>;
5955
- readonly subtitle: _angular_core.InputSignal<string>;
5956
- readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
5957
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
5958
- /** Click a branch to zoom into it (with a breadcrumb back). */
5959
- readonly drilldown: _angular_core.InputSignalWithTransform<boolean, unknown>;
5960
- /** Name of the top of the breadcrumb. */
5961
- readonly rootLabel: _angular_core.InputSignal<string>;
5962
- /** Print the value under the name inside tiles large enough. */
5963
- readonly showValues: _angular_core.InputSignalWithTransform<boolean, unknown>;
5964
- /** `auto` = the branch legend below the tiles when there are two or more branches. */
5965
- readonly legend: _angular_core.InputSignal<SdsChartLegend>;
5966
- readonly locale: _angular_core.InputSignal<string | null>;
5967
- readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
5968
- readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
5969
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
5970
- readonly emptyText: _angular_core.InputSignal<string>;
5971
- readonly tableToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
5972
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
5973
- /** A leaf tile was clicked (branches zoom instead while `drilldown` is on). `key` is the path "A › B". */
5974
- readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<SdsTreemapNode>>;
5975
- protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
5976
- /** Requested zoom: data indices from the root down to the zoomed branch. */
5977
- private readonly path;
5978
- protected readonly active: _angular_core.WritableSignal<string | null>;
5979
- protected readonly keyboard: _angular_core.WritableSignal<boolean>;
5980
- private readonly announcement;
5981
- protected readonly pointer: _angular_core.WritableSignal<{
5982
- x: number;
5983
- y: number;
5984
- }>;
5985
- protected readonly width: _angular_core.Signal<number>;
5986
- private readonly loc;
5987
- private readonly animates;
5988
- private readonly palette;
5989
- private readonly fmt;
5990
- private readonly pct;
5991
- /** Leaving the chart dismisses a keyboard-driven readout (a pointer one clears on pointerleave). */
5992
- protected onBlur(): void;
5993
- /** Full hierarchy, summed once. */
5994
- private readonly root;
5995
- private build;
5996
- protected readonly isEmpty: _angular_core.Signal<boolean>;
5997
- /**
5998
- * The zoom that actually applies: the requested path walked against the CURRENT data, stopping at
5999
- * the first index that no longer names a branch — so new data can never leave a stale zoom behind.
6000
- */
6001
- protected readonly zoom: _angular_core.Signal<{
6002
- node: SdsTreemapNode;
6003
- indices: number[];
6004
- names: string[];
6005
- }>;
6006
- /** Branch colour + label ink per top-level data index (colour follows the entity, not its size). */
6007
- private readonly branchStyle;
6008
- /** The zoomed sub-tree, laid out at the current size. */
6009
- private readonly layoutRoot;
6010
- private readonly tiles;
6011
- private readonly target;
6012
- private readonly ready;
6013
- private readonly version;
6014
- private readonly geometry;
6015
- protected readonly rects: _angular_core.Signal<{
6016
- key: string;
6017
- x: number;
6018
- y: number;
6019
- w: number;
6020
- h: number;
6021
- color: string;
6022
- ink: string;
6023
- name: string;
6024
- value: string;
6025
- }[]>;
6026
- protected readonly activeRect: _angular_core.Signal<{
6027
- key: string;
6028
- x: number;
6029
- y: number;
6030
- w: number;
6031
- h: number;
6032
- color: string;
6033
- ink: string;
6034
- name: string;
6035
- value: string;
6036
- } | null>;
6037
- private readonly activeTile;
6038
- protected readonly tooltipCtx: _angular_core.Signal<SdsChartTooltipContext<SdsTreemapNode> | null>;
6039
- protected readonly liveText: _angular_core.Signal<string>;
6040
- protected hover(key: string, event: PointerEvent): void;
6041
- protected track(event: PointerEvent): void;
6042
- /** Zoom to a breadcrumb depth (0 = everything) and say so to screen readers. */
6043
- protected zoomTo(depth: number): void;
6044
- private announceZoom;
6045
- /** Zoom into the tile's branch — or, at the deepest level, report the leaf. */
6046
- protected activate(key: string): void;
6047
- protected onKey(event: KeyboardEvent): void;
6048
- protected readonly legendItems: _angular_core.Signal<LegendItem[]>;
6049
- protected readonly legendPosition: _angular_core.Signal<"none" | "bottom" | "top" | "right">;
6050
- protected readonly label: _angular_core.Signal<string>;
6051
- protected readonly table: _angular_core.Signal<ChartTable>;
6052
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTreemap, never>;
6053
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTreemap, "sds-treemap", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "drilldown": { "alias": "drilldown"; "required": false; "isSignal": true; }; "rootLabel": { "alias": "rootLabel"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
6054
- }
6055
-
6056
- type SdsSparklineVariant = 'line' | 'area' | 'bar';
6057
- /**
6058
- * A word-sized trend — in a table cell, a KPI tile, a list row. No axes, no legend: the shape is the
6059
- * message. Line, area or micro-bars; an optional normal range band and reference value; the last
6060
- * point (and optionally min / max) marked; a tiny hover readout; and an accessible summary (first,
6061
- * last, min, max) so the trend is never visual-only.
6062
- *
6063
- * @example
6064
- * <sds-sparkline [data]="[12, 14, 13, 18, 21, 19, 24]" label="Admissions sur 7 jours" />
6065
- */
6066
- declare class SdsSparkline {
6067
- /** The values in order. `null` leaves a gap. */
6068
- readonly data: _angular_core.InputSignal<readonly (number | null | undefined)[] | null | undefined>;
6069
- /** Optional name per point (dates, weeks) for the hover readout. */
6070
- readonly labels: _angular_core.InputSignal<readonly string[] | null>;
6071
- readonly variant: _angular_core.InputSignal<SdsSparklineVariant>;
6072
- /** Width in px; `null` (default) fills the container. */
6073
- readonly width: _angular_core.InputSignalWithTransform<number | null, unknown>;
6074
- readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
6075
- /** Any CSS colour. Defaults to the first categorical slot. */
6076
- readonly color: _angular_core.InputSignal<string | null>;
6077
- readonly strokeWidth: _angular_core.InputSignalWithTransform<number, unknown>;
6078
- /** Mark the last point. */
6079
- readonly showLast: _angular_core.InputSignalWithTransform<boolean, unknown>;
6080
- /** Mark the lowest and highest points. */
6081
- readonly showMinMax: _angular_core.InputSignalWithTransform<boolean, unknown>;
6082
- /** Shade a normal range, e.g. [60, 100]. */
6083
- readonly band: _angular_core.InputSignal<readonly [number, number] | null>;
6084
- /** Draw a reference value (a target, zero, last year's mean). */
6085
- readonly reference: _angular_core.InputSignal<number | null>;
6086
- /** Include zero in the value range (bars always do). */
6087
- readonly includeZero: _angular_core.InputSignalWithTransform<boolean, unknown>;
6088
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
6089
- /** What the trend measures — prefixes the spoken summary. */
6090
- readonly label: _angular_core.InputSignal<string>;
6091
- /** Replace the generated summary ("de 12 à 24 — min…") entirely. */
6092
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
6093
- readonly tooltip: _angular_core.InputSignalWithTransform<boolean, unknown>;
6094
- readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
6095
- readonly locale: _angular_core.InputSignal<string | null>;
6096
- protected readonly uid: string;
6097
- protected readonly active: _angular_core.WritableSignal<number | null>;
6098
- private readonly measured;
6099
- private readonly loc;
6100
- private readonly animates;
6101
- private readonly fmt;
6102
- private readonly palette;
6103
- protected readonly tint: _angular_core.Signal<string>;
6104
- protected readonly barTint: _angular_core.Signal<string>;
6105
- private readonly values;
6106
- protected readonly geo: _angular_core.Signal<{
6107
- width: number;
6108
- x: (i: number) => number;
6109
- y: (v: number) => number;
6110
- base: number;
6111
- band: {
6112
- y: number;
6113
- h: number;
6114
- } | null;
6115
- ref: number | null;
6116
- } | null>;
6117
- private readonly target;
6118
- private readonly ready;
6119
- private readonly version;
6120
- private readonly tween;
6121
- private readonly seq;
6122
- protected readonly paths: _angular_core.Signal<{
6123
- line: string;
6124
- area: string;
6125
- }>;
6126
- protected readonly bars: _angular_core.Signal<{
6127
- d: string;
6128
- last: boolean;
6129
- }[]>;
6130
- protected readonly markers: _angular_core.Signal<{
6131
- kind: string;
6132
- x: number;
6133
- y: number;
6134
- }[]>;
6135
- protected readonly activePoint: _angular_core.Signal<{
6136
- x: number;
6137
- y: number;
6138
- } | null>;
6139
- protected readonly tooltipCtx: _angular_core.Signal<SdsChartTooltipContext<any> | null>;
6140
- /** "Admissions : de 12 à 24 — min 12, max 24, 7 points." */
6141
- protected readonly summary: _angular_core.Signal<string>;
6142
- protected onPointer(event: PointerEvent): void;
6143
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsSparkline, never>;
6144
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsSparkline, "sds-sparkline", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "showLast": { "alias": "showLast"; "required": false; "isSignal": true; }; "showMinMax": { "alias": "showMinMax"; "required": false; "isSignal": true; }; "band": { "alias": "band"; "required": false; "isSignal": true; }; "reference": { "alias": "reference"; "required": false; "isSignal": true; }; "includeZero": { "alias": "includeZero"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6145
- }
6146
-
6147
- /** How the change is expressed: relative (+12,4 %) or in the value's own unit (+38). */
6148
- type SdsKpiDeltaMode = 'percent' | 'absolute';
6149
- type SdsKpiSize = 'md' | 'lg';
6150
- /** `card` draws its own surface; `plain` sits inside a card or grid you already have. */
6151
- type SdsKpiAppearance = 'card' | 'plain';
6152
- /**
6153
- * A stat tile — the number IS the chart. Label, headline value, a signed change against a named
6154
- * period whose colour means "good" or "bad" (set `upIsGood` false for waits, costs, incidents), an
6155
- * arrow glyph and a spoken sentence so the change never relies on colour, and an optional sparkline
6156
- * of the recent trend. Values auto-compact (12 900 → 12,9 k) unless a format says otherwise.
6157
- *
6158
- * @example
6159
- * <sds-kpi label="Admissions" [value]="1284" [previous]="1150" deltaLabel="vs semaine passée" [trend]="last12Weeks" />
6160
- */
6161
- declare class SdsKpi {
6162
- readonly label: _angular_core.InputSignal<string>;
6163
- readonly value: _angular_core.InputSignal<number | null | undefined>;
6164
- /** Value format. Default: exact below 10 000, compact above (12,9 k · 4,2 M). */
6165
- readonly valueFormat: _angular_core.InputSignal<SdsNumberFormat | null>;
6166
- /** The comparison value — the change is computed from it. */
6167
- readonly previous: _angular_core.InputSignal<number | null | undefined>;
6168
- /** Give the change directly instead of `previous` (a ratio in `percent` mode: 0.124 = +12,4 %). */
6169
- readonly delta: _angular_core.InputSignal<number | null | undefined>;
6170
- readonly deltaMode: _angular_core.InputSignal<SdsKpiDeltaMode>;
6171
- /** The named period, e.g. "vs mois dernier". */
6172
- readonly deltaLabel: _angular_core.InputSignal<string>;
6173
- /** False when a rise is bad news (waiting time, cost, incidents). */
6174
- readonly upIsGood: _angular_core.InputSignalWithTransform<boolean, unknown>;
6175
- readonly trend: _angular_core.InputSignal<readonly (number | null)[] | null>;
6176
- readonly trendLabels: _angular_core.InputSignal<readonly string[] | null>;
6177
- readonly trendVariant: _angular_core.InputSignal<SdsSparklineVariant>;
6178
- readonly trendColor: _angular_core.InputSignal<string | null>;
6179
- readonly icon: _angular_core.InputSignal<"chart-column" | "chart-line" | "chart-bar" | "chart-area" | "chart-pie" | "chart-scatter" | "grid-3x3" | "activity" | "gauge" | "trending-up" | "trending-down" | "clipboard-list" | "credit-card" | "external-link" | "languages" | "megaphone" | "monitor" | "store" | "user-round" | "home" | "user-plus" | "user-check" | "hand" | "users" | "bike" | "building-2" | "package" | "package-plus" | "package-open" | "rotate-ccw" | "bar-chart-3" | "search" | "log-out" | "panel-left-close" | "panel-left-open" | "panel-left" | "calendar" | "chevron-right" | "chevron-left" | "chevron-down" | "chevron-up" | "plus" | "minus" | "chevrons-left" | "chevrons-right" | "x" | "check" | "alert-circle" | "info" | "copy" | "type" | "tag" | "ticket" | "square" | "square-check" | "circle-dot" | "circle-user" | "layout-grid" | "panels-top-left" | "panel-top" | "rows-3" | "book-open" | "palette" | "bell" | "phone" | "settings" | "align-left" | "toggle-left" | "arrow-up" | "arrow-down" | "chevrons-up-down" | "chevrons-up" | "chevrons-down" | "star" | "message-square" | "filter" | "table" | "qr-code" | "eye" | "eye-off" | "user" | "check-circle" | "arrows-clockwise" | "menu" | "file-text" | "file-check" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | "locate-fixed" | "locate-off" | "bug" | "scroll-text" | "moon" | "sun" | "search-x" | "command" | "sparkles" | "triangle-alert" | "octagon-x" | "ban" | "ellipsis" | "ellipsis-vertical" | "grip-vertical" | "upload" | "image" | "image-off" | "utensils" | "zoom-in" | "zoom-out" | "trash-2" | "clock" | "pencil" | "circle-help" | "stock" | "allergen-cereals-gluten" | "allergen-crustaceans" | "allergen-eggs" | "allergen-fish" | "allergen-peanuts" | "allergen-soybeans" | "allergen-milk" | "allergen-nuts" | "allergen-celery" | "allergen-mustard" | "allergen-sesame" | "allergen-sulphites" | "allergen-lupin" | "allergen-molluscs" | null>;
6180
- /** Shown under the value when there is no change to report. */
6181
- readonly hint: _angular_core.InputSignal<string>;
6182
- readonly size: _angular_core.InputSignal<SdsKpiSize>;
6183
- readonly appearance: _angular_core.InputSignal<SdsKpiAppearance>;
6184
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
6185
- readonly locale: _angular_core.InputSignal<string | null>;
6186
- private readonly loc;
6187
- protected readonly display: _angular_core.Signal<string>;
6188
- private readonly deltaValue;
6189
- /** The change, signed, with a tone that means good/bad — never colour alone (glyph + words). */
6190
- protected readonly deltaView: _angular_core.Signal<{
6191
- text: string;
6192
- tone: string;
6193
- icon: "trending-up" | "trending-down" | "minus";
6194
- spoken: string;
6195
- } | null>;
6196
- private absoluteFormat;
6197
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsKpi, never>;
6198
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsKpi, "sds-kpi", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "previous": { "alias": "previous"; "required": false; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "deltaMode": { "alias": "deltaMode"; "required": false; "isSignal": true; }; "deltaLabel": { "alias": "deltaLabel"; "required": false; "isSignal": true; }; "upIsGood": { "alias": "upIsGood"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendLabels": { "alias": "trendLabels"; "required": false; "isSignal": true; }; "trendVariant": { "alias": "trendVariant"; "required": false; "isSignal": true; }; "trendColor": { "alias": "trendColor"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6199
- }
6200
-
6201
- export { SDS_ALLERGENS, SDS_ALLERGEN_ICONS, SDS_ALLERGEN_LABELS_EN, SDS_CHART_CONFIG, SDS_DONUT_OTHER_KEY, SDS_ICONS, SDS_PHONE_COUNTRIES, SDS_THEME_STORAGE_KEY, SDS_UI_PREF_LANG_PARAM, SDS_UI_PREF_THEME_PARAM, SdsAccordion, SdsAccordionContent, SdsAccordionHeader, SdsAccordionPanel, SdsAccordionStore, SdsAddressAutocomplete, SdsAddressExtra, SdsAllergenIcon, SdsAvatar, SdsBadge, SdsBarChart, SdsBulkBar, SdsButton, SdsCalendar, SdsCard, SdsChartTooltip, SdsCheckbox, SdsChecklistRow, SdsChip, SdsChipGroup, SdsDatePicker, SdsDonutChart, SdsEnvBanner, SdsFileDrop, SdsHeatmap, SdsIcon, SdsImageCropper, SdsInput, SdsInputNumber, SdsKpi, SdsLanguageSwitcher, SdsLineChart, SdsLocalizedInput, SdsMenu, SdsMenuItem, SdsMenuTrigger, SdsMultiSelect, SdsNavGroup, SdsNavItem, SdsOtpInput, SdsPaginator, SdsPhoneInput, SdsRadio, SdsScatterChart, SdsScore, SdsSearchCommand, SdsSegmented, SdsSelect, SdsSelectEmpty, SdsSelectFooter, SdsSelectOption, SdsShell, SdsSidebar, SdsSortableHandle, SdsSortableItem, SdsSortableList, SdsSparkline, SdsStatusTile, SdsTab, SdsTabList, SdsTabPanel, SdsTabPanels, SdsTable, SdsTableCell, SdsTableEmpty, SdsTableHeader, SdsTableRowExpansion, SdsTabs, SdsTabsStore, SdsTextarea, SdsThemeService, SdsThemeToggle, SdsTimeInput, SdsToastHost, SdsToastService, SdsToggleSwitch, SdsTopbar, SdsTreemap, SdsTriStateChip, SdsUserMenu, SidebarStore, addDays, addMonths, addMonthsKeepDay, appendUiPrefs, formatDdMmYyyy, formatHhMm, isOutOfRange, isSameDay, isSdsThemeMode, isoDay, pad2, provideSdsCharts, readUiPrefs, sdsFileMatchesAccept, sdsFormatBytes, sdsFormatNational, sdsMatchDialCode, sdsNormalizeSignificant, startOfDay, startOfMonth, stripUiPrefs };
6202
- export type { SdsAccessor, SdsAccordionActive, SdsAccordionValue, SdsAddressAutocompleteAppearance, SdsAddressAutocompleteShape, SdsAddressAutocompleteSize, SdsAddressExtraContext, SdsAddressExtraPosition, SdsAddressLocateFn, SdsAddressSearchFn, SdsAddressSuggestion, SdsAllergen, SdsAvatarShape, SdsAvatarStatus, SdsBadgeSize, SdsBadgeVariant, SdsBarOrientation, SdsBarSort, SdsBulkBarPosition, SdsButtonShape, SdsButtonSize, SdsButtonVariant, SdsCardVariant, SdsChartAnnotation, SdsChartConfig, SdsChartGrid, SdsChartLegend, SdsChartPointEvent, SdsChartReferenceBand, SdsChartReferenceLine, SdsChartScale, SdsChartSeries, SdsChartStack, SdsChartTone, SdsChartTooltipContext, SdsChartTooltipRow, SdsChartXType, SdsCheckboxSize, SdsChecklistStatus, SdsChipOption, SdsChipSize, SdsCropRect, SdsDatePickerSize, SdsDonutLegendValue, SdsDonutSort, SdsDonutVariant, SdsEnvBannerEnv, SdsFileDropAppearance, SdsFileRejection, SdsFileRejectionReason, SdsHeatmapScheme, SdsIconName, SdsIconSize, SdsImageCropperBlobOptions, SdsImageCropperShape, SdsInputAppearance, SdsInputNumberAppearance, SdsInputNumberButtonLayout, SdsInputNumberCurrencyDisplay, SdsInputNumberMode, SdsInputNumberSize, SdsInputShape, SdsInputSize, SdsInputType, SdsKpiAppearance, SdsKpiDeltaMode, SdsKpiSize, SdsLanguageOption, SdsLanguageSwitcherAlign, SdsLanguageSwitcherAppearance, SdsLanguageSwitcherDirection, SdsLineCurve, SdsLineMarkers, SdsLocalizedInputSize, SdsLocalizedValue, SdsMenuAction, SdsMenuAlign, SdsMenuEntry, SdsMenuItemTone, SdsMenuSeparator, SdsMultiSelectDisplay, SdsMultiSelectSize, SdsNavItemBadgeTone, SdsNumberFormat, SdsOtpInputSize, SdsPaginatorSize, SdsPaginatorState, SdsPhoneCountry, SdsPhoneInputSize, SdsPhoneValue, SdsRadioSize, SdsScoreSize, SdsScoreTier, SdsScoreVariant, SdsSearchAppearance, SdsSearchItem, SdsSegmentedOption, SdsSegmentedSize, SdsSelectAppearance, SdsSelectEmptyContext, SdsSelectFooterContext, SdsSelectOptionContext, SdsSelectSize, SdsShellBackground, SdsSidebarAppearance, SdsSortOrder, SdsSortableAppearance, SdsSortableItemContext, SdsSortableReorderEvent, SdsSparklineVariant, SdsStatusTileState, SdsTabValue, SdsTableCellCommitEvent, SdsTableCellContext, SdsTableCellErrors, SdsTableColumn, SdsTableEditTrigger, SdsTableEditor, SdsTableEmptyContext, SdsTableHeaderContext, SdsTableLazyEvent, SdsTableRowExpansionContext, SdsTableSelectOption, SdsTableSize, SdsTableSortEvent, SdsTabsVariant, SdsTextareaAppearance, SdsTextareaResize, SdsTextareaSize, SdsTheme, SdsThemeMode, SdsThemeToggleAppearance, SdsTimeInputAppearance, SdsTimeInputSize, SdsToast, SdsToastKind, SdsToggleSwitchSize, SdsTopbarAppearance, SdsTreemapNode, SdsTriState, SdsTriStateChipSize, SdsUiPrefs, SdsUserMenuAlign, SdsUserMenuAppearance, SdsXFormat, SdsXValue };
5371
+ export { SDS_ALLERGENS, SDS_ALLERGEN_ICONS, SDS_ALLERGEN_LABELS_EN, SDS_CHART_CONFIG, SDS_CHART_LABELS_EN, SDS_ICONS, SDS_PHONE_COUNTRIES, SDS_THEME_STORAGE_KEY, SDS_UI_PREF_LANG_PARAM, SDS_UI_PREF_THEME_PARAM, SdsAccordion, SdsAccordionContent, SdsAccordionHeader, SdsAccordionPanel, SdsAccordionStore, SdsAddressAutocomplete, SdsAddressExtra, SdsAllergenIcon, SdsAvatar, SdsBadge, SdsBulkBar, SdsButton, SdsCalendar, SdsCard, SdsCheckbox, SdsChecklistRow, SdsChip, SdsChipGroup, SdsDatePicker, SdsDateRangePicker, SdsEnvBanner, SdsFileDrop, SdsIcon, SdsImageCropper, SdsInput, SdsInputNumber, SdsLanguageSwitcher, SdsLocalizedInput, SdsMenu, SdsMenuItem, SdsMenuTrigger, SdsMultiSelect, SdsNavGroup, SdsNavItem, SdsOtpInput, SdsPaginator, SdsPhoneInput, SdsRadio, SdsRangeCalendar, SdsScore, SdsSearchCommand, SdsSegmented, SdsSelect, SdsSelectEmpty, SdsSelectFooter, SdsSelectOption, SdsShell, SdsSidebar, SdsSortableHandle, SdsSortableItem, SdsSortableList, SdsStatusTile, SdsTab, SdsTabList, SdsTabPanel, SdsTabPanels, SdsTable, SdsTableCell, SdsTableEmpty, SdsTableHeader, SdsTableRowExpansion, SdsTabs, SdsTabsStore, SdsTextarea, SdsThemeService, SdsThemeToggle, SdsTimeInput, SdsToastHost, SdsToastService, SdsToggleSwitch, SdsTopbar, SdsTriStateChip, SdsUserMenu, SidebarStore, addDays, addMonths, addMonthsKeepDay, appendUiPrefs, diffInDays, formatDateRange, formatDdMmYyyy, formatHhMm, isOutOfRange, isSameDay, isSameRange, isSdsThemeMode, isoDay, pad2, provideSdsCharts, readUiPrefs, sdsFileMatchesAccept, sdsFormatBytes, sdsFormatNational, sdsLastDays, sdsLastMonths, sdsMatchDialCode, sdsNormalizeSignificant, startOfDay, startOfMonth, stripUiPrefs };
5372
+ export type { SdsAccordionActive, SdsAccordionValue, SdsAddressAutocompleteAppearance, SdsAddressAutocompleteShape, SdsAddressAutocompleteSize, SdsAddressExtraContext, SdsAddressExtraPosition, SdsAddressLocateFn, SdsAddressSearchFn, SdsAddressSuggestion, SdsAllergen, SdsAvatarShape, SdsAvatarStatus, SdsBadgeSize, SdsBadgeVariant, SdsBulkBarPosition, SdsButtonShape, SdsButtonSize, SdsButtonVariant, SdsCardVariant, SdsChartConfig, SdsChartLabels, SdsCheckboxSize, SdsChecklistStatus, SdsChipOption, SdsChipSize, SdsCropRect, SdsDatePickerSize, SdsDateRange, SdsDateRangePickerSize, SdsDateRangePreset, SdsEnvBannerEnv, SdsFileDropAppearance, SdsFileRejection, SdsFileRejectionReason, SdsIconName, SdsIconSize, SdsImageCropperBlobOptions, SdsImageCropperShape, SdsInputAppearance, SdsInputNumberAppearance, SdsInputNumberButtonLayout, SdsInputNumberCurrencyDisplay, SdsInputNumberMode, SdsInputNumberSize, SdsInputShape, SdsInputSize, SdsInputType, SdsKpiChangeText, SdsLanguageOption, SdsLanguageSwitcherAlign, SdsLanguageSwitcherAppearance, SdsLanguageSwitcherDirection, SdsLocalizedInputSize, SdsLocalizedValue, SdsMenuAction, SdsMenuAlign, SdsMenuEntry, SdsMenuItemTone, SdsMenuSeparator, SdsMultiSelectDisplay, SdsMultiSelectSize, SdsNavItemBadgeTone, SdsOtpInputSize, SdsPaginatorSize, SdsPaginatorState, SdsPhoneCountry, SdsPhoneInputSize, SdsPhoneValue, SdsRadioSize, SdsScoreSize, SdsScoreTier, SdsScoreVariant, SdsSearchAppearance, SdsSearchItem, SdsSegmentedOption, SdsSegmentedSize, SdsSelectAppearance, SdsSelectEmptyContext, SdsSelectFooterContext, SdsSelectOptionContext, SdsSelectSize, SdsShellBackground, SdsSidebarAppearance, SdsSortOrder, SdsSortableAppearance, SdsSortableItemContext, SdsSortableReorderEvent, SdsSparklineSummaryText, SdsStatusTileState, SdsTabValue, SdsTableCellCommitEvent, SdsTableCellContext, SdsTableCellErrors, SdsTableColumn, SdsTableEditTrigger, SdsTableEditor, SdsTableEmptyContext, SdsTableHeaderContext, SdsTableLazyEvent, SdsTableRowExpansionContext, SdsTableSelectOption, SdsTableSize, SdsTableSortEvent, SdsTabsVariant, SdsTextareaAppearance, SdsTextareaResize, SdsTextareaSize, SdsTheme, SdsThemeMode, SdsThemeToggleAppearance, SdsTimeInputAppearance, SdsTimeInputSize, SdsToast, SdsToastKind, SdsToggleSwitchSize, SdsTopbarAppearance, SdsTrendDirection, SdsTriState, SdsTriStateChipSize, SdsUiPrefs, SdsUserMenuAlign, SdsUserMenuAppearance };