@kksdev/ds-angular 1.6.0 → 1.7.1
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/fesm2022/kksdev-ds-angular.mjs +3273 -326
- package/fesm2022/kksdev-ds-angular.mjs.map +1 -1
- package/index.d.ts +1694 -162
- package/package.json +3 -3
- package/src/styles/themes/_custom.scss +101 -0
- package/src/styles/themes/_dark.scss +42 -12
- package/src/styles/themes/_light.scss +36 -6
- package/src/styles/tokens/_primitives.scss +20 -20
- package/src/styles/tokens/_semantic.scss +19 -0
- package/src/styles/tokens/_tokens.scss +32 -18
- package/src/styles/storybook.scss +0 -45
package/index.d.ts
CHANGED
|
@@ -3,12 +3,12 @@ import { AfterViewInit, OnDestroy, ElementRef, QueryList, AfterContentInit, Even
|
|
|
3
3
|
import { IconDefinition } from '@fortawesome/fontawesome-svg-core';
|
|
4
4
|
import { IconDefinition as IconDefinition$1 } from '@fortawesome/free-solid-svg-icons';
|
|
5
5
|
import { ControlValueAccessor } from '@angular/forms';
|
|
6
|
-
import * as _angular_cdk_overlay from '@angular/cdk/overlay';
|
|
7
|
-
import { Overlay, ConnectedPosition } from '@angular/cdk/overlay';
|
|
8
6
|
import { IconDefinition as IconDefinition$2, FaIconLibrary } from '@fortawesome/angular-fontawesome';
|
|
7
|
+
import * as _angular_cdk_overlay from '@angular/cdk/overlay';
|
|
8
|
+
import { ConnectedPosition, Overlay } from '@angular/cdk/overlay';
|
|
9
9
|
import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
|
|
10
10
|
import * as _kksdev_ds_angular from '@kksdev/ds-angular';
|
|
11
|
-
import {
|
|
11
|
+
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
12
12
|
|
|
13
13
|
type BadgeType = 'status' | 'count' | 'label';
|
|
14
14
|
type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'neutral' | 'default' | 'accent';
|
|
@@ -2487,6 +2487,8 @@ interface DropdownItemDTO {
|
|
|
2487
2487
|
endIcon: string;
|
|
2488
2488
|
}
|
|
2489
2489
|
|
|
2490
|
+
/** Direction d'ouverture du dropdown */
|
|
2491
|
+
type DropdownPosition = 'bottom' | 'top' | 'right';
|
|
2490
2492
|
declare class DsDropdown implements ControlValueAccessor, AfterViewInit, OnDestroy {
|
|
2491
2493
|
/** Identifiant du menu déroulant pour l'accessibilité. */
|
|
2492
2494
|
readonly id: _angular_core.InputSignal<string>;
|
|
@@ -2520,6 +2522,8 @@ declare class DsDropdown implements ControlValueAccessor, AfterViewInit, OnDestr
|
|
|
2520
2522
|
readonly closeOnSelect: _angular_core.InputSignal<boolean>;
|
|
2521
2523
|
/** Classes CSS supplémentaires appliquées au panneau. */
|
|
2522
2524
|
readonly overlayPanelClass: _angular_core.InputSignal<string | string[] | undefined>;
|
|
2525
|
+
/** Direction d'ouverture du menu (bottom, top, right). */
|
|
2526
|
+
readonly position: _angular_core.InputSignal<DropdownPosition>;
|
|
2523
2527
|
/** Émis lorsqu'un élément est sélectionné. */
|
|
2524
2528
|
readonly selectedItemChanged: _angular_core.OutputEmitterRef<string>;
|
|
2525
2529
|
/** Émis lors de l'ouverture du menu. */
|
|
@@ -2536,7 +2540,8 @@ declare class DsDropdown implements ControlValueAccessor, AfterViewInit, OnDestr
|
|
|
2536
2540
|
private onTouched;
|
|
2537
2541
|
private menuItemsChanges?;
|
|
2538
2542
|
constructor();
|
|
2539
|
-
|
|
2543
|
+
/** Positions de l'overlay selon la prop position */
|
|
2544
|
+
readonly overlayPositions: _angular_core.Signal<ConnectedPosition[]>;
|
|
2540
2545
|
readonly isMenuOpen: _angular_core.Signal<boolean>;
|
|
2541
2546
|
readonly buttonType: _angular_core.Signal<ButtonType>;
|
|
2542
2547
|
readonly isDisabled: _angular_core.Signal<boolean>;
|
|
@@ -2570,7 +2575,7 @@ declare class DsDropdown implements ControlValueAccessor, AfterViewInit, OnDestr
|
|
|
2570
2575
|
private focusTriggerButton;
|
|
2571
2576
|
private getMenuItemElement;
|
|
2572
2577
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsDropdown, never>;
|
|
2573
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsDropdown, "ds-dropdown", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "submit": { "alias": "submit"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; "dropdownStartIcon": { "alias": "dropdownStartIcon"; "required": false; "isSignal": true; }; "dropdownEndIcon": { "alias": "dropdownEndIcon"; "required": false; "isSignal": true; }; "dropdownItems": { "alias": "dropdownItems"; "required": false; "isSignal": true; }; "selectedItem": { "alias": "selectedItem"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "overlayPanelClass": { "alias": "overlayPanelClass"; "required": false; "isSignal": true; }; }, { "selectedItemChanged": "selectedItemChanged"; "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
|
|
2578
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsDropdown, "ds-dropdown", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "submit": { "alias": "submit"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; "dropdownStartIcon": { "alias": "dropdownStartIcon"; "required": false; "isSignal": true; }; "dropdownEndIcon": { "alias": "dropdownEndIcon"; "required": false; "isSignal": true; }; "dropdownItems": { "alias": "dropdownItems"; "required": false; "isSignal": true; }; "selectedItem": { "alias": "selectedItem"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "overlayPanelClass": { "alias": "overlayPanelClass"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, { "selectedItemChanged": "selectedItemChanged"; "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
|
|
2574
2579
|
}
|
|
2575
2580
|
|
|
2576
2581
|
declare class DsInputField implements ControlValueAccessor {
|
|
@@ -2627,41 +2632,138 @@ declare class DsInputField implements ControlValueAccessor {
|
|
|
2627
2632
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsInputField, "ds-input-field", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "externalValue": { "alias": "externalValue"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "togglePassword": { "alias": "togglePassword"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2628
2633
|
}
|
|
2629
2634
|
|
|
2635
|
+
/**
|
|
2636
|
+
* Composant textarea multiligne pour le Design System.
|
|
2637
|
+
*
|
|
2638
|
+
* Wrapper autour de `PrimitiveTextarea` avec support complet des formulaires Angular
|
|
2639
|
+
* via `ControlValueAccessor`. Inclut label, helper text, validation, compteur de caractères,
|
|
2640
|
+
* auto-resize et bouton d'effacement.
|
|
2641
|
+
*
|
|
2642
|
+
* @example
|
|
2643
|
+
* ```html
|
|
2644
|
+
* <!-- Usage simple -->
|
|
2645
|
+
* <ds-input-textarea
|
|
2646
|
+
* label="Description"
|
|
2647
|
+
* placeholder="Entrez votre description..."
|
|
2648
|
+
* [rows]="4">
|
|
2649
|
+
* </ds-input-textarea>
|
|
2650
|
+
*
|
|
2651
|
+
* <!-- Avec formulaire réactif -->
|
|
2652
|
+
* <ds-input-textarea
|
|
2653
|
+
* formControlName="description"
|
|
2654
|
+
* label="Description"
|
|
2655
|
+
* [maxlength]="500"
|
|
2656
|
+
* [clearable]="true">
|
|
2657
|
+
* </ds-input-textarea>
|
|
2658
|
+
* ```
|
|
2659
|
+
*
|
|
2660
|
+
* @usageNotes
|
|
2661
|
+
* ### Accessibilité
|
|
2662
|
+
* - Le label est associé au textarea via `for`/`id`
|
|
2663
|
+
* - Les messages d'aide/erreur sont liés via `aria-describedby`
|
|
2664
|
+
* - Les erreurs sont annoncées via `role="alert"`
|
|
2665
|
+
* - Navigation clavier standard
|
|
2666
|
+
*
|
|
2667
|
+
* ### Auto-resize
|
|
2668
|
+
* Utiliser `resizeAuto` pour activer le redimensionnement automatique.
|
|
2669
|
+
* La valeur définit la hauteur maximale en pixels.
|
|
2670
|
+
*
|
|
2671
|
+
* @selector ds-input-textarea
|
|
2672
|
+
* @standalone true
|
|
2673
|
+
*/
|
|
2630
2674
|
declare class DsInputTextarea implements ControlValueAccessor, AfterViewInit, OnDestroy {
|
|
2675
|
+
/** Identifiant unique du textarea. Auto-généré si non fourni. */
|
|
2631
2676
|
id: _angular_core.InputSignal<string>;
|
|
2677
|
+
/** Nom du champ pour les formulaires HTML natifs. */
|
|
2632
2678
|
name: _angular_core.InputSignal<string | undefined>;
|
|
2679
|
+
/** Label visible affiché au-dessus du textarea. */
|
|
2633
2680
|
label: _angular_core.InputSignal<string | undefined>;
|
|
2681
|
+
/** Label accessible pour les lecteurs d'écran (si pas de label visible). */
|
|
2634
2682
|
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
2683
|
+
/** Texte indicatif affiché quand le champ est vide. */
|
|
2635
2684
|
placeholder: _angular_core.InputSignal<string>;
|
|
2685
|
+
/** Désactive le champ (non modifiable, exclu de la navigation clavier). */
|
|
2636
2686
|
disabled: _angular_core.InputSignal<boolean>;
|
|
2687
|
+
/** Champ en lecture seule (visible et sélectionnable, non modifiable). */
|
|
2637
2688
|
readonly: _angular_core.InputSignal<boolean>;
|
|
2689
|
+
/** Marque le champ comme obligatoire (affiche * après le label). */
|
|
2638
2690
|
required: _angular_core.InputSignal<boolean>;
|
|
2691
|
+
/**
|
|
2692
|
+
* État visuel de validation.
|
|
2693
|
+
* @default 'default'
|
|
2694
|
+
*/
|
|
2639
2695
|
state: _angular_core.InputSignal<TextareaState>;
|
|
2696
|
+
/**
|
|
2697
|
+
* Taille du composant.
|
|
2698
|
+
* @default 'md'
|
|
2699
|
+
*/
|
|
2640
2700
|
size: _angular_core.InputSignal<TextareaSize>;
|
|
2701
|
+
/**
|
|
2702
|
+
* Variante visuelle (outline ou filled).
|
|
2703
|
+
* @default 'default'
|
|
2704
|
+
*/
|
|
2641
2705
|
variant: _angular_core.InputSignal<TextareaAppearance>;
|
|
2706
|
+
/** Nombre de lignes visibles. */
|
|
2642
2707
|
rows: _angular_core.InputSignal<number | undefined>;
|
|
2708
|
+
/** Nombre de colonnes (largeur en caractères). */
|
|
2643
2709
|
cols: _angular_core.InputSignal<number | undefined>;
|
|
2710
|
+
/**
|
|
2711
|
+
* Mode de redimensionnement manuel.
|
|
2712
|
+
* Ignoré si `resizeAuto` est défini.
|
|
2713
|
+
* @default 'vertical'
|
|
2714
|
+
*/
|
|
2644
2715
|
resize: _angular_core.InputSignal<TextareaResize>;
|
|
2716
|
+
/**
|
|
2717
|
+
* Active le redimensionnement automatique.
|
|
2718
|
+
* La valeur définit la hauteur maximale en pixels.
|
|
2719
|
+
* Désactive le resize manuel.
|
|
2720
|
+
*/
|
|
2645
2721
|
resizeAuto: _angular_core.InputSignal<number | undefined>;
|
|
2722
|
+
/** Limite de caractères avec compteur affiché. */
|
|
2646
2723
|
maxlength: _angular_core.InputSignal<number | undefined>;
|
|
2724
|
+
/** Texte d'aide affiché sous le champ. */
|
|
2647
2725
|
helper: _angular_core.InputSignal<string | undefined>;
|
|
2726
|
+
/** Message d'erreur (remplace helper, force l'état 'error'). */
|
|
2648
2727
|
error: _angular_core.InputSignal<string | undefined>;
|
|
2728
|
+
/** Icône FontAwesome à gauche du textarea. */
|
|
2649
2729
|
iconStart: _angular_core.InputSignal<IconDefinition$1 | null>;
|
|
2730
|
+
/** Icône FontAwesome à droite du textarea. */
|
|
2650
2731
|
iconEnd: _angular_core.InputSignal<IconDefinition$1 | null>;
|
|
2732
|
+
/** Affiche un bouton X pour effacer le contenu. */
|
|
2651
2733
|
clearable: _angular_core.InputSignal<boolean>;
|
|
2734
|
+
/**
|
|
2735
|
+
* Valeur externe pour initialisation sans formulaire.
|
|
2736
|
+
* Utile pour les stories Storybook.
|
|
2737
|
+
*/
|
|
2652
2738
|
externalValue: _angular_core.InputSignal<string | null | undefined>;
|
|
2739
|
+
/** État disabled géré par ControlValueAccessor. */
|
|
2653
2740
|
private readonly disabledState;
|
|
2741
|
+
/** Indique si une valeur externe a été fournie. */
|
|
2654
2742
|
private readonly hasExternalValue;
|
|
2743
|
+
/** Valeur interne du textarea. */
|
|
2655
2744
|
readonly internalValue: _angular_core.WritableSignal<string>;
|
|
2745
|
+
/**
|
|
2746
|
+
* Émis à chaque changement de valeur.
|
|
2747
|
+
* Payload : nouvelle valeur (string).
|
|
2748
|
+
*/
|
|
2656
2749
|
readonly valueChange: _angular_core.OutputEmitterRef<string>;
|
|
2750
|
+
/** ID de l'élément erreur pour aria-describedby. */
|
|
2657
2751
|
readonly arErrorId: _angular_core.Signal<string | undefined>;
|
|
2752
|
+
/** ID de l'élément helper pour aria-describedby. */
|
|
2658
2753
|
readonly arHelperId: _angular_core.Signal<string | undefined>;
|
|
2754
|
+
/** ID de l'élément compteur pour aria-describedby. */
|
|
2659
2755
|
readonly arCounterId: _angular_core.Signal<string | undefined>;
|
|
2756
|
+
/** Attribut aria-describedby combinant erreur, helper et compteur. */
|
|
2660
2757
|
readonly ariaDescribedBy: _angular_core.Signal<string | undefined>;
|
|
2758
|
+
/** True si le champ est désactivé (input ou CVA). */
|
|
2661
2759
|
readonly isDisabled: _angular_core.Signal<boolean>;
|
|
2760
|
+
/** État visuel effectif (error forcé si message d'erreur). */
|
|
2662
2761
|
readonly inputState: _angular_core.Signal<TextareaState>;
|
|
2762
|
+
/** True si le bouton clear doit être affiché. */
|
|
2663
2763
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
2764
|
+
/** Mode de resize effectif (none si resizeAuto activé). */
|
|
2664
2765
|
readonly textareaResize: _angular_core.Signal<TextareaResize>;
|
|
2766
|
+
/** Nombre de caractères saisis. */
|
|
2665
2767
|
readonly characterCount: _angular_core.Signal<number>;
|
|
2666
2768
|
protected readonly faClose: IconDefinition$1;
|
|
2667
2769
|
textareaHost?: ElementRef<HTMLElement>;
|
|
@@ -2729,23 +2831,129 @@ declare class DsModalComponent implements AfterContentInit, AfterViewInit, OnDes
|
|
|
2729
2831
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsModalComponent, "ds-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, ["projectedIcon"], ["[icon]", "*", "[footer]"], true, never>;
|
|
2730
2832
|
}
|
|
2731
2833
|
|
|
2834
|
+
/**
|
|
2835
|
+
* Composant popover du Design System.
|
|
2836
|
+
*
|
|
2837
|
+
* Affiche un contenu contextuel dans une fenêtre flottante avec header/footer optionnels.
|
|
2838
|
+
* Utilisé conjointement avec la directive `dsPopover` pour le positionnement.
|
|
2839
|
+
*
|
|
2840
|
+
* @example
|
|
2841
|
+
* ```html
|
|
2842
|
+
* <ng-template #popoverContent>
|
|
2843
|
+
* <ds-popover header="Mon titre" [closeable]="true" (close)="onClose()">
|
|
2844
|
+
* <p>Contenu du popover</p>
|
|
2845
|
+
* </ds-popover>
|
|
2846
|
+
* </ng-template>
|
|
2847
|
+
*
|
|
2848
|
+
* <button [dsPopover]="popoverContent">Ouvrir</button>
|
|
2849
|
+
* ```
|
|
2850
|
+
*
|
|
2851
|
+
* @usageNotes
|
|
2852
|
+
* ### Accessibilité
|
|
2853
|
+
* - `role="dialog"` avec `aria-modal="true"` pour les lecteurs d'écran
|
|
2854
|
+
* - `aria-labelledby` pointe vers le header quand présent
|
|
2855
|
+
* - Bouton de fermeture avec label descriptif
|
|
2856
|
+
* - Fermeture via Escape gérée par la directive
|
|
2857
|
+
*/
|
|
2732
2858
|
declare class DsPopoverComponent {
|
|
2859
|
+
/**
|
|
2860
|
+
* Titre affiché dans le header du popover.
|
|
2861
|
+
* Quand présent, active `aria-labelledby` pour l'accessibilité.
|
|
2862
|
+
*/
|
|
2733
2863
|
header: _angular_core.InputSignal<string | undefined>;
|
|
2864
|
+
/**
|
|
2865
|
+
* Texte affiché dans le footer du popover.
|
|
2866
|
+
*/
|
|
2734
2867
|
footer: _angular_core.InputSignal<string | undefined>;
|
|
2868
|
+
/**
|
|
2869
|
+
* Affiche ou masque le bouton de fermeture dans le header.
|
|
2870
|
+
* @default true
|
|
2871
|
+
*/
|
|
2735
2872
|
closeable: _angular_core.InputSignal<boolean>;
|
|
2873
|
+
/**
|
|
2874
|
+
* Label ARIA du popover (utilisé quand pas de header).
|
|
2875
|
+
* @default 'Popover'
|
|
2876
|
+
*/
|
|
2736
2877
|
ariaLabel: _angular_core.InputSignal<string>;
|
|
2878
|
+
/**
|
|
2879
|
+
* ID unique pour le popover (génération automatique si non fourni).
|
|
2880
|
+
*/
|
|
2881
|
+
id: _angular_core.InputSignal<string>;
|
|
2882
|
+
/**
|
|
2883
|
+
* Émis quand l'utilisateur clique sur le bouton de fermeture.
|
|
2884
|
+
*/
|
|
2737
2885
|
close: _angular_core.OutputEmitterRef<void>;
|
|
2886
|
+
/**
|
|
2887
|
+
* ID du header pour aria-labelledby.
|
|
2888
|
+
*/
|
|
2889
|
+
protected readonly headerId: _angular_core.Signal<string>;
|
|
2890
|
+
/**
|
|
2891
|
+
* Label du bouton de fermeture (dynamique selon le header).
|
|
2892
|
+
*/
|
|
2893
|
+
protected readonly closeButtonLabel: _angular_core.Signal<string>;
|
|
2738
2894
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsPopoverComponent, never>;
|
|
2739
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsPopoverComponent, "ds-popover", never, { "header": { "alias": "header"; "required": false; "isSignal": true; }; "footer": { "alias": "footer"; "required": false; "isSignal": true; }; "closeable": { "alias": "closeable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["*"], true, never>;
|
|
2895
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsPopoverComponent, "ds-popover", never, { "header": { "alias": "header"; "required": false; "isSignal": true; }; "footer": { "alias": "footer"; "required": false; "isSignal": true; }; "closeable": { "alias": "closeable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["*"], true, never>;
|
|
2740
2896
|
}
|
|
2741
2897
|
|
|
2898
|
+
/**
|
|
2899
|
+
* Type de déclenchement du popover.
|
|
2900
|
+
* - `click` : ouverture au clic, fermeture au second clic ou clic extérieur
|
|
2901
|
+
* - `hover` : ouverture au survol, fermeture au mouseleave (avec délai de 150ms)
|
|
2902
|
+
*/
|
|
2742
2903
|
type PopoverTrigger = 'click' | 'hover';
|
|
2904
|
+
/**
|
|
2905
|
+
* Directive pour afficher un popover flottant positionné automatiquement.
|
|
2906
|
+
*
|
|
2907
|
+
* Utilise Angular CDK Overlay pour le positionnement intelligent
|
|
2908
|
+
* et la gestion du backdrop/scroll.
|
|
2909
|
+
*
|
|
2910
|
+
* @example
|
|
2911
|
+
* ```html
|
|
2912
|
+
* <ng-template #popoverContent>
|
|
2913
|
+
* <ds-popover header="Informations">
|
|
2914
|
+
* <p>Contenu du popover</p>
|
|
2915
|
+
* </ds-popover>
|
|
2916
|
+
* </ng-template>
|
|
2917
|
+
*
|
|
2918
|
+
* <button [dsPopover]="popoverContent">Ouvrir</button>
|
|
2919
|
+
* ```
|
|
2920
|
+
*
|
|
2921
|
+
* @example
|
|
2922
|
+
* ```html
|
|
2923
|
+
* <!-- Trigger hover -->
|
|
2924
|
+
* <button [dsPopover]="content" dsPopoverTrigger="hover">Survoler</button>
|
|
2925
|
+
*
|
|
2926
|
+
* <!-- Sans fermeture au clic extérieur -->
|
|
2927
|
+
* <button [dsPopover]="content" [dsPopoverCloseOnBackdrop]="false">Persistant</button>
|
|
2928
|
+
* ```
|
|
2929
|
+
*
|
|
2930
|
+
* @usageNotes
|
|
2931
|
+
* ### Accessibilité
|
|
2932
|
+
* - Fermeture via touche Escape
|
|
2933
|
+
* - Focus trap recommandé pour les popovers avec contenu interactif
|
|
2934
|
+
* - Utiliser `<ds-popover>` avec header pour un aria-labelledby automatique
|
|
2935
|
+
*/
|
|
2743
2936
|
declare class DsPopover implements OnDestroy {
|
|
2744
2937
|
private elementRef;
|
|
2745
2938
|
private overlay;
|
|
2746
2939
|
private viewContainerRef;
|
|
2940
|
+
/**
|
|
2941
|
+
* Template contenant le contenu du popover.
|
|
2942
|
+
* Généralement un `<ng-template>` contenant un `<ds-popover>`.
|
|
2943
|
+
*/
|
|
2747
2944
|
dsPopover: _angular_core.InputSignal<TemplateRef<unknown>>;
|
|
2945
|
+
/**
|
|
2946
|
+
* Mode de déclenchement du popover.
|
|
2947
|
+
* - `click` (défaut) : clic pour ouvrir/fermer
|
|
2948
|
+
* - `hover` : survol pour ouvrir, mouseleave pour fermer
|
|
2949
|
+
* @default 'click'
|
|
2950
|
+
*/
|
|
2748
2951
|
dsPopoverTrigger: _angular_core.InputSignal<PopoverTrigger>;
|
|
2952
|
+
/**
|
|
2953
|
+
* Fermer le popover lors d'un clic sur le backdrop (zone extérieure).
|
|
2954
|
+
* Quand `false`, seul Escape ou un nouveau clic sur le trigger ferme le popover.
|
|
2955
|
+
* @default true
|
|
2956
|
+
*/
|
|
2749
2957
|
dsPopoverCloseOnBackdrop: _angular_core.InputSignal<boolean>;
|
|
2750
2958
|
private overlayRef;
|
|
2751
2959
|
private isOpen;
|
|
@@ -5045,6 +5253,108 @@ declare class DsDrawer implements AfterViewInit, OnDestroy {
|
|
|
5045
5253
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsDrawer, "ds-drawer", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "maskClosable": { "alias": "maskClosable"; "required": false; "isSignal": true; }; }, { "visibleChange": "visibleChange"; "closed": "closed"; }, never, ["[drawer-header]", "*", "[drawer-footer]"], true, never>;
|
|
5046
5254
|
}
|
|
5047
5255
|
|
|
5256
|
+
interface TimeColumn {
|
|
5257
|
+
value: number;
|
|
5258
|
+
label: string;
|
|
5259
|
+
disabled: boolean;
|
|
5260
|
+
}
|
|
5261
|
+
declare class DsTimePickerPanelComponent implements AfterViewInit {
|
|
5262
|
+
hoursColumn?: ElementRef<HTMLDivElement>;
|
|
5263
|
+
minutesColumn?: ElementRef<HTMLDivElement>;
|
|
5264
|
+
secondsColumn?: ElementRef<HTMLDivElement>;
|
|
5265
|
+
panelId: string;
|
|
5266
|
+
readonly activeColumn: _angular_core.WritableSignal<"period" | "hours" | "minutes" | "seconds">;
|
|
5267
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
5268
|
+
readonly format: _angular_core.InputSignal<"12h" | "24h">;
|
|
5269
|
+
readonly showSeconds: _angular_core.InputSignal<boolean>;
|
|
5270
|
+
readonly minuteStep: _angular_core.InputSignal<number>;
|
|
5271
|
+
readonly hourStep: _angular_core.InputSignal<number>;
|
|
5272
|
+
set minTime(value: string | null);
|
|
5273
|
+
get minTime(): string | null;
|
|
5274
|
+
set maxTime(value: string | null);
|
|
5275
|
+
get maxTime(): string | null;
|
|
5276
|
+
private readonly _minTime;
|
|
5277
|
+
private readonly _maxTime;
|
|
5278
|
+
private readonly parsedMinTime;
|
|
5279
|
+
private readonly parsedMaxTime;
|
|
5280
|
+
readonly timeSelected: _angular_core.OutputEmitterRef<string>;
|
|
5281
|
+
readonly cancelled: _angular_core.OutputEmitterRef<void>;
|
|
5282
|
+
readonly selectedHours: _angular_core.WritableSignal<number>;
|
|
5283
|
+
readonly selectedMinutes: _angular_core.WritableSignal<number>;
|
|
5284
|
+
readonly selectedSeconds: _angular_core.WritableSignal<number>;
|
|
5285
|
+
readonly selectedPeriod: _angular_core.WritableSignal<"AM" | "PM">;
|
|
5286
|
+
readonly hoursOptions: _angular_core.Signal<TimeColumn[]>;
|
|
5287
|
+
readonly minutesOptions: _angular_core.Signal<TimeColumn[]>;
|
|
5288
|
+
readonly secondsOptions: _angular_core.Signal<TimeColumn[]>;
|
|
5289
|
+
private initialized;
|
|
5290
|
+
constructor();
|
|
5291
|
+
ngAfterViewInit(): void;
|
|
5292
|
+
selectHours(hours: number): void;
|
|
5293
|
+
selectMinutes(minutes: number): void;
|
|
5294
|
+
selectSeconds(seconds: number): void;
|
|
5295
|
+
selectPeriod(period: 'AM' | 'PM'): void;
|
|
5296
|
+
/** Confirme la sélection et émet la valeur */
|
|
5297
|
+
confirm(): void;
|
|
5298
|
+
/** Annule la sélection */
|
|
5299
|
+
cancel(): void;
|
|
5300
|
+
onScroll(column: 'hours' | 'minutes' | 'seconds', event: Event): void;
|
|
5301
|
+
/**
|
|
5302
|
+
* Set the active column for keyboard navigation
|
|
5303
|
+
*/
|
|
5304
|
+
setActiveColumn(column: 'hours' | 'minutes' | 'seconds' | 'period'): void;
|
|
5305
|
+
/**
|
|
5306
|
+
* Get the ID of the currently active option in a column
|
|
5307
|
+
*/
|
|
5308
|
+
getActiveOptionId(column: 'hours' | 'minutes' | 'seconds' | 'period'): string;
|
|
5309
|
+
/**
|
|
5310
|
+
* Navigate options with arrow keys
|
|
5311
|
+
*/
|
|
5312
|
+
navigateOption(column: 'hours' | 'minutes' | 'seconds' | 'period', direction: 1 | -1): void;
|
|
5313
|
+
/**
|
|
5314
|
+
* Handle global panel keyboard events
|
|
5315
|
+
*/
|
|
5316
|
+
onPanelKeydown(event: KeyboardEvent): void;
|
|
5317
|
+
/**
|
|
5318
|
+
* Focus the hours column (called from parent on panel open)
|
|
5319
|
+
*/
|
|
5320
|
+
focusFirstColumn(): void;
|
|
5321
|
+
/**
|
|
5322
|
+
* Find the next enabled option index in a direction
|
|
5323
|
+
*/
|
|
5324
|
+
private findNextEnabledIndex;
|
|
5325
|
+
/**
|
|
5326
|
+
* Scroll an option into view in its column
|
|
5327
|
+
*/
|
|
5328
|
+
private scrollOptionIntoView;
|
|
5329
|
+
private parseAndSetValue;
|
|
5330
|
+
private emitCurrentTime;
|
|
5331
|
+
/**
|
|
5332
|
+
* Parse a time constraint string (HH:mm or HH:mm:ss) into components
|
|
5333
|
+
*/
|
|
5334
|
+
private parseTimeConstraint;
|
|
5335
|
+
/**
|
|
5336
|
+
* Convert 12h hour to 24h for comparison
|
|
5337
|
+
*/
|
|
5338
|
+
private to24Hour;
|
|
5339
|
+
/**
|
|
5340
|
+
* Check if an hour is disabled based on minTime/maxTime constraints
|
|
5341
|
+
*/
|
|
5342
|
+
private isHourDisabled;
|
|
5343
|
+
/**
|
|
5344
|
+
* Check if a minute is disabled based on minTime/maxTime and selected hour
|
|
5345
|
+
*/
|
|
5346
|
+
private isMinuteDisabled;
|
|
5347
|
+
/**
|
|
5348
|
+
* Convert a 12h hour value to 24h based on current period selection
|
|
5349
|
+
* Used for constraint comparison when in 12h format
|
|
5350
|
+
*/
|
|
5351
|
+
private convert12hTo24h;
|
|
5352
|
+
private scrollToSelected;
|
|
5353
|
+
private scrollColumnToValue;
|
|
5354
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsTimePickerPanelComponent, never>;
|
|
5355
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsTimePickerPanelComponent, "ds-time-picker-panel", never, { "panelId": { "alias": "panelId"; "required": false; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "hourStep": { "alias": "hourStep"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; }; "maxTime": { "alias": "maxTime"; "required": false; }; }, { "timeSelected": "timeSelected"; "cancelled": "cancelled"; }, never, never, true, never>;
|
|
5356
|
+
}
|
|
5357
|
+
|
|
5048
5358
|
type TimePickerSize = 'sm' | 'md' | 'lg';
|
|
5049
5359
|
type TimeFormat = '12h' | '24h';
|
|
5050
5360
|
interface TimeValue {
|
|
@@ -5069,7 +5379,8 @@ interface TimeValue {
|
|
|
5069
5379
|
* ```
|
|
5070
5380
|
*/
|
|
5071
5381
|
declare class DsTimePicker implements ControlValueAccessor {
|
|
5072
|
-
|
|
5382
|
+
inputElementRef?: ElementRef<HTMLElement>;
|
|
5383
|
+
panelComponent?: DsTimePickerPanelComponent;
|
|
5073
5384
|
readonly value: _angular_core.InputSignal<string>;
|
|
5074
5385
|
readonly format: _angular_core.InputSignal<TimeFormat>;
|
|
5075
5386
|
readonly showSeconds: _angular_core.InputSignal<boolean>;
|
|
@@ -5083,18 +5394,18 @@ declare class DsTimePicker implements ControlValueAccessor {
|
|
|
5083
5394
|
readonly maxTime: _angular_core.InputSignal<string | null>;
|
|
5084
5395
|
readonly timeChange: _angular_core.OutputEmitterRef<string>;
|
|
5085
5396
|
readonly clockIcon: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
5086
|
-
readonly
|
|
5087
|
-
readonly
|
|
5397
|
+
readonly overlayPositions: ConnectedPosition[];
|
|
5398
|
+
readonly panelId: string;
|
|
5088
5399
|
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
5089
5400
|
readonly internalValue: _angular_core.WritableSignal<string>;
|
|
5090
5401
|
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
5091
|
-
private overlayRef;
|
|
5092
5402
|
readonly containerClasses: _angular_core.Signal<string>;
|
|
5093
5403
|
readonly displayValue: _angular_core.Signal<string>;
|
|
5094
5404
|
readonly isDisabled: _angular_core.Signal<boolean>;
|
|
5095
5405
|
private onChange;
|
|
5096
5406
|
private onTouched;
|
|
5097
|
-
|
|
5407
|
+
private hasExternalValue;
|
|
5408
|
+
constructor();
|
|
5098
5409
|
writeValue(value: string): void;
|
|
5099
5410
|
registerOnChange(fn: (value: string) => void): void;
|
|
5100
5411
|
registerOnTouched(fn: () => void): void;
|
|
@@ -5105,9 +5416,10 @@ declare class DsTimePicker implements ControlValueAccessor {
|
|
|
5105
5416
|
onFocus(): void;
|
|
5106
5417
|
onBlur(): void;
|
|
5107
5418
|
onTimeSelected(timeString: string): void;
|
|
5419
|
+
onBackdropClick(): void;
|
|
5420
|
+
onCancelled(): void;
|
|
5421
|
+
onOverlayKeydown(event: KeyboardEvent): void;
|
|
5108
5422
|
private updateValue;
|
|
5109
|
-
private createOverlay;
|
|
5110
|
-
private destroyOverlay;
|
|
5111
5423
|
private parseTime;
|
|
5112
5424
|
private formatTimeForDisplay;
|
|
5113
5425
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsTimePicker, never>;
|
|
@@ -5429,8 +5741,8 @@ declare class DsTimeline {
|
|
|
5429
5741
|
/**
|
|
5430
5742
|
* Icônes par défaut.
|
|
5431
5743
|
*/
|
|
5432
|
-
|
|
5433
|
-
|
|
5744
|
+
readonly defaultIcon: IconDefinition$1;
|
|
5745
|
+
readonly pendingIcon: IconDefinition$1;
|
|
5434
5746
|
/**
|
|
5435
5747
|
* Items triés (reverse si demandé).
|
|
5436
5748
|
*/
|
|
@@ -6075,6 +6387,7 @@ declare class DsColorPicker implements ControlValueAccessor {
|
|
|
6075
6387
|
readonly internalValue: _angular_core.WritableSignal<string>;
|
|
6076
6388
|
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
6077
6389
|
readonly recentColors: _angular_core.WritableSignal<string[]>;
|
|
6390
|
+
readonly uniqueId: string;
|
|
6078
6391
|
private overlayRef;
|
|
6079
6392
|
readonly containerClasses: _angular_core.Signal<string>;
|
|
6080
6393
|
readonly displayValue: _angular_core.Signal<string>;
|
|
@@ -6092,6 +6405,14 @@ declare class DsColorPicker implements ControlValueAccessor {
|
|
|
6092
6405
|
close(): void;
|
|
6093
6406
|
onFocus(): void;
|
|
6094
6407
|
onBlur(): void;
|
|
6408
|
+
/**
|
|
6409
|
+
* Handle keyboard events on the trigger container
|
|
6410
|
+
*/
|
|
6411
|
+
onTriggerKeyDown(event: KeyboardEvent): void;
|
|
6412
|
+
/**
|
|
6413
|
+
* Handle keyboard events on the input field
|
|
6414
|
+
*/
|
|
6415
|
+
onInputKeyDown(event: KeyboardEvent): void;
|
|
6095
6416
|
clear(): void;
|
|
6096
6417
|
onColorSelected(color: string): void;
|
|
6097
6418
|
private updateValue;
|
|
@@ -6111,171 +6432,1367 @@ declare class DsColorPicker implements ControlValueAccessor {
|
|
|
6111
6432
|
}
|
|
6112
6433
|
|
|
6113
6434
|
/**
|
|
6114
|
-
*
|
|
6115
|
-
*
|
|
6116
|
-
*
|
|
6117
|
-
*
|
|
6118
|
-
* 2. Fallback : centré au-dessus si pas d'espace en bas
|
|
6119
|
-
* 3. Fallback : aligné à gauche en dessous
|
|
6120
|
-
* 4. Fallback : aligné à droite en dessous
|
|
6435
|
+
* Mode d'affichage de la sidebar.
|
|
6436
|
+
* - `full` : largeur complète avec labels
|
|
6437
|
+
* - `collapsed` : icônes seulement avec tooltips
|
|
6438
|
+
* - `overlay` : panneau glissant avec backdrop (mobile)
|
|
6121
6439
|
*/
|
|
6122
|
-
|
|
6440
|
+
type SidebarMode = 'full' | 'collapsed' | 'overlay';
|
|
6123
6441
|
/**
|
|
6124
|
-
*
|
|
6125
|
-
*
|
|
6126
|
-
*
|
|
6127
|
-
*
|
|
6128
|
-
* 2. Fallback : centré en dessous si pas d'espace au-dessus
|
|
6129
|
-
* 3. Fallback : à droite (aligné verticalement au centre)
|
|
6130
|
-
* 4. Fallback : à gauche (aligné verticalement au centre)
|
|
6442
|
+
* Taille de la sidebar (largeur).
|
|
6443
|
+
* - `sm` : 200px
|
|
6444
|
+
* - `md` : 240px
|
|
6445
|
+
* - `lg` : 280px
|
|
6131
6446
|
*/
|
|
6132
|
-
|
|
6447
|
+
type SidebarSize = 'sm' | 'md' | 'lg';
|
|
6133
6448
|
/**
|
|
6134
|
-
*
|
|
6135
|
-
*
|
|
6136
|
-
* Stratégie :
|
|
6137
|
-
* 1. Position préférée : aligné à droite, en dessous (offsetY: 4px)
|
|
6138
|
-
* 2. Fallback : aligné à gauche, en dessous
|
|
6139
|
-
* 3. Fallback : aligné à droite, au-dessus
|
|
6140
|
-
* 4. Fallback : aligné à gauche, au-dessus
|
|
6141
|
-
* 5. Fallback : à droite (aligné en haut)
|
|
6142
|
-
* 6. Fallback : à gauche (aligné en haut)
|
|
6449
|
+
* Position de la sidebar.
|
|
6143
6450
|
*/
|
|
6144
|
-
|
|
6451
|
+
type SidebarPosition = 'left' | 'right';
|
|
6145
6452
|
/**
|
|
6146
|
-
*
|
|
6147
|
-
*
|
|
6148
|
-
*
|
|
6149
|
-
* 1. Position préférée : aligné à gauche, pleine largeur, en dessous
|
|
6150
|
-
* 2. Fallback : aligné à gauche, pleine largeur, au-dessus
|
|
6453
|
+
* Trigger pour ouvrir le popover en mode collapsed.
|
|
6454
|
+
* - `hover` : Ouvre au survol de la souris
|
|
6455
|
+
* - `click` : Ouvre au clic
|
|
6151
6456
|
*/
|
|
6152
|
-
|
|
6153
|
-
|
|
6154
|
-
|
|
6155
|
-
|
|
6156
|
-
|
|
6157
|
-
|
|
6158
|
-
|
|
6159
|
-
|
|
6160
|
-
|
|
6161
|
-
|
|
6162
|
-
|
|
6163
|
-
|
|
6164
|
-
|
|
6165
|
-
|
|
6166
|
-
|
|
6167
|
-
|
|
6168
|
-
|
|
6169
|
-
|
|
6170
|
-
|
|
6171
|
-
|
|
6172
|
-
declare const buildButtonArgs: ({ includeLoading, includeBlock }?: ArgOptions) => {
|
|
6173
|
-
block?: boolean | undefined;
|
|
6174
|
-
loading?: boolean | undefined;
|
|
6175
|
-
variant: ButtonVariant;
|
|
6176
|
-
appearance: ButtonAppearance;
|
|
6177
|
-
size: ButtonSize;
|
|
6178
|
-
disabled: boolean;
|
|
6179
|
-
};
|
|
6180
|
-
interface ButtonBindings {
|
|
6181
|
-
variant: string;
|
|
6182
|
-
appearance?: string;
|
|
6183
|
-
size: string;
|
|
6184
|
-
disabled?: string;
|
|
6185
|
-
loading?: string;
|
|
6186
|
-
block?: string;
|
|
6187
|
-
}
|
|
6188
|
-
declare const createVariantRender: (tagName: string, bindings: ButtonBindings, extraAttributes?: string) => (args: Args) => {
|
|
6189
|
-
props: {
|
|
6190
|
-
variants: readonly ["primary", "secondary", "ghost", "success", "warning", "error", "info"];
|
|
6191
|
-
};
|
|
6192
|
-
template: string;
|
|
6193
|
-
};
|
|
6194
|
-
declare const createSizeRender: (tagName: string, bindings: ButtonBindings, extraAttributes?: string) => (args: Args) => {
|
|
6195
|
-
props: {
|
|
6196
|
-
sizes: readonly ["sm", "md", "lg"];
|
|
6457
|
+
type SidebarCollapsedTrigger = 'hover' | 'click';
|
|
6458
|
+
/**
|
|
6459
|
+
* Variante de couleur pour les badges.
|
|
6460
|
+
*/
|
|
6461
|
+
type SidebarBadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
|
|
6462
|
+
/**
|
|
6463
|
+
* Item de navigation dans la sidebar.
|
|
6464
|
+
*/
|
|
6465
|
+
interface SidebarItem {
|
|
6466
|
+
/** Identifiant unique de l'item */
|
|
6467
|
+
id: string | number;
|
|
6468
|
+
/** Label affiché */
|
|
6469
|
+
label: string;
|
|
6470
|
+
/** Icône FontAwesome */
|
|
6471
|
+
icon?: IconDefinition;
|
|
6472
|
+
/** Route Angular (routerLink) */
|
|
6473
|
+
routerLink?: string | string[];
|
|
6474
|
+
/** Options pour routerLinkActive */
|
|
6475
|
+
routerLinkActiveOptions?: {
|
|
6476
|
+
exact: boolean;
|
|
6197
6477
|
};
|
|
6198
|
-
|
|
6199
|
-
|
|
6478
|
+
/** Lien href classique */
|
|
6479
|
+
href?: string;
|
|
6480
|
+
/** Ouvre dans un nouvel onglet (pour href) */
|
|
6481
|
+
external?: boolean;
|
|
6482
|
+
/** Items enfants (sous-menu) */
|
|
6483
|
+
children?: SidebarItem[];
|
|
6484
|
+
/** Item désactivé */
|
|
6485
|
+
disabled?: boolean;
|
|
6486
|
+
/** État initial d'expansion (pour items avec children) */
|
|
6487
|
+
expanded?: boolean;
|
|
6488
|
+
/** Badge/compteur affiché */
|
|
6489
|
+
badge?: string | number;
|
|
6490
|
+
/** Variante de couleur du badge */
|
|
6491
|
+
badgeVariant?: SidebarBadgeVariant;
|
|
6492
|
+
/** Affiche un séparateur après cet item */
|
|
6493
|
+
dividerAfter?: boolean;
|
|
6494
|
+
/** Données personnalisées attachées à l'item */
|
|
6495
|
+
data?: unknown;
|
|
6496
|
+
}
|
|
6497
|
+
/**
|
|
6498
|
+
* Événement émis lors du clic sur un item.
|
|
6499
|
+
*/
|
|
6500
|
+
interface SidebarItemClickEvent {
|
|
6501
|
+
/** Item cliqué */
|
|
6502
|
+
item: SidebarItem;
|
|
6503
|
+
/** Événement souris original */
|
|
6504
|
+
event: MouseEvent;
|
|
6505
|
+
}
|
|
6506
|
+
/**
|
|
6507
|
+
* Événement émis lors de l'expansion/collapse d'un item.
|
|
6508
|
+
*/
|
|
6509
|
+
interface SidebarItemExpandEvent {
|
|
6510
|
+
/** Item concerné */
|
|
6511
|
+
item: SidebarItem;
|
|
6512
|
+
/** Nouvel état d'expansion */
|
|
6513
|
+
expanded: boolean;
|
|
6514
|
+
}
|
|
6515
|
+
/**
|
|
6516
|
+
* Item aplati pour la navigation clavier.
|
|
6517
|
+
*/
|
|
6518
|
+
interface FlattenedSidebarItem {
|
|
6519
|
+
/** Item original */
|
|
6520
|
+
item: SidebarItem;
|
|
6521
|
+
/** Niveau d'imbrication (0 = racine) */
|
|
6522
|
+
level: number;
|
|
6523
|
+
/** Index dans la liste aplatie */
|
|
6524
|
+
flatIndex: number;
|
|
6525
|
+
/** ID du parent (null si racine) */
|
|
6526
|
+
parentId: string | number | null;
|
|
6527
|
+
}
|
|
6200
6528
|
|
|
6201
6529
|
/**
|
|
6202
|
-
*
|
|
6203
|
-
*
|
|
6204
|
-
* @description
|
|
6205
|
-
* Permet d'enregistrer des icônes de manière lazy et centralisée, évitant
|
|
6206
|
-
* d'importer toutes les icônes FontAwesome dans chaque composant. Les composants
|
|
6207
|
-
* peuvent utiliser les icônes enregistrées via leur nom plutôt que via l'objet complet.
|
|
6208
|
-
*
|
|
6209
|
-
* @example
|
|
6210
|
-
* ```typescript
|
|
6211
|
-
* // Dans app.config.ts ou main.ts
|
|
6212
|
-
* import { IconRegistryService } from 'ds-angular';
|
|
6213
|
-
* import { faCheck, faTimes, faExclamation } from '@fortawesome/free-solid-svg-icons';
|
|
6214
|
-
*
|
|
6215
|
-
* const iconRegistry = inject(IconRegistryService);
|
|
6216
|
-
* iconRegistry.registerIcons([faCheck, faTimes, faExclamation]);
|
|
6217
|
-
* ```
|
|
6218
|
-
*
|
|
6219
|
-
* @example
|
|
6220
|
-
* ```typescript
|
|
6221
|
-
* // Enregistrement par groupe thématique
|
|
6222
|
-
* import { faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';
|
|
6530
|
+
* Composant récursif pour afficher un item de sidebar.
|
|
6531
|
+
* Gère l'affichage, l'expansion des enfants et la navigation.
|
|
6223
6532
|
*
|
|
6224
|
-
*
|
|
6225
|
-
* ```
|
|
6533
|
+
* @internal Utilisé par DsSidebar
|
|
6226
6534
|
*/
|
|
6227
|
-
declare class
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6535
|
+
declare class DsSidebarItemComponent {
|
|
6536
|
+
readonly item: _angular_core.InputSignal<SidebarItem>;
|
|
6537
|
+
readonly level: _angular_core.InputSignal<number>;
|
|
6538
|
+
readonly mode: _angular_core.InputSignal<SidebarMode>;
|
|
6539
|
+
readonly showTooltip: _angular_core.InputSignal<boolean>;
|
|
6540
|
+
readonly expandedItemIds: _angular_core.InputSignal<Set<string | number>>;
|
|
6541
|
+
readonly activeItemId: _angular_core.InputSignal<string | number | null>;
|
|
6542
|
+
readonly sidebarPosition: _angular_core.InputSignal<SidebarPosition>;
|
|
6543
|
+
readonly collapsedTrigger: _angular_core.InputSignal<SidebarCollapsedTrigger>;
|
|
6544
|
+
readonly itemClick: _angular_core.OutputEmitterRef<SidebarItemClickEvent>;
|
|
6545
|
+
readonly itemToggle: _angular_core.OutputEmitterRef<SidebarItem>;
|
|
6546
|
+
readonly itemKeydown: _angular_core.OutputEmitterRef<KeyboardEvent>;
|
|
6547
|
+
readonly chevronRightIcon: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6548
|
+
readonly chevronDownIcon: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6549
|
+
readonly externalLinkIcon: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6550
|
+
private readonly elementRef;
|
|
6551
|
+
private readonly router;
|
|
6552
|
+
private readonly popoverOpen;
|
|
6553
|
+
readonly isPopoverOpen: _angular_core.Signal<boolean>;
|
|
6554
|
+
private readonly activeChildIndex;
|
|
6555
|
+
isHoveringPopover: boolean;
|
|
6556
|
+
private hideTimeout;
|
|
6557
|
+
readonly hasChildren: _angular_core.Signal<boolean>;
|
|
6558
|
+
readonly isExpanded: _angular_core.Signal<boolean>;
|
|
6559
|
+
readonly isActive: _angular_core.Signal<boolean>;
|
|
6560
|
+
readonly indentPadding: _angular_core.Signal<number>;
|
|
6561
|
+
/** Positions du popover selon la position de la sidebar */
|
|
6562
|
+
readonly popoverPositions: _angular_core.Signal<ConnectedPosition[]>;
|
|
6232
6563
|
/**
|
|
6233
|
-
*
|
|
6234
|
-
*
|
|
6235
|
-
* @param icons - Tableau d'icônes FontAwesome à enregistrer
|
|
6236
|
-
* @returns Le service lui-même pour chaînage
|
|
6237
|
-
*
|
|
6238
|
-
* @example
|
|
6239
|
-
* ```typescript
|
|
6240
|
-
* iconRegistry.registerIcons([faUser, faEnvelope, faPhone]);
|
|
6241
|
-
* ```
|
|
6564
|
+
* Gère le clic sur l'item.
|
|
6242
6565
|
*/
|
|
6243
|
-
|
|
6566
|
+
handleClick(event: MouseEvent): void;
|
|
6244
6567
|
/**
|
|
6245
|
-
*
|
|
6246
|
-
*
|
|
6247
|
-
* @param groupName - Nom du groupe (ex: 'forms', 'navigation')
|
|
6248
|
-
* @param icons - Tableau d'icônes du groupe
|
|
6249
|
-
* @returns Le service lui-même pour chaînage
|
|
6250
|
-
*
|
|
6251
|
-
* @example
|
|
6252
|
-
* ```typescript
|
|
6253
|
-
* iconRegistry.registerIconGroup('forms', [
|
|
6254
|
-
* faCheck, faTimes, faExclamation, faInfo
|
|
6255
|
-
* ]);
|
|
6256
|
-
* ```
|
|
6568
|
+
* Gère le clic sur le bouton toggle (chevron).
|
|
6257
6569
|
*/
|
|
6258
|
-
|
|
6570
|
+
handleToggleClick(event: MouseEvent): void;
|
|
6259
6571
|
/**
|
|
6260
|
-
*
|
|
6261
|
-
*
|
|
6262
|
-
* @param iconName - Nom de l'icône (format: 'prefix-iconName')
|
|
6263
|
-
* @returns true si l'icône est enregistrée
|
|
6264
|
-
*
|
|
6265
|
-
* @example
|
|
6266
|
-
* ```typescript
|
|
6267
|
-
* if (!iconRegistry.isIconRegistered('fas-check')) {
|
|
6268
|
-
* iconRegistry.registerIcons([faCheck]);
|
|
6269
|
-
* }
|
|
6270
|
-
* ```
|
|
6572
|
+
* Gère le clic sur un lien (routerLink ou href).
|
|
6271
6573
|
*/
|
|
6272
|
-
|
|
6574
|
+
handleLinkClick(event: MouseEvent): void;
|
|
6273
6575
|
/**
|
|
6274
|
-
*
|
|
6275
|
-
*
|
|
6276
|
-
* @returns Tableau des noms d'icônes enregistrées
|
|
6576
|
+
* Gère les événements clavier.
|
|
6277
6577
|
*/
|
|
6278
|
-
|
|
6578
|
+
handleKeydown(event: KeyboardEvent): void;
|
|
6579
|
+
/**
|
|
6580
|
+
* Donne le focus à cet élément.
|
|
6581
|
+
*/
|
|
6582
|
+
focus(): void;
|
|
6583
|
+
/**
|
|
6584
|
+
* Ouvre le popover (mode collapsed + hasChildren).
|
|
6585
|
+
*/
|
|
6586
|
+
openPopover(): void;
|
|
6587
|
+
/**
|
|
6588
|
+
* Ferme le popover.
|
|
6589
|
+
*/
|
|
6590
|
+
closePopover(): void;
|
|
6591
|
+
/**
|
|
6592
|
+
* Ferme le popover avec un délai.
|
|
6593
|
+
*/
|
|
6594
|
+
closePopoverWithDelay(): void;
|
|
6595
|
+
/**
|
|
6596
|
+
* Annule le timeout de fermeture.
|
|
6597
|
+
*/
|
|
6598
|
+
private clearHideTimeout;
|
|
6599
|
+
/**
|
|
6600
|
+
* Gestion du mouseenter sur l'item (ouvre le popover en mode collapsed + trigger hover).
|
|
6601
|
+
*/
|
|
6602
|
+
handleMouseEnter(): void;
|
|
6603
|
+
/**
|
|
6604
|
+
* Gestion du mouseleave sur l'item.
|
|
6605
|
+
*/
|
|
6606
|
+
handleMouseLeave(): void;
|
|
6607
|
+
/**
|
|
6608
|
+
* Toggle le popover (pour le mode click).
|
|
6609
|
+
*/
|
|
6610
|
+
togglePopover(): void;
|
|
6611
|
+
/**
|
|
6612
|
+
* Gestion du mouseenter sur le popover.
|
|
6613
|
+
*/
|
|
6614
|
+
handlePopoverMouseEnter(): void;
|
|
6615
|
+
/**
|
|
6616
|
+
* Gestion du mouseleave sur le popover.
|
|
6617
|
+
*/
|
|
6618
|
+
handlePopoverMouseLeave(): void;
|
|
6619
|
+
/**
|
|
6620
|
+
* Navigation clavier dans le popover.
|
|
6621
|
+
*/
|
|
6622
|
+
handlePopoverKeydown(event: KeyboardEvent): void;
|
|
6623
|
+
/**
|
|
6624
|
+
* Déplace l'index actif dans le popover.
|
|
6625
|
+
*/
|
|
6626
|
+
private moveChildIndex;
|
|
6627
|
+
/**
|
|
6628
|
+
* Sélectionne l'enfant actif dans le popover.
|
|
6629
|
+
*/
|
|
6630
|
+
private selectActiveChild;
|
|
6631
|
+
/**
|
|
6632
|
+
* Gère le clic sur un enfant dans le popover.
|
|
6633
|
+
*/
|
|
6634
|
+
handleChildClick(child: SidebarItem, event: MouseEvent): void;
|
|
6635
|
+
/**
|
|
6636
|
+
* Met à jour l'index actif au hover.
|
|
6637
|
+
*/
|
|
6638
|
+
setActiveChildIndex(index: number): void;
|
|
6639
|
+
/**
|
|
6640
|
+
* Retourne l'index actif du popover.
|
|
6641
|
+
*/
|
|
6642
|
+
getActiveChildIndex(): number;
|
|
6643
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsSidebarItemComponent, never>;
|
|
6644
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsSidebarItemComponent, "ds-sidebar-item", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "level": { "alias": "level"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "showTooltip": { "alias": "showTooltip"; "required": false; "isSignal": true; }; "expandedItemIds": { "alias": "expandedItemIds"; "required": false; "isSignal": true; }; "activeItemId": { "alias": "activeItemId"; "required": false; "isSignal": true; }; "sidebarPosition": { "alias": "sidebarPosition"; "required": false; "isSignal": true; }; "collapsedTrigger": { "alias": "collapsedTrigger"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "itemToggle": "itemToggle"; "itemKeydown": "itemKeydown"; }, never, never, true, never>;
|
|
6645
|
+
}
|
|
6646
|
+
|
|
6647
|
+
/**
|
|
6648
|
+
* # DsSidebar
|
|
6649
|
+
*
|
|
6650
|
+
* Composant de navigation verticale avec support multi-niveaux,
|
|
6651
|
+
* modes responsive et intégration Router Angular.
|
|
6652
|
+
*
|
|
6653
|
+
* ## Modes
|
|
6654
|
+
* - `full` : Largeur complète avec labels visibles
|
|
6655
|
+
* - `collapsed` : Icônes uniquement avec tooltips
|
|
6656
|
+
* - `overlay` : Panneau glissant avec backdrop (mobile)
|
|
6657
|
+
*
|
|
6658
|
+
* ## Usage
|
|
6659
|
+
*
|
|
6660
|
+
* ```html
|
|
6661
|
+
* <ds-sidebar
|
|
6662
|
+
* [items]="menuItems"
|
|
6663
|
+
* [mode]="sidebarMode"
|
|
6664
|
+
* [size]="'md'"
|
|
6665
|
+
* [collapsible]="true"
|
|
6666
|
+
* (itemClick)="onItemClick($event)"
|
|
6667
|
+
* (modeChange)="onModeChange($event)">
|
|
6668
|
+
*
|
|
6669
|
+
* <ng-container sidebar-header>
|
|
6670
|
+
* <img src="logo.svg" alt="Logo" />
|
|
6671
|
+
* </ng-container>
|
|
6672
|
+
*
|
|
6673
|
+
* <ng-container sidebar-footer>
|
|
6674
|
+
* <button>Déconnexion</button>
|
|
6675
|
+
* </ng-container>
|
|
6676
|
+
* </ds-sidebar>
|
|
6677
|
+
* ```
|
|
6678
|
+
*
|
|
6679
|
+
* ## Accessibilité
|
|
6680
|
+
* - Navigation clavier complète (Arrow, Home, End, Enter, Escape)
|
|
6681
|
+
* - Focus trap en mode overlay
|
|
6682
|
+
* - Attributs ARIA complets
|
|
6683
|
+
*
|
|
6684
|
+
* @component
|
|
6685
|
+
*/
|
|
6686
|
+
declare class DsSidebar implements OnInit, AfterViewInit, OnDestroy {
|
|
6687
|
+
/** Liste des items de navigation */
|
|
6688
|
+
readonly items: _angular_core.InputSignal<SidebarItem[]>;
|
|
6689
|
+
/** Mode d'affichage */
|
|
6690
|
+
readonly mode: _angular_core.InputSignal<SidebarMode>;
|
|
6691
|
+
/** Taille (largeur) */
|
|
6692
|
+
readonly size: _angular_core.InputSignal<SidebarSize>;
|
|
6693
|
+
/** Position */
|
|
6694
|
+
readonly position: _angular_core.InputSignal<SidebarPosition>;
|
|
6695
|
+
/** Permet le toggle entre full et collapsed */
|
|
6696
|
+
readonly collapsible: _angular_core.InputSignal<boolean>;
|
|
6697
|
+
/** Label ARIA pour l'accessibilité */
|
|
6698
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
6699
|
+
/** Breakpoint pour le mode responsive (px) */
|
|
6700
|
+
readonly responsiveBreakpoint: _angular_core.InputSignal<number>;
|
|
6701
|
+
/** Active le switch automatique vers overlay sur mobile */
|
|
6702
|
+
readonly autoCollapseOnMobile: _angular_core.InputSignal<boolean>;
|
|
6703
|
+
/** Affiche les tooltips en mode collapsed (désactivable) */
|
|
6704
|
+
readonly showTooltips: _angular_core.InputSignal<boolean>;
|
|
6705
|
+
/** Trigger pour ouvrir le popover des sous-menus en mode collapsed */
|
|
6706
|
+
readonly collapsedTrigger: _angular_core.InputSignal<SidebarCollapsedTrigger>;
|
|
6707
|
+
/** ID de l'item actif (contrôlé depuis l'extérieur) */
|
|
6708
|
+
readonly initialActiveItemId: _angular_core.InputSignal<string | number | null>;
|
|
6709
|
+
/** Émis lors du clic sur un item */
|
|
6710
|
+
readonly itemClick: _angular_core.OutputEmitterRef<SidebarItemClickEvent>;
|
|
6711
|
+
/** Émis lors de l'expansion/collapse d'un item */
|
|
6712
|
+
readonly itemExpand: _angular_core.OutputEmitterRef<SidebarItemExpandEvent>;
|
|
6713
|
+
/** Émis lors du changement de mode */
|
|
6714
|
+
readonly modeChange: _angular_core.OutputEmitterRef<SidebarMode>;
|
|
6715
|
+
/** Émis à l'ouverture de l'overlay */
|
|
6716
|
+
readonly overlayOpened: _angular_core.OutputEmitterRef<void>;
|
|
6717
|
+
/** Émis à la fermeture de l'overlay */
|
|
6718
|
+
readonly overlayClosed: _angular_core.OutputEmitterRef<void>;
|
|
6719
|
+
sidebarContainer?: ElementRef<HTMLElement>;
|
|
6720
|
+
itemComponents?: QueryList<DsSidebarItemComponent>;
|
|
6721
|
+
/** Mode interne (peut différer du mode input en responsive) */
|
|
6722
|
+
protected readonly internalMode: _angular_core.WritableSignal<SidebarMode>;
|
|
6723
|
+
/** IDs des items expandés */
|
|
6724
|
+
readonly expandedItemIds: _angular_core.WritableSignal<Set<string | number>>;
|
|
6725
|
+
/** ID de l'item actif */
|
|
6726
|
+
readonly activeItemId: _angular_core.WritableSignal<string | number | null>;
|
|
6727
|
+
/** Index de l'item focusé (pour navigation clavier) */
|
|
6728
|
+
private readonly focusedIndex;
|
|
6729
|
+
/** État d'ouverture de l'overlay */
|
|
6730
|
+
readonly isOverlayOpen: _angular_core.WritableSignal<boolean>;
|
|
6731
|
+
/** Indique si la vue est prête */
|
|
6732
|
+
private viewReady;
|
|
6733
|
+
/** Indique si l'état expanded a été initialisé */
|
|
6734
|
+
private expandedStateInitialized;
|
|
6735
|
+
readonly menuIcon: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6736
|
+
readonly collapseIcon: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6737
|
+
readonly expandIcon: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6738
|
+
private focusTrap;
|
|
6739
|
+
private mediaQueryListener;
|
|
6740
|
+
private readonly documentRef;
|
|
6741
|
+
private readonly focusTrapFactory;
|
|
6742
|
+
/** Classes CSS du conteneur */
|
|
6743
|
+
readonly containerClasses: _angular_core.Signal<string>;
|
|
6744
|
+
/** Liste aplatie des items pour navigation clavier */
|
|
6745
|
+
readonly flattenedItems: _angular_core.Signal<FlattenedSidebarItem[]>;
|
|
6746
|
+
/** Nombre total d'items visibles */
|
|
6747
|
+
readonly visibleItemCount: _angular_core.Signal<number>;
|
|
6748
|
+
constructor();
|
|
6749
|
+
ngOnInit(): void;
|
|
6750
|
+
ngAfterViewInit(): void;
|
|
6751
|
+
ngOnDestroy(): void;
|
|
6752
|
+
/**
|
|
6753
|
+
* Bascule entre les modes full et collapsed.
|
|
6754
|
+
*/
|
|
6755
|
+
toggleMode(): void;
|
|
6756
|
+
/**
|
|
6757
|
+
* Ouvre l'overlay (mode overlay uniquement).
|
|
6758
|
+
*/
|
|
6759
|
+
openOverlay(): void;
|
|
6760
|
+
/**
|
|
6761
|
+
* Ferme l'overlay.
|
|
6762
|
+
*/
|
|
6763
|
+
closeOverlay(): void;
|
|
6764
|
+
/**
|
|
6765
|
+
* Définit l'item actif par son ID.
|
|
6766
|
+
*/
|
|
6767
|
+
setActiveItem(itemId: string | number): void;
|
|
6768
|
+
/**
|
|
6769
|
+
* Expand ou collapse un item.
|
|
6770
|
+
*/
|
|
6771
|
+
toggleExpand(item: SidebarItem): void;
|
|
6772
|
+
/**
|
|
6773
|
+
* Expand tous les items avec enfants.
|
|
6774
|
+
*/
|
|
6775
|
+
expandAll(): void;
|
|
6776
|
+
/**
|
|
6777
|
+
* Collapse tous les items.
|
|
6778
|
+
*/
|
|
6779
|
+
collapseAll(): void;
|
|
6780
|
+
/**
|
|
6781
|
+
* Gère le clic sur un item.
|
|
6782
|
+
*/
|
|
6783
|
+
handleItemClick(event: SidebarItemClickEvent): void;
|
|
6784
|
+
/**
|
|
6785
|
+
* Gère le toggle d'un item (expand/collapse).
|
|
6786
|
+
*/
|
|
6787
|
+
handleItemToggle(item: SidebarItem): void;
|
|
6788
|
+
/**
|
|
6789
|
+
* Gère le clic sur le backdrop.
|
|
6790
|
+
*/
|
|
6791
|
+
handleBackdropClick(): void;
|
|
6792
|
+
/**
|
|
6793
|
+
* Gère la navigation clavier globale.
|
|
6794
|
+
*/
|
|
6795
|
+
handleKeyDown(event: KeyboardEvent): void;
|
|
6796
|
+
/**
|
|
6797
|
+
* Gère les événements clavier d'un item enfant.
|
|
6798
|
+
*/
|
|
6799
|
+
handleItemKeydown(event: KeyboardEvent): void;
|
|
6800
|
+
/**
|
|
6801
|
+
* Initialise l'état expanded depuis les items.
|
|
6802
|
+
*/
|
|
6803
|
+
private initializeExpandedState;
|
|
6804
|
+
/**
|
|
6805
|
+
* Expand les parents d'un item.
|
|
6806
|
+
*/
|
|
6807
|
+
private expandParentsOfItem;
|
|
6808
|
+
/**
|
|
6809
|
+
* Déplace le focus vers l'item suivant/précédent.
|
|
6810
|
+
*/
|
|
6811
|
+
private moveFocus;
|
|
6812
|
+
/**
|
|
6813
|
+
* Expand l'item focusé s'il a des enfants.
|
|
6814
|
+
*/
|
|
6815
|
+
private expandFocusedItem;
|
|
6816
|
+
/**
|
|
6817
|
+
* Collapse l'item focusé ou remonte au parent.
|
|
6818
|
+
*/
|
|
6819
|
+
private collapseOrMoveFocus;
|
|
6820
|
+
/**
|
|
6821
|
+
* Active (clic) l'item focusé.
|
|
6822
|
+
*/
|
|
6823
|
+
private activateFocusedItem;
|
|
6824
|
+
/**
|
|
6825
|
+
* Focus l'item à l'index courant.
|
|
6826
|
+
*/
|
|
6827
|
+
private focusCurrentItem;
|
|
6828
|
+
/**
|
|
6829
|
+
* Focus le premier item.
|
|
6830
|
+
*/
|
|
6831
|
+
private focusFirstItem;
|
|
6832
|
+
/**
|
|
6833
|
+
* Configure le listener responsive.
|
|
6834
|
+
*/
|
|
6835
|
+
private setupResponsiveListener;
|
|
6836
|
+
/**
|
|
6837
|
+
* Attache le focus trap.
|
|
6838
|
+
*/
|
|
6839
|
+
private attachFocusTrap;
|
|
6840
|
+
/**
|
|
6841
|
+
* Détache le focus trap.
|
|
6842
|
+
*/
|
|
6843
|
+
private detachFocusTrap;
|
|
6844
|
+
/**
|
|
6845
|
+
* Nettoie les listeners.
|
|
6846
|
+
*/
|
|
6847
|
+
private cleanupListeners;
|
|
6848
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsSidebar, never>;
|
|
6849
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsSidebar, "ds-sidebar", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "responsiveBreakpoint": { "alias": "responsiveBreakpoint"; "required": false; "isSignal": true; }; "autoCollapseOnMobile": { "alias": "autoCollapseOnMobile"; "required": false; "isSignal": true; }; "showTooltips": { "alias": "showTooltips"; "required": false; "isSignal": true; }; "collapsedTrigger": { "alias": "collapsedTrigger"; "required": false; "isSignal": true; }; "initialActiveItemId": { "alias": "initialActiveItemId"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "itemExpand": "itemExpand"; "modeChange": "modeChange"; "overlayOpened": "overlayOpened"; "overlayClosed": "overlayClosed"; }, never, ["[sidebar-header]", "[sidebar-footer]"], true, never>;
|
|
6850
|
+
}
|
|
6851
|
+
|
|
6852
|
+
declare class DsSidebarFooterItemComponent {
|
|
6853
|
+
readonly icon: _angular_core.InputSignal<IconDefinition$2>;
|
|
6854
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
6855
|
+
readonly mode: _angular_core.InputSignal<SidebarMode>;
|
|
6856
|
+
readonly variant: _angular_core.InputSignal<"default" | "danger">;
|
|
6857
|
+
readonly clicked: _angular_core.OutputEmitterRef<void>;
|
|
6858
|
+
readonly isCollapsed: _angular_core.Signal<boolean>;
|
|
6859
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsSidebarFooterItemComponent, never>;
|
|
6860
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsSidebarFooterItemComponent, "ds-sidebar-footer-item", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
|
|
6861
|
+
}
|
|
6862
|
+
|
|
6863
|
+
/**
|
|
6864
|
+
* Taille du composant NavList
|
|
6865
|
+
*/
|
|
6866
|
+
type NavListSize = 'sm' | 'md' | 'lg';
|
|
6867
|
+
/**
|
|
6868
|
+
* Variante de couleur pour les badges
|
|
6869
|
+
*/
|
|
6870
|
+
type NavListBadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
|
|
6871
|
+
/**
|
|
6872
|
+
* Item de navigation dans la liste.
|
|
6873
|
+
* Supporte icône FontAwesome OU emoji, badge compteur, et indicateur coloré.
|
|
6874
|
+
*/
|
|
6875
|
+
interface NavListItem {
|
|
6876
|
+
/** Identifiant unique de l'item */
|
|
6877
|
+
id: string | number;
|
|
6878
|
+
/** Label affiché */
|
|
6879
|
+
label: string;
|
|
6880
|
+
/** Icône FontAwesome (mutually exclusive avec emoji) */
|
|
6881
|
+
icon?: IconDefinition;
|
|
6882
|
+
/** Emoji affiché à la place de l'icône */
|
|
6883
|
+
emoji?: string;
|
|
6884
|
+
/** Badge compteur ou texte */
|
|
6885
|
+
badge?: number | string;
|
|
6886
|
+
/** Variante de couleur du badge */
|
|
6887
|
+
badgeVariant?: NavListBadgeVariant;
|
|
6888
|
+
/** Couleur de l'indicateur dot (ex: "#3b82f6") */
|
|
6889
|
+
dotColor?: string;
|
|
6890
|
+
/** Item désactivé */
|
|
6891
|
+
disabled?: boolean;
|
|
6892
|
+
/** Données personnalisées attachées à l'item */
|
|
6893
|
+
data?: unknown;
|
|
6894
|
+
}
|
|
6895
|
+
/**
|
|
6896
|
+
* Groupe d'items avec titre optionnel.
|
|
6897
|
+
* Permet d'organiser les items en sections (Sources, Filtres, etc.)
|
|
6898
|
+
*/
|
|
6899
|
+
interface NavListGroup {
|
|
6900
|
+
/** Identifiant unique du groupe */
|
|
6901
|
+
id: string;
|
|
6902
|
+
/** Titre de la section (affiché comme divider) */
|
|
6903
|
+
title?: string;
|
|
6904
|
+
/** Items du groupe */
|
|
6905
|
+
items: NavListItem[];
|
|
6906
|
+
/** Groupe repliable */
|
|
6907
|
+
collapsible?: boolean;
|
|
6908
|
+
/** État initial replié (si collapsible) */
|
|
6909
|
+
collapsed?: boolean;
|
|
6910
|
+
}
|
|
6911
|
+
/**
|
|
6912
|
+
* Événement émis lors du clic sur un item.
|
|
6913
|
+
*/
|
|
6914
|
+
interface NavListItemClickEvent {
|
|
6915
|
+
/** Item cliqué */
|
|
6916
|
+
item: NavListItem;
|
|
6917
|
+
/** Groupe contenant l'item */
|
|
6918
|
+
group: NavListGroup;
|
|
6919
|
+
/** Événement souris original */
|
|
6920
|
+
event: MouseEvent;
|
|
6921
|
+
}
|
|
6922
|
+
/**
|
|
6923
|
+
* Événement émis lors du toggle d'un groupe (collapse/expand).
|
|
6924
|
+
*/
|
|
6925
|
+
interface NavListGroupToggleEvent {
|
|
6926
|
+
/** Groupe concerné */
|
|
6927
|
+
group: NavListGroup;
|
|
6928
|
+
/** Nouvel état (true = collapsed) */
|
|
6929
|
+
collapsed: boolean;
|
|
6930
|
+
}
|
|
6931
|
+
|
|
6932
|
+
/**
|
|
6933
|
+
* # DsNavList
|
|
6934
|
+
*
|
|
6935
|
+
* Composant de liste de navigation/filtrage avec support de groupes,
|
|
6936
|
+
* icônes/emojis, badges et indicateurs colorés.
|
|
6937
|
+
*
|
|
6938
|
+
* ## Fonctionnalités
|
|
6939
|
+
* - Groupes avec titres (dividers)
|
|
6940
|
+
* - Items avec icône FontAwesome OU emoji
|
|
6941
|
+
* - Badge compteur avec variantes de couleur
|
|
6942
|
+
* - Indicateur dot coloré
|
|
6943
|
+
* - Groupes repliables
|
|
6944
|
+
* - Navigation clavier
|
|
6945
|
+
*
|
|
6946
|
+
* ## Usage
|
|
6947
|
+
*
|
|
6948
|
+
* ```html
|
|
6949
|
+
* <ds-nav-list
|
|
6950
|
+
* [groups]="navGroups"
|
|
6951
|
+
* [activeItemId]="activeFilter"
|
|
6952
|
+
* [size]="'md'"
|
|
6953
|
+
* (itemClick)="onItemClick($event)">
|
|
6954
|
+
* </ds-nav-list>
|
|
6955
|
+
* ```
|
|
6956
|
+
*
|
|
6957
|
+
* ## Accessibilité
|
|
6958
|
+
* - Rôle navigation avec aria-label
|
|
6959
|
+
* - Navigation clavier (Arrow, Enter, Space)
|
|
6960
|
+
* - États aria-current pour item actif
|
|
6961
|
+
*
|
|
6962
|
+
* @component
|
|
6963
|
+
*/
|
|
6964
|
+
declare class DsNavList {
|
|
6965
|
+
/** Liste des groupes d'items */
|
|
6966
|
+
readonly groups: _angular_core.InputSignal<NavListGroup[]>;
|
|
6967
|
+
/** ID de l'item actif */
|
|
6968
|
+
readonly activeItemId: _angular_core.InputSignal<string | number | null>;
|
|
6969
|
+
/** Taille du composant */
|
|
6970
|
+
readonly size: _angular_core.InputSignal<NavListSize>;
|
|
6971
|
+
/** Label ARIA pour l'accessibilité */
|
|
6972
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
6973
|
+
/** Émis lors du clic sur un item */
|
|
6974
|
+
readonly itemClick: _angular_core.OutputEmitterRef<NavListItemClickEvent>;
|
|
6975
|
+
/** Émis lors du toggle d'un groupe */
|
|
6976
|
+
readonly groupToggle: _angular_core.OutputEmitterRef<NavListGroupToggleEvent>;
|
|
6977
|
+
protected readonly faChevronDown: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6978
|
+
protected readonly faChevronRight: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
6979
|
+
/** IDs des groupes collapsed */
|
|
6980
|
+
private readonly collapsedGroupIds;
|
|
6981
|
+
/** Classes CSS du conteneur */
|
|
6982
|
+
readonly containerClasses: _angular_core.Signal<string>;
|
|
6983
|
+
constructor();
|
|
6984
|
+
/**
|
|
6985
|
+
* Vérifie si un item est actif
|
|
6986
|
+
*/
|
|
6987
|
+
isActive(item: NavListItem): boolean;
|
|
6988
|
+
/**
|
|
6989
|
+
* Vérifie si un groupe est collapsed
|
|
6990
|
+
*/
|
|
6991
|
+
isGroupCollapsed(group: NavListGroup): boolean;
|
|
6992
|
+
/**
|
|
6993
|
+
* Toggle l'état collapsed d'un groupe
|
|
6994
|
+
*/
|
|
6995
|
+
toggleGroup(group: NavListGroup, event: MouseEvent): void;
|
|
6996
|
+
/**
|
|
6997
|
+
* Gère le clic sur un item
|
|
6998
|
+
*/
|
|
6999
|
+
handleItemClick(item: NavListItem, group: NavListGroup, event: MouseEvent): void;
|
|
7000
|
+
/**
|
|
7001
|
+
* Gère la navigation clavier sur un item
|
|
7002
|
+
*/
|
|
7003
|
+
handleItemKeydown(item: NavListItem, group: NavListGroup, event: KeyboardEvent): void;
|
|
7004
|
+
/**
|
|
7005
|
+
* Retourne les classes CSS pour un item
|
|
7006
|
+
*/
|
|
7007
|
+
getItemClasses(item: NavListItem): string;
|
|
7008
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsNavList, never>;
|
|
7009
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsNavList, "ds-nav-list", never, { "groups": { "alias": "groups"; "required": true; "isSignal": true; }; "activeItemId": { "alias": "activeItemId"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "groupToggle": "groupToggle"; }, never, never, true, never>;
|
|
7010
|
+
}
|
|
7011
|
+
|
|
7012
|
+
/**
|
|
7013
|
+
* Taille du composant CheckboxList
|
|
7014
|
+
*/
|
|
7015
|
+
type CheckboxListSize = 'sm' | 'md' | 'lg';
|
|
7016
|
+
/**
|
|
7017
|
+
* Item de la liste de checkboxes.
|
|
7018
|
+
* Supporte icône FontAwesome OU emoji.
|
|
7019
|
+
*/
|
|
7020
|
+
interface CheckboxListItem {
|
|
7021
|
+
/** Identifiant unique de l'item */
|
|
7022
|
+
id: string | number;
|
|
7023
|
+
/** Label affiché */
|
|
7024
|
+
label: string;
|
|
7025
|
+
/** Icône FontAwesome (mutually exclusive avec emoji) */
|
|
7026
|
+
icon?: IconDefinition;
|
|
7027
|
+
/** Emoji affiché à la place de l'icône */
|
|
7028
|
+
emoji?: string;
|
|
7029
|
+
/** État coché de l'item */
|
|
7030
|
+
checked: boolean;
|
|
7031
|
+
/** Item désactivé */
|
|
7032
|
+
disabled?: boolean;
|
|
7033
|
+
/** Texte d'aide affiché sous l'item */
|
|
7034
|
+
helper?: string;
|
|
7035
|
+
/** Données personnalisées attachées à l'item */
|
|
7036
|
+
data?: unknown;
|
|
7037
|
+
}
|
|
7038
|
+
/**
|
|
7039
|
+
* Événement émis lors du changement d'état d'un item.
|
|
7040
|
+
*/
|
|
7041
|
+
interface CheckboxListItemChangeEvent {
|
|
7042
|
+
/** Item modifié */
|
|
7043
|
+
item: CheckboxListItem;
|
|
7044
|
+
/** Nouvel état coché */
|
|
7045
|
+
checked: boolean;
|
|
7046
|
+
/** Index de l'item dans la liste */
|
|
7047
|
+
index: number;
|
|
7048
|
+
}
|
|
7049
|
+
/**
|
|
7050
|
+
* Événement émis lors du changement global (tous les items).
|
|
7051
|
+
*/
|
|
7052
|
+
interface CheckboxListChangeEvent {
|
|
7053
|
+
/** Liste complète des items avec leur état */
|
|
7054
|
+
items: CheckboxListItem[];
|
|
7055
|
+
/** IDs des items cochés */
|
|
7056
|
+
checkedIds: (string | number)[];
|
|
7057
|
+
}
|
|
7058
|
+
|
|
7059
|
+
/**
|
|
7060
|
+
* # DsCheckboxList
|
|
7061
|
+
*
|
|
7062
|
+
* Composant de liste de checkboxes avec support d'icônes/emojis.
|
|
7063
|
+
* Idéal pour les listes de préférences, filtres, ou sélections multiples.
|
|
7064
|
+
*
|
|
7065
|
+
* ## Fonctionnalités
|
|
7066
|
+
* - Items avec icône FontAwesome OU emoji
|
|
7067
|
+
* - Sélection/désélection individuelle
|
|
7068
|
+
* - Sélection globale (tout cocher/décocher)
|
|
7069
|
+
* - Helper text par item
|
|
7070
|
+
* - Navigation clavier
|
|
7071
|
+
* - Two-way binding sur items
|
|
7072
|
+
*
|
|
7073
|
+
* ## Usage
|
|
7074
|
+
*
|
|
7075
|
+
* ```html
|
|
7076
|
+
* <ds-checkbox-list
|
|
7077
|
+
* [(items)]="preferences"
|
|
7078
|
+
* [size]="'md'"
|
|
7079
|
+
* [showSelectAll]="true"
|
|
7080
|
+
* (itemChange)="onItemChange($event)"
|
|
7081
|
+
* (change)="onListChange($event)">
|
|
7082
|
+
* </ds-checkbox-list>
|
|
7083
|
+
* ```
|
|
7084
|
+
*
|
|
7085
|
+
* ## Accessibilité
|
|
7086
|
+
* - Rôle group avec aria-label
|
|
7087
|
+
* - Navigation clavier (Tab, Space)
|
|
7088
|
+
* - États aria-checked
|
|
7089
|
+
*
|
|
7090
|
+
* @component
|
|
7091
|
+
*/
|
|
7092
|
+
declare class DsCheckboxList {
|
|
7093
|
+
/** Liste des items (two-way binding) */
|
|
7094
|
+
readonly items: _angular_core.ModelSignal<CheckboxListItem[]>;
|
|
7095
|
+
/** Taille du composant */
|
|
7096
|
+
readonly size: _angular_core.InputSignal<CheckboxListSize>;
|
|
7097
|
+
/** Afficher le checkbox "Tout sélectionner" */
|
|
7098
|
+
readonly showSelectAll: _angular_core.InputSignal<boolean>;
|
|
7099
|
+
/** Label du checkbox "Tout sélectionner" */
|
|
7100
|
+
readonly selectAllLabel: _angular_core.InputSignal<string>;
|
|
7101
|
+
/** Label ARIA pour l'accessibilité */
|
|
7102
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
7103
|
+
/** Désactiver toute la liste */
|
|
7104
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
7105
|
+
/** Émis lors du changement d'un item */
|
|
7106
|
+
readonly itemChange: _angular_core.OutputEmitterRef<CheckboxListItemChangeEvent>;
|
|
7107
|
+
/** Émis lors de tout changement (liste complète) */
|
|
7108
|
+
readonly change: _angular_core.OutputEmitterRef<CheckboxListChangeEvent>;
|
|
7109
|
+
/** ID unique pour le composant */
|
|
7110
|
+
protected readonly componentId: string;
|
|
7111
|
+
/** Classes CSS du conteneur */
|
|
7112
|
+
readonly containerClasses: _angular_core.Signal<string>;
|
|
7113
|
+
/** Tous les items sont cochés */
|
|
7114
|
+
readonly allChecked: _angular_core.Signal<boolean>;
|
|
7115
|
+
/** Certains items sont cochés (état indéterminé) */
|
|
7116
|
+
readonly someChecked: _angular_core.Signal<boolean>;
|
|
7117
|
+
/** IDs des items cochés */
|
|
7118
|
+
readonly checkedIds: _angular_core.Signal<(string | number)[]>;
|
|
7119
|
+
/**
|
|
7120
|
+
* Génère un ID unique pour un item
|
|
7121
|
+
*/
|
|
7122
|
+
getItemId(item: CheckboxListItem, index: number): string;
|
|
7123
|
+
/**
|
|
7124
|
+
* Gère le changement d'état d'un item
|
|
7125
|
+
*/
|
|
7126
|
+
onItemCheckedChange(item: CheckboxListItem, checked: boolean, index: number): void;
|
|
7127
|
+
/**
|
|
7128
|
+
* Gère le clic sur "Tout sélectionner"
|
|
7129
|
+
*/
|
|
7130
|
+
onSelectAllChange(checked: boolean): void;
|
|
7131
|
+
/**
|
|
7132
|
+
* Émet l'événement change avec l'état complet
|
|
7133
|
+
*/
|
|
7134
|
+
private emitChangeEvent;
|
|
7135
|
+
/**
|
|
7136
|
+
* Retourne les classes CSS pour un item
|
|
7137
|
+
*/
|
|
7138
|
+
getItemClasses(item: CheckboxListItem): string;
|
|
7139
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsCheckboxList, never>;
|
|
7140
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsCheckboxList, "ds-checkbox-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectAllLabel": { "alias": "selectAllLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "itemChange": "itemChange"; "change": "change"; }, never, never, true, never>;
|
|
7141
|
+
}
|
|
7142
|
+
|
|
7143
|
+
/**
|
|
7144
|
+
* Tailles disponibles pour DsListItem
|
|
7145
|
+
*/
|
|
7146
|
+
type ListItemSize = 'sm' | 'md' | 'lg';
|
|
7147
|
+
/**
|
|
7148
|
+
* Types d'indicateur visuel (barre/dot à gauche)
|
|
7149
|
+
* - none: pas d'indicateur
|
|
7150
|
+
* - priority: barre verticale colorée (style TickTick)
|
|
7151
|
+
* - dot: point coloré
|
|
7152
|
+
* - status: point coloré (alias de dot)
|
|
7153
|
+
*/
|
|
7154
|
+
type ListItemIndicator = 'none' | 'priority' | 'dot' | 'status';
|
|
7155
|
+
/**
|
|
7156
|
+
* Couleurs prédéfinies pour l'indicateur
|
|
7157
|
+
*/
|
|
7158
|
+
type ListItemIndicatorColor = 'high' | 'medium' | 'low' | 'success' | 'warning' | 'error' | 'info';
|
|
7159
|
+
/**
|
|
7160
|
+
* Événement émis lors du clic sur l'item
|
|
7161
|
+
*/
|
|
7162
|
+
interface ListItemClickEvent {
|
|
7163
|
+
event: MouseEvent | KeyboardEvent;
|
|
7164
|
+
}
|
|
7165
|
+
/**
|
|
7166
|
+
* Événement émis lors du changement de la checkbox
|
|
7167
|
+
*/
|
|
7168
|
+
interface ListItemCheckEvent {
|
|
7169
|
+
checked: boolean;
|
|
7170
|
+
}
|
|
7171
|
+
|
|
7172
|
+
/**
|
|
7173
|
+
* # DsListItem
|
|
7174
|
+
*
|
|
7175
|
+
* Composant de ligne d'élément de liste interactif, style TickTick/Todoist.
|
|
7176
|
+
* Supporte checkbox intégrée, indicateur de priorité, et slots pour métadonnées.
|
|
7177
|
+
*
|
|
7178
|
+
* ## Usage
|
|
7179
|
+
*
|
|
7180
|
+
* ```html
|
|
7181
|
+
* <!-- Basique -->
|
|
7182
|
+
* <ds-list-item title="Ma tâche" />
|
|
7183
|
+
*
|
|
7184
|
+
* <!-- Avec checkbox et priorité -->
|
|
7185
|
+
* <ds-list-item
|
|
7186
|
+
* title="Tâche importante"
|
|
7187
|
+
* [checkable]="true"
|
|
7188
|
+
* [checked]="task.completed"
|
|
7189
|
+
* indicator="priority"
|
|
7190
|
+
* indicatorColor="high"
|
|
7191
|
+
* (checkedChange)="onComplete($event)"
|
|
7192
|
+
* />
|
|
7193
|
+
*
|
|
7194
|
+
* <!-- Avec métadonnées -->
|
|
7195
|
+
* <ds-list-item title="Réunion" [checkable]="true">
|
|
7196
|
+
* <ds-chip inline size="sm">Travail</ds-chip>
|
|
7197
|
+
* <span meta>09:00</span>
|
|
7198
|
+
* <span meta>30min</span>
|
|
7199
|
+
* </ds-list-item>
|
|
7200
|
+
* ```
|
|
7201
|
+
*
|
|
7202
|
+
* ## Accessibilité
|
|
7203
|
+
*
|
|
7204
|
+
* - Role `button` quand clickable, `listitem` sinon
|
|
7205
|
+
* - Navigation clavier (Enter, Space)
|
|
7206
|
+
* - aria-disabled, aria-selected appropriés
|
|
7207
|
+
*/
|
|
7208
|
+
declare class DsListItem {
|
|
7209
|
+
/**
|
|
7210
|
+
* Titre principal de l'élément (requis)
|
|
7211
|
+
*/
|
|
7212
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
7213
|
+
/**
|
|
7214
|
+
* Sous-titre optionnel
|
|
7215
|
+
*/
|
|
7216
|
+
readonly subtitle: _angular_core.InputSignal<string | undefined>;
|
|
7217
|
+
/**
|
|
7218
|
+
* Type d'indicateur à afficher à gauche
|
|
7219
|
+
* @default 'none'
|
|
7220
|
+
*/
|
|
7221
|
+
readonly indicator: _angular_core.InputSignal<ListItemIndicator>;
|
|
7222
|
+
/**
|
|
7223
|
+
* Couleur de l'indicateur (prédéfinie ou custom CSS)
|
|
7224
|
+
* @default 'medium'
|
|
7225
|
+
*/
|
|
7226
|
+
readonly indicatorColor: _angular_core.InputSignal<string>;
|
|
7227
|
+
/**
|
|
7228
|
+
* Affiche une checkbox
|
|
7229
|
+
* @default false
|
|
7230
|
+
*/
|
|
7231
|
+
readonly checkable: _angular_core.InputSignal<boolean>;
|
|
7232
|
+
/**
|
|
7233
|
+
* État coché de la checkbox
|
|
7234
|
+
* @default false
|
|
7235
|
+
*/
|
|
7236
|
+
readonly checked: _angular_core.InputSignal<boolean>;
|
|
7237
|
+
/**
|
|
7238
|
+
* État indéterminé de la checkbox
|
|
7239
|
+
* @default false
|
|
7240
|
+
*/
|
|
7241
|
+
readonly indeterminate: _angular_core.InputSignal<boolean>;
|
|
7242
|
+
/**
|
|
7243
|
+
* Applique le style complété (texte barré, opacité réduite)
|
|
7244
|
+
* @default false
|
|
7245
|
+
*/
|
|
7246
|
+
readonly completed: _angular_core.InputSignal<boolean>;
|
|
7247
|
+
/**
|
|
7248
|
+
* Désactive l'interaction
|
|
7249
|
+
* @default false
|
|
7250
|
+
*/
|
|
7251
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
7252
|
+
/**
|
|
7253
|
+
* Applique le style de sélection
|
|
7254
|
+
* @default false
|
|
7255
|
+
*/
|
|
7256
|
+
readonly selected: _angular_core.InputSignal<boolean>;
|
|
7257
|
+
/**
|
|
7258
|
+
* Rend l'élément cliquable avec effet hover
|
|
7259
|
+
* @default true
|
|
7260
|
+
*/
|
|
7261
|
+
readonly clickable: _angular_core.InputSignal<boolean>;
|
|
7262
|
+
/**
|
|
7263
|
+
* Taille de l'élément
|
|
7264
|
+
* @default 'md'
|
|
7265
|
+
*/
|
|
7266
|
+
readonly size: _angular_core.InputSignal<ListItemSize>;
|
|
7267
|
+
/**
|
|
7268
|
+
* Émis lors du changement de la checkbox
|
|
7269
|
+
*/
|
|
7270
|
+
readonly checkedChange: _angular_core.OutputEmitterRef<ListItemCheckEvent>;
|
|
7271
|
+
/**
|
|
7272
|
+
* Émis lors du clic sur l'élément
|
|
7273
|
+
*/
|
|
7274
|
+
readonly clicked: _angular_core.OutputEmitterRef<ListItemClickEvent>;
|
|
7275
|
+
/**
|
|
7276
|
+
* Classes CSS calculées
|
|
7277
|
+
*/
|
|
7278
|
+
readonly itemClasses: _angular_core.Signal<string>;
|
|
7279
|
+
/**
|
|
7280
|
+
* Role ARIA
|
|
7281
|
+
*/
|
|
7282
|
+
readonly role: _angular_core.Signal<"button" | "listitem">;
|
|
7283
|
+
/**
|
|
7284
|
+
* Tabindex
|
|
7285
|
+
*/
|
|
7286
|
+
readonly tabindex: _angular_core.Signal<0 | -1>;
|
|
7287
|
+
/**
|
|
7288
|
+
* Afficher l'indicateur ?
|
|
7289
|
+
*/
|
|
7290
|
+
readonly showIndicator: _angular_core.Signal<boolean>;
|
|
7291
|
+
/**
|
|
7292
|
+
* Est-ce un indicateur de type barre ?
|
|
7293
|
+
*/
|
|
7294
|
+
readonly isBarIndicator: _angular_core.Signal<boolean>;
|
|
7295
|
+
/**
|
|
7296
|
+
* Est-ce un indicateur de type dot ?
|
|
7297
|
+
*/
|
|
7298
|
+
readonly isDotIndicator: _angular_core.Signal<boolean>;
|
|
7299
|
+
/**
|
|
7300
|
+
* Résout la couleur de l'indicateur (prédéfinie ou custom)
|
|
7301
|
+
*/
|
|
7302
|
+
resolveIndicatorColor(): string;
|
|
7303
|
+
/**
|
|
7304
|
+
* Gère le clic sur l'élément
|
|
7305
|
+
*/
|
|
7306
|
+
handleClick(event: MouseEvent | KeyboardEvent): void;
|
|
7307
|
+
/**
|
|
7308
|
+
* Gère le changement de la checkbox
|
|
7309
|
+
*/
|
|
7310
|
+
handleCheckedChange(checked: boolean): void;
|
|
7311
|
+
/**
|
|
7312
|
+
* Gère les événements clavier
|
|
7313
|
+
*/
|
|
7314
|
+
handleKeyDown(event: KeyboardEvent): void;
|
|
7315
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsListItem, never>;
|
|
7316
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsListItem, "ds-list-item", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "indicator": { "alias": "indicator"; "required": false; "isSignal": true; }; "indicatorColor": { "alias": "indicatorColor"; "required": false; "isSignal": true; }; "checkable": { "alias": "checkable"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "completed": { "alias": "completed"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; "clicked": "clicked"; }, never, ["[inline]", "[meta]", "[actions]"], true, never>;
|
|
7317
|
+
}
|
|
7318
|
+
|
|
7319
|
+
/**
|
|
7320
|
+
* Variantes visuelles disponibles pour DsList
|
|
7321
|
+
* - default: liste simple sans séparateurs
|
|
7322
|
+
* - divided: liste avec séparateurs entre les items
|
|
7323
|
+
* - card: liste dans un conteneur card avec bordure
|
|
7324
|
+
*/
|
|
7325
|
+
type ListVariant = 'default' | 'divided' | 'card';
|
|
7326
|
+
/**
|
|
7327
|
+
* Tailles disponibles pour DsList
|
|
7328
|
+
*/
|
|
7329
|
+
type ListSize = 'sm' | 'md' | 'lg';
|
|
7330
|
+
/**
|
|
7331
|
+
* Événement émis lors d'un drag & drop
|
|
7332
|
+
*/
|
|
7333
|
+
interface ListDragEvent<T = unknown> {
|
|
7334
|
+
/** L'élément déplacé */
|
|
7335
|
+
item: T;
|
|
7336
|
+
/** Index avant le déplacement */
|
|
7337
|
+
previousIndex: number;
|
|
7338
|
+
/** Index après le déplacement */
|
|
7339
|
+
currentIndex: number;
|
|
7340
|
+
}
|
|
7341
|
+
/**
|
|
7342
|
+
* Événement émis lors d'un changement de sélection
|
|
7343
|
+
*/
|
|
7344
|
+
interface ListSelectionChangeEvent<T = unknown> {
|
|
7345
|
+
/** Éléments sélectionnés */
|
|
7346
|
+
selected: T[];
|
|
7347
|
+
}
|
|
7348
|
+
/**
|
|
7349
|
+
* Configuration de l'état vide
|
|
7350
|
+
*/
|
|
7351
|
+
interface ListEmptyConfig {
|
|
7352
|
+
/** Titre affiché */
|
|
7353
|
+
title: string;
|
|
7354
|
+
/** Description optionnelle */
|
|
7355
|
+
description?: string;
|
|
7356
|
+
/** Icône optionnelle */
|
|
7357
|
+
icon?: IconDefinition;
|
|
7358
|
+
}
|
|
7359
|
+
|
|
7360
|
+
/**
|
|
7361
|
+
* # DsList
|
|
7362
|
+
*
|
|
7363
|
+
* Composant conteneur pour afficher une liste d'éléments avec support pour :
|
|
7364
|
+
* - État de chargement (skeletons)
|
|
7365
|
+
* - État vide
|
|
7366
|
+
* - Drag & Drop (via CDK)
|
|
7367
|
+
* - Virtualisation (via CDK)
|
|
7368
|
+
* - Sélection multiple
|
|
7369
|
+
*
|
|
7370
|
+
* ## Usage
|
|
7371
|
+
*
|
|
7372
|
+
* ```html
|
|
7373
|
+
* <!-- Basique -->
|
|
7374
|
+
* <ds-list>
|
|
7375
|
+
* <ds-list-item title="Item 1" />
|
|
7376
|
+
* <ds-list-item title="Item 2" />
|
|
7377
|
+
* </ds-list>
|
|
7378
|
+
*
|
|
7379
|
+
* <!-- Avec loading et empty -->
|
|
7380
|
+
* <ds-list
|
|
7381
|
+
* [loading]="isLoading()"
|
|
7382
|
+
* [empty]="items().length === 0"
|
|
7383
|
+
* emptyTitle="Aucun élément"
|
|
7384
|
+
* >
|
|
7385
|
+
* @for (item of items(); track item.id) {
|
|
7386
|
+
* <ds-list-item [title]="item.title" />
|
|
7387
|
+
* }
|
|
7388
|
+
* </ds-list>
|
|
7389
|
+
*
|
|
7390
|
+
* <!-- Avec Drag & Drop -->
|
|
7391
|
+
* <ds-list [draggable]="true" [dragData]="items()" (dropped)="onReorder($event)">
|
|
7392
|
+
* @for (item of items(); track item.id) {
|
|
7393
|
+
* <ds-list-item [title]="item.title" cdkDrag />
|
|
7394
|
+
* }
|
|
7395
|
+
* </ds-list>
|
|
7396
|
+
* ```
|
|
7397
|
+
*/
|
|
7398
|
+
declare class DsList<T = unknown> {
|
|
7399
|
+
/**
|
|
7400
|
+
* Variante visuelle de la liste
|
|
7401
|
+
* @default 'default'
|
|
7402
|
+
*/
|
|
7403
|
+
readonly variant: _angular_core.InputSignal<ListVariant>;
|
|
7404
|
+
/**
|
|
7405
|
+
* Taille de la liste (affecte les skeletons)
|
|
7406
|
+
* @default 'md'
|
|
7407
|
+
*/
|
|
7408
|
+
readonly size: _angular_core.InputSignal<ListSize>;
|
|
7409
|
+
/**
|
|
7410
|
+
* Affiche les skeletons de chargement
|
|
7411
|
+
* @default false
|
|
7412
|
+
*/
|
|
7413
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
7414
|
+
/**
|
|
7415
|
+
* Nombre de skeletons à afficher
|
|
7416
|
+
* @default 3
|
|
7417
|
+
*/
|
|
7418
|
+
readonly loadingCount: _angular_core.InputSignal<number>;
|
|
7419
|
+
/**
|
|
7420
|
+
* Affiche l'état vide
|
|
7421
|
+
* @default false
|
|
7422
|
+
*/
|
|
7423
|
+
readonly empty: _angular_core.InputSignal<boolean>;
|
|
7424
|
+
/**
|
|
7425
|
+
* Titre de l'état vide
|
|
7426
|
+
* @default 'Aucun élément'
|
|
7427
|
+
*/
|
|
7428
|
+
readonly emptyTitle: _angular_core.InputSignal<string>;
|
|
7429
|
+
/**
|
|
7430
|
+
* Description de l'état vide
|
|
7431
|
+
*/
|
|
7432
|
+
readonly emptyDescription: _angular_core.InputSignal<string | undefined>;
|
|
7433
|
+
/**
|
|
7434
|
+
* Active le mode Drag & Drop
|
|
7435
|
+
* @default false
|
|
7436
|
+
*/
|
|
7437
|
+
readonly draggable: _angular_core.InputSignal<boolean>;
|
|
7438
|
+
/**
|
|
7439
|
+
* Désactive le Drag & Drop (tout en gardant le mode actif)
|
|
7440
|
+
* @default false
|
|
7441
|
+
*/
|
|
7442
|
+
readonly dragDisabled: _angular_core.InputSignal<boolean>;
|
|
7443
|
+
/**
|
|
7444
|
+
* Données pour le Drag & Drop
|
|
7445
|
+
*/
|
|
7446
|
+
readonly dragData: _angular_core.InputSignal<T[]>;
|
|
7447
|
+
/**
|
|
7448
|
+
* Émis lors d'un drop
|
|
7449
|
+
*/
|
|
7450
|
+
readonly dropped: _angular_core.OutputEmitterRef<ListDragEvent<T>>;
|
|
7451
|
+
/**
|
|
7452
|
+
* Active le mode virtualisé pour les longues listes
|
|
7453
|
+
* @default false
|
|
7454
|
+
*/
|
|
7455
|
+
readonly virtual: _angular_core.InputSignal<boolean>;
|
|
7456
|
+
/**
|
|
7457
|
+
* Hauteur d'un item en pixels (pour la virtualisation)
|
|
7458
|
+
* @default 40
|
|
7459
|
+
*/
|
|
7460
|
+
readonly itemSize: _angular_core.InputSignal<number>;
|
|
7461
|
+
/**
|
|
7462
|
+
* Hauteur du viewport en pixels (pour la virtualisation)
|
|
7463
|
+
* @default 400
|
|
7464
|
+
*/
|
|
7465
|
+
readonly viewportHeight: _angular_core.InputSignal<number>;
|
|
7466
|
+
/**
|
|
7467
|
+
* Active la sélection multiple
|
|
7468
|
+
* @default false
|
|
7469
|
+
*/
|
|
7470
|
+
readonly selectable: _angular_core.InputSignal<boolean>;
|
|
7471
|
+
/**
|
|
7472
|
+
* Items sélectionnés
|
|
7473
|
+
*/
|
|
7474
|
+
readonly selectedItems: _angular_core.InputSignal<T[]>;
|
|
7475
|
+
/**
|
|
7476
|
+
* Émis lors d'un changement de sélection
|
|
7477
|
+
*/
|
|
7478
|
+
readonly selectionChange: _angular_core.OutputEmitterRef<ListSelectionChangeEvent<T>>;
|
|
7479
|
+
/**
|
|
7480
|
+
* Classes CSS calculées
|
|
7481
|
+
*/
|
|
7482
|
+
readonly listClasses: _angular_core.Signal<string>;
|
|
7483
|
+
/**
|
|
7484
|
+
* Tableau pour générer les skeletons
|
|
7485
|
+
*/
|
|
7486
|
+
readonly skeletonArray: _angular_core.Signal<number[]>;
|
|
7487
|
+
/**
|
|
7488
|
+
* Taille du skeleton basée sur la taille de la liste
|
|
7489
|
+
*/
|
|
7490
|
+
readonly skeletonSize: _angular_core.Signal<"sm" | "md" | "lg">;
|
|
7491
|
+
/**
|
|
7492
|
+
* Style du viewport pour la virtualisation
|
|
7493
|
+
*/
|
|
7494
|
+
readonly viewportStyle: _angular_core.Signal<{
|
|
7495
|
+
height: string;
|
|
7496
|
+
}>;
|
|
7497
|
+
/**
|
|
7498
|
+
* Gère l'événement drop du CDK
|
|
7499
|
+
*/
|
|
7500
|
+
onDrop(event: CdkDragDrop<T[]>): void;
|
|
7501
|
+
/**
|
|
7502
|
+
* Toggle la sélection d'un item
|
|
7503
|
+
*/
|
|
7504
|
+
toggleSelection(item: T): void;
|
|
7505
|
+
/**
|
|
7506
|
+
* Vérifie si un item est sélectionné
|
|
7507
|
+
*/
|
|
7508
|
+
isSelected(item: T): boolean;
|
|
7509
|
+
/**
|
|
7510
|
+
* Sélectionne tous les items
|
|
7511
|
+
*/
|
|
7512
|
+
selectAll(): void;
|
|
7513
|
+
/**
|
|
7514
|
+
* Désélectionne tous les items
|
|
7515
|
+
*/
|
|
7516
|
+
clearSelection(): void;
|
|
7517
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsList<any>, never>;
|
|
7518
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsList<any>, "ds-list", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingCount": { "alias": "loadingCount"; "required": false; "isSignal": true; }; "empty": { "alias": "empty"; "required": false; "isSignal": true; }; "emptyTitle": { "alias": "emptyTitle"; "required": false; "isSignal": true; }; "emptyDescription": { "alias": "emptyDescription"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "dragDisabled": { "alias": "dragDisabled"; "required": false; "isSignal": true; }; "dragData": { "alias": "dragData"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemSize": { "alias": "itemSize"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "selectedItems": { "alias": "selectedItems"; "required": false; "isSignal": true; }; }, { "dropped": "dropped"; "selectionChange": "selectionChange"; }, never, ["*", "*", "*"], true, never>;
|
|
7519
|
+
}
|
|
7520
|
+
|
|
7521
|
+
/**
|
|
7522
|
+
* Variantes disponibles pour DsListGroup
|
|
7523
|
+
* - default: header simple sans interaction
|
|
7524
|
+
* - collapsible: header cliquable pour expand/collapse
|
|
7525
|
+
*/
|
|
7526
|
+
type ListGroupVariant = 'default' | 'collapsible';
|
|
7527
|
+
/**
|
|
7528
|
+
* Événement émis lors du toggle expand/collapse
|
|
7529
|
+
*/
|
|
7530
|
+
interface ListGroupToggleEvent {
|
|
7531
|
+
/** Nouvel état expanded */
|
|
7532
|
+
expanded: boolean;
|
|
7533
|
+
}
|
|
7534
|
+
|
|
7535
|
+
/**
|
|
7536
|
+
* # DsListGroup
|
|
7537
|
+
*
|
|
7538
|
+
* Composant de regroupement d'éléments de liste avec header et contenu collapsible.
|
|
7539
|
+
* Idéal pour organiser les tâches par date, catégorie ou statut.
|
|
7540
|
+
*
|
|
7541
|
+
* ## Usage
|
|
7542
|
+
*
|
|
7543
|
+
* ```html
|
|
7544
|
+
* <!-- Groupe simple -->
|
|
7545
|
+
* <ds-list-group title="Aujourd'hui">
|
|
7546
|
+
* <ds-list-item title="Tâche 1" />
|
|
7547
|
+
* <ds-list-item title="Tâche 2" />
|
|
7548
|
+
* </ds-list-group>
|
|
7549
|
+
*
|
|
7550
|
+
* <!-- Groupe collapsible avec compteur -->
|
|
7551
|
+
* <ds-list-group
|
|
7552
|
+
* title="Cette semaine"
|
|
7553
|
+
* [count]="5"
|
|
7554
|
+
* variant="collapsible"
|
|
7555
|
+
* [expanded]="true"
|
|
7556
|
+
* >
|
|
7557
|
+
* <ds-list-item title="Tâche 1" />
|
|
7558
|
+
* </ds-list-group>
|
|
7559
|
+
*
|
|
7560
|
+
* <!-- Groupes dans une liste -->
|
|
7561
|
+
* <ds-list>
|
|
7562
|
+
* <ds-list-group title="Haute priorité" [count]="3" variant="collapsible">
|
|
7563
|
+
* ...
|
|
7564
|
+
* </ds-list-group>
|
|
7565
|
+
* <ds-list-group title="Normale" [count]="5" variant="collapsible">
|
|
7566
|
+
* ...
|
|
7567
|
+
* </ds-list-group>
|
|
7568
|
+
* </ds-list>
|
|
7569
|
+
* ```
|
|
7570
|
+
*/
|
|
7571
|
+
declare class DsListGroup {
|
|
7572
|
+
/**
|
|
7573
|
+
* Titre du groupe (requis)
|
|
7574
|
+
*/
|
|
7575
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
7576
|
+
/**
|
|
7577
|
+
* Sous-titre optionnel
|
|
7578
|
+
*/
|
|
7579
|
+
readonly subtitle: _angular_core.InputSignal<string | undefined>;
|
|
7580
|
+
/**
|
|
7581
|
+
* Nombre d'éléments (affiché comme badge)
|
|
7582
|
+
*/
|
|
7583
|
+
readonly count: _angular_core.InputSignal<number | undefined>;
|
|
7584
|
+
/**
|
|
7585
|
+
* Variante du groupe
|
|
7586
|
+
* @default 'default'
|
|
7587
|
+
*/
|
|
7588
|
+
readonly variant: _angular_core.InputSignal<ListGroupVariant>;
|
|
7589
|
+
/**
|
|
7590
|
+
* État expanded (pour variante collapsible)
|
|
7591
|
+
* @default true
|
|
7592
|
+
*/
|
|
7593
|
+
readonly expanded: _angular_core.InputSignal<boolean>;
|
|
7594
|
+
/**
|
|
7595
|
+
* Émis lors du toggle expand/collapse
|
|
7596
|
+
*/
|
|
7597
|
+
readonly expandedChange: _angular_core.OutputEmitterRef<ListGroupToggleEvent>;
|
|
7598
|
+
/**
|
|
7599
|
+
* Header sticky au scroll
|
|
7600
|
+
* @default false
|
|
7601
|
+
*/
|
|
7602
|
+
readonly sticky: _angular_core.InputSignal<boolean>;
|
|
7603
|
+
/**
|
|
7604
|
+
* Icône personnalisée pour le header
|
|
7605
|
+
*/
|
|
7606
|
+
readonly icon: _angular_core.InputSignal<IconDefinition | undefined>;
|
|
7607
|
+
private readonly internalExpanded;
|
|
7608
|
+
readonly faChevronRight: IconDefinition;
|
|
7609
|
+
readonly faChevronDown: IconDefinition;
|
|
7610
|
+
/**
|
|
7611
|
+
* État expanded effectif (interne ou input)
|
|
7612
|
+
*/
|
|
7613
|
+
readonly isExpanded: _angular_core.Signal<boolean>;
|
|
7614
|
+
/**
|
|
7615
|
+
* Est-ce un groupe collapsible ?
|
|
7616
|
+
*/
|
|
7617
|
+
readonly isCollapsible: _angular_core.Signal<boolean>;
|
|
7618
|
+
/**
|
|
7619
|
+
* Classes CSS du conteneur
|
|
7620
|
+
*/
|
|
7621
|
+
readonly groupClasses: _angular_core.Signal<string>;
|
|
7622
|
+
/**
|
|
7623
|
+
* Icône du chevron
|
|
7624
|
+
*/
|
|
7625
|
+
readonly chevronIcon: _angular_core.Signal<IconDefinition>;
|
|
7626
|
+
/**
|
|
7627
|
+
* Afficher le compteur ?
|
|
7628
|
+
*/
|
|
7629
|
+
readonly showCount: _angular_core.Signal<boolean>;
|
|
7630
|
+
/**
|
|
7631
|
+
* Toggle expand/collapse
|
|
7632
|
+
*/
|
|
7633
|
+
toggle(): void;
|
|
7634
|
+
/**
|
|
7635
|
+
* Gère les événements clavier sur le header
|
|
7636
|
+
*/
|
|
7637
|
+
handleKeyDown(event: KeyboardEvent): void;
|
|
7638
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsListGroup, never>;
|
|
7639
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsListGroup, "ds-list-group", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "count": { "alias": "count"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "expandedChange": "expandedChange"; }, never, ["*"], true, never>;
|
|
7640
|
+
}
|
|
7641
|
+
|
|
7642
|
+
/**
|
|
7643
|
+
* Positions standard pour dropdowns (menus déroulants, select, etc.)
|
|
7644
|
+
*
|
|
7645
|
+
* Stratégie :
|
|
7646
|
+
* 1. Position préférée : centré en dessous (offsetY: 6px pour espacement)
|
|
7647
|
+
* 2. Fallback : centré au-dessus si pas d'espace en bas
|
|
7648
|
+
* 3. Fallback : aligné à gauche en dessous
|
|
7649
|
+
* 4. Fallback : aligné à droite en dessous
|
|
7650
|
+
*/
|
|
7651
|
+
declare const DROPDOWN_POSITIONS: ConnectedPosition[];
|
|
7652
|
+
/**
|
|
7653
|
+
* Positions pour dropdowns s'ouvrant vers le haut (utile dans les footers)
|
|
7654
|
+
*
|
|
7655
|
+
* Stratégie :
|
|
7656
|
+
* 1. Position préférée : centré au-dessus
|
|
7657
|
+
* 2. Fallback : centré en dessous si pas d'espace au-dessus
|
|
7658
|
+
* 3. Fallback : aligné à gauche au-dessus
|
|
7659
|
+
* 4. Fallback : aligné à droite au-dessus
|
|
7660
|
+
*/
|
|
7661
|
+
declare const DROPDOWN_POSITIONS_TOP: ConnectedPosition[];
|
|
7662
|
+
/**
|
|
7663
|
+
* Positions pour dropdowns s'ouvrant vers la droite (utile dans les sidebars)
|
|
7664
|
+
*
|
|
7665
|
+
* Stratégie :
|
|
7666
|
+
* 1. Position préférée : à droite, aligné en haut
|
|
7667
|
+
* 2. Fallback : à droite, aligné au centre
|
|
7668
|
+
* 3. Fallback : à gauche si pas d'espace à droite
|
|
7669
|
+
*/
|
|
7670
|
+
declare const DROPDOWN_POSITIONS_RIGHT: ConnectedPosition[];
|
|
7671
|
+
/**
|
|
7672
|
+
* Positions standard pour tooltips (infobulles)
|
|
7673
|
+
*
|
|
7674
|
+
* Stratégie :
|
|
7675
|
+
* 1. Position préférée : centré au-dessus (offsetY: -8px pour espacement)
|
|
7676
|
+
* 2. Fallback : centré en dessous si pas d'espace au-dessus
|
|
7677
|
+
* 3. Fallback : à droite (aligné verticalement au centre)
|
|
7678
|
+
* 4. Fallback : à gauche (aligné verticalement au centre)
|
|
7679
|
+
*/
|
|
7680
|
+
declare const TOOLTIP_POSITIONS: ConnectedPosition[];
|
|
7681
|
+
/**
|
|
7682
|
+
* Positions standard pour popovers (menus contextuels, actions panels)
|
|
7683
|
+
*
|
|
7684
|
+
* Stratégie :
|
|
7685
|
+
* 1. Position préférée : aligné à droite, en dessous (offsetY: 4px)
|
|
7686
|
+
* 2. Fallback : aligné à gauche, en dessous
|
|
7687
|
+
* 3. Fallback : aligné à droite, au-dessus
|
|
7688
|
+
* 4. Fallback : aligné à gauche, au-dessus
|
|
7689
|
+
* 5. Fallback : à droite (aligné en haut)
|
|
7690
|
+
* 6. Fallback : à gauche (aligné en haut)
|
|
7691
|
+
*/
|
|
7692
|
+
declare const POPOVER_POSITIONS: ConnectedPosition[];
|
|
7693
|
+
/**
|
|
7694
|
+
* Positions pour autocomplete (panel de suggestions sous un input)
|
|
7695
|
+
*
|
|
7696
|
+
* Stratégie :
|
|
7697
|
+
* 1. Position préférée : aligné à gauche, pleine largeur, en dessous
|
|
7698
|
+
* 2. Fallback : aligné à gauche, pleine largeur, au-dessus
|
|
7699
|
+
*/
|
|
7700
|
+
declare const AUTOCOMPLETE_POSITIONS: ConnectedPosition[];
|
|
7701
|
+
/**
|
|
7702
|
+
* Positions pour popover sidebar (sidebar à gauche → popover à droite)
|
|
7703
|
+
*
|
|
7704
|
+
* Utilise DROPDOWN_POSITIONS_RIGHT existant.
|
|
7705
|
+
* Alias exporté pour clarté sémantique.
|
|
7706
|
+
*/
|
|
7707
|
+
declare const SIDEBAR_POPOVER_POSITIONS_RIGHT: ConnectedPosition[];
|
|
7708
|
+
/**
|
|
7709
|
+
* Positions pour popover sidebar (sidebar à droite → popover à gauche)
|
|
7710
|
+
*
|
|
7711
|
+
* Stratégie :
|
|
7712
|
+
* 1. Position préférée : à gauche, aligné en haut
|
|
7713
|
+
* 2. Fallback : à gauche, aligné au centre
|
|
7714
|
+
* 3. Fallback : à droite si pas d'espace à gauche
|
|
7715
|
+
*/
|
|
7716
|
+
declare const SIDEBAR_POPOVER_POSITIONS_LEFT: ConnectedPosition[];
|
|
7717
|
+
|
|
7718
|
+
/**
|
|
7719
|
+
* Service centralisé pour l'enregistrement des icônes FontAwesome.
|
|
7720
|
+
*
|
|
7721
|
+
* @description
|
|
7722
|
+
* Permet d'enregistrer des icônes de manière lazy et centralisée, évitant
|
|
7723
|
+
* d'importer toutes les icônes FontAwesome dans chaque composant. Les composants
|
|
7724
|
+
* peuvent utiliser les icônes enregistrées via leur nom plutôt que via l'objet complet.
|
|
7725
|
+
*
|
|
7726
|
+
* @example
|
|
7727
|
+
* ```typescript
|
|
7728
|
+
* // Dans app.config.ts ou main.ts
|
|
7729
|
+
* import { IconRegistryService } from 'ds-angular';
|
|
7730
|
+
* import { faCheck, faTimes, faExclamation } from '@fortawesome/free-solid-svg-icons';
|
|
7731
|
+
*
|
|
7732
|
+
* const iconRegistry = inject(IconRegistryService);
|
|
7733
|
+
* iconRegistry.registerIcons([faCheck, faTimes, faExclamation]);
|
|
7734
|
+
* ```
|
|
7735
|
+
*
|
|
7736
|
+
* @example
|
|
7737
|
+
* ```typescript
|
|
7738
|
+
* // Enregistrement par groupe thématique
|
|
7739
|
+
* import { faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';
|
|
7740
|
+
*
|
|
7741
|
+
* iconRegistry.registerIconGroup('validation', [faCheck, faTimes]);
|
|
7742
|
+
* ```
|
|
7743
|
+
*/
|
|
7744
|
+
declare class IconRegistryService {
|
|
7745
|
+
private library;
|
|
7746
|
+
private registeredIcons;
|
|
7747
|
+
private iconGroups;
|
|
7748
|
+
constructor(library: FaIconLibrary);
|
|
7749
|
+
/**
|
|
7750
|
+
* Enregistre une ou plusieurs icônes FontAwesome dans la bibliothèque globale.
|
|
7751
|
+
*
|
|
7752
|
+
* @param icons - Tableau d'icônes FontAwesome à enregistrer
|
|
7753
|
+
* @returns Le service lui-même pour chaînage
|
|
7754
|
+
*
|
|
7755
|
+
* @example
|
|
7756
|
+
* ```typescript
|
|
7757
|
+
* iconRegistry.registerIcons([faUser, faEnvelope, faPhone]);
|
|
7758
|
+
* ```
|
|
7759
|
+
*/
|
|
7760
|
+
registerIcons(icons: IconDefinition[]): this;
|
|
7761
|
+
/**
|
|
7762
|
+
* Enregistre un groupe d'icônes sous un nom thématique.
|
|
7763
|
+
*
|
|
7764
|
+
* @param groupName - Nom du groupe (ex: 'forms', 'navigation')
|
|
7765
|
+
* @param icons - Tableau d'icônes du groupe
|
|
7766
|
+
* @returns Le service lui-même pour chaînage
|
|
7767
|
+
*
|
|
7768
|
+
* @example
|
|
7769
|
+
* ```typescript
|
|
7770
|
+
* iconRegistry.registerIconGroup('forms', [
|
|
7771
|
+
* faCheck, faTimes, faExclamation, faInfo
|
|
7772
|
+
* ]);
|
|
7773
|
+
* ```
|
|
7774
|
+
*/
|
|
7775
|
+
registerIconGroup(groupName: string, icons: IconDefinition[]): this;
|
|
7776
|
+
/**
|
|
7777
|
+
* Vérifie si une icône est déjà enregistrée.
|
|
7778
|
+
*
|
|
7779
|
+
* @param iconName - Nom de l'icône (format: 'prefix-iconName')
|
|
7780
|
+
* @returns true si l'icône est enregistrée
|
|
7781
|
+
*
|
|
7782
|
+
* @example
|
|
7783
|
+
* ```typescript
|
|
7784
|
+
* if (!iconRegistry.isIconRegistered('fas-check')) {
|
|
7785
|
+
* iconRegistry.registerIcons([faCheck]);
|
|
7786
|
+
* }
|
|
7787
|
+
* ```
|
|
7788
|
+
*/
|
|
7789
|
+
isIconRegistered(iconName: string): boolean;
|
|
7790
|
+
/**
|
|
7791
|
+
* Récupère tous les noms d'icônes enregistrées.
|
|
7792
|
+
*
|
|
7793
|
+
* @returns Tableau des noms d'icônes enregistrées
|
|
7794
|
+
*/
|
|
7795
|
+
getRegisteredIcons(): string[];
|
|
6279
7796
|
/**
|
|
6280
7797
|
* Récupère les icônes d'un groupe thématique.
|
|
6281
7798
|
*
|
|
@@ -6478,5 +7995,20 @@ declare class DsI18nService {
|
|
|
6478
7995
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsI18nService>;
|
|
6479
7996
|
}
|
|
6480
7997
|
|
|
6481
|
-
|
|
6482
|
-
|
|
7998
|
+
/**
|
|
7999
|
+
* Génère un identifiant unique compatible avec tous les environnements.
|
|
8000
|
+
* Utilise crypto.randomUUID() si disponible, sinon génère un UUID v4 manuellement.
|
|
8001
|
+
*
|
|
8002
|
+
* @returns Un identifiant UUID v4 unique
|
|
8003
|
+
*/
|
|
8004
|
+
declare function generateId(): string;
|
|
8005
|
+
/**
|
|
8006
|
+
* Génère un identifiant court (sans tirets) pour les cas où un UUID complet n'est pas nécessaire.
|
|
8007
|
+
*
|
|
8008
|
+
* @param prefix Préfixe optionnel à ajouter à l'identifiant
|
|
8009
|
+
* @returns Un identifiant court unique
|
|
8010
|
+
*/
|
|
8011
|
+
declare function generateShortId(prefix?: string): string;
|
|
8012
|
+
|
|
8013
|
+
export { AUTOCOMPLETE_POSITIONS, DROPDOWN_POSITIONS, DROPDOWN_POSITIONS_RIGHT, DROPDOWN_POSITIONS_TOP, DsAccordion, DsAlert, DsAvatar, DsBadge, DsBreadcrumb, DsButton, DsCalendar, DsCard, DsCarousel, DsCheckbox, DsCheckboxList, DsChip, DsColorPicker, DsCombobox, DsContainer, DsDatePicker, DsDivider, DsDrawer, DsDropdown, DsEmpty, DsFileUpload, DsI18nService, DsInputField, DsInputNumber, DsInputTextarea, DsList, DsListGroup, DsListItem, DsMenu, DsModalComponent, DsNavList, DsNotificationContainerComponent, DsNotificationItemComponent, DsNotificationService, DsPagination, DsPasswordStrength, DsPopover, DsPopoverComponent, DsProgressBar, DsRadioGroup, DsRating, DsSearchInput, DsSegmentedControl, DsSelect, DsSidebar, DsSidebarFooterItemComponent, DsSidebarItemComponent, DsSkeleton, DsSlider, DsStepper, DsTable, DsTabs, DsTimePicker, DsTimeline, DsToastComponent, DsToastContainerComponent, DsToastService, DsToggle, DsTooltip, DsTooltipComponent, DsTransfer, DsTree, IconRegistryService, POPOVER_POSITIONS, PrimitiveBadge, PrimitiveButton, PrimitiveCheckbox, PrimitiveInput, PrimitiveRadio, PrimitiveTextarea, PrimitiveToggle, SIDEBAR_POPOVER_POSITIONS_LEFT, SIDEBAR_POPOVER_POSITIONS_RIGHT, TOOLTIP_POSITIONS, generateId, generateShortId };
|
|
8014
|
+
export type { AccordionChangeEvent, AccordionItem, AccordionSize, AccordionVariant, AlertSize, AlertType, AvatarShape, AvatarSize, BadgeAppearance, BadgeShape, BadgeSize, BadgeType, BadgeVariant, BreadcrumbItem, ButtonAppearance, ButtonSize, ButtonType, ButtonVariant, CalendarEvent, CalendarMode, CalendarSize, CardSize, CardVariant, CarouselDotsPosition, CarouselEffect, CarouselSlide, CheckboxListChangeEvent, CheckboxListItem, CheckboxListItemChangeEvent, CheckboxListSize, CheckboxSize, CheckboxState, ChipColor, ChipSize, ChipVariant, ColorFormat, ColorPickerSize, ContainerGutter, ContainerMaxWidth, DatePickerMode, DatePickerSize, DateRange, DividerLabelPosition, DividerOrientation, DividerSize, DividerVariant, DrawerPosition, DrawerSize, DropdownItem, DropdownItemDTO, DropdownPosition, DsComboboxOption, DsComboboxSize, DsSelectOption, DsSelectSize, DsTableColumn, DsTableSize, DsTableVariant, EmptySize, FileUploadSize, FlattenedSidebarItem, HSLColor, I18nLabels, InputAppearance, InputNumberControlsPosition, InputNumberSize, InputSize, InputState, InputType, ListDragEvent, ListEmptyConfig, ListGroupToggleEvent, ListGroupVariant, ListItemCheckEvent, ListItemClickEvent, ListItemIndicator, ListItemIndicatorColor, ListItemSize, ListSelectionChangeEvent, ListSize, ListVariant, MenuItem, MenuSize, MenuTrigger, NavListBadgeVariant, NavListGroup, NavListGroupToggleEvent, NavListItem, NavListItemClickEvent, NavListSize, NotificationAction, NotificationConfig, NotificationItem, NotificationPlacement, PageChangeEvent, PageSizeOption, PaginationSize, PasswordCriterion, PasswordStrength, PasswordStrengthSize, PopoverTrigger, ProgressBarMode, ProgressBarSize, ProgressBarVariant, RGBColor, RadioGroupLayout, RadioOption, RadioSize, RatingSize, SearchInputSize, SegmentOption, SegmentedControlColor, SegmentedControlOrientation, SegmentedControlSize, SidebarBadgeVariant, SidebarCollapsedTrigger, SidebarItem, SidebarItemClickEvent, SidebarItemExpandEvent, SidebarMode, SidebarPosition, SidebarSize, SkeletonSize, SkeletonVariant, SliderOrientation, SliderSize, SliderValue, SortDirection, SortEvent, Step, StepChangeEvent, StepState, StepperOrientation, StepperSize, SupportedLocale, TabItem, TableState, TextareaAppearance, TextareaResize, TextareaSize, TextareaState, TimeFormat, TimePickerSize, TimeValue, TimelineColor, TimelineItem, TimelineItemClickEvent, TimelineMode, TimelineSize, ToastInstance, ToastOptions, ToastPosition, ToastType, ToggleSize, TransferChangeEvent, TransferDirection, TransferItem, TransferSize, TreeNode, TreeNodeCheckEvent, TreeNodeExpandEvent, TreeNodeSelectEvent, TreeSize, UploadFile };
|