@ktortu/aaa 0.9.0 → 0.9.2
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 +5 -3
- package/fesm2022/ktortu-aaa-button.mjs +10 -2
- package/fesm2022/ktortu-aaa-button.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-card.mjs +14 -5
- package/fesm2022/ktortu-aaa-card.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-cdk.mjs +50 -2
- package/fesm2022/ktortu-aaa-cdk.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-dialog.mjs +80 -39
- package/fesm2022/ktortu-aaa-dialog.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-disclosure.mjs +201 -0
- package/fesm2022/ktortu-aaa-disclosure.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-forms.mjs +525 -149
- package/fesm2022/ktortu-aaa-forms.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-i18n.mjs +27 -2
- package/fesm2022/ktortu-aaa-i18n.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-menu.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-progress-bar.mjs +91 -0
- package/fesm2022/ktortu-aaa-progress-bar.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-snackbar.mjs +478 -0
- package/fesm2022/ktortu-aaa-snackbar.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-tabs.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-tooltip.mjs +20 -30
- package/fesm2022/ktortu-aaa-tooltip.mjs.map +1 -1
- package/fesm2022/ktortu-aaa.mjs +2 -0
- package/fesm2022/ktortu-aaa.mjs.map +1 -1
- package/forms/checkbox/checkbox-group.css +0 -8
- package/forms/chips/chip-list.css +5 -0
- package/forms/field/field.css +16 -0
- package/forms/radio/radio-group.css +1 -9
- package/forms/styles/field-box.css +14 -6
- package/forms/styles/field-pending.css +46 -0
- package/forms/styles/select-panel.css +4 -0
- package/package.json +13 -1
- package/progress-bar/progress-bar.css +127 -0
- package/snackbar/snackbar-tokens.css +53 -0
- package/snackbar/snackbar.css +175 -0
- package/styles/disclosure.css +6 -0
- package/styles/forms.css +1 -0
- package/styles/progress-bar.css +5 -0
- package/styles/snackbar.css +9 -0
- package/styles/styles.css +3 -0
- package/themes/theme-cyberpunk.css +11 -0
- package/tooltip/tooltip.css +1 -1
- package/types/ktortu-aaa-button.d.ts +2 -0
- package/types/ktortu-aaa-card.d.ts +3 -0
- package/types/ktortu-aaa-cdk.d.ts +27 -1
- package/types/ktortu-aaa-dialog.d.ts +89 -34
- package/types/ktortu-aaa-disclosure.d.ts +112 -0
- package/types/ktortu-aaa-forms.d.ts +238 -30
- package/types/ktortu-aaa-i18n.d.ts +3 -0
- package/types/ktortu-aaa-progress-bar.d.ts +27 -0
- package/types/ktortu-aaa-snackbar.d.ts +218 -0
- package/types/ktortu-aaa-tooltip.d.ts +0 -1
- package/types/ktortu-aaa.d.ts +2 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { InjectionToken, Signal, Provider, TemplateRef, ModelSignal, ElementRef, PipeTransform } from '@angular/core';
|
|
3
|
-
import * as _ktortu_aaa_forms from '@ktortu/aaa/forms';
|
|
4
3
|
import * as _angular_forms_signals from '@angular/forms/signals';
|
|
5
|
-
import {
|
|
4
|
+
import { ValidationError, WithOptionalFieldTree, FormValueControl } from '@angular/forms/signals';
|
|
5
|
+
import * as _ktortu_aaa_forms from '@ktortu/aaa/forms';
|
|
6
6
|
import { Listbox } from '@angular/aria/listbox';
|
|
7
7
|
import { Combobox } from '@angular/aria/combobox';
|
|
8
8
|
import { KtViewport } from '@ktortu/aaa/cdk';
|
|
@@ -21,6 +21,16 @@ interface KtFieldErrorState {
|
|
|
21
21
|
}
|
|
22
22
|
/** Décide QUAND afficher les erreurs d'un champ (équivalent signal de l'ErrorStateMatcher Material). */
|
|
23
23
|
type KtFieldErrorMatcher = (state: KtFieldErrorState) => boolean;
|
|
24
|
+
/** Erreur à résoudre en message : la `ValidationError` de Signal Forms. Selon le `kind`, ses
|
|
25
|
+
sous-types portent des params typés (`min`, `max`, `minLength`, `maxLength`, `minDate`,
|
|
26
|
+
`maxDate`, `pattern`…) lisibles via {@link ktErrorParam}. */
|
|
27
|
+
type KtResolvableError = ValidationError;
|
|
28
|
+
/** Fabrique de message par défaut pour un `kind` : reçoit l'erreur complète (params accessibles). */
|
|
29
|
+
type KtErrorMessageFactory = (error: KtResolvableError) => string;
|
|
30
|
+
/** Messages d'erreur par défaut indexés par `kind`. Valeur statique (kinds sans param : `required`,
|
|
31
|
+
`email`) ou fabrique (kinds paramétrés : `min`, `minLength`…). Une chaîne vide (`''`) supprime
|
|
32
|
+
l'affichage du message — le champ reste invalide, mais sans texte (cf. récap d'erreurs externe). */
|
|
33
|
+
type KtFieldErrorMessages = Record<string, string | KtErrorMessageFactory>;
|
|
24
34
|
/** Apparence du chrome de champ. `fill` = label au-dessus (défaut historique) ; `outline` = bordure
|
|
25
35
|
+ label flottant qui se loge dans la bordure (transition douce depuis Angular Material « outline »). */
|
|
26
36
|
type KtFieldAppearance = 'fill' | 'outline';
|
|
@@ -47,6 +57,11 @@ interface KtFieldConfig {
|
|
|
47
57
|
/** Message d'erreur d'un `kt-number-field` quand la saisie n'est pas un nombre valide.
|
|
48
58
|
Défaut (anglais neutre) : `'Please enter a valid number.'`. */
|
|
49
59
|
numberParseError: string;
|
|
60
|
+
/** Messages d'erreur par défaut indexés par `kind` (`required`, `email`, `min`, `minLength`…),
|
|
61
|
+
fusionnés par-dessus les défauts anglais embarqués (cf. `KT_DEFAULT_FIELD_ERROR_MESSAGES`).
|
|
62
|
+
Un message explicite passé au validateur Signal Forms (`{ message }`) reste prioritaire ; une
|
|
63
|
+
valeur `''` supprime le texte d'un `kind`. Défaut : `{}` (on garde les défauts anglais). */
|
|
64
|
+
errorMessages: Partial<KtFieldErrorMessages>;
|
|
50
65
|
/** Apparence par défaut de tous les champs (`fill` | `outline`). Défaut : `'fill'`. */
|
|
51
66
|
appearance: KtFieldAppearance;
|
|
52
67
|
/** Politique du label flottant en `outline` (`auto` | `always`). Défaut : `'auto'`. */
|
|
@@ -54,15 +69,33 @@ interface KtFieldConfig {
|
|
|
54
69
|
}
|
|
55
70
|
declare const KT_FIELD_CONFIG: InjectionToken<Partial<KtFieldConfig>>;
|
|
56
71
|
/**
|
|
57
|
-
* Fournit des défauts de champ (apparence, libellés, matcher d'erreurs
|
|
58
|
-
* l'application entière. Idéal pour une transition globale — ex. tout
|
|
59
|
-
* Material en un seul provider.
|
|
72
|
+
* Fournit des défauts de champ (apparence, libellés, matcher d'erreurs, messages d'erreur par
|
|
73
|
+
* défaut…) pour un sous-arbre ou l'application entière. Idéal pour une transition globale — ex. tout
|
|
74
|
+
* passer en `outline` façon Material en un seul provider.
|
|
60
75
|
*
|
|
61
76
|
* @example
|
|
62
77
|
* ```ts
|
|
63
|
-
* // app.config.ts
|
|
78
|
+
* // app.config.ts — apparence globale
|
|
64
79
|
* providers: [provideKtField({ appearance: 'outline' })]
|
|
65
80
|
* ```
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* // Surcharger des messages d'erreur par défaut (fusionnés par-dessus les défauts anglais).
|
|
85
|
+
* // Une fabrique reçoit l'erreur complète : ses params typés sont lisibles via `ktErrorParam`.
|
|
86
|
+
* providers: [
|
|
87
|
+
* provideKtField({
|
|
88
|
+
* errorMessages: {
|
|
89
|
+
* required: 'Champ obligatoire.',
|
|
90
|
+
* minLength: (e) => `Au moins ${ktErrorParam<number>(e, 'minLength')} caractères.`,
|
|
91
|
+
* pattern: '', // '' supprime le texte de ce kind : champ rouge, sans message
|
|
92
|
+
* },
|
|
93
|
+
* }),
|
|
94
|
+
* ]
|
|
95
|
+
* ```
|
|
96
|
+
*
|
|
97
|
+
* @remarks Pour passer toute la lib en français d'un coup (libellés + messages d'erreur), préférez
|
|
98
|
+
* `provideKtDefaultFR()` (paquet `@ktortu/aaa/i18n`), qui fournit déjà un dictionnaire complet.
|
|
66
99
|
*/
|
|
67
100
|
declare function provideKtField(config: Partial<KtFieldConfig>): Provider;
|
|
68
101
|
/** Parent field interface representing shared states for its controls. */
|
|
@@ -131,22 +164,23 @@ declare class KtField implements KtFieldParent {
|
|
|
131
164
|
/** Politique effective : input ?? KT_FIELD_CONFIG.floatLabel ?? 'auto'. */
|
|
132
165
|
protected readonly resolvedFloatLabel: _angular_core.Signal<KtFloatLabel>;
|
|
133
166
|
private readonly control;
|
|
134
|
-
private readonly templateTooltip;
|
|
135
|
-
private readonly projectedTooltip;
|
|
136
|
-
private readonly activeTooltip;
|
|
137
167
|
private readonly idGen;
|
|
138
168
|
private readonly uid;
|
|
139
169
|
readonly baseId: _angular_core.Signal<string>;
|
|
140
170
|
protected readonly labelId: _angular_core.Signal<string>;
|
|
141
171
|
protected readonly hintId: _angular_core.Signal<string>;
|
|
142
172
|
protected readonly errorId: _angular_core.Signal<string>;
|
|
173
|
+
protected readonly helpId: _angular_core.Signal<string>;
|
|
174
|
+
protected readonly helpTemplate: _angular_core.Signal<TemplateRef<unknown> | null>;
|
|
175
|
+
protected readonly helpString: _angular_core.Signal<string | null>;
|
|
176
|
+
protected readonly hasHelp: _angular_core.Signal<boolean>;
|
|
143
177
|
protected readonly hasError: _angular_core.Signal<boolean>;
|
|
144
178
|
protected readonly showHint: _angular_core.Signal<boolean>;
|
|
145
179
|
protected readonly displayedErrors: _angular_core.Signal<readonly KtFieldError[]>;
|
|
146
180
|
readonly describedBy: _angular_core.Signal<string | null>;
|
|
147
181
|
protected onHelpClick(event: MouseEvent): void;
|
|
148
182
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtField, never>;
|
|
149
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtField, "kt-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "helpLabel": { "alias": "helpLabel"; "required": false; "isSignal": true; }; "customDescribedBy": { "alias": "customDescribedBy"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "fieldId": { "alias": "fieldId"; "required": false; "isSignal": true; }; "hideHintWhenInvalid": { "alias": "hideHintWhenInvalid"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; }, { "helpClick": "helpClick"; }, ["control"
|
|
183
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtField, "kt-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "helpLabel": { "alias": "helpLabel"; "required": false; "isSignal": true; }; "customDescribedBy": { "alias": "customDescribedBy"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "fieldId": { "alias": "fieldId"; "required": false; "isSignal": true; }; "hideHintWhenInvalid": { "alias": "hideHintWhenInvalid"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; }, { "helpClick": "helpClick"; }, ["control"], ["[ktFieldHelp]", "*"], true, never>;
|
|
150
184
|
}
|
|
151
185
|
|
|
152
186
|
/** Marque le contrôle (natif ou custom) d'un champ pour que `Field` y câble l'a11y
|
|
@@ -170,6 +204,54 @@ declare class KtFieldControl {
|
|
|
170
204
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KtFieldControl, "[ktFieldControl]", never, {}, {}, never, never, true, never>;
|
|
171
205
|
}
|
|
172
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Lit un param typé d'une `ValidationError` (ex. `min`, `minLength`, `maxLength`, `minDate`…).
|
|
209
|
+
* Les sous-types d'erreur de Signal Forms exposent ces params, mais le type de base `ValidationError`
|
|
210
|
+
* ne les déclare pas : ce helper centralise l'accès pour les fabriques de message, sans `any`.
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* ```ts
|
|
214
|
+
* minLength: (e) => `Au moins ${ktErrorParam<number>(e, 'minLength')} caractères.`
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
declare function ktErrorParam<T>(error: KtResolvableError, key: string): T;
|
|
218
|
+
/**
|
|
219
|
+
* Messages d'erreur **anglais** par défaut de la lib, indexés par `kind`. Couvrent tous les
|
|
220
|
+
* validateurs natifs de Signal Forms (`required`, `email`, `min`, `max`, `minLength`, `maxLength`,
|
|
221
|
+
* `minDate`, `maxDate`, `pattern`). Surchargeables famille par famille via `KT_FIELD_CONFIG.errorMessages`
|
|
222
|
+
* (ou globalement par langue, cf. `provideKtDefaultFR`). Le `numberParseError` reste géré à la source
|
|
223
|
+
* par `kt-number-field` (kind `parse`).
|
|
224
|
+
*/
|
|
225
|
+
declare const KT_DEFAULT_FIELD_ERROR_MESSAGES: KtFieldErrorMessages;
|
|
226
|
+
/**
|
|
227
|
+
* Résout le **message par défaut** d'une erreur de validation à partir de son `kind` (et de ses
|
|
228
|
+
* params typés), en fusionnant les défauts anglais embarqués avec les surcharges du `KT_FIELD_CONFIG`.
|
|
229
|
+
*
|
|
230
|
+
* Utilisé par chaque contrôle `kt-*` au moment du rendu, là où la `ValidationError` complète (params)
|
|
231
|
+
* est encore disponible — `kt-field` reste agnostique de Signal Forms. Précédence du texte affiché :
|
|
232
|
+
* `message` du validateur > `KT_FIELD_CONFIG.errorMessages[kind]` > défaut anglais > rien.
|
|
233
|
+
*
|
|
234
|
+
* Injectable racine : un seul résolveur partagé par tous les champs.
|
|
235
|
+
*/
|
|
236
|
+
declare class KtFieldErrorResolver {
|
|
237
|
+
private readonly config;
|
|
238
|
+
/** Map effective : défauts anglais + surcharges du `KT_FIELD_CONFIG`, par `kind`. */
|
|
239
|
+
private readonly messages;
|
|
240
|
+
/**
|
|
241
|
+
* Message par défaut d'une erreur (selon son `kind` + params), ou `undefined` si aucun défaut
|
|
242
|
+
* n'est connu pour ce `kind` (l'UI n'affiche alors rien).
|
|
243
|
+
*/
|
|
244
|
+
resolve(error: KtResolvableError): string | undefined;
|
|
245
|
+
/**
|
|
246
|
+
* Prépare une liste d'erreurs pour l'affichage : applique la précédence (message du validateur
|
|
247
|
+
* sinon défaut résolu) et **écarte les erreurs au message vide** — suppression explicite via
|
|
248
|
+
* `{ message: '' }`. Le champ reste invalide (rouge / `aria-invalid`), simplement sans texte.
|
|
249
|
+
*/
|
|
250
|
+
resolveAll(errors: readonly KtResolvableError[]): KtFieldError[];
|
|
251
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtFieldErrorResolver, never>;
|
|
252
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<KtFieldErrorResolver>;
|
|
253
|
+
}
|
|
254
|
+
|
|
173
255
|
/** Base partagée des champs simples (TextField, NumberField) : état FormValueControl,
|
|
174
256
|
présentation (label/hint/prefix/suffix/clear) et politique d'affichage des erreurs.
|
|
175
257
|
La valeur, son parsing et la notion de « vide » sont fournis par la sous-classe.
|
|
@@ -187,6 +269,7 @@ declare class KtFieldControl {
|
|
|
187
269
|
``` */
|
|
188
270
|
declare abstract class KtBaseInputField<T> {
|
|
189
271
|
protected readonly config: Partial<_ktortu_aaa_forms.KtFieldConfig> | null;
|
|
272
|
+
private readonly errorResolver;
|
|
190
273
|
/** Valeur du contrôle — déclarée concrètement par la sous-classe. */
|
|
191
274
|
abstract value: ModelSignal<T>;
|
|
192
275
|
/** Marque le champ comme « visité » (déclenche l'affichage des erreurs). Deux-way. @default false */
|
|
@@ -201,6 +284,8 @@ declare abstract class KtBaseInputField<T> {
|
|
|
201
284
|
readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
202
285
|
/** Le champ a-t-il été modifié depuis sa valeur initiale. @default false */
|
|
203
286
|
readonly dirty: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
287
|
+
/** Validation asynchrone en cours (poussé par `[field]`) : pose `aria-busy` + `data-pending`. @default false */
|
|
288
|
+
readonly pending: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
204
289
|
/** Liste des erreurs de validation à afficher. @default [] */
|
|
205
290
|
readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
|
|
206
291
|
/** Attribut `name` natif du contrôle. @default '' */
|
|
@@ -246,6 +331,8 @@ declare abstract class KtBaseInputField<T> {
|
|
|
246
331
|
protected readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement | HTMLTextAreaElement> | undefined>;
|
|
247
332
|
private readonly matcher;
|
|
248
333
|
protected readonly showInvalid: _angular_core.Signal<boolean>;
|
|
334
|
+
/** Erreurs prêtes pour `kt-field` : messages par défaut résolus, suppressions (`message: ''`) écartées. */
|
|
335
|
+
protected readonly displayErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
249
336
|
protected readonly showClear: _angular_core.Signal<boolean>;
|
|
250
337
|
/** Apparence effective (input ?? config ?? 'fill'). Sert aux templates : forward à `kt-field` et,
|
|
251
338
|
en outline, pose une sentinelle de placeholder pour la détection « rempli » du label flottant. */
|
|
@@ -261,6 +348,12 @@ declare abstract class KtBaseInputField<T> {
|
|
|
261
348
|
protected asText(value: string | TemplateRef<unknown> | undefined): string | null;
|
|
262
349
|
protected onInput(event: Event): void;
|
|
263
350
|
protected onKeyDown(event: KeyboardEvent): void;
|
|
351
|
+
/** Focus le contrôle natif (utilisé par Signal Forms `focusBoundControl`). */
|
|
352
|
+
focus(options?: FocusOptions): void;
|
|
353
|
+
/** Ré-aligne le texte affiché sur la valeur courante (utilisé par Signal Forms `reset`). */
|
|
354
|
+
reset(): void;
|
|
355
|
+
/** Représentation texte de la valeur pour l'input natif. Surchargeable par sous-classe. */
|
|
356
|
+
protected displayValue(): string;
|
|
264
357
|
protected clear(): void;
|
|
265
358
|
/** Parse la saisie brute en valeur typée. */
|
|
266
359
|
protected abstract parse(raw: string): T;
|
|
@@ -269,7 +362,7 @@ declare abstract class KtBaseInputField<T> {
|
|
|
269
362
|
/** La valeur est-elle vide (affichage du bouton d'effacement) ? */
|
|
270
363
|
protected abstract isEmpty(value: T): boolean;
|
|
271
364
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtBaseInputField<any>, never>;
|
|
272
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KtBaseInputField<any>, never, never, { "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "helpLabel": { "alias": "helpLabel"; "required": false; "isSignal": true; }; "customDescribedBy": { "alias": "customDescribedBy"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "helpClick": "helpClick"; }, never, never, true, never>;
|
|
365
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KtBaseInputField<any>, never, never, { "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "helpLabel": { "alias": "helpLabel"; "required": false; "isSignal": true; }; "customDescribedBy": { "alias": "customDescribedBy"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "helpClick": "helpClick"; }, never, never, true, never>;
|
|
273
366
|
}
|
|
274
367
|
|
|
275
368
|
/** Suggestion d'un champ de saisie (rendu `<datalist>`) : soit la valeur seule, soit un couple
|
|
@@ -322,6 +415,7 @@ declare class KtNumberField extends KtBaseInputField<number | null> implements F
|
|
|
322
415
|
protected parse(raw: string): number | null;
|
|
323
416
|
protected onKeyDown(event: KeyboardEvent): void;
|
|
324
417
|
private adjustValue;
|
|
418
|
+
reset(): void;
|
|
325
419
|
protected emptyValue(): number | null;
|
|
326
420
|
protected isEmpty(value: number | null): boolean;
|
|
327
421
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtNumberField, never>;
|
|
@@ -342,13 +436,15 @@ declare class KtTextArea extends KtBaseInputField<string> implements FormValueCo
|
|
|
342
436
|
readonly value: _angular_core.ModelSignal<string>;
|
|
343
437
|
/** Hauteur initiale (lignes). L'autosize est géré en CSS via `field-sizing: content`. @default 3 */
|
|
344
438
|
readonly rows: _angular_core.InputSignal<number>;
|
|
439
|
+
/** Plancher de caractères (attribut `minlength` natif ; poussé par le validateur minLength). @default undefined */
|
|
440
|
+
readonly minLength: _angular_core.InputSignal<number | undefined>;
|
|
345
441
|
/** Plafond de caractères ; poussé par le form (validateur maxLength) ou par le consommateur. @default undefined */
|
|
346
442
|
readonly maxLength: _angular_core.InputSignal<number | undefined>;
|
|
347
443
|
protected parse(raw: string): string;
|
|
348
444
|
protected emptyValue(): string;
|
|
349
445
|
protected isEmpty(value: string): boolean;
|
|
350
446
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtTextArea, never>;
|
|
351
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtTextArea, "kt-text-area", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[ktFieldHelp]"], true, never>;
|
|
447
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtTextArea, "kt-text-area", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[ktFieldHelp]"], true, never>;
|
|
352
448
|
}
|
|
353
449
|
|
|
354
450
|
/** Types texte dont la valeur reste une string (number/date = composants séparés). */
|
|
@@ -367,6 +463,15 @@ declare class KtTextField extends KtBaseInputField<string> implements FormValueC
|
|
|
367
463
|
readonly value: _angular_core.ModelSignal<string>;
|
|
368
464
|
/** Variante HTML du champ (pilote `type` natif et le clavier mobile). @default 'text' */
|
|
369
465
|
readonly type: _angular_core.InputSignal<KtTextFieldType>;
|
|
466
|
+
/** Plancher de caractères (attribut `minlength` natif ; poussé par le validateur minLength). @default undefined */
|
|
467
|
+
readonly minLength: _angular_core.InputSignal<number | undefined>;
|
|
468
|
+
/** Plafond de caractères (attribut `maxlength` natif ; poussé par le validateur maxLength). @default undefined */
|
|
469
|
+
readonly maxLength: _angular_core.InputSignal<number | undefined>;
|
|
470
|
+
/** Motifs de validation (contrat Signal Forms). L'attribut natif `pattern` ne prend qu'une regex →
|
|
471
|
+
seule la première est posée. @default [] */
|
|
472
|
+
readonly pattern: _angular_core.InputSignal<readonly RegExp[]>;
|
|
473
|
+
/** Source de la première regex pour l'attribut `pattern` natif (`null` si aucune). */
|
|
474
|
+
protected readonly patternAttr: _angular_core.Signal<string>;
|
|
370
475
|
/** Suggestions d'autocomplétion proposées via un `<datalist>` natif (la saisie reste libre).
|
|
371
476
|
Valeurs simples (`string[]`) ou couples `{ value, label }` pour distinguer libellé affiché et
|
|
372
477
|
valeur insérée. @default undefined */
|
|
@@ -380,7 +485,49 @@ declare class KtTextField extends KtBaseInputField<string> implements FormValueC
|
|
|
380
485
|
protected emptyValue(): string;
|
|
381
486
|
protected isEmpty(value: string): boolean;
|
|
382
487
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtTextField, never>;
|
|
383
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtTextField, "kt-text-field", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[ktFieldHelp]"], true, never>;
|
|
488
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtTextField, "kt-text-field", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[ktFieldHelp]"], true, never>;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
type KtPasswordAutocomplete = 'current-password' | 'new-password' | 'off';
|
|
492
|
+
/**
|
|
493
|
+
* Champ mot de passe (valeur `string`) intégré aux Signal Forms via `FormValueControl`.
|
|
494
|
+
* Inclut un bouton pour masquer/afficher la saisie en clair de manière accessible.
|
|
495
|
+
*
|
|
496
|
+
* @example
|
|
497
|
+
* ```html
|
|
498
|
+
* <kt-password-field label="Mot de passe" [(value)]="password" required />
|
|
499
|
+
* ```
|
|
500
|
+
*/
|
|
501
|
+
declare class KtPasswordField extends KtBaseInputField<string> implements FormValueControl<string> {
|
|
502
|
+
/** Valeur saisie (two-way). @default '' */
|
|
503
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
504
|
+
/** Plancher de caractères (attribut `minlength` natif ; poussé par le validateur minLength). @default undefined */
|
|
505
|
+
readonly minLength: _angular_core.InputSignal<number | undefined>;
|
|
506
|
+
/** Plafond de caractères (attribut `maxlength` natif ; poussé par le validateur maxLength). @default undefined */
|
|
507
|
+
readonly maxLength: _angular_core.InputSignal<number | undefined>;
|
|
508
|
+
/** Motifs de validation. @default [] */
|
|
509
|
+
readonly pattern: _angular_core.InputSignal<readonly RegExp[]>;
|
|
510
|
+
/** Source de la première regex pour l'attribut `pattern` natif (`null` si aucune). */
|
|
511
|
+
protected readonly patternAttr: _angular_core.Signal<string>;
|
|
512
|
+
/** Indice d'autoremplissage effectif (par défaut 'current-password'). */
|
|
513
|
+
protected readonly resolvedAutocomplete: _angular_core.Signal<AutoFill>;
|
|
514
|
+
/** État de visibilité du mot de passe en clair. @default false */
|
|
515
|
+
protected readonly isPasswordVisible: _angular_core.WritableSignal<boolean>;
|
|
516
|
+
/** Type natif de l'input selon l'état de visibilité. */
|
|
517
|
+
protected readonly inputType: _angular_core.Signal<"text" | "password">;
|
|
518
|
+
private readonly idGen;
|
|
519
|
+
private readonly uid;
|
|
520
|
+
protected readonly inputId: _angular_core.Signal<string>;
|
|
521
|
+
protected parse(raw: string): string;
|
|
522
|
+
protected emptyValue(): string;
|
|
523
|
+
protected isEmpty(value: string): boolean;
|
|
524
|
+
/**
|
|
525
|
+
* Bascule l'état de visibilité du mot de passe.
|
|
526
|
+
* Utilise preventDefault() pour empêcher l'input de perdre le focus.
|
|
527
|
+
*/
|
|
528
|
+
protected toggleVisibility(event: MouseEvent): void;
|
|
529
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtPasswordField, never>;
|
|
530
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtPasswordField, "kt-password-field", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[ktFieldHelp]"], true, never>;
|
|
384
531
|
}
|
|
385
532
|
|
|
386
533
|
/**
|
|
@@ -407,6 +554,8 @@ declare class KtSwitch implements FormValueControl<boolean> {
|
|
|
407
554
|
readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
408
555
|
/** État « modifié » (entre dans la logique d'affichage des erreurs). @default false */
|
|
409
556
|
readonly dirty: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
557
|
+
/** Validation asynchrone en cours (poussé par `[field]`) : pose `aria-busy` + `data-pending`. @default false */
|
|
558
|
+
readonly pending: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
410
559
|
/** Erreurs de validation à afficher sous la bascule. @default [] */
|
|
411
560
|
readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
|
|
412
561
|
/** Identifiant logique du contrôle (à titre indicatif). @default '' */
|
|
@@ -423,6 +572,8 @@ declare class KtSwitch implements FormValueControl<boolean> {
|
|
|
423
572
|
readonly errorMatcher: _angular_core.InputSignal<KtFieldErrorMatcher | undefined>;
|
|
424
573
|
/** Afficher toutes les erreurs au lieu de la première seule. @default KT_FIELD_CONFIG.showAllErrors ?? false */
|
|
425
574
|
readonly showAllErrors: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
575
|
+
private readonly switchBtn;
|
|
576
|
+
private readonly errorResolver;
|
|
426
577
|
private readonly idGen;
|
|
427
578
|
private readonly uid;
|
|
428
579
|
protected readonly baseId: _angular_core.Signal<string>;
|
|
@@ -431,14 +582,18 @@ declare class KtSwitch implements FormValueControl<boolean> {
|
|
|
431
582
|
protected readonly errorId: _angular_core.Signal<string>;
|
|
432
583
|
private readonly matcher;
|
|
433
584
|
protected readonly showInvalid: _angular_core.Signal<boolean>;
|
|
434
|
-
|
|
585
|
+
/** Erreurs résolues (messages par défaut appliqués, suppressions `message: ''` écartées). */
|
|
586
|
+
protected readonly resolvedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
587
|
+
protected readonly displayedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
435
588
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string | null>;
|
|
436
589
|
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
437
590
|
constructor();
|
|
591
|
+
/** Focus le bouton bascule natif (utilisé par Signal Forms `focusBoundControl`). */
|
|
592
|
+
focus(options?: FocusOptions): void;
|
|
438
593
|
protected toggle(): void;
|
|
439
594
|
protected onSpacebar(event: Event): void;
|
|
440
595
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtSwitch, never>;
|
|
441
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtSwitch, "kt-switch", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
|
|
596
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtSwitch, "kt-switch", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
|
|
442
597
|
}
|
|
443
598
|
|
|
444
599
|
/**
|
|
@@ -473,6 +628,8 @@ declare class KtCheckboxGroup<V> implements FormValueControl<V[]> {
|
|
|
473
628
|
readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
474
629
|
/** État « modifié » (entre dans la logique d'affichage des erreurs). @default false */
|
|
475
630
|
readonly dirty: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
631
|
+
/** Validation asynchrone en cours (poussé par `[field]`) : pose `aria-busy` + `data-pending`. @default false */
|
|
632
|
+
readonly pending: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
476
633
|
/** Erreurs de validation à afficher sous le groupe. @default [] */
|
|
477
634
|
readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
|
|
478
635
|
/** Nom logique du groupe, à titre INDICATIF : contrairement à `kt-radio-group` (où `name` est
|
|
@@ -493,6 +650,8 @@ declare class KtCheckboxGroup<V> implements FormValueControl<V[]> {
|
|
|
493
650
|
readonly showAllErrors: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
494
651
|
/** Égalité des valeurs en mode objet (défaut : identité `===`). */
|
|
495
652
|
readonly compareWith: _angular_core.InputSignal<((a: V, b: V) => boolean) | undefined>;
|
|
653
|
+
private readonly el;
|
|
654
|
+
private readonly errorResolver;
|
|
496
655
|
private readonly idGen;
|
|
497
656
|
private readonly uid;
|
|
498
657
|
protected readonly baseId: _angular_core.Signal<string>;
|
|
@@ -501,16 +660,20 @@ declare class KtCheckboxGroup<V> implements FormValueControl<V[]> {
|
|
|
501
660
|
protected readonly errorId: _angular_core.Signal<string>;
|
|
502
661
|
private readonly matcher;
|
|
503
662
|
protected readonly showInvalid: _angular_core.Signal<boolean>;
|
|
504
|
-
|
|
663
|
+
/** Erreurs résolues (messages par défaut appliqués, suppressions `message: ''` écartées). */
|
|
664
|
+
protected readonly resolvedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
665
|
+
protected readonly displayedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
505
666
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string | null>;
|
|
506
667
|
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
507
668
|
private readonly comparator;
|
|
508
669
|
/** La valeur d'option d'un enfant est-elle dans la sélection ? (lu dans le `computed` enfant) */
|
|
509
670
|
isSelected(optionValue: V): boolean;
|
|
671
|
+
/** Focus la première case activable (utilisé par Signal Forms `focusBoundControl`). */
|
|
672
|
+
focus(options?: FocusOptions): void;
|
|
510
673
|
/** Ajoute/retire une valeur d'option de la sélection (émis par un enfant au `change` natif). */
|
|
511
674
|
toggle(optionValue: V, checked: boolean): void;
|
|
512
675
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtCheckboxGroup<any>, never>;
|
|
513
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtCheckboxGroup<any>, "kt-checkbox-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
|
|
676
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtCheckboxGroup<any>, "kt-checkbox-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
|
|
514
677
|
}
|
|
515
678
|
|
|
516
679
|
/**
|
|
@@ -562,6 +725,8 @@ declare class KtCheckbox<V = unknown> implements FormValueControl<boolean> {
|
|
|
562
725
|
readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
563
726
|
/** État « modifié » (entre dans la logique d'affichage des erreurs). @default false */
|
|
564
727
|
readonly dirty: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
728
|
+
/** Validation asynchrone en cours (poussé par `[field]`) : pose `aria-busy` + `data-pending`. @default false */
|
|
729
|
+
readonly pending: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
565
730
|
/** Erreurs de validation à afficher sous la case. @default [] */
|
|
566
731
|
readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
|
|
567
732
|
/** Attribut `name` du `<input>` natif. @default '' */
|
|
@@ -580,6 +745,9 @@ declare class KtCheckbox<V = unknown> implements FormValueControl<boolean> {
|
|
|
580
745
|
readonly showAllErrors: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
581
746
|
private readonly inputEl;
|
|
582
747
|
private readonly el;
|
|
748
|
+
private readonly errorResolver;
|
|
749
|
+
private readonly auditEnabled;
|
|
750
|
+
private isDestroyed;
|
|
583
751
|
private readonly idGen;
|
|
584
752
|
private readonly uid;
|
|
585
753
|
protected readonly baseId: _angular_core.Signal<string>;
|
|
@@ -592,14 +760,18 @@ declare class KtCheckbox<V = unknown> implements FormValueControl<boolean> {
|
|
|
592
760
|
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
593
761
|
private readonly matcher;
|
|
594
762
|
protected readonly showInvalid: _angular_core.Signal<boolean>;
|
|
595
|
-
|
|
763
|
+
/** Erreurs résolues (messages par défaut appliqués, suppressions `message: ''` écartées). */
|
|
764
|
+
protected readonly resolvedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
765
|
+
protected readonly displayedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
596
766
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string | null>;
|
|
597
767
|
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
598
768
|
constructor();
|
|
769
|
+
/** Focus la case native (utilisé par Signal Forms `focusBoundControl`). */
|
|
770
|
+
focus(options?: FocusOptions): void;
|
|
599
771
|
protected onChange(event: Event): void;
|
|
600
772
|
protected onBlur(): void;
|
|
601
773
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtCheckbox<any>, never>;
|
|
602
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtCheckbox<any>, "kt-checkbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
|
|
774
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtCheckbox<any>, "kt-checkbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
|
|
603
775
|
}
|
|
604
776
|
|
|
605
777
|
/**
|
|
@@ -635,6 +807,8 @@ declare class KtRadioGroup<V> implements FormValueControl<V | null> {
|
|
|
635
807
|
readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
636
808
|
/** État « modifié » (entre dans la logique d'affichage des erreurs). @default false */
|
|
637
809
|
readonly dirty: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
810
|
+
/** Validation asynchrone en cours (poussé par `[field]`) : pose `aria-busy` + `data-pending`. @default false */
|
|
811
|
+
readonly pending: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
638
812
|
/** Erreurs de validation à afficher sous le groupe. @default [] */
|
|
639
813
|
readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
|
|
640
814
|
/** Base du `name` partagé par les radios enfants (sinon auto-généré). @default '' */
|
|
@@ -653,6 +827,8 @@ declare class KtRadioGroup<V> implements FormValueControl<V | null> {
|
|
|
653
827
|
readonly showAllErrors: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
654
828
|
/** Égalité des valeurs en mode objet (défaut : identité `===`). Seul rescapé du contrat select. */
|
|
655
829
|
readonly compareWith: _angular_core.InputSignal<((a: V, b: V) => boolean) | undefined>;
|
|
830
|
+
private readonly el;
|
|
831
|
+
private readonly errorResolver;
|
|
656
832
|
private readonly idGen;
|
|
657
833
|
private readonly uid;
|
|
658
834
|
protected readonly baseId: _angular_core.Signal<string>;
|
|
@@ -663,16 +839,21 @@ declare class KtRadioGroup<V> implements FormValueControl<V | null> {
|
|
|
663
839
|
protected readonly errorId: _angular_core.Signal<string>;
|
|
664
840
|
private readonly matcher;
|
|
665
841
|
protected readonly showInvalid: _angular_core.Signal<boolean>;
|
|
666
|
-
|
|
842
|
+
/** Erreurs résolues (messages par défaut appliqués, suppressions `message: ''` écartées). */
|
|
843
|
+
protected readonly resolvedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
844
|
+
protected readonly displayedErrors: _angular_core.Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
667
845
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string | null>;
|
|
668
846
|
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
669
847
|
private readonly comparator;
|
|
670
848
|
/** L'`optionValue` d'un enfant correspond-il à la sélection courante ? (lu dans le `computed` enfant) */
|
|
671
849
|
isSelected(radioValue: V): boolean;
|
|
850
|
+
/** Focus l'option pertinente (utilisé par Signal Forms `focusBoundControl`) : le radio coché
|
|
851
|
+
s'il existe, sinon le premier radio activable — conforme au roving tabindex natif. */
|
|
852
|
+
focus(options?: FocusOptions): void;
|
|
672
853
|
/** Commit d'une sélection émis par un enfant au `change` natif. */
|
|
673
854
|
select(radioValue: V): void;
|
|
674
855
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtRadioGroup<any>, never>;
|
|
675
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtRadioGroup<any>, "kt-radio-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
|
|
856
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtRadioGroup<any>, "kt-radio-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "showAllErrors": { "alias": "showAllErrors"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
|
|
676
857
|
}
|
|
677
858
|
|
|
678
859
|
/**
|
|
@@ -734,13 +915,18 @@ type KtKeyish<T, R> = keyof T | ((item: T) => R);
|
|
|
734
915
|
ou la clé extraite quand `optionValue` est fourni). */
|
|
735
916
|
declare abstract class KtBaseSelect<T, V = T> {
|
|
736
917
|
protected readonly fieldConfig: Partial<_ktortu_aaa_forms.KtFieldConfig> | null;
|
|
918
|
+
private readonly errorResolver;
|
|
737
919
|
protected readonly config: Partial<_ktortu_aaa_forms.KtSelectConfigOptions> | null;
|
|
738
920
|
protected readonly host: ElementRef<HTMLElement>;
|
|
739
|
-
private readonly ngZone;
|
|
740
921
|
protected readonly doc: Document;
|
|
741
922
|
private readonly platformId;
|
|
742
923
|
private readonly destroyRef;
|
|
924
|
+
private readonly bodyScrollLock;
|
|
743
925
|
private wasExpanded;
|
|
926
|
+
private scrollLocked;
|
|
927
|
+
/** Pose/relâche le verrou de scroll du fond de façon idempotente (n'agit qu'à la transition),
|
|
928
|
+
via le compteur partagé `KtBodyScrollLock` — deux sheets ouvertes ne se désynchronisent pas. */
|
|
929
|
+
private setBodyScrollLock;
|
|
744
930
|
/** Liste des options affichées (source de vérité du contrôle). */
|
|
745
931
|
readonly options: _angular_core.InputSignal<readonly T[]>;
|
|
746
932
|
/** Libellé affiché d'une option : clé OU fonction. Défaut : `label`/`name`, sinon `String(option)`. */
|
|
@@ -767,6 +953,8 @@ declare abstract class KtBaseSelect<T, V = T> {
|
|
|
767
953
|
readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
768
954
|
/** Le champ a-t-il été modifié depuis sa valeur initiale ? Poussé par `[formField]`. @default false */
|
|
769
955
|
readonly dirty: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
956
|
+
/** Validation asynchrone en cours (poussé par `[field]`) : pose `aria-busy` + `data-pending`. @default false */
|
|
957
|
+
readonly pending: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
770
958
|
/** Erreurs de validation à afficher. Poussé par `[formField]`. @default [] */
|
|
771
959
|
readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
|
|
772
960
|
/** Attribut `name` logique du contrôle (à titre indicatif). @default '' */
|
|
@@ -839,10 +1027,7 @@ declare abstract class KtBaseSelect<T, V = T> {
|
|
|
839
1027
|
protected readonly resolvedFilterResultsText: Signal<(count: number) => string>;
|
|
840
1028
|
protected readonly resolvedTruncatedResultsText: Signal<(max: number, total: number) => string>;
|
|
841
1029
|
protected readonly resolvedTruncatedResultsAnnouncement: Signal<(max: number, total: number) => string>;
|
|
842
|
-
protected readonly fieldErrors: Signal<
|
|
843
|
-
kind: string;
|
|
844
|
-
message: string | undefined;
|
|
845
|
-
}[]>;
|
|
1030
|
+
protected readonly fieldErrors: Signal<_ktortu_aaa_forms.KtFieldError[]>;
|
|
846
1031
|
private readonly labelAccessor;
|
|
847
1032
|
private readonly valueAccessor;
|
|
848
1033
|
private readonly disabledAccessor;
|
|
@@ -886,6 +1071,11 @@ declare abstract class KtBaseSelect<T, V = T> {
|
|
|
886
1071
|
re-pousse rien (`listboxValue` n'a pas changé) — on resynchronise le modèle du Listbox
|
|
887
1072
|
avec les clés sélectionnées actuellement visibles. */
|
|
888
1073
|
protected resyncListboxSelection(): void;
|
|
1074
|
+
/** Focus le trigger natif (utilisé par Signal Forms `focusBoundControl`). */
|
|
1075
|
+
focus(options?: FocusOptions): void;
|
|
1076
|
+
/** Referme le panneau et vide le filtre (utilisé par Signal Forms `reset`). La sélection du
|
|
1077
|
+
listbox dérive de `value()` (computed) et se resynchronise seule. */
|
|
1078
|
+
reset(): void;
|
|
889
1079
|
/** Desktop filtrable : le focus DOM vit dans le popup (champ/options) — on le rend au trigger
|
|
890
1080
|
à la fermeture, sinon il tombe sur `<body>`. (Écran compact : déjà géré par l'effect `compact`.) */
|
|
891
1081
|
protected refocusTriggerAfterFilterClose(): void;
|
|
@@ -895,7 +1085,7 @@ declare abstract class KtBaseSelect<T, V = T> {
|
|
|
895
1085
|
protected onDragStart(event: PointerEvent): void;
|
|
896
1086
|
private animateAndCloseSelect;
|
|
897
1087
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtBaseSelect<any, any>, never>;
|
|
898
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KtBaseSelect<any, any>, never, never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionDisabled": { "alias": "optionDisabled"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "helpLabel": { "alias": "helpLabel"; "required": false; "isSignal": true; }; "customDescribedBy": { "alias": "customDescribedBy"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "filterLabel": { "alias": "filterLabel"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "maxVisibleOptions": { "alias": "maxVisibleOptions"; "required": false; "isSignal": true; }; "truncatedResultsText": { "alias": "truncatedResultsText"; "required": false; "isSignal": true; }; "truncatedResultsAnnouncement": { "alias": "truncatedResultsAnnouncement"; "required": false; "isSignal": true; }; }, { "helpClick": "helpClick"; "touched": "touchedChange"; }, never, never, true, never>;
|
|
1088
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KtBaseSelect<any, any>, never, never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionDisabled": { "alias": "optionDisabled"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "helpLabel": { "alias": "helpLabel"; "required": false; "isSignal": true; }; "customDescribedBy": { "alias": "customDescribedBy"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMatcher": { "alias": "errorMatcher"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "filterLabel": { "alias": "filterLabel"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "maxVisibleOptions": { "alias": "maxVisibleOptions"; "required": false; "isSignal": true; }; "truncatedResultsText": { "alias": "truncatedResultsText"; "required": false; "isSignal": true; }; "truncatedResultsAnnouncement": { "alias": "truncatedResultsAnnouncement"; "required": false; "isSignal": true; }; }, { "helpClick": "helpClick"; "touched": "touchedChange"; }, never, never, true, never>;
|
|
899
1089
|
}
|
|
900
1090
|
|
|
901
1091
|
/** Contexte typé reçu par le template d'une option (`ktSelectOption`). */
|
|
@@ -1343,7 +1533,6 @@ declare class KtChipList<T> implements ChipTransitionScope {
|
|
|
1343
1533
|
private readonly doc;
|
|
1344
1534
|
private readonly platformId;
|
|
1345
1535
|
private readonly cdr;
|
|
1346
|
-
private readonly ngZone;
|
|
1347
1536
|
/** Vrai pendant la View Transition de CETTE liste : les chips (standards via Chip,
|
|
1348
1537
|
custom via tokens.css) ne portent leur `view-transition-name` que dans cette fenêtre. */
|
|
1349
1538
|
readonly transitioning: _angular_core.WritableSignal<boolean>;
|
|
@@ -1383,6 +1572,13 @@ declare class KtChipList<T> implements ChipTransitionScope {
|
|
|
1383
1572
|
}>;
|
|
1384
1573
|
protected readonly itemDef: _angular_core.Signal<KtChipItemDef<any> | undefined>;
|
|
1385
1574
|
private readonly chips;
|
|
1575
|
+
private static readonly CHIP_FOCUSABLES;
|
|
1576
|
+
private static readonly ROVING_FOCUSABLES;
|
|
1577
|
+
private query;
|
|
1578
|
+
/** Index de l'unique focusable portant `tabindex="0"` : point d'entrée clavier UNIQUE dans la
|
|
1579
|
+
liste (pattern composite WAI-ARIA). Les flèches/Home/End le déplacent ; un focus direct
|
|
1580
|
+
(souris) le resynchronise via `onFocusin`. */
|
|
1581
|
+
protected readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
1386
1582
|
protected readonly resolvedListLabel: _angular_core.Signal<string>;
|
|
1387
1583
|
private readonly resolvedRemoveItemLabel;
|
|
1388
1584
|
private readonly resolvedItemRemovedText;
|
|
@@ -1423,6 +1619,8 @@ declare class KtChipList<T> implements ChipTransitionScope {
|
|
|
1423
1619
|
/** Déplie/replie ; au dépliage, focus sur le premier chip nouvellement révélé. */
|
|
1424
1620
|
protected toggleExpanded(): void;
|
|
1425
1621
|
protected onKeydown(event: KeyboardEvent): void;
|
|
1622
|
+
/** Resynchronise le point de tabulation unique sur l'élément réellement focusé (souris/voix). */
|
|
1623
|
+
protected onFocusin(event: FocusEvent): void;
|
|
1426
1624
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtChipList<any>, never>;
|
|
1427
1625
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtChipList<any>, "kt-chip-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "itemLabel": { "alias": "itemLabel"; "required": false; "isSignal": true; }; "itemKey": { "alias": "itemKey"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "maxVisible": { "alias": "maxVisible"; "required": false; "isSignal": true; }; "listLabel": { "alias": "listLabel"; "required": false; "isSignal": true; }; "removeItemLabel": { "alias": "removeItemLabel"; "required": false; "isSignal": true; }; "itemRemovedText": { "alias": "itemRemovedText"; "required": false; "isSignal": true; }; "moreLabel": { "alias": "moreLabel"; "required": false; "isSignal": true; }; "lessLabel": { "alias": "lessLabel"; "required": false; "isSignal": true; }; "chipTemplate": { "alias": "chipTemplate"; "required": false; "isSignal": true; }; "emptyFocusTarget": { "alias": "emptyFocusTarget"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, ["itemDef"], never, true, never>;
|
|
1428
1626
|
}
|
|
@@ -1483,6 +1681,12 @@ declare abstract class KtBaseTemporalField<T extends {
|
|
|
1483
1681
|
/** Sérialise la valeur au format attendu par l'input natif (précision adaptée au type). */
|
|
1484
1682
|
protected abstract serialize(value: T): string;
|
|
1485
1683
|
protected parse(raw: string): T | null;
|
|
1684
|
+
protected displayValue(): string;
|
|
1685
|
+
/** Efface AUSSI l'input natif. L'effet de synchro ignore une mise à `null` quand l'input est
|
|
1686
|
+
focalisé (pour ne pas écraser une saisie partielle en cours), or `clear()` focalise justement
|
|
1687
|
+
le champ — sans ce forçage, le bouton « effacer » (et Échap) resterait sans effet sur les
|
|
1688
|
+
champs temporels. */
|
|
1689
|
+
protected clear(): void;
|
|
1486
1690
|
protected emptyValue(): T | null;
|
|
1487
1691
|
protected isEmpty(value: T | null): boolean;
|
|
1488
1692
|
/** Borne minimale autorisée (membre `min` du contrat `FormValueControl`, aussi posé en attribut
|
|
@@ -1555,6 +1759,10 @@ declare abstract class KtBaseTimeTemporalField<T extends {
|
|
|
1555
1759
|
* suffira de retirer le polyfill de `main.ts` : ce fichier ne change pas.
|
|
1556
1760
|
*/
|
|
1557
1761
|
type TemporalImpl = (typeof temporal_polyfill)['Temporal'];
|
|
1762
|
+
/** Point d'accès `Temporal` de la lib. Proxy à résolution paresseuse : le namespace réel n'est lu
|
|
1763
|
+
qu'au premier accès de propriété (`Temporal.PlainDate`…), jamais à l'import — ce qui supprime la
|
|
1764
|
+
dépendance à l'ordre d'init des modules et fait booter Safari/WebKit tant que le polyfill est
|
|
1765
|
+
importé dans `main.ts`. */
|
|
1558
1766
|
declare const Temporal: TemporalImpl;
|
|
1559
1767
|
|
|
1560
1768
|
/** Date civile (jour/mois/année), sans heure ni fuseau — alias de `Temporal.PlainDate`.
|
|
@@ -1757,5 +1965,5 @@ declare class KtFixedClock extends KtClock {
|
|
|
1757
1965
|
today(): Temporal$1.PlainDate;
|
|
1758
1966
|
}
|
|
1759
1967
|
|
|
1760
|
-
export { DEFAULT_KT_SELECT_CONFIG, KT_CHIPS_CONFIG, KT_FIELD, KT_FIELD_CONFIG, KT_SELECT_CONFIG, KtBaseInputField, KtBaseSelect, KtBaseTemporalField, KtBaseTimeTemporalField, KtCheckbox, KtCheckboxGroup, KtChip, KtChipItemDef, KtChipList, KtClock, KtDateField, KtDateTimeField, KtField, KtFieldControl, KtFixedClock, KtInstantField, KtMultiSelect, KtMultiSelectChipDef, KtMultiSelectOptionDef, KtMultiSelectTriggerDef, KtNumberField, KtRadio, KtRadioGroup, KtSelect, KtSelectConfig, KtSelectOptionDef, KtSelectTriggerDef, KtSwitch, KtTemporalDatePipe, KtTextArea, KtTextField, KtTimeField, KtYearMonthField, Temporal, defaultKtFieldErrorMatcher, normalizeKtSuggestions, provideKtField };
|
|
1761
|
-
export type { CalendarDate, KtChipItemContext, KtChipsConfig, KtDatalistOption, KtFieldAppearance, KtFieldConfig, KtFieldError, KtFieldErrorMatcher, KtFieldErrorState, KtFieldParent, KtFloatLabel, KtKeyish, KtMultiSelectChipContext, KtMultiSelectOptionContext, KtMultiSelectSelectionChange, KtMultiSelectTriggerContext, KtSelectConfigOptions, KtSelectOptionContext, KtSelectSelectionChange, KtSelectTriggerContext, KtSuggestion, KtTextFieldType, KtTimePrecision, LocalDateTime, Timestamp, WallTime, ZonedTimestamp };
|
|
1968
|
+
export { DEFAULT_KT_SELECT_CONFIG, KT_CHIPS_CONFIG, KT_DEFAULT_FIELD_ERROR_MESSAGES, KT_FIELD, KT_FIELD_CONFIG, KT_SELECT_CONFIG, KtBaseInputField, KtBaseSelect, KtBaseTemporalField, KtBaseTimeTemporalField, KtCheckbox, KtCheckboxGroup, KtChip, KtChipItemDef, KtChipList, KtClock, KtDateField, KtDateTimeField, KtField, KtFieldControl, KtFieldErrorResolver, KtFixedClock, KtInstantField, KtMultiSelect, KtMultiSelectChipDef, KtMultiSelectOptionDef, KtMultiSelectTriggerDef, KtNumberField, KtPasswordField, KtRadio, KtRadioGroup, KtSelect, KtSelectConfig, KtSelectOptionDef, KtSelectTriggerDef, KtSwitch, KtTemporalDatePipe, KtTextArea, KtTextField, KtTimeField, KtYearMonthField, Temporal, defaultKtFieldErrorMatcher, ktErrorParam, normalizeKtSuggestions, provideKtField };
|
|
1969
|
+
export type { CalendarDate, KtChipItemContext, KtChipsConfig, KtDatalistOption, KtErrorMessageFactory, KtFieldAppearance, KtFieldConfig, KtFieldError, KtFieldErrorMatcher, KtFieldErrorMessages, KtFieldErrorState, KtFieldParent, KtFloatLabel, KtKeyish, KtMultiSelectChipContext, KtMultiSelectOptionContext, KtMultiSelectSelectionChange, KtMultiSelectTriggerContext, KtPasswordAutocomplete, KtResolvableError, KtSelectConfigOptions, KtSelectOptionContext, KtSelectSelectionChange, KtSelectTriggerContext, KtSuggestion, KtTextFieldType, KtTimePrecision, LocalDateTime, Timestamp, WallTime, ZonedTimestamp };
|