@kksdev/ds-angular 1.2.3 → 1.2.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"kksdev-ds-angular.mjs","sources":["../../../projects/ds-angular/src/lib/primitives/primitive-badge/primitive-badge.ts","../../../projects/ds-angular/src/lib/primitives/primitive-badge/primitive-badge.html","../../../projects/ds-angular/src/lib/primitives/primitive-button/primitive-button.ts","../../../projects/ds-angular/src/lib/primitives/primitive-button/primitive-button.html","../../../projects/ds-angular/src/lib/primitives/primitive-checkbox/primitive-checkbox.ts","../../../projects/ds-angular/src/lib/primitives/primitive-checkbox/primitive-checkbox.html","../../../projects/ds-angular/src/lib/primitives/primitive-input/primitive-input.ts","../../../projects/ds-angular/src/lib/primitives/primitive-input/primitive-input.html","../../../projects/ds-angular/src/lib/primitives/primitive-radio/primitive-radio.ts","../../../projects/ds-angular/src/lib/primitives/primitive-radio/primitive-radio.html","../../../projects/ds-angular/src/lib/primitives/primitive-textarea/primitive-textarea.ts","../../../projects/ds-angular/src/lib/primitives/primitive-textarea/primitive-textarea.html","../../../projects/ds-angular/src/lib/primitives/primitive-toggle/primitive-toggle.ts","../../../projects/ds-angular/src/lib/primitives/primitive-toggle/primitive-toggle.html","../../../projects/ds-angular/src/lib/primitives/index.ts","../../../projects/ds-angular/src/lib/components/ds-alert/ds-alert.ts","../../../projects/ds-angular/src/lib/components/ds-alert/ds-alert.html","../../../projects/ds-angular/src/lib/components/ds-badge/ds-badge.ts","../../../projects/ds-angular/src/lib/components/ds-badge/ds-badge.html","../../../projects/ds-angular/src/lib/components/ds-breadcrumb/ds-breadcrumb.ts","../../../projects/ds-angular/src/lib/components/ds-breadcrumb/ds-breadcrumb.html","../../../projects/ds-angular/src/lib/components/ds-button/ds-button.ts","../../../projects/ds-angular/src/lib/components/ds-button/ds-button.html","../../../projects/ds-angular/src/lib/components/ds-card/ds-card.ts","../../../projects/ds-angular/src/lib/components/ds-card/ds-card.html","../../../projects/ds-angular/src/lib/components/ds-checkbox/ds-checkbox.ts","../../../projects/ds-angular/src/lib/components/ds-checkbox/ds-checkbox.html","../../../projects/ds-angular/src/lib/components/ds-divider/ds-divider.ts","../../../projects/ds-angular/src/lib/components/ds-divider/ds-divider.html","../../../projects/ds-angular/src/lib/utils/overlay-positions.ts","../../../projects/ds-angular/src/lib/components/ds-dropdown/ds-dropdown.ts","../../../projects/ds-angular/src/lib/components/ds-dropdown/ds-dropdown.html","../../../projects/ds-angular/src/lib/components/ds-input-field/ds-input-field.ts","../../../projects/ds-angular/src/lib/components/ds-input-field/ds-input-field.html","../../../projects/ds-angular/src/lib/components/ds-input-textarea/ds-input-textarea.ts","../../../projects/ds-angular/src/lib/components/ds-input-textarea/ds-input-textarea.html","../../../projects/ds-angular/src/lib/components/ds-modal/ds-modal.component.ts","../../../projects/ds-angular/src/lib/components/ds-modal/ds-modal.component.html","../../../projects/ds-angular/src/lib/components/ds-popover/ds-popover.component.ts","../../../projects/ds-angular/src/lib/components/ds-popover/ds-popover.directive.ts","../../../projects/ds-angular/src/lib/components/ds-progress-bar/ds-progress-bar.ts","../../../projects/ds-angular/src/lib/components/ds-progress-bar/ds-progress-bar.html","../../../projects/ds-angular/src/lib/components/ds-radio-group/ds-radio-group.ts","../../../projects/ds-angular/src/lib/components/ds-radio-group/ds-radio-group.html","../../../projects/ds-angular/src/lib/components/ds-skeleton/ds-skeleton.ts","../../../projects/ds-angular/src/lib/components/ds-skeleton/ds-skeleton.html","../../../projects/ds-angular/src/lib/components/ds-tabs/ds-tabs.ts","../../../projects/ds-angular/src/lib/components/ds-tabs/ds-tabs.html","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast.component.ts","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast.component.html","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast.service.ts","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast-container.component.ts","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast-container.component.html","../../../projects/ds-angular/src/lib/components/ds-toggle/ds-toggle.ts","../../../projects/ds-angular/src/lib/components/ds-toggle/ds-toggle.html","../../../projects/ds-angular/src/lib/components/ds-tooltip/ds-tooltip.component.ts","../../../projects/ds-angular/src/lib/components/ds-tooltip/ds-tooltip.directive.ts","../../../projects/ds-angular/src/lib/components/ds-accordion/ds-accordion.ts","../../../projects/ds-angular/src/lib/components/ds-accordion/ds-accordion.html","../../../projects/ds-angular/src/lib/components/ds-pagination/ds-pagination.ts","../../../projects/ds-angular/src/lib/components/ds-pagination/ds-pagination.html","../../../projects/ds-angular/src/lib/components/ds-stepper/ds-stepper.ts","../../../projects/ds-angular/src/lib/components/ds-stepper/ds-stepper.html","../../../projects/ds-angular/src/lib/components/ds-select/ds-select.ts","../../../projects/ds-angular/src/lib/components/ds-select/ds-select.html","../../../projects/ds-angular/src/lib/components/ds-table/ds-table.ts","../../../projects/ds-angular/src/lib/components/ds-table/ds-table.html","../../../projects/ds-angular/src/lib/components/ds-combobox/ds-combobox.ts","../../../projects/ds-angular/src/lib/components/ds-combobox/ds-combobox.html","../../../projects/ds-angular/src/lib/components/ds-container/ds-container.ts","../../../projects/ds-angular/src/lib/components/ds-search-input/ds-search-input.ts","../../../projects/ds-angular/src/lib/components/ds-date-picker/ds-date-picker.ts","../../../projects/ds-angular/src/lib/components/ds-avatar/ds-avatar.ts","../../../projects/ds-angular/src/lib/components/ds-avatar/ds-avatar.html","../../../projects/ds-angular/src/lib/components/ds-menu/ds-menu.ts","../../../projects/ds-angular/src/lib/components/ds-menu/ds-menu.html","../../../projects/ds-angular/src/lib/components/index.ts","../../../projects/ds-angular/src/lib/utils/storybook-controls.ts","../../../projects/ds-angular/src/lib/utils/icon-registry.service.ts","../../../projects/ds-angular/src/lib/utils/i18n.service.ts","../../../projects/ds-angular/src/lib/utils/index.ts","../../../projects/ds-angular/src/public-api.ts","../../../projects/ds-angular/src/kksdev-ds-angular.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type BadgeType = 'status' | 'count' | 'label';\nexport type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'neutral' | 'default' | 'accent';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\nexport type BadgeShape = 'rounded' | 'pill';\nexport type BadgeAppearance = 'solid' | 'outline';\n\n/**\n * Composant badge primitif sans logique métier.\n *\n * @description\n * Badge atomique stylisé par CSS custom properties. Petit élément visuel utilisé pour\n * afficher des statuts, des compteurs ou des labels. Supporte plusieurs variantes de\n * couleur, tailles, formes (arrondi ou pill), apparences (solid ou outline) et peut\n * afficher des icônes FontAwesome. Permet également des styles personnalisés.\n *\n * @example\n * ```html\n * <primitive-badge variant=\"success\">\n * Actif\n * </primitive-badge>\n * ```\n *\n * @example\n * ```html\n * <primitive-badge\n * variant=\"error\"\n * shape=\"pill\"\n * appearance=\"outline\"\n * [iconStart]=\"faExclamation\">\n * Urgent\n * </primitive-badge>\n * ```\n */\n@Component({\n selector: 'primitive-badge',\n imports: [CommonModule, FaIconComponent],\n templateUrl: './primitive-badge.html',\n styleUrl: './primitive-badge.scss',\n})\nexport class PrimitiveBadge {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Type sémantique du badge.\n *\n * @description\n * Définit l'intention d'usage du badge. Le type est exposé via l'attribut `data-type`\n * pour permettre un ciblage CSS spécifique selon le contexte d'utilisation.\n *\n * Types disponibles :\n * - `label` : badge de libellé générique (par défaut)\n * - `status` : indicateur d'état (actif, inactif, etc.)\n * - `count` : compteur numérique (notifications, messages, etc.)\n *\n * @default 'label'\n *\n * @example\n * ```html\n * <primitive-badge type=\"count\">5</primitive-badge>\n * <primitive-badge type=\"status\">En ligne</primitive-badge>\n * ```\n */\n type = input<BadgeType>('label');\n\n /**\n * Variante visuelle du badge.\n *\n * @description\n * Définit la couleur et le style sémantique du badge. Chaque variante applique\n * une classe CSS qui utilise les tokens de couleur correspondants.\n *\n * Variantes disponibles :\n * - `primary` : couleur principale (par défaut)\n * - `secondary` : couleur secondaire\n * - `success` : succès, validation (vert)\n * - `warning` : avertissement (orange)\n * - `error` : erreur, danger (rouge)\n * - `info` : information (bleu)\n * - `neutral` : neutre (gris)\n * - `default` : style par défaut\n * - `accent` : couleur d'accent\n *\n * @default 'primary'\n *\n * @example\n * ```html\n * <primitive-badge variant=\"success\">Validé</primitive-badge>\n * ```\n */\n variant = input<BadgeVariant>('primary');\n\n /**\n * Taille du badge.\n *\n * @description\n * Contrôle la hauteur, le padding et la taille de police du badge via les tokens\n * CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit\n * - `md` : moyen (par défaut)\n * - `lg` : grand\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-badge size=\"sm\">Petit</primitive-badge>\n * ```\n */\n size = input<BadgeSize>('md');\n\n /**\n * Forme du badge.\n *\n * @description\n * Définit le degré d'arrondi des coins du badge.\n *\n * Formes disponibles :\n * - `rounded` : coins légèrement arrondis (par défaut)\n * - `pill` : coins complètement arrondis (forme capsule)\n *\n * @default 'rounded'\n *\n * @example\n * ```html\n * <primitive-badge shape=\"pill\">99+</primitive-badge>\n * ```\n */\n shape = input<BadgeShape>('rounded');\n\n /**\n * Apparence visuelle du badge.\n *\n * @description\n * Contrôle le style de remplissage du badge :\n * - `solid` : fond plein avec couleur de variante (par défaut)\n * - `outline` : fond transparent avec bordure colorée\n *\n * @default 'solid'\n *\n * @example\n * ```html\n * <primitive-badge appearance=\"outline\">Outline</primitive-badge>\n * ```\n */\n appearance = input<BadgeAppearance>('solid');\n\n /**\n * Icône FontAwesome affichée avant le texte du badge.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n * Couramment utilisée pour les badges de statut ou d'alerte.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faCheck } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-badge [iconStart]=\"faCheck\">Validé</primitive-badge>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le texte du badge.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n * Utile pour les badges avec action ou indication directionnelle.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faTimes } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-badge [iconEnd]=\"faTimes\">Fermer</primitive-badge>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Styles CSS personnalisés appliqués au badge.\n *\n * @description\n * Objet de paires clé-valeur de propriétés CSS permettant de surcharger les styles\n * par défaut. Utile pour des couleurs de marque spécifiques ou des styles non couverts\n * par les variantes standards. Appliqué via `[ngStyle]` sur le span interne.\n *\n * @default null\n *\n * @example\n * ```html\n * <primitive-badge [customStyles]=\"{\n * backgroundColor: '#ff6b6b',\n * borderColor: '#ff6b6b',\n * color: '#fff'\n * }\">\n * Custom\n * </primitive-badge>\n * ```\n */\n customStyles = input<Record<string, string> | null>(null);\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du badge.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - La variante (`primary`, `secondary`, `success`, etc.)\n * - La taille (`sm`, `md`, `lg`)\n * - La forme (`rounded`, `pill`)\n * - `outline` si `appearance === 'outline'`\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // variant='success', size='lg', shape='pill', appearance='outline'\n * // → \"success lg pill outline\"\n * ```\n */\n get badgeClasses(): string {\n const classes: string[] = [this.variant(), this.size(), this.shape()];\n if (this.appearance() === 'outline') {\n classes.push('outline');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Retourne les styles personnalisés à appliquer.\n *\n * @description\n * Getter simple qui retourne la valeur de `customStyles()` pour être utilisé\n * avec la directive `[ngStyle]` dans le template.\n *\n * @returns Objet de styles CSS ou `null` si aucun style personnalisé.\n *\n * @example\n * ```typescript\n * const styles = component.styleOverrides;\n * // → { backgroundColor: '#123456', color: '#fff' }\n * ```\n */\n get styleOverrides(): Record<string, string> | null {\n return this.customStyles();\n }\n}\n","<span [ngClass]=\"badgeClasses\" [ngStyle]=\"styleOverrides\" [attr.data-type]=\"type()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</span>\n","import { Component, HostBinding, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'success' | 'warning' | 'error' | 'info';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type ButtonAppearance = 'solid' | 'outline';\n\n/**\n * Composant bouton primitif sans logique métier.\n *\n * @description\n * Bouton atomique stylisé par CSS custom properties. Supporte plusieurs variantes,\n * tailles, apparences et états. Peut afficher des icônes FontAwesome avant/après le texte.\n *\n * @example\n * ```html\n * <primitive-button variant=\"primary\" size=\"md\">\n * Cliquez ici\n * </primitive-button>\n * ```\n *\n * @example\n * ```html\n * <primitive-button\n * variant=\"success\"\n * appearance=\"outline\"\n * [iconStart]=\"faCheck\"\n * (clicked)=\"onSave()\">\n * Enregistrer\n * </primitive-button>\n * ```\n */\n@Component({\n selector: 'primitive-button',\n imports: [CommonModule, FaIconComponent],\n templateUrl: './primitive-button.html',\n styleUrl: './primitive-button.scss',\n})\nexport class PrimitiveButton {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Type HTML du bouton.\n *\n * @description\n * Détermine le comportement natif du bouton dans un formulaire :\n * - `button` : bouton standard sans action de formulaire (par défaut)\n * - `submit` : soumet le formulaire parent\n * - `reset` : réinitialise le formulaire parent\n *\n * @default 'button'\n *\n * @example\n * ```html\n * <primitive-button type=\"submit\">Valider</primitive-button>\n * ```\n */\n type = input<ButtonType>('button');\n\n /**\n * Variante visuelle du bouton.\n *\n * @description\n * Définit la couleur et le style sémantique du bouton. Chaque variante\n * applique une classe CSS qui utilise les tokens de couleur correspondants.\n *\n * Variantes disponibles :\n * - `primary` : action principale (par défaut)\n * - `secondary` : action secondaire\n * - `ghost` : action discrète, fond transparent\n * - `success` : confirmation, succès\n * - `warning` : avertissement, attention\n * - `error` : action destructive, erreur\n * - `info` : information neutre\n *\n * @default 'primary'\n *\n * @example\n * ```html\n * <primitive-button variant=\"error\">Supprimer</primitive-button>\n * ```\n */\n variant = input<ButtonVariant>('primary');\n\n /**\n * Taille du bouton.\n *\n * @description\n * Contrôle la hauteur, le padding et la taille de police du bouton via\n * les tokens `--btn-height-*`, `--btn-padding-*` et `--btn-font-size-*`.\n *\n * Tailles disponibles :\n * - `sm` : petit (32px de hauteur)\n * - `md` : moyen (40px de hauteur, par défaut)\n * - `lg` : grand (48px de hauteur)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-button size=\"lg\">Bouton large</primitive-button>\n * ```\n */\n size = input<ButtonSize>('md');\n\n /**\n * État désactivé du bouton.\n *\n * @description\n * Lorsque `true`, le bouton devient non-cliquable, applique l'attribut HTML\n * `disabled` et affiche les styles visuels d'état désactivé. L'événement\n * `clicked` n'est pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-button [disabled]=\"!isFormValid\">Soumettre</primitive-button>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Icône FontAwesome affichée avant le texte du bouton.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faPlus } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-button [iconStart]=\"faPlus\">Ajouter</primitive-button>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le texte du bouton.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faArrowRight } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-button [iconEnd]=\"faArrowRight\">Suivant</primitive-button>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Apparence visuelle du bouton.\n *\n * @description\n * Contrôle le style de remplissage du bouton :\n * - `solid` : fond plein avec couleur de variante (par défaut)\n * - `outline` : fond transparent avec bordure colorée\n *\n * @default 'solid'\n *\n * @example\n * ```html\n * <primitive-button variant=\"primary\" appearance=\"outline\">\n * Action secondaire\n * </primitive-button>\n * ```\n */\n appearance = input<ButtonAppearance>('solid');\n\n /**\n * Mode pleine largeur.\n *\n * @description\n * Lorsque `true`, le bouton s'étend sur toute la largeur de son conteneur.\n * Applique la classe CSS `.block` au bouton et au composant hôte via `@HostBinding`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-button [block]=\"true\">\n * Bouton pleine largeur\n * </primitive-button>\n * ```\n */\n block = input<boolean>(false);\n\n /**\n * Host binding pour la classe CSS `.block`.\n *\n * @description\n * Lie la classe `.block` au composant hôte (`<primitive-button>`) lorsque\n * la propriété `block()` est `true`. Permet de styliser le conteneur externe.\n *\n * @returns `true` si le mode block est activé, sinon `false`.\n */\n @HostBinding('class.block')\n get hostBlock(): boolean {\n return this.block();\n }\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors d'un clic sur le bouton actif.\n *\n * @description\n * Émis uniquement si le bouton n'est pas désactivé (`disabled = false`).\n * Ne transporte aucune donnée (`void`). Utilisé pour déclencher des actions\n * métier dans le composant parent.\n *\n * @example\n * ```html\n * <primitive-button (clicked)=\"onButtonClick()\">\n * Cliquez-moi\n * </primitive-button>\n * ```\n */\n clicked = output<void>();\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du bouton.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - La variante (`primary`, `secondary`, etc.)\n * - La taille (`sm`, `md`, `lg`)\n * - `outline` si `appearance === 'outline'`\n * - `block` si `block === true`\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // variant='error', size='lg', appearance='outline', block=true\n * // → \"error lg outline block\"\n * ```\n */\n get buttonClasses(): string {\n const classes: string[] = [this.variant(), this.size()];\n if (this.appearance() === 'outline') {\n classes.push('outline');\n }\n if (this.block()) {\n classes.push('block');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Gestionnaire de clic interne.\n *\n * @description\n * Méthode appelée par le template lors d'un clic sur le bouton HTML.\n * Vérifie l'état `disabled()` avant d'émettre l'événement `clicked`.\n *\n * @internal\n */\n handleClick(): void {\n if (!this.disabled()) {\n this.clicked.emit();\n }\n }\n}\n","<button\n [type]=\"type()\"\n [class]=\"buttonClasses\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</button>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n computed,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\nexport type CheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Composant checkbox primitif sans logique métier.\n *\n * @description\n * Case à cocher atomique stylisée par CSS custom properties. Supporte trois états\n * (non coché, coché, indéterminé), plusieurs tailles et un label optionnel.\n * Utilise `model()` pour le binding bidirectionnel de l'état coché.\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [(checked)]=\"isAccepted\"\n * label=\"J'accepte les conditions\">\n * </primitive-checkbox>\n * ```\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [checked]=\"selectAll\"\n * [indeterminate]=\"isPartialSelection\"\n * size=\"lg\"\n * (checkedChange)=\"onSelectionChange($event)\">\n * </primitive-checkbox>\n * ```\n */\n@Component({\n selector: 'primitive-checkbox',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './primitive-checkbox.html',\n styleUrl: './primitive-checkbox.scss',\n})\nexport class PrimitiveCheckbox {\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * État coché de la checkbox avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.\n * L'état est mis à jour automatiquement lors du clic utilisateur.\n *\n * @default false\n *\n * @example\n * ```typescript\n * isAccepted = signal(false);\n * ```\n * ```html\n * <primitive-checkbox [(checked)]=\"isAccepted\"></primitive-checkbox>\n * <p>Accepté : {{ isAccepted() }}</p>\n * ```\n */\n checked = model<boolean>(false);\n\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * État indéterminé de la checkbox.\n *\n * @description\n * Lorsque `true`, affiche l'icône d'état indéterminé (tiret horizontal).\n * L'état indéterminé est prioritaire sur l'état `checked` et est couramment\n * utilisé dans les sélections partielles (ex: sélection de sous-éléments).\n * L'attribut ARIA `aria-checked` prend la valeur `\"indeterminate\"`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [checked]=\"someItemsSelected\"\n * [indeterminate]=\"!allItemsSelected && someItemsSelected\"\n * label=\"Tout sélectionner\">\n * </primitive-checkbox>\n * ```\n */\n indeterminate = input<boolean>(false);\n\n /**\n * État désactivé de la checkbox.\n *\n * @description\n * Lorsque `true`, la checkbox devient non-cliquable, applique les styles visuels\n * d'état désactivé et définit `tabindex=\"-1\"` et `aria-disabled=\"true\"`.\n * Les événements ne sont pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-checkbox [disabled]=\"!canEdit\" label=\"Option verrouillée\"></primitive-checkbox>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille de la checkbox.\n *\n * @description\n * Contrôle la taille du carré de la checkbox et la taille de police du label via\n * les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit (16px)\n * - `md` : moyen (20px, par défaut)\n * - `lg` : grand (24px)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-checkbox size=\"lg\" label=\"Grande checkbox\"></primitive-checkbox>\n * ```\n */\n size = input<CheckboxSize>('md');\n\n /**\n * Texte du label affiché à côté de la checkbox.\n *\n * @description\n * Si fourni, affiche un label cliquable associé à la checkbox.\n * Le label est lié à la checkbox via `aria-labelledby` pour l'accessibilité.\n * Le clic sur le label déclenche le toggle de la checkbox.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-checkbox label=\"J'accepte les conditions générales\"></primitive-checkbox>\n * ```\n */\n label = input<string>('');\n\n /**\n * Identifiant unique de la checkbox pour l'accessibilité.\n *\n * @description\n * Utilisé pour générer les IDs des éléments internes (label) et pour l'association\n * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.\n *\n * @default `checkbox-${random}`\n *\n * @example\n * ```html\n * <primitive-checkbox checkboxId=\"accept-terms\" label=\"Accepter\"></primitive-checkbox>\n * ```\n */\n checkboxId = input<string>(`checkbox-${Math.random().toString(36).slice(2, 11)}`);\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors du changement d'état de la checkbox.\n *\n * @description\n * Émis uniquement si la checkbox n'est pas désactivée (`disabled = false`).\n * Transporte la nouvelle valeur booléenne de l'état coché.\n * Ne s'active pas lorsque l'état change via le binding `[(checked)]` depuis le parent.\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [(checked)]=\"isAccepted\"\n * (checkedChange)=\"onAcceptChange($event)\">\n * </primitive-checkbox>\n * ```\n * ```typescript\n * onAcceptChange(checked: boolean) {\n * console.log('Nouvelle valeur :', checked);\n * }\n * ```\n */\n checkedChange = output<boolean>();\n\n // === SIGNAUX INTERNES ===\n\n /**\n * Signal interne de l'état focus de la checkbox.\n *\n * @description\n * Signal utilisé en interne pour suivre l'état focus de la checkbox.\n * Applique la classe CSS `primitive-checkbox--focused` lorsque `true`.\n *\n * @internal\n */\n protected focused = signal<boolean>(false);\n\n /**\n * Signal calculé de l'état de la checkbox.\n *\n * @description\n * Calcule l'état actuel de la checkbox en fonction de `indeterminate()` et `checked()`.\n * L'état `indeterminate` est prioritaire sur `checked`.\n *\n * @returns État de la checkbox : `'unchecked'`, `'checked'` ou `'indeterminate'`.\n *\n * @internal\n */\n protected checkboxState = computed<CheckboxState>(() => {\n if (this.indeterminate()) return 'indeterminate';\n return this.checked() ? 'checked' : 'unchecked';\n });\n\n /**\n * Signal calculé des classes CSS de la checkbox.\n *\n * @description\n * Génère dynamiquement un objet de classes CSS en fonction des propriétés :\n * - Classe de base : `primitive-checkbox`\n * - Classe de taille : `primitive-checkbox--{size}`\n * - Classe d'état coché : `primitive-checkbox--checked`\n * - Classe d'état indéterminé : `primitive-checkbox--indeterminate`\n * - Classe d'état désactivé : `primitive-checkbox--disabled`\n * - Classe d'état focus : `primitive-checkbox--focused`\n *\n * @returns Objet de classes CSS avec valeurs booléennes.\n *\n * @internal\n */\n protected cssClasses = computed(() => ({\n 'primitive-checkbox': true,\n [`primitive-checkbox--${this.size()}`]: true,\n 'primitive-checkbox--checked': this.checked(),\n 'primitive-checkbox--indeterminate': this.indeterminate(),\n 'primitive-checkbox--disabled': this.disabled(),\n 'primitive-checkbox--focused': this.focused(),\n }));\n\n // === MÉTHODES INTERNES ===\n\n /**\n * Gestionnaire de toggle interne.\n *\n * @description\n * Méthode appelée par le template lors du clic sur la checkbox ou son label.\n * Inverse l'état `checked` et émet l'événement `checkedChange`.\n * Ne fait rien si la checkbox est désactivée.\n *\n * @internal\n */\n protected onToggle(): void {\n if (this.disabled()) return;\n\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.checkedChange.emit(newValue);\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque la checkbox reçoit le focus.\n * Met à jour le signal interne `focused` à `true`.\n *\n * @internal\n */\n protected onFocus(): void {\n this.focused.set(true);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque la checkbox perd le focus.\n * Met à jour le signal interne `focused` à `false`.\n *\n * @internal\n */\n protected onBlur(): void {\n this.focused.set(false);\n }\n\n /**\n * Gestionnaire de l'événement keydown natif.\n *\n * @description\n * Méthode appelée par le template lors de la pression d'une touche clavier.\n * Déclenche le toggle sur les touches `Space` ou `Enter` et empêche le comportement\n * par défaut (scroll de la page sur Space).\n *\n * @param event - Événement clavier natif.\n *\n * @internal\n */\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onToggle();\n }\n }\n}\n","<div\n [ngClass]=\"cssClasses()\"\n (click)=\"onToggle()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.role]=\"'checkbox'\"\n [attr.aria-checked]=\"checkboxState()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"label() ? checkboxId() + '-label' : null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n>\n <div class=\"primitive-checkbox__box\">\n @if (checkboxState() === 'checked') {\n <svg\n class=\"primitive-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.5 4L6 11.5L2.5 8\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n @if (checkboxState() === 'indeterminate') {\n <svg\n class=\"primitive-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 8H12\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n }\n </div>\n @if (label()) {\n <label\n [id]=\"checkboxId() + '-label'\"\n class=\"primitive-checkbox__label\"\n [class.primitive-checkbox__label--disabled]=\"disabled()\"\n >\n {{ label() }}\n </label>\n }\n</div>\n","import { Component, input, output, model } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url' | 'search' | 'date';\nexport type InputState = 'default' | 'success' | 'warning' | 'error';\nexport type InputSize = 'sm' | 'md' | 'lg';\nexport type InputAppearance = 'default' | 'outline' | 'ghost';\n\n/**\n * Composant input primitif sans logique métier.\n *\n * @description\n * Champ de saisie atomique stylisé par CSS custom properties. Supporte plusieurs types HTML5,\n * états visuels, tailles et apparences. Peut afficher des icônes FontAwesome avant/après le champ.\n * Utilise `model()` pour le binding bidirectionnel de la valeur.\n *\n * @example\n * ```html\n * <primitive-input\n * type=\"text\"\n * placeholder=\"Entrez votre nom\"\n * [(value)]=\"username\">\n * </primitive-input>\n * ```\n *\n * @example\n * ```html\n * <primitive-input\n * type=\"email\"\n * state=\"error\"\n * [iconStart]=\"faEnvelope\"\n * placeholder=\"email@example.com\"\n * (inputChanged)=\"onEmailChange($event)\">\n * </primitive-input>\n * ```\n */\n@Component({\n selector: 'primitive-input',\n imports: [CommonModule, FormsModule, FaIconComponent],\n templateUrl: './primitive-input.html',\n styleUrl: './primitive-input.scss',\n})\nexport class PrimitiveInput {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Identifiant HTML unique du champ.\n *\n * @description\n * Attribut `id` natif du champ `<input>`. Utile pour lier un `<label>` au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <label for=\"username-input\">Nom d'utilisateur</label>\n * <primitive-input id=\"username-input\"></primitive-input>\n * ```\n */\n id = input<string | undefined>(undefined);\n\n /**\n * Nom du champ pour les formulaires HTML.\n *\n * @description\n * Attribut `name` natif utilisé lors de la soumission d'un formulaire.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input name=\"email\"></primitive-input>\n * ```\n */\n name = input<string | undefined>(undefined);\n\n /**\n * Valeur d'autocomplétion HTML5.\n *\n * @description\n * Attribut `autocomplete` natif pour activer/désactiver l'autocomplétion du navigateur.\n * Valeurs courantes : `email`, `username`, `current-password`, `new-password`, `tel`, etc.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input type=\"email\" autocomplete=\"email\"></primitive-input>\n * ```\n */\n autocomplete = input<string | undefined>(undefined);\n\n /**\n * Texte d'indication affiché lorsque le champ est vide.\n *\n * @description\n * Attribut `placeholder` natif. Disparaît dès que l'utilisateur commence à saisir.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-input placeholder=\"jean.dupont@example.com\"></primitive-input>\n * ```\n */\n placeholder = input<string>('');\n\n /**\n * Type HTML5 du champ de saisie.\n *\n * @description\n * Détermine le type de clavier affiché sur mobile et les validations natives du navigateur.\n *\n * Types disponibles :\n * - `text` : texte libre (par défaut)\n * - `password` : masque les caractères saisis\n * - `email` : clavier avec @ et validation email\n * - `number` : clavier numérique\n * - `tel` : clavier téléphonique\n * - `url` : clavier avec .com et validation URL\n * - `search` : champ de recherche avec icône × de nettoyage\n * - `date` : sélecteur de date natif\n *\n * @default 'text'\n *\n * @example\n * ```html\n * <primitive-input type=\"password\"></primitive-input>\n * ```\n */\n type = input<InputType>('text');\n\n /**\n * État désactivé du champ.\n *\n * @description\n * Lorsque `true`, le champ devient non-éditable, applique l'attribut HTML `disabled`\n * et affiche les styles visuels d'état désactivé. Les événements ne sont pas émis.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-input [disabled]=\"!canEdit\"></primitive-input>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * État lecture seule du champ.\n *\n * @description\n * Lorsque `true`, le champ est visible et sélectionnable mais non-éditable.\n * Applique l'attribut HTML `readonly` et la classe CSS `.readonly`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-input [readonly]=\"true\" value=\"Valeur fixe\"></primitive-input>\n * ```\n */\n readonly = input<boolean>(false);\n\n /**\n * Champ obligatoire pour la validation HTML5.\n *\n * @description\n * Lorsque `true`, applique l'attribut HTML `required`. Le navigateur empêchera\n * la soumission du formulaire parent si le champ est vide.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-input [required]=\"true\" placeholder=\"Email requis\"></primitive-input>\n * ```\n */\n required = input<boolean>(false);\n\n /**\n * Longueur maximale autorisée en nombre de caractères.\n *\n * @description\n * Attribut `maxlength` natif. Le navigateur empêche la saisie au-delà de cette limite.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input [maxlength]=\"50\" placeholder=\"Max 50 caractères\"></primitive-input>\n * ```\n */\n maxlength = input<number | undefined>(undefined);\n\n /**\n * État visuel du champ (feedback utilisateur).\n *\n * @description\n * Applique une couleur de bordure et une classe CSS selon l'état de validation ou le contexte.\n *\n * États disponibles :\n * - `default` : état neutre (par défaut)\n * - `success` : validation réussie, bordure verte\n * - `warning` : avertissement, bordure orange\n * - `error` : erreur de validation, bordure rouge\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-input [state]=\"isValid ? 'success' : 'error'\"></primitive-input>\n * ```\n */\n state = input<InputState>('default');\n\n /**\n * Taille du champ.\n *\n * @description\n * Contrôle la hauteur, le padding et la taille de police du champ via\n * les tokens `--input-height-*` et `--input-font-size-*`.\n *\n * Tailles disponibles :\n * - `sm` : petit (32px de hauteur)\n * - `md` : moyen (40px de hauteur, par défaut)\n * - `lg` : grand (48px de hauteur)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-input size=\"lg\"></primitive-input>\n * ```\n */\n size = input<InputSize>('md');\n\n /**\n * Apparence visuelle du champ.\n *\n * @description\n * Contrôle le style de bordure et de fond du champ.\n *\n * Apparences disponibles :\n * - `default` : bordure standard, fond blanc (par défaut)\n * - `outline` : bordure fine, fond transparent\n * - `ghost` : bordure invisible au repos, visible au focus\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-input appearance=\"ghost\"></primitive-input>\n * ```\n */\n appearance = input<InputAppearance>('default');\n\n /**\n * Icône FontAwesome affichée avant le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n * Ajoute automatiquement du padding à gauche du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faUser } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-input [iconStart]=\"faUser\" placeholder=\"Username\"></primitive-input>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n * Ajoute automatiquement du padding à droite du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faSearch } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-input [iconEnd]=\"faSearch\" placeholder=\"Rechercher\"></primitive-input>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Label ARIA pour l'accessibilité.\n *\n * @description\n * Attribut `aria-label` natif utilisé par les lecteurs d'écran lorsqu'aucun\n * `<label>` visible n'est associé au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input ariaLabel=\"Adresse email\"></primitive-input>\n * ```\n */\n ariaLabel = input<string | undefined>(undefined);\n\n /**\n * ID de l'élément décrivant le champ pour l'accessibilité.\n *\n * @description\n * Attribut `aria-describedby` natif. Référence l'ID d'un élément HTML contenant\n * une description complémentaire (message d'aide, erreur de validation, etc.).\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input ariaDescribedBy=\"email-help\"></primitive-input>\n * <small id=\"email-help\">Utilisez votre email professionnel</small>\n * ```\n */\n ariaDescribedBy = input<string | undefined>(undefined);\n\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * Valeur du champ avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(value)]`.\n * La valeur est mise à jour automatiquement lors de la saisie utilisateur.\n *\n * @default ''\n *\n * @example\n * ```typescript\n * username = signal('');\n * ```\n * ```html\n * <primitive-input [(value)]=\"username\"></primitive-input>\n * <p>Bonjour {{ username() }}</p>\n * ```\n */\n value = model<string>('');\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis à chaque modification de la valeur du champ.\n *\n * @description\n * Déclenché lors de l'événement HTML `input` natif (à chaque frappe clavier).\n * Transporte la nouvelle valeur du champ sous forme de `string`.\n *\n * @example\n * ```html\n * <primitive-input (inputChanged)=\"onInputChange($event)\"></primitive-input>\n * ```\n * ```typescript\n * onInputChange(value: string) {\n * console.log('Nouvelle valeur :', value);\n * }\n * ```\n */\n inputChanged = output<string>();\n\n /**\n * Événement émis lorsque le champ perd le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `blur` natif. Ne transporte aucune donnée (`void`).\n * Utile pour déclencher des validations ou sauvegarder les données.\n *\n * @example\n * ```html\n * <primitive-input (inputBlurred)=\"onBlur()\"></primitive-input>\n * ```\n */\n inputBlurred = output<void>();\n\n /**\n * Événement émis lorsque le champ reçoit le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `focus` natif. Ne transporte aucune donnée (`void`).\n * Utile pour afficher des indices ou mettre en surbrillance la section.\n *\n * @example\n * ```html\n * <primitive-input (inputFocused)=\"onFocus()\"></primitive-input>\n * ```\n */\n inputFocused = output<void>();\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du wrapper.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - L'état (`default`, `success`, `warning`, `error`)\n * - La taille (`sm`, `md`, `lg`)\n * - L'apparence (`outline`, `ghost` si non-default)\n * - `disabled` si le champ est désactivé\n * - `readonly` si le champ est en lecture seule\n * - `has-icon-start` si une icône de début est présente\n * - `has-icon-end` si une icône de fin est présente\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // state='error', size='lg', appearance='outline', iconStart présent\n * // → \"error lg outline has-icon-start\"\n * ```\n */\n get wrapperClasses(): string {\n const classes: string[] = [this.state(), this.size()];\n if (this.appearance() !== 'default') {\n classes.push(this.appearance());\n }\n if (this.disabled()) {\n classes.push('disabled');\n }\n if (this.readonly()) {\n classes.push('readonly');\n }\n if (this.iconStart()) {\n classes.push('has-icon-start');\n }\n if (this.iconEnd()) {\n classes.push('has-icon-end');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Gestionnaire de l'événement input natif.\n *\n * @description\n * Méthode appelée par le template lors de la saisie utilisateur.\n * Met à jour le signal `value` et émet l'événement `inputChanged`.\n *\n * @param event - Événement HTML `input` natif.\n *\n * @internal\n */\n handleInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.inputChanged.emit(target.value);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ perd le focus.\n * Émet l'événement `inputBlurred`.\n *\n * @internal\n */\n handleBlur(): void {\n this.inputBlurred.emit();\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ reçoit le focus.\n * Émet l'événement `inputFocused`.\n *\n * @internal\n */\n handleFocus(): void {\n this.inputFocused.emit();\n }\n}\n","<div class=\"input-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <input\n [attr.id]=\"id()\"\n [attr.name]=\"name()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.maxLength]=\"maxlength()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n />\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type RadioSize = 'sm' | 'md' | 'lg';\n\n/**\n * Composant radio primitif sans logique métier.\n *\n * @description\n * Bouton radio atomique stylisé par CSS custom properties. Respecte le comportement\n * natif des radios : une fois sélectionné, il ne peut pas être désélectionné par clic\n * (seul un autre radio du même groupe peut le désélectionner). Supporte plusieurs\n * tailles et un label optionnel. Utilise `model()` pour le binding bidirectionnel.\n *\n * @example\n * ```html\n * <primitive-radio\n * [(checked)]=\"selectedOption === 'option1'\"\n * name=\"options\"\n * value=\"option1\"\n * label=\"Option 1\"\n * (checkedChange)=\"onOptionSelect('option1')\">\n * </primitive-radio>\n * ```\n *\n * @example\n * ```html\n * <primitive-radio\n * [checked]=\"true\"\n * [disabled]=\"true\"\n * size=\"lg\"\n * label=\"Option désactivée\">\n * </primitive-radio>\n * ```\n */\n@Component({\n selector: 'primitive-radio',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './primitive-radio.html',\n styleUrl: './primitive-radio.scss',\n})\nexport class PrimitiveRadio {\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * État sélectionné du radio avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.\n * Contrairement à une checkbox, un radio sélectionné ne peut pas être désélectionné\n * en cliquant dessus à nouveau (comportement natif HTML).\n *\n * @default false\n *\n * @example\n * ```typescript\n * selectedValue = signal('option1');\n * ```\n * ```html\n * <primitive-radio\n * [(checked)]=\"selectedValue() === 'option1'\"\n * value=\"option1\">\n * </primitive-radio>\n * ```\n */\n checked = model<boolean>(false);\n\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * État désactivé du radio.\n *\n * @description\n * Lorsque `true`, le radio devient non-cliquable, applique les styles visuels\n * d'état désactivé et définit `tabindex=\"-1\"` et `aria-disabled=\"true\"`.\n * Les événements ne sont pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-radio [disabled]=\"!isAvailable\" label=\"Option indisponible\"></primitive-radio>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du radio.\n *\n * @description\n * Contrôle la taille du cercle du radio et la taille de police du label via\n * les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit (16px)\n * - `md` : moyen (20px, par défaut)\n * - `lg` : grand (24px)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-radio size=\"lg\" label=\"Grande option\"></primitive-radio>\n * ```\n */\n size = input<RadioSize>('md');\n\n /**\n * Texte du label affiché à côté du radio.\n *\n * @description\n * Si fourni, affiche un label cliquable associé au radio.\n * Le label est lié au radio via `aria-labelledby` pour l'accessibilité.\n * Le clic sur le label sélectionne le radio.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-radio label=\"Option A\"></primitive-radio>\n * ```\n */\n label = input<string>('');\n\n /**\n * Nom du groupe de radios pour le comportement exclusif.\n *\n * @description\n * Tous les radios avec le même `name` appartiennent au même groupe.\n * Un seul radio par groupe peut être sélectionné à la fois.\n * Important pour la gestion de l'état exclusif dans les groupes de radios.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-radio name=\"size\" value=\"small\" label=\"Petit\"></primitive-radio>\n * <primitive-radio name=\"size\" value=\"medium\" label=\"Moyen\"></primitive-radio>\n * <primitive-radio name=\"size\" value=\"large\" label=\"Grand\"></primitive-radio>\n * ```\n */\n name = input<string>('');\n\n /**\n * Valeur du radio pour l'identification dans un groupe.\n *\n * @description\n * Valeur unique qui identifie ce radio dans son groupe.\n * Utilisée par le composant parent pour déterminer quelle option est sélectionnée.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-radio\n * name=\"payment\"\n * value=\"card\"\n * label=\"Carte bancaire\"\n * [(checked)]=\"paymentMethod === 'card'\">\n * </primitive-radio>\n * ```\n */\n value = input<string>('');\n\n /**\n * Identifiant unique du radio pour l'accessibilité.\n *\n * @description\n * Utilisé pour générer les IDs des éléments internes (label) et pour l'association\n * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.\n *\n * @default `radio-${random}`\n *\n * @example\n * ```html\n * <primitive-radio radioId=\"payment-card\" label=\"Carte\"></primitive-radio>\n * ```\n */\n radioId = input<string>(`radio-${Math.random().toString(36).slice(2, 11)}`);\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors de la sélection du radio.\n *\n * @description\n * Émis uniquement si le radio n'est pas désactivé et n'est pas déjà sélectionné.\n * Transporte toujours la valeur `true` car un radio ne peut que passer à l'état sélectionné.\n * Non émis lors d'un clic sur un radio déjà sélectionné (comportement natif).\n *\n * @example\n * ```html\n * <primitive-radio\n * name=\"options\"\n * value=\"option1\"\n * (checkedChange)=\"onOptionSelect('option1')\">\n * </primitive-radio>\n * ```\n * ```typescript\n * onOptionSelect(value: string) {\n * console.log('Option sélectionnée :', value);\n * }\n * ```\n */\n checkedChange = output<boolean>();\n\n // === SIGNAUX INTERNES ===\n\n /**\n * Signal interne de l'état focus du radio.\n *\n * @description\n * Signal utilisé en interne pour suivre l'état focus du radio.\n * Applique la classe CSS `primitive-radio--focused` lorsque `true`.\n *\n * @internal\n */\n protected focused = signal<boolean>(false);\n\n /**\n * Signal calculé des classes CSS du radio.\n *\n * @description\n * Génère dynamiquement un objet de classes CSS en fonction des propriétés :\n * - Classe de base : `primitive-radio`\n * - Classe de taille : `primitive-radio--{size}`\n * - Classe d'état sélectionné : `primitive-radio--checked`\n * - Classe d'état désactivé : `primitive-radio--disabled`\n * - Classe d'état focus : `primitive-radio--focused`\n *\n * @returns Objet de classes CSS avec valeurs booléennes.\n *\n * @internal\n */\n protected cssClasses = computed(() => ({\n 'primitive-radio': true,\n [`primitive-radio--${this.size()}`]: true,\n 'primitive-radio--checked': this.checked(),\n 'primitive-radio--disabled': this.disabled(),\n 'primitive-radio--focused': this.focused(),\n }));\n\n // === MÉTHODES INTERNES ===\n\n /**\n * Gestionnaire de sélection interne.\n *\n * @description\n * Méthode appelée par le template lors du clic sur le radio ou son label.\n * Ne fait rien si le radio est désactivé ou déjà sélectionné (comportement natif).\n * Définit `checked` à `true` et émet l'événement `checkedChange`.\n *\n * @internal\n */\n protected onSelect(): void {\n if (this.disabled() || this.checked()) return;\n\n this.checked.set(true);\n this.checkedChange.emit(true);\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le radio reçoit le focus.\n * Met à jour le signal interne `focused` à `true`.\n *\n * @internal\n */\n protected onFocus(): void {\n this.focused.set(true);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le radio perd le focus.\n * Met à jour le signal interne `focused` à `false`.\n *\n * @internal\n */\n protected onBlur(): void {\n this.focused.set(false);\n }\n\n /**\n * Gestionnaire de l'événement keydown natif.\n *\n * @description\n * Méthode appelée par le template lors de la pression d'une touche clavier.\n * Déclenche la sélection sur les touches `Space` ou `Enter` et empêche le\n * comportement par défaut (scroll de la page sur Space).\n *\n * @param event - Événement clavier natif.\n *\n * @internal\n */\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onSelect();\n }\n }\n}\n","<div\n [ngClass]=\"cssClasses()\"\n (click)=\"onSelect()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.role]=\"'radio'\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"label() ? radioId() + '-label' : null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n>\n <div class=\"primitive-radio__circle\">\n @if (checked()) {\n <div class=\"primitive-radio__dot\"></div>\n }\n </div>\n @if (label()) {\n <label\n [id]=\"radioId() + '-label'\"\n class=\"primitive-radio__label\"\n [class.primitive-radio__label--disabled]=\"disabled()\"\n >\n {{ label() }}\n </label>\n }\n</div>\n","import { Component, input, output, model } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type TextareaState = 'default' | 'success' | 'warning' | 'error';\nexport type TextareaSize = 'sm' | 'md' | 'lg';\nexport type TextareaAppearance = 'default' | 'outline' | 'ghost';\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\n/**\n * Composant textarea primitif sans logique métier.\n *\n * @description\n * Zone de saisie multiligne atomique stylisée par CSS custom properties. Supporte plusieurs\n * états visuels, tailles, apparences et modes de redimensionnement. Peut afficher des icônes\n * FontAwesome avant/après le champ. Utilise `model()` pour le binding bidirectionnel de la valeur.\n *\n * @example\n * ```html\n * <primitive-textarea\n * placeholder=\"Saisissez votre commentaire\"\n * [(value)]=\"comment\"\n * [rows]=\"5\">\n * </primitive-textarea>\n * ```\n *\n * @example\n * ```html\n * <primitive-textarea\n * state=\"error\"\n * [maxlength]=\"500\"\n * resize=\"none\"\n * appearance=\"outline\"\n * (inputChanged)=\"onCommentChange($event)\">\n * </primitive-textarea>\n * ```\n */\n@Component({\n selector: 'primitive-textarea',\n imports: [CommonModule, FormsModule, FaIconComponent],\n templateUrl: './primitive-textarea.html',\n styleUrl: './primitive-textarea.scss',\n})\nexport class PrimitiveTextarea {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Identifiant HTML unique du champ.\n *\n * @description\n * Attribut `id` natif du champ `<textarea>`. Utile pour lier un `<label>` au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <label for=\"comment-textarea\">Commentaire</label>\n * <primitive-textarea id=\"comment-textarea\"></primitive-textarea>\n * ```\n */\n id = input<string | undefined>(undefined);\n\n /**\n * Nom du champ pour les formulaires HTML.\n *\n * @description\n * Attribut `name` natif utilisé lors de la soumission d'un formulaire.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea name=\"description\"></primitive-textarea>\n * ```\n */\n name = input<string | undefined>(undefined);\n\n /**\n * Texte d'indication affiché lorsque le champ est vide.\n *\n * @description\n * Attribut `placeholder` natif. Disparaît dès que l'utilisateur commence à saisir.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-textarea placeholder=\"Décrivez votre problème...\"></primitive-textarea>\n * ```\n */\n placeholder = input<string>('');\n\n /**\n * État désactivé du champ.\n *\n * @description\n * Lorsque `true`, le champ devient non-éditable, applique l'attribut HTML `disabled`\n * et affiche les styles visuels d'état désactivé. Les événements ne sont pas émis.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-textarea [disabled]=\"!canEdit\"></primitive-textarea>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * État lecture seule du champ.\n *\n * @description\n * Lorsque `true`, le champ est visible et sélectionnable mais non-éditable.\n * Applique l'attribut HTML `readonly` et la classe CSS `.readonly`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-textarea [readonly]=\"true\" value=\"Texte fixe\"></primitive-textarea>\n * ```\n */\n readonly = input<boolean>(false);\n\n /**\n * Champ obligatoire pour la validation HTML5.\n *\n * @description\n * Lorsque `true`, applique l'attribut HTML `required`. Le navigateur empêchera\n * la soumission du formulaire parent si le champ est vide.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-textarea [required]=\"true\"></primitive-textarea>\n * ```\n */\n required = input<boolean>(false);\n\n /**\n * État visuel du champ (feedback utilisateur).\n *\n * @description\n * Applique une couleur de bordure et une classe CSS selon l'état de validation ou le contexte.\n *\n * États disponibles :\n * - `default` : état neutre (par défaut)\n * - `success` : validation réussie, bordure verte\n * - `warning` : avertissement, bordure orange\n * - `error` : erreur de validation, bordure rouge\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-textarea [state]=\"isValid ? 'success' : 'error'\"></primitive-textarea>\n * ```\n */\n state = input<TextareaState>('default');\n\n /**\n * Taille du champ.\n *\n * @description\n * Contrôle le padding et la taille de police du champ via les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit\n * - `md` : moyen (par défaut)\n * - `lg` : grand\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-textarea size=\"lg\"></primitive-textarea>\n * ```\n */\n size = input<TextareaSize>('md');\n\n /**\n * Apparence visuelle du champ.\n *\n * @description\n * Contrôle le style de bordure et de fond du champ.\n *\n * Apparences disponibles :\n * - `default` : bordure standard, fond blanc (par défaut)\n * - `outline` : bordure fine, fond transparent\n * - `ghost` : bordure invisible au repos, visible au focus\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-textarea appearance=\"outline\"></primitive-textarea>\n * ```\n */\n appearance = input<TextareaAppearance>('default');\n\n /**\n * Mode de redimensionnement du champ.\n *\n * @description\n * Contrôle la possibilité pour l'utilisateur de redimensionner le champ manuellement.\n * Applique la propriété CSS `resize` au textarea.\n *\n * Modes disponibles :\n * - `none` : pas de redimensionnement\n * - `vertical` : redimensionnement vertical uniquement (par défaut)\n * - `horizontal` : redimensionnement horizontal uniquement\n * - `both` : redimensionnement dans les deux directions\n *\n * @default 'vertical'\n *\n * @example\n * ```html\n * <primitive-textarea resize=\"none\"></primitive-textarea>\n * ```\n */\n resize = input<TextareaResize>('vertical');\n\n /**\n * Nombre de lignes visibles du textarea.\n *\n * @description\n * Attribut `rows` natif. Définit la hauteur initiale du champ en nombre de lignes de texte.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea [rows]=\"5\"></primitive-textarea>\n * ```\n */\n rows = input<number | undefined>(undefined);\n\n /**\n * Nombre de colonnes (largeur en caractères) du textarea.\n *\n * @description\n * Attribut `cols` natif. Définit la largeur du champ en nombre de caractères.\n * Rarement utilisé car la largeur est souvent contrôlée par CSS.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea [cols]=\"80\"></primitive-textarea>\n * ```\n */\n cols = input<number | undefined>(undefined);\n\n /**\n * Longueur maximale autorisée en nombre de caractères.\n *\n * @description\n * Attribut `maxlength` natif. Le navigateur empêche la saisie au-delà de cette limite.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea [maxlength]=\"500\"></primitive-textarea>\n * ```\n */\n maxlength = input<number | undefined>(undefined);\n\n /**\n * Icône FontAwesome affichée avant le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n * Ajoute automatiquement du padding en haut à gauche du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faCommentDots } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-textarea [iconStart]=\"faCommentDots\"></primitive-textarea>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n * Ajoute automatiquement du padding en haut à droite du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faPen } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-textarea [iconEnd]=\"faPen\"></primitive-textarea>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Label ARIA pour l'accessibilité.\n *\n * @description\n * Attribut `aria-label` natif utilisé par les lecteurs d'écran lorsqu'aucun\n * `<label>` visible n'est associé au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea ariaLabel=\"Commentaire détaillé\"></primitive-textarea>\n * ```\n */\n ariaLabel = input<string | undefined>(undefined);\n\n /**\n * ID de l'élément décrivant le champ pour l'accessibilité.\n *\n * @description\n * Attribut `aria-describedby` natif. Référence l'ID d'un élément HTML contenant\n * une description complémentaire (message d'aide, erreur de validation, etc.).\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea ariaDescribedBy=\"comment-help\"></primitive-textarea>\n * <small id=\"comment-help\">Maximum 500 caractères</small>\n * ```\n */\n ariaDescribedBy = input<string | undefined>(undefined);\n\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * Valeur du champ avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(value)]`.\n * La valeur est mise à jour automatiquement lors de la saisie utilisateur.\n *\n * @default ''\n *\n * @example\n * ```typescript\n * comment = signal('');\n * ```\n * ```html\n * <primitive-textarea [(value)]=\"comment\"></primitive-textarea>\n * <p>Longueur : {{ comment().length }} caractères</p>\n * ```\n */\n value = model<string>('');\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis à chaque modification de la valeur du champ.\n *\n * @description\n * Déclenché lors de l'événement HTML `input` natif (à chaque frappe clavier).\n * Transporte la nouvelle valeur du champ sous forme de `string`.\n *\n * @example\n * ```html\n * <primitive-textarea (inputChanged)=\"onInputChange($event)\"></primitive-textarea>\n * ```\n * ```typescript\n * onInputChange(value: string) {\n * console.log('Nouvelle valeur :', value);\n * }\n * ```\n */\n inputChanged = output<string>();\n\n /**\n * Événement émis lorsque le champ perd le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `blur` natif. Ne transporte aucune donnée (`void`).\n * Utile pour déclencher des validations ou sauvegarder les données.\n *\n * @example\n * ```html\n * <primitive-textarea (inputBlurred)=\"onBlur()\"></primitive-textarea>\n * ```\n */\n inputBlurred = output<void>();\n\n /**\n * Événement émis lorsque le champ reçoit le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `focus` natif. Ne transporte aucune donnée (`void`).\n * Utile pour afficher des indices ou mettre en surbrillance la section.\n *\n * @example\n * ```html\n * <primitive-textarea (inputFocused)=\"onFocus()\"></primitive-textarea>\n * ```\n */\n inputFocused = output<void>();\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du wrapper.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - L'état (`default`, `success`, `warning`, `error`)\n * - La taille (`sm`, `md`, `lg`)\n * - L'apparence (`outline`, `ghost` si non-default)\n * - `disabled` si le champ est désactivé\n * - `readonly` si le champ est en lecture seule\n * - `has-icon-start` si une icône de début est présente\n * - `has-icon-end` si une icône de fin est présente\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // state='error', size='lg', appearance='outline', iconStart présent\n * // → \"error lg outline has-icon-start\"\n * ```\n */\n get wrapperClasses(): string {\n const classes: string[] = [this.state(), this.size()];\n if (this.appearance() !== 'default') {\n classes.push(this.appearance());\n }\n if (this.disabled()) {\n classes.push('disabled');\n }\n if (this.readonly()) {\n classes.push('readonly');\n }\n if (this.iconStart()) {\n classes.push('has-icon-start');\n }\n if (this.iconEnd()) {\n classes.push('has-icon-end');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Gestionnaire de l'événement input natif.\n *\n * @description\n * Méthode appelée par le template lors de la saisie utilisateur.\n * Met à jour le signal `value` et émet l'événement `inputChanged`.\n *\n * @param event - Événement HTML `input` natif.\n *\n * @internal\n */\n handleInput(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value.set(target.value);\n this.inputChanged.emit(target.value);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ perd le focus.\n * Émet l'événement `inputBlurred`.\n *\n * @internal\n */\n handleBlur(): void {\n this.inputBlurred.emit();\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ reçoit le focus.\n * Émet l'événement `inputFocused`.\n *\n * @internal\n */\n handleFocus(): void {\n this.inputFocused.emit();\n }\n}\n","<div class=\"textarea-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <textarea\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.rows]=\"rows()\"\n [attr.cols]=\"cols()\"\n [attr.maxLength]=\"maxlength()\"\n [value]=\"value()\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n [style.resize]=\"resize()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n ></textarea>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\n/**\n * Composant toggle (switch) primitif sans logique métier.\n *\n * @description\n * Interrupteur atomique stylisé par CSS custom properties. Représente un état binaire\n * activé/désactivé avec une animation de transition fluide. Supporte plusieurs tailles,\n * un label optionnel positionnable à gauche ou à droite, et utilise `model()` pour\n * le binding bidirectionnel.\n *\n * @example\n * ```html\n * <primitive-toggle\n * [(checked)]=\"notificationsEnabled\"\n * label=\"Activer les notifications\">\n * </primitive-toggle>\n * ```\n *\n * @example\n * ```html\n * <primitive-toggle\n * [checked]=\"true\"\n * [disabled]=\"false\"\n * size=\"lg\"\n * labelPosition=\"left\"\n * label=\"Mode sombre\"\n * (checkedChange)=\"onThemeChange($event)\">\n * </primitive-toggle>\n * ```\n */\n@Component({\n selector: 'primitive-toggle',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './primitive-toggle.html',\n styleUrl: './primitive-toggle.scss',\n})\nexport class PrimitiveToggle {\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * État activé du toggle avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.\n * L'état est inversé automatiquement lors du clic utilisateur.\n * Le thumb (curseur) se déplace de gauche à droite selon l'état.\n *\n * @default false\n *\n * @example\n * ```typescript\n * darkModeEnabled = signal(false);\n * ```\n * ```html\n * <primitive-toggle [(checked)]=\"darkModeEnabled\" label=\"Mode sombre\"></primitive-toggle>\n * <p>Mode sombre : {{ darkModeEnabled() ? 'Activé' : 'Désactivé' }}</p>\n * ```\n */\n checked = model<boolean>(false);\n\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * État désactivé du toggle.\n *\n * @description\n * Lorsque `true`, le toggle devient non-cliquable, applique les styles visuels\n * d'état désactivé et définit `tabindex=\"-1\"` et `aria-disabled=\"true\"`.\n * Les événements ne sont pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-toggle [disabled]=\"!hasPermission\" label=\"Option premium\"></primitive-toggle>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du toggle.\n *\n * @description\n * Contrôle la hauteur du track (rail), la taille du thumb (curseur) et la taille\n * de police du label via les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit (track 32px × 18px, thumb 14px)\n * - `md` : moyen (track 44px × 24px, thumb 20px, par défaut)\n * - `lg` : grand (track 56px × 30px, thumb 26px)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-toggle size=\"lg\" label=\"Grande option\"></primitive-toggle>\n * ```\n */\n size = input<ToggleSize>('md');\n\n /**\n * Texte du label affiché à côté du toggle.\n *\n * @description\n * Si fourni, affiche un label cliquable associé au toggle.\n * Le label est lié au toggle via `aria-labelledby` pour l'accessibilité.\n * Le clic sur le label déclenche le toggle.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-toggle label=\"Accepter les cookies\"></primitive-toggle>\n * ```\n */\n label = input<string>('');\n\n /**\n * Position du label par rapport au switch.\n *\n * @description\n * Définit si le label s'affiche à gauche ou à droite du switch visuel.\n * Applique la classe CSS `primitive-toggle--label-{position}` si un label est présent.\n *\n * Positions disponibles :\n * - `right` : label à droite du switch (par défaut)\n * - `left` : label à gauche du switch\n *\n * @default 'right'\n *\n * @example\n * ```html\n * <primitive-toggle labelPosition=\"left\" label=\"Notifications\"></primitive-toggle>\n * ```\n */\n labelPosition = input<'left' | 'right'>('right');\n\n /**\n * Identifiant unique du toggle pour l'accessibilité.\n *\n * @description\n * Utilisé pour générer les IDs des éléments internes (label) et pour l'association\n * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.\n *\n * @default `toggle-${random}`\n *\n * @example\n * ```html\n * <primitive-toggle toggleId=\"dark-mode-switch\" label=\"Mode sombre\"></primitive-toggle>\n * ```\n */\n toggleId = input<string>(`toggle-${Math.random().toString(36).slice(2, 11)}`);\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors du changement d'état du toggle.\n *\n * @description\n * Émis uniquement si le toggle n'est pas désactivé (`disabled = false`).\n * Transporte la nouvelle valeur booléenne de l'état activé.\n * Émis à chaque toggle (activation ou désactivation).\n *\n * @example\n * ```html\n * <primitive-toggle\n * [(checked)]=\"autoSave\"\n * (checkedChange)=\"onAutoSaveChange($event)\">\n * </primitive-toggle>\n * ```\n * ```typescript\n * onAutoSaveChange(enabled: boolean) {\n * console.log('Sauvegarde automatique :', enabled ? 'activée' : 'désactivée');\n * }\n * ```\n */\n checkedChange = output<boolean>();\n\n // === SIGNAUX INTERNES ===\n\n /**\n * Signal interne de l'état focus du toggle.\n *\n * @description\n * Signal utilisé en interne pour suivre l'état focus du switch.\n * Applique la classe CSS `primitive-toggle--focused` lorsque `true`.\n *\n * @internal\n */\n protected focused = signal<boolean>(false);\n\n /**\n * Signal calculé des classes CSS du toggle.\n *\n * @description\n * Génère dynamiquement un objet de classes CSS en fonction des propriétés :\n * - Classe de base : `primitive-toggle`\n * - Classe de taille : `primitive-toggle--{size}`\n * - Classe de position du label : `primitive-toggle--label-{position}` (si label présent)\n * - Classe d'état activé : `primitive-toggle--checked`\n * - Classe d'état désactivé : `primitive-toggle--disabled`\n * - Classe d'état focus : `primitive-toggle--focused`\n *\n * @returns Objet de classes CSS avec valeurs booléennes.\n *\n * @internal\n */\n protected cssClasses = computed(() => ({\n 'primitive-toggle': true,\n [`primitive-toggle--${this.size()}`]: true,\n [`primitive-toggle--label-${this.labelPosition()}`]: !!this.label(),\n 'primitive-toggle--checked': this.checked(),\n 'primitive-toggle--disabled': this.disabled(),\n 'primitive-toggle--focused': this.focused(),\n }));\n\n // === MÉTHODES INTERNES ===\n\n /**\n * Gestionnaire de toggle interne.\n *\n * @description\n * Méthode appelée par le template lors du clic sur le switch ou son label.\n * Inverse l'état `checked` et émet l'événement `checkedChange`.\n * Ne fait rien si le toggle est désactivé.\n *\n * @internal\n */\n protected onToggle(): void {\n if (this.disabled()) return;\n\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.checkedChange.emit(newValue);\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le switch reçoit le focus.\n * Met à jour le signal interne `focused` à `true`.\n *\n * @internal\n */\n protected onFocus(): void {\n this.focused.set(true);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le switch perd le focus.\n * Met à jour le signal interne `focused` à `false`.\n *\n * @internal\n */\n protected onBlur(): void {\n this.focused.set(false);\n }\n\n /**\n * Gestionnaire de l'événement keydown natif.\n *\n * @description\n * Méthode appelée par le template lors de la pression d'une touche clavier.\n * Déclenche le toggle sur les touches `Space` ou `Enter` et empêche le\n * comportement par défaut (scroll de la page sur Space).\n *\n * @param event - Événement clavier natif.\n *\n * @internal\n */\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onToggle();\n }\n }\n}\n","<div [ngClass]=\"cssClasses()\">\n @if (label() && labelPosition() === 'left') {\n <label\n [id]=\"toggleId() + '-label'\"\n class=\"primitive-toggle__label\"\n [class.primitive-toggle__label--disabled]=\"disabled()\"\n (click)=\"onToggle()\"\n >\n {{ label() }}\n </label>\n }\n\n <div\n class=\"primitive-toggle__switch\"\n (click)=\"onToggle()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.role]=\"'switch'\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"label() ? toggleId() + '-label' : null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n >\n <div class=\"primitive-toggle__track\">\n <div class=\"primitive-toggle__thumb\"></div>\n </div>\n </div>\n\n @if (label() && labelPosition() === 'right') {\n <label\n [id]=\"toggleId() + '-label'\"\n class=\"primitive-toggle__label\"\n [class.primitive-toggle__label--disabled]=\"disabled()\"\n (click)=\"onToggle()\"\n >\n {{ label() }}\n </label>\n }\n</div>\n","/*\n * Primitives barrel export\n */\n\n// Primitives exports\nexport {\n PrimitiveBadge,\n type BadgeType,\n type BadgeVariant,\n type BadgeSize,\n type BadgeShape,\n type BadgeAppearance,\n} from './primitive-badge/primitive-badge';\n\nexport {\n PrimitiveButton,\n type ButtonType,\n type ButtonVariant,\n type ButtonSize,\n type ButtonAppearance,\n} from './primitive-button/primitive-button';\n\nexport {\n PrimitiveCheckbox,\n type CheckboxSize,\n type CheckboxState,\n} from './primitive-checkbox/primitive-checkbox';\n\nexport {\n PrimitiveInput,\n type InputType,\n type InputState,\n type InputSize,\n type InputAppearance,\n} from './primitive-input/primitive-input';\n\nexport {\n PrimitiveRadio,\n type RadioSize,\n} from './primitive-radio/primitive-radio';\n\nexport {\n PrimitiveTextarea,\n type TextareaState,\n type TextareaSize,\n type TextareaAppearance,\n type TextareaResize,\n} from './primitive-textarea/primitive-textarea';\n\nexport {\n PrimitiveToggle,\n type ToggleSize,\n} from './primitive-toggle/primitive-toggle';\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faCheckCircle,\n faExclamationTriangle,\n faTimesCircle,\n faInfoCircle,\n faTimes\n} from '@fortawesome/free-solid-svg-icons';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\n/**\n * Types de feedback disponibles pour le composant Alert.\n * - **success** : opération réussie\n * - **warning** : attention ou avertissement\n * - **error** : erreur ou échec\n * - **info** : information neutre\n */\nexport type AlertType = 'success' | 'warning' | 'error' | 'info';\n\n/**\n * Tailles disponibles pour le composant Alert.\n */\nexport type AlertSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsAlert\n *\n * Composant de bannière de feedback permettant d'afficher des messages\n * de succès, d'avertissement, d'erreur ou d'information.\n *\n * ## Usage\n *\n * ```html\n * <ds-alert type=\"success\" [closable]=\"true\" (closed)=\"handleClose()\">\n * <p>Votre opération a été effectuée avec succès !</p>\n * </ds-alert>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"alert\"` pour les messages importants\n * - Icônes décoratives avec `aria-hidden=\"true\"`\n * - Bouton de fermeture avec `aria-label` explicite\n *\n * @component\n */\n@Component({\n selector: 'ds-alert',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-alert.html',\n styleUrl: './ds-alert.scss',\n})\nexport class DsAlert {\n /**\n * Type de feedback (success, warning, error, info).\n * @default 'info'\n */\n type = input<AlertType>('info');\n\n /**\n * Taille de l'alerte (affecte le padding et la taille de l'icône).\n * @default 'md'\n */\n size = input<AlertSize>('md');\n\n /**\n * Affiche une icône selon le type.\n * @default true\n */\n showIcon = input<boolean>(true);\n\n /**\n * Permet de fermer l'alerte avec un bouton de fermeture.\n * @default false\n */\n closable = input<boolean>(false);\n\n /**\n * Masque l'alerte (contrôle de visibilité externe).\n * @default false\n */\n hidden = input<boolean>(false);\n\n /**\n * Émis lorsque l'utilisateur ferme l'alerte.\n */\n closed = output<void>();\n\n /**\n * Mapping des icônes FontAwesome par type d'alerte.\n * Exposé en readonly pour les tests et l'introspection.\n */\n readonly icons: Record<AlertType, IconDefinition> = {\n success: faCheckCircle,\n warning: faExclamationTriangle,\n error: faTimesCircle,\n info: faInfoCircle,\n };\n\n protected readonly closeIcon = faTimes;\n\n /**\n * Classes CSS calculées pour le composant.\n */\n get alertClasses(): string[] {\n return [\n 'ds-alert',\n `ds-alert--${this.type()}`,\n `ds-alert--${this.size()}`,\n this.hidden() ? 'ds-alert--hidden' : '',\n ].filter(Boolean);\n }\n\n /**\n * Icône à afficher selon le type.\n */\n get currentIcon(): IconDefinition {\n return this.icons[this.type()];\n }\n\n /**\n * Gère la fermeture de l'alerte.\n */\n handleClose(): void {\n this.closed.emit();\n }\n}\n","<div\n [class]=\"alertClasses.join(' ')\"\n role=\"alert\"\n [attr.aria-hidden]=\"hidden() ? 'true' : null\"\n>\n @if (showIcon()) {\n <div class=\"ds-alert__icon\" aria-hidden=\"true\">\n <fa-icon [icon]=\"currentIcon\"></fa-icon>\n </div>\n }\n\n <div class=\"ds-alert__content\">\n <ng-content></ng-content>\n </div>\n\n @if (closable()) {\n <button\n class=\"ds-alert__close\"\n type=\"button\"\n aria-label=\"Fermer l'alerte\"\n (click)=\"handleClose()\"\n >\n <fa-icon [icon]=\"closeIcon\"></fa-icon>\n </button>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { IconDefinition } from '@fortawesome/free-solid-svg-icons';\nimport { PrimitiveBadge, BadgeVariant, BadgeSize, BadgeShape } from '../../primitives/primitive-badge/primitive-badge';\nimport { CommonModule } from '@angular/common';\n\ntype DsBadgeVariantExtended = BadgeVariant | 'default' | 'accent';\n\n@Component({\n selector: 'ds-badge',\n imports: [CommonModule, PrimitiveBadge],\n templateUrl: './ds-badge.html',\n styleUrl: './ds-badge.scss',\n})\nexport class DsBadge {\n private static readonly supportedColorPattern = /^(#|rgba?\\(|hsla?\\(|var\\()/i;\n\n // Props de base\n type = input<DsBadgeVariantExtended>('default');\n size = input<BadgeSize>('md');\n iconStart = input<IconDefinition | null>(null);\n iconEnd = input<IconDefinition | null>(null);\n\n // Props spécifiques DS\n variant = input<'solid' | 'outline'>('solid');\n shape = input<'default' | 'pill' | 'square'>('default');\n color = input<string | undefined>(undefined);\n\n get badgeVariant(): BadgeVariant {\n const type = this.type();\n if (type === 'default') return 'neutral';\n if (type === 'accent') return 'primary';\n return type as BadgeVariant;\n }\n\n get badgeShape(): BadgeShape {\n const shape = this.shape();\n if (shape === 'default' || shape === 'square') return 'rounded';\n return 'pill';\n }\n\n get styleOverrides(): Record<string, string> | null {\n const customColor = this.resolveCustomColor();\n if (!customColor) {\n return null;\n }\n\n if (this.variant() === 'outline') {\n return {\n borderColor: customColor,\n color: customColor,\n backgroundColor: 'transparent',\n };\n }\n\n return {\n backgroundColor: customColor,\n borderColor: customColor,\n color: 'var(--badge-text, #fff)',\n };\n }\n\n private resolveCustomColor(): string | null {\n const value = this.color()?.trim();\n if (!value) {\n return null;\n }\n\n if (!DsBadge.supportedColorPattern.test(value)) {\n return null;\n }\n\n return value;\n }\n}\n","<div class=\"ds-badge-wrapper\">\n <primitive-badge\n [variant]=\"badgeVariant\"\n [size]=\"size()\"\n [shape]=\"badgeShape\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [customStyles]=\"styleOverrides\">\n <ng-content></ng-content>\n </primitive-badge>\n</div>\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'ds-breadcrumb',\n standalone: true,\n imports: [CommonModule, RouterModule],\n templateUrl: './ds-breadcrumb.html',\n styleUrl: './ds-breadcrumb.scss',\n})\nexport class DsBreadcrumb {\n items = input.required<BreadcrumbItem[]>();\n separator = input<string>('/');\n maxItems = input<number | undefined>(undefined);\n\n itemClicked = output<BreadcrumbItem>();\n\n protected get visibleItems(): BreadcrumbItem[] {\n const allItems = this.items();\n const max = this.maxItems();\n\n if (!max || allItems.length <= max) {\n return allItems;\n }\n\n // Si on dépasse maxItems, on garde le premier, un ellipsis, et les derniers\n const firstItem = allItems[0];\n const lastItems = allItems.slice(-(max - 2));\n\n return [firstItem, { label: '...', disabled: true }, ...lastItems];\n }\n\n protected onItemClick(item: BreadcrumbItem, event: Event): void {\n if (item.disabled) {\n event.preventDefault();\n return;\n }\n this.itemClicked.emit(item);\n }\n\n protected isLastItem(index: number): boolean {\n return index === this.visibleItems.length - 1;\n }\n\n protected trackByIndex(index: number): number {\n return index;\n }\n}\n","<nav class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"ds-breadcrumb__list\">\n @for (item of visibleItems; track trackByIndex($index)) {\n <li class=\"ds-breadcrumb__item\" [class.ds-breadcrumb__item--active]=\"isLastItem($index)\">\n @if (item.href && !item.disabled && !isLastItem($index)) {\n <a\n [routerLink]=\"item.href\"\n class=\"ds-breadcrumb__link\"\n (click)=\"onItemClick(item, $event)\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"ds-breadcrumb__text\"\n [class.ds-breadcrumb__text--disabled]=\"item.disabled\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n\n @if (!isLastItem($index)) {\n <span class=\"ds-breadcrumb__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n }\n </li>\n }\n </ol>\n</nav>\n","import { Component, input, output } from '@angular/core';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { PrimitiveButton, ButtonVariant, ButtonSize, ButtonType, ButtonAppearance } from '../../primitives/primitive-button/primitive-button';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ds-button',\n imports: [CommonModule, PrimitiveButton],\n templateUrl: './ds-button.html',\n styleUrl: './ds-button.scss',\n})\nexport class DsButton {\n // Props de base (délégués à primitive-button)\n /** Variante visuelle appliquée au bouton. */\n variant = input<ButtonVariant>('primary');\n /** Apparence du bouton (plein ou outline). */\n appearance = input<ButtonAppearance>('solid');\n /** Taille du bouton. */\n size = input<ButtonSize>('md');\n /** Définit le type submit pour les formulaires. */\n submit = input<boolean>(false);\n /** Désactive le bouton. */\n disabled = input<boolean>(false);\n /** Icône affichée à gauche du libellé. */\n iconStart = input<IconDefinition | null>(null);\n /** Icône affichée à droite du libellé. */\n iconEnd = input<IconDefinition | null>(null);\n\n // Props spécifiques DS\n /** Active l'état de chargement avec spinner et désactive le clic. */\n loading = input<boolean>(false);\n /** Étend le bouton sur toute la largeur du conteneur. */\n block = input<boolean>(false);\n\n // Events\n /** Émis lorsque l'utilisateur clique sur le bouton actif. */\n clicked = output<void>();\n\n get buttonType(): ButtonType {\n return this.submit() ? 'submit' : 'button';\n }\n\n get isDisabled(): boolean {\n return this.disabled() || this.loading();\n }\n\n handleClick(): void {\n if (!this.isDisabled) {\n this.clicked.emit();\n }\n }\n}\n","<div class=\"ds-button-wrapper\" [class.block]=\"block()\">\n @if (loading()) {\n <primitive-button\n [type]=\"buttonType\"\n [variant]=\"variant()\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"true\">\n <span class=\"spinner\"></span>\n </primitive-button>\n } @else {\n <primitive-button\n [type]=\"buttonType\"\n [variant]=\"variant()\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"isDisabled\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n (clicked)=\"handleClick()\">\n <ng-content></ng-content>\n </primitive-button>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Variantes visuelles disponibles pour le composant Card.\n * - **default** : carte simple avec bordure\n * - **elevated** : carte avec ombre portée\n * - **outlined** : carte avec bordure accentuée\n */\nexport type CardVariant = 'default' | 'elevated' | 'outlined';\n\n/**\n * Tailles disponibles pour le composant Card.\n */\nexport type CardSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsCard\n *\n * Composant container permettant de regrouper du contenu avec un en-tête,\n * un corps et un pied de page optionnels.\n *\n * ## Usage\n *\n * ```html\n * <ds-card variant=\"elevated\" size=\"md\">\n * <div header>Titre de la carte</div>\n * <div>Contenu principal</div>\n * <div footer>Actions ou informations complémentaires</div>\n * </ds-card>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise la sémantique HTML appropriée (`article`)\n * - Structure claire avec header, body, footer\n *\n * @component\n */\n@Component({\n selector: 'ds-card',\n imports: [CommonModule],\n templateUrl: './ds-card.html',\n styleUrl: './ds-card.scss',\n})\nexport class DsCard {\n /**\n * Variante visuelle de la carte.\n * @default 'default'\n */\n variant = input<CardVariant>('default');\n\n /**\n * Taille de la carte (affecte le padding).\n * @default 'md'\n */\n size = input<CardSize>('md');\n\n /**\n * Désactive l'interaction avec la carte (apparence désactivée).\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Rend la carte cliquable avec effet hover.\n * @default false\n */\n clickable = input<boolean>(false);\n\n /**\n * Classes CSS calculées pour le composant.\n */\n get cardClasses(): string[] {\n return [\n 'ds-card',\n `ds-card--${this.variant()}`,\n `ds-card--${this.size()}`,\n this.disabled() ? 'ds-card--disabled' : '',\n this.clickable() ? 'ds-card--clickable' : '',\n ].filter(Boolean);\n }\n}\n","<article [class]=\"cardClasses.join(' ')\" [attr.aria-disabled]=\"disabled() ? 'true' : null\">\n <header class=\"ds-card__header\" #header>\n <ng-content select=\"[header]\"></ng-content>\n </header>\n\n <div class=\"ds-card__body\">\n <ng-content></ng-content>\n </div>\n\n <footer class=\"ds-card__footer\" #footer>\n <ng-content select=\"[footer]\"></ng-content>\n </footer>\n</article>\n","import { Component, forwardRef, input, signal, computed } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { PrimitiveCheckbox, CheckboxSize } from '../../primitives/primitive-checkbox/primitive-checkbox';\n\n/**\n * DS Checkbox\n *\n * Composant checkbox du design system avec ControlValueAccessor pour intégration formulaires réactifs.\n * Encapsule primitive-checkbox avec gestion label, helper, error et validation visuelle.\n *\n * @example\n * // Formulaire réactif\n * <ds-checkbox\n * formControlName=\"acceptTerms\"\n * label=\"J'accepte les conditions d'utilisation\"\n * [required]=\"true\"\n * helper=\"Vous devez accepter pour continuer\"\n * />\n *\n * @example\n * // Template-driven\n * <ds-checkbox\n * [(ngModel)]=\"isAccepted\"\n * label=\"Activer les notifications\"\n * />\n */\n@Component({\n selector: 'ds-checkbox',\n standalone: true,\n imports: [CommonModule, PrimitiveCheckbox],\n templateUrl: './ds-checkbox.html',\n styleUrl: './ds-checkbox.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsCheckbox),\n multi: true,\n },\n ],\n})\nexport class DsCheckbox implements ControlValueAccessor {\n /**\n * ID unique du checkbox (généré automatiquement)\n */\n id = input<string>(`ds-checkbox-${crypto.randomUUID()}`);\n\n /**\n * Label affiché à côté du checkbox\n */\n label = input<string>('');\n\n /**\n * Texte d'aide affiché sous le checkbox\n */\n helper = input<string | undefined>(undefined);\n\n /**\n * Message d'erreur affiché en rouge sous le checkbox\n */\n error = input<string | undefined>(undefined);\n\n /**\n * Indique si le champ est requis (affiche astérisque sur label)\n */\n required = input<boolean>(false);\n\n /**\n * État désactivé du checkbox\n */\n disabled = input<boolean>(false);\n\n /**\n * État indéterminé du checkbox (prioritaire sur checked)\n */\n indeterminate = input<boolean>(false);\n\n /**\n * Taille du checkbox (sm, md, lg)\n */\n size = input<CheckboxSize>('md');\n\n /**\n * Nom du contrôle (pour formulaires)\n */\n name = input<string | undefined>(undefined);\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n protected readonly internalValue = signal<boolean>(false);\n\n // Computed properties\n protected readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n protected readonly errorId = computed<string | undefined>(() =>\n this.error() ? `${this.id()}-error` : undefined\n );\n\n protected readonly helperId = computed<string | undefined>(() =>\n this.helper() ? `${this.id()}-helper` : undefined\n );\n\n protected readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.errorId(), this.helperId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n protected readonly hasError = computed<boolean>(() => !!this.error());\n\n // ControlValueAccessor implementation\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.internalValue.set(value ?? false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n protected onCheckedChange(checked: boolean): void {\n if (this.isDisabled()) {\n return;\n }\n this.internalValue.set(checked);\n this.onChange(checked);\n this.onTouched();\n }\n}\n","<div class=\"ds-checkbox\" [class.ds-checkbox--error]=\"hasError()\">\n <primitive-checkbox\n [checkboxId]=\"id()\"\n [checked]=\"internalValue()\"\n [disabled]=\"isDisabled()\"\n [indeterminate]=\"indeterminate()\"\n [size]=\"size()\"\n [label]=\"label()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.name]=\"name()\"\n (checkedChange)=\"onCheckedChange($event)\"\n />\n\n @if (required() && label()) {\n <span class=\"ds-checkbox__required\" aria-hidden=\"true\">*</span>\n }\n\n @if (helper() && !error()) {\n <div\n [id]=\"helperId()\"\n class=\"ds-checkbox__helper\"\n [attr.aria-live]=\"'polite'\"\n >\n {{ helper() }}\n </div>\n }\n\n @if (error()) {\n <div\n [id]=\"errorId()\"\n class=\"ds-checkbox__error\"\n [attr.aria-live]=\"'assertive'\"\n role=\"alert\"\n >\n {{ error() }}\n </div>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Orientations disponibles pour le composant Divider.\n * - **horizontal** : séparateur horizontal (défaut)\n * - **vertical** : séparateur vertical\n */\nexport type DividerOrientation = 'horizontal' | 'vertical';\n\n/**\n * Variantes visuelles disponibles pour le composant Divider.\n * - **solid** : ligne continue (défaut)\n * - **dashed** : ligne en tirets\n * - **dotted** : ligne en pointillés\n */\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted';\n\n/**\n * Tailles disponibles pour le composant Divider (épaisseur).\n */\nexport type DividerSize = 'sm' | 'md' | 'lg';\n\n/**\n * Position du label pour un divider horizontal.\n * - **left** : label aligné à gauche\n * - **center** : label centré (défaut)\n * - **right** : label aligné à droite\n */\nexport type DividerLabelPosition = 'left' | 'center' | 'right';\n\n/**\n * # DsDivider\n *\n * Composant séparateur permettant de diviser visuellement le contenu.\n * Supporte les orientations horizontales et verticales, avec un label optionnel.\n *\n * ## Usage\n *\n * ### Sans label\n * ```html\n * <ds-divider variant=\"solid\" size=\"md\"></ds-divider>\n * ```\n *\n * ### Avec label\n * ```html\n * <ds-divider>Section suivante</ds-divider>\n * ```\n *\n * ### Vertical\n * ```html\n * <ds-divider orientation=\"vertical\"></ds-divider>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"separator\"` pour la sémantique\n * - Attribut `aria-orientation` pour l'orientation\n * - Label accessible pour les lecteurs d'écran\n *\n * @component\n */\n@Component({\n selector: 'ds-divider',\n imports: [CommonModule],\n templateUrl: './ds-divider.html',\n styleUrl: './ds-divider.scss',\n})\nexport class DsDivider {\n /**\n * Orientation du séparateur.\n * @default 'horizontal'\n */\n orientation = input<DividerOrientation>('horizontal');\n\n /**\n * Variante visuelle (solid, dashed, dotted).\n * @default 'solid'\n */\n variant = input<DividerVariant>('solid');\n\n /**\n * Taille (épaisseur) du séparateur.\n * @default 'md'\n */\n size = input<DividerSize>('md');\n\n /**\n * Position du label (uniquement pour horizontal).\n * @default 'center'\n */\n labelPosition = input<DividerLabelPosition>('center');\n\n /**\n * Marge verticale/horizontale autour du divider.\n * @default 'md'\n */\n spacing = input<'none' | 'sm' | 'md' | 'lg'>('md');\n\n /**\n * Classes CSS calculées pour le composant.\n */\n get dividerClasses(): string[] {\n return [\n 'ds-divider',\n `ds-divider--${this.orientation()}`,\n `ds-divider--${this.variant()}`,\n `ds-divider--${this.size()}`,\n `ds-divider--spacing-${this.spacing()}`,\n this.orientation() === 'horizontal' ? `ds-divider--label-${this.labelPosition()}` : '',\n ].filter(Boolean);\n }\n\n /**\n * Vérifie si le composant a du contenu projeté (label).\n */\n get hasLabel(): boolean {\n // La détection du contenu projeté sera gérée dans le template via #content\n return true; // Géré dynamiquement dans le template\n }\n}\n","<div\n [class]=\"dividerClasses.join(' ')\"\n role=\"separator\"\n [attr.aria-orientation]=\"orientation()\"\n>\n @if (orientation() === 'horizontal') {\n <ng-content #content></ng-content>\n }\n</div>\n","// ============================================================================\n// OVERLAY POSITIONS — Design System Assist-AI\n// ============================================================================\n//\n// Ce fichier contient les constantes de positionnement réutilisables pour\n// les overlays CDK Angular (@angular/cdk/overlay).\n//\n// USAGE :\n// - Importer les constantes dans les composants utilisant CdkConnectedOverlay\n// - Utiliser [cdkConnectedOverlayPositions]=\"DROPDOWN_POSITIONS\"\n// - Les positions incluent des fallbacks automatiques\n//\n// RÉFÉRENCES :\n// - Angular CDK Overlay : https://material.angular.io/cdk/overlay\n// - ConnectedPosition : Interface CDK pour positionnement relatif\n//\n// ============================================================================\n\nimport { ConnectedPosition } from '@angular/cdk/overlay';\n\n/**\n * Positions standard pour dropdowns (menus déroulants, select, etc.)\n *\n * Stratégie :\n * 1. Position préférée : centré en dessous (offsetY: 6px pour espacement)\n * 2. Fallback : centré au-dessus si pas d'espace en bas\n * 3. Fallback : aligné à gauche en dessous\n * 4. Fallback : aligné à droite en dessous\n */\nexport const DROPDOWN_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -6,\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n];\n\n/**\n * Positions standard pour tooltips (infobulles)\n *\n * Stratégie :\n * 1. Position préférée : centré au-dessus (offsetY: -8px pour espacement)\n * 2. Fallback : centré en dessous si pas d'espace au-dessus\n * 3. Fallback : à droite (aligné verticalement au centre)\n * 4. Fallback : à gauche (aligné verticalement au centre)\n */\nexport const TOOLTIP_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 8,\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -8,\n },\n];\n\n/**\n * Positions standard pour popovers (menus contextuels, actions panels)\n *\n * Stratégie :\n * 1. Position préférée : aligné à droite, en dessous (offsetY: 4px)\n * 2. Fallback : aligné à gauche, en dessous\n * 3. Fallback : aligné à droite, au-dessus\n * 4. Fallback : aligné à gauche, au-dessus\n * 5. Fallback : à droite (aligné en haut)\n * 6. Fallback : à gauche (aligné en haut)\n */\nexport const POPOVER_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: -4,\n },\n];\n\n/**\n * Positions pour autocomplete (panel de suggestions sous un input)\n *\n * Stratégie :\n * 1. Position préférée : aligné à gauche, pleine largeur, en dessous\n * 2. Fallback : aligné à gauche, pleine largeur, au-dessus\n */\nexport const AUTOCOMPLETE_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n];\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n OnDestroy,\n ViewChild,\n ViewChildren,\n QueryList,\n computed,\n effect,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n PrimitiveButton,\n ButtonVariant,\n ButtonSize,\n ButtonType,\n ButtonAppearance,\n} from '../../primitives/primitive-button/primitive-button';\nimport { DropdownItem } from './model/dropdown-item.model';\nimport { Subscription } from 'rxjs';\nimport { DROPDOWN_POSITIONS } from '../../utils/overlay-positions';\n\n@Component({\n selector: 'ds-dropdown',\n imports: [\n CommonModule,\n PrimitiveButton,\n FaIconComponent,\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ],\n templateUrl: './ds-dropdown.html',\n styleUrl: './ds-dropdown.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsDropdown),\n multi: true,\n },\n ],\n})\nexport class DsDropdown implements ControlValueAccessor, AfterViewInit, OnDestroy {\n // Inputs\n /** Identifiant du menu déroulant pour l'accessibilité. */\n readonly id = input<string>(crypto.randomUUID());\n /** Variante du bouton déclencheur. */\n readonly type = input<ButtonVariant>('primary');\n /** Apparence du bouton déclencheur (plein ou outline). */\n readonly variant = input<ButtonAppearance>('solid');\n /** Taille du bouton déclencheur. */\n readonly size = input<ButtonSize>('md');\n /** Utilise le bouton comme submit dans un formulaire. */\n readonly submit = input<boolean>(false);\n /** Désactive l'interaction du dropdown. */\n readonly disabled = input<boolean>(false);\n /** Affiche l'état de chargement et bloque l'ouverture. */\n readonly loading = input<boolean>(false);\n /** Étend le bouton sur toute la largeur disponible. */\n readonly block = input<boolean>(false);\n /** Icône affichée avant le libellé du bouton. */\n readonly dropdownStartIcon = input<IconDefinition | null>(null);\n /** Icône affichée après le libellé du bouton. */\n readonly dropdownEndIcon = input<IconDefinition | null>(null);\n /** Liste des options proposées dans le menu. */\n readonly dropdownItems = input<DropdownItem[]>([]);\n /** Code de l'option actuellement sélectionnée. */\n readonly selectedItem = input<string | null | undefined>(undefined);\n /** Libellé ARIA alternatif pour le bouton. */\n readonly ariaLabel = input<string | null | undefined>(undefined);\n /** Référence ARIA vers un élément existant décrivant le bouton. */\n readonly ariaLabelledBy = input<string | null | undefined>(undefined);\n /** Ferme le menu automatiquement lors de la sélection. */\n readonly closeOnSelect = input<boolean>(true);\n /** Classes CSS supplémentaires appliquées au panneau. */\n readonly overlayPanelClass = input<string | string[] | undefined>(undefined);\n\n // Outputs\n /** Émis lorsqu'un élément est sélectionné. */\n readonly selectedItemChanged = output<string>();\n /** Émis lors de l'ouverture du menu. */\n readonly opened = output<void>();\n /** Émis lors de la fermeture du menu. */\n readonly closed = output<void>();\n\n // Template refs\n @ViewChild('triggerButton', { read: ElementRef }) triggerButton?: ElementRef<HTMLElement>;\n @ViewChildren('menuItemRef') menuItems?: QueryList<ElementRef<HTMLButtonElement>>;\n\n // Internal state\n private readonly internalValue = signal<string | null>(null);\n private readonly disabledState = signal<boolean>(false);\n private readonly menuOpen = signal<boolean>(false);\n private readonly activeIndex = signal<number>(-1);\n\n private onChange: (value: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n private menuItemsChanges?: Subscription;\n\n constructor() {\n effect(() => {\n const items = this.dropdownItems();\n const current = this.currentValue();\n if (!items.length) {\n this.activeIndex.set(-1);\n return;\n }\n if (!current) {\n this.activeIndex.set(0);\n return;\n }\n const index = items.findIndex(item => item.code === current);\n this.activeIndex.set(index >= 0 ? index : 0);\n });\n\n effect(() => {\n if (this.isMenuOpen()) {\n queueMicrotask(() => this.focusActiveItem());\n }\n });\n\n }\n\n readonly overlayPositions = DROPDOWN_POSITIONS;\n\n // Computed helpers\n readonly isMenuOpen = computed<boolean>(() => this.menuOpen());\n readonly buttonType = computed<ButtonType>(() => (this.submit() ? 'submit' : 'button'));\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState() || this.loading());\n readonly effectiveStartIcon = computed<IconDefinition | null>(() =>\n this.loading() ? null : this.dropdownStartIcon(),\n );\n readonly effectiveEndIcon = computed<IconDefinition | null>(() =>\n this.loading() ? null : this.dropdownEndIcon(),\n );\n readonly overlayPanelClasses = computed<string[]>(() => {\n const base = ['ds-dropdown-panel'];\n const custom = this.overlayPanelClass();\n if (Array.isArray(custom)) {\n base.push(...custom.filter(Boolean) as string[]);\n } else if (typeof custom === 'string' && custom.trim().length) {\n base.push(custom);\n }\n return base;\n });\n\n private readonly currentValue = computed<string | null>(() => {\n const external = this.selectedItem();\n if (external !== undefined) {\n return external;\n }\n return this.internalValue();\n });\n\n readonly activeItem = computed<DropdownItem | undefined>(() => {\n const code = this.currentValue();\n if (!code) {\n return undefined;\n }\n return this.dropdownItems().find(item => item.code === code);\n });\n\n readonly activeDescendantId = computed<string | undefined>(() => {\n const items = this.dropdownItems();\n const index = this.activeIndex();\n if (index < 0 || index >= items.length) {\n return undefined;\n }\n return `${this.id()}-option-${items[index].code}`;\n });\n\n ngAfterViewInit(): void {\n this.menuItemsChanges = this.menuItems?.changes.subscribe(() => {\n if (this.isMenuOpen()) {\n queueMicrotask(() => this.focusActiveItem());\n }\n });\n }\n\n ngOnDestroy(): void {\n this.menuItemsChanges?.unsubscribe();\n }\n\n toggleMenu(): void {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.isMenuOpen()) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n }\n\n closeMenu(refocusTrigger = true): void {\n if (!this.isMenuOpen()) {\n return;\n }\n this.menuOpen.set(false);\n if (refocusTrigger) {\n this.focusTriggerButton();\n }\n this.closed.emit();\n }\n\n onOverlayDetach(): void {\n this.closeMenu();\n }\n\n setSelectedItem(code: string): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.onTouched();\n this.internalValue.set(code);\n this.onChange(code);\n this.selectedItemChanged.emit(code);\n if (this.closeOnSelect()) {\n this.closeMenu();\n }\n }\n\n isItemActive(code: string): boolean {\n return this.currentValue() === code;\n }\n\n getSelectedItem(): DropdownItem | undefined {\n return this.activeItem();\n }\n\n onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isMenuOpen()) {\n this.openMenu();\n } else {\n this.moveActiveIndex(1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isMenuOpen()) {\n this.openMenu();\n } else {\n this.moveActiveIndex(-1);\n }\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (!this.isMenuOpen()) {\n this.openMenu();\n } else {\n this.commitActiveSelection();\n }\n break;\n }\n case 'Escape':\n if (this.isMenuOpen()) {\n event.preventDefault();\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n onMenuKeydown(event: KeyboardEvent, _index: number): void {\n if (!this.isMenuOpen()) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveActiveIndex(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveActiveIndex(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.setActiveIndex(0);\n break;\n case 'End':\n event.preventDefault();\n this.setActiveIndex(this.dropdownItems().length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.commitActiveSelection();\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.closeMenu();\n break;\n case 'Tab':\n this.closeMenu(false);\n break;\n default:\n break;\n }\n }\n\n onMenuMouseEnter(index: number): void {\n if (!this.isMenuOpen()) {\n return;\n }\n this.setActiveIndex(index, false);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string | null): void {\n this.internalValue.set(value ?? null);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n if (isDisabled) {\n this.closeMenu();\n }\n }\n\n private openMenu(): void {\n if (this.isDisabled() || this.isMenuOpen()) {\n return;\n }\n this.menuOpen.set(true);\n this.opened.emit();\n }\n\n private moveActiveIndex(offset: number): void {\n const items = this.dropdownItems();\n if (!items.length) {\n this.activeIndex.set(-1);\n return;\n }\n\n const nextIndex = this.wrapIndex(this.activeIndex() + offset, items.length);\n this.activeIndex.set(nextIndex);\n this.focusActiveItem();\n }\n\n private setActiveIndex(index: number, focus = true): void {\n const items = this.dropdownItems();\n if (!items.length) {\n this.activeIndex.set(-1);\n return;\n }\n\n const nextIndex = Math.min(Math.max(index, 0), items.length - 1);\n this.activeIndex.set(nextIndex);\n if (focus) {\n this.focusActiveItem();\n }\n }\n\n private commitActiveSelection(): void {\n const items = this.dropdownItems();\n const index = this.activeIndex();\n if (index < 0 || index >= items.length) {\n return;\n }\n this.setSelectedItem(items[index].code);\n }\n\n private wrapIndex(index: number, length: number): number {\n if (length === 0) {\n return -1;\n }\n if (index < 0) {\n return length - 1;\n }\n if (index >= length) {\n return 0;\n }\n return index;\n }\n\n private focusActiveItem(): void {\n const element = this.getMenuItemElement(this.activeIndex());\n element?.focus();\n }\n\n private focusTriggerButton(): void {\n const host = this.triggerButton?.nativeElement as HTMLElement | undefined;\n const button = host?.querySelector('button') as HTMLButtonElement | null;\n button?.focus();\n }\n\n private getMenuItemElement(index: number): HTMLButtonElement | null {\n if (!this.menuItems) {\n return null;\n }\n const items = this.menuItems.toArray();\n if (index < 0 || index >= items.length) {\n return null;\n }\n return items[index]?.nativeElement ?? null;\n }\n}\n","<primitive-button\n #triggerOrigin=\"cdkOverlayOrigin\"\n #triggerButton\n cdkOverlayOrigin\n [attr.id]=\"id()\"\n [type]=\"buttonType()\"\n [variant]=\"type()\"\n [appearance]=\"variant()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"isDisabled()\"\n [iconStart]=\"effectiveStartIcon()\"\n [iconEnd]=\"effectiveEndIcon()\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isMenuOpen()\"\n [attr.aria-controls]=\"isMenuOpen() ? id() + '-menu' : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() ?? null\"\n (clicked)=\"toggleMenu()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n @if (loading()) {\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n } @else {\n <ng-content></ng-content>\n }\n</primitive-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"triggerOrigin\"\n [cdkConnectedOverlayOpen]=\"isMenuOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'menu-overlay'\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\n (backdropClick)=\"closeMenu()\"\n (detach)=\"onOverlayDetach()\"\n>\n <div\n class=\"menu-sort-and-group\"\n role=\"menu\"\n [attr.id]=\"id() + '-menu'\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n >\n @for (item of dropdownItems(); track item.code; let index = $index) {\n <button\n #menuItemRef\n type=\"button\"\n class=\"menu-item-content\"\n [class.active]=\"isItemActive(item.code)\"\n [attr.id]=\"id() + '-option-' + item.code\"\n [attr.aria-checked]=\"isItemActive(item.code)\"\n [attr.data-index]=\"index\"\n role=\"menuitemradio\"\n (click)=\"setSelectedItem(item.code)\"\n (keydown)=\"onMenuKeydown($event, index)\"\n (mouseenter)=\"onMenuMouseEnter(index)\"\n >\n @if (item.startIcon) {\n <fa-icon\n [icon]=\"item.startIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n <span>{{ item.label }}</span>\n @if (isItemActive(item.code) && item.endIcon) {\n <fa-icon\n [icon]=\"item.endIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n </button>\n }\n </div>\n</ng-template>\n","import { Component, forwardRef, input, signal, computed, effect } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition, faClose, faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons';\nimport {\n PrimitiveInput,\n InputType,\n InputState,\n InputSize,\n InputAppearance,\n} from '../../primitives/primitive-input/primitive-input';\n\n@Component({\n selector: 'ds-input-field',\n imports: [CommonModule, FormsModule, FaIconComponent, PrimitiveInput],\n templateUrl: './ds-input-field.html',\n styleUrl: './ds-input-field.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsInputField),\n multi: true,\n },\n ],\n})\nexport class DsInputField implements ControlValueAccessor {\n // Props de base\n id = input<string>(crypto.randomUUID());\n label = input<string | undefined>(undefined);\n name = input<string | undefined>(undefined);\n autocomplete = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n placeholder = input<string>('');\n disabled = input<boolean>(false);\n readonly = input<boolean>(false);\n required = input<boolean>(false);\n type = input<InputType>('text');\n size = input<InputSize>('md');\n state = input<InputState>('default');\n variant = input<InputAppearance>('default');\n iconStart = input<IconDefinition | null>(null);\n iconEnd = input<IconDefinition | null>(null);\n externalValue = input<string | null | undefined>(undefined);\n\n // Props DS spécifiques\n error = input<string | undefined>(undefined);\n helper = input<string | undefined>(undefined);\n maxlength = input<number | undefined>(undefined);\n clearable = input<boolean>(false);\n togglePassword = input<boolean>(false);\n\n // Icons\n protected readonly faEye = faEye;\n protected readonly faEyeSlash = faEyeSlash;\n protected readonly faClose = faClose;\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n private readonly hasExternalValue = signal<boolean>(false);\n readonly internalValue = signal<string>('');\n readonly passwordVisible = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n const provided = this.externalValue();\n if (provided === undefined) {\n return;\n }\n if (this.hasExternalValue()) {\n return;\n }\n this.internalValue.set(provided ?? '');\n });\n }\n\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n readonly errorId = computed<string | undefined>(() => (this.error() ? `${this.id()}-error` : undefined));\n readonly helperId = computed<string | undefined>(() => (this.helper() ? `${this.id()}-helper` : undefined));\n readonly counterId = computed<string | undefined>(() => (this.maxlength() ? `${this.id()}-counter` : undefined));\n readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.errorId(), this.helperId(), this.counterId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n readonly inputState = computed<InputState>(() => {\n if (this.error()) {\n return 'error';\n }\n return this.state();\n });\n\n readonly actualType = computed<InputType>(() => {\n const baseType = this.type();\n if (baseType === 'password' && this.passwordVisible()) {\n return 'text';\n }\n return baseType;\n });\n\n readonly showClearButton = computed<boolean>(() => {\n return this.clearable() && !this.isDisabled() && !this.readonly() && this.internalValue().length > 0;\n });\n\n readonly showTogglePassword = computed<boolean>(() => {\n return this.togglePassword() && this.type() === 'password';\n });\n\n readonly characterCount = computed<number>(() => this.internalValue().length);\n\n // ControlValueAccessor\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.hasExternalValue.set(true);\n this.internalValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n onPrimitiveValueChange(newValue: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set(newValue);\n this.onChange(newValue);\n }\n\n onInputBlur(): void {\n this.onTouched();\n }\n\n clearValue(): void {\n if (!this.showClearButton()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set('');\n this.onChange('');\n this.onTouched();\n }\n\n togglePasswordVisibility(): void {\n if (this.isDisabled()) {\n return;\n }\n this.passwordVisible.update(v => !v);\n }\n}\n","<div\n class=\"ds-input-field\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"input-container\">\n <primitive-input\n [id]=\"id()\"\n [name]=\"name()\"\n [autocomplete]=\"autocomplete()\"\n [ariaLabel]=\"ariaLabel()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n [maxlength]=\"maxlength()\"\n [placeholder]=\"placeholder()\"\n [type]=\"actualType()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [value]=\"internalValue()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-input>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear input\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n\n @if (showTogglePassword()) {\n <button\n type=\"button\"\n class=\"icon-btn toggle\"\n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"passwordVisible() ? 'Hide password' : 'Show password'\">\n <fa-icon [icon]=\"passwordVisible() ? faEyeSlash : faEye\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"errorId()\" role=\"alert\">\n {{ error() }}\n </p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"helperId()\">\n {{ helper() }}\n </p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"counterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n OnDestroy,\n ViewChild,\n forwardRef,\n input,\n computed,\n signal,\n effect,\n output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition, faClose } from '@fortawesome/free-solid-svg-icons';\nimport {\n PrimitiveTextarea,\n TextareaAppearance,\n TextareaResize,\n TextareaSize,\n TextareaState,\n} from '../../primitives/primitive-textarea/primitive-textarea';\n\ntype WindowWithResizeObserver = typeof window & { ['ResizeObserver']?: typeof globalThis.ResizeObserver };\n\n@Component({\n selector: 'ds-input-textarea',\n imports: [CommonModule, PrimitiveTextarea, FaIconComponent],\n templateUrl: './ds-input-textarea.html',\n styleUrl: './ds-input-textarea.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsInputTextarea),\n multi: true,\n },\n ],\n})\nexport class DsInputTextarea implements ControlValueAccessor, AfterViewInit, OnDestroy {\n // Base inputs\n id = input<string>(crypto.randomUUID());\n name = input<string | undefined>(undefined);\n label = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n placeholder = input<string>('');\n disabled = input<boolean>(false);\n readonly = input<boolean>(false);\n required = input<boolean>(false);\n state = input<TextareaState>('default');\n size = input<TextareaSize>('md');\n variant = input<TextareaAppearance>('default');\n rows = input<number | undefined>(undefined);\n cols = input<number | undefined>(undefined);\n resize = input<TextareaResize>('vertical');\n resizeAuto = input<number | undefined>(undefined);\n maxlength = input<number | undefined>(undefined);\n helper = input<string | undefined>(undefined);\n error = input<string | undefined>(undefined);\n iconStart = input<IconDefinition | null>(null);\n iconEnd = input<IconDefinition | null>(null);\n clearable = input<boolean>(false);\n externalValue = input<string | null | undefined>(undefined);\n\n // Signals\n private readonly disabledState = signal<boolean>(false);\n private readonly hasExternalValue = signal<boolean>(false);\n readonly internalValue = signal<string>('');\n readonly valueChange = output<string>();\n\n readonly arErrorId = computed<string | undefined>(() => (this.error() ? `${this.id()}-error` : undefined));\n readonly arHelperId = computed<string | undefined>(() => (this.helper() ? `${this.id()}-helper` : undefined));\n readonly arCounterId = computed<string | undefined>(() => (this.maxlength() ? `${this.id()}-counter` : undefined));\n readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.arErrorId(), this.arHelperId(), this.arCounterId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n readonly inputState = computed<TextareaState>(() => {\n if (this.error()) {\n return 'error';\n }\n return this.state();\n });\n\n readonly showClearButton = computed<boolean>(() =>\n this.clearable() && !this.isDisabled() && !this.readonly() && this.internalValue().length > 0,\n );\n\n readonly textareaResize = computed<TextareaResize>(() => (this.resizeAuto() ? 'none' : this.resize()));\n readonly characterCount = computed<number>(() => this.internalValue().length);\n\n protected readonly faClose = faClose;\n\n @ViewChild('textareaHost', { read: ElementRef }) textareaHost?: ElementRef<HTMLElement>;\n private resizeHandle: number | null = null;\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n effect(() => {\n const provided = this.externalValue();\n if (provided === undefined) {\n return;\n }\n if (this.hasExternalValue()) {\n return;\n }\n this.internalValue.set(provided ?? '');\n });\n\n effect(() => {\n this.internalValue();\n if (this.resizeAuto()) {\n queueMicrotask(() => this.scheduleAutoResize());\n }\n });\n }\n\n ngAfterViewInit(): void {\n if (this.resizeAuto()) {\n this.scheduleAutoResize();\n this.setupResizeObserver();\n }\n }\n\n ngOnDestroy(): void {\n if (this.resizeHandle && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.resizeHandle);\n }\n this.resizeObserver?.disconnect();\n }\n\n // ControlValueAccessor\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.hasExternalValue.set(true);\n this.internalValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n onPrimitiveValueChange(newValue: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set(newValue);\n this.onChange(newValue);\n this.valueChange.emit(newValue);\n }\n\n onInputBlur(): void {\n this.onTouched();\n }\n\n clearValue(): void {\n if (!this.showClearButton()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set('');\n this.onChange('');\n this.valueChange.emit('');\n this.onTouched();\n }\n\n private setupResizeObserver(): void {\n if (!this.resizeAuto() || typeof window === 'undefined') {\n return;\n }\n const resizeObserverCtor = (window as WindowWithResizeObserver).ResizeObserver;\n if (typeof resizeObserverCtor !== 'function') {\n return;\n }\n this.resizeObserver?.disconnect();\n const host = this.textareaHost?.nativeElement;\n if (!host) {\n return;\n }\n this.resizeObserver = new resizeObserverCtor(() => this.scheduleAutoResize());\n this.resizeObserver?.observe(host);\n }\n\n private scheduleAutoResize(): void {\n if (!this.resizeAuto()) {\n return;\n }\n if (typeof requestAnimationFrame !== 'function') {\n this.performAutoResize();\n return;\n }\n if (this.resizeHandle && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.resizeHandle);\n }\n this.resizeHandle = requestAnimationFrame(() => this.performAutoResize());\n }\n\n private performAutoResize(): void {\n const host = this.textareaHost?.nativeElement;\n if (!host) {\n return;\n }\n const textarea = host.querySelector('textarea');\n if (!textarea) {\n return;\n }\n\n const element = textarea as HTMLTextAreaElement;\n element.style.height = 'auto';\n let nextHeight = element.scrollHeight;\n const maxHeight = this.resizeAuto();\n if (typeof maxHeight === 'number' && maxHeight > 0) {\n nextHeight = Math.min(nextHeight, maxHeight);\n }\n element.style.height = `${nextHeight}px`;\n }\n}\n","<div\n class=\"ds-input-textarea\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"textarea-container\">\n <primitive-textarea\n #textareaHost\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [rows]=\"rows()\"\n [cols]=\"cols()\"\n [maxlength]=\"maxlength()\"\n [resize]=\"textareaResize()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [ariaLabel]=\"ariaLabel()\"\n [value]=\"internalValue()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-textarea>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear textarea\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"arErrorId()\" role=\"alert\">{{ error() }}</p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"arHelperId()\">{{ helper() }}</p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"arCounterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n","import {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n OnDestroy,\n Output,\n ViewChild,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {NgClass} from '@angular/common';\nimport {IconDefinition, faCheckCircle, faExclamationTriangle, faInfoCircle, faTimesCircle} from '@fortawesome/free-solid-svg-icons';\nimport {FaIconComponent} from '@fortawesome/angular-fontawesome';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {PrimitiveButton} from '../../primitives/primitive-button/primitive-button';\nimport {DOCUMENT} from '@angular/common';\n\n@Component({\n selector: 'ds-modal',\n imports: [\n NgClass,\n FaIconComponent,\n PrimitiveButton\n ],\n templateUrl: './ds-modal.component.html',\n styleUrl: './ds-modal.component.scss'\n})\nexport class DsModalComponent implements AfterContentInit, AfterViewInit, OnDestroy {\n open = input<boolean>(false);\n title = input<string>('');\n closable = input<boolean>(true);\n closeOnBackdrop = input<boolean>(true);\n showIcon = input<boolean>(false);\n type = input<'success' | 'warning' | 'error' | 'info' | null>(null);\n size = input<'sm' | 'md' | 'lg'>('md');\n\n @Output() opened = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n\n @ContentChild('icon') projectedIcon: ElementRef | undefined;\n @ViewChild('modalContainer') modalContainer?: ElementRef<HTMLElement>;\n\n private readonly hasProjectedIcon = signal<boolean>(false);\n private readonly viewReady = signal<boolean>(false);\n private focusTrap: FocusTrap | null = null;\n private readonly documentRef = inject(DOCUMENT);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n\n readonly modalClasses = computed(() => {\n const classes: string[] = [];\n const currentType = this.type();\n if (currentType) {\n classes.push(`modal-${currentType}`);\n }\n classes.push(`modal-${this.size()}`);\n return classes;\n });\n\n @ViewChild('closeButton', { read: ElementRef }) closeButton?: ElementRef<HTMLElement>;\n\n readonly resolvedIcon = computed<IconDefinition | null>(() => {\n switch (this.type()) {\n case 'success':\n return faCheckCircle;\n case 'warning':\n return faExclamationTriangle;\n case 'error':\n return faTimesCircle;\n case 'info':\n return faInfoCircle;\n default:\n return null;\n }\n });\n\n readonly shouldRenderDefaultIcon = computed(() => this.showIcon() && !this.hasProjectedIcon() && !!this.resolvedIcon());\n readonly shouldRenderOverlay = computed(() => this.open());\n\n private readonly modalBaseId = crypto.randomUUID();\n readonly modalTitleId = `${this.modalBaseId}-title`;\n readonly modalDescId = `${this.modalBaseId}-desc`;\n\n readonly isScrolled = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n if (!this.viewReady()) {\n return;\n }\n if (this.open()) {\n this.attachFocusTrap();\n queueMicrotask(() => this.focusInitialElement());\n } else {\n this.destroyFocusTrap();\n }\n });\n\n effect(() => {\n if (this.open()) {\n this.opened.emit();\n this.lockBodyScroll();\n } else {\n this.unlockBodyScroll();\n }\n });\n }\n\n ngAfterContentInit(): void {\n this.hasProjectedIcon.set(!!this.projectedIcon);\n }\n\n ngAfterViewInit(): void {\n this.viewReady.set(true);\n if (this.open()) {\n this.attachFocusTrap();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyFocusTrap();\n this.unlockBodyScroll();\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n handleEscape(event: Event): void {\n if (this.open() && this.closable()) {\n event.preventDefault();\n this.close();\n }\n }\n\n close(): void {\n if (this.closable()) {\n this.closed.emit();\n }\n }\n\n onBackdropClick(): void {\n if (!this.open() || !this.closeOnBackdrop()) {\n return;\n }\n this.close();\n }\n\n onScroll(event: Event): void {\n const target = event.target as HTMLElement;\n this.isScrolled.set(target.scrollHeight > target.clientHeight &&\n target.scrollTop + target.clientHeight < target.scrollHeight);\n }\n\n private attachFocusTrap(): void {\n if (!this.modalContainer) {\n return;\n }\n this.focusTrap?.destroy();\n this.focusTrap = this.focusTrapFactory.create(this.modalContainer.nativeElement);\n this.focusTrap.focusInitialElementWhenReady().catch(() => { /* aucun élément focusable */ });\n }\n\n private destroyFocusTrap(): void {\n this.focusTrap?.destroy();\n this.focusTrap = null;\n }\n\n private focusInitialElement(): void {\n if (!this.open() || !this.closable() || !this.closeButton) {\n return;\n }\n const element = this.closeButton.nativeElement;\n queueMicrotask(() => element.focus());\n }\n\n private lockBodyScroll(): void {\n const body = this.documentRef?.body;\n if (!body) {\n return;\n }\n body.classList.add('modal-open');\n }\n\n private unlockBodyScroll(): void {\n const body = this.documentRef?.body;\n if (!body) {\n return;\n }\n body.classList.remove('modal-open');\n }\n}\n","@if (shouldRenderOverlay()) {\n <div class=\"overlay\" role=\"presentation\" (click)=\"onBackdropClick()\"></div>\n}\n@if (open()) {\n <div #modalContainer\n class=\"modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"modalTitleId\"\n [attr.aria-describedby]=\"modalDescId\"\n [ngClass]=\"modalClasses()\"\n >\n <header class=\"modal-header\">\n @if (showIcon()) {\n <div class=\"modal-icon\">\n <ng-content select=\"[icon]\"></ng-content>\n @if (shouldRenderDefaultIcon() && resolvedIcon()) {\n <fa-icon [icon]=\"resolvedIcon()!\"></fa-icon>\n }\n </div>\n }\n <h3 [id]=\"modalTitleId\">{{ title() }}</h3>\n @if (closable()) {\n <primitive-button\n #closeButton\n class=\"close-btn\"\n variant=\"ghost\"\n appearance=\"outline\"\n size=\"sm\"\n (clicked)=\"close()\"\n aria-label=\"Fermer la fenêtre\"\n >✕</primitive-button>\n }\n </header>\n <div class=\"modal-content\" (scroll)=\"onScroll($event)\">\n <section [id]=\"modalDescId\"><ng-content></ng-content></section>\n </div>\n <footer class=\"modal-footer\" [class.with-shadow]=\"isScrolled()\">\n <ng-content select=\"[footer]\"></ng-content>\n </footer>\n </div>\n}\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ds-popover',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ds-popover\" role=\"dialog\" [attr.aria-label]=\"ariaLabel()\">\n @if (header()) {\n <div class=\"ds-popover__header\">\n <span class=\"ds-popover__header-title\">{{ header() }}</span>\n @if (closeable()) {\n <button\n type=\"button\"\n class=\"ds-popover__close\"\n (click)=\"close.emit()\"\n aria-label=\"Fermer\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n\n <div class=\"ds-popover__body\">\n <ng-content></ng-content>\n </div>\n\n @if (footer()) {\n <div class=\"ds-popover__footer\">\n {{ footer() }}\n </div>\n }\n </div>\n `,\n styleUrl: './ds-popover.component.scss',\n})\nexport class DsPopoverComponent {\n header = input<string | undefined>(undefined);\n footer = input<string | undefined>(undefined);\n closeable = input<boolean>(true);\n ariaLabel = input<string>('Popover');\n\n close = output<void>();\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnDestroy,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Overlay, OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { POPOVER_POSITIONS } from '../../utils/overlay-positions';\n\nexport type PopoverTrigger = 'click' | 'hover';\n\n@Directive({\n selector: '[dsPopover]',\n standalone: true,\n})\nexport class DsPopover implements OnDestroy {\n dsPopover = input.required<TemplateRef<unknown>>();\n dsPopoverTrigger = input<PopoverTrigger>('click');\n dsPopoverCloseOnBackdrop = input<boolean>(true);\n\n private overlayRef: OverlayRef | null = null;\n private isOpen = false;\n\n constructor(\n private elementRef: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (this.dsPopoverTrigger() === 'click') {\n event.stopPropagation();\n this.toggle();\n }\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.dsPopoverTrigger() === 'hover') {\n this.open();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.dsPopoverTrigger() === 'hover') {\n setTimeout(() => this.close(), 150);\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.isOpen) {\n this.close();\n }\n }\n\n private toggle(): void {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private open(): void {\n if (this.isOpen || !this.dsPopover()) return;\n\n this.overlayRef = this.createOverlay();\n\n const portal = new TemplatePortal(this.dsPopover(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n this.isOpen = true;\n\n if (this.dsPopoverCloseOnBackdrop()) {\n this.overlayRef.backdropClick().subscribe(() => this.close());\n }\n }\n\n private close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.isOpen = false;\n }\n\n private createOverlay(): OverlayRef {\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(POPOVER_POSITIONS as ConnectedPosition[]);\n\n const scrollStrategy = this.overlay.scrollStrategies.reposition();\n\n return this.overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: this.dsPopoverCloseOnBackdrop(),\n backdropClass: 'ds-popover-backdrop',\n panelClass: 'ds-popover-overlay',\n });\n }\n\n ngOnDestroy(): void {\n this.close();\n }\n}\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Variants de couleur pour la barre de progression.\n */\nexport type ProgressBarVariant = 'default' | 'success' | 'warning' | 'error';\n\n/**\n * Tailles disponibles pour la barre de progression.\n */\nexport type ProgressBarSize = 'sm' | 'md' | 'lg';\n\n/**\n * Mode de la barre de progression.\n */\nexport type ProgressBarMode = 'determinate' | 'indeterminate';\n\n/**\n * # DsProgressBar\n *\n * Composant de barre de progression pour indiquer la progression d'une tâche\n * ou l'état de chargement d'une opération.\n *\n * ## Usage\n *\n * ```html\n * <!-- Mode déterminé -->\n * <ds-progress-bar\n * [value]=\"75\"\n * variant=\"success\"\n * size=\"md\">\n * </ds-progress-bar>\n *\n * <!-- Mode indéterminé -->\n * <ds-progress-bar\n * mode=\"indeterminate\"\n * variant=\"primary\">\n * </ds-progress-bar>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"progressbar\"` avec `aria-valuenow`, `aria-valuemin`, `aria-valuemax`\n * - Label accessible via `aria-label` ou contenu texte\n *\n * @component\n */\n@Component({\n selector: 'ds-progress-bar',\n imports: [CommonModule],\n templateUrl: './ds-progress-bar.html',\n styleUrl: './ds-progress-bar.scss',\n})\nexport class DsProgressBar {\n /**\n * Valeur de progression (0-100).\n * @default 0\n */\n value = input<number>(0);\n\n /**\n * Variant de couleur.\n * @default 'default'\n */\n variant = input<ProgressBarVariant>('default');\n\n /**\n * Taille de la barre.\n * @default 'md'\n */\n size = input<ProgressBarSize>('md');\n\n /**\n * Mode de progression (déterminé ou indéterminé).\n * @default 'determinate'\n */\n mode = input<ProgressBarMode>('determinate');\n\n /**\n * Afficher le pourcentage en texte.\n * @default false\n */\n showLabel = input<boolean>(false);\n\n /**\n * Label accessible pour les lecteurs d'écran.\n */\n ariaLabel = input<string>('');\n\n /**\n * Valeur normalisée (0-100) (public pour tests).\n */\n readonly normalizedValue = computed(() => {\n const val = this.value();\n return Math.max(0, Math.min(100, val));\n });\n\n /**\n * Classes CSS calculées pour le conteneur (public pour tests).\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-progress-bar',\n `ds-progress-bar--${this.variant()}`,\n `ds-progress-bar--${this.size()}`,\n this.mode() === 'indeterminate' ? 'ds-progress-bar--indeterminate' : '',\n ].filter(Boolean);\n });\n\n /**\n * Style inline pour la progression (public pour tests).\n */\n readonly progressStyle = computed(() => {\n if (this.mode() === 'indeterminate') {\n return {};\n }\n return {\n width: `${this.normalizedValue()}%`\n };\n });\n\n /**\n * Label ARIA dynamique (public pour tests).\n */\n readonly ariaLabelText = computed(() => {\n if (this.ariaLabel()) {\n return this.ariaLabel();\n }\n if (this.mode() === 'indeterminate') {\n return 'Chargement en cours';\n }\n return `Progression : ${this.normalizedValue()}%`;\n });\n}\n","<div\n [ngClass]=\"containerClasses()\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabelText()\"\n [attr.aria-valuenow]=\"mode() === 'determinate' ? normalizedValue() : null\"\n [attr.aria-valuemin]=\"mode() === 'determinate' ? 0 : null\"\n [attr.aria-valuemax]=\"mode() === 'determinate' ? 100 : null\">\n\n <div class=\"ds-progress-bar__track\">\n <div\n class=\"ds-progress-bar__fill\"\n [ngStyle]=\"progressStyle()\">\n </div>\n </div>\n\n @if (showLabel() && mode() === 'determinate') {\n <span class=\"ds-progress-bar__label\">{{ normalizedValue() }}%</span>\n }\n</div>\n","import { Component, forwardRef, input, signal, computed } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { PrimitiveRadio, RadioSize } from '../../primitives/primitive-radio/primitive-radio';\n\n/**\n * Option pour un groupe de radios\n */\nexport interface RadioOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\n/**\n * Layout du groupe de radios\n */\nexport type RadioGroupLayout = 'vertical' | 'horizontal';\n\n/**\n * DS Radio Group\n *\n * Composant groupe de radios du design system avec ControlValueAccessor pour formulaires réactifs.\n * Génère des primitive-radio pour chaque option avec gestion exclusive de la sélection.\n *\n * @example\n * // Formulaire réactif\n * <ds-radio-group\n * formControlName=\"plan\"\n * label=\"Choisissez votre forfait\"\n * [options]=\"planOptions\"\n * layout=\"vertical\"\n * [required]=\"true\"\n * />\n *\n * @example\n * // Template-driven\n * <ds-radio-group\n * [(ngModel)]=\"selectedPlan\"\n * label=\"Forfait\"\n * [options]=\"[\n * { label: 'Gratuit', value: 'free' },\n * { label: 'Pro', value: 'pro' },\n * { label: 'Enterprise', value: 'enterprise' }\n * ]\"\n * />\n */\n@Component({\n selector: 'ds-radio-group',\n standalone: true,\n imports: [CommonModule, PrimitiveRadio],\n templateUrl: './ds-radio-group.html',\n styleUrl: './ds-radio-group.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsRadioGroup),\n multi: true,\n },\n ],\n})\nexport class DsRadioGroup implements ControlValueAccessor {\n /**\n * ID unique du radio group (généré automatiquement)\n */\n id = input<string>(`ds-radio-group-${crypto.randomUUID()}`);\n\n /**\n * Label principal du groupe\n */\n label = input<string>('');\n\n /**\n * Options du groupe de radios\n */\n options = input<RadioOption[]>([]);\n\n /**\n * Texte d'aide affiché sous le groupe\n */\n helper = input<string | undefined>(undefined);\n\n /**\n * Message d'erreur affiché en rouge sous le groupe\n */\n error = input<string | undefined>(undefined);\n\n /**\n * Indique si le champ est requis (affiche astérisque sur label)\n */\n required = input<boolean>(false);\n\n /**\n * État désactivé du groupe (désactive toutes les options)\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille des radios (sm, md, lg)\n */\n size = input<RadioSize>('md');\n\n /**\n * Layout du groupe (vertical, horizontal)\n */\n layout = input<RadioGroupLayout>('vertical');\n\n /**\n * Nom du groupe (pour formulaires, généré automatiquement)\n */\n name = input<string>(`radio-group-${crypto.randomUUID()}`);\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n protected readonly internalValue = signal<string | null>(null);\n\n // Computed properties\n protected readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n protected readonly errorId = computed<string | undefined>(() =>\n this.error() ? `${this.id()}-error` : undefined\n );\n\n protected readonly helperId = computed<string | undefined>(() =>\n this.helper() ? `${this.id()}-helper` : undefined\n );\n\n protected readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.errorId(), this.helperId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n protected readonly hasError = computed<boolean>(() => !!this.error());\n\n /**\n * Vérifie si une option est sélectionnée\n */\n protected isOptionSelected(value: string): boolean {\n return this.internalValue() === value;\n }\n\n /**\n * Vérifie si une option est désactivée\n */\n protected isOptionDisabled(option: RadioOption): boolean {\n return this.isDisabled() || !!option.disabled;\n }\n\n // ControlValueAccessor implementation\n private onChange: (value: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n protected onRadioChange(value: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.internalValue.set(value);\n this.onChange(value);\n this.onTouched();\n }\n\n // Track function for @for\n protected trackByValue(_index: number, option: RadioOption): string {\n return option.value;\n }\n}\n","<div\n class=\"ds-radio-group\"\n [class.ds-radio-group--error]=\"hasError()\"\n [class.ds-radio-group--horizontal]=\"layout() === 'horizontal'\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"label() ? id() + '-label' : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n>\n @if (label()) {\n <div [id]=\"id() + '-label'\" class=\"ds-radio-group__label\">\n {{ label() }}\n @if (required()) {\n <span class=\"ds-radio-group__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n }\n\n <div class=\"ds-radio-group__options\">\n @for (option of options(); track trackByValue($index, option)) {\n <primitive-radio\n [name]=\"name()\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n [checked]=\"isOptionSelected(option.value)\"\n [disabled]=\"isOptionDisabled(option)\"\n [size]=\"size()\"\n (checkedChange)=\"onRadioChange(option.value)\"\n />\n }\n </div>\n\n @if (helper() && !error()) {\n <div\n [id]=\"helperId()\"\n class=\"ds-radio-group__helper\"\n [attr.aria-live]=\"'polite'\"\n >\n {{ helper() }}\n </div>\n }\n\n @if (error()) {\n <div\n [id]=\"errorId()\"\n class=\"ds-radio-group__error\"\n [attr.aria-live]=\"'assertive'\"\n role=\"alert\"\n >\n {{ error() }}\n </div>\n }\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Variants de skeleton disponibles.\n */\nexport type SkeletonVariant = 'text' | 'circle' | 'rectangle' | 'card';\n\n/**\n * Tailles pour les variants circle et rectangle.\n */\nexport type SkeletonSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsSkeleton\n *\n * Composant de placeholder skeleton pour indiquer le chargement de contenu.\n * Utilisé pour améliorer l'expérience utilisateur pendant le chargement des données.\n *\n * ## Usage\n *\n * ```html\n * <!-- Texte skeleton -->\n * <ds-skeleton variant=\"text\" [lines]=\"3\"></ds-skeleton>\n *\n * <!-- Avatar circle -->\n * <ds-skeleton variant=\"circle\" size=\"lg\"></ds-skeleton>\n *\n * <!-- Image rectangle -->\n * <ds-skeleton variant=\"rectangle\" [width]=\"'300px'\" [height]=\"'200px'\"></ds-skeleton>\n *\n * <!-- Card skeleton -->\n * <ds-skeleton variant=\"card\"></ds-skeleton>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `aria-busy=\"true\"` et `aria-live=\"polite\"` pour indiquer le chargement\n * - Label accessible via `aria-label`\n *\n * @component\n */\n@Component({\n selector: 'ds-skeleton',\n imports: [CommonModule],\n templateUrl: './ds-skeleton.html',\n styleUrl: './ds-skeleton.scss',\n})\nexport class DsSkeleton {\n /**\n * Type de skeleton.\n * @default 'text'\n */\n variant = input<SkeletonVariant>('text');\n\n /**\n * Taille (pour circle et rectangle).\n * @default 'md'\n */\n size = input<SkeletonSize>('md');\n\n /**\n * Nombre de lignes (pour text).\n * @default 1\n */\n lines = input<number>(1);\n\n /**\n * Largeur personnalisée.\n */\n width = input<string>('');\n\n /**\n * Hauteur personnalisée.\n */\n height = input<string>('');\n\n /**\n * Désactiver l'animation pulse.\n * @default false\n */\n noAnimation = input<boolean>(false);\n\n /**\n * Label accessible pour les lecteurs d'écran.\n * @default 'Chargement en cours...'\n */\n ariaLabel = input<string>('Chargement en cours...');\n\n /**\n * Classes CSS calculées pour le skeleton (public pour tests).\n */\n readonly skeletonClasses = computed(() => {\n const classes = [\n 'ds-skeleton',\n `ds-skeleton--${this.variant()}`,\n ];\n\n if (this.variant() === 'circle' || this.variant() === 'rectangle') {\n classes.push(`ds-skeleton--${this.size()}`);\n }\n\n if (!this.noAnimation()) {\n classes.push('ds-skeleton--animated');\n }\n\n return classes.filter(Boolean);\n });\n\n /**\n * Style inline personnalisé (public pour tests).\n */\n readonly customStyle = computed(() => {\n const style: any = {};\n\n if (this.width()) {\n style.width = this.width();\n }\n\n if (this.height()) {\n style.height = this.height();\n }\n\n return style;\n });\n\n /**\n * Génère un tableau pour les lignes de texte (public pour tests).\n */\n readonly textLines = computed(() => {\n return Array.from({ length: this.lines() }, (_, i) => i);\n });\n}\n","@if (variant() === 'text') {\n <div\n class=\"ds-skeleton-text-container\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"true\"\n role=\"status\">\n @for (line of textLines(); track line) {\n <div\n [ngClass]=\"skeletonClasses()\"\n [ngStyle]=\"customStyle()\">\n </div>\n }\n </div>\n} @else if (variant() === 'card') {\n <div\n class=\"ds-skeleton-card ds-skeleton--card\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"true\"\n role=\"status\">\n <!-- Header avec avatar et lignes -->\n <div class=\"ds-skeleton-card__header\">\n <div class=\"ds-skeleton ds-skeleton--circle ds-skeleton--sm\" [class.ds-skeleton--animated]=\"!noAnimation()\"></div>\n <div class=\"ds-skeleton-card__header-lines\">\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 60%;\"></div>\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 40%;\"></div>\n </div>\n </div>\n\n <!-- Image principale -->\n <div class=\"ds-skeleton ds-skeleton--rectangle\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"height: 200px; width: 100%;\"></div>\n\n <!-- Lignes de contenu -->\n <div class=\"ds-skeleton-card__content\">\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\"></div>\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 90%;\"></div>\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 70%;\"></div>\n </div>\n </div>\n} @else {\n <div\n [ngClass]=\"skeletonClasses()\"\n [ngStyle]=\"customStyle()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"true\"\n role=\"status\">\n </div>\n}\n","import { Component, computed, input, output, signal, HostListener } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface TabItem {\n id: string;\n label: string;\n disabled?: boolean;\n icon?: string;\n}\n\n@Component({\n selector: 'ds-tabs',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-tabs.html',\n styleUrl: './ds-tabs.scss',\n})\nexport class DsTabs {\n tabs = input.required<TabItem[]>();\n activeTabId = input<string | undefined>(undefined);\n\n tabChanged = output<TabItem>();\n\n protected readonly internalActiveIndex = signal<number>(0);\n\n /**\n * Index de l'onglet actif (computed signal basé sur activeTabId ou internalActiveIndex)\n * Exposé en public pour permettre la vérification dans les tests et pour les consommateurs\n */\n readonly activeIndex = computed<number>(() => {\n const activeId = this.activeTabId();\n if (activeId) {\n const index = this.tabs().findIndex((tab) => tab.id === activeId);\n return index !== -1 ? index : 0;\n }\n return this.internalActiveIndex();\n });\n\n protected readonly activeTab = computed<TabItem>(() => {\n return this.tabs()[this.activeIndex()] || this.tabs()[0];\n });\n\n protected selectTab(tab: TabItem, index: number): void {\n if (tab.disabled) return;\n\n this.internalActiveIndex.set(index);\n this.tabChanged.emit(tab);\n }\n\n protected isTabActive(index: number): boolean {\n return this.activeIndex() === index;\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (target.getAttribute('role') !== 'tab') return;\n\n const currentIndex = this.activeIndex();\n const tabsArray = this.tabs();\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = this.findPreviousEnabledTab(currentIndex);\n break;\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = this.findNextEnabledTab(currentIndex);\n break;\n case 'Home':\n event.preventDefault();\n nextIndex = this.findNextEnabledTab(-1);\n break;\n case 'End':\n event.preventDefault();\n nextIndex = this.findPreviousEnabledTab(tabsArray.length);\n break;\n default:\n return;\n }\n\n if (nextIndex !== currentIndex) {\n this.selectTab(tabsArray[nextIndex], nextIndex);\n this.focusTab(nextIndex);\n }\n }\n\n private findNextEnabledTab(startIndex: number): number {\n const tabsArray = this.tabs();\n for (let i = startIndex + 1; i < tabsArray.length; i++) {\n if (!tabsArray[i].disabled) return i;\n }\n return startIndex === -1 ? 0 : startIndex;\n }\n\n private findPreviousEnabledTab(startIndex: number): number {\n const tabsArray = this.tabs();\n for (let i = startIndex - 1; i >= 0; i--) {\n if (!tabsArray[i].disabled) return i;\n }\n return startIndex === tabsArray.length ? tabsArray.length - 1 : startIndex;\n }\n\n private focusTab(index: number): void {\n setTimeout(() => {\n const tabButton = document.querySelector(\n `.ds-tabs__tab[data-index=\"${index}\"]`\n ) as HTMLElement;\n tabButton?.focus();\n }, 0);\n }\n\n protected trackByTabId(index: number, tab: TabItem): string {\n return tab.id;\n }\n}\n","<div class=\"ds-tabs\">\n <div class=\"ds-tabs__header\" role=\"tablist\">\n @for (tab of tabs(); track trackByTabId($index, tab)) {\n <button\n type=\"button\"\n class=\"ds-tabs__tab\"\n [class.ds-tabs__tab--active]=\"isTabActive($index)\"\n [class.ds-tabs__tab--disabled]=\"tab.disabled\"\n [attr.role]=\"'tab'\"\n [attr.aria-selected]=\"isTabActive($index)\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [attr.id]=\"'tab-' + tab.id\"\n [attr.tabindex]=\"isTabActive($index) ? 0 : -1\"\n [attr.data-index]=\"$index\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab, $index)\"\n >\n @if (tab.icon) {\n <i [class]=\"tab.icon\" class=\"ds-tabs__icon\"></i>\n }\n <span class=\"ds-tabs__label\">{{ tab.label }}</span>\n </button>\n }\n <div\n class=\"ds-tabs__indicator\"\n [style.transform]=\"'translateX(' + activeIndex() * 100 + '%)'\"\n [style.width]=\"'calc(100% / ' + tabs().length + ')'\"\n ></div>\n </div>\n\n <div class=\"ds-tabs__content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import {CommonModule} from '@angular/common';\nimport {Component, DestroyRef, computed, effect, inject, input, output, signal} from '@angular/core';\nimport {FaIconComponent} from '@fortawesome/angular-fontawesome';\nimport {IconDefinition, faCircleCheck, faCircleExclamation, faCircleInfo, faCircleXmark, faClose} from '@fortawesome/free-solid-svg-icons';\nimport {ToastPosition, ToastType} from './ds-toast.service';\n\n@Component({\n selector: 'ds-toast',\n standalone: true,\n imports: [CommonModule, FaIconComponent],\n templateUrl: './ds-toast.component.html',\n styleUrl: './ds-toast.component.scss'\n})\nexport class DsToastComponent {\n message = input.required<string>();\n type = input<ToastType>('info');\n duration = input<number>(3000);\n closable = input<boolean>(true);\n position = input<ToastPosition>('top-right');\n actionLabel = input<string | undefined>(undefined);\n pauseOnHover = input<boolean>(true);\n\n readonly closed = output<void>();\n readonly action = output<void>();\n\n private readonly destroyRef = inject(DestroyRef);\n private timerHandle: ReturnType<typeof setTimeout> | null = null;\n private readonly isPaused = signal<boolean>(false);\n\n private readonly icons: Record<ToastType, IconDefinition> = {\n success: faCircleCheck,\n warning: faCircleExclamation,\n error: faCircleXmark,\n info: faCircleInfo,\n };\n\n readonly currentIcon = computed(() => this.icons[this.type()]);\n\n private readonly autoDismissEffect = effect(() => {\n const duration = this.duration();\n const paused = this.isPaused();\n this.clearTimer();\n if (duration <= 0 || paused) {\n return;\n }\n this.timerHandle = setTimeout(() => this.close(), duration);\n });\n\n constructor() {\n this.destroyRef.onDestroy(() => this.clearTimer());\n }\n\n close(): void {\n this.clearTimer();\n this.closed.emit();\n }\n\n onMouseEnter(): void {\n if (!this.pauseOnHover()) {\n return;\n }\n this.isPaused.set(true);\n this.clearTimer();\n }\n\n onMouseLeave(): void {\n if (!this.pauseOnHover()) {\n return;\n }\n this.isPaused.set(false);\n }\n\n handleAction(): void {\n this.action.emit();\n }\n\n protected readonly faClose = faClose;\n\n private clearTimer(): void {\n if (this.timerHandle) {\n clearTimeout(this.timerHandle);\n this.timerHandle = null;\n }\n }\n}\n","<div class=\"toast\" [ngClass]=\"[type(), position()]\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <fa-icon class=\"icon\" [icon]=\"currentIcon()\"></fa-icon>\n <span class=\"message\">{{ message() }}</span>\n\n @if (actionLabel()) {\n <button class=\"action-btn\" type=\"button\" (click)=\"handleAction()\">\n {{ actionLabel() }}\n </button>\n }\n\n @if (closable()) {\n <button class=\"close-btn\" (click)=\"close()\" aria-label=\"Close toast\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n</div>\n","import { DestroyRef, Injectable, inject, signal } from '@angular/core';\n\nexport type ToastType = 'success' | 'warning' | 'error' | 'info';\nexport type ToastPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport interface ToastOptions {\n message: string;\n type?: ToastType;\n duration?: number;\n closable?: boolean;\n position?: ToastPosition;\n actionLabel?: string;\n onAction?: () => void;\n pauseOnHover?: boolean;\n maxStack?: number;\n}\n\nexport interface ToastInstance {\n id: string;\n message: string;\n type: ToastType;\n duration: number;\n closable: boolean;\n position: ToastPosition;\n actionLabel?: string;\n onAction?: () => void;\n pauseOnHover: boolean;\n}\n\nconst DEFAULT_DURATION = 3000;\nconst DEFAULT_POSITION: ToastPosition = 'top-right';\nconst DEFAULT_TYPE: ToastType = 'info';\nconst DEFAULT_MAX_STACK = 4;\n\n@Injectable({ providedIn: 'root' })\nexport class DsToastService {\n private readonly toastsSignal = signal<ToastInstance[]>([]);\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly defaultMaxStack = DEFAULT_MAX_STACK;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.destroyRef.onDestroy(() => this.clearTimers());\n }\n\n readonly toasts = this.toastsSignal.asReadonly();\n\n show(options: ToastOptions): string {\n const id = crypto.randomUUID();\n const toast: ToastInstance = {\n id,\n message: options.message,\n type: options.type ?? DEFAULT_TYPE,\n duration: options.duration ?? DEFAULT_DURATION,\n closable: options.closable ?? true,\n position: options.position ?? DEFAULT_POSITION,\n actionLabel: options.actionLabel,\n onAction: options.onAction,\n pauseOnHover: options.pauseOnHover ?? true,\n };\n\n const maxStack = options.maxStack ?? this.defaultMaxStack;\n\n this.toastsSignal.update(list => {\n const next = [...list];\n if (maxStack > 0) {\n let sameCount = next.filter(item => item.position === toast.position).length;\n while (sameCount >= maxStack) {\n const index = next.findIndex(item => item.position === toast.position);\n if (index === -1) {\n break;\n }\n const removed = next.splice(index, 1)[0];\n this.clearTimer(removed.id);\n sameCount--;\n }\n }\n next.push(toast);\n return next;\n });\n\n if (toast.duration > 0) {\n const timer = setTimeout(() => this.dismiss(id), toast.duration);\n this.timers.set(id, timer);\n }\n\n return id;\n }\n\n dismiss(id: string): void {\n this.clearTimer(id);\n this.toastsSignal.update(list => list.filter(toast => toast.id !== id));\n }\n\n clear(position?: ToastPosition): void {\n if (!position) {\n this.toastsSignal().forEach(toast => this.clearTimer(toast.id));\n this.toastsSignal.set([]);\n return;\n }\n\n const remaining = this.toastsSignal().filter(toast => {\n const match = toast.position === position;\n if (match) {\n this.clearTimer(toast.id);\n }\n return !match;\n });\n this.toastsSignal.set(remaining);\n }\n\n triggerAction(id: string): void {\n const toast = this.toastsSignal().find(item => item.id === id);\n toast?.onAction?.();\n if (toast) {\n this.dismiss(id);\n }\n }\n\n private clearTimers(): void {\n this.timers.forEach(timer => clearTimeout(timer));\n this.timers.clear();\n }\n\n private clearTimer(id: string): void {\n const timer = this.timers.get(id);\n if (timer) {\n clearTimeout(timer);\n this.timers.delete(id);\n }\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DsToastComponent } from './ds-toast.component';\nimport { DsToastService, ToastInstance, ToastPosition } from './ds-toast.service';\n\n@Component({\n selector: 'ds-toast-container',\n standalone: true,\n imports: [CommonModule, DsToastComponent],\n templateUrl: './ds-toast-container.component.html',\n styleUrl: './ds-toast-container.component.scss',\n})\nexport class DsToastContainerComponent {\n private readonly toastService = inject(DsToastService);\n\n protected readonly positions: ToastPosition[] = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];\n\n protected readonly groupedToasts = computed<Record<ToastPosition, ToastInstance[]>>(() => {\n const groups: Record<ToastPosition, ToastInstance[]> = {\n 'top-left': [],\n 'top-right': [],\n 'bottom-left': [],\n 'bottom-right': [],\n };\n\n for (const toast of this.toastService.toasts()) {\n groups[toast.position].push(toast);\n }\n\n return groups;\n });\n\n dismiss(id: string): void {\n this.toastService.dismiss(id);\n }\n\n handleAction(toast: ToastInstance): void {\n this.toastService.triggerAction(toast.id);\n }\n}\n","@for (position of positions; track position) {\n @let stack = groupedToasts()[position];\n <div class=\"toast-stack\" [attr.data-position]=\"position\">\n @for (toast of stack; track toast.id) {\n <ds-toast\n [message]=\"toast.message\"\n [type]=\"toast.type\"\n [duration]=\"toast.duration\"\n [closable]=\"toast.closable\"\n [position]=\"toast.position\"\n [actionLabel]=\"toast.actionLabel\"\n [pauseOnHover]=\"toast.pauseOnHover\"\n (action)=\"handleAction(toast)\"\n (closed)=\"dismiss(toast.id)\"\n />\n }\n </div>\n}\n","import { Component, forwardRef, input, signal, computed } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { PrimitiveToggle, ToggleSize } from '../../primitives/primitive-toggle/primitive-toggle';\n\n/**\n * DS Toggle (Switch)\n *\n * Composant toggle/switch du design system avec ControlValueAccessor pour formulaires réactifs.\n * Encapsule primitive-toggle avec gestion label inline, helper et validation visuelle.\n *\n * @example\n * // Formulaire réactif\n * <ds-toggle\n * formControlName=\"notifications\"\n * label=\"Activer les notifications\"\n * helper=\"Vous recevrez des alertes email\"\n * />\n *\n * @example\n * // Template-driven\n * <ds-toggle\n * [(ngModel)]=\"notificationsEnabled\"\n * label=\"Notifications\"\n * labelPosition=\"left\"\n * />\n */\n@Component({\n selector: 'ds-toggle',\n standalone: true,\n imports: [CommonModule, PrimitiveToggle],\n templateUrl: './ds-toggle.html',\n styleUrl: './ds-toggle.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsToggle),\n multi: true,\n },\n ],\n})\nexport class DsToggle implements ControlValueAccessor {\n /**\n * ID unique du toggle (généré automatiquement)\n */\n id = input<string>(`ds-toggle-${crypto.randomUUID()}`);\n\n /**\n * Label affiché à côté du toggle\n */\n label = input<string>('');\n\n /**\n * Position du label (left, right)\n */\n labelPosition = input<'left' | 'right'>('right');\n\n /**\n * Texte d'aide affiché sous le toggle\n */\n helper = input<string | undefined>(undefined);\n\n /**\n * État désactivé du toggle\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du toggle (sm, md, lg)\n */\n size = input<ToggleSize>('md');\n\n /**\n * Nom du contrôle (pour formulaires)\n */\n name = input<string | undefined>(undefined);\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n protected readonly internalValue = signal<boolean>(false);\n\n // Computed properties\n protected readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n protected readonly helperId = computed<string | undefined>(() =>\n this.helper() ? `${this.id()}-helper` : undefined\n );\n\n // ControlValueAccessor implementation\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.internalValue.set(value ?? false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n protected onCheckedChange(checked: boolean): void {\n if (this.isDisabled()) {\n return;\n }\n this.internalValue.set(checked);\n this.onChange(checked);\n this.onTouched();\n }\n}\n","<div class=\"ds-toggle\">\n <primitive-toggle\n [toggleId]=\"id()\"\n [checked]=\"internalValue()\"\n [disabled]=\"isDisabled()\"\n [size]=\"size()\"\n [label]=\"label()\"\n [labelPosition]=\"labelPosition()\"\n [attr.aria-describedby]=\"helperId()\"\n [attr.name]=\"name()\"\n (checkedChange)=\"onCheckedChange($event)\"\n />\n\n @if (helper()) {\n <div\n [id]=\"helperId()\"\n class=\"ds-toggle__helper\"\n [attr.aria-live]=\"'polite'\"\n >\n {{ helper() }}\n </div>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ds-tooltip',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ds-tooltip\" role=\"tooltip\">\n <div class=\"ds-tooltip__content\">{{ text() }}</div>\n </div>\n `,\n styleUrls: ['./ds-tooltip.component.scss'],\n})\nexport class DsTooltipComponent {\n text = input.required<string>();\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnDestroy,\n ComponentRef,\n ViewContainerRef,\n Injector,\n} from '@angular/core';\nimport { Overlay, OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DsTooltipComponent } from './ds-tooltip.component';\nimport { TOOLTIP_POSITIONS } from '../../utils/overlay-positions';\n\n@Directive({\n selector: '[dsTooltip]',\n standalone: true,\n})\nexport class DsTooltip implements OnDestroy {\n dsTooltip = input.required<string>();\n\n private overlayRef: OverlayRef | null = null;\n private tooltipComponentRef: ComponentRef<DsTooltipComponent> | null = null;\n private hideTimeout: number | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.clearHideTimeout();\n if (!this.overlayRef) {\n this.show();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.hideWithDelay(150);\n }\n\n @HostListener('focus')\n onFocus(): void {\n this.clearHideTimeout();\n if (!this.overlayRef) {\n this.show();\n }\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.hide();\n }\n\n private show(): void {\n const tooltipText = this.dsTooltip();\n if (!tooltipText || tooltipText.trim() === '') return;\n\n this.overlayRef = this.createOverlay();\n\n // Utiliser ComponentPortal avec attach() - pattern CDK standard\n const portal = new ComponentPortal(\n DsTooltipComponent,\n this.viewContainerRef,\n this.injector\n );\n\n this.tooltipComponentRef = this.overlayRef.attach(portal);\n this.tooltipComponentRef.setInput('text', tooltipText);\n this.tooltipComponentRef.changeDetectorRef.detectChanges();\n\n // Set aria-describedby on host element\n const tooltipId = `tooltip-${Math.random().toString(36).substring(2, 11)}`;\n this.elementRef.nativeElement.setAttribute('aria-describedby', tooltipId);\n }\n\n private hide(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n\n if (this.tooltipComponentRef) {\n this.tooltipComponentRef.destroy();\n this.tooltipComponentRef = null;\n }\n\n this.elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n\n private hideWithDelay(delayMs: number): void {\n this.hideTimeout = window.setTimeout(() => {\n this.hide();\n }, delayMs);\n }\n\n private clearHideTimeout(): void {\n if (this.hideTimeout !== null) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n\n private createOverlay(): OverlayRef {\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(TOOLTIP_POSITIONS as ConnectedPosition[]);\n\n return this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.close(),\n panelClass: 'ds-tooltip-overlay',\n });\n }\n\n ngOnDestroy(): void {\n this.clearHideTimeout();\n this.hide();\n }\n}\n","import { Component, input, output, computed, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Taille de l'accordion.\n */\nexport type AccordionSize = 'sm' | 'md' | 'lg';\n\n/**\n * Variant de style de l'accordion.\n */\nexport type AccordionVariant = 'default' | 'bordered' | 'separated';\n\n/**\n * Configuration d'un item d'accordion.\n */\nexport interface AccordionItem {\n id: string;\n header: string;\n content: string;\n disabled?: boolean;\n}\n\n/**\n * Événement émis lors du changement d'état d'un item.\n */\nexport interface AccordionChangeEvent {\n itemId: string;\n expanded: boolean;\n expandedItems: string[];\n}\n\n/**\n * # DsAccordion\n *\n * Composant accordion pour afficher/masquer des sections de contenu.\n *\n * ## Usage\n *\n * ```html\n * <ds-accordion\n * [items]=\"items\"\n * [multiple]=\"false\"\n * (itemChange)=\"onItemChange($event)\">\n * </ds-accordion>\n * ```\n *\n * ## Accessibilité\n *\n * - Headers avec `role=\"button\"` et `aria-expanded`\n * - Contenu avec `role=\"region\"` et `aria-labelledby`\n * - Navigation clavier : Enter/Space pour toggle, ArrowUp/Down pour navigation\n *\n * @component\n */\n@Component({\n selector: 'ds-accordion',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-accordion.html',\n styleUrl: './ds-accordion.scss',\n})\nexport class DsAccordion {\n // Icône FontAwesome\n readonly faChevronDown = faChevronDown;\n\n /**\n * Liste des items de l'accordion.\n */\n items = input.required<AccordionItem[]>();\n\n /**\n * Permettre l'expansion de plusieurs items simultanément.\n * @default false\n */\n multiple = input<boolean>(false);\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<AccordionSize>('md');\n\n /**\n * Variant de style.\n * @default 'default'\n */\n variant = input<AccordionVariant>('default');\n\n /**\n * IDs des items initialement ouverts.\n * @default []\n */\n expandedIds = input<string[]>([]);\n\n /**\n * Désactiver tout l'accordion.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Événement émis lors du changement d'état d'un item.\n */\n itemChange = output<AccordionChangeEvent>();\n\n /**\n * État interne des items ouverts.\n */\n private readonly _expandedIds = signal<Set<string>>(new Set());\n\n /**\n * Initialiser les items ouverts à partir de l'input.\n */\n constructor() {\n // Note: L'initialisation réactive se fait via effect() si nécessaire\n }\n\n /**\n * IDs des items actuellement ouverts.\n */\n readonly currentExpandedIds = computed(() => {\n const inputIds = this.expandedIds();\n const internalIds = this._expandedIds();\n\n // Fusionner les deux sources\n const merged = new Set([...inputIds, ...internalIds]);\n return merged;\n });\n\n /**\n * Vérifier si un item est ouvert.\n */\n isExpanded(itemId: string): boolean {\n return this.currentExpandedIds().has(itemId);\n }\n\n /**\n * Toggle un item.\n */\n toggleItem(item: AccordionItem): void {\n if (this.disabled() || item.disabled) return;\n\n const current = new Set(this._expandedIds());\n const isCurrentlyExpanded = current.has(item.id);\n\n if (isCurrentlyExpanded) {\n current.delete(item.id);\n } else {\n if (!this.multiple()) {\n current.clear();\n }\n current.add(item.id);\n }\n\n this._expandedIds.set(current);\n\n this.itemChange.emit({\n itemId: item.id,\n expanded: !isCurrentlyExpanded,\n expandedItems: Array.from(current),\n });\n }\n\n /**\n * Ouvrir tous les items.\n */\n expandAll(): void {\n if (this.disabled()) return;\n\n const allIds = new Set(\n this.items()\n .filter((item) => !item.disabled)\n .map((item) => item.id)\n );\n this._expandedIds.set(allIds);\n }\n\n /**\n * Fermer tous les items.\n */\n collapseAll(): void {\n if (this.disabled()) return;\n this._expandedIds.set(new Set());\n }\n\n /**\n * Gestion du clavier.\n */\n onKeydown(event: KeyboardEvent, item: AccordionItem, index: number): void {\n const itemsArr = this.items();\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.toggleItem(item);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.focusItem(Math.min(index + 1, itemsArr.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.focusItem(Math.max(index - 1, 0));\n break;\n case 'Home':\n event.preventDefault();\n this.focusItem(0);\n break;\n case 'End':\n event.preventDefault();\n this.focusItem(itemsArr.length - 1);\n break;\n }\n }\n\n /**\n * Focus sur un item par index.\n */\n private focusItem(index: number): void {\n const headers = document.querySelectorAll('.ds-accordion__header');\n const target = headers[index] as HTMLElement;\n target?.focus();\n }\n\n /**\n * Classes CSS du conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-accordion',\n `ds-accordion--${this.size()}`,\n `ds-accordion--${this.variant()}`,\n this.disabled() ? 'ds-accordion--disabled' : '',\n ].filter(Boolean);\n });\n\n /**\n * Classes CSS pour un item.\n */\n getItemClasses(item: AccordionItem): string[] {\n return [\n 'ds-accordion__item',\n this.isExpanded(item.id) ? 'ds-accordion__item--expanded' : '',\n item.disabled ? 'ds-accordion__item--disabled' : '',\n ].filter(Boolean);\n }\n\n /**\n * ID unique pour le header.\n */\n getHeaderId(item: AccordionItem): string {\n return `accordion-header-${item.id}`;\n }\n\n /**\n * ID unique pour le contenu.\n */\n getContentId(item: AccordionItem): string {\n return `accordion-content-${item.id}`;\n }\n}\n","<div [ngClass]=\"containerClasses()\">\n @for (item of items(); track item.id; let i = $index) {\n <div [ngClass]=\"getItemClasses(item)\">\n <!-- Header -->\n <button\n type=\"button\"\n class=\"ds-accordion__header\"\n [id]=\"getHeaderId(item)\"\n [attr.aria-expanded]=\"isExpanded(item.id)\"\n [attr.aria-controls]=\"getContentId(item)\"\n [disabled]=\"disabled() || item.disabled\"\n (click)=\"toggleItem(item)\"\n (keydown)=\"onKeydown($event, item, i)\">\n <span class=\"ds-accordion__title\">{{ item.header }}</span>\n <fa-icon\n class=\"ds-accordion__icon\"\n [icon]=\"faChevronDown\"\n [class.ds-accordion__icon--rotated]=\"isExpanded(item.id)\"\n aria-hidden=\"true\">\n </fa-icon>\n </button>\n\n <!-- Contenu -->\n <div\n class=\"ds-accordion__content\"\n [id]=\"getContentId(item)\"\n role=\"region\"\n [attr.aria-labelledby]=\"getHeaderId(item)\"\n [attr.aria-hidden]=\"!isExpanded(item.id)\"\n [class.ds-accordion__content--expanded]=\"isExpanded(item.id)\">\n <div class=\"ds-accordion__body\">\n {{ item.content }}\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, input, output, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faChevronLeft,\n faChevronRight,\n faAnglesLeft,\n faAnglesRight\n} from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Tailles disponibles pour la pagination.\n */\nexport type PaginationSize = 'sm' | 'md' | 'lg';\n\n/**\n * Options de taille de page disponibles.\n */\nexport type PageSizeOption = number;\n\n/**\n * Événement émis lors du changement de page.\n */\nexport interface PageChangeEvent {\n page: number;\n pageSize: number;\n totalItems: number;\n totalPages: number;\n}\n\n/**\n * # DsPagination\n *\n * Composant de pagination pour naviguer entre les pages d'un ensemble de données.\n *\n * ## Usage\n *\n * ```html\n * <ds-pagination\n * [totalItems]=\"100\"\n * [pageSize]=\"10\"\n * [currentPage]=\"1\"\n * [showFirstLast]=\"true\"\n * [showPageSizeSelector]=\"true\"\n * (pageChange)=\"onPageChange($event)\">\n * </ds-pagination>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"navigation\"` avec `aria-label`\n * - Boutons avec `aria-label` descriptifs\n * - Page courante indiquée par `aria-current=\"page\"`\n * - Navigation clavier complète (Tab, Enter, Space)\n *\n * @component\n */\n@Component({\n selector: 'ds-pagination',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-pagination.html',\n styleUrl: './ds-pagination.scss',\n})\nexport class DsPagination {\n // Icônes FontAwesome\n readonly faChevronLeft = faChevronLeft;\n readonly faChevronRight = faChevronRight;\n readonly faAnglesLeft = faAnglesLeft;\n readonly faAnglesRight = faAnglesRight;\n\n /**\n * Nombre total d'éléments.\n */\n totalItems = input.required<number>();\n\n /**\n * Nombre d'éléments par page.\n * @default 10\n */\n pageSize = input<number>(10);\n\n /**\n * Page courante (1-indexed).\n * @default 1\n */\n currentPage = input<number>(1);\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<PaginationSize>('md');\n\n /**\n * Afficher les boutons première/dernière page.\n * @default true\n */\n showFirstLast = input<boolean>(true);\n\n /**\n * Afficher le sélecteur de taille de page.\n * @default false\n */\n showPageSizeSelector = input<boolean>(false);\n\n /**\n * Options de taille de page disponibles.\n * @default [10, 25, 50, 100]\n */\n pageSizeOptions = input<PageSizeOption[]>([10, 25, 50, 100]);\n\n /**\n * Nombre maximum de pages affichées dans la navigation.\n * @default 5\n */\n maxVisiblePages = input<number>(5);\n\n /**\n * Afficher les informations \"X - Y sur Z\".\n * @default true\n */\n showInfo = input<boolean>(true);\n\n /**\n * Désactiver le composant.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Label ARIA pour la navigation.\n * @default 'Pagination'\n */\n ariaLabel = input<string>('Pagination');\n\n /**\n * Événement émis lors du changement de page.\n */\n pageChange = output<PageChangeEvent>();\n\n /**\n * Événement émis lors du changement de taille de page.\n */\n pageSizeChange = output<number>();\n\n /**\n * Calcul du nombre total de pages.\n */\n readonly totalPages = computed(() => {\n const total = this.totalItems();\n const size = this.pageSize();\n return Math.max(1, Math.ceil(total / size));\n });\n\n /**\n * Page courante normalisée (entre 1 et totalPages).\n */\n readonly normalizedCurrentPage = computed(() => {\n const page = this.currentPage();\n const total = this.totalPages();\n return Math.max(1, Math.min(page, total));\n });\n\n /**\n * Premier élément affiché (1-indexed).\n */\n readonly startItem = computed(() => {\n const page = this.normalizedCurrentPage();\n const size = this.pageSize();\n return (page - 1) * size + 1;\n });\n\n /**\n * Dernier élément affiché.\n */\n readonly endItem = computed(() => {\n const start = this.startItem();\n const size = this.pageSize();\n const total = this.totalItems();\n return Math.min(start + size - 1, total);\n });\n\n /**\n * Peut aller à la page précédente.\n */\n readonly canGoPrevious = computed(() => {\n return this.normalizedCurrentPage() > 1 && !this.disabled();\n });\n\n /**\n * Peut aller à la page suivante.\n */\n readonly canGoNext = computed(() => {\n return this.normalizedCurrentPage() < this.totalPages() && !this.disabled();\n });\n\n /**\n * Pages visibles dans la navigation.\n */\n readonly visiblePages = computed(() => {\n const current = this.normalizedCurrentPage();\n const total = this.totalPages();\n const max = this.maxVisiblePages();\n\n if (total <= max) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const half = Math.floor(max / 2);\n let start = current - half;\n let end = current + half;\n\n if (start < 1) {\n start = 1;\n end = max;\n }\n\n if (end > total) {\n end = total;\n start = total - max + 1;\n }\n\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n /**\n * Afficher les ellipses au début.\n */\n readonly showStartEllipsis = computed(() => {\n const pages = this.visiblePages();\n return pages.length > 0 && pages[0] > 1;\n });\n\n /**\n * Afficher les ellipses à la fin.\n */\n readonly showEndEllipsis = computed(() => {\n const pages = this.visiblePages();\n const total = this.totalPages();\n return pages.length > 0 && pages[pages.length - 1] < total;\n });\n\n /**\n * Classes CSS du conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-pagination',\n `ds-pagination--${this.size()}`,\n this.disabled() ? 'ds-pagination--disabled' : ''\n ].filter(Boolean);\n });\n\n /**\n * Aller à une page spécifique.\n */\n goToPage(page: number): void {\n if (this.disabled()) return;\n\n const normalized = Math.max(1, Math.min(page, this.totalPages()));\n if (normalized !== this.normalizedCurrentPage()) {\n this.emitPageChange(normalized);\n }\n }\n\n /**\n * Aller à la première page.\n */\n goToFirst(): void {\n this.goToPage(1);\n }\n\n /**\n * Aller à la dernière page.\n */\n goToLast(): void {\n this.goToPage(this.totalPages());\n }\n\n /**\n * Aller à la page précédente.\n */\n goToPrevious(): void {\n this.goToPage(this.normalizedCurrentPage() - 1);\n }\n\n /**\n * Aller à la page suivante.\n */\n goToNext(): void {\n this.goToPage(this.normalizedCurrentPage() + 1);\n }\n\n /**\n * Changer la taille de page.\n */\n onPageSizeChange(event: Event): void {\n if (this.disabled()) return;\n\n const select = event.target as HTMLSelectElement;\n const newSize = parseInt(select.value, 10);\n this.pageSizeChange.emit(newSize);\n // Recalculer la page pour rester au même endroit dans les données\n const currentStart = this.startItem();\n const newPage = Math.ceil(currentStart / newSize);\n this.emitPageChange(newPage, newSize);\n }\n\n /**\n * Émettre l'événement de changement de page.\n */\n private emitPageChange(page: number, pageSize?: number): void {\n const size = pageSize ?? this.pageSize();\n this.pageChange.emit({\n page,\n pageSize: size,\n totalItems: this.totalItems(),\n totalPages: Math.ceil(this.totalItems() / size)\n });\n }\n\n /**\n * Gestion du clavier sur les boutons de page.\n */\n onPageKeydown(event: KeyboardEvent, page: number): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage(page);\n }\n }\n}\n","<nav\n [ngClass]=\"containerClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"navigation\">\n\n <!-- Info: X - Y sur Z -->\n @if (showInfo()) {\n <span class=\"ds-pagination__info\">\n {{ startItem() }} - {{ endItem() }} sur {{ totalItems() }}\n </span>\n }\n\n <!-- Sélecteur de taille de page -->\n @if (showPageSizeSelector()) {\n <div class=\"ds-pagination__size-selector\">\n <label class=\"ds-pagination__size-label\" for=\"page-size\">\n Par page:\n </label>\n <select\n id=\"page-size\"\n class=\"ds-pagination__size-select\"\n [value]=\"pageSize()\"\n [disabled]=\"disabled()\"\n (change)=\"onPageSizeChange($event)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Navigation -->\n <div class=\"ds-pagination__nav\">\n <!-- Première page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--first\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller à la première page'\"\n (click)=\"goToFirst()\">\n <fa-icon [icon]=\"faAnglesLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n\n <!-- Page précédente -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--prev\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller à la page précédente'\"\n (click)=\"goToPrevious()\">\n <fa-icon [icon]=\"faChevronLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Ellipsis début -->\n @if (showStartEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Pages -->\n @for (page of visiblePages(); track page) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--page\"\n [class.ds-pagination__btn--active]=\"page === normalizedCurrentPage()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Page ' + page\"\n [attr.aria-current]=\"page === normalizedCurrentPage() ? 'page' : null\"\n (click)=\"goToPage(page)\"\n (keydown)=\"onPageKeydown($event, page)\">\n {{ page }}\n </button>\n }\n\n <!-- Ellipsis fin -->\n @if (showEndEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Page suivante -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--next\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller à la page suivante'\"\n (click)=\"goToNext()\">\n <fa-icon [icon]=\"faChevronRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Dernière page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--last\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller à la dernière page'\"\n (click)=\"goToLast()\">\n <fa-icon [icon]=\"faAnglesRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n </div>\n</nav>\n","import { Component, input, output, computed, ContentChildren, QueryList, AfterContentInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faCheck, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Orientation du stepper.\n */\nexport type StepperOrientation = 'horizontal' | 'vertical';\n\n/**\n * État d'une étape.\n */\nexport type StepState = 'pending' | 'active' | 'completed' | 'error';\n\n/**\n * Taille du stepper.\n */\nexport type StepperSize = 'sm' | 'md' | 'lg';\n\n/**\n * Configuration d'une étape.\n */\nexport interface Step {\n label: string;\n description?: string;\n state?: StepState;\n disabled?: boolean;\n optional?: boolean;\n}\n\n/**\n * Événement émis lors du changement d'étape.\n */\nexport interface StepChangeEvent {\n previousIndex: number;\n currentIndex: number;\n step: Step;\n}\n\n/**\n * # DsStepper\n *\n * Composant de stepper pour guider l'utilisateur à travers un processus multi-étapes.\n *\n * ## Usage\n *\n * ```html\n * <ds-stepper\n * [steps]=\"steps\"\n * [activeStep]=\"0\"\n * [orientation]=\"'horizontal'\"\n * (stepChange)=\"onStepChange($event)\">\n * </ds-stepper>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"tablist\"` avec `aria-orientation`\n * - Chaque étape utilise `role=\"tab\"` avec `aria-selected`\n * - Navigation clavier : ArrowLeft/Right (horizontal), ArrowUp/Down (vertical)\n * - Indicateurs d'état visuels et sémantiques\n *\n * @component\n */\n@Component({\n selector: 'ds-stepper',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-stepper.html',\n styleUrl: './ds-stepper.scss',\n})\nexport class DsStepper {\n // Icônes FontAwesome\n readonly faCheck = faCheck;\n readonly faExclamationTriangle = faExclamationTriangle;\n\n /**\n * Liste des étapes.\n */\n steps = input.required<Step[]>();\n\n /**\n * Index de l'étape active (0-indexed).\n * @default 0\n */\n activeStep = input<number>(0);\n\n /**\n * Orientation du stepper.\n * @default 'horizontal'\n */\n orientation = input<StepperOrientation>('horizontal');\n\n /**\n * Taille du stepper.\n * @default 'md'\n */\n size = input<StepperSize>('md');\n\n /**\n * Permettre la navigation en cliquant sur les étapes.\n * @default true\n */\n clickable = input<boolean>(true);\n\n /**\n * Navigation linéaire (doit compléter chaque étape dans l'ordre).\n * @default false\n */\n linear = input<boolean>(false);\n\n /**\n * Afficher les descriptions.\n * @default true\n */\n showDescriptions = input<boolean>(true);\n\n /**\n * Afficher le connecteur entre les étapes.\n * @default true\n */\n showConnector = input<boolean>(true);\n\n /**\n * Événement émis lors du changement d'étape.\n */\n stepChange = output<StepChangeEvent>();\n\n /**\n * Index actif normalisé.\n */\n readonly normalizedActiveStep = computed(() => {\n const active = this.activeStep();\n const stepsArr = this.steps();\n return Math.max(0, Math.min(active, stepsArr.length - 1));\n });\n\n /**\n * Classes CSS du conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-stepper',\n `ds-stepper--${this.orientation()}`,\n `ds-stepper--${this.size()}`,\n this.clickable() ? 'ds-stepper--clickable' : '',\n ].filter(Boolean);\n });\n\n /**\n * Obtenir l'état d'une étape.\n */\n getStepState(step: Step, index: number): StepState {\n // État explicite\n if (step.state) return step.state;\n\n const active = this.normalizedActiveStep();\n\n if (index < active) return 'completed';\n if (index === active) return 'active';\n return 'pending';\n }\n\n /**\n * Vérifie si une étape est navigable.\n */\n isStepClickable(step: Step, index: number): boolean {\n if (!this.clickable()) return false;\n if (step.disabled) return false;\n\n // En mode linéaire, on ne peut naviguer qu'aux étapes complétées ou à l'étape suivante\n if (this.linear()) {\n const active = this.normalizedActiveStep();\n return index <= active + 1;\n }\n\n return true;\n }\n\n /**\n * Naviguer vers une étape.\n */\n goToStep(index: number): void {\n const stepsArr = this.steps();\n if (index < 0 || index >= stepsArr.length) return;\n\n const step = stepsArr[index];\n if (!this.isStepClickable(step, index)) return;\n\n const previousIndex = this.normalizedActiveStep();\n if (index !== previousIndex) {\n this.stepChange.emit({\n previousIndex,\n currentIndex: index,\n step,\n });\n }\n }\n\n /**\n * Aller à l'étape suivante.\n */\n next(): void {\n this.goToStep(this.normalizedActiveStep() + 1);\n }\n\n /**\n * Aller à l'étape précédente.\n */\n previous(): void {\n this.goToStep(this.normalizedActiveStep() - 1);\n }\n\n /**\n * Gestion du clavier.\n */\n onKeydown(event: KeyboardEvent, index: number): void {\n const stepsArr = this.steps();\n const isHorizontal = this.orientation() === 'horizontal';\n\n let newIndex = index;\n\n switch (event.key) {\n case 'ArrowRight':\n if (isHorizontal) {\n event.preventDefault();\n newIndex = Math.min(index + 1, stepsArr.length - 1);\n }\n break;\n case 'ArrowLeft':\n if (isHorizontal) {\n event.preventDefault();\n newIndex = Math.max(index - 1, 0);\n }\n break;\n case 'ArrowDown':\n if (!isHorizontal) {\n event.preventDefault();\n newIndex = Math.min(index + 1, stepsArr.length - 1);\n }\n break;\n case 'ArrowUp':\n if (!isHorizontal) {\n event.preventDefault();\n newIndex = Math.max(index - 1, 0);\n }\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = stepsArr.length - 1;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.goToStep(index);\n return;\n }\n\n if (newIndex !== index) {\n // Focus sur la nouvelle étape\n const stepElements = document.querySelectorAll('.ds-stepper__step');\n const targetElement = stepElements[newIndex] as HTMLElement;\n targetElement?.focus();\n }\n }\n\n /**\n * Classes CSS pour une étape.\n */\n getStepClasses(step: Step, index: number): string[] {\n const state = this.getStepState(step, index);\n return [\n 'ds-stepper__step',\n `ds-stepper__step--${state}`,\n step.disabled ? 'ds-stepper__step--disabled' : '',\n step.optional ? 'ds-stepper__step--optional' : '',\n ].filter(Boolean);\n }\n\n /**\n * Label ARIA pour une étape.\n */\n getStepAriaLabel(step: Step, index: number): string {\n const state = this.getStepState(step, index);\n const stateLabels: Record<StepState, string> = {\n pending: 'En attente',\n active: 'En cours',\n completed: 'Terminée',\n error: 'Erreur',\n };\n return `Étape ${index + 1}: ${step.label} - ${stateLabels[state]}`;\n }\n}\n","<div\n [ngClass]=\"containerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\">\n\n @for (step of steps(); track step.label; let i = $index; let last = $last) {\n <!-- Étape -->\n <div\n [ngClass]=\"getStepClasses(step, i)\"\n role=\"tab\"\n [attr.aria-selected]=\"i === normalizedActiveStep()\"\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\n [attr.tabindex]=\"i === normalizedActiveStep() ? 0 : -1\"\n (click)=\"goToStep(i)\"\n (keydown)=\"onKeydown($event, i)\">\n\n <!-- Indicateur -->\n <div class=\"ds-stepper__indicator\">\n @switch (getStepState(step, i)) {\n @case ('completed') {\n <fa-icon [icon]=\"faCheck\" aria-hidden=\"true\"></fa-icon>\n }\n @case ('error') {\n <fa-icon [icon]=\"faExclamationTriangle\" aria-hidden=\"true\"></fa-icon>\n }\n @default {\n <span class=\"ds-stepper__number\">{{ i + 1 }}</span>\n }\n }\n </div>\n\n <!-- Contenu -->\n <div class=\"ds-stepper__content\">\n <span class=\"ds-stepper__label\">\n {{ step.label }}\n @if (step.optional) {\n <span class=\"ds-stepper__optional\">(Optionnel)</span>\n }\n </span>\n @if (showDescriptions() && step.description) {\n <span class=\"ds-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n\n <!-- Connecteur -->\n @if (showConnector() && !last) {\n <div\n class=\"ds-stepper__connector\"\n [class.ds-stepper__connector--completed]=\"i < normalizedActiveStep()\"\n aria-hidden=\"true\">\n </div>\n }\n }\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n forwardRef,\n ElementRef,\n ViewChild,\n HostListener,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface DsSelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport type DsSelectSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ds-select',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-select.html',\n styleUrls: ['./ds-select.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSelect),\n multi: true,\n },\n ],\n})\nexport class DsSelect implements ControlValueAccessor {\n // Inputs\n readonly options = input<DsSelectOption[]>([]);\n readonly placeholder = input<string>('Sélectionner...');\n readonly size = input<DsSelectSize>('md');\n readonly disabled = input<boolean>(false);\n readonly error = input<string>('');\n readonly helper = input<string>('');\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly required = input<boolean>(false);\n readonly clearable = input<boolean>(false);\n readonly searchable = input<boolean>(false);\n\n // Outputs\n readonly selectionChange = output<DsSelectOption | null>();\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // Internal state\n protected readonly isOpen = signal(false);\n protected readonly searchQuery = signal('');\n protected readonly focusedIndex = signal(-1);\n private readonly internalValue = signal<string | number | null>(null);\n private readonly cvaDisabled = signal(false);\n\n @ViewChild('selectTrigger') selectTrigger!: ElementRef<HTMLButtonElement>;\n @ViewChild('searchInput') searchInput!: ElementRef<HTMLInputElement>;\n @ViewChild('listbox') listbox!: ElementRef<HTMLUListElement>;\n\n private onChange: (value: string | number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // Computed\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly selectedOption = computed(() => {\n const value = this.internalValue();\n if (value === null) return null;\n return this.options().find(opt => opt.value === value) || null;\n });\n\n protected readonly displayValue = computed(() => {\n const selected = this.selectedOption();\n return selected ? selected.label : this.placeholder();\n });\n\n protected readonly filteredOptions = computed(() => {\n const query = this.searchQuery().toLowerCase();\n if (!query) return this.options();\n return this.options().filter(opt =>\n opt.label.toLowerCase().includes(query)\n );\n });\n\n protected readonly containerClasses = computed(() => ({\n 'ds-select': true,\n 'ds-select--open': this.isOpen(),\n 'ds-select--disabled': this.isDisabled(),\n 'ds-select--error': !!this.error(),\n [`ds-select--${this.size()}`]: true,\n }));\n\n protected readonly triggerClasses = computed(() => ({\n 'ds-select__trigger': true,\n 'ds-select__trigger--placeholder': !this.selectedOption(),\n }));\n\n // ControlValueAccessor\n writeValue(value: string | number | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // Public methods\n toggle(): void {\n if (this.isDisabled()) return;\n this.isOpen() ? this.close() : this.open();\n }\n\n open(): void {\n if (this.isDisabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.focusedIndex.set(this.getSelectedIndex());\n this.opened.emit();\n\n if (this.searchable()) {\n setTimeout(() => this.searchInput?.nativeElement?.focus(), 0);\n }\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.closed.emit();\n this.onTouched();\n }\n\n selectOption(option: DsSelectOption): void {\n if (option.disabled) return;\n\n this.internalValue.set(option.value);\n this.onChange(option.value);\n this.selectionChange.emit(option);\n this.close();\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n this.internalValue.set(null);\n this.onChange(null);\n this.selectionChange.emit(null);\n }\n\n onSearchInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.searchQuery.set(input.value);\n this.focusedIndex.set(0);\n }\n\n // Keyboard navigation\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n event.preventDefault();\n this.open();\n } else if (this.focusedIndex() >= 0) {\n event.preventDefault();\n const option = this.filteredOptions()[this.focusedIndex()];\n if (option && !option.disabled) {\n this.selectOption(option);\n }\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.moveFocus(1);\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.moveFocus(-1);\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.focusedIndex.set(0);\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.focusedIndex.set(this.filteredOptions().length - 1);\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n this.selectTrigger?.nativeElement?.focus();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.close();\n }\n break;\n }\n }\n\n // Click outside\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.ds-select')) {\n this.close();\n }\n }\n\n // Helpers\n private moveFocus(delta: number): void {\n const options = this.filteredOptions();\n if (options.length === 0) return;\n\n let newIndex = this.focusedIndex() + delta;\n\n // Wrap around\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n\n // Skip disabled options\n let attempts = 0;\n while (options[newIndex]?.disabled && attempts < options.length) {\n newIndex += delta;\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n attempts++;\n }\n\n this.focusedIndex.set(newIndex);\n }\n\n private getSelectedIndex(): number {\n const value = this.internalValue();\n if (value === null) return 0;\n return this.options().findIndex(opt => opt.value === value);\n }\n\n protected isOptionFocused(index: number): boolean {\n return this.focusedIndex() === index;\n }\n\n protected isOptionSelected(option: DsSelectOption): boolean {\n return option.value === this.internalValue();\n }\n\n protected getOptionId(index: number): string {\n return `${this.name() || 'select'}-option-${index}`;\n }\n\n protected readonly listboxId = computed(() => `${this.name() || 'select'}-listbox`);\n}\n","<div [ngClass]=\"containerClasses()\">\n <!-- Label -->\n @if (label()) {\n <label class=\"ds-select__label\" [attr.for]=\"name()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ds-select__required\">*</span>\n }\n </label>\n }\n\n <!-- Trigger -->\n <button\n #selectTrigger\n type=\"button\"\n [ngClass]=\"triggerClasses()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-label]=\"label() || placeholder()\"\n (click)=\"toggle()\">\n <span class=\"ds-select__value\">{{ displayValue() }}</span>\n\n <span class=\"ds-select__icons\">\n @if (clearable() && selectedOption()) {\n <button\n type=\"button\"\n class=\"ds-select__clear\"\n aria-label=\"Effacer la sélection\"\n (click)=\"clear($event)\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ds-select__arrow\"\n [class.ds-select__arrow--open]=\"isOpen()\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </span>\n </button>\n\n <!-- Dropdown -->\n @if (isOpen()) {\n <div class=\"ds-select__dropdown\" role=\"presentation\">\n <!-- Search -->\n @if (searchable()) {\n <div class=\"ds-select__search\">\n <input\n #searchInput\n type=\"text\"\n class=\"ds-select__search-input\"\n placeholder=\"Rechercher...\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n aria-label=\"Rechercher une option\" />\n </div>\n }\n\n <!-- Options list -->\n <ul\n #listbox\n [id]=\"listboxId()\"\n class=\"ds-select__listbox\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\">\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li\n [id]=\"getOptionId(i)\"\n class=\"ds-select__option\"\n [class.ds-select__option--focused]=\"isOptionFocused(i)\"\n [class.ds-select__option--selected]=\"isOptionSelected(option)\"\n [class.ds-select__option--disabled]=\"option.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isOptionSelected(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\">\n <span class=\"ds-select__option-label\">{{ option.label }}</span>\n @if (isOptionSelected(option)) {\n <svg\n class=\"ds-select__check\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n </li>\n } @empty {\n <li class=\"ds-select__empty\" role=\"option\" aria-disabled=\"true\">\n Aucun résultat\n </li>\n }\n </ul>\n </div>\n }\n\n <!-- Helper / Error -->\n @if (error()) {\n <span class=\"ds-select__error\" role=\"alert\">{{ error() }}</span>\n } @else if (helper()) {\n <span class=\"ds-select__helper\">{{ helper() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n TrackByFunction,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface DsTableColumn<T = Record<string, unknown>> {\n key: keyof T | string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n width?: string;\n align?: 'left' | 'center' | 'right';\n cellClass?: string;\n headerClass?: string;\n format?: (value: unknown, row: T) => string;\n}\n\nexport type DsTableSize = 'sm' | 'md' | 'lg';\nexport type DsTableVariant = 'default' | 'striped' | 'bordered';\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortEvent {\n column: string;\n direction: SortDirection;\n}\n\nexport interface TableState {\n sortColumn: string | null;\n sortDirection: SortDirection;\n filters: Record<string, string>;\n}\n\n@Component({\n selector: 'ds-table',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-table.html',\n styleUrls: ['./ds-table.scss'],\n})\nexport class DsTable<T extends Record<string, unknown> = Record<string, unknown>> {\n // Inputs\n readonly data = input<T[]>([]);\n readonly columns = input<DsTableColumn<T>[]>([]);\n readonly size = input<DsTableSize>('md');\n readonly variant = input<DsTableVariant>('default');\n readonly selectable = input<boolean>(false);\n readonly hoverable = input<boolean>(true);\n readonly loading = input<boolean>(false);\n readonly emptyText = input<string>('Aucune donnée');\n readonly showHeader = input<boolean>(true);\n readonly stickyHeader = input<boolean>(false);\n readonly trackBy = input<TrackByFunction<T>>((index: number) => index);\n\n // Outputs\n readonly sortChange = output<SortEvent>();\n readonly rowClick = output<{ row: T; index: number }>();\n readonly selectionChange = output<T[]>();\n\n // Internal state\n protected readonly sortColumn = signal<string | null>(null);\n protected readonly sortDirection = signal<SortDirection>(null);\n protected readonly selectedRows = signal<Set<number>>(new Set());\n protected readonly filters = signal<Record<string, string>>({});\n\n // Computed\n protected readonly containerClasses = computed(() => ({\n 'ds-table': true,\n [`ds-table--${this.size()}`]: true,\n [`ds-table--${this.variant()}`]: true,\n 'ds-table--selectable': this.selectable(),\n 'ds-table--hoverable': this.hoverable(),\n 'ds-table--loading': this.loading(),\n 'ds-table--sticky-header': this.stickyHeader(),\n }));\n\n protected readonly processedData = computed(() => {\n let result = [...this.data()];\n\n // Apply filters\n const currentFilters = this.filters();\n Object.keys(currentFilters).forEach(key => {\n const filterValue = currentFilters[key]?.toLowerCase();\n if (filterValue) {\n result = result.filter(row => {\n const cellValue = String(this.getCellValue(row, key)).toLowerCase();\n return cellValue.includes(filterValue);\n });\n }\n });\n\n // Apply sorting\n const column = this.sortColumn();\n const direction = this.sortDirection();\n if (column && direction) {\n result.sort((a, b) => {\n const aVal = this.getCellValue(a, column);\n const bVal = this.getCellValue(b, column);\n\n if (aVal === bVal) return 0;\n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n\n const comparison = aVal < bVal ? -1 : 1;\n return direction === 'asc' ? comparison : -comparison;\n });\n }\n\n return result;\n });\n\n protected readonly isAllSelected = computed(() => {\n const data = this.processedData();\n if (data.length === 0) return false;\n return this.selectedRows().size === data.length;\n });\n\n protected readonly isPartiallySelected = computed(() => {\n const selected = this.selectedRows().size;\n return selected > 0 && selected < this.processedData().length;\n });\n\n // Methods\n getCellValue(row: T, key: string): unknown {\n const keys = key.split('.');\n let value: unknown = row;\n for (const k of keys) {\n if (value && typeof value === 'object') {\n value = (value as Record<string, unknown>)[k];\n } else {\n return undefined;\n }\n }\n return value;\n }\n\n formatCellValue(row: T, column: DsTableColumn<T>): string {\n const value = this.getCellValue(row, column.key as string);\n if (column.format) {\n return column.format(value, row);\n }\n if (value === null || value === undefined) {\n return '';\n }\n return String(value);\n }\n\n onSort(column: DsTableColumn<T>): void {\n if (!column.sortable) return;\n\n const key = column.key as string;\n const currentColumn = this.sortColumn();\n const currentDirection = this.sortDirection();\n\n let newDirection: SortDirection;\n if (currentColumn !== key) {\n newDirection = 'asc';\n } else if (currentDirection === 'asc') {\n newDirection = 'desc';\n } else {\n newDirection = null;\n }\n\n this.sortColumn.set(newDirection ? key : null);\n this.sortDirection.set(newDirection);\n\n this.sortChange.emit({\n column: key,\n direction: newDirection,\n });\n }\n\n onRowClick(row: T, index: number): void {\n this.rowClick.emit({ row, index });\n }\n\n toggleRowSelection(index: number, event: Event): void {\n event.stopPropagation();\n const newSet = new Set(this.selectedRows());\n if (newSet.has(index)) {\n newSet.delete(index);\n } else {\n newSet.add(index);\n }\n this.selectedRows.set(newSet);\n this.emitSelectionChange();\n }\n\n toggleAllSelection(event: Event): void {\n event.stopPropagation();\n const data = this.processedData();\n if (this.isAllSelected()) {\n this.selectedRows.set(new Set());\n } else {\n this.selectedRows.set(new Set(data.map((_, i) => i)));\n }\n this.emitSelectionChange();\n }\n\n isRowSelected(index: number): boolean {\n return this.selectedRows().has(index);\n }\n\n setFilter(column: string, value: string): void {\n const newFilters = { ...this.filters() };\n if (value) {\n newFilters[column] = value;\n } else {\n delete newFilters[column];\n }\n this.filters.set(newFilters);\n }\n\n clearFilters(): void {\n this.filters.set({});\n }\n\n getSelectedRows(): T[] {\n const data = this.processedData();\n return Array.from(this.selectedRows()).map(i => data[i]);\n }\n\n getSortIcon(column: DsTableColumn<T>): string {\n const key = column.key as string;\n if (this.sortColumn() !== key) {\n return 'sort';\n }\n return this.sortDirection() === 'asc' ? 'sort-asc' : 'sort-desc';\n }\n\n getColumnStyle(column: DsTableColumn<T>): Record<string, string> {\n const style: Record<string, string> = {};\n if (column.width) {\n style['width'] = column.width;\n }\n if (column.align) {\n style['text-align'] = column.align;\n }\n return style;\n }\n\n private emitSelectionChange(): void {\n this.selectionChange.emit(this.getSelectedRows());\n }\n\n // TrackBy\n trackByFn: TrackByFunction<T> = (index: number, item: T) => {\n const customTrackBy = this.trackBy();\n return customTrackBy(index, item);\n };\n}\n","<div [ngClass]=\"containerClasses()\">\n <div class=\"ds-table__wrapper\">\n <table class=\"ds-table__element\" role=\"grid\">\n <!-- Header -->\n @if (showHeader()) {\n <thead class=\"ds-table__header\">\n <tr class=\"ds-table__row ds-table__row--header\">\n @if (selectable()) {\n <th class=\"ds-table__cell ds-table__cell--checkbox\" scope=\"col\">\n <input\n type=\"checkbox\"\n class=\"ds-table__checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isPartiallySelected()\"\n (change)=\"toggleAllSelection($event)\"\n aria-label=\"Sélectionner tout\" />\n </th>\n }\n @for (column of columns(); track column.key) {\n <th\n class=\"ds-table__cell ds-table__cell--header\"\n [class]=\"column.headerClass || ''\"\n [class.ds-table__cell--sortable]=\"column.sortable\"\n [class.ds-table__cell--sorted]=\"sortColumn() === column.key\"\n [style]=\"getColumnStyle(column)\"\n [attr.aria-sort]=\"sortColumn() === column.key ? (sortDirection() === 'asc' ? 'ascending' : 'descending') : null\"\n scope=\"col\"\n (click)=\"onSort(column)\">\n <span class=\"ds-table__header-content\">\n <span class=\"ds-table__header-label\">{{ column.label }}</span>\n @if (column.sortable) {\n <span class=\"ds-table__sort-icon\" [class.ds-table__sort-icon--active]=\"sortColumn() === column.key\">\n @if (sortColumn() === column.key && sortDirection() === 'asc') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n } @else if (sortColumn() === column.key && sortDirection() === 'desc') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n } @else {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" opacity=\"0.4\">\n <polyline points=\"7 15 12 20 17 15\"></polyline>\n <polyline points=\"17 9 12 4 7 9\"></polyline>\n </svg>\n }\n </span>\n }\n </span>\n </th>\n }\n </tr>\n </thead>\n }\n\n <!-- Body -->\n <tbody class=\"ds-table__body\">\n @if (loading()) {\n <tr class=\"ds-table__row ds-table__row--loading\">\n <td class=\"ds-table__cell ds-table__cell--loading\" [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\">\n <div class=\"ds-table__loading\">\n <span class=\"ds-table__loading-spinner\"></span>\n <span class=\"ds-table__loading-text\">Chargement...</span>\n </div>\n </td>\n </tr>\n } @else if (processedData().length === 0) {\n <tr class=\"ds-table__row ds-table__row--empty\">\n <td class=\"ds-table__cell ds-table__cell--empty\" [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\">\n <div class=\"ds-table__empty\">\n {{ emptyText() }}\n </div>\n </td>\n </tr>\n } @else {\n @for (row of processedData(); track trackByFn($index, row); let i = $index) {\n <tr\n class=\"ds-table__row ds-table__row--body\"\n [class.ds-table__row--selected]=\"isRowSelected(i)\"\n role=\"row\"\n (click)=\"onRowClick(row, i)\">\n @if (selectable()) {\n <td class=\"ds-table__cell ds-table__cell--checkbox\">\n <input\n type=\"checkbox\"\n class=\"ds-table__checkbox\"\n [checked]=\"isRowSelected(i)\"\n (change)=\"toggleRowSelection(i, $event)\"\n [attr.aria-label]=\"'Sélectionner ligne ' + (i + 1)\" />\n </td>\n }\n @for (column of columns(); track column.key) {\n <td\n class=\"ds-table__cell\"\n [class]=\"column.cellClass || ''\"\n [style]=\"getColumnStyle(column)\"\n role=\"gridcell\">\n {{ formatCellValue(row, column) }}\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n forwardRef,\n ElementRef,\n ViewChild,\n HostListener,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface DsComboboxOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n description?: string;\n}\n\nexport type DsComboboxSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ds-combobox',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-combobox.html',\n styleUrls: ['./ds-combobox.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsCombobox),\n multi: true,\n },\n ],\n})\nexport class DsCombobox implements ControlValueAccessor {\n // Inputs\n readonly options = input<DsComboboxOption[]>([]);\n readonly placeholder = input<string>('Rechercher...');\n readonly size = input<DsComboboxSize>('md');\n readonly disabled = input<boolean>(false);\n readonly error = input<string>('');\n readonly helper = input<string>('');\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly required = input<boolean>(false);\n readonly clearable = input<boolean>(true);\n readonly allowCustom = input<boolean>(false);\n readonly minChars = input<number>(0);\n readonly maxResults = input<number>(50);\n readonly noResultsText = input<string>('Aucun résultat');\n readonly loadingText = input<string>('Chargement...');\n readonly loading = input<boolean>(false);\n\n // Outputs\n readonly selectionChange = output<DsComboboxOption | null>();\n readonly inputChange = output<string>();\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // Internal state\n protected readonly isOpen = signal(false);\n protected readonly inputValue = signal('');\n protected readonly focusedIndex = signal(-1);\n private readonly internalValue = signal<string | number | null>(null);\n private readonly cvaDisabled = signal(false);\n\n @ViewChild('inputElement') inputElement!: ElementRef<HTMLInputElement>;\n @ViewChild('listbox') listbox!: ElementRef<HTMLUListElement>;\n\n private onChange: (value: string | number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // Computed\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly selectedOption = computed(() => {\n const value = this.internalValue();\n if (value === null) return null;\n return this.options().find(opt => opt.value === value) || null;\n });\n\n protected readonly filteredOptions = computed(() => {\n const query = this.inputValue().toLowerCase();\n const minLength = this.minChars();\n\n if (query.length < minLength) return [];\n\n let results = this.options().filter(opt =>\n opt.label.toLowerCase().includes(query) ||\n (opt.description && opt.description.toLowerCase().includes(query))\n );\n\n return results.slice(0, this.maxResults());\n });\n\n protected readonly shouldShowDropdown = computed(() => {\n if (!this.isOpen()) return false;\n if (this.loading()) return true;\n if (this.inputValue().length < this.minChars()) return false;\n return this.filteredOptions().length > 0 || this.inputValue().length >= this.minChars();\n });\n\n protected readonly containerClasses = computed(() => ({\n 'ds-combobox': true,\n 'ds-combobox--open': this.isOpen(),\n 'ds-combobox--disabled': this.isDisabled(),\n 'ds-combobox--error': !!this.error(),\n [`ds-combobox--${this.size()}`]: true,\n }));\n\n protected readonly inputClasses = computed(() => ({\n 'ds-combobox__input': true,\n 'ds-combobox__input--has-value': !!this.inputValue(),\n }));\n\n // ControlValueAccessor\n writeValue(value: string | number | null): void {\n this.internalValue.set(value);\n const option = this.options().find(opt => opt.value === value);\n if (option) {\n this.inputValue.set(option.label);\n } else if (value === null) {\n this.inputValue.set('');\n }\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // Methods\n onInputFocus(): void {\n if (this.isDisabled()) return;\n this.open();\n }\n\n onInputBlur(): void {\n this.onTouched();\n // Delayed close to allow click on option\n setTimeout(() => {\n if (!this.isOpen()) return;\n this.close();\n\n // If no valid selection, handle based on allowCustom\n const selected = this.selectedOption();\n if (!selected && !this.allowCustom()) {\n this.inputValue.set('');\n this.internalValue.set(null);\n this.onChange(null);\n } else if (!selected && this.allowCustom() && this.inputValue()) {\n // Allow custom value\n const customValue = this.inputValue();\n this.internalValue.set(customValue);\n this.onChange(customValue);\n }\n }, 200);\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.inputValue.set(input.value);\n this.inputChange.emit(input.value);\n this.focusedIndex.set(-1);\n\n if (!this.isOpen() && input.value.length >= this.minChars()) {\n this.open();\n }\n }\n\n open(): void {\n if (this.isDisabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n this.closed.emit();\n }\n\n selectOption(option: DsComboboxOption): void {\n if (option.disabled) return;\n\n this.internalValue.set(option.value);\n this.inputValue.set(option.label);\n this.onChange(option.value);\n this.selectionChange.emit(option);\n this.close();\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this.inputValue.set('');\n this.internalValue.set(null);\n this.onChange(null);\n this.selectionChange.emit(null);\n this.inputElement?.nativeElement?.focus();\n }\n\n // Keyboard navigation\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.moveFocus(1);\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.moveFocus(-1);\n }\n break;\n\n case 'Enter':\n if (this.isOpen() && this.focusedIndex() >= 0) {\n event.preventDefault();\n const option = this.filteredOptions()[this.focusedIndex()];\n if (option && !option.disabled) {\n this.selectOption(option);\n }\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.close();\n }\n break;\n }\n }\n\n // Helpers\n private moveFocus(delta: number): void {\n const options = this.filteredOptions();\n if (options.length === 0) return;\n\n let newIndex = this.focusedIndex() + delta;\n\n // Wrap around\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n\n // Skip disabled options\n let attempts = 0;\n while (options[newIndex]?.disabled && attempts < options.length) {\n newIndex += delta;\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n attempts++;\n }\n\n this.focusedIndex.set(newIndex);\n }\n\n protected isOptionFocused(index: number): boolean {\n return this.focusedIndex() === index;\n }\n\n protected isOptionSelected(option: DsComboboxOption): boolean {\n return option.value === this.internalValue();\n }\n\n protected getOptionId(index: number): string {\n return `${this.name() || 'combobox'}-option-${index}`;\n }\n\n protected readonly listboxId = computed(() => `${this.name() || 'combobox'}-listbox`);\n protected readonly inputId = computed(() => `${this.name() || 'combobox'}-input`);\n}\n","<div [ngClass]=\"containerClasses()\">\n <!-- Label -->\n @if (label()) {\n <label class=\"ds-combobox__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ds-combobox__required\">*</span>\n }\n </label>\n }\n\n <!-- Input wrapper -->\n <div class=\"ds-combobox__input-wrapper\">\n <input\n #inputElement\n type=\"text\"\n [id]=\"inputId()\"\n [ngClass]=\"inputClasses()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"inputValue()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-autocomplete]=\"'list'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"focusedIndex() >= 0 ? getOptionId(focusedIndex()) : null\"\n role=\"combobox\"\n autocomplete=\"off\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (input)=\"onInput($event)\" />\n\n <span class=\"ds-combobox__icons\">\n @if (clearable() && inputValue()) {\n <button\n type=\"button\"\n class=\"ds-combobox__clear\"\n aria-label=\"Effacer\"\n tabindex=\"-1\"\n (mousedown)=\"clear($event)\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <span class=\"ds-combobox__arrow\" [class.ds-combobox__arrow--open]=\"isOpen()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </span>\n </span>\n </div>\n\n <!-- Dropdown -->\n @if (shouldShowDropdown()) {\n <div class=\"ds-combobox__dropdown\" role=\"presentation\">\n @if (loading()) {\n <div class=\"ds-combobox__loading\">\n <span class=\"ds-combobox__loading-spinner\"></span>\n <span>{{ loadingText() }}</span>\n </div>\n } @else {\n <ul\n #listbox\n [id]=\"listboxId()\"\n class=\"ds-combobox__listbox\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\">\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li\n [id]=\"getOptionId(i)\"\n class=\"ds-combobox__option\"\n [class.ds-combobox__option--focused]=\"isOptionFocused(i)\"\n [class.ds-combobox__option--selected]=\"isOptionSelected(option)\"\n [class.ds-combobox__option--disabled]=\"option.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isOptionSelected(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (mousedown)=\"selectOption(option)\">\n <span class=\"ds-combobox__option-content\">\n <span class=\"ds-combobox__option-label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"ds-combobox__option-description\">{{ option.description }}</span>\n }\n </span>\n @if (isOptionSelected(option)) {\n <svg\n class=\"ds-combobox__check\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n </li>\n } @empty {\n <li class=\"ds-combobox__empty\" role=\"option\" aria-disabled=\"true\">\n {{ noResultsText() }}\n </li>\n }\n </ul>\n }\n </div>\n }\n\n <!-- Helper / Error -->\n @if (error()) {\n <span class=\"ds-combobox__error\" role=\"alert\">{{ error() }}</span>\n } @else if (helper()) {\n <span class=\"ds-combobox__helper\">{{ helper() }}</span>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ContainerMaxWidth = 'fluid' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type ContainerGutter = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * DsContainer - Composant de layout responsive\n *\n * @description\n * Conteneur responsive avec max-width configurable, centrage automatique\n * et gutters (padding horizontal) adaptatifs.\n *\n * @example\n * ```html\n * <ds-container maxWidth=\"lg\" gutter=\"md\">\n * <p>Contenu centré avec max-width 960px</p>\n * </ds-container>\n * ```\n */\n@Component({\n selector: 'ds-container',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"containerClasses()\" [style]=\"containerStyle()\">\n <ng-content />\n </div>\n `,\n styleUrls: ['./ds-container.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsContainer {\n /**\n * Largeur maximale du conteneur\n * - fluid: 100% (pas de max-width)\n * - sm: 540px\n * - md: 720px\n * - lg: 960px\n * - xl: 1140px\n * - 2xl: 1320px\n */\n readonly maxWidth = input<ContainerMaxWidth>('lg');\n\n /**\n * Centrer le conteneur horizontalement\n */\n readonly center = input<boolean>(true);\n\n /**\n * Padding horizontal (gutter)\n * - none: 0\n * - sm: 16px\n * - md: 24px\n * - lg: 32px\n */\n readonly gutter = input<ContainerGutter>('md');\n\n /**\n * Padding vertical\n * - none: 0\n * - sm: 16px\n * - md: 24px\n * - lg: 32px\n */\n readonly paddingY = input<ContainerGutter>('none');\n\n /**\n * Classe CSS additionnelle\n */\n readonly customClass = input<string>('');\n\n readonly containerClasses = computed(() => {\n const classes = ['ds-container'];\n classes.push(`ds-container--${this.maxWidth()}`);\n classes.push(`ds-container--gutter-${this.gutter()}`);\n classes.push(`ds-container--padding-y-${this.paddingY()}`);\n\n if (this.center()) {\n classes.push('ds-container--center');\n }\n\n if (this.customClass()) {\n classes.push(this.customClass());\n }\n\n return classes.join(' ');\n });\n\n readonly containerStyle = computed(() => {\n const maxWidthValues: Record<ContainerMaxWidth, string> = {\n fluid: '100%',\n sm: '540px',\n md: '720px',\n lg: '960px',\n xl: '1140px',\n '2xl': '1320px',\n };\n\n return {\n '--container-max-width': maxWidthValues[this.maxWidth()],\n };\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n forwardRef,\n OnDestroy,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faSearch, faXmark, faSpinner } from '@fortawesome/free-solid-svg-icons';\n\nexport type SearchInputSize = 'sm' | 'md' | 'lg';\n\n/**\n * DsSearchInput - Composant de recherche avec debounce\n *\n * @description\n * Input de recherche avec icône, bouton clear, debounce configurable\n * et intégration formulaires via ControlValueAccessor.\n *\n * @example\n * ```html\n * <ds-search-input\n * placeholder=\"Rechercher...\"\n * [debounceTime]=\"300\"\n * (search)=\"onSearch($event)\">\n * </ds-search-input>\n * ```\n */\n@Component({\n selector: 'ds-search-input',\n standalone: true,\n imports: [CommonModule, FormsModule, FontAwesomeModule],\n template: `\n <div [class]=\"containerClasses()\">\n <fa-icon\n class=\"ds-search-input__icon ds-search-input__icon--search\"\n [icon]=\"searchIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n\n <input\n #inputRef\n type=\"text\"\n class=\"ds-search-input__input\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || placeholder()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [ngModel]=\"internalValue()\"\n (ngModelChange)=\"onInputChange($event)\"\n (keydown.enter)=\"onEnter()\"\n (keydown.escape)=\"onClear()\"\n />\n\n @if (loading()) {\n <fa-icon\n class=\"ds-search-input__icon ds-search-input__icon--loading ds-search-input__icon--spin\"\n [icon]=\"spinnerIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n } @else if (showClearButton()) {\n <button\n type=\"button\"\n class=\"ds-search-input__clear\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"onClear()\">\n <fa-icon [icon]=\"clearIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n </div>\n `,\n styleUrls: ['./ds-search-input.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSearchInput),\n multi: true,\n },\n ],\n})\nexport class DsSearchInput implements ControlValueAccessor, OnDestroy {\n /** Taille du composant */\n readonly size = input<SearchInputSize>('md');\n\n /** Placeholder du champ */\n readonly placeholder = input<string>('Rechercher...');\n\n /** Délai de debounce en ms */\n readonly debounceMs = input<number>(300);\n\n /** État désactivé */\n readonly disabled = input<boolean>(false);\n\n /** État de chargement */\n readonly loading = input<boolean>(false);\n\n /** Afficher le bouton clear */\n readonly clearable = input<boolean>(true);\n\n /** Caractères minimum avant recherche */\n readonly minChars = input<number>(0);\n\n /** Label du bouton clear */\n readonly clearLabel = input<string>('Effacer la recherche');\n\n /** Label ARIA */\n readonly ariaLabel = input<string>('');\n\n /** ID de l'élément décrit par ce champ */\n readonly ariaDescribedBy = input<string>('');\n\n /** Événement de recherche (après debounce) */\n readonly search = output<string>();\n\n /** Événement de recherche immédiate (touche Entrée) */\n readonly searchImmediate = output<string>();\n\n /** Événement d'effacement */\n readonly cleared = output<void>();\n\n /** Référence à l'input */\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n\n /** Icônes */\n readonly searchIcon = faSearch;\n readonly clearIcon = faXmark;\n readonly spinnerIcon = faSpinner;\n\n /** Valeur interne (signal pour réactivité) */\n readonly internalValue = signal('');\n\n /** Subject pour debounce */\n private readonly searchSubject = new Subject<string>();\n private readonly destroy$ = new Subject<void>();\n\n /** Callbacks CVA */\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly containerClasses = computed(() => {\n const classes = ['ds-search-input'];\n classes.push(`ds-search-input--${this.size()}`);\n\n if (this.disabled()) {\n classes.push('ds-search-input--disabled');\n }\n\n if (this.loading()) {\n classes.push('ds-search-input--loading');\n }\n\n return classes.join(' ');\n });\n\n readonly showClearButton = computed(() => {\n return this.clearable() && this.internalValue().length > 0 && !this.disabled();\n });\n\n constructor() {\n this.searchSubject\n .pipe(\n debounceTime(this.debounceMs()),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n )\n .subscribe((value) => {\n if (value.length >= this.minChars()) {\n this.search.emit(value);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onInputChange(value: string): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.searchSubject.next(value);\n }\n\n onClear(): void {\n this.internalValue.set('');\n // Force la valeur de l'input natif pour synchronisation immédiate\n const input = this.inputRef();\n if (input) {\n input.nativeElement.value = '';\n }\n this.onChange('');\n this.search.emit('');\n this.cleared.emit();\n this.focus();\n }\n\n onEnter(): void {\n if (this.internalValue().length >= this.minChars()) {\n this.searchImmediate.emit(this.internalValue());\n }\n }\n\n /** Focus sur l'input */\n focus(): void {\n const input = this.inputRef();\n if (input) {\n input.nativeElement.focus();\n }\n }\n\n /** Sélectionner tout le texte */\n selectAll(): void {\n const input = this.inputRef();\n if (input) {\n input.nativeElement.select();\n }\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: string): void {\n this.internalValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // Le disabled est géré via l'input signal\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n forwardRef,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faChevronLeft,\n faChevronRight,\n faCalendar,\n} from '@fortawesome/free-solid-svg-icons';\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg';\nexport type DatePickerMode = 'single' | 'range';\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/**\n * DsDatePicker - Composant de sélection de date\n *\n * @description\n * Calendrier avec navigation mensuelle, sélection simple ou range,\n * et intégration formulaires via ControlValueAccessor.\n *\n * @example\n * ```html\n * <ds-date-picker\n * [mode]=\"'single'\"\n * (dateChange)=\"onDateChange($event)\">\n * </ds-date-picker>\n * ```\n */\n@Component({\n selector: 'ds-date-picker',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule],\n template: `\n <div [class]=\"containerClasses()\">\n <!-- Header avec navigation -->\n <div class=\"ds-date-picker__header\">\n <button\n type=\"button\"\n class=\"ds-date-picker__nav ds-date-picker__nav--prev\"\n [attr.aria-label]=\"prevMonthLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"navigateMonth(-1)\">\n <fa-icon [icon]=\"prevIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <div class=\"ds-date-picker__title\">\n <button\n type=\"button\"\n class=\"ds-date-picker__month-btn\"\n [disabled]=\"disabled()\"\n (click)=\"toggleMonthPicker()\">\n {{ currentMonthName() }}\n </button>\n <button\n type=\"button\"\n class=\"ds-date-picker__year-btn\"\n [disabled]=\"disabled()\"\n (click)=\"toggleYearPicker()\">\n {{ currentYear() }}\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"ds-date-picker__nav ds-date-picker__nav--next\"\n [attr.aria-label]=\"nextMonthLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"navigateMonth(1)\">\n <fa-icon [icon]=\"nextIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n </div>\n\n <!-- Sélecteur de mois -->\n @if (showMonthPicker()) {\n <div class=\"ds-date-picker__month-picker\" role=\"listbox\">\n @for (month of monthNames; track month; let i = $index) {\n <button\n type=\"button\"\n class=\"ds-date-picker__month-option\"\n [class.ds-date-picker__month-option--selected]=\"i === currentMonth()\"\n [disabled]=\"disabled()\"\n role=\"option\"\n [attr.aria-selected]=\"i === currentMonth()\"\n (click)=\"selectMonth(i)\">\n {{ month }}\n </button>\n }\n </div>\n }\n\n <!-- Sélecteur d'année -->\n @if (showYearPicker()) {\n <div class=\"ds-date-picker__year-picker\" role=\"listbox\">\n @for (year of yearRange(); track year) {\n <button\n type=\"button\"\n class=\"ds-date-picker__year-option\"\n [class.ds-date-picker__year-option--selected]=\"year === currentYear()\"\n [disabled]=\"disabled()\"\n role=\"option\"\n [attr.aria-selected]=\"year === currentYear()\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </button>\n }\n </div>\n }\n\n <!-- Calendrier -->\n @if (!showMonthPicker() && !showYearPicker()) {\n <div class=\"ds-date-picker__calendar\" role=\"grid\" [attr.aria-label]=\"calendarLabel()\">\n <!-- En-têtes jours -->\n <div class=\"ds-date-picker__weekdays\" role=\"row\">\n @for (day of weekDays; track day) {\n <div class=\"ds-date-picker__weekday\" role=\"columnheader\">{{ day }}</div>\n }\n </div>\n\n <!-- Grille des jours -->\n <div class=\"ds-date-picker__days\">\n @for (week of calendarWeeks(); track $index) {\n <div class=\"ds-date-picker__week\" role=\"row\">\n @for (day of week; track day.date?.getTime() ?? $index) {\n <button\n type=\"button\"\n class=\"ds-date-picker__day\"\n [class.ds-date-picker__day--other-month]=\"!day.isCurrentMonth\"\n [class.ds-date-picker__day--today]=\"day.isToday\"\n [class.ds-date-picker__day--selected]=\"day.isSelected\"\n [class.ds-date-picker__day--range-start]=\"day.isRangeStart\"\n [class.ds-date-picker__day--range-end]=\"day.isRangeEnd\"\n [class.ds-date-picker__day--in-range]=\"day.isInRange\"\n [class.ds-date-picker__day--disabled]=\"day.isDisabled\"\n [disabled]=\"disabled() || day.isDisabled\"\n role=\"gridcell\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-label]=\"day.ariaLabel\"\n (click)=\"selectDate(day.date)\"\n (keydown)=\"onDayKeydown($event, day.date)\">\n {{ day.dayNumber }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Actions -->\n @if (showTodayButton() || showClearButton()) {\n <div class=\"ds-date-picker__actions\">\n @if (showTodayButton()) {\n <button\n type=\"button\"\n class=\"ds-date-picker__action\"\n [disabled]=\"disabled()\"\n (click)=\"goToToday()\">\n {{ todayLabel() }}\n </button>\n }\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"ds-date-picker__action\"\n [disabled]=\"disabled()\"\n (click)=\"clearSelection()\">\n {{ clearLabel() }}\n </button>\n }\n </div>\n }\n }\n </div>\n `,\n styleUrls: ['./ds-date-picker.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsDatePicker),\n multi: true,\n },\n ],\n})\nexport class DsDatePicker implements ControlValueAccessor, OnInit {\n /** Taille du composant */\n readonly size = input<DatePickerSize>('md');\n\n /** Mode de sélection */\n readonly mode = input<DatePickerMode>('single');\n\n /** État désactivé */\n readonly disabled = input<boolean>(false);\n\n /** Date minimum sélectionnable */\n readonly minDate = input<Date | null>(null);\n\n /** Date maximum sélectionnable */\n readonly maxDate = input<Date | null>(null);\n\n /** Afficher le bouton \"Aujourd'hui\" */\n readonly showTodayButton = input<boolean>(true);\n\n /** Afficher le bouton \"Effacer\" */\n readonly showClearButton = input<boolean>(true);\n\n /** Label du bouton \"Aujourd'hui\" */\n readonly todayLabel = input<string>(\"Aujourd'hui\");\n\n /** Label du bouton \"Effacer\" */\n readonly clearLabel = input<string>('Effacer');\n\n /** Label bouton mois précédent */\n readonly prevMonthLabel = input<string>('Mois précédent');\n\n /** Label bouton mois suivant */\n readonly nextMonthLabel = input<string>('Mois suivant');\n\n /** Événement de changement de date (mode single) */\n readonly dateChange = output<Date | null>();\n\n /** Événement de changement de range */\n readonly rangeChange = output<DateRange>();\n\n /** Icônes */\n readonly prevIcon = faChevronLeft;\n readonly nextIcon = faChevronRight;\n readonly calendarIcon = faCalendar;\n\n /** Jours de la semaine */\n readonly weekDays = ['Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di'];\n\n /** Noms des mois */\n readonly monthNames = [\n 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',\n 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'\n ];\n\n /** État interne */\n readonly currentMonth = signal(new Date().getMonth());\n readonly currentYear = signal(new Date().getFullYear());\n readonly selectedDate = signal<Date | null>(null);\n readonly rangeStart = signal<Date | null>(null);\n readonly rangeEnd = signal<Date | null>(null);\n readonly showMonthPicker = signal(false);\n readonly showYearPicker = signal(false);\n\n /** Callbacks CVA */\n private onChange: (value: Date | DateRange | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly containerClasses = computed(() => {\n const classes = ['ds-date-picker'];\n classes.push(`ds-date-picker--${this.size()}`);\n\n if (this.disabled()) {\n classes.push('ds-date-picker--disabled');\n }\n\n return classes.join(' ');\n });\n\n readonly currentMonthName = computed(() => {\n return this.monthNames[this.currentMonth()];\n });\n\n readonly calendarLabel = computed(() => {\n return `Calendrier ${this.currentMonthName()} ${this.currentYear()}`;\n });\n\n readonly yearRange = computed(() => {\n const currentYear = this.currentYear();\n const years: number[] = [];\n for (let i = currentYear - 10; i <= currentYear + 10; i++) {\n years.push(i);\n }\n return years;\n });\n\n readonly calendarWeeks = computed(() => {\n const year = this.currentYear();\n const month = this.currentMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n\n // Trouver le premier lundi avant ou égal au premier jour du mois\n const startDate = new Date(firstDay);\n const dayOfWeek = startDate.getDay();\n const diff = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // Ajuster pour commencer lundi\n startDate.setDate(startDate.getDate() - diff);\n\n const weeks: CalendarDay[][] = [];\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n let currentDate = new Date(startDate);\n\n for (let w = 0; w < 6; w++) {\n const week: CalendarDay[] = [];\n for (let d = 0; d < 7; d++) {\n const date = new Date(currentDate);\n date.setHours(0, 0, 0, 0);\n\n const isCurrentMonth = date.getMonth() === month;\n const isToday = date.getTime() === today.getTime();\n const isSelected = this.isDateSelected(date);\n const isRangeStart = this.isRangeStartDate(date);\n const isRangeEnd = this.isRangeEndDate(date);\n const isInRange = this.isDateInRange(date);\n const isDisabled = this.isDateDisabled(date);\n\n week.push({\n date,\n dayNumber: date.getDate(),\n isCurrentMonth,\n isToday,\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange,\n isDisabled,\n ariaLabel: this.formatDateForAria(date),\n });\n\n currentDate.setDate(currentDate.getDate() + 1);\n }\n weeks.push(week);\n\n // Arrêter si on a dépassé le mois\n if (currentDate.getMonth() > month && currentDate.getFullYear() >= year) {\n break;\n }\n }\n\n return weeks;\n });\n\n ngOnInit(): void {\n // Initialiser avec la date actuelle si aucune valeur\n }\n\n navigateMonth(delta: number): void {\n let newMonth = this.currentMonth() + delta;\n let newYear = this.currentYear();\n\n if (newMonth < 0) {\n newMonth = 11;\n newYear--;\n } else if (newMonth > 11) {\n newMonth = 0;\n newYear++;\n }\n\n this.currentMonth.set(newMonth);\n this.currentYear.set(newYear);\n this.showMonthPicker.set(false);\n this.showYearPicker.set(false);\n }\n\n toggleMonthPicker(): void {\n this.showMonthPicker.update(v => !v);\n this.showYearPicker.set(false);\n }\n\n toggleYearPicker(): void {\n this.showYearPicker.update(v => !v);\n this.showMonthPicker.set(false);\n }\n\n selectMonth(month: number): void {\n this.currentMonth.set(month);\n this.showMonthPicker.set(false);\n }\n\n selectYear(year: number): void {\n this.currentYear.set(year);\n this.showYearPicker.set(false);\n }\n\n selectDate(date: Date | null): void {\n if (!date || this.disabled() || this.isDateDisabled(date)) {\n return;\n }\n\n if (this.mode() === 'single') {\n this.selectedDate.set(date);\n this.dateChange.emit(date);\n this.onChange(date);\n } else {\n // Mode range\n const start = this.rangeStart();\n const end = this.rangeEnd();\n\n if (!start || (start && end)) {\n // Nouvelle sélection\n this.rangeStart.set(date);\n this.rangeEnd.set(null);\n } else {\n // Compléter la sélection\n if (date < start) {\n this.rangeStart.set(date);\n this.rangeEnd.set(start);\n } else {\n this.rangeEnd.set(date);\n }\n const range: DateRange = {\n start: this.rangeStart(),\n end: this.rangeEnd(),\n };\n this.rangeChange.emit(range);\n this.onChange(range);\n }\n }\n\n this.onTouched();\n }\n\n goToToday(): void {\n const today = new Date();\n this.currentMonth.set(today.getMonth());\n this.currentYear.set(today.getFullYear());\n this.showMonthPicker.set(false);\n this.showYearPicker.set(false);\n }\n\n clearSelection(): void {\n if (this.mode() === 'single') {\n this.selectedDate.set(null);\n this.dateChange.emit(null);\n this.onChange(null);\n } else {\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n const range: DateRange = { start: null, end: null };\n this.rangeChange.emit(range);\n this.onChange(range);\n }\n }\n\n onDayKeydown(event: KeyboardEvent, date: Date | null): void {\n if (!date) return;\n\n let newDate: Date | null = null;\n\n switch (event.key) {\n case 'ArrowLeft':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() - 1);\n break;\n case 'ArrowRight':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() + 1);\n break;\n case 'ArrowUp':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() - 7);\n break;\n case 'ArrowDown':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() + 7);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.selectDate(date);\n return;\n default:\n return;\n }\n\n if (newDate) {\n event.preventDefault();\n // Naviguer vers le mois si nécessaire\n if (newDate.getMonth() !== this.currentMonth() ||\n newDate.getFullYear() !== this.currentYear()) {\n this.currentMonth.set(newDate.getMonth());\n this.currentYear.set(newDate.getFullYear());\n }\n }\n }\n\n private isDateSelected(date: Date): boolean {\n if (this.mode() === 'single') {\n const selected = this.selectedDate();\n return selected ? this.isSameDay(date, selected) : false;\n }\n return this.isRangeStartDate(date) || this.isRangeEndDate(date);\n }\n\n private isRangeStartDate(date: Date): boolean {\n const start = this.rangeStart();\n return start ? this.isSameDay(date, start) : false;\n }\n\n private isRangeEndDate(date: Date): boolean {\n const end = this.rangeEnd();\n return end ? this.isSameDay(date, end) : false;\n }\n\n private isDateInRange(date: Date): boolean {\n if (this.mode() !== 'range') return false;\n const start = this.rangeStart();\n const end = this.rangeEnd();\n if (!start || !end) return false;\n return date > start && date < end;\n }\n\n private isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n if (min && date < min) return true;\n if (max && date > max) return true;\n return false;\n }\n\n private isSameDay(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n }\n\n private formatDateForAria(date: Date): string {\n return date.toLocaleDateString('fr-FR', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: Date | DateRange | null): void {\n if (!value) {\n this.selectedDate.set(null);\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n return;\n }\n\n if (value instanceof Date) {\n this.selectedDate.set(value);\n this.currentMonth.set(value.getMonth());\n this.currentYear.set(value.getFullYear());\n } else if ('start' in value && 'end' in value) {\n this.rangeStart.set(value.start);\n this.rangeEnd.set(value.end);\n if (value.start) {\n this.currentMonth.set(value.start.getMonth());\n this.currentYear.set(value.start.getFullYear());\n }\n }\n }\n\n registerOnChange(fn: (value: Date | DateRange | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // Géré via l'input signal\n }\n}\n\ninterface CalendarDay {\n date: Date;\n dayNumber: number;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isInRange: boolean;\n isDisabled: boolean;\n ariaLabel: string;\n}\n","import { Component, computed, input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AvatarShape = 'circle' | 'rounded' | 'square';\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'ds-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-avatar.html',\n styleUrls: ['./ds-avatar.scss'],\n})\nexport class DsAvatar {\n /** URL de l'image avatar */\n readonly src = input<string | undefined>(undefined);\n\n /** Texte alternatif pour l'image */\n readonly alt = input<string>('');\n\n /** Nom complet pour générer les initiales */\n readonly name = input<string>('');\n\n /** Initiales personnalisées (priorité sur name) */\n readonly initials = input<string | undefined>(undefined);\n\n /** Forme de l'avatar */\n readonly shape = input<AvatarShape>('circle');\n\n /** Taille de l'avatar */\n readonly size = input<AvatarSize>('md');\n\n /** Générer automatiquement une couleur de fond à partir des initiales */\n readonly autoColor = input<boolean>(false);\n\n /** État interne pour l'erreur de chargement d'image */\n private readonly imageError = signal<boolean>(false);\n\n /** Indique si l'image doit être affichée */\n readonly showImage = computed(() => !!this.src() && !this.imageError());\n\n /** Initiales à afficher (générées ou fournies) */\n readonly displayInitials = computed(() => {\n const customInitials = this.initials();\n if (customInitials) {\n return customInitials.substring(0, 2).toUpperCase();\n }\n\n const name = this.name();\n if (!name) return '';\n\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].substring(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n\n /** Classes CSS du conteneur */\n readonly containerClasses = computed(() => ({\n 'ds-avatar': true,\n [`ds-avatar--${this.shape()}`]: true,\n [`ds-avatar--${this.size()}`]: true,\n 'ds-avatar--has-image': this.showImage(),\n 'ds-avatar--initials': !this.showImage(),\n }));\n\n /** Couleur de fond auto-générée */\n readonly generatedBgColor = computed(() => {\n if (!this.autoColor()) return null;\n const initials = this.displayInitials();\n if (!initials) return null;\n\n // Algorithme de hash simple vers couleur HSL\n let hash = 0;\n for (let i = 0; i < initials.length; i++) {\n hash = initials.charCodeAt(i) + ((hash << 5) - hash);\n }\n const hue = Math.abs(hash % 360);\n return `hsl(${hue}, 65%, 45%)`;\n });\n\n /** Label ARIA pour l'accessibilité */\n readonly ariaLabel = computed(() => {\n const alt = this.alt();\n if (alt) return alt;\n const name = this.name();\n if (name) return `Avatar de ${name}`;\n return 'Avatar';\n });\n\n /** Gestionnaire d'erreur de chargement d'image */\n onImageError(): void {\n this.imageError.set(true);\n }\n\n /** Gestionnaire de chargement réussi d'image */\n onImageLoad(): void {\n this.imageError.set(false);\n }\n}\n","<div\n [ngClass]=\"containerClasses()\"\n [style.background-color]=\"generatedBgColor()\"\n [attr.role]=\"showImage() ? null : 'img'\"\n [attr.aria-label]=\"showImage() ? null : ariaLabel()\"\n>\n @if (showImage()) {\n <img\n [src]=\"src()\"\n [alt]=\"ariaLabel()\"\n class=\"ds-avatar__image\"\n (error)=\"onImageError()\"\n (load)=\"onImageLoad()\"\n />\n } @else {\n <span class=\"ds-avatar__initials\" aria-hidden=\"true\">\n {{ displayInitials() }}\n </span>\n }\n</div>\n","import {\n Component,\n ElementRef,\n ViewChild,\n ViewChildren,\n QueryList,\n computed,\n input,\n output,\n signal,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { DROPDOWN_POSITIONS } from '../../utils/overlay-positions';\n\nexport interface MenuItem {\n /** Identifiant unique de l'item */\n id: string;\n /** Label affiché */\n label: string;\n /** Icône FontAwesome optionnelle */\n icon?: IconDefinition;\n /** Item désactivé */\n disabled?: boolean;\n /** Séparateur avant cet item */\n dividerBefore?: boolean;\n}\n\nexport type MenuTrigger = 'click' | 'contextmenu';\nexport type MenuSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ds-menu',\n standalone: true,\n imports: [CommonModule, FaIconComponent, CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './ds-menu.html',\n styleUrls: ['./ds-menu.scss'],\n})\nexport class DsMenu implements OnDestroy {\n /** Liste des items du menu */\n readonly items = input.required<MenuItem[]>();\n\n /** Taille du menu */\n readonly size = input<MenuSize>('md');\n\n /** Événement déclencheur */\n readonly trigger = input<MenuTrigger>('click');\n\n /** Fermer le menu après sélection */\n readonly closeOnSelect = input<boolean>(true);\n\n /** Label ARIA pour l'accessibilité */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** Événement émis lors de la sélection d'un item */\n readonly itemSelected = output<MenuItem>();\n\n /** Événement émis à l'ouverture du menu */\n readonly opened = output<void>();\n\n /** Événement émis à la fermeture du menu */\n readonly closed = output<void>();\n\n @ViewChild('menuTrigger', { read: ElementRef }) triggerElement?: ElementRef;\n @ViewChildren('menuItemRef') menuItemsRef?: QueryList<ElementRef<HTMLButtonElement>>;\n\n /** État interne d'ouverture */\n private readonly menuOpen = signal<boolean>(false);\n\n /** Index de l'item actif pour la navigation clavier */\n private readonly internalActiveIndex = signal<number>(-1);\n\n /** Exposition en lecture seule de l'index actif */\n readonly activeIndex = computed(() => this.internalActiveIndex());\n\n /** État d'ouverture du menu (lecture seule) */\n readonly isOpen = computed(() => this.menuOpen());\n\n /** Positions pour l'overlay CDK */\n readonly overlayPositions = DROPDOWN_POSITIONS;\n\n /** Classes CSS du panel menu */\n readonly menuClasses = computed(() => ({\n 'ds-menu__panel': true,\n [`ds-menu__panel--${this.size()}`]: true,\n }));\n\n /** ID de l'item actif pour aria-activedescendant */\n readonly activeDescendantId = computed(() => {\n const items = this.items();\n const index = this.internalActiveIndex();\n if (index < 0 || index >= items.length) return undefined;\n return `menu-item-${items[index].id}`;\n });\n\n /** Ouvre le menu */\n open(): void {\n if (this.isOpen()) return;\n this.menuOpen.set(true);\n this.internalActiveIndex.set(this.findFirstEnabledIndex());\n this.opened.emit();\n queueMicrotask(() => this.focusActiveItem());\n }\n\n /** Ferme le menu */\n close(refocusTrigger = true): void {\n if (!this.isOpen()) return;\n this.menuOpen.set(false);\n this.internalActiveIndex.set(-1);\n if (refocusTrigger) {\n this.triggerElement?.nativeElement?.focus();\n }\n this.closed.emit();\n }\n\n /** Bascule l'état du menu */\n toggle(): void {\n this.isOpen() ? this.close() : this.open();\n }\n\n /** Sélectionne un item */\n selectItem(item: MenuItem): void {\n if (item.disabled) return;\n this.itemSelected.emit(item);\n if (this.closeOnSelect()) {\n this.close();\n }\n }\n\n /** Gestionnaire de clic sur le trigger */\n onTriggerClick(event: MouseEvent): void {\n if (this.trigger() === 'click') {\n event.preventDefault();\n this.toggle();\n }\n }\n\n /** Gestionnaire de clic droit sur le trigger */\n onTriggerContextMenu(event: MouseEvent): void {\n if (this.trigger() === 'contextmenu') {\n event.preventDefault();\n this.open();\n }\n }\n\n /** Gestionnaire de clavier sur le trigger */\n onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.open();\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n /** Gestionnaire de clavier dans le menu */\n onMenuKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveToNextEnabled(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveToNextEnabled(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.setActiveIndex(this.findFirstEnabledIndex());\n break;\n case 'End':\n event.preventDefault();\n this.setActiveIndex(this.findLastEnabledIndex());\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.selectActiveItem();\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close(false);\n break;\n }\n }\n\n /** Met à jour l'index actif au survol */\n onItemMouseEnter(index: number): void {\n if (!this.isOpen()) return;\n const item = this.items()[index];\n if (!item?.disabled) {\n this.internalActiveIndex.set(index);\n }\n }\n\n /** Gestionnaire de clic sur le backdrop */\n onBackdropClick(): void {\n this.close();\n }\n\n ngOnDestroy(): void {\n this.close(false);\n }\n\n /** Trouve l'index du premier item activable */\n private findFirstEnabledIndex(): number {\n return this.items().findIndex(item => !item.disabled);\n }\n\n /** Trouve l'index du dernier item activable */\n private findLastEnabledIndex(): number {\n const items = this.items();\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].disabled) return i;\n }\n return -1;\n }\n\n /** Navigue vers le prochain item activable */\n private moveToNextEnabled(direction: 1 | -1): void {\n const items = this.items();\n if (!items.length) return;\n\n let index = this.internalActiveIndex();\n const startIndex = index;\n\n do {\n index += direction;\n if (index < 0) index = items.length - 1;\n if (index >= items.length) index = 0;\n if (!items[index].disabled) {\n this.setActiveIndex(index);\n return;\n }\n } while (index !== startIndex);\n }\n\n /** Définit l'index actif et focus l'élément */\n private setActiveIndex(index: number): void {\n this.internalActiveIndex.set(index);\n this.focusActiveItem();\n }\n\n /** Focus l'item actif */\n private focusActiveItem(): void {\n const items = this.menuItemsRef?.toArray();\n const index = this.internalActiveIndex();\n if (items && index >= 0 && index < items.length) {\n items[index].nativeElement.focus();\n }\n }\n\n /** Sélectionne l'item actuellement actif */\n private selectActiveItem(): void {\n const items = this.items();\n const index = this.internalActiveIndex();\n if (index >= 0 && index < items.length) {\n this.selectItem(items[index]);\n }\n }\n}\n","<div\n #menuTrigger\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"onTriggerClick($event)\"\n (contextmenu)=\"onTriggerContextMenu($event)\"\n (keydown)=\"onTriggerKeydown($event)\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"ds-menu__trigger\"\n>\n <ng-content select=\"[dsMenuTrigger]\"></ng-content>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'ds-menu-backdrop'\"\n (backdropClick)=\"onBackdropClick()\"\n (detach)=\"close(false)\"\n>\n <div\n [ngClass]=\"menuClasses()\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onMenuKeydown($event)\"\n >\n @for (item of items(); track item.id; let index = $index) {\n @if (item.dividerBefore) {\n <div class=\"ds-menu__divider\" role=\"separator\"></div>\n }\n <button\n #menuItemRef\n type=\"button\"\n class=\"ds-menu__item\"\n [class.ds-menu__item--disabled]=\"item.disabled\"\n [class.ds-menu__item--active]=\"activeIndex() === index\"\n [attr.id]=\"'menu-item-' + item.id\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"selectItem(item)\"\n (mouseenter)=\"onItemMouseEnter(index)\"\n >\n @if (item.icon) {\n <fa-icon [icon]=\"item.icon\" class=\"ds-menu__item-icon\"></fa-icon>\n }\n <span class=\"ds-menu__item-label\">{{ item.label }}</span>\n </button>\n }\n </div>\n</ng-template>\n","/*\n * Components barrel export\n */\n\n// Design System components exports\nexport {\n DsAlert,\n type AlertType,\n type AlertSize,\n} from './ds-alert/ds-alert';\n\nexport { DsBadge } from './ds-badge/ds-badge';\n\nexport {\n DsBreadcrumb,\n type BreadcrumbItem,\n} from './ds-breadcrumb/ds-breadcrumb';\n\nexport { DsButton } from './ds-button/ds-button';\n\nexport {\n DsCard,\n type CardVariant,\n type CardSize,\n} from './ds-card/ds-card';\n\nexport { DsCheckbox } from './ds-checkbox/ds-checkbox';\n\nexport {\n DsDivider,\n type DividerOrientation,\n type DividerVariant,\n type DividerSize,\n type DividerLabelPosition,\n} from './ds-divider/ds-divider';\n\nexport { DsDropdown } from './ds-dropdown/ds-dropdown';\n\nexport {\n type DropdownItem,\n type DropdownItemDTO,\n} from './ds-dropdown/model/dropdown-item.model';\n\nexport { DsInputField } from './ds-input-field/ds-input-field';\n\nexport { DsInputTextarea } from './ds-input-textarea/ds-input-textarea';\n\nexport { DsModalComponent } from './ds-modal/ds-modal.component';\n\nexport { DsPopoverComponent } from './ds-popover/ds-popover.component';\n\nexport {\n DsPopover,\n type PopoverTrigger,\n} from './ds-popover/ds-popover.directive';\n\nexport {\n DsProgressBar,\n type ProgressBarVariant,\n type ProgressBarSize,\n type ProgressBarMode,\n} from './ds-progress-bar/ds-progress-bar';\n\nexport {\n DsRadioGroup,\n type RadioOption,\n type RadioGroupLayout,\n} from './ds-radio-group/ds-radio-group';\n\nexport {\n DsSkeleton,\n type SkeletonVariant,\n type SkeletonSize,\n} from './ds-skeleton/ds-skeleton';\n\nexport {\n DsTabs,\n type TabItem,\n} from './ds-tabs/ds-tabs';\n\nexport { DsToastContainerComponent } from './ds-toast/ds-toast-container.component';\n\nexport { DsToastComponent } from './ds-toast/ds-toast.component';\n\nexport {\n DsToastService,\n type ToastType,\n type ToastPosition,\n type ToastOptions,\n type ToastInstance,\n} from './ds-toast/ds-toast.service';\n\nexport { DsToggle } from './ds-toggle/ds-toggle';\n\nexport { DsTooltipComponent } from './ds-tooltip/ds-tooltip.component';\n\nexport { DsTooltip } from './ds-tooltip/ds-tooltip.directive';\n\nexport {\n DsAccordion,\n type AccordionItem,\n type AccordionSize,\n type AccordionVariant,\n type AccordionChangeEvent,\n} from './ds-accordion/ds-accordion';\n\nexport {\n DsPagination,\n type PaginationSize,\n type PageSizeOption,\n type PageChangeEvent,\n} from './ds-pagination/ds-pagination';\n\nexport {\n DsStepper,\n type Step,\n type StepState,\n type StepperOrientation,\n type StepperSize,\n type StepChangeEvent,\n} from './ds-stepper/ds-stepper';\n\nexport {\n DsSelect,\n type DsSelectOption,\n type DsSelectSize,\n} from './ds-select/ds-select';\n\nexport {\n DsTable,\n type DsTableColumn,\n type DsTableSize,\n type DsTableVariant,\n type SortDirection,\n type SortEvent,\n type TableState,\n} from './ds-table/ds-table';\n\nexport {\n DsCombobox,\n type DsComboboxOption,\n type DsComboboxSize,\n} from './ds-combobox/ds-combobox';\n\nexport {\n DsContainer,\n type ContainerMaxWidth,\n type ContainerGutter,\n} from './ds-container/ds-container';\n\nexport {\n DsSearchInput,\n type SearchInputSize,\n} from './ds-search-input/ds-search-input';\n\nexport {\n DsDatePicker,\n type DatePickerSize,\n type DatePickerMode,\n type DateRange,\n} from './ds-date-picker/ds-date-picker';\n\nexport {\n DsAvatar,\n type AvatarShape,\n type AvatarSize,\n} from './ds-avatar/ds-avatar';\n\nexport {\n DsMenu,\n type MenuItem,\n type MenuTrigger,\n type MenuSize,\n} from './ds-menu/ds-menu';\n","import type { Args, ArgTypes } from '@storybook/angular';\nimport type { ButtonVariant, ButtonAppearance, ButtonSize } from '../primitives/primitive-button/primitive-button';\n\nexport const BUTTON_VARIANT_OPTIONS = ['primary', 'secondary', 'ghost', 'success', 'warning', 'error', 'info'] as const;\nexport const BUTTON_APPEARANCE_OPTIONS = ['solid', 'outline'] as const;\nexport const BUTTON_SIZE_OPTIONS = ['sm', 'md', 'lg'] as const;\n\ninterface ArgTypeOptions {\n includeLoading?: boolean;\n includeBlock?: boolean;\n variantDescription?: string;\n appearanceDescription?: string;\n sizeDescription?: string;\n disabledDescription?: string;\n loadingDescription?: string;\n blockDescription?: string;\n}\n\nexport const buildButtonArgTypes = ({\n includeLoading = true,\n includeBlock = true,\n variantDescription = 'Variante visuelle',\n appearanceDescription = 'Apparence',\n sizeDescription = 'Taille',\n disabledDescription = 'Désactivé',\n loadingDescription = 'En chargement',\n blockDescription = 'Pleine largeur',\n}: ArgTypeOptions = {}): ArgTypes<Args> => ({\n variant: {\n control: 'select',\n options: BUTTON_VARIANT_OPTIONS,\n description: variantDescription,\n },\n appearance: {\n control: 'select',\n options: BUTTON_APPEARANCE_OPTIONS,\n description: appearanceDescription,\n },\n size: {\n control: 'select',\n options: BUTTON_SIZE_OPTIONS,\n description: sizeDescription,\n },\n disabled: {\n control: 'boolean',\n description: disabledDescription,\n },\n ...(includeLoading\n ? {\n loading: {\n control: 'boolean',\n description: loadingDescription,\n },\n }\n : {}),\n ...(includeBlock\n ? {\n block: {\n control: 'boolean',\n description: blockDescription,\n },\n }\n : {}),\n});\n\ninterface ArgOptions {\n includeLoading?: boolean;\n includeBlock?: boolean;\n}\n\nexport const buildButtonArgs = ({ includeLoading = true, includeBlock = true }: ArgOptions = {}) => ({\n variant: 'primary' as ButtonVariant,\n appearance: 'solid' as ButtonAppearance,\n size: 'md' as ButtonSize,\n disabled: false,\n ...(includeLoading ? { loading: false } : {}),\n ...(includeBlock ? { block: false } : {}),\n});\n\ninterface ButtonBindings {\n variant: string;\n appearance?: string;\n size: string;\n disabled?: string;\n loading?: string;\n block?: string;\n}\n\nexport const createVariantRender = (\n tagName: string,\n bindings: ButtonBindings,\n extraAttributes = '',\n) =>\n (args: Args) => ({\n props: { ...args, variants: BUTTON_VARIANT_OPTIONS },\n template: `\n <div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\">\n <${tagName}\n *ngFor=\"let variant of variants\"\n [${bindings.variant}]=\"variant\"${bindings.appearance ? `\n [${bindings.appearance}]=\"appearance\"` : ''}\n [${bindings.size}]=\"size\"${bindings.disabled ? `\n [${bindings.disabled}]=\"disabled\"` : ''}${bindings.loading ? `\n [${bindings.loading}]=\"loading\"` : ''}${bindings.block ? `\n [${bindings.block}]=\"block\"` : ''}${extraAttributes ? `\n ${extraAttributes}` : ''}>\n {{ variant }}\n </${tagName}>\n </div>\n `,\n });\n\nexport const createSizeRender = (\n tagName: string,\n bindings: ButtonBindings,\n extraAttributes = '',\n) =>\n (args: Args) => ({\n props: { ...args, sizes: BUTTON_SIZE_OPTIONS },\n template: `\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <${tagName}\n *ngFor=\"let size of sizes\"\n [${bindings.size}]=\"size\"${bindings.variant ? `\n [${bindings.variant}]=\"variant\"` : ''}${bindings.appearance ? `\n [${bindings.appearance}]=\"appearance\"` : ''}${bindings.disabled ? `\n [${bindings.disabled}]=\"disabled\"` : ''}${bindings.loading ? `\n [${bindings.loading}]=\"loading\"` : ''}${bindings.block ? `\n [${bindings.block}]=\"block\"` : ''}${extraAttributes ? `\n ${extraAttributes}` : ''}>\n {{ size }}\n </${tagName}>\n </div>\n `,\n });\n","import { Injectable } from '@angular/core';\nimport { FaIconLibrary } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\n/**\n * Service centralisé pour l'enregistrement des icônes FontAwesome.\n *\n * @description\n * Permet d'enregistrer des icônes de manière lazy et centralisée, évitant\n * d'importer toutes les icônes FontAwesome dans chaque composant. Les composants\n * peuvent utiliser les icônes enregistrées via leur nom plutôt que via l'objet complet.\n *\n * @example\n * ```typescript\n * // Dans app.config.ts ou main.ts\n * import { IconRegistryService } from 'ds-angular';\n * import { faCheck, faTimes, faExclamation } from '@fortawesome/free-solid-svg-icons';\n *\n * const iconRegistry = inject(IconRegistryService);\n * iconRegistry.registerIcons([faCheck, faTimes, faExclamation]);\n * ```\n *\n * @example\n * ```typescript\n * // Enregistrement par groupe thématique\n * import { faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';\n *\n * iconRegistry.registerIconGroup('validation', [faCheck, faTimes]);\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class IconRegistryService {\n private registeredIcons = new Set<string>();\n private iconGroups = new Map<string, IconDefinition[]>();\n\n constructor(private library: FaIconLibrary) {}\n\n /**\n * Enregistre une ou plusieurs icônes FontAwesome dans la bibliothèque globale.\n *\n * @param icons - Tableau d'icônes FontAwesome à enregistrer\n * @returns Le service lui-même pour chaînage\n *\n * @example\n * ```typescript\n * iconRegistry.registerIcons([faUser, faEnvelope, faPhone]);\n * ```\n */\n registerIcons(icons: IconDefinition[]): this {\n icons.forEach(icon => {\n const iconName = `${icon.prefix}-${icon.iconName}`;\n if (!this.registeredIcons.has(iconName)) {\n this.library.addIcons(icon);\n this.registeredIcons.add(iconName);\n }\n });\n return this;\n }\n\n /**\n * Enregistre un groupe d'icônes sous un nom thématique.\n *\n * @param groupName - Nom du groupe (ex: 'forms', 'navigation')\n * @param icons - Tableau d'icônes du groupe\n * @returns Le service lui-même pour chaînage\n *\n * @example\n * ```typescript\n * iconRegistry.registerIconGroup('forms', [\n * faCheck, faTimes, faExclamation, faInfo\n * ]);\n * ```\n */\n registerIconGroup(groupName: string, icons: IconDefinition[]): this {\n this.iconGroups.set(groupName, icons);\n return this.registerIcons(icons);\n }\n\n /**\n * Vérifie si une icône est déjà enregistrée.\n *\n * @param iconName - Nom de l'icône (format: 'prefix-iconName')\n * @returns true si l'icône est enregistrée\n *\n * @example\n * ```typescript\n * if (!iconRegistry.isIconRegistered('fas-check')) {\n * iconRegistry.registerIcons([faCheck]);\n * }\n * ```\n */\n isIconRegistered(iconName: string): boolean {\n return this.registeredIcons.has(iconName);\n }\n\n /**\n * Récupère tous les noms d'icônes enregistrées.\n *\n * @returns Tableau des noms d'icônes enregistrées\n */\n getRegisteredIcons(): string[] {\n return Array.from(this.registeredIcons);\n }\n\n /**\n * Récupère les icônes d'un groupe thématique.\n *\n * @param groupName - Nom du groupe\n * @returns Icônes du groupe ou undefined si le groupe n'existe pas\n */\n getIconGroup(groupName: string): IconDefinition[] | undefined {\n return this.iconGroups.get(groupName);\n }\n\n /**\n * Liste tous les groupes d'icônes enregistrés.\n *\n * @returns Tableau des noms de groupes\n */\n getIconGroups(): string[] {\n return Array.from(this.iconGroups.keys());\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\n/**\n * Locales supportées.\n */\nexport type SupportedLocale = 'fr' | 'en' | 'es' | 'de';\n\n/**\n * Structure des labels i18n.\n */\nexport interface I18nLabels {\n // Actions communes\n close: string;\n cancel: string;\n confirm: string;\n save: string;\n delete: string;\n edit: string;\n add: string;\n search: string;\n clear: string;\n reset: string;\n\n // États\n loading: string;\n error: string;\n success: string;\n warning: string;\n info: string;\n\n // Navigation\n previous: string;\n next: string;\n first: string;\n last: string;\n page: string;\n of: string;\n\n // Formulaires\n required: string;\n optional: string;\n invalidEmail: string;\n invalidUrl: string;\n minLength: string;\n maxLength: string;\n minValue: string;\n maxValue: string;\n\n // Accessibilité\n expandAll: string;\n collapseAll: string;\n openMenu: string;\n closeMenu: string;\n selectOption: string;\n selectedOption: string;\n noResults: string;\n\n // Pagination\n itemsPerPage: string;\n showingItems: string;\n goToPage: string;\n\n // Stepper\n stepCompleted: string;\n stepActive: string;\n stepPending: string;\n stepError: string;\n}\n\n/**\n * Labels par défaut en français.\n */\nconst FR_LABELS: I18nLabels = {\n // Actions communes\n close: 'Fermer',\n cancel: 'Annuler',\n confirm: 'Confirmer',\n save: 'Enregistrer',\n delete: 'Supprimer',\n edit: 'Modifier',\n add: 'Ajouter',\n search: 'Rechercher',\n clear: 'Effacer',\n reset: 'Réinitialiser',\n\n // États\n loading: 'Chargement en cours...',\n error: 'Une erreur est survenue',\n success: 'Opération réussie',\n warning: 'Attention',\n info: 'Information',\n\n // Navigation\n previous: 'Précédent',\n next: 'Suivant',\n first: 'Premier',\n last: 'Dernier',\n page: 'Page',\n of: 'sur',\n\n // Formulaires\n required: 'Ce champ est requis',\n optional: 'Optionnel',\n invalidEmail: 'Adresse email invalide',\n invalidUrl: 'URL invalide',\n minLength: 'Minimum {min} caractères requis',\n maxLength: 'Maximum {max} caractères autorisés',\n minValue: 'La valeur minimale est {min}',\n maxValue: 'La valeur maximale est {max}',\n\n // Accessibilité\n expandAll: 'Tout déplier',\n collapseAll: 'Tout replier',\n openMenu: 'Ouvrir le menu',\n closeMenu: 'Fermer le menu',\n selectOption: 'Sélectionner une option',\n selectedOption: 'Option sélectionnée',\n noResults: 'Aucun résultat',\n\n // Pagination\n itemsPerPage: 'Éléments par page',\n showingItems: '{start} - {end} sur {total}',\n goToPage: 'Aller à la page {page}',\n\n // Stepper\n stepCompleted: 'Étape terminée',\n stepActive: 'Étape en cours',\n stepPending: 'Étape en attente',\n stepError: 'Erreur à cette étape',\n};\n\n/**\n * Labels en anglais.\n */\nconst EN_LABELS: I18nLabels = {\n // Actions communes\n close: 'Close',\n cancel: 'Cancel',\n confirm: 'Confirm',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n add: 'Add',\n search: 'Search',\n clear: 'Clear',\n reset: 'Reset',\n\n // États\n loading: 'Loading...',\n error: 'An error occurred',\n success: 'Operation successful',\n warning: 'Warning',\n info: 'Information',\n\n // Navigation\n previous: 'Previous',\n next: 'Next',\n first: 'First',\n last: 'Last',\n page: 'Page',\n of: 'of',\n\n // Formulaires\n required: 'This field is required',\n optional: 'Optional',\n invalidEmail: 'Invalid email address',\n invalidUrl: 'Invalid URL',\n minLength: 'Minimum {min} characters required',\n maxLength: 'Maximum {max} characters allowed',\n minValue: 'Minimum value is {min}',\n maxValue: 'Maximum value is {max}',\n\n // Accessibilité\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n openMenu: 'Open menu',\n closeMenu: 'Close menu',\n selectOption: 'Select an option',\n selectedOption: 'Selected option',\n noResults: 'No results',\n\n // Pagination\n itemsPerPage: 'Items per page',\n showingItems: '{start} - {end} of {total}',\n goToPage: 'Go to page {page}',\n\n // Stepper\n stepCompleted: 'Step completed',\n stepActive: 'Current step',\n stepPending: 'Pending step',\n stepError: 'Error at this step',\n};\n\n/**\n * Labels en espagnol.\n */\nconst ES_LABELS: I18nLabels = {\n close: 'Cerrar',\n cancel: 'Cancelar',\n confirm: 'Confirmar',\n save: 'Guardar',\n delete: 'Eliminar',\n edit: 'Editar',\n add: 'Añadir',\n search: 'Buscar',\n clear: 'Borrar',\n reset: 'Restablecer',\n loading: 'Cargando...',\n error: 'Se produjo un error',\n success: 'Operación exitosa',\n warning: 'Advertencia',\n info: 'Información',\n previous: 'Anterior',\n next: 'Siguiente',\n first: 'Primero',\n last: 'Último',\n page: 'Página',\n of: 'de',\n required: 'Este campo es obligatorio',\n optional: 'Opcional',\n invalidEmail: 'Correo electrónico inválido',\n invalidUrl: 'URL inválida',\n minLength: 'Mínimo {min} caracteres requeridos',\n maxLength: 'Máximo {max} caracteres permitidos',\n minValue: 'El valor mínimo es {min}',\n maxValue: 'El valor máximo es {max}',\n expandAll: 'Expandir todo',\n collapseAll: 'Contraer todo',\n openMenu: 'Abrir menú',\n closeMenu: 'Cerrar menú',\n selectOption: 'Seleccionar una opción',\n selectedOption: 'Opción seleccionada',\n noResults: 'Sin resultados',\n itemsPerPage: 'Elementos por página',\n showingItems: '{start} - {end} de {total}',\n goToPage: 'Ir a la página {page}',\n stepCompleted: 'Paso completado',\n stepActive: 'Paso actual',\n stepPending: 'Paso pendiente',\n stepError: 'Error en este paso',\n};\n\n/**\n * Labels en allemand.\n */\nconst DE_LABELS: I18nLabels = {\n close: 'Schließen',\n cancel: 'Abbrechen',\n confirm: 'Bestätigen',\n save: 'Speichern',\n delete: 'Löschen',\n edit: 'Bearbeiten',\n add: 'Hinzufügen',\n search: 'Suchen',\n clear: 'Löschen',\n reset: 'Zurücksetzen',\n loading: 'Wird geladen...',\n error: 'Ein Fehler ist aufgetreten',\n success: 'Operation erfolgreich',\n warning: 'Warnung',\n info: 'Information',\n previous: 'Zurück',\n next: 'Weiter',\n first: 'Erste',\n last: 'Letzte',\n page: 'Seite',\n of: 'von',\n required: 'Dieses Feld ist erforderlich',\n optional: 'Optional',\n invalidEmail: 'Ungültige E-Mail-Adresse',\n invalidUrl: 'Ungültige URL',\n minLength: 'Mindestens {min} Zeichen erforderlich',\n maxLength: 'Maximal {max} Zeichen erlaubt',\n minValue: 'Der Mindestwert ist {min}',\n maxValue: 'Der Maximalwert ist {max}',\n expandAll: 'Alle erweitern',\n collapseAll: 'Alle reduzieren',\n openMenu: 'Menü öffnen',\n closeMenu: 'Menü schließen',\n selectOption: 'Option auswählen',\n selectedOption: 'Ausgewählte Option',\n noResults: 'Keine Ergebnisse',\n itemsPerPage: 'Elemente pro Seite',\n showingItems: '{start} - {end} von {total}',\n goToPage: 'Gehe zu Seite {page}',\n stepCompleted: 'Schritt abgeschlossen',\n stepActive: 'Aktueller Schritt',\n stepPending: 'Ausstehender Schritt',\n stepError: 'Fehler bei diesem Schritt',\n};\n\n/**\n * Map des labels par locale.\n */\nconst LABELS_MAP: Record<SupportedLocale, I18nLabels> = {\n fr: FR_LABELS,\n en: EN_LABELS,\n es: ES_LABELS,\n de: DE_LABELS,\n};\n\n/**\n * # DsI18nService\n *\n * Service d'internationalisation pour les labels des composants du design system.\n * Fournit des labels traduits pour les actions communes, états, navigation, etc.\n *\n * ## Usage\n *\n * ```typescript\n * import { DsI18nService } from 'ds-angular';\n *\n * @Component({...})\n * export class MyComponent {\n * private i18n = inject(DsI18nService);\n *\n * closeLabel = this.i18n.get('close');\n *\n * ngOnInit() {\n * // Changer la locale\n * this.i18n.setLocale('en');\n * }\n * }\n * ```\n *\n * ## Locales supportées\n *\n * - `fr` : Français (défaut)\n * - `en` : English\n * - `es` : Español\n * - `de` : Deutsch\n *\n * @service\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DsI18nService {\n /**\n * Locale courante.\n */\n private readonly _locale = signal<SupportedLocale>('fr');\n\n /**\n * Labels personnalisés (surcharge partielle).\n */\n private readonly _customLabels = signal<Partial<I18nLabels>>({});\n\n /**\n * Locale courante (lecture seule).\n */\n readonly locale = this._locale.asReadonly();\n\n /**\n * Labels courants fusionnés (locale + custom).\n */\n readonly labels = computed(() => {\n const baseLabels = LABELS_MAP[this._locale()];\n const customLabels = this._customLabels();\n return { ...baseLabels, ...customLabels };\n });\n\n /**\n * Définir la locale.\n */\n setLocale(locale: SupportedLocale): void {\n if (LABELS_MAP[locale]) {\n this._locale.set(locale);\n } else {\n console.warn(`[DsI18nService] Locale '${locale}' not supported. Using 'fr'.`);\n this._locale.set('fr');\n }\n }\n\n /**\n * Obtenir un label par clé.\n */\n get<K extends keyof I18nLabels>(key: K): string {\n return this.labels()[key];\n }\n\n /**\n * Obtenir un label formaté avec des variables.\n *\n * @example\n * i18n.format('minLength', { min: 5 }) // \"Minimum 5 caractères requis\"\n */\n format<K extends keyof I18nLabels>(key: K, params: Record<string, string | number>): string {\n let label = this.labels()[key];\n for (const [param, value] of Object.entries(params)) {\n label = label.replace(`{${param}}`, String(value));\n }\n return label;\n }\n\n /**\n * Surcharger des labels personnalisés.\n */\n setCustomLabels(labels: Partial<I18nLabels>): void {\n this._customLabels.set(labels);\n }\n\n /**\n * Réinitialiser les labels personnalisés.\n */\n resetCustomLabels(): void {\n this._customLabels.set({});\n }\n\n /**\n * Obtenir toutes les locales supportées.\n */\n getSupportedLocales(): SupportedLocale[] {\n return Object.keys(LABELS_MAP) as SupportedLocale[];\n }\n\n /**\n * Détecter la locale du navigateur.\n */\n detectBrowserLocale(): SupportedLocale {\n const browserLang = navigator.language.split('-')[0];\n if (this.getSupportedLocales().includes(browserLang as SupportedLocale)) {\n return browserLang as SupportedLocale;\n }\n return 'fr';\n }\n\n /**\n * Initialiser avec la locale du navigateur.\n */\n initFromBrowser(): void {\n this.setLocale(this.detectBrowserLocale());\n }\n}\n","/*\n * Utils barrel export\n */\n\n// Utils exports\nexport * from './overlay-positions';\nexport * from './storybook-controls';\nexport { IconRegistryService } from './icon-registry.service';\nexport {\n DsI18nService,\n type SupportedLocale,\n type I18nLabels,\n} from './i18n.service';\n","/*\n * Public API Surface of ds-angular\n */\n\n// Primitives\nexport * from './lib/primitives';\n\n// Components\nexport * from './lib/components';\n\n// Utils\nexport * from './lib/utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"kksdev-ds-angular.mjs","sources":["../../../projects/ds-angular/src/lib/primitives/primitive-badge/primitive-badge.ts","../../../projects/ds-angular/src/lib/primitives/primitive-badge/primitive-badge.html","../../../projects/ds-angular/src/lib/primitives/primitive-button/primitive-button.ts","../../../projects/ds-angular/src/lib/primitives/primitive-button/primitive-button.html","../../../projects/ds-angular/src/lib/primitives/primitive-checkbox/primitive-checkbox.ts","../../../projects/ds-angular/src/lib/primitives/primitive-checkbox/primitive-checkbox.html","../../../projects/ds-angular/src/lib/primitives/primitive-input/primitive-input.ts","../../../projects/ds-angular/src/lib/primitives/primitive-input/primitive-input.html","../../../projects/ds-angular/src/lib/primitives/primitive-radio/primitive-radio.ts","../../../projects/ds-angular/src/lib/primitives/primitive-radio/primitive-radio.html","../../../projects/ds-angular/src/lib/primitives/primitive-textarea/primitive-textarea.ts","../../../projects/ds-angular/src/lib/primitives/primitive-textarea/primitive-textarea.html","../../../projects/ds-angular/src/lib/primitives/primitive-toggle/primitive-toggle.ts","../../../projects/ds-angular/src/lib/primitives/primitive-toggle/primitive-toggle.html","../../../projects/ds-angular/src/lib/primitives/index.ts","../../../projects/ds-angular/src/lib/components/ds-alert/ds-alert.ts","../../../projects/ds-angular/src/lib/components/ds-alert/ds-alert.html","../../../projects/ds-angular/src/lib/components/ds-badge/ds-badge.ts","../../../projects/ds-angular/src/lib/components/ds-badge/ds-badge.html","../../../projects/ds-angular/src/lib/components/ds-breadcrumb/ds-breadcrumb.ts","../../../projects/ds-angular/src/lib/components/ds-breadcrumb/ds-breadcrumb.html","../../../projects/ds-angular/src/lib/components/ds-button/ds-button.ts","../../../projects/ds-angular/src/lib/components/ds-button/ds-button.html","../../../projects/ds-angular/src/lib/components/ds-card/ds-card.ts","../../../projects/ds-angular/src/lib/components/ds-card/ds-card.html","../../../projects/ds-angular/src/lib/components/ds-checkbox/ds-checkbox.ts","../../../projects/ds-angular/src/lib/components/ds-checkbox/ds-checkbox.html","../../../projects/ds-angular/src/lib/components/ds-divider/ds-divider.ts","../../../projects/ds-angular/src/lib/components/ds-divider/ds-divider.html","../../../projects/ds-angular/src/lib/utils/overlay-positions.ts","../../../projects/ds-angular/src/lib/components/ds-dropdown/ds-dropdown.ts","../../../projects/ds-angular/src/lib/components/ds-dropdown/ds-dropdown.html","../../../projects/ds-angular/src/lib/components/ds-input-field/ds-input-field.ts","../../../projects/ds-angular/src/lib/components/ds-input-field/ds-input-field.html","../../../projects/ds-angular/src/lib/components/ds-input-textarea/ds-input-textarea.ts","../../../projects/ds-angular/src/lib/components/ds-input-textarea/ds-input-textarea.html","../../../projects/ds-angular/src/lib/components/ds-modal/ds-modal.component.ts","../../../projects/ds-angular/src/lib/components/ds-modal/ds-modal.component.html","../../../projects/ds-angular/src/lib/components/ds-popover/ds-popover.component.ts","../../../projects/ds-angular/src/lib/components/ds-popover/ds-popover.directive.ts","../../../projects/ds-angular/src/lib/components/ds-progress-bar/ds-progress-bar.ts","../../../projects/ds-angular/src/lib/components/ds-progress-bar/ds-progress-bar.html","../../../projects/ds-angular/src/lib/components/ds-radio-group/ds-radio-group.ts","../../../projects/ds-angular/src/lib/components/ds-radio-group/ds-radio-group.html","../../../projects/ds-angular/src/lib/components/ds-skeleton/ds-skeleton.ts","../../../projects/ds-angular/src/lib/components/ds-skeleton/ds-skeleton.html","../../../projects/ds-angular/src/lib/components/ds-tabs/ds-tabs.ts","../../../projects/ds-angular/src/lib/components/ds-tabs/ds-tabs.html","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast.component.ts","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast.component.html","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast.service.ts","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast-container.component.ts","../../../projects/ds-angular/src/lib/components/ds-toast/ds-toast-container.component.html","../../../projects/ds-angular/src/lib/components/ds-toggle/ds-toggle.ts","../../../projects/ds-angular/src/lib/components/ds-toggle/ds-toggle.html","../../../projects/ds-angular/src/lib/components/ds-tooltip/ds-tooltip.component.ts","../../../projects/ds-angular/src/lib/components/ds-tooltip/ds-tooltip.directive.ts","../../../projects/ds-angular/src/lib/components/ds-accordion/ds-accordion.ts","../../../projects/ds-angular/src/lib/components/ds-accordion/ds-accordion.html","../../../projects/ds-angular/src/lib/components/ds-pagination/ds-pagination.ts","../../../projects/ds-angular/src/lib/components/ds-pagination/ds-pagination.html","../../../projects/ds-angular/src/lib/components/ds-stepper/ds-stepper.ts","../../../projects/ds-angular/src/lib/components/ds-stepper/ds-stepper.html","../../../projects/ds-angular/src/lib/components/ds-select/ds-select.ts","../../../projects/ds-angular/src/lib/components/ds-select/ds-select.html","../../../projects/ds-angular/src/lib/components/ds-table/ds-table.ts","../../../projects/ds-angular/src/lib/components/ds-table/ds-table.html","../../../projects/ds-angular/src/lib/components/ds-combobox/ds-combobox.ts","../../../projects/ds-angular/src/lib/components/ds-combobox/ds-combobox.html","../../../projects/ds-angular/src/lib/components/ds-container/ds-container.ts","../../../projects/ds-angular/src/lib/components/ds-search-input/ds-search-input.ts","../../../projects/ds-angular/src/lib/components/ds-date-picker/ds-date-picker.ts","../../../projects/ds-angular/src/lib/components/ds-avatar/ds-avatar.ts","../../../projects/ds-angular/src/lib/components/ds-avatar/ds-avatar.html","../../../projects/ds-angular/src/lib/components/ds-menu/ds-menu.ts","../../../projects/ds-angular/src/lib/components/ds-menu/ds-menu.html","../../../projects/ds-angular/src/lib/components/index.ts","../../../projects/ds-angular/src/lib/utils/storybook-controls.ts","../../../projects/ds-angular/src/lib/utils/icon-registry.service.ts","../../../projects/ds-angular/src/lib/utils/i18n.service.ts","../../../projects/ds-angular/src/lib/utils/index.ts","../../../projects/ds-angular/src/public-api.ts","../../../projects/ds-angular/src/kksdev-ds-angular.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type BadgeType = 'status' | 'count' | 'label';\nexport type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'neutral' | 'default' | 'accent';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\nexport type BadgeShape = 'rounded' | 'pill';\nexport type BadgeAppearance = 'solid' | 'outline';\n\n/**\n * Composant badge primitif sans logique métier.\n *\n * @description\n * Badge atomique stylisé par CSS custom properties. Petit élément visuel utilisé pour\n * afficher des statuts, des compteurs ou des labels. Supporte plusieurs variantes de\n * couleur, tailles, formes (arrondi ou pill), apparences (solid ou outline) et peut\n * afficher des icônes FontAwesome. Permet également des styles personnalisés.\n *\n * @example\n * ```html\n * <primitive-badge variant=\"success\">\n * Actif\n * </primitive-badge>\n * ```\n *\n * @example\n * ```html\n * <primitive-badge\n * variant=\"error\"\n * shape=\"pill\"\n * appearance=\"outline\"\n * [iconStart]=\"faExclamation\">\n * Urgent\n * </primitive-badge>\n * ```\n */\n@Component({\n selector: 'primitive-badge',\n imports: [CommonModule, FaIconComponent],\n templateUrl: './primitive-badge.html',\n styleUrl: './primitive-badge.scss',\n})\nexport class PrimitiveBadge {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Type sémantique du badge.\n *\n * @description\n * Définit l'intention d'usage du badge. Le type est exposé via l'attribut `data-type`\n * pour permettre un ciblage CSS spécifique selon le contexte d'utilisation.\n *\n * Types disponibles :\n * - `label` : badge de libellé générique (par défaut)\n * - `status` : indicateur d'état (actif, inactif, etc.)\n * - `count` : compteur numérique (notifications, messages, etc.)\n *\n * @default 'label'\n *\n * @example\n * ```html\n * <primitive-badge type=\"count\">5</primitive-badge>\n * <primitive-badge type=\"status\">En ligne</primitive-badge>\n * ```\n */\n type = input<BadgeType>('label');\n\n /**\n * Variante visuelle du badge.\n *\n * @description\n * Définit la couleur et le style sémantique du badge. Chaque variante applique\n * une classe CSS qui utilise les tokens de couleur correspondants.\n *\n * Variantes disponibles :\n * - `primary` : couleur principale (par défaut)\n * - `secondary` : couleur secondaire\n * - `success` : succès, validation (vert)\n * - `warning` : avertissement (orange)\n * - `error` : erreur, danger (rouge)\n * - `info` : information (bleu)\n * - `neutral` : neutre (gris)\n * - `default` : style par défaut\n * - `accent` : couleur d'accent\n *\n * @default 'primary'\n *\n * @example\n * ```html\n * <primitive-badge variant=\"success\">Validé</primitive-badge>\n * ```\n */\n variant = input<BadgeVariant>('primary');\n\n /**\n * Taille du badge.\n *\n * @description\n * Contrôle la hauteur, le padding et la taille de police du badge via les tokens\n * CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit\n * - `md` : moyen (par défaut)\n * - `lg` : grand\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-badge size=\"sm\">Petit</primitive-badge>\n * ```\n */\n size = input<BadgeSize>('md');\n\n /**\n * Forme du badge.\n *\n * @description\n * Définit le degré d'arrondi des coins du badge.\n *\n * Formes disponibles :\n * - `rounded` : coins légèrement arrondis (par défaut)\n * - `pill` : coins complètement arrondis (forme capsule)\n *\n * @default 'rounded'\n *\n * @example\n * ```html\n * <primitive-badge shape=\"pill\">99+</primitive-badge>\n * ```\n */\n shape = input<BadgeShape>('rounded');\n\n /**\n * Apparence visuelle du badge.\n *\n * @description\n * Contrôle le style de remplissage du badge :\n * - `solid` : fond plein avec couleur de variante (par défaut)\n * - `outline` : fond transparent avec bordure colorée\n *\n * @default 'solid'\n *\n * @example\n * ```html\n * <primitive-badge appearance=\"outline\">Outline</primitive-badge>\n * ```\n */\n appearance = input<BadgeAppearance>('solid');\n\n /**\n * Icône FontAwesome affichée avant le texte du badge.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n * Couramment utilisée pour les badges de statut ou d'alerte.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faCheck } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-badge [iconStart]=\"faCheck\">Validé</primitive-badge>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le texte du badge.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n * Utile pour les badges avec action ou indication directionnelle.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faTimes } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-badge [iconEnd]=\"faTimes\">Fermer</primitive-badge>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Styles CSS personnalisés appliqués au badge.\n *\n * @description\n * Objet de paires clé-valeur de propriétés CSS permettant de surcharger les styles\n * par défaut. Utile pour des couleurs de marque spécifiques ou des styles non couverts\n * par les variantes standards. Appliqué via `[ngStyle]` sur le span interne.\n *\n * @default null\n *\n * @example\n * ```html\n * <primitive-badge [customStyles]=\"{\n * backgroundColor: '#ff6b6b',\n * borderColor: '#ff6b6b',\n * color: '#fff'\n * }\">\n * Custom\n * </primitive-badge>\n * ```\n */\n customStyles = input<Record<string, string> | null>(null);\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du badge.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - La variante (`primary`, `secondary`, `success`, etc.)\n * - La taille (`sm`, `md`, `lg`)\n * - La forme (`rounded`, `pill`)\n * - `outline` si `appearance === 'outline'`\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // variant='success', size='lg', shape='pill', appearance='outline'\n * // → \"success lg pill outline\"\n * ```\n */\n get badgeClasses(): string {\n const classes: string[] = [this.variant(), this.size(), this.shape()];\n if (this.appearance() === 'outline') {\n classes.push('outline');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Retourne les styles personnalisés à appliquer.\n *\n * @description\n * Getter simple qui retourne la valeur de `customStyles()` pour être utilisé\n * avec la directive `[ngStyle]` dans le template.\n *\n * @returns Objet de styles CSS ou `null` si aucun style personnalisé.\n *\n * @example\n * ```typescript\n * const styles = component.styleOverrides;\n * // → { backgroundColor: '#123456', color: '#fff' }\n * ```\n */\n get styleOverrides(): Record<string, string> | null {\n return this.customStyles();\n }\n}\n","<span [ngClass]=\"badgeClasses\" [ngStyle]=\"styleOverrides\" [attr.data-type]=\"type()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</span>\n","import { Component, HostBinding, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'success' | 'warning' | 'error' | 'info';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type ButtonAppearance = 'solid' | 'outline';\n\n/**\n * Composant bouton primitif sans logique métier.\n *\n * @description\n * Bouton atomique stylisé par CSS custom properties. Supporte plusieurs variantes,\n * tailles, apparences et états. Peut afficher des icônes FontAwesome avant/après le texte.\n *\n * @example\n * ```html\n * <primitive-button variant=\"primary\" size=\"md\">\n * Cliquez ici\n * </primitive-button>\n * ```\n *\n * @example\n * ```html\n * <primitive-button\n * variant=\"success\"\n * appearance=\"outline\"\n * [iconStart]=\"faCheck\"\n * (clicked)=\"onSave()\">\n * Enregistrer\n * </primitive-button>\n * ```\n */\n@Component({\n selector: 'primitive-button',\n imports: [CommonModule, FaIconComponent],\n templateUrl: './primitive-button.html',\n styleUrl: './primitive-button.scss',\n})\nexport class PrimitiveButton {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Type HTML du bouton.\n *\n * @description\n * Détermine le comportement natif du bouton dans un formulaire :\n * - `button` : bouton standard sans action de formulaire (par défaut)\n * - `submit` : soumet le formulaire parent\n * - `reset` : réinitialise le formulaire parent\n *\n * @default 'button'\n *\n * @example\n * ```html\n * <primitive-button type=\"submit\">Valider</primitive-button>\n * ```\n */\n type = input<ButtonType>('button');\n\n /**\n * Variante visuelle du bouton.\n *\n * @description\n * Définit la couleur et le style sémantique du bouton. Chaque variante\n * applique une classe CSS qui utilise les tokens de couleur correspondants.\n *\n * Variantes disponibles :\n * - `primary` : action principale (par défaut)\n * - `secondary` : action secondaire\n * - `ghost` : action discrète, fond transparent\n * - `success` : confirmation, succès\n * - `warning` : avertissement, attention\n * - `error` : action destructive, erreur\n * - `info` : information neutre\n *\n * @default 'primary'\n *\n * @example\n * ```html\n * <primitive-button variant=\"error\">Supprimer</primitive-button>\n * ```\n */\n variant = input<ButtonVariant>('primary');\n\n /**\n * Taille du bouton.\n *\n * @description\n * Contrôle la hauteur, le padding et la taille de police du bouton via\n * les tokens `--btn-height-*`, `--btn-padding-*` et `--btn-font-size-*`.\n *\n * Tailles disponibles :\n * - `sm` : petit (32px de hauteur)\n * - `md` : moyen (40px de hauteur, par défaut)\n * - `lg` : grand (48px de hauteur)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-button size=\"lg\">Bouton large</primitive-button>\n * ```\n */\n size = input<ButtonSize>('md');\n\n /**\n * État désactivé du bouton.\n *\n * @description\n * Lorsque `true`, le bouton devient non-cliquable, applique l'attribut HTML\n * `disabled` et affiche les styles visuels d'état désactivé. L'événement\n * `clicked` n'est pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-button [disabled]=\"!isFormValid\">Soumettre</primitive-button>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Icône FontAwesome affichée avant le texte du bouton.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faPlus } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-button [iconStart]=\"faPlus\">Ajouter</primitive-button>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le texte du bouton.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faArrowRight } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-button [iconEnd]=\"faArrowRight\">Suivant</primitive-button>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Apparence visuelle du bouton.\n *\n * @description\n * Contrôle le style de remplissage du bouton :\n * - `solid` : fond plein avec couleur de variante (par défaut)\n * - `outline` : fond transparent avec bordure colorée\n *\n * @default 'solid'\n *\n * @example\n * ```html\n * <primitive-button variant=\"primary\" appearance=\"outline\">\n * Action secondaire\n * </primitive-button>\n * ```\n */\n appearance = input<ButtonAppearance>('solid');\n\n /**\n * Mode pleine largeur.\n *\n * @description\n * Lorsque `true`, le bouton s'étend sur toute la largeur de son conteneur.\n * Applique la classe CSS `.block` au bouton et au composant hôte via `@HostBinding`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-button [block]=\"true\">\n * Bouton pleine largeur\n * </primitive-button>\n * ```\n */\n block = input<boolean>(false);\n\n /**\n * Host binding pour la classe CSS `.block`.\n *\n * @description\n * Lie la classe `.block` au composant hôte (`<primitive-button>`) lorsque\n * la propriété `block()` est `true`. Permet de styliser le conteneur externe.\n *\n * @returns `true` si le mode block est activé, sinon `false`.\n */\n @HostBinding('class.block')\n get hostBlock(): boolean {\n return this.block();\n }\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors d'un clic sur le bouton actif.\n *\n * @description\n * Émis uniquement si le bouton n'est pas désactivé (`disabled = false`).\n * Ne transporte aucune donnée (`void`). Utilisé pour déclencher des actions\n * métier dans le composant parent.\n *\n * @example\n * ```html\n * <primitive-button (clicked)=\"onButtonClick()\">\n * Cliquez-moi\n * </primitive-button>\n * ```\n */\n clicked = output<void>();\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du bouton.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - La variante (`primary`, `secondary`, etc.)\n * - La taille (`sm`, `md`, `lg`)\n * - `outline` si `appearance === 'outline'`\n * - `block` si `block === true`\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // variant='error', size='lg', appearance='outline', block=true\n * // → \"error lg outline block\"\n * ```\n */\n get buttonClasses(): string {\n const classes: string[] = [this.variant(), this.size()];\n if (this.appearance() === 'outline') {\n classes.push('outline');\n }\n if (this.block()) {\n classes.push('block');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Gestionnaire de clic interne.\n *\n * @description\n * Méthode appelée par le template lors d'un clic sur le bouton HTML.\n * Vérifie l'état `disabled()` avant d'émettre l'événement `clicked`.\n *\n * @internal\n */\n handleClick(): void {\n if (!this.disabled()) {\n this.clicked.emit();\n }\n }\n}\n","<button\n [type]=\"type()\"\n [class]=\"buttonClasses\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</button>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n computed,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\nexport type CheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Composant checkbox primitif sans logique métier.\n *\n * @description\n * Case à cocher atomique stylisée par CSS custom properties. Supporte trois états\n * (non coché, coché, indéterminé), plusieurs tailles et un label optionnel.\n * Utilise `model()` pour le binding bidirectionnel de l'état coché.\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [(checked)]=\"isAccepted\"\n * label=\"J'accepte les conditions\">\n * </primitive-checkbox>\n * ```\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [checked]=\"selectAll\"\n * [indeterminate]=\"isPartialSelection\"\n * size=\"lg\"\n * (checkedChange)=\"onSelectionChange($event)\">\n * </primitive-checkbox>\n * ```\n */\n@Component({\n selector: 'primitive-checkbox',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './primitive-checkbox.html',\n styleUrl: './primitive-checkbox.scss',\n})\nexport class PrimitiveCheckbox {\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * État coché de la checkbox avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.\n * L'état est mis à jour automatiquement lors du clic utilisateur.\n *\n * @default false\n *\n * @example\n * ```typescript\n * isAccepted = signal(false);\n * ```\n * ```html\n * <primitive-checkbox [(checked)]=\"isAccepted\"></primitive-checkbox>\n * <p>Accepté : {{ isAccepted() }}</p>\n * ```\n */\n checked = model<boolean>(false);\n\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * État indéterminé de la checkbox.\n *\n * @description\n * Lorsque `true`, affiche l'icône d'état indéterminé (tiret horizontal).\n * L'état indéterminé est prioritaire sur l'état `checked` et est couramment\n * utilisé dans les sélections partielles (ex: sélection de sous-éléments).\n * L'attribut ARIA `aria-checked` prend la valeur `\"indeterminate\"`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [checked]=\"someItemsSelected\"\n * [indeterminate]=\"!allItemsSelected && someItemsSelected\"\n * label=\"Tout sélectionner\">\n * </primitive-checkbox>\n * ```\n */\n indeterminate = input<boolean>(false);\n\n /**\n * État désactivé de la checkbox.\n *\n * @description\n * Lorsque `true`, la checkbox devient non-cliquable, applique les styles visuels\n * d'état désactivé et définit `tabindex=\"-1\"` et `aria-disabled=\"true\"`.\n * Les événements ne sont pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-checkbox [disabled]=\"!canEdit\" label=\"Option verrouillée\"></primitive-checkbox>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille de la checkbox.\n *\n * @description\n * Contrôle la taille du carré de la checkbox et la taille de police du label via\n * les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit (16px)\n * - `md` : moyen (20px, par défaut)\n * - `lg` : grand (24px)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-checkbox size=\"lg\" label=\"Grande checkbox\"></primitive-checkbox>\n * ```\n */\n size = input<CheckboxSize>('md');\n\n /**\n * Texte du label affiché à côté de la checkbox.\n *\n * @description\n * Si fourni, affiche un label cliquable associé à la checkbox.\n * Le label est lié à la checkbox via `aria-labelledby` pour l'accessibilité.\n * Le clic sur le label déclenche le toggle de la checkbox.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-checkbox label=\"J'accepte les conditions générales\"></primitive-checkbox>\n * ```\n */\n label = input<string>('');\n\n /**\n * Identifiant unique de la checkbox pour l'accessibilité.\n *\n * @description\n * Utilisé pour générer les IDs des éléments internes (label) et pour l'association\n * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.\n *\n * @default `checkbox-${random}`\n *\n * @example\n * ```html\n * <primitive-checkbox checkboxId=\"accept-terms\" label=\"Accepter\"></primitive-checkbox>\n * ```\n */\n checkboxId = input<string>(`checkbox-${Math.random().toString(36).slice(2, 11)}`);\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors du changement d'état de la checkbox.\n *\n * @description\n * Émis uniquement si la checkbox n'est pas désactivée (`disabled = false`).\n * Transporte la nouvelle valeur booléenne de l'état coché.\n * Ne s'active pas lorsque l'état change via le binding `[(checked)]` depuis le parent.\n *\n * @example\n * ```html\n * <primitive-checkbox\n * [(checked)]=\"isAccepted\"\n * (checkedChange)=\"onAcceptChange($event)\">\n * </primitive-checkbox>\n * ```\n * ```typescript\n * onAcceptChange(checked: boolean) {\n * console.log('Nouvelle valeur :', checked);\n * }\n * ```\n */\n checkedChange = output<boolean>();\n\n // === SIGNAUX INTERNES ===\n\n /**\n * Signal interne de l'état focus de la checkbox.\n *\n * @description\n * Signal utilisé en interne pour suivre l'état focus de la checkbox.\n * Applique la classe CSS `primitive-checkbox--focused` lorsque `true`.\n *\n * @internal\n */\n protected focused = signal<boolean>(false);\n\n /**\n * Signal calculé de l'état de la checkbox.\n *\n * @description\n * Calcule l'état actuel de la checkbox en fonction de `indeterminate()` et `checked()`.\n * L'état `indeterminate` est prioritaire sur `checked`.\n *\n * @returns État de la checkbox : `'unchecked'`, `'checked'` ou `'indeterminate'`.\n *\n * @internal\n */\n protected checkboxState = computed<CheckboxState>(() => {\n if (this.indeterminate()) return 'indeterminate';\n return this.checked() ? 'checked' : 'unchecked';\n });\n\n /**\n * Signal calculé des classes CSS de la checkbox.\n *\n * @description\n * Génère dynamiquement un objet de classes CSS en fonction des propriétés :\n * - Classe de base : `primitive-checkbox`\n * - Classe de taille : `primitive-checkbox--{size}`\n * - Classe d'état coché : `primitive-checkbox--checked`\n * - Classe d'état indéterminé : `primitive-checkbox--indeterminate`\n * - Classe d'état désactivé : `primitive-checkbox--disabled`\n * - Classe d'état focus : `primitive-checkbox--focused`\n *\n * @returns Objet de classes CSS avec valeurs booléennes.\n *\n * @internal\n */\n protected cssClasses = computed(() => ({\n 'primitive-checkbox': true,\n [`primitive-checkbox--${this.size()}`]: true,\n 'primitive-checkbox--checked': this.checked(),\n 'primitive-checkbox--indeterminate': this.indeterminate(),\n 'primitive-checkbox--disabled': this.disabled(),\n 'primitive-checkbox--focused': this.focused(),\n }));\n\n // === MÉTHODES INTERNES ===\n\n /**\n * Gestionnaire de toggle interne.\n *\n * @description\n * Méthode appelée par le template lors du clic sur la checkbox ou son label.\n * Inverse l'état `checked` et émet l'événement `checkedChange`.\n * Ne fait rien si la checkbox est désactivée.\n *\n * @internal\n */\n protected onToggle(): void {\n if (this.disabled()) return;\n\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.checkedChange.emit(newValue);\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque la checkbox reçoit le focus.\n * Met à jour le signal interne `focused` à `true`.\n *\n * @internal\n */\n protected onFocus(): void {\n this.focused.set(true);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque la checkbox perd le focus.\n * Met à jour le signal interne `focused` à `false`.\n *\n * @internal\n */\n protected onBlur(): void {\n this.focused.set(false);\n }\n\n /**\n * Gestionnaire de l'événement keydown natif.\n *\n * @description\n * Méthode appelée par le template lors de la pression d'une touche clavier.\n * Déclenche le toggle sur les touches `Space` ou `Enter` et empêche le comportement\n * par défaut (scroll de la page sur Space).\n *\n * @param event - Événement clavier natif.\n *\n * @internal\n */\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onToggle();\n }\n }\n}\n","<div\n [ngClass]=\"cssClasses()\"\n (click)=\"onToggle()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.role]=\"'checkbox'\"\n [attr.aria-checked]=\"checkboxState()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"label() ? checkboxId() + '-label' : null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n>\n <div class=\"primitive-checkbox__box\">\n @if (checkboxState() === 'checked') {\n <svg\n class=\"primitive-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.5 4L6 11.5L2.5 8\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n @if (checkboxState() === 'indeterminate') {\n <svg\n class=\"primitive-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 8H12\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n }\n </div>\n @if (label()) {\n <label\n [id]=\"checkboxId() + '-label'\"\n class=\"primitive-checkbox__label\"\n [class.primitive-checkbox__label--disabled]=\"disabled()\"\n >\n {{ label() }}\n </label>\n }\n</div>\n","import { Component, input, output, model } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url' | 'search' | 'date';\nexport type InputState = 'default' | 'success' | 'warning' | 'error';\nexport type InputSize = 'sm' | 'md' | 'lg';\nexport type InputAppearance = 'default' | 'outline' | 'ghost';\n\n/**\n * Composant input primitif sans logique métier.\n *\n * @description\n * Champ de saisie atomique stylisé par CSS custom properties. Supporte plusieurs types HTML5,\n * états visuels, tailles et apparences. Peut afficher des icônes FontAwesome avant/après le champ.\n * Utilise `model()` pour le binding bidirectionnel de la valeur.\n *\n * @example\n * ```html\n * <primitive-input\n * type=\"text\"\n * placeholder=\"Entrez votre nom\"\n * [(value)]=\"username\">\n * </primitive-input>\n * ```\n *\n * @example\n * ```html\n * <primitive-input\n * type=\"email\"\n * state=\"error\"\n * [iconStart]=\"faEnvelope\"\n * placeholder=\"email@example.com\"\n * (inputChanged)=\"onEmailChange($event)\">\n * </primitive-input>\n * ```\n */\n@Component({\n selector: 'primitive-input',\n imports: [CommonModule, FormsModule, FaIconComponent],\n templateUrl: './primitive-input.html',\n styleUrl: './primitive-input.scss',\n})\nexport class PrimitiveInput {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Identifiant HTML unique du champ.\n *\n * @description\n * Attribut `id` natif du champ `<input>`. Utile pour lier un `<label>` au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <label for=\"username-input\">Nom d'utilisateur</label>\n * <primitive-input id=\"username-input\"></primitive-input>\n * ```\n */\n id = input<string | undefined>(undefined);\n\n /**\n * Nom du champ pour les formulaires HTML.\n *\n * @description\n * Attribut `name` natif utilisé lors de la soumission d'un formulaire.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input name=\"email\"></primitive-input>\n * ```\n */\n name = input<string | undefined>(undefined);\n\n /**\n * Valeur d'autocomplétion HTML5.\n *\n * @description\n * Attribut `autocomplete` natif pour activer/désactiver l'autocomplétion du navigateur.\n * Valeurs courantes : `email`, `username`, `current-password`, `new-password`, `tel`, etc.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input type=\"email\" autocomplete=\"email\"></primitive-input>\n * ```\n */\n autocomplete = input<string | undefined>(undefined);\n\n /**\n * Texte d'indication affiché lorsque le champ est vide.\n *\n * @description\n * Attribut `placeholder` natif. Disparaît dès que l'utilisateur commence à saisir.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-input placeholder=\"jean.dupont@example.com\"></primitive-input>\n * ```\n */\n placeholder = input<string>('');\n\n /**\n * Type HTML5 du champ de saisie.\n *\n * @description\n * Détermine le type de clavier affiché sur mobile et les validations natives du navigateur.\n *\n * Types disponibles :\n * - `text` : texte libre (par défaut)\n * - `password` : masque les caractères saisis\n * - `email` : clavier avec @ et validation email\n * - `number` : clavier numérique\n * - `tel` : clavier téléphonique\n * - `url` : clavier avec .com et validation URL\n * - `search` : champ de recherche avec icône × de nettoyage\n * - `date` : sélecteur de date natif\n *\n * @default 'text'\n *\n * @example\n * ```html\n * <primitive-input type=\"password\"></primitive-input>\n * ```\n */\n type = input<InputType>('text');\n\n /**\n * État désactivé du champ.\n *\n * @description\n * Lorsque `true`, le champ devient non-éditable, applique l'attribut HTML `disabled`\n * et affiche les styles visuels d'état désactivé. Les événements ne sont pas émis.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-input [disabled]=\"!canEdit\"></primitive-input>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * État lecture seule du champ.\n *\n * @description\n * Lorsque `true`, le champ est visible et sélectionnable mais non-éditable.\n * Applique l'attribut HTML `readonly` et la classe CSS `.readonly`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-input [readonly]=\"true\" value=\"Valeur fixe\"></primitive-input>\n * ```\n */\n readonly = input<boolean>(false);\n\n /**\n * Champ obligatoire pour la validation HTML5.\n *\n * @description\n * Lorsque `true`, applique l'attribut HTML `required`. Le navigateur empêchera\n * la soumission du formulaire parent si le champ est vide.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-input [required]=\"true\" placeholder=\"Email requis\"></primitive-input>\n * ```\n */\n required = input<boolean>(false);\n\n /**\n * Longueur maximale autorisée en nombre de caractères.\n *\n * @description\n * Attribut `maxlength` natif. Le navigateur empêche la saisie au-delà de cette limite.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input [maxlength]=\"50\" placeholder=\"Max 50 caractères\"></primitive-input>\n * ```\n */\n maxlength = input<number | undefined>(undefined);\n\n /**\n * État visuel du champ (feedback utilisateur).\n *\n * @description\n * Applique une couleur de bordure et une classe CSS selon l'état de validation ou le contexte.\n *\n * États disponibles :\n * - `default` : état neutre (par défaut)\n * - `success` : validation réussie, bordure verte\n * - `warning` : avertissement, bordure orange\n * - `error` : erreur de validation, bordure rouge\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-input [state]=\"isValid ? 'success' : 'error'\"></primitive-input>\n * ```\n */\n state = input<InputState>('default');\n\n /**\n * Taille du champ.\n *\n * @description\n * Contrôle la hauteur, le padding et la taille de police du champ via\n * les tokens `--input-height-*` et `--input-font-size-*`.\n *\n * Tailles disponibles :\n * - `sm` : petit (32px de hauteur)\n * - `md` : moyen (40px de hauteur, par défaut)\n * - `lg` : grand (48px de hauteur)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-input size=\"lg\"></primitive-input>\n * ```\n */\n size = input<InputSize>('md');\n\n /**\n * Apparence visuelle du champ.\n *\n * @description\n * Contrôle le style de bordure et de fond du champ.\n *\n * Apparences disponibles :\n * - `default` : bordure standard, fond blanc (par défaut)\n * - `outline` : bordure fine, fond transparent\n * - `ghost` : bordure invisible au repos, visible au focus\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-input appearance=\"ghost\"></primitive-input>\n * ```\n */\n appearance = input<InputAppearance>('default');\n\n /**\n * Icône FontAwesome affichée avant le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n * Ajoute automatiquement du padding à gauche du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faUser } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-input [iconStart]=\"faUser\" placeholder=\"Username\"></primitive-input>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n * Ajoute automatiquement du padding à droite du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faSearch } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-input [iconEnd]=\"faSearch\" placeholder=\"Rechercher\"></primitive-input>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Label ARIA pour l'accessibilité.\n *\n * @description\n * Attribut `aria-label` natif utilisé par les lecteurs d'écran lorsqu'aucun\n * `<label>` visible n'est associé au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input ariaLabel=\"Adresse email\"></primitive-input>\n * ```\n */\n ariaLabel = input<string | undefined>(undefined);\n\n /**\n * ID de l'élément décrivant le champ pour l'accessibilité.\n *\n * @description\n * Attribut `aria-describedby` natif. Référence l'ID d'un élément HTML contenant\n * une description complémentaire (message d'aide, erreur de validation, etc.).\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-input ariaDescribedBy=\"email-help\"></primitive-input>\n * <small id=\"email-help\">Utilisez votre email professionnel</small>\n * ```\n */\n ariaDescribedBy = input<string | undefined>(undefined);\n\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * Valeur du champ avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(value)]`.\n * La valeur est mise à jour automatiquement lors de la saisie utilisateur.\n *\n * @default ''\n *\n * @example\n * ```typescript\n * username = signal('');\n * ```\n * ```html\n * <primitive-input [(value)]=\"username\"></primitive-input>\n * <p>Bonjour {{ username() }}</p>\n * ```\n */\n value = model<string>('');\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis à chaque modification de la valeur du champ.\n *\n * @description\n * Déclenché lors de l'événement HTML `input` natif (à chaque frappe clavier).\n * Transporte la nouvelle valeur du champ sous forme de `string`.\n *\n * @example\n * ```html\n * <primitive-input (inputChanged)=\"onInputChange($event)\"></primitive-input>\n * ```\n * ```typescript\n * onInputChange(value: string) {\n * console.log('Nouvelle valeur :', value);\n * }\n * ```\n */\n inputChanged = output<string>();\n\n /**\n * Événement émis lorsque le champ perd le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `blur` natif. Ne transporte aucune donnée (`void`).\n * Utile pour déclencher des validations ou sauvegarder les données.\n *\n * @example\n * ```html\n * <primitive-input (inputBlurred)=\"onBlur()\"></primitive-input>\n * ```\n */\n inputBlurred = output<void>();\n\n /**\n * Événement émis lorsque le champ reçoit le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `focus` natif. Ne transporte aucune donnée (`void`).\n * Utile pour afficher des indices ou mettre en surbrillance la section.\n *\n * @example\n * ```html\n * <primitive-input (inputFocused)=\"onFocus()\"></primitive-input>\n * ```\n */\n inputFocused = output<void>();\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du wrapper.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - L'état (`default`, `success`, `warning`, `error`)\n * - La taille (`sm`, `md`, `lg`)\n * - L'apparence (`outline`, `ghost` si non-default)\n * - `disabled` si le champ est désactivé\n * - `readonly` si le champ est en lecture seule\n * - `has-icon-start` si une icône de début est présente\n * - `has-icon-end` si une icône de fin est présente\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // state='error', size='lg', appearance='outline', iconStart présent\n * // → \"error lg outline has-icon-start\"\n * ```\n */\n get wrapperClasses(): string {\n const classes: string[] = [this.state(), this.size()];\n if (this.appearance() !== 'default') {\n classes.push(this.appearance());\n }\n if (this.disabled()) {\n classes.push('disabled');\n }\n if (this.readonly()) {\n classes.push('readonly');\n }\n if (this.iconStart()) {\n classes.push('has-icon-start');\n }\n if (this.iconEnd()) {\n classes.push('has-icon-end');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Gestionnaire de l'événement input natif.\n *\n * @description\n * Méthode appelée par le template lors de la saisie utilisateur.\n * Met à jour le signal `value` et émet l'événement `inputChanged`.\n *\n * @param event - Événement HTML `input` natif.\n *\n * @internal\n */\n handleInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.inputChanged.emit(target.value);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ perd le focus.\n * Émet l'événement `inputBlurred`.\n *\n * @internal\n */\n handleBlur(): void {\n this.inputBlurred.emit();\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ reçoit le focus.\n * Émet l'événement `inputFocused`.\n *\n * @internal\n */\n handleFocus(): void {\n this.inputFocused.emit();\n }\n}\n","<div class=\"input-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <input\n [attr.id]=\"id()\"\n [attr.name]=\"name()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.maxLength]=\"maxlength()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n />\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type RadioSize = 'sm' | 'md' | 'lg';\n\n/**\n * Composant radio primitif sans logique métier.\n *\n * @description\n * Bouton radio atomique stylisé par CSS custom properties. Respecte le comportement\n * natif des radios : une fois sélectionné, il ne peut pas être désélectionné par clic\n * (seul un autre radio du même groupe peut le désélectionner). Supporte plusieurs\n * tailles et un label optionnel. Utilise `model()` pour le binding bidirectionnel.\n *\n * @example\n * ```html\n * <primitive-radio\n * [(checked)]=\"selectedOption === 'option1'\"\n * name=\"options\"\n * value=\"option1\"\n * label=\"Option 1\"\n * (checkedChange)=\"onOptionSelect('option1')\">\n * </primitive-radio>\n * ```\n *\n * @example\n * ```html\n * <primitive-radio\n * [checked]=\"true\"\n * [disabled]=\"true\"\n * size=\"lg\"\n * label=\"Option désactivée\">\n * </primitive-radio>\n * ```\n */\n@Component({\n selector: 'primitive-radio',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './primitive-radio.html',\n styleUrl: './primitive-radio.scss',\n})\nexport class PrimitiveRadio {\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * État sélectionné du radio avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.\n * Contrairement à une checkbox, un radio sélectionné ne peut pas être désélectionné\n * en cliquant dessus à nouveau (comportement natif HTML).\n *\n * @default false\n *\n * @example\n * ```typescript\n * selectedValue = signal('option1');\n * ```\n * ```html\n * <primitive-radio\n * [(checked)]=\"selectedValue() === 'option1'\"\n * value=\"option1\">\n * </primitive-radio>\n * ```\n */\n checked = model<boolean>(false);\n\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * État désactivé du radio.\n *\n * @description\n * Lorsque `true`, le radio devient non-cliquable, applique les styles visuels\n * d'état désactivé et définit `tabindex=\"-1\"` et `aria-disabled=\"true\"`.\n * Les événements ne sont pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-radio [disabled]=\"!isAvailable\" label=\"Option indisponible\"></primitive-radio>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du radio.\n *\n * @description\n * Contrôle la taille du cercle du radio et la taille de police du label via\n * les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit (16px)\n * - `md` : moyen (20px, par défaut)\n * - `lg` : grand (24px)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-radio size=\"lg\" label=\"Grande option\"></primitive-radio>\n * ```\n */\n size = input<RadioSize>('md');\n\n /**\n * Texte du label affiché à côté du radio.\n *\n * @description\n * Si fourni, affiche un label cliquable associé au radio.\n * Le label est lié au radio via `aria-labelledby` pour l'accessibilité.\n * Le clic sur le label sélectionne le radio.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-radio label=\"Option A\"></primitive-radio>\n * ```\n */\n label = input<string>('');\n\n /**\n * Nom du groupe de radios pour le comportement exclusif.\n *\n * @description\n * Tous les radios avec le même `name` appartiennent au même groupe.\n * Un seul radio par groupe peut être sélectionné à la fois.\n * Important pour la gestion de l'état exclusif dans les groupes de radios.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-radio name=\"size\" value=\"small\" label=\"Petit\"></primitive-radio>\n * <primitive-radio name=\"size\" value=\"medium\" label=\"Moyen\"></primitive-radio>\n * <primitive-radio name=\"size\" value=\"large\" label=\"Grand\"></primitive-radio>\n * ```\n */\n name = input<string>('');\n\n /**\n * Valeur du radio pour l'identification dans un groupe.\n *\n * @description\n * Valeur unique qui identifie ce radio dans son groupe.\n * Utilisée par le composant parent pour déterminer quelle option est sélectionnée.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-radio\n * name=\"payment\"\n * value=\"card\"\n * label=\"Carte bancaire\"\n * [(checked)]=\"paymentMethod === 'card'\">\n * </primitive-radio>\n * ```\n */\n value = input<string>('');\n\n /**\n * Identifiant unique du radio pour l'accessibilité.\n *\n * @description\n * Utilisé pour générer les IDs des éléments internes (label) et pour l'association\n * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.\n *\n * @default `radio-${random}`\n *\n * @example\n * ```html\n * <primitive-radio radioId=\"payment-card\" label=\"Carte\"></primitive-radio>\n * ```\n */\n radioId = input<string>(`radio-${Math.random().toString(36).slice(2, 11)}`);\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors de la sélection du radio.\n *\n * @description\n * Émis uniquement si le radio n'est pas désactivé et n'est pas déjà sélectionné.\n * Transporte toujours la valeur `true` car un radio ne peut que passer à l'état sélectionné.\n * Non émis lors d'un clic sur un radio déjà sélectionné (comportement natif).\n *\n * @example\n * ```html\n * <primitive-radio\n * name=\"options\"\n * value=\"option1\"\n * (checkedChange)=\"onOptionSelect('option1')\">\n * </primitive-radio>\n * ```\n * ```typescript\n * onOptionSelect(value: string) {\n * console.log('Option sélectionnée :', value);\n * }\n * ```\n */\n checkedChange = output<boolean>();\n\n // === SIGNAUX INTERNES ===\n\n /**\n * Signal interne de l'état focus du radio.\n *\n * @description\n * Signal utilisé en interne pour suivre l'état focus du radio.\n * Applique la classe CSS `primitive-radio--focused` lorsque `true`.\n *\n * @internal\n */\n protected focused = signal<boolean>(false);\n\n /**\n * Signal calculé des classes CSS du radio.\n *\n * @description\n * Génère dynamiquement un objet de classes CSS en fonction des propriétés :\n * - Classe de base : `primitive-radio`\n * - Classe de taille : `primitive-radio--{size}`\n * - Classe d'état sélectionné : `primitive-radio--checked`\n * - Classe d'état désactivé : `primitive-radio--disabled`\n * - Classe d'état focus : `primitive-radio--focused`\n *\n * @returns Objet de classes CSS avec valeurs booléennes.\n *\n * @internal\n */\n protected cssClasses = computed(() => ({\n 'primitive-radio': true,\n [`primitive-radio--${this.size()}`]: true,\n 'primitive-radio--checked': this.checked(),\n 'primitive-radio--disabled': this.disabled(),\n 'primitive-radio--focused': this.focused(),\n }));\n\n // === MÉTHODES INTERNES ===\n\n /**\n * Gestionnaire de sélection interne.\n *\n * @description\n * Méthode appelée par le template lors du clic sur le radio ou son label.\n * Ne fait rien si le radio est désactivé ou déjà sélectionné (comportement natif).\n * Définit `checked` à `true` et émet l'événement `checkedChange`.\n *\n * @internal\n */\n protected onSelect(): void {\n if (this.disabled() || this.checked()) return;\n\n this.checked.set(true);\n this.checkedChange.emit(true);\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le radio reçoit le focus.\n * Met à jour le signal interne `focused` à `true`.\n *\n * @internal\n */\n protected onFocus(): void {\n this.focused.set(true);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le radio perd le focus.\n * Met à jour le signal interne `focused` à `false`.\n *\n * @internal\n */\n protected onBlur(): void {\n this.focused.set(false);\n }\n\n /**\n * Gestionnaire de l'événement keydown natif.\n *\n * @description\n * Méthode appelée par le template lors de la pression d'une touche clavier.\n * Déclenche la sélection sur les touches `Space` ou `Enter` et empêche le\n * comportement par défaut (scroll de la page sur Space).\n *\n * @param event - Événement clavier natif.\n *\n * @internal\n */\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onSelect();\n }\n }\n}\n","<div\n [ngClass]=\"cssClasses()\"\n (click)=\"onSelect()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.role]=\"'radio'\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"label() ? radioId() + '-label' : null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n>\n <div class=\"primitive-radio__circle\">\n @if (checked()) {\n <div class=\"primitive-radio__dot\"></div>\n }\n </div>\n @if (label()) {\n <label\n [id]=\"radioId() + '-label'\"\n class=\"primitive-radio__label\"\n [class.primitive-radio__label--disabled]=\"disabled()\"\n >\n {{ label() }}\n </label>\n }\n</div>\n","import { Component, input, output, model } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\nexport type TextareaState = 'default' | 'success' | 'warning' | 'error';\nexport type TextareaSize = 'sm' | 'md' | 'lg';\nexport type TextareaAppearance = 'default' | 'outline' | 'ghost';\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\n/**\n * Composant textarea primitif sans logique métier.\n *\n * @description\n * Zone de saisie multiligne atomique stylisée par CSS custom properties. Supporte plusieurs\n * états visuels, tailles, apparences et modes de redimensionnement. Peut afficher des icônes\n * FontAwesome avant/après le champ. Utilise `model()` pour le binding bidirectionnel de la valeur.\n *\n * @example\n * ```html\n * <primitive-textarea\n * placeholder=\"Saisissez votre commentaire\"\n * [(value)]=\"comment\"\n * [rows]=\"5\">\n * </primitive-textarea>\n * ```\n *\n * @example\n * ```html\n * <primitive-textarea\n * state=\"error\"\n * [maxlength]=\"500\"\n * resize=\"none\"\n * appearance=\"outline\"\n * (inputChanged)=\"onCommentChange($event)\">\n * </primitive-textarea>\n * ```\n */\n@Component({\n selector: 'primitive-textarea',\n imports: [CommonModule, FormsModule, FaIconComponent],\n templateUrl: './primitive-textarea.html',\n styleUrl: './primitive-textarea.scss',\n})\nexport class PrimitiveTextarea {\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * Identifiant HTML unique du champ.\n *\n * @description\n * Attribut `id` natif du champ `<textarea>`. Utile pour lier un `<label>` au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <label for=\"comment-textarea\">Commentaire</label>\n * <primitive-textarea id=\"comment-textarea\"></primitive-textarea>\n * ```\n */\n id = input<string | undefined>(undefined);\n\n /**\n * Nom du champ pour les formulaires HTML.\n *\n * @description\n * Attribut `name` natif utilisé lors de la soumission d'un formulaire.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea name=\"description\"></primitive-textarea>\n * ```\n */\n name = input<string | undefined>(undefined);\n\n /**\n * Texte d'indication affiché lorsque le champ est vide.\n *\n * @description\n * Attribut `placeholder` natif. Disparaît dès que l'utilisateur commence à saisir.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-textarea placeholder=\"Décrivez votre problème...\"></primitive-textarea>\n * ```\n */\n placeholder = input<string>('');\n\n /**\n * État désactivé du champ.\n *\n * @description\n * Lorsque `true`, le champ devient non-éditable, applique l'attribut HTML `disabled`\n * et affiche les styles visuels d'état désactivé. Les événements ne sont pas émis.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-textarea [disabled]=\"!canEdit\"></primitive-textarea>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * État lecture seule du champ.\n *\n * @description\n * Lorsque `true`, le champ est visible et sélectionnable mais non-éditable.\n * Applique l'attribut HTML `readonly` et la classe CSS `.readonly`.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-textarea [readonly]=\"true\" value=\"Texte fixe\"></primitive-textarea>\n * ```\n */\n readonly = input<boolean>(false);\n\n /**\n * Champ obligatoire pour la validation HTML5.\n *\n * @description\n * Lorsque `true`, applique l'attribut HTML `required`. Le navigateur empêchera\n * la soumission du formulaire parent si le champ est vide.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-textarea [required]=\"true\"></primitive-textarea>\n * ```\n */\n required = input<boolean>(false);\n\n /**\n * État visuel du champ (feedback utilisateur).\n *\n * @description\n * Applique une couleur de bordure et une classe CSS selon l'état de validation ou le contexte.\n *\n * États disponibles :\n * - `default` : état neutre (par défaut)\n * - `success` : validation réussie, bordure verte\n * - `warning` : avertissement, bordure orange\n * - `error` : erreur de validation, bordure rouge\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-textarea [state]=\"isValid ? 'success' : 'error'\"></primitive-textarea>\n * ```\n */\n state = input<TextareaState>('default');\n\n /**\n * Taille du champ.\n *\n * @description\n * Contrôle le padding et la taille de police du champ via les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit\n * - `md` : moyen (par défaut)\n * - `lg` : grand\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-textarea size=\"lg\"></primitive-textarea>\n * ```\n */\n size = input<TextareaSize>('md');\n\n /**\n * Apparence visuelle du champ.\n *\n * @description\n * Contrôle le style de bordure et de fond du champ.\n *\n * Apparences disponibles :\n * - `default` : bordure standard, fond blanc (par défaut)\n * - `outline` : bordure fine, fond transparent\n * - `ghost` : bordure invisible au repos, visible au focus\n *\n * @default 'default'\n *\n * @example\n * ```html\n * <primitive-textarea appearance=\"outline\"></primitive-textarea>\n * ```\n */\n appearance = input<TextareaAppearance>('default');\n\n /**\n * Mode de redimensionnement du champ.\n *\n * @description\n * Contrôle la possibilité pour l'utilisateur de redimensionner le champ manuellement.\n * Applique la propriété CSS `resize` au textarea.\n *\n * Modes disponibles :\n * - `none` : pas de redimensionnement\n * - `vertical` : redimensionnement vertical uniquement (par défaut)\n * - `horizontal` : redimensionnement horizontal uniquement\n * - `both` : redimensionnement dans les deux directions\n *\n * @default 'vertical'\n *\n * @example\n * ```html\n * <primitive-textarea resize=\"none\"></primitive-textarea>\n * ```\n */\n resize = input<TextareaResize>('vertical');\n\n /**\n * Nombre de lignes visibles du textarea.\n *\n * @description\n * Attribut `rows` natif. Définit la hauteur initiale du champ en nombre de lignes de texte.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea [rows]=\"5\"></primitive-textarea>\n * ```\n */\n rows = input<number | undefined>(undefined);\n\n /**\n * Nombre de colonnes (largeur en caractères) du textarea.\n *\n * @description\n * Attribut `cols` natif. Définit la largeur du champ en nombre de caractères.\n * Rarement utilisé car la largeur est souvent contrôlée par CSS.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea [cols]=\"80\"></primitive-textarea>\n * ```\n */\n cols = input<number | undefined>(undefined);\n\n /**\n * Longueur maximale autorisée en nombre de caractères.\n *\n * @description\n * Attribut `maxlength` natif. Le navigateur empêche la saisie au-delà de cette limite.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea [maxlength]=\"500\"></primitive-textarea>\n * ```\n */\n maxlength = input<number | undefined>(undefined);\n\n /**\n * Icône FontAwesome affichée avant le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-start`.\n * Ajoute automatiquement du padding en haut à gauche du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faCommentDots } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-textarea [iconStart]=\"faCommentDots\"></primitive-textarea>\n * ```\n */\n iconStart = input<IconDefinition | null>(null);\n\n /**\n * Icône FontAwesome affichée après le champ.\n *\n * @description\n * Accepte une `IconDefinition` de `@fortawesome/fontawesome-svg-core`.\n * L'icône est rendue via `<fa-icon>` avec la classe CSS `.icon-end`.\n * Ajoute automatiquement du padding en haut à droite du champ.\n *\n * @default null\n *\n * @example\n * ```typescript\n * import { faPen } from '@fortawesome/free-solid-svg-icons';\n * ```\n * ```html\n * <primitive-textarea [iconEnd]=\"faPen\"></primitive-textarea>\n * ```\n */\n iconEnd = input<IconDefinition | null>(null);\n\n /**\n * Label ARIA pour l'accessibilité.\n *\n * @description\n * Attribut `aria-label` natif utilisé par les lecteurs d'écran lorsqu'aucun\n * `<label>` visible n'est associé au champ.\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea ariaLabel=\"Commentaire détaillé\"></primitive-textarea>\n * ```\n */\n ariaLabel = input<string | undefined>(undefined);\n\n /**\n * ID de l'élément décrivant le champ pour l'accessibilité.\n *\n * @description\n * Attribut `aria-describedby` natif. Référence l'ID d'un élément HTML contenant\n * une description complémentaire (message d'aide, erreur de validation, etc.).\n *\n * @default undefined\n *\n * @example\n * ```html\n * <primitive-textarea ariaDescribedBy=\"comment-help\"></primitive-textarea>\n * <small id=\"comment-help\">Maximum 500 caractères</small>\n * ```\n */\n ariaDescribedBy = input<string | undefined>(undefined);\n\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * Valeur du champ avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(value)]`.\n * La valeur est mise à jour automatiquement lors de la saisie utilisateur.\n *\n * @default ''\n *\n * @example\n * ```typescript\n * comment = signal('');\n * ```\n * ```html\n * <primitive-textarea [(value)]=\"comment\"></primitive-textarea>\n * <p>Longueur : {{ comment().length }} caractères</p>\n * ```\n */\n value = model<string>('');\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis à chaque modification de la valeur du champ.\n *\n * @description\n * Déclenché lors de l'événement HTML `input` natif (à chaque frappe clavier).\n * Transporte la nouvelle valeur du champ sous forme de `string`.\n *\n * @example\n * ```html\n * <primitive-textarea (inputChanged)=\"onInputChange($event)\"></primitive-textarea>\n * ```\n * ```typescript\n * onInputChange(value: string) {\n * console.log('Nouvelle valeur :', value);\n * }\n * ```\n */\n inputChanged = output<string>();\n\n /**\n * Événement émis lorsque le champ perd le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `blur` natif. Ne transporte aucune donnée (`void`).\n * Utile pour déclencher des validations ou sauvegarder les données.\n *\n * @example\n * ```html\n * <primitive-textarea (inputBlurred)=\"onBlur()\"></primitive-textarea>\n * ```\n */\n inputBlurred = output<void>();\n\n /**\n * Événement émis lorsque le champ reçoit le focus.\n *\n * @description\n * Déclenché lors de l'événement HTML `focus` natif. Ne transporte aucune donnée (`void`).\n * Utile pour afficher des indices ou mettre en surbrillance la section.\n *\n * @example\n * ```html\n * <primitive-textarea (inputFocused)=\"onFocus()\"></primitive-textarea>\n * ```\n */\n inputFocused = output<void>();\n\n // === MÉTHODES PUBLIQUES ===\n\n /**\n * Calcule dynamiquement les classes CSS du wrapper.\n *\n * @description\n * Génère une chaîne de classes CSS combinant :\n * - L'état (`default`, `success`, `warning`, `error`)\n * - La taille (`sm`, `md`, `lg`)\n * - L'apparence (`outline`, `ghost` si non-default)\n * - `disabled` si le champ est désactivé\n * - `readonly` si le champ est en lecture seule\n * - `has-icon-start` si une icône de début est présente\n * - `has-icon-end` si une icône de fin est présente\n *\n * @returns Une chaîne de classes CSS séparées par des espaces.\n *\n * @example\n * ```typescript\n * // state='error', size='lg', appearance='outline', iconStart présent\n * // → \"error lg outline has-icon-start\"\n * ```\n */\n get wrapperClasses(): string {\n const classes: string[] = [this.state(), this.size()];\n if (this.appearance() !== 'default') {\n classes.push(this.appearance());\n }\n if (this.disabled()) {\n classes.push('disabled');\n }\n if (this.readonly()) {\n classes.push('readonly');\n }\n if (this.iconStart()) {\n classes.push('has-icon-start');\n }\n if (this.iconEnd()) {\n classes.push('has-icon-end');\n }\n return classes.filter(Boolean).join(' ');\n }\n\n /**\n * Gestionnaire de l'événement input natif.\n *\n * @description\n * Méthode appelée par le template lors de la saisie utilisateur.\n * Met à jour le signal `value` et émet l'événement `inputChanged`.\n *\n * @param event - Événement HTML `input` natif.\n *\n * @internal\n */\n handleInput(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value.set(target.value);\n this.inputChanged.emit(target.value);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ perd le focus.\n * Émet l'événement `inputBlurred`.\n *\n * @internal\n */\n handleBlur(): void {\n this.inputBlurred.emit();\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le champ reçoit le focus.\n * Émet l'événement `inputFocused`.\n *\n * @internal\n */\n handleFocus(): void {\n this.inputFocused.emit();\n }\n}\n","<div class=\"textarea-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <textarea\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.rows]=\"rows()\"\n [attr.cols]=\"cols()\"\n [attr.maxLength]=\"maxlength()\"\n [value]=\"value()\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n [style.resize]=\"resize()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n ></textarea>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\n/**\n * Composant toggle (switch) primitif sans logique métier.\n *\n * @description\n * Interrupteur atomique stylisé par CSS custom properties. Représente un état binaire\n * activé/désactivé avec une animation de transition fluide. Supporte plusieurs tailles,\n * un label optionnel positionnable à gauche ou à droite, et utilise `model()` pour\n * le binding bidirectionnel.\n *\n * @example\n * ```html\n * <primitive-toggle\n * [(checked)]=\"notificationsEnabled\"\n * label=\"Activer les notifications\">\n * </primitive-toggle>\n * ```\n *\n * @example\n * ```html\n * <primitive-toggle\n * [checked]=\"true\"\n * [disabled]=\"false\"\n * size=\"lg\"\n * labelPosition=\"left\"\n * label=\"Mode sombre\"\n * (checkedChange)=\"onThemeChange($event)\">\n * </primitive-toggle>\n * ```\n */\n@Component({\n selector: 'primitive-toggle',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './primitive-toggle.html',\n styleUrl: './primitive-toggle.scss',\n})\nexport class PrimitiveToggle {\n // === PROPRIÉTÉ MODEL (BINDING BIDIRECTIONNEL) ===\n\n /**\n * État activé du toggle avec binding bidirectionnel.\n *\n * @description\n * Utilise le signal `model()` pour permettre le binding bidirectionnel via `[(checked)]`.\n * L'état est inversé automatiquement lors du clic utilisateur.\n * Le thumb (curseur) se déplace de gauche à droite selon l'état.\n *\n * @default false\n *\n * @example\n * ```typescript\n * darkModeEnabled = signal(false);\n * ```\n * ```html\n * <primitive-toggle [(checked)]=\"darkModeEnabled\" label=\"Mode sombre\"></primitive-toggle>\n * <p>Mode sombre : {{ darkModeEnabled() ? 'Activé' : 'Désactivé' }}</p>\n * ```\n */\n checked = model<boolean>(false);\n\n // === PROPRIÉTÉS D'ENTRÉE ===\n\n /**\n * État désactivé du toggle.\n *\n * @description\n * Lorsque `true`, le toggle devient non-cliquable, applique les styles visuels\n * d'état désactivé et définit `tabindex=\"-1\"` et `aria-disabled=\"true\"`.\n * Les événements ne sont pas émis en état désactivé.\n *\n * @default false\n *\n * @example\n * ```html\n * <primitive-toggle [disabled]=\"!hasPermission\" label=\"Option premium\"></primitive-toggle>\n * ```\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du toggle.\n *\n * @description\n * Contrôle la hauteur du track (rail), la taille du thumb (curseur) et la taille\n * de police du label via les tokens CSS custom properties.\n *\n * Tailles disponibles :\n * - `sm` : petit (track 32px × 18px, thumb 14px)\n * - `md` : moyen (track 44px × 24px, thumb 20px, par défaut)\n * - `lg` : grand (track 56px × 30px, thumb 26px)\n *\n * @default 'md'\n *\n * @example\n * ```html\n * <primitive-toggle size=\"lg\" label=\"Grande option\"></primitive-toggle>\n * ```\n */\n size = input<ToggleSize>('md');\n\n /**\n * Texte du label affiché à côté du toggle.\n *\n * @description\n * Si fourni, affiche un label cliquable associé au toggle.\n * Le label est lié au toggle via `aria-labelledby` pour l'accessibilité.\n * Le clic sur le label déclenche le toggle.\n *\n * @default ''\n *\n * @example\n * ```html\n * <primitive-toggle label=\"Accepter les cookies\"></primitive-toggle>\n * ```\n */\n label = input<string>('');\n\n /**\n * Position du label par rapport au switch.\n *\n * @description\n * Définit si le label s'affiche à gauche ou à droite du switch visuel.\n * Applique la classe CSS `primitive-toggle--label-{position}` si un label est présent.\n *\n * Positions disponibles :\n * - `right` : label à droite du switch (par défaut)\n * - `left` : label à gauche du switch\n *\n * @default 'right'\n *\n * @example\n * ```html\n * <primitive-toggle labelPosition=\"left\" label=\"Notifications\"></primitive-toggle>\n * ```\n */\n labelPosition = input<'left' | 'right'>('right');\n\n /**\n * Identifiant unique du toggle pour l'accessibilité.\n *\n * @description\n * Utilisé pour générer les IDs des éléments internes (label) et pour l'association\n * ARIA. Si non fourni, un ID aléatoire est généré automatiquement.\n *\n * @default `toggle-${random}`\n *\n * @example\n * ```html\n * <primitive-toggle toggleId=\"dark-mode-switch\" label=\"Mode sombre\"></primitive-toggle>\n * ```\n */\n toggleId = input<string>(`toggle-${Math.random().toString(36).slice(2, 11)}`);\n\n // === ÉVÉNEMENTS DE SORTIE ===\n\n /**\n * Événement émis lors du changement d'état du toggle.\n *\n * @description\n * Émis uniquement si le toggle n'est pas désactivé (`disabled = false`).\n * Transporte la nouvelle valeur booléenne de l'état activé.\n * Émis à chaque toggle (activation ou désactivation).\n *\n * @example\n * ```html\n * <primitive-toggle\n * [(checked)]=\"autoSave\"\n * (checkedChange)=\"onAutoSaveChange($event)\">\n * </primitive-toggle>\n * ```\n * ```typescript\n * onAutoSaveChange(enabled: boolean) {\n * console.log('Sauvegarde automatique :', enabled ? 'activée' : 'désactivée');\n * }\n * ```\n */\n checkedChange = output<boolean>();\n\n // === SIGNAUX INTERNES ===\n\n /**\n * Signal interne de l'état focus du toggle.\n *\n * @description\n * Signal utilisé en interne pour suivre l'état focus du switch.\n * Applique la classe CSS `primitive-toggle--focused` lorsque `true`.\n *\n * @internal\n */\n protected focused = signal<boolean>(false);\n\n /**\n * Signal calculé des classes CSS du toggle.\n *\n * @description\n * Génère dynamiquement un objet de classes CSS en fonction des propriétés :\n * - Classe de base : `primitive-toggle`\n * - Classe de taille : `primitive-toggle--{size}`\n * - Classe de position du label : `primitive-toggle--label-{position}` (si label présent)\n * - Classe d'état activé : `primitive-toggle--checked`\n * - Classe d'état désactivé : `primitive-toggle--disabled`\n * - Classe d'état focus : `primitive-toggle--focused`\n *\n * @returns Objet de classes CSS avec valeurs booléennes.\n *\n * @internal\n */\n protected cssClasses = computed(() => ({\n 'primitive-toggle': true,\n [`primitive-toggle--${this.size()}`]: true,\n [`primitive-toggle--label-${this.labelPosition()}`]: !!this.label(),\n 'primitive-toggle--checked': this.checked(),\n 'primitive-toggle--disabled': this.disabled(),\n 'primitive-toggle--focused': this.focused(),\n }));\n\n // === MÉTHODES INTERNES ===\n\n /**\n * Gestionnaire de toggle interne.\n *\n * @description\n * Méthode appelée par le template lors du clic sur le switch ou son label.\n * Inverse l'état `checked` et émet l'événement `checkedChange`.\n * Ne fait rien si le toggle est désactivé.\n *\n * @internal\n */\n protected onToggle(): void {\n if (this.disabled()) return;\n\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.checkedChange.emit(newValue);\n }\n\n /**\n * Gestionnaire de l'événement focus natif.\n *\n * @description\n * Méthode appelée par le template lorsque le switch reçoit le focus.\n * Met à jour le signal interne `focused` à `true`.\n *\n * @internal\n */\n protected onFocus(): void {\n this.focused.set(true);\n }\n\n /**\n * Gestionnaire de l'événement blur natif.\n *\n * @description\n * Méthode appelée par le template lorsque le switch perd le focus.\n * Met à jour le signal interne `focused` à `false`.\n *\n * @internal\n */\n protected onBlur(): void {\n this.focused.set(false);\n }\n\n /**\n * Gestionnaire de l'événement keydown natif.\n *\n * @description\n * Méthode appelée par le template lors de la pression d'une touche clavier.\n * Déclenche le toggle sur les touches `Space` ou `Enter` et empêche le\n * comportement par défaut (scroll de la page sur Space).\n *\n * @param event - Événement clavier natif.\n *\n * @internal\n */\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onToggle();\n }\n }\n}\n","<div [ngClass]=\"cssClasses()\">\n @if (label() && labelPosition() === 'left') {\n <label\n [id]=\"toggleId() + '-label'\"\n class=\"primitive-toggle__label\"\n [class.primitive-toggle__label--disabled]=\"disabled()\"\n (click)=\"onToggle()\"\n >\n {{ label() }}\n </label>\n }\n\n <div\n class=\"primitive-toggle__switch\"\n (click)=\"onToggle()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.role]=\"'switch'\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-labelledby]=\"label() ? toggleId() + '-label' : null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n >\n <div class=\"primitive-toggle__track\">\n <div class=\"primitive-toggle__thumb\"></div>\n </div>\n </div>\n\n @if (label() && labelPosition() === 'right') {\n <label\n [id]=\"toggleId() + '-label'\"\n class=\"primitive-toggle__label\"\n [class.primitive-toggle__label--disabled]=\"disabled()\"\n (click)=\"onToggle()\"\n >\n {{ label() }}\n </label>\n }\n</div>\n","/*\n * Primitives barrel export\n */\n\n// Primitives exports\nexport {\n PrimitiveBadge,\n type BadgeType,\n type BadgeVariant,\n type BadgeSize,\n type BadgeShape,\n type BadgeAppearance,\n} from './primitive-badge/primitive-badge';\n\nexport {\n PrimitiveButton,\n type ButtonType,\n type ButtonVariant,\n type ButtonSize,\n type ButtonAppearance,\n} from './primitive-button/primitive-button';\n\nexport {\n PrimitiveCheckbox,\n type CheckboxSize,\n type CheckboxState,\n} from './primitive-checkbox/primitive-checkbox';\n\nexport {\n PrimitiveInput,\n type InputType,\n type InputState,\n type InputSize,\n type InputAppearance,\n} from './primitive-input/primitive-input';\n\nexport {\n PrimitiveRadio,\n type RadioSize,\n} from './primitive-radio/primitive-radio';\n\nexport {\n PrimitiveTextarea,\n type TextareaState,\n type TextareaSize,\n type TextareaAppearance,\n type TextareaResize,\n} from './primitive-textarea/primitive-textarea';\n\nexport {\n PrimitiveToggle,\n type ToggleSize,\n} from './primitive-toggle/primitive-toggle';\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faCheckCircle,\n faExclamationTriangle,\n faTimesCircle,\n faInfoCircle,\n faTimes\n} from '@fortawesome/free-solid-svg-icons';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\n/**\n * Types de feedback disponibles pour le composant Alert.\n * - **success** : opération réussie\n * - **warning** : attention ou avertissement\n * - **error** : erreur ou échec\n * - **info** : information neutre\n */\nexport type AlertType = 'success' | 'warning' | 'error' | 'info';\n\n/**\n * Tailles disponibles pour le composant Alert.\n */\nexport type AlertSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsAlert\n *\n * Composant de bannière de feedback permettant d'afficher des messages\n * de succès, d'avertissement, d'erreur ou d'information.\n *\n * ## Usage\n *\n * ```html\n * <ds-alert type=\"success\" [closable]=\"true\" (closed)=\"handleClose()\">\n * <p>Votre opération a été effectuée avec succès !</p>\n * </ds-alert>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"alert\"` pour les messages importants\n * - Icônes décoratives avec `aria-hidden=\"true\"`\n * - Bouton de fermeture avec `aria-label` explicite\n *\n * @component\n */\n@Component({\n selector: 'ds-alert',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-alert.html',\n styleUrl: './ds-alert.scss',\n})\nexport class DsAlert {\n /**\n * Type de feedback (success, warning, error, info).\n * @default 'info'\n */\n type = input<AlertType>('info');\n\n /**\n * Taille de l'alerte (affecte le padding et la taille de l'icône).\n * @default 'md'\n */\n size = input<AlertSize>('md');\n\n /**\n * Affiche une icône selon le type.\n * @default true\n */\n showIcon = input<boolean>(true);\n\n /**\n * Permet de fermer l'alerte avec un bouton de fermeture.\n * @default false\n */\n closable = input<boolean>(false);\n\n /**\n * Masque l'alerte (contrôle de visibilité externe).\n * @default false\n */\n hidden = input<boolean>(false);\n\n /**\n * Émis lorsque l'utilisateur ferme l'alerte.\n */\n closed = output<void>();\n\n /**\n * Mapping des icônes FontAwesome par type d'alerte.\n * Exposé en readonly pour les tests et l'introspection.\n */\n readonly icons: Record<AlertType, IconDefinition> = {\n success: faCheckCircle,\n warning: faExclamationTriangle,\n error: faTimesCircle,\n info: faInfoCircle,\n };\n\n protected readonly closeIcon = faTimes;\n\n /**\n * Classes CSS calculées pour le composant.\n */\n get alertClasses(): string[] {\n return [\n 'ds-alert',\n `ds-alert--${this.type()}`,\n `ds-alert--${this.size()}`,\n this.hidden() ? 'ds-alert--hidden' : '',\n ].filter(Boolean);\n }\n\n /**\n * Icône à afficher selon le type.\n */\n get currentIcon(): IconDefinition {\n return this.icons[this.type()];\n }\n\n /**\n * Gère la fermeture de l'alerte.\n */\n handleClose(): void {\n this.closed.emit();\n }\n}\n","<div\n [class]=\"alertClasses.join(' ')\"\n role=\"alert\"\n [attr.aria-hidden]=\"hidden() ? 'true' : null\"\n>\n @if (showIcon()) {\n <div class=\"ds-alert__icon\" aria-hidden=\"true\">\n <fa-icon [icon]=\"currentIcon\"></fa-icon>\n </div>\n }\n\n <div class=\"ds-alert__content\">\n <ng-content></ng-content>\n </div>\n\n @if (closable()) {\n <button\n class=\"ds-alert__close\"\n type=\"button\"\n aria-label=\"Fermer l'alerte\"\n (click)=\"handleClose()\"\n >\n <fa-icon [icon]=\"closeIcon\"></fa-icon>\n </button>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { IconDefinition } from '@fortawesome/free-solid-svg-icons';\nimport { PrimitiveBadge, BadgeVariant, BadgeSize, BadgeShape } from '../../primitives/primitive-badge/primitive-badge';\nimport { CommonModule } from '@angular/common';\n\ntype DsBadgeVariantExtended = BadgeVariant | 'default' | 'accent';\n\n@Component({\n selector: 'ds-badge',\n imports: [CommonModule, PrimitiveBadge],\n templateUrl: './ds-badge.html',\n styleUrl: './ds-badge.scss',\n})\nexport class DsBadge {\n private static readonly supportedColorPattern = /^(#|rgba?\\(|hsla?\\(|var\\()/i;\n\n // Props de base\n type = input<DsBadgeVariantExtended>('default');\n size = input<BadgeSize>('md');\n iconStart = input<IconDefinition | null>(null);\n iconEnd = input<IconDefinition | null>(null);\n\n // Props spécifiques DS\n variant = input<'solid' | 'outline'>('solid');\n shape = input<'default' | 'pill' | 'square'>('default');\n color = input<string | undefined>(undefined);\n\n get badgeVariant(): BadgeVariant {\n const type = this.type();\n if (type === 'default') return 'neutral';\n if (type === 'accent') return 'primary';\n return type as BadgeVariant;\n }\n\n get badgeShape(): BadgeShape {\n const shape = this.shape();\n if (shape === 'default' || shape === 'square') return 'rounded';\n return 'pill';\n }\n\n get styleOverrides(): Record<string, string> | null {\n const customColor = this.resolveCustomColor();\n if (!customColor) {\n return null;\n }\n\n if (this.variant() === 'outline') {\n return {\n borderColor: customColor,\n color: customColor,\n backgroundColor: 'transparent',\n };\n }\n\n return {\n backgroundColor: customColor,\n borderColor: customColor,\n color: 'var(--badge-text, #fff)',\n };\n }\n\n private resolveCustomColor(): string | null {\n const value = this.color()?.trim();\n if (!value) {\n return null;\n }\n\n if (!DsBadge.supportedColorPattern.test(value)) {\n return null;\n }\n\n return value;\n }\n}\n","<div class=\"ds-badge-wrapper\">\n <primitive-badge\n [variant]=\"badgeVariant\"\n [size]=\"size()\"\n [shape]=\"badgeShape\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [customStyles]=\"styleOverrides\">\n <ng-content></ng-content>\n </primitive-badge>\n</div>\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'ds-breadcrumb',\n standalone: true,\n imports: [CommonModule, RouterModule],\n templateUrl: './ds-breadcrumb.html',\n styleUrl: './ds-breadcrumb.scss',\n})\nexport class DsBreadcrumb {\n items = input.required<BreadcrumbItem[]>();\n separator = input<string>('/');\n maxItems = input<number | undefined>(undefined);\n\n itemClicked = output<BreadcrumbItem>();\n\n protected get visibleItems(): BreadcrumbItem[] {\n const allItems = this.items();\n const max = this.maxItems();\n\n if (!max || allItems.length <= max) {\n return allItems;\n }\n\n // Si on dépasse maxItems, on garde le premier, un ellipsis, et les derniers\n const firstItem = allItems[0];\n const lastItems = allItems.slice(-(max - 2));\n\n return [firstItem, { label: '...', disabled: true }, ...lastItems];\n }\n\n protected onItemClick(item: BreadcrumbItem, event: Event): void {\n if (item.disabled) {\n event.preventDefault();\n return;\n }\n this.itemClicked.emit(item);\n }\n\n protected isLastItem(index: number): boolean {\n return index === this.visibleItems.length - 1;\n }\n\n protected trackByIndex(index: number): number {\n return index;\n }\n}\n","<nav class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"ds-breadcrumb__list\">\n @for (item of visibleItems; track trackByIndex($index)) {\n <li class=\"ds-breadcrumb__item\" [class.ds-breadcrumb__item--active]=\"isLastItem($index)\">\n @if (item.href && !item.disabled && !isLastItem($index)) {\n <a\n [routerLink]=\"item.href\"\n class=\"ds-breadcrumb__link\"\n (click)=\"onItemClick(item, $event)\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"ds-breadcrumb__text\"\n [class.ds-breadcrumb__text--disabled]=\"item.disabled\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n\n @if (!isLastItem($index)) {\n <span class=\"ds-breadcrumb__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n }\n </li>\n }\n </ol>\n</nav>\n","import { Component, input, output } from '@angular/core';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { PrimitiveButton, ButtonVariant, ButtonSize, ButtonType, ButtonAppearance } from '../../primitives/primitive-button/primitive-button';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ds-button',\n imports: [CommonModule, PrimitiveButton],\n templateUrl: './ds-button.html',\n styleUrl: './ds-button.scss',\n})\nexport class DsButton {\n // Props de base (délégués à primitive-button)\n /** Variante visuelle appliquée au bouton. */\n variant = input<ButtonVariant>('primary');\n /** Apparence du bouton (plein ou outline). */\n appearance = input<ButtonAppearance>('solid');\n /** Taille du bouton. */\n size = input<ButtonSize>('md');\n /** Définit le type submit pour les formulaires. */\n submit = input<boolean>(false);\n /** Désactive le bouton. */\n disabled = input<boolean>(false);\n /** Icône affichée à gauche du libellé. */\n iconStart = input<IconDefinition | null>(null);\n /** Icône affichée à droite du libellé. */\n iconEnd = input<IconDefinition | null>(null);\n\n // Props spécifiques DS\n /** Active l'état de chargement avec spinner et désactive le clic. */\n loading = input<boolean>(false);\n /** Étend le bouton sur toute la largeur du conteneur. */\n block = input<boolean>(false);\n\n // Events\n /** Émis lorsque l'utilisateur clique sur le bouton actif. */\n clicked = output<void>();\n\n get buttonType(): ButtonType {\n return this.submit() ? 'submit' : 'button';\n }\n\n get isDisabled(): boolean {\n return this.disabled() || this.loading();\n }\n\n handleClick(): void {\n if (!this.isDisabled) {\n this.clicked.emit();\n }\n }\n}\n","<div class=\"ds-button-wrapper\" [class.block]=\"block()\">\n @if (loading()) {\n <primitive-button\n [type]=\"buttonType\"\n [variant]=\"variant()\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"true\">\n <span class=\"spinner\"></span>\n </primitive-button>\n } @else {\n <primitive-button\n [type]=\"buttonType\"\n [variant]=\"variant()\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"isDisabled\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n (clicked)=\"handleClick()\">\n <ng-content></ng-content>\n </primitive-button>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Variantes visuelles disponibles pour le composant Card.\n * - **default** : carte simple avec bordure\n * - **elevated** : carte avec ombre portée\n * - **outlined** : carte avec bordure accentuée\n */\nexport type CardVariant = 'default' | 'elevated' | 'outlined';\n\n/**\n * Tailles disponibles pour le composant Card.\n */\nexport type CardSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsCard\n *\n * Composant container permettant de regrouper du contenu avec un en-tête,\n * un corps et un pied de page optionnels.\n *\n * ## Usage\n *\n * ```html\n * <ds-card variant=\"elevated\" size=\"md\">\n * <div header>Titre de la carte</div>\n * <div>Contenu principal</div>\n * <div footer>Actions ou informations complémentaires</div>\n * </ds-card>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise la sémantique HTML appropriée (`article`)\n * - Structure claire avec header, body, footer\n *\n * @component\n */\n@Component({\n selector: 'ds-card',\n imports: [CommonModule],\n templateUrl: './ds-card.html',\n styleUrl: './ds-card.scss',\n})\nexport class DsCard {\n /**\n * Variante visuelle de la carte.\n * @default 'default'\n */\n variant = input<CardVariant>('default');\n\n /**\n * Taille de la carte (affecte le padding).\n * @default 'md'\n */\n size = input<CardSize>('md');\n\n /**\n * Désactive l'interaction avec la carte (apparence désactivée).\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Rend la carte cliquable avec effet hover.\n * @default false\n */\n clickable = input<boolean>(false);\n\n /**\n * Classes CSS calculées pour le composant.\n */\n get cardClasses(): string[] {\n return [\n 'ds-card',\n `ds-card--${this.variant()}`,\n `ds-card--${this.size()}`,\n this.disabled() ? 'ds-card--disabled' : '',\n this.clickable() ? 'ds-card--clickable' : '',\n ].filter(Boolean);\n }\n}\n","<article [class]=\"cardClasses.join(' ')\" [attr.aria-disabled]=\"disabled() ? 'true' : null\">\n <header class=\"ds-card__header\" #header>\n <ng-content select=\"[header]\"></ng-content>\n </header>\n\n <div class=\"ds-card__body\">\n <ng-content></ng-content>\n </div>\n\n <footer class=\"ds-card__footer\" #footer>\n <ng-content select=\"[footer]\"></ng-content>\n </footer>\n</article>\n","import { Component, forwardRef, input, signal, computed } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { PrimitiveCheckbox, CheckboxSize } from '../../primitives/primitive-checkbox/primitive-checkbox';\n\n/**\n * DS Checkbox\n *\n * Composant checkbox du design system avec ControlValueAccessor pour intégration formulaires réactifs.\n * Encapsule primitive-checkbox avec gestion label, helper, error et validation visuelle.\n *\n * @example\n * // Formulaire réactif\n * <ds-checkbox\n * formControlName=\"acceptTerms\"\n * label=\"J'accepte les conditions d'utilisation\"\n * [required]=\"true\"\n * helper=\"Vous devez accepter pour continuer\"\n * />\n *\n * @example\n * // Template-driven\n * <ds-checkbox\n * [(ngModel)]=\"isAccepted\"\n * label=\"Activer les notifications\"\n * />\n */\n@Component({\n selector: 'ds-checkbox',\n standalone: true,\n imports: [CommonModule, PrimitiveCheckbox],\n templateUrl: './ds-checkbox.html',\n styleUrl: './ds-checkbox.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsCheckbox),\n multi: true,\n },\n ],\n})\nexport class DsCheckbox implements ControlValueAccessor {\n /**\n * ID unique du checkbox (généré automatiquement)\n */\n id = input<string>(`ds-checkbox-${crypto.randomUUID()}`);\n\n /**\n * Label affiché à côté du checkbox\n */\n label = input<string>('');\n\n /**\n * Texte d'aide affiché sous le checkbox\n */\n helper = input<string | undefined>(undefined);\n\n /**\n * Message d'erreur affiché en rouge sous le checkbox\n */\n error = input<string | undefined>(undefined);\n\n /**\n * Indique si le champ est requis (affiche astérisque sur label)\n */\n required = input<boolean>(false);\n\n /**\n * État désactivé du checkbox\n */\n disabled = input<boolean>(false);\n\n /**\n * État indéterminé du checkbox (prioritaire sur checked)\n */\n indeterminate = input<boolean>(false);\n\n /**\n * Taille du checkbox (sm, md, lg)\n */\n size = input<CheckboxSize>('md');\n\n /**\n * Nom du contrôle (pour formulaires)\n */\n name = input<string | undefined>(undefined);\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n protected readonly internalValue = signal<boolean>(false);\n\n // Computed properties\n protected readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n protected readonly errorId = computed<string | undefined>(() =>\n this.error() ? `${this.id()}-error` : undefined\n );\n\n protected readonly helperId = computed<string | undefined>(() =>\n this.helper() ? `${this.id()}-helper` : undefined\n );\n\n protected readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.errorId(), this.helperId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n protected readonly hasError = computed<boolean>(() => !!this.error());\n\n // ControlValueAccessor implementation\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.internalValue.set(value ?? false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n protected onCheckedChange(checked: boolean): void {\n if (this.isDisabled()) {\n return;\n }\n this.internalValue.set(checked);\n this.onChange(checked);\n this.onTouched();\n }\n}\n","<div class=\"ds-checkbox\" [class.ds-checkbox--error]=\"hasError()\">\n <primitive-checkbox\n [checkboxId]=\"id()\"\n [checked]=\"internalValue()\"\n [disabled]=\"isDisabled()\"\n [indeterminate]=\"indeterminate()\"\n [size]=\"size()\"\n [label]=\"label()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.name]=\"name()\"\n (checkedChange)=\"onCheckedChange($event)\"\n />\n\n @if (required() && label()) {\n <span class=\"ds-checkbox__required\" aria-hidden=\"true\">*</span>\n }\n\n @if (helper() && !error()) {\n <div\n [id]=\"helperId()\"\n class=\"ds-checkbox__helper\"\n [attr.aria-live]=\"'polite'\"\n >\n {{ helper() }}\n </div>\n }\n\n @if (error()) {\n <div\n [id]=\"errorId()\"\n class=\"ds-checkbox__error\"\n [attr.aria-live]=\"'assertive'\"\n role=\"alert\"\n >\n {{ error() }}\n </div>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Orientations disponibles pour le composant Divider.\n * - **horizontal** : séparateur horizontal (défaut)\n * - **vertical** : séparateur vertical\n */\nexport type DividerOrientation = 'horizontal' | 'vertical';\n\n/**\n * Variantes visuelles disponibles pour le composant Divider.\n * - **solid** : ligne continue (défaut)\n * - **dashed** : ligne en tirets\n * - **dotted** : ligne en pointillés\n */\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted';\n\n/**\n * Tailles disponibles pour le composant Divider (épaisseur).\n */\nexport type DividerSize = 'sm' | 'md' | 'lg';\n\n/**\n * Position du label pour un divider horizontal.\n * - **left** : label aligné à gauche\n * - **center** : label centré (défaut)\n * - **right** : label aligné à droite\n */\nexport type DividerLabelPosition = 'left' | 'center' | 'right';\n\n/**\n * # DsDivider\n *\n * Composant séparateur permettant de diviser visuellement le contenu.\n * Supporte les orientations horizontales et verticales, avec un label optionnel.\n *\n * ## Usage\n *\n * ### Sans label\n * ```html\n * <ds-divider variant=\"solid\" size=\"md\"></ds-divider>\n * ```\n *\n * ### Avec label\n * ```html\n * <ds-divider>Section suivante</ds-divider>\n * ```\n *\n * ### Vertical\n * ```html\n * <ds-divider orientation=\"vertical\"></ds-divider>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"separator\"` pour la sémantique\n * - Attribut `aria-orientation` pour l'orientation\n * - Label accessible pour les lecteurs d'écran\n *\n * @component\n */\n@Component({\n selector: 'ds-divider',\n imports: [CommonModule],\n templateUrl: './ds-divider.html',\n styleUrl: './ds-divider.scss',\n})\nexport class DsDivider {\n /**\n * Orientation du séparateur.\n * @default 'horizontal'\n */\n orientation = input<DividerOrientation>('horizontal');\n\n /**\n * Variante visuelle (solid, dashed, dotted).\n * @default 'solid'\n */\n variant = input<DividerVariant>('solid');\n\n /**\n * Taille (épaisseur) du séparateur.\n * @default 'md'\n */\n size = input<DividerSize>('md');\n\n /**\n * Position du label (uniquement pour horizontal).\n * @default 'center'\n */\n labelPosition = input<DividerLabelPosition>('center');\n\n /**\n * Marge verticale/horizontale autour du divider.\n * @default 'md'\n */\n spacing = input<'none' | 'sm' | 'md' | 'lg'>('md');\n\n /**\n * Classes CSS calculées pour le composant.\n */\n get dividerClasses(): string[] {\n return [\n 'ds-divider',\n `ds-divider--${this.orientation()}`,\n `ds-divider--${this.variant()}`,\n `ds-divider--${this.size()}`,\n `ds-divider--spacing-${this.spacing()}`,\n this.orientation() === 'horizontal' ? `ds-divider--label-${this.labelPosition()}` : '',\n ].filter(Boolean);\n }\n\n /**\n * Vérifie si le composant a du contenu projeté (label).\n */\n get hasLabel(): boolean {\n // La détection du contenu projeté sera gérée dans le template via #content\n return true; // Géré dynamiquement dans le template\n }\n}\n","<div\n [class]=\"dividerClasses.join(' ')\"\n role=\"separator\"\n [attr.aria-orientation]=\"orientation()\"\n>\n @if (orientation() === 'horizontal') {\n <ng-content #content></ng-content>\n }\n</div>\n","// ============================================================================\n// OVERLAY POSITIONS — Design System Assist-AI\n// ============================================================================\n//\n// Ce fichier contient les constantes de positionnement réutilisables pour\n// les overlays CDK Angular (@angular/cdk/overlay).\n//\n// USAGE :\n// - Importer les constantes dans les composants utilisant CdkConnectedOverlay\n// - Utiliser [cdkConnectedOverlayPositions]=\"DROPDOWN_POSITIONS\"\n// - Les positions incluent des fallbacks automatiques\n//\n// RÉFÉRENCES :\n// - Angular CDK Overlay : https://material.angular.io/cdk/overlay\n// - ConnectedPosition : Interface CDK pour positionnement relatif\n//\n// ============================================================================\n\nimport { ConnectedPosition } from '@angular/cdk/overlay';\n\n/**\n * Positions standard pour dropdowns (menus déroulants, select, etc.)\n *\n * Stratégie :\n * 1. Position préférée : centré en dessous (offsetY: 6px pour espacement)\n * 2. Fallback : centré au-dessus si pas d'espace en bas\n * 3. Fallback : aligné à gauche en dessous\n * 4. Fallback : aligné à droite en dessous\n */\nexport const DROPDOWN_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -6,\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n];\n\n/**\n * Positions standard pour tooltips (infobulles)\n *\n * Stratégie :\n * 1. Position préférée : centré au-dessus (offsetY: -8px pour espacement)\n * 2. Fallback : centré en dessous si pas d'espace au-dessus\n * 3. Fallback : à droite (aligné verticalement au centre)\n * 4. Fallback : à gauche (aligné verticalement au centre)\n */\nexport const TOOLTIP_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 8,\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -8,\n },\n];\n\n/**\n * Positions standard pour popovers (menus contextuels, actions panels)\n *\n * Stratégie :\n * 1. Position préférée : aligné à droite, en dessous (offsetY: 4px)\n * 2. Fallback : aligné à gauche, en dessous\n * 3. Fallback : aligné à droite, au-dessus\n * 4. Fallback : aligné à gauche, au-dessus\n * 5. Fallback : à droite (aligné en haut)\n * 6. Fallback : à gauche (aligné en haut)\n */\nexport const POPOVER_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: -4,\n },\n];\n\n/**\n * Positions pour autocomplete (panel de suggestions sous un input)\n *\n * Stratégie :\n * 1. Position préférée : aligné à gauche, pleine largeur, en dessous\n * 2. Fallback : aligné à gauche, pleine largeur, au-dessus\n */\nexport const AUTOCOMPLETE_POSITIONS: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n];\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n OnDestroy,\n ViewChild,\n ViewChildren,\n QueryList,\n computed,\n effect,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n PrimitiveButton,\n ButtonVariant,\n ButtonSize,\n ButtonType,\n ButtonAppearance,\n} from '../../primitives/primitive-button/primitive-button';\nimport { DropdownItem } from './model/dropdown-item.model';\nimport { Subscription } from 'rxjs';\nimport { DROPDOWN_POSITIONS } from '../../utils/overlay-positions';\n\n@Component({\n selector: 'ds-dropdown',\n imports: [\n CommonModule,\n PrimitiveButton,\n FaIconComponent,\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ],\n templateUrl: './ds-dropdown.html',\n styleUrl: './ds-dropdown.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsDropdown),\n multi: true,\n },\n ],\n})\nexport class DsDropdown implements ControlValueAccessor, AfterViewInit, OnDestroy {\n // Inputs\n /** Identifiant du menu déroulant pour l'accessibilité. */\n readonly id = input<string>(crypto.randomUUID());\n /** Variante du bouton déclencheur. */\n readonly type = input<ButtonVariant>('primary');\n /** Apparence du bouton déclencheur (plein ou outline). */\n readonly variant = input<ButtonAppearance>('solid');\n /** Taille du bouton déclencheur. */\n readonly size = input<ButtonSize>('md');\n /** Utilise le bouton comme submit dans un formulaire. */\n readonly submit = input<boolean>(false);\n /** Désactive l'interaction du dropdown. */\n readonly disabled = input<boolean>(false);\n /** Affiche l'état de chargement et bloque l'ouverture. */\n readonly loading = input<boolean>(false);\n /** Étend le bouton sur toute la largeur disponible. */\n readonly block = input<boolean>(false);\n /** Icône affichée avant le libellé du bouton. */\n readonly dropdownStartIcon = input<IconDefinition | null>(null);\n /** Icône affichée après le libellé du bouton. */\n readonly dropdownEndIcon = input<IconDefinition | null>(null);\n /** Liste des options proposées dans le menu. */\n readonly dropdownItems = input<DropdownItem[]>([]);\n /** Code de l'option actuellement sélectionnée. */\n readonly selectedItem = input<string | null | undefined>(undefined);\n /** Libellé ARIA alternatif pour le bouton. */\n readonly ariaLabel = input<string | null | undefined>(undefined);\n /** Référence ARIA vers un élément existant décrivant le bouton. */\n readonly ariaLabelledBy = input<string | null | undefined>(undefined);\n /** Ferme le menu automatiquement lors de la sélection. */\n readonly closeOnSelect = input<boolean>(true);\n /** Classes CSS supplémentaires appliquées au panneau. */\n readonly overlayPanelClass = input<string | string[] | undefined>(undefined);\n\n // Outputs\n /** Émis lorsqu'un élément est sélectionné. */\n readonly selectedItemChanged = output<string>();\n /** Émis lors de l'ouverture du menu. */\n readonly opened = output<void>();\n /** Émis lors de la fermeture du menu. */\n readonly closed = output<void>();\n\n // Template refs\n @ViewChild('triggerButton', { read: ElementRef }) triggerButton?: ElementRef<HTMLElement>;\n @ViewChildren('menuItemRef') menuItems?: QueryList<ElementRef<HTMLButtonElement>>;\n\n // Internal state\n private readonly internalValue = signal<string | null>(null);\n private readonly disabledState = signal<boolean>(false);\n private readonly menuOpen = signal<boolean>(false);\n private readonly activeIndex = signal<number>(-1);\n\n private onChange: (value: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n private menuItemsChanges?: Subscription;\n\n constructor() {\n effect(() => {\n const items = this.dropdownItems();\n const current = this.currentValue();\n if (!items.length) {\n this.activeIndex.set(-1);\n return;\n }\n if (!current) {\n this.activeIndex.set(0);\n return;\n }\n const index = items.findIndex(item => item.code === current);\n this.activeIndex.set(index >= 0 ? index : 0);\n });\n\n effect(() => {\n if (this.isMenuOpen()) {\n queueMicrotask(() => this.focusActiveItem());\n }\n });\n\n }\n\n readonly overlayPositions = DROPDOWN_POSITIONS;\n\n // Computed helpers\n readonly isMenuOpen = computed<boolean>(() => this.menuOpen());\n readonly buttonType = computed<ButtonType>(() => (this.submit() ? 'submit' : 'button'));\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState() || this.loading());\n readonly effectiveStartIcon = computed<IconDefinition | null>(() =>\n this.loading() ? null : this.dropdownStartIcon(),\n );\n readonly effectiveEndIcon = computed<IconDefinition | null>(() =>\n this.loading() ? null : this.dropdownEndIcon(),\n );\n readonly overlayPanelClasses = computed<string[]>(() => {\n const base = ['ds-dropdown-panel'];\n const custom = this.overlayPanelClass();\n if (Array.isArray(custom)) {\n base.push(...custom.filter(Boolean) as string[]);\n } else if (typeof custom === 'string' && custom.trim().length) {\n base.push(custom);\n }\n return base;\n });\n\n private readonly currentValue = computed<string | null>(() => {\n const external = this.selectedItem();\n if (external !== undefined) {\n return external;\n }\n return this.internalValue();\n });\n\n readonly activeItem = computed<DropdownItem | undefined>(() => {\n const code = this.currentValue();\n if (!code) {\n return undefined;\n }\n return this.dropdownItems().find(item => item.code === code);\n });\n\n readonly activeDescendantId = computed<string | undefined>(() => {\n const items = this.dropdownItems();\n const index = this.activeIndex();\n if (index < 0 || index >= items.length) {\n return undefined;\n }\n return `${this.id()}-option-${items[index].code}`;\n });\n\n ngAfterViewInit(): void {\n this.menuItemsChanges = this.menuItems?.changes.subscribe(() => {\n if (this.isMenuOpen()) {\n queueMicrotask(() => this.focusActiveItem());\n }\n });\n }\n\n ngOnDestroy(): void {\n this.menuItemsChanges?.unsubscribe();\n }\n\n toggleMenu(): void {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.isMenuOpen()) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n }\n\n closeMenu(refocusTrigger = true): void {\n if (!this.isMenuOpen()) {\n return;\n }\n this.menuOpen.set(false);\n if (refocusTrigger) {\n this.focusTriggerButton();\n }\n this.closed.emit();\n }\n\n onOverlayDetach(): void {\n this.closeMenu();\n }\n\n setSelectedItem(code: string): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.onTouched();\n this.internalValue.set(code);\n this.onChange(code);\n this.selectedItemChanged.emit(code);\n if (this.closeOnSelect()) {\n this.closeMenu();\n }\n }\n\n isItemActive(code: string): boolean {\n return this.currentValue() === code;\n }\n\n getSelectedItem(): DropdownItem | undefined {\n return this.activeItem();\n }\n\n onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isMenuOpen()) {\n this.openMenu();\n } else {\n this.moveActiveIndex(1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isMenuOpen()) {\n this.openMenu();\n } else {\n this.moveActiveIndex(-1);\n }\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (!this.isMenuOpen()) {\n this.openMenu();\n } else {\n this.commitActiveSelection();\n }\n break;\n }\n case 'Escape':\n if (this.isMenuOpen()) {\n event.preventDefault();\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n onMenuKeydown(event: KeyboardEvent, _index: number): void {\n if (!this.isMenuOpen()) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveActiveIndex(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveActiveIndex(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.setActiveIndex(0);\n break;\n case 'End':\n event.preventDefault();\n this.setActiveIndex(this.dropdownItems().length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.commitActiveSelection();\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.closeMenu();\n break;\n case 'Tab':\n this.closeMenu(false);\n break;\n default:\n break;\n }\n }\n\n onMenuMouseEnter(index: number): void {\n if (!this.isMenuOpen()) {\n return;\n }\n this.setActiveIndex(index, false);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string | null): void {\n this.internalValue.set(value ?? null);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n if (isDisabled) {\n this.closeMenu();\n }\n }\n\n private openMenu(): void {\n if (this.isDisabled() || this.isMenuOpen()) {\n return;\n }\n this.menuOpen.set(true);\n this.opened.emit();\n }\n\n private moveActiveIndex(offset: number): void {\n const items = this.dropdownItems();\n if (!items.length) {\n this.activeIndex.set(-1);\n return;\n }\n\n const nextIndex = this.wrapIndex(this.activeIndex() + offset, items.length);\n this.activeIndex.set(nextIndex);\n this.focusActiveItem();\n }\n\n private setActiveIndex(index: number, focus = true): void {\n const items = this.dropdownItems();\n if (!items.length) {\n this.activeIndex.set(-1);\n return;\n }\n\n const nextIndex = Math.min(Math.max(index, 0), items.length - 1);\n this.activeIndex.set(nextIndex);\n if (focus) {\n this.focusActiveItem();\n }\n }\n\n private commitActiveSelection(): void {\n const items = this.dropdownItems();\n const index = this.activeIndex();\n if (index < 0 || index >= items.length) {\n return;\n }\n this.setSelectedItem(items[index].code);\n }\n\n private wrapIndex(index: number, length: number): number {\n if (length === 0) {\n return -1;\n }\n if (index < 0) {\n return length - 1;\n }\n if (index >= length) {\n return 0;\n }\n return index;\n }\n\n private focusActiveItem(): void {\n const element = this.getMenuItemElement(this.activeIndex());\n element?.focus();\n }\n\n private focusTriggerButton(): void {\n const host = this.triggerButton?.nativeElement as HTMLElement | undefined;\n const button = host?.querySelector('button') as HTMLButtonElement | null;\n button?.focus();\n }\n\n private getMenuItemElement(index: number): HTMLButtonElement | null {\n if (!this.menuItems) {\n return null;\n }\n const items = this.menuItems.toArray();\n if (index < 0 || index >= items.length) {\n return null;\n }\n return items[index]?.nativeElement ?? null;\n }\n}\n","<primitive-button\n #triggerOrigin=\"cdkOverlayOrigin\"\n #triggerButton\n cdkOverlayOrigin\n [attr.id]=\"id()\"\n [type]=\"buttonType()\"\n [variant]=\"type()\"\n [appearance]=\"variant()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"isDisabled()\"\n [iconStart]=\"effectiveStartIcon()\"\n [iconEnd]=\"effectiveEndIcon()\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isMenuOpen()\"\n [attr.aria-controls]=\"isMenuOpen() ? id() + '-menu' : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() ?? null\"\n (clicked)=\"toggleMenu()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n @if (loading()) {\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n } @else {\n <ng-content></ng-content>\n }\n</primitive-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"triggerOrigin\"\n [cdkConnectedOverlayOpen]=\"isMenuOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'menu-overlay'\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\n (backdropClick)=\"closeMenu()\"\n (detach)=\"onOverlayDetach()\"\n>\n <div\n class=\"menu-sort-and-group\"\n role=\"menu\"\n [attr.id]=\"id() + '-menu'\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n >\n @for (item of dropdownItems(); track item.code; let index = $index) {\n <button\n #menuItemRef\n type=\"button\"\n class=\"menu-item-content\"\n [class.active]=\"isItemActive(item.code)\"\n [attr.id]=\"id() + '-option-' + item.code\"\n [attr.aria-checked]=\"isItemActive(item.code)\"\n [attr.data-index]=\"index\"\n role=\"menuitemradio\"\n (click)=\"setSelectedItem(item.code)\"\n (keydown)=\"onMenuKeydown($event, index)\"\n (mouseenter)=\"onMenuMouseEnter(index)\"\n >\n @if (item.startIcon) {\n <fa-icon\n [icon]=\"item.startIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n <span>{{ item.label }}</span>\n @if (isItemActive(item.code) && item.endIcon) {\n <fa-icon\n [icon]=\"item.endIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n </button>\n }\n </div>\n</ng-template>\n","import { Component, forwardRef, input, signal, computed, effect } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition, faClose, faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons';\nimport {\n PrimitiveInput,\n InputType,\n InputState,\n InputSize,\n InputAppearance,\n} from '../../primitives/primitive-input/primitive-input';\n\n@Component({\n selector: 'ds-input-field',\n imports: [CommonModule, FormsModule, FaIconComponent, PrimitiveInput],\n templateUrl: './ds-input-field.html',\n styleUrl: './ds-input-field.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsInputField),\n multi: true,\n },\n ],\n})\nexport class DsInputField implements ControlValueAccessor {\n // Props de base\n id = input<string>(crypto.randomUUID());\n label = input<string | undefined>(undefined);\n name = input<string | undefined>(undefined);\n autocomplete = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n placeholder = input<string>('');\n disabled = input<boolean>(false);\n readonly = input<boolean>(false);\n required = input<boolean>(false);\n type = input<InputType>('text');\n size = input<InputSize>('md');\n state = input<InputState>('default');\n variant = input<InputAppearance>('default');\n iconStart = input<IconDefinition | null>(null);\n iconEnd = input<IconDefinition | null>(null);\n externalValue = input<string | null | undefined>(undefined);\n\n // Props DS spécifiques\n error = input<string | undefined>(undefined);\n helper = input<string | undefined>(undefined);\n maxlength = input<number | undefined>(undefined);\n clearable = input<boolean>(false);\n togglePassword = input<boolean>(false);\n\n // Icons\n protected readonly faEye = faEye;\n protected readonly faEyeSlash = faEyeSlash;\n protected readonly faClose = faClose;\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n private readonly hasExternalValue = signal<boolean>(false);\n readonly internalValue = signal<string>('');\n readonly passwordVisible = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n const provided = this.externalValue();\n if (provided === undefined) {\n return;\n }\n if (this.hasExternalValue()) {\n return;\n }\n this.internalValue.set(provided ?? '');\n });\n }\n\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n readonly errorId = computed<string | undefined>(() => (this.error() ? `${this.id()}-error` : undefined));\n readonly helperId = computed<string | undefined>(() => (this.helper() ? `${this.id()}-helper` : undefined));\n readonly counterId = computed<string | undefined>(() => (this.maxlength() ? `${this.id()}-counter` : undefined));\n readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.errorId(), this.helperId(), this.counterId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n readonly inputState = computed<InputState>(() => {\n if (this.error()) {\n return 'error';\n }\n return this.state();\n });\n\n readonly actualType = computed<InputType>(() => {\n const baseType = this.type();\n if (baseType === 'password' && this.passwordVisible()) {\n return 'text';\n }\n return baseType;\n });\n\n readonly showClearButton = computed<boolean>(() => {\n return this.clearable() && !this.isDisabled() && !this.readonly() && this.internalValue().length > 0;\n });\n\n readonly showTogglePassword = computed<boolean>(() => {\n return this.togglePassword() && this.type() === 'password';\n });\n\n readonly characterCount = computed<number>(() => this.internalValue().length);\n\n // ControlValueAccessor\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.hasExternalValue.set(true);\n this.internalValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n onPrimitiveValueChange(newValue: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set(newValue);\n this.onChange(newValue);\n }\n\n onInputBlur(): void {\n this.onTouched();\n }\n\n clearValue(): void {\n if (!this.showClearButton()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set('');\n this.onChange('');\n this.onTouched();\n }\n\n togglePasswordVisibility(): void {\n if (this.isDisabled()) {\n return;\n }\n this.passwordVisible.update(v => !v);\n }\n}\n","<div\n class=\"ds-input-field\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"input-container\">\n <primitive-input\n [id]=\"id()\"\n [name]=\"name()\"\n [autocomplete]=\"autocomplete()\"\n [ariaLabel]=\"ariaLabel()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n [maxlength]=\"maxlength()\"\n [placeholder]=\"placeholder()\"\n [type]=\"actualType()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [value]=\"internalValue()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-input>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear input\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n\n @if (showTogglePassword()) {\n <button\n type=\"button\"\n class=\"icon-btn toggle\"\n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"passwordVisible() ? 'Hide password' : 'Show password'\">\n <fa-icon [icon]=\"passwordVisible() ? faEyeSlash : faEye\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"errorId()\" role=\"alert\">\n {{ error() }}\n </p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"helperId()\">\n {{ helper() }}\n </p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"counterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n OnDestroy,\n ViewChild,\n forwardRef,\n input,\n computed,\n signal,\n effect,\n output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition, faClose } from '@fortawesome/free-solid-svg-icons';\nimport {\n PrimitiveTextarea,\n TextareaAppearance,\n TextareaResize,\n TextareaSize,\n TextareaState,\n} from '../../primitives/primitive-textarea/primitive-textarea';\n\ntype WindowWithResizeObserver = typeof window & { ['ResizeObserver']?: typeof globalThis.ResizeObserver };\n\n@Component({\n selector: 'ds-input-textarea',\n imports: [CommonModule, PrimitiveTextarea, FaIconComponent],\n templateUrl: './ds-input-textarea.html',\n styleUrl: './ds-input-textarea.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsInputTextarea),\n multi: true,\n },\n ],\n})\nexport class DsInputTextarea implements ControlValueAccessor, AfterViewInit, OnDestroy {\n // Base inputs\n id = input<string>(crypto.randomUUID());\n name = input<string | undefined>(undefined);\n label = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n placeholder = input<string>('');\n disabled = input<boolean>(false);\n readonly = input<boolean>(false);\n required = input<boolean>(false);\n state = input<TextareaState>('default');\n size = input<TextareaSize>('md');\n variant = input<TextareaAppearance>('default');\n rows = input<number | undefined>(undefined);\n cols = input<number | undefined>(undefined);\n resize = input<TextareaResize>('vertical');\n resizeAuto = input<number | undefined>(undefined);\n maxlength = input<number | undefined>(undefined);\n helper = input<string | undefined>(undefined);\n error = input<string | undefined>(undefined);\n iconStart = input<IconDefinition | null>(null);\n iconEnd = input<IconDefinition | null>(null);\n clearable = input<boolean>(false);\n externalValue = input<string | null | undefined>(undefined);\n\n // Signals\n private readonly disabledState = signal<boolean>(false);\n private readonly hasExternalValue = signal<boolean>(false);\n readonly internalValue = signal<string>('');\n readonly valueChange = output<string>();\n\n readonly arErrorId = computed<string | undefined>(() => (this.error() ? `${this.id()}-error` : undefined));\n readonly arHelperId = computed<string | undefined>(() => (this.helper() ? `${this.id()}-helper` : undefined));\n readonly arCounterId = computed<string | undefined>(() => (this.maxlength() ? `${this.id()}-counter` : undefined));\n readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.arErrorId(), this.arHelperId(), this.arCounterId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n readonly inputState = computed<TextareaState>(() => {\n if (this.error()) {\n return 'error';\n }\n return this.state();\n });\n\n readonly showClearButton = computed<boolean>(() =>\n this.clearable() && !this.isDisabled() && !this.readonly() && this.internalValue().length > 0,\n );\n\n readonly textareaResize = computed<TextareaResize>(() => (this.resizeAuto() ? 'none' : this.resize()));\n readonly characterCount = computed<number>(() => this.internalValue().length);\n\n protected readonly faClose = faClose;\n\n @ViewChild('textareaHost', { read: ElementRef }) textareaHost?: ElementRef<HTMLElement>;\n private resizeHandle: number | null = null;\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n effect(() => {\n const provided = this.externalValue();\n if (provided === undefined) {\n return;\n }\n if (this.hasExternalValue()) {\n return;\n }\n this.internalValue.set(provided ?? '');\n });\n\n effect(() => {\n this.internalValue();\n if (this.resizeAuto()) {\n queueMicrotask(() => this.scheduleAutoResize());\n }\n });\n }\n\n ngAfterViewInit(): void {\n if (this.resizeAuto()) {\n this.scheduleAutoResize();\n this.setupResizeObserver();\n }\n }\n\n ngOnDestroy(): void {\n if (this.resizeHandle && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.resizeHandle);\n }\n this.resizeObserver?.disconnect();\n }\n\n // ControlValueAccessor\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.hasExternalValue.set(true);\n this.internalValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n onPrimitiveValueChange(newValue: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set(newValue);\n this.onChange(newValue);\n this.valueChange.emit(newValue);\n }\n\n onInputBlur(): void {\n this.onTouched();\n }\n\n clearValue(): void {\n if (!this.showClearButton()) {\n return;\n }\n this.hasExternalValue.set(true);\n this.internalValue.set('');\n this.onChange('');\n this.valueChange.emit('');\n this.onTouched();\n }\n\n private setupResizeObserver(): void {\n if (!this.resizeAuto() || typeof window === 'undefined') {\n return;\n }\n const resizeObserverCtor = (window as WindowWithResizeObserver).ResizeObserver;\n if (typeof resizeObserverCtor !== 'function') {\n return;\n }\n this.resizeObserver?.disconnect();\n const host = this.textareaHost?.nativeElement;\n if (!host) {\n return;\n }\n this.resizeObserver = new resizeObserverCtor(() => this.scheduleAutoResize());\n this.resizeObserver?.observe(host);\n }\n\n private scheduleAutoResize(): void {\n if (!this.resizeAuto()) {\n return;\n }\n if (typeof requestAnimationFrame !== 'function') {\n this.performAutoResize();\n return;\n }\n if (this.resizeHandle && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.resizeHandle);\n }\n this.resizeHandle = requestAnimationFrame(() => this.performAutoResize());\n }\n\n private performAutoResize(): void {\n const host = this.textareaHost?.nativeElement;\n if (!host) {\n return;\n }\n const textarea = host.querySelector('textarea');\n if (!textarea) {\n return;\n }\n\n const element = textarea as HTMLTextAreaElement;\n element.style.height = 'auto';\n let nextHeight = element.scrollHeight;\n const maxHeight = this.resizeAuto();\n if (typeof maxHeight === 'number' && maxHeight > 0) {\n nextHeight = Math.min(nextHeight, maxHeight);\n }\n element.style.height = `${nextHeight}px`;\n }\n}\n","<div\n class=\"ds-input-textarea\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"textarea-container\">\n <primitive-textarea\n #textareaHost\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [rows]=\"rows()\"\n [cols]=\"cols()\"\n [maxlength]=\"maxlength()\"\n [resize]=\"textareaResize()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [ariaLabel]=\"ariaLabel()\"\n [value]=\"internalValue()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-textarea>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear textarea\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"arErrorId()\" role=\"alert\">{{ error() }}</p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"arHelperId()\">{{ helper() }}</p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"arCounterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n","import {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n OnDestroy,\n Output,\n ViewChild,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {NgClass} from '@angular/common';\nimport {IconDefinition, faCheckCircle, faExclamationTriangle, faInfoCircle, faTimesCircle} from '@fortawesome/free-solid-svg-icons';\nimport {FaIconComponent} from '@fortawesome/angular-fontawesome';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {PrimitiveButton} from '../../primitives/primitive-button/primitive-button';\nimport {DOCUMENT} from '@angular/common';\n\n@Component({\n selector: 'ds-modal',\n imports: [\n NgClass,\n FaIconComponent,\n PrimitiveButton\n ],\n templateUrl: './ds-modal.component.html',\n styleUrl: './ds-modal.component.scss'\n})\nexport class DsModalComponent implements AfterContentInit, AfterViewInit, OnDestroy {\n open = input<boolean>(false);\n title = input<string>('');\n closable = input<boolean>(true);\n closeOnBackdrop = input<boolean>(true);\n showIcon = input<boolean>(false);\n type = input<'success' | 'warning' | 'error' | 'info' | null>(null);\n size = input<'sm' | 'md' | 'lg'>('md');\n\n @Output() opened = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n\n @ContentChild('icon') projectedIcon: ElementRef | undefined;\n @ViewChild('modalContainer') modalContainer?: ElementRef<HTMLElement>;\n\n private readonly hasProjectedIcon = signal<boolean>(false);\n private readonly viewReady = signal<boolean>(false);\n private focusTrap: FocusTrap | null = null;\n private readonly documentRef = inject(DOCUMENT);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n\n readonly modalClasses = computed(() => {\n const classes: string[] = [];\n const currentType = this.type();\n if (currentType) {\n classes.push(`modal-${currentType}`);\n }\n classes.push(`modal-${this.size()}`);\n return classes;\n });\n\n @ViewChild('closeButton', { read: ElementRef }) closeButton?: ElementRef<HTMLElement>;\n\n readonly resolvedIcon = computed<IconDefinition | null>(() => {\n switch (this.type()) {\n case 'success':\n return faCheckCircle;\n case 'warning':\n return faExclamationTriangle;\n case 'error':\n return faTimesCircle;\n case 'info':\n return faInfoCircle;\n default:\n return null;\n }\n });\n\n readonly shouldRenderDefaultIcon = computed(() => this.showIcon() && !this.hasProjectedIcon() && !!this.resolvedIcon());\n readonly shouldRenderOverlay = computed(() => this.open());\n\n private readonly modalBaseId = crypto.randomUUID();\n readonly modalTitleId = `${this.modalBaseId}-title`;\n readonly modalDescId = `${this.modalBaseId}-desc`;\n\n readonly isScrolled = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n if (!this.viewReady()) {\n return;\n }\n if (this.open()) {\n this.attachFocusTrap();\n queueMicrotask(() => this.focusInitialElement());\n } else {\n this.destroyFocusTrap();\n }\n });\n\n effect(() => {\n if (this.open()) {\n this.opened.emit();\n this.lockBodyScroll();\n } else {\n this.unlockBodyScroll();\n }\n });\n }\n\n ngAfterContentInit(): void {\n this.hasProjectedIcon.set(!!this.projectedIcon);\n }\n\n ngAfterViewInit(): void {\n this.viewReady.set(true);\n if (this.open()) {\n this.attachFocusTrap();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyFocusTrap();\n this.unlockBodyScroll();\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n handleEscape(event: Event): void {\n if (this.open() && this.closable()) {\n event.preventDefault();\n this.close();\n }\n }\n\n close(): void {\n if (this.closable()) {\n this.closed.emit();\n }\n }\n\n onBackdropClick(): void {\n if (!this.open() || !this.closeOnBackdrop()) {\n return;\n }\n this.close();\n }\n\n onScroll(event: Event): void {\n const target = event.target as HTMLElement;\n this.isScrolled.set(target.scrollHeight > target.clientHeight &&\n target.scrollTop + target.clientHeight < target.scrollHeight);\n }\n\n private attachFocusTrap(): void {\n if (!this.modalContainer) {\n return;\n }\n this.focusTrap?.destroy();\n this.focusTrap = this.focusTrapFactory.create(this.modalContainer.nativeElement);\n this.focusTrap.focusInitialElementWhenReady().catch(() => { /* aucun élément focusable */ });\n }\n\n private destroyFocusTrap(): void {\n this.focusTrap?.destroy();\n this.focusTrap = null;\n }\n\n private focusInitialElement(): void {\n if (!this.open() || !this.closable() || !this.closeButton) {\n return;\n }\n const element = this.closeButton.nativeElement;\n queueMicrotask(() => element.focus());\n }\n\n private lockBodyScroll(): void {\n const body = this.documentRef?.body;\n if (!body) {\n return;\n }\n body.classList.add('modal-open');\n }\n\n private unlockBodyScroll(): void {\n const body = this.documentRef?.body;\n if (!body) {\n return;\n }\n body.classList.remove('modal-open');\n }\n}\n","@if (shouldRenderOverlay()) {\n <div class=\"overlay\" role=\"presentation\" (click)=\"onBackdropClick()\"></div>\n}\n@if (open()) {\n <div #modalContainer\n class=\"modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"modalTitleId\"\n [attr.aria-describedby]=\"modalDescId\"\n [ngClass]=\"modalClasses()\"\n >\n <header class=\"modal-header\">\n @if (showIcon()) {\n <div class=\"modal-icon\">\n <ng-content select=\"[icon]\"></ng-content>\n @if (shouldRenderDefaultIcon() && resolvedIcon()) {\n <fa-icon [icon]=\"resolvedIcon()!\"></fa-icon>\n }\n </div>\n }\n <h3 [id]=\"modalTitleId\">{{ title() }}</h3>\n @if (closable()) {\n <primitive-button\n #closeButton\n class=\"close-btn\"\n variant=\"ghost\"\n appearance=\"outline\"\n size=\"sm\"\n (clicked)=\"close()\"\n aria-label=\"Fermer la fenêtre\"\n >✕</primitive-button>\n }\n </header>\n <div class=\"modal-content\" (scroll)=\"onScroll($event)\">\n <section [id]=\"modalDescId\"><ng-content></ng-content></section>\n </div>\n <footer class=\"modal-footer\" [class.with-shadow]=\"isScrolled()\">\n <ng-content select=\"[footer]\"></ng-content>\n </footer>\n </div>\n}\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ds-popover',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ds-popover\" role=\"dialog\" [attr.aria-label]=\"ariaLabel()\">\n @if (header()) {\n <div class=\"ds-popover__header\">\n <span class=\"ds-popover__header-title\">{{ header() }}</span>\n @if (closeable()) {\n <button\n type=\"button\"\n class=\"ds-popover__close\"\n (click)=\"close.emit()\"\n aria-label=\"Fermer\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n\n <div class=\"ds-popover__body\">\n <ng-content></ng-content>\n </div>\n\n @if (footer()) {\n <div class=\"ds-popover__footer\">\n {{ footer() }}\n </div>\n }\n </div>\n `,\n styleUrl: './ds-popover.component.scss',\n})\nexport class DsPopoverComponent {\n header = input<string | undefined>(undefined);\n footer = input<string | undefined>(undefined);\n closeable = input<boolean>(true);\n ariaLabel = input<string>('Popover');\n\n close = output<void>();\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnDestroy,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Overlay, OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { POPOVER_POSITIONS } from '../../utils/overlay-positions';\n\nexport type PopoverTrigger = 'click' | 'hover';\n\n@Directive({\n selector: '[dsPopover]',\n standalone: true,\n})\nexport class DsPopover implements OnDestroy {\n dsPopover = input.required<TemplateRef<unknown>>();\n dsPopoverTrigger = input<PopoverTrigger>('click');\n dsPopoverCloseOnBackdrop = input<boolean>(true);\n\n private overlayRef: OverlayRef | null = null;\n private isOpen = false;\n\n constructor(\n private elementRef: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (this.dsPopoverTrigger() === 'click') {\n event.stopPropagation();\n this.toggle();\n }\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.dsPopoverTrigger() === 'hover') {\n this.open();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.dsPopoverTrigger() === 'hover') {\n setTimeout(() => this.close(), 150);\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.isOpen) {\n this.close();\n }\n }\n\n private toggle(): void {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private open(): void {\n if (this.isOpen || !this.dsPopover()) return;\n\n this.overlayRef = this.createOverlay();\n\n const portal = new TemplatePortal(this.dsPopover(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n this.isOpen = true;\n\n if (this.dsPopoverCloseOnBackdrop()) {\n this.overlayRef.backdropClick().subscribe(() => this.close());\n }\n }\n\n private close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.isOpen = false;\n }\n\n private createOverlay(): OverlayRef {\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(POPOVER_POSITIONS as ConnectedPosition[]);\n\n const scrollStrategy = this.overlay.scrollStrategies.reposition();\n\n return this.overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: this.dsPopoverCloseOnBackdrop(),\n backdropClass: 'ds-popover-backdrop',\n panelClass: 'ds-popover-overlay',\n });\n }\n\n ngOnDestroy(): void {\n this.close();\n }\n}\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Variants de couleur pour la barre de progression.\n */\nexport type ProgressBarVariant = 'default' | 'success' | 'warning' | 'error';\n\n/**\n * Tailles disponibles pour la barre de progression.\n */\nexport type ProgressBarSize = 'sm' | 'md' | 'lg';\n\n/**\n * Mode de la barre de progression.\n */\nexport type ProgressBarMode = 'determinate' | 'indeterminate';\n\n/**\n * # DsProgressBar\n *\n * Composant de barre de progression pour indiquer la progression d'une tâche\n * ou l'état de chargement d'une opération.\n *\n * ## Usage\n *\n * ```html\n * <!-- Mode déterminé -->\n * <ds-progress-bar\n * [value]=\"75\"\n * variant=\"success\"\n * size=\"md\">\n * </ds-progress-bar>\n *\n * <!-- Mode indéterminé -->\n * <ds-progress-bar\n * mode=\"indeterminate\"\n * variant=\"primary\">\n * </ds-progress-bar>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"progressbar\"` avec `aria-valuenow`, `aria-valuemin`, `aria-valuemax`\n * - Label accessible via `aria-label` ou contenu texte\n *\n * @component\n */\n@Component({\n selector: 'ds-progress-bar',\n imports: [CommonModule],\n templateUrl: './ds-progress-bar.html',\n styleUrl: './ds-progress-bar.scss',\n})\nexport class DsProgressBar {\n /**\n * Valeur de progression (0-100).\n * @default 0\n */\n value = input<number>(0);\n\n /**\n * Variant de couleur.\n * @default 'default'\n */\n variant = input<ProgressBarVariant>('default');\n\n /**\n * Taille de la barre.\n * @default 'md'\n */\n size = input<ProgressBarSize>('md');\n\n /**\n * Mode de progression (déterminé ou indéterminé).\n * @default 'determinate'\n */\n mode = input<ProgressBarMode>('determinate');\n\n /**\n * Afficher le pourcentage en texte.\n * @default false\n */\n showLabel = input<boolean>(false);\n\n /**\n * Label accessible pour les lecteurs d'écran.\n */\n ariaLabel = input<string>('');\n\n /**\n * Valeur normalisée (0-100) (public pour tests).\n */\n readonly normalizedValue = computed(() => {\n const val = this.value();\n return Math.max(0, Math.min(100, val));\n });\n\n /**\n * Classes CSS calculées pour le conteneur (public pour tests).\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-progress-bar',\n `ds-progress-bar--${this.variant()}`,\n `ds-progress-bar--${this.size()}`,\n this.mode() === 'indeterminate' ? 'ds-progress-bar--indeterminate' : '',\n ].filter(Boolean);\n });\n\n /**\n * Style inline pour la progression (public pour tests).\n */\n readonly progressStyle = computed(() => {\n if (this.mode() === 'indeterminate') {\n return {};\n }\n return {\n width: `${this.normalizedValue()}%`\n };\n });\n\n /**\n * Label ARIA dynamique (public pour tests).\n */\n readonly ariaLabelText = computed(() => {\n if (this.ariaLabel()) {\n return this.ariaLabel();\n }\n if (this.mode() === 'indeterminate') {\n return 'Chargement en cours';\n }\n return `Progression : ${this.normalizedValue()}%`;\n });\n}\n","<div\n [ngClass]=\"containerClasses()\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabelText()\"\n [attr.aria-valuenow]=\"mode() === 'determinate' ? normalizedValue() : null\"\n [attr.aria-valuemin]=\"mode() === 'determinate' ? 0 : null\"\n [attr.aria-valuemax]=\"mode() === 'determinate' ? 100 : null\">\n\n <div class=\"ds-progress-bar__track\">\n <div\n class=\"ds-progress-bar__fill\"\n [ngStyle]=\"progressStyle()\">\n </div>\n </div>\n\n @if (showLabel() && mode() === 'determinate') {\n <span class=\"ds-progress-bar__label\">{{ normalizedValue() }}%</span>\n }\n</div>\n","import { Component, forwardRef, input, signal, computed } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { PrimitiveRadio, RadioSize } from '../../primitives/primitive-radio/primitive-radio';\n\n/**\n * Option pour un groupe de radios\n */\nexport interface RadioOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\n/**\n * Layout du groupe de radios\n */\nexport type RadioGroupLayout = 'vertical' | 'horizontal';\n\n/**\n * DS Radio Group\n *\n * Composant groupe de radios du design system avec ControlValueAccessor pour formulaires réactifs.\n * Génère des primitive-radio pour chaque option avec gestion exclusive de la sélection.\n *\n * @example\n * // Formulaire réactif\n * <ds-radio-group\n * formControlName=\"plan\"\n * label=\"Choisissez votre forfait\"\n * [options]=\"planOptions\"\n * layout=\"vertical\"\n * [required]=\"true\"\n * />\n *\n * @example\n * // Template-driven\n * <ds-radio-group\n * [(ngModel)]=\"selectedPlan\"\n * label=\"Forfait\"\n * [options]=\"[\n * { label: 'Gratuit', value: 'free' },\n * { label: 'Pro', value: 'pro' },\n * { label: 'Enterprise', value: 'enterprise' }\n * ]\"\n * />\n */\n@Component({\n selector: 'ds-radio-group',\n standalone: true,\n imports: [CommonModule, PrimitiveRadio],\n templateUrl: './ds-radio-group.html',\n styleUrl: './ds-radio-group.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsRadioGroup),\n multi: true,\n },\n ],\n})\nexport class DsRadioGroup implements ControlValueAccessor {\n /**\n * ID unique du radio group (généré automatiquement)\n */\n id = input<string>(`ds-radio-group-${crypto.randomUUID()}`);\n\n /**\n * Label principal du groupe\n */\n label = input<string>('');\n\n /**\n * Options du groupe de radios\n */\n options = input<RadioOption[]>([]);\n\n /**\n * Texte d'aide affiché sous le groupe\n */\n helper = input<string | undefined>(undefined);\n\n /**\n * Message d'erreur affiché en rouge sous le groupe\n */\n error = input<string | undefined>(undefined);\n\n /**\n * Indique si le champ est requis (affiche astérisque sur label)\n */\n required = input<boolean>(false);\n\n /**\n * État désactivé du groupe (désactive toutes les options)\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille des radios (sm, md, lg)\n */\n size = input<RadioSize>('md');\n\n /**\n * Layout du groupe (vertical, horizontal)\n */\n layout = input<RadioGroupLayout>('vertical');\n\n /**\n * Nom du groupe (pour formulaires, généré automatiquement)\n */\n name = input<string>(`radio-group-${crypto.randomUUID()}`);\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n protected readonly internalValue = signal<string | null>(null);\n\n // Computed properties\n protected readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n protected readonly errorId = computed<string | undefined>(() =>\n this.error() ? `${this.id()}-error` : undefined\n );\n\n protected readonly helperId = computed<string | undefined>(() =>\n this.helper() ? `${this.id()}-helper` : undefined\n );\n\n protected readonly ariaDescribedBy = computed<string | undefined>(() => {\n const refs = [this.errorId(), this.helperId()].filter(Boolean) as string[];\n return refs.length ? refs.join(' ') : undefined;\n });\n\n protected readonly hasError = computed<boolean>(() => !!this.error());\n\n /**\n * Vérifie si une option est sélectionnée\n */\n protected isOptionSelected(value: string): boolean {\n return this.internalValue() === value;\n }\n\n /**\n * Vérifie si une option est désactivée\n */\n protected isOptionDisabled(option: RadioOption): boolean {\n return this.isDisabled() || !!option.disabled;\n }\n\n // ControlValueAccessor implementation\n private onChange: (value: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n protected onRadioChange(value: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.internalValue.set(value);\n this.onChange(value);\n this.onTouched();\n }\n\n // Track function for @for\n protected trackByValue(_index: number, option: RadioOption): string {\n return option.value;\n }\n}\n","<div\n class=\"ds-radio-group\"\n [class.ds-radio-group--error]=\"hasError()\"\n [class.ds-radio-group--horizontal]=\"layout() === 'horizontal'\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"label() ? id() + '-label' : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n>\n @if (label()) {\n <div [id]=\"id() + '-label'\" class=\"ds-radio-group__label\">\n {{ label() }}\n @if (required()) {\n <span class=\"ds-radio-group__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n }\n\n <div class=\"ds-radio-group__options\">\n @for (option of options(); track trackByValue($index, option)) {\n <primitive-radio\n [name]=\"name()\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n [checked]=\"isOptionSelected(option.value)\"\n [disabled]=\"isOptionDisabled(option)\"\n [size]=\"size()\"\n (checkedChange)=\"onRadioChange(option.value)\"\n />\n }\n </div>\n\n @if (helper() && !error()) {\n <div\n [id]=\"helperId()\"\n class=\"ds-radio-group__helper\"\n [attr.aria-live]=\"'polite'\"\n >\n {{ helper() }}\n </div>\n }\n\n @if (error()) {\n <div\n [id]=\"errorId()\"\n class=\"ds-radio-group__error\"\n [attr.aria-live]=\"'assertive'\"\n role=\"alert\"\n >\n {{ error() }}\n </div>\n }\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Variants de skeleton disponibles.\n */\nexport type SkeletonVariant = 'text' | 'circle' | 'rectangle' | 'card';\n\n/**\n * Tailles pour les variants circle et rectangle.\n */\nexport type SkeletonSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsSkeleton\n *\n * Composant de placeholder skeleton pour indiquer le chargement de contenu.\n * Utilisé pour améliorer l'expérience utilisateur pendant le chargement des données.\n *\n * ## Usage\n *\n * ```html\n * <!-- Texte skeleton -->\n * <ds-skeleton variant=\"text\" [lines]=\"3\"></ds-skeleton>\n *\n * <!-- Avatar circle -->\n * <ds-skeleton variant=\"circle\" size=\"lg\"></ds-skeleton>\n *\n * <!-- Image rectangle -->\n * <ds-skeleton variant=\"rectangle\" [width]=\"'300px'\" [height]=\"'200px'\"></ds-skeleton>\n *\n * <!-- Card skeleton -->\n * <ds-skeleton variant=\"card\"></ds-skeleton>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `aria-busy=\"true\"` et `aria-live=\"polite\"` pour indiquer le chargement\n * - Label accessible via `aria-label`\n *\n * @component\n */\n@Component({\n selector: 'ds-skeleton',\n imports: [CommonModule],\n templateUrl: './ds-skeleton.html',\n styleUrl: './ds-skeleton.scss',\n})\nexport class DsSkeleton {\n /**\n * Type de skeleton.\n * @default 'text'\n */\n variant = input<SkeletonVariant>('text');\n\n /**\n * Taille (pour circle et rectangle).\n * @default 'md'\n */\n size = input<SkeletonSize>('md');\n\n /**\n * Nombre de lignes (pour text).\n * @default 1\n */\n lines = input<number>(1);\n\n /**\n * Largeur personnalisée.\n */\n width = input<string>('');\n\n /**\n * Hauteur personnalisée.\n */\n height = input<string>('');\n\n /**\n * Désactiver l'animation pulse.\n * @default false\n */\n noAnimation = input<boolean>(false);\n\n /**\n * Label accessible pour les lecteurs d'écran.\n * @default 'Chargement en cours...'\n */\n ariaLabel = input<string>('Chargement en cours...');\n\n /**\n * Classes CSS calculées pour le skeleton (public pour tests).\n */\n readonly skeletonClasses = computed(() => {\n const classes = [\n 'ds-skeleton',\n `ds-skeleton--${this.variant()}`,\n ];\n\n if (this.variant() === 'circle' || this.variant() === 'rectangle') {\n classes.push(`ds-skeleton--${this.size()}`);\n }\n\n if (!this.noAnimation()) {\n classes.push('ds-skeleton--animated');\n }\n\n return classes.filter(Boolean);\n });\n\n /**\n * Style inline personnalisé (public pour tests).\n */\n readonly customStyle = computed(() => {\n const style: any = {};\n\n if (this.width()) {\n style.width = this.width();\n }\n\n if (this.height()) {\n style.height = this.height();\n }\n\n return style;\n });\n\n /**\n * Génère un tableau pour les lignes de texte (public pour tests).\n */\n readonly textLines = computed(() => {\n return Array.from({ length: this.lines() }, (_, i) => i);\n });\n}\n","@if (variant() === 'text') {\n <div\n class=\"ds-skeleton-text-container\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"true\"\n role=\"status\">\n @for (line of textLines(); track line) {\n <div\n [ngClass]=\"skeletonClasses()\"\n [ngStyle]=\"customStyle()\">\n </div>\n }\n </div>\n} @else if (variant() === 'card') {\n <div\n class=\"ds-skeleton-card ds-skeleton--card\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"true\"\n role=\"status\">\n <!-- Header avec avatar et lignes -->\n <div class=\"ds-skeleton-card__header\">\n <div class=\"ds-skeleton ds-skeleton--circle ds-skeleton--sm\" [class.ds-skeleton--animated]=\"!noAnimation()\"></div>\n <div class=\"ds-skeleton-card__header-lines\">\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 60%;\"></div>\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 40%;\"></div>\n </div>\n </div>\n\n <!-- Image principale -->\n <div class=\"ds-skeleton ds-skeleton--rectangle\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"height: 200px; width: 100%;\"></div>\n\n <!-- Lignes de contenu -->\n <div class=\"ds-skeleton-card__content\">\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\"></div>\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 90%;\"></div>\n <div class=\"ds-skeleton ds-skeleton--text\" [class.ds-skeleton--animated]=\"!noAnimation()\" style=\"width: 70%;\"></div>\n </div>\n </div>\n} @else {\n <div\n [ngClass]=\"skeletonClasses()\"\n [ngStyle]=\"customStyle()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"true\"\n role=\"status\">\n </div>\n}\n","import { Component, computed, input, output, signal, HostListener } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface TabItem {\n id: string;\n label: string;\n disabled?: boolean;\n icon?: string;\n}\n\n@Component({\n selector: 'ds-tabs',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-tabs.html',\n styleUrl: './ds-tabs.scss',\n})\nexport class DsTabs {\n tabs = input.required<TabItem[]>();\n activeTabId = input<string | undefined>(undefined);\n\n tabChanged = output<TabItem>();\n\n protected readonly internalActiveIndex = signal<number>(0);\n\n /**\n * Index de l'onglet actif (computed signal basé sur activeTabId ou internalActiveIndex)\n * Exposé en public pour permettre la vérification dans les tests et pour les consommateurs\n */\n readonly activeIndex = computed<number>(() => {\n const activeId = this.activeTabId();\n if (activeId) {\n const index = this.tabs().findIndex((tab) => tab.id === activeId);\n return index !== -1 ? index : 0;\n }\n return this.internalActiveIndex();\n });\n\n protected readonly activeTab = computed<TabItem>(() => {\n return this.tabs()[this.activeIndex()] || this.tabs()[0];\n });\n\n protected selectTab(tab: TabItem, index: number): void {\n if (tab.disabled) return;\n\n this.internalActiveIndex.set(index);\n this.tabChanged.emit(tab);\n }\n\n protected isTabActive(index: number): boolean {\n return this.activeIndex() === index;\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (target.getAttribute('role') !== 'tab') return;\n\n const currentIndex = this.activeIndex();\n const tabsArray = this.tabs();\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = this.findPreviousEnabledTab(currentIndex);\n break;\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = this.findNextEnabledTab(currentIndex);\n break;\n case 'Home':\n event.preventDefault();\n nextIndex = this.findNextEnabledTab(-1);\n break;\n case 'End':\n event.preventDefault();\n nextIndex = this.findPreviousEnabledTab(tabsArray.length);\n break;\n default:\n return;\n }\n\n if (nextIndex !== currentIndex) {\n this.selectTab(tabsArray[nextIndex], nextIndex);\n this.focusTab(nextIndex);\n }\n }\n\n private findNextEnabledTab(startIndex: number): number {\n const tabsArray = this.tabs();\n for (let i = startIndex + 1; i < tabsArray.length; i++) {\n if (!tabsArray[i].disabled) return i;\n }\n return startIndex === -1 ? 0 : startIndex;\n }\n\n private findPreviousEnabledTab(startIndex: number): number {\n const tabsArray = this.tabs();\n for (let i = startIndex - 1; i >= 0; i--) {\n if (!tabsArray[i].disabled) return i;\n }\n return startIndex === tabsArray.length ? tabsArray.length - 1 : startIndex;\n }\n\n private focusTab(index: number): void {\n setTimeout(() => {\n const tabButton = document.querySelector(\n `.ds-tabs__tab[data-index=\"${index}\"]`\n ) as HTMLElement;\n tabButton?.focus();\n }, 0);\n }\n\n protected trackByTabId(index: number, tab: TabItem): string {\n return tab.id;\n }\n}\n","<div class=\"ds-tabs\">\n <div class=\"ds-tabs__header\" role=\"tablist\">\n @for (tab of tabs(); track trackByTabId($index, tab)) {\n <button\n type=\"button\"\n class=\"ds-tabs__tab\"\n [class.ds-tabs__tab--active]=\"isTabActive($index)\"\n [class.ds-tabs__tab--disabled]=\"tab.disabled\"\n [attr.role]=\"'tab'\"\n [attr.aria-selected]=\"isTabActive($index)\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [attr.id]=\"'tab-' + tab.id\"\n [attr.tabindex]=\"isTabActive($index) ? 0 : -1\"\n [attr.data-index]=\"$index\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab, $index)\"\n >\n @if (tab.icon) {\n <i [class]=\"tab.icon\" class=\"ds-tabs__icon\"></i>\n }\n <span class=\"ds-tabs__label\">{{ tab.label }}</span>\n </button>\n }\n <div\n class=\"ds-tabs__indicator\"\n [style.transform]=\"'translateX(' + activeIndex() * 100 + '%)'\"\n [style.width]=\"'calc(100% / ' + tabs().length + ')'\"\n ></div>\n </div>\n\n <div class=\"ds-tabs__content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import {CommonModule} from '@angular/common';\nimport {Component, DestroyRef, computed, effect, inject, input, output, signal} from '@angular/core';\nimport {FaIconComponent} from '@fortawesome/angular-fontawesome';\nimport {IconDefinition, faCircleCheck, faCircleExclamation, faCircleInfo, faCircleXmark, faClose} from '@fortawesome/free-solid-svg-icons';\nimport {ToastPosition, ToastType} from './ds-toast.service';\n\n@Component({\n selector: 'ds-toast',\n standalone: true,\n imports: [CommonModule, FaIconComponent],\n templateUrl: './ds-toast.component.html',\n styleUrl: './ds-toast.component.scss'\n})\nexport class DsToastComponent {\n message = input.required<string>();\n type = input<ToastType>('info');\n duration = input<number>(3000);\n closable = input<boolean>(true);\n position = input<ToastPosition>('top-right');\n actionLabel = input<string | undefined>(undefined);\n pauseOnHover = input<boolean>(true);\n\n readonly closed = output<void>();\n readonly action = output<void>();\n\n private readonly destroyRef = inject(DestroyRef);\n private timerHandle: ReturnType<typeof setTimeout> | null = null;\n private readonly isPaused = signal<boolean>(false);\n\n private readonly icons: Record<ToastType, IconDefinition> = {\n success: faCircleCheck,\n warning: faCircleExclamation,\n error: faCircleXmark,\n info: faCircleInfo,\n };\n\n readonly currentIcon = computed(() => this.icons[this.type()]);\n\n private readonly autoDismissEffect = effect(() => {\n const duration = this.duration();\n const paused = this.isPaused();\n this.clearTimer();\n if (duration <= 0 || paused) {\n return;\n }\n this.timerHandle = setTimeout(() => this.close(), duration);\n });\n\n constructor() {\n this.destroyRef.onDestroy(() => this.clearTimer());\n }\n\n close(): void {\n this.clearTimer();\n this.closed.emit();\n }\n\n onMouseEnter(): void {\n if (!this.pauseOnHover()) {\n return;\n }\n this.isPaused.set(true);\n this.clearTimer();\n }\n\n onMouseLeave(): void {\n if (!this.pauseOnHover()) {\n return;\n }\n this.isPaused.set(false);\n }\n\n handleAction(): void {\n this.action.emit();\n }\n\n protected readonly faClose = faClose;\n\n private clearTimer(): void {\n if (this.timerHandle) {\n clearTimeout(this.timerHandle);\n this.timerHandle = null;\n }\n }\n}\n","<div class=\"toast\" [ngClass]=\"[type(), position()]\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <fa-icon class=\"icon\" [icon]=\"currentIcon()\"></fa-icon>\n <span class=\"message\">{{ message() }}</span>\n\n @if (actionLabel()) {\n <button class=\"action-btn\" type=\"button\" (click)=\"handleAction()\">\n {{ actionLabel() }}\n </button>\n }\n\n @if (closable()) {\n <button class=\"close-btn\" (click)=\"close()\" aria-label=\"Close toast\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n</div>\n","import { DestroyRef, Injectable, inject, signal } from '@angular/core';\n\nexport type ToastType = 'success' | 'warning' | 'error' | 'info';\nexport type ToastPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport interface ToastOptions {\n message: string;\n type?: ToastType;\n duration?: number;\n closable?: boolean;\n position?: ToastPosition;\n actionLabel?: string;\n onAction?: () => void;\n pauseOnHover?: boolean;\n maxStack?: number;\n}\n\nexport interface ToastInstance {\n id: string;\n message: string;\n type: ToastType;\n duration: number;\n closable: boolean;\n position: ToastPosition;\n actionLabel?: string;\n onAction?: () => void;\n pauseOnHover: boolean;\n}\n\nconst DEFAULT_DURATION = 3000;\nconst DEFAULT_POSITION: ToastPosition = 'top-right';\nconst DEFAULT_TYPE: ToastType = 'info';\nconst DEFAULT_MAX_STACK = 4;\n\n@Injectable({ providedIn: 'root' })\nexport class DsToastService {\n private readonly toastsSignal = signal<ToastInstance[]>([]);\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly defaultMaxStack = DEFAULT_MAX_STACK;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.destroyRef.onDestroy(() => this.clearTimers());\n }\n\n readonly toasts = this.toastsSignal.asReadonly();\n\n show(options: ToastOptions): string {\n const id = crypto.randomUUID();\n const toast: ToastInstance = {\n id,\n message: options.message,\n type: options.type ?? DEFAULT_TYPE,\n duration: options.duration ?? DEFAULT_DURATION,\n closable: options.closable ?? true,\n position: options.position ?? DEFAULT_POSITION,\n actionLabel: options.actionLabel,\n onAction: options.onAction,\n pauseOnHover: options.pauseOnHover ?? true,\n };\n\n const maxStack = options.maxStack ?? this.defaultMaxStack;\n\n this.toastsSignal.update(list => {\n const next = [...list];\n if (maxStack > 0) {\n let sameCount = next.filter(item => item.position === toast.position).length;\n while (sameCount >= maxStack) {\n const index = next.findIndex(item => item.position === toast.position);\n if (index === -1) {\n break;\n }\n const removed = next.splice(index, 1)[0];\n this.clearTimer(removed.id);\n sameCount--;\n }\n }\n next.push(toast);\n return next;\n });\n\n if (toast.duration > 0) {\n const timer = setTimeout(() => this.dismiss(id), toast.duration);\n this.timers.set(id, timer);\n }\n\n return id;\n }\n\n dismiss(id: string): void {\n this.clearTimer(id);\n this.toastsSignal.update(list => list.filter(toast => toast.id !== id));\n }\n\n clear(position?: ToastPosition): void {\n if (!position) {\n this.toastsSignal().forEach(toast => this.clearTimer(toast.id));\n this.toastsSignal.set([]);\n return;\n }\n\n const remaining = this.toastsSignal().filter(toast => {\n const match = toast.position === position;\n if (match) {\n this.clearTimer(toast.id);\n }\n return !match;\n });\n this.toastsSignal.set(remaining);\n }\n\n triggerAction(id: string): void {\n const toast = this.toastsSignal().find(item => item.id === id);\n toast?.onAction?.();\n if (toast) {\n this.dismiss(id);\n }\n }\n\n private clearTimers(): void {\n this.timers.forEach(timer => clearTimeout(timer));\n this.timers.clear();\n }\n\n private clearTimer(id: string): void {\n const timer = this.timers.get(id);\n if (timer) {\n clearTimeout(timer);\n this.timers.delete(id);\n }\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DsToastComponent } from './ds-toast.component';\nimport { DsToastService, ToastInstance, ToastPosition } from './ds-toast.service';\n\n@Component({\n selector: 'ds-toast-container',\n standalone: true,\n imports: [CommonModule, DsToastComponent],\n templateUrl: './ds-toast-container.component.html',\n styleUrl: './ds-toast-container.component.scss',\n})\nexport class DsToastContainerComponent {\n private readonly toastService = inject(DsToastService);\n\n protected readonly positions: ToastPosition[] = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];\n\n protected readonly groupedToasts = computed<Record<ToastPosition, ToastInstance[]>>(() => {\n const groups: Record<ToastPosition, ToastInstance[]> = {\n 'top-left': [],\n 'top-right': [],\n 'bottom-left': [],\n 'bottom-right': [],\n };\n\n for (const toast of this.toastService.toasts()) {\n groups[toast.position].push(toast);\n }\n\n return groups;\n });\n\n dismiss(id: string): void {\n this.toastService.dismiss(id);\n }\n\n handleAction(toast: ToastInstance): void {\n this.toastService.triggerAction(toast.id);\n }\n}\n","@for (position of positions; track position) {\n @let stack = groupedToasts()[position];\n <div class=\"toast-stack\" [attr.data-position]=\"position\">\n @for (toast of stack; track toast.id) {\n <ds-toast\n [message]=\"toast.message\"\n [type]=\"toast.type\"\n [duration]=\"toast.duration\"\n [closable]=\"toast.closable\"\n [position]=\"toast.position\"\n [actionLabel]=\"toast.actionLabel\"\n [pauseOnHover]=\"toast.pauseOnHover\"\n (action)=\"handleAction(toast)\"\n (closed)=\"dismiss(toast.id)\"\n />\n }\n </div>\n}\n","import { Component, forwardRef, input, signal, computed } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { PrimitiveToggle, ToggleSize } from '../../primitives/primitive-toggle/primitive-toggle';\n\n/**\n * DS Toggle (Switch)\n *\n * Composant toggle/switch du design system avec ControlValueAccessor pour formulaires réactifs.\n * Encapsule primitive-toggle avec gestion label inline, helper et validation visuelle.\n *\n * @example\n * // Formulaire réactif\n * <ds-toggle\n * formControlName=\"notifications\"\n * label=\"Activer les notifications\"\n * helper=\"Vous recevrez des alertes email\"\n * />\n *\n * @example\n * // Template-driven\n * <ds-toggle\n * [(ngModel)]=\"notificationsEnabled\"\n * label=\"Notifications\"\n * labelPosition=\"left\"\n * />\n */\n@Component({\n selector: 'ds-toggle',\n standalone: true,\n imports: [CommonModule, PrimitiveToggle],\n templateUrl: './ds-toggle.html',\n styleUrl: './ds-toggle.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsToggle),\n multi: true,\n },\n ],\n})\nexport class DsToggle implements ControlValueAccessor {\n /**\n * ID unique du toggle (généré automatiquement)\n */\n id = input<string>(`ds-toggle-${crypto.randomUUID()}`);\n\n /**\n * Label affiché à côté du toggle\n */\n label = input<string>('');\n\n /**\n * Position du label (left, right)\n */\n labelPosition = input<'left' | 'right'>('right');\n\n /**\n * Texte d'aide affiché sous le toggle\n */\n helper = input<string | undefined>(undefined);\n\n /**\n * État désactivé du toggle\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du toggle (sm, md, lg)\n */\n size = input<ToggleSize>('md');\n\n /**\n * Nom du contrôle (pour formulaires)\n */\n name = input<string | undefined>(undefined);\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n protected readonly internalValue = signal<boolean>(false);\n\n // Computed properties\n protected readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n\n protected readonly helperId = computed<string | undefined>(() =>\n this.helper() ? `${this.id()}-helper` : undefined\n );\n\n // ControlValueAccessor implementation\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.internalValue.set(value ?? false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n }\n\n // Event handlers\n protected onCheckedChange(checked: boolean): void {\n if (this.isDisabled()) {\n return;\n }\n this.internalValue.set(checked);\n this.onChange(checked);\n this.onTouched();\n }\n}\n","<div class=\"ds-toggle\">\n <primitive-toggle\n [toggleId]=\"id()\"\n [checked]=\"internalValue()\"\n [disabled]=\"isDisabled()\"\n [size]=\"size()\"\n [label]=\"label()\"\n [labelPosition]=\"labelPosition()\"\n [attr.aria-describedby]=\"helperId()\"\n [attr.name]=\"name()\"\n (checkedChange)=\"onCheckedChange($event)\"\n />\n\n @if (helper()) {\n <div\n [id]=\"helperId()\"\n class=\"ds-toggle__helper\"\n [attr.aria-live]=\"'polite'\"\n >\n {{ helper() }}\n </div>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ds-tooltip',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ds-tooltip\" role=\"tooltip\">\n <div class=\"ds-tooltip__content\">{{ text() }}</div>\n </div>\n `,\n styleUrls: ['./ds-tooltip.component.scss'],\n})\nexport class DsTooltipComponent {\n text = input.required<string>();\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnDestroy,\n ComponentRef,\n ViewContainerRef,\n Injector,\n} from '@angular/core';\nimport { Overlay, OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DsTooltipComponent } from './ds-tooltip.component';\nimport { TOOLTIP_POSITIONS } from '../../utils/overlay-positions';\n\n@Directive({\n selector: '[dsTooltip]',\n standalone: true,\n})\nexport class DsTooltip implements OnDestroy {\n dsTooltip = input.required<string>();\n\n private overlayRef: OverlayRef | null = null;\n private tooltipComponentRef: ComponentRef<DsTooltipComponent> | null = null;\n private hideTimeout: number | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.clearHideTimeout();\n if (!this.overlayRef) {\n this.show();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.hideWithDelay(150);\n }\n\n @HostListener('focus')\n onFocus(): void {\n this.clearHideTimeout();\n if (!this.overlayRef) {\n this.show();\n }\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.hide();\n }\n\n private show(): void {\n const tooltipText = this.dsTooltip();\n if (!tooltipText || tooltipText.trim() === '') return;\n\n this.overlayRef = this.createOverlay();\n\n // Utiliser ComponentPortal avec attach() - pattern CDK standard\n const portal = new ComponentPortal(\n DsTooltipComponent,\n this.viewContainerRef,\n this.injector\n );\n\n this.tooltipComponentRef = this.overlayRef.attach(portal);\n this.tooltipComponentRef.setInput('text', tooltipText);\n this.tooltipComponentRef.changeDetectorRef.detectChanges();\n\n // Set aria-describedby on host element\n const tooltipId = `tooltip-${Math.random().toString(36).substring(2, 11)}`;\n this.elementRef.nativeElement.setAttribute('aria-describedby', tooltipId);\n }\n\n private hide(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n\n if (this.tooltipComponentRef) {\n this.tooltipComponentRef.destroy();\n this.tooltipComponentRef = null;\n }\n\n this.elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n\n private hideWithDelay(delayMs: number): void {\n this.hideTimeout = window.setTimeout(() => {\n this.hide();\n }, delayMs);\n }\n\n private clearHideTimeout(): void {\n if (this.hideTimeout !== null) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n\n private createOverlay(): OverlayRef {\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(TOOLTIP_POSITIONS as ConnectedPosition[]);\n\n return this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.close(),\n panelClass: 'ds-tooltip-overlay',\n });\n }\n\n ngOnDestroy(): void {\n this.clearHideTimeout();\n this.hide();\n }\n}\n","import { Component, input, output, computed, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Taille de l'accordion.\n */\nexport type AccordionSize = 'sm' | 'md' | 'lg';\n\n/**\n * Variant de style de l'accordion.\n */\nexport type AccordionVariant = 'default' | 'bordered' | 'separated';\n\n/**\n * Configuration d'un item d'accordion.\n */\nexport interface AccordionItem {\n id: string;\n header: string;\n content: string;\n disabled?: boolean;\n}\n\n/**\n * Événement émis lors du changement d'état d'un item.\n */\nexport interface AccordionChangeEvent {\n itemId: string;\n expanded: boolean;\n expandedItems: string[];\n}\n\n/**\n * # DsAccordion\n *\n * Composant accordion pour afficher/masquer des sections de contenu.\n *\n * ## Usage\n *\n * ```html\n * <ds-accordion\n * [items]=\"items\"\n * [multiple]=\"false\"\n * (itemChange)=\"onItemChange($event)\">\n * </ds-accordion>\n * ```\n *\n * ## Accessibilité\n *\n * - Headers avec `role=\"button\"` et `aria-expanded`\n * - Contenu avec `role=\"region\"` et `aria-labelledby`\n * - Navigation clavier : Enter/Space pour toggle, ArrowUp/Down pour navigation\n *\n * @component\n */\n@Component({\n selector: 'ds-accordion',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-accordion.html',\n styleUrl: './ds-accordion.scss',\n})\nexport class DsAccordion {\n // Icône FontAwesome\n readonly faChevronDown = faChevronDown;\n\n /**\n * Liste des items de l'accordion.\n */\n items = input.required<AccordionItem[]>();\n\n /**\n * Permettre l'expansion de plusieurs items simultanément.\n * @default false\n */\n multiple = input<boolean>(false);\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<AccordionSize>('md');\n\n /**\n * Variant de style.\n * @default 'default'\n */\n variant = input<AccordionVariant>('default');\n\n /**\n * IDs des items initialement ouverts.\n * @default []\n */\n expandedIds = input<string[]>([]);\n\n /**\n * Désactiver tout l'accordion.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Événement émis lors du changement d'état d'un item.\n */\n itemChange = output<AccordionChangeEvent>();\n\n /**\n * État interne des items ouverts.\n */\n private readonly _expandedIds = signal<Set<string>>(new Set());\n\n /**\n * Initialiser les items ouverts à partir de l'input.\n */\n constructor() {\n // Note: L'initialisation réactive se fait via effect() si nécessaire\n }\n\n /**\n * IDs des items actuellement ouverts.\n */\n readonly currentExpandedIds = computed(() => {\n const inputIds = this.expandedIds();\n const internalIds = this._expandedIds();\n\n // Fusionner les deux sources\n const merged = new Set([...inputIds, ...internalIds]);\n return merged;\n });\n\n /**\n * Vérifier si un item est ouvert.\n */\n isExpanded(itemId: string): boolean {\n return this.currentExpandedIds().has(itemId);\n }\n\n /**\n * Toggle un item.\n */\n toggleItem(item: AccordionItem): void {\n if (this.disabled() || item.disabled) return;\n\n const current = new Set(this._expandedIds());\n const isCurrentlyExpanded = current.has(item.id);\n\n if (isCurrentlyExpanded) {\n current.delete(item.id);\n } else {\n if (!this.multiple()) {\n current.clear();\n }\n current.add(item.id);\n }\n\n this._expandedIds.set(current);\n\n this.itemChange.emit({\n itemId: item.id,\n expanded: !isCurrentlyExpanded,\n expandedItems: Array.from(current),\n });\n }\n\n /**\n * Ouvrir tous les items.\n */\n expandAll(): void {\n if (this.disabled()) return;\n\n const allIds = new Set(\n this.items()\n .filter((item) => !item.disabled)\n .map((item) => item.id)\n );\n this._expandedIds.set(allIds);\n }\n\n /**\n * Fermer tous les items.\n */\n collapseAll(): void {\n if (this.disabled()) return;\n this._expandedIds.set(new Set());\n }\n\n /**\n * Gestion du clavier.\n */\n onKeydown(event: KeyboardEvent, item: AccordionItem, index: number): void {\n const itemsArr = this.items();\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.toggleItem(item);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.focusItem(Math.min(index + 1, itemsArr.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.focusItem(Math.max(index - 1, 0));\n break;\n case 'Home':\n event.preventDefault();\n this.focusItem(0);\n break;\n case 'End':\n event.preventDefault();\n this.focusItem(itemsArr.length - 1);\n break;\n }\n }\n\n /**\n * Focus sur un item par index.\n */\n private focusItem(index: number): void {\n const headers = document.querySelectorAll('.ds-accordion__header');\n const target = headers[index] as HTMLElement;\n target?.focus();\n }\n\n /**\n * Classes CSS du conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-accordion',\n `ds-accordion--${this.size()}`,\n `ds-accordion--${this.variant()}`,\n this.disabled() ? 'ds-accordion--disabled' : '',\n ].filter(Boolean);\n });\n\n /**\n * Classes CSS pour un item.\n */\n getItemClasses(item: AccordionItem): string[] {\n return [\n 'ds-accordion__item',\n this.isExpanded(item.id) ? 'ds-accordion__item--expanded' : '',\n item.disabled ? 'ds-accordion__item--disabled' : '',\n ].filter(Boolean);\n }\n\n /**\n * ID unique pour le header.\n */\n getHeaderId(item: AccordionItem): string {\n return `accordion-header-${item.id}`;\n }\n\n /**\n * ID unique pour le contenu.\n */\n getContentId(item: AccordionItem): string {\n return `accordion-content-${item.id}`;\n }\n}\n","<div [ngClass]=\"containerClasses()\">\n @for (item of items(); track item.id; let i = $index) {\n <div [ngClass]=\"getItemClasses(item)\">\n <!-- Header -->\n <button\n type=\"button\"\n class=\"ds-accordion__header\"\n [id]=\"getHeaderId(item)\"\n [attr.aria-expanded]=\"isExpanded(item.id)\"\n [attr.aria-controls]=\"getContentId(item)\"\n [disabled]=\"disabled() || item.disabled\"\n (click)=\"toggleItem(item)\"\n (keydown)=\"onKeydown($event, item, i)\">\n <span class=\"ds-accordion__title\">{{ item.header }}</span>\n <fa-icon\n class=\"ds-accordion__icon\"\n [icon]=\"faChevronDown\"\n [class.ds-accordion__icon--rotated]=\"isExpanded(item.id)\"\n aria-hidden=\"true\">\n </fa-icon>\n </button>\n\n <!-- Contenu -->\n <div\n class=\"ds-accordion__content\"\n [id]=\"getContentId(item)\"\n role=\"region\"\n [attr.aria-labelledby]=\"getHeaderId(item)\"\n [attr.aria-hidden]=\"!isExpanded(item.id)\"\n [class.ds-accordion__content--expanded]=\"isExpanded(item.id)\">\n <div class=\"ds-accordion__body\">\n {{ item.content }}\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, input, output, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faChevronLeft,\n faChevronRight,\n faAnglesLeft,\n faAnglesRight\n} from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Tailles disponibles pour la pagination.\n */\nexport type PaginationSize = 'sm' | 'md' | 'lg';\n\n/**\n * Options de taille de page disponibles.\n */\nexport type PageSizeOption = number;\n\n/**\n * Événement émis lors du changement de page.\n */\nexport interface PageChangeEvent {\n page: number;\n pageSize: number;\n totalItems: number;\n totalPages: number;\n}\n\n/**\n * # DsPagination\n *\n * Composant de pagination pour naviguer entre les pages d'un ensemble de données.\n *\n * ## Usage\n *\n * ```html\n * <ds-pagination\n * [totalItems]=\"100\"\n * [pageSize]=\"10\"\n * [currentPage]=\"1\"\n * [showFirstLast]=\"true\"\n * [showPageSizeSelector]=\"true\"\n * (pageChange)=\"onPageChange($event)\">\n * </ds-pagination>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"navigation\"` avec `aria-label`\n * - Boutons avec `aria-label` descriptifs\n * - Page courante indiquée par `aria-current=\"page\"`\n * - Navigation clavier complète (Tab, Enter, Space)\n *\n * @component\n */\n@Component({\n selector: 'ds-pagination',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-pagination.html',\n styleUrl: './ds-pagination.scss',\n})\nexport class DsPagination {\n // Icônes FontAwesome\n readonly faChevronLeft = faChevronLeft;\n readonly faChevronRight = faChevronRight;\n readonly faAnglesLeft = faAnglesLeft;\n readonly faAnglesRight = faAnglesRight;\n\n /**\n * Nombre total d'éléments.\n */\n totalItems = input.required<number>();\n\n /**\n * Nombre d'éléments par page.\n * @default 10\n */\n pageSize = input<number>(10);\n\n /**\n * Page courante (1-indexed).\n * @default 1\n */\n currentPage = input<number>(1);\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<PaginationSize>('md');\n\n /**\n * Afficher les boutons première/dernière page.\n * @default true\n */\n showFirstLast = input<boolean>(true);\n\n /**\n * Afficher le sélecteur de taille de page.\n * @default false\n */\n showPageSizeSelector = input<boolean>(false);\n\n /**\n * Options de taille de page disponibles.\n * @default [10, 25, 50, 100]\n */\n pageSizeOptions = input<PageSizeOption[]>([10, 25, 50, 100]);\n\n /**\n * Nombre maximum de pages affichées dans la navigation.\n * @default 5\n */\n maxVisiblePages = input<number>(5);\n\n /**\n * Afficher les informations \"X - Y sur Z\".\n * @default true\n */\n showInfo = input<boolean>(true);\n\n /**\n * Désactiver le composant.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Label ARIA pour la navigation.\n * @default 'Pagination'\n */\n ariaLabel = input<string>('Pagination');\n\n /**\n * Événement émis lors du changement de page.\n */\n pageChange = output<PageChangeEvent>();\n\n /**\n * Événement émis lors du changement de taille de page.\n */\n pageSizeChange = output<number>();\n\n /**\n * Calcul du nombre total de pages.\n */\n readonly totalPages = computed(() => {\n const total = this.totalItems();\n const size = this.pageSize();\n return Math.max(1, Math.ceil(total / size));\n });\n\n /**\n * Page courante normalisée (entre 1 et totalPages).\n */\n readonly normalizedCurrentPage = computed(() => {\n const page = this.currentPage();\n const total = this.totalPages();\n return Math.max(1, Math.min(page, total));\n });\n\n /**\n * Premier élément affiché (1-indexed).\n */\n readonly startItem = computed(() => {\n const page = this.normalizedCurrentPage();\n const size = this.pageSize();\n return (page - 1) * size + 1;\n });\n\n /**\n * Dernier élément affiché.\n */\n readonly endItem = computed(() => {\n const start = this.startItem();\n const size = this.pageSize();\n const total = this.totalItems();\n return Math.min(start + size - 1, total);\n });\n\n /**\n * Peut aller à la page précédente.\n */\n readonly canGoPrevious = computed(() => {\n return this.normalizedCurrentPage() > 1 && !this.disabled();\n });\n\n /**\n * Peut aller à la page suivante.\n */\n readonly canGoNext = computed(() => {\n return this.normalizedCurrentPage() < this.totalPages() && !this.disabled();\n });\n\n /**\n * Pages visibles dans la navigation.\n */\n readonly visiblePages = computed(() => {\n const current = this.normalizedCurrentPage();\n const total = this.totalPages();\n const max = this.maxVisiblePages();\n\n if (total <= max) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const half = Math.floor(max / 2);\n let start = current - half;\n let end = current + half;\n\n if (start < 1) {\n start = 1;\n end = max;\n }\n\n if (end > total) {\n end = total;\n start = total - max + 1;\n }\n\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n /**\n * Afficher les ellipses au début.\n */\n readonly showStartEllipsis = computed(() => {\n const pages = this.visiblePages();\n return pages.length > 0 && pages[0] > 1;\n });\n\n /**\n * Afficher les ellipses à la fin.\n */\n readonly showEndEllipsis = computed(() => {\n const pages = this.visiblePages();\n const total = this.totalPages();\n return pages.length > 0 && pages[pages.length - 1] < total;\n });\n\n /**\n * Classes CSS du conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-pagination',\n `ds-pagination--${this.size()}`,\n this.disabled() ? 'ds-pagination--disabled' : ''\n ].filter(Boolean);\n });\n\n /**\n * Aller à une page spécifique.\n */\n goToPage(page: number): void {\n if (this.disabled()) return;\n\n const normalized = Math.max(1, Math.min(page, this.totalPages()));\n if (normalized !== this.normalizedCurrentPage()) {\n this.emitPageChange(normalized);\n }\n }\n\n /**\n * Aller à la première page.\n */\n goToFirst(): void {\n this.goToPage(1);\n }\n\n /**\n * Aller à la dernière page.\n */\n goToLast(): void {\n this.goToPage(this.totalPages());\n }\n\n /**\n * Aller à la page précédente.\n */\n goToPrevious(): void {\n this.goToPage(this.normalizedCurrentPage() - 1);\n }\n\n /**\n * Aller à la page suivante.\n */\n goToNext(): void {\n this.goToPage(this.normalizedCurrentPage() + 1);\n }\n\n /**\n * Changer la taille de page.\n */\n onPageSizeChange(event: Event): void {\n if (this.disabled()) return;\n\n const select = event.target as HTMLSelectElement;\n const newSize = parseInt(select.value, 10);\n this.pageSizeChange.emit(newSize);\n // Recalculer la page pour rester au même endroit dans les données\n const currentStart = this.startItem();\n const newPage = Math.ceil(currentStart / newSize);\n this.emitPageChange(newPage, newSize);\n }\n\n /**\n * Émettre l'événement de changement de page.\n */\n private emitPageChange(page: number, pageSize?: number): void {\n const size = pageSize ?? this.pageSize();\n this.pageChange.emit({\n page,\n pageSize: size,\n totalItems: this.totalItems(),\n totalPages: Math.ceil(this.totalItems() / size)\n });\n }\n\n /**\n * Gestion du clavier sur les boutons de page.\n */\n onPageKeydown(event: KeyboardEvent, page: number): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage(page);\n }\n }\n}\n","<nav\n [ngClass]=\"containerClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"navigation\">\n\n <!-- Info: X - Y sur Z -->\n @if (showInfo()) {\n <span class=\"ds-pagination__info\">\n {{ startItem() }} - {{ endItem() }} sur {{ totalItems() }}\n </span>\n }\n\n <!-- Sélecteur de taille de page -->\n @if (showPageSizeSelector()) {\n <div class=\"ds-pagination__size-selector\">\n <label class=\"ds-pagination__size-label\" for=\"page-size\">\n Par page:\n </label>\n <select\n id=\"page-size\"\n class=\"ds-pagination__size-select\"\n [value]=\"pageSize()\"\n [disabled]=\"disabled()\"\n (change)=\"onPageSizeChange($event)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Navigation -->\n <div class=\"ds-pagination__nav\">\n <!-- Première page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--first\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller à la première page'\"\n (click)=\"goToFirst()\">\n <fa-icon [icon]=\"faAnglesLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n\n <!-- Page précédente -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--prev\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller à la page précédente'\"\n (click)=\"goToPrevious()\">\n <fa-icon [icon]=\"faChevronLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Ellipsis début -->\n @if (showStartEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Pages -->\n @for (page of visiblePages(); track page) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--page\"\n [class.ds-pagination__btn--active]=\"page === normalizedCurrentPage()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Page ' + page\"\n [attr.aria-current]=\"page === normalizedCurrentPage() ? 'page' : null\"\n (click)=\"goToPage(page)\"\n (keydown)=\"onPageKeydown($event, page)\">\n {{ page }}\n </button>\n }\n\n <!-- Ellipsis fin -->\n @if (showEndEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Page suivante -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--next\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller à la page suivante'\"\n (click)=\"goToNext()\">\n <fa-icon [icon]=\"faChevronRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Dernière page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--last\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller à la dernière page'\"\n (click)=\"goToLast()\">\n <fa-icon [icon]=\"faAnglesRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n </div>\n</nav>\n","import { Component, input, output, computed, ContentChildren, QueryList, AfterContentInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faCheck, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Orientation du stepper.\n */\nexport type StepperOrientation = 'horizontal' | 'vertical';\n\n/**\n * État d'une étape.\n */\nexport type StepState = 'pending' | 'active' | 'completed' | 'error';\n\n/**\n * Taille du stepper.\n */\nexport type StepperSize = 'sm' | 'md' | 'lg';\n\n/**\n * Configuration d'une étape.\n */\nexport interface Step {\n label: string;\n description?: string;\n state?: StepState;\n disabled?: boolean;\n optional?: boolean;\n}\n\n/**\n * Événement émis lors du changement d'étape.\n */\nexport interface StepChangeEvent {\n previousIndex: number;\n currentIndex: number;\n step: Step;\n}\n\n/**\n * # DsStepper\n *\n * Composant de stepper pour guider l'utilisateur à travers un processus multi-étapes.\n *\n * ## Usage\n *\n * ```html\n * <ds-stepper\n * [steps]=\"steps\"\n * [activeStep]=\"0\"\n * [orientation]=\"'horizontal'\"\n * (stepChange)=\"onStepChange($event)\">\n * </ds-stepper>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"tablist\"` avec `aria-orientation`\n * - Chaque étape utilise `role=\"tab\"` avec `aria-selected`\n * - Navigation clavier : ArrowLeft/Right (horizontal), ArrowUp/Down (vertical)\n * - Indicateurs d'état visuels et sémantiques\n *\n * @component\n */\n@Component({\n selector: 'ds-stepper',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-stepper.html',\n styleUrl: './ds-stepper.scss',\n})\nexport class DsStepper {\n // Icônes FontAwesome\n readonly faCheck = faCheck;\n readonly faExclamationTriangle = faExclamationTriangle;\n\n /**\n * Liste des étapes.\n */\n steps = input.required<Step[]>();\n\n /**\n * Index de l'étape active (0-indexed).\n * @default 0\n */\n activeStep = input<number>(0);\n\n /**\n * Orientation du stepper.\n * @default 'horizontal'\n */\n orientation = input<StepperOrientation>('horizontal');\n\n /**\n * Taille du stepper.\n * @default 'md'\n */\n size = input<StepperSize>('md');\n\n /**\n * Permettre la navigation en cliquant sur les étapes.\n * @default true\n */\n clickable = input<boolean>(true);\n\n /**\n * Navigation linéaire (doit compléter chaque étape dans l'ordre).\n * @default false\n */\n linear = input<boolean>(false);\n\n /**\n * Afficher les descriptions.\n * @default true\n */\n showDescriptions = input<boolean>(true);\n\n /**\n * Afficher le connecteur entre les étapes.\n * @default true\n */\n showConnector = input<boolean>(true);\n\n /**\n * Événement émis lors du changement d'étape.\n */\n stepChange = output<StepChangeEvent>();\n\n /**\n * Index actif normalisé.\n */\n readonly normalizedActiveStep = computed(() => {\n const active = this.activeStep();\n const stepsArr = this.steps();\n return Math.max(0, Math.min(active, stepsArr.length - 1));\n });\n\n /**\n * Classes CSS du conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-stepper',\n `ds-stepper--${this.orientation()}`,\n `ds-stepper--${this.size()}`,\n this.clickable() ? 'ds-stepper--clickable' : '',\n ].filter(Boolean);\n });\n\n /**\n * Obtenir l'état d'une étape.\n */\n getStepState(step: Step, index: number): StepState {\n // État explicite\n if (step.state) return step.state;\n\n const active = this.normalizedActiveStep();\n\n if (index < active) return 'completed';\n if (index === active) return 'active';\n return 'pending';\n }\n\n /**\n * Vérifie si une étape est navigable.\n */\n isStepClickable(step: Step, index: number): boolean {\n if (!this.clickable()) return false;\n if (step.disabled) return false;\n\n // En mode linéaire, on ne peut naviguer qu'aux étapes complétées ou à l'étape suivante\n if (this.linear()) {\n const active = this.normalizedActiveStep();\n return index <= active + 1;\n }\n\n return true;\n }\n\n /**\n * Naviguer vers une étape.\n */\n goToStep(index: number): void {\n const stepsArr = this.steps();\n if (index < 0 || index >= stepsArr.length) return;\n\n const step = stepsArr[index];\n if (!this.isStepClickable(step, index)) return;\n\n const previousIndex = this.normalizedActiveStep();\n if (index !== previousIndex) {\n this.stepChange.emit({\n previousIndex,\n currentIndex: index,\n step,\n });\n }\n }\n\n /**\n * Aller à l'étape suivante.\n */\n next(): void {\n this.goToStep(this.normalizedActiveStep() + 1);\n }\n\n /**\n * Aller à l'étape précédente.\n */\n previous(): void {\n this.goToStep(this.normalizedActiveStep() - 1);\n }\n\n /**\n * Gestion du clavier.\n */\n onKeydown(event: KeyboardEvent, index: number): void {\n const stepsArr = this.steps();\n const isHorizontal = this.orientation() === 'horizontal';\n\n let newIndex = index;\n\n switch (event.key) {\n case 'ArrowRight':\n if (isHorizontal) {\n event.preventDefault();\n newIndex = Math.min(index + 1, stepsArr.length - 1);\n }\n break;\n case 'ArrowLeft':\n if (isHorizontal) {\n event.preventDefault();\n newIndex = Math.max(index - 1, 0);\n }\n break;\n case 'ArrowDown':\n if (!isHorizontal) {\n event.preventDefault();\n newIndex = Math.min(index + 1, stepsArr.length - 1);\n }\n break;\n case 'ArrowUp':\n if (!isHorizontal) {\n event.preventDefault();\n newIndex = Math.max(index - 1, 0);\n }\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = stepsArr.length - 1;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.goToStep(index);\n return;\n }\n\n if (newIndex !== index) {\n // Focus sur la nouvelle étape\n const stepElements = document.querySelectorAll('.ds-stepper__step');\n const targetElement = stepElements[newIndex] as HTMLElement;\n targetElement?.focus();\n }\n }\n\n /**\n * Classes CSS pour une étape.\n */\n getStepClasses(step: Step, index: number): string[] {\n const state = this.getStepState(step, index);\n return [\n 'ds-stepper__step',\n `ds-stepper__step--${state}`,\n step.disabled ? 'ds-stepper__step--disabled' : '',\n step.optional ? 'ds-stepper__step--optional' : '',\n ].filter(Boolean);\n }\n\n /**\n * Label ARIA pour une étape.\n */\n getStepAriaLabel(step: Step, index: number): string {\n const state = this.getStepState(step, index);\n const stateLabels: Record<StepState, string> = {\n pending: 'En attente',\n active: 'En cours',\n completed: 'Terminée',\n error: 'Erreur',\n };\n return `Étape ${index + 1}: ${step.label} - ${stateLabels[state]}`;\n }\n}\n","<div\n [ngClass]=\"containerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\">\n\n @for (step of steps(); track step.label; let i = $index; let last = $last) {\n <!-- Étape -->\n <div\n [ngClass]=\"getStepClasses(step, i)\"\n role=\"tab\"\n [attr.aria-selected]=\"i === normalizedActiveStep()\"\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\n [attr.tabindex]=\"i === normalizedActiveStep() ? 0 : -1\"\n (click)=\"goToStep(i)\"\n (keydown)=\"onKeydown($event, i)\">\n\n <!-- Indicateur -->\n <div class=\"ds-stepper__indicator\">\n @switch (getStepState(step, i)) {\n @case ('completed') {\n <fa-icon [icon]=\"faCheck\" aria-hidden=\"true\"></fa-icon>\n }\n @case ('error') {\n <fa-icon [icon]=\"faExclamationTriangle\" aria-hidden=\"true\"></fa-icon>\n }\n @default {\n <span class=\"ds-stepper__number\">{{ i + 1 }}</span>\n }\n }\n </div>\n\n <!-- Contenu -->\n <div class=\"ds-stepper__content\">\n <span class=\"ds-stepper__label\">\n {{ step.label }}\n @if (step.optional) {\n <span class=\"ds-stepper__optional\">(Optionnel)</span>\n }\n </span>\n @if (showDescriptions() && step.description) {\n <span class=\"ds-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n\n <!-- Connecteur -->\n @if (showConnector() && !last) {\n <div\n class=\"ds-stepper__connector\"\n [class.ds-stepper__connector--completed]=\"i < normalizedActiveStep()\"\n aria-hidden=\"true\">\n </div>\n }\n }\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n forwardRef,\n ElementRef,\n ViewChild,\n HostListener,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface DsSelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport type DsSelectSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ds-select',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-select.html',\n styleUrls: ['./ds-select.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSelect),\n multi: true,\n },\n ],\n})\nexport class DsSelect implements ControlValueAccessor {\n // Inputs\n readonly options = input<DsSelectOption[]>([]);\n readonly placeholder = input<string>('Sélectionner...');\n readonly size = input<DsSelectSize>('md');\n readonly disabled = input<boolean>(false);\n readonly error = input<string>('');\n readonly helper = input<string>('');\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly required = input<boolean>(false);\n readonly clearable = input<boolean>(false);\n readonly searchable = input<boolean>(false);\n\n // Outputs\n readonly selectionChange = output<DsSelectOption | null>();\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // Internal state\n protected readonly isOpen = signal(false);\n protected readonly searchQuery = signal('');\n protected readonly focusedIndex = signal(-1);\n private readonly internalValue = signal<string | number | null>(null);\n private readonly cvaDisabled = signal(false);\n\n @ViewChild('selectTrigger') selectTrigger!: ElementRef<HTMLButtonElement>;\n @ViewChild('searchInput') searchInput!: ElementRef<HTMLInputElement>;\n @ViewChild('listbox') listbox!: ElementRef<HTMLUListElement>;\n\n private onChange: (value: string | number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // Computed\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly selectedOption = computed(() => {\n const value = this.internalValue();\n if (value === null) return null;\n return this.options().find(opt => opt.value === value) || null;\n });\n\n protected readonly displayValue = computed(() => {\n const selected = this.selectedOption();\n return selected ? selected.label : this.placeholder();\n });\n\n protected readonly filteredOptions = computed(() => {\n const query = this.searchQuery().toLowerCase();\n if (!query) return this.options();\n return this.options().filter(opt =>\n opt.label.toLowerCase().includes(query)\n );\n });\n\n protected readonly containerClasses = computed(() => ({\n 'ds-select': true,\n 'ds-select--open': this.isOpen(),\n 'ds-select--disabled': this.isDisabled(),\n 'ds-select--error': !!this.error(),\n [`ds-select--${this.size()}`]: true,\n }));\n\n protected readonly triggerClasses = computed(() => ({\n 'ds-select__trigger': true,\n 'ds-select__trigger--placeholder': !this.selectedOption(),\n }));\n\n // ControlValueAccessor\n writeValue(value: string | number | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // Public methods\n toggle(): void {\n if (this.isDisabled()) return;\n this.isOpen() ? this.close() : this.open();\n }\n\n open(): void {\n if (this.isDisabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.focusedIndex.set(this.getSelectedIndex());\n this.opened.emit();\n\n if (this.searchable()) {\n setTimeout(() => this.searchInput?.nativeElement?.focus(), 0);\n }\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.closed.emit();\n this.onTouched();\n }\n\n selectOption(option: DsSelectOption): void {\n if (option.disabled) return;\n\n this.internalValue.set(option.value);\n this.onChange(option.value);\n this.selectionChange.emit(option);\n this.close();\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n this.internalValue.set(null);\n this.onChange(null);\n this.selectionChange.emit(null);\n }\n\n onSearchInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.searchQuery.set(input.value);\n this.focusedIndex.set(0);\n }\n\n // Keyboard navigation\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n event.preventDefault();\n this.open();\n } else if (this.focusedIndex() >= 0) {\n event.preventDefault();\n const option = this.filteredOptions()[this.focusedIndex()];\n if (option && !option.disabled) {\n this.selectOption(option);\n }\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.moveFocus(1);\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.moveFocus(-1);\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.focusedIndex.set(0);\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.focusedIndex.set(this.filteredOptions().length - 1);\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n this.selectTrigger?.nativeElement?.focus();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.close();\n }\n break;\n }\n }\n\n // Click outside\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.ds-select')) {\n this.close();\n }\n }\n\n // Helpers\n private moveFocus(delta: number): void {\n const options = this.filteredOptions();\n if (options.length === 0) return;\n\n let newIndex = this.focusedIndex() + delta;\n\n // Wrap around\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n\n // Skip disabled options\n let attempts = 0;\n while (options[newIndex]?.disabled && attempts < options.length) {\n newIndex += delta;\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n attempts++;\n }\n\n this.focusedIndex.set(newIndex);\n }\n\n private getSelectedIndex(): number {\n const value = this.internalValue();\n if (value === null) return 0;\n return this.options().findIndex(opt => opt.value === value);\n }\n\n protected isOptionFocused(index: number): boolean {\n return this.focusedIndex() === index;\n }\n\n protected isOptionSelected(option: DsSelectOption): boolean {\n return option.value === this.internalValue();\n }\n\n protected getOptionId(index: number): string {\n return `${this.name() || 'select'}-option-${index}`;\n }\n\n protected readonly listboxId = computed(() => `${this.name() || 'select'}-listbox`);\n}\n","<div [ngClass]=\"containerClasses()\">\n <!-- Label -->\n @if (label()) {\n <label class=\"ds-select__label\" [attr.for]=\"name()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ds-select__required\">*</span>\n }\n </label>\n }\n\n <!-- Trigger -->\n <button\n #selectTrigger\n type=\"button\"\n [ngClass]=\"triggerClasses()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-label]=\"label() || placeholder()\"\n (click)=\"toggle()\">\n <span class=\"ds-select__value\">{{ displayValue() }}</span>\n\n <span class=\"ds-select__icons\">\n @if (clearable() && selectedOption()) {\n <button\n type=\"button\"\n class=\"ds-select__clear\"\n aria-label=\"Effacer la sélection\"\n (click)=\"clear($event)\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ds-select__arrow\"\n [class.ds-select__arrow--open]=\"isOpen()\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </span>\n </button>\n\n <!-- Dropdown -->\n @if (isOpen()) {\n <div class=\"ds-select__dropdown\" role=\"presentation\">\n <!-- Search -->\n @if (searchable()) {\n <div class=\"ds-select__search\">\n <input\n #searchInput\n type=\"text\"\n class=\"ds-select__search-input\"\n placeholder=\"Rechercher...\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n aria-label=\"Rechercher une option\" />\n </div>\n }\n\n <!-- Options list -->\n <ul\n #listbox\n [id]=\"listboxId()\"\n class=\"ds-select__listbox\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\">\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li\n [id]=\"getOptionId(i)\"\n class=\"ds-select__option\"\n [class.ds-select__option--focused]=\"isOptionFocused(i)\"\n [class.ds-select__option--selected]=\"isOptionSelected(option)\"\n [class.ds-select__option--disabled]=\"option.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isOptionSelected(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\">\n <span class=\"ds-select__option-label\">{{ option.label }}</span>\n @if (isOptionSelected(option)) {\n <svg\n class=\"ds-select__check\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n </li>\n } @empty {\n <li class=\"ds-select__empty\" role=\"option\" aria-disabled=\"true\">\n Aucun résultat\n </li>\n }\n </ul>\n </div>\n }\n\n <!-- Helper / Error -->\n @if (error()) {\n <span class=\"ds-select__error\" role=\"alert\">{{ error() }}</span>\n } @else if (helper()) {\n <span class=\"ds-select__helper\">{{ helper() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n TrackByFunction,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface DsTableColumn<T = Record<string, unknown>> {\n key: keyof T | string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n width?: string;\n align?: 'left' | 'center' | 'right';\n cellClass?: string;\n headerClass?: string;\n format?: (value: unknown, row: T) => string;\n}\n\nexport type DsTableSize = 'sm' | 'md' | 'lg';\nexport type DsTableVariant = 'default' | 'striped' | 'bordered';\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortEvent {\n column: string;\n direction: SortDirection;\n}\n\nexport interface TableState {\n sortColumn: string | null;\n sortDirection: SortDirection;\n filters: Record<string, string>;\n}\n\n@Component({\n selector: 'ds-table',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-table.html',\n styleUrls: ['./ds-table.scss'],\n})\nexport class DsTable<T extends Record<string, unknown> = Record<string, unknown>> {\n // Inputs\n readonly data = input<T[]>([]);\n readonly columns = input<DsTableColumn<T>[]>([]);\n readonly size = input<DsTableSize>('md');\n readonly variant = input<DsTableVariant>('default');\n readonly selectable = input<boolean>(false);\n readonly hoverable = input<boolean>(true);\n readonly loading = input<boolean>(false);\n readonly emptyText = input<string>('Aucune donnée');\n readonly showHeader = input<boolean>(true);\n readonly stickyHeader = input<boolean>(false);\n readonly trackBy = input<TrackByFunction<T>>((index: number) => index);\n\n // Outputs\n readonly sortChange = output<SortEvent>();\n readonly rowClick = output<{ row: T; index: number }>();\n readonly selectionChange = output<T[]>();\n\n // Internal state\n protected readonly sortColumn = signal<string | null>(null);\n protected readonly sortDirection = signal<SortDirection>(null);\n protected readonly selectedRows = signal<Set<number>>(new Set());\n protected readonly filters = signal<Record<string, string>>({});\n\n // Computed\n protected readonly containerClasses = computed(() => ({\n 'ds-table': true,\n [`ds-table--${this.size()}`]: true,\n [`ds-table--${this.variant()}`]: true,\n 'ds-table--selectable': this.selectable(),\n 'ds-table--hoverable': this.hoverable(),\n 'ds-table--loading': this.loading(),\n 'ds-table--sticky-header': this.stickyHeader(),\n }));\n\n protected readonly processedData = computed(() => {\n let result = [...this.data()];\n\n // Apply filters\n const currentFilters = this.filters();\n Object.keys(currentFilters).forEach(key => {\n const filterValue = currentFilters[key]?.toLowerCase();\n if (filterValue) {\n result = result.filter(row => {\n const cellValue = String(this.getCellValue(row, key)).toLowerCase();\n return cellValue.includes(filterValue);\n });\n }\n });\n\n // Apply sorting\n const column = this.sortColumn();\n const direction = this.sortDirection();\n if (column && direction) {\n result.sort((a, b) => {\n const aVal = this.getCellValue(a, column);\n const bVal = this.getCellValue(b, column);\n\n if (aVal === bVal) return 0;\n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n\n const comparison = aVal < bVal ? -1 : 1;\n return direction === 'asc' ? comparison : -comparison;\n });\n }\n\n return result;\n });\n\n protected readonly isAllSelected = computed(() => {\n const data = this.processedData();\n if (data.length === 0) return false;\n return this.selectedRows().size === data.length;\n });\n\n protected readonly isPartiallySelected = computed(() => {\n const selected = this.selectedRows().size;\n return selected > 0 && selected < this.processedData().length;\n });\n\n // Methods\n getCellValue(row: T, key: string): unknown {\n const keys = key.split('.');\n let value: unknown = row;\n for (const k of keys) {\n if (value && typeof value === 'object') {\n value = (value as Record<string, unknown>)[k];\n } else {\n return undefined;\n }\n }\n return value;\n }\n\n formatCellValue(row: T, column: DsTableColumn<T>): string {\n const value = this.getCellValue(row, column.key as string);\n if (column.format) {\n return column.format(value, row);\n }\n if (value === null || value === undefined) {\n return '';\n }\n return String(value);\n }\n\n onSort(column: DsTableColumn<T>): void {\n if (!column.sortable) return;\n\n const key = column.key as string;\n const currentColumn = this.sortColumn();\n const currentDirection = this.sortDirection();\n\n let newDirection: SortDirection;\n if (currentColumn !== key) {\n newDirection = 'asc';\n } else if (currentDirection === 'asc') {\n newDirection = 'desc';\n } else {\n newDirection = null;\n }\n\n this.sortColumn.set(newDirection ? key : null);\n this.sortDirection.set(newDirection);\n\n this.sortChange.emit({\n column: key,\n direction: newDirection,\n });\n }\n\n onRowClick(row: T, index: number): void {\n this.rowClick.emit({ row, index });\n }\n\n toggleRowSelection(index: number, event: Event): void {\n event.stopPropagation();\n const newSet = new Set(this.selectedRows());\n if (newSet.has(index)) {\n newSet.delete(index);\n } else {\n newSet.add(index);\n }\n this.selectedRows.set(newSet);\n this.emitSelectionChange();\n }\n\n toggleAllSelection(event: Event): void {\n event.stopPropagation();\n const data = this.processedData();\n if (this.isAllSelected()) {\n this.selectedRows.set(new Set());\n } else {\n this.selectedRows.set(new Set(data.map((_, i) => i)));\n }\n this.emitSelectionChange();\n }\n\n isRowSelected(index: number): boolean {\n return this.selectedRows().has(index);\n }\n\n setFilter(column: string, value: string): void {\n const newFilters = { ...this.filters() };\n if (value) {\n newFilters[column] = value;\n } else {\n delete newFilters[column];\n }\n this.filters.set(newFilters);\n }\n\n clearFilters(): void {\n this.filters.set({});\n }\n\n getSelectedRows(): T[] {\n const data = this.processedData();\n return Array.from(this.selectedRows()).map(i => data[i]);\n }\n\n getSortIcon(column: DsTableColumn<T>): string {\n const key = column.key as string;\n if (this.sortColumn() !== key) {\n return 'sort';\n }\n return this.sortDirection() === 'asc' ? 'sort-asc' : 'sort-desc';\n }\n\n getColumnStyle(column: DsTableColumn<T>): Record<string, string> {\n const style: Record<string, string> = {};\n if (column.width) {\n style['width'] = column.width;\n }\n if (column.align) {\n style['text-align'] = column.align;\n }\n return style;\n }\n\n private emitSelectionChange(): void {\n this.selectionChange.emit(this.getSelectedRows());\n }\n\n // TrackBy\n trackByFn: TrackByFunction<T> = (index: number, item: T) => {\n const customTrackBy = this.trackBy();\n return customTrackBy(index, item);\n };\n}\n","<div [ngClass]=\"containerClasses()\">\n <div class=\"ds-table__wrapper\">\n <table class=\"ds-table__element\" role=\"grid\">\n <!-- Header -->\n @if (showHeader()) {\n <thead class=\"ds-table__header\">\n <tr class=\"ds-table__row ds-table__row--header\">\n @if (selectable()) {\n <th class=\"ds-table__cell ds-table__cell--checkbox\" scope=\"col\">\n <input\n type=\"checkbox\"\n class=\"ds-table__checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isPartiallySelected()\"\n (change)=\"toggleAllSelection($event)\"\n aria-label=\"Sélectionner tout\" />\n </th>\n }\n @for (column of columns(); track column.key) {\n <th\n class=\"ds-table__cell ds-table__cell--header\"\n [class]=\"column.headerClass || ''\"\n [class.ds-table__cell--sortable]=\"column.sortable\"\n [class.ds-table__cell--sorted]=\"sortColumn() === column.key\"\n [style]=\"getColumnStyle(column)\"\n [attr.aria-sort]=\"sortColumn() === column.key ? (sortDirection() === 'asc' ? 'ascending' : 'descending') : null\"\n scope=\"col\"\n (click)=\"onSort(column)\">\n <span class=\"ds-table__header-content\">\n <span class=\"ds-table__header-label\">{{ column.label }}</span>\n @if (column.sortable) {\n <span class=\"ds-table__sort-icon\" [class.ds-table__sort-icon--active]=\"sortColumn() === column.key\">\n @if (sortColumn() === column.key && sortDirection() === 'asc') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n } @else if (sortColumn() === column.key && sortDirection() === 'desc') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n } @else {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" opacity=\"0.4\">\n <polyline points=\"7 15 12 20 17 15\"></polyline>\n <polyline points=\"17 9 12 4 7 9\"></polyline>\n </svg>\n }\n </span>\n }\n </span>\n </th>\n }\n </tr>\n </thead>\n }\n\n <!-- Body -->\n <tbody class=\"ds-table__body\">\n @if (loading()) {\n <tr class=\"ds-table__row ds-table__row--loading\">\n <td class=\"ds-table__cell ds-table__cell--loading\" [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\">\n <div class=\"ds-table__loading\">\n <span class=\"ds-table__loading-spinner\"></span>\n <span class=\"ds-table__loading-text\">Chargement...</span>\n </div>\n </td>\n </tr>\n } @else if (processedData().length === 0) {\n <tr class=\"ds-table__row ds-table__row--empty\">\n <td class=\"ds-table__cell ds-table__cell--empty\" [attr.colspan]=\"columns().length + (selectable() ? 1 : 0)\">\n <div class=\"ds-table__empty\">\n {{ emptyText() }}\n </div>\n </td>\n </tr>\n } @else {\n @for (row of processedData(); track trackByFn($index, row); let i = $index) {\n <tr\n class=\"ds-table__row ds-table__row--body\"\n [class.ds-table__row--selected]=\"isRowSelected(i)\"\n role=\"row\"\n (click)=\"onRowClick(row, i)\">\n @if (selectable()) {\n <td class=\"ds-table__cell ds-table__cell--checkbox\">\n <input\n type=\"checkbox\"\n class=\"ds-table__checkbox\"\n [checked]=\"isRowSelected(i)\"\n (change)=\"toggleRowSelection(i, $event)\"\n [attr.aria-label]=\"'Sélectionner ligne ' + (i + 1)\" />\n </td>\n }\n @for (column of columns(); track column.key) {\n <td\n class=\"ds-table__cell\"\n [class]=\"column.cellClass || ''\"\n [style]=\"getColumnStyle(column)\"\n role=\"gridcell\">\n {{ formatCellValue(row, column) }}\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n forwardRef,\n ElementRef,\n ViewChild,\n HostListener,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface DsComboboxOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n description?: string;\n}\n\nexport type DsComboboxSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ds-combobox',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-combobox.html',\n styleUrls: ['./ds-combobox.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsCombobox),\n multi: true,\n },\n ],\n})\nexport class DsCombobox implements ControlValueAccessor {\n // Inputs\n readonly options = input<DsComboboxOption[]>([]);\n readonly placeholder = input<string>('Rechercher...');\n readonly size = input<DsComboboxSize>('md');\n readonly disabled = input<boolean>(false);\n readonly error = input<string>('');\n readonly helper = input<string>('');\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly required = input<boolean>(false);\n readonly clearable = input<boolean>(true);\n readonly allowCustom = input<boolean>(false);\n readonly minChars = input<number>(0);\n readonly maxResults = input<number>(50);\n readonly noResultsText = input<string>('Aucun résultat');\n readonly loadingText = input<string>('Chargement...');\n readonly loading = input<boolean>(false);\n\n // Outputs\n readonly selectionChange = output<DsComboboxOption | null>();\n readonly inputChange = output<string>();\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // Internal state\n protected readonly isOpen = signal(false);\n protected readonly inputValue = signal('');\n protected readonly focusedIndex = signal(-1);\n private readonly internalValue = signal<string | number | null>(null);\n private readonly cvaDisabled = signal(false);\n\n @ViewChild('inputElement') inputElement!: ElementRef<HTMLInputElement>;\n @ViewChild('listbox') listbox!: ElementRef<HTMLUListElement>;\n\n private onChange: (value: string | number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // Computed\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly selectedOption = computed(() => {\n const value = this.internalValue();\n if (value === null) return null;\n return this.options().find(opt => opt.value === value) || null;\n });\n\n protected readonly filteredOptions = computed(() => {\n const query = this.inputValue().toLowerCase();\n const minLength = this.minChars();\n\n if (query.length < minLength) return [];\n\n let results = this.options().filter(opt =>\n opt.label.toLowerCase().includes(query) ||\n (opt.description && opt.description.toLowerCase().includes(query))\n );\n\n return results.slice(0, this.maxResults());\n });\n\n protected readonly shouldShowDropdown = computed(() => {\n if (!this.isOpen()) return false;\n if (this.loading()) return true;\n if (this.inputValue().length < this.minChars()) return false;\n return this.filteredOptions().length > 0 || this.inputValue().length >= this.minChars();\n });\n\n protected readonly containerClasses = computed(() => ({\n 'ds-combobox': true,\n 'ds-combobox--open': this.isOpen(),\n 'ds-combobox--disabled': this.isDisabled(),\n 'ds-combobox--error': !!this.error(),\n [`ds-combobox--${this.size()}`]: true,\n }));\n\n protected readonly inputClasses = computed(() => ({\n 'ds-combobox__input': true,\n 'ds-combobox__input--has-value': !!this.inputValue(),\n }));\n\n // ControlValueAccessor\n writeValue(value: string | number | null): void {\n this.internalValue.set(value);\n const option = this.options().find(opt => opt.value === value);\n if (option) {\n this.inputValue.set(option.label);\n } else if (value === null) {\n this.inputValue.set('');\n }\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // Methods\n onInputFocus(): void {\n if (this.isDisabled()) return;\n this.open();\n }\n\n onInputBlur(): void {\n this.onTouched();\n // Delayed close to allow click on option\n setTimeout(() => {\n if (!this.isOpen()) return;\n this.close();\n\n // If no valid selection, handle based on allowCustom\n const selected = this.selectedOption();\n if (!selected && !this.allowCustom()) {\n this.inputValue.set('');\n this.internalValue.set(null);\n this.onChange(null);\n } else if (!selected && this.allowCustom() && this.inputValue()) {\n // Allow custom value\n const customValue = this.inputValue();\n this.internalValue.set(customValue);\n this.onChange(customValue);\n }\n }, 200);\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.inputValue.set(input.value);\n this.inputChange.emit(input.value);\n this.focusedIndex.set(-1);\n\n if (!this.isOpen() && input.value.length >= this.minChars()) {\n this.open();\n }\n }\n\n open(): void {\n if (this.isDisabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n this.closed.emit();\n }\n\n selectOption(option: DsComboboxOption): void {\n if (option.disabled) return;\n\n this.internalValue.set(option.value);\n this.inputValue.set(option.label);\n this.onChange(option.value);\n this.selectionChange.emit(option);\n this.close();\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this.inputValue.set('');\n this.internalValue.set(null);\n this.onChange(null);\n this.selectionChange.emit(null);\n this.inputElement?.nativeElement?.focus();\n }\n\n // Keyboard navigation\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.moveFocus(1);\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.moveFocus(-1);\n }\n break;\n\n case 'Enter':\n if (this.isOpen() && this.focusedIndex() >= 0) {\n event.preventDefault();\n const option = this.filteredOptions()[this.focusedIndex()];\n if (option && !option.disabled) {\n this.selectOption(option);\n }\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.close();\n }\n break;\n }\n }\n\n // Helpers\n private moveFocus(delta: number): void {\n const options = this.filteredOptions();\n if (options.length === 0) return;\n\n let newIndex = this.focusedIndex() + delta;\n\n // Wrap around\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n\n // Skip disabled options\n let attempts = 0;\n while (options[newIndex]?.disabled && attempts < options.length) {\n newIndex += delta;\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n attempts++;\n }\n\n this.focusedIndex.set(newIndex);\n }\n\n protected isOptionFocused(index: number): boolean {\n return this.focusedIndex() === index;\n }\n\n protected isOptionSelected(option: DsComboboxOption): boolean {\n return option.value === this.internalValue();\n }\n\n protected getOptionId(index: number): string {\n return `${this.name() || 'combobox'}-option-${index}`;\n }\n\n protected readonly listboxId = computed(() => `${this.name() || 'combobox'}-listbox`);\n protected readonly inputId = computed(() => `${this.name() || 'combobox'}-input`);\n}\n","<div [ngClass]=\"containerClasses()\">\n <!-- Label -->\n @if (label()) {\n <label class=\"ds-combobox__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ds-combobox__required\">*</span>\n }\n </label>\n }\n\n <!-- Input wrapper -->\n <div class=\"ds-combobox__input-wrapper\">\n <input\n #inputElement\n type=\"text\"\n [id]=\"inputId()\"\n [ngClass]=\"inputClasses()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"inputValue()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-autocomplete]=\"'list'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"focusedIndex() >= 0 ? getOptionId(focusedIndex()) : null\"\n role=\"combobox\"\n autocomplete=\"off\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (input)=\"onInput($event)\" />\n\n <span class=\"ds-combobox__icons\">\n @if (clearable() && inputValue()) {\n <button\n type=\"button\"\n class=\"ds-combobox__clear\"\n aria-label=\"Effacer\"\n tabindex=\"-1\"\n (mousedown)=\"clear($event)\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <span class=\"ds-combobox__arrow\" [class.ds-combobox__arrow--open]=\"isOpen()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </span>\n </span>\n </div>\n\n <!-- Dropdown -->\n @if (shouldShowDropdown()) {\n <div class=\"ds-combobox__dropdown\" role=\"presentation\">\n @if (loading()) {\n <div class=\"ds-combobox__loading\">\n <span class=\"ds-combobox__loading-spinner\"></span>\n <span>{{ loadingText() }}</span>\n </div>\n } @else {\n <ul\n #listbox\n [id]=\"listboxId()\"\n class=\"ds-combobox__listbox\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\">\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li\n [id]=\"getOptionId(i)\"\n class=\"ds-combobox__option\"\n [class.ds-combobox__option--focused]=\"isOptionFocused(i)\"\n [class.ds-combobox__option--selected]=\"isOptionSelected(option)\"\n [class.ds-combobox__option--disabled]=\"option.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isOptionSelected(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (mousedown)=\"selectOption(option)\">\n <span class=\"ds-combobox__option-content\">\n <span class=\"ds-combobox__option-label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"ds-combobox__option-description\">{{ option.description }}</span>\n }\n </span>\n @if (isOptionSelected(option)) {\n <svg\n class=\"ds-combobox__check\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n </li>\n } @empty {\n <li class=\"ds-combobox__empty\" role=\"option\" aria-disabled=\"true\">\n {{ noResultsText() }}\n </li>\n }\n </ul>\n }\n </div>\n }\n\n <!-- Helper / Error -->\n @if (error()) {\n <span class=\"ds-combobox__error\" role=\"alert\">{{ error() }}</span>\n } @else if (helper()) {\n <span class=\"ds-combobox__helper\">{{ helper() }}</span>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ContainerMaxWidth = 'fluid' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type ContainerGutter = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * DsContainer - Composant de layout responsive\n *\n * @description\n * Conteneur responsive avec max-width configurable, centrage automatique\n * et gutters (padding horizontal) adaptatifs.\n *\n * @example\n * ```html\n * <ds-container maxWidth=\"lg\" gutter=\"md\">\n * <p>Contenu centré avec max-width 960px</p>\n * </ds-container>\n * ```\n */\n@Component({\n selector: 'ds-container',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"containerClasses()\" [style]=\"containerStyle()\">\n <ng-content />\n </div>\n `,\n styleUrls: ['./ds-container.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsContainer {\n /**\n * Largeur maximale du conteneur\n * - fluid: 100% (pas de max-width)\n * - sm: 540px\n * - md: 720px\n * - lg: 960px\n * - xl: 1140px\n * - 2xl: 1320px\n */\n readonly maxWidth = input<ContainerMaxWidth>('lg');\n\n /**\n * Centrer le conteneur horizontalement\n */\n readonly center = input<boolean>(true);\n\n /**\n * Padding horizontal (gutter)\n * - none: 0\n * - sm: 16px\n * - md: 24px\n * - lg: 32px\n */\n readonly gutter = input<ContainerGutter>('md');\n\n /**\n * Padding vertical\n * - none: 0\n * - sm: 16px\n * - md: 24px\n * - lg: 32px\n */\n readonly paddingY = input<ContainerGutter>('none');\n\n /**\n * Classe CSS additionnelle\n */\n readonly customClass = input<string>('');\n\n readonly containerClasses = computed(() => {\n const classes = ['ds-container'];\n classes.push(`ds-container--${this.maxWidth()}`);\n classes.push(`ds-container--gutter-${this.gutter()}`);\n classes.push(`ds-container--padding-y-${this.paddingY()}`);\n\n if (this.center()) {\n classes.push('ds-container--center');\n }\n\n if (this.customClass()) {\n classes.push(this.customClass());\n }\n\n return classes.join(' ');\n });\n\n readonly containerStyle = computed(() => {\n const maxWidthValues: Record<ContainerMaxWidth, string> = {\n fluid: '100%',\n sm: '540px',\n md: '720px',\n lg: '960px',\n xl: '1140px',\n '2xl': '1320px',\n };\n\n return {\n '--container-max-width': maxWidthValues[this.maxWidth()],\n };\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n forwardRef,\n OnDestroy,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faSearch, faXmark, faSpinner } from '@fortawesome/free-solid-svg-icons';\n\nexport type SearchInputSize = 'sm' | 'md' | 'lg';\n\n/**\n * DsSearchInput - Composant de recherche avec debounce\n *\n * @description\n * Input de recherche avec icône, bouton clear, debounce configurable\n * et intégration formulaires via ControlValueAccessor.\n *\n * @example\n * ```html\n * <ds-search-input\n * placeholder=\"Rechercher...\"\n * [debounceTime]=\"300\"\n * (search)=\"onSearch($event)\">\n * </ds-search-input>\n * ```\n */\n@Component({\n selector: 'ds-search-input',\n standalone: true,\n imports: [CommonModule, FormsModule, FontAwesomeModule],\n template: `\n <div [class]=\"containerClasses()\">\n <fa-icon\n class=\"ds-search-input__icon ds-search-input__icon--search\"\n [icon]=\"searchIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n\n <input\n #inputRef\n type=\"text\"\n class=\"ds-search-input__input\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || placeholder()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [ngModel]=\"internalValue()\"\n (ngModelChange)=\"onInputChange($event)\"\n (keydown.enter)=\"onEnter()\"\n (keydown.escape)=\"onClear()\"\n />\n\n @if (loading()) {\n <fa-icon\n class=\"ds-search-input__icon ds-search-input__icon--loading ds-search-input__icon--spin\"\n [icon]=\"spinnerIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n } @else if (showClearButton()) {\n <button\n type=\"button\"\n class=\"ds-search-input__clear\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"onClear()\">\n <fa-icon [icon]=\"clearIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n </div>\n `,\n styleUrls: ['./ds-search-input.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSearchInput),\n multi: true,\n },\n ],\n})\nexport class DsSearchInput implements ControlValueAccessor, OnDestroy {\n /** Taille du composant */\n readonly size = input<SearchInputSize>('md');\n\n /** Placeholder du champ */\n readonly placeholder = input<string>('Rechercher...');\n\n /** Délai de debounce en ms */\n readonly debounceMs = input<number>(300);\n\n /** État désactivé */\n readonly disabled = input<boolean>(false);\n\n /** État de chargement */\n readonly loading = input<boolean>(false);\n\n /** Afficher le bouton clear */\n readonly clearable = input<boolean>(true);\n\n /** Caractères minimum avant recherche */\n readonly minChars = input<number>(0);\n\n /** Label du bouton clear */\n readonly clearLabel = input<string>('Effacer la recherche');\n\n /** Label ARIA */\n readonly ariaLabel = input<string>('');\n\n /** ID de l'élément décrit par ce champ */\n readonly ariaDescribedBy = input<string>('');\n\n /** Événement de recherche (après debounce) */\n readonly search = output<string>();\n\n /** Événement de recherche immédiate (touche Entrée) */\n readonly searchImmediate = output<string>();\n\n /** Événement d'effacement */\n readonly cleared = output<void>();\n\n /** Référence à l'input */\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n\n /** Icônes */\n readonly searchIcon = faSearch;\n readonly clearIcon = faXmark;\n readonly spinnerIcon = faSpinner;\n\n /** Valeur interne (signal pour réactivité) */\n readonly internalValue = signal('');\n\n /** Subject pour debounce */\n private readonly searchSubject = new Subject<string>();\n private readonly destroy$ = new Subject<void>();\n\n /** Callbacks CVA */\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly containerClasses = computed(() => {\n const classes = ['ds-search-input'];\n classes.push(`ds-search-input--${this.size()}`);\n\n if (this.disabled()) {\n classes.push('ds-search-input--disabled');\n }\n\n if (this.loading()) {\n classes.push('ds-search-input--loading');\n }\n\n return classes.join(' ');\n });\n\n readonly showClearButton = computed(() => {\n return this.clearable() && this.internalValue().length > 0 && !this.disabled();\n });\n\n constructor() {\n this.searchSubject\n .pipe(\n debounceTime(this.debounceMs()),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n )\n .subscribe((value) => {\n if (value.length >= this.minChars()) {\n this.search.emit(value);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onInputChange(value: string): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.searchSubject.next(value);\n }\n\n onClear(): void {\n this.internalValue.set('');\n // Force la valeur de l'input natif pour synchronisation immédiate\n const input = this.inputRef();\n if (input) {\n input.nativeElement.value = '';\n }\n this.onChange('');\n this.search.emit('');\n this.cleared.emit();\n this.focus();\n }\n\n onEnter(): void {\n if (this.internalValue().length >= this.minChars()) {\n this.searchImmediate.emit(this.internalValue());\n }\n }\n\n /** Focus sur l'input */\n focus(): void {\n const input = this.inputRef();\n if (input) {\n input.nativeElement.focus();\n }\n }\n\n /** Sélectionner tout le texte */\n selectAll(): void {\n const input = this.inputRef();\n if (input) {\n input.nativeElement.select();\n }\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: string): void {\n this.internalValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // Le disabled est géré via l'input signal\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n forwardRef,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faChevronLeft,\n faChevronRight,\n faCalendar,\n} from '@fortawesome/free-solid-svg-icons';\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg';\nexport type DatePickerMode = 'single' | 'range';\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/**\n * DsDatePicker - Composant de sélection de date\n *\n * @description\n * Calendrier avec navigation mensuelle, sélection simple ou range,\n * et intégration formulaires via ControlValueAccessor.\n *\n * @example\n * ```html\n * <ds-date-picker\n * [mode]=\"'single'\"\n * (dateChange)=\"onDateChange($event)\">\n * </ds-date-picker>\n * ```\n */\n@Component({\n selector: 'ds-date-picker',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule],\n template: `\n <div [class]=\"containerClasses()\">\n <!-- Header avec navigation -->\n <div class=\"ds-date-picker__header\">\n <button\n type=\"button\"\n class=\"ds-date-picker__nav ds-date-picker__nav--prev\"\n [attr.aria-label]=\"prevMonthLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"navigateMonth(-1)\">\n <fa-icon [icon]=\"prevIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <div class=\"ds-date-picker__title\">\n <button\n type=\"button\"\n class=\"ds-date-picker__month-btn\"\n [disabled]=\"disabled()\"\n (click)=\"toggleMonthPicker()\">\n {{ currentMonthName() }}\n </button>\n <button\n type=\"button\"\n class=\"ds-date-picker__year-btn\"\n [disabled]=\"disabled()\"\n (click)=\"toggleYearPicker()\">\n {{ currentYear() }}\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"ds-date-picker__nav ds-date-picker__nav--next\"\n [attr.aria-label]=\"nextMonthLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"navigateMonth(1)\">\n <fa-icon [icon]=\"nextIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n </div>\n\n <!-- Sélecteur de mois -->\n @if (showMonthPicker()) {\n <div class=\"ds-date-picker__month-picker\" role=\"listbox\">\n @for (month of monthNames; track month; let i = $index) {\n <button\n type=\"button\"\n class=\"ds-date-picker__month-option\"\n [class.ds-date-picker__month-option--selected]=\"i === currentMonth()\"\n [disabled]=\"disabled()\"\n role=\"option\"\n [attr.aria-selected]=\"i === currentMonth()\"\n (click)=\"selectMonth(i)\">\n {{ month }}\n </button>\n }\n </div>\n }\n\n <!-- Sélecteur d'année -->\n @if (showYearPicker()) {\n <div class=\"ds-date-picker__year-picker\" role=\"listbox\">\n @for (year of yearRange(); track year) {\n <button\n type=\"button\"\n class=\"ds-date-picker__year-option\"\n [class.ds-date-picker__year-option--selected]=\"year === currentYear()\"\n [disabled]=\"disabled()\"\n role=\"option\"\n [attr.aria-selected]=\"year === currentYear()\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </button>\n }\n </div>\n }\n\n <!-- Calendrier -->\n @if (!showMonthPicker() && !showYearPicker()) {\n <div class=\"ds-date-picker__calendar\" role=\"grid\" [attr.aria-label]=\"calendarLabel()\">\n <!-- En-têtes jours -->\n <div class=\"ds-date-picker__weekdays\" role=\"row\">\n @for (day of weekDays; track day) {\n <div class=\"ds-date-picker__weekday\" role=\"columnheader\">{{ day }}</div>\n }\n </div>\n\n <!-- Grille des jours -->\n <div class=\"ds-date-picker__days\">\n @for (week of calendarWeeks(); track $index) {\n <div class=\"ds-date-picker__week\" role=\"row\">\n @for (day of week; track day.date?.getTime() ?? $index) {\n <button\n type=\"button\"\n class=\"ds-date-picker__day\"\n [class.ds-date-picker__day--other-month]=\"!day.isCurrentMonth\"\n [class.ds-date-picker__day--today]=\"day.isToday\"\n [class.ds-date-picker__day--selected]=\"day.isSelected\"\n [class.ds-date-picker__day--range-start]=\"day.isRangeStart\"\n [class.ds-date-picker__day--range-end]=\"day.isRangeEnd\"\n [class.ds-date-picker__day--in-range]=\"day.isInRange\"\n [class.ds-date-picker__day--disabled]=\"day.isDisabled\"\n [disabled]=\"disabled() || day.isDisabled\"\n role=\"gridcell\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-label]=\"day.ariaLabel\"\n (click)=\"selectDate(day.date)\"\n (keydown)=\"onDayKeydown($event, day.date)\">\n {{ day.dayNumber }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Actions -->\n @if (showTodayButton() || showClearButton()) {\n <div class=\"ds-date-picker__actions\">\n @if (showTodayButton()) {\n <button\n type=\"button\"\n class=\"ds-date-picker__action\"\n [disabled]=\"disabled()\"\n (click)=\"goToToday()\">\n {{ todayLabel() }}\n </button>\n }\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"ds-date-picker__action\"\n [disabled]=\"disabled()\"\n (click)=\"clearSelection()\">\n {{ clearLabel() }}\n </button>\n }\n </div>\n }\n }\n </div>\n `,\n styleUrls: ['./ds-date-picker.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsDatePicker),\n multi: true,\n },\n ],\n})\nexport class DsDatePicker implements ControlValueAccessor, OnInit {\n /** Taille du composant */\n readonly size = input<DatePickerSize>('md');\n\n /** Mode de sélection */\n readonly mode = input<DatePickerMode>('single');\n\n /** État désactivé */\n readonly disabled = input<boolean>(false);\n\n /** Date minimum sélectionnable */\n readonly minDate = input<Date | null>(null);\n\n /** Date maximum sélectionnable */\n readonly maxDate = input<Date | null>(null);\n\n /** Afficher le bouton \"Aujourd'hui\" */\n readonly showTodayButton = input<boolean>(true);\n\n /** Afficher le bouton \"Effacer\" */\n readonly showClearButton = input<boolean>(true);\n\n /** Label du bouton \"Aujourd'hui\" */\n readonly todayLabel = input<string>(\"Aujourd'hui\");\n\n /** Label du bouton \"Effacer\" */\n readonly clearLabel = input<string>('Effacer');\n\n /** Label bouton mois précédent */\n readonly prevMonthLabel = input<string>('Mois précédent');\n\n /** Label bouton mois suivant */\n readonly nextMonthLabel = input<string>('Mois suivant');\n\n /** Événement de changement de date (mode single) */\n readonly dateChange = output<Date | null>();\n\n /** Événement de changement de range */\n readonly rangeChange = output<DateRange>();\n\n /** Icônes */\n readonly prevIcon = faChevronLeft;\n readonly nextIcon = faChevronRight;\n readonly calendarIcon = faCalendar;\n\n /** Jours de la semaine */\n readonly weekDays = ['Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di'];\n\n /** Noms des mois */\n readonly monthNames = [\n 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',\n 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'\n ];\n\n /** État interne */\n readonly currentMonth = signal(new Date().getMonth());\n readonly currentYear = signal(new Date().getFullYear());\n readonly selectedDate = signal<Date | null>(null);\n readonly rangeStart = signal<Date | null>(null);\n readonly rangeEnd = signal<Date | null>(null);\n readonly showMonthPicker = signal(false);\n readonly showYearPicker = signal(false);\n\n /** Callbacks CVA */\n private onChange: (value: Date | DateRange | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly containerClasses = computed(() => {\n const classes = ['ds-date-picker'];\n classes.push(`ds-date-picker--${this.size()}`);\n\n if (this.disabled()) {\n classes.push('ds-date-picker--disabled');\n }\n\n return classes.join(' ');\n });\n\n readonly currentMonthName = computed(() => {\n return this.monthNames[this.currentMonth()];\n });\n\n readonly calendarLabel = computed(() => {\n return `Calendrier ${this.currentMonthName()} ${this.currentYear()}`;\n });\n\n readonly yearRange = computed(() => {\n const currentYear = this.currentYear();\n const years: number[] = [];\n for (let i = currentYear - 10; i <= currentYear + 10; i++) {\n years.push(i);\n }\n return years;\n });\n\n readonly calendarWeeks = computed(() => {\n const year = this.currentYear();\n const month = this.currentMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n\n // Trouver le premier lundi avant ou égal au premier jour du mois\n const startDate = new Date(firstDay);\n const dayOfWeek = startDate.getDay();\n const diff = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // Ajuster pour commencer lundi\n startDate.setDate(startDate.getDate() - diff);\n\n const weeks: CalendarDay[][] = [];\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n let currentDate = new Date(startDate);\n\n for (let w = 0; w < 6; w++) {\n const week: CalendarDay[] = [];\n for (let d = 0; d < 7; d++) {\n const date = new Date(currentDate);\n date.setHours(0, 0, 0, 0);\n\n const isCurrentMonth = date.getMonth() === month;\n const isToday = date.getTime() === today.getTime();\n const isSelected = this.isDateSelected(date);\n const isRangeStart = this.isRangeStartDate(date);\n const isRangeEnd = this.isRangeEndDate(date);\n const isInRange = this.isDateInRange(date);\n const isDisabled = this.isDateDisabled(date);\n\n week.push({\n date,\n dayNumber: date.getDate(),\n isCurrentMonth,\n isToday,\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange,\n isDisabled,\n ariaLabel: this.formatDateForAria(date),\n });\n\n currentDate.setDate(currentDate.getDate() + 1);\n }\n weeks.push(week);\n\n // Arrêter si on a dépassé le mois\n if (currentDate.getMonth() > month && currentDate.getFullYear() >= year) {\n break;\n }\n }\n\n return weeks;\n });\n\n ngOnInit(): void {\n // Initialiser avec la date actuelle si aucune valeur\n }\n\n navigateMonth(delta: number): void {\n let newMonth = this.currentMonth() + delta;\n let newYear = this.currentYear();\n\n if (newMonth < 0) {\n newMonth = 11;\n newYear--;\n } else if (newMonth > 11) {\n newMonth = 0;\n newYear++;\n }\n\n this.currentMonth.set(newMonth);\n this.currentYear.set(newYear);\n this.showMonthPicker.set(false);\n this.showYearPicker.set(false);\n }\n\n toggleMonthPicker(): void {\n this.showMonthPicker.update(v => !v);\n this.showYearPicker.set(false);\n }\n\n toggleYearPicker(): void {\n this.showYearPicker.update(v => !v);\n this.showMonthPicker.set(false);\n }\n\n selectMonth(month: number): void {\n this.currentMonth.set(month);\n this.showMonthPicker.set(false);\n }\n\n selectYear(year: number): void {\n this.currentYear.set(year);\n this.showYearPicker.set(false);\n }\n\n selectDate(date: Date | null): void {\n if (!date || this.disabled() || this.isDateDisabled(date)) {\n return;\n }\n\n if (this.mode() === 'single') {\n this.selectedDate.set(date);\n this.dateChange.emit(date);\n this.onChange(date);\n } else {\n // Mode range\n const start = this.rangeStart();\n const end = this.rangeEnd();\n\n if (!start || (start && end)) {\n // Nouvelle sélection\n this.rangeStart.set(date);\n this.rangeEnd.set(null);\n } else {\n // Compléter la sélection\n if (date < start) {\n this.rangeStart.set(date);\n this.rangeEnd.set(start);\n } else {\n this.rangeEnd.set(date);\n }\n const range: DateRange = {\n start: this.rangeStart(),\n end: this.rangeEnd(),\n };\n this.rangeChange.emit(range);\n this.onChange(range);\n }\n }\n\n this.onTouched();\n }\n\n goToToday(): void {\n const today = new Date();\n this.currentMonth.set(today.getMonth());\n this.currentYear.set(today.getFullYear());\n this.showMonthPicker.set(false);\n this.showYearPicker.set(false);\n }\n\n clearSelection(): void {\n if (this.mode() === 'single') {\n this.selectedDate.set(null);\n this.dateChange.emit(null);\n this.onChange(null);\n } else {\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n const range: DateRange = { start: null, end: null };\n this.rangeChange.emit(range);\n this.onChange(range);\n }\n }\n\n onDayKeydown(event: KeyboardEvent, date: Date | null): void {\n if (!date) return;\n\n let newDate: Date | null = null;\n\n switch (event.key) {\n case 'ArrowLeft':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() - 1);\n break;\n case 'ArrowRight':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() + 1);\n break;\n case 'ArrowUp':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() - 7);\n break;\n case 'ArrowDown':\n newDate = new Date(date);\n newDate.setDate(newDate.getDate() + 7);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.selectDate(date);\n return;\n default:\n return;\n }\n\n if (newDate) {\n event.preventDefault();\n // Naviguer vers le mois si nécessaire\n if (newDate.getMonth() !== this.currentMonth() ||\n newDate.getFullYear() !== this.currentYear()) {\n this.currentMonth.set(newDate.getMonth());\n this.currentYear.set(newDate.getFullYear());\n }\n }\n }\n\n private isDateSelected(date: Date): boolean {\n if (this.mode() === 'single') {\n const selected = this.selectedDate();\n return selected ? this.isSameDay(date, selected) : false;\n }\n return this.isRangeStartDate(date) || this.isRangeEndDate(date);\n }\n\n private isRangeStartDate(date: Date): boolean {\n const start = this.rangeStart();\n return start ? this.isSameDay(date, start) : false;\n }\n\n private isRangeEndDate(date: Date): boolean {\n const end = this.rangeEnd();\n return end ? this.isSameDay(date, end) : false;\n }\n\n private isDateInRange(date: Date): boolean {\n if (this.mode() !== 'range') return false;\n const start = this.rangeStart();\n const end = this.rangeEnd();\n if (!start || !end) return false;\n return date > start && date < end;\n }\n\n private isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n if (min && date < min) return true;\n if (max && date > max) return true;\n return false;\n }\n\n private isSameDay(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n }\n\n private formatDateForAria(date: Date): string {\n return date.toLocaleDateString('fr-FR', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: Date | DateRange | null): void {\n if (!value) {\n this.selectedDate.set(null);\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n return;\n }\n\n if (value instanceof Date) {\n this.selectedDate.set(value);\n this.currentMonth.set(value.getMonth());\n this.currentYear.set(value.getFullYear());\n } else if ('start' in value && 'end' in value) {\n this.rangeStart.set(value.start);\n this.rangeEnd.set(value.end);\n if (value.start) {\n this.currentMonth.set(value.start.getMonth());\n this.currentYear.set(value.start.getFullYear());\n }\n }\n }\n\n registerOnChange(fn: (value: Date | DateRange | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // Géré via l'input signal\n }\n}\n\ninterface CalendarDay {\n date: Date;\n dayNumber: number;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isInRange: boolean;\n isDisabled: boolean;\n ariaLabel: string;\n}\n","import { Component, computed, input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AvatarShape = 'circle' | 'rounded' | 'square';\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'ds-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ds-avatar.html',\n styleUrls: ['./ds-avatar.scss'],\n})\nexport class DsAvatar {\n /** URL de l'image avatar */\n readonly src = input<string | undefined>(undefined);\n\n /** Texte alternatif pour l'image */\n readonly alt = input<string>('');\n\n /** Nom complet pour générer les initiales */\n readonly name = input<string>('');\n\n /** Initiales personnalisées (priorité sur name) */\n readonly initials = input<string | undefined>(undefined);\n\n /** Forme de l'avatar */\n readonly shape = input<AvatarShape>('circle');\n\n /** Taille de l'avatar */\n readonly size = input<AvatarSize>('md');\n\n /** Générer automatiquement une couleur de fond à partir des initiales */\n readonly autoColor = input<boolean>(false);\n\n /** État interne pour l'erreur de chargement d'image */\n private readonly imageError = signal<boolean>(false);\n\n /** Indique si l'image doit être affichée */\n readonly showImage = computed(() => !!this.src() && !this.imageError());\n\n /** Initiales à afficher (générées ou fournies) */\n readonly displayInitials = computed(() => {\n const customInitials = this.initials();\n if (customInitials) {\n return customInitials.substring(0, 2).toUpperCase();\n }\n\n const name = this.name();\n if (!name) return '';\n\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].substring(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n\n /** Classes CSS du conteneur */\n readonly containerClasses = computed(() => ({\n 'ds-avatar': true,\n [`ds-avatar--${this.shape()}`]: true,\n [`ds-avatar--${this.size()}`]: true,\n 'ds-avatar--has-image': this.showImage(),\n 'ds-avatar--initials': !this.showImage(),\n }));\n\n /** Couleur de fond auto-générée */\n readonly generatedBgColor = computed(() => {\n // Ne pas appliquer de couleur si une image est affichée\n if (this.showImage()) return null;\n if (!this.autoColor()) return null;\n const initials = this.displayInitials();\n if (!initials) return null;\n\n // Algorithme de hash simple vers couleur HSL\n let hash = 0;\n for (let i = 0; i < initials.length; i++) {\n hash = initials.charCodeAt(i) + ((hash << 5) - hash);\n }\n const hue = Math.abs(hash % 360);\n return `hsl(${hue}, 65%, 45%)`;\n });\n\n /** Label ARIA pour l'accessibilité */\n readonly ariaLabel = computed(() => {\n const alt = this.alt();\n if (alt) return alt;\n const name = this.name();\n if (name) return `Avatar de ${name}`;\n return 'Avatar';\n });\n\n /** Gestionnaire d'erreur de chargement d'image */\n onImageError(): void {\n this.imageError.set(true);\n }\n\n /** Gestionnaire de chargement réussi d'image */\n onImageLoad(): void {\n this.imageError.set(false);\n }\n}\n","<div\n [ngClass]=\"containerClasses()\"\n [style.background-color]=\"generatedBgColor()\"\n [attr.role]=\"showImage() ? null : 'img'\"\n [attr.aria-label]=\"showImage() ? null : ariaLabel()\"\n>\n @if (showImage()) {\n <img\n [src]=\"src()\"\n [alt]=\"ariaLabel()\"\n class=\"ds-avatar__image\"\n (error)=\"onImageError()\"\n (load)=\"onImageLoad()\"\n />\n } @else {\n <span class=\"ds-avatar__initials\" aria-hidden=\"true\">\n {{ displayInitials() }}\n </span>\n }\n</div>\n","import {\n Component,\n ElementRef,\n ViewChild,\n ViewChildren,\n QueryList,\n computed,\n input,\n output,\n signal,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { DROPDOWN_POSITIONS } from '../../utils/overlay-positions';\n\nexport interface MenuItem {\n /** Identifiant unique de l'item */\n id: string;\n /** Label affiché */\n label: string;\n /** Icône FontAwesome optionnelle */\n icon?: IconDefinition;\n /** Item désactivé */\n disabled?: boolean;\n /** Séparateur avant cet item */\n dividerBefore?: boolean;\n}\n\nexport type MenuTrigger = 'click' | 'contextmenu';\nexport type MenuSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ds-menu',\n standalone: true,\n imports: [CommonModule, FaIconComponent, CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './ds-menu.html',\n styleUrls: ['./ds-menu.scss'],\n})\nexport class DsMenu implements OnDestroy {\n /** Liste des items du menu */\n readonly items = input.required<MenuItem[]>();\n\n /** Taille du menu */\n readonly size = input<MenuSize>('md');\n\n /** Événement déclencheur */\n readonly trigger = input<MenuTrigger>('click');\n\n /** Fermer le menu après sélection */\n readonly closeOnSelect = input<boolean>(true);\n\n /** Label ARIA pour l'accessibilité */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** Événement émis lors de la sélection d'un item */\n readonly itemSelected = output<MenuItem>();\n\n /** Événement émis à l'ouverture du menu */\n readonly opened = output<void>();\n\n /** Événement émis à la fermeture du menu */\n readonly closed = output<void>();\n\n @ViewChild('menuTrigger', { read: ElementRef }) triggerElement?: ElementRef;\n @ViewChildren('menuItemRef') menuItemsRef?: QueryList<ElementRef<HTMLButtonElement>>;\n\n /** État interne d'ouverture */\n private readonly menuOpen = signal<boolean>(false);\n\n /** Index de l'item actif pour la navigation clavier */\n private readonly internalActiveIndex = signal<number>(-1);\n\n /** Exposition en lecture seule de l'index actif */\n readonly activeIndex = computed(() => this.internalActiveIndex());\n\n /** État d'ouverture du menu (lecture seule) */\n readonly isOpen = computed(() => this.menuOpen());\n\n /** Positions pour l'overlay CDK */\n readonly overlayPositions = DROPDOWN_POSITIONS;\n\n /** Classes CSS du panel menu */\n readonly menuClasses = computed(() => ({\n 'ds-menu__panel': true,\n [`ds-menu__panel--${this.size()}`]: true,\n }));\n\n /** ID de l'item actif pour aria-activedescendant */\n readonly activeDescendantId = computed(() => {\n const items = this.items();\n const index = this.internalActiveIndex();\n if (index < 0 || index >= items.length) return undefined;\n return `menu-item-${items[index].id}`;\n });\n\n /** Ouvre le menu */\n open(): void {\n if (this.isOpen()) return;\n this.menuOpen.set(true);\n this.internalActiveIndex.set(this.findFirstEnabledIndex());\n this.opened.emit();\n queueMicrotask(() => this.focusActiveItem());\n }\n\n /** Ferme le menu */\n close(refocusTrigger = true): void {\n if (!this.isOpen()) return;\n this.menuOpen.set(false);\n this.internalActiveIndex.set(-1);\n if (refocusTrigger) {\n this.triggerElement?.nativeElement?.focus();\n }\n this.closed.emit();\n }\n\n /** Bascule l'état du menu */\n toggle(): void {\n this.isOpen() ? this.close() : this.open();\n }\n\n /** Sélectionne un item */\n selectItem(item: MenuItem): void {\n if (item.disabled) return;\n this.itemSelected.emit(item);\n if (this.closeOnSelect()) {\n this.close();\n }\n }\n\n /** Gestionnaire de clic sur le trigger */\n onTriggerClick(event: MouseEvent): void {\n if (this.trigger() === 'click') {\n event.preventDefault();\n this.toggle();\n }\n }\n\n /** Gestionnaire de clic droit sur le trigger */\n onTriggerContextMenu(event: MouseEvent): void {\n if (this.trigger() === 'contextmenu') {\n event.preventDefault();\n this.open();\n }\n }\n\n /** Gestionnaire de clavier sur le trigger */\n onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.open();\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n /** Gestionnaire de clavier dans le menu */\n onMenuKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveToNextEnabled(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveToNextEnabled(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.setActiveIndex(this.findFirstEnabledIndex());\n break;\n case 'End':\n event.preventDefault();\n this.setActiveIndex(this.findLastEnabledIndex());\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.selectActiveItem();\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close(false);\n break;\n }\n }\n\n /** Met à jour l'index actif au survol */\n onItemMouseEnter(index: number): void {\n if (!this.isOpen()) return;\n const item = this.items()[index];\n if (!item?.disabled) {\n this.internalActiveIndex.set(index);\n }\n }\n\n /** Gestionnaire de clic sur le backdrop */\n onBackdropClick(): void {\n this.close();\n }\n\n ngOnDestroy(): void {\n this.close(false);\n }\n\n /** Trouve l'index du premier item activable */\n private findFirstEnabledIndex(): number {\n return this.items().findIndex(item => !item.disabled);\n }\n\n /** Trouve l'index du dernier item activable */\n private findLastEnabledIndex(): number {\n const items = this.items();\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].disabled) return i;\n }\n return -1;\n }\n\n /** Navigue vers le prochain item activable */\n private moveToNextEnabled(direction: 1 | -1): void {\n const items = this.items();\n if (!items.length) return;\n\n let index = this.internalActiveIndex();\n const startIndex = index;\n\n do {\n index += direction;\n if (index < 0) index = items.length - 1;\n if (index >= items.length) index = 0;\n if (!items[index].disabled) {\n this.setActiveIndex(index);\n return;\n }\n } while (index !== startIndex);\n }\n\n /** Définit l'index actif et focus l'élément */\n private setActiveIndex(index: number): void {\n this.internalActiveIndex.set(index);\n this.focusActiveItem();\n }\n\n /** Focus l'item actif */\n private focusActiveItem(): void {\n const items = this.menuItemsRef?.toArray();\n const index = this.internalActiveIndex();\n if (items && index >= 0 && index < items.length) {\n items[index].nativeElement.focus();\n }\n }\n\n /** Sélectionne l'item actuellement actif */\n private selectActiveItem(): void {\n const items = this.items();\n const index = this.internalActiveIndex();\n if (index >= 0 && index < items.length) {\n this.selectItem(items[index]);\n }\n }\n}\n","<div\n #menuTrigger\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"onTriggerClick($event)\"\n (contextmenu)=\"onTriggerContextMenu($event)\"\n (keydown)=\"onTriggerKeydown($event)\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"ds-menu__trigger\"\n>\n <ng-content select=\"[dsMenuTrigger]\"></ng-content>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'ds-menu-backdrop'\"\n (backdropClick)=\"onBackdropClick()\"\n (detach)=\"close(false)\"\n>\n <div\n [ngClass]=\"menuClasses()\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onMenuKeydown($event)\"\n >\n @for (item of items(); track item.id; let index = $index) {\n @if (item.dividerBefore) {\n <div class=\"ds-menu__divider\" role=\"separator\"></div>\n }\n <button\n #menuItemRef\n type=\"button\"\n class=\"ds-menu__item\"\n [class.ds-menu__item--disabled]=\"item.disabled\"\n [class.ds-menu__item--active]=\"activeIndex() === index\"\n [attr.id]=\"'menu-item-' + item.id\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"selectItem(item)\"\n (mouseenter)=\"onItemMouseEnter(index)\"\n >\n @if (item.icon) {\n <fa-icon [icon]=\"item.icon\" class=\"ds-menu__item-icon\"></fa-icon>\n }\n <span class=\"ds-menu__item-label\">{{ item.label }}</span>\n </button>\n }\n </div>\n</ng-template>\n","/*\n * Components barrel export\n */\n\n// Design System components exports\nexport {\n DsAlert,\n type AlertType,\n type AlertSize,\n} from './ds-alert/ds-alert';\n\nexport { DsBadge } from './ds-badge/ds-badge';\n\nexport {\n DsBreadcrumb,\n type BreadcrumbItem,\n} from './ds-breadcrumb/ds-breadcrumb';\n\nexport { DsButton } from './ds-button/ds-button';\n\nexport {\n DsCard,\n type CardVariant,\n type CardSize,\n} from './ds-card/ds-card';\n\nexport { DsCheckbox } from './ds-checkbox/ds-checkbox';\n\nexport {\n DsDivider,\n type DividerOrientation,\n type DividerVariant,\n type DividerSize,\n type DividerLabelPosition,\n} from './ds-divider/ds-divider';\n\nexport { DsDropdown } from './ds-dropdown/ds-dropdown';\n\nexport {\n type DropdownItem,\n type DropdownItemDTO,\n} from './ds-dropdown/model/dropdown-item.model';\n\nexport { DsInputField } from './ds-input-field/ds-input-field';\n\nexport { DsInputTextarea } from './ds-input-textarea/ds-input-textarea';\n\nexport { DsModalComponent } from './ds-modal/ds-modal.component';\n\nexport { DsPopoverComponent } from './ds-popover/ds-popover.component';\n\nexport {\n DsPopover,\n type PopoverTrigger,\n} from './ds-popover/ds-popover.directive';\n\nexport {\n DsProgressBar,\n type ProgressBarVariant,\n type ProgressBarSize,\n type ProgressBarMode,\n} from './ds-progress-bar/ds-progress-bar';\n\nexport {\n DsRadioGroup,\n type RadioOption,\n type RadioGroupLayout,\n} from './ds-radio-group/ds-radio-group';\n\nexport {\n DsSkeleton,\n type SkeletonVariant,\n type SkeletonSize,\n} from './ds-skeleton/ds-skeleton';\n\nexport {\n DsTabs,\n type TabItem,\n} from './ds-tabs/ds-tabs';\n\nexport { DsToastContainerComponent } from './ds-toast/ds-toast-container.component';\n\nexport { DsToastComponent } from './ds-toast/ds-toast.component';\n\nexport {\n DsToastService,\n type ToastType,\n type ToastPosition,\n type ToastOptions,\n type ToastInstance,\n} from './ds-toast/ds-toast.service';\n\nexport { DsToggle } from './ds-toggle/ds-toggle';\n\nexport { DsTooltipComponent } from './ds-tooltip/ds-tooltip.component';\n\nexport { DsTooltip } from './ds-tooltip/ds-tooltip.directive';\n\nexport {\n DsAccordion,\n type AccordionItem,\n type AccordionSize,\n type AccordionVariant,\n type AccordionChangeEvent,\n} from './ds-accordion/ds-accordion';\n\nexport {\n DsPagination,\n type PaginationSize,\n type PageSizeOption,\n type PageChangeEvent,\n} from './ds-pagination/ds-pagination';\n\nexport {\n DsStepper,\n type Step,\n type StepState,\n type StepperOrientation,\n type StepperSize,\n type StepChangeEvent,\n} from './ds-stepper/ds-stepper';\n\nexport {\n DsSelect,\n type DsSelectOption,\n type DsSelectSize,\n} from './ds-select/ds-select';\n\nexport {\n DsTable,\n type DsTableColumn,\n type DsTableSize,\n type DsTableVariant,\n type SortDirection,\n type SortEvent,\n type TableState,\n} from './ds-table/ds-table';\n\nexport {\n DsCombobox,\n type DsComboboxOption,\n type DsComboboxSize,\n} from './ds-combobox/ds-combobox';\n\nexport {\n DsContainer,\n type ContainerMaxWidth,\n type ContainerGutter,\n} from './ds-container/ds-container';\n\nexport {\n DsSearchInput,\n type SearchInputSize,\n} from './ds-search-input/ds-search-input';\n\nexport {\n DsDatePicker,\n type DatePickerSize,\n type DatePickerMode,\n type DateRange,\n} from './ds-date-picker/ds-date-picker';\n\nexport {\n DsAvatar,\n type AvatarShape,\n type AvatarSize,\n} from './ds-avatar/ds-avatar';\n\nexport {\n DsMenu,\n type MenuItem,\n type MenuTrigger,\n type MenuSize,\n} from './ds-menu/ds-menu';\n","import type { Args, ArgTypes } from '@storybook/angular';\nimport type { ButtonVariant, ButtonAppearance, ButtonSize } from '../primitives/primitive-button/primitive-button';\n\nexport const BUTTON_VARIANT_OPTIONS = ['primary', 'secondary', 'ghost', 'success', 'warning', 'error', 'info'] as const;\nexport const BUTTON_APPEARANCE_OPTIONS = ['solid', 'outline'] as const;\nexport const BUTTON_SIZE_OPTIONS = ['sm', 'md', 'lg'] as const;\n\ninterface ArgTypeOptions {\n includeLoading?: boolean;\n includeBlock?: boolean;\n variantDescription?: string;\n appearanceDescription?: string;\n sizeDescription?: string;\n disabledDescription?: string;\n loadingDescription?: string;\n blockDescription?: string;\n}\n\nexport const buildButtonArgTypes = ({\n includeLoading = true,\n includeBlock = true,\n variantDescription = 'Variante visuelle',\n appearanceDescription = 'Apparence',\n sizeDescription = 'Taille',\n disabledDescription = 'Désactivé',\n loadingDescription = 'En chargement',\n blockDescription = 'Pleine largeur',\n}: ArgTypeOptions = {}): ArgTypes<Args> => ({\n variant: {\n control: 'select',\n options: BUTTON_VARIANT_OPTIONS,\n description: variantDescription,\n },\n appearance: {\n control: 'select',\n options: BUTTON_APPEARANCE_OPTIONS,\n description: appearanceDescription,\n },\n size: {\n control: 'select',\n options: BUTTON_SIZE_OPTIONS,\n description: sizeDescription,\n },\n disabled: {\n control: 'boolean',\n description: disabledDescription,\n },\n ...(includeLoading\n ? {\n loading: {\n control: 'boolean',\n description: loadingDescription,\n },\n }\n : {}),\n ...(includeBlock\n ? {\n block: {\n control: 'boolean',\n description: blockDescription,\n },\n }\n : {}),\n});\n\ninterface ArgOptions {\n includeLoading?: boolean;\n includeBlock?: boolean;\n}\n\nexport const buildButtonArgs = ({ includeLoading = true, includeBlock = true }: ArgOptions = {}) => ({\n variant: 'primary' as ButtonVariant,\n appearance: 'solid' as ButtonAppearance,\n size: 'md' as ButtonSize,\n disabled: false,\n ...(includeLoading ? { loading: false } : {}),\n ...(includeBlock ? { block: false } : {}),\n});\n\ninterface ButtonBindings {\n variant: string;\n appearance?: string;\n size: string;\n disabled?: string;\n loading?: string;\n block?: string;\n}\n\nexport const createVariantRender = (\n tagName: string,\n bindings: ButtonBindings,\n extraAttributes = '',\n) =>\n (args: Args) => ({\n props: { ...args, variants: BUTTON_VARIANT_OPTIONS },\n template: `\n <div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\">\n <${tagName}\n *ngFor=\"let variant of variants\"\n [${bindings.variant}]=\"variant\"${bindings.appearance ? `\n [${bindings.appearance}]=\"appearance\"` : ''}\n [${bindings.size}]=\"size\"${bindings.disabled ? `\n [${bindings.disabled}]=\"disabled\"` : ''}${bindings.loading ? `\n [${bindings.loading}]=\"loading\"` : ''}${bindings.block ? `\n [${bindings.block}]=\"block\"` : ''}${extraAttributes ? `\n ${extraAttributes}` : ''}>\n {{ variant }}\n </${tagName}>\n </div>\n `,\n });\n\nexport const createSizeRender = (\n tagName: string,\n bindings: ButtonBindings,\n extraAttributes = '',\n) =>\n (args: Args) => ({\n props: { ...args, sizes: BUTTON_SIZE_OPTIONS },\n template: `\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <${tagName}\n *ngFor=\"let size of sizes\"\n [${bindings.size}]=\"size\"${bindings.variant ? `\n [${bindings.variant}]=\"variant\"` : ''}${bindings.appearance ? `\n [${bindings.appearance}]=\"appearance\"` : ''}${bindings.disabled ? `\n [${bindings.disabled}]=\"disabled\"` : ''}${bindings.loading ? `\n [${bindings.loading}]=\"loading\"` : ''}${bindings.block ? `\n [${bindings.block}]=\"block\"` : ''}${extraAttributes ? `\n ${extraAttributes}` : ''}>\n {{ size }}\n </${tagName}>\n </div>\n `,\n });\n","import { Injectable } from '@angular/core';\nimport { FaIconLibrary } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\n\n/**\n * Service centralisé pour l'enregistrement des icônes FontAwesome.\n *\n * @description\n * Permet d'enregistrer des icônes de manière lazy et centralisée, évitant\n * d'importer toutes les icônes FontAwesome dans chaque composant. Les composants\n * peuvent utiliser les icônes enregistrées via leur nom plutôt que via l'objet complet.\n *\n * @example\n * ```typescript\n * // Dans app.config.ts ou main.ts\n * import { IconRegistryService } from 'ds-angular';\n * import { faCheck, faTimes, faExclamation } from '@fortawesome/free-solid-svg-icons';\n *\n * const iconRegistry = inject(IconRegistryService);\n * iconRegistry.registerIcons([faCheck, faTimes, faExclamation]);\n * ```\n *\n * @example\n * ```typescript\n * // Enregistrement par groupe thématique\n * import { faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';\n *\n * iconRegistry.registerIconGroup('validation', [faCheck, faTimes]);\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class IconRegistryService {\n private registeredIcons = new Set<string>();\n private iconGroups = new Map<string, IconDefinition[]>();\n\n constructor(private library: FaIconLibrary) {}\n\n /**\n * Enregistre une ou plusieurs icônes FontAwesome dans la bibliothèque globale.\n *\n * @param icons - Tableau d'icônes FontAwesome à enregistrer\n * @returns Le service lui-même pour chaînage\n *\n * @example\n * ```typescript\n * iconRegistry.registerIcons([faUser, faEnvelope, faPhone]);\n * ```\n */\n registerIcons(icons: IconDefinition[]): this {\n icons.forEach(icon => {\n const iconName = `${icon.prefix}-${icon.iconName}`;\n if (!this.registeredIcons.has(iconName)) {\n this.library.addIcons(icon);\n this.registeredIcons.add(iconName);\n }\n });\n return this;\n }\n\n /**\n * Enregistre un groupe d'icônes sous un nom thématique.\n *\n * @param groupName - Nom du groupe (ex: 'forms', 'navigation')\n * @param icons - Tableau d'icônes du groupe\n * @returns Le service lui-même pour chaînage\n *\n * @example\n * ```typescript\n * iconRegistry.registerIconGroup('forms', [\n * faCheck, faTimes, faExclamation, faInfo\n * ]);\n * ```\n */\n registerIconGroup(groupName: string, icons: IconDefinition[]): this {\n this.iconGroups.set(groupName, icons);\n return this.registerIcons(icons);\n }\n\n /**\n * Vérifie si une icône est déjà enregistrée.\n *\n * @param iconName - Nom de l'icône (format: 'prefix-iconName')\n * @returns true si l'icône est enregistrée\n *\n * @example\n * ```typescript\n * if (!iconRegistry.isIconRegistered('fas-check')) {\n * iconRegistry.registerIcons([faCheck]);\n * }\n * ```\n */\n isIconRegistered(iconName: string): boolean {\n return this.registeredIcons.has(iconName);\n }\n\n /**\n * Récupère tous les noms d'icônes enregistrées.\n *\n * @returns Tableau des noms d'icônes enregistrées\n */\n getRegisteredIcons(): string[] {\n return Array.from(this.registeredIcons);\n }\n\n /**\n * Récupère les icônes d'un groupe thématique.\n *\n * @param groupName - Nom du groupe\n * @returns Icônes du groupe ou undefined si le groupe n'existe pas\n */\n getIconGroup(groupName: string): IconDefinition[] | undefined {\n return this.iconGroups.get(groupName);\n }\n\n /**\n * Liste tous les groupes d'icônes enregistrés.\n *\n * @returns Tableau des noms de groupes\n */\n getIconGroups(): string[] {\n return Array.from(this.iconGroups.keys());\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\n/**\n * Locales supportées.\n */\nexport type SupportedLocale = 'fr' | 'en' | 'es' | 'de';\n\n/**\n * Structure des labels i18n.\n */\nexport interface I18nLabels {\n // Actions communes\n close: string;\n cancel: string;\n confirm: string;\n save: string;\n delete: string;\n edit: string;\n add: string;\n search: string;\n clear: string;\n reset: string;\n\n // États\n loading: string;\n error: string;\n success: string;\n warning: string;\n info: string;\n\n // Navigation\n previous: string;\n next: string;\n first: string;\n last: string;\n page: string;\n of: string;\n\n // Formulaires\n required: string;\n optional: string;\n invalidEmail: string;\n invalidUrl: string;\n minLength: string;\n maxLength: string;\n minValue: string;\n maxValue: string;\n\n // Accessibilité\n expandAll: string;\n collapseAll: string;\n openMenu: string;\n closeMenu: string;\n selectOption: string;\n selectedOption: string;\n noResults: string;\n\n // Pagination\n itemsPerPage: string;\n showingItems: string;\n goToPage: string;\n\n // Stepper\n stepCompleted: string;\n stepActive: string;\n stepPending: string;\n stepError: string;\n}\n\n/**\n * Labels par défaut en français.\n */\nconst FR_LABELS: I18nLabels = {\n // Actions communes\n close: 'Fermer',\n cancel: 'Annuler',\n confirm: 'Confirmer',\n save: 'Enregistrer',\n delete: 'Supprimer',\n edit: 'Modifier',\n add: 'Ajouter',\n search: 'Rechercher',\n clear: 'Effacer',\n reset: 'Réinitialiser',\n\n // États\n loading: 'Chargement en cours...',\n error: 'Une erreur est survenue',\n success: 'Opération réussie',\n warning: 'Attention',\n info: 'Information',\n\n // Navigation\n previous: 'Précédent',\n next: 'Suivant',\n first: 'Premier',\n last: 'Dernier',\n page: 'Page',\n of: 'sur',\n\n // Formulaires\n required: 'Ce champ est requis',\n optional: 'Optionnel',\n invalidEmail: 'Adresse email invalide',\n invalidUrl: 'URL invalide',\n minLength: 'Minimum {min} caractères requis',\n maxLength: 'Maximum {max} caractères autorisés',\n minValue: 'La valeur minimale est {min}',\n maxValue: 'La valeur maximale est {max}',\n\n // Accessibilité\n expandAll: 'Tout déplier',\n collapseAll: 'Tout replier',\n openMenu: 'Ouvrir le menu',\n closeMenu: 'Fermer le menu',\n selectOption: 'Sélectionner une option',\n selectedOption: 'Option sélectionnée',\n noResults: 'Aucun résultat',\n\n // Pagination\n itemsPerPage: 'Éléments par page',\n showingItems: '{start} - {end} sur {total}',\n goToPage: 'Aller à la page {page}',\n\n // Stepper\n stepCompleted: 'Étape terminée',\n stepActive: 'Étape en cours',\n stepPending: 'Étape en attente',\n stepError: 'Erreur à cette étape',\n};\n\n/**\n * Labels en anglais.\n */\nconst EN_LABELS: I18nLabels = {\n // Actions communes\n close: 'Close',\n cancel: 'Cancel',\n confirm: 'Confirm',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n add: 'Add',\n search: 'Search',\n clear: 'Clear',\n reset: 'Reset',\n\n // États\n loading: 'Loading...',\n error: 'An error occurred',\n success: 'Operation successful',\n warning: 'Warning',\n info: 'Information',\n\n // Navigation\n previous: 'Previous',\n next: 'Next',\n first: 'First',\n last: 'Last',\n page: 'Page',\n of: 'of',\n\n // Formulaires\n required: 'This field is required',\n optional: 'Optional',\n invalidEmail: 'Invalid email address',\n invalidUrl: 'Invalid URL',\n minLength: 'Minimum {min} characters required',\n maxLength: 'Maximum {max} characters allowed',\n minValue: 'Minimum value is {min}',\n maxValue: 'Maximum value is {max}',\n\n // Accessibilité\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n openMenu: 'Open menu',\n closeMenu: 'Close menu',\n selectOption: 'Select an option',\n selectedOption: 'Selected option',\n noResults: 'No results',\n\n // Pagination\n itemsPerPage: 'Items per page',\n showingItems: '{start} - {end} of {total}',\n goToPage: 'Go to page {page}',\n\n // Stepper\n stepCompleted: 'Step completed',\n stepActive: 'Current step',\n stepPending: 'Pending step',\n stepError: 'Error at this step',\n};\n\n/**\n * Labels en espagnol.\n */\nconst ES_LABELS: I18nLabels = {\n close: 'Cerrar',\n cancel: 'Cancelar',\n confirm: 'Confirmar',\n save: 'Guardar',\n delete: 'Eliminar',\n edit: 'Editar',\n add: 'Añadir',\n search: 'Buscar',\n clear: 'Borrar',\n reset: 'Restablecer',\n loading: 'Cargando...',\n error: 'Se produjo un error',\n success: 'Operación exitosa',\n warning: 'Advertencia',\n info: 'Información',\n previous: 'Anterior',\n next: 'Siguiente',\n first: 'Primero',\n last: 'Último',\n page: 'Página',\n of: 'de',\n required: 'Este campo es obligatorio',\n optional: 'Opcional',\n invalidEmail: 'Correo electrónico inválido',\n invalidUrl: 'URL inválida',\n minLength: 'Mínimo {min} caracteres requeridos',\n maxLength: 'Máximo {max} caracteres permitidos',\n minValue: 'El valor mínimo es {min}',\n maxValue: 'El valor máximo es {max}',\n expandAll: 'Expandir todo',\n collapseAll: 'Contraer todo',\n openMenu: 'Abrir menú',\n closeMenu: 'Cerrar menú',\n selectOption: 'Seleccionar una opción',\n selectedOption: 'Opción seleccionada',\n noResults: 'Sin resultados',\n itemsPerPage: 'Elementos por página',\n showingItems: '{start} - {end} de {total}',\n goToPage: 'Ir a la página {page}',\n stepCompleted: 'Paso completado',\n stepActive: 'Paso actual',\n stepPending: 'Paso pendiente',\n stepError: 'Error en este paso',\n};\n\n/**\n * Labels en allemand.\n */\nconst DE_LABELS: I18nLabels = {\n close: 'Schließen',\n cancel: 'Abbrechen',\n confirm: 'Bestätigen',\n save: 'Speichern',\n delete: 'Löschen',\n edit: 'Bearbeiten',\n add: 'Hinzufügen',\n search: 'Suchen',\n clear: 'Löschen',\n reset: 'Zurücksetzen',\n loading: 'Wird geladen...',\n error: 'Ein Fehler ist aufgetreten',\n success: 'Operation erfolgreich',\n warning: 'Warnung',\n info: 'Information',\n previous: 'Zurück',\n next: 'Weiter',\n first: 'Erste',\n last: 'Letzte',\n page: 'Seite',\n of: 'von',\n required: 'Dieses Feld ist erforderlich',\n optional: 'Optional',\n invalidEmail: 'Ungültige E-Mail-Adresse',\n invalidUrl: 'Ungültige URL',\n minLength: 'Mindestens {min} Zeichen erforderlich',\n maxLength: 'Maximal {max} Zeichen erlaubt',\n minValue: 'Der Mindestwert ist {min}',\n maxValue: 'Der Maximalwert ist {max}',\n expandAll: 'Alle erweitern',\n collapseAll: 'Alle reduzieren',\n openMenu: 'Menü öffnen',\n closeMenu: 'Menü schließen',\n selectOption: 'Option auswählen',\n selectedOption: 'Ausgewählte Option',\n noResults: 'Keine Ergebnisse',\n itemsPerPage: 'Elemente pro Seite',\n showingItems: '{start} - {end} von {total}',\n goToPage: 'Gehe zu Seite {page}',\n stepCompleted: 'Schritt abgeschlossen',\n stepActive: 'Aktueller Schritt',\n stepPending: 'Ausstehender Schritt',\n stepError: 'Fehler bei diesem Schritt',\n};\n\n/**\n * Map des labels par locale.\n */\nconst LABELS_MAP: Record<SupportedLocale, I18nLabels> = {\n fr: FR_LABELS,\n en: EN_LABELS,\n es: ES_LABELS,\n de: DE_LABELS,\n};\n\n/**\n * # DsI18nService\n *\n * Service d'internationalisation pour les labels des composants du design system.\n * Fournit des labels traduits pour les actions communes, états, navigation, etc.\n *\n * ## Usage\n *\n * ```typescript\n * import { DsI18nService } from 'ds-angular';\n *\n * @Component({...})\n * export class MyComponent {\n * private i18n = inject(DsI18nService);\n *\n * closeLabel = this.i18n.get('close');\n *\n * ngOnInit() {\n * // Changer la locale\n * this.i18n.setLocale('en');\n * }\n * }\n * ```\n *\n * ## Locales supportées\n *\n * - `fr` : Français (défaut)\n * - `en` : English\n * - `es` : Español\n * - `de` : Deutsch\n *\n * @service\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DsI18nService {\n /**\n * Locale courante.\n */\n private readonly _locale = signal<SupportedLocale>('fr');\n\n /**\n * Labels personnalisés (surcharge partielle).\n */\n private readonly _customLabels = signal<Partial<I18nLabels>>({});\n\n /**\n * Locale courante (lecture seule).\n */\n readonly locale = this._locale.asReadonly();\n\n /**\n * Labels courants fusionnés (locale + custom).\n */\n readonly labels = computed(() => {\n const baseLabels = LABELS_MAP[this._locale()];\n const customLabels = this._customLabels();\n return { ...baseLabels, ...customLabels };\n });\n\n /**\n * Définir la locale.\n */\n setLocale(locale: SupportedLocale): void {\n if (LABELS_MAP[locale]) {\n this._locale.set(locale);\n } else {\n console.warn(`[DsI18nService] Locale '${locale}' not supported. Using 'fr'.`);\n this._locale.set('fr');\n }\n }\n\n /**\n * Obtenir un label par clé.\n */\n get<K extends keyof I18nLabels>(key: K): string {\n return this.labels()[key];\n }\n\n /**\n * Obtenir un label formaté avec des variables.\n *\n * @example\n * i18n.format('minLength', { min: 5 }) // \"Minimum 5 caractères requis\"\n */\n format<K extends keyof I18nLabels>(key: K, params: Record<string, string | number>): string {\n let label = this.labels()[key];\n for (const [param, value] of Object.entries(params)) {\n label = label.replace(`{${param}}`, String(value));\n }\n return label;\n }\n\n /**\n * Surcharger des labels personnalisés.\n */\n setCustomLabels(labels: Partial<I18nLabels>): void {\n this._customLabels.set(labels);\n }\n\n /**\n * Réinitialiser les labels personnalisés.\n */\n resetCustomLabels(): void {\n this._customLabels.set({});\n }\n\n /**\n * Obtenir toutes les locales supportées.\n */\n getSupportedLocales(): SupportedLocale[] {\n return Object.keys(LABELS_MAP) as SupportedLocale[];\n }\n\n /**\n * Détecter la locale du navigateur.\n */\n detectBrowserLocale(): SupportedLocale {\n const browserLang = navigator.language.split('-')[0];\n if (this.getSupportedLocales().includes(browserLang as SupportedLocale)) {\n return browserLang as SupportedLocale;\n }\n return 'fr';\n }\n\n /**\n * Initialiser avec la locale du navigateur.\n */\n initFromBrowser(): void {\n this.setLocale(this.detectBrowserLocale());\n }\n}\n","/*\n * Utils barrel export\n */\n\n// Utils exports\nexport * from './overlay-positions';\nexport * from './storybook-controls';\nexport { IconRegistryService } from './icon-registry.service';\nexport {\n DsI18nService,\n type SupportedLocale,\n type I18nLabels,\n} from './i18n.service';\n","/*\n * Public API Surface of ds-angular\n */\n\n// Primitives\nexport * from './lib/primitives';\n\n// Components\nexport * from './lib/components';\n\n// Utils\nexport * from './lib/utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}