@kksdev/ds-angular 1.1.0

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,4559 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { AfterViewInit, OnDestroy, ElementRef, QueryList, AfterContentInit, EventEmitter, TemplateRef, ViewContainerRef, Injector, TrackByFunction, OnInit } from '@angular/core';
3
+ import { IconDefinition } from '@fortawesome/fontawesome-svg-core';
4
+ import { IconDefinition as IconDefinition$1 } from '@fortawesome/free-solid-svg-icons';
5
+ import { ControlValueAccessor } from '@angular/forms';
6
+ import * as _angular_cdk_overlay from '@angular/cdk/overlay';
7
+ import { Overlay, ConnectedPosition } from '@angular/cdk/overlay';
8
+ import { IconDefinition as IconDefinition$2, FaIconLibrary } from '@fortawesome/angular-fontawesome';
9
+ import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
10
+ import { ArgTypes, Args } from '@storybook/angular';
11
+
12
+ type BadgeType = 'status' | 'count' | 'label';
13
+ type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'neutral' | 'default' | 'accent';
14
+ type BadgeSize = 'sm' | 'md' | 'lg';
15
+ type BadgeShape = 'rounded' | 'pill';
16
+ type BadgeAppearance = 'solid' | 'outline';
17
+ /**
18
+ * Composant badge primitif sans logique métier.
19
+ *
20
+ * @description
21
+ * Badge atomique stylisé par CSS custom properties. Petit élément visuel utilisé pour
22
+ * afficher des statuts, des compteurs ou des labels. Supporte plusieurs variantes de
23
+ * couleur, tailles, formes (arrondi ou pill), apparences (solid ou outline) et peut
24
+ * afficher des icônes FontAwesome. Permet également des styles personnalisés.
25
+ *
26
+ * @example
27
+ * ```html
28
+ * <primitive-badge variant="success">
29
+ * Actif
30
+ * </primitive-badge>
31
+ * ```
32
+ *
33
+ * @example
34
+ * ```html
35
+ * <primitive-badge
36
+ * variant="error"
37
+ * shape="pill"
38
+ * appearance="outline"
39
+ * [iconStart]="faExclamation">
40
+ * Urgent
41
+ * </primitive-badge>
42
+ * ```
43
+ */
44
+ declare class PrimitiveBadge {
45
+ /**
46
+ * Type sémantique du badge.
47
+ *
48
+ * @description
49
+ * Définit l'intention d'usage du badge. Le type est exposé via l'attribut `data-type`
50
+ * pour permettre un ciblage CSS spécifique selon le contexte d'utilisation.
51
+ *
52
+ * Types disponibles :
53
+ * - `label` : badge de libellé générique (par défaut)
54
+ * - `status` : indicateur d'état (actif, inactif, etc.)
55
+ * - `count` : compteur numérique (notifications, messages, etc.)
56
+ *
57
+ * @default 'label'
58
+ *
59
+ * @example
60
+ * ```html
61
+ * <primitive-badge type="count">5</primitive-badge>
62
+ * <primitive-badge type="status">En ligne</primitive-badge>
63
+ * ```
64
+ */
65
+ type: _angular_core.InputSignal<BadgeType>;
66
+ /**
67
+ * Variante visuelle du badge.
68
+ *
69
+ * @description
70
+ * Définit la couleur et le style sémantique du badge. Chaque variante applique
71
+ * une classe CSS qui utilise les tokens de couleur correspondants.
72
+ *
73
+ * Variantes disponibles :
74
+ * - `primary` : couleur principale (par défaut)
75
+ * - `secondary` : couleur secondaire
76
+ * - `success` : succès, validation (vert)
77
+ * - `warning` : avertissement (orange)
78
+ * - `error` : erreur, danger (rouge)
79
+ * - `info` : information (bleu)
80
+ * - `neutral` : neutre (gris)
81
+ * - `default` : style par défaut
82
+ * - `accent` : couleur d'accent
83
+ *
84
+ * @default 'primary'
85
+ *
86
+ * @example
87
+ * ```html
88
+ * <primitive-badge variant="success">Validé</primitive-badge>
89
+ * ```
90
+ */
91
+ variant: _angular_core.InputSignal<BadgeVariant>;
92
+ /**
93
+ * Taille du badge.
94
+ *
95
+ * @description
96
+ * Contrôle la hauteur, le padding et la taille de police du badge via les tokens
97
+ * CSS custom properties.
98
+ *
99
+ * Tailles disponibles :
100
+ * - `sm` : petit
101
+ * - `md` : moyen (par défaut)
102
+ * - `lg` : grand
103
+ *
104
+ * @default 'md'
105
+ *
106
+ * @example
107
+ * ```html
108
+ * <primitive-badge size="sm">Petit</primitive-badge>
109
+ * ```
110
+ */
111
+ size: _angular_core.InputSignal<BadgeSize>;
112
+ /**
113
+ * Forme du badge.
114
+ *
115
+ * @description
116
+ * Définit le degré d'arrondi des coins du badge.
117
+ *
118
+ * Formes disponibles :
119
+ * - `rounded` : coins légèrement arrondis (par défaut)
120
+ * - `pill` : coins complètement arrondis (forme capsule)
121
+ *
122
+ * @default 'rounded'
123
+ *
124
+ * @example
125
+ * ```html
126
+ * <primitive-badge shape="pill">99+</primitive-badge>
127
+ * ```
128
+ */
129
+ shape: _angular_core.InputSignal<BadgeShape>;
130
+ /**
131
+ * Apparence visuelle du badge.
132
+ *
133
+ * @description
134
+ * Contrôle le style de remplissage du badge :
135
+ * - `solid` : fond plein avec couleur de variante (par défaut)
136
+ * - `outline` : fond transparent avec bordure colorée
137
+ *
138
+ * @default 'solid'
139
+ *
140
+ * @example
141
+ * ```html
142
+ * <primitive-badge appearance="outline">Outline</primitive-badge>
143
+ * ```
144
+ */
145
+ appearance: _angular_core.InputSignal<BadgeAppearance>;
146
+ /**
147
+ * Icône FontAwesome affichée avant le texte du badge.
148
+ *
149
+ * @description
150
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
151
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.
152
+ * Couramment utilisée pour les badges de statut ou d'alerte.
153
+ *
154
+ * @default null
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * import { faCheck } from '@fortawesome/free-solid-svg-icons';
159
+ * ```
160
+ * ```html
161
+ * <primitive-badge [iconStart]="faCheck">Validé</primitive-badge>
162
+ * ```
163
+ */
164
+ iconStart: _angular_core.InputSignal<IconDefinition | null>;
165
+ /**
166
+ * Icône FontAwesome affichée après le texte du badge.
167
+ *
168
+ * @description
169
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
170
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.
171
+ * Utile pour les badges avec action ou indication directionnelle.
172
+ *
173
+ * @default null
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * import { faTimes } from '@fortawesome/free-solid-svg-icons';
178
+ * ```
179
+ * ```html
180
+ * <primitive-badge [iconEnd]="faTimes">Fermer</primitive-badge>
181
+ * ```
182
+ */
183
+ iconEnd: _angular_core.InputSignal<IconDefinition | null>;
184
+ /**
185
+ * Styles CSS personnalisés appliqués au badge.
186
+ *
187
+ * @description
188
+ * Objet de paires clé-valeur de propriétés CSS permettant de surcharger les styles
189
+ * par défaut. Utile pour des couleurs de marque spécifiques ou des styles non couverts
190
+ * par les variantes standards. Appliqué via `[ngStyle]` sur le span interne.
191
+ *
192
+ * @default null
193
+ *
194
+ * @example
195
+ * ```html
196
+ * <primitive-badge [customStyles]="{
197
+ * backgroundColor: '#ff6b6b',
198
+ * borderColor: '#ff6b6b',
199
+ * color: '#fff'
200
+ * }">
201
+ * Custom
202
+ * </primitive-badge>
203
+ * ```
204
+ */
205
+ customStyles: _angular_core.InputSignal<Record<string, string> | null>;
206
+ /**
207
+ * Calcule dynamiquement les classes CSS du badge.
208
+ *
209
+ * @description
210
+ * Génère une chaîne de classes CSS combinant :
211
+ * - La variante (`primary`, `secondary`, `success`, etc.)
212
+ * - La taille (`sm`, `md`, `lg`)
213
+ * - La forme (`rounded`, `pill`)
214
+ * - `outline` si `appearance === 'outline'`
215
+ *
216
+ * @returns Une chaîne de classes CSS séparées par des espaces.
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * // variant='success', size='lg', shape='pill', appearance='outline'
221
+ * // → "success lg pill outline"
222
+ * ```
223
+ */
224
+ get badgeClasses(): string;
225
+ /**
226
+ * Retourne les styles personnalisés à appliquer.
227
+ *
228
+ * @description
229
+ * Getter simple qui retourne la valeur de `customStyles()` pour être utilisé
230
+ * avec la directive `[ngStyle]` dans le template.
231
+ *
232
+ * @returns Objet de styles CSS ou `null` si aucun style personnalisé.
233
+ *
234
+ * @example
235
+ * ```typescript
236
+ * const styles = component.styleOverrides;
237
+ * // → { backgroundColor: '#123456', color: '#fff' }
238
+ * ```
239
+ */
240
+ get styleOverrides(): Record<string, string> | null;
241
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PrimitiveBadge, never>;
242
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PrimitiveBadge, "primitive-badge", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "customStyles": { "alias": "customStyles"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
243
+ }
244
+
245
+ type ButtonType = 'button' | 'submit' | 'reset';
246
+ type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'success' | 'warning' | 'error' | 'info';
247
+ type ButtonSize = 'sm' | 'md' | 'lg';
248
+ type ButtonAppearance = 'solid' | 'outline';
249
+ /**
250
+ * Composant bouton primitif sans logique métier.
251
+ *
252
+ * @description
253
+ * Bouton atomique stylisé par CSS custom properties. Supporte plusieurs variantes,
254
+ * tailles, apparences et états. Peut afficher des icônes FontAwesome avant/après le texte.
255
+ *
256
+ * @example
257
+ * ```html
258
+ * <primitive-button variant="primary" size="md">
259
+ * Cliquez ici
260
+ * </primitive-button>
261
+ * ```
262
+ *
263
+ * @example
264
+ * ```html
265
+ * <primitive-button
266
+ * variant="success"
267
+ * appearance="outline"
268
+ * [iconStart]="faCheck"
269
+ * (clicked)="onSave()">
270
+ * Enregistrer
271
+ * </primitive-button>
272
+ * ```
273
+ */
274
+ declare class PrimitiveButton {
275
+ /**
276
+ * Type HTML du bouton.
277
+ *
278
+ * @description
279
+ * Détermine le comportement natif du bouton dans un formulaire :
280
+ * - `button` : bouton standard sans action de formulaire (par défaut)
281
+ * - `submit` : soumet le formulaire parent
282
+ * - `reset` : réinitialise le formulaire parent
283
+ *
284
+ * @default 'button'
285
+ *
286
+ * @example
287
+ * ```html
288
+ * <primitive-button type="submit">Valider</primitive-button>
289
+ * ```
290
+ */
291
+ type: _angular_core.InputSignal<ButtonType>;
292
+ /**
293
+ * Variante visuelle du bouton.
294
+ *
295
+ * @description
296
+ * Définit la couleur et le style sémantique du bouton. Chaque variante
297
+ * applique une classe CSS qui utilise les tokens de couleur correspondants.
298
+ *
299
+ * Variantes disponibles :
300
+ * - `primary` : action principale (par défaut)
301
+ * - `secondary` : action secondaire
302
+ * - `ghost` : action discrète, fond transparent
303
+ * - `success` : confirmation, succès
304
+ * - `warning` : avertissement, attention
305
+ * - `error` : action destructive, erreur
306
+ * - `info` : information neutre
307
+ *
308
+ * @default 'primary'
309
+ *
310
+ * @example
311
+ * ```html
312
+ * <primitive-button variant="error">Supprimer</primitive-button>
313
+ * ```
314
+ */
315
+ variant: _angular_core.InputSignal<ButtonVariant>;
316
+ /**
317
+ * Taille du bouton.
318
+ *
319
+ * @description
320
+ * Contrôle la hauteur, le padding et la taille de police du bouton via
321
+ * les tokens `--btn-height-*`, `--btn-padding-*` et `--btn-font-size-*`.
322
+ *
323
+ * Tailles disponibles :
324
+ * - `sm` : petit (32px de hauteur)
325
+ * - `md` : moyen (40px de hauteur, par défaut)
326
+ * - `lg` : grand (48px de hauteur)
327
+ *
328
+ * @default 'md'
329
+ *
330
+ * @example
331
+ * ```html
332
+ * <primitive-button size="lg">Bouton large</primitive-button>
333
+ * ```
334
+ */
335
+ size: _angular_core.InputSignal<ButtonSize>;
336
+ /**
337
+ * État désactivé du bouton.
338
+ *
339
+ * @description
340
+ * Lorsque `true`, le bouton devient non-cliquable, applique l'attribut HTML
341
+ * `disabled` et affiche les styles visuels d'état désactivé. L'événement
342
+ * `clicked` n'est pas émis en état désactivé.
343
+ *
344
+ * @default false
345
+ *
346
+ * @example
347
+ * ```html
348
+ * <primitive-button [disabled]="!isFormValid">Soumettre</primitive-button>
349
+ * ```
350
+ */
351
+ disabled: _angular_core.InputSignal<boolean>;
352
+ /**
353
+ * Icône FontAwesome affichée avant le texte du bouton.
354
+ *
355
+ * @description
356
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
357
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.
358
+ *
359
+ * @default null
360
+ *
361
+ * @example
362
+ * ```typescript
363
+ * import { faPlus } from '@fortawesome/free-solid-svg-icons';
364
+ * ```
365
+ * ```html
366
+ * <primitive-button [iconStart]="faPlus">Ajouter</primitive-button>
367
+ * ```
368
+ */
369
+ iconStart: _angular_core.InputSignal<IconDefinition | null>;
370
+ /**
371
+ * Icône FontAwesome affichée après le texte du bouton.
372
+ *
373
+ * @description
374
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
375
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.
376
+ *
377
+ * @default null
378
+ *
379
+ * @example
380
+ * ```typescript
381
+ * import { faArrowRight } from '@fortawesome/free-solid-svg-icons';
382
+ * ```
383
+ * ```html
384
+ * <primitive-button [iconEnd]="faArrowRight">Suivant</primitive-button>
385
+ * ```
386
+ */
387
+ iconEnd: _angular_core.InputSignal<IconDefinition | null>;
388
+ /**
389
+ * Apparence visuelle du bouton.
390
+ *
391
+ * @description
392
+ * Contrôle le style de remplissage du bouton :
393
+ * - `solid` : fond plein avec couleur de variante (par défaut)
394
+ * - `outline` : fond transparent avec bordure colorée
395
+ *
396
+ * @default 'solid'
397
+ *
398
+ * @example
399
+ * ```html
400
+ * <primitive-button variant="primary" appearance="outline">
401
+ * Action secondaire
402
+ * </primitive-button>
403
+ * ```
404
+ */
405
+ appearance: _angular_core.InputSignal<ButtonAppearance>;
406
+ /**
407
+ * Mode pleine largeur.
408
+ *
409
+ * @description
410
+ * Lorsque `true`, le bouton s'étend sur toute la largeur de son conteneur.
411
+ * Applique la classe CSS `.block` au bouton et au composant hôte via `@HostBinding`.
412
+ *
413
+ * @default false
414
+ *
415
+ * @example
416
+ * ```html
417
+ * <primitive-button [block]="true">
418
+ * Bouton pleine largeur
419
+ * </primitive-button>
420
+ * ```
421
+ */
422
+ block: _angular_core.InputSignal<boolean>;
423
+ /**
424
+ * Host binding pour la classe CSS `.block`.
425
+ *
426
+ * @description
427
+ * Lie la classe `.block` au composant hôte (`<primitive-button>`) lorsque
428
+ * la propriété `block()` est `true`. Permet de styliser le conteneur externe.
429
+ *
430
+ * @returns `true` si le mode block est activé, sinon `false`.
431
+ */
432
+ get hostBlock(): boolean;
433
+ /**
434
+ * Événement émis lors d'un clic sur le bouton actif.
435
+ *
436
+ * @description
437
+ * Émis uniquement si le bouton n'est pas désactivé (`disabled = false`).
438
+ * Ne transporte aucune donnée (`void`). Utilisé pour déclencher des actions
439
+ * métier dans le composant parent.
440
+ *
441
+ * @example
442
+ * ```html
443
+ * <primitive-button (clicked)="onButtonClick()">
444
+ * Cliquez-moi
445
+ * </primitive-button>
446
+ * ```
447
+ */
448
+ clicked: _angular_core.OutputEmitterRef<void>;
449
+ /**
450
+ * Calcule dynamiquement les classes CSS du bouton.
451
+ *
452
+ * @description
453
+ * Génère une chaîne de classes CSS combinant :
454
+ * - La variante (`primary`, `secondary`, etc.)
455
+ * - La taille (`sm`, `md`, `lg`)
456
+ * - `outline` si `appearance === 'outline'`
457
+ * - `block` si `block === true`
458
+ *
459
+ * @returns Une chaîne de classes CSS séparées par des espaces.
460
+ *
461
+ * @example
462
+ * ```typescript
463
+ * // variant='error', size='lg', appearance='outline', block=true
464
+ * // → "error lg outline block"
465
+ * ```
466
+ */
467
+ get buttonClasses(): string;
468
+ /**
469
+ * Gestionnaire de clic interne.
470
+ *
471
+ * @description
472
+ * Méthode appelée par le template lors d'un clic sur le bouton HTML.
473
+ * Vérifie l'état `disabled()` avant d'émettre l'événement `clicked`.
474
+ *
475
+ * @internal
476
+ */
477
+ handleClick(): void;
478
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PrimitiveButton, never>;
479
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PrimitiveButton, "primitive-button", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
480
+ }
481
+
482
+ type CheckboxSize = 'sm' | 'md' | 'lg';
483
+ type CheckboxState = 'unchecked' | 'checked' | 'indeterminate';
484
+ /**
485
+ * Composant checkbox primitif sans logique métier.
486
+ *
487
+ * @description
488
+ * Case à cocher atomique stylisée par CSS custom properties. Supporte trois états
489
+ * (non coché, coché, indéterminé), plusieurs tailles et un label optionnel.
490
+ * Utilise `model()` pour le binding bidirectionnel de l'état coché.
491
+ *
492
+ * @example
493
+ * ```html
494
+ * <primitive-checkbox
495
+ * [(checked)]="isAccepted"
496
+ * label="J'accepte les conditions">
497
+ * </primitive-checkbox>
498
+ * ```
499
+ *
500
+ * @example
501
+ * ```html
502
+ * <primitive-checkbox
503
+ * [checked]="selectAll"
504
+ * [indeterminate]="isPartialSelection"
505
+ * size="lg"
506
+ * (checkedChange)="onSelectionChange($event)">
507
+ * </primitive-checkbox>
508
+ * ```
509
+ */
510
+ declare class PrimitiveCheckbox {
511
+ /**
512
+ * État coché de la checkbox avec binding bidirectionnel.
513
+ *
514
+ * @description
515
+ * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.
516
+ * L'état est mis à jour automatiquement lors du clic utilisateur.
517
+ *
518
+ * @default false
519
+ *
520
+ * @example
521
+ * ```typescript
522
+ * isAccepted = signal(false);
523
+ * ```
524
+ * ```html
525
+ * <primitive-checkbox [(checked)]="isAccepted"></primitive-checkbox>
526
+ * <p>Accepté : {{ isAccepted() }}</p>
527
+ * ```
528
+ */
529
+ checked: _angular_core.ModelSignal<boolean>;
530
+ /**
531
+ * État indéterminé de la checkbox.
532
+ *
533
+ * @description
534
+ * Lorsque `true`, affiche l'icône d'état indéterminé (tiret horizontal).
535
+ * L'état indéterminé est prioritaire sur l'état `checked` et est couramment
536
+ * utilisé dans les sélections partielles (ex: sélection de sous-éléments).
537
+ * L'attribut ARIA `aria-checked` prend la valeur `"indeterminate"`.
538
+ *
539
+ * @default false
540
+ *
541
+ * @example
542
+ * ```html
543
+ * <primitive-checkbox
544
+ * [checked]="someItemsSelected"
545
+ * [indeterminate]="!allItemsSelected && someItemsSelected"
546
+ * label="Tout sélectionner">
547
+ * </primitive-checkbox>
548
+ * ```
549
+ */
550
+ indeterminate: _angular_core.InputSignal<boolean>;
551
+ /**
552
+ * État désactivé de la checkbox.
553
+ *
554
+ * @description
555
+ * Lorsque `true`, la checkbox devient non-cliquable, applique les styles visuels
556
+ * d'état désactivé et définit `tabindex="-1"` et `aria-disabled="true"`.
557
+ * Les événements ne sont pas émis en état désactivé.
558
+ *
559
+ * @default false
560
+ *
561
+ * @example
562
+ * ```html
563
+ * <primitive-checkbox [disabled]="!canEdit" label="Option verrouillée"></primitive-checkbox>
564
+ * ```
565
+ */
566
+ disabled: _angular_core.InputSignal<boolean>;
567
+ /**
568
+ * Taille de la checkbox.
569
+ *
570
+ * @description
571
+ * Contrôle la taille du carré de la checkbox et la taille de police du label via
572
+ * les tokens CSS custom properties.
573
+ *
574
+ * Tailles disponibles :
575
+ * - `sm` : petit (16px)
576
+ * - `md` : moyen (20px, par défaut)
577
+ * - `lg` : grand (24px)
578
+ *
579
+ * @default 'md'
580
+ *
581
+ * @example
582
+ * ```html
583
+ * <primitive-checkbox size="lg" label="Grande checkbox"></primitive-checkbox>
584
+ * ```
585
+ */
586
+ size: _angular_core.InputSignal<CheckboxSize>;
587
+ /**
588
+ * Texte du label affiché à côté de la checkbox.
589
+ *
590
+ * @description
591
+ * Si fourni, affiche un label cliquable associé à la checkbox.
592
+ * Le label est lié à la checkbox via `aria-labelledby` pour l'accessibilité.
593
+ * Le clic sur le label déclenche le toggle de la checkbox.
594
+ *
595
+ * @default ''
596
+ *
597
+ * @example
598
+ * ```html
599
+ * <primitive-checkbox label="J'accepte les conditions générales"></primitive-checkbox>
600
+ * ```
601
+ */
602
+ label: _angular_core.InputSignal<string>;
603
+ /**
604
+ * Identifiant unique de la checkbox pour l'accessibilité.
605
+ *
606
+ * @description
607
+ * Utilisé pour générer les IDs des éléments internes (label) et pour l'association
608
+ * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.
609
+ *
610
+ * @default `checkbox-${random}`
611
+ *
612
+ * @example
613
+ * ```html
614
+ * <primitive-checkbox checkboxId="accept-terms" label="Accepter"></primitive-checkbox>
615
+ * ```
616
+ */
617
+ checkboxId: _angular_core.InputSignal<string>;
618
+ /**
619
+ * Événement émis lors du changement d'état de la checkbox.
620
+ *
621
+ * @description
622
+ * Émis uniquement si la checkbox n'est pas désactivée (`disabled = false`).
623
+ * Transporte la nouvelle valeur booléenne de l'état coché.
624
+ * Ne s'active pas lorsque l'état change via le binding `[(checked)]` depuis le parent.
625
+ *
626
+ * @example
627
+ * ```html
628
+ * <primitive-checkbox
629
+ * [(checked)]="isAccepted"
630
+ * (checkedChange)="onAcceptChange($event)">
631
+ * </primitive-checkbox>
632
+ * ```
633
+ * ```typescript
634
+ * onAcceptChange(checked: boolean) {
635
+ * console.log('Nouvelle valeur :', checked);
636
+ * }
637
+ * ```
638
+ */
639
+ checkedChange: _angular_core.OutputEmitterRef<boolean>;
640
+ /**
641
+ * Signal interne de l'état focus de la checkbox.
642
+ *
643
+ * @description
644
+ * Signal utilisé en interne pour suivre l'état focus de la checkbox.
645
+ * Applique la classe CSS `primitive-checkbox--focused` lorsque `true`.
646
+ *
647
+ * @internal
648
+ */
649
+ protected focused: _angular_core.WritableSignal<boolean>;
650
+ /**
651
+ * Signal calculé de l'état de la checkbox.
652
+ *
653
+ * @description
654
+ * Calcule l'état actuel de la checkbox en fonction de `indeterminate()` et `checked()`.
655
+ * L'état `indeterminate` est prioritaire sur `checked`.
656
+ *
657
+ * @returns État de la checkbox : `'unchecked'`, `'checked'` ou `'indeterminate'`.
658
+ *
659
+ * @internal
660
+ */
661
+ protected checkboxState: _angular_core.Signal<CheckboxState>;
662
+ /**
663
+ * Signal calculé des classes CSS de la checkbox.
664
+ *
665
+ * @description
666
+ * Génère dynamiquement un objet de classes CSS en fonction des propriétés :
667
+ * - Classe de base : `primitive-checkbox`
668
+ * - Classe de taille : `primitive-checkbox--{size}`
669
+ * - Classe d'état coché : `primitive-checkbox--checked`
670
+ * - Classe d'état indéterminé : `primitive-checkbox--indeterminate`
671
+ * - Classe d'état désactivé : `primitive-checkbox--disabled`
672
+ * - Classe d'état focus : `primitive-checkbox--focused`
673
+ *
674
+ * @returns Objet de classes CSS avec valeurs booléennes.
675
+ *
676
+ * @internal
677
+ */
678
+ protected cssClasses: _angular_core.Signal<{
679
+ [x: string]: boolean;
680
+ 'primitive-checkbox': boolean;
681
+ 'primitive-checkbox--checked': boolean;
682
+ 'primitive-checkbox--indeterminate': boolean;
683
+ 'primitive-checkbox--disabled': boolean;
684
+ 'primitive-checkbox--focused': boolean;
685
+ }>;
686
+ /**
687
+ * Gestionnaire de toggle interne.
688
+ *
689
+ * @description
690
+ * Méthode appelée par le template lors du clic sur la checkbox ou son label.
691
+ * Inverse l'état `checked` et émet l'événement `checkedChange`.
692
+ * Ne fait rien si la checkbox est désactivée.
693
+ *
694
+ * @internal
695
+ */
696
+ protected onToggle(): void;
697
+ /**
698
+ * Gestionnaire de l'événement focus natif.
699
+ *
700
+ * @description
701
+ * Méthode appelée par le template lorsque la checkbox reçoit le focus.
702
+ * Met à jour le signal interne `focused` à `true`.
703
+ *
704
+ * @internal
705
+ */
706
+ protected onFocus(): void;
707
+ /**
708
+ * Gestionnaire de l'événement blur natif.
709
+ *
710
+ * @description
711
+ * Méthode appelée par le template lorsque la checkbox perd le focus.
712
+ * Met à jour le signal interne `focused` à `false`.
713
+ *
714
+ * @internal
715
+ */
716
+ protected onBlur(): void;
717
+ /**
718
+ * Gestionnaire de l'événement keydown natif.
719
+ *
720
+ * @description
721
+ * Méthode appelée par le template lors de la pression d'une touche clavier.
722
+ * Déclenche le toggle sur les touches `Space` ou `Enter` et empêche le comportement
723
+ * par défaut (scroll de la page sur Space).
724
+ *
725
+ * @param event - Événement clavier natif.
726
+ *
727
+ * @internal
728
+ */
729
+ protected onKeyDown(event: KeyboardEvent): void;
730
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PrimitiveCheckbox, never>;
731
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PrimitiveCheckbox, "primitive-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "checkboxId": { "alias": "checkboxId"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "checkedChange": "checkedChange"; }, never, never, true, never>;
732
+ }
733
+
734
+ type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url' | 'search' | 'date';
735
+ type InputState = 'default' | 'success' | 'warning' | 'error';
736
+ type InputSize = 'sm' | 'md' | 'lg';
737
+ type InputAppearance = 'default' | 'outline' | 'ghost';
738
+ /**
739
+ * Composant input primitif sans logique métier.
740
+ *
741
+ * @description
742
+ * Champ de saisie atomique stylisé par CSS custom properties. Supporte plusieurs types HTML5,
743
+ * états visuels, tailles et apparences. Peut afficher des icônes FontAwesome avant/après le champ.
744
+ * Utilise `model()` pour le binding bidirectionnel de la valeur.
745
+ *
746
+ * @example
747
+ * ```html
748
+ * <primitive-input
749
+ * type="text"
750
+ * placeholder="Entrez votre nom"
751
+ * [(value)]="username">
752
+ * </primitive-input>
753
+ * ```
754
+ *
755
+ * @example
756
+ * ```html
757
+ * <primitive-input
758
+ * type="email"
759
+ * state="error"
760
+ * [iconStart]="faEnvelope"
761
+ * placeholder="email@example.com"
762
+ * (inputChanged)="onEmailChange($event)">
763
+ * </primitive-input>
764
+ * ```
765
+ */
766
+ declare class PrimitiveInput {
767
+ /**
768
+ * Identifiant HTML unique du champ.
769
+ *
770
+ * @description
771
+ * Attribut `id` natif du champ `<input>`. Utile pour lier un `<label>` au champ.
772
+ *
773
+ * @default undefined
774
+ *
775
+ * @example
776
+ * ```html
777
+ * <label for="username-input">Nom d'utilisateur</label>
778
+ * <primitive-input id="username-input"></primitive-input>
779
+ * ```
780
+ */
781
+ id: _angular_core.InputSignal<string | undefined>;
782
+ /**
783
+ * Nom du champ pour les formulaires HTML.
784
+ *
785
+ * @description
786
+ * Attribut `name` natif utilisé lors de la soumission d'un formulaire.
787
+ *
788
+ * @default undefined
789
+ *
790
+ * @example
791
+ * ```html
792
+ * <primitive-input name="email"></primitive-input>
793
+ * ```
794
+ */
795
+ name: _angular_core.InputSignal<string | undefined>;
796
+ /**
797
+ * Valeur d'autocomplétion HTML5.
798
+ *
799
+ * @description
800
+ * Attribut `autocomplete` natif pour activer/désactiver l'autocomplétion du navigateur.
801
+ * Valeurs courantes : `email`, `username`, `current-password`, `new-password`, `tel`, etc.
802
+ *
803
+ * @default undefined
804
+ *
805
+ * @example
806
+ * ```html
807
+ * <primitive-input type="email" autocomplete="email"></primitive-input>
808
+ * ```
809
+ */
810
+ autocomplete: _angular_core.InputSignal<string | undefined>;
811
+ /**
812
+ * Texte d'indication affiché lorsque le champ est vide.
813
+ *
814
+ * @description
815
+ * Attribut `placeholder` natif. Disparaît dès que l'utilisateur commence à saisir.
816
+ *
817
+ * @default ''
818
+ *
819
+ * @example
820
+ * ```html
821
+ * <primitive-input placeholder="jean.dupont@example.com"></primitive-input>
822
+ * ```
823
+ */
824
+ placeholder: _angular_core.InputSignal<string>;
825
+ /**
826
+ * Type HTML5 du champ de saisie.
827
+ *
828
+ * @description
829
+ * Détermine le type de clavier affiché sur mobile et les validations natives du navigateur.
830
+ *
831
+ * Types disponibles :
832
+ * - `text` : texte libre (par défaut)
833
+ * - `password` : masque les caractères saisis
834
+ * - `email` : clavier avec @ et validation email
835
+ * - `number` : clavier numérique
836
+ * - `tel` : clavier téléphonique
837
+ * - `url` : clavier avec .com et validation URL
838
+ * - `search` : champ de recherche avec icône × de nettoyage
839
+ * - `date` : sélecteur de date natif
840
+ *
841
+ * @default 'text'
842
+ *
843
+ * @example
844
+ * ```html
845
+ * <primitive-input type="password"></primitive-input>
846
+ * ```
847
+ */
848
+ type: _angular_core.InputSignal<InputType>;
849
+ /**
850
+ * État désactivé du champ.
851
+ *
852
+ * @description
853
+ * Lorsque `true`, le champ devient non-éditable, applique l'attribut HTML `disabled`
854
+ * et affiche les styles visuels d'état désactivé. Les événements ne sont pas émis.
855
+ *
856
+ * @default false
857
+ *
858
+ * @example
859
+ * ```html
860
+ * <primitive-input [disabled]="!canEdit"></primitive-input>
861
+ * ```
862
+ */
863
+ disabled: _angular_core.InputSignal<boolean>;
864
+ /**
865
+ * État lecture seule du champ.
866
+ *
867
+ * @description
868
+ * Lorsque `true`, le champ est visible et sélectionnable mais non-éditable.
869
+ * Applique l'attribut HTML `readonly` et la classe CSS `.readonly`.
870
+ *
871
+ * @default false
872
+ *
873
+ * @example
874
+ * ```html
875
+ * <primitive-input [readonly]="true" value="Valeur fixe"></primitive-input>
876
+ * ```
877
+ */
878
+ readonly: _angular_core.InputSignal<boolean>;
879
+ /**
880
+ * Champ obligatoire pour la validation HTML5.
881
+ *
882
+ * @description
883
+ * Lorsque `true`, applique l'attribut HTML `required`. Le navigateur empêchera
884
+ * la soumission du formulaire parent si le champ est vide.
885
+ *
886
+ * @default false
887
+ *
888
+ * @example
889
+ * ```html
890
+ * <primitive-input [required]="true" placeholder="Email requis"></primitive-input>
891
+ * ```
892
+ */
893
+ required: _angular_core.InputSignal<boolean>;
894
+ /**
895
+ * Longueur maximale autorisée en nombre de caractères.
896
+ *
897
+ * @description
898
+ * Attribut `maxlength` natif. Le navigateur empêche la saisie au-delà de cette limite.
899
+ *
900
+ * @default undefined
901
+ *
902
+ * @example
903
+ * ```html
904
+ * <primitive-input [maxlength]="50" placeholder="Max 50 caractères"></primitive-input>
905
+ * ```
906
+ */
907
+ maxlength: _angular_core.InputSignal<number | undefined>;
908
+ /**
909
+ * État visuel du champ (feedback utilisateur).
910
+ *
911
+ * @description
912
+ * Applique une couleur de bordure et une classe CSS selon l'état de validation ou le contexte.
913
+ *
914
+ * États disponibles :
915
+ * - `default` : état neutre (par défaut)
916
+ * - `success` : validation réussie, bordure verte
917
+ * - `warning` : avertissement, bordure orange
918
+ * - `error` : erreur de validation, bordure rouge
919
+ *
920
+ * @default 'default'
921
+ *
922
+ * @example
923
+ * ```html
924
+ * <primitive-input [state]="isValid ? 'success' : 'error'"></primitive-input>
925
+ * ```
926
+ */
927
+ state: _angular_core.InputSignal<InputState>;
928
+ /**
929
+ * Taille du champ.
930
+ *
931
+ * @description
932
+ * Contrôle la hauteur, le padding et la taille de police du champ via
933
+ * les tokens `--input-height-*` et `--input-font-size-*`.
934
+ *
935
+ * Tailles disponibles :
936
+ * - `sm` : petit (32px de hauteur)
937
+ * - `md` : moyen (40px de hauteur, par défaut)
938
+ * - `lg` : grand (48px de hauteur)
939
+ *
940
+ * @default 'md'
941
+ *
942
+ * @example
943
+ * ```html
944
+ * <primitive-input size="lg"></primitive-input>
945
+ * ```
946
+ */
947
+ size: _angular_core.InputSignal<InputSize>;
948
+ /**
949
+ * Apparence visuelle du champ.
950
+ *
951
+ * @description
952
+ * Contrôle le style de bordure et de fond du champ.
953
+ *
954
+ * Apparences disponibles :
955
+ * - `default` : bordure standard, fond blanc (par défaut)
956
+ * - `outline` : bordure fine, fond transparent
957
+ * - `ghost` : bordure invisible au repos, visible au focus
958
+ *
959
+ * @default 'default'
960
+ *
961
+ * @example
962
+ * ```html
963
+ * <primitive-input appearance="ghost"></primitive-input>
964
+ * ```
965
+ */
966
+ appearance: _angular_core.InputSignal<InputAppearance>;
967
+ /**
968
+ * Icône FontAwesome affichée avant le champ.
969
+ *
970
+ * @description
971
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
972
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.
973
+ * Ajoute automatiquement du padding à gauche du champ.
974
+ *
975
+ * @default null
976
+ *
977
+ * @example
978
+ * ```typescript
979
+ * import { faUser } from '@fortawesome/free-solid-svg-icons';
980
+ * ```
981
+ * ```html
982
+ * <primitive-input [iconStart]="faUser" placeholder="Username"></primitive-input>
983
+ * ```
984
+ */
985
+ iconStart: _angular_core.InputSignal<IconDefinition | null>;
986
+ /**
987
+ * Icône FontAwesome affichée après le champ.
988
+ *
989
+ * @description
990
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
991
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.
992
+ * Ajoute automatiquement du padding à droite du champ.
993
+ *
994
+ * @default null
995
+ *
996
+ * @example
997
+ * ```typescript
998
+ * import { faSearch } from '@fortawesome/free-solid-svg-icons';
999
+ * ```
1000
+ * ```html
1001
+ * <primitive-input [iconEnd]="faSearch" placeholder="Rechercher"></primitive-input>
1002
+ * ```
1003
+ */
1004
+ iconEnd: _angular_core.InputSignal<IconDefinition | null>;
1005
+ /**
1006
+ * Label ARIA pour l'accessibilité.
1007
+ *
1008
+ * @description
1009
+ * Attribut `aria-label` natif utilisé par les lecteurs d'écran lorsqu'aucun
1010
+ * `<label>` visible n'est associé au champ.
1011
+ *
1012
+ * @default undefined
1013
+ *
1014
+ * @example
1015
+ * ```html
1016
+ * <primitive-input ariaLabel="Adresse email"></primitive-input>
1017
+ * ```
1018
+ */
1019
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
1020
+ /**
1021
+ * ID de l'élément décrivant le champ pour l'accessibilité.
1022
+ *
1023
+ * @description
1024
+ * Attribut `aria-describedby` natif. Référence l'ID d'un élément HTML contenant
1025
+ * une description complémentaire (message d'aide, erreur de validation, etc.).
1026
+ *
1027
+ * @default undefined
1028
+ *
1029
+ * @example
1030
+ * ```html
1031
+ * <primitive-input ariaDescribedBy="email-help"></primitive-input>
1032
+ * <small id="email-help">Utilisez votre email professionnel</small>
1033
+ * ```
1034
+ */
1035
+ ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1036
+ /**
1037
+ * Valeur du champ avec binding bidirectionnel.
1038
+ *
1039
+ * @description
1040
+ * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(value)]`.
1041
+ * La valeur est mise à jour automatiquement lors de la saisie utilisateur.
1042
+ *
1043
+ * @default ''
1044
+ *
1045
+ * @example
1046
+ * ```typescript
1047
+ * username = signal('');
1048
+ * ```
1049
+ * ```html
1050
+ * <primitive-input [(value)]="username"></primitive-input>
1051
+ * <p>Bonjour {{ username() }}</p>
1052
+ * ```
1053
+ */
1054
+ value: _angular_core.ModelSignal<string>;
1055
+ /**
1056
+ * Événement émis à chaque modification de la valeur du champ.
1057
+ *
1058
+ * @description
1059
+ * Déclenché lors de l'événement HTML `input` natif (à chaque frappe clavier).
1060
+ * Transporte la nouvelle valeur du champ sous forme de `string`.
1061
+ *
1062
+ * @example
1063
+ * ```html
1064
+ * <primitive-input (inputChanged)="onInputChange($event)"></primitive-input>
1065
+ * ```
1066
+ * ```typescript
1067
+ * onInputChange(value: string) {
1068
+ * console.log('Nouvelle valeur :', value);
1069
+ * }
1070
+ * ```
1071
+ */
1072
+ inputChanged: _angular_core.OutputEmitterRef<string>;
1073
+ /**
1074
+ * Événement émis lorsque le champ perd le focus.
1075
+ *
1076
+ * @description
1077
+ * Déclenché lors de l'événement HTML `blur` natif. Ne transporte aucune donnée (`void`).
1078
+ * Utile pour déclencher des validations ou sauvegarder les données.
1079
+ *
1080
+ * @example
1081
+ * ```html
1082
+ * <primitive-input (inputBlurred)="onBlur()"></primitive-input>
1083
+ * ```
1084
+ */
1085
+ inputBlurred: _angular_core.OutputEmitterRef<void>;
1086
+ /**
1087
+ * Événement émis lorsque le champ reçoit le focus.
1088
+ *
1089
+ * @description
1090
+ * Déclenché lors de l'événement HTML `focus` natif. Ne transporte aucune donnée (`void`).
1091
+ * Utile pour afficher des indices ou mettre en surbrillance la section.
1092
+ *
1093
+ * @example
1094
+ * ```html
1095
+ * <primitive-input (inputFocused)="onFocus()"></primitive-input>
1096
+ * ```
1097
+ */
1098
+ inputFocused: _angular_core.OutputEmitterRef<void>;
1099
+ /**
1100
+ * Calcule dynamiquement les classes CSS du wrapper.
1101
+ *
1102
+ * @description
1103
+ * Génère une chaîne de classes CSS combinant :
1104
+ * - L'état (`default`, `success`, `warning`, `error`)
1105
+ * - La taille (`sm`, `md`, `lg`)
1106
+ * - L'apparence (`outline`, `ghost` si non-default)
1107
+ * - `disabled` si le champ est désactivé
1108
+ * - `readonly` si le champ est en lecture seule
1109
+ * - `has-icon-start` si une icône de début est présente
1110
+ * - `has-icon-end` si une icône de fin est présente
1111
+ *
1112
+ * @returns Une chaîne de classes CSS séparées par des espaces.
1113
+ *
1114
+ * @example
1115
+ * ```typescript
1116
+ * // state='error', size='lg', appearance='outline', iconStart présent
1117
+ * // → "error lg outline has-icon-start"
1118
+ * ```
1119
+ */
1120
+ get wrapperClasses(): string;
1121
+ /**
1122
+ * Gestionnaire de l'événement input natif.
1123
+ *
1124
+ * @description
1125
+ * Méthode appelée par le template lors de la saisie utilisateur.
1126
+ * Met à jour le signal `value` et émet l'événement `inputChanged`.
1127
+ *
1128
+ * @param event - Événement HTML `input` natif.
1129
+ *
1130
+ * @internal
1131
+ */
1132
+ handleInput(event: Event): void;
1133
+ /**
1134
+ * Gestionnaire de l'événement blur natif.
1135
+ *
1136
+ * @description
1137
+ * Méthode appelée par le template lorsque le champ perd le focus.
1138
+ * Émet l'événement `inputBlurred`.
1139
+ *
1140
+ * @internal
1141
+ */
1142
+ handleBlur(): void;
1143
+ /**
1144
+ * Gestionnaire de l'événement focus natif.
1145
+ *
1146
+ * @description
1147
+ * Méthode appelée par le template lorsque le champ reçoit le focus.
1148
+ * Émet l'événement `inputFocused`.
1149
+ *
1150
+ * @internal
1151
+ */
1152
+ handleFocus(): void;
1153
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PrimitiveInput, never>;
1154
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PrimitiveInput, "primitive-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "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; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputChanged": "inputChanged"; "inputBlurred": "inputBlurred"; "inputFocused": "inputFocused"; }, never, never, true, never>;
1155
+ }
1156
+
1157
+ type RadioSize = 'sm' | 'md' | 'lg';
1158
+ /**
1159
+ * Composant radio primitif sans logique métier.
1160
+ *
1161
+ * @description
1162
+ * Bouton radio atomique stylisé par CSS custom properties. Respecte le comportement
1163
+ * natif des radios : une fois sélectionné, il ne peut pas être désélectionné par clic
1164
+ * (seul un autre radio du même groupe peut le désélectionner). Supporte plusieurs
1165
+ * tailles et un label optionnel. Utilise `model()` pour le binding bidirectionnel.
1166
+ *
1167
+ * @example
1168
+ * ```html
1169
+ * <primitive-radio
1170
+ * [(checked)]="selectedOption === 'option1'"
1171
+ * name="options"
1172
+ * value="option1"
1173
+ * label="Option 1"
1174
+ * (checkedChange)="onOptionSelect('option1')">
1175
+ * </primitive-radio>
1176
+ * ```
1177
+ *
1178
+ * @example
1179
+ * ```html
1180
+ * <primitive-radio
1181
+ * [checked]="true"
1182
+ * [disabled]="true"
1183
+ * size="lg"
1184
+ * label="Option désactivée">
1185
+ * </primitive-radio>
1186
+ * ```
1187
+ */
1188
+ declare class PrimitiveRadio {
1189
+ /**
1190
+ * État sélectionné du radio avec binding bidirectionnel.
1191
+ *
1192
+ * @description
1193
+ * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.
1194
+ * Contrairement à une checkbox, un radio sélectionné ne peut pas être désélectionné
1195
+ * en cliquant dessus à nouveau (comportement natif HTML).
1196
+ *
1197
+ * @default false
1198
+ *
1199
+ * @example
1200
+ * ```typescript
1201
+ * selectedValue = signal('option1');
1202
+ * ```
1203
+ * ```html
1204
+ * <primitive-radio
1205
+ * [(checked)]="selectedValue() === 'option1'"
1206
+ * value="option1">
1207
+ * </primitive-radio>
1208
+ * ```
1209
+ */
1210
+ checked: _angular_core.ModelSignal<boolean>;
1211
+ /**
1212
+ * État désactivé du radio.
1213
+ *
1214
+ * @description
1215
+ * Lorsque `true`, le radio devient non-cliquable, applique les styles visuels
1216
+ * d'état désactivé et définit `tabindex="-1"` et `aria-disabled="true"`.
1217
+ * Les événements ne sont pas émis en état désactivé.
1218
+ *
1219
+ * @default false
1220
+ *
1221
+ * @example
1222
+ * ```html
1223
+ * <primitive-radio [disabled]="!isAvailable" label="Option indisponible"></primitive-radio>
1224
+ * ```
1225
+ */
1226
+ disabled: _angular_core.InputSignal<boolean>;
1227
+ /**
1228
+ * Taille du radio.
1229
+ *
1230
+ * @description
1231
+ * Contrôle la taille du cercle du radio et la taille de police du label via
1232
+ * les tokens CSS custom properties.
1233
+ *
1234
+ * Tailles disponibles :
1235
+ * - `sm` : petit (16px)
1236
+ * - `md` : moyen (20px, par défaut)
1237
+ * - `lg` : grand (24px)
1238
+ *
1239
+ * @default 'md'
1240
+ *
1241
+ * @example
1242
+ * ```html
1243
+ * <primitive-radio size="lg" label="Grande option"></primitive-radio>
1244
+ * ```
1245
+ */
1246
+ size: _angular_core.InputSignal<RadioSize>;
1247
+ /**
1248
+ * Texte du label affiché à côté du radio.
1249
+ *
1250
+ * @description
1251
+ * Si fourni, affiche un label cliquable associé au radio.
1252
+ * Le label est lié au radio via `aria-labelledby` pour l'accessibilité.
1253
+ * Le clic sur le label sélectionne le radio.
1254
+ *
1255
+ * @default ''
1256
+ *
1257
+ * @example
1258
+ * ```html
1259
+ * <primitive-radio label="Option A"></primitive-radio>
1260
+ * ```
1261
+ */
1262
+ label: _angular_core.InputSignal<string>;
1263
+ /**
1264
+ * Nom du groupe de radios pour le comportement exclusif.
1265
+ *
1266
+ * @description
1267
+ * Tous les radios avec le même `name` appartiennent au même groupe.
1268
+ * Un seul radio par groupe peut être sélectionné à la fois.
1269
+ * Important pour la gestion de l'état exclusif dans les groupes de radios.
1270
+ *
1271
+ * @default ''
1272
+ *
1273
+ * @example
1274
+ * ```html
1275
+ * <primitive-radio name="size" value="small" label="Petit"></primitive-radio>
1276
+ * <primitive-radio name="size" value="medium" label="Moyen"></primitive-radio>
1277
+ * <primitive-radio name="size" value="large" label="Grand"></primitive-radio>
1278
+ * ```
1279
+ */
1280
+ name: _angular_core.InputSignal<string>;
1281
+ /**
1282
+ * Valeur du radio pour l'identification dans un groupe.
1283
+ *
1284
+ * @description
1285
+ * Valeur unique qui identifie ce radio dans son groupe.
1286
+ * Utilisée par le composant parent pour déterminer quelle option est sélectionnée.
1287
+ *
1288
+ * @default ''
1289
+ *
1290
+ * @example
1291
+ * ```html
1292
+ * <primitive-radio
1293
+ * name="payment"
1294
+ * value="card"
1295
+ * label="Carte bancaire"
1296
+ * [(checked)]="paymentMethod === 'card'">
1297
+ * </primitive-radio>
1298
+ * ```
1299
+ */
1300
+ value: _angular_core.InputSignal<string>;
1301
+ /**
1302
+ * Identifiant unique du radio pour l'accessibilité.
1303
+ *
1304
+ * @description
1305
+ * Utilisé pour générer les IDs des éléments internes (label) et pour l'association
1306
+ * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.
1307
+ *
1308
+ * @default `radio-${random}`
1309
+ *
1310
+ * @example
1311
+ * ```html
1312
+ * <primitive-radio radioId="payment-card" label="Carte"></primitive-radio>
1313
+ * ```
1314
+ */
1315
+ radioId: _angular_core.InputSignal<string>;
1316
+ /**
1317
+ * Événement émis lors de la sélection du radio.
1318
+ *
1319
+ * @description
1320
+ * Émis uniquement si le radio n'est pas désactivé et n'est pas déjà sélectionné.
1321
+ * Transporte toujours la valeur `true` car un radio ne peut que passer à l'état sélectionné.
1322
+ * Non émis lors d'un clic sur un radio déjà sélectionné (comportement natif).
1323
+ *
1324
+ * @example
1325
+ * ```html
1326
+ * <primitive-radio
1327
+ * name="options"
1328
+ * value="option1"
1329
+ * (checkedChange)="onOptionSelect('option1')">
1330
+ * </primitive-radio>
1331
+ * ```
1332
+ * ```typescript
1333
+ * onOptionSelect(value: string) {
1334
+ * console.log('Option sélectionnée :', value);
1335
+ * }
1336
+ * ```
1337
+ */
1338
+ checkedChange: _angular_core.OutputEmitterRef<boolean>;
1339
+ /**
1340
+ * Signal interne de l'état focus du radio.
1341
+ *
1342
+ * @description
1343
+ * Signal utilisé en interne pour suivre l'état focus du radio.
1344
+ * Applique la classe CSS `primitive-radio--focused` lorsque `true`.
1345
+ *
1346
+ * @internal
1347
+ */
1348
+ protected focused: _angular_core.WritableSignal<boolean>;
1349
+ /**
1350
+ * Signal calculé des classes CSS du radio.
1351
+ *
1352
+ * @description
1353
+ * Génère dynamiquement un objet de classes CSS en fonction des propriétés :
1354
+ * - Classe de base : `primitive-radio`
1355
+ * - Classe de taille : `primitive-radio--{size}`
1356
+ * - Classe d'état sélectionné : `primitive-radio--checked`
1357
+ * - Classe d'état désactivé : `primitive-radio--disabled`
1358
+ * - Classe d'état focus : `primitive-radio--focused`
1359
+ *
1360
+ * @returns Objet de classes CSS avec valeurs booléennes.
1361
+ *
1362
+ * @internal
1363
+ */
1364
+ protected cssClasses: _angular_core.Signal<{
1365
+ [x: string]: boolean;
1366
+ 'primitive-radio': boolean;
1367
+ 'primitive-radio--checked': boolean;
1368
+ 'primitive-radio--disabled': boolean;
1369
+ 'primitive-radio--focused': boolean;
1370
+ }>;
1371
+ /**
1372
+ * Gestionnaire de sélection interne.
1373
+ *
1374
+ * @description
1375
+ * Méthode appelée par le template lors du clic sur le radio ou son label.
1376
+ * Ne fait rien si le radio est désactivé ou déjà sélectionné (comportement natif).
1377
+ * Définit `checked` à `true` et émet l'événement `checkedChange`.
1378
+ *
1379
+ * @internal
1380
+ */
1381
+ protected onSelect(): void;
1382
+ /**
1383
+ * Gestionnaire de l'événement focus natif.
1384
+ *
1385
+ * @description
1386
+ * Méthode appelée par le template lorsque le radio reçoit le focus.
1387
+ * Met à jour le signal interne `focused` à `true`.
1388
+ *
1389
+ * @internal
1390
+ */
1391
+ protected onFocus(): void;
1392
+ /**
1393
+ * Gestionnaire de l'événement blur natif.
1394
+ *
1395
+ * @description
1396
+ * Méthode appelée par le template lorsque le radio perd le focus.
1397
+ * Met à jour le signal interne `focused` à `false`.
1398
+ *
1399
+ * @internal
1400
+ */
1401
+ protected onBlur(): void;
1402
+ /**
1403
+ * Gestionnaire de l'événement keydown natif.
1404
+ *
1405
+ * @description
1406
+ * Méthode appelée par le template lors de la pression d'une touche clavier.
1407
+ * Déclenche la sélection sur les touches `Space` ou `Enter` et empêche le
1408
+ * comportement par défaut (scroll de la page sur Space).
1409
+ *
1410
+ * @param event - Événement clavier natif.
1411
+ *
1412
+ * @internal
1413
+ */
1414
+ protected onKeyDown(event: KeyboardEvent): void;
1415
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PrimitiveRadio, never>;
1416
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PrimitiveRadio, "primitive-radio", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "radioId": { "alias": "radioId"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "checkedChange": "checkedChange"; }, never, never, true, never>;
1417
+ }
1418
+
1419
+ type TextareaState = 'default' | 'success' | 'warning' | 'error';
1420
+ type TextareaSize = 'sm' | 'md' | 'lg';
1421
+ type TextareaAppearance = 'default' | 'outline' | 'ghost';
1422
+ type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
1423
+ /**
1424
+ * Composant textarea primitif sans logique métier.
1425
+ *
1426
+ * @description
1427
+ * Zone de saisie multiligne atomique stylisée par CSS custom properties. Supporte plusieurs
1428
+ * états visuels, tailles, apparences et modes de redimensionnement. Peut afficher des icônes
1429
+ * FontAwesome avant/après le champ. Utilise `model()` pour le binding bidirectionnel de la valeur.
1430
+ *
1431
+ * @example
1432
+ * ```html
1433
+ * <primitive-textarea
1434
+ * placeholder="Saisissez votre commentaire"
1435
+ * [(value)]="comment"
1436
+ * [rows]="5">
1437
+ * </primitive-textarea>
1438
+ * ```
1439
+ *
1440
+ * @example
1441
+ * ```html
1442
+ * <primitive-textarea
1443
+ * state="error"
1444
+ * [maxlength]="500"
1445
+ * resize="none"
1446
+ * appearance="outline"
1447
+ * (inputChanged)="onCommentChange($event)">
1448
+ * </primitive-textarea>
1449
+ * ```
1450
+ */
1451
+ declare class PrimitiveTextarea {
1452
+ /**
1453
+ * Identifiant HTML unique du champ.
1454
+ *
1455
+ * @description
1456
+ * Attribut `id` natif du champ `<textarea>`. Utile pour lier un `<label>` au champ.
1457
+ *
1458
+ * @default undefined
1459
+ *
1460
+ * @example
1461
+ * ```html
1462
+ * <label for="comment-textarea">Commentaire</label>
1463
+ * <primitive-textarea id="comment-textarea"></primitive-textarea>
1464
+ * ```
1465
+ */
1466
+ id: _angular_core.InputSignal<string | undefined>;
1467
+ /**
1468
+ * Nom du champ pour les formulaires HTML.
1469
+ *
1470
+ * @description
1471
+ * Attribut `name` natif utilisé lors de la soumission d'un formulaire.
1472
+ *
1473
+ * @default undefined
1474
+ *
1475
+ * @example
1476
+ * ```html
1477
+ * <primitive-textarea name="description"></primitive-textarea>
1478
+ * ```
1479
+ */
1480
+ name: _angular_core.InputSignal<string | undefined>;
1481
+ /**
1482
+ * Texte d'indication affiché lorsque le champ est vide.
1483
+ *
1484
+ * @description
1485
+ * Attribut `placeholder` natif. Disparaît dès que l'utilisateur commence à saisir.
1486
+ *
1487
+ * @default ''
1488
+ *
1489
+ * @example
1490
+ * ```html
1491
+ * <primitive-textarea placeholder="Décrivez votre problème..."></primitive-textarea>
1492
+ * ```
1493
+ */
1494
+ placeholder: _angular_core.InputSignal<string>;
1495
+ /**
1496
+ * État désactivé du champ.
1497
+ *
1498
+ * @description
1499
+ * Lorsque `true`, le champ devient non-éditable, applique l'attribut HTML `disabled`
1500
+ * et affiche les styles visuels d'état désactivé. Les événements ne sont pas émis.
1501
+ *
1502
+ * @default false
1503
+ *
1504
+ * @example
1505
+ * ```html
1506
+ * <primitive-textarea [disabled]="!canEdit"></primitive-textarea>
1507
+ * ```
1508
+ */
1509
+ disabled: _angular_core.InputSignal<boolean>;
1510
+ /**
1511
+ * État lecture seule du champ.
1512
+ *
1513
+ * @description
1514
+ * Lorsque `true`, le champ est visible et sélectionnable mais non-éditable.
1515
+ * Applique l'attribut HTML `readonly` et la classe CSS `.readonly`.
1516
+ *
1517
+ * @default false
1518
+ *
1519
+ * @example
1520
+ * ```html
1521
+ * <primitive-textarea [readonly]="true" value="Texte fixe"></primitive-textarea>
1522
+ * ```
1523
+ */
1524
+ readonly: _angular_core.InputSignal<boolean>;
1525
+ /**
1526
+ * Champ obligatoire pour la validation HTML5.
1527
+ *
1528
+ * @description
1529
+ * Lorsque `true`, applique l'attribut HTML `required`. Le navigateur empêchera
1530
+ * la soumission du formulaire parent si le champ est vide.
1531
+ *
1532
+ * @default false
1533
+ *
1534
+ * @example
1535
+ * ```html
1536
+ * <primitive-textarea [required]="true"></primitive-textarea>
1537
+ * ```
1538
+ */
1539
+ required: _angular_core.InputSignal<boolean>;
1540
+ /**
1541
+ * État visuel du champ (feedback utilisateur).
1542
+ *
1543
+ * @description
1544
+ * Applique une couleur de bordure et une classe CSS selon l'état de validation ou le contexte.
1545
+ *
1546
+ * États disponibles :
1547
+ * - `default` : état neutre (par défaut)
1548
+ * - `success` : validation réussie, bordure verte
1549
+ * - `warning` : avertissement, bordure orange
1550
+ * - `error` : erreur de validation, bordure rouge
1551
+ *
1552
+ * @default 'default'
1553
+ *
1554
+ * @example
1555
+ * ```html
1556
+ * <primitive-textarea [state]="isValid ? 'success' : 'error'"></primitive-textarea>
1557
+ * ```
1558
+ */
1559
+ state: _angular_core.InputSignal<TextareaState>;
1560
+ /**
1561
+ * Taille du champ.
1562
+ *
1563
+ * @description
1564
+ * Contrôle le padding et la taille de police du champ via les tokens CSS custom properties.
1565
+ *
1566
+ * Tailles disponibles :
1567
+ * - `sm` : petit
1568
+ * - `md` : moyen (par défaut)
1569
+ * - `lg` : grand
1570
+ *
1571
+ * @default 'md'
1572
+ *
1573
+ * @example
1574
+ * ```html
1575
+ * <primitive-textarea size="lg"></primitive-textarea>
1576
+ * ```
1577
+ */
1578
+ size: _angular_core.InputSignal<TextareaSize>;
1579
+ /**
1580
+ * Apparence visuelle du champ.
1581
+ *
1582
+ * @description
1583
+ * Contrôle le style de bordure et de fond du champ.
1584
+ *
1585
+ * Apparences disponibles :
1586
+ * - `default` : bordure standard, fond blanc (par défaut)
1587
+ * - `outline` : bordure fine, fond transparent
1588
+ * - `ghost` : bordure invisible au repos, visible au focus
1589
+ *
1590
+ * @default 'default'
1591
+ *
1592
+ * @example
1593
+ * ```html
1594
+ * <primitive-textarea appearance="outline"></primitive-textarea>
1595
+ * ```
1596
+ */
1597
+ appearance: _angular_core.InputSignal<TextareaAppearance>;
1598
+ /**
1599
+ * Mode de redimensionnement du champ.
1600
+ *
1601
+ * @description
1602
+ * Contrôle la possibilité pour l'utilisateur de redimensionner le champ manuellement.
1603
+ * Applique la propriété CSS `resize` au textarea.
1604
+ *
1605
+ * Modes disponibles :
1606
+ * - `none` : pas de redimensionnement
1607
+ * - `vertical` : redimensionnement vertical uniquement (par défaut)
1608
+ * - `horizontal` : redimensionnement horizontal uniquement
1609
+ * - `both` : redimensionnement dans les deux directions
1610
+ *
1611
+ * @default 'vertical'
1612
+ *
1613
+ * @example
1614
+ * ```html
1615
+ * <primitive-textarea resize="none"></primitive-textarea>
1616
+ * ```
1617
+ */
1618
+ resize: _angular_core.InputSignal<TextareaResize>;
1619
+ /**
1620
+ * Nombre de lignes visibles du textarea.
1621
+ *
1622
+ * @description
1623
+ * Attribut `rows` natif. Définit la hauteur initiale du champ en nombre de lignes de texte.
1624
+ *
1625
+ * @default undefined
1626
+ *
1627
+ * @example
1628
+ * ```html
1629
+ * <primitive-textarea [rows]="5"></primitive-textarea>
1630
+ * ```
1631
+ */
1632
+ rows: _angular_core.InputSignal<number | undefined>;
1633
+ /**
1634
+ * Nombre de colonnes (largeur en caractères) du textarea.
1635
+ *
1636
+ * @description
1637
+ * Attribut `cols` natif. Définit la largeur du champ en nombre de caractères.
1638
+ * Rarement utilisé car la largeur est souvent contrôlée par CSS.
1639
+ *
1640
+ * @default undefined
1641
+ *
1642
+ * @example
1643
+ * ```html
1644
+ * <primitive-textarea [cols]="80"></primitive-textarea>
1645
+ * ```
1646
+ */
1647
+ cols: _angular_core.InputSignal<number | undefined>;
1648
+ /**
1649
+ * Longueur maximale autorisée en nombre de caractères.
1650
+ *
1651
+ * @description
1652
+ * Attribut `maxlength` natif. Le navigateur empêche la saisie au-delà de cette limite.
1653
+ *
1654
+ * @default undefined
1655
+ *
1656
+ * @example
1657
+ * ```html
1658
+ * <primitive-textarea [maxlength]="500"></primitive-textarea>
1659
+ * ```
1660
+ */
1661
+ maxlength: _angular_core.InputSignal<number | undefined>;
1662
+ /**
1663
+ * Icône FontAwesome affichée avant le champ.
1664
+ *
1665
+ * @description
1666
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
1667
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.
1668
+ * Ajoute automatiquement du padding en haut à gauche du champ.
1669
+ *
1670
+ * @default null
1671
+ *
1672
+ * @example
1673
+ * ```typescript
1674
+ * import { faCommentDots } from '@fortawesome/free-solid-svg-icons';
1675
+ * ```
1676
+ * ```html
1677
+ * <primitive-textarea [iconStart]="faCommentDots"></primitive-textarea>
1678
+ * ```
1679
+ */
1680
+ iconStart: _angular_core.InputSignal<IconDefinition | null>;
1681
+ /**
1682
+ * Icône FontAwesome affichée après le champ.
1683
+ *
1684
+ * @description
1685
+ * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.
1686
+ * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.
1687
+ * Ajoute automatiquement du padding en haut à droite du champ.
1688
+ *
1689
+ * @default null
1690
+ *
1691
+ * @example
1692
+ * ```typescript
1693
+ * import { faPen } from '@fortawesome/free-solid-svg-icons';
1694
+ * ```
1695
+ * ```html
1696
+ * <primitive-textarea [iconEnd]="faPen"></primitive-textarea>
1697
+ * ```
1698
+ */
1699
+ iconEnd: _angular_core.InputSignal<IconDefinition | null>;
1700
+ /**
1701
+ * Label ARIA pour l'accessibilité.
1702
+ *
1703
+ * @description
1704
+ * Attribut `aria-label` natif utilisé par les lecteurs d'écran lorsqu'aucun
1705
+ * `<label>` visible n'est associé au champ.
1706
+ *
1707
+ * @default undefined
1708
+ *
1709
+ * @example
1710
+ * ```html
1711
+ * <primitive-textarea ariaLabel="Commentaire détaillé"></primitive-textarea>
1712
+ * ```
1713
+ */
1714
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
1715
+ /**
1716
+ * ID de l'élément décrivant le champ pour l'accessibilité.
1717
+ *
1718
+ * @description
1719
+ * Attribut `aria-describedby` natif. Référence l'ID d'un élément HTML contenant
1720
+ * une description complémentaire (message d'aide, erreur de validation, etc.).
1721
+ *
1722
+ * @default undefined
1723
+ *
1724
+ * @example
1725
+ * ```html
1726
+ * <primitive-textarea ariaDescribedBy="comment-help"></primitive-textarea>
1727
+ * <small id="comment-help">Maximum 500 caractères</small>
1728
+ * ```
1729
+ */
1730
+ ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1731
+ /**
1732
+ * Valeur du champ avec binding bidirectionnel.
1733
+ *
1734
+ * @description
1735
+ * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(value)]`.
1736
+ * La valeur est mise à jour automatiquement lors de la saisie utilisateur.
1737
+ *
1738
+ * @default ''
1739
+ *
1740
+ * @example
1741
+ * ```typescript
1742
+ * comment = signal('');
1743
+ * ```
1744
+ * ```html
1745
+ * <primitive-textarea [(value)]="comment"></primitive-textarea>
1746
+ * <p>Longueur : {{ comment().length }} caractères</p>
1747
+ * ```
1748
+ */
1749
+ value: _angular_core.ModelSignal<string>;
1750
+ /**
1751
+ * Événement émis à chaque modification de la valeur du champ.
1752
+ *
1753
+ * @description
1754
+ * Déclenché lors de l'événement HTML `input` natif (à chaque frappe clavier).
1755
+ * Transporte la nouvelle valeur du champ sous forme de `string`.
1756
+ *
1757
+ * @example
1758
+ * ```html
1759
+ * <primitive-textarea (inputChanged)="onInputChange($event)"></primitive-textarea>
1760
+ * ```
1761
+ * ```typescript
1762
+ * onInputChange(value: string) {
1763
+ * console.log('Nouvelle valeur :', value);
1764
+ * }
1765
+ * ```
1766
+ */
1767
+ inputChanged: _angular_core.OutputEmitterRef<string>;
1768
+ /**
1769
+ * Événement émis lorsque le champ perd le focus.
1770
+ *
1771
+ * @description
1772
+ * Déclenché lors de l'événement HTML `blur` natif. Ne transporte aucune donnée (`void`).
1773
+ * Utile pour déclencher des validations ou sauvegarder les données.
1774
+ *
1775
+ * @example
1776
+ * ```html
1777
+ * <primitive-textarea (inputBlurred)="onBlur()"></primitive-textarea>
1778
+ * ```
1779
+ */
1780
+ inputBlurred: _angular_core.OutputEmitterRef<void>;
1781
+ /**
1782
+ * Événement émis lorsque le champ reçoit le focus.
1783
+ *
1784
+ * @description
1785
+ * Déclenché lors de l'événement HTML `focus` natif. Ne transporte aucune donnée (`void`).
1786
+ * Utile pour afficher des indices ou mettre en surbrillance la section.
1787
+ *
1788
+ * @example
1789
+ * ```html
1790
+ * <primitive-textarea (inputFocused)="onFocus()"></primitive-textarea>
1791
+ * ```
1792
+ */
1793
+ inputFocused: _angular_core.OutputEmitterRef<void>;
1794
+ /**
1795
+ * Calcule dynamiquement les classes CSS du wrapper.
1796
+ *
1797
+ * @description
1798
+ * Génère une chaîne de classes CSS combinant :
1799
+ * - L'état (`default`, `success`, `warning`, `error`)
1800
+ * - La taille (`sm`, `md`, `lg`)
1801
+ * - L'apparence (`outline`, `ghost` si non-default)
1802
+ * - `disabled` si le champ est désactivé
1803
+ * - `readonly` si le champ est en lecture seule
1804
+ * - `has-icon-start` si une icône de début est présente
1805
+ * - `has-icon-end` si une icône de fin est présente
1806
+ *
1807
+ * @returns Une chaîne de classes CSS séparées par des espaces.
1808
+ *
1809
+ * @example
1810
+ * ```typescript
1811
+ * // state='error', size='lg', appearance='outline', iconStart présent
1812
+ * // → "error lg outline has-icon-start"
1813
+ * ```
1814
+ */
1815
+ get wrapperClasses(): string;
1816
+ /**
1817
+ * Gestionnaire de l'événement input natif.
1818
+ *
1819
+ * @description
1820
+ * Méthode appelée par le template lors de la saisie utilisateur.
1821
+ * Met à jour le signal `value` et émet l'événement `inputChanged`.
1822
+ *
1823
+ * @param event - Événement HTML `input` natif.
1824
+ *
1825
+ * @internal
1826
+ */
1827
+ handleInput(event: Event): void;
1828
+ /**
1829
+ * Gestionnaire de l'événement blur natif.
1830
+ *
1831
+ * @description
1832
+ * Méthode appelée par le template lorsque le champ perd le focus.
1833
+ * Émet l'événement `inputBlurred`.
1834
+ *
1835
+ * @internal
1836
+ */
1837
+ handleBlur(): void;
1838
+ /**
1839
+ * Gestionnaire de l'événement focus natif.
1840
+ *
1841
+ * @description
1842
+ * Méthode appelée par le template lorsque le champ reçoit le focus.
1843
+ * Émet l'événement `inputFocused`.
1844
+ *
1845
+ * @internal
1846
+ */
1847
+ handleFocus(): void;
1848
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PrimitiveTextarea, never>;
1849
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PrimitiveTextarea, "primitive-textarea", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "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; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputChanged": "inputChanged"; "inputBlurred": "inputBlurred"; "inputFocused": "inputFocused"; }, never, never, true, never>;
1850
+ }
1851
+
1852
+ type ToggleSize = 'sm' | 'md' | 'lg';
1853
+ /**
1854
+ * Composant toggle (switch) primitif sans logique métier.
1855
+ *
1856
+ * @description
1857
+ * Interrupteur atomique stylisé par CSS custom properties. Représente un état binaire
1858
+ * activé/désactivé avec une animation de transition fluide. Supporte plusieurs tailles,
1859
+ * un label optionnel positionnable à gauche ou à droite, et utilise `model()` pour
1860
+ * le binding bidirectionnel.
1861
+ *
1862
+ * @example
1863
+ * ```html
1864
+ * <primitive-toggle
1865
+ * [(checked)]="notificationsEnabled"
1866
+ * label="Activer les notifications">
1867
+ * </primitive-toggle>
1868
+ * ```
1869
+ *
1870
+ * @example
1871
+ * ```html
1872
+ * <primitive-toggle
1873
+ * [checked]="true"
1874
+ * [disabled]="false"
1875
+ * size="lg"
1876
+ * labelPosition="left"
1877
+ * label="Mode sombre"
1878
+ * (checkedChange)="onThemeChange($event)">
1879
+ * </primitive-toggle>
1880
+ * ```
1881
+ */
1882
+ declare class PrimitiveToggle {
1883
+ /**
1884
+ * État activé du toggle avec binding bidirectionnel.
1885
+ *
1886
+ * @description
1887
+ * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.
1888
+ * L'état est inversé automatiquement lors du clic utilisateur.
1889
+ * Le thumb (curseur) se déplace de gauche à droite selon l'état.
1890
+ *
1891
+ * @default false
1892
+ *
1893
+ * @example
1894
+ * ```typescript
1895
+ * darkModeEnabled = signal(false);
1896
+ * ```
1897
+ * ```html
1898
+ * <primitive-toggle [(checked)]="darkModeEnabled" label="Mode sombre"></primitive-toggle>
1899
+ * <p>Mode sombre : {{ darkModeEnabled() ? 'Activé' : 'Désactivé' }}</p>
1900
+ * ```
1901
+ */
1902
+ checked: _angular_core.ModelSignal<boolean>;
1903
+ /**
1904
+ * État désactivé du toggle.
1905
+ *
1906
+ * @description
1907
+ * Lorsque `true`, le toggle devient non-cliquable, applique les styles visuels
1908
+ * d'état désactivé et définit `tabindex="-1"` et `aria-disabled="true"`.
1909
+ * Les événements ne sont pas émis en état désactivé.
1910
+ *
1911
+ * @default false
1912
+ *
1913
+ * @example
1914
+ * ```html
1915
+ * <primitive-toggle [disabled]="!hasPermission" label="Option premium"></primitive-toggle>
1916
+ * ```
1917
+ */
1918
+ disabled: _angular_core.InputSignal<boolean>;
1919
+ /**
1920
+ * Taille du toggle.
1921
+ *
1922
+ * @description
1923
+ * Contrôle la hauteur du track (rail), la taille du thumb (curseur) et la taille
1924
+ * de police du label via les tokens CSS custom properties.
1925
+ *
1926
+ * Tailles disponibles :
1927
+ * - `sm` : petit (track 32px × 18px, thumb 14px)
1928
+ * - `md` : moyen (track 44px × 24px, thumb 20px, par défaut)
1929
+ * - `lg` : grand (track 56px × 30px, thumb 26px)
1930
+ *
1931
+ * @default 'md'
1932
+ *
1933
+ * @example
1934
+ * ```html
1935
+ * <primitive-toggle size="lg" label="Grande option"></primitive-toggle>
1936
+ * ```
1937
+ */
1938
+ size: _angular_core.InputSignal<ToggleSize>;
1939
+ /**
1940
+ * Texte du label affiché à côté du toggle.
1941
+ *
1942
+ * @description
1943
+ * Si fourni, affiche un label cliquable associé au toggle.
1944
+ * Le label est lié au toggle via `aria-labelledby` pour l'accessibilité.
1945
+ * Le clic sur le label déclenche le toggle.
1946
+ *
1947
+ * @default ''
1948
+ *
1949
+ * @example
1950
+ * ```html
1951
+ * <primitive-toggle label="Accepter les cookies"></primitive-toggle>
1952
+ * ```
1953
+ */
1954
+ label: _angular_core.InputSignal<string>;
1955
+ /**
1956
+ * Position du label par rapport au switch.
1957
+ *
1958
+ * @description
1959
+ * Définit si le label s'affiche à gauche ou à droite du switch visuel.
1960
+ * Applique la classe CSS `primitive-toggle--label-{position}` si un label est présent.
1961
+ *
1962
+ * Positions disponibles :
1963
+ * - `right` : label à droite du switch (par défaut)
1964
+ * - `left` : label à gauche du switch
1965
+ *
1966
+ * @default 'right'
1967
+ *
1968
+ * @example
1969
+ * ```html
1970
+ * <primitive-toggle labelPosition="left" label="Notifications"></primitive-toggle>
1971
+ * ```
1972
+ */
1973
+ labelPosition: _angular_core.InputSignal<"left" | "right">;
1974
+ /**
1975
+ * Identifiant unique du toggle pour l'accessibilité.
1976
+ *
1977
+ * @description
1978
+ * Utilisé pour générer les IDs des éléments internes (label) et pour l'association
1979
+ * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.
1980
+ *
1981
+ * @default `toggle-${random}`
1982
+ *
1983
+ * @example
1984
+ * ```html
1985
+ * <primitive-toggle toggleId="dark-mode-switch" label="Mode sombre"></primitive-toggle>
1986
+ * ```
1987
+ */
1988
+ toggleId: _angular_core.InputSignal<string>;
1989
+ /**
1990
+ * Événement émis lors du changement d'état du toggle.
1991
+ *
1992
+ * @description
1993
+ * Émis uniquement si le toggle n'est pas désactivé (`disabled = false`).
1994
+ * Transporte la nouvelle valeur booléenne de l'état activé.
1995
+ * Émis à chaque toggle (activation ou désactivation).
1996
+ *
1997
+ * @example
1998
+ * ```html
1999
+ * <primitive-toggle
2000
+ * [(checked)]="autoSave"
2001
+ * (checkedChange)="onAutoSaveChange($event)">
2002
+ * </primitive-toggle>
2003
+ * ```
2004
+ * ```typescript
2005
+ * onAutoSaveChange(enabled: boolean) {
2006
+ * console.log('Sauvegarde automatique :', enabled ? 'activée' : 'désactivée');
2007
+ * }
2008
+ * ```
2009
+ */
2010
+ checkedChange: _angular_core.OutputEmitterRef<boolean>;
2011
+ /**
2012
+ * Signal interne de l'état focus du toggle.
2013
+ *
2014
+ * @description
2015
+ * Signal utilisé en interne pour suivre l'état focus du switch.
2016
+ * Applique la classe CSS `primitive-toggle--focused` lorsque `true`.
2017
+ *
2018
+ * @internal
2019
+ */
2020
+ protected focused: _angular_core.WritableSignal<boolean>;
2021
+ /**
2022
+ * Signal calculé des classes CSS du toggle.
2023
+ *
2024
+ * @description
2025
+ * Génère dynamiquement un objet de classes CSS en fonction des propriétés :
2026
+ * - Classe de base : `primitive-toggle`
2027
+ * - Classe de taille : `primitive-toggle--{size}`
2028
+ * - Classe de position du label : `primitive-toggle--label-{position}` (si label présent)
2029
+ * - Classe d'état activé : `primitive-toggle--checked`
2030
+ * - Classe d'état désactivé : `primitive-toggle--disabled`
2031
+ * - Classe d'état focus : `primitive-toggle--focused`
2032
+ *
2033
+ * @returns Objet de classes CSS avec valeurs booléennes.
2034
+ *
2035
+ * @internal
2036
+ */
2037
+ protected cssClasses: _angular_core.Signal<{
2038
+ [x: string]: boolean;
2039
+ 'primitive-toggle': boolean;
2040
+ 'primitive-toggle--checked': boolean;
2041
+ 'primitive-toggle--disabled': boolean;
2042
+ 'primitive-toggle--focused': boolean;
2043
+ }>;
2044
+ /**
2045
+ * Gestionnaire de toggle interne.
2046
+ *
2047
+ * @description
2048
+ * Méthode appelée par le template lors du clic sur le switch ou son label.
2049
+ * Inverse l'état `checked` et émet l'événement `checkedChange`.
2050
+ * Ne fait rien si le toggle est désactivé.
2051
+ *
2052
+ * @internal
2053
+ */
2054
+ protected onToggle(): void;
2055
+ /**
2056
+ * Gestionnaire de l'événement focus natif.
2057
+ *
2058
+ * @description
2059
+ * Méthode appelée par le template lorsque le switch reçoit le focus.
2060
+ * Met à jour le signal interne `focused` à `true`.
2061
+ *
2062
+ * @internal
2063
+ */
2064
+ protected onFocus(): void;
2065
+ /**
2066
+ * Gestionnaire de l'événement blur natif.
2067
+ *
2068
+ * @description
2069
+ * Méthode appelée par le template lorsque le switch perd le focus.
2070
+ * Met à jour le signal interne `focused` à `false`.
2071
+ *
2072
+ * @internal
2073
+ */
2074
+ protected onBlur(): void;
2075
+ /**
2076
+ * Gestionnaire de l'événement keydown natif.
2077
+ *
2078
+ * @description
2079
+ * Méthode appelée par le template lors de la pression d'une touche clavier.
2080
+ * Déclenche le toggle sur les touches `Space` ou `Enter` et empêche le
2081
+ * comportement par défaut (scroll de la page sur Space).
2082
+ *
2083
+ * @param event - Événement clavier natif.
2084
+ *
2085
+ * @internal
2086
+ */
2087
+ protected onKeyDown(event: KeyboardEvent): void;
2088
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PrimitiveToggle, never>;
2089
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PrimitiveToggle, "primitive-toggle", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "toggleId": { "alias": "toggleId"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "checkedChange": "checkedChange"; }, never, never, true, never>;
2090
+ }
2091
+
2092
+ /**
2093
+ * Types de feedback disponibles pour le composant Alert.
2094
+ * - **success** : opération réussie
2095
+ * - **warning** : attention ou avertissement
2096
+ * - **error** : erreur ou échec
2097
+ * - **info** : information neutre
2098
+ */
2099
+ type AlertType = 'success' | 'warning' | 'error' | 'info';
2100
+ /**
2101
+ * Tailles disponibles pour le composant Alert.
2102
+ */
2103
+ type AlertSize = 'sm' | 'md' | 'lg';
2104
+ /**
2105
+ * # DsAlert
2106
+ *
2107
+ * Composant de bannière de feedback permettant d'afficher des messages
2108
+ * de succès, d'avertissement, d'erreur ou d'information.
2109
+ *
2110
+ * ## Usage
2111
+ *
2112
+ * ```html
2113
+ * <ds-alert type="success" [closable]="true" (closed)="handleClose()">
2114
+ * <p>Votre opération a été effectuée avec succès !</p>
2115
+ * </ds-alert>
2116
+ * ```
2117
+ *
2118
+ * ## Accessibilité
2119
+ *
2120
+ * - Utilise `role="alert"` pour les messages importants
2121
+ * - Icônes décoratives avec `aria-hidden="true"`
2122
+ * - Bouton de fermeture avec `aria-label` explicite
2123
+ *
2124
+ * @component
2125
+ */
2126
+ declare class DsAlert {
2127
+ /**
2128
+ * Type de feedback (success, warning, error, info).
2129
+ * @default 'info'
2130
+ */
2131
+ type: _angular_core.InputSignal<AlertType>;
2132
+ /**
2133
+ * Taille de l'alerte (affecte le padding et la taille de l'icône).
2134
+ * @default 'md'
2135
+ */
2136
+ size: _angular_core.InputSignal<AlertSize>;
2137
+ /**
2138
+ * Affiche une icône selon le type.
2139
+ * @default true
2140
+ */
2141
+ showIcon: _angular_core.InputSignal<boolean>;
2142
+ /**
2143
+ * Permet de fermer l'alerte avec un bouton de fermeture.
2144
+ * @default false
2145
+ */
2146
+ closable: _angular_core.InputSignal<boolean>;
2147
+ /**
2148
+ * Masque l'alerte (contrôle de visibilité externe).
2149
+ * @default false
2150
+ */
2151
+ hidden: _angular_core.InputSignal<boolean>;
2152
+ /**
2153
+ * Émis lorsque l'utilisateur ferme l'alerte.
2154
+ */
2155
+ closed: _angular_core.OutputEmitterRef<void>;
2156
+ /**
2157
+ * Mapping des icônes FontAwesome par type d'alerte.
2158
+ * Exposé en readonly pour les tests et l'introspection.
2159
+ */
2160
+ readonly icons: Record<AlertType, IconDefinition>;
2161
+ protected readonly closeIcon: IconDefinition;
2162
+ /**
2163
+ * Classes CSS calculées pour le composant.
2164
+ */
2165
+ get alertClasses(): string[];
2166
+ /**
2167
+ * Icône à afficher selon le type.
2168
+ */
2169
+ get currentIcon(): IconDefinition;
2170
+ /**
2171
+ * Gère la fermeture de l'alerte.
2172
+ */
2173
+ handleClose(): void;
2174
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsAlert, never>;
2175
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsAlert, "ds-alert", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, ["*"], true, never>;
2176
+ }
2177
+
2178
+ type DsBadgeVariantExtended = BadgeVariant | 'default' | 'accent';
2179
+ declare class DsBadge {
2180
+ private static readonly supportedColorPattern;
2181
+ type: _angular_core.InputSignal<DsBadgeVariantExtended>;
2182
+ size: _angular_core.InputSignal<BadgeSize>;
2183
+ iconStart: _angular_core.InputSignal<IconDefinition$1 | null>;
2184
+ iconEnd: _angular_core.InputSignal<IconDefinition$1 | null>;
2185
+ variant: _angular_core.InputSignal<"solid" | "outline">;
2186
+ shape: _angular_core.InputSignal<"default" | "pill" | "square">;
2187
+ color: _angular_core.InputSignal<string | undefined>;
2188
+ get badgeVariant(): BadgeVariant;
2189
+ get badgeShape(): BadgeShape;
2190
+ get styleOverrides(): Record<string, string> | null;
2191
+ private resolveCustomColor;
2192
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsBadge, never>;
2193
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsBadge, "ds-badge", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2194
+ }
2195
+
2196
+ interface BreadcrumbItem {
2197
+ label: string;
2198
+ href?: string;
2199
+ disabled?: boolean;
2200
+ }
2201
+ declare class DsBreadcrumb {
2202
+ items: _angular_core.InputSignal<BreadcrumbItem[]>;
2203
+ separator: _angular_core.InputSignal<string>;
2204
+ maxItems: _angular_core.InputSignal<number | undefined>;
2205
+ itemClicked: _angular_core.OutputEmitterRef<BreadcrumbItem>;
2206
+ protected get visibleItems(): BreadcrumbItem[];
2207
+ protected onItemClick(item: BreadcrumbItem, event: Event): void;
2208
+ protected isLastItem(index: number): boolean;
2209
+ protected trackByIndex(index: number): number;
2210
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsBreadcrumb, never>;
2211
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsBreadcrumb, "ds-breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
2212
+ }
2213
+
2214
+ declare class DsButton {
2215
+ /** Variante visuelle appliquée au bouton. */
2216
+ variant: _angular_core.InputSignal<ButtonVariant>;
2217
+ /** Apparence du bouton (plein ou outline). */
2218
+ appearance: _angular_core.InputSignal<ButtonAppearance>;
2219
+ /** Taille du bouton. */
2220
+ size: _angular_core.InputSignal<ButtonSize>;
2221
+ /** Définit le type submit pour les formulaires. */
2222
+ submit: _angular_core.InputSignal<boolean>;
2223
+ /** Désactive le bouton. */
2224
+ disabled: _angular_core.InputSignal<boolean>;
2225
+ /** Icône affichée à gauche du libellé. */
2226
+ iconStart: _angular_core.InputSignal<IconDefinition | null>;
2227
+ /** Icône affichée à droite du libellé. */
2228
+ iconEnd: _angular_core.InputSignal<IconDefinition | null>;
2229
+ /** Active l'état de chargement avec spinner et désactive le clic. */
2230
+ loading: _angular_core.InputSignal<boolean>;
2231
+ /** Étend le bouton sur toute la largeur du conteneur. */
2232
+ block: _angular_core.InputSignal<boolean>;
2233
+ /** Émis lorsque l'utilisateur clique sur le bouton actif. */
2234
+ clicked: _angular_core.OutputEmitterRef<void>;
2235
+ get buttonType(): ButtonType;
2236
+ get isDisabled(): boolean;
2237
+ handleClick(): void;
2238
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsButton, never>;
2239
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsButton, "ds-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "submit": { "alias": "submit"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
2240
+ }
2241
+
2242
+ /**
2243
+ * Variantes visuelles disponibles pour le composant Card.
2244
+ * - **default** : carte simple avec bordure
2245
+ * - **elevated** : carte avec ombre portée
2246
+ * - **outlined** : carte avec bordure accentuée
2247
+ */
2248
+ type CardVariant = 'default' | 'elevated' | 'outlined';
2249
+ /**
2250
+ * Tailles disponibles pour le composant Card.
2251
+ */
2252
+ type CardSize = 'sm' | 'md' | 'lg';
2253
+ /**
2254
+ * # DsCard
2255
+ *
2256
+ * Composant container permettant de regrouper du contenu avec un en-tête,
2257
+ * un corps et un pied de page optionnels.
2258
+ *
2259
+ * ## Usage
2260
+ *
2261
+ * ```html
2262
+ * <ds-card variant="elevated" size="md">
2263
+ * <div header>Titre de la carte</div>
2264
+ * <div>Contenu principal</div>
2265
+ * <div footer>Actions ou informations complémentaires</div>
2266
+ * </ds-card>
2267
+ * ```
2268
+ *
2269
+ * ## Accessibilité
2270
+ *
2271
+ * - Utilise la sémantique HTML appropriée (`article`)
2272
+ * - Structure claire avec header, body, footer
2273
+ *
2274
+ * @component
2275
+ */
2276
+ declare class DsCard {
2277
+ /**
2278
+ * Variante visuelle de la carte.
2279
+ * @default 'default'
2280
+ */
2281
+ variant: _angular_core.InputSignal<CardVariant>;
2282
+ /**
2283
+ * Taille de la carte (affecte le padding).
2284
+ * @default 'md'
2285
+ */
2286
+ size: _angular_core.InputSignal<CardSize>;
2287
+ /**
2288
+ * Désactive l'interaction avec la carte (apparence désactivée).
2289
+ * @default false
2290
+ */
2291
+ disabled: _angular_core.InputSignal<boolean>;
2292
+ /**
2293
+ * Rend la carte cliquable avec effet hover.
2294
+ * @default false
2295
+ */
2296
+ clickable: _angular_core.InputSignal<boolean>;
2297
+ /**
2298
+ * Classes CSS calculées pour le composant.
2299
+ */
2300
+ get cardClasses(): string[];
2301
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsCard, never>;
2302
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsCard, "ds-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, {}, never, ["[header]", "*", "[footer]"], true, never>;
2303
+ }
2304
+
2305
+ /**
2306
+ * DS Checkbox
2307
+ *
2308
+ * Composant checkbox du design system avec ControlValueAccessor pour intégration formulaires réactifs.
2309
+ * Encapsule primitive-checkbox avec gestion label, helper, error et validation visuelle.
2310
+ *
2311
+ * @example
2312
+ * // Formulaire réactif
2313
+ * <ds-checkbox
2314
+ * formControlName="acceptTerms"
2315
+ * label="J'accepte les conditions d'utilisation"
2316
+ * [required]="true"
2317
+ * helper="Vous devez accepter pour continuer"
2318
+ * />
2319
+ *
2320
+ * @example
2321
+ * // Template-driven
2322
+ * <ds-checkbox
2323
+ * [(ngModel)]="isAccepted"
2324
+ * label="Activer les notifications"
2325
+ * />
2326
+ */
2327
+ declare class DsCheckbox implements ControlValueAccessor {
2328
+ /**
2329
+ * ID unique du checkbox (généré automatiquement)
2330
+ */
2331
+ id: _angular_core.InputSignal<string>;
2332
+ /**
2333
+ * Label affiché à côté du checkbox
2334
+ */
2335
+ label: _angular_core.InputSignal<string>;
2336
+ /**
2337
+ * Texte d'aide affiché sous le checkbox
2338
+ */
2339
+ helper: _angular_core.InputSignal<string | undefined>;
2340
+ /**
2341
+ * Message d'erreur affiché en rouge sous le checkbox
2342
+ */
2343
+ error: _angular_core.InputSignal<string | undefined>;
2344
+ /**
2345
+ * Indique si le champ est requis (affiche astérisque sur label)
2346
+ */
2347
+ required: _angular_core.InputSignal<boolean>;
2348
+ /**
2349
+ * État désactivé du checkbox
2350
+ */
2351
+ disabled: _angular_core.InputSignal<boolean>;
2352
+ /**
2353
+ * État indéterminé du checkbox (prioritaire sur checked)
2354
+ */
2355
+ indeterminate: _angular_core.InputSignal<boolean>;
2356
+ /**
2357
+ * Taille du checkbox (sm, md, lg)
2358
+ */
2359
+ size: _angular_core.InputSignal<CheckboxSize>;
2360
+ /**
2361
+ * Nom du contrôle (pour formulaires)
2362
+ */
2363
+ name: _angular_core.InputSignal<string | undefined>;
2364
+ private readonly disabledState;
2365
+ protected readonly internalValue: _angular_core.WritableSignal<boolean>;
2366
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
2367
+ protected readonly errorId: _angular_core.Signal<string | undefined>;
2368
+ protected readonly helperId: _angular_core.Signal<string | undefined>;
2369
+ protected readonly ariaDescribedBy: _angular_core.Signal<string | undefined>;
2370
+ protected readonly hasError: _angular_core.Signal<boolean>;
2371
+ private onChange;
2372
+ private onTouched;
2373
+ writeValue(value: boolean | null): void;
2374
+ registerOnChange(fn: (value: boolean) => void): void;
2375
+ registerOnTouched(fn: () => void): void;
2376
+ setDisabledState(isDisabled: boolean): void;
2377
+ protected onCheckedChange(checked: boolean): void;
2378
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsCheckbox, never>;
2379
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsCheckbox, "ds-checkbox", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2380
+ }
2381
+
2382
+ /**
2383
+ * Orientations disponibles pour le composant Divider.
2384
+ * - **horizontal** : séparateur horizontal (défaut)
2385
+ * - **vertical** : séparateur vertical
2386
+ */
2387
+ type DividerOrientation = 'horizontal' | 'vertical';
2388
+ /**
2389
+ * Variantes visuelles disponibles pour le composant Divider.
2390
+ * - **solid** : ligne continue (défaut)
2391
+ * - **dashed** : ligne en tirets
2392
+ * - **dotted** : ligne en pointillés
2393
+ */
2394
+ type DividerVariant = 'solid' | 'dashed' | 'dotted';
2395
+ /**
2396
+ * Tailles disponibles pour le composant Divider (épaisseur).
2397
+ */
2398
+ type DividerSize = 'sm' | 'md' | 'lg';
2399
+ /**
2400
+ * Position du label pour un divider horizontal.
2401
+ * - **left** : label aligné à gauche
2402
+ * - **center** : label centré (défaut)
2403
+ * - **right** : label aligné à droite
2404
+ */
2405
+ type DividerLabelPosition = 'left' | 'center' | 'right';
2406
+ /**
2407
+ * # DsDivider
2408
+ *
2409
+ * Composant séparateur permettant de diviser visuellement le contenu.
2410
+ * Supporte les orientations horizontales et verticales, avec un label optionnel.
2411
+ *
2412
+ * ## Usage
2413
+ *
2414
+ * ### Sans label
2415
+ * ```html
2416
+ * <ds-divider variant="solid" size="md"></ds-divider>
2417
+ * ```
2418
+ *
2419
+ * ### Avec label
2420
+ * ```html
2421
+ * <ds-divider>Section suivante</ds-divider>
2422
+ * ```
2423
+ *
2424
+ * ### Vertical
2425
+ * ```html
2426
+ * <ds-divider orientation="vertical"></ds-divider>
2427
+ * ```
2428
+ *
2429
+ * ## Accessibilité
2430
+ *
2431
+ * - Utilise `role="separator"` pour la sémantique
2432
+ * - Attribut `aria-orientation` pour l'orientation
2433
+ * - Label accessible pour les lecteurs d'écran
2434
+ *
2435
+ * @component
2436
+ */
2437
+ declare class DsDivider {
2438
+ /**
2439
+ * Orientation du séparateur.
2440
+ * @default 'horizontal'
2441
+ */
2442
+ orientation: _angular_core.InputSignal<DividerOrientation>;
2443
+ /**
2444
+ * Variante visuelle (solid, dashed, dotted).
2445
+ * @default 'solid'
2446
+ */
2447
+ variant: _angular_core.InputSignal<DividerVariant>;
2448
+ /**
2449
+ * Taille (épaisseur) du séparateur.
2450
+ * @default 'md'
2451
+ */
2452
+ size: _angular_core.InputSignal<DividerSize>;
2453
+ /**
2454
+ * Position du label (uniquement pour horizontal).
2455
+ * @default 'center'
2456
+ */
2457
+ labelPosition: _angular_core.InputSignal<DividerLabelPosition>;
2458
+ /**
2459
+ * Marge verticale/horizontale autour du divider.
2460
+ * @default 'md'
2461
+ */
2462
+ spacing: _angular_core.InputSignal<"sm" | "md" | "lg" | "none">;
2463
+ /**
2464
+ * Classes CSS calculées pour le composant.
2465
+ */
2466
+ get dividerClasses(): string[];
2467
+ /**
2468
+ * Vérifie si le composant a du contenu projeté (label).
2469
+ */
2470
+ get hasLabel(): boolean;
2471
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsDivider, never>;
2472
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsDivider, "ds-divider", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2473
+ }
2474
+
2475
+ interface DropdownItem {
2476
+ code: string;
2477
+ label: string;
2478
+ startIcon?: IconDefinition$2;
2479
+ endIcon?: IconDefinition$2;
2480
+ iconColor?: string;
2481
+ }
2482
+ interface DropdownItemDTO {
2483
+ code: string;
2484
+ label: string;
2485
+ startIcon: string;
2486
+ endIcon: string;
2487
+ }
2488
+
2489
+ declare class DsDropdown implements ControlValueAccessor, AfterViewInit, OnDestroy {
2490
+ /** Identifiant du menu déroulant pour l'accessibilité. */
2491
+ readonly id: _angular_core.InputSignal<string>;
2492
+ /** Variante du bouton déclencheur. */
2493
+ readonly type: _angular_core.InputSignal<ButtonVariant>;
2494
+ /** Apparence du bouton déclencheur (plein ou outline). */
2495
+ readonly variant: _angular_core.InputSignal<ButtonAppearance>;
2496
+ /** Taille du bouton déclencheur. */
2497
+ readonly size: _angular_core.InputSignal<ButtonSize>;
2498
+ /** Utilise le bouton comme submit dans un formulaire. */
2499
+ readonly submit: _angular_core.InputSignal<boolean>;
2500
+ /** Désactive l'interaction du dropdown. */
2501
+ readonly disabled: _angular_core.InputSignal<boolean>;
2502
+ /** Affiche l'état de chargement et bloque l'ouverture. */
2503
+ readonly loading: _angular_core.InputSignal<boolean>;
2504
+ /** Étend le bouton sur toute la largeur disponible. */
2505
+ readonly block: _angular_core.InputSignal<boolean>;
2506
+ /** Icône affichée avant le libellé du bouton. */
2507
+ readonly dropdownStartIcon: _angular_core.InputSignal<IconDefinition | null>;
2508
+ /** Icône affichée après le libellé du bouton. */
2509
+ readonly dropdownEndIcon: _angular_core.InputSignal<IconDefinition | null>;
2510
+ /** Liste des options proposées dans le menu. */
2511
+ readonly dropdownItems: _angular_core.InputSignal<DropdownItem[]>;
2512
+ /** Code de l'option actuellement sélectionnée. */
2513
+ readonly selectedItem: _angular_core.InputSignal<string | null | undefined>;
2514
+ /** Libellé ARIA alternatif pour le bouton. */
2515
+ readonly ariaLabel: _angular_core.InputSignal<string | null | undefined>;
2516
+ /** Référence ARIA vers un élément existant décrivant le bouton. */
2517
+ readonly ariaLabelledBy: _angular_core.InputSignal<string | null | undefined>;
2518
+ /** Ferme le menu automatiquement lors de la sélection. */
2519
+ readonly closeOnSelect: _angular_core.InputSignal<boolean>;
2520
+ /** Classes CSS supplémentaires appliquées au panneau. */
2521
+ readonly overlayPanelClass: _angular_core.InputSignal<string | string[] | undefined>;
2522
+ /** Émis lorsqu'un élément est sélectionné. */
2523
+ readonly selectedItemChanged: _angular_core.OutputEmitterRef<string>;
2524
+ /** Émis lors de l'ouverture du menu. */
2525
+ readonly opened: _angular_core.OutputEmitterRef<void>;
2526
+ /** Émis lors de la fermeture du menu. */
2527
+ readonly closed: _angular_core.OutputEmitterRef<void>;
2528
+ triggerButton?: ElementRef<HTMLElement>;
2529
+ menuItems?: QueryList<ElementRef<HTMLButtonElement>>;
2530
+ private readonly internalValue;
2531
+ private readonly disabledState;
2532
+ private readonly menuOpen;
2533
+ private readonly activeIndex;
2534
+ private onChange;
2535
+ private onTouched;
2536
+ private menuItemsChanges?;
2537
+ constructor();
2538
+ readonly overlayPositions: _angular_cdk_overlay.ConnectedPosition[];
2539
+ readonly isMenuOpen: _angular_core.Signal<boolean>;
2540
+ readonly buttonType: _angular_core.Signal<ButtonType>;
2541
+ readonly isDisabled: _angular_core.Signal<boolean>;
2542
+ readonly effectiveStartIcon: _angular_core.Signal<IconDefinition | null>;
2543
+ readonly effectiveEndIcon: _angular_core.Signal<IconDefinition | null>;
2544
+ readonly overlayPanelClasses: _angular_core.Signal<string[]>;
2545
+ private readonly currentValue;
2546
+ readonly activeItem: _angular_core.Signal<DropdownItem | undefined>;
2547
+ readonly activeDescendantId: _angular_core.Signal<string | undefined>;
2548
+ ngAfterViewInit(): void;
2549
+ ngOnDestroy(): void;
2550
+ toggleMenu(): void;
2551
+ closeMenu(refocusTrigger?: boolean): void;
2552
+ onOverlayDetach(): void;
2553
+ setSelectedItem(code: string): void;
2554
+ isItemActive(code: string): boolean;
2555
+ getSelectedItem(): DropdownItem | undefined;
2556
+ onTriggerKeydown(event: KeyboardEvent): void;
2557
+ onMenuKeydown(event: KeyboardEvent, _index: number): void;
2558
+ onMenuMouseEnter(index: number): void;
2559
+ writeValue(value: string | null): void;
2560
+ registerOnChange(fn: (value: string | null) => void): void;
2561
+ registerOnTouched(fn: () => void): void;
2562
+ setDisabledState(isDisabled: boolean): void;
2563
+ private openMenu;
2564
+ private moveActiveIndex;
2565
+ private setActiveIndex;
2566
+ private commitActiveSelection;
2567
+ private wrapIndex;
2568
+ private focusActiveItem;
2569
+ private focusTriggerButton;
2570
+ private getMenuItemElement;
2571
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsDropdown, never>;
2572
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsDropdown, "ds-dropdown", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "submit": { "alias": "submit"; "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; }; "dropdownStartIcon": { "alias": "dropdownStartIcon"; "required": false; "isSignal": true; }; "dropdownEndIcon": { "alias": "dropdownEndIcon"; "required": false; "isSignal": true; }; "dropdownItems": { "alias": "dropdownItems"; "required": false; "isSignal": true; }; "selectedItem": { "alias": "selectedItem"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "overlayPanelClass": { "alias": "overlayPanelClass"; "required": false; "isSignal": true; }; }, { "selectedItemChanged": "selectedItemChanged"; "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
2573
+ }
2574
+
2575
+ declare class DsInputField implements ControlValueAccessor {
2576
+ id: _angular_core.InputSignal<string>;
2577
+ label: _angular_core.InputSignal<string | undefined>;
2578
+ name: _angular_core.InputSignal<string | undefined>;
2579
+ autocomplete: _angular_core.InputSignal<string | undefined>;
2580
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
2581
+ placeholder: _angular_core.InputSignal<string>;
2582
+ disabled: _angular_core.InputSignal<boolean>;
2583
+ readonly: _angular_core.InputSignal<boolean>;
2584
+ required: _angular_core.InputSignal<boolean>;
2585
+ type: _angular_core.InputSignal<InputType>;
2586
+ size: _angular_core.InputSignal<InputSize>;
2587
+ state: _angular_core.InputSignal<InputState>;
2588
+ variant: _angular_core.InputSignal<InputAppearance>;
2589
+ iconStart: _angular_core.InputSignal<IconDefinition$1 | null>;
2590
+ iconEnd: _angular_core.InputSignal<IconDefinition$1 | null>;
2591
+ externalValue: _angular_core.InputSignal<string | null | undefined>;
2592
+ error: _angular_core.InputSignal<string | undefined>;
2593
+ helper: _angular_core.InputSignal<string | undefined>;
2594
+ maxlength: _angular_core.InputSignal<number | undefined>;
2595
+ clearable: _angular_core.InputSignal<boolean>;
2596
+ togglePassword: _angular_core.InputSignal<boolean>;
2597
+ protected readonly faEye: IconDefinition$1;
2598
+ protected readonly faEyeSlash: IconDefinition$1;
2599
+ protected readonly faClose: IconDefinition$1;
2600
+ private readonly disabledState;
2601
+ private readonly hasExternalValue;
2602
+ readonly internalValue: _angular_core.WritableSignal<string>;
2603
+ readonly passwordVisible: _angular_core.WritableSignal<boolean>;
2604
+ constructor();
2605
+ readonly isDisabled: _angular_core.Signal<boolean>;
2606
+ readonly errorId: _angular_core.Signal<string | undefined>;
2607
+ readonly helperId: _angular_core.Signal<string | undefined>;
2608
+ readonly counterId: _angular_core.Signal<string | undefined>;
2609
+ readonly ariaDescribedBy: _angular_core.Signal<string | undefined>;
2610
+ readonly inputState: _angular_core.Signal<InputState>;
2611
+ readonly actualType: _angular_core.Signal<InputType>;
2612
+ readonly showClearButton: _angular_core.Signal<boolean>;
2613
+ readonly showTogglePassword: _angular_core.Signal<boolean>;
2614
+ readonly characterCount: _angular_core.Signal<number>;
2615
+ private onChange;
2616
+ private onTouched;
2617
+ writeValue(value: string | null): void;
2618
+ registerOnChange(fn: (value: string) => void): void;
2619
+ registerOnTouched(fn: () => void): void;
2620
+ setDisabledState(isDisabled: boolean): void;
2621
+ onPrimitiveValueChange(newValue: string): void;
2622
+ onInputBlur(): void;
2623
+ clearValue(): void;
2624
+ togglePasswordVisibility(): void;
2625
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsInputField, never>;
2626
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsInputField, "ds-input-field", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "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; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "externalValue": { "alias": "externalValue"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "togglePassword": { "alias": "togglePassword"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2627
+ }
2628
+
2629
+ declare class DsInputTextarea implements ControlValueAccessor, AfterViewInit, OnDestroy {
2630
+ id: _angular_core.InputSignal<string>;
2631
+ name: _angular_core.InputSignal<string | undefined>;
2632
+ label: _angular_core.InputSignal<string | undefined>;
2633
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
2634
+ placeholder: _angular_core.InputSignal<string>;
2635
+ disabled: _angular_core.InputSignal<boolean>;
2636
+ readonly: _angular_core.InputSignal<boolean>;
2637
+ required: _angular_core.InputSignal<boolean>;
2638
+ state: _angular_core.InputSignal<TextareaState>;
2639
+ size: _angular_core.InputSignal<TextareaSize>;
2640
+ variant: _angular_core.InputSignal<TextareaAppearance>;
2641
+ rows: _angular_core.InputSignal<number | undefined>;
2642
+ cols: _angular_core.InputSignal<number | undefined>;
2643
+ resize: _angular_core.InputSignal<TextareaResize>;
2644
+ resizeAuto: _angular_core.InputSignal<number | undefined>;
2645
+ maxlength: _angular_core.InputSignal<number | undefined>;
2646
+ helper: _angular_core.InputSignal<string | undefined>;
2647
+ error: _angular_core.InputSignal<string | undefined>;
2648
+ iconStart: _angular_core.InputSignal<IconDefinition$1 | null>;
2649
+ iconEnd: _angular_core.InputSignal<IconDefinition$1 | null>;
2650
+ clearable: _angular_core.InputSignal<boolean>;
2651
+ externalValue: _angular_core.InputSignal<string | null | undefined>;
2652
+ private readonly disabledState;
2653
+ private readonly hasExternalValue;
2654
+ readonly internalValue: _angular_core.WritableSignal<string>;
2655
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
2656
+ readonly arErrorId: _angular_core.Signal<string | undefined>;
2657
+ readonly arHelperId: _angular_core.Signal<string | undefined>;
2658
+ readonly arCounterId: _angular_core.Signal<string | undefined>;
2659
+ readonly ariaDescribedBy: _angular_core.Signal<string | undefined>;
2660
+ readonly isDisabled: _angular_core.Signal<boolean>;
2661
+ readonly inputState: _angular_core.Signal<TextareaState>;
2662
+ readonly showClearButton: _angular_core.Signal<boolean>;
2663
+ readonly textareaResize: _angular_core.Signal<TextareaResize>;
2664
+ readonly characterCount: _angular_core.Signal<number>;
2665
+ protected readonly faClose: IconDefinition$1;
2666
+ textareaHost?: ElementRef<HTMLElement>;
2667
+ private resizeHandle;
2668
+ private resizeObserver?;
2669
+ constructor();
2670
+ ngAfterViewInit(): void;
2671
+ ngOnDestroy(): void;
2672
+ private onChange;
2673
+ private onTouched;
2674
+ writeValue(value: string | null): void;
2675
+ registerOnChange(fn: (value: string) => void): void;
2676
+ registerOnTouched(fn: () => void): void;
2677
+ setDisabledState(isDisabled: boolean): void;
2678
+ onPrimitiveValueChange(newValue: string): void;
2679
+ onInputBlur(): void;
2680
+ clearValue(): void;
2681
+ private setupResizeObserver;
2682
+ private scheduleAutoResize;
2683
+ private performAutoResize;
2684
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsInputTextarea, never>;
2685
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsInputTextarea, "ds-input-textarea", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "resizeAuto": { "alias": "resizeAuto"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "externalValue": { "alias": "externalValue"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2686
+ }
2687
+
2688
+ declare class DsModalComponent implements AfterContentInit, AfterViewInit, OnDestroy {
2689
+ open: _angular_core.InputSignal<boolean>;
2690
+ title: _angular_core.InputSignal<string>;
2691
+ closable: _angular_core.InputSignal<boolean>;
2692
+ closeOnBackdrop: _angular_core.InputSignal<boolean>;
2693
+ showIcon: _angular_core.InputSignal<boolean>;
2694
+ type: _angular_core.InputSignal<"success" | "warning" | "error" | "info" | null>;
2695
+ size: _angular_core.InputSignal<"sm" | "md" | "lg">;
2696
+ opened: EventEmitter<void>;
2697
+ closed: EventEmitter<void>;
2698
+ projectedIcon: ElementRef | undefined;
2699
+ modalContainer?: ElementRef<HTMLElement>;
2700
+ private readonly hasProjectedIcon;
2701
+ private readonly viewReady;
2702
+ private focusTrap;
2703
+ private readonly documentRef;
2704
+ private readonly focusTrapFactory;
2705
+ readonly modalClasses: _angular_core.Signal<string[]>;
2706
+ closeButton?: ElementRef<HTMLElement>;
2707
+ readonly resolvedIcon: _angular_core.Signal<IconDefinition$1 | null>;
2708
+ readonly shouldRenderDefaultIcon: _angular_core.Signal<boolean>;
2709
+ readonly shouldRenderOverlay: _angular_core.Signal<boolean>;
2710
+ private readonly modalBaseId;
2711
+ readonly modalTitleId: string;
2712
+ readonly modalDescId: string;
2713
+ readonly isScrolled: _angular_core.WritableSignal<boolean>;
2714
+ constructor();
2715
+ ngAfterContentInit(): void;
2716
+ ngAfterViewInit(): void;
2717
+ ngOnDestroy(): void;
2718
+ handleEscape(event: Event): void;
2719
+ close(): void;
2720
+ onBackdropClick(): void;
2721
+ onScroll(event: Event): void;
2722
+ private attachFocusTrap;
2723
+ private destroyFocusTrap;
2724
+ private focusInitialElement;
2725
+ private lockBodyScroll;
2726
+ private unlockBodyScroll;
2727
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsModalComponent, never>;
2728
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsModalComponent, "ds-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, ["projectedIcon"], ["[icon]", "*", "[footer]"], true, never>;
2729
+ }
2730
+
2731
+ declare class DsPopoverComponent {
2732
+ header: _angular_core.InputSignal<string | undefined>;
2733
+ footer: _angular_core.InputSignal<string | undefined>;
2734
+ closeable: _angular_core.InputSignal<boolean>;
2735
+ ariaLabel: _angular_core.InputSignal<string>;
2736
+ close: _angular_core.OutputEmitterRef<void>;
2737
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsPopoverComponent, never>;
2738
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsPopoverComponent, "ds-popover", never, { "header": { "alias": "header"; "required": false; "isSignal": true; }; "footer": { "alias": "footer"; "required": false; "isSignal": true; }; "closeable": { "alias": "closeable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["*"], true, never>;
2739
+ }
2740
+
2741
+ type PopoverTrigger = 'click' | 'hover';
2742
+ declare class DsPopover implements OnDestroy {
2743
+ private elementRef;
2744
+ private overlay;
2745
+ private viewContainerRef;
2746
+ dsPopover: _angular_core.InputSignal<TemplateRef<unknown>>;
2747
+ dsPopoverTrigger: _angular_core.InputSignal<PopoverTrigger>;
2748
+ dsPopoverCloseOnBackdrop: _angular_core.InputSignal<boolean>;
2749
+ private overlayRef;
2750
+ private isOpen;
2751
+ constructor(elementRef: ElementRef, overlay: Overlay, viewContainerRef: ViewContainerRef);
2752
+ onClick(event: Event): void;
2753
+ onMouseEnter(): void;
2754
+ onMouseLeave(): void;
2755
+ onEscape(): void;
2756
+ private toggle;
2757
+ private open;
2758
+ private close;
2759
+ private createOverlay;
2760
+ ngOnDestroy(): void;
2761
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsPopover, never>;
2762
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DsPopover, "[dsPopover]", never, { "dsPopover": { "alias": "dsPopover"; "required": true; "isSignal": true; }; "dsPopoverTrigger": { "alias": "dsPopoverTrigger"; "required": false; "isSignal": true; }; "dsPopoverCloseOnBackdrop": { "alias": "dsPopoverCloseOnBackdrop"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2763
+ }
2764
+
2765
+ /**
2766
+ * Variants de couleur pour la barre de progression.
2767
+ */
2768
+ type ProgressBarVariant = 'default' | 'success' | 'warning' | 'error';
2769
+ /**
2770
+ * Tailles disponibles pour la barre de progression.
2771
+ */
2772
+ type ProgressBarSize = 'sm' | 'md' | 'lg';
2773
+ /**
2774
+ * Mode de la barre de progression.
2775
+ */
2776
+ type ProgressBarMode = 'determinate' | 'indeterminate';
2777
+ /**
2778
+ * # DsProgressBar
2779
+ *
2780
+ * Composant de barre de progression pour indiquer la progression d'une tâche
2781
+ * ou l'état de chargement d'une opération.
2782
+ *
2783
+ * ## Usage
2784
+ *
2785
+ * ```html
2786
+ * <!-- Mode déterminé -->
2787
+ * <ds-progress-bar
2788
+ * [value]="75"
2789
+ * variant="success"
2790
+ * size="md">
2791
+ * </ds-progress-bar>
2792
+ *
2793
+ * <!-- Mode indéterminé -->
2794
+ * <ds-progress-bar
2795
+ * mode="indeterminate"
2796
+ * variant="primary">
2797
+ * </ds-progress-bar>
2798
+ * ```
2799
+ *
2800
+ * ## Accessibilité
2801
+ *
2802
+ * - Utilise `role="progressbar"` avec `aria-valuenow`, `aria-valuemin`, `aria-valuemax`
2803
+ * - Label accessible via `aria-label` ou contenu texte
2804
+ *
2805
+ * @component
2806
+ */
2807
+ declare class DsProgressBar {
2808
+ /**
2809
+ * Valeur de progression (0-100).
2810
+ * @default 0
2811
+ */
2812
+ value: _angular_core.InputSignal<number>;
2813
+ /**
2814
+ * Variant de couleur.
2815
+ * @default 'default'
2816
+ */
2817
+ variant: _angular_core.InputSignal<ProgressBarVariant>;
2818
+ /**
2819
+ * Taille de la barre.
2820
+ * @default 'md'
2821
+ */
2822
+ size: _angular_core.InputSignal<ProgressBarSize>;
2823
+ /**
2824
+ * Mode de progression (déterminé ou indéterminé).
2825
+ * @default 'determinate'
2826
+ */
2827
+ mode: _angular_core.InputSignal<ProgressBarMode>;
2828
+ /**
2829
+ * Afficher le pourcentage en texte.
2830
+ * @default false
2831
+ */
2832
+ showLabel: _angular_core.InputSignal<boolean>;
2833
+ /**
2834
+ * Label accessible pour les lecteurs d'écran.
2835
+ */
2836
+ ariaLabel: _angular_core.InputSignal<string>;
2837
+ /**
2838
+ * Valeur normalisée (0-100) (public pour tests).
2839
+ */
2840
+ readonly normalizedValue: _angular_core.Signal<number>;
2841
+ /**
2842
+ * Classes CSS calculées pour le conteneur (public pour tests).
2843
+ */
2844
+ readonly containerClasses: _angular_core.Signal<string[]>;
2845
+ /**
2846
+ * Style inline pour la progression (public pour tests).
2847
+ */
2848
+ readonly progressStyle: _angular_core.Signal<{
2849
+ width?: undefined;
2850
+ } | {
2851
+ width: string;
2852
+ }>;
2853
+ /**
2854
+ * Label ARIA dynamique (public pour tests).
2855
+ */
2856
+ readonly ariaLabelText: _angular_core.Signal<string>;
2857
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsProgressBar, never>;
2858
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsProgressBar, "ds-progress-bar", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2859
+ }
2860
+
2861
+ /**
2862
+ * Option pour un groupe de radios
2863
+ */
2864
+ interface RadioOption {
2865
+ label: string;
2866
+ value: string;
2867
+ disabled?: boolean;
2868
+ }
2869
+ /**
2870
+ * Layout du groupe de radios
2871
+ */
2872
+ type RadioGroupLayout = 'vertical' | 'horizontal';
2873
+ /**
2874
+ * DS Radio Group
2875
+ *
2876
+ * Composant groupe de radios du design system avec ControlValueAccessor pour formulaires réactifs.
2877
+ * Génère des primitive-radio pour chaque option avec gestion exclusive de la sélection.
2878
+ *
2879
+ * @example
2880
+ * // Formulaire réactif
2881
+ * <ds-radio-group
2882
+ * formControlName="plan"
2883
+ * label="Choisissez votre forfait"
2884
+ * [options]="planOptions"
2885
+ * layout="vertical"
2886
+ * [required]="true"
2887
+ * />
2888
+ *
2889
+ * @example
2890
+ * // Template-driven
2891
+ * <ds-radio-group
2892
+ * [(ngModel)]="selectedPlan"
2893
+ * label="Forfait"
2894
+ * [options]="[
2895
+ * { label: 'Gratuit', value: 'free' },
2896
+ * { label: 'Pro', value: 'pro' },
2897
+ * { label: 'Enterprise', value: 'enterprise' }
2898
+ * ]"
2899
+ * />
2900
+ */
2901
+ declare class DsRadioGroup implements ControlValueAccessor {
2902
+ /**
2903
+ * ID unique du radio group (généré automatiquement)
2904
+ */
2905
+ id: _angular_core.InputSignal<string>;
2906
+ /**
2907
+ * Label principal du groupe
2908
+ */
2909
+ label: _angular_core.InputSignal<string>;
2910
+ /**
2911
+ * Options du groupe de radios
2912
+ */
2913
+ options: _angular_core.InputSignal<RadioOption[]>;
2914
+ /**
2915
+ * Texte d'aide affiché sous le groupe
2916
+ */
2917
+ helper: _angular_core.InputSignal<string | undefined>;
2918
+ /**
2919
+ * Message d'erreur affiché en rouge sous le groupe
2920
+ */
2921
+ error: _angular_core.InputSignal<string | undefined>;
2922
+ /**
2923
+ * Indique si le champ est requis (affiche astérisque sur label)
2924
+ */
2925
+ required: _angular_core.InputSignal<boolean>;
2926
+ /**
2927
+ * État désactivé du groupe (désactive toutes les options)
2928
+ */
2929
+ disabled: _angular_core.InputSignal<boolean>;
2930
+ /**
2931
+ * Taille des radios (sm, md, lg)
2932
+ */
2933
+ size: _angular_core.InputSignal<RadioSize>;
2934
+ /**
2935
+ * Layout du groupe (vertical, horizontal)
2936
+ */
2937
+ layout: _angular_core.InputSignal<RadioGroupLayout>;
2938
+ /**
2939
+ * Nom du groupe (pour formulaires, généré automatiquement)
2940
+ */
2941
+ name: _angular_core.InputSignal<string>;
2942
+ private readonly disabledState;
2943
+ protected readonly internalValue: _angular_core.WritableSignal<string | null>;
2944
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
2945
+ protected readonly errorId: _angular_core.Signal<string | undefined>;
2946
+ protected readonly helperId: _angular_core.Signal<string | undefined>;
2947
+ protected readonly ariaDescribedBy: _angular_core.Signal<string | undefined>;
2948
+ protected readonly hasError: _angular_core.Signal<boolean>;
2949
+ /**
2950
+ * Vérifie si une option est sélectionnée
2951
+ */
2952
+ protected isOptionSelected(value: string): boolean;
2953
+ /**
2954
+ * Vérifie si une option est désactivée
2955
+ */
2956
+ protected isOptionDisabled(option: RadioOption): boolean;
2957
+ private onChange;
2958
+ private onTouched;
2959
+ writeValue(value: string | null): void;
2960
+ registerOnChange(fn: (value: string | null) => void): void;
2961
+ registerOnTouched(fn: () => void): void;
2962
+ setDisabledState(isDisabled: boolean): void;
2963
+ protected onRadioChange(value: string): void;
2964
+ protected trackByValue(_index: number, option: RadioOption): string;
2965
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsRadioGroup, never>;
2966
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsRadioGroup, "ds-radio-group", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2967
+ }
2968
+
2969
+ /**
2970
+ * Variants de skeleton disponibles.
2971
+ */
2972
+ type SkeletonVariant = 'text' | 'circle' | 'rectangle' | 'card';
2973
+ /**
2974
+ * Tailles pour les variants circle et rectangle.
2975
+ */
2976
+ type SkeletonSize = 'sm' | 'md' | 'lg';
2977
+ /**
2978
+ * # DsSkeleton
2979
+ *
2980
+ * Composant de placeholder skeleton pour indiquer le chargement de contenu.
2981
+ * Utilisé pour améliorer l'expérience utilisateur pendant le chargement des données.
2982
+ *
2983
+ * ## Usage
2984
+ *
2985
+ * ```html
2986
+ * <!-- Texte skeleton -->
2987
+ * <ds-skeleton variant="text" [lines]="3"></ds-skeleton>
2988
+ *
2989
+ * <!-- Avatar circle -->
2990
+ * <ds-skeleton variant="circle" size="lg"></ds-skeleton>
2991
+ *
2992
+ * <!-- Image rectangle -->
2993
+ * <ds-skeleton variant="rectangle" [width]="'300px'" [height]="'200px'"></ds-skeleton>
2994
+ *
2995
+ * <!-- Card skeleton -->
2996
+ * <ds-skeleton variant="card"></ds-skeleton>
2997
+ * ```
2998
+ *
2999
+ * ## Accessibilité
3000
+ *
3001
+ * - Utilise `aria-busy="true"` et `aria-live="polite"` pour indiquer le chargement
3002
+ * - Label accessible via `aria-label`
3003
+ *
3004
+ * @component
3005
+ */
3006
+ declare class DsSkeleton {
3007
+ /**
3008
+ * Type de skeleton.
3009
+ * @default 'text'
3010
+ */
3011
+ variant: _angular_core.InputSignal<SkeletonVariant>;
3012
+ /**
3013
+ * Taille (pour circle et rectangle).
3014
+ * @default 'md'
3015
+ */
3016
+ size: _angular_core.InputSignal<SkeletonSize>;
3017
+ /**
3018
+ * Nombre de lignes (pour text).
3019
+ * @default 1
3020
+ */
3021
+ lines: _angular_core.InputSignal<number>;
3022
+ /**
3023
+ * Largeur personnalisée.
3024
+ */
3025
+ width: _angular_core.InputSignal<string>;
3026
+ /**
3027
+ * Hauteur personnalisée.
3028
+ */
3029
+ height: _angular_core.InputSignal<string>;
3030
+ /**
3031
+ * Désactiver l'animation pulse.
3032
+ * @default false
3033
+ */
3034
+ noAnimation: _angular_core.InputSignal<boolean>;
3035
+ /**
3036
+ * Label accessible pour les lecteurs d'écran.
3037
+ * @default 'Chargement en cours...'
3038
+ */
3039
+ ariaLabel: _angular_core.InputSignal<string>;
3040
+ /**
3041
+ * Classes CSS calculées pour le skeleton (public pour tests).
3042
+ */
3043
+ readonly skeletonClasses: _angular_core.Signal<string[]>;
3044
+ /**
3045
+ * Style inline personnalisé (public pour tests).
3046
+ */
3047
+ readonly customStyle: _angular_core.Signal<any>;
3048
+ /**
3049
+ * Génère un tableau pour les lignes de texte (public pour tests).
3050
+ */
3051
+ readonly textLines: _angular_core.Signal<number[]>;
3052
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsSkeleton, never>;
3053
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsSkeleton, "ds-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "noAnimation": { "alias": "noAnimation"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3054
+ }
3055
+
3056
+ interface TabItem {
3057
+ id: string;
3058
+ label: string;
3059
+ disabled?: boolean;
3060
+ icon?: string;
3061
+ }
3062
+ declare class DsTabs {
3063
+ tabs: _angular_core.InputSignal<TabItem[]>;
3064
+ activeTabId: _angular_core.InputSignal<string | undefined>;
3065
+ tabChanged: _angular_core.OutputEmitterRef<TabItem>;
3066
+ protected readonly internalActiveIndex: _angular_core.WritableSignal<number>;
3067
+ /**
3068
+ * Index de l'onglet actif (computed signal basé sur activeTabId ou internalActiveIndex)
3069
+ * Exposé en public pour permettre la vérification dans les tests et pour les consommateurs
3070
+ */
3071
+ readonly activeIndex: _angular_core.Signal<number>;
3072
+ protected readonly activeTab: _angular_core.Signal<TabItem>;
3073
+ protected selectTab(tab: TabItem, index: number): void;
3074
+ protected isTabActive(index: number): boolean;
3075
+ protected onKeydown(event: KeyboardEvent): void;
3076
+ private findNextEnabledTab;
3077
+ private findPreviousEnabledTab;
3078
+ private focusTab;
3079
+ protected trackByTabId(index: number, tab: TabItem): string;
3080
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsTabs, never>;
3081
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsTabs, "ds-tabs", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeTabId": { "alias": "activeTabId"; "required": false; "isSignal": true; }; }, { "tabChanged": "tabChanged"; }, never, ["*"], true, never>;
3082
+ }
3083
+
3084
+ type ToastType = 'success' | 'warning' | 'error' | 'info';
3085
+ type ToastPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
3086
+ interface ToastOptions {
3087
+ message: string;
3088
+ type?: ToastType;
3089
+ duration?: number;
3090
+ closable?: boolean;
3091
+ position?: ToastPosition;
3092
+ actionLabel?: string;
3093
+ onAction?: () => void;
3094
+ pauseOnHover?: boolean;
3095
+ maxStack?: number;
3096
+ }
3097
+ interface ToastInstance {
3098
+ id: string;
3099
+ message: string;
3100
+ type: ToastType;
3101
+ duration: number;
3102
+ closable: boolean;
3103
+ position: ToastPosition;
3104
+ actionLabel?: string;
3105
+ onAction?: () => void;
3106
+ pauseOnHover: boolean;
3107
+ }
3108
+ declare class DsToastService {
3109
+ private readonly toastsSignal;
3110
+ private readonly timers;
3111
+ private readonly defaultMaxStack;
3112
+ private readonly destroyRef;
3113
+ constructor();
3114
+ readonly toasts: _angular_core.Signal<ToastInstance[]>;
3115
+ show(options: ToastOptions): string;
3116
+ dismiss(id: string): void;
3117
+ clear(position?: ToastPosition): void;
3118
+ triggerAction(id: string): void;
3119
+ private clearTimers;
3120
+ private clearTimer;
3121
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsToastService, never>;
3122
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsToastService>;
3123
+ }
3124
+
3125
+ declare class DsToastContainerComponent {
3126
+ private readonly toastService;
3127
+ protected readonly positions: ToastPosition[];
3128
+ protected readonly groupedToasts: _angular_core.Signal<Record<ToastPosition, ToastInstance[]>>;
3129
+ dismiss(id: string): void;
3130
+ handleAction(toast: ToastInstance): void;
3131
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsToastContainerComponent, never>;
3132
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsToastContainerComponent, "ds-toast-container", never, {}, {}, never, never, true, never>;
3133
+ }
3134
+
3135
+ declare class DsToastComponent {
3136
+ message: _angular_core.InputSignal<string>;
3137
+ type: _angular_core.InputSignal<ToastType>;
3138
+ duration: _angular_core.InputSignal<number>;
3139
+ closable: _angular_core.InputSignal<boolean>;
3140
+ position: _angular_core.InputSignal<ToastPosition>;
3141
+ actionLabel: _angular_core.InputSignal<string | undefined>;
3142
+ pauseOnHover: _angular_core.InputSignal<boolean>;
3143
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3144
+ readonly action: _angular_core.OutputEmitterRef<void>;
3145
+ private readonly destroyRef;
3146
+ private timerHandle;
3147
+ private readonly isPaused;
3148
+ private readonly icons;
3149
+ readonly currentIcon: _angular_core.Signal<IconDefinition$1>;
3150
+ private readonly autoDismissEffect;
3151
+ constructor();
3152
+ close(): void;
3153
+ onMouseEnter(): void;
3154
+ onMouseLeave(): void;
3155
+ handleAction(): void;
3156
+ protected readonly faClose: IconDefinition$1;
3157
+ private clearTimer;
3158
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsToastComponent, never>;
3159
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsToastComponent, "ds-toast", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "pauseOnHover": { "alias": "pauseOnHover"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "action": "action"; }, never, never, true, never>;
3160
+ }
3161
+
3162
+ /**
3163
+ * DS Toggle (Switch)
3164
+ *
3165
+ * Composant toggle/switch du design system avec ControlValueAccessor pour formulaires réactifs.
3166
+ * Encapsule primitive-toggle avec gestion label inline, helper et validation visuelle.
3167
+ *
3168
+ * @example
3169
+ * // Formulaire réactif
3170
+ * <ds-toggle
3171
+ * formControlName="notifications"
3172
+ * label="Activer les notifications"
3173
+ * helper="Vous recevrez des alertes email"
3174
+ * />
3175
+ *
3176
+ * @example
3177
+ * // Template-driven
3178
+ * <ds-toggle
3179
+ * [(ngModel)]="notificationsEnabled"
3180
+ * label="Notifications"
3181
+ * labelPosition="left"
3182
+ * />
3183
+ */
3184
+ declare class DsToggle implements ControlValueAccessor {
3185
+ /**
3186
+ * ID unique du toggle (généré automatiquement)
3187
+ */
3188
+ id: _angular_core.InputSignal<string>;
3189
+ /**
3190
+ * Label affiché à côté du toggle
3191
+ */
3192
+ label: _angular_core.InputSignal<string>;
3193
+ /**
3194
+ * Position du label (left, right)
3195
+ */
3196
+ labelPosition: _angular_core.InputSignal<"left" | "right">;
3197
+ /**
3198
+ * Texte d'aide affiché sous le toggle
3199
+ */
3200
+ helper: _angular_core.InputSignal<string | undefined>;
3201
+ /**
3202
+ * État désactivé du toggle
3203
+ */
3204
+ disabled: _angular_core.InputSignal<boolean>;
3205
+ /**
3206
+ * Taille du toggle (sm, md, lg)
3207
+ */
3208
+ size: _angular_core.InputSignal<ToggleSize>;
3209
+ /**
3210
+ * Nom du contrôle (pour formulaires)
3211
+ */
3212
+ name: _angular_core.InputSignal<string | undefined>;
3213
+ private readonly disabledState;
3214
+ protected readonly internalValue: _angular_core.WritableSignal<boolean>;
3215
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
3216
+ protected readonly helperId: _angular_core.Signal<string | undefined>;
3217
+ private onChange;
3218
+ private onTouched;
3219
+ writeValue(value: boolean | null): void;
3220
+ registerOnChange(fn: (value: boolean) => void): void;
3221
+ registerOnTouched(fn: () => void): void;
3222
+ setDisabledState(isDisabled: boolean): void;
3223
+ protected onCheckedChange(checked: boolean): void;
3224
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsToggle, never>;
3225
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsToggle, "ds-toggle", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3226
+ }
3227
+
3228
+ declare class DsTooltipComponent {
3229
+ text: _angular_core.InputSignal<string>;
3230
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsTooltipComponent, never>;
3231
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsTooltipComponent, "ds-tooltip", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
3232
+ }
3233
+
3234
+ declare class DsTooltip implements OnDestroy {
3235
+ private elementRef;
3236
+ private overlay;
3237
+ private viewContainerRef;
3238
+ private injector;
3239
+ dsTooltip: _angular_core.InputSignal<string>;
3240
+ private overlayRef;
3241
+ private tooltipComponentRef;
3242
+ private hideTimeout;
3243
+ constructor(elementRef: ElementRef, overlay: Overlay, viewContainerRef: ViewContainerRef, injector: Injector);
3244
+ onMouseEnter(): void;
3245
+ onMouseLeave(): void;
3246
+ onFocus(): void;
3247
+ onBlur(): void;
3248
+ private show;
3249
+ private hide;
3250
+ private hideWithDelay;
3251
+ private clearHideTimeout;
3252
+ private createOverlay;
3253
+ ngOnDestroy(): void;
3254
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsTooltip, never>;
3255
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DsTooltip, "[dsTooltip]", never, { "dsTooltip": { "alias": "dsTooltip"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
3256
+ }
3257
+
3258
+ /**
3259
+ * Taille de l'accordion.
3260
+ */
3261
+ type AccordionSize = 'sm' | 'md' | 'lg';
3262
+ /**
3263
+ * Variant de style de l'accordion.
3264
+ */
3265
+ type AccordionVariant = 'default' | 'bordered' | 'separated';
3266
+ /**
3267
+ * Configuration d'un item d'accordion.
3268
+ */
3269
+ interface AccordionItem {
3270
+ id: string;
3271
+ header: string;
3272
+ content: string;
3273
+ disabled?: boolean;
3274
+ }
3275
+ /**
3276
+ * Événement émis lors du changement d'état d'un item.
3277
+ */
3278
+ interface AccordionChangeEvent {
3279
+ itemId: string;
3280
+ expanded: boolean;
3281
+ expandedItems: string[];
3282
+ }
3283
+ /**
3284
+ * # DsAccordion
3285
+ *
3286
+ * Composant accordion pour afficher/masquer des sections de contenu.
3287
+ *
3288
+ * ## Usage
3289
+ *
3290
+ * ```html
3291
+ * <ds-accordion
3292
+ * [items]="items"
3293
+ * [multiple]="false"
3294
+ * (itemChange)="onItemChange($event)">
3295
+ * </ds-accordion>
3296
+ * ```
3297
+ *
3298
+ * ## Accessibilité
3299
+ *
3300
+ * - Headers avec `role="button"` et `aria-expanded`
3301
+ * - Contenu avec `role="region"` et `aria-labelledby`
3302
+ * - Navigation clavier : Enter/Space pour toggle, ArrowUp/Down pour navigation
3303
+ *
3304
+ * @component
3305
+ */
3306
+ declare class DsAccordion {
3307
+ readonly faChevronDown: _fortawesome_fontawesome_common_types.IconDefinition;
3308
+ /**
3309
+ * Liste des items de l'accordion.
3310
+ */
3311
+ items: _angular_core.InputSignal<AccordionItem[]>;
3312
+ /**
3313
+ * Permettre l'expansion de plusieurs items simultanément.
3314
+ * @default false
3315
+ */
3316
+ multiple: _angular_core.InputSignal<boolean>;
3317
+ /**
3318
+ * Taille du composant.
3319
+ * @default 'md'
3320
+ */
3321
+ size: _angular_core.InputSignal<AccordionSize>;
3322
+ /**
3323
+ * Variant de style.
3324
+ * @default 'default'
3325
+ */
3326
+ variant: _angular_core.InputSignal<AccordionVariant>;
3327
+ /**
3328
+ * IDs des items initialement ouverts.
3329
+ * @default []
3330
+ */
3331
+ expandedIds: _angular_core.InputSignal<string[]>;
3332
+ /**
3333
+ * Désactiver tout l'accordion.
3334
+ * @default false
3335
+ */
3336
+ disabled: _angular_core.InputSignal<boolean>;
3337
+ /**
3338
+ * Événement émis lors du changement d'état d'un item.
3339
+ */
3340
+ itemChange: _angular_core.OutputEmitterRef<AccordionChangeEvent>;
3341
+ /**
3342
+ * État interne des items ouverts.
3343
+ */
3344
+ private readonly _expandedIds;
3345
+ /**
3346
+ * Initialiser les items ouverts à partir de l'input.
3347
+ */
3348
+ constructor();
3349
+ /**
3350
+ * IDs des items actuellement ouverts.
3351
+ */
3352
+ readonly currentExpandedIds: _angular_core.Signal<Set<string>>;
3353
+ /**
3354
+ * Vérifier si un item est ouvert.
3355
+ */
3356
+ isExpanded(itemId: string): boolean;
3357
+ /**
3358
+ * Toggle un item.
3359
+ */
3360
+ toggleItem(item: AccordionItem): void;
3361
+ /**
3362
+ * Ouvrir tous les items.
3363
+ */
3364
+ expandAll(): void;
3365
+ /**
3366
+ * Fermer tous les items.
3367
+ */
3368
+ collapseAll(): void;
3369
+ /**
3370
+ * Gestion du clavier.
3371
+ */
3372
+ onKeydown(event: KeyboardEvent, item: AccordionItem, index: number): void;
3373
+ /**
3374
+ * Focus sur un item par index.
3375
+ */
3376
+ private focusItem;
3377
+ /**
3378
+ * Classes CSS du conteneur.
3379
+ */
3380
+ readonly containerClasses: _angular_core.Signal<string[]>;
3381
+ /**
3382
+ * Classes CSS pour un item.
3383
+ */
3384
+ getItemClasses(item: AccordionItem): string[];
3385
+ /**
3386
+ * ID unique pour le header.
3387
+ */
3388
+ getHeaderId(item: AccordionItem): string;
3389
+ /**
3390
+ * ID unique pour le contenu.
3391
+ */
3392
+ getContentId(item: AccordionItem): string;
3393
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsAccordion, never>;
3394
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsAccordion, "ds-accordion", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "itemChange": "itemChange"; }, never, never, true, never>;
3395
+ }
3396
+
3397
+ /**
3398
+ * Tailles disponibles pour la pagination.
3399
+ */
3400
+ type PaginationSize = 'sm' | 'md' | 'lg';
3401
+ /**
3402
+ * Options de taille de page disponibles.
3403
+ */
3404
+ type PageSizeOption = number;
3405
+ /**
3406
+ * Événement émis lors du changement de page.
3407
+ */
3408
+ interface PageChangeEvent {
3409
+ page: number;
3410
+ pageSize: number;
3411
+ totalItems: number;
3412
+ totalPages: number;
3413
+ }
3414
+ /**
3415
+ * # DsPagination
3416
+ *
3417
+ * Composant de pagination pour naviguer entre les pages d'un ensemble de données.
3418
+ *
3419
+ * ## Usage
3420
+ *
3421
+ * ```html
3422
+ * <ds-pagination
3423
+ * [totalItems]="100"
3424
+ * [pageSize]="10"
3425
+ * [currentPage]="1"
3426
+ * [showFirstLast]="true"
3427
+ * [showPageSizeSelector]="true"
3428
+ * (pageChange)="onPageChange($event)">
3429
+ * </ds-pagination>
3430
+ * ```
3431
+ *
3432
+ * ## Accessibilité
3433
+ *
3434
+ * - Utilise `role="navigation"` avec `aria-label`
3435
+ * - Boutons avec `aria-label` descriptifs
3436
+ * - Page courante indiquée par `aria-current="page"`
3437
+ * - Navigation clavier complète (Tab, Enter, Space)
3438
+ *
3439
+ * @component
3440
+ */
3441
+ declare class DsPagination {
3442
+ readonly faChevronLeft: _fortawesome_fontawesome_common_types.IconDefinition;
3443
+ readonly faChevronRight: _fortawesome_fontawesome_common_types.IconDefinition;
3444
+ readonly faAnglesLeft: _fortawesome_fontawesome_common_types.IconDefinition;
3445
+ readonly faAnglesRight: _fortawesome_fontawesome_common_types.IconDefinition;
3446
+ /**
3447
+ * Nombre total d'éléments.
3448
+ */
3449
+ totalItems: _angular_core.InputSignal<number>;
3450
+ /**
3451
+ * Nombre d'éléments par page.
3452
+ * @default 10
3453
+ */
3454
+ pageSize: _angular_core.InputSignal<number>;
3455
+ /**
3456
+ * Page courante (1-indexed).
3457
+ * @default 1
3458
+ */
3459
+ currentPage: _angular_core.InputSignal<number>;
3460
+ /**
3461
+ * Taille du composant.
3462
+ * @default 'md'
3463
+ */
3464
+ size: _angular_core.InputSignal<PaginationSize>;
3465
+ /**
3466
+ * Afficher les boutons première/dernière page.
3467
+ * @default true
3468
+ */
3469
+ showFirstLast: _angular_core.InputSignal<boolean>;
3470
+ /**
3471
+ * Afficher le sélecteur de taille de page.
3472
+ * @default false
3473
+ */
3474
+ showPageSizeSelector: _angular_core.InputSignal<boolean>;
3475
+ /**
3476
+ * Options de taille de page disponibles.
3477
+ * @default [10, 25, 50, 100]
3478
+ */
3479
+ pageSizeOptions: _angular_core.InputSignal<number[]>;
3480
+ /**
3481
+ * Nombre maximum de pages affichées dans la navigation.
3482
+ * @default 5
3483
+ */
3484
+ maxVisiblePages: _angular_core.InputSignal<number>;
3485
+ /**
3486
+ * Afficher les informations "X - Y sur Z".
3487
+ * @default true
3488
+ */
3489
+ showInfo: _angular_core.InputSignal<boolean>;
3490
+ /**
3491
+ * Désactiver le composant.
3492
+ * @default false
3493
+ */
3494
+ disabled: _angular_core.InputSignal<boolean>;
3495
+ /**
3496
+ * Label ARIA pour la navigation.
3497
+ * @default 'Pagination'
3498
+ */
3499
+ ariaLabel: _angular_core.InputSignal<string>;
3500
+ /**
3501
+ * Événement émis lors du changement de page.
3502
+ */
3503
+ pageChange: _angular_core.OutputEmitterRef<PageChangeEvent>;
3504
+ /**
3505
+ * Événement émis lors du changement de taille de page.
3506
+ */
3507
+ pageSizeChange: _angular_core.OutputEmitterRef<number>;
3508
+ /**
3509
+ * Calcul du nombre total de pages.
3510
+ */
3511
+ readonly totalPages: _angular_core.Signal<number>;
3512
+ /**
3513
+ * Page courante normalisée (entre 1 et totalPages).
3514
+ */
3515
+ readonly normalizedCurrentPage: _angular_core.Signal<number>;
3516
+ /**
3517
+ * Premier élément affiché (1-indexed).
3518
+ */
3519
+ readonly startItem: _angular_core.Signal<number>;
3520
+ /**
3521
+ * Dernier élément affiché.
3522
+ */
3523
+ readonly endItem: _angular_core.Signal<number>;
3524
+ /**
3525
+ * Peut aller à la page précédente.
3526
+ */
3527
+ readonly canGoPrevious: _angular_core.Signal<boolean>;
3528
+ /**
3529
+ * Peut aller à la page suivante.
3530
+ */
3531
+ readonly canGoNext: _angular_core.Signal<boolean>;
3532
+ /**
3533
+ * Pages visibles dans la navigation.
3534
+ */
3535
+ readonly visiblePages: _angular_core.Signal<number[]>;
3536
+ /**
3537
+ * Afficher les ellipses au début.
3538
+ */
3539
+ readonly showStartEllipsis: _angular_core.Signal<boolean>;
3540
+ /**
3541
+ * Afficher les ellipses à la fin.
3542
+ */
3543
+ readonly showEndEllipsis: _angular_core.Signal<boolean>;
3544
+ /**
3545
+ * Classes CSS du conteneur.
3546
+ */
3547
+ readonly containerClasses: _angular_core.Signal<string[]>;
3548
+ /**
3549
+ * Aller à une page spécifique.
3550
+ */
3551
+ goToPage(page: number): void;
3552
+ /**
3553
+ * Aller à la première page.
3554
+ */
3555
+ goToFirst(): void;
3556
+ /**
3557
+ * Aller à la dernière page.
3558
+ */
3559
+ goToLast(): void;
3560
+ /**
3561
+ * Aller à la page précédente.
3562
+ */
3563
+ goToPrevious(): void;
3564
+ /**
3565
+ * Aller à la page suivante.
3566
+ */
3567
+ goToNext(): void;
3568
+ /**
3569
+ * Changer la taille de page.
3570
+ */
3571
+ onPageSizeChange(event: Event): void;
3572
+ /**
3573
+ * Émettre l'événement de changement de page.
3574
+ */
3575
+ private emitPageChange;
3576
+ /**
3577
+ * Gestion du clavier sur les boutons de page.
3578
+ */
3579
+ onPageKeydown(event: KeyboardEvent, page: number): void;
3580
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsPagination, never>;
3581
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsPagination, "ds-pagination", never, { "totalItems": { "alias": "totalItems"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showFirstLast": { "alias": "showFirstLast"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "maxVisiblePages": { "alias": "maxVisiblePages"; "required": false; "isSignal": true; }; "showInfo": { "alias": "showInfo"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, never>;
3582
+ }
3583
+
3584
+ /**
3585
+ * Orientation du stepper.
3586
+ */
3587
+ type StepperOrientation = 'horizontal' | 'vertical';
3588
+ /**
3589
+ * État d'une étape.
3590
+ */
3591
+ type StepState = 'pending' | 'active' | 'completed' | 'error';
3592
+ /**
3593
+ * Taille du stepper.
3594
+ */
3595
+ type StepperSize = 'sm' | 'md' | 'lg';
3596
+ /**
3597
+ * Configuration d'une étape.
3598
+ */
3599
+ interface Step {
3600
+ label: string;
3601
+ description?: string;
3602
+ state?: StepState;
3603
+ disabled?: boolean;
3604
+ optional?: boolean;
3605
+ }
3606
+ /**
3607
+ * Événement émis lors du changement d'étape.
3608
+ */
3609
+ interface StepChangeEvent {
3610
+ previousIndex: number;
3611
+ currentIndex: number;
3612
+ step: Step;
3613
+ }
3614
+ /**
3615
+ * # DsStepper
3616
+ *
3617
+ * Composant de stepper pour guider l'utilisateur à travers un processus multi-étapes.
3618
+ *
3619
+ * ## Usage
3620
+ *
3621
+ * ```html
3622
+ * <ds-stepper
3623
+ * [steps]="steps"
3624
+ * [activeStep]="0"
3625
+ * [orientation]="'horizontal'"
3626
+ * (stepChange)="onStepChange($event)">
3627
+ * </ds-stepper>
3628
+ * ```
3629
+ *
3630
+ * ## Accessibilité
3631
+ *
3632
+ * - Utilise `role="tablist"` avec `aria-orientation`
3633
+ * - Chaque étape utilise `role="tab"` avec `aria-selected`
3634
+ * - Navigation clavier : ArrowLeft/Right (horizontal), ArrowUp/Down (vertical)
3635
+ * - Indicateurs d'état visuels et sémantiques
3636
+ *
3637
+ * @component
3638
+ */
3639
+ declare class DsStepper {
3640
+ readonly faCheck: _fortawesome_fontawesome_common_types.IconDefinition;
3641
+ readonly faExclamationTriangle: _fortawesome_fontawesome_common_types.IconDefinition;
3642
+ /**
3643
+ * Liste des étapes.
3644
+ */
3645
+ steps: _angular_core.InputSignal<Step[]>;
3646
+ /**
3647
+ * Index de l'étape active (0-indexed).
3648
+ * @default 0
3649
+ */
3650
+ activeStep: _angular_core.InputSignal<number>;
3651
+ /**
3652
+ * Orientation du stepper.
3653
+ * @default 'horizontal'
3654
+ */
3655
+ orientation: _angular_core.InputSignal<StepperOrientation>;
3656
+ /**
3657
+ * Taille du stepper.
3658
+ * @default 'md'
3659
+ */
3660
+ size: _angular_core.InputSignal<StepperSize>;
3661
+ /**
3662
+ * Permettre la navigation en cliquant sur les étapes.
3663
+ * @default true
3664
+ */
3665
+ clickable: _angular_core.InputSignal<boolean>;
3666
+ /**
3667
+ * Navigation linéaire (doit compléter chaque étape dans l'ordre).
3668
+ * @default false
3669
+ */
3670
+ linear: _angular_core.InputSignal<boolean>;
3671
+ /**
3672
+ * Afficher les descriptions.
3673
+ * @default true
3674
+ */
3675
+ showDescriptions: _angular_core.InputSignal<boolean>;
3676
+ /**
3677
+ * Afficher le connecteur entre les étapes.
3678
+ * @default true
3679
+ */
3680
+ showConnector: _angular_core.InputSignal<boolean>;
3681
+ /**
3682
+ * Événement émis lors du changement d'étape.
3683
+ */
3684
+ stepChange: _angular_core.OutputEmitterRef<StepChangeEvent>;
3685
+ /**
3686
+ * Index actif normalisé.
3687
+ */
3688
+ readonly normalizedActiveStep: _angular_core.Signal<number>;
3689
+ /**
3690
+ * Classes CSS du conteneur.
3691
+ */
3692
+ readonly containerClasses: _angular_core.Signal<string[]>;
3693
+ /**
3694
+ * Obtenir l'état d'une étape.
3695
+ */
3696
+ getStepState(step: Step, index: number): StepState;
3697
+ /**
3698
+ * Vérifie si une étape est navigable.
3699
+ */
3700
+ isStepClickable(step: Step, index: number): boolean;
3701
+ /**
3702
+ * Naviguer vers une étape.
3703
+ */
3704
+ goToStep(index: number): void;
3705
+ /**
3706
+ * Aller à l'étape suivante.
3707
+ */
3708
+ next(): void;
3709
+ /**
3710
+ * Aller à l'étape précédente.
3711
+ */
3712
+ previous(): void;
3713
+ /**
3714
+ * Gestion du clavier.
3715
+ */
3716
+ onKeydown(event: KeyboardEvent, index: number): void;
3717
+ /**
3718
+ * Classes CSS pour une étape.
3719
+ */
3720
+ getStepClasses(step: Step, index: number): string[];
3721
+ /**
3722
+ * Label ARIA pour une étape.
3723
+ */
3724
+ getStepAriaLabel(step: Step, index: number): string;
3725
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsStepper, never>;
3726
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsStepper, "ds-stepper", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "activeStep": { "alias": "activeStep"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "showDescriptions": { "alias": "showDescriptions"; "required": false; "isSignal": true; }; "showConnector": { "alias": "showConnector"; "required": false; "isSignal": true; }; }, { "stepChange": "stepChange"; }, never, never, true, never>;
3727
+ }
3728
+
3729
+ interface DsSelectOption {
3730
+ value: string | number;
3731
+ label: string;
3732
+ disabled?: boolean;
3733
+ }
3734
+ type DsSelectSize = 'sm' | 'md' | 'lg';
3735
+ declare class DsSelect implements ControlValueAccessor {
3736
+ readonly options: _angular_core.InputSignal<DsSelectOption[]>;
3737
+ readonly placeholder: _angular_core.InputSignal<string>;
3738
+ readonly size: _angular_core.InputSignal<DsSelectSize>;
3739
+ readonly disabled: _angular_core.InputSignal<boolean>;
3740
+ readonly error: _angular_core.InputSignal<string>;
3741
+ readonly helper: _angular_core.InputSignal<string>;
3742
+ readonly label: _angular_core.InputSignal<string>;
3743
+ readonly name: _angular_core.InputSignal<string>;
3744
+ readonly required: _angular_core.InputSignal<boolean>;
3745
+ readonly clearable: _angular_core.InputSignal<boolean>;
3746
+ readonly searchable: _angular_core.InputSignal<boolean>;
3747
+ readonly selectionChange: _angular_core.OutputEmitterRef<DsSelectOption | null>;
3748
+ readonly opened: _angular_core.OutputEmitterRef<void>;
3749
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3750
+ protected readonly isOpen: _angular_core.WritableSignal<boolean>;
3751
+ protected readonly searchQuery: _angular_core.WritableSignal<string>;
3752
+ protected readonly focusedIndex: _angular_core.WritableSignal<number>;
3753
+ private readonly internalValue;
3754
+ private readonly cvaDisabled;
3755
+ selectTrigger: ElementRef<HTMLButtonElement>;
3756
+ searchInput: ElementRef<HTMLInputElement>;
3757
+ listbox: ElementRef<HTMLUListElement>;
3758
+ private onChange;
3759
+ private onTouched;
3760
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
3761
+ protected readonly selectedOption: _angular_core.Signal<DsSelectOption | null>;
3762
+ protected readonly displayValue: _angular_core.Signal<string>;
3763
+ protected readonly filteredOptions: _angular_core.Signal<DsSelectOption[]>;
3764
+ protected readonly containerClasses: _angular_core.Signal<{
3765
+ [x: string]: boolean;
3766
+ 'ds-select': boolean;
3767
+ 'ds-select--open': boolean;
3768
+ 'ds-select--disabled': boolean;
3769
+ 'ds-select--error': boolean;
3770
+ }>;
3771
+ protected readonly triggerClasses: _angular_core.Signal<{
3772
+ 'ds-select__trigger': boolean;
3773
+ 'ds-select__trigger--placeholder': boolean;
3774
+ }>;
3775
+ writeValue(value: string | number | null): void;
3776
+ registerOnChange(fn: (value: string | number | null) => void): void;
3777
+ registerOnTouched(fn: () => void): void;
3778
+ setDisabledState(isDisabled: boolean): void;
3779
+ toggle(): void;
3780
+ open(): void;
3781
+ close(): void;
3782
+ selectOption(option: DsSelectOption): void;
3783
+ clear(event: Event): void;
3784
+ onSearchInput(event: Event): void;
3785
+ onKeyDown(event: KeyboardEvent): void;
3786
+ onDocumentClick(event: Event): void;
3787
+ private moveFocus;
3788
+ private getSelectedIndex;
3789
+ protected isOptionFocused(index: number): boolean;
3790
+ protected isOptionSelected(option: DsSelectOption): boolean;
3791
+ protected getOptionId(index: number): string;
3792
+ protected readonly listboxId: _angular_core.Signal<string>;
3793
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsSelect, never>;
3794
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsSelect, "ds-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
3795
+ }
3796
+
3797
+ interface DsTableColumn<T = Record<string, unknown>> {
3798
+ key: keyof T | string;
3799
+ label: string;
3800
+ sortable?: boolean;
3801
+ filterable?: boolean;
3802
+ width?: string;
3803
+ align?: 'left' | 'center' | 'right';
3804
+ cellClass?: string;
3805
+ headerClass?: string;
3806
+ format?: (value: unknown, row: T) => string;
3807
+ }
3808
+ type DsTableSize = 'sm' | 'md' | 'lg';
3809
+ type DsTableVariant = 'default' | 'striped' | 'bordered';
3810
+ type SortDirection = 'asc' | 'desc' | null;
3811
+ interface SortEvent {
3812
+ column: string;
3813
+ direction: SortDirection;
3814
+ }
3815
+ interface TableState {
3816
+ sortColumn: string | null;
3817
+ sortDirection: SortDirection;
3818
+ filters: Record<string, string>;
3819
+ }
3820
+ declare class DsTable<T extends Record<string, unknown> = Record<string, unknown>> {
3821
+ readonly data: _angular_core.InputSignal<T[]>;
3822
+ readonly columns: _angular_core.InputSignal<DsTableColumn<T>[]>;
3823
+ readonly size: _angular_core.InputSignal<DsTableSize>;
3824
+ readonly variant: _angular_core.InputSignal<DsTableVariant>;
3825
+ readonly selectable: _angular_core.InputSignal<boolean>;
3826
+ readonly hoverable: _angular_core.InputSignal<boolean>;
3827
+ readonly loading: _angular_core.InputSignal<boolean>;
3828
+ readonly emptyText: _angular_core.InputSignal<string>;
3829
+ readonly showHeader: _angular_core.InputSignal<boolean>;
3830
+ readonly stickyHeader: _angular_core.InputSignal<boolean>;
3831
+ readonly trackBy: _angular_core.InputSignal<TrackByFunction<T>>;
3832
+ readonly sortChange: _angular_core.OutputEmitterRef<SortEvent>;
3833
+ readonly rowClick: _angular_core.OutputEmitterRef<{
3834
+ row: T;
3835
+ index: number;
3836
+ }>;
3837
+ readonly selectionChange: _angular_core.OutputEmitterRef<T[]>;
3838
+ protected readonly sortColumn: _angular_core.WritableSignal<string | null>;
3839
+ protected readonly sortDirection: _angular_core.WritableSignal<SortDirection>;
3840
+ protected readonly selectedRows: _angular_core.WritableSignal<Set<number>>;
3841
+ protected readonly filters: _angular_core.WritableSignal<Record<string, string>>;
3842
+ protected readonly containerClasses: _angular_core.Signal<{
3843
+ [x: string]: boolean;
3844
+ 'ds-table': boolean;
3845
+ 'ds-table--selectable': boolean;
3846
+ 'ds-table--hoverable': boolean;
3847
+ 'ds-table--loading': boolean;
3848
+ 'ds-table--sticky-header': boolean;
3849
+ }>;
3850
+ protected readonly processedData: _angular_core.Signal<T[]>;
3851
+ protected readonly isAllSelected: _angular_core.Signal<boolean>;
3852
+ protected readonly isPartiallySelected: _angular_core.Signal<boolean>;
3853
+ getCellValue(row: T, key: string): unknown;
3854
+ formatCellValue(row: T, column: DsTableColumn<T>): string;
3855
+ onSort(column: DsTableColumn<T>): void;
3856
+ onRowClick(row: T, index: number): void;
3857
+ toggleRowSelection(index: number, event: Event): void;
3858
+ toggleAllSelection(event: Event): void;
3859
+ isRowSelected(index: number): boolean;
3860
+ setFilter(column: string, value: string): void;
3861
+ clearFilters(): void;
3862
+ getSelectedRows(): T[];
3863
+ getSortIcon(column: DsTableColumn<T>): string;
3864
+ getColumnStyle(column: DsTableColumn<T>): Record<string, string>;
3865
+ private emitSelectionChange;
3866
+ trackByFn: TrackByFunction<T>;
3867
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsTable<any>, never>;
3868
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsTable<any>, "ds-table", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "rowClick": "rowClick"; "selectionChange": "selectionChange"; }, never, never, true, never>;
3869
+ }
3870
+
3871
+ interface DsComboboxOption {
3872
+ value: string | number;
3873
+ label: string;
3874
+ disabled?: boolean;
3875
+ description?: string;
3876
+ }
3877
+ type DsComboboxSize = 'sm' | 'md' | 'lg';
3878
+ declare class DsCombobox implements ControlValueAccessor {
3879
+ readonly options: _angular_core.InputSignal<DsComboboxOption[]>;
3880
+ readonly placeholder: _angular_core.InputSignal<string>;
3881
+ readonly size: _angular_core.InputSignal<DsComboboxSize>;
3882
+ readonly disabled: _angular_core.InputSignal<boolean>;
3883
+ readonly error: _angular_core.InputSignal<string>;
3884
+ readonly helper: _angular_core.InputSignal<string>;
3885
+ readonly label: _angular_core.InputSignal<string>;
3886
+ readonly name: _angular_core.InputSignal<string>;
3887
+ readonly required: _angular_core.InputSignal<boolean>;
3888
+ readonly clearable: _angular_core.InputSignal<boolean>;
3889
+ readonly allowCustom: _angular_core.InputSignal<boolean>;
3890
+ readonly minChars: _angular_core.InputSignal<number>;
3891
+ readonly maxResults: _angular_core.InputSignal<number>;
3892
+ readonly noResultsText: _angular_core.InputSignal<string>;
3893
+ readonly loadingText: _angular_core.InputSignal<string>;
3894
+ readonly loading: _angular_core.InputSignal<boolean>;
3895
+ readonly selectionChange: _angular_core.OutputEmitterRef<DsComboboxOption | null>;
3896
+ readonly inputChange: _angular_core.OutputEmitterRef<string>;
3897
+ readonly opened: _angular_core.OutputEmitterRef<void>;
3898
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3899
+ protected readonly isOpen: _angular_core.WritableSignal<boolean>;
3900
+ protected readonly inputValue: _angular_core.WritableSignal<string>;
3901
+ protected readonly focusedIndex: _angular_core.WritableSignal<number>;
3902
+ private readonly internalValue;
3903
+ private readonly cvaDisabled;
3904
+ inputElement: ElementRef<HTMLInputElement>;
3905
+ listbox: ElementRef<HTMLUListElement>;
3906
+ private onChange;
3907
+ private onTouched;
3908
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
3909
+ protected readonly selectedOption: _angular_core.Signal<DsComboboxOption | null>;
3910
+ protected readonly filteredOptions: _angular_core.Signal<DsComboboxOption[]>;
3911
+ protected readonly shouldShowDropdown: _angular_core.Signal<boolean>;
3912
+ protected readonly containerClasses: _angular_core.Signal<{
3913
+ [x: string]: boolean;
3914
+ 'ds-combobox': boolean;
3915
+ 'ds-combobox--open': boolean;
3916
+ 'ds-combobox--disabled': boolean;
3917
+ 'ds-combobox--error': boolean;
3918
+ }>;
3919
+ protected readonly inputClasses: _angular_core.Signal<{
3920
+ 'ds-combobox__input': boolean;
3921
+ 'ds-combobox__input--has-value': boolean;
3922
+ }>;
3923
+ writeValue(value: string | number | null): void;
3924
+ registerOnChange(fn: (value: string | number | null) => void): void;
3925
+ registerOnTouched(fn: () => void): void;
3926
+ setDisabledState(isDisabled: boolean): void;
3927
+ onInputFocus(): void;
3928
+ onInputBlur(): void;
3929
+ onInput(event: Event): void;
3930
+ open(): void;
3931
+ close(): void;
3932
+ selectOption(option: DsComboboxOption): void;
3933
+ clear(event: Event): void;
3934
+ onKeyDown(event: KeyboardEvent): void;
3935
+ private moveFocus;
3936
+ protected isOptionFocused(index: number): boolean;
3937
+ protected isOptionSelected(option: DsComboboxOption): boolean;
3938
+ protected getOptionId(index: number): string;
3939
+ protected readonly listboxId: _angular_core.Signal<string>;
3940
+ protected readonly inputId: _angular_core.Signal<string>;
3941
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsCombobox, never>;
3942
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsCombobox, "ds-combobox", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "allowCustom": { "alias": "allowCustom"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "maxResults": { "alias": "maxResults"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "inputChange": "inputChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
3943
+ }
3944
+
3945
+ type ContainerMaxWidth = 'fluid' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
3946
+ type ContainerGutter = 'none' | 'sm' | 'md' | 'lg';
3947
+ /**
3948
+ * DsContainer - Composant de layout responsive
3949
+ *
3950
+ * @description
3951
+ * Conteneur responsive avec max-width configurable, centrage automatique
3952
+ * et gutters (padding horizontal) adaptatifs.
3953
+ *
3954
+ * @example
3955
+ * ```html
3956
+ * <ds-container maxWidth="lg" gutter="md">
3957
+ * <p>Contenu centré avec max-width 960px</p>
3958
+ * </ds-container>
3959
+ * ```
3960
+ */
3961
+ declare class DsContainer {
3962
+ /**
3963
+ * Largeur maximale du conteneur
3964
+ * - fluid: 100% (pas de max-width)
3965
+ * - sm: 540px
3966
+ * - md: 720px
3967
+ * - lg: 960px
3968
+ * - xl: 1140px
3969
+ * - 2xl: 1320px
3970
+ */
3971
+ readonly maxWidth: _angular_core.InputSignal<ContainerMaxWidth>;
3972
+ /**
3973
+ * Centrer le conteneur horizontalement
3974
+ */
3975
+ readonly center: _angular_core.InputSignal<boolean>;
3976
+ /**
3977
+ * Padding horizontal (gutter)
3978
+ * - none: 0
3979
+ * - sm: 16px
3980
+ * - md: 24px
3981
+ * - lg: 32px
3982
+ */
3983
+ readonly gutter: _angular_core.InputSignal<ContainerGutter>;
3984
+ /**
3985
+ * Padding vertical
3986
+ * - none: 0
3987
+ * - sm: 16px
3988
+ * - md: 24px
3989
+ * - lg: 32px
3990
+ */
3991
+ readonly paddingY: _angular_core.InputSignal<ContainerGutter>;
3992
+ /**
3993
+ * Classe CSS additionnelle
3994
+ */
3995
+ readonly customClass: _angular_core.InputSignal<string>;
3996
+ readonly containerClasses: _angular_core.Signal<string>;
3997
+ readonly containerStyle: _angular_core.Signal<{
3998
+ '--container-max-width': string;
3999
+ }>;
4000
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsContainer, never>;
4001
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsContainer, "ds-container", never, { "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "center": { "alias": "center"; "required": false; "isSignal": true; }; "gutter": { "alias": "gutter"; "required": false; "isSignal": true; }; "paddingY": { "alias": "paddingY"; "required": false; "isSignal": true; }; "customClass": { "alias": "customClass"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4002
+ }
4003
+
4004
+ type SearchInputSize = 'sm' | 'md' | 'lg';
4005
+ /**
4006
+ * DsSearchInput - Composant de recherche avec debounce
4007
+ *
4008
+ * @description
4009
+ * Input de recherche avec icône, bouton clear, debounce configurable
4010
+ * et intégration formulaires via ControlValueAccessor.
4011
+ *
4012
+ * @example
4013
+ * ```html
4014
+ * <ds-search-input
4015
+ * placeholder="Rechercher..."
4016
+ * [debounceTime]="300"
4017
+ * (search)="onSearch($event)">
4018
+ * </ds-search-input>
4019
+ * ```
4020
+ */
4021
+ declare class DsSearchInput implements ControlValueAccessor, OnDestroy {
4022
+ /** Taille du composant */
4023
+ readonly size: _angular_core.InputSignal<SearchInputSize>;
4024
+ /** Placeholder du champ */
4025
+ readonly placeholder: _angular_core.InputSignal<string>;
4026
+ /** Délai de debounce en ms */
4027
+ readonly debounceMs: _angular_core.InputSignal<number>;
4028
+ /** État désactivé */
4029
+ readonly disabled: _angular_core.InputSignal<boolean>;
4030
+ /** État de chargement */
4031
+ readonly loading: _angular_core.InputSignal<boolean>;
4032
+ /** Afficher le bouton clear */
4033
+ readonly clearable: _angular_core.InputSignal<boolean>;
4034
+ /** Caractères minimum avant recherche */
4035
+ readonly minChars: _angular_core.InputSignal<number>;
4036
+ /** Label du bouton clear */
4037
+ readonly clearLabel: _angular_core.InputSignal<string>;
4038
+ /** Label ARIA */
4039
+ readonly ariaLabel: _angular_core.InputSignal<string>;
4040
+ /** ID de l'élément décrit par ce champ */
4041
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
4042
+ /** Événement de recherche (après debounce) */
4043
+ readonly search: _angular_core.OutputEmitterRef<string>;
4044
+ /** Événement de recherche immédiate (touche Entrée) */
4045
+ readonly searchImmediate: _angular_core.OutputEmitterRef<string>;
4046
+ /** Événement d'effacement */
4047
+ readonly cleared: _angular_core.OutputEmitterRef<void>;
4048
+ /** Référence à l'input */
4049
+ private readonly inputRef;
4050
+ /** Icônes */
4051
+ readonly searchIcon: _fortawesome_fontawesome_common_types.IconDefinition;
4052
+ readonly clearIcon: _fortawesome_fontawesome_common_types.IconDefinition;
4053
+ readonly spinnerIcon: _fortawesome_fontawesome_common_types.IconDefinition;
4054
+ /** Valeur interne (signal pour réactivité) */
4055
+ readonly internalValue: _angular_core.WritableSignal<string>;
4056
+ /** Subject pour debounce */
4057
+ private readonly searchSubject;
4058
+ private readonly destroy$;
4059
+ /** Callbacks CVA */
4060
+ private onChange;
4061
+ private onTouched;
4062
+ readonly containerClasses: _angular_core.Signal<string>;
4063
+ readonly showClearButton: _angular_core.Signal<boolean>;
4064
+ constructor();
4065
+ ngOnDestroy(): void;
4066
+ onInputChange(value: string): void;
4067
+ onClear(): void;
4068
+ onEnter(): void;
4069
+ /** Focus sur l'input */
4070
+ focus(): void;
4071
+ /** Sélectionner tout le texte */
4072
+ selectAll(): void;
4073
+ writeValue(value: string): void;
4074
+ registerOnChange(fn: (value: string) => void): void;
4075
+ registerOnTouched(fn: () => void): void;
4076
+ setDisabledState(isDisabled: boolean): void;
4077
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsSearchInput, never>;
4078
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsSearchInput, "ds-search-input", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "search": "search"; "searchImmediate": "searchImmediate"; "cleared": "cleared"; }, never, never, true, never>;
4079
+ }
4080
+
4081
+ type DatePickerSize = 'sm' | 'md' | 'lg';
4082
+ type DatePickerMode = 'single' | 'range';
4083
+ interface DateRange {
4084
+ start: Date | null;
4085
+ end: Date | null;
4086
+ }
4087
+ /**
4088
+ * DsDatePicker - Composant de sélection de date
4089
+ *
4090
+ * @description
4091
+ * Calendrier avec navigation mensuelle, sélection simple ou range,
4092
+ * et intégration formulaires via ControlValueAccessor.
4093
+ *
4094
+ * @example
4095
+ * ```html
4096
+ * <ds-date-picker
4097
+ * [mode]="'single'"
4098
+ * (dateChange)="onDateChange($event)">
4099
+ * </ds-date-picker>
4100
+ * ```
4101
+ */
4102
+ declare class DsDatePicker implements ControlValueAccessor, OnInit {
4103
+ /** Taille du composant */
4104
+ readonly size: _angular_core.InputSignal<DatePickerSize>;
4105
+ /** Mode de sélection */
4106
+ readonly mode: _angular_core.InputSignal<DatePickerMode>;
4107
+ /** État désactivé */
4108
+ readonly disabled: _angular_core.InputSignal<boolean>;
4109
+ /** Date minimum sélectionnable */
4110
+ readonly minDate: _angular_core.InputSignal<Date | null>;
4111
+ /** Date maximum sélectionnable */
4112
+ readonly maxDate: _angular_core.InputSignal<Date | null>;
4113
+ /** Afficher le bouton "Aujourd'hui" */
4114
+ readonly showTodayButton: _angular_core.InputSignal<boolean>;
4115
+ /** Afficher le bouton "Effacer" */
4116
+ readonly showClearButton: _angular_core.InputSignal<boolean>;
4117
+ /** Label du bouton "Aujourd'hui" */
4118
+ readonly todayLabel: _angular_core.InputSignal<string>;
4119
+ /** Label du bouton "Effacer" */
4120
+ readonly clearLabel: _angular_core.InputSignal<string>;
4121
+ /** Label bouton mois précédent */
4122
+ readonly prevMonthLabel: _angular_core.InputSignal<string>;
4123
+ /** Label bouton mois suivant */
4124
+ readonly nextMonthLabel: _angular_core.InputSignal<string>;
4125
+ /** Événement de changement de date (mode single) */
4126
+ readonly dateChange: _angular_core.OutputEmitterRef<Date | null>;
4127
+ /** Événement de changement de range */
4128
+ readonly rangeChange: _angular_core.OutputEmitterRef<DateRange>;
4129
+ /** Icônes */
4130
+ readonly prevIcon: _fortawesome_fontawesome_common_types.IconDefinition;
4131
+ readonly nextIcon: _fortawesome_fontawesome_common_types.IconDefinition;
4132
+ readonly calendarIcon: _fortawesome_fontawesome_common_types.IconDefinition;
4133
+ /** Jours de la semaine */
4134
+ readonly weekDays: string[];
4135
+ /** Noms des mois */
4136
+ readonly monthNames: string[];
4137
+ /** État interne */
4138
+ readonly currentMonth: _angular_core.WritableSignal<number>;
4139
+ readonly currentYear: _angular_core.WritableSignal<number>;
4140
+ readonly selectedDate: _angular_core.WritableSignal<Date | null>;
4141
+ readonly rangeStart: _angular_core.WritableSignal<Date | null>;
4142
+ readonly rangeEnd: _angular_core.WritableSignal<Date | null>;
4143
+ readonly showMonthPicker: _angular_core.WritableSignal<boolean>;
4144
+ readonly showYearPicker: _angular_core.WritableSignal<boolean>;
4145
+ /** Callbacks CVA */
4146
+ private onChange;
4147
+ private onTouched;
4148
+ readonly containerClasses: _angular_core.Signal<string>;
4149
+ readonly currentMonthName: _angular_core.Signal<string>;
4150
+ readonly calendarLabel: _angular_core.Signal<string>;
4151
+ readonly yearRange: _angular_core.Signal<number[]>;
4152
+ readonly calendarWeeks: _angular_core.Signal<CalendarDay[][]>;
4153
+ ngOnInit(): void;
4154
+ navigateMonth(delta: number): void;
4155
+ toggleMonthPicker(): void;
4156
+ toggleYearPicker(): void;
4157
+ selectMonth(month: number): void;
4158
+ selectYear(year: number): void;
4159
+ selectDate(date: Date | null): void;
4160
+ goToToday(): void;
4161
+ clearSelection(): void;
4162
+ onDayKeydown(event: KeyboardEvent, date: Date | null): void;
4163
+ private isDateSelected;
4164
+ private isRangeStartDate;
4165
+ private isRangeEndDate;
4166
+ private isDateInRange;
4167
+ private isDateDisabled;
4168
+ private isSameDay;
4169
+ private formatDateForAria;
4170
+ writeValue(value: Date | DateRange | null): void;
4171
+ registerOnChange(fn: (value: Date | DateRange | null) => void): void;
4172
+ registerOnTouched(fn: () => void): void;
4173
+ setDisabledState(isDisabled: boolean): void;
4174
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsDatePicker, never>;
4175
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsDatePicker, "ds-date-picker", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "showTodayButton": { "alias": "showTodayButton"; "required": false; "isSignal": true; }; "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "prevMonthLabel": { "alias": "prevMonthLabel"; "required": false; "isSignal": true; }; "nextMonthLabel": { "alias": "nextMonthLabel"; "required": false; "isSignal": true; }; }, { "dateChange": "dateChange"; "rangeChange": "rangeChange"; }, never, never, true, never>;
4176
+ }
4177
+ interface CalendarDay {
4178
+ date: Date;
4179
+ dayNumber: number;
4180
+ isCurrentMonth: boolean;
4181
+ isToday: boolean;
4182
+ isSelected: boolean;
4183
+ isRangeStart: boolean;
4184
+ isRangeEnd: boolean;
4185
+ isInRange: boolean;
4186
+ isDisabled: boolean;
4187
+ ariaLabel: string;
4188
+ }
4189
+
4190
+ /**
4191
+ * Positions standard pour dropdowns (menus déroulants, select, etc.)
4192
+ *
4193
+ * Stratégie :
4194
+ * 1. Position préférée : centré en dessous (offsetY: 6px pour espacement)
4195
+ * 2. Fallback : centré au-dessus si pas d'espace en bas
4196
+ * 3. Fallback : aligné à gauche en dessous
4197
+ * 4. Fallback : aligné à droite en dessous
4198
+ */
4199
+ declare const DROPDOWN_POSITIONS: ConnectedPosition[];
4200
+ /**
4201
+ * Positions standard pour tooltips (infobulles)
4202
+ *
4203
+ * Stratégie :
4204
+ * 1. Position préférée : centré au-dessus (offsetY: -8px pour espacement)
4205
+ * 2. Fallback : centré en dessous si pas d'espace au-dessus
4206
+ * 3. Fallback : à droite (aligné verticalement au centre)
4207
+ * 4. Fallback : à gauche (aligné verticalement au centre)
4208
+ */
4209
+ declare const TOOLTIP_POSITIONS: ConnectedPosition[];
4210
+ /**
4211
+ * Positions standard pour popovers (menus contextuels, actions panels)
4212
+ *
4213
+ * Stratégie :
4214
+ * 1. Position préférée : aligné à droite, en dessous (offsetY: 4px)
4215
+ * 2. Fallback : aligné à gauche, en dessous
4216
+ * 3. Fallback : aligné à droite, au-dessus
4217
+ * 4. Fallback : aligné à gauche, au-dessus
4218
+ * 5. Fallback : à droite (aligné en haut)
4219
+ * 6. Fallback : à gauche (aligné en haut)
4220
+ */
4221
+ declare const POPOVER_POSITIONS: ConnectedPosition[];
4222
+ /**
4223
+ * Positions pour autocomplete (panel de suggestions sous un input)
4224
+ *
4225
+ * Stratégie :
4226
+ * 1. Position préférée : aligné à gauche, pleine largeur, en dessous
4227
+ * 2. Fallback : aligné à gauche, pleine largeur, au-dessus
4228
+ */
4229
+ declare const AUTOCOMPLETE_POSITIONS: ConnectedPosition[];
4230
+
4231
+ declare const BUTTON_VARIANT_OPTIONS: readonly ["primary", "secondary", "ghost", "success", "warning", "error", "info"];
4232
+ declare const BUTTON_APPEARANCE_OPTIONS: readonly ["solid", "outline"];
4233
+ declare const BUTTON_SIZE_OPTIONS: readonly ["sm", "md", "lg"];
4234
+ interface ArgTypeOptions {
4235
+ includeLoading?: boolean;
4236
+ includeBlock?: boolean;
4237
+ variantDescription?: string;
4238
+ appearanceDescription?: string;
4239
+ sizeDescription?: string;
4240
+ disabledDescription?: string;
4241
+ loadingDescription?: string;
4242
+ blockDescription?: string;
4243
+ }
4244
+ declare const buildButtonArgTypes: ({ includeLoading, includeBlock, variantDescription, appearanceDescription, sizeDescription, disabledDescription, loadingDescription, blockDescription, }?: ArgTypeOptions) => ArgTypes<Args>;
4245
+ interface ArgOptions {
4246
+ includeLoading?: boolean;
4247
+ includeBlock?: boolean;
4248
+ }
4249
+ declare const buildButtonArgs: ({ includeLoading, includeBlock }?: ArgOptions) => {
4250
+ block?: boolean | undefined;
4251
+ loading?: boolean | undefined;
4252
+ variant: ButtonVariant;
4253
+ appearance: ButtonAppearance;
4254
+ size: ButtonSize;
4255
+ disabled: boolean;
4256
+ };
4257
+ interface ButtonBindings {
4258
+ variant: string;
4259
+ appearance?: string;
4260
+ size: string;
4261
+ disabled?: string;
4262
+ loading?: string;
4263
+ block?: string;
4264
+ }
4265
+ declare const createVariantRender: (tagName: string, bindings: ButtonBindings, extraAttributes?: string) => (args: Args) => {
4266
+ props: {
4267
+ variants: readonly ["primary", "secondary", "ghost", "success", "warning", "error", "info"];
4268
+ };
4269
+ template: string;
4270
+ };
4271
+ declare const createSizeRender: (tagName: string, bindings: ButtonBindings, extraAttributes?: string) => (args: Args) => {
4272
+ props: {
4273
+ sizes: readonly ["sm", "md", "lg"];
4274
+ };
4275
+ template: string;
4276
+ };
4277
+
4278
+ /**
4279
+ * Service centralisé pour l'enregistrement des icônes FontAwesome.
4280
+ *
4281
+ * @description
4282
+ * Permet d'enregistrer des icônes de manière lazy et centralisée, évitant
4283
+ * d'importer toutes les icônes FontAwesome dans chaque composant. Les composants
4284
+ * peuvent utiliser les icônes enregistrées via leur nom plutôt que via l'objet complet.
4285
+ *
4286
+ * @example
4287
+ * ```typescript
4288
+ * // Dans app.config.ts ou main.ts
4289
+ * import { IconRegistryService } from 'ds-angular';
4290
+ * import { faCheck, faTimes, faExclamation } from '@fortawesome/free-solid-svg-icons';
4291
+ *
4292
+ * const iconRegistry = inject(IconRegistryService);
4293
+ * iconRegistry.registerIcons([faCheck, faTimes, faExclamation]);
4294
+ * ```
4295
+ *
4296
+ * @example
4297
+ * ```typescript
4298
+ * // Enregistrement par groupe thématique
4299
+ * import { faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';
4300
+ *
4301
+ * iconRegistry.registerIconGroup('validation', [faCheck, faTimes]);
4302
+ * ```
4303
+ */
4304
+ declare class IconRegistryService {
4305
+ private library;
4306
+ private registeredIcons;
4307
+ private iconGroups;
4308
+ constructor(library: FaIconLibrary);
4309
+ /**
4310
+ * Enregistre une ou plusieurs icônes FontAwesome dans la bibliothèque globale.
4311
+ *
4312
+ * @param icons - Tableau d'icônes FontAwesome à enregistrer
4313
+ * @returns Le service lui-même pour chaînage
4314
+ *
4315
+ * @example
4316
+ * ```typescript
4317
+ * iconRegistry.registerIcons([faUser, faEnvelope, faPhone]);
4318
+ * ```
4319
+ */
4320
+ registerIcons(icons: IconDefinition[]): this;
4321
+ /**
4322
+ * Enregistre un groupe d'icônes sous un nom thématique.
4323
+ *
4324
+ * @param groupName - Nom du groupe (ex: 'forms', 'navigation')
4325
+ * @param icons - Tableau d'icônes du groupe
4326
+ * @returns Le service lui-même pour chaînage
4327
+ *
4328
+ * @example
4329
+ * ```typescript
4330
+ * iconRegistry.registerIconGroup('forms', [
4331
+ * faCheck, faTimes, faExclamation, faInfo
4332
+ * ]);
4333
+ * ```
4334
+ */
4335
+ registerIconGroup(groupName: string, icons: IconDefinition[]): this;
4336
+ /**
4337
+ * Vérifie si une icône est déjà enregistrée.
4338
+ *
4339
+ * @param iconName - Nom de l'icône (format: 'prefix-iconName')
4340
+ * @returns true si l'icône est enregistrée
4341
+ *
4342
+ * @example
4343
+ * ```typescript
4344
+ * if (!iconRegistry.isIconRegistered('fas-check')) {
4345
+ * iconRegistry.registerIcons([faCheck]);
4346
+ * }
4347
+ * ```
4348
+ */
4349
+ isIconRegistered(iconName: string): boolean;
4350
+ /**
4351
+ * Récupère tous les noms d'icônes enregistrées.
4352
+ *
4353
+ * @returns Tableau des noms d'icônes enregistrées
4354
+ */
4355
+ getRegisteredIcons(): string[];
4356
+ /**
4357
+ * Récupère les icônes d'un groupe thématique.
4358
+ *
4359
+ * @param groupName - Nom du groupe
4360
+ * @returns Icônes du groupe ou undefined si le groupe n'existe pas
4361
+ */
4362
+ getIconGroup(groupName: string): IconDefinition[] | undefined;
4363
+ /**
4364
+ * Liste tous les groupes d'icônes enregistrés.
4365
+ *
4366
+ * @returns Tableau des noms de groupes
4367
+ */
4368
+ getIconGroups(): string[];
4369
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconRegistryService, never>;
4370
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<IconRegistryService>;
4371
+ }
4372
+
4373
+ /**
4374
+ * Locales supportées.
4375
+ */
4376
+ type SupportedLocale = 'fr' | 'en' | 'es' | 'de';
4377
+ /**
4378
+ * Structure des labels i18n.
4379
+ */
4380
+ interface I18nLabels {
4381
+ close: string;
4382
+ cancel: string;
4383
+ confirm: string;
4384
+ save: string;
4385
+ delete: string;
4386
+ edit: string;
4387
+ add: string;
4388
+ search: string;
4389
+ clear: string;
4390
+ reset: string;
4391
+ loading: string;
4392
+ error: string;
4393
+ success: string;
4394
+ warning: string;
4395
+ info: string;
4396
+ previous: string;
4397
+ next: string;
4398
+ first: string;
4399
+ last: string;
4400
+ page: string;
4401
+ of: string;
4402
+ required: string;
4403
+ optional: string;
4404
+ invalidEmail: string;
4405
+ invalidUrl: string;
4406
+ minLength: string;
4407
+ maxLength: string;
4408
+ minValue: string;
4409
+ maxValue: string;
4410
+ expandAll: string;
4411
+ collapseAll: string;
4412
+ openMenu: string;
4413
+ closeMenu: string;
4414
+ selectOption: string;
4415
+ selectedOption: string;
4416
+ noResults: string;
4417
+ itemsPerPage: string;
4418
+ showingItems: string;
4419
+ goToPage: string;
4420
+ stepCompleted: string;
4421
+ stepActive: string;
4422
+ stepPending: string;
4423
+ stepError: string;
4424
+ }
4425
+ /**
4426
+ * # DsI18nService
4427
+ *
4428
+ * Service d'internationalisation pour les labels des composants du design system.
4429
+ * Fournit des labels traduits pour les actions communes, états, navigation, etc.
4430
+ *
4431
+ * ## Usage
4432
+ *
4433
+ * ```typescript
4434
+ * import { DsI18nService } from 'ds-angular';
4435
+ *
4436
+ * @Component({...})
4437
+ * export class MyComponent {
4438
+ * private i18n = inject(DsI18nService);
4439
+ *
4440
+ * closeLabel = this.i18n.get('close');
4441
+ *
4442
+ * ngOnInit() {
4443
+ * // Changer la locale
4444
+ * this.i18n.setLocale('en');
4445
+ * }
4446
+ * }
4447
+ * ```
4448
+ *
4449
+ * ## Locales supportées
4450
+ *
4451
+ * - `fr` : Français (défaut)
4452
+ * - `en` : English
4453
+ * - `es` : Español
4454
+ * - `de` : Deutsch
4455
+ *
4456
+ * @service
4457
+ */
4458
+ declare class DsI18nService {
4459
+ /**
4460
+ * Locale courante.
4461
+ */
4462
+ private readonly _locale;
4463
+ /**
4464
+ * Labels personnalisés (surcharge partielle).
4465
+ */
4466
+ private readonly _customLabels;
4467
+ /**
4468
+ * Locale courante (lecture seule).
4469
+ */
4470
+ readonly locale: _angular_core.Signal<SupportedLocale>;
4471
+ /**
4472
+ * Labels courants fusionnés (locale + custom).
4473
+ */
4474
+ readonly labels: _angular_core.Signal<{
4475
+ close: string;
4476
+ cancel: string;
4477
+ confirm: string;
4478
+ save: string;
4479
+ delete: string;
4480
+ edit: string;
4481
+ add: string;
4482
+ search: string;
4483
+ clear: string;
4484
+ reset: string;
4485
+ loading: string;
4486
+ error: string;
4487
+ success: string;
4488
+ warning: string;
4489
+ info: string;
4490
+ previous: string;
4491
+ next: string;
4492
+ first: string;
4493
+ last: string;
4494
+ page: string;
4495
+ of: string;
4496
+ required: string;
4497
+ optional: string;
4498
+ invalidEmail: string;
4499
+ invalidUrl: string;
4500
+ minLength: string;
4501
+ maxLength: string;
4502
+ minValue: string;
4503
+ maxValue: string;
4504
+ expandAll: string;
4505
+ collapseAll: string;
4506
+ openMenu: string;
4507
+ closeMenu: string;
4508
+ selectOption: string;
4509
+ selectedOption: string;
4510
+ noResults: string;
4511
+ itemsPerPage: string;
4512
+ showingItems: string;
4513
+ goToPage: string;
4514
+ stepCompleted: string;
4515
+ stepActive: string;
4516
+ stepPending: string;
4517
+ stepError: string;
4518
+ }>;
4519
+ /**
4520
+ * Définir la locale.
4521
+ */
4522
+ setLocale(locale: SupportedLocale): void;
4523
+ /**
4524
+ * Obtenir un label par clé.
4525
+ */
4526
+ get<K extends keyof I18nLabels>(key: K): string;
4527
+ /**
4528
+ * Obtenir un label formaté avec des variables.
4529
+ *
4530
+ * @example
4531
+ * i18n.format('minLength', { min: 5 }) // "Minimum 5 caractères requis"
4532
+ */
4533
+ format<K extends keyof I18nLabels>(key: K, params: Record<string, string | number>): string;
4534
+ /**
4535
+ * Surcharger des labels personnalisés.
4536
+ */
4537
+ setCustomLabels(labels: Partial<I18nLabels>): void;
4538
+ /**
4539
+ * Réinitialiser les labels personnalisés.
4540
+ */
4541
+ resetCustomLabels(): void;
4542
+ /**
4543
+ * Obtenir toutes les locales supportées.
4544
+ */
4545
+ getSupportedLocales(): SupportedLocale[];
4546
+ /**
4547
+ * Détecter la locale du navigateur.
4548
+ */
4549
+ detectBrowserLocale(): SupportedLocale;
4550
+ /**
4551
+ * Initialiser avec la locale du navigateur.
4552
+ */
4553
+ initFromBrowser(): void;
4554
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsI18nService, never>;
4555
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsI18nService>;
4556
+ }
4557
+
4558
+ export { AUTOCOMPLETE_POSITIONS, BUTTON_APPEARANCE_OPTIONS, BUTTON_SIZE_OPTIONS, BUTTON_VARIANT_OPTIONS, DROPDOWN_POSITIONS, DsAccordion, DsAlert, DsBadge, DsBreadcrumb, DsButton, DsCard, DsCheckbox, DsCombobox, DsContainer, DsDatePicker, DsDivider, DsDropdown, DsI18nService, DsInputField, DsInputTextarea, DsModalComponent, DsPagination, DsPopover, DsPopoverComponent, DsProgressBar, DsRadioGroup, DsSearchInput, DsSelect, DsSkeleton, DsStepper, DsTable, DsTabs, DsToastComponent, DsToastContainerComponent, DsToastService, DsToggle, DsTooltip, DsTooltipComponent, IconRegistryService, POPOVER_POSITIONS, PrimitiveBadge, PrimitiveButton, PrimitiveCheckbox, PrimitiveInput, PrimitiveRadio, PrimitiveTextarea, PrimitiveToggle, TOOLTIP_POSITIONS, buildButtonArgTypes, buildButtonArgs, createSizeRender, createVariantRender };
4559
+ export type { AccordionChangeEvent, AccordionItem, AccordionSize, AccordionVariant, AlertSize, AlertType, BadgeAppearance, BadgeShape, BadgeSize, BadgeType, BadgeVariant, BreadcrumbItem, ButtonAppearance, ButtonSize, ButtonType, ButtonVariant, CardSize, CardVariant, CheckboxSize, CheckboxState, ContainerGutter, ContainerMaxWidth, DatePickerMode, DatePickerSize, DateRange, DividerLabelPosition, DividerOrientation, DividerSize, DividerVariant, DropdownItem, DropdownItemDTO, DsComboboxOption, DsComboboxSize, DsSelectOption, DsSelectSize, DsTableColumn, DsTableSize, DsTableVariant, I18nLabels, InputAppearance, InputSize, InputState, InputType, PageChangeEvent, PageSizeOption, PaginationSize, PopoverTrigger, ProgressBarMode, ProgressBarSize, ProgressBarVariant, RadioGroupLayout, RadioOption, RadioSize, SearchInputSize, SkeletonSize, SkeletonVariant, SortDirection, SortEvent, Step, StepChangeEvent, StepState, StepperOrientation, StepperSize, SupportedLocale, TabItem, TableState, TextareaAppearance, TextareaResize, TextareaSize, TextareaState, ToastInstance, ToastOptions, ToastPosition, ToastType, ToggleSize };