@ktortu/aaa 0.9.1 → 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.
Files changed (39) hide show
  1. package/fesm2022/ktortu-aaa-button.mjs +10 -2
  2. package/fesm2022/ktortu-aaa-button.mjs.map +1 -1
  3. package/fesm2022/ktortu-aaa-card.mjs +14 -5
  4. package/fesm2022/ktortu-aaa-card.mjs.map +1 -1
  5. package/fesm2022/ktortu-aaa-cdk.mjs +49 -2
  6. package/fesm2022/ktortu-aaa-cdk.mjs.map +1 -1
  7. package/fesm2022/ktortu-aaa-dialog.mjs +19 -31
  8. package/fesm2022/ktortu-aaa-dialog.mjs.map +1 -1
  9. package/fesm2022/ktortu-aaa-disclosure.mjs +201 -0
  10. package/fesm2022/ktortu-aaa-disclosure.mjs.map +1 -0
  11. package/fesm2022/ktortu-aaa-forms.mjs +210 -93
  12. package/fesm2022/ktortu-aaa-forms.mjs.map +1 -1
  13. package/fesm2022/ktortu-aaa-progress-bar.mjs +91 -0
  14. package/fesm2022/ktortu-aaa-progress-bar.mjs.map +1 -0
  15. package/fesm2022/ktortu-aaa-snackbar.mjs +16 -3
  16. package/fesm2022/ktortu-aaa-snackbar.mjs.map +1 -1
  17. package/fesm2022/ktortu-aaa-tooltip.mjs +20 -30
  18. package/fesm2022/ktortu-aaa-tooltip.mjs.map +1 -1
  19. package/fesm2022/ktortu-aaa.mjs +1 -0
  20. package/fesm2022/ktortu-aaa.mjs.map +1 -1
  21. package/forms/field/field.css +16 -0
  22. package/forms/styles/field-box.css +11 -5
  23. package/package.json +9 -1
  24. package/progress-bar/progress-bar.css +127 -0
  25. package/styles/disclosure.css +6 -0
  26. package/styles/progress-bar.css +5 -0
  27. package/styles/styles.css +2 -0
  28. package/themes/theme-cyberpunk.css +11 -0
  29. package/tooltip/tooltip.css +1 -1
  30. package/types/ktortu-aaa-button.d.ts +2 -0
  31. package/types/ktortu-aaa-card.d.ts +3 -0
  32. package/types/ktortu-aaa-cdk.d.ts +27 -1
  33. package/types/ktortu-aaa-dialog.d.ts +7 -14
  34. package/types/ktortu-aaa-disclosure.d.ts +112 -0
  35. package/types/ktortu-aaa-forms.d.ts +66 -14
  36. package/types/ktortu-aaa-progress-bar.d.ts +27 -0
  37. package/types/ktortu-aaa-snackbar.d.ts +11 -68
  38. package/types/ktortu-aaa-tooltip.d.ts +0 -1
  39. package/types/ktortu-aaa.d.ts +1 -0
@@ -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", "projectedTooltip"], ["[ktFieldHelp]", "*"], true, never>;
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; }; "pattern": { "alias": "pattern"; "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>;
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.
@@ -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>;
@@ -878,11 +918,15 @@ declare abstract class KtBaseSelect<T, V = T> {
878
918
  private readonly errorResolver;
879
919
  protected readonly config: Partial<_ktortu_aaa_forms.KtSelectConfigOptions> | null;
880
920
  protected readonly host: ElementRef<HTMLElement>;
881
- private readonly ngZone;
882
921
  protected readonly doc: Document;
883
922
  private readonly platformId;
884
923
  private readonly destroyRef;
924
+ private readonly bodyScrollLock;
885
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;
886
930
  /** Liste des options affichées (source de vérité du contrôle). */
887
931
  readonly options: _angular_core.InputSignal<readonly T[]>;
888
932
  /** Libellé affiché d'une option : clé OU fonction. Défaut : `label`/`name`, sinon `String(option)`. */
@@ -1489,7 +1533,6 @@ declare class KtChipList<T> implements ChipTransitionScope {
1489
1533
  private readonly doc;
1490
1534
  private readonly platformId;
1491
1535
  private readonly cdr;
1492
- private readonly ngZone;
1493
1536
  /** Vrai pendant la View Transition de CETTE liste : les chips (standards via Chip,
1494
1537
  custom via tokens.css) ne portent leur `view-transition-name` que dans cette fenêtre. */
1495
1538
  readonly transitioning: _angular_core.WritableSignal<boolean>;
@@ -1529,6 +1572,13 @@ declare class KtChipList<T> implements ChipTransitionScope {
1529
1572
  }>;
1530
1573
  protected readonly itemDef: _angular_core.Signal<KtChipItemDef<any> | undefined>;
1531
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>;
1532
1582
  protected readonly resolvedListLabel: _angular_core.Signal<string>;
1533
1583
  private readonly resolvedRemoveItemLabel;
1534
1584
  private readonly resolvedItemRemovedText;
@@ -1569,6 +1619,8 @@ declare class KtChipList<T> implements ChipTransitionScope {
1569
1619
  /** Déplie/replie ; au dépliage, focus sur le premier chip nouvellement révélé. */
1570
1620
  protected toggleExpanded(): void;
1571
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;
1572
1624
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtChipList<any>, never>;
1573
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>;
1574
1626
  }
@@ -1913,5 +1965,5 @@ declare class KtFixedClock extends KtClock {
1913
1965
  today(): Temporal$1.PlainDate;
1914
1966
  }
1915
1967
 
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 };
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 };
@@ -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
- * Données résolues passées au conteneur visuel à l'ouverture (injectées via {@link KT_SNACKBAR_CONTEXT}).
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>>;
@@ -8,3 +8,4 @@ export * from '@ktortu/aaa/menu';
8
8
  export * from '@ktortu/aaa/snackbar';
9
9
  export * from '@ktortu/aaa/tabs';
10
10
  export * from '@ktortu/aaa/tooltip';
11
+ export * from '@ktortu/aaa/progress-bar';