@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/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
- readonly overlayPositions: _angular_cdk_overlay.ConnectedPosition[];
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
- private overlay;
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 upIcon: _fortawesome_fontawesome_common_types.IconDefinition;
5087
- readonly downIcon: _fortawesome_fontawesome_common_types.IconDefinition;
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
- constructor(overlay: Overlay);
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
- protected readonly defaultIcon: IconDefinition$1;
5433
- protected readonly pendingIcon: IconDefinition$1;
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
- * Positions standard pour dropdowns (menus déroulants, select, etc.)
6115
- *
6116
- * Stratégie :
6117
- * 1. Position préférée : centré en dessous (offsetY: 6px pour espacement)
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
- declare const DROPDOWN_POSITIONS: ConnectedPosition[];
6441
+ type SidebarMode = 'full' | 'collapsed' | 'overlay';
6123
6442
  /**
6124
- * Positions standard pour tooltips (infobulles)
6125
- *
6126
- * Stratégie :
6127
- * 1. Position préférée : centré au-dessus (offsetY: -8px pour espacement)
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
- declare const TOOLTIP_POSITIONS: ConnectedPosition[];
6448
+ type SidebarSize = 'sm' | 'md' | 'lg';
6133
6449
  /**
6134
- * Positions standard pour popovers (menus contextuels, actions panels)
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
- declare const POPOVER_POSITIONS: ConnectedPosition[];
6452
+ type SidebarPosition = 'left' | 'right';
6145
6453
  /**
6146
- * Positions pour autocomplete (panel de suggestions sous un input)
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
- declare const AUTOCOMPLETE_POSITIONS: ConnectedPosition[];
6153
-
6154
- declare const BUTTON_VARIANT_OPTIONS: readonly ["primary", "secondary", "ghost", "success", "warning", "error", "info"];
6155
- declare const BUTTON_APPEARANCE_OPTIONS: readonly ["solid", "outline"];
6156
- declare const BUTTON_SIZE_OPTIONS: readonly ["sm", "md", "lg"];
6157
- interface ArgTypeOptions {
6158
- includeLoading?: boolean;
6159
- includeBlock?: boolean;
6160
- variantDescription?: string;
6161
- appearanceDescription?: string;
6162
- sizeDescription?: string;
6163
- disabledDescription?: string;
6164
- loadingDescription?: string;
6165
- blockDescription?: string;
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
- declare const buildButtonArgTypes: ({ includeLoading, includeBlock, variantDescription, appearanceDescription, sizeDescription, disabledDescription, loadingDescription, blockDescription, }?: ArgTypeOptions) => ArgTypes<Args>;
6168
- interface ArgOptions {
6169
- includeLoading?: boolean;
6170
- includeBlock?: boolean;
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
- declare const buildButtonArgs: ({ includeLoading, includeBlock }?: ArgOptions) => {
6173
- block?: boolean | undefined;
6174
- loading?: boolean | undefined;
6175
- variant: ButtonVariant;
6176
- appearance: ButtonAppearance;
6177
- size: ButtonSize;
6178
- disabled: boolean;
6179
- };
6180
- interface ButtonBindings {
6181
- variant: string;
6182
- appearance?: string;
6183
- size: string;
6184
- disabled?: string;
6185
- loading?: string;
6186
- block?: string;
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
- * Service centralisé pour l'enregistrement des icônes FontAwesome.
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
- * @description
6205
- * Permet d'enregistrer des icônes de manière lazy et centralisée, évitant
6206
- * d'importer toutes les icônes FontAwesome dans chaque composant. Les composants
6207
- * peuvent utiliser les icônes enregistrées via leur nom plutôt que via l'objet complet.
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
- * @example
6210
- * ```typescript
6211
- * // Dans app.config.ts ou main.ts
6212
- * import { IconRegistryService } from 'ds-angular';
6213
- * import { faCheck, faTimes, faExclamation } from '@fortawesome/free-solid-svg-icons';
6576
+ * Composant de navigation verticale avec support multi-niveaux,
6577
+ * modes responsive et intégration Router Angular.
6214
6578
  *
6215
- * const iconRegistry = inject(IconRegistryService);
6216
- * iconRegistry.registerIcons([faCheck, faTimes, faExclamation]);
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
- export { AUTOCOMPLETE_POSITIONS, BUTTON_APPEARANCE_OPTIONS, BUTTON_SIZE_OPTIONS, BUTTON_VARIANT_OPTIONS, DROPDOWN_POSITIONS, DsAccordion, DsAlert, DsAvatar, DsBadge, DsBreadcrumb, DsButton, DsCalendar, DsCard, DsCarousel, DsCheckbox, DsChip, DsColorPicker, DsCombobox, DsContainer, DsDatePicker, DsDivider, DsDrawer, DsDropdown, DsEmpty, DsFileUpload, DsI18nService, DsInputField, DsInputNumber, DsInputTextarea, DsMenu, DsModalComponent, DsNotificationContainerComponent, DsNotificationItemComponent, DsNotificationService, DsPagination, DsPasswordStrength, DsPopover, DsPopoverComponent, DsProgressBar, DsRadioGroup, DsRating, DsSearchInput, DsSegmentedControl, DsSelect, 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 };
6482
- 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, CheckboxSize, CheckboxState, ChipColor, ChipSize, ChipVariant, ColorFormat, ColorPickerSize, ContainerGutter, ContainerMaxWidth, DatePickerMode, DatePickerSize, DateRange, DividerLabelPosition, DividerOrientation, DividerSize, DividerVariant, DrawerPosition, DrawerSize, DropdownItem, DropdownItemDTO, DsComboboxOption, DsComboboxSize, DsSelectOption, DsSelectSize, DsTableColumn, DsTableSize, DsTableVariant, EmptySize, FileUploadSize, HSLColor, I18nLabels, InputAppearance, InputNumberControlsPosition, InputNumberSize, InputSize, InputState, InputType, MenuItem, MenuSize, MenuTrigger, NotificationAction, NotificationConfig, NotificationItem, NotificationPlacement, PageChangeEvent, PageSizeOption, PaginationSize, PasswordCriterion, PasswordStrength, PasswordStrengthSize, PopoverTrigger, ProgressBarMode, ProgressBarSize, ProgressBarVariant, RGBColor, RadioGroupLayout, RadioOption, RadioSize, RatingSize, SearchInputSize, SegmentOption, SegmentedControlColor, SegmentedControlOrientation, SegmentedControlSize, 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 };
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 };