@ktortu/aaa 0.9.1 → 0.9.3
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/dialog/dialog.css +6 -0
- package/fesm2022/ktortu-aaa-button.mjs +10 -2
- package/fesm2022/ktortu-aaa-button.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-card.mjs +112 -99
- package/fesm2022/ktortu-aaa-card.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-cdk.mjs +49 -2
- package/fesm2022/ktortu-aaa-cdk.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-dialog.mjs +240 -32
- package/fesm2022/ktortu-aaa-dialog.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-disclosure.mjs +203 -0
- package/fesm2022/ktortu-aaa-disclosure.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-forms.mjs +217 -103
- package/fesm2022/ktortu-aaa-forms.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 +16 -3
- package/fesm2022/ktortu-aaa-snackbar.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 +1 -0
- package/fesm2022/ktortu-aaa.mjs.map +1 -1
- package/forms/field/field.css +16 -0
- package/forms/styles/field-box.css +11 -5
- package/package.json +9 -1
- package/progress-bar/progress-bar.css +127 -0
- package/styles/disclosure.css +6 -0
- package/styles/progress-bar.css +5 -0
- package/styles/styles.css +2 -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 +69 -65
- package/types/ktortu-aaa-cdk.d.ts +27 -1
- package/types/ktortu-aaa-dialog.d.ts +134 -15
- package/types/ktortu-aaa-disclosure.d.ts +121 -0
- package/types/ktortu-aaa-forms.d.ts +69 -16
- package/types/ktortu-aaa-progress-bar.d.ts +27 -0
- package/types/ktortu-aaa-snackbar.d.ts +11 -68
- package/types/ktortu-aaa-tooltip.d.ts +0 -1
- package/types/ktortu-aaa.d.ts +1 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { AfterViewInit, AfterContentInit, InjectionToken } from '@angular/core';
|
|
3
|
+
import * as _ktortu_aaa_disclosure from '@ktortu/aaa/disclosure';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Déclencheur d'un [ktDisclosure] : posé sur un **vrai `<button>`** (clavier Entrée/Espace
|
|
7
|
+
* gratuit). Câble `(click)` → `toggle()` et reflète l'état via `aria-expanded` / `aria-controls`
|
|
8
|
+
* (cf. ADR-0004). `type="button"` est posé **s'il est absent** (ne pas soumettre un formulaire,
|
|
9
|
+
* sans écraser un `type` explicite du consommateur).
|
|
10
|
+
*
|
|
11
|
+
* Le contenu du bouton appartient au consommateur (texte, icône, libellé piloté par `expanded()`). Un
|
|
12
|
+
* **chevron** décoratif (qui pivote selon l'état) est affiché par défaut ; le désactiver avec
|
|
13
|
+
* `[chevron]="false"`. La directive applique elle-même la classe de style — rien à écrire.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```html
|
|
17
|
+
* <button ktDisclosureToggle>Détails</button> <!-- avec chevron -->
|
|
18
|
+
* <button ktDisclosureToggle [chevron]="false">Détails</button> <!-- sans chevron -->
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare class KtDisclosureToggle implements AfterViewInit {
|
|
22
|
+
readonly disclosure: _ktortu_aaa_disclosure.KtDisclosureInterface;
|
|
23
|
+
private readonly host;
|
|
24
|
+
private readonly auditEnabled;
|
|
25
|
+
/** Affiche le chevron décoratif (qui pivote selon l'état). @default true */
|
|
26
|
+
readonly chevron: i0.InputSignalWithTransform<boolean, unknown>;
|
|
27
|
+
constructor();
|
|
28
|
+
ngAfterViewInit(): void;
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDisclosureToggle, never>;
|
|
30
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDisclosureToggle, "button[ktDisclosureToggle]", never, { "chevron": { "alias": "chevron"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Panneau repliable d'un [ktDisclosure]. **Composant** (et non directive) car l'animation grid
|
|
35
|
+
* `0fr ↔ 1fr` exige un **unique enfant `overflow:hidden`** autour du contenu projeté — ce wrapper
|
|
36
|
+
* (`.kt-disclosure-content__inner`) est fourni by le template, le consommateur reste libre d'y
|
|
37
|
+
* mettre autant de blocs qu'il veut.
|
|
38
|
+
*
|
|
39
|
+
* Porte l'`id` (cible de `aria-controls`) et passe **`inert`** quand c'est fermé : le contenu
|
|
40
|
+
* masqué sort de l'ordre de tabulation et de l'arbre d'accessibilité (jamais de focus dans
|
|
41
|
+
* l'invisible). Pas de `role=region` (anti-pollution du rotor de régions). Cf. ADR-0004.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```html
|
|
45
|
+
* <kt-disclosure-content>
|
|
46
|
+
* <p>Premier bloc</p>
|
|
47
|
+
* <p>Second bloc…</p>
|
|
48
|
+
* </kt-disclosure-content>
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
declare class KtDisclosureContent {
|
|
52
|
+
readonly disclosure: _ktortu_aaa_disclosure.KtDisclosureInterface;
|
|
53
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDisclosureContent, never>;
|
|
54
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<KtDisclosureContent, "kt-disclosure-content", never, {}, {}, never, ["*"], true, never>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Disclosure : replie/déplie un **bloc d'interface** (volet d'options, module de dashboard,
|
|
59
|
+
* section d'une fiche produit). Directive HÔTE d'une famille à trois marqueurs — elle possède
|
|
60
|
+
* l'état, génère l'`id` du panneau et expose des méthodes impératives ; le câblage ARIA et
|
|
61
|
+
* l'animation vivent sur `[ktDisclosureToggle]` / `<kt-disclosure-content>`.
|
|
62
|
+
*
|
|
63
|
+
* Pour une **section de contenu** de page (façon Wikipédia / FAQ), préférer `<details>` natif
|
|
64
|
+
* (sémantique, find-in-page, SEO, zéro JS) — cf. ADR-0004.
|
|
65
|
+
*
|
|
66
|
+
* L'état est exposé via `exportAs: 'ktDisclosure'` : lisez `expanded()` pour piloter le template
|
|
67
|
+
* (ex. libellé « Voir plus / Voir moins ») sans input de libellé (i18n côté consommateur,
|
|
68
|
+
* cf. ADR-0003).
|
|
69
|
+
*
|
|
70
|
+
* Contrat : **un** `[ktDisclosureToggle]` et **un** `<kt-disclosure-content>` par hôte (id de
|
|
71
|
+
* panneau unique / `aria-controls` non ambigu) ; un avertissement dev le signale sinon.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```html
|
|
75
|
+
* <div ktDisclosure #d="ktDisclosure">
|
|
76
|
+
* <button ktDisclosureToggle>{{ d.expanded() ? 'Voir moins' : 'Voir plus' }}</button>
|
|
77
|
+
* <kt-disclosure-content><p>Mon contenu</p></kt-disclosure-content>
|
|
78
|
+
* </div>
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
declare class KtDisclosure implements AfterContentInit {
|
|
82
|
+
private readonly idGen;
|
|
83
|
+
private readonly host;
|
|
84
|
+
/** Identifiant stable du panneau contrôlé : cible de l'`aria-controls` du déclencheur. */
|
|
85
|
+
readonly contentId: string;
|
|
86
|
+
/**
|
|
87
|
+
* État ouvert/fermé. **Toujours utilisé en binding** (`[(expanded)]` / `[expanded]`), jamais en
|
|
88
|
+
* attribut nu : un `model()` n'accepte pas de `booleanAttribute`, donc `<div ktDisclosure expanded>`
|
|
89
|
+
* pousserait la chaîne `''` au lieu de `true`. En binding, la valeur est garantie booléenne.
|
|
90
|
+
* @default false
|
|
91
|
+
*/
|
|
92
|
+
readonly expanded: i0.ModelSignal<boolean>;
|
|
93
|
+
private readonly auditEnabled;
|
|
94
|
+
readonly toggles: i0.Signal<readonly KtDisclosureToggle[]>;
|
|
95
|
+
readonly contents: i0.Signal<readonly KtDisclosureContent[]>;
|
|
96
|
+
ngAfterContentInit(): void;
|
|
97
|
+
/** Bascule l'état. */
|
|
98
|
+
toggle(): void;
|
|
99
|
+
/** Ouvre le panneau. */
|
|
100
|
+
expand(): void;
|
|
101
|
+
/** Ferme le panneau. */
|
|
102
|
+
collapse(): void;
|
|
103
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDisclosure, never>;
|
|
104
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDisclosure, "[ktDisclosure]", ["ktDisclosure"], { "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, ["toggles", "contents"], never, true, never>;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
interface KtDisclosureInterface {
|
|
108
|
+
readonly contentId: string;
|
|
109
|
+
readonly expanded: () => boolean;
|
|
110
|
+
toggle(): void;
|
|
111
|
+
}
|
|
112
|
+
declare const KT_DISCLOSURE: InjectionToken<KtDisclosureInterface>;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Import ergonomique de toute la famille disclosure en une fois :
|
|
116
|
+
* `imports: [KtDisclosureImports]` au lieu d'énumérer chaque marqueur.
|
|
117
|
+
*/
|
|
118
|
+
declare const KtDisclosureImports: readonly [typeof KtDisclosure, typeof KtDisclosureToggle, typeof KtDisclosureContent];
|
|
119
|
+
|
|
120
|
+
export { KT_DISCLOSURE, KtDisclosure, KtDisclosureContent, KtDisclosureImports, KtDisclosureToggle };
|
|
121
|
+
export type { KtDisclosureInterface };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { InjectionToken, Signal, Provider, TemplateRef, ModelSignal, ElementRef, PipeTransform } from '@angular/core';
|
|
2
|
+
import { InjectionToken, Signal, Provider, TemplateRef, ModelSignal, ElementRef, AfterViewInit, PipeTransform } from '@angular/core';
|
|
3
3
|
import * as _angular_forms_signals from '@angular/forms/signals';
|
|
4
4
|
import { ValidationError, WithOptionalFieldTree, FormValueControl } from '@angular/forms/signals';
|
|
5
5
|
import * as _ktortu_aaa_forms from '@ktortu/aaa/forms';
|
|
@@ -164,22 +164,23 @@ declare class KtField implements KtFieldParent {
|
|
|
164
164
|
/** Politique effective : input ?? KT_FIELD_CONFIG.floatLabel ?? 'auto'. */
|
|
165
165
|
protected readonly resolvedFloatLabel: _angular_core.Signal<KtFloatLabel>;
|
|
166
166
|
private readonly control;
|
|
167
|
-
private readonly templateTooltip;
|
|
168
|
-
private readonly projectedTooltip;
|
|
169
|
-
private readonly activeTooltip;
|
|
170
167
|
private readonly idGen;
|
|
171
168
|
private readonly uid;
|
|
172
169
|
readonly baseId: _angular_core.Signal<string>;
|
|
173
170
|
protected readonly labelId: _angular_core.Signal<string>;
|
|
174
171
|
protected readonly hintId: _angular_core.Signal<string>;
|
|
175
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>;
|
|
176
177
|
protected readonly hasError: _angular_core.Signal<boolean>;
|
|
177
178
|
protected readonly showHint: _angular_core.Signal<boolean>;
|
|
178
179
|
protected readonly displayedErrors: _angular_core.Signal<readonly KtFieldError[]>;
|
|
179
180
|
readonly describedBy: _angular_core.Signal<string | null>;
|
|
180
181
|
protected onHelpClick(event: MouseEvent): void;
|
|
181
182
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtField, never>;
|
|
182
|
-
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>;
|
|
183
184
|
}
|
|
184
185
|
|
|
185
186
|
/** Marque le contrôle (natif ou custom) d'un champ pour que `Field` y câble l'a11y
|
|
@@ -439,16 +440,11 @@ declare class KtTextArea extends KtBaseInputField<string> implements FormValueCo
|
|
|
439
440
|
readonly minLength: _angular_core.InputSignal<number | undefined>;
|
|
440
441
|
/** Plafond de caractères ; poussé par le form (validateur maxLength) ou par le consommateur. @default undefined */
|
|
441
442
|
readonly maxLength: _angular_core.InputSignal<number | undefined>;
|
|
442
|
-
/** Motifs de validation (contrat Signal Forms). L'attribut natif `pattern` ne prend qu'une regex →
|
|
443
|
-
seule la première est posée. @default [] */
|
|
444
|
-
readonly pattern: _angular_core.InputSignal<readonly RegExp[]>;
|
|
445
|
-
/** Source de la première regex pour l'attribut `pattern` natif (`null` si aucune). */
|
|
446
|
-
protected readonly patternAttr: _angular_core.Signal<string>;
|
|
447
443
|
protected parse(raw: string): string;
|
|
448
444
|
protected emptyValue(): string;
|
|
449
445
|
protected isEmpty(value: string): boolean;
|
|
450
446
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtTextArea, never>;
|
|
451
|
-
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; };
|
|
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>;
|
|
452
448
|
}
|
|
453
449
|
|
|
454
450
|
/** Types texte dont la valeur reste une string (number/date = composants séparés). */
|
|
@@ -492,6 +488,48 @@ declare class KtTextField extends KtBaseInputField<string> implements FormValueC
|
|
|
492
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>;
|
|
493
489
|
}
|
|
494
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>;
|
|
531
|
+
}
|
|
532
|
+
|
|
495
533
|
/**
|
|
496
534
|
* Bouton bascule (Switch / Slide-Toggle) accessible conforme aux normes WAI-ARIA.
|
|
497
535
|
* Permet d'activer ou désactiver une option avec effet immédiat.
|
|
@@ -665,7 +703,7 @@ declare class KtCheckboxGroup<V> implements FormValueControl<V[]> {
|
|
|
665
703
|
* </kt-checkbox-group>
|
|
666
704
|
* ```
|
|
667
705
|
*/
|
|
668
|
-
declare class KtCheckbox<V = unknown> implements FormValueControl<boolean
|
|
706
|
+
declare class KtCheckbox<V = unknown> implements FormValueControl<boolean>, AfterViewInit {
|
|
669
707
|
private readonly config;
|
|
670
708
|
/** Groupe parent optionnel : présent ⇒ la case appartient à un `kt-checkbox-group`. */
|
|
671
709
|
protected readonly group: KtCheckboxGroup<V> | null;
|
|
@@ -708,6 +746,8 @@ declare class KtCheckbox<V = unknown> implements FormValueControl<boolean> {
|
|
|
708
746
|
private readonly inputEl;
|
|
709
747
|
private readonly el;
|
|
710
748
|
private readonly errorResolver;
|
|
749
|
+
private readonly auditEnabled;
|
|
750
|
+
private isDestroyed;
|
|
711
751
|
private readonly idGen;
|
|
712
752
|
private readonly uid;
|
|
713
753
|
protected readonly baseId: _angular_core.Signal<string>;
|
|
@@ -726,6 +766,7 @@ declare class KtCheckbox<V = unknown> implements FormValueControl<boolean> {
|
|
|
726
766
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string | null>;
|
|
727
767
|
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
728
768
|
constructor();
|
|
769
|
+
ngAfterViewInit(): void;
|
|
729
770
|
/** Focus la case native (utilisé par Signal Forms `focusBoundControl`). */
|
|
730
771
|
focus(options?: FocusOptions): void;
|
|
731
772
|
protected onChange(event: Event): void;
|
|
@@ -878,11 +919,15 @@ declare abstract class KtBaseSelect<T, V = T> {
|
|
|
878
919
|
private readonly errorResolver;
|
|
879
920
|
protected readonly config: Partial<_ktortu_aaa_forms.KtSelectConfigOptions> | null;
|
|
880
921
|
protected readonly host: ElementRef<HTMLElement>;
|
|
881
|
-
private readonly ngZone;
|
|
882
922
|
protected readonly doc: Document;
|
|
883
923
|
private readonly platformId;
|
|
884
924
|
private readonly destroyRef;
|
|
925
|
+
private readonly bodyScrollLock;
|
|
885
926
|
private wasExpanded;
|
|
927
|
+
private scrollLocked;
|
|
928
|
+
/** Pose/relâche le verrou de scroll du fond de façon idempotente (n'agit qu'à la transition),
|
|
929
|
+
via le compteur partagé `KtBodyScrollLock` — deux sheets ouvertes ne se désynchronisent pas. */
|
|
930
|
+
private setBodyScrollLock;
|
|
886
931
|
/** Liste des options affichées (source de vérité du contrôle). */
|
|
887
932
|
readonly options: _angular_core.InputSignal<readonly T[]>;
|
|
888
933
|
/** Libellé affiché d'une option : clé OU fonction. Défaut : `label`/`name`, sinon `String(option)`. */
|
|
@@ -1489,7 +1534,6 @@ declare class KtChipList<T> implements ChipTransitionScope {
|
|
|
1489
1534
|
private readonly doc;
|
|
1490
1535
|
private readonly platformId;
|
|
1491
1536
|
private readonly cdr;
|
|
1492
|
-
private readonly ngZone;
|
|
1493
1537
|
/** Vrai pendant la View Transition de CETTE liste : les chips (standards via Chip,
|
|
1494
1538
|
custom via tokens.css) ne portent leur `view-transition-name` que dans cette fenêtre. */
|
|
1495
1539
|
readonly transitioning: _angular_core.WritableSignal<boolean>;
|
|
@@ -1529,6 +1573,13 @@ declare class KtChipList<T> implements ChipTransitionScope {
|
|
|
1529
1573
|
}>;
|
|
1530
1574
|
protected readonly itemDef: _angular_core.Signal<KtChipItemDef<any> | undefined>;
|
|
1531
1575
|
private readonly chips;
|
|
1576
|
+
private static readonly CHIP_FOCUSABLES;
|
|
1577
|
+
private static readonly ROVING_FOCUSABLES;
|
|
1578
|
+
private query;
|
|
1579
|
+
/** Index de l'unique focusable portant `tabindex="0"` : point d'entrée clavier UNIQUE dans la
|
|
1580
|
+
liste (pattern composite WAI-ARIA). Les flèches/Home/End le déplacent ; un focus direct
|
|
1581
|
+
(souris) le resynchronise via `onFocusin`. */
|
|
1582
|
+
protected readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
1532
1583
|
protected readonly resolvedListLabel: _angular_core.Signal<string>;
|
|
1533
1584
|
private readonly resolvedRemoveItemLabel;
|
|
1534
1585
|
private readonly resolvedItemRemovedText;
|
|
@@ -1569,6 +1620,8 @@ declare class KtChipList<T> implements ChipTransitionScope {
|
|
|
1569
1620
|
/** Déplie/replie ; au dépliage, focus sur le premier chip nouvellement révélé. */
|
|
1570
1621
|
protected toggleExpanded(): void;
|
|
1571
1622
|
protected onKeydown(event: KeyboardEvent): void;
|
|
1623
|
+
/** Resynchronise le point de tabulation unique sur l'élément réellement focusé (souris/voix). */
|
|
1624
|
+
protected onFocusin(event: FocusEvent): void;
|
|
1572
1625
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtChipList<any>, never>;
|
|
1573
1626
|
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>;
|
|
1574
1627
|
}
|
|
@@ -1913,5 +1966,5 @@ declare class KtFixedClock extends KtClock {
|
|
|
1913
1966
|
today(): Temporal$1.PlainDate;
|
|
1914
1967
|
}
|
|
1915
1968
|
|
|
1916
|
-
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, KtRadio, KtRadioGroup, KtSelect, KtSelectConfig, KtSelectOptionDef, KtSelectTriggerDef, KtSwitch, KtTemporalDatePipe, KtTextArea, KtTextField, KtTimeField, KtYearMonthField, Temporal, defaultKtFieldErrorMatcher, ktErrorParam, normalizeKtSuggestions, provideKtField };
|
|
1917
|
-
export type { CalendarDate, KtChipItemContext, KtChipsConfig, KtDatalistOption, KtErrorMessageFactory, KtFieldAppearance, KtFieldConfig, KtFieldError, KtFieldErrorMatcher, KtFieldErrorMessages, KtFieldErrorState, KtFieldParent, KtFloatLabel, KtKeyish, KtMultiSelectChipContext, KtMultiSelectOptionContext, KtMultiSelectSelectionChange, KtMultiSelectTriggerContext, KtResolvableError, KtSelectConfigOptions, KtSelectOptionContext, KtSelectSelectionChange, KtSelectTriggerContext, KtSuggestion, KtTextFieldType, KtTimePrecision, LocalDateTime, Timestamp, WallTime, ZonedTimestamp };
|
|
1969
|
+
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 };
|
|
1970
|
+
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 };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { AfterViewInit } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
declare class KtProgressBar implements AfterViewInit {
|
|
5
|
+
private readonly idGen;
|
|
6
|
+
private readonly elementRef;
|
|
7
|
+
protected readonly labelId: string;
|
|
8
|
+
private readonly hasProjectedContent;
|
|
9
|
+
/** Mode de fonctionnement de la barre de progression. @default 'indeterminate' */
|
|
10
|
+
readonly mode: _angular_core.InputSignal<"determinate" | "indeterminate">;
|
|
11
|
+
/** Valeur de la progression (entre 0 et 100). Ignorée en mode 'indeterminate'. @default 0 */
|
|
12
|
+
readonly value: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
13
|
+
/** Label textuel optionnel passé par attribut. */
|
|
14
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
15
|
+
/** Détermine si le label textuel doit être visible à l'écran. @default true */
|
|
16
|
+
readonly labelVisible: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
17
|
+
/** Permet de figer l'animation indéterminée (utile pour les tests). @default false */
|
|
18
|
+
readonly reducedMotion: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
19
|
+
/** Indique si le composant dispose d'un label défini (soit via input, soit par projection). */
|
|
20
|
+
protected readonly hasLabel: _angular_core.Signal<boolean>;
|
|
21
|
+
protected readonly transformStyle: _angular_core.Signal<string | null>;
|
|
22
|
+
ngAfterViewInit(): void;
|
|
23
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtProgressBar, never>;
|
|
24
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtProgressBar, "kt-progress-bar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelVisible": { "alias": "labelVisible"; "required": false; "isSignal": true; }; "reducedMotion": { "alias": "reducedMotion"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { KtProgressBar };
|
|
@@ -151,7 +151,12 @@ declare class KtSnackbarRef {
|
|
|
151
151
|
* - **Échap** ferme la snackbar affichée (la plus récente).
|
|
152
152
|
*
|
|
153
153
|
* Requiert côté hôte les styles `@angular/cdk/overlay-prebuilt.css` **et**
|
|
154
|
-
* `@angular/cdk/a11y-prebuilt.css` (ce dernier masque l'élément du LiveAnnouncer)
|
|
154
|
+
* `@angular/cdk/a11y-prebuilt.css` (ce dernier masque l'élément du LiveAnnouncer), en plus de
|
|
155
|
+
* `@ktortu/aaa/snackbar.css`.
|
|
156
|
+
*
|
|
157
|
+
* > [!IMPORTANT]
|
|
158
|
+
* > **Prérequis d'intégration obligatoire :**
|
|
159
|
+
* > Ce service ne fonctionnera pas correctement sans l'importation de ces deux fichiers CSS de l'overlay CDK et d'accessibilité dans votre feuille de styles globale ou votre build.
|
|
155
160
|
*
|
|
156
161
|
* @example
|
|
157
162
|
* ```ts
|
|
@@ -180,6 +185,9 @@ declare class KtSnackbar implements OnDestroy {
|
|
|
180
185
|
* Un `message` identique à une snackbar déjà affichée ou en attente est **fusionné** : on renvoie
|
|
181
186
|
* alors la référence existante sans rien ré-empiler.
|
|
182
187
|
*
|
|
188
|
+
* > [!IMPORTANT]
|
|
189
|
+
* > Assurez-vous d'avoir importé `@angular/cdk/overlay-prebuilt.css` et `@angular/cdk/a11y-prebuilt.css` dans votre application hôte.
|
|
190
|
+
*
|
|
183
191
|
* @param message Texte affiché et annoncé au lecteur d'écran.
|
|
184
192
|
* @param options Surcharges ponctuelles (durée, régime, position, politesse, variante, fermeture).
|
|
185
193
|
* @returns La référence de la snackbar (existante en cas de fusion).
|
|
@@ -206,70 +214,5 @@ declare class KtSnackbar implements OnDestroy {
|
|
|
206
214
|
static ɵprov: i0.ɵɵInjectableDeclaration<KtSnackbar>;
|
|
207
215
|
}
|
|
208
216
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
* Produites par `KtSnackbar` après résolution `option ?? config ?? défaut`.
|
|
212
|
-
*/
|
|
213
|
-
interface KtSnackbarContext {
|
|
214
|
-
/** Message affiché et annoncé. */
|
|
215
|
-
readonly message: string;
|
|
216
|
-
/** Variante sémantique (apparence : accent + icône). */
|
|
217
|
-
readonly variant: KtSnackbarVariant;
|
|
218
|
-
/** Affiche le bouton de fermeture. */
|
|
219
|
-
readonly closable: boolean;
|
|
220
|
-
/** Nom accessible du bouton de fermeture. */
|
|
221
|
-
readonly closeLabel: string;
|
|
222
|
-
/** Régime temporel (la minuterie n'existe qu'en `'auto'`). */
|
|
223
|
-
readonly timing: KtSnackbarTiming;
|
|
224
|
-
/** Durée (ms) avant disparition automatique en régime `'auto'`. */
|
|
225
|
-
readonly duration: number;
|
|
226
|
-
}
|
|
227
|
-
declare const KT_SNACKBAR_CONTEXT: InjectionToken<KtSnackbarContext>;
|
|
228
|
-
/**
|
|
229
|
-
* Conteneur visuel d'une snackbar. **Volontairement pas une live region** (aucun `role`/`aria-live`
|
|
230
|
-
* sur l'hôte) : l'annonce passe par un canal UNIQUE, le `LiveAnnouncer` du service. On évite ainsi
|
|
231
|
-
* la double-annonce et l'écrasement de politesse observés sur d'autres libs.
|
|
232
|
-
*
|
|
233
|
-
* En régime `'auto'`, la minuterie de disparition se met **en pause au survol et au focus** clavier
|
|
234
|
-
* (WCAG 1.4.13 / 2.2.1) et reprend quand ni le pointeur ni le focus ne sont sur la snackbar.
|
|
235
|
-
* L'icône de variante est **décorative** (`aria-hidden`) : la forme distincte sert d'indice non
|
|
236
|
-
* coloré (WCAG 1.4.1), le sens reste porté par le texte.
|
|
237
|
-
*
|
|
238
|
-
* @internal Monté par `KtSnackbar` via un `ComponentPortal`.
|
|
239
|
-
*/
|
|
240
|
-
declare class KtSnackbarContainer {
|
|
241
|
-
protected readonly context: KtSnackbarContext;
|
|
242
|
-
private readonly ref;
|
|
243
|
-
private readonly platformId;
|
|
244
|
-
private readonly host;
|
|
245
|
-
/** Vrai pendant l'animation de sortie (déclenche la classe `kt-snackbar--leaving`). */
|
|
246
|
-
protected readonly leaving: i0.WritableSignal<boolean>;
|
|
247
|
-
private timer;
|
|
248
|
-
private remaining;
|
|
249
|
-
private deadline;
|
|
250
|
-
private hovered;
|
|
251
|
-
private focused;
|
|
252
|
-
constructor();
|
|
253
|
-
protected close(): void;
|
|
254
|
-
/**
|
|
255
|
-
* Joue l'animation de sortie puis invoque `done` (démontage de l'overlay côté service). Appelé par
|
|
256
|
-
* le service à la fermeture. Sans animation (durée nulle, `prefers-reduced-motion`, ou SSR), `done`
|
|
257
|
-
* est invoqué immédiatement. Filet de sécurité par `setTimeout` si `transitionend` ne se déclenche pas.
|
|
258
|
-
*/
|
|
259
|
-
playExit(done: () => void): void;
|
|
260
|
-
protected onPointerEnter(): void;
|
|
261
|
-
protected onPointerLeave(): void;
|
|
262
|
-
protected onFocusEnter(): void;
|
|
263
|
-
protected onFocusLeave(): void;
|
|
264
|
-
private maybeResume;
|
|
265
|
-
private startTimer;
|
|
266
|
-
private pauseTimer;
|
|
267
|
-
private clearTimer;
|
|
268
|
-
/** Durée (ms) de la transition de sortie, lue sur l'hôte (0 si aucune — ex. reduced-motion). */
|
|
269
|
-
private exitDurationMs;
|
|
270
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<KtSnackbarContainer, never>;
|
|
271
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<KtSnackbarContainer, "kt-snackbar-container", never, {}, {}, never, never, true, never>;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
export { KT_SNACKBAR_CONFIG, KT_SNACKBAR_CONTEXT, KT_SNACKBAR_DEFAULTS, KtSnackbar, KtSnackbarContainer, KtSnackbarRef, provideKtSnackbar };
|
|
275
|
-
export type { KtSnackbarConfig, KtSnackbarContext, KtSnackbarDismissReason, KtSnackbarOptions, KtSnackbarPoliteness, KtSnackbarPosition, KtSnackbarTiming, KtSnackbarVariant };
|
|
217
|
+
export { KT_SNACKBAR_CONFIG, KT_SNACKBAR_DEFAULTS, KtSnackbar, KtSnackbarRef, provideKtSnackbar };
|
|
218
|
+
export type { KtSnackbarConfig, KtSnackbarDismissReason, KtSnackbarOptions, KtSnackbarPoliteness, KtSnackbarPosition, KtSnackbarTiming, KtSnackbarVariant };
|
|
@@ -39,7 +39,6 @@ declare class KtTooltip implements OnDestroy {
|
|
|
39
39
|
private readonly host;
|
|
40
40
|
private readonly renderer;
|
|
41
41
|
private readonly vcr;
|
|
42
|
-
private readonly ngZone;
|
|
43
42
|
private readonly platformId;
|
|
44
43
|
/** Contenu de l'infobulle : texte simple (injecté en `textContent`) ou `TemplateRef` non interactif. */
|
|
45
44
|
readonly ktTooltip: _angular_core.InputSignal<string | TemplateRef<unknown>>;
|
package/types/ktortu-aaa.d.ts
CHANGED