@besaitech/ng-design-system 0.0.11

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 ADDED
@@ -0,0 +1,1549 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, WritableSignal, OnInit, TemplateRef } from '@angular/core';
3
+ import { SafeHtml } from '@angular/platform-browser';
4
+ import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
5
+ import * as _besaitech_ng_design_system from '@besaitech/ng-design-system';
6
+
7
+ /**
8
+ * Curated set of line icons (Lucide-style, 24x24 viewBox, stroke-based).
9
+ * Each entry holds only the inner SVG markup; the <sds-icon> component wraps it.
10
+ * Add new icons here and they become available everywhere via name="...".
11
+ */
12
+ declare const SDS_ICONS: {
13
+ readonly home: "<path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/><polyline points=\"9 22 9 12 15 12 15 22\"/>";
14
+ readonly 'user-plus': "<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><line x1=\"19\" x2=\"19\" y1=\"8\" y2=\"14\"/><line x1=\"22\" x2=\"16\" y1=\"11\" y2=\"11\"/>";
15
+ readonly hand: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-hand-icon lucide-hand\"><path d=\"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2\"/><path d=\"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2\"/><path d=\"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8\"/><path d=\"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\"/></svg>";
16
+ readonly users: "<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M22 21v-2a4 4 0 0 0-3-3.87\"/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"/>";
17
+ readonly 'building-2': "<path d=\"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z\"/><path d=\"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2\"/><path d=\"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2\"/><path d=\"M10 6h4\"/><path d=\"M10 10h4\"/><path d=\"M10 14h4\"/><path d=\"M10 18h4\"/>";
18
+ readonly package: "<path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\"/><path d=\"M12 22V12\"/><polyline points=\"3.29 7 12 12 20.71 7\"/><path d=\"m7.5 4.27 9 5.15\"/>";
19
+ readonly 'package-plus': "<path d=\"M16 16h6\"/><path d=\"M19 13v6\"/><path d=\"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0\"/><path d=\"m7.5 4.27 9 5.15\"/><polyline points=\"3.29 7 12 12 20.71 7\"/><path d=\"M12 22V12\"/>";
20
+ readonly 'package-open': "<path d=\"M12 22v-9\"/><path d=\"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z\"/><path d=\"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13\"/><path d=\"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36z\"/>";
21
+ readonly 'rotate-ccw': "<path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/><path d=\"M3 3v5h5\"/>";
22
+ readonly 'bar-chart-3': "<path d=\"M3 3v18h18\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>";
23
+ readonly search: "<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>";
24
+ readonly 'log-out': "<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/><polyline points=\"16 17 21 12 16 7\"/><line x1=\"21\" x2=\"9\" y1=\"12\" y2=\"12\"/>";
25
+ readonly 'panel-left-close': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/><path d=\"m16 15-3-3 3-3\"/>";
26
+ readonly 'panel-left-open': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/><path d=\"m14 9 3 3-3 3\"/>";
27
+ readonly 'panel-left': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/>";
28
+ readonly calendar: "<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>";
29
+ readonly 'chevron-right': "<path d=\"m9 18 6-6-6-6\"/>";
30
+ readonly 'chevron-left': "<path d=\"m15 18-6-6 6-6\"/>";
31
+ readonly 'chevron-down': "<path d=\"m6 9 6 6 6-6\"/>";
32
+ readonly 'chevrons-left': "<path d=\"m11 17-5-5 5-5\"/><path d=\"m18 17-5-5 5-5\"/>";
33
+ readonly 'chevrons-right': "<path d=\"m6 17 5-5-5-5\"/><path d=\"m13 17 5-5-5-5\"/>";
34
+ readonly x: "<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>";
35
+ readonly check: "<path d=\"M20 6 9 17l-5-5\"/>";
36
+ readonly 'alert-circle': "<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>";
37
+ readonly info: "<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>";
38
+ readonly copy: "<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>";
39
+ readonly type: "<polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" x2=\"15\" y1=\"20\" y2=\"20\"/><line x1=\"12\" x2=\"12\" y1=\"4\" y2=\"20\"/>";
40
+ readonly tag: "<path d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"/><circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>";
41
+ readonly square: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/>";
42
+ readonly 'circle-user': "<circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662\"/>";
43
+ readonly 'layout-grid': "<rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\"/>";
44
+ readonly 'panels-top-left': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M9 21V9\"/>";
45
+ readonly 'panel-top': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/>";
46
+ readonly 'rows-3': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M3 15h18\"/>";
47
+ readonly 'book-open': "<path d=\"M12 7v14\"/><path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/>";
48
+ readonly palette: "<circle cx=\"13.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"17.5\" cy=\"10.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"8.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"6.5\" cy=\"12.5\" r=\".5\" fill=\"currentColor\"/><path d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.555C21.965 6.012 17.461 2 12 2z\"/>";
49
+ readonly bell: "<path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\"/><path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\"/>";
50
+ readonly phone: "<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"/>";
51
+ readonly settings: "<path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>";
52
+ readonly 'align-left': "<path d=\"M15 12H3\"/><path d=\"M17 18H3\"/><path d=\"M21 6H3\"/>";
53
+ readonly 'toggle-left': "<rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"6\" ry=\"6\"/><circle cx=\"8\" cy=\"12\" r=\"2\"/>";
54
+ readonly 'arrow-up': "<path d=\"m5 12 7-7 7 7\"/><path d=\"M12 19V5\"/>";
55
+ readonly 'arrow-down': "<path d=\"M12 5v14\"/><path d=\"m19 12-7 7-7-7\"/>";
56
+ readonly 'chevrons-up-down': "<path d=\"m7 15 5 5 5-5\"/><path d=\"m7 9 5-5 5 5\"/>";
57
+ readonly filter: "<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>";
58
+ readonly table: "<path d=\"M12 3v18\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M3 15h18\"/>";
59
+ readonly eye: "<path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>";
60
+ readonly user: "<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>";
61
+ readonly 'check-circle': "<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>";
62
+ readonly 'arrows-clockwise': "<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>";
63
+ readonly menu: "<line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/>";
64
+ readonly 'file-text': "<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/><path d=\"M10 9H8\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/>";
65
+ readonly hash: "<line x1=\"4\" x2=\"20\" y1=\"9\" y2=\"9\"/><line x1=\"4\" x2=\"20\" y1=\"15\" y2=\"15\"/><line x1=\"10\" x2=\"8\" y1=\"3\" y2=\"21\"/><line x1=\"16\" x2=\"14\" y1=\"3\" y2=\"21\"/>";
66
+ readonly 'map-pin': "<path d=\"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/>";
67
+ readonly inbox: "<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"/><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"/>";
68
+ readonly 'arrow-right': "<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>";
69
+ readonly 'refresh-cw': "<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>";
70
+ readonly 'loader-circle': "<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>";
71
+ };
72
+ type SdsIconName = keyof typeof SDS_ICONS;
73
+
74
+ type SdsIconSize = 'sm' | 'md' | 'lg' | 'xl';
75
+ /**
76
+ * Inline SVG icon backed by a curated, dependency-free registry.
77
+ *
78
+ * @example
79
+ * <sds-icon name="search" />
80
+ * <sds-icon name="home" [size]="18" />
81
+ */
82
+ declare class SdsIcon {
83
+ private readonly sanitizer;
84
+ /** Icon identifier from the registry. */
85
+ readonly name: _angular_core.InputSignal<"home" | "user-plus" | "hand" | "users" | "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" | "chevrons-left" | "chevrons-right" | "x" | "check" | "alert-circle" | "info" | "copy" | "type" | "tag" | "square" | "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" | "filter" | "table" | "eye" | "user" | "check-circle" | "arrows-clockwise" | "menu" | "file-text" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle">;
86
+ /** Square size: a pixel number, a numeric string, or a keyword (sm·md·lg·xl). */
87
+ readonly size: _angular_core.InputSignalWithTransform<number, string | number>;
88
+ /** Stroke width of the line icon. */
89
+ readonly strokeWidth: _angular_core.InputSignal<number>;
90
+ protected readonly svg: _angular_core.Signal<SafeHtml>;
91
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsIcon, never>;
92
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsIcon, "sds-icon", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
93
+ }
94
+
95
+ type SdsButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'ghost' | 'danger';
96
+ type SdsButtonSize = 'sm' | 'md' | 'lg';
97
+ /**
98
+ * Brand button. Project an <sds-icon sdsIconLeading/> or <sds-icon sdsIconTrailing/>
99
+ * for icons, or set [iconOnly]="true" for a square icon button.
100
+ *
101
+ * @example
102
+ * <sds-button variant="primary" (click)="save()">Enregistrer</sds-button>
103
+ */
104
+ declare class SdsButton {
105
+ readonly variant: _angular_core.InputSignal<SdsButtonVariant>;
106
+ readonly size: _angular_core.InputSignal<SdsButtonSize>;
107
+ readonly type: _angular_core.InputSignal<"button" | "submit" | "reset">;
108
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
109
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
110
+ /** Full-width button. */
111
+ readonly block: _angular_core.InputSignalWithTransform<boolean, unknown>;
112
+ /** Square icon-only button (provide [ariaLabel] for accessibility). */
113
+ readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
114
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
115
+ constructor();
116
+ /** Block the documented host-bound (click)/routerLink when inert. */
117
+ protected onHostClick(event: Event): void;
118
+ protected readonly hostClass: _angular_core.Signal<"flex w-full" | "inline-flex">;
119
+ protected readonly classes: _angular_core.Signal<string>;
120
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsButton, never>;
121
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsButton, "sds-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[sdsIconLeading]", "*", "[sdsIconTrailing]"], true, never>;
122
+ }
123
+
124
+ type SdsInputSize = 'sm' | 'md' | 'lg';
125
+ type SdsInputAppearance = 'default' | 'on-brand';
126
+ type SdsInputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'search' | 'url';
127
+ /**
128
+ * Text input with label, hint/error, optional leading/trailing icons and a
129
+ * clear button. Implements ControlValueAccessor — use with reactive forms or
130
+ * [(ngModel)]. The `on-brand` appearance is tuned for dark surfaces (e.g. the
131
+ * sidebar search field).
132
+ */
133
+ declare class SdsInput implements ControlValueAccessor {
134
+ readonly inputId: string;
135
+ readonly label: _angular_core.InputSignal<string>;
136
+ /** Accessible name used when no visible [label] is provided. */
137
+ readonly ariaLabel: _angular_core.InputSignal<string>;
138
+ readonly placeholder: _angular_core.InputSignal<string>;
139
+ readonly hint: _angular_core.InputSignal<string>;
140
+ readonly error: _angular_core.InputSignal<string>;
141
+ readonly type: _angular_core.InputSignal<SdsInputType>;
142
+ readonly size: _angular_core.InputSignal<SdsInputSize>;
143
+ readonly appearance: _angular_core.InputSignal<SdsInputAppearance>;
144
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
145
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
146
+ readonly leadingIcon: _angular_core.InputSignal<"home" | "user-plus" | "hand" | "users" | "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" | "chevrons-left" | "chevrons-right" | "x" | "check" | "alert-circle" | "info" | "copy" | "type" | "tag" | "square" | "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" | "filter" | "table" | "eye" | "user" | "check-circle" | "arrows-clockwise" | "menu" | "file-text" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | null>;
147
+ readonly trailingIcon: _angular_core.InputSignal<"home" | "user-plus" | "hand" | "users" | "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" | "chevrons-left" | "chevrons-right" | "x" | "check" | "alert-circle" | "info" | "copy" | "type" | "tag" | "square" | "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" | "filter" | "table" | "eye" | "user" | "check-circle" | "arrows-clockwise" | "menu" | "file-text" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | null>;
148
+ /** Current value (driven by CVA + user input). */
149
+ protected readonly value: _angular_core.WritableSignal<string>;
150
+ private readonly cvaDisabled;
151
+ protected readonly onBrand: _angular_core.Signal<boolean>;
152
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
153
+ protected readonly describedBy: _angular_core.Signal<string | null>;
154
+ protected readonly fieldPadding: _angular_core.Signal<string>;
155
+ protected readonly wrapperClasses: _angular_core.Signal<string>;
156
+ private onChange;
157
+ protected onTouched: () => void;
158
+ writeValue(value: string | null): void;
159
+ registerOnChange(fn: (value: string) => void): void;
160
+ registerOnTouched(fn: () => void): void;
161
+ setDisabledState(isDisabled: boolean): void;
162
+ protected onInput(event: Event): void;
163
+ protected clear(): void;
164
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsInput, never>;
165
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsInput, "sds-input", 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; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "leadingIcon": { "alias": "leadingIcon"; "required": false; "isSignal": true; }; "trailingIcon": { "alias": "trailingIcon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
166
+ }
167
+
168
+ type SdsTextareaSize = 'sm' | 'md' | 'lg';
169
+ type SdsTextareaResize = 'none' | 'vertical' | 'both';
170
+ /**
171
+ * Multi-line text field with label, hint/error, character counter and optional
172
+ * auto-resize. Implements ControlValueAccessor — use with reactive forms or
173
+ * [(ngModel)].
174
+ */
175
+ declare class SdsTextarea implements ControlValueAccessor {
176
+ readonly fieldId: string;
177
+ private readonly field;
178
+ readonly label: _angular_core.InputSignal<string>;
179
+ /** Accessible name used when no visible [label] is provided. */
180
+ readonly ariaLabel: _angular_core.InputSignal<string>;
181
+ readonly placeholder: _angular_core.InputSignal<string>;
182
+ readonly hint: _angular_core.InputSignal<string>;
183
+ readonly error: _angular_core.InputSignal<string>;
184
+ readonly size: _angular_core.InputSignal<SdsTextareaSize>;
185
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
186
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
187
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
188
+ /** Minimum visible rows. */
189
+ readonly rows: _angular_core.InputSignalWithTransform<number, unknown>;
190
+ /** Grow the field to fit its content as the user types. */
191
+ readonly autoResize: _angular_core.InputSignalWithTransform<boolean, unknown>;
192
+ /** Hard character cap; 0 means no limit. */
193
+ readonly maxLength: _angular_core.InputSignalWithTransform<number, unknown>;
194
+ /** Show a character counter row. */
195
+ readonly showCount: _angular_core.InputSignalWithTransform<boolean, unknown>;
196
+ readonly resize: _angular_core.InputSignal<SdsTextareaResize>;
197
+ /** Current value (driven by CVA + user input). */
198
+ protected readonly value: _angular_core.WritableSignal<string>;
199
+ private readonly cvaDisabled;
200
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
201
+ protected readonly count: _angular_core.Signal<number>;
202
+ protected readonly hasCounter: _angular_core.Signal<boolean>;
203
+ /** Spoken description of the counter for assistive tech. */
204
+ protected readonly countLabel: _angular_core.Signal<string>;
205
+ protected readonly describedBy: _angular_core.Signal<string | null>;
206
+ protected readonly fieldClasses: _angular_core.Signal<string>;
207
+ constructor();
208
+ private onChange;
209
+ protected onTouched: () => void;
210
+ writeValue(value: string | null): void;
211
+ registerOnChange(fn: (value: string) => void): void;
212
+ registerOnTouched(fn: () => void): void;
213
+ setDisabledState(isDisabled: boolean): void;
214
+ protected onInput(event: Event): void;
215
+ private resizeToContent;
216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTextarea, never>;
217
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTextarea, "sds-textarea", 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; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "autoResize": { "alias": "autoResize"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "showCount": { "alias": "showCount"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
218
+ }
219
+
220
+ type SdsToggleSwitchSize = 'sm' | 'md' | 'lg';
221
+ interface ToggleSizing {
222
+ /** Track width/height. */
223
+ track: string;
224
+ /** Knob width/height. */
225
+ knob: string;
226
+ /** Knob translate distance when checked. */
227
+ on: string;
228
+ /** Icon size in pixels. */
229
+ icon: number;
230
+ }
231
+ /**
232
+ * On/off switch styled as a sliding toggle. Implements ControlValueAccessor —
233
+ * use with reactive forms or [(ngModel)]. Supports an optional visible label,
234
+ * custom `trueValue`/`falseValue`, and optional knob icons for the on/off
235
+ * states.
236
+ */
237
+ declare class SdsToggleSwitch implements ControlValueAccessor {
238
+ readonly fieldId: string;
239
+ readonly label: _angular_core.InputSignal<string>;
240
+ /** Accessible name used when no visible [label] is provided. */
241
+ readonly ariaLabel: _angular_core.InputSignal<string>;
242
+ readonly size: _angular_core.InputSignal<SdsToggleSwitchSize>;
243
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
244
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
245
+ /** Value emitted/stored when the switch is on. */
246
+ readonly trueValue: _angular_core.InputSignal<unknown>;
247
+ /** Value emitted/stored when the switch is off. */
248
+ readonly falseValue: _angular_core.InputSignal<unknown>;
249
+ /** Icon shown on the knob when checked. */
250
+ readonly onIcon: _angular_core.InputSignal<"home" | "user-plus" | "hand" | "users" | "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" | "chevrons-left" | "chevrons-right" | "x" | "check" | "alert-circle" | "info" | "copy" | "type" | "tag" | "square" | "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" | "filter" | "table" | "eye" | "user" | "check-circle" | "arrows-clockwise" | "menu" | "file-text" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | null>;
251
+ /** Icon shown on the knob when unchecked. */
252
+ readonly offIcon: _angular_core.InputSignal<"home" | "user-plus" | "hand" | "users" | "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" | "chevrons-left" | "chevrons-right" | "x" | "check" | "alert-circle" | "info" | "copy" | "type" | "tag" | "square" | "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" | "filter" | "table" | "eye" | "user" | "check-circle" | "arrows-clockwise" | "menu" | "file-text" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | null>;
253
+ readonly hint: _angular_core.InputSignal<string>;
254
+ readonly error: _angular_core.InputSignal<string>;
255
+ /**
256
+ * Current value (driven by CVA). Initialized to a stable literal off-state
257
+ * rather than reading falseValue() in the field initializer — a signal input
258
+ * read here always returns its declared default, so capturing it would ignore
259
+ * a custom [falseValue] and is non-reactive. The off-state is resolved live
260
+ * against trueValue() in checked() and against falseValue() in toggle().
261
+ */
262
+ protected readonly value: _angular_core.WritableSignal<unknown>;
263
+ private readonly cvaDisabled;
264
+ protected readonly checked: _angular_core.Signal<boolean>;
265
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
266
+ protected readonly sizing: _angular_core.Signal<ToggleSizing>;
267
+ protected readonly describedBy: _angular_core.Signal<string | null>;
268
+ protected readonly trackClasses: _angular_core.Signal<string>;
269
+ protected readonly knobClasses: _angular_core.Signal<string>;
270
+ constructor();
271
+ private onChange;
272
+ protected onTouched: () => void;
273
+ writeValue(value: unknown): void;
274
+ registerOnChange(fn: (value: unknown) => void): void;
275
+ registerOnTouched(fn: () => void): void;
276
+ setDisabledState(isDisabled: boolean): void;
277
+ protected toggle(): void;
278
+ protected onSpace(event: Event): void;
279
+ private setValue;
280
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsToggleSwitch, never>;
281
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsToggleSwitch, "sds-toggle-switch", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "trueValue": { "alias": "trueValue"; "required": false; "isSignal": true; }; "falseValue": { "alias": "falseValue"; "required": false; "isSignal": true; }; "onIcon": { "alias": "onIcon"; "required": false; "isSignal": true; }; "offIcon": { "alias": "offIcon"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
282
+ }
283
+
284
+ type SdsCheckboxSize = 'sm' | 'md';
285
+ /**
286
+ * Boolean checkbox. Implements ControlValueAccessor — use with reactive forms
287
+ * or `[(ngModel)]`. Renders a styled box (brand-filled with a check when on)
288
+ * and an optional inline label.
289
+ *
290
+ * @example
291
+ * <sds-checkbox label="Fusion automatique" [(ngModel)]="autoMerge" />
292
+ */
293
+ declare class SdsCheckbox implements ControlValueAccessor {
294
+ readonly id: string;
295
+ readonly label: _angular_core.InputSignal<string>;
296
+ /** Accessible name used when no visible [label] is provided. */
297
+ readonly ariaLabel: _angular_core.InputSignal<string>;
298
+ readonly size: _angular_core.InputSignal<SdsCheckboxSize>;
299
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
300
+ protected readonly checked: _angular_core.WritableSignal<boolean>;
301
+ private readonly cvaDisabled;
302
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
303
+ protected readonly iconSize: _angular_core.Signal<11 | 13>;
304
+ protected readonly boxClasses: _angular_core.Signal<string>;
305
+ private onChange;
306
+ protected onTouched: () => void;
307
+ writeValue(value: boolean | null): void;
308
+ registerOnChange(fn: (value: boolean) => void): void;
309
+ registerOnTouched(fn: () => void): void;
310
+ setDisabledState(isDisabled: boolean): void;
311
+ protected onInput(event: Event): void;
312
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsCheckbox, never>;
313
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsCheckbox, "sds-checkbox", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
314
+ }
315
+
316
+ type SdsAvatarStatus = 'online' | 'offline' | 'busy' | 'away';
317
+ /**
318
+ * Circular avatar showing an image or initials, with an optional status dot.
319
+ */
320
+ declare class SdsAvatar {
321
+ readonly name: _angular_core.InputSignal<string>;
322
+ readonly initials: _angular_core.InputSignal<string>;
323
+ readonly src: _angular_core.InputSignal<string | null>;
324
+ readonly size: _angular_core.InputSignal<number>;
325
+ readonly status: _angular_core.InputSignal<SdsAvatarStatus | null>;
326
+ /** Tailwind bg utility for the initials background. */
327
+ readonly bgClass: _angular_core.InputSignal<string>;
328
+ protected readonly dotSize: _angular_core.Signal<number>;
329
+ protected readonly statusColor: _angular_core.Signal<string>;
330
+ protected readonly resolvedInitials: _angular_core.Signal<string>;
331
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsAvatar, never>;
332
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsAvatar, "sds-avatar", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "bgClass": { "alias": "bgClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
333
+ }
334
+
335
+ type SdsBadgeVariant = 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'danger';
336
+ type SdsBadgeSize = 'sm' | 'md';
337
+ /**
338
+ * Small status/label pill. Used e.g. for the "TEST V.1.0.0" version chip.
339
+ */
340
+ declare class SdsBadge {
341
+ readonly variant: _angular_core.InputSignal<SdsBadgeVariant>;
342
+ readonly size: _angular_core.InputSignal<SdsBadgeSize>;
343
+ readonly dot: _angular_core.InputSignalWithTransform<boolean, unknown>;
344
+ protected readonly classes: _angular_core.Signal<string>;
345
+ protected readonly dotClass: _angular_core.Signal<string>;
346
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsBadge, never>;
347
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsBadge, "sds-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "dot": { "alias": "dot"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
348
+ }
349
+
350
+ type SdsCardVariant = 'elevated' | 'outlined' | 'subtle';
351
+ /**
352
+ * Generic surface container. Set [interactive]="true" for hover affordance
353
+ * (used by the dashboard action cards).
354
+ */
355
+ declare class SdsCard {
356
+ readonly variant: _angular_core.InputSignal<SdsCardVariant>;
357
+ /** Inner padding utility (override with e.g. "p-4"). */
358
+ readonly padding: _angular_core.InputSignal<string>;
359
+ readonly interactive: _angular_core.InputSignalWithTransform<boolean, unknown>;
360
+ protected readonly hostClass: _angular_core.Signal<string>;
361
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsCard, never>;
362
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsCard, "sds-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
363
+ }
364
+
365
+ /** Small, dependency-free date helpers (day-granularity, local time). */
366
+ declare function startOfDay(d: Date): Date;
367
+ declare function startOfMonth(d: Date): Date;
368
+ declare function addDays(d: Date, n: number): Date;
369
+ declare function addMonths(d: Date, n: number): Date;
370
+ /** Add `n` months, keeping the day-of-month but clamping to the target month's length. */
371
+ declare function addMonthsKeepDay(d: Date, n: number): Date;
372
+ declare function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean;
373
+ /** True when `d` falls outside the inclusive [min, max] day range. */
374
+ declare function isOutOfRange(d: Date, min: Date | null, max: Date | null): boolean;
375
+ declare function isoDay(d: Date): string;
376
+ /** Format a date as dd/MM/yyyy (default display format). */
377
+ declare function formatDdMmYyyy(d: Date): string;
378
+
379
+ type CalView = 'day' | 'month' | 'year';
380
+ interface DayCell {
381
+ date: Date;
382
+ day: number;
383
+ otherMonth: boolean;
384
+ today: boolean;
385
+ selected: boolean;
386
+ disabled: boolean;
387
+ focused: boolean;
388
+ }
389
+ /**
390
+ * Inline month calendar with day → month → year drill-down navigation,
391
+ * min/max bounds and keyboard support. Used standalone (inline) or inside
392
+ * <sds-date-picker>.
393
+ */
394
+ declare class SdsCalendar {
395
+ private readonly host;
396
+ readonly value: _angular_core.ModelSignal<Date | null>;
397
+ readonly min: _angular_core.InputSignal<Date | null>;
398
+ readonly max: _angular_core.InputSignal<Date | null>;
399
+ /** 0 = Sunday, 1 = Monday (default, European). */
400
+ readonly firstDayOfWeek: _angular_core.InputSignal<0 | 1>;
401
+ readonly locale: _angular_core.InputSignal<string>;
402
+ readonly showActions: _angular_core.InputSignal<boolean>;
403
+ /** Emitted when a concrete date is picked (day click or "Aujourd'hui"). */
404
+ readonly dateSelect: _angular_core.OutputEmitterRef<Date>;
405
+ protected readonly view: _angular_core.WritableSignal<CalView>;
406
+ protected readonly viewDate: _angular_core.WritableSignal<Date>;
407
+ protected readonly focusedDate: _angular_core.WritableSignal<Date>;
408
+ constructor();
409
+ /** Today falls outside [min, max] — used to disable the "Today" action. */
410
+ protected readonly todayDisabled: _angular_core.Signal<boolean>;
411
+ 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";
412
+ protected readonly titleBtn = "rounded-control px-2 py-1 capitalize hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500";
413
+ protected readonly actionBtn = "rounded-control px-2 py-1 text-xs font-medium text-brand-700 hover:bg-brand-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40";
414
+ protected readonly monthLong: _angular_core.Signal<string>;
415
+ protected readonly yearLabel: _angular_core.Signal<number>;
416
+ protected readonly decadeStart: _angular_core.Signal<number>;
417
+ protected readonly weekdayLabels: _angular_core.Signal<string[]>;
418
+ protected readonly weeks: _angular_core.Signal<DayCell[][]>;
419
+ protected readonly monthsGrid: _angular_core.Signal<{
420
+ month: number;
421
+ label: string;
422
+ selected: boolean;
423
+ current: boolean;
424
+ disabled: boolean;
425
+ }[]>;
426
+ protected readonly yearsGrid: _angular_core.Signal<{
427
+ year: number;
428
+ selected: boolean;
429
+ current: boolean;
430
+ disabled: boolean;
431
+ }[]>;
432
+ protected prev(): void;
433
+ protected next(): void;
434
+ protected selectDay(d: Date): void;
435
+ protected selectMonth(m: number): void;
436
+ protected selectYear(y: number): void;
437
+ protected goToday(): void;
438
+ protected clear(): void;
439
+ protected onGridKeydown(e: KeyboardEvent): void;
440
+ /** Move focus to the active day cell (called when the panel opens). */
441
+ focusActiveCell(): void;
442
+ private focusHandle?;
443
+ private focusCell;
444
+ protected iso(d: Date): string;
445
+ protected fullLabel(d: Date): string;
446
+ protected dayClass(cell: DayCell): string;
447
+ protected cellClass(selected: boolean, current: boolean, disabled: boolean): string;
448
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsCalendar, never>;
449
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsCalendar, "sds-calendar", never, { "value": { "alias": "value"; "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; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "dateSelect": "dateSelect"; }, never, never, true, never>;
450
+ }
451
+
452
+ type SdsDatePickerSize = 'sm' | 'md' | 'lg';
453
+ /**
454
+ * Date picker: a read-only field that opens a calendar overlay, or an inline
455
+ * calendar. Implements ControlValueAccessor — use with reactive forms or
456
+ * [(ngModel)]; the value is a `Date | null`.
457
+ *
458
+ * @example
459
+ * <sds-date-picker label="Date de garde" [(ngModel)]="date" />
460
+ */
461
+ declare class SdsDatePicker implements ControlValueAccessor, OnDestroy {
462
+ private readonly host;
463
+ private readonly injector;
464
+ protected readonly fieldId: string;
465
+ readonly label: _angular_core.InputSignal<string>;
466
+ readonly ariaLabel: _angular_core.InputSignal<string>;
467
+ readonly placeholder: _angular_core.InputSignal<string>;
468
+ readonly hint: _angular_core.InputSignal<string>;
469
+ readonly error: _angular_core.InputSignal<string>;
470
+ readonly size: _angular_core.InputSignal<SdsDatePickerSize>;
471
+ readonly min: _angular_core.InputSignal<Date | null>;
472
+ readonly max: _angular_core.InputSignal<Date | null>;
473
+ readonly firstDayOfWeek: _angular_core.InputSignal<0 | 1>;
474
+ readonly locale: _angular_core.InputSignal<string>;
475
+ readonly inline: _angular_core.InputSignalWithTransform<boolean, unknown>;
476
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
477
+ readonly showActions: _angular_core.InputSignalWithTransform<boolean, unknown>;
478
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
479
+ /** Custom display formatter (default dd/MM/yyyy). */
480
+ readonly format: _angular_core.InputSignal<(d: Date) => string>;
481
+ protected readonly value: _angular_core.WritableSignal<Date | null>;
482
+ protected readonly open: _angular_core.WritableSignal<boolean>;
483
+ private readonly cvaDisabled;
484
+ private readonly calendar;
485
+ private readonly trigger;
486
+ /** The overlay panel, relocated to document.body while open. */
487
+ private panelEl;
488
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
489
+ protected readonly displayValue: _angular_core.Signal<string>;
490
+ /** Whether the clear button is shown (affects the field's right padding). */
491
+ protected readonly showClear: _angular_core.Signal<boolean>;
492
+ protected readonly wrapperClasses: _angular_core.Signal<string>;
493
+ protected toggle(event?: Event): void;
494
+ protected openPanel(): void;
495
+ protected close(returnFocus?: boolean): void;
496
+ protected clear(event: Event): void;
497
+ protected onCalendarValue(v: Date | null): void;
498
+ protected onDocumentClick(event: MouseEvent): void;
499
+ private readonly reflow;
500
+ private listening;
501
+ private addReflowListeners;
502
+ private removeReflowListeners;
503
+ private positionPanel;
504
+ ngOnDestroy(): void;
505
+ private setValue;
506
+ private onChange;
507
+ protected onTouched: () => void;
508
+ writeValue(value: Date | string | number | null): void;
509
+ registerOnChange(fn: (value: Date | null) => void): void;
510
+ registerOnTouched(fn: () => void): void;
511
+ setDisabledState(isDisabled: boolean): void;
512
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsDatePicker, never>;
513
+ 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; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
514
+ }
515
+
516
+ type SdsSelectSize = 'sm' | 'md' | 'lg';
517
+ interface NormOption$1 {
518
+ label: string;
519
+ value: unknown;
520
+ disabled: boolean;
521
+ }
522
+ /**
523
+ * Single-select dropdown. Options may be primitives or objects (configure via
524
+ * [optionLabel]/[optionValue]/[optionDisabled]). The overlay is appended to
525
+ * <body>. Supports filtering, clearing, and full keyboard navigation.
526
+ * Implements ControlValueAccessor — use with reactive forms or [(ngModel)].
527
+ *
528
+ * For object options, set [optionValue] or [dataKey] so written values match by
529
+ * key; otherwise selection matching falls back to reference equality (a written
530
+ * copy of an option will not match).
531
+ *
532
+ * @example
533
+ * <sds-select [options]="services" optionLabel="name" optionValue="id"
534
+ * placeholder="Choisir un service" [(ngModel)]="serviceId" filter clearable />
535
+ */
536
+ declare class SdsSelect implements ControlValueAccessor, OnDestroy {
537
+ private readonly host;
538
+ private readonly injector;
539
+ protected readonly selectId: string;
540
+ protected readonly listId: string;
541
+ readonly options: _angular_core.InputSignal<readonly unknown[]>;
542
+ readonly optionLabel: _angular_core.InputSignal<string>;
543
+ readonly optionValue: _angular_core.InputSignal<string>;
544
+ readonly optionDisabled: _angular_core.InputSignal<string>;
545
+ /** Key used to compare object values for selection equality. */
546
+ readonly dataKey: _angular_core.InputSignal<string>;
547
+ readonly placeholder: _angular_core.InputSignal<string>;
548
+ readonly label: _angular_core.InputSignal<string>;
549
+ readonly ariaLabel: _angular_core.InputSignal<string>;
550
+ readonly hint: _angular_core.InputSignal<string>;
551
+ readonly error: _angular_core.InputSignal<string>;
552
+ readonly size: _angular_core.InputSignal<SdsSelectSize>;
553
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
554
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
555
+ readonly filter: _angular_core.InputSignalWithTransform<boolean, unknown>;
556
+ readonly filterPlaceholder: _angular_core.InputSignal<string>;
557
+ readonly emptyMessage: _angular_core.InputSignal<string>;
558
+ protected readonly value: _angular_core.WritableSignal<unknown>;
559
+ protected readonly open: _angular_core.WritableSignal<boolean>;
560
+ protected readonly filterText: _angular_core.WritableSignal<string>;
561
+ protected readonly highlightedIndex: _angular_core.WritableSignal<number>;
562
+ private readonly cvaDisabled;
563
+ private readonly trigger;
564
+ private panelEl;
565
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
566
+ protected readonly normalizedOptions: _angular_core.Signal<NormOption$1[]>;
567
+ protected readonly filteredOptions: _angular_core.Signal<NormOption$1[]>;
568
+ protected readonly selectedOption: _angular_core.Signal<NormOption$1 | null>;
569
+ protected readonly showClear: _angular_core.Signal<boolean>;
570
+ protected readonly activeDescId: _angular_core.Signal<string | null>;
571
+ protected readonly wrapperClasses: _angular_core.Signal<string>;
572
+ private norm;
573
+ private equals;
574
+ protected isSelected(v: unknown): boolean;
575
+ protected optionId(i: number): string;
576
+ protected optionClass(i: number, opt: NormOption$1): string;
577
+ protected toggle(): void;
578
+ protected openPanel(): void;
579
+ protected close(returnFocus?: boolean): void;
580
+ protected clear(event: Event): void;
581
+ protected selectOption(opt: NormOption$1): void;
582
+ protected onFilter(event: Event): void;
583
+ protected onTriggerKeydown(event: KeyboardEvent): void;
584
+ protected onFilterKeydown(event: KeyboardEvent): void;
585
+ private handleNavKey;
586
+ private initHighlight;
587
+ private firstEnabled;
588
+ private move;
589
+ private highlightFirst;
590
+ private highlightLast;
591
+ private selectHighlighted;
592
+ private typeBuffer;
593
+ private typeTimer?;
594
+ private typeAhead;
595
+ private scrollHighlightedIntoView;
596
+ private readonly reflow;
597
+ private listening;
598
+ private addReflowListeners;
599
+ private removeReflowListeners;
600
+ private positionPanel;
601
+ protected onDocumentClick(event: MouseEvent): void;
602
+ ngOnDestroy(): void;
603
+ private setValue;
604
+ private onChange;
605
+ protected onTouched: () => void;
606
+ writeValue(value: unknown): void;
607
+ registerOnChange(fn: (value: unknown) => void): void;
608
+ registerOnTouched(fn: () => void): void;
609
+ setDisabledState(isDisabled: boolean): void;
610
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsSelect, never>;
611
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsSelect, "sds-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionDisabled": { "alias": "optionDisabled"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "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; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
612
+ }
613
+
614
+ type SdsMultiSelectSize = 'sm' | 'md' | 'lg';
615
+ type SdsMultiSelectDisplay = 'comma' | 'chip';
616
+ interface NormOption {
617
+ label: string;
618
+ value: unknown;
619
+ disabled: boolean;
620
+ }
621
+ /**
622
+ * Multi-select dropdown (value is an array). Options may be primitives or
623
+ * objects (configure via [optionLabel]/[optionValue]/[optionDisabled]). The
624
+ * overlay is appended to <body>. Supports a "select all" toggle, per-option
625
+ * checkboxes, chip or comma display, filtering, clearing and keyboard nav.
626
+ * Implements ControlValueAccessor — use with reactive forms or [(ngModel)].
627
+ *
628
+ * For object options, set [optionValue] or [dataKey] so written values match by
629
+ * key; otherwise matching falls back to reference equality.
630
+ *
631
+ * @example
632
+ * <sds-multi-select [options]="services" optionLabel="name" optionValue="code"
633
+ * display="chip" filter [(ngModel)]="codes" />
634
+ */
635
+ declare class SdsMultiSelect implements ControlValueAccessor, OnDestroy {
636
+ private readonly host;
637
+ private readonly injector;
638
+ protected readonly selectId: string;
639
+ protected readonly listId: string;
640
+ readonly options: _angular_core.InputSignal<readonly unknown[]>;
641
+ readonly optionLabel: _angular_core.InputSignal<string>;
642
+ readonly optionValue: _angular_core.InputSignal<string>;
643
+ readonly optionDisabled: _angular_core.InputSignal<string>;
644
+ readonly dataKey: _angular_core.InputSignal<string>;
645
+ readonly placeholder: _angular_core.InputSignal<string>;
646
+ readonly label: _angular_core.InputSignal<string>;
647
+ readonly ariaLabel: _angular_core.InputSignal<string>;
648
+ readonly hint: _angular_core.InputSignal<string>;
649
+ readonly error: _angular_core.InputSignal<string>;
650
+ readonly size: _angular_core.InputSignal<SdsMultiSelectSize>;
651
+ readonly display: _angular_core.InputSignal<SdsMultiSelectDisplay>;
652
+ /** In comma mode, show a count label once more than this many are selected. */
653
+ readonly maxSelectedLabels: _angular_core.InputSignalWithTransform<number, unknown>;
654
+ readonly selectedItemsLabel: _angular_core.InputSignal<string>;
655
+ readonly showToggleAll: _angular_core.InputSignalWithTransform<boolean, unknown>;
656
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
657
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
658
+ readonly filter: _angular_core.InputSignalWithTransform<boolean, unknown>;
659
+ readonly filterPlaceholder: _angular_core.InputSignal<string>;
660
+ readonly emptyMessage: _angular_core.InputSignal<string>;
661
+ protected readonly value: _angular_core.WritableSignal<unknown[]>;
662
+ protected readonly open: _angular_core.WritableSignal<boolean>;
663
+ protected readonly filterText: _angular_core.WritableSignal<string>;
664
+ protected readonly highlightedIndex: _angular_core.WritableSignal<number>;
665
+ private readonly cvaDisabled;
666
+ private readonly trigger;
667
+ private panelEl;
668
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
669
+ protected readonly normalizedOptions: _angular_core.Signal<NormOption[]>;
670
+ protected readonly filteredOptions: _angular_core.Signal<NormOption[]>;
671
+ protected readonly selectedOptions: _angular_core.Signal<NormOption[]>;
672
+ protected readonly showClear: _angular_core.Signal<boolean>;
673
+ protected readonly triggerLabel: _angular_core.Signal<string>;
674
+ private readonly filteredEnabled;
675
+ protected readonly allFilteredSelected: _angular_core.Signal<boolean>;
676
+ protected readonly toggleAllIndeterminate: _angular_core.Signal<boolean>;
677
+ /** Show the select-all row only when there is at least one enabled option. */
678
+ protected readonly hasToggleAll: _angular_core.Signal<boolean>;
679
+ protected readonly toggleAllId: string;
680
+ protected readonly activeDescId: _angular_core.Signal<string | null>;
681
+ protected readonly wrapperClasses: _angular_core.Signal<string>;
682
+ private norm;
683
+ private equals;
684
+ protected isSelected(v: unknown): boolean;
685
+ protected optionId(i: number): string;
686
+ protected optionClass(i: number, opt: NormOption): string;
687
+ protected checkboxClass(checked: boolean, indeterminate: boolean): string;
688
+ protected toggle(): void;
689
+ protected openPanel(): void;
690
+ protected close(returnFocus?: boolean): void;
691
+ protected clear(event: Event): void;
692
+ protected removeChip(event: Event, opt: NormOption): void;
693
+ protected toggleOption(opt: NormOption): void;
694
+ protected toggleAll(): void;
695
+ protected onFilter(event: Event): void;
696
+ protected onTriggerKeydown(event: KeyboardEvent): void;
697
+ protected onFilterKeydown(event: KeyboardEvent): void;
698
+ private handleNavKey;
699
+ private initHighlight;
700
+ private firstEnabled;
701
+ private move;
702
+ private highlightFirst;
703
+ private highlightLast;
704
+ private toggleHighlighted;
705
+ private typeBuffer;
706
+ private typeTimer?;
707
+ private typeAhead;
708
+ private scrollHighlightedIntoView;
709
+ private readonly reflow;
710
+ private listening;
711
+ private addReflowListeners;
712
+ private removeReflowListeners;
713
+ private positionPanel;
714
+ protected onDocumentClick(event: MouseEvent): void;
715
+ ngOnDestroy(): void;
716
+ private setValue;
717
+ private onChange;
718
+ protected onTouched: () => void;
719
+ writeValue(value: unknown[] | null): void;
720
+ registerOnChange(fn: (value: unknown[]) => void): void;
721
+ registerOnTouched(fn: () => void): void;
722
+ setDisabledState(isDisabled: boolean): void;
723
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsMultiSelect, never>;
724
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsMultiSelect, "sds-multi-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionDisabled": { "alias": "optionDisabled"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "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; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "maxSelectedLabels": { "alias": "maxSelectedLabels"; "required": false; "isSignal": true; }; "selectedItemsLabel": { "alias": "selectedItemsLabel"; "required": false; "isSignal": true; }; "showToggleAll": { "alias": "showToggleAll"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
725
+ }
726
+
727
+ /**
728
+ * Curated country dataset for <sds-phone-input>. Dependency-free: each entry
729
+ * carries the dial code, the valid national-significant digit length(s) used
730
+ * for validation, a best-effort display mask (# = a digit) and an example.
731
+ *
732
+ * `lengths` are the number of significant national digits, i.e. excluding the
733
+ * dial code and any leading trunk "0". Add or override entries as needed.
734
+ */
735
+ interface SdsPhoneCountry {
736
+ /** ISO 3166-1 alpha-2 code, e.g. 'BE'. */
737
+ iso2: string;
738
+ /** Localised display name. */
739
+ name: string;
740
+ /** International dial code without '+', e.g. '32'. */
741
+ dialCode: string;
742
+ /** Valid national-significant digit counts (excluding dial/trunk). */
743
+ lengths: number[];
744
+ /** Display grouping mask; '#' is a digit placeholder, other chars are literal. */
745
+ format: string;
746
+ /** Example national-significant number (digits only) for the placeholder. */
747
+ example: string;
748
+ }
749
+ declare const SDS_PHONE_COUNTRIES: readonly SdsPhoneCountry[];
750
+ /** Reduce raw input to national-significant digits (drops non-digits & leading trunk zeros). */
751
+ declare function sdsNormalizeSignificant(raw: string): string;
752
+ /**
753
+ * Group `digits` for display using `mask` ('#' = digit). Digits beyond the mask
754
+ * are appended grouped in pairs; an incomplete number stops at the last digit.
755
+ */
756
+ declare function sdsFormatNational(digits: string, mask: string): string;
757
+ /** Find the country whose dial code is the longest prefix of an E.164 digit string. */
758
+ declare function sdsMatchDialCode(e164Digits: string, countries: readonly SdsPhoneCountry[]): SdsPhoneCountry | null;
759
+
760
+ type SdsPhoneInputSize = 'sm' | 'md' | 'lg';
761
+ /** Payload of (phoneChange): the canonical and parsed parts of the number. */
762
+ interface SdsPhoneValue {
763
+ /** E.164 string, e.g. '+32470123456' (empty when no number is entered). */
764
+ e164: string;
765
+ /** Selected country ISO2 code. */
766
+ country: string;
767
+ /** Dial code without '+', e.g. '32'. */
768
+ dialCode: string;
769
+ /** National-significant digits, e.g. '470123456'. */
770
+ national: string;
771
+ /** Whether the national number matches an expected length for the country. */
772
+ valid: boolean;
773
+ }
774
+ /**
775
+ * International phone number input: a country selector (ISO chip + dial code)
776
+ * with a searchable, body-appended dropdown, plus a formatted national-number
777
+ * field. Implements ControlValueAccessor (value is an E.164 string such as
778
+ * '+32470123456') and Validator (national length is checked per country).
779
+ *
780
+ * @example
781
+ * <sds-phone-input label="Téléphone" defaultCountry="BE"
782
+ * [preferredCountries]="['BE','FR','LU']"
783
+ * [(ngModel)]="phone" required />
784
+ */
785
+ declare class SdsPhoneInput implements ControlValueAccessor, Validator, OnDestroy {
786
+ private readonly host;
787
+ private readonly injector;
788
+ protected readonly fieldId: string;
789
+ protected readonly listId: string;
790
+ readonly label: _angular_core.InputSignal<string>;
791
+ readonly hint: _angular_core.InputSignal<string>;
792
+ /** External error message; overrides the built-in validation message. */
793
+ readonly error: _angular_core.InputSignal<string>;
794
+ readonly size: _angular_core.InputSignal<SdsPhoneInputSize>;
795
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
796
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
797
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
798
+ /** Initial country (ISO2) when no value is written. */
799
+ readonly defaultCountry: _angular_core.InputSignal<string>;
800
+ /** ISO2 codes shown first in the list. */
801
+ readonly preferredCountries: _angular_core.InputSignal<string[]>;
802
+ /** Restrict the list to these ISO2 codes (empty = all). */
803
+ readonly onlyCountries: _angular_core.InputSignal<string[]>;
804
+ /** Show an example number as a hint when no [hint] is provided. */
805
+ readonly showExampleHint: _angular_core.InputSignalWithTransform<boolean, unknown>;
806
+ readonly requiredMessage: _angular_core.InputSignal<string>;
807
+ /** Emitted with the parsed parts whenever the number or country changes. */
808
+ readonly phoneChange: _angular_core.OutputEmitterRef<SdsPhoneValue>;
809
+ protected readonly national: _angular_core.WritableSignal<string>;
810
+ protected readonly countryIso: _angular_core.WritableSignal<string>;
811
+ protected readonly open: _angular_core.WritableSignal<boolean>;
812
+ protected readonly filterText: _angular_core.WritableSignal<string>;
813
+ protected readonly highlightedIndex: _angular_core.WritableSignal<number>;
814
+ protected readonly touched: _angular_core.WritableSignal<boolean>;
815
+ private readonly cvaDisabled;
816
+ private readonly anchor;
817
+ private readonly field;
818
+ private panelEl;
819
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
820
+ /** Countries after applying [onlyCountries] and [preferredCountries] ordering. */
821
+ protected readonly availableCountries: _angular_core.Signal<SdsPhoneCountry[]>;
822
+ protected readonly country: _angular_core.Signal<SdsPhoneCountry>;
823
+ protected readonly filteredCountries: _angular_core.Signal<SdsPhoneCountry[]>;
824
+ protected readonly display: _angular_core.Signal<string>;
825
+ protected readonly placeholderText: _angular_core.Signal<string>;
826
+ protected readonly autoHint: _angular_core.Signal<string>;
827
+ protected readonly e164: _angular_core.Signal<string>;
828
+ /** Non-empty but national length is not valid for the country. */
829
+ protected readonly invalid: _angular_core.Signal<boolean>;
830
+ protected readonly showError: _angular_core.Signal<boolean>;
831
+ protected readonly errorMessage: _angular_core.Signal<string>;
832
+ protected readonly describedBy: _angular_core.Signal<string | null>;
833
+ protected readonly wrapperClasses: _angular_core.Signal<string>;
834
+ protected optionId(i: number): string;
835
+ protected optionClass(i: number, c: SdsPhoneCountry): string;
836
+ protected onInput(event: Event): void;
837
+ protected clear(): void;
838
+ protected toggle(): void;
839
+ protected openPanel(): void;
840
+ protected close(returnFocus?: boolean): void;
841
+ protected selectCountry(c: SdsPhoneCountry): void;
842
+ protected onFilter(event: Event): void;
843
+ protected onTriggerKeydown(event: KeyboardEvent): void;
844
+ protected onFilterKeydown(event: KeyboardEvent): void;
845
+ private handleNavKey;
846
+ private move;
847
+ private scrollHighlightedIntoView;
848
+ private readonly reflow;
849
+ private listening;
850
+ private addReflowListeners;
851
+ private removeReflowListeners;
852
+ private positionPanel;
853
+ protected onDocumentClick(event: MouseEvent): void;
854
+ protected markTouched(): void;
855
+ ngOnDestroy(): void;
856
+ private emit;
857
+ private onChange;
858
+ protected onTouched: () => void;
859
+ writeValue(value: string | null): void;
860
+ registerOnChange(fn: (value: string) => void): void;
861
+ registerOnTouched(fn: () => void): void;
862
+ setDisabledState(isDisabled: boolean): void;
863
+ private onValidatorChange;
864
+ validate(_control: AbstractControl): ValidationErrors | null;
865
+ registerOnValidatorChange(fn: () => void): void;
866
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsPhoneInput, never>;
867
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsPhoneInput, "sds-phone-input", never, { "label": { "alias": "label"; "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; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "defaultCountry": { "alias": "defaultCountry"; "required": false; "isSignal": true; }; "preferredCountries": { "alias": "preferredCountries"; "required": false; "isSignal": true; }; "onlyCountries": { "alias": "onlyCountries"; "required": false; "isSignal": true; }; "showExampleHint": { "alias": "showExampleHint"; "required": false; "isSignal": true; }; "requiredMessage": { "alias": "requiredMessage"; "required": false; "isSignal": true; }; }, { "phoneChange": "phoneChange"; }, never, never, true, never>;
868
+ }
869
+
870
+ type SdsPaginatorSize = 'sm' | 'md' | 'lg';
871
+ /** Payload emitted by (pageChange) whenever the page or page size changes. */
872
+ interface SdsPaginatorState {
873
+ /** Zero-based index of the current page. */
874
+ page: number;
875
+ /** Zero-based index of the first record on the current page. */
876
+ first: number;
877
+ /** Rows displayed per page. */
878
+ rows: number;
879
+ /** Total number of pages. */
880
+ pageCount: number;
881
+ /** Total number of records. */
882
+ totalRecords: number;
883
+ }
884
+ /**
885
+ * Pagination control (mirrors PrimeNG's paginator). Drives a sliding window of
886
+ * page links with first/prev/next/last navigation, an optional rows-per-page
887
+ * dropdown (reuses <sds-select>), a current-page report and a jump-to-page input.
888
+ *
889
+ * State is exposed as two-way models: [first] (zero-based index of the first
890
+ * record on the page) and [rows] (page size). A combined (pageChange) event
891
+ * carries the full {@link SdsPaginatorState} on every change.
892
+ *
893
+ * @example
894
+ * <sds-paginator
895
+ * [totalRecords]="120"
896
+ * [(first)]="first"
897
+ * [(rows)]="rows"
898
+ * [rowsPerPageOptions]="[10, 20, 50]"
899
+ * showCurrentPageReport
900
+ * (pageChange)="load($event)"
901
+ * />
902
+ */
903
+ declare class SdsPaginator {
904
+ /** Total number of records to paginate. */
905
+ readonly totalRecords: _angular_core.InputSignalWithTransform<number, unknown>;
906
+ /** Zero-based index of the first record on the current page (two-way). */
907
+ readonly first: _angular_core.ModelSignal<number>;
908
+ /** Rows displayed per page (two-way). */
909
+ readonly rows: _angular_core.ModelSignal<number>;
910
+ /** When non-empty, renders a rows-per-page dropdown with these choices. */
911
+ readonly rowsPerPageOptions: _angular_core.InputSignal<number[]>;
912
+ /** Maximum count of numbered page links shown in the sliding window. */
913
+ readonly pageLinkSize: _angular_core.InputSignalWithTransform<number, unknown>;
914
+ readonly showFirstLastIcon: _angular_core.InputSignalWithTransform<boolean, unknown>;
915
+ readonly showPageLinks: _angular_core.InputSignalWithTransform<boolean, unknown>;
916
+ readonly showCurrentPageReport: _angular_core.InputSignalWithTransform<boolean, unknown>;
917
+ /** Tokens: {first} {last} {totalRecords} {currentPage} {totalPages} {rows}. */
918
+ readonly currentPageReportTemplate: _angular_core.InputSignal<string>;
919
+ readonly showJumpToPageInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
920
+ readonly rowsPerPageLabel: _angular_core.InputSignal<string>;
921
+ readonly jumpToPageLabel: _angular_core.InputSignal<string>;
922
+ readonly size: _angular_core.InputSignal<SdsPaginatorSize>;
923
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
924
+ /** Fires after any page or page-size change with the full paginator state. */
925
+ readonly pageChange: _angular_core.OutputEmitterRef<SdsPaginatorState>;
926
+ protected readonly pageCount: _angular_core.Signal<number>;
927
+ protected readonly page: _angular_core.Signal<number>;
928
+ protected readonly firstDisabled: _angular_core.Signal<boolean>;
929
+ protected readonly lastDisabled: _angular_core.Signal<boolean>;
930
+ protected readonly iconSize: _angular_core.Signal<number>;
931
+ protected readonly pageLinks: _angular_core.Signal<number[]>;
932
+ protected readonly reportText: _angular_core.Signal<string>;
933
+ protected readonly hostClass: _angular_core.Signal<string>;
934
+ protected navClass(isDisabled: boolean): string;
935
+ protected linkClass(active: boolean): string;
936
+ protected firstPage(): void;
937
+ protected prevPage(): void;
938
+ protected nextPage(): void;
939
+ protected lastPage(): void;
940
+ protected changePage(target: number): void;
941
+ protected onRowsChange(value: number): void;
942
+ protected onJump(event: Event): void;
943
+ private emit;
944
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsPaginator, never>;
945
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsPaginator, "sds-paginator", never, { "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "first": { "alias": "first"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; "isSignal": true; }; "pageLinkSize": { "alias": "pageLinkSize"; "required": false; "isSignal": true; }; "showFirstLastIcon": { "alias": "showFirstLastIcon"; "required": false; "isSignal": true; }; "showPageLinks": { "alias": "showPageLinks"; "required": false; "isSignal": true; }; "showCurrentPageReport": { "alias": "showCurrentPageReport"; "required": false; "isSignal": true; }; "currentPageReportTemplate": { "alias": "currentPageReportTemplate"; "required": false; "isSignal": true; }; "showJumpToPageInput": { "alias": "showJumpToPageInput"; "required": false; "isSignal": true; }; "rowsPerPageLabel": { "alias": "rowsPerPageLabel"; "required": false; "isSignal": true; }; "jumpToPageLabel": { "alias": "jumpToPageLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "first": "firstChange"; "rows": "rowsChange"; "pageChange": "pageChange"; }, never, never, true, never>;
946
+ }
947
+
948
+ /** Identifier of a tab / panel pair. Keep types consistent across a tab set. */
949
+ type SdsTabValue = string | number | null;
950
+ /**
951
+ * Coordinates a single <sds-tabs> instance: holds the active value (shared from
952
+ * the host's two-way model), tracks registered tabs for default selection and
953
+ * generates the ARIA ids that link each tab to its panel.
954
+ *
955
+ * Provided at the <sds-tabs> component level so every tab set is isolated.
956
+ */
957
+ declare class SdsTabsStore {
958
+ /** Unique base id used to link tabs and panels via ARIA. */
959
+ readonly id: string;
960
+ /** Whether the tab list scrolls horizontally (mirrors [scrollable]). */
961
+ readonly scrollable: WritableSignal<boolean>;
962
+ private value;
963
+ private readonly registered;
964
+ /** Called once by <sds-tabs> to share its two-way `value` signal. */
965
+ connect(value: WritableSignal<SdsTabValue>): void;
966
+ activeValue(): SdsTabValue;
967
+ isActive(value: SdsTabValue): boolean;
968
+ select(value: SdsTabValue): void;
969
+ registerTab(value: SdsTabValue): void;
970
+ unregisterTab(value: SdsTabValue): void;
971
+ tabId(value: SdsTabValue): string;
972
+ panelId(value: SdsTabValue): string;
973
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTabsStore, never>;
974
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdsTabsStore>;
975
+ }
976
+
977
+ /**
978
+ * Root of a tab set. Compose with <sds-tab-list> (headers) and <sds-tab-panels>
979
+ * (content). The active tab is the [value], matched against each <sds-tab> /
980
+ * <sds-tab-panel> [value]; it is two-way bindable via [(value)]. When omitted,
981
+ * the first registered tab is selected.
982
+ *
983
+ * @example
984
+ * <sds-tabs [(value)]="active">
985
+ * <sds-tab-list>
986
+ * <sds-tab value="0">Détails</sds-tab>
987
+ * <sds-tab value="1">Historique</sds-tab>
988
+ * </sds-tab-list>
989
+ * <sds-tab-panels>
990
+ * <sds-tab-panel value="0">…</sds-tab-panel>
991
+ * <sds-tab-panel value="1">…</sds-tab-panel>
992
+ * </sds-tab-panels>
993
+ * </sds-tabs>
994
+ */
995
+ declare class SdsTabs {
996
+ private readonly store;
997
+ /** Value of the active tab (two-way). */
998
+ readonly value: _angular_core.ModelSignal<SdsTabValue>;
999
+ /** Let the tab list scroll horizontally instead of overflowing. */
1000
+ readonly scrollable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1001
+ constructor();
1002
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTabs, never>;
1003
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTabs, "sds-tabs", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "scrollable": { "alias": "scrollable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, never>;
1004
+ }
1005
+
1006
+ /**
1007
+ * Container (role="tablist") for the <sds-tab> headers. Renders the bottom rule
1008
+ * and handles roving-focus keyboard navigation (Arrow keys, Home, End) with
1009
+ * automatic activation.
1010
+ */
1011
+ declare class SdsTabList {
1012
+ private readonly host;
1013
+ private readonly store;
1014
+ protected readonly listClass: _angular_core.Signal<"relative flex border-b border-border" | "relative flex border-b border-border overflow-x-auto">;
1015
+ protected onKeydown(event: KeyboardEvent): void;
1016
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTabList, never>;
1017
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTabList, "sds-tab-list", never, {}, {}, never, ["*"], true, never>;
1018
+ }
1019
+
1020
+ /**
1021
+ * A single tab header (role="tab"). Project the label and, optionally, an
1022
+ * <sds-icon> for an icon + text header. Set [disabled] to make it unselectable.
1023
+ */
1024
+ declare class SdsTab implements OnInit, OnDestroy {
1025
+ protected readonly store: SdsTabsStore;
1026
+ readonly value: _angular_core.InputSignal<SdsTabValue>;
1027
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1028
+ protected readonly active: _angular_core.Signal<boolean>;
1029
+ ngOnInit(): void;
1030
+ ngOnDestroy(): void;
1031
+ protected select(): void;
1032
+ protected tabClass(): string;
1033
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTab, never>;
1034
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTab, "sds-tab", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1035
+ }
1036
+
1037
+ /** Wrapper for the <sds-tab-panel> content blocks of a tab set. */
1038
+ declare class SdsTabPanels {
1039
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTabPanels, never>;
1040
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTabPanels, "sds-tab-panels", never, {}, {}, never, ["*"], true, never>;
1041
+ }
1042
+
1043
+ /**
1044
+ * Content for one tab (role="tabpanel"); shown only while its [value] matches
1045
+ * the active tab. Inactive panels are not rendered (their content is created
1046
+ * on activation), so panel state does not persist across switches.
1047
+ */
1048
+ declare class SdsTabPanel {
1049
+ protected readonly store: SdsTabsStore;
1050
+ readonly value: _angular_core.InputSignal<SdsTabValue>;
1051
+ protected readonly active: _angular_core.Signal<boolean>;
1052
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTabPanel, never>;
1053
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTabPanel, "sds-tab-panel", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1054
+ }
1055
+
1056
+ /** Identifier of an accordion panel. Keep types consistent across a set. */
1057
+ type SdsAccordionValue = string | number;
1058
+ /** Active value(s): a single value (or null) normally, an array in multiple mode. */
1059
+ type SdsAccordionActive = SdsAccordionValue | SdsAccordionValue[] | null;
1060
+ /**
1061
+ * Coordinates a single <sds-accordion>: holds the open value(s) (shared from the
1062
+ * host's two-way model), the multiple-open flag, and generates the ARIA ids that
1063
+ * link each header to its content region.
1064
+ *
1065
+ * Provided at the <sds-accordion> component level so every accordion is isolated.
1066
+ */
1067
+ declare class SdsAccordionStore {
1068
+ /** Unique base id used to link headers and content regions via ARIA. */
1069
+ readonly id: string;
1070
+ /** Whether more than one panel may be open at a time (mirrors [multiple]). */
1071
+ readonly multiple: WritableSignal<boolean>;
1072
+ private value;
1073
+ /** Called once by <sds-accordion> to share its two-way `value` signal. */
1074
+ connect(value: WritableSignal<SdsAccordionActive>): void;
1075
+ isOpen(value: SdsAccordionValue): boolean;
1076
+ toggle(value: SdsAccordionValue): void;
1077
+ headerId(value: SdsAccordionValue): string;
1078
+ contentId(value: SdsAccordionValue): string;
1079
+ private asArray;
1080
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsAccordionStore, never>;
1081
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdsAccordionStore>;
1082
+ }
1083
+
1084
+ /**
1085
+ * Root of an accordion. Compose with <sds-accordion-panel> children, each
1086
+ * holding an <sds-accordion-header> and an <sds-accordion-content>. The open
1087
+ * panel is the [value], matched against each panel's [value]; it is two-way
1088
+ * bindable via [(value)]. With [multiple], several panels may be open at once
1089
+ * and [value] is an array.
1090
+ *
1091
+ * @example
1092
+ * <sds-accordion [(value)]="open">
1093
+ * <sds-accordion-panel value="0">
1094
+ * <sds-accordion-header>Section 1</sds-accordion-header>
1095
+ * <sds-accordion-content>…</sds-accordion-content>
1096
+ * </sds-accordion-panel>
1097
+ * </sds-accordion>
1098
+ */
1099
+ declare class SdsAccordion {
1100
+ private readonly host;
1101
+ private readonly store;
1102
+ /** Open panel value, or array of values in multiple mode (two-way). */
1103
+ readonly value: _angular_core.ModelSignal<SdsAccordionActive>;
1104
+ /** Allow more than one panel open at a time. */
1105
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
1106
+ constructor();
1107
+ protected onKeydown(event: KeyboardEvent): void;
1108
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsAccordion, never>;
1109
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsAccordion, "sds-accordion", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, never>;
1110
+ }
1111
+
1112
+ /**
1113
+ * One accordion section. Holds the [value] and optional [disabled] state shared
1114
+ * with its projected <sds-accordion-header> and <sds-accordion-content>.
1115
+ */
1116
+ declare class SdsAccordionPanel {
1117
+ private readonly store;
1118
+ readonly value: _angular_core.InputSignal<SdsAccordionValue>;
1119
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1120
+ readonly open: _angular_core.Signal<boolean>;
1121
+ get headerId(): string;
1122
+ get contentId(): string;
1123
+ toggle(): void;
1124
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsAccordionPanel, never>;
1125
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsAccordionPanel, "sds-accordion-panel", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1126
+ }
1127
+
1128
+ /**
1129
+ * Clickable header of an accordion panel. Project the label text and,
1130
+ * optionally, an <sds-icon>. Renders a chevron that rotates when open.
1131
+ */
1132
+ declare class SdsAccordionHeader {
1133
+ protected readonly panel: SdsAccordionPanel;
1134
+ protected readonly headerClass: _angular_core.Signal<"flex w-full items-center gap-3 px-4 py-3.5 text-left text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-brand-500 text-ink-faint opacity-60 cursor-not-allowed" | "flex w-full items-center gap-3 px-4 py-3.5 text-left text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-brand-500 text-brand-700 hover:bg-muted cursor-pointer" | "flex w-full items-center gap-3 px-4 py-3.5 text-left text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-brand-500 text-ink hover:bg-muted cursor-pointer">;
1135
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsAccordionHeader, never>;
1136
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsAccordionHeader, "sds-accordion-header", never, {}, {}, never, ["*"], true, never>;
1137
+ }
1138
+
1139
+ /**
1140
+ * Collapsible content region of an accordion panel. Animates open/closed with a
1141
+ * CSS grid-rows transition; while closed it is `inert` (not focusable, hidden
1142
+ * from assistive tech) but kept in the DOM, so its state persists.
1143
+ */
1144
+ declare class SdsAccordionContent {
1145
+ protected readonly panel: SdsAccordionPanel;
1146
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsAccordionContent, never>;
1147
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsAccordionContent, "sds-accordion-content", never, {}, {}, never, ["*"], true, never>;
1148
+ }
1149
+
1150
+ /** Column configuration. `field` may be a dot-path (e.g. `service.name`). */
1151
+ interface SdsTableColumn {
1152
+ /** Row field rendered in this column. Supports dot-paths. */
1153
+ field: string;
1154
+ /** Header label. */
1155
+ header: string;
1156
+ /** Allow sorting on this column (also requires the table's `sortable`). */
1157
+ sortable?: boolean;
1158
+ /** Text alignment for header + body cells. */
1159
+ align?: 'left' | 'center' | 'right';
1160
+ /** Fixed column width, e.g. `'120px'` or `'20%'`. */
1161
+ width?: string;
1162
+ }
1163
+ type SdsTableSize = 'sm' | 'md' | 'lg';
1164
+ /** 1 = ascending, -1 = descending, 0 = unsorted. */
1165
+ type SdsSortOrder = 1 | -1 | 0;
1166
+ interface SdsTableSortEvent {
1167
+ field: string;
1168
+ order: SdsSortOrder;
1169
+ }
1170
+ /** Emitted when `lazy` is true so the host can fetch the matching slice. */
1171
+ interface SdsTableLazyEvent {
1172
+ first: number;
1173
+ rows: number;
1174
+ sortField: string | null;
1175
+ sortOrder: SdsSortOrder;
1176
+ globalFilter: string;
1177
+ }
1178
+ type SdsSelectionMode = 'single' | 'multiple' | null;
1179
+ /**
1180
+ * Client-side data table mirroring PrimeNG's table, scoped to a strong local
1181
+ * feature set: sorting, pagination (reuses {@link SdsPaginator}), global filter,
1182
+ * single/multiple selection, custom cell templates (via {@link SdsTableCell}),
1183
+ * loading/empty states and visual variants. Set `lazy` to delegate
1184
+ * sort/filter/paging to the host through `(lazyLoad)`.
1185
+ *
1186
+ * @remarks
1187
+ * - **`dataKey` is strongly recommended** for sortable and/or selectable
1188
+ * tables: it gives each row a stable identity so `trackRow` reuses the
1189
+ * correct DOM node when rows reorder (otherwise tracking falls back to the
1190
+ * page-relative `$index`, which defeats row-identity animations and can
1191
+ * momentarily mis-associate a focused custom-cell control after a re-sort).
1192
+ * - The header **"select all" checkbox operates over the entire filtered set
1193
+ * across all pages**, not just the current page. Toggling it selects/clears
1194
+ * every filtered row regardless of pagination (this is an intentional
1195
+ * deviation from PrimeNG's per-page select-all).
1196
+ *
1197
+ * @example
1198
+ * <sds-table [value]="staff" [columns]="cols" dataKey="id"
1199
+ * sortable paginator [rows]="10" globalFilter
1200
+ * selectionMode="multiple" [(selection)]="selected">
1201
+ * <ng-template sdsCell="statut" let-value let-row="row">
1202
+ * <sds-badge [variant]="row.actif ? 'success' : 'neutral'">{{ value }}</sds-badge>
1203
+ * </ng-template>
1204
+ * </sds-table>
1205
+ */
1206
+ declare class SdsTable implements OnDestroy {
1207
+ protected readonly tableId: string;
1208
+ readonly value: _angular_core.InputSignal<readonly any[]>;
1209
+ readonly columns: _angular_core.InputSignal<SdsTableColumn[]>;
1210
+ readonly dataKey: _angular_core.InputSignal<string>;
1211
+ readonly size: _angular_core.InputSignal<SdsTableSize>;
1212
+ readonly striped: _angular_core.InputSignalWithTransform<boolean, unknown>;
1213
+ readonly gridlines: _angular_core.InputSignalWithTransform<boolean, unknown>;
1214
+ readonly hoverable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1215
+ /** Master sort switch; per-column `sortable` is still required. */
1216
+ readonly sortable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1217
+ readonly paginator: _angular_core.InputSignalWithTransform<boolean, unknown>;
1218
+ readonly rows: _angular_core.InputSignalWithTransform<number, unknown>;
1219
+ readonly rowsPerPageOptions: _angular_core.InputSignal<number[]>;
1220
+ readonly showCurrentPageReport: _angular_core.InputSignalWithTransform<boolean, unknown>;
1221
+ readonly globalFilter: _angular_core.InputSignalWithTransform<boolean, unknown>;
1222
+ readonly globalFilterPlaceholder: _angular_core.InputSignal<string>;
1223
+ /** Accessible name for the global-filter input. */
1224
+ readonly globalFilterAriaLabel: _angular_core.InputSignal<string>;
1225
+ /** Fields searched by the global filter. Empty = every column field. */
1226
+ readonly globalFilterFields: _angular_core.InputSignal<string[]>;
1227
+ readonly selectionMode: _angular_core.InputSignal<SdsSelectionMode>;
1228
+ /** Two-way: a single row (single mode) or an array of rows (multiple). */
1229
+ readonly selection: _angular_core.ModelSignal<any>;
1230
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1231
+ readonly emptyMessage: _angular_core.InputSignal<string>;
1232
+ readonly caption: _angular_core.InputSignal<string>;
1233
+ /** Fallback accessible name for the `<table>` when no `caption` is set. */
1234
+ readonly ariaLabel: _angular_core.InputSignal<string>;
1235
+ /** When set, the body scrolls vertically with a sticky header, e.g. `'320px'`. */
1236
+ readonly scrollHeight: _angular_core.InputSignal<string>;
1237
+ /** When true: skip internal sort/filter/slice; emit (lazyLoad) instead. */
1238
+ readonly lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
1239
+ /** Total records for the paginator when `lazy`. */
1240
+ readonly totalRecords: _angular_core.InputSignalWithTransform<number, unknown>;
1241
+ /** Adds a leading expander column; details come from `<ng-template sdsRowExpansion>`. */
1242
+ readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1243
+ /** Drag the right edge of a column header to resize it. */
1244
+ readonly resizableColumns: _angular_core.InputSignalWithTransform<boolean, unknown>;
1245
+ /** Drag a column header to reorder columns. */
1246
+ readonly reorderableColumns: _angular_core.InputSignalWithTransform<boolean, unknown>;
1247
+ readonly sortChange: _angular_core.OutputEmitterRef<SdsTableSortEvent>;
1248
+ readonly pageChange: _angular_core.OutputEmitterRef<SdsPaginatorState>;
1249
+ readonly rowSelect: _angular_core.OutputEmitterRef<any>;
1250
+ readonly rowUnselect: _angular_core.OutputEmitterRef<any>;
1251
+ readonly lazyLoad: _angular_core.OutputEmitterRef<SdsTableLazyEvent>;
1252
+ readonly rowClick: _angular_core.OutputEmitterRef<any>;
1253
+ /** Emitted with the row when its expander is opened. */
1254
+ readonly rowExpand: _angular_core.OutputEmitterRef<any>;
1255
+ /** Emitted with the row when its expander is closed. */
1256
+ readonly rowCollapse: _angular_core.OutputEmitterRef<any>;
1257
+ /** Emitted after a drag-reorder with the moved field and its old/new index. */
1258
+ readonly colReorder: _angular_core.OutputEmitterRef<{
1259
+ field: string;
1260
+ fromIndex: number;
1261
+ toIndex: number;
1262
+ }>;
1263
+ private readonly cellTemplates;
1264
+ private readonly templateMap;
1265
+ protected templateFor(field: string): _angular_core.TemplateRef<SdsTableCellContext> | null;
1266
+ private readonly rowExpansion;
1267
+ protected expansionTemplate(): _angular_core.TemplateRef<_besaitech_ng_design_system.SdsTableRowExpansionContext> | null;
1268
+ protected readonly filterText: _angular_core.WritableSignal<string>;
1269
+ protected readonly sortField: _angular_core.WritableSignal<string | null>;
1270
+ protected readonly sortOrder: _angular_core.WritableSignal<SdsSortOrder>;
1271
+ protected readonly first: _angular_core.WritableSignal<number>;
1272
+ protected readonly pageRows: _angular_core.WritableSignal<number>;
1273
+ private readonly expandedKeys;
1274
+ private readonly columnWidths;
1275
+ private readonly columnOrder;
1276
+ private readonly dragColIndex;
1277
+ constructor();
1278
+ ngOnDestroy(): void;
1279
+ /** Resolve a (possibly dot-pathed) field on a row; null/undefined safe. */
1280
+ protected getValue(row: any, field: string): unknown;
1281
+ /** String rendering of a cell value (null/undefined => ''). */
1282
+ protected display(row: any, field: string): string;
1283
+ protected cellContext(row: any, column: SdsTableColumn, index: number): SdsTableCellContext;
1284
+ private readonly filtered;
1285
+ private readonly sorted;
1286
+ private compare;
1287
+ protected readonly displayRows: _angular_core.Signal<readonly any[]>;
1288
+ protected readonly totalForPaginator: _angular_core.Signal<number>;
1289
+ /** Columns in their current (possibly reordered) order. */
1290
+ protected readonly effectiveColumns: _angular_core.Signal<SdsTableColumn[]>;
1291
+ /** Leading non-data columns: the expander then the selection column. */
1292
+ protected readonly leadingColumnCount: _angular_core.Signal<number>;
1293
+ protected readonly totalColumnCount: _angular_core.Signal<number>;
1294
+ protected isColumnSortable(col: SdsTableColumn): boolean;
1295
+ protected sortIcon(col: SdsTableColumn): "arrow-up" | "arrow-down" | "chevrons-up-down";
1296
+ protected ariaSort(col: SdsTableColumn): 'ascending' | 'descending' | 'none' | null;
1297
+ protected onSort(col: SdsTableColumn): void;
1298
+ protected readonly showSelectionColumn: _angular_core.Signal<boolean>;
1299
+ private equals;
1300
+ /** Identity used for O(1) membership tests: dataKey value when set, else the row itself. */
1301
+ private keyOf;
1302
+ /**
1303
+ * Set of selected identities, recomputed only when selection()/dataKey()
1304
+ * change. Lets isRowSelected/headerChecked/headerIndeterminate do O(1)
1305
+ * lookups instead of an O(selection) scan per row.
1306
+ */
1307
+ private readonly selectedKeys;
1308
+ protected isRowSelected(row: any): boolean;
1309
+ protected readonly headerChecked: _angular_core.Signal<boolean>;
1310
+ protected readonly headerIndeterminate: _angular_core.Signal<boolean>;
1311
+ protected toggleAll(): void;
1312
+ protected onRowCheckboxClick(event: Event, row: any): void;
1313
+ /** Enter/Space on a (single-mode) focusable row toggles its selection. */
1314
+ protected onRowKeydown(event: Event, row: any): void;
1315
+ private toggleRowSelection;
1316
+ protected onRowClick(row: any): void;
1317
+ protected onPageChange(state: SdsPaginatorState): void;
1318
+ private emitLazy;
1319
+ protected onFilterInput(event: Event): void;
1320
+ protected isExpanded(row: any): boolean;
1321
+ protected toggleExpand(row: any): void;
1322
+ protected onExpanderClick(event: Event, row: any): void;
1323
+ /**
1324
+ * Stable per-row id for the expansion region, derived from the row identity
1325
+ * (dataKey value when set, else the row itself). Mirrors the accordion's
1326
+ * contentId pattern so the expander's aria-controls can point at the detail
1327
+ * region. Using keyOf (not $index) keeps the id stable across reorders.
1328
+ */
1329
+ protected rowDetailId(row: any): string;
1330
+ private activeResizeCleanup;
1331
+ /** px override from a resize drag, else the column's declared width, else null. */
1332
+ protected columnStyleWidth(col: SdsTableColumn): string | null;
1333
+ protected onResizeStart(event: PointerEvent, field: string): void;
1334
+ protected onColDragStart(i: number): void;
1335
+ protected onColDragEnd(): void;
1336
+ protected onColDragOver(e: DragEvent): void;
1337
+ protected onColDrop(e: DragEvent, toIndex: number): void;
1338
+ protected trackRow(index: number, row: any): unknown;
1339
+ protected headCellClass(col?: SdsTableColumn): string;
1340
+ protected cellClass(col?: SdsTableColumn): string;
1341
+ protected rowClass(row: any, index: number): string;
1342
+ protected checkboxClass(checked: boolean, indeterminate: boolean): string;
1343
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTable, never>;
1344
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTable, "sds-table", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "gridlines": { "alias": "gridlines"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "paginator": { "alias": "paginator"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; "isSignal": true; }; "showCurrentPageReport": { "alias": "showCurrentPageReport"; "required": false; "isSignal": true; }; "globalFilter": { "alias": "globalFilter"; "required": false; "isSignal": true; }; "globalFilterPlaceholder": { "alias": "globalFilterPlaceholder"; "required": false; "isSignal": true; }; "globalFilterAriaLabel": { "alias": "globalFilterAriaLabel"; "required": false; "isSignal": true; }; "globalFilterFields": { "alias": "globalFilterFields"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "resizableColumns": { "alias": "resizableColumns"; "required": false; "isSignal": true; }; "reorderableColumns": { "alias": "reorderableColumns"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "sortChange": "sortChange"; "pageChange": "pageChange"; "rowSelect": "rowSelect"; "rowUnselect": "rowUnselect"; "lazyLoad": "lazyLoad"; "rowClick": "rowClick"; "rowExpand": "rowExpand"; "rowCollapse": "rowCollapse"; "colReorder": "colReorder"; }, ["cellTemplates", "rowExpansion"], never, true, never>;
1345
+ }
1346
+
1347
+ /**
1348
+ * Typed context handed to a custom cell template. Pulled out so consumers can
1349
+ * destructure with `let-value`, `let-row`, `let-i="index"`, etc., with full
1350
+ * type inference (see {@link SdsTableCell.ngTemplateContextGuard}).
1351
+ */
1352
+ interface SdsTableCellContext {
1353
+ /** Same as {@link value} — enables the `let-value` (implicit) binding. */
1354
+ $implicit: unknown;
1355
+ /** Resolved cell value for this column (via the table's getValue). */
1356
+ value: unknown;
1357
+ /** The full row object. */
1358
+ row: any;
1359
+ /** The column definition the cell belongs to. */
1360
+ column: SdsTableColumn;
1361
+ /** Zero-based index of the row within the currently displayed page. */
1362
+ index: number;
1363
+ }
1364
+ /**
1365
+ * Supplies a custom cell template for a single table column, matched by its
1366
+ * field key. Use as a structural template inside `<sds-table>`:
1367
+ *
1368
+ * @example
1369
+ * <sds-table [value]="rows" [columns]="cols">
1370
+ * <ng-template sdsCell="statut" let-value let-row="row">
1371
+ * <sds-badge [variant]="row.actif ? 'success' : 'neutral'">{{ value }}</sds-badge>
1372
+ * </ng-template>
1373
+ * </sds-table>
1374
+ */
1375
+ declare class SdsTableCell {
1376
+ /** The column `field` this template renders. */
1377
+ readonly column: _angular_core.InputSignal<string>;
1378
+ /** The wrapped template, rendered by the host table via ngTemplateOutlet. */
1379
+ readonly template: TemplateRef<SdsTableCellContext>;
1380
+ /** Lets the compiler type-check `let-*` bindings against SdsTableCellContext. */
1381
+ static ngTemplateContextGuard(_dir: SdsTableCell, _ctx: unknown): _ctx is SdsTableCellContext;
1382
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTableCell, never>;
1383
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SdsTableCell, "ng-template[sdsCell]", never, { "column": { "alias": "sdsCell"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1384
+ }
1385
+
1386
+ /**
1387
+ * Typed context handed to a row-expansion template. Pulled out so consumers can
1388
+ * destructure with `let-row`, `let-i="index"`, etc., with full type inference
1389
+ * (see {@link SdsTableRowExpansion.ngTemplateContextGuard}).
1390
+ */
1391
+ interface SdsTableRowExpansionContext {
1392
+ /** Same as {@link row} — enables the `let-row` (implicit) binding. */
1393
+ $implicit: any;
1394
+ /** The full row object whose details are being shown. */
1395
+ row: any;
1396
+ /** Zero-based index of the row within the currently displayed page. */
1397
+ index: number;
1398
+ }
1399
+ /**
1400
+ * Supplies the detail template rendered beneath an expanded row when the host
1401
+ * `<sds-table>` has `expandable`. Use as a structural template inside the table:
1402
+ *
1403
+ * @example
1404
+ * <sds-table [value]="rows" [columns]="cols" expandable>
1405
+ * <ng-template sdsRowExpansion let-row>
1406
+ * <div>Détails de {{ row.nom }}</div>
1407
+ * </ng-template>
1408
+ * </sds-table>
1409
+ */
1410
+ declare class SdsTableRowExpansion {
1411
+ /** The wrapped template, rendered by the host table via ngTemplateOutlet. */
1412
+ readonly template: TemplateRef<SdsTableRowExpansionContext>;
1413
+ /** Lets the compiler type-check `let-*` bindings against SdsTableRowExpansionContext. */
1414
+ static ngTemplateContextGuard(_dir: SdsTableRowExpansion, _ctx: unknown): _ctx is SdsTableRowExpansionContext;
1415
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTableRowExpansion, never>;
1416
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SdsTableRowExpansion, "ng-template[sdsRowExpansion]", never, {}, {}, never, never, true, never>;
1417
+ }
1418
+
1419
+ /**
1420
+ * Shared collapse state for the sidebar and its nav items.
1421
+ *
1422
+ * Provided in root so the sidebar, projected nav groups/items and any layout
1423
+ * code observe a single source of truth without prop-drilling. For apps with
1424
+ * multiple independent sidebars, provide it at a component level instead.
1425
+ */
1426
+ declare class SidebarStore {
1427
+ /** Desktop rail state: collapsed to icon-only width (applies at ≥ lg). */
1428
+ readonly collapsed: _angular_core.WritableSignal<boolean>;
1429
+ /** Mobile drawer state: whether the off-canvas sidebar is slid in (< lg). */
1430
+ readonly mobileOpen: _angular_core.WritableSignal<boolean>;
1431
+ /** Toggle the desktop icon-rail. */
1432
+ toggle(): void;
1433
+ setCollapsed(value: boolean): void;
1434
+ /** Open the mobile drawer. */
1435
+ openMobile(): void;
1436
+ /** Close the mobile drawer. */
1437
+ closeMobile(): void;
1438
+ /** Toggle the mobile drawer. */
1439
+ toggleMobile(): void;
1440
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarStore, never>;
1441
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SidebarStore>;
1442
+ }
1443
+
1444
+ interface SdsTopbarUser {
1445
+ name: string;
1446
+ initials?: string;
1447
+ status?: SdsAvatarStatus;
1448
+ }
1449
+ /**
1450
+ * Application top bar: brand gradient with a decorative wave, a logo slot,
1451
+ * the app name, and the signed-in user with a logout action.
1452
+ *
1453
+ * @example
1454
+ * <sds-topbar appName="WebApp" [user]="user" (logout)="signOut()">
1455
+ * <img sdsLogo src="logo.svg" alt="" />
1456
+ * </sds-topbar>
1457
+ */
1458
+ declare class SdsTopbar {
1459
+ protected readonly store: SidebarStore;
1460
+ readonly appName: _angular_core.InputSignal<string>;
1461
+ readonly user: _angular_core.InputSignal<SdsTopbarUser | null>;
1462
+ readonly showLogout: _angular_core.InputSignalWithTransform<boolean, unknown>;
1463
+ /** Show the mobile hamburger that toggles the sidebar drawer (< lg). */
1464
+ readonly menuButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
1465
+ readonly logout: _angular_core.OutputEmitterRef<void>;
1466
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsTopbar, never>;
1467
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsTopbar, "sds-topbar", never, { "appName": { "alias": "appName"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "showLogout": { "alias": "showLogout"; "required": false; "isSignal": true; }; "menuButton": { "alias": "menuButton"; "required": false; "isSignal": true; }; }, { "logout": "logout"; }, never, ["[sdsLogo]", "[sdsActions]"], true, never>;
1468
+ }
1469
+
1470
+ /**
1471
+ * App layout shell: a full-height column with the top bar across the top and a
1472
+ * row below holding the sidebar and the scrollable main content.
1473
+ *
1474
+ * @example
1475
+ * <sds-shell>
1476
+ * <sds-topbar sdsTopbar … />
1477
+ * <sds-sidebar sdsSidebar> … </sds-sidebar>
1478
+ * <!-- routed page content -->
1479
+ * <router-outlet />
1480
+ * </sds-shell>
1481
+ */
1482
+ declare class SdsShell {
1483
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsShell, never>;
1484
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsShell, "sds-shell", never, {}, {}, never, ["[sdsTopbar]", "[sdsSidebar]", "*"], true, never>;
1485
+ }
1486
+
1487
+ /**
1488
+ * Collapsible navigation rail. Project <sds-nav-group>/<sds-nav-item> as the
1489
+ * default content, and pin a footer (e.g. search + version badge) via the
1490
+ * [sdsFooter] slot. Collapse state is shared through SidebarStore.
1491
+ *
1492
+ * @example
1493
+ * <sds-sidebar>
1494
+ * <sds-nav-group label="Membres">
1495
+ * <sds-nav-item icon="user-plus" label="Créer un membre" link="/membres/new" />
1496
+ * </sds-nav-group>
1497
+ * <div sdsFooter>…</div>
1498
+ * </sds-sidebar>
1499
+ */
1500
+ declare class SdsSidebar {
1501
+ protected readonly store: SidebarStore;
1502
+ protected readonly collapsed: _angular_core.WritableSignal<boolean>;
1503
+ protected readonly mobileOpen: _angular_core.WritableSignal<boolean>;
1504
+ /** Desktop rail width (full vs. collapsed); mobile always uses full width. */
1505
+ protected readonly railWidth: _angular_core.Signal<"var(--sds-sidebar-w-collapsed)" | "var(--sds-sidebar-w)">;
1506
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsSidebar, never>;
1507
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsSidebar, "sds-sidebar", never, {}, {}, never, ["*", "[sdsFooter]"], true, never>;
1508
+ }
1509
+
1510
+ /**
1511
+ * Groups nav items under an optional uppercase section label. The label is
1512
+ * hidden (replaced by a divider) when the sidebar is collapsed.
1513
+ */
1514
+ declare class SdsNavGroup {
1515
+ private readonly store;
1516
+ readonly label: _angular_core.InputSignal<string>;
1517
+ protected readonly collapsed: _angular_core.WritableSignal<boolean>;
1518
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsNavGroup, never>;
1519
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsNavGroup, "sds-nav-group", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1520
+ }
1521
+
1522
+ /**
1523
+ * A single sidebar navigation entry. Renders an anchor when [link] is set
1524
+ * (with automatic active state via routerLinkActive) or a button otherwise.
1525
+ *
1526
+ * Requires the host application to provide the Angular Router (`provideRouter`),
1527
+ * as it depends on RouterLink/RouterLinkActive even when used as a button.
1528
+ *
1529
+ * @example
1530
+ * <sds-nav-item icon="home" label="Accueil" link="/" [exact]="true" />
1531
+ */
1532
+ declare class SdsNavItem {
1533
+ protected readonly store: SidebarStore;
1534
+ readonly icon: _angular_core.InputSignal<"home" | "user-plus" | "hand" | "users" | "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" | "chevrons-left" | "chevrons-right" | "x" | "check" | "alert-circle" | "info" | "copy" | "type" | "tag" | "square" | "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" | "filter" | "table" | "eye" | "user" | "check-circle" | "arrows-clockwise" | "menu" | "file-text" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | null>;
1535
+ readonly label: _angular_core.InputSignal<string>;
1536
+ /** Router link target; when null, the item behaves as a button. */
1537
+ readonly link: _angular_core.InputSignal<string | unknown[] | null>;
1538
+ readonly exact: _angular_core.InputSignalWithTransform<boolean, unknown>;
1539
+ /** Manual active state (combined with routerLinkActive when a link is set). */
1540
+ readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
1541
+ readonly select: _angular_core.OutputEmitterRef<void>;
1542
+ protected readonly collapsed: _angular_core.WritableSignal<boolean>;
1543
+ protected itemClass(isActive: boolean): string;
1544
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsNavItem, never>;
1545
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsNavItem, "sds-nav-item", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; "exact": { "alias": "exact"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, never, true, never>;
1546
+ }
1547
+
1548
+ export { SDS_ICONS, SDS_PHONE_COUNTRIES, SdsAccordion, SdsAccordionContent, SdsAccordionHeader, SdsAccordionPanel, SdsAccordionStore, SdsAvatar, SdsBadge, SdsButton, SdsCalendar, SdsCard, SdsCheckbox, SdsDatePicker, SdsIcon, SdsInput, SdsMultiSelect, SdsNavGroup, SdsNavItem, SdsPaginator, SdsPhoneInput, SdsSelect, SdsShell, SdsSidebar, SdsTab, SdsTabList, SdsTabPanel, SdsTabPanels, SdsTable, SdsTableCell, SdsTableRowExpansion, SdsTabs, SdsTabsStore, SdsTextarea, SdsToggleSwitch, SdsTopbar, SidebarStore, addDays, addMonths, addMonthsKeepDay, formatDdMmYyyy, isOutOfRange, isSameDay, isoDay, sdsFormatNational, sdsMatchDialCode, sdsNormalizeSignificant, startOfDay, startOfMonth };
1549
+ export type { SdsAccordionActive, SdsAccordionValue, SdsAvatarStatus, SdsBadgeSize, SdsBadgeVariant, SdsButtonSize, SdsButtonVariant, SdsCardVariant, SdsCheckboxSize, SdsDatePickerSize, SdsIconName, SdsIconSize, SdsInputAppearance, SdsInputSize, SdsInputType, SdsMultiSelectDisplay, SdsMultiSelectSize, SdsPaginatorSize, SdsPaginatorState, SdsPhoneCountry, SdsPhoneInputSize, SdsPhoneValue, SdsSelectSize, SdsSortOrder, SdsTabValue, SdsTableCellContext, SdsTableColumn, SdsTableLazyEvent, SdsTableRowExpansionContext, SdsTableSize, SdsTableSortEvent, SdsTextareaResize, SdsTextareaSize, SdsToggleSwitchSize, SdsTopbarUser };