@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/README.md +63 -0
- package/fesm2022/kksdev-ds-angular.mjs +7800 -0
- package/fesm2022/kksdev-ds-angular.mjs.map +1 -0
- package/index.d.ts +4559 -0
- package/package.json +54 -0
- package/src/styles/_index.scss +22 -0
- package/src/styles/storybook.scss +45 -0
- package/src/styles/themes/_custom.scss +393 -0
- package/src/styles/themes/_dark.scss +415 -0
- package/src/styles/themes/_light.scss +405 -0
- package/src/styles/tokens/_primitives.scss +140 -0
- package/src/styles/tokens/_semantic.scss +363 -0
- package/src/styles/tokens/_tokens.scss +439 -0
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 };
|