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