@kksdev/ds-angular 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/kksdev-ds-angular.mjs +2735 -3
- package/fesm2022/kksdev-ds-angular.mjs.map +1 -1
- package/index.d.ts +926 -4
- package/package.json +2 -2
- package/src/styles/themes/_dark.scss +208 -0
- package/src/styles/themes/_light.scss +208 -0
- package/src/styles/tokens/_primitives.scss +1 -0
- package/src/styles/tokens/_semantic.scss +275 -0
- package/src/styles/tokens/_tokens.scss +229 -0
|
@@ -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/ds-chip/ds-chip.ts","../../../projects/ds-angular/src/lib/components/ds-chip/ds-chip.html","../../../projects/ds-angular/src/lib/components/ds-slider/ds-slider.ts","../../../projects/ds-angular/src/lib/components/ds-slider/ds-slider.html","../../../projects/ds-angular/src/lib/components/ds-file-upload/ds-file-upload.ts","../../../projects/ds-angular/src/lib/components/ds-file-upload/ds-file-upload.html","../../../projects/ds-angular/src/lib/components/ds-empty/ds-empty.ts","../../../projects/ds-angular/src/lib/components/ds-empty/ds-empty.html","../../../projects/ds-angular/src/lib/components/ds-rating/ds-rating.ts","../../../projects/ds-angular/src/lib/components/ds-rating/ds-rating.html","../../../projects/ds-angular/src/lib/components/ds-drawer/ds-drawer.ts","../../../projects/ds-angular/src/lib/components/ds-drawer/ds-drawer.html","../../../projects/ds-angular/src/lib/components/ds-time-picker/ds-time-picker-panel.component.ts","../../../projects/ds-angular/src/lib/components/ds-time-picker/ds-time-picker.ts","../../../projects/ds-angular/src/lib/components/ds-time-picker/ds-time-picker.html","../../../projects/ds-angular/src/lib/components/ds-tree/ds-tree-node.component.ts","../../../projects/ds-angular/src/lib/components/ds-tree/ds-tree.ts","../../../projects/ds-angular/src/lib/components/ds-tree/ds-tree.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\nexport interface DatePreset {\n label: string;\n getValue: () => DateRange;\n}\n\n/** Presets prédéfinis pour le mode range */\nexport const DEFAULT_DATE_PRESETS: DatePreset[] = [\n {\n label: \"Aujourd'hui\",\n getValue: () => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return { start: today, end: today };\n },\n },\n {\n label: '7 derniers jours',\n getValue: () => {\n const end = new Date();\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(start.getDate() - 6);\n return { start, end };\n },\n },\n {\n label: '30 derniers jours',\n getValue: () => {\n const end = new Date();\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(start.getDate() - 29);\n return { start, end };\n },\n },\n {\n label: 'Ce mois',\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth(), 1);\n const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);\n return { start, end };\n },\n },\n {\n label: 'Mois dernier',\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);\n const end = new Date(now.getFullYear(), now.getMonth(), 0);\n return { start, end };\n },\n },\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--in-preview]=\"day.isInPreviewRange\"\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 (mouseenter)=\"onDayMouseEnter(day.date)\"\n (mouseleave)=\"onDayMouseLeave()\">\n {{ day.dayNumber }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Presets (mode range uniquement) -->\n @if (showPresets() && mode() === 'range') {\n <div class=\"ds-date-picker__presets\">\n @for (preset of effectivePresets(); track preset.label) {\n <button\n type=\"button\"\n class=\"ds-date-picker__preset\"\n [disabled]=\"disabled()\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label }}\n </button>\n }\n </div>\n }\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 /** Presets pour le mode range */\n readonly presets = input<DatePreset[]>([]);\n\n /** Afficher les presets */\n readonly showPresets = input<boolean>(false);\n\n /** Activer le preview au survol en mode range */\n readonly showRangePreview = input<boolean>(true);\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 readonly hoveredDate = signal<Date | null>(null);\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 isInPreviewRange = this.isDateInPreviewRange(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 isInPreviewRange,\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 isDateInPreviewRange(date: Date): boolean {\n if (this.mode() !== 'range' || !this.showRangePreview()) return false;\n const start = this.rangeStart();\n const end = this.rangeEnd();\n const hovered = this.hoveredDate();\n\n // Seulement si on a un start mais pas de end, et on survole\n if (!start || end || !hovered) return false;\n\n const minDate = start < hovered ? start : hovered;\n const maxDate = start < hovered ? hovered : start;\n\n return date > minDate && date < maxDate;\n }\n\n onDayMouseEnter(date: Date | null): void {\n if (date && this.mode() === 'range' && this.showRangePreview() && this.rangeStart() && !this.rangeEnd()) {\n this.hoveredDate.set(date);\n }\n }\n\n onDayMouseLeave(): void {\n this.hoveredDate.set(null);\n }\n\n selectPreset(preset: DatePreset): void {\n const range = preset.getValue();\n this.rangeStart.set(range.start);\n this.rangeEnd.set(range.end);\n this.rangeChange.emit(range);\n this.onChange(range);\n\n // Naviguer vers le mois du début\n if (range.start) {\n this.currentMonth.set(range.start.getMonth());\n this.currentYear.set(range.start.getFullYear());\n }\n }\n\n /** Presets effectifs (utilise les presets fournis ou les défauts) */\n readonly effectivePresets = computed(() => {\n const custom = this.presets();\n return custom.length > 0 ? custom : DEFAULT_DATE_PRESETS;\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 isInPreviewRange: 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","import {\n Component,\n input,\n output,\n computed,\n signal,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { faXmark } from '@fortawesome/free-solid-svg-icons';\n\nexport type ChipVariant = 'filled' | 'outlined';\nexport type ChipSize = 'sm' | 'md' | 'lg';\nexport type ChipColor = 'default' | 'primary' | 'success' | 'warning' | 'error';\n\n/**\n * Design System Chip component\n *\n * @example\n * ```html\n * <ds-chip label=\"Tag\" />\n * <ds-chip label=\"Removable\" [removable]=\"true\" (removed)=\"onRemove()\" />\n * <ds-chip label=\"Clickable\" [clickable]=\"true\" (clicked)=\"onClick()\" />\n * <ds-chip label=\"With icon\" icon=\"fas-star\" />\n * ```\n */\n@Component({\n selector: 'ds-chip',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-chip.html',\n styleUrls: ['./ds-chip.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsChip {\n // Inputs\n readonly label = input.required<string>();\n readonly variant = input<ChipVariant>('filled');\n readonly size = input<ChipSize>('md');\n readonly color = input<ChipColor>('default');\n readonly removable = input<boolean>(false);\n readonly clickable = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly icon = input<string>('');\n readonly avatar = input<string>('');\n\n // Outputs\n readonly removed = output<void>();\n readonly clicked = output<void>();\n readonly selectedChange = output<boolean>();\n\n // Internal state\n readonly isSelected = signal(false);\n\n // Icons\n readonly closeIcon: IconDefinition = faXmark;\n\n // Computed classes\n readonly chipClasses = computed(() => {\n const classes: string[] = ['ds-chip'];\n\n classes.push(`ds-chip--${this.variant()}`);\n classes.push(`ds-chip--${this.size()}`);\n classes.push(`ds-chip--${this.color()}`);\n\n if (this.clickable() && !this.disabled()) {\n classes.push('ds-chip--clickable');\n }\n\n if (this.selected()) {\n classes.push('ds-chip--selected');\n }\n\n if (this.disabled()) {\n classes.push('ds-chip--disabled');\n }\n\n return classes.join(' ');\n });\n\n // Computed role\n readonly role = computed(() => {\n return this.clickable() ? 'button' : null;\n });\n\n // Computed tabindex\n readonly tabindex = computed(() => {\n if (this.disabled()) return -1;\n if (this.clickable() || this.removable()) return 0;\n return null;\n });\n\n // Computed aria-selected\n readonly ariaSelected = computed(() => {\n return this.clickable() ? this.selected() : null;\n });\n\n // Computed aria-disabled\n readonly ariaDisabled = computed(() => {\n return this.disabled() ? true : null;\n });\n\n /**\n * Handle chip click\n */\n handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n\n if (this.clickable()) {\n this.isSelected.set(!this.selected());\n this.clicked.emit();\n this.selectedChange.emit(!this.selected());\n }\n }\n\n /**\n * Handle remove button click\n */\n handleRemove(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (this.disabled()) {\n return;\n }\n\n this.removed.emit();\n }\n\n /**\n * Handle keyboard events\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n // Handle Enter or Space for clickable chips\n if (this.clickable() && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.handleClick(event as any);\n }\n\n // Handle Delete or Backspace for removable chips\n if (\n this.removable() &&\n (event.key === 'Delete' || event.key === 'Backspace')\n ) {\n event.preventDefault();\n this.handleRemove(event as any);\n }\n }\n}\n","<div\n [class]=\"chipClasses()\"\n [attr.role]=\"role()\"\n [attr.tabindex]=\"tabindex()\"\n [attr.aria-selected]=\"ariaSelected()\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n>\n <!-- Avatar -->\n @if (avatar()) {\n <img\n class=\"ds-chip__avatar\"\n [src]=\"avatar()\"\n [alt]=\"label()\"\n />\n }\n\n <!-- Icon -->\n @if (icon() && !avatar()) {\n <fa-icon\n class=\"ds-chip__icon\"\n [icon]=\"['fas', icon()]\"\n [fixedWidth]=\"true\"\n />\n }\n\n <!-- Label -->\n <span class=\"ds-chip__label\">{{ label() }}</span>\n\n <!-- Remove button -->\n @if (removable() && !disabled()) {\n <button\n type=\"button\"\n class=\"ds-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"handleRemove($event)\"\n >\n <fa-icon\n [icon]=\"closeIcon\"\n [fixedWidth]=\"true\"\n />\n </button>\n }\n</div>\n","import { Component, forwardRef, input, output, signal, computed, effect, ElementRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nexport type SliderSize = 'sm' | 'md' | 'lg';\nexport type SliderValue = number | [number, number];\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\n@Component({\n selector: 'ds-slider',\n imports: [CommonModule],\n templateUrl: './ds-slider.html',\n styleUrl: './ds-slider.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSlider),\n multi: true,\n },\n ],\n})\nexport class DsSlider implements ControlValueAccessor {\n // Config\n min = input<number>(0);\n max = input<number>(100);\n step = input<number>(1);\n disabled = input<boolean>(false);\n size = input<SliderSize>('md');\n range = input<boolean>(false);\n orientation = input<SliderOrientation>('horizontal');\n\n // Display\n showLabels = input<boolean>(false);\n showTicks = input<boolean>(false);\n tickInterval = input<number | undefined>(undefined);\n formatLabel = input<((value: number) => string) | undefined>(undefined);\n\n // Events\n valueChange = output<SliderValue>();\n\n // ViewChild\n @ViewChild('track', { static: false }) trackElement?: ElementRef<HTMLDivElement>;\n @ViewChild('thumb1', { static: false }) thumb1Element?: ElementRef<HTMLDivElement>;\n @ViewChild('thumb2', { static: false }) thumb2Element?: ElementRef<HTMLDivElement>;\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n readonly internalValue = signal<SliderValue>(0);\n readonly dragging = signal<number | null>(null); // null, 0 (first thumb), 1 (second thumb)\n readonly focusedThumb = signal<number>(0); // 0 or 1\n\n constructor() {\n // Effect pour synchroniser la valeur initiale\n effect(() => {\n const currentValue = this.internalValue();\n const isRange = this.range();\n const minVal = this.min();\n\n // Initialisation par défaut\n if (typeof currentValue === 'number' && isRange) {\n this.internalValue.set([minVal, currentValue]);\n } else if (Array.isArray(currentValue) && !isRange) {\n this.internalValue.set(currentValue[0]);\n }\n });\n }\n\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n readonly isRange = computed<boolean>(() => this.range());\n readonly isVertical = computed<boolean>(() => this.orientation() === 'vertical');\n\n readonly containerClasses = computed<string>(() => {\n const classes: string[] = ['ds-slider'];\n classes.push(`ds-slider--${this.size()}`);\n if (this.isDisabled()) classes.push('ds-slider--disabled');\n if (this.isVertical()) classes.push('ds-slider--vertical');\n return classes.join(' ');\n });\n\n readonly value1 = computed<number>(() => {\n const val = this.internalValue();\n return Array.isArray(val) ? val[0] : val;\n });\n\n readonly value2 = computed<number>(() => {\n const val = this.internalValue();\n return Array.isArray(val) ? val[1] : this.max();\n });\n\n readonly percentage1 = computed<number>(() => {\n return this.valueToPercentage(this.value1());\n });\n\n readonly percentage2 = computed<number>(() => {\n return this.valueToPercentage(this.value2());\n });\n\n readonly thumb1Style = computed(() => {\n if (this.isVertical()) {\n return { bottom: `${this.percentage1()}%` };\n }\n return { left: `${this.percentage1()}%` };\n });\n\n readonly thumb2Style = computed(() => {\n if (!this.isRange()) return {};\n if (this.isVertical()) {\n return { bottom: `${this.percentage2()}%` };\n }\n return { left: `${this.percentage2()}%` };\n });\n\n readonly fillStyle = computed(() => {\n const p1 = this.percentage1();\n const p2 = this.percentage2();\n\n if (this.isVertical()) {\n if (this.isRange()) {\n return {\n bottom: `${p1}%`,\n height: `${p2 - p1}%`,\n };\n }\n return {\n bottom: '0%',\n height: `${p1}%`,\n };\n }\n\n if (this.isRange()) {\n return {\n left: `${p1}%`,\n width: `${p2 - p1}%`,\n };\n }\n return {\n left: '0%',\n width: `${p1}%`,\n };\n });\n\n readonly ticks = computed<number[]>(() => {\n if (!this.showTicks()) return [];\n\n const interval = this.tickInterval() ?? this.step();\n const minVal = this.min();\n const maxVal = this.max();\n const ticks: number[] = [];\n\n for (let val = minVal; val <= maxVal; val += interval) {\n ticks.push(val);\n }\n\n return ticks;\n });\n\n readonly label1 = computed<string>(() => {\n const formatter = this.formatLabel();\n const val = this.value1();\n return formatter ? formatter(val) : val.toString();\n });\n\n readonly label2 = computed<string>(() => {\n if (!this.isRange()) return '';\n const formatter = this.formatLabel();\n const val = this.value2();\n return formatter ? formatter(val) : val.toString();\n });\n\n // ControlValueAccessor\n private onChange: (value: SliderValue) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: SliderValue | null): void {\n if (value === null) {\n this.internalValue.set(this.range() ? [this.min(), this.max()] : this.min());\n return;\n }\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: SliderValue) => 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 // Helpers\n private valueToPercentage(value: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n return ((value - minVal) / (maxVal - minVal)) * 100;\n }\n\n private percentageToValue(percentage: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n const stepVal = this.step();\n const rawValue = minVal + (percentage / 100) * (maxVal - minVal);\n const steppedValue = Math.round(rawValue / stepVal) * stepVal;\n return Math.max(minVal, Math.min(maxVal, steppedValue));\n }\n\n private clampValue(value: number): number {\n return Math.max(this.min(), Math.min(this.max(), value));\n }\n\n private emitValue(): void {\n const val = this.internalValue();\n this.onChange(val);\n this.valueChange.emit(val);\n }\n\n // Event handlers - Keyboard\n onKeyDown(event: KeyboardEvent, thumbIndex: number): void {\n if (this.isDisabled()) return;\n\n const stepVal = this.step();\n const minVal = this.min();\n const maxVal = this.max();\n let handled = true;\n let newValue: number | undefined;\n\n const currentValue = thumbIndex === 0 ? this.value1() : this.value2();\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = currentValue + stepVal;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = currentValue - stepVal;\n break;\n case 'Home':\n newValue = minVal;\n break;\n case 'End':\n newValue = maxVal;\n break;\n case 'PageUp':\n newValue = currentValue + stepVal * 10;\n break;\n case 'PageDown':\n newValue = currentValue - stepVal * 10;\n break;\n default:\n handled = false;\n }\n\n if (!handled || newValue === undefined) return;\n\n event.preventDefault();\n newValue = this.clampValue(newValue);\n\n if (this.isRange()) {\n const val = this.internalValue() as [number, number];\n if (thumbIndex === 0) {\n // Thumb 1: ne peut pas dépasser thumb 2\n newValue = Math.min(newValue, val[1]);\n this.internalValue.set([newValue, val[1]]);\n } else {\n // Thumb 2: ne peut pas être inférieur à thumb 1\n newValue = Math.max(newValue, val[0]);\n this.internalValue.set([val[0], newValue]);\n }\n } else {\n this.internalValue.set(newValue);\n }\n\n this.emitValue();\n }\n\n // Event handlers - Mouse/Touch\n onTrackClick(event: MouseEvent): void {\n if (this.isDisabled() || !this.trackElement) return;\n\n const rect = this.trackElement.nativeElement.getBoundingClientRect();\n let percentage: number;\n\n if (this.isVertical()) {\n percentage = ((rect.bottom - event.clientY) / rect.height) * 100;\n } else {\n percentage = ((event.clientX - rect.left) / rect.width) * 100;\n }\n\n const newValue = this.percentageToValue(percentage);\n\n if (this.isRange()) {\n const val = this.internalValue() as [number, number];\n // Détermine quel thumb est le plus proche\n const dist1 = Math.abs(newValue - val[0]);\n const dist2 = Math.abs(newValue - val[1]);\n\n if (dist1 < dist2) {\n this.internalValue.set([newValue, val[1]]);\n this.focusedThumb.set(0);\n } else {\n this.internalValue.set([val[0], newValue]);\n this.focusedThumb.set(1);\n }\n } else {\n this.internalValue.set(newValue);\n }\n\n this.emitValue();\n this.onTouched();\n }\n\n onThumbMouseDown(event: MouseEvent, thumbIndex: number): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(thumbIndex);\n this.focusedThumb.set(thumbIndex);\n\n const moveHandler = (e: MouseEvent) => this.onMouseMove(e);\n const upHandler = () => {\n this.dragging.set(null);\n this.onTouched();\n document.removeEventListener('mousemove', moveHandler);\n document.removeEventListener('mouseup', upHandler);\n };\n\n document.addEventListener('mousemove', moveHandler);\n document.addEventListener('mouseup', upHandler);\n }\n\n private onMouseMove(event: MouseEvent): void {\n const thumbIndex = this.dragging();\n if (thumbIndex === null || !this.trackElement) return;\n\n const rect = this.trackElement.nativeElement.getBoundingClientRect();\n let percentage: number;\n\n if (this.isVertical()) {\n percentage = ((rect.bottom - event.clientY) / rect.height) * 100;\n } else {\n percentage = ((event.clientX - rect.left) / rect.width) * 100;\n }\n\n const newValue = this.percentageToValue(percentage);\n\n if (this.isRange()) {\n const val = this.internalValue() as [number, number];\n if (thumbIndex === 0) {\n const clamped = Math.min(newValue, val[1]);\n this.internalValue.set([clamped, val[1]]);\n } else {\n const clamped = Math.max(newValue, val[0]);\n this.internalValue.set([val[0], clamped]);\n }\n } else {\n this.internalValue.set(newValue);\n }\n\n this.emitValue();\n }\n\n onThumbFocus(thumbIndex: number): void {\n this.focusedThumb.set(thumbIndex);\n }\n\n onThumbBlur(): void {\n this.onTouched();\n }\n\n getTickPosition(value: number): number {\n return this.valueToPercentage(value);\n }\n\n getTickLabel(value: number): string {\n const formatter = this.formatLabel();\n return formatter ? formatter(value) : value.toString();\n }\n\n // ARIA helpers\n getAriaValueText(thumbIndex: number): string {\n const val = thumbIndex === 0 ? this.value1() : this.value2();\n const formatter = this.formatLabel();\n return formatter ? formatter(val) : val.toString();\n }\n}\n","<div [class]=\"containerClasses()\">\n <!-- Min label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--min\">\n {{ getTickLabel(min()) }}\n </span>\n }\n\n <!-- Track container -->\n <div class=\"ds-slider__track-container\">\n <!-- Track background -->\n <div\n #track\n class=\"ds-slider__track\"\n (click)=\"onTrackClick($event)\"\n role=\"presentation\">\n <!-- Fill -->\n <div\n class=\"ds-slider__fill\"\n [ngStyle]=\"fillStyle()\">\n </div>\n\n <!-- Ticks -->\n @if (showTicks()) {\n <div class=\"ds-slider__ticks\">\n @for (tick of ticks(); track tick) {\n <div\n class=\"ds-slider__tick\"\n [ngStyle]=\"isVertical() ? { bottom: getTickPosition(tick) + '%' } : { left: getTickPosition(tick) + '%' }\">\n </div>\n }\n </div>\n }\n\n <!-- Thumb 1 (always present) -->\n <div\n #thumb1\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 0 || dragging() === 0\"\n [ngStyle]=\"thumb1Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"isRange() ? value2() : max()\"\n [attr.aria-valuenow]=\"value1()\"\n [attr.aria-valuetext]=\"getAriaValueText(0)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 0)\"\n (mousedown)=\"onThumbMouseDown($event, 0)\"\n (focus)=\"onThumbFocus(0)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label1() }}</span>\n }\n </div>\n\n <!-- Thumb 2 (only for range mode) -->\n @if (isRange()) {\n <div\n #thumb2\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 1 || dragging() === 1\"\n [ngStyle]=\"thumb2Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"value1()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value2()\"\n [attr.aria-valuetext]=\"getAriaValueText(1)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 1)\"\n (mousedown)=\"onThumbMouseDown($event, 1)\"\n (focus)=\"onThumbFocus(1)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label2() }}</span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Max label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--max\">\n {{ getTickLabel(max()) }}\n </span>\n }\n</div>\n","import {\n Component,\n forwardRef,\n input,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport {\n faCloudArrowUp,\n faXmark,\n faFile,\n faFileImage,\n faFilePdf,\n faFileWord,\n faFileExcel,\n} from '@fortawesome/free-solid-svg-icons';\nimport { DsProgressBar } from '../ds-progress-bar/ds-progress-bar';\n\n/**\n * Tailles disponibles pour le composant file upload.\n */\nexport type FileUploadSize = 'sm' | 'md' | 'lg';\n\n/**\n * Représente un fichier avec son état de chargement.\n */\nexport interface UploadFile {\n file: File;\n preview?: string;\n progress: number;\n error?: string;\n}\n\n/**\n * # DsFileUpload\n *\n * Composant de téléchargement de fichiers avec support drag & drop,\n * validation, preview et barre de progression.\n *\n * ## Usage\n *\n * ```html\n * <!-- Upload simple -->\n * <ds-file-upload\n * [accept]=\"'image/*'\"\n * [maxFileSize]=\"5242880\"\n * (filesChange)=\"onFilesChange($event)\">\n * </ds-file-upload>\n *\n * <!-- Upload multiple avec preview -->\n * <ds-file-upload\n * [multiple]=\"true\"\n * [showPreview]=\"true\"\n * [maxFiles]=\"5\"\n * size=\"lg\">\n * </ds-file-upload>\n * ```\n *\n * ## Accessibilité\n *\n * - Input natif avec label accessible\n * - Drag & drop avec feedback ARIA\n * - Messages d'erreur associés via aria-describedby\n *\n * @component\n */\n@Component({\n selector: 'ds-file-upload',\n imports: [CommonModule, FaIconComponent, DsProgressBar],\n templateUrl: './ds-file-upload.html',\n styleUrl: './ds-file-upload.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsFileUpload),\n multi: true,\n },\n ],\n})\nexport class DsFileUpload implements ControlValueAccessor {\n /**\n * Types de fichiers acceptés (ex: 'image/*,.pdf').\n * @default '*'\n */\n accept = input<string>('*');\n\n /**\n * Taille maximale d'un fichier en bytes.\n * @default 10485760 (10 MB)\n */\n maxFileSize = input<number>(10485760);\n\n /**\n * Nombre maximum de fichiers.\n * @default 1\n */\n maxFiles = input<number>(1);\n\n /**\n * Permet la sélection multiple de fichiers.\n * @default false\n */\n multiple = input<boolean>(false);\n\n /**\n * Désactive le composant.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<FileUploadSize>('md');\n\n /**\n * Affiche une preview pour les images.\n * @default true\n */\n showPreview = input<boolean>(true);\n\n /**\n * Label personnalisé pour le bouton.\n */\n label = input<string>('Choisir un fichier');\n\n /**\n * Texte d'aide pour le drag & drop.\n */\n dragHelpText = input<string>('ou glisser-déposer ici');\n\n /**\n * Événement émis lors du changement de fichiers.\n */\n filesChange = output<File[]>();\n\n /**\n * Événement émis lors de la suppression d'un fichier.\n */\n fileRemoved = output<File>();\n\n /**\n * Événement émis lors de la progression de l'upload.\n */\n uploadProgress = output<{ file: File; progress: number }>();\n\n // Icons (readonly for template access)\n readonly faCloudArrowUp = faCloudArrowUp;\n readonly faXmark = faXmark;\n readonly faFile = faFile;\n readonly faFileImage = faFileImage;\n readonly faFilePdf = faFilePdf;\n readonly faFileWord = faFileWord;\n readonly faFileExcel = faFileExcel;\n\n // ViewChild pour l'input file\n readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n // État interne\n readonly files = signal<UploadFile[]>([]);\n readonly isDragging = signal<boolean>(false);\n readonly errorMessage = signal<string>('');\n\n // ControlValueAccessor\n private onChange: (value: File[] | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n /**\n * Classes CSS calculées pour le conteneur (public pour tests).\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-file-upload',\n `ds-file-upload--${this.size()}`,\n this.isDragging() ? 'ds-file-upload--dragging' : '',\n this.disabled() ? 'ds-file-upload--disabled' : '',\n this.errorMessage() ? 'ds-file-upload--error' : '',\n ].filter(Boolean);\n });\n\n /**\n * Nombre de fichiers actuellement sélectionnés (public pour tests).\n */\n readonly fileCount = computed(() => this.files().length);\n\n /**\n * Vérifie si la limite de fichiers est atteinte (public pour tests).\n */\n readonly isMaxFilesReached = computed(\n () => this.fileCount() >= this.maxFiles()\n );\n\n /**\n * Ouvre le sélecteur de fichiers.\n */\n openFileSelector(): void {\n if (this.disabled() || this.isMaxFilesReached()) {\n return;\n }\n this.fileInput()?.nativeElement.click();\n }\n\n /**\n * Gère la sélection de fichiers via l'input.\n */\n onFileSelect(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) {\n return;\n }\n\n this.handleFiles(Array.from(input.files));\n input.value = ''; // Reset pour permettre la réutilisation\n }\n\n /**\n * Gère le début du drag.\n */\n onDragEnter(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled() && !this.isMaxFilesReached()) {\n this.isDragging.set(true);\n }\n }\n\n /**\n * Gère le survol pendant le drag.\n */\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Gère la sortie du drag.\n */\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n const target = event.currentTarget as HTMLElement;\n const related = event.relatedTarget as HTMLElement;\n if (!target.contains(related)) {\n this.isDragging.set(false);\n }\n }\n\n /**\n * Gère le drop des fichiers.\n */\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n\n if (this.disabled() || this.isMaxFilesReached()) {\n return;\n }\n\n const files = event.dataTransfer?.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n }\n\n /**\n * Traite les fichiers sélectionnés ou déposés.\n */\n private handleFiles(newFiles: File[]): void {\n this.errorMessage.set('');\n\n // En mode single, on remplace toujours le fichier existant\n if (!this.multiple()) {\n // Mode single : remplacer le fichier existant\n const filesToAdd = [newFiles[0]];\n\n // Valider et ajouter le fichier\n const validFiles: UploadFile[] = [];\n\n for (const file of filesToAdd) {\n const validation = this.validateFile(file);\n if (validation.valid) {\n const uploadFile: UploadFile = {\n file,\n progress: 0,\n };\n\n // Générer preview pour les images\n if (this.showPreview() && file.type.startsWith('image/')) {\n this.generatePreview(file, uploadFile);\n }\n\n validFiles.push(uploadFile);\n } else {\n this.errorMessage.set(validation.error || 'Fichier invalide');\n }\n }\n\n if (validFiles.length > 0) {\n this.files.set(validFiles);\n this.notifyChange();\n this.simulateUpload(validFiles);\n }\n return;\n }\n\n // Mode multiple : vérifier la limite de fichiers\n const currentCount = this.fileCount();\n const maxFiles = this.maxFiles();\n const availableSlots = maxFiles - currentCount;\n\n if (availableSlots <= 0) {\n this.errorMessage.set(`Limite de ${maxFiles} fichier(s) atteinte`);\n return;\n }\n\n // Limiter le nombre de nouveaux fichiers\n const filesToAdd = newFiles.slice(0, availableSlots);\n\n // Valider et ajouter les fichiers\n const validFiles: UploadFile[] = [];\n\n for (const file of filesToAdd) {\n const validation = this.validateFile(file);\n if (validation.valid) {\n const uploadFile: UploadFile = {\n file,\n progress: 0,\n };\n\n // Générer preview pour les images\n if (this.showPreview() && file.type.startsWith('image/')) {\n this.generatePreview(file, uploadFile);\n }\n\n validFiles.push(uploadFile);\n } else {\n this.errorMessage.set(validation.error || 'Fichier invalide');\n }\n }\n\n if (validFiles.length > 0) {\n // Mode multiple : ajouter aux fichiers existants\n this.files.update((current) => [...current, ...validFiles]);\n this.notifyChange();\n this.simulateUpload(validFiles);\n }\n }\n\n /**\n * Valide un fichier (taille, type).\n */\n private validateFile(file: File): { valid: boolean; error?: string } {\n // Vérifier la taille\n if (file.size > this.maxFileSize()) {\n const maxMB = (this.maxFileSize() / 1048576).toFixed(1);\n return {\n valid: false,\n error: `Fichier trop volumineux (max ${maxMB} MB)`,\n };\n }\n\n // Vérifier le type (si spécifié)\n const accept = this.accept();\n if (accept !== '*') {\n const acceptedTypes = accept.split(',').map((t) => t.trim());\n const isAccepted = acceptedTypes.some((type) => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n const category = type.split('/')[0];\n return file.type.startsWith(category + '/');\n }\n return file.type === type;\n });\n\n if (!isAccepted) {\n return {\n valid: false,\n error: `Type de fichier non accepté`,\n };\n }\n }\n\n return { valid: true };\n }\n\n /**\n * Génère une preview pour les images.\n */\n private generatePreview(file: File, uploadFile: UploadFile): void {\n const reader = new FileReader();\n reader.onload = (e) => {\n uploadFile.preview = e.target?.result as string;\n this.files.update((files) => [...files]); // Trigger change detection\n };\n reader.readAsDataURL(file);\n }\n\n /**\n * Simule l'upload avec progression (pour démonstration).\n * Dans une vraie application, remplacer par un vrai upload HTTP.\n */\n private simulateUpload(uploadFiles: UploadFile[]): void {\n uploadFiles.forEach((uploadFile) => {\n const interval = setInterval(() => {\n uploadFile.progress += 10;\n if (uploadFile.progress >= 100) {\n clearInterval(interval);\n }\n this.uploadProgress.emit({\n file: uploadFile.file,\n progress: uploadFile.progress,\n });\n this.files.update((files) => [...files]); // Trigger change detection\n }, 100);\n });\n }\n\n /**\n * Retire un fichier de la liste.\n */\n removeFile(uploadFile: UploadFile): void {\n this.files.update((files) =>\n files.filter((f) => f.file !== uploadFile.file)\n );\n this.fileRemoved.emit(uploadFile.file);\n this.notifyChange();\n this.errorMessage.set('');\n }\n\n /**\n * Notifie le changement de valeur.\n */\n private notifyChange(): void {\n const fileList = this.files().map((uf) => uf.file);\n this.filesChange.emit(fileList);\n this.onChange(fileList.length > 0 ? fileList : null);\n }\n\n /**\n * Retourne l'icône appropriée pour le type de fichier (public pour tests).\n */\n getFileIcon(file: File) {\n if (file.type.startsWith('image/')) {\n return this.faFileImage;\n }\n if (file.type === 'application/pdf') {\n return this.faFilePdf;\n }\n if (\n file.type ===\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||\n file.type === 'application/msword'\n ) {\n return this.faFileWord;\n }\n if (\n file.type ===\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\n file.type === 'application/vnd.ms-excel'\n ) {\n return this.faFileExcel;\n }\n return this.faFile;\n }\n\n /**\n * Formate la taille du fichier en MB ou KB (public pour tests).\n */\n formatFileSize(bytes: number): string {\n if (bytes >= 1048576) {\n return `${(bytes / 1048576).toFixed(1)} MB`;\n }\n return `${(bytes / 1024).toFixed(0)} KB`;\n }\n\n // ControlValueAccessor implementation\n writeValue(value: File[] | null): void {\n if (!value) {\n this.files.set([]);\n return;\n }\n\n const uploadFiles: UploadFile[] = value.map((file) => ({\n file,\n progress: 100,\n }));\n\n this.files.set(uploadFiles);\n }\n\n registerOnChange(fn: (value: File[] | 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 // Le disabled est géré via input signal\n }\n}\n","<div\n [ngClass]=\"containerClasses()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <!-- Zone de drop -->\n <div\n class=\"ds-file-upload__dropzone\"\n [class.ds-file-upload__dropzone--active]=\"isDragging()\"\n (click)=\"openFileSelector()\"\n [attr.tabindex]=\"disabled() ? null : 0\"\n [attr.aria-label]=\"label()\"\n role=\"button\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"ds-file-upload__input\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isMaxFilesReached()\"\n (change)=\"onFileSelect($event)\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n />\n\n <!-- Icône et texte -->\n <div class=\"ds-file-upload__icon\">\n <fa-icon [icon]=\"faCloudArrowUp\" size=\"2x\"></fa-icon>\n </div>\n <div class=\"ds-file-upload__text\">\n <span class=\"ds-file-upload__label\">{{ label() }}</span>\n @if (!disabled() && !isMaxFilesReached()) {\n <span class=\"ds-file-upload__help\">{{ dragHelpText() }}</span>\n }\n @if (isMaxFilesReached()) {\n <span class=\"ds-file-upload__limit\">Limite atteinte ({{ maxFiles() }} fichier{{ maxFiles() > 1 ? 's' : '' }})</span>\n }\n </div>\n\n <!-- Message d'erreur global -->\n @if (errorMessage()) {\n <div class=\"ds-file-upload__error\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n\n <!-- Indications -->\n @if (!errorMessage() && accept() !== '*') {\n <div class=\"ds-file-upload__hint\">\n Types acceptés : {{ accept() }}\n </div>\n }\n @if (!errorMessage() && maxFileSize()) {\n <div class=\"ds-file-upload__hint\">\n Taille max : {{ formatFileSize(maxFileSize()) }}\n </div>\n }\n </div>\n\n <!-- Liste des fichiers -->\n @if (fileCount() > 0) {\n <div class=\"ds-file-upload__files\">\n @for (uploadFile of files(); track uploadFile.file.name) {\n <div class=\"ds-file-upload__file\">\n <!-- Preview image -->\n @if (showPreview() && uploadFile.preview) {\n <div class=\"ds-file-upload__preview\">\n <img [src]=\"uploadFile.preview\" [alt]=\"uploadFile.file.name\" />\n </div>\n } @else {\n <div class=\"ds-file-upload__file-icon\">\n <fa-icon [icon]=\"getFileIcon(uploadFile.file)\"></fa-icon>\n </div>\n }\n\n <!-- Infos fichier -->\n <div class=\"ds-file-upload__file-info\">\n <div class=\"ds-file-upload__file-name\" [title]=\"uploadFile.file.name\">\n {{ uploadFile.file.name }}\n </div>\n <div class=\"ds-file-upload__file-size\">\n {{ formatFileSize(uploadFile.file.size) }}\n </div>\n\n <!-- Barre de progression -->\n @if (uploadFile.progress < 100) {\n <ds-progress-bar\n [value]=\"uploadFile.progress\"\n size=\"sm\"\n variant=\"default\"\n [showLabel]=\"true\"\n ></ds-progress-bar>\n }\n\n <!-- Message d'erreur fichier -->\n @if (uploadFile.error) {\n <div class=\"ds-file-upload__file-error\" role=\"alert\">\n {{ uploadFile.error }}\n </div>\n }\n </div>\n\n <!-- Bouton supprimer -->\n <button\n type=\"button\"\n class=\"ds-file-upload__remove\"\n (click)=\"removeFile(uploadFile)\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Supprimer ' + uploadFile.file.name\"\n >\n <fa-icon [icon]=\"faXmark\"></fa-icon>\n </button>\n </div>\n }\n </div>\n }\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { faInbox } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Tailles disponibles pour le composant Empty.\n */\nexport type EmptySize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsEmpty\n *\n * Composant d'état vide standardisé permettant d'afficher un message\n * lorsqu'aucune donnée n'est disponible, avec une illustration optionnelle.\n *\n * ## Usage\n *\n * ```html\n * <ds-empty\n * title=\"Aucun résultat\"\n * description=\"Essayez de modifier vos filtres\"\n * [icon]=\"faSearch\">\n * <button ds-button (click)=\"resetFilters()\">Réinitialiser</button>\n * </ds-empty>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"region\"` avec `aria-label` descriptif\n * - Icônes décoratives avec `aria-hidden=\"true\"`\n * - Support des actions via content projection\n *\n * @component\n */\n@Component({\n selector: 'ds-empty',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-empty.html',\n styleUrl: './ds-empty.scss',\n})\nexport class DsEmpty {\n /**\n * Titre principal de l'état vide.\n * @default 'Aucune donnée'\n */\n title = input<string>('Aucune donnée');\n\n /**\n * Description complémentaire optionnelle.\n */\n description = input<string>('');\n\n /**\n * Icône FontAwesome à afficher.\n * @default faInbox\n */\n icon = input<IconDefinition>(faInbox);\n\n /**\n * URL d'une image personnalisée (illustration ou SVG).\n * Si fournie, prend le pas sur l'icône FontAwesome.\n */\n imageUrl = input<string>('');\n\n /**\n * Taille du composant (affecte l'icône et les espacements).\n * @default 'md'\n */\n size = input<EmptySize>('md');\n\n /**\n * Classes CSS calculées pour le conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-empty',\n `ds-empty--${this.size()}`,\n ].join(' ');\n });\n\n /**\n * Classes CSS calculées pour l'icône.\n */\n readonly iconClasses = computed(() => {\n const baseClass = 'ds-empty__icon';\n return `${baseClass} ${baseClass}--${this.size()}`;\n });\n\n /**\n * Classes CSS calculées pour l'image.\n */\n readonly imageClasses = computed(() => {\n const baseClass = 'ds-empty__image';\n return `${baseClass} ${baseClass}--${this.size()}`;\n });\n\n /**\n * Détermine si une image doit être affichée.\n */\n readonly hasImage = computed(() => !!this.imageUrl());\n\n /**\n * Détermine si une description est fournie.\n */\n readonly hasDescription = computed(() => !!this.description());\n}\n","<div\n [class]=\"containerClasses()\"\n role=\"region\"\n [attr.aria-label]=\"'État vide : ' + title()\">\n\n <!-- Image personnalisée -->\n @if (hasImage()) {\n <div [class]=\"imageClasses()\">\n <img\n [src]=\"imageUrl()\"\n [alt]=\"title()\"\n class=\"ds-empty__image-element\" />\n </div>\n }\n\n <!-- Icône FontAwesome par défaut -->\n @if (!hasImage()) {\n <div [class]=\"iconClasses()\">\n <fa-icon\n [icon]=\"icon()\"\n aria-hidden=\"true\" />\n </div>\n }\n\n <!-- Contenu texte -->\n <div class=\"ds-empty__content\">\n <h3 class=\"ds-empty__title\">{{ title() }}</h3>\n\n @if (hasDescription()) {\n <p class=\"ds-empty__description\">{{ description() }}</p>\n }\n </div>\n\n <!-- Slot pour action button personnalisé -->\n <div class=\"ds-empty__actions\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, input, output, signal, computed, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faStar, faStarHalfStroke } from '@fortawesome/free-solid-svg-icons';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Tailles disponibles pour le composant Rating.\n */\nexport type RatingSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsRating\n *\n * Composant de notation par étoiles permettant d'afficher et de saisir\n * une note sur une échelle configurable (par défaut 0-5).\n *\n * ## Usage\n *\n * ```html\n * <ds-rating\n * [(value)]=\"rating\"\n * [max]=\"5\"\n * [allowHalf]=\"true\"\n * (ratingChange)=\"handleRatingChange($event)\" />\n * ```\n *\n * ## Intégration formulaires\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <ds-rating formControlName=\"rating\" />\n * </form>\n * ```\n *\n * ## Accessibilité\n *\n * - Navigation clavier : ArrowLeft/Right pour changer la note\n * - Attributs ARIA : role, aria-label, aria-valuenow/valuemin/valuemax\n * - Focus visible sur les étoiles\n *\n * @component\n */\n@Component({\n selector: 'ds-rating',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-rating.html',\n styleUrl: './ds-rating.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsRating),\n multi: true,\n },\n ],\n})\nexport class DsRating implements ControlValueAccessor {\n /**\n * Valeur actuelle de la notation (0 à max).\n * @default 0\n */\n value = input<number>(0);\n\n /**\n * Valeur maximale de la notation.\n * @default 5\n */\n max = input<number>(5);\n\n /**\n * Taille du composant (affecte la taille des étoiles).\n * @default 'md'\n */\n size = input<RatingSize>('md');\n\n /**\n * Permet la saisie de demi-étoiles (notes 0.5, 1.5, etc.).\n * @default false\n */\n allowHalf = input<boolean>(false);\n\n /**\n * Mode lecture seule (affichage uniquement).\n * @default false\n */\n readonly = input<boolean>(false);\n\n /**\n * État désactivé (pas d'interaction).\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Émis lorsque la notation change.\n */\n ratingChange = output<number>();\n\n /**\n * État interne de la valeur (ControlValueAccessor).\n */\n readonly internalValue = signal<number>(0);\n\n /**\n * État de survol (pour aperçu avant clic).\n */\n readonly hoverValue = signal<number | null>(null);\n\n /**\n * Callbacks ControlValueAccessor.\n */\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n /**\n * Icônes FontAwesome pour les étoiles.\n */\n protected readonly faStar = faStar;\n protected readonly faStarHalf = faStarHalfStroke;\n\n /**\n * Tableau des indices d'étoiles pour le rendu.\n */\n readonly stars = computed(() => {\n return Array.from({ length: this.max() }, (_, i) => i + 1);\n });\n\n /**\n * Valeur affichée (avec prise en compte du survol).\n */\n readonly displayValue = computed(() => {\n return this.hoverValue() ?? this.internalValue();\n });\n\n /**\n * Classes CSS calculées pour le conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-rating',\n `ds-rating--${this.size()}`,\n this.disabled() ? 'ds-rating--disabled' : '',\n this.readonly() ? 'ds-rating--readonly' : '',\n ].filter(Boolean).join(' ');\n });\n\n /**\n * Détermine le type d'icône à afficher pour une étoile donnée.\n * - 'full' : étoile pleine\n * - 'half' : demi-étoile\n * - 'empty' : étoile vide\n */\n getStarType(index: number): 'full' | 'half' | 'empty' {\n const value = this.displayValue();\n const diff = value - index;\n\n if (diff >= 0) return 'full';\n if (this.allowHalf() && diff >= -0.5) return 'half';\n return 'empty';\n }\n\n /**\n * Gère le clic sur une étoile.\n */\n handleStarClick(index: number, event: MouseEvent): void {\n if (this.disabled() || this.readonly()) return;\n\n let newValue = index;\n\n // Détection du clic sur la moitié gauche ou droite\n if (this.allowHalf()) {\n const target = event.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n const clickX = event.clientX - rect.left;\n const halfWidth = rect.width / 2;\n\n if (clickX < halfWidth) {\n newValue = index - 0.5;\n }\n }\n\n this.updateValue(newValue);\n }\n\n /**\n * Gère le survol d'une étoile.\n */\n handleStarHover(index: number, event: MouseEvent): void {\n if (this.disabled() || this.readonly()) return;\n\n let hoverVal = index;\n\n if (this.allowHalf()) {\n const target = event.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n const hoverX = event.clientX - rect.left;\n const halfWidth = rect.width / 2;\n\n if (hoverX < halfWidth) {\n hoverVal = index - 0.5;\n }\n }\n\n this.hoverValue.set(hoverVal);\n }\n\n /**\n * Réinitialise le survol.\n */\n handleMouseLeave(): void {\n this.hoverValue.set(null);\n }\n\n /**\n * Navigation clavier (ArrowLeft/Right).\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled() || this.readonly()) return;\n\n const step = this.allowHalf() ? 0.5 : 1;\n let newValue = this.internalValue();\n\n if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {\n event.preventDefault();\n newValue = Math.min(this.max(), newValue + step);\n this.updateValue(newValue);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {\n event.preventDefault();\n newValue = Math.max(0, newValue - step);\n this.updateValue(newValue);\n } else if (event.key === 'Home') {\n event.preventDefault();\n this.updateValue(0);\n } else if (event.key === 'End') {\n event.preventDefault();\n this.updateValue(this.max());\n }\n }\n\n /**\n * Met à jour la valeur interne et notifie les changements.\n */\n private updateValue(newValue: number): void {\n this.internalValue.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n this.ratingChange.emit(newValue);\n }\n\n // ============================================================================\n // ControlValueAccessor\n // ============================================================================\n\n writeValue(value: number): void {\n this.internalValue.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => 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 signal disabled est déjà géré via input()\n }\n}\n","<div\n [class]=\"containerClasses()\"\n role=\"slider\"\n [attr.aria-label]=\"'Note : ' + displayValue() + ' sur ' + max()\"\n [attr.aria-valuenow]=\"displayValue()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() || readonly() ? -1 : 0\"\n (keydown)=\"handleKeyDown($event)\"\n (mouseleave)=\"handleMouseLeave()\">\n\n @for (starIndex of stars(); track starIndex) {\n <span\n class=\"ds-rating__star\"\n [attr.data-index]=\"starIndex\"\n (click)=\"handleStarClick(starIndex, $event)\"\n (mousemove)=\"handleStarHover(starIndex, $event)\">\n\n @switch (getStarType(starIndex)) {\n @case ('full') {\n <fa-icon [icon]=\"faStar\" class=\"ds-rating__icon ds-rating__icon--filled\" aria-hidden=\"true\" />\n }\n @case ('half') {\n <fa-icon [icon]=\"faStarHalf\" class=\"ds-rating__icon ds-rating__icon--half\" aria-hidden=\"true\" />\n }\n @case ('empty') {\n <fa-icon [icon]=\"faStar\" class=\"ds-rating__icon ds-rating__icon--empty\" aria-hidden=\"true\" />\n }\n }\n </span>\n }\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n signal,\n effect,\n inject,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\n\n/**\n * Position du drawer (gauche ou droite).\n */\nexport type DrawerPosition = 'left' | 'right';\n\n/**\n * Tailles disponibles pour le drawer.\n */\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'full';\n\n/**\n * # DsDrawer\n *\n * Composant de panneau latéral overlay avec animation slide-in/out.\n * Utilise CDK Overlay pour le backdrop et le focus trap.\n *\n * ## Usage\n *\n * ```html\n * <ds-drawer\n * [(visible)]=\"isDrawerOpen\"\n * position=\"right\"\n * size=\"md\"\n * title=\"Détails\"\n * [closable]=\"true\"\n * (closed)=\"onDrawerClose()\">\n * <!-- Header -->\n * <ng-template #header>\n * <h3>Mon en-tête personnalisé</h3>\n * </ng-template>\n *\n * <!-- Body -->\n * <p>Contenu du drawer</p>\n *\n * <!-- Footer -->\n * <ng-template #footer>\n * <button>Annuler</button>\n * <button>Valider</button>\n * </ng-template>\n * </ds-drawer>\n * ```\n *\n * ## Accessibilité\n *\n * - Focus trap : le focus reste dans le drawer\n * - Navigation clavier : Escape pour fermer\n * - Attributs ARIA : role, aria-labelledby, aria-modal\n *\n * @component\n */\n@Component({\n selector: 'ds-drawer',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-drawer.html',\n styleUrl: './ds-drawer.scss',\n})\nexport class DsDrawer implements AfterViewInit, OnDestroy {\n /**\n * Visibilité du drawer.\n * @default false\n */\n visible = input<boolean>(false);\n\n /**\n * Position du drawer (left/right).\n * @default 'right'\n */\n position = input<DrawerPosition>('right');\n\n /**\n * Taille du drawer.\n * @default 'md'\n */\n size = input<DrawerSize>('md');\n\n /**\n * Titre affiché dans le header (optionnel).\n */\n title = input<string>('');\n\n /**\n * Affiche le bouton de fermeture.\n * @default true\n */\n closable = input<boolean>(true);\n\n /**\n * Ferme le drawer au clic sur le backdrop.\n * @default true\n */\n maskClosable = input<boolean>(true);\n\n /**\n * Émis lorsque la visibilité change.\n */\n visibleChange = output<boolean>();\n\n /**\n * Émis lorsque le drawer est fermé.\n */\n closed = output<void>();\n\n /**\n * Référence au conteneur du drawer.\n */\n @ViewChild('drawerContainer') drawerContainer?: ElementRef<HTMLElement>;\n\n /**\n * État interne de visibilité pour gérer l'animation.\n */\n protected isOpen = signal<boolean>(false);\n protected isAnimating = signal<boolean>(false);\n\n /**\n * Indique si la vue est prête.\n */\n private viewReady = signal<boolean>(false);\n\n /**\n * Focus trap pour confiner la navigation clavier.\n */\n private focusTrap: FocusTrap | null = null;\n\n /**\n * Services injectés.\n */\n private readonly documentRef = inject(DOCUMENT);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n\n /**\n * Icône de fermeture.\n */\n protected readonly closeIcon = faTimes;\n\n /**\n * ID unique pour l'accessibilité.\n */\n private readonly drawerId = crypto.randomUUID();\n readonly drawerTitleId = `drawer-${this.drawerId}-title`;\n\n /**\n * Classes CSS calculées pour le conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-drawer',\n `ds-drawer--${this.position()}`,\n `ds-drawer--${this.size()}`,\n this.isOpen() ? 'ds-drawer--open' : '',\n ].filter(Boolean).join(' ');\n });\n\n /**\n * Classes CSS calculées pour le backdrop.\n */\n readonly backdropClasses = computed(() => {\n return [\n 'ds-drawer__backdrop',\n this.isOpen() ? 'ds-drawer__backdrop--visible' : '',\n ].filter(Boolean).join(' ');\n });\n\n constructor() {\n // Effet pour synchroniser l'état visible avec l'animation\n effect(() => {\n if (!this.viewReady()) return;\n\n if (this.visible()) {\n this.openDrawer();\n } else {\n this.closeDrawer();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.viewReady.set(true);\n }\n\n ngOnDestroy(): void {\n this.detachFocusTrap();\n }\n\n /**\n * Ouvre le drawer avec animation.\n */\n private openDrawer(): void {\n this.isAnimating.set(true);\n this.isOpen.set(true);\n\n // Empêche le scroll du body\n this.documentRef.body.style.overflow = 'hidden';\n\n // Attache le focus trap après l'animation\n setTimeout(() => {\n this.attachFocusTrap();\n this.focusInitialElement();\n this.isAnimating.set(false);\n }, 300);\n }\n\n /**\n * Ferme le drawer avec animation.\n */\n private closeDrawer(): void {\n this.isAnimating.set(true);\n this.detachFocusTrap();\n\n setTimeout(() => {\n this.isOpen.set(false);\n this.isAnimating.set(false);\n\n // Restaure le scroll du body\n this.documentRef.body.style.overflow = '';\n\n this.closed.emit();\n }, 300);\n }\n\n /**\n * Gère la fermeture du drawer.\n */\n handleClose(): void {\n if (!this.closable()) return;\n\n this.visibleChange.emit(false);\n }\n\n /**\n * Gère le clic sur le backdrop.\n */\n handleBackdropClick(): void {\n if (!this.maskClosable()) return;\n\n this.handleClose();\n }\n\n /**\n * Gère la touche Escape.\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.closable()) {\n event.preventDefault();\n this.handleClose();\n }\n }\n\n /**\n * Attache le focus trap.\n */\n private attachFocusTrap(): void {\n if (this.focusTrap || !this.drawerContainer) return;\n\n const element = this.drawerContainer.nativeElement;\n this.focusTrap = this.focusTrapFactory.create(element);\n this.focusTrap.attachAnchors();\n }\n\n /**\n * Détache le focus trap.\n */\n private detachFocusTrap(): void {\n if (this.focusTrap) {\n this.focusTrap.destroy();\n this.focusTrap = null;\n }\n }\n\n /**\n * Place le focus sur le premier élément focusable.\n */\n private focusInitialElement(): void {\n if (!this.drawerContainer) return;\n\n const firstFocusable = this.drawerContainer.nativeElement.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n}\n","<!-- Backdrop -->\n@if (isOpen()) {\n <div\n [class]=\"backdropClasses()\"\n (click)=\"handleBackdropClick()\"\n aria-hidden=\"true\">\n </div>\n}\n\n<!-- Drawer Panel -->\n@if (isOpen()) {\n <div\n #drawerContainer\n [class]=\"containerClasses()\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"title() ? drawerTitleId : null\"\n (keydown)=\"handleKeyDown($event)\">\n\n <!-- Header -->\n <div class=\"ds-drawer__header\">\n @if (title()) {\n <h3 class=\"ds-drawer__title\" [id]=\"drawerTitleId\">{{ title() }}</h3>\n }\n\n <ng-content select=\"[drawer-header]\"></ng-content>\n\n @if (closable()) {\n <button\n class=\"ds-drawer__close\"\n type=\"button\"\n aria-label=\"Fermer\"\n (click)=\"handleClose()\">\n <fa-icon [icon]=\"closeIcon\" aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"ds-drawer__body\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div class=\"ds-drawer__footer\">\n <ng-content select=\"[drawer-footer]\"></ng-content>\n </div>\n </div>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n signal,\n computed,\n output,\n effect,\n AfterViewInit,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface TimeColumn {\n value: number;\n label: string;\n disabled: boolean;\n}\n\n@Component({\n selector: 'ds-time-picker-panel',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ds-time-picker-panel\" role=\"dialog\" aria-label=\"Time picker\">\n <div class=\"ds-time-picker-panel__columns\">\n <!-- Hours column -->\n <div class=\"ds-time-picker-panel__column\" role=\"listbox\" aria-label=\"Hours\">\n <div\n #hoursColumn\n class=\"ds-time-picker-panel__column-scroll\"\n (scroll)=\"onScroll('hours', $event)\">\n @for (hour of hoursOptions(); track hour.value) {\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"hour.value === selectedHours()\"\n [class.ds-time-picker-panel__option--disabled]=\"hour.disabled\"\n [disabled]=\"hour.disabled\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"hour.value === selectedHours()\"\n (click)=\"selectHours(hour.value)\">\n {{ hour.label }}\n </button>\n }\n </div>\n </div>\n\n <!-- Minutes column -->\n <div class=\"ds-time-picker-panel__column\" role=\"listbox\" aria-label=\"Minutes\">\n <div\n #minutesColumn\n class=\"ds-time-picker-panel__column-scroll\"\n (scroll)=\"onScroll('minutes', $event)\">\n @for (minute of minutesOptions(); track minute.value) {\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"minute.value === selectedMinutes()\"\n [class.ds-time-picker-panel__option--disabled]=\"minute.disabled\"\n [disabled]=\"minute.disabled\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"minute.value === selectedMinutes()\"\n (click)=\"selectMinutes(minute.value)\">\n {{ minute.label }}\n </button>\n }\n </div>\n </div>\n\n <!-- Seconds column (conditional) -->\n @if (showSeconds) {\n <div class=\"ds-time-picker-panel__column\" role=\"listbox\" aria-label=\"Seconds\">\n <div\n #secondsColumn\n class=\"ds-time-picker-panel__column-scroll\"\n (scroll)=\"onScroll('seconds', $event)\">\n @for (second of secondsOptions(); track second.value) {\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"second.value === selectedSeconds()\"\n [class.ds-time-picker-panel__option--disabled]=\"second.disabled\"\n [disabled]=\"second.disabled\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"second.value === selectedSeconds()\"\n (click)=\"selectSeconds(second.value)\">\n {{ second.label }}\n </button>\n }\n </div>\n </div>\n }\n\n <!-- AM/PM column (12h format) -->\n @if (format === '12h') {\n <div class=\"ds-time-picker-panel__column ds-time-picker-panel__column--period\" role=\"listbox\" aria-label=\"Period\">\n <div class=\"ds-time-picker-panel__column-scroll\">\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"selectedPeriod() === 'AM'\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"selectedPeriod() === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"selectedPeriod() === 'PM'\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"selectedPeriod() === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './ds-time-picker-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTimePickerPanelComponent implements AfterViewInit {\n @ViewChild('hoursColumn') hoursColumn?: ElementRef<HTMLDivElement>;\n @ViewChild('minutesColumn') minutesColumn?: ElementRef<HTMLDivElement>;\n @ViewChild('secondsColumn') secondsColumn?: ElementRef<HTMLDivElement>;\n\n // Config (set by parent)\n value = '';\n format: '12h' | '24h' = '24h';\n showSeconds = false;\n minuteStep = 1;\n hourStep = 1;\n minTime: string | null = null;\n maxTime: string | null = null;\n\n // Outputs\n readonly timeSelected = output<string>();\n\n // State\n readonly selectedHours = signal(0);\n readonly selectedMinutes = signal(0);\n readonly selectedSeconds = signal(0);\n readonly selectedPeriod = signal<'AM' | 'PM'>('AM');\n\n // Computed\n readonly hoursOptions = computed(() => {\n const options: TimeColumn[] = [];\n const max = this.format === '12h' ? 12 : 23;\n const start = this.format === '12h' ? 1 : 0;\n\n for (let i = start; i <= max; i += this.hourStep) {\n options.push({\n value: i,\n label: i.toString().padStart(2, '0'),\n disabled: this.isHourDisabled(i),\n });\n }\n\n return options;\n });\n\n readonly minutesOptions = computed(() => {\n const options: TimeColumn[] = [];\n\n for (let i = 0; i < 60; i += this.minuteStep) {\n options.push({\n value: i,\n label: i.toString().padStart(2, '0'),\n disabled: this.isMinuteDisabled(i),\n });\n }\n\n return options;\n });\n\n readonly secondsOptions = computed(() => {\n const options: TimeColumn[] = [];\n\n for (let i = 0; i < 60; i++) {\n options.push({\n value: i,\n label: i.toString().padStart(2, '0'),\n disabled: false,\n });\n }\n\n return options;\n });\n\n constructor() {\n // Parse initial value\n effect(() => {\n this.parseAndSetValue();\n }, { allowSignalWrites: true });\n\n // Emit when values change\n effect(() => {\n const hours = this.selectedHours();\n const minutes = this.selectedMinutes();\n const seconds = this.selectedSeconds();\n const period = this.selectedPeriod();\n\n this.emitTime(hours, minutes, seconds, period);\n });\n }\n\n ngAfterViewInit(): void {\n // Scroll to selected values\n setTimeout(() => {\n this.scrollToSelected();\n }, 0);\n }\n\n selectHours(hours: number): void {\n this.selectedHours.set(hours);\n }\n\n selectMinutes(minutes: number): void {\n this.selectedMinutes.set(minutes);\n }\n\n selectSeconds(seconds: number): void {\n this.selectedSeconds.set(seconds);\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod.set(period);\n }\n\n onScroll(column: 'hours' | 'minutes' | 'seconds', event: Event): void {\n // Optional: could implement snap-to-value on scroll end\n }\n\n private parseAndSetValue(): void {\n if (!this.value) {\n this.selectedHours.set(this.format === '12h' ? 12 : 0);\n this.selectedMinutes.set(0);\n this.selectedSeconds.set(0);\n this.selectedPeriod.set('AM');\n return;\n }\n\n const parts = this.value.split(':');\n if (parts.length < 2) return;\n\n let hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n const seconds = parts[2] ? parseInt(parts[2], 10) : 0;\n\n if (this.format === '12h') {\n const period = hours >= 12 ? 'PM' : 'AM';\n hours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n this.selectedPeriod.set(period);\n }\n\n this.selectedHours.set(hours);\n this.selectedMinutes.set(minutes);\n this.selectedSeconds.set(seconds);\n }\n\n private emitTime(hours: number, minutes: number, seconds: number, period: 'AM' | 'PM'): void {\n let finalHours = hours;\n\n if (this.format === '12h') {\n if (period === 'PM' && hours !== 12) {\n finalHours = hours + 12;\n } else if (period === 'AM' && hours === 12) {\n finalHours = 0;\n }\n }\n\n const hoursStr = finalHours.toString().padStart(2, '0');\n const minutesStr = minutes.toString().padStart(2, '0');\n const secondsStr = seconds.toString().padStart(2, '0');\n\n const timeString = this.showSeconds\n ? `${hoursStr}:${minutesStr}:${secondsStr}`\n : `${hoursStr}:${minutesStr}`;\n\n this.timeSelected.emit(timeString);\n }\n\n private isHourDisabled(hour: number): boolean {\n // TODO: implement minTime/maxTime validation\n return false;\n }\n\n private isMinuteDisabled(minute: number): boolean {\n // TODO: implement minTime/maxTime validation\n return false;\n }\n\n private scrollToSelected(): void {\n this.scrollColumnToValue(this.hoursColumn, this.selectedHours());\n this.scrollColumnToValue(this.minutesColumn, this.selectedMinutes());\n if (this.showSeconds && this.secondsColumn) {\n this.scrollColumnToValue(this.secondsColumn, this.selectedSeconds());\n }\n }\n\n private scrollColumnToValue(column: ElementRef<HTMLDivElement> | undefined, value: number): void {\n if (!column) return;\n\n const element = column.nativeElement;\n const options = element.querySelectorAll('.ds-time-picker-panel__option');\n const selectedOption = Array.from(options).find(\n (option) => option.textContent?.trim() === value.toString().padStart(2, '0')\n );\n\n if (selectedOption) {\n const optionElement = selectedOption as HTMLElement;\n element.scrollTop = optionElement.offsetTop - element.offsetHeight / 2 + optionElement.offsetHeight / 2;\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n forwardRef,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faClock, faChevronUp, faChevronDown } from '@fortawesome/free-solid-svg-icons';\nimport { OverlayModule, OverlayRef, Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DsTimePickerPanelComponent } from './ds-time-picker-panel.component';\n\nexport type TimePickerSize = 'sm' | 'md' | 'lg';\nexport type TimeFormat = '12h' | '24h';\n\nexport interface TimeValue {\n hours: number;\n minutes: number;\n seconds?: number;\n}\n\n/**\n * DsTimePicker - Composant de sélection d'heure\n *\n * @description\n * Sélecteur d'heure avec dropdown scrollable, support 12h/24h,\n * et intégration formulaires via ControlValueAccessor.\n *\n * @example\n * ```html\n * <ds-time-picker\n * [format]=\"'24h'\"\n * [showSeconds]=\"true\"\n * (timeChange)=\"onTimeChange($event)\">\n * </ds-time-picker>\n * ```\n */\n@Component({\n selector: 'ds-time-picker',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule, OverlayModule],\n templateUrl: './ds-time-picker.html',\n styleUrl: './ds-time-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsTimePicker),\n multi: true,\n },\n ],\n})\nexport class DsTimePicker implements ControlValueAccessor {\n // Inputs\n readonly value = input<string>('');\n readonly format = input<TimeFormat>('24h');\n readonly showSeconds = input(false);\n readonly minuteStep = input(1);\n readonly hourStep = input(1);\n readonly size = input<TimePickerSize>('md');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly placeholder = input('Select time');\n readonly minTime = input<string | null>(null);\n readonly maxTime = input<string | null>(null);\n\n // Outputs\n readonly timeChange = output<string>();\n\n // Icons\n readonly clockIcon = faClock;\n readonly upIcon = faChevronUp;\n readonly downIcon = faChevronDown;\n\n // State\n readonly isOpen = signal(false);\n readonly internalValue = signal<string>('');\n readonly isFocused = signal(false);\n\n // Overlay\n private overlayRef: OverlayRef | null = null;\n\n // Computed\n readonly containerClasses = computed(() => {\n const classes = ['ds-time-picker'];\n classes.push(`ds-time-picker--${this.size()}`);\n if (this.disabled()) classes.push('ds-time-picker--disabled');\n if (this.readonly()) classes.push('ds-time-picker--readonly');\n if (this.isFocused()) classes.push('ds-time-picker--focused');\n if (this.isOpen()) classes.push('ds-time-picker--open');\n return classes.join(' ');\n });\n\n readonly displayValue = computed(() => {\n const val = this.internalValue();\n if (!val) return '';\n\n const time = this.parseTime(val);\n if (!time) return val;\n\n return this.formatTimeForDisplay(time);\n });\n\n readonly isDisabled = computed(() => this.disabled() || this.readonly());\n\n // ControlValueAccessor\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor(private overlay: Overlay) {\n // Sync external value with internal\n effect(() => {\n const val = this.value();\n if (val !== this.internalValue()) {\n this.internalValue.set(val);\n }\n });\n }\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 // Géré par input disabled\n }\n\n toggle(): void {\n if (this.isDisabled()) return;\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.isDisabled() || this.isOpen()) return;\n\n this.isOpen.set(true);\n this.createOverlay();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n\n this.isOpen.set(false);\n this.destroyOverlay();\n this.onTouched();\n }\n\n onFocus(): void {\n if (!this.disabled()) {\n this.isFocused.set(true);\n }\n }\n\n onBlur(): void {\n this.isFocused.set(false);\n if (!this.isOpen()) {\n this.onTouched();\n }\n }\n\n onTimeSelected(timeString: string): void {\n this.updateValue(timeString);\n this.close();\n }\n\n private updateValue(value: string): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.timeChange.emit(value);\n }\n\n private createOverlay(): void {\n if (this.overlayRef) return;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(document.querySelector('.ds-time-picker__input') as HTMLElement)\n .withPositions([\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\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n const portal = new ComponentPortal(DsTimePickerPanelComponent);\n const componentRef = this.overlayRef.attach(portal);\n\n // Pass config to panel\n componentRef.instance.value = this.internalValue();\n componentRef.instance.format = this.format();\n componentRef.instance.showSeconds = this.showSeconds();\n componentRef.instance.minuteStep = this.minuteStep();\n componentRef.instance.hourStep = this.hourStep();\n componentRef.instance.minTime = this.minTime();\n componentRef.instance.maxTime = this.maxTime();\n componentRef.instance.timeSelected.subscribe((time: string) => {\n this.onTimeSelected(time);\n });\n\n this.overlayRef.backdropClick().subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private parseTime(timeString: string): TimeValue | null {\n if (!timeString) return null;\n\n const parts = timeString.split(':');\n if (parts.length < 2) return null;\n\n const hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n const seconds = parts[2] ? parseInt(parts[2], 10) : undefined;\n\n if (isNaN(hours) || isNaN(minutes)) return null;\n if (seconds !== undefined && isNaN(seconds)) return null;\n\n return { hours, minutes, seconds };\n }\n\n private formatTimeForDisplay(time: TimeValue): string {\n const { hours, minutes, seconds } = time;\n\n if (this.format() === '12h') {\n const period = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const formattedMinutes = minutes.toString().padStart(2, '0');\n\n if (this.showSeconds() && seconds !== undefined) {\n const formattedSeconds = seconds.toString().padStart(2, '0');\n return `${displayHours}:${formattedMinutes}:${formattedSeconds} ${period}`;\n }\n\n return `${displayHours}:${formattedMinutes} ${period}`;\n } else {\n const formattedHours = hours.toString().padStart(2, '0');\n const formattedMinutes = minutes.toString().padStart(2, '0');\n\n if (this.showSeconds() && seconds !== undefined) {\n const formattedSeconds = seconds.toString().padStart(2, '0');\n return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;\n }\n\n return `${formattedHours}:${formattedMinutes}`;\n }\n }\n}\n","<div [class]=\"containerClasses()\">\n <div class=\"ds-time-picker__wrapper\">\n <div\n class=\"ds-time-picker__input\"\n [class.ds-time-picker__input--disabled]=\"disabled()\"\n [class.ds-time-picker__input--readonly]=\"readonly()\"\n [class.ds-time-picker__input--focused]=\"isFocused()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-label]=\"placeholder()\"\n (click)=\"toggle()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\">\n\n <fa-icon\n class=\"ds-time-picker__icon\"\n [icon]=\"clockIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n\n <span class=\"ds-time-picker__display\">\n @if (displayValue(); as display) {\n {{ display }}\n } @else {\n <span class=\"ds-time-picker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n </div>\n </div>\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faChevronRight,\n faChevronDown,\n faFolder,\n faFile,\n faFolderOpen,\n} from '@fortawesome/free-solid-svg-icons';\nimport type { TreeNode } from './ds-tree';\n\n@Component({\n selector: 'ds-tree-node',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule, DsTreeNodeComponent],\n template: `\n <div\n class=\"ds-tree-node\"\n [class.ds-tree-node--selected]=\"isSelected()\"\n [class.ds-tree-node--disabled]=\"node().disabled\"\n [attr.role]=\"'treeitem'\"\n [attr.aria-selected]=\"isSelected()\"\n [attr.aria-expanded]=\"hasChildren() ? isExpanded() : null\"\n [attr.aria-disabled]=\"node().disabled\"\n [attr.tabindex]=\"node().disabled ? -1 : 0\"\n (click)=\"handleClick($event)\"\n (keydown.enter)=\"handleClick($event)\"\n (keydown.space)=\"handleClick($event); $event.preventDefault()\"\n (keydown.arrowRight)=\"handleArrowRight($event)\"\n (keydown.arrowLeft)=\"handleArrowLeft($event)\">\n\n <div class=\"ds-tree-node__content\" [style.padding-left.px]=\"level() * 20\">\n <!-- Expand/collapse toggle -->\n @if (hasChildren()) {\n <button\n type=\"button\"\n class=\"ds-tree-node__toggle\"\n [attr.aria-label]=\"isExpanded() ? 'Collapse' : 'Expand'\"\n (click)=\"handleToggle($event)\">\n <fa-icon\n [icon]=\"isExpanded() ? expandedIcon : collapsedIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n </button>\n } @else {\n <span class=\"ds-tree-node__toggle-placeholder\"></span>\n }\n\n <!-- Checkbox (if checkable) -->\n @if (checkable()) {\n <input\n type=\"checkbox\"\n class=\"ds-tree-node__checkbox\"\n [checked]=\"isChecked()\"\n [indeterminate]=\"isIndeterminate()\"\n [disabled]=\"node().disabled\"\n (change)=\"handleCheck($event)\"\n (click)=\"$event.stopPropagation()\">\n }\n\n <!-- Icon -->\n @if (showIcon()) {\n <fa-icon\n class=\"ds-tree-node__icon\"\n [icon]=\"nodeIcon()\"\n aria-hidden=\"true\">\n </fa-icon>\n }\n\n <!-- Label -->\n <span class=\"ds-tree-node__label\">{{ node().label }}</span>\n </div>\n </div>\n\n <!-- Children (recursive) -->\n @if (hasChildren() && isExpanded()) {\n <div class=\"ds-tree-node__children\" role=\"group\">\n @for (child of node().children; track child.id) {\n <ds-tree-node\n [node]=\"child\"\n [level]=\"level() + 1\"\n [selectable]=\"selectable()\"\n [checkable]=\"checkable()\"\n [showIcon]=\"showIcon()\"\n [selectedNodeId]=\"selectedNodeId()\"\n [expandedNodeIds]=\"expandedNodeIds()\"\n [checkedNodeIds]=\"checkedNodeIds()\"\n [getIndeterminateState]=\"getIndeterminateState()\"\n (nodeClick)=\"nodeClick.emit($event)\"\n (nodeToggle)=\"nodeToggle.emit($event)\"\n (nodeCheck)=\"nodeCheck.emit($event)\">\n </ds-tree-node>\n }\n </div>\n }\n `,\n styleUrl: './ds-tree-node.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTreeNodeComponent {\n // Inputs\n readonly node = input.required<TreeNode>();\n readonly level = input(0);\n readonly selectable = input(true);\n readonly checkable = input(false);\n readonly showIcon = input(true);\n readonly selectedNodeId = input<string | number | null>(null);\n readonly expandedNodeIds = input<Set<string | number>>(new Set());\n readonly checkedNodeIds = input<Set<string | number>>(new Set());\n readonly getIndeterminateState = input<((node: TreeNode) => boolean) | null>(null);\n\n // Outputs\n readonly nodeClick = output<TreeNode>();\n readonly nodeToggle = output<TreeNode>();\n readonly nodeCheck = output<{ node: TreeNode; checked: boolean }>();\n\n // Icons\n readonly collapsedIcon = faChevronRight;\n readonly expandedIcon = faChevronDown;\n readonly folderIcon = faFolder;\n readonly folderOpenIcon = faFolderOpen;\n readonly fileIcon = faFile;\n\n // Computed\n readonly hasChildren = computed(() => {\n const children = this.node().children;\n return !!children && children.length > 0;\n });\n\n readonly isExpanded = computed(() => {\n return this.expandedNodeIds().has(this.node().id);\n });\n\n readonly isSelected = computed(() => {\n return this.selectedNodeId() === this.node().id;\n });\n\n readonly isChecked = computed(() => {\n return this.checkedNodeIds().has(this.node().id);\n });\n\n readonly isIndeterminate = computed(() => {\n const fn = this.getIndeterminateState();\n return fn ? fn(this.node()) : false;\n });\n\n readonly nodeIcon = computed(() => {\n const node = this.node();\n\n // Custom icon\n if (node.icon) {\n // TODO: support custom icons\n return this.fileIcon;\n }\n\n // Default folder/file icons\n if (this.hasChildren()) {\n return this.isExpanded() ? this.folderOpenIcon : this.folderIcon;\n }\n\n return this.fileIcon;\n });\n\n handleClick(event: Event): void {\n event.stopPropagation();\n if (!this.node().disabled && this.selectable()) {\n this.nodeClick.emit(this.node());\n }\n }\n\n handleToggle(event: Event): void {\n event.stopPropagation();\n if (!this.node().disabled) {\n this.nodeToggle.emit(this.node());\n }\n }\n\n handleCheck(event: Event): void {\n event.stopPropagation();\n const checkbox = event.target as HTMLInputElement;\n if (!this.node().disabled) {\n this.nodeCheck.emit({ node: this.node(), checked: checkbox.checked });\n }\n }\n\n handleArrowRight(event: Event): void {\n event.preventDefault();\n if (this.hasChildren() && !this.isExpanded()) {\n this.handleToggle(event);\n }\n }\n\n handleArrowLeft(event: Event): void {\n event.preventDefault();\n if (this.hasChildren() && this.isExpanded()) {\n this.handleToggle(event);\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DsTreeNodeComponent } from './ds-tree-node.component';\n\nexport type TreeSize = 'sm' | 'md' | 'lg';\n\nexport interface TreeNode {\n id: string | number;\n label: string;\n children?: TreeNode[];\n icon?: string;\n disabled?: boolean;\n expanded?: boolean;\n checked?: boolean;\n data?: any;\n}\n\nexport interface TreeNodeSelectEvent {\n node: TreeNode;\n selected: boolean;\n}\n\nexport interface TreeNodeExpandEvent {\n node: TreeNode;\n expanded: boolean;\n}\n\nexport interface TreeNodeCheckEvent {\n node: TreeNode;\n checked: boolean;\n}\n\n/**\n * DsTree - Composant d'affichage hiérarchique\n *\n * @description\n * Arbre hiérarchique avec support de sélection, checkbox,\n * expand/collapse, et navigation clavier.\n *\n * @example\n * ```html\n * <ds-tree\n * [data]=\"treeData\"\n * [selectable]=\"true\"\n * (nodeSelect)=\"onNodeSelect($event)\">\n * </ds-tree>\n * ```\n */\n@Component({\n selector: 'ds-tree',\n standalone: true,\n imports: [CommonModule, DsTreeNodeComponent],\n templateUrl: './ds-tree.html',\n styleUrl: './ds-tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTree {\n // Inputs\n readonly data = input<TreeNode[]>([]);\n readonly selectable = input(true);\n readonly checkable = input(false);\n readonly expandAll = input(false);\n readonly showIcon = input(true);\n readonly showLine = input(false);\n readonly draggable = input(false);\n readonly virtualScroll = input(false);\n readonly size = input<TreeSize>('md');\n readonly loadChildren = input<((node: TreeNode) => Promise<TreeNode[]>) | null>(null);\n\n // Outputs\n readonly nodeSelect = output<TreeNodeSelectEvent>();\n readonly nodeExpand = output<TreeNodeExpandEvent>();\n readonly nodeCheck = output<TreeNodeCheckEvent>();\n\n // State\n readonly selectedNodeId = signal<string | number | null>(null);\n readonly expandedNodeIds = signal<Set<string | number>>(new Set());\n readonly checkedNodeIds = signal<Set<string | number>>(new Set());\n\n // Computed\n readonly containerClasses = computed(() => {\n const classes = ['ds-tree'];\n classes.push(`ds-tree--${this.size()}`);\n if (this.showLine()) classes.push('ds-tree--with-lines');\n if (this.checkable()) classes.push('ds-tree--checkable');\n return classes.join(' ');\n });\n\n readonly processedData = computed(() => {\n const data = this.data();\n if (this.expandAll()) {\n this.expandAllNodes(data);\n }\n return data;\n });\n\n constructor() {\n // Initialize expanded state from data\n this.initializeExpandedState();\n }\n\n onNodeClick(node: TreeNode): void {\n if (node.disabled || !this.selectable()) return;\n\n this.selectedNodeId.set(node.id);\n this.nodeSelect.emit({ node, selected: true });\n }\n\n onNodeToggle(node: TreeNode): void {\n if (node.disabled) return;\n\n const expanded = !this.isExpanded(node.id);\n this.toggleExpand(node.id, expanded);\n this.nodeExpand.emit({ node, expanded });\n\n // Load children if lazy loading\n if (expanded && this.loadChildren()) {\n const loader = this.loadChildren();\n if (loader) {\n loader(node).then((children) => {\n node.children = children;\n });\n }\n }\n }\n\n onNodeCheck(node: TreeNode, checked: boolean): void {\n if (node.disabled) return;\n\n this.setNodeChecked(node, checked);\n this.nodeCheck.emit({ node, checked });\n }\n\n isSelected(nodeId: string | number): boolean {\n return this.selectedNodeId() === nodeId;\n }\n\n isExpanded(nodeId: string | number): boolean {\n return this.expandedNodeIds().has(nodeId);\n }\n\n isChecked(nodeId: string | number): boolean {\n return this.checkedNodeIds().has(nodeId);\n }\n\n getIndeterminateState(node: TreeNode): boolean {\n if (!node.children || node.children.length === 0) return false;\n\n const checkedChildren = node.children.filter((child) => this.isChecked(child.id));\n return checkedChildren.length > 0 && checkedChildren.length < node.children.length;\n }\n\n private toggleExpand(nodeId: string | number, expanded: boolean): void {\n const expandedIds = new Set(this.expandedNodeIds());\n if (expanded) {\n expandedIds.add(nodeId);\n } else {\n expandedIds.delete(nodeId);\n }\n this.expandedNodeIds.set(expandedIds);\n }\n\n private setNodeChecked(node: TreeNode, checked: boolean): void {\n const checkedIds = new Set(this.checkedNodeIds());\n\n // Update current node\n if (checked) {\n checkedIds.add(node.id);\n } else {\n checkedIds.delete(node.id);\n }\n\n // Update all children recursively\n if (node.children) {\n this.updateChildrenChecked(node.children, checked, checkedIds);\n }\n\n this.checkedNodeIds.set(checkedIds);\n }\n\n private updateChildrenChecked(\n children: TreeNode[],\n checked: boolean,\n checkedIds: Set<string | number>\n ): void {\n children.forEach((child) => {\n if (!child.disabled) {\n if (checked) {\n checkedIds.add(child.id);\n } else {\n checkedIds.delete(child.id);\n }\n\n if (child.children) {\n this.updateChildrenChecked(child.children, checked, checkedIds);\n }\n }\n });\n }\n\n private expandAllNodes(nodes: TreeNode[]): void {\n const expandedIds = new Set(this.expandedNodeIds());\n\n const expand = (items: TreeNode[]) => {\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n expandedIds.add(item.id);\n expand(item.children);\n }\n });\n };\n\n expand(nodes);\n this.expandedNodeIds.set(expandedIds);\n }\n\n private initializeExpandedState(): void {\n const data = this.data();\n const expandedIds = new Set<string | number>();\n\n const findExpanded = (nodes: TreeNode[]) => {\n nodes.forEach((node) => {\n if (node.expanded) {\n expandedIds.add(node.id);\n }\n if (node.children) {\n findExpanded(node.children);\n }\n });\n };\n\n findExpanded(data);\n this.expandedNodeIds.set(expandedIds);\n }\n}\n","<div [class]=\"containerClasses()\" role=\"tree\">\n @if (processedData().length === 0) {\n <div class=\"ds-tree__empty\">\n <p>No data available</p>\n </div>\n } @else {\n @for (node of processedData(); track node.id) {\n <ds-tree-node\n [node]=\"node\"\n [level]=\"0\"\n [selectable]=\"selectable()\"\n [checkable]=\"checkable()\"\n [showIcon]=\"showIcon()\"\n [selectedNodeId]=\"selectedNodeId()\"\n [expandedNodeIds]=\"expandedNodeIds()\"\n [checkedNodeIds]=\"checkedNodeIds()\"\n [getIndeterminateState]=\"getIndeterminateState.bind(this)\"\n (nodeClick)=\"onNodeClick($event)\"\n (nodeToggle)=\"onNodeToggle($event)\"\n (nodeCheck)=\"onNodeCheck($event.node, $event.checked)\">\n </ds-tree-node>\n }\n }\n</div>\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\nexport {\n DsChip,\n type ChipVariant,\n type ChipSize,\n type ChipColor,\n} from './ds-chip/ds-chip';\n\nexport {\n DsSlider,\n type SliderSize,\n type SliderValue,\n type SliderOrientation,\n} from './ds-slider/ds-slider';\n\nexport {\n DsFileUpload,\n type FileUploadSize,\n type UploadFile,\n} from './ds-file-upload/ds-file-upload';\n\nexport {\n DsEmpty,\n type EmptySize,\n} from './ds-empty/ds-empty';\n\nexport {\n DsRating,\n type RatingSize,\n} from './ds-rating/ds-rating';\n\nexport {\n DsDrawer,\n type DrawerPosition,\n type DrawerSize,\n} from './ds-drawer/ds-drawer';\n\nexport {\n DsTimePicker,\n type TimePickerSize,\n type TimeFormat,\n type TimeValue,\n} from './ds-time-picker/ds-time-picker';\n\nexport {\n DsTree,\n type TreeSize,\n type TreeNode,\n type TreeNodeSelectEvent,\n type TreeNodeExpandEvent,\n type TreeNodeCheckEvent,\n} from './ds-tree/ds-tree';\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","i2"],"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/ds-chip/ds-chip.ts","../../../projects/ds-angular/src/lib/components/ds-chip/ds-chip.html","../../../projects/ds-angular/src/lib/components/ds-slider/ds-slider.ts","../../../projects/ds-angular/src/lib/components/ds-slider/ds-slider.html","../../../projects/ds-angular/src/lib/components/ds-file-upload/ds-file-upload.ts","../../../projects/ds-angular/src/lib/components/ds-file-upload/ds-file-upload.html","../../../projects/ds-angular/src/lib/components/ds-empty/ds-empty.ts","../../../projects/ds-angular/src/lib/components/ds-empty/ds-empty.html","../../../projects/ds-angular/src/lib/components/ds-rating/ds-rating.ts","../../../projects/ds-angular/src/lib/components/ds-rating/ds-rating.html","../../../projects/ds-angular/src/lib/components/ds-drawer/ds-drawer.ts","../../../projects/ds-angular/src/lib/components/ds-drawer/ds-drawer.html","../../../projects/ds-angular/src/lib/components/ds-time-picker/ds-time-picker-panel.component.ts","../../../projects/ds-angular/src/lib/components/ds-time-picker/ds-time-picker.ts","../../../projects/ds-angular/src/lib/components/ds-time-picker/ds-time-picker.html","../../../projects/ds-angular/src/lib/components/ds-tree/ds-tree-node.component.ts","../../../projects/ds-angular/src/lib/components/ds-tree/ds-tree.ts","../../../projects/ds-angular/src/lib/components/ds-tree/ds-tree.html","../../../projects/ds-angular/src/lib/components/ds-password-strength/ds-password-strength.ts","../../../projects/ds-angular/src/lib/components/ds-password-strength/ds-password-strength.html","../../../projects/ds-angular/src/lib/components/ds-timeline/ds-timeline.ts","../../../projects/ds-angular/src/lib/components/ds-timeline/ds-timeline.html","../../../projects/ds-angular/src/lib/components/ds-transfer/ds-transfer.ts","../../../projects/ds-angular/src/lib/components/ds-transfer/ds-transfer.html","../../../projects/ds-angular/src/lib/components/ds-carousel/ds-carousel.ts","../../../projects/ds-angular/src/lib/components/ds-carousel/ds-carousel.html","../../../projects/ds-angular/src/lib/components/ds-notification/ds-notification.service.ts","../../../projects/ds-angular/src/lib/components/ds-notification/ds-notification-item.component.ts","../../../projects/ds-angular/src/lib/components/ds-notification/ds-notification-item.component.html","../../../projects/ds-angular/src/lib/components/ds-notification/ds-notification-container.component.ts","../../../projects/ds-angular/src/lib/components/ds-calendar/ds-calendar.ts","../../../projects/ds-angular/src/lib/components/ds-calendar/ds-calendar.html","../../../projects/ds-angular/src/lib/components/ds-input-number/ds-input-number.ts","../../../projects/ds-angular/src/lib/components/ds-input-number/ds-input-number.html","../../../projects/ds-angular/src/lib/components/ds-segmented-control/ds-segmented-control.ts","../../../projects/ds-angular/src/lib/components/ds-segmented-control/ds-segmented-control.html","../../../projects/ds-angular/src/lib/components/ds-color-picker/color-picker-panel.component.ts","../../../projects/ds-angular/src/lib/components/ds-color-picker/ds-color-picker.ts","../../../projects/ds-angular/src/lib/components/ds-color-picker/ds-color-picker.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\nexport interface DatePreset {\n label: string;\n getValue: () => DateRange;\n}\n\n/** Presets prédéfinis pour le mode range */\nexport const DEFAULT_DATE_PRESETS: DatePreset[] = [\n {\n label: \"Aujourd'hui\",\n getValue: () => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return { start: today, end: today };\n },\n },\n {\n label: '7 derniers jours',\n getValue: () => {\n const end = new Date();\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(start.getDate() - 6);\n return { start, end };\n },\n },\n {\n label: '30 derniers jours',\n getValue: () => {\n const end = new Date();\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(start.getDate() - 29);\n return { start, end };\n },\n },\n {\n label: 'Ce mois',\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth(), 1);\n const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);\n return { start, end };\n },\n },\n {\n label: 'Mois dernier',\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);\n const end = new Date(now.getFullYear(), now.getMonth(), 0);\n return { start, end };\n },\n },\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--in-preview]=\"day.isInPreviewRange\"\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 (mouseenter)=\"onDayMouseEnter(day.date)\"\n (mouseleave)=\"onDayMouseLeave()\">\n {{ day.dayNumber }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Presets (mode range uniquement) -->\n @if (showPresets() && mode() === 'range') {\n <div class=\"ds-date-picker__presets\">\n @for (preset of effectivePresets(); track preset.label) {\n <button\n type=\"button\"\n class=\"ds-date-picker__preset\"\n [disabled]=\"disabled()\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label }}\n </button>\n }\n </div>\n }\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 /** Presets pour le mode range */\n readonly presets = input<DatePreset[]>([]);\n\n /** Afficher les presets */\n readonly showPresets = input<boolean>(false);\n\n /** Activer le preview au survol en mode range */\n readonly showRangePreview = input<boolean>(true);\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 readonly hoveredDate = signal<Date | null>(null);\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 isInPreviewRange = this.isDateInPreviewRange(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 isInPreviewRange,\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 isDateInPreviewRange(date: Date): boolean {\n if (this.mode() !== 'range' || !this.showRangePreview()) return false;\n const start = this.rangeStart();\n const end = this.rangeEnd();\n const hovered = this.hoveredDate();\n\n // Seulement si on a un start mais pas de end, et on survole\n if (!start || end || !hovered) return false;\n\n const minDate = start < hovered ? start : hovered;\n const maxDate = start < hovered ? hovered : start;\n\n return date > minDate && date < maxDate;\n }\n\n onDayMouseEnter(date: Date | null): void {\n if (date && this.mode() === 'range' && this.showRangePreview() && this.rangeStart() && !this.rangeEnd()) {\n this.hoveredDate.set(date);\n }\n }\n\n onDayMouseLeave(): void {\n this.hoveredDate.set(null);\n }\n\n selectPreset(preset: DatePreset): void {\n const range = preset.getValue();\n this.rangeStart.set(range.start);\n this.rangeEnd.set(range.end);\n this.rangeChange.emit(range);\n this.onChange(range);\n\n // Naviguer vers le mois du début\n if (range.start) {\n this.currentMonth.set(range.start.getMonth());\n this.currentYear.set(range.start.getFullYear());\n }\n }\n\n /** Presets effectifs (utilise les presets fournis ou les défauts) */\n readonly effectivePresets = computed(() => {\n const custom = this.presets();\n return custom.length > 0 ? custom : DEFAULT_DATE_PRESETS;\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 isInPreviewRange: 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","import {\n Component,\n input,\n output,\n computed,\n signal,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { faXmark } from '@fortawesome/free-solid-svg-icons';\n\nexport type ChipVariant = 'filled' | 'outlined';\nexport type ChipSize = 'sm' | 'md' | 'lg';\nexport type ChipColor = 'default' | 'primary' | 'success' | 'warning' | 'error';\n\n/**\n * Design System Chip component\n *\n * @example\n * ```html\n * <ds-chip label=\"Tag\" />\n * <ds-chip label=\"Removable\" [removable]=\"true\" (removed)=\"onRemove()\" />\n * <ds-chip label=\"Clickable\" [clickable]=\"true\" (clicked)=\"onClick()\" />\n * <ds-chip label=\"With icon\" icon=\"fas-star\" />\n * ```\n */\n@Component({\n selector: 'ds-chip',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-chip.html',\n styleUrls: ['./ds-chip.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsChip {\n // Inputs\n readonly label = input.required<string>();\n readonly variant = input<ChipVariant>('filled');\n readonly size = input<ChipSize>('md');\n readonly color = input<ChipColor>('default');\n readonly removable = input<boolean>(false);\n readonly clickable = input<boolean>(false);\n readonly selected = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly icon = input<string>('');\n readonly avatar = input<string>('');\n\n // Outputs\n readonly removed = output<void>();\n readonly clicked = output<void>();\n readonly selectedChange = output<boolean>();\n\n // Internal state\n readonly isSelected = signal(false);\n\n // Icons\n readonly closeIcon: IconDefinition = faXmark;\n\n // Computed classes\n readonly chipClasses = computed(() => {\n const classes: string[] = ['ds-chip'];\n\n classes.push(`ds-chip--${this.variant()}`);\n classes.push(`ds-chip--${this.size()}`);\n classes.push(`ds-chip--${this.color()}`);\n\n if (this.clickable() && !this.disabled()) {\n classes.push('ds-chip--clickable');\n }\n\n if (this.selected()) {\n classes.push('ds-chip--selected');\n }\n\n if (this.disabled()) {\n classes.push('ds-chip--disabled');\n }\n\n return classes.join(' ');\n });\n\n // Computed role\n readonly role = computed(() => {\n return this.clickable() ? 'button' : null;\n });\n\n // Computed tabindex\n readonly tabindex = computed(() => {\n if (this.disabled()) return -1;\n if (this.clickable() || this.removable()) return 0;\n return null;\n });\n\n // Computed aria-selected\n readonly ariaSelected = computed(() => {\n return this.clickable() ? this.selected() : null;\n });\n\n // Computed aria-disabled\n readonly ariaDisabled = computed(() => {\n return this.disabled() ? true : null;\n });\n\n /**\n * Handle chip click\n */\n handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n\n if (this.clickable()) {\n this.isSelected.set(!this.selected());\n this.clicked.emit();\n this.selectedChange.emit(!this.selected());\n }\n }\n\n /**\n * Handle remove button click\n */\n handleRemove(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (this.disabled()) {\n return;\n }\n\n this.removed.emit();\n }\n\n /**\n * Handle keyboard events\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n // Handle Enter or Space for clickable chips\n if (this.clickable() && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.handleClick(event as any);\n }\n\n // Handle Delete or Backspace for removable chips\n if (\n this.removable() &&\n (event.key === 'Delete' || event.key === 'Backspace')\n ) {\n event.preventDefault();\n this.handleRemove(event as any);\n }\n }\n}\n","<div\n [class]=\"chipClasses()\"\n [attr.role]=\"role()\"\n [attr.tabindex]=\"tabindex()\"\n [attr.aria-selected]=\"ariaSelected()\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n>\n <!-- Avatar -->\n @if (avatar()) {\n <img\n class=\"ds-chip__avatar\"\n [src]=\"avatar()\"\n [alt]=\"label()\"\n />\n }\n\n <!-- Icon -->\n @if (icon() && !avatar()) {\n <fa-icon\n class=\"ds-chip__icon\"\n [icon]=\"['fas', icon()]\"\n [fixedWidth]=\"true\"\n />\n }\n\n <!-- Label -->\n <span class=\"ds-chip__label\">{{ label() }}</span>\n\n <!-- Remove button -->\n @if (removable() && !disabled()) {\n <button\n type=\"button\"\n class=\"ds-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"handleRemove($event)\"\n >\n <fa-icon\n [icon]=\"closeIcon\"\n [fixedWidth]=\"true\"\n />\n </button>\n }\n</div>\n","import { Component, forwardRef, input, output, signal, computed, effect, ElementRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nexport type SliderSize = 'sm' | 'md' | 'lg';\nexport type SliderValue = number | [number, number];\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\n@Component({\n selector: 'ds-slider',\n imports: [CommonModule],\n templateUrl: './ds-slider.html',\n styleUrl: './ds-slider.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSlider),\n multi: true,\n },\n ],\n})\nexport class DsSlider implements ControlValueAccessor {\n // Config\n min = input<number>(0);\n max = input<number>(100);\n step = input<number>(1);\n disabled = input<boolean>(false);\n size = input<SliderSize>('md');\n range = input<boolean>(false);\n orientation = input<SliderOrientation>('horizontal');\n\n // Display\n showLabels = input<boolean>(false);\n showTicks = input<boolean>(false);\n tickInterval = input<number | undefined>(undefined);\n formatLabel = input<((value: number) => string) | undefined>(undefined);\n\n // Events\n valueChange = output<SliderValue>();\n\n // ViewChild\n @ViewChild('track', { static: false }) trackElement?: ElementRef<HTMLDivElement>;\n @ViewChild('thumb1', { static: false }) thumb1Element?: ElementRef<HTMLDivElement>;\n @ViewChild('thumb2', { static: false }) thumb2Element?: ElementRef<HTMLDivElement>;\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n readonly internalValue = signal<SliderValue>(0);\n readonly dragging = signal<number | null>(null); // null, 0 (first thumb), 1 (second thumb)\n readonly focusedThumb = signal<number>(0); // 0 or 1\n\n constructor() {\n // Effect pour synchroniser la valeur initiale\n effect(() => {\n const currentValue = this.internalValue();\n const isRange = this.range();\n const minVal = this.min();\n\n // Initialisation par défaut\n if (typeof currentValue === 'number' && isRange) {\n this.internalValue.set([minVal, currentValue]);\n } else if (Array.isArray(currentValue) && !isRange) {\n this.internalValue.set(currentValue[0]);\n }\n });\n }\n\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n readonly isRange = computed<boolean>(() => this.range());\n readonly isVertical = computed<boolean>(() => this.orientation() === 'vertical');\n\n readonly containerClasses = computed<string>(() => {\n const classes: string[] = ['ds-slider'];\n classes.push(`ds-slider--${this.size()}`);\n if (this.isDisabled()) classes.push('ds-slider--disabled');\n if (this.isVertical()) classes.push('ds-slider--vertical');\n return classes.join(' ');\n });\n\n readonly value1 = computed<number>(() => {\n const val = this.internalValue();\n return Array.isArray(val) ? val[0] : val;\n });\n\n readonly value2 = computed<number>(() => {\n const val = this.internalValue();\n return Array.isArray(val) ? val[1] : this.max();\n });\n\n readonly percentage1 = computed<number>(() => {\n return this.valueToPercentage(this.value1());\n });\n\n readonly percentage2 = computed<number>(() => {\n return this.valueToPercentage(this.value2());\n });\n\n readonly thumb1Style = computed(() => {\n if (this.isVertical()) {\n return { bottom: `${this.percentage1()}%` };\n }\n return { left: `${this.percentage1()}%` };\n });\n\n readonly thumb2Style = computed(() => {\n if (!this.isRange()) return {};\n if (this.isVertical()) {\n return { bottom: `${this.percentage2()}%` };\n }\n return { left: `${this.percentage2()}%` };\n });\n\n readonly fillStyle = computed(() => {\n const p1 = this.percentage1();\n const p2 = this.percentage2();\n\n if (this.isVertical()) {\n if (this.isRange()) {\n return {\n bottom: `${p1}%`,\n height: `${p2 - p1}%`,\n };\n }\n return {\n bottom: '0%',\n height: `${p1}%`,\n };\n }\n\n if (this.isRange()) {\n return {\n left: `${p1}%`,\n width: `${p2 - p1}%`,\n };\n }\n return {\n left: '0%',\n width: `${p1}%`,\n };\n });\n\n readonly ticks = computed<number[]>(() => {\n if (!this.showTicks()) return [];\n\n const interval = this.tickInterval() ?? this.step();\n const minVal = this.min();\n const maxVal = this.max();\n const ticks: number[] = [];\n\n for (let val = minVal; val <= maxVal; val += interval) {\n ticks.push(val);\n }\n\n return ticks;\n });\n\n readonly label1 = computed<string>(() => {\n const formatter = this.formatLabel();\n const val = this.value1();\n return formatter ? formatter(val) : val.toString();\n });\n\n readonly label2 = computed<string>(() => {\n if (!this.isRange()) return '';\n const formatter = this.formatLabel();\n const val = this.value2();\n return formatter ? formatter(val) : val.toString();\n });\n\n // ControlValueAccessor\n private onChange: (value: SliderValue) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: SliderValue | null): void {\n if (value === null) {\n this.internalValue.set(this.range() ? [this.min(), this.max()] : this.min());\n return;\n }\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: SliderValue) => 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 // Helpers\n private valueToPercentage(value: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n return ((value - minVal) / (maxVal - minVal)) * 100;\n }\n\n private percentageToValue(percentage: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n const stepVal = this.step();\n const rawValue = minVal + (percentage / 100) * (maxVal - minVal);\n const steppedValue = Math.round(rawValue / stepVal) * stepVal;\n return Math.max(minVal, Math.min(maxVal, steppedValue));\n }\n\n private clampValue(value: number): number {\n return Math.max(this.min(), Math.min(this.max(), value));\n }\n\n private emitValue(): void {\n const val = this.internalValue();\n this.onChange(val);\n this.valueChange.emit(val);\n }\n\n // Event handlers - Keyboard\n onKeyDown(event: KeyboardEvent, thumbIndex: number): void {\n if (this.isDisabled()) return;\n\n const stepVal = this.step();\n const minVal = this.min();\n const maxVal = this.max();\n let handled = true;\n let newValue: number | undefined;\n\n const currentValue = thumbIndex === 0 ? this.value1() : this.value2();\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = currentValue + stepVal;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = currentValue - stepVal;\n break;\n case 'Home':\n newValue = minVal;\n break;\n case 'End':\n newValue = maxVal;\n break;\n case 'PageUp':\n newValue = currentValue + stepVal * 10;\n break;\n case 'PageDown':\n newValue = currentValue - stepVal * 10;\n break;\n default:\n handled = false;\n }\n\n if (!handled || newValue === undefined) return;\n\n event.preventDefault();\n newValue = this.clampValue(newValue);\n\n if (this.isRange()) {\n const val = this.internalValue() as [number, number];\n if (thumbIndex === 0) {\n // Thumb 1: ne peut pas dépasser thumb 2\n newValue = Math.min(newValue, val[1]);\n this.internalValue.set([newValue, val[1]]);\n } else {\n // Thumb 2: ne peut pas être inférieur à thumb 1\n newValue = Math.max(newValue, val[0]);\n this.internalValue.set([val[0], newValue]);\n }\n } else {\n this.internalValue.set(newValue);\n }\n\n this.emitValue();\n }\n\n // Event handlers - Mouse/Touch\n onTrackClick(event: MouseEvent): void {\n if (this.isDisabled() || !this.trackElement) return;\n\n const rect = this.trackElement.nativeElement.getBoundingClientRect();\n let percentage: number;\n\n if (this.isVertical()) {\n percentage = ((rect.bottom - event.clientY) / rect.height) * 100;\n } else {\n percentage = ((event.clientX - rect.left) / rect.width) * 100;\n }\n\n const newValue = this.percentageToValue(percentage);\n\n if (this.isRange()) {\n const val = this.internalValue() as [number, number];\n // Détermine quel thumb est le plus proche\n const dist1 = Math.abs(newValue - val[0]);\n const dist2 = Math.abs(newValue - val[1]);\n\n if (dist1 < dist2) {\n this.internalValue.set([newValue, val[1]]);\n this.focusedThumb.set(0);\n } else {\n this.internalValue.set([val[0], newValue]);\n this.focusedThumb.set(1);\n }\n } else {\n this.internalValue.set(newValue);\n }\n\n this.emitValue();\n this.onTouched();\n }\n\n onThumbMouseDown(event: MouseEvent, thumbIndex: number): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(thumbIndex);\n this.focusedThumb.set(thumbIndex);\n\n const moveHandler = (e: MouseEvent) => this.onMouseMove(e);\n const upHandler = () => {\n this.dragging.set(null);\n this.onTouched();\n document.removeEventListener('mousemove', moveHandler);\n document.removeEventListener('mouseup', upHandler);\n };\n\n document.addEventListener('mousemove', moveHandler);\n document.addEventListener('mouseup', upHandler);\n }\n\n private onMouseMove(event: MouseEvent): void {\n const thumbIndex = this.dragging();\n if (thumbIndex === null || !this.trackElement) return;\n\n const rect = this.trackElement.nativeElement.getBoundingClientRect();\n let percentage: number;\n\n if (this.isVertical()) {\n percentage = ((rect.bottom - event.clientY) / rect.height) * 100;\n } else {\n percentage = ((event.clientX - rect.left) / rect.width) * 100;\n }\n\n const newValue = this.percentageToValue(percentage);\n\n if (this.isRange()) {\n const val = this.internalValue() as [number, number];\n if (thumbIndex === 0) {\n const clamped = Math.min(newValue, val[1]);\n this.internalValue.set([clamped, val[1]]);\n } else {\n const clamped = Math.max(newValue, val[0]);\n this.internalValue.set([val[0], clamped]);\n }\n } else {\n this.internalValue.set(newValue);\n }\n\n this.emitValue();\n }\n\n onThumbFocus(thumbIndex: number): void {\n this.focusedThumb.set(thumbIndex);\n }\n\n onThumbBlur(): void {\n this.onTouched();\n }\n\n getTickPosition(value: number): number {\n return this.valueToPercentage(value);\n }\n\n getTickLabel(value: number): string {\n const formatter = this.formatLabel();\n return formatter ? formatter(value) : value.toString();\n }\n\n // ARIA helpers\n getAriaValueText(thumbIndex: number): string {\n const val = thumbIndex === 0 ? this.value1() : this.value2();\n const formatter = this.formatLabel();\n return formatter ? formatter(val) : val.toString();\n }\n}\n","<div [class]=\"containerClasses()\">\n <!-- Min label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--min\">\n {{ getTickLabel(min()) }}\n </span>\n }\n\n <!-- Track container -->\n <div class=\"ds-slider__track-container\">\n <!-- Track background -->\n <div\n #track\n class=\"ds-slider__track\"\n (click)=\"onTrackClick($event)\"\n role=\"presentation\">\n <!-- Fill -->\n <div\n class=\"ds-slider__fill\"\n [ngStyle]=\"fillStyle()\">\n </div>\n\n <!-- Ticks -->\n @if (showTicks()) {\n <div class=\"ds-slider__ticks\">\n @for (tick of ticks(); track tick) {\n <div\n class=\"ds-slider__tick\"\n [ngStyle]=\"isVertical() ? { bottom: getTickPosition(tick) + '%' } : { left: getTickPosition(tick) + '%' }\">\n </div>\n }\n </div>\n }\n\n <!-- Thumb 1 (always present) -->\n <div\n #thumb1\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 0 || dragging() === 0\"\n [ngStyle]=\"thumb1Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"isRange() ? value2() : max()\"\n [attr.aria-valuenow]=\"value1()\"\n [attr.aria-valuetext]=\"getAriaValueText(0)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 0)\"\n (mousedown)=\"onThumbMouseDown($event, 0)\"\n (focus)=\"onThumbFocus(0)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label1() }}</span>\n }\n </div>\n\n <!-- Thumb 2 (only for range mode) -->\n @if (isRange()) {\n <div\n #thumb2\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 1 || dragging() === 1\"\n [ngStyle]=\"thumb2Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"value1()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value2()\"\n [attr.aria-valuetext]=\"getAriaValueText(1)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 1)\"\n (mousedown)=\"onThumbMouseDown($event, 1)\"\n (focus)=\"onThumbFocus(1)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label2() }}</span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Max label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--max\">\n {{ getTickLabel(max()) }}\n </span>\n }\n</div>\n","import {\n Component,\n forwardRef,\n input,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport {\n faCloudArrowUp,\n faXmark,\n faFile,\n faFileImage,\n faFilePdf,\n faFileWord,\n faFileExcel,\n} from '@fortawesome/free-solid-svg-icons';\nimport { DsProgressBar } from '../ds-progress-bar/ds-progress-bar';\n\n/**\n * Tailles disponibles pour le composant file upload.\n */\nexport type FileUploadSize = 'sm' | 'md' | 'lg';\n\n/**\n * Représente un fichier avec son état de chargement.\n */\nexport interface UploadFile {\n file: File;\n preview?: string;\n progress: number;\n error?: string;\n}\n\n/**\n * # DsFileUpload\n *\n * Composant de téléchargement de fichiers avec support drag & drop,\n * validation, preview et barre de progression.\n *\n * ## Usage\n *\n * ```html\n * <!-- Upload simple -->\n * <ds-file-upload\n * [accept]=\"'image/*'\"\n * [maxFileSize]=\"5242880\"\n * (filesChange)=\"onFilesChange($event)\">\n * </ds-file-upload>\n *\n * <!-- Upload multiple avec preview -->\n * <ds-file-upload\n * [multiple]=\"true\"\n * [showPreview]=\"true\"\n * [maxFiles]=\"5\"\n * size=\"lg\">\n * </ds-file-upload>\n * ```\n *\n * ## Accessibilité\n *\n * - Input natif avec label accessible\n * - Drag & drop avec feedback ARIA\n * - Messages d'erreur associés via aria-describedby\n *\n * @component\n */\n@Component({\n selector: 'ds-file-upload',\n imports: [CommonModule, FaIconComponent, DsProgressBar],\n templateUrl: './ds-file-upload.html',\n styleUrl: './ds-file-upload.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsFileUpload),\n multi: true,\n },\n ],\n})\nexport class DsFileUpload implements ControlValueAccessor {\n /**\n * Types de fichiers acceptés (ex: 'image/*,.pdf').\n * @default '*'\n */\n accept = input<string>('*');\n\n /**\n * Taille maximale d'un fichier en bytes.\n * @default 10485760 (10 MB)\n */\n maxFileSize = input<number>(10485760);\n\n /**\n * Nombre maximum de fichiers.\n * @default 1\n */\n maxFiles = input<number>(1);\n\n /**\n * Permet la sélection multiple de fichiers.\n * @default false\n */\n multiple = input<boolean>(false);\n\n /**\n * Désactive le composant.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<FileUploadSize>('md');\n\n /**\n * Affiche une preview pour les images.\n * @default true\n */\n showPreview = input<boolean>(true);\n\n /**\n * Label personnalisé pour le bouton.\n */\n label = input<string>('Choisir un fichier');\n\n /**\n * Texte d'aide pour le drag & drop.\n */\n dragHelpText = input<string>('ou glisser-déposer ici');\n\n /**\n * Événement émis lors du changement de fichiers.\n */\n filesChange = output<File[]>();\n\n /**\n * Événement émis lors de la suppression d'un fichier.\n */\n fileRemoved = output<File>();\n\n /**\n * Événement émis lors de la progression de l'upload.\n */\n uploadProgress = output<{ file: File; progress: number }>();\n\n // Icons (readonly for template access)\n readonly faCloudArrowUp = faCloudArrowUp;\n readonly faXmark = faXmark;\n readonly faFile = faFile;\n readonly faFileImage = faFileImage;\n readonly faFilePdf = faFilePdf;\n readonly faFileWord = faFileWord;\n readonly faFileExcel = faFileExcel;\n\n // ViewChild pour l'input file\n readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n // État interne\n readonly files = signal<UploadFile[]>([]);\n readonly isDragging = signal<boolean>(false);\n readonly errorMessage = signal<string>('');\n\n // ControlValueAccessor\n private onChange: (value: File[] | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n /**\n * Classes CSS calculées pour le conteneur (public pour tests).\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-file-upload',\n `ds-file-upload--${this.size()}`,\n this.isDragging() ? 'ds-file-upload--dragging' : '',\n this.disabled() ? 'ds-file-upload--disabled' : '',\n this.errorMessage() ? 'ds-file-upload--error' : '',\n ].filter(Boolean);\n });\n\n /**\n * Nombre de fichiers actuellement sélectionnés (public pour tests).\n */\n readonly fileCount = computed(() => this.files().length);\n\n /**\n * Vérifie si la limite de fichiers est atteinte (public pour tests).\n */\n readonly isMaxFilesReached = computed(\n () => this.fileCount() >= this.maxFiles()\n );\n\n /**\n * Ouvre le sélecteur de fichiers.\n */\n openFileSelector(): void {\n if (this.disabled() || this.isMaxFilesReached()) {\n return;\n }\n this.fileInput()?.nativeElement.click();\n }\n\n /**\n * Gère la sélection de fichiers via l'input.\n */\n onFileSelect(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) {\n return;\n }\n\n this.handleFiles(Array.from(input.files));\n input.value = ''; // Reset pour permettre la réutilisation\n }\n\n /**\n * Gère le début du drag.\n */\n onDragEnter(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled() && !this.isMaxFilesReached()) {\n this.isDragging.set(true);\n }\n }\n\n /**\n * Gère le survol pendant le drag.\n */\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Gère la sortie du drag.\n */\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n const target = event.currentTarget as HTMLElement;\n const related = event.relatedTarget as HTMLElement;\n if (!target.contains(related)) {\n this.isDragging.set(false);\n }\n }\n\n /**\n * Gère le drop des fichiers.\n */\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n\n if (this.disabled() || this.isMaxFilesReached()) {\n return;\n }\n\n const files = event.dataTransfer?.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n }\n\n /**\n * Traite les fichiers sélectionnés ou déposés.\n */\n private handleFiles(newFiles: File[]): void {\n this.errorMessage.set('');\n\n // En mode single, on remplace toujours le fichier existant\n if (!this.multiple()) {\n // Mode single : remplacer le fichier existant\n const filesToAdd = [newFiles[0]];\n\n // Valider et ajouter le fichier\n const validFiles: UploadFile[] = [];\n\n for (const file of filesToAdd) {\n const validation = this.validateFile(file);\n if (validation.valid) {\n const uploadFile: UploadFile = {\n file,\n progress: 0,\n };\n\n // Générer preview pour les images\n if (this.showPreview() && file.type.startsWith('image/')) {\n this.generatePreview(file, uploadFile);\n }\n\n validFiles.push(uploadFile);\n } else {\n this.errorMessage.set(validation.error || 'Fichier invalide');\n }\n }\n\n if (validFiles.length > 0) {\n this.files.set(validFiles);\n this.notifyChange();\n this.simulateUpload(validFiles);\n }\n return;\n }\n\n // Mode multiple : vérifier la limite de fichiers\n const currentCount = this.fileCount();\n const maxFiles = this.maxFiles();\n const availableSlots = maxFiles - currentCount;\n\n if (availableSlots <= 0) {\n this.errorMessage.set(`Limite de ${maxFiles} fichier(s) atteinte`);\n return;\n }\n\n // Limiter le nombre de nouveaux fichiers\n const filesToAdd = newFiles.slice(0, availableSlots);\n\n // Valider et ajouter les fichiers\n const validFiles: UploadFile[] = [];\n\n for (const file of filesToAdd) {\n const validation = this.validateFile(file);\n if (validation.valid) {\n const uploadFile: UploadFile = {\n file,\n progress: 0,\n };\n\n // Générer preview pour les images\n if (this.showPreview() && file.type.startsWith('image/')) {\n this.generatePreview(file, uploadFile);\n }\n\n validFiles.push(uploadFile);\n } else {\n this.errorMessage.set(validation.error || 'Fichier invalide');\n }\n }\n\n if (validFiles.length > 0) {\n // Mode multiple : ajouter aux fichiers existants\n this.files.update((current) => [...current, ...validFiles]);\n this.notifyChange();\n this.simulateUpload(validFiles);\n }\n }\n\n /**\n * Valide un fichier (taille, type).\n */\n private validateFile(file: File): { valid: boolean; error?: string } {\n // Vérifier la taille\n if (file.size > this.maxFileSize()) {\n const maxMB = (this.maxFileSize() / 1048576).toFixed(1);\n return {\n valid: false,\n error: `Fichier trop volumineux (max ${maxMB} MB)`,\n };\n }\n\n // Vérifier le type (si spécifié)\n const accept = this.accept();\n if (accept !== '*') {\n const acceptedTypes = accept.split(',').map((t) => t.trim());\n const isAccepted = acceptedTypes.some((type) => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n const category = type.split('/')[0];\n return file.type.startsWith(category + '/');\n }\n return file.type === type;\n });\n\n if (!isAccepted) {\n return {\n valid: false,\n error: `Type de fichier non accepté`,\n };\n }\n }\n\n return { valid: true };\n }\n\n /**\n * Génère une preview pour les images.\n */\n private generatePreview(file: File, uploadFile: UploadFile): void {\n const reader = new FileReader();\n reader.onload = (e) => {\n uploadFile.preview = e.target?.result as string;\n this.files.update((files) => [...files]); // Trigger change detection\n };\n reader.readAsDataURL(file);\n }\n\n /**\n * Simule l'upload avec progression (pour démonstration).\n * Dans une vraie application, remplacer par un vrai upload HTTP.\n */\n private simulateUpload(uploadFiles: UploadFile[]): void {\n uploadFiles.forEach((uploadFile) => {\n const interval = setInterval(() => {\n uploadFile.progress += 10;\n if (uploadFile.progress >= 100) {\n clearInterval(interval);\n }\n this.uploadProgress.emit({\n file: uploadFile.file,\n progress: uploadFile.progress,\n });\n this.files.update((files) => [...files]); // Trigger change detection\n }, 100);\n });\n }\n\n /**\n * Retire un fichier de la liste.\n */\n removeFile(uploadFile: UploadFile): void {\n this.files.update((files) =>\n files.filter((f) => f.file !== uploadFile.file)\n );\n this.fileRemoved.emit(uploadFile.file);\n this.notifyChange();\n this.errorMessage.set('');\n }\n\n /**\n * Notifie le changement de valeur.\n */\n private notifyChange(): void {\n const fileList = this.files().map((uf) => uf.file);\n this.filesChange.emit(fileList);\n this.onChange(fileList.length > 0 ? fileList : null);\n }\n\n /**\n * Retourne l'icône appropriée pour le type de fichier (public pour tests).\n */\n getFileIcon(file: File) {\n if (file.type.startsWith('image/')) {\n return this.faFileImage;\n }\n if (file.type === 'application/pdf') {\n return this.faFilePdf;\n }\n if (\n file.type ===\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||\n file.type === 'application/msword'\n ) {\n return this.faFileWord;\n }\n if (\n file.type ===\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\n file.type === 'application/vnd.ms-excel'\n ) {\n return this.faFileExcel;\n }\n return this.faFile;\n }\n\n /**\n * Formate la taille du fichier en MB ou KB (public pour tests).\n */\n formatFileSize(bytes: number): string {\n if (bytes >= 1048576) {\n return `${(bytes / 1048576).toFixed(1)} MB`;\n }\n return `${(bytes / 1024).toFixed(0)} KB`;\n }\n\n // ControlValueAccessor implementation\n writeValue(value: File[] | null): void {\n if (!value) {\n this.files.set([]);\n return;\n }\n\n const uploadFiles: UploadFile[] = value.map((file) => ({\n file,\n progress: 100,\n }));\n\n this.files.set(uploadFiles);\n }\n\n registerOnChange(fn: (value: File[] | 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 // Le disabled est géré via input signal\n }\n}\n","<div\n [ngClass]=\"containerClasses()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <!-- Zone de drop -->\n <div\n class=\"ds-file-upload__dropzone\"\n [class.ds-file-upload__dropzone--active]=\"isDragging()\"\n (click)=\"openFileSelector()\"\n [attr.tabindex]=\"disabled() ? null : 0\"\n [attr.aria-label]=\"label()\"\n role=\"button\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"ds-file-upload__input\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isMaxFilesReached()\"\n (change)=\"onFileSelect($event)\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n />\n\n <!-- Icône et texte -->\n <div class=\"ds-file-upload__icon\">\n <fa-icon [icon]=\"faCloudArrowUp\" size=\"2x\"></fa-icon>\n </div>\n <div class=\"ds-file-upload__text\">\n <span class=\"ds-file-upload__label\">{{ label() }}</span>\n @if (!disabled() && !isMaxFilesReached()) {\n <span class=\"ds-file-upload__help\">{{ dragHelpText() }}</span>\n }\n @if (isMaxFilesReached()) {\n <span class=\"ds-file-upload__limit\">Limite atteinte ({{ maxFiles() }} fichier{{ maxFiles() > 1 ? 's' : '' }})</span>\n }\n </div>\n\n <!-- Message d'erreur global -->\n @if (errorMessage()) {\n <div class=\"ds-file-upload__error\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n\n <!-- Indications -->\n @if (!errorMessage() && accept() !== '*') {\n <div class=\"ds-file-upload__hint\">\n Types acceptés : {{ accept() }}\n </div>\n }\n @if (!errorMessage() && maxFileSize()) {\n <div class=\"ds-file-upload__hint\">\n Taille max : {{ formatFileSize(maxFileSize()) }}\n </div>\n }\n </div>\n\n <!-- Liste des fichiers -->\n @if (fileCount() > 0) {\n <div class=\"ds-file-upload__files\">\n @for (uploadFile of files(); track uploadFile.file.name) {\n <div class=\"ds-file-upload__file\">\n <!-- Preview image -->\n @if (showPreview() && uploadFile.preview) {\n <div class=\"ds-file-upload__preview\">\n <img [src]=\"uploadFile.preview\" [alt]=\"uploadFile.file.name\" />\n </div>\n } @else {\n <div class=\"ds-file-upload__file-icon\">\n <fa-icon [icon]=\"getFileIcon(uploadFile.file)\"></fa-icon>\n </div>\n }\n\n <!-- Infos fichier -->\n <div class=\"ds-file-upload__file-info\">\n <div class=\"ds-file-upload__file-name\" [title]=\"uploadFile.file.name\">\n {{ uploadFile.file.name }}\n </div>\n <div class=\"ds-file-upload__file-size\">\n {{ formatFileSize(uploadFile.file.size) }}\n </div>\n\n <!-- Barre de progression -->\n @if (uploadFile.progress < 100) {\n <ds-progress-bar\n [value]=\"uploadFile.progress\"\n size=\"sm\"\n variant=\"default\"\n [showLabel]=\"true\"\n ></ds-progress-bar>\n }\n\n <!-- Message d'erreur fichier -->\n @if (uploadFile.error) {\n <div class=\"ds-file-upload__file-error\" role=\"alert\">\n {{ uploadFile.error }}\n </div>\n }\n </div>\n\n <!-- Bouton supprimer -->\n <button\n type=\"button\"\n class=\"ds-file-upload__remove\"\n (click)=\"removeFile(uploadFile)\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Supprimer ' + uploadFile.file.name\"\n >\n <fa-icon [icon]=\"faXmark\"></fa-icon>\n </button>\n </div>\n }\n </div>\n }\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { faInbox } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Tailles disponibles pour le composant Empty.\n */\nexport type EmptySize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsEmpty\n *\n * Composant d'état vide standardisé permettant d'afficher un message\n * lorsqu'aucune donnée n'est disponible, avec une illustration optionnelle.\n *\n * ## Usage\n *\n * ```html\n * <ds-empty\n * title=\"Aucun résultat\"\n * description=\"Essayez de modifier vos filtres\"\n * [icon]=\"faSearch\">\n * <button ds-button (click)=\"resetFilters()\">Réinitialiser</button>\n * </ds-empty>\n * ```\n *\n * ## Accessibilité\n *\n * - Utilise `role=\"region\"` avec `aria-label` descriptif\n * - Icônes décoratives avec `aria-hidden=\"true\"`\n * - Support des actions via content projection\n *\n * @component\n */\n@Component({\n selector: 'ds-empty',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-empty.html',\n styleUrl: './ds-empty.scss',\n})\nexport class DsEmpty {\n /**\n * Titre principal de l'état vide.\n * @default 'Aucune donnée'\n */\n title = input<string>('Aucune donnée');\n\n /**\n * Description complémentaire optionnelle.\n */\n description = input<string>('');\n\n /**\n * Icône FontAwesome à afficher.\n * @default faInbox\n */\n icon = input<IconDefinition>(faInbox);\n\n /**\n * URL d'une image personnalisée (illustration ou SVG).\n * Si fournie, prend le pas sur l'icône FontAwesome.\n */\n imageUrl = input<string>('');\n\n /**\n * Taille du composant (affecte l'icône et les espacements).\n * @default 'md'\n */\n size = input<EmptySize>('md');\n\n /**\n * Classes CSS calculées pour le conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-empty',\n `ds-empty--${this.size()}`,\n ].join(' ');\n });\n\n /**\n * Classes CSS calculées pour l'icône.\n */\n readonly iconClasses = computed(() => {\n const baseClass = 'ds-empty__icon';\n return `${baseClass} ${baseClass}--${this.size()}`;\n });\n\n /**\n * Classes CSS calculées pour l'image.\n */\n readonly imageClasses = computed(() => {\n const baseClass = 'ds-empty__image';\n return `${baseClass} ${baseClass}--${this.size()}`;\n });\n\n /**\n * Détermine si une image doit être affichée.\n */\n readonly hasImage = computed(() => !!this.imageUrl());\n\n /**\n * Détermine si une description est fournie.\n */\n readonly hasDescription = computed(() => !!this.description());\n}\n","<div\n [class]=\"containerClasses()\"\n role=\"region\"\n [attr.aria-label]=\"'État vide : ' + title()\">\n\n <!-- Image personnalisée -->\n @if (hasImage()) {\n <div [class]=\"imageClasses()\">\n <img\n [src]=\"imageUrl()\"\n [alt]=\"title()\"\n class=\"ds-empty__image-element\" />\n </div>\n }\n\n <!-- Icône FontAwesome par défaut -->\n @if (!hasImage()) {\n <div [class]=\"iconClasses()\">\n <fa-icon\n [icon]=\"icon()\"\n aria-hidden=\"true\" />\n </div>\n }\n\n <!-- Contenu texte -->\n <div class=\"ds-empty__content\">\n <h3 class=\"ds-empty__title\">{{ title() }}</h3>\n\n @if (hasDescription()) {\n <p class=\"ds-empty__description\">{{ description() }}</p>\n }\n </div>\n\n <!-- Slot pour action button personnalisé -->\n <div class=\"ds-empty__actions\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, input, output, signal, computed, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faStar, faStarHalfStroke } from '@fortawesome/free-solid-svg-icons';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Tailles disponibles pour le composant Rating.\n */\nexport type RatingSize = 'sm' | 'md' | 'lg';\n\n/**\n * # DsRating\n *\n * Composant de notation par étoiles permettant d'afficher et de saisir\n * une note sur une échelle configurable (par défaut 0-5).\n *\n * ## Usage\n *\n * ```html\n * <ds-rating\n * [(value)]=\"rating\"\n * [max]=\"5\"\n * [allowHalf]=\"true\"\n * (ratingChange)=\"handleRatingChange($event)\" />\n * ```\n *\n * ## Intégration formulaires\n *\n * ```html\n * <form [formGroup]=\"form\">\n * <ds-rating formControlName=\"rating\" />\n * </form>\n * ```\n *\n * ## Accessibilité\n *\n * - Navigation clavier : ArrowLeft/Right pour changer la note\n * - Attributs ARIA : role, aria-label, aria-valuenow/valuemin/valuemax\n * - Focus visible sur les étoiles\n *\n * @component\n */\n@Component({\n selector: 'ds-rating',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-rating.html',\n styleUrl: './ds-rating.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsRating),\n multi: true,\n },\n ],\n})\nexport class DsRating implements ControlValueAccessor {\n /**\n * Valeur actuelle de la notation (0 à max).\n * @default 0\n */\n value = input<number>(0);\n\n /**\n * Valeur maximale de la notation.\n * @default 5\n */\n max = input<number>(5);\n\n /**\n * Taille du composant (affecte la taille des étoiles).\n * @default 'md'\n */\n size = input<RatingSize>('md');\n\n /**\n * Permet la saisie de demi-étoiles (notes 0.5, 1.5, etc.).\n * @default false\n */\n allowHalf = input<boolean>(false);\n\n /**\n * Mode lecture seule (affichage uniquement).\n * @default false\n */\n readonly = input<boolean>(false);\n\n /**\n * État désactivé (pas d'interaction).\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Émis lorsque la notation change.\n */\n ratingChange = output<number>();\n\n /**\n * État interne de la valeur (ControlValueAccessor).\n */\n readonly internalValue = signal<number>(0);\n\n /**\n * État de survol (pour aperçu avant clic).\n */\n readonly hoverValue = signal<number | null>(null);\n\n /**\n * Callbacks ControlValueAccessor.\n */\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n /**\n * Icônes FontAwesome pour les étoiles.\n */\n protected readonly faStar = faStar;\n protected readonly faStarHalf = faStarHalfStroke;\n\n /**\n * Tableau des indices d'étoiles pour le rendu.\n */\n readonly stars = computed(() => {\n return Array.from({ length: this.max() }, (_, i) => i + 1);\n });\n\n /**\n * Valeur affichée (avec prise en compte du survol).\n */\n readonly displayValue = computed(() => {\n return this.hoverValue() ?? this.internalValue();\n });\n\n /**\n * Classes CSS calculées pour le conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-rating',\n `ds-rating--${this.size()}`,\n this.disabled() ? 'ds-rating--disabled' : '',\n this.readonly() ? 'ds-rating--readonly' : '',\n ].filter(Boolean).join(' ');\n });\n\n /**\n * Détermine le type d'icône à afficher pour une étoile donnée.\n * - 'full' : étoile pleine\n * - 'half' : demi-étoile\n * - 'empty' : étoile vide\n */\n getStarType(index: number): 'full' | 'half' | 'empty' {\n const value = this.displayValue();\n const diff = value - index;\n\n if (diff >= 0) return 'full';\n if (this.allowHalf() && diff >= -0.5) return 'half';\n return 'empty';\n }\n\n /**\n * Gère le clic sur une étoile.\n */\n handleStarClick(index: number, event: MouseEvent): void {\n if (this.disabled() || this.readonly()) return;\n\n let newValue = index;\n\n // Détection du clic sur la moitié gauche ou droite\n if (this.allowHalf()) {\n const target = event.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n const clickX = event.clientX - rect.left;\n const halfWidth = rect.width / 2;\n\n if (clickX < halfWidth) {\n newValue = index - 0.5;\n }\n }\n\n this.updateValue(newValue);\n }\n\n /**\n * Gère le survol d'une étoile.\n */\n handleStarHover(index: number, event: MouseEvent): void {\n if (this.disabled() || this.readonly()) return;\n\n let hoverVal = index;\n\n if (this.allowHalf()) {\n const target = event.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n const hoverX = event.clientX - rect.left;\n const halfWidth = rect.width / 2;\n\n if (hoverX < halfWidth) {\n hoverVal = index - 0.5;\n }\n }\n\n this.hoverValue.set(hoverVal);\n }\n\n /**\n * Réinitialise le survol.\n */\n handleMouseLeave(): void {\n this.hoverValue.set(null);\n }\n\n /**\n * Navigation clavier (ArrowLeft/Right).\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled() || this.readonly()) return;\n\n const step = this.allowHalf() ? 0.5 : 1;\n let newValue = this.internalValue();\n\n if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {\n event.preventDefault();\n newValue = Math.min(this.max(), newValue + step);\n this.updateValue(newValue);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {\n event.preventDefault();\n newValue = Math.max(0, newValue - step);\n this.updateValue(newValue);\n } else if (event.key === 'Home') {\n event.preventDefault();\n this.updateValue(0);\n } else if (event.key === 'End') {\n event.preventDefault();\n this.updateValue(this.max());\n }\n }\n\n /**\n * Met à jour la valeur interne et notifie les changements.\n */\n private updateValue(newValue: number): void {\n this.internalValue.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n this.ratingChange.emit(newValue);\n }\n\n // ============================================================================\n // ControlValueAccessor\n // ============================================================================\n\n writeValue(value: number): void {\n this.internalValue.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => 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 signal disabled est déjà géré via input()\n }\n}\n","<div\n [class]=\"containerClasses()\"\n role=\"slider\"\n [attr.aria-label]=\"'Note : ' + displayValue() + ' sur ' + max()\"\n [attr.aria-valuenow]=\"displayValue()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() || readonly() ? -1 : 0\"\n (keydown)=\"handleKeyDown($event)\"\n (mouseleave)=\"handleMouseLeave()\">\n\n @for (starIndex of stars(); track starIndex) {\n <span\n class=\"ds-rating__star\"\n [attr.data-index]=\"starIndex\"\n (click)=\"handleStarClick(starIndex, $event)\"\n (mousemove)=\"handleStarHover(starIndex, $event)\">\n\n @switch (getStarType(starIndex)) {\n @case ('full') {\n <fa-icon [icon]=\"faStar\" class=\"ds-rating__icon ds-rating__icon--filled\" aria-hidden=\"true\" />\n }\n @case ('half') {\n <fa-icon [icon]=\"faStarHalf\" class=\"ds-rating__icon ds-rating__icon--half\" aria-hidden=\"true\" />\n }\n @case ('empty') {\n <fa-icon [icon]=\"faStar\" class=\"ds-rating__icon ds-rating__icon--empty\" aria-hidden=\"true\" />\n }\n }\n </span>\n }\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n signal,\n effect,\n inject,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\n\n/**\n * Position du drawer (gauche ou droite).\n */\nexport type DrawerPosition = 'left' | 'right';\n\n/**\n * Tailles disponibles pour le drawer.\n */\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'full';\n\n/**\n * # DsDrawer\n *\n * Composant de panneau latéral overlay avec animation slide-in/out.\n * Utilise CDK Overlay pour le backdrop et le focus trap.\n *\n * ## Usage\n *\n * ```html\n * <ds-drawer\n * [(visible)]=\"isDrawerOpen\"\n * position=\"right\"\n * size=\"md\"\n * title=\"Détails\"\n * [closable]=\"true\"\n * (closed)=\"onDrawerClose()\">\n * <!-- Header -->\n * <ng-template #header>\n * <h3>Mon en-tête personnalisé</h3>\n * </ng-template>\n *\n * <!-- Body -->\n * <p>Contenu du drawer</p>\n *\n * <!-- Footer -->\n * <ng-template #footer>\n * <button>Annuler</button>\n * <button>Valider</button>\n * </ng-template>\n * </ds-drawer>\n * ```\n *\n * ## Accessibilité\n *\n * - Focus trap : le focus reste dans le drawer\n * - Navigation clavier : Escape pour fermer\n * - Attributs ARIA : role, aria-labelledby, aria-modal\n *\n * @component\n */\n@Component({\n selector: 'ds-drawer',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-drawer.html',\n styleUrl: './ds-drawer.scss',\n})\nexport class DsDrawer implements AfterViewInit, OnDestroy {\n /**\n * Visibilité du drawer.\n * @default false\n */\n visible = input<boolean>(false);\n\n /**\n * Position du drawer (left/right).\n * @default 'right'\n */\n position = input<DrawerPosition>('right');\n\n /**\n * Taille du drawer.\n * @default 'md'\n */\n size = input<DrawerSize>('md');\n\n /**\n * Titre affiché dans le header (optionnel).\n */\n title = input<string>('');\n\n /**\n * Affiche le bouton de fermeture.\n * @default true\n */\n closable = input<boolean>(true);\n\n /**\n * Ferme le drawer au clic sur le backdrop.\n * @default true\n */\n maskClosable = input<boolean>(true);\n\n /**\n * Émis lorsque la visibilité change.\n */\n visibleChange = output<boolean>();\n\n /**\n * Émis lorsque le drawer est fermé.\n */\n closed = output<void>();\n\n /**\n * Référence au conteneur du drawer.\n */\n @ViewChild('drawerContainer') drawerContainer?: ElementRef<HTMLElement>;\n\n /**\n * État interne de visibilité pour gérer l'animation.\n */\n protected isOpen = signal<boolean>(false);\n protected isAnimating = signal<boolean>(false);\n\n /**\n * Indique si la vue est prête.\n */\n private viewReady = signal<boolean>(false);\n\n /**\n * Focus trap pour confiner la navigation clavier.\n */\n private focusTrap: FocusTrap | null = null;\n\n /**\n * Services injectés.\n */\n private readonly documentRef = inject(DOCUMENT);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n\n /**\n * Icône de fermeture.\n */\n protected readonly closeIcon = faTimes;\n\n /**\n * ID unique pour l'accessibilité.\n */\n private readonly drawerId = crypto.randomUUID();\n readonly drawerTitleId = `drawer-${this.drawerId}-title`;\n\n /**\n * Classes CSS calculées pour le conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-drawer',\n `ds-drawer--${this.position()}`,\n `ds-drawer--${this.size()}`,\n this.isOpen() ? 'ds-drawer--open' : '',\n ].filter(Boolean).join(' ');\n });\n\n /**\n * Classes CSS calculées pour le backdrop.\n */\n readonly backdropClasses = computed(() => {\n return [\n 'ds-drawer__backdrop',\n this.isOpen() ? 'ds-drawer__backdrop--visible' : '',\n ].filter(Boolean).join(' ');\n });\n\n constructor() {\n // Effet pour synchroniser l'état visible avec l'animation\n effect(() => {\n if (!this.viewReady()) return;\n\n if (this.visible()) {\n this.openDrawer();\n } else {\n this.closeDrawer();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.viewReady.set(true);\n }\n\n ngOnDestroy(): void {\n this.detachFocusTrap();\n }\n\n /**\n * Ouvre le drawer avec animation.\n */\n private openDrawer(): void {\n this.isAnimating.set(true);\n this.isOpen.set(true);\n\n // Empêche le scroll du body\n this.documentRef.body.style.overflow = 'hidden';\n\n // Attache le focus trap après l'animation\n setTimeout(() => {\n this.attachFocusTrap();\n this.focusInitialElement();\n this.isAnimating.set(false);\n }, 300);\n }\n\n /**\n * Ferme le drawer avec animation.\n */\n private closeDrawer(): void {\n this.isAnimating.set(true);\n this.detachFocusTrap();\n\n setTimeout(() => {\n this.isOpen.set(false);\n this.isAnimating.set(false);\n\n // Restaure le scroll du body\n this.documentRef.body.style.overflow = '';\n\n this.closed.emit();\n }, 300);\n }\n\n /**\n * Gère la fermeture du drawer.\n */\n handleClose(): void {\n if (!this.closable()) return;\n\n this.visibleChange.emit(false);\n }\n\n /**\n * Gère le clic sur le backdrop.\n */\n handleBackdropClick(): void {\n if (!this.maskClosable()) return;\n\n this.handleClose();\n }\n\n /**\n * Gère la touche Escape.\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.closable()) {\n event.preventDefault();\n this.handleClose();\n }\n }\n\n /**\n * Attache le focus trap.\n */\n private attachFocusTrap(): void {\n if (this.focusTrap || !this.drawerContainer) return;\n\n const element = this.drawerContainer.nativeElement;\n this.focusTrap = this.focusTrapFactory.create(element);\n this.focusTrap.attachAnchors();\n }\n\n /**\n * Détache le focus trap.\n */\n private detachFocusTrap(): void {\n if (this.focusTrap) {\n this.focusTrap.destroy();\n this.focusTrap = null;\n }\n }\n\n /**\n * Place le focus sur le premier élément focusable.\n */\n private focusInitialElement(): void {\n if (!this.drawerContainer) return;\n\n const firstFocusable = this.drawerContainer.nativeElement.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n}\n","<!-- Backdrop -->\n@if (isOpen()) {\n <div\n [class]=\"backdropClasses()\"\n (click)=\"handleBackdropClick()\"\n aria-hidden=\"true\">\n </div>\n}\n\n<!-- Drawer Panel -->\n@if (isOpen()) {\n <div\n #drawerContainer\n [class]=\"containerClasses()\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"title() ? drawerTitleId : null\"\n (keydown)=\"handleKeyDown($event)\">\n\n <!-- Header -->\n <div class=\"ds-drawer__header\">\n @if (title()) {\n <h3 class=\"ds-drawer__title\" [id]=\"drawerTitleId\">{{ title() }}</h3>\n }\n\n <ng-content select=\"[drawer-header]\"></ng-content>\n\n @if (closable()) {\n <button\n class=\"ds-drawer__close\"\n type=\"button\"\n aria-label=\"Fermer\"\n (click)=\"handleClose()\">\n <fa-icon [icon]=\"closeIcon\" aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"ds-drawer__body\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div class=\"ds-drawer__footer\">\n <ng-content select=\"[drawer-footer]\"></ng-content>\n </div>\n </div>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n signal,\n computed,\n output,\n effect,\n AfterViewInit,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface TimeColumn {\n value: number;\n label: string;\n disabled: boolean;\n}\n\n@Component({\n selector: 'ds-time-picker-panel',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ds-time-picker-panel\" role=\"dialog\" aria-label=\"Time picker\">\n <div class=\"ds-time-picker-panel__columns\">\n <!-- Hours column -->\n <div class=\"ds-time-picker-panel__column\" role=\"listbox\" aria-label=\"Hours\">\n <div\n #hoursColumn\n class=\"ds-time-picker-panel__column-scroll\"\n (scroll)=\"onScroll('hours', $event)\">\n @for (hour of hoursOptions(); track hour.value) {\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"hour.value === selectedHours()\"\n [class.ds-time-picker-panel__option--disabled]=\"hour.disabled\"\n [disabled]=\"hour.disabled\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"hour.value === selectedHours()\"\n (click)=\"selectHours(hour.value)\">\n {{ hour.label }}\n </button>\n }\n </div>\n </div>\n\n <!-- Minutes column -->\n <div class=\"ds-time-picker-panel__column\" role=\"listbox\" aria-label=\"Minutes\">\n <div\n #minutesColumn\n class=\"ds-time-picker-panel__column-scroll\"\n (scroll)=\"onScroll('minutes', $event)\">\n @for (minute of minutesOptions(); track minute.value) {\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"minute.value === selectedMinutes()\"\n [class.ds-time-picker-panel__option--disabled]=\"minute.disabled\"\n [disabled]=\"minute.disabled\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"minute.value === selectedMinutes()\"\n (click)=\"selectMinutes(minute.value)\">\n {{ minute.label }}\n </button>\n }\n </div>\n </div>\n\n <!-- Seconds column (conditional) -->\n @if (showSeconds) {\n <div class=\"ds-time-picker-panel__column\" role=\"listbox\" aria-label=\"Seconds\">\n <div\n #secondsColumn\n class=\"ds-time-picker-panel__column-scroll\"\n (scroll)=\"onScroll('seconds', $event)\">\n @for (second of secondsOptions(); track second.value) {\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"second.value === selectedSeconds()\"\n [class.ds-time-picker-panel__option--disabled]=\"second.disabled\"\n [disabled]=\"second.disabled\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"second.value === selectedSeconds()\"\n (click)=\"selectSeconds(second.value)\">\n {{ second.label }}\n </button>\n }\n </div>\n </div>\n }\n\n <!-- AM/PM column (12h format) -->\n @if (format === '12h') {\n <div class=\"ds-time-picker-panel__column ds-time-picker-panel__column--period\" role=\"listbox\" aria-label=\"Period\">\n <div class=\"ds-time-picker-panel__column-scroll\">\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"selectedPeriod() === 'AM'\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"selectedPeriod() === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button\n type=\"button\"\n class=\"ds-time-picker-panel__option\"\n [class.ds-time-picker-panel__option--selected]=\"selectedPeriod() === 'PM'\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"selectedPeriod() === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './ds-time-picker-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTimePickerPanelComponent implements AfterViewInit {\n @ViewChild('hoursColumn') hoursColumn?: ElementRef<HTMLDivElement>;\n @ViewChild('minutesColumn') minutesColumn?: ElementRef<HTMLDivElement>;\n @ViewChild('secondsColumn') secondsColumn?: ElementRef<HTMLDivElement>;\n\n // Config (set by parent)\n value = '';\n format: '12h' | '24h' = '24h';\n showSeconds = false;\n minuteStep = 1;\n hourStep = 1;\n minTime: string | null = null;\n maxTime: string | null = null;\n\n // Outputs\n readonly timeSelected = output<string>();\n\n // State\n readonly selectedHours = signal(0);\n readonly selectedMinutes = signal(0);\n readonly selectedSeconds = signal(0);\n readonly selectedPeriod = signal<'AM' | 'PM'>('AM');\n\n // Computed\n readonly hoursOptions = computed(() => {\n const options: TimeColumn[] = [];\n const max = this.format === '12h' ? 12 : 23;\n const start = this.format === '12h' ? 1 : 0;\n\n for (let i = start; i <= max; i += this.hourStep) {\n options.push({\n value: i,\n label: i.toString().padStart(2, '0'),\n disabled: this.isHourDisabled(i),\n });\n }\n\n return options;\n });\n\n readonly minutesOptions = computed(() => {\n const options: TimeColumn[] = [];\n\n for (let i = 0; i < 60; i += this.minuteStep) {\n options.push({\n value: i,\n label: i.toString().padStart(2, '0'),\n disabled: this.isMinuteDisabled(i),\n });\n }\n\n return options;\n });\n\n readonly secondsOptions = computed(() => {\n const options: TimeColumn[] = [];\n\n for (let i = 0; i < 60; i++) {\n options.push({\n value: i,\n label: i.toString().padStart(2, '0'),\n disabled: false,\n });\n }\n\n return options;\n });\n\n constructor() {\n // Parse initial value\n effect(() => {\n this.parseAndSetValue();\n }, { allowSignalWrites: true });\n\n // Emit when values change\n effect(() => {\n const hours = this.selectedHours();\n const minutes = this.selectedMinutes();\n const seconds = this.selectedSeconds();\n const period = this.selectedPeriod();\n\n this.emitTime(hours, minutes, seconds, period);\n });\n }\n\n ngAfterViewInit(): void {\n // Scroll to selected values\n setTimeout(() => {\n this.scrollToSelected();\n }, 0);\n }\n\n selectHours(hours: number): void {\n this.selectedHours.set(hours);\n }\n\n selectMinutes(minutes: number): void {\n this.selectedMinutes.set(minutes);\n }\n\n selectSeconds(seconds: number): void {\n this.selectedSeconds.set(seconds);\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod.set(period);\n }\n\n onScroll(column: 'hours' | 'minutes' | 'seconds', event: Event): void {\n // Optional: could implement snap-to-value on scroll end\n }\n\n private parseAndSetValue(): void {\n if (!this.value) {\n this.selectedHours.set(this.format === '12h' ? 12 : 0);\n this.selectedMinutes.set(0);\n this.selectedSeconds.set(0);\n this.selectedPeriod.set('AM');\n return;\n }\n\n const parts = this.value.split(':');\n if (parts.length < 2) return;\n\n let hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n const seconds = parts[2] ? parseInt(parts[2], 10) : 0;\n\n if (this.format === '12h') {\n const period = hours >= 12 ? 'PM' : 'AM';\n hours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n this.selectedPeriod.set(period);\n }\n\n this.selectedHours.set(hours);\n this.selectedMinutes.set(minutes);\n this.selectedSeconds.set(seconds);\n }\n\n private emitTime(hours: number, minutes: number, seconds: number, period: 'AM' | 'PM'): void {\n let finalHours = hours;\n\n if (this.format === '12h') {\n if (period === 'PM' && hours !== 12) {\n finalHours = hours + 12;\n } else if (period === 'AM' && hours === 12) {\n finalHours = 0;\n }\n }\n\n const hoursStr = finalHours.toString().padStart(2, '0');\n const minutesStr = minutes.toString().padStart(2, '0');\n const secondsStr = seconds.toString().padStart(2, '0');\n\n const timeString = this.showSeconds\n ? `${hoursStr}:${minutesStr}:${secondsStr}`\n : `${hoursStr}:${minutesStr}`;\n\n this.timeSelected.emit(timeString);\n }\n\n private isHourDisabled(hour: number): boolean {\n // TODO: implement minTime/maxTime validation\n return false;\n }\n\n private isMinuteDisabled(minute: number): boolean {\n // TODO: implement minTime/maxTime validation\n return false;\n }\n\n private scrollToSelected(): void {\n this.scrollColumnToValue(this.hoursColumn, this.selectedHours());\n this.scrollColumnToValue(this.minutesColumn, this.selectedMinutes());\n if (this.showSeconds && this.secondsColumn) {\n this.scrollColumnToValue(this.secondsColumn, this.selectedSeconds());\n }\n }\n\n private scrollColumnToValue(column: ElementRef<HTMLDivElement> | undefined, value: number): void {\n if (!column) return;\n\n const element = column.nativeElement;\n const options = element.querySelectorAll('.ds-time-picker-panel__option');\n const selectedOption = Array.from(options).find(\n (option) => option.textContent?.trim() === value.toString().padStart(2, '0')\n );\n\n if (selectedOption) {\n const optionElement = selectedOption as HTMLElement;\n element.scrollTop = optionElement.offsetTop - element.offsetHeight / 2 + optionElement.offsetHeight / 2;\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n forwardRef,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faClock, faChevronUp, faChevronDown } from '@fortawesome/free-solid-svg-icons';\nimport { OverlayModule, OverlayRef, Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DsTimePickerPanelComponent } from './ds-time-picker-panel.component';\n\nexport type TimePickerSize = 'sm' | 'md' | 'lg';\nexport type TimeFormat = '12h' | '24h';\n\nexport interface TimeValue {\n hours: number;\n minutes: number;\n seconds?: number;\n}\n\n/**\n * DsTimePicker - Composant de sélection d'heure\n *\n * @description\n * Sélecteur d'heure avec dropdown scrollable, support 12h/24h,\n * et intégration formulaires via ControlValueAccessor.\n *\n * @example\n * ```html\n * <ds-time-picker\n * [format]=\"'24h'\"\n * [showSeconds]=\"true\"\n * (timeChange)=\"onTimeChange($event)\">\n * </ds-time-picker>\n * ```\n */\n@Component({\n selector: 'ds-time-picker',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule, OverlayModule],\n templateUrl: './ds-time-picker.html',\n styleUrl: './ds-time-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsTimePicker),\n multi: true,\n },\n ],\n})\nexport class DsTimePicker implements ControlValueAccessor {\n // Inputs\n readonly value = input<string>('');\n readonly format = input<TimeFormat>('24h');\n readonly showSeconds = input(false);\n readonly minuteStep = input(1);\n readonly hourStep = input(1);\n readonly size = input<TimePickerSize>('md');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly placeholder = input('Select time');\n readonly minTime = input<string | null>(null);\n readonly maxTime = input<string | null>(null);\n\n // Outputs\n readonly timeChange = output<string>();\n\n // Icons\n readonly clockIcon = faClock;\n readonly upIcon = faChevronUp;\n readonly downIcon = faChevronDown;\n\n // State\n readonly isOpen = signal(false);\n readonly internalValue = signal<string>('');\n readonly isFocused = signal(false);\n\n // Overlay\n private overlayRef: OverlayRef | null = null;\n\n // Computed\n readonly containerClasses = computed(() => {\n const classes = ['ds-time-picker'];\n classes.push(`ds-time-picker--${this.size()}`);\n if (this.disabled()) classes.push('ds-time-picker--disabled');\n if (this.readonly()) classes.push('ds-time-picker--readonly');\n if (this.isFocused()) classes.push('ds-time-picker--focused');\n if (this.isOpen()) classes.push('ds-time-picker--open');\n return classes.join(' ');\n });\n\n readonly displayValue = computed(() => {\n const val = this.internalValue();\n if (!val) return '';\n\n const time = this.parseTime(val);\n if (!time) return val;\n\n return this.formatTimeForDisplay(time);\n });\n\n readonly isDisabled = computed(() => this.disabled() || this.readonly());\n\n // ControlValueAccessor\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor(private overlay: Overlay) {\n // Sync external value with internal\n effect(() => {\n const val = this.value();\n if (val !== this.internalValue()) {\n this.internalValue.set(val);\n }\n });\n }\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 // Géré par input disabled\n }\n\n toggle(): void {\n if (this.isDisabled()) return;\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.isDisabled() || this.isOpen()) return;\n\n this.isOpen.set(true);\n this.createOverlay();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n\n this.isOpen.set(false);\n this.destroyOverlay();\n this.onTouched();\n }\n\n onFocus(): void {\n if (!this.disabled()) {\n this.isFocused.set(true);\n }\n }\n\n onBlur(): void {\n this.isFocused.set(false);\n if (!this.isOpen()) {\n this.onTouched();\n }\n }\n\n onTimeSelected(timeString: string): void {\n this.updateValue(timeString);\n this.close();\n }\n\n private updateValue(value: string): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.timeChange.emit(value);\n }\n\n private createOverlay(): void {\n if (this.overlayRef) return;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(document.querySelector('.ds-time-picker__input') as HTMLElement)\n .withPositions([\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\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n const portal = new ComponentPortal(DsTimePickerPanelComponent);\n const componentRef = this.overlayRef.attach(portal);\n\n // Pass config to panel\n componentRef.instance.value = this.internalValue();\n componentRef.instance.format = this.format();\n componentRef.instance.showSeconds = this.showSeconds();\n componentRef.instance.minuteStep = this.minuteStep();\n componentRef.instance.hourStep = this.hourStep();\n componentRef.instance.minTime = this.minTime();\n componentRef.instance.maxTime = this.maxTime();\n componentRef.instance.timeSelected.subscribe((time: string) => {\n this.onTimeSelected(time);\n });\n\n this.overlayRef.backdropClick().subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private parseTime(timeString: string): TimeValue | null {\n if (!timeString) return null;\n\n const parts = timeString.split(':');\n if (parts.length < 2) return null;\n\n const hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n const seconds = parts[2] ? parseInt(parts[2], 10) : undefined;\n\n if (isNaN(hours) || isNaN(minutes)) return null;\n if (seconds !== undefined && isNaN(seconds)) return null;\n\n return { hours, minutes, seconds };\n }\n\n private formatTimeForDisplay(time: TimeValue): string {\n const { hours, minutes, seconds } = time;\n\n if (this.format() === '12h') {\n const period = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const formattedMinutes = minutes.toString().padStart(2, '0');\n\n if (this.showSeconds() && seconds !== undefined) {\n const formattedSeconds = seconds.toString().padStart(2, '0');\n return `${displayHours}:${formattedMinutes}:${formattedSeconds} ${period}`;\n }\n\n return `${displayHours}:${formattedMinutes} ${period}`;\n } else {\n const formattedHours = hours.toString().padStart(2, '0');\n const formattedMinutes = minutes.toString().padStart(2, '0');\n\n if (this.showSeconds() && seconds !== undefined) {\n const formattedSeconds = seconds.toString().padStart(2, '0');\n return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;\n }\n\n return `${formattedHours}:${formattedMinutes}`;\n }\n }\n}\n","<div [class]=\"containerClasses()\">\n <div class=\"ds-time-picker__wrapper\">\n <div\n class=\"ds-time-picker__input\"\n [class.ds-time-picker__input--disabled]=\"disabled()\"\n [class.ds-time-picker__input--readonly]=\"readonly()\"\n [class.ds-time-picker__input--focused]=\"isFocused()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-label]=\"placeholder()\"\n (click)=\"toggle()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\">\n\n <fa-icon\n class=\"ds-time-picker__icon\"\n [icon]=\"clockIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n\n <span class=\"ds-time-picker__display\">\n @if (displayValue(); as display) {\n {{ display }}\n } @else {\n <span class=\"ds-time-picker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n </div>\n </div>\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n faChevronRight,\n faChevronDown,\n faFolder,\n faFile,\n faFolderOpen,\n} from '@fortawesome/free-solid-svg-icons';\nimport type { TreeNode } from './ds-tree';\n\n@Component({\n selector: 'ds-tree-node',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule, DsTreeNodeComponent],\n template: `\n <div\n class=\"ds-tree-node\"\n [class.ds-tree-node--selected]=\"isSelected()\"\n [class.ds-tree-node--disabled]=\"node().disabled\"\n [attr.role]=\"'treeitem'\"\n [attr.aria-selected]=\"isSelected()\"\n [attr.aria-expanded]=\"hasChildren() ? isExpanded() : null\"\n [attr.aria-disabled]=\"node().disabled\"\n [attr.tabindex]=\"node().disabled ? -1 : 0\"\n (click)=\"handleClick($event)\"\n (keydown.enter)=\"handleClick($event)\"\n (keydown.space)=\"handleClick($event); $event.preventDefault()\"\n (keydown.arrowRight)=\"handleArrowRight($event)\"\n (keydown.arrowLeft)=\"handleArrowLeft($event)\">\n\n <div class=\"ds-tree-node__content\" [style.padding-left.px]=\"level() * 20\">\n <!-- Expand/collapse toggle -->\n @if (hasChildren()) {\n <button\n type=\"button\"\n class=\"ds-tree-node__toggle\"\n [attr.aria-label]=\"isExpanded() ? 'Collapse' : 'Expand'\"\n (click)=\"handleToggle($event)\">\n <fa-icon\n [icon]=\"isExpanded() ? expandedIcon : collapsedIcon\"\n aria-hidden=\"true\">\n </fa-icon>\n </button>\n } @else {\n <span class=\"ds-tree-node__toggle-placeholder\"></span>\n }\n\n <!-- Checkbox (if checkable) -->\n @if (checkable()) {\n <input\n type=\"checkbox\"\n class=\"ds-tree-node__checkbox\"\n [checked]=\"isChecked()\"\n [indeterminate]=\"isIndeterminate()\"\n [disabled]=\"node().disabled\"\n (change)=\"handleCheck($event)\"\n (click)=\"$event.stopPropagation()\">\n }\n\n <!-- Icon -->\n @if (showIcon()) {\n <fa-icon\n class=\"ds-tree-node__icon\"\n [icon]=\"nodeIcon()\"\n aria-hidden=\"true\">\n </fa-icon>\n }\n\n <!-- Label -->\n <span class=\"ds-tree-node__label\">{{ node().label }}</span>\n </div>\n </div>\n\n <!-- Children (recursive) -->\n @if (hasChildren() && isExpanded()) {\n <div class=\"ds-tree-node__children\" role=\"group\">\n @for (child of node().children; track child.id) {\n <ds-tree-node\n [node]=\"child\"\n [level]=\"level() + 1\"\n [selectable]=\"selectable()\"\n [checkable]=\"checkable()\"\n [showIcon]=\"showIcon()\"\n [selectedNodeId]=\"selectedNodeId()\"\n [expandedNodeIds]=\"expandedNodeIds()\"\n [checkedNodeIds]=\"checkedNodeIds()\"\n [getIndeterminateState]=\"getIndeterminateState()\"\n (nodeClick)=\"nodeClick.emit($event)\"\n (nodeToggle)=\"nodeToggle.emit($event)\"\n (nodeCheck)=\"nodeCheck.emit($event)\">\n </ds-tree-node>\n }\n </div>\n }\n `,\n styleUrl: './ds-tree-node.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTreeNodeComponent {\n // Inputs\n readonly node = input.required<TreeNode>();\n readonly level = input(0);\n readonly selectable = input(true);\n readonly checkable = input(false);\n readonly showIcon = input(true);\n readonly selectedNodeId = input<string | number | null>(null);\n readonly expandedNodeIds = input<Set<string | number>>(new Set());\n readonly checkedNodeIds = input<Set<string | number>>(new Set());\n readonly getIndeterminateState = input<((node: TreeNode) => boolean) | null>(null);\n\n // Outputs\n readonly nodeClick = output<TreeNode>();\n readonly nodeToggle = output<TreeNode>();\n readonly nodeCheck = output<{ node: TreeNode; checked: boolean }>();\n\n // Icons\n readonly collapsedIcon = faChevronRight;\n readonly expandedIcon = faChevronDown;\n readonly folderIcon = faFolder;\n readonly folderOpenIcon = faFolderOpen;\n readonly fileIcon = faFile;\n\n // Computed\n readonly hasChildren = computed(() => {\n const children = this.node().children;\n return !!children && children.length > 0;\n });\n\n readonly isExpanded = computed(() => {\n return this.expandedNodeIds().has(this.node().id);\n });\n\n readonly isSelected = computed(() => {\n return this.selectedNodeId() === this.node().id;\n });\n\n readonly isChecked = computed(() => {\n return this.checkedNodeIds().has(this.node().id);\n });\n\n readonly isIndeterminate = computed(() => {\n const fn = this.getIndeterminateState();\n return fn ? fn(this.node()) : false;\n });\n\n readonly nodeIcon = computed(() => {\n const node = this.node();\n\n // Custom icon\n if (node.icon) {\n // TODO: support custom icons\n return this.fileIcon;\n }\n\n // Default folder/file icons\n if (this.hasChildren()) {\n return this.isExpanded() ? this.folderOpenIcon : this.folderIcon;\n }\n\n return this.fileIcon;\n });\n\n handleClick(event: Event): void {\n event.stopPropagation();\n if (!this.node().disabled && this.selectable()) {\n this.nodeClick.emit(this.node());\n }\n }\n\n handleToggle(event: Event): void {\n event.stopPropagation();\n if (!this.node().disabled) {\n this.nodeToggle.emit(this.node());\n }\n }\n\n handleCheck(event: Event): void {\n event.stopPropagation();\n const checkbox = event.target as HTMLInputElement;\n if (!this.node().disabled) {\n this.nodeCheck.emit({ node: this.node(), checked: checkbox.checked });\n }\n }\n\n handleArrowRight(event: Event): void {\n event.preventDefault();\n if (this.hasChildren() && !this.isExpanded()) {\n this.handleToggle(event);\n }\n }\n\n handleArrowLeft(event: Event): void {\n event.preventDefault();\n if (this.hasChildren() && this.isExpanded()) {\n this.handleToggle(event);\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DsTreeNodeComponent } from './ds-tree-node.component';\n\nexport type TreeSize = 'sm' | 'md' | 'lg';\n\nexport interface TreeNode {\n id: string | number;\n label: string;\n children?: TreeNode[];\n icon?: string;\n disabled?: boolean;\n expanded?: boolean;\n checked?: boolean;\n data?: any;\n}\n\nexport interface TreeNodeSelectEvent {\n node: TreeNode;\n selected: boolean;\n}\n\nexport interface TreeNodeExpandEvent {\n node: TreeNode;\n expanded: boolean;\n}\n\nexport interface TreeNodeCheckEvent {\n node: TreeNode;\n checked: boolean;\n}\n\n/**\n * DsTree - Composant d'affichage hiérarchique\n *\n * @description\n * Arbre hiérarchique avec support de sélection, checkbox,\n * expand/collapse, et navigation clavier.\n *\n * @example\n * ```html\n * <ds-tree\n * [data]=\"treeData\"\n * [selectable]=\"true\"\n * (nodeSelect)=\"onNodeSelect($event)\">\n * </ds-tree>\n * ```\n */\n@Component({\n selector: 'ds-tree',\n standalone: true,\n imports: [CommonModule, DsTreeNodeComponent],\n templateUrl: './ds-tree.html',\n styleUrl: './ds-tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTree {\n // Inputs\n readonly data = input<TreeNode[]>([]);\n readonly selectable = input(true);\n readonly checkable = input(false);\n readonly expandAll = input(false);\n readonly showIcon = input(true);\n readonly showLine = input(false);\n readonly draggable = input(false);\n readonly virtualScroll = input(false);\n readonly size = input<TreeSize>('md');\n readonly loadChildren = input<((node: TreeNode) => Promise<TreeNode[]>) | null>(null);\n\n // Outputs\n readonly nodeSelect = output<TreeNodeSelectEvent>();\n readonly nodeExpand = output<TreeNodeExpandEvent>();\n readonly nodeCheck = output<TreeNodeCheckEvent>();\n\n // State\n readonly selectedNodeId = signal<string | number | null>(null);\n readonly expandedNodeIds = signal<Set<string | number>>(new Set());\n readonly checkedNodeIds = signal<Set<string | number>>(new Set());\n\n // Computed\n readonly containerClasses = computed(() => {\n const classes = ['ds-tree'];\n classes.push(`ds-tree--${this.size()}`);\n if (this.showLine()) classes.push('ds-tree--with-lines');\n if (this.checkable()) classes.push('ds-tree--checkable');\n return classes.join(' ');\n });\n\n readonly processedData = computed(() => {\n const data = this.data();\n if (this.expandAll()) {\n this.expandAllNodes(data);\n }\n return data;\n });\n\n constructor() {\n // Initialize expanded state from data\n this.initializeExpandedState();\n }\n\n onNodeClick(node: TreeNode): void {\n if (node.disabled || !this.selectable()) return;\n\n this.selectedNodeId.set(node.id);\n this.nodeSelect.emit({ node, selected: true });\n }\n\n onNodeToggle(node: TreeNode): void {\n if (node.disabled) return;\n\n const expanded = !this.isExpanded(node.id);\n this.toggleExpand(node.id, expanded);\n this.nodeExpand.emit({ node, expanded });\n\n // Load children if lazy loading\n if (expanded && this.loadChildren()) {\n const loader = this.loadChildren();\n if (loader) {\n loader(node).then((children) => {\n node.children = children;\n });\n }\n }\n }\n\n onNodeCheck(node: TreeNode, checked: boolean): void {\n if (node.disabled) return;\n\n this.setNodeChecked(node, checked);\n this.nodeCheck.emit({ node, checked });\n }\n\n isSelected(nodeId: string | number): boolean {\n return this.selectedNodeId() === nodeId;\n }\n\n isExpanded(nodeId: string | number): boolean {\n return this.expandedNodeIds().has(nodeId);\n }\n\n isChecked(nodeId: string | number): boolean {\n return this.checkedNodeIds().has(nodeId);\n }\n\n getIndeterminateState(node: TreeNode): boolean {\n if (!node.children || node.children.length === 0) return false;\n\n const checkedChildren = node.children.filter((child) => this.isChecked(child.id));\n return checkedChildren.length > 0 && checkedChildren.length < node.children.length;\n }\n\n private toggleExpand(nodeId: string | number, expanded: boolean): void {\n const expandedIds = new Set(this.expandedNodeIds());\n if (expanded) {\n expandedIds.add(nodeId);\n } else {\n expandedIds.delete(nodeId);\n }\n this.expandedNodeIds.set(expandedIds);\n }\n\n private setNodeChecked(node: TreeNode, checked: boolean): void {\n const checkedIds = new Set(this.checkedNodeIds());\n\n // Update current node\n if (checked) {\n checkedIds.add(node.id);\n } else {\n checkedIds.delete(node.id);\n }\n\n // Update all children recursively\n if (node.children) {\n this.updateChildrenChecked(node.children, checked, checkedIds);\n }\n\n this.checkedNodeIds.set(checkedIds);\n }\n\n private updateChildrenChecked(\n children: TreeNode[],\n checked: boolean,\n checkedIds: Set<string | number>\n ): void {\n children.forEach((child) => {\n if (!child.disabled) {\n if (checked) {\n checkedIds.add(child.id);\n } else {\n checkedIds.delete(child.id);\n }\n\n if (child.children) {\n this.updateChildrenChecked(child.children, checked, checkedIds);\n }\n }\n });\n }\n\n private expandAllNodes(nodes: TreeNode[]): void {\n const expandedIds = new Set(this.expandedNodeIds());\n\n const expand = (items: TreeNode[]) => {\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n expandedIds.add(item.id);\n expand(item.children);\n }\n });\n };\n\n expand(nodes);\n this.expandedNodeIds.set(expandedIds);\n }\n\n private initializeExpandedState(): void {\n const data = this.data();\n const expandedIds = new Set<string | number>();\n\n const findExpanded = (nodes: TreeNode[]) => {\n nodes.forEach((node) => {\n if (node.expanded) {\n expandedIds.add(node.id);\n }\n if (node.children) {\n findExpanded(node.children);\n }\n });\n };\n\n findExpanded(data);\n this.expandedNodeIds.set(expandedIds);\n }\n}\n","<div [class]=\"containerClasses()\" role=\"tree\">\n @if (processedData().length === 0) {\n <div class=\"ds-tree__empty\">\n <p>No data available</p>\n </div>\n } @else {\n @for (node of processedData(); track node.id) {\n <ds-tree-node\n [node]=\"node\"\n [level]=\"0\"\n [selectable]=\"selectable()\"\n [checkable]=\"checkable()\"\n [showIcon]=\"showIcon()\"\n [selectedNodeId]=\"selectedNodeId()\"\n [expandedNodeIds]=\"expandedNodeIds()\"\n [checkedNodeIds]=\"checkedNodeIds()\"\n [getIndeterminateState]=\"getIndeterminateState.bind(this)\"\n (nodeClick)=\"onNodeClick($event)\"\n (nodeToggle)=\"onNodeToggle($event)\"\n (nodeCheck)=\"onNodeCheck($event.node, $event.checked)\">\n </ds-tree-node>\n }\n }\n</div>\n","import { Component, input, output, computed, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Niveaux de force du mot de passe.\n */\nexport type PasswordStrength = 'none' | 'weak' | 'medium' | 'strong';\n\n/**\n * Tailles disponibles pour le composant.\n */\nexport type PasswordStrengthSize = 'sm' | 'md' | 'lg';\n\n/**\n * Critère de validation du mot de passe.\n */\nexport interface PasswordCriterion {\n key: string;\n label: string;\n valid: boolean;\n}\n\n/**\n * # DsPasswordStrength\n *\n * Composant indicateur de force de mot de passe avec affichage visuel\n * (barres de progression) et optionnel des critères de validation.\n *\n * ## Usage\n *\n * ```html\n * <ds-password-strength\n * [password]=\"userPassword\"\n * [minLength]=\"8\"\n * [showLabel]=\"true\"\n * [showCriteria]=\"true\"\n * (strengthChange)=\"handleStrengthChange($event)\" />\n * ```\n *\n * ## Calcul de la force\n *\n * - `none`: Champ vide\n * - `weak`: Longueur < minLength OU uniquement lettres\n * - `medium`: Longueur ≥ minLength ET (lettres+chiffres OU lettres+spéciaux)\n * - `strong`: Longueur ≥ minLength ET majuscules + minuscules + chiffres + spéciaux\n *\n * ## Accessibilité\n *\n * - Attribut `role=\"status\"` pour annoncer les changements\n * - Label ARIA dynamique selon la force\n * - Couleurs sémantiques (error/warning/success)\n *\n * @component\n */\n@Component({\n selector: 'ds-password-strength',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-password-strength.html',\n styleUrl: './ds-password-strength.scss',\n})\nexport class DsPasswordStrength {\n /**\n * Mot de passe à évaluer.\n * @default ''\n */\n password = input<string>('');\n\n /**\n * Longueur minimale requise.\n * @default 8\n */\n minLength = input<number>(8);\n\n /**\n * Afficher le label textuel (ex: \"Faible\", \"Moyen\", \"Fort\").\n * @default true\n */\n showLabel = input<boolean>(true);\n\n /**\n * Afficher les critères détaillés de validation.\n * @default false\n */\n showCriteria = input<boolean>(false);\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<PasswordStrengthSize>('md');\n\n /**\n * Émis lorsque la force du mot de passe change.\n */\n strengthChange = output<PasswordStrength>();\n\n /**\n * Icônes FontAwesome pour les critères.\n */\n protected readonly faCheck = faCheck;\n protected readonly faTimes = faTimes;\n\n /**\n * Regex patterns pour la validation.\n */\n private readonly hasUpperCase = /[A-Z]/;\n private readonly hasLowerCase = /[a-z]/;\n private readonly hasNumber = /[0-9]/;\n private readonly hasSpecialChar = /[^A-Za-z0-9]/;\n\n /**\n * Calcul de la force du mot de passe.\n */\n readonly strength = computed(() => {\n const pwd = this.password();\n const minLen = this.minLength();\n\n if (!pwd || pwd.length === 0) {\n return 'none' as PasswordStrength;\n }\n\n const hasUpper = this.hasUpperCase.test(pwd);\n const hasLower = this.hasLowerCase.test(pwd);\n const hasNum = this.hasNumber.test(pwd);\n const hasSpecial = this.hasSpecialChar.test(pwd);\n\n const lengthValid = pwd.length >= minLen;\n\n // Weak: longueur insuffisante OU uniquement lettres\n if (!lengthValid) {\n return 'weak' as PasswordStrength;\n }\n\n const hasLetters = hasUpper || hasLower;\n const hasOnlyLetters = hasLetters && !hasNum && !hasSpecial;\n\n if (hasOnlyLetters) {\n return 'weak' as PasswordStrength;\n }\n\n // Strong: toutes les catégories présentes\n if (hasUpper && hasLower && hasNum && hasSpecial) {\n return 'strong' as PasswordStrength;\n }\n\n // Medium: au moins deux catégories\n return 'medium' as PasswordStrength;\n });\n\n /**\n * Label textuel de la force (pour affichage).\n */\n readonly strengthLabel = computed(() => {\n const labels: Record<PasswordStrength, string> = {\n none: '',\n weak: 'Faible',\n medium: 'Moyen',\n strong: 'Fort',\n };\n return labels[this.strength()];\n });\n\n /**\n * Label ARIA pour accessibilité.\n */\n readonly ariaLabel = computed(() => {\n const str = this.strength();\n if (str === 'none') {\n return 'Force du mot de passe : non définie';\n }\n return `Force du mot de passe : ${this.strengthLabel()}`;\n });\n\n /**\n * Classes CSS calculées pour le conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-password-strength',\n `ds-password-strength--${this.size()}`,\n `ds-password-strength--${this.strength()}`,\n ].filter(Boolean).join(' ');\n });\n\n /**\n * Barres indicatrices (3 barres).\n * Chaque barre est active selon la force.\n */\n readonly bars = computed(() => {\n const str = this.strength();\n const barCount = 3;\n\n const activeCount: Record<PasswordStrength, number> = {\n none: 0,\n weak: 1,\n medium: 2,\n strong: 3,\n };\n\n const count = activeCount[str];\n\n return Array.from({ length: barCount }, (_, index) => ({\n active: index < count,\n level: str,\n }));\n });\n\n /**\n * Liste des critères de validation (pour affichage détaillé).\n */\n readonly criteria = computed((): PasswordCriterion[] => {\n const pwd = this.password();\n const minLen = this.minLength();\n\n return [\n {\n key: 'length',\n label: `Au moins ${minLen} caractères`,\n valid: pwd.length >= minLen,\n },\n {\n key: 'uppercase',\n label: 'Contient des majuscules',\n valid: this.hasUpperCase.test(pwd),\n },\n {\n key: 'lowercase',\n label: 'Contient des minuscules',\n valid: this.hasLowerCase.test(pwd),\n },\n {\n key: 'number',\n label: 'Contient des chiffres',\n valid: this.hasNumber.test(pwd),\n },\n {\n key: 'special',\n label: 'Contient des caractères spéciaux',\n valid: this.hasSpecialChar.test(pwd),\n },\n ];\n });\n\n /**\n * Constructeur : émet les changements de force via effect.\n */\n constructor() {\n let previousStrength: PasswordStrength = 'none';\n\n // Émettre strengthChange à chaque changement\n effect(() => {\n const currentStrength = this.strength();\n if (currentStrength !== previousStrength) {\n previousStrength = currentStrength;\n this.strengthChange.emit(currentStrength);\n }\n });\n }\n}\n","<div [ngClass]=\"containerClasses()\" role=\"status\" [attr.aria-label]=\"ariaLabel()\">\n <!-- Barres indicatrices (3 barres) -->\n <div class=\"ds-password-strength__bars\">\n @for (bar of bars(); track $index) {\n <div\n class=\"ds-password-strength__bar\"\n [class.ds-password-strength__bar--active]=\"bar.active\"\n [class.ds-password-strength__bar--weak]=\"bar.active && bar.level === 'weak'\"\n [class.ds-password-strength__bar--medium]=\"bar.active && bar.level === 'medium'\"\n [class.ds-password-strength__bar--strong]=\"bar.active && bar.level === 'strong'\">\n </div>\n }\n </div>\n\n <!-- Label optionnel -->\n @if (showLabel() && strength() !== 'none') {\n <span\n class=\"ds-password-strength__label\"\n [class]=\"'ds-password-strength__label--' + strength()\">\n {{ strengthLabel() }}\n </span>\n }\n\n <!-- Critères détaillés optionnels -->\n @if (showCriteria()) {\n <ul class=\"ds-password-strength__criteria\">\n @for (criterion of criteria(); track criterion.key) {\n <li\n class=\"ds-password-strength__criterion\"\n [class.ds-password-strength__criterion--valid]=\"criterion.valid\">\n <fa-icon [icon]=\"criterion.valid ? faCheck : faTimes\" />\n <span>{{ criterion.label }}</span>\n </li>\n }\n </ul>\n }\n</div>\n","import { Component, input, output, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition, faCircle, faCircleHalfStroke } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Mode d'affichage de la timeline.\n */\nexport type TimelineMode = 'left' | 'right' | 'alternate';\n\n/**\n * Taille de la timeline.\n */\nexport type TimelineSize = 'sm' | 'md' | 'lg';\n\n/**\n * Couleur du point de la timeline.\n */\nexport type TimelineColor = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n\n/**\n * Configuration d'un item de timeline.\n */\nexport interface TimelineItem {\n /**\n * Contenu textuel de l'événement.\n */\n content: string;\n\n /**\n * Date optionnelle de l'événement.\n */\n date?: string;\n\n /**\n * Icône FontAwesome optionnelle.\n */\n icon?: IconDefinition;\n\n /**\n * Couleur du point (si pas d'icône).\n * @default 'default'\n */\n color?: TimelineColor;\n\n /**\n * Position du contenu (pour mode alternate).\n * Si non défini, suit le mode global.\n */\n position?: 'left' | 'right';\n}\n\n/**\n * Événement émis au clic sur un item.\n */\nexport interface TimelineItemClickEvent {\n item: TimelineItem;\n index: number;\n}\n\n/**\n * # DsTimeline\n *\n * Composant pour afficher une liste d'événements dans un ordre chronologique vertical.\n *\n * ## Usage\n *\n * ```html\n * <ds-timeline\n * [items]=\"events\"\n * mode=\"left\"\n * size=\"md\"\n * [pending]=\"false\"\n * (itemClick)=\"onItemClick($event)\">\n * </ds-timeline>\n * ```\n *\n * ## Modes\n *\n * - `left` : Contenu aligné à droite de la ligne\n * - `right` : Contenu aligné à gauche de la ligne\n * - `alternate` : Contenu alterné gauche/droite\n *\n * ## Accessibilité\n *\n * - Liste sémantique avec `role=\"list\"` et `role=\"listitem\"`\n * - Dates et contenus avec attributs ARIA\n * - Navigation clavier supportée\n *\n * @component\n */\n@Component({\n selector: 'ds-timeline',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-timeline.html',\n styleUrl: './ds-timeline.scss',\n})\nexport class DsTimeline {\n /**\n * Liste des événements à afficher.\n */\n items = input.required<TimelineItem[]>();\n\n /**\n * Mode d'affichage (position du contenu).\n * @default 'left'\n */\n mode = input<TimelineMode>('left');\n\n /**\n * Taille du composant.\n * @default 'md'\n */\n size = input<TimelineSize>('md');\n\n /**\n * Affiche un indicateur \"en cours\" à la fin.\n * @default false\n */\n pending = input<boolean>(false);\n\n /**\n * Texte de l'indicateur pending.\n * @default 'En cours...'\n */\n pendingContent = input<string>('En cours...');\n\n /**\n * Inverse l'ordre d'affichage (plus récent en haut).\n * @default false\n */\n reverse = input<boolean>(false);\n\n /**\n * Événement émis au clic sur un item.\n */\n itemClick = output<TimelineItemClickEvent>();\n\n /**\n * Icônes par défaut.\n */\n protected readonly defaultIcon = faCircle;\n protected readonly pendingIcon = faCircleHalfStroke;\n\n /**\n * Items triés (reverse si demandé).\n */\n readonly sortedItems = computed(() => {\n const items = [...this.items()];\n return this.reverse() ? items.reverse() : items;\n });\n\n /**\n * Classes CSS du conteneur.\n */\n readonly containerClasses = computed(() => {\n return [\n 'ds-timeline',\n `ds-timeline--${this.mode()}`,\n `ds-timeline--${this.size()}`,\n ].filter(Boolean);\n });\n\n /**\n * Classes CSS pour un item.\n */\n getItemClasses(item: TimelineItem, index: number): string[] {\n const position = this.getItemPosition(index);\n\n return [\n 'ds-timeline__item',\n `ds-timeline__item--${position}`,\n item.color ? `ds-timeline__item--${item.color}` : 'ds-timeline__item--default',\n ].filter(Boolean);\n }\n\n /**\n * Classes CSS pour le point d'un item.\n */\n getDotClasses(item: TimelineItem): string[] {\n return [\n 'ds-timeline__dot',\n item.icon ? 'ds-timeline__dot--with-icon' : '',\n item.color ? `ds-timeline__dot--${item.color}` : 'ds-timeline__dot--default',\n ].filter(Boolean);\n }\n\n /**\n * Détermine la position d'un item en fonction du mode.\n */\n getItemPosition(index: number): 'left' | 'right' {\n const mode = this.mode();\n\n if (mode === 'left') return 'right'; // Contenu à droite de la ligne\n if (mode === 'right') return 'left'; // Contenu à gauche de la ligne\n\n // Mode alternate : alterner selon l'index\n return index % 2 === 0 ? 'right' : 'left';\n }\n\n /**\n * Gère le clic sur un item.\n */\n handleItemClick(item: TimelineItem, index: number): void {\n this.itemClick.emit({ item, index });\n }\n\n /**\n * Gère la touche Enter/Space sur un item.\n */\n handleKeydown(event: KeyboardEvent, item: TimelineItem, index: number): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleItemClick(item, index);\n }\n }\n\n /**\n * Icône à afficher pour un item.\n */\n getIcon(item: TimelineItem): IconDefinition {\n return item.icon || this.defaultIcon;\n }\n\n /**\n * Vérifie si c'est le dernier item.\n */\n isLastItem(index: number): boolean {\n return index === this.sortedItems().length - 1;\n }\n}\n","<div [ngClass]=\"containerClasses()\" role=\"list\" aria-label=\"Timeline\">\n @for (item of sortedItems(); track $index) {\n <div\n [ngClass]=\"getItemClasses(item, $index)\"\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"handleItemClick(item, $index)\"\n (keydown)=\"handleKeydown($event, item, $index)\"\n [class.ds-timeline__item--last]=\"isLastItem($index) && !pending()\">\n\n <!-- Point de la timeline -->\n <div [ngClass]=\"getDotClasses(item)\" [attr.aria-label]=\"item.date || 'Événement'\">\n @if (item.icon) {\n <fa-icon [icon]=\"getIcon(item)\" class=\"ds-timeline__icon\" aria-hidden=\"true\"></fa-icon>\n }\n </div>\n\n <!-- Ligne de connexion -->\n @if (!isLastItem($index) || pending()) {\n <div class=\"ds-timeline__line\" aria-hidden=\"true\"></div>\n }\n\n <!-- Contenu -->\n <div class=\"ds-timeline__content\">\n @if (item.date) {\n <div class=\"ds-timeline__date\">{{ item.date }}</div>\n }\n <div class=\"ds-timeline__text\">{{ item.content }}</div>\n </div>\n </div>\n }\n\n <!-- Indicateur pending -->\n @if (pending()) {\n <div\n class=\"ds-timeline__item ds-timeline__item--pending ds-timeline__item--{{ getItemPosition(sortedItems().length) }}\"\n role=\"listitem\">\n <div class=\"ds-timeline__dot ds-timeline__dot--pending ds-timeline__dot--with-icon\">\n <fa-icon [icon]=\"pendingIcon\" class=\"ds-timeline__icon ds-timeline__icon--pending\" aria-hidden=\"true\"></fa-icon>\n </div>\n <div class=\"ds-timeline__content\">\n <div class=\"ds-timeline__text ds-timeline__text--pending\">{{ pendingContent() }}</div>\n </div>\n </div>\n }\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PrimitiveCheckbox } from '../../primitives/primitive-checkbox/primitive-checkbox';\nimport { DsButton } from '../ds-button/ds-button';\n\nexport interface TransferItem {\n key: string;\n label: string;\n disabled?: boolean;\n description?: string;\n}\n\nexport type TransferDirection = 'left' | 'right';\nexport type TransferSize = 'sm' | 'md' | 'lg';\n\nexport interface TransferChangeEvent {\n source: TransferItem[];\n target: TransferItem[];\n}\n\n/**\n * DS Transfer\n *\n * Composant permettant de transférer des items entre deux listes (source et cible).\n * Inclut recherche, sélection multiple, et navigation clavier.\n *\n * @example\n * <ds-transfer\n * [source]=\"sourceItems\"\n * [target]=\"targetItems\"\n * sourceTitle=\"Disponibles\"\n * targetTitle=\"Sélectionnés\"\n * [showSearch]=\"true\"\n * (transferChange)=\"onTransfer($event)\"\n * />\n */\n@Component({\n selector: 'ds-transfer',\n standalone: true,\n imports: [CommonModule, FormsModule, PrimitiveCheckbox, DsButton],\n templateUrl: './ds-transfer.html',\n styleUrls: ['./ds-transfer.scss'],\n})\nexport class DsTransfer {\n // Inputs\n readonly source = input<TransferItem[]>([]);\n readonly target = input<TransferItem[]>([]);\n readonly sourceTitle = input<string>('Source');\n readonly targetTitle = input<string>('Target');\n readonly showSearch = input<boolean>(true);\n readonly showSelectAll = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n readonly size = input<TransferSize>('md');\n\n // Outputs\n readonly transferChange = output<TransferChangeEvent>();\n\n // Internal state\n protected readonly sourceSelected = signal<Set<string>>(new Set());\n protected readonly targetSelected = signal<Set<string>>(new Set());\n protected readonly sourceSearchQuery = signal<string>('');\n protected readonly targetSearchQuery = signal<string>('');\n\n // Computed\n protected readonly filteredSource = computed(() => {\n const query = this.sourceSearchQuery().toLowerCase();\n if (!query) return this.source();\n return this.source().filter(item =>\n item.label.toLowerCase().includes(query) ||\n item.description?.toLowerCase().includes(query)\n );\n });\n\n protected readonly filteredTarget = computed(() => {\n const query = this.targetSearchQuery().toLowerCase();\n if (!query) return this.target();\n return this.target().filter(item =>\n item.label.toLowerCase().includes(query) ||\n item.description?.toLowerCase().includes(query)\n );\n });\n\n protected readonly sourceSelectableCount = computed(() =>\n this.filteredSource().filter(item => !item.disabled).length\n );\n\n protected readonly targetSelectableCount = computed(() =>\n this.filteredTarget().filter(item => !item.disabled).length\n );\n\n protected readonly isAllSourceSelected = computed(() => {\n const count = this.sourceSelectableCount();\n return count > 0 && this.sourceSelected().size === count;\n });\n\n protected readonly isAllTargetSelected = computed(() => {\n const count = this.targetSelectableCount();\n return count > 0 && this.targetSelected().size === count;\n });\n\n protected readonly canTransferToTarget = computed(() =>\n this.sourceSelected().size > 0 && !this.disabled()\n );\n\n protected readonly canTransferToSource = computed(() =>\n this.targetSelected().size > 0 && !this.disabled()\n );\n\n protected readonly containerClasses = computed(() => ({\n 'ds-transfer': true,\n 'ds-transfer--disabled': this.disabled(),\n [`ds-transfer--${this.size()}`]: true,\n }));\n\n // Public methods\n transferToTarget(): void {\n if (!this.canTransferToTarget()) return;\n\n const selectedKeys = Array.from(this.sourceSelected());\n const itemsToTransfer = this.source().filter(item =>\n selectedKeys.includes(item.key)\n );\n\n const newSource = this.source().filter(item =>\n !selectedKeys.includes(item.key)\n );\n const newTarget = [...this.target(), ...itemsToTransfer];\n\n this.sourceSelected.set(new Set());\n this.emitChange(newSource, newTarget);\n }\n\n transferToSource(): void {\n if (!this.canTransferToSource()) return;\n\n const selectedKeys = Array.from(this.targetSelected());\n const itemsToTransfer = this.target().filter(item =>\n selectedKeys.includes(item.key)\n );\n\n const newTarget = this.target().filter(item =>\n !selectedKeys.includes(item.key)\n );\n const newSource = [...this.source(), ...itemsToTransfer];\n\n this.targetSelected.set(new Set());\n this.emitChange(newSource, newTarget);\n }\n\n toggleSelectAll(direction: TransferDirection): void {\n if (this.disabled()) return;\n\n const isSource = direction === 'left';\n const items = isSource ? this.filteredSource() : this.filteredTarget();\n const selected = isSource ? this.sourceSelected() : this.targetSelected();\n const isAllSelected = isSource ? this.isAllSourceSelected() : this.isAllTargetSelected();\n\n const newSelected = new Set<string>();\n\n if (!isAllSelected) {\n items.forEach(item => {\n if (!item.disabled) {\n newSelected.add(item.key);\n }\n });\n }\n\n if (isSource) {\n this.sourceSelected.set(newSelected);\n } else {\n this.targetSelected.set(newSelected);\n }\n }\n\n toggleItemSelection(item: TransferItem, direction: TransferDirection): void {\n if (this.disabled() || item.disabled) return;\n\n const isSource = direction === 'left';\n const selected = isSource ? this.sourceSelected() : this.targetSelected();\n const newSelected = new Set<string>(selected);\n\n if (newSelected.has(item.key)) {\n newSelected.delete(item.key);\n } else {\n newSelected.add(item.key);\n }\n\n if (isSource) {\n this.sourceSelected.set(newSelected);\n } else {\n this.targetSelected.set(newSelected);\n }\n }\n\n isItemSelected(item: TransferItem, direction: TransferDirection): boolean {\n const selected = direction === 'left' ? this.sourceSelected() : this.targetSelected();\n return selected.has(item.key);\n }\n\n onSearchInput(event: Event, direction: TransferDirection): void {\n const input = event.target as HTMLInputElement;\n const query = input.value;\n\n if (direction === 'left') {\n this.sourceSearchQuery.set(query);\n } else {\n this.targetSearchQuery.set(query);\n }\n }\n\n clearSearch(direction: TransferDirection): void {\n if (direction === 'left') {\n this.sourceSearchQuery.set('');\n } else {\n this.targetSearchQuery.set('');\n }\n }\n\n getSelectedCount(direction: TransferDirection): number {\n return direction === 'left'\n ? this.sourceSelected().size\n : this.targetSelected().size;\n }\n\n getItemCount(direction: TransferDirection): number {\n return direction === 'left'\n ? this.filteredSource().length\n : this.filteredTarget().length;\n }\n\n private emitChange(source: TransferItem[], target: TransferItem[]): void {\n this.transferChange.emit({ source, target });\n }\n\n // ARIA helpers\n protected getListboxId(direction: TransferDirection): string {\n return `ds-transfer-${direction}-listbox`;\n }\n\n protected getItemId(item: TransferItem, direction: TransferDirection): string {\n return `ds-transfer-${direction}-item-${item.key}`;\n }\n\n protected readonly sourceListboxLabel = computed(() =>\n `${this.sourceTitle()} (${this.getSelectedCount('left')}/${this.getItemCount('left')} sélectionné(s))`\n );\n\n protected readonly targetListboxLabel = computed(() =>\n `${this.targetTitle()} (${this.getSelectedCount('right')}/${this.getItemCount('right')} sélectionné(s))`\n );\n}\n","<div [ngClass]=\"containerClasses()\" role=\"group\" aria-label=\"Transfer component\">\n <!-- Source panel -->\n <div class=\"ds-transfer__panel ds-transfer__panel--source\">\n <!-- Header -->\n <div class=\"ds-transfer__header\">\n <div class=\"ds-transfer__title\">\n <span>{{ sourceTitle() }}</span>\n <span class=\"ds-transfer__count\">\n {{ getSelectedCount('left') }} / {{ source().length }}\n </span>\n </div>\n @if (showSelectAll()) {\n <primitive-checkbox\n [checked]=\"isAllSourceSelected()\"\n [indeterminate]=\"sourceSelected().size > 0 && !isAllSourceSelected()\"\n [disabled]=\"disabled() || sourceSelectableCount() === 0\"\n (checkedChange)=\"toggleSelectAll('left')\"\n size=\"sm\"\n label=\"Tout sélectionner\"\n class=\"ds-transfer__select-all\"\n />\n }\n </div>\n\n <!-- Search -->\n @if (showSearch()) {\n <div class=\"ds-transfer__search\">\n <input\n type=\"text\"\n class=\"ds-transfer__search-input\"\n placeholder=\"Rechercher...\"\n [value]=\"sourceSearchQuery()\"\n (input)=\"onSearchInput($event, 'left')\"\n [disabled]=\"disabled()\"\n aria-label=\"Rechercher dans les items source\"\n />\n @if (sourceSearchQuery()) {\n <button\n type=\"button\"\n class=\"ds-transfer__search-clear\"\n (click)=\"clearSearch('left')\"\n aria-label=\"Effacer la recherche\"\n >\n ✕\n </button>\n }\n </div>\n }\n\n <!-- List -->\n <div\n class=\"ds-transfer__list\"\n role=\"listbox\"\n [attr.aria-label]=\"sourceListboxLabel()\"\n [attr.id]=\"getListboxId('left')\"\n [attr.aria-multiselectable]=\"true\"\n >\n @if (filteredSource().length === 0) {\n <div class=\"ds-transfer__empty\">\n @if (sourceSearchQuery()) {\n Aucun résultat\n } @else {\n Aucun item disponible\n }\n </div>\n } @else {\n @for (item of filteredSource(); track item.key) {\n <div\n class=\"ds-transfer__item\"\n [class.ds-transfer__item--selected]=\"isItemSelected(item, 'left')\"\n [class.ds-transfer__item--disabled]=\"item.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isItemSelected(item, 'left')\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.id]=\"getItemId(item, 'left')\"\n (click)=\"toggleItemSelection(item, 'left')\"\n >\n <primitive-checkbox\n [checked]=\"isItemSelected(item, 'left')\"\n [disabled]=\"disabled() || (item.disabled ?? false)\"\n (checkedChange)=\"toggleItemSelection(item, 'left')\"\n size=\"sm\"\n />\n <div class=\"ds-transfer__item-content\">\n <div class=\"ds-transfer__item-label\">{{ item.label }}</div>\n @if (item.description) {\n <div class=\"ds-transfer__item-description\">{{ item.description }}</div>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Transfer buttons -->\n <div class=\"ds-transfer__actions\">\n <ds-button\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"!canTransferToTarget()\"\n (click)=\"transferToTarget()\"\n aria-label=\"Transférer les items sélectionnés vers la droite\"\n >\n ›\n </ds-button>\n <ds-button\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"!canTransferToSource()\"\n (click)=\"transferToSource()\"\n aria-label=\"Transférer les items sélectionnés vers la gauche\"\n >\n ‹\n </ds-button>\n </div>\n\n <!-- Target panel -->\n <div class=\"ds-transfer__panel ds-transfer__panel--target\">\n <!-- Header -->\n <div class=\"ds-transfer__header\">\n <div class=\"ds-transfer__title\">\n <span>{{ targetTitle() }}</span>\n <span class=\"ds-transfer__count\">\n {{ getSelectedCount('right') }} / {{ target().length }}\n </span>\n </div>\n @if (showSelectAll()) {\n <primitive-checkbox\n [checked]=\"isAllTargetSelected()\"\n [indeterminate]=\"targetSelected().size > 0 && !isAllTargetSelected()\"\n [disabled]=\"disabled() || targetSelectableCount() === 0\"\n (checkedChange)=\"toggleSelectAll('right')\"\n size=\"sm\"\n label=\"Tout sélectionner\"\n class=\"ds-transfer__select-all\"\n />\n }\n </div>\n\n <!-- Search -->\n @if (showSearch()) {\n <div class=\"ds-transfer__search\">\n <input\n type=\"text\"\n class=\"ds-transfer__search-input\"\n placeholder=\"Rechercher...\"\n [value]=\"targetSearchQuery()\"\n (input)=\"onSearchInput($event, 'right')\"\n [disabled]=\"disabled()\"\n aria-label=\"Rechercher dans les items cible\"\n />\n @if (targetSearchQuery()) {\n <button\n type=\"button\"\n class=\"ds-transfer__search-clear\"\n (click)=\"clearSearch('right')\"\n aria-label=\"Effacer la recherche\"\n >\n ✕\n </button>\n }\n </div>\n }\n\n <!-- List -->\n <div\n class=\"ds-transfer__list\"\n role=\"listbox\"\n [attr.aria-label]=\"targetListboxLabel()\"\n [attr.id]=\"getListboxId('right')\"\n [attr.aria-multiselectable]=\"true\"\n >\n @if (filteredTarget().length === 0) {\n <div class=\"ds-transfer__empty\">\n @if (targetSearchQuery()) {\n Aucun résultat\n } @else {\n Aucun item sélectionné\n }\n </div>\n } @else {\n @for (item of filteredTarget(); track item.key) {\n <div\n class=\"ds-transfer__item\"\n [class.ds-transfer__item--selected]=\"isItemSelected(item, 'right')\"\n [class.ds-transfer__item--disabled]=\"item.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isItemSelected(item, 'right')\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.id]=\"getItemId(item, 'right')\"\n (click)=\"toggleItemSelection(item, 'right')\"\n >\n <primitive-checkbox\n [checked]=\"isItemSelected(item, 'right')\"\n [disabled]=\"disabled() || (item.disabled ?? false)\"\n (checkedChange)=\"toggleItemSelection(item, 'right')\"\n size=\"sm\"\n />\n <div class=\"ds-transfer__item-content\">\n <div class=\"ds-transfer__item-label\">{{ item.label }}</div>\n @if (item.description) {\n <div class=\"ds-transfer__item-description\">{{ item.description }}</div>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n effect,\n ElementRef,\n ViewChild,\n ViewChildren,\n QueryList,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\n\nexport interface CarouselSlide {\n id: string;\n image?: string;\n alt?: string;\n title?: string;\n description?: string;\n}\n\nexport type CarouselEffect = 'slide' | 'fade';\nexport type CarouselDotsPosition = 'bottom' | 'top' | 'left' | 'right';\n\n@Component({\n selector: 'ds-carousel',\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-carousel.html',\n styleUrl: './ds-carousel.scss',\n})\nexport class DsCarousel implements AfterViewInit, OnDestroy {\n // Config\n slides = input<CarouselSlide[]>([]);\n autoplay = input<boolean>(false);\n autoplaySpeed = input<number>(3000);\n effect = input<CarouselEffect>('slide');\n dots = input<boolean>(true);\n dotsPosition = input<CarouselDotsPosition>('bottom');\n arrows = input<boolean>(true);\n infinite = input<boolean>(true);\n pauseOnHover = input<boolean>(true);\n activeIndex = input<number>(0);\n\n // Events\n slideChange = output<{ index: number; slide: CarouselSlide }>();\n\n // ViewChild\n @ViewChild('track', { static: false }) trackElement?: ElementRef<HTMLDivElement>;\n @ViewChildren('slideElement') slideElements?: QueryList<ElementRef<HTMLDivElement>>;\n\n // Icons\n readonly icons = {\n left: faChevronLeft,\n right: faChevronRight,\n } as const;\n\n // Internal state\n readonly internalActiveIndex = signal<number>(0);\n readonly isPaused = signal<boolean>(false);\n readonly isTransitioning = signal<boolean>(false);\n private autoplayTimer: any = null;\n private startX = 0;\n private startY = 0;\n private isDragging = false;\n\n constructor() {\n // Sync external activeIndex with internal\n effect(() => {\n const extIndex = this.activeIndex();\n const totalSlides = this.slides().length;\n if (totalSlides > 0 && extIndex >= 0 && extIndex < totalSlides) {\n this.internalActiveIndex.set(extIndex);\n }\n });\n\n // Autoplay effect\n effect(() => {\n if (this.autoplay() && !this.isPaused()) {\n this.startAutoplay();\n } else {\n this.stopAutoplay();\n }\n });\n }\n\n ngAfterViewInit(): void {\n // Initialiser l'index actif\n const initialIndex = this.activeIndex();\n if (initialIndex >= 0 && initialIndex < this.slides().length) {\n this.internalActiveIndex.set(initialIndex);\n }\n }\n\n ngOnDestroy(): void {\n this.stopAutoplay();\n }\n\n readonly containerClasses = computed<string>(() => {\n const classes: string[] = ['ds-carousel'];\n classes.push(`ds-carousel--${this.effect()}`);\n classes.push(`ds-carousel--dots-${this.dotsPosition()}`);\n if (this.isTransitioning()) classes.push('ds-carousel--transitioning');\n return classes.join(' ');\n });\n\n readonly trackStyle = computed(() => {\n if (this.effect() === 'slide') {\n const offset = -this.internalActiveIndex() * 100;\n return { transform: `translateX(${offset}%)` };\n }\n return {};\n });\n\n slideClasses(index: number): string {\n const classes: string[] = ['ds-carousel__slide'];\n const active = this.internalActiveIndex();\n\n if (index === active) {\n classes.push('ds-carousel__slide--active');\n }\n\n if (this.effect() === 'fade') {\n classes.push('ds-carousel__slide--fade');\n }\n\n return classes.join(' ');\n }\n\n dotClasses(index: number): string {\n const classes: string[] = ['ds-carousel__dot'];\n if (index === this.internalActiveIndex()) {\n classes.push('ds-carousel__dot--active');\n }\n return classes.join(' ');\n }\n\n // Public methods\n next(): void {\n const totalSlides = this.slides().length;\n if (totalSlides === 0) return;\n\n const currentIndex = this.internalActiveIndex();\n let nextIndex = currentIndex + 1;\n\n if (nextIndex >= totalSlides) {\n nextIndex = this.infinite() ? 0 : currentIndex;\n }\n\n if (nextIndex !== currentIndex) {\n this.goTo(nextIndex);\n }\n }\n\n prev(): void {\n const totalSlides = this.slides().length;\n if (totalSlides === 0) return;\n\n const currentIndex = this.internalActiveIndex();\n let prevIndex = currentIndex - 1;\n\n if (prevIndex < 0) {\n prevIndex = this.infinite() ? totalSlides - 1 : currentIndex;\n }\n\n if (prevIndex !== currentIndex) {\n this.goTo(prevIndex);\n }\n }\n\n goTo(index: number): void {\n const totalSlides = this.slides().length;\n if (index < 0 || index >= totalSlides || index === this.internalActiveIndex()) {\n return;\n }\n\n this.isTransitioning.set(true);\n this.internalActiveIndex.set(index);\n\n const slide = this.slides()[index];\n this.slideChange.emit({ index, slide });\n\n // Reset transitioning flag\n setTimeout(() => {\n this.isTransitioning.set(false);\n }, 300);\n\n // Reset autoplay\n if (this.autoplay()) {\n this.stopAutoplay();\n this.startAutoplay();\n }\n }\n\n pause(): void {\n this.isPaused.set(true);\n this.stopAutoplay();\n }\n\n play(): void {\n this.isPaused.set(false);\n if (this.autoplay()) {\n this.startAutoplay();\n }\n }\n\n onMouseEnter(): void {\n if (this.pauseOnHover() && this.autoplay()) {\n this.pause();\n }\n }\n\n onMouseLeave(): void {\n if (this.pauseOnHover() && this.autoplay()) {\n this.play();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n this.prev();\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.next();\n break;\n case 'Home':\n event.preventDefault();\n this.goTo(0);\n break;\n case 'End':\n event.preventDefault();\n this.goTo(this.slides().length - 1);\n break;\n }\n }\n\n // Touch/swipe handlers\n onTouchStart(event: TouchEvent): void {\n this.startX = event.touches[0].clientX;\n this.startY = event.touches[0].clientY;\n this.isDragging = false;\n }\n\n onTouchMove(event: TouchEvent): void {\n if (!this.isDragging) {\n const deltaX = Math.abs(event.touches[0].clientX - this.startX);\n const deltaY = Math.abs(event.touches[0].clientY - this.startY);\n // Detect horizontal swipe\n if (deltaX > deltaY && deltaX > 10) {\n this.isDragging = true;\n }\n }\n }\n\n onTouchEnd(event: TouchEvent): void {\n if (!this.isDragging) return;\n\n const endX = event.changedTouches[0].clientX;\n const deltaX = endX - this.startX;\n\n if (Math.abs(deltaX) > 50) {\n if (deltaX > 0) {\n this.prev();\n } else {\n this.next();\n }\n }\n\n this.isDragging = false;\n }\n\n private startAutoplay(): void {\n this.stopAutoplay();\n this.autoplayTimer = setInterval(() => {\n this.next();\n }, this.autoplaySpeed());\n }\n\n private stopAutoplay(): void {\n if (this.autoplayTimer) {\n clearInterval(this.autoplayTimer);\n this.autoplayTimer = null;\n }\n }\n}\n","<div\n [class]=\"containerClasses()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (keydown)=\"onKeydown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n tabindex=\"0\"\n role=\"region\"\n aria-roledescription=\"carousel\"\n [attr.aria-label]=\"'Carousel with ' + slides().length + ' slides'\"\n>\n <!-- Arrows -->\n @if (arrows() && slides().length > 1) {\n <button\n class=\"ds-carousel__arrow ds-carousel__arrow--left\"\n (click)=\"prev()\"\n [attr.aria-label]=\"'Previous slide'\"\n type=\"button\"\n >\n <fa-icon [icon]=\"icons.left\" />\n </button>\n\n <button\n class=\"ds-carousel__arrow ds-carousel__arrow--right\"\n (click)=\"next()\"\n [attr.aria-label]=\"'Next slide'\"\n type=\"button\"\n >\n <fa-icon [icon]=\"icons.right\" />\n </button>\n }\n\n <!-- Slides container -->\n <div class=\"ds-carousel__container\">\n <div\n class=\"ds-carousel__track\"\n #track\n [ngStyle]=\"trackStyle()\"\n role=\"list\"\n >\n @for (slide of slides(); track slide.id; let i = $index) {\n <div\n class=\"{{ slideClasses(i) }}\"\n #slideElement\n role=\"listitem\"\n [attr.aria-hidden]=\"i !== internalActiveIndex()\"\n [attr.aria-label]=\"'Slide ' + (i + 1) + ' of ' + slides().length\"\n >\n @if (slide.image) {\n <img\n [src]=\"slide.image\"\n [alt]=\"slide.alt || slide.title || 'Slide ' + (i + 1)\"\n class=\"ds-carousel__image\"\n />\n }\n\n @if (slide.title || slide.description) {\n <div class=\"ds-carousel__content\">\n @if (slide.title) {\n <h3 class=\"ds-carousel__title\">{{ slide.title }}</h3>\n }\n @if (slide.description) {\n <p class=\"ds-carousel__description\">{{ slide.description }}</p>\n }\n </div>\n }\n\n <!-- Content projection for custom slides -->\n <ng-content select=\"[carousel-slide]\" />\n </div>\n }\n </div>\n </div>\n\n <!-- Dots -->\n @if (dots() && slides().length > 1) {\n <div\n class=\"ds-carousel__dots\"\n role=\"tablist\"\n [attr.aria-label]=\"'Carousel navigation'\"\n >\n @for (slide of slides(); track slide.id; let i = $index) {\n <button\n type=\"button\"\n [class]=\"dotClasses(i)\"\n (click)=\"goTo(i)\"\n role=\"tab\"\n [attr.aria-selected]=\"i === internalActiveIndex()\"\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n [attr.aria-controls]=\"'carousel-slide-' + i\"\n >\n <span class=\"ds-carousel__dot-inner\"></span>\n </button>\n }\n </div>\n }\n</div>\n","import { Injectable, signal } from '@angular/core';\nimport { NotificationConfig, NotificationItem } from './ds-notification.types';\nimport { faCircleInfo, faCircleCheck, faTriangleExclamation, faCircleXmark } from '@fortawesome/free-solid-svg-icons';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DsNotificationService {\n private readonly notifications = signal<NotificationItem[]>([]);\n private nextId = 1;\n\n readonly notifications$ = this.notifications.asReadonly();\n\n open(config: NotificationConfig): string {\n const id = config.id || `notification-${this.nextId++}`;\n\n const notification: NotificationItem = {\n ...config,\n id,\n timestamp: Date.now(),\n closable: config.closable ?? true,\n duration: config.duration ?? 4500\n };\n\n // Set default icons based on type\n if (!notification.icon && notification.type) {\n notification.icon = this.getDefaultIcon(notification.type);\n }\n\n this.notifications.update(items => [...items, notification]);\n\n // Auto-dismiss if duration > 0\n if (notification.duration && notification.duration > 0) {\n setTimeout(() => {\n this.close(id);\n }, notification.duration);\n }\n\n return id;\n }\n\n info(title: string, message: string, config?: Partial<NotificationConfig>): string {\n return this.open({\n ...config,\n title,\n message,\n type: 'info'\n });\n }\n\n success(title: string, message: string, config?: Partial<NotificationConfig>): string {\n return this.open({\n ...config,\n title,\n message,\n type: 'success'\n });\n }\n\n warning(title: string, message: string, config?: Partial<NotificationConfig>): string {\n return this.open({\n ...config,\n title,\n message,\n type: 'warning'\n });\n }\n\n error(title: string, message: string, config?: Partial<NotificationConfig>): string {\n return this.open({\n ...config,\n title,\n message,\n type: 'error'\n });\n }\n\n close(id: string): void {\n this.notifications.update(items => items.filter(item => item.id !== id));\n }\n\n closeAll(): void {\n this.notifications.set([]);\n }\n\n private getDefaultIcon(type: string) {\n switch (type) {\n case 'info':\n return faCircleInfo;\n case 'success':\n return faCircleCheck;\n case 'warning':\n return faTriangleExclamation;\n case 'error':\n return faCircleXmark;\n default:\n return faCircleInfo;\n }\n }\n}\n","import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faXmark } from '@fortawesome/free-solid-svg-icons';\nimport { NotificationItem } from './ds-notification.types';\n\n@Component({\n selector: 'ds-notification-item',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-notification-item.component.html',\n styleUrls: ['./ds-notification.component.scss']\n})\nexport class DsNotificationItemComponent {\n notification = input.required<NotificationItem>();\n\n readonly closeClick = output<string>();\n readonly actionClick = output<{ id: string; actionIndex: number }>();\n\n readonly closeIcon = faXmark;\n\n readonly notificationClasses = (): string[] => {\n const classes = ['ds-notification'];\n\n const notification = this.notification();\n if (notification.type) {\n classes.push(`ds-notification--${notification.type}`);\n }\n\n return classes;\n };\n\n onClose(): void {\n this.closeClick.emit(this.notification().id);\n }\n\n onActionClick(index: number): void {\n const notification = this.notification();\n if (notification.actions && notification.actions[index]) {\n notification.actions[index].handler();\n this.actionClick.emit({ id: notification.id, actionIndex: index });\n }\n }\n}\n","<div\n [class]=\"notificationClasses().join(' ')\"\n role=\"alert\"\n [attr.aria-live]=\"notification().type === 'error' ? 'assertive' : 'polite'\"\n [attr.aria-atomic]=\"true\"\n>\n <div class=\"ds-notification__header\">\n <div class=\"ds-notification__icon-title\">\n @if (notification().icon) {\n <fa-icon\n [icon]=\"notification().icon\"\n class=\"ds-notification__icon\"\n [attr.aria-hidden]=\"true\"\n />\n }\n <h4 class=\"ds-notification__title\">{{ notification().title }}</h4>\n </div>\n @if (notification().closable) {\n <button\n type=\"button\"\n class=\"ds-notification__close\"\n (click)=\"onClose()\"\n [attr.aria-label]=\"'Fermer la notification'\"\n >\n <fa-icon [icon]=\"closeIcon\" />\n </button>\n }\n </div>\n\n <div class=\"ds-notification__body\">\n <p class=\"ds-notification__message\">{{ notification().message }}</p>\n </div>\n\n @if (notification().actions && notification().actions!.length > 0) {\n <div class=\"ds-notification__actions\">\n @for (action of notification().actions!; track $index) {\n <button\n type=\"button\"\n class=\"ds-notification__action ds-notification__action--{{ action.variant || 'secondary' }}\"\n (click)=\"onActionClick($index)\"\n >\n {{ action.label }}\n </button>\n }\n </div>\n }\n</div>\n","import { Component, computed, inject, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DsNotificationService } from './ds-notification.service';\nimport { DsNotificationItemComponent } from './ds-notification-item.component';\nimport { NotificationPlacement } from './ds-notification.types';\n\n@Component({\n selector: 'ds-notification-container',\n standalone: true,\n imports: [CommonModule, DsNotificationItemComponent],\n template: `\n <div [class]=\"containerClasses()\">\n @for (notification of visibleNotifications(); track notification.id) {\n <ds-notification-item\n [notification]=\"notification\"\n (closeClick)=\"onClose($event)\"\n class=\"ds-notification-wrapper\"\n />\n }\n </div>\n `,\n styleUrls: ['./ds-notification.component.scss']\n})\nexport class DsNotificationContainerComponent {\n private readonly notificationService = inject(DsNotificationService);\n\n placement = input<NotificationPlacement>('topRight');\n maxStack = input<number>(5);\n\n readonly notifications = this.notificationService.notifications$;\n\n readonly visibleNotifications = computed(() => {\n const all = this.notifications();\n const max = this.maxStack();\n return all.slice(-max);\n });\n\n readonly containerClasses = computed(() => {\n const classes = ['ds-notification-container'];\n classes.push(`ds-notification-container--${this.placement()}`);\n return classes.join(' ');\n });\n\n onClose(id: string): void {\n this.notificationService.close(id);\n }\n}\n","import {\n Component,\n computed,\n effect,\n input,\n output,\n signal,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Interface pour les événements du calendrier\n */\nexport interface CalendarEvent {\n id: string;\n date: Date;\n title: string;\n type?: 'default' | 'success' | 'warning' | 'error';\n}\n\n/**\n * Mode d'affichage du calendrier\n */\nexport type CalendarMode = 'month' | 'year';\n\n/**\n * Tailles du calendrier\n */\nexport type CalendarSize = 'sm' | 'md' | 'lg';\n\n/**\n * Représentation d'un jour dans le calendrier\n */\ninterface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isDisabled: boolean;\n events: CalendarEvent[];\n}\n\n/**\n * Représentation d'un mois dans la vue année\n */\ninterface CalendarMonth {\n monthIndex: number;\n label: string;\n isCurrentMonth: boolean;\n}\n\n/**\n * DsCalendar - Composant calendrier mensuel/annuel avec gestion d'événements\n *\n * @example\n * ```html\n * <ds-calendar\n * [value]=\"currentDate\"\n * [events]=\"calendarEvents\"\n * (dateSelect)=\"onDateSelect($event)\"\n * (eventClick)=\"onEventClick($event)\">\n * </ds-calendar>\n * ```\n */\n@Component({\n selector: 'ds-calendar',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-calendar.html',\n styleUrl: './ds-calendar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ds-calendar',\n '[class]': 'hostClasses()',\n },\n})\nexport class DsCalendar {\n // =========================================================================\n // INPUTS (Signals Angular 20)\n // =========================================================================\n\n /**\n * Date courante affichée\n */\n value = input<Date>(new Date());\n\n /**\n * Mode d'affichage (month ou year)\n */\n mode = input<CalendarMode>('month');\n\n /**\n * Événements à afficher dans le calendrier\n */\n events = input<CalendarEvent[]>([]);\n\n /**\n * Taille du calendrier\n */\n size = input<CalendarSize>('md');\n\n /**\n * Locale pour les noms de jours et mois\n */\n locale = input<string>('fr-FR');\n\n /**\n * Premier jour de la semaine (0=dimanche, 1=lundi)\n */\n firstDayOfWeek = input<number>(1);\n\n /**\n * Fonction pour désactiver certaines dates\n */\n disabledDate = input<((date: Date) => boolean) | undefined>(undefined);\n\n // =========================================================================\n // OUTPUTS\n // =========================================================================\n\n /**\n * Émis lors de la sélection d'une date\n */\n dateSelect = output<Date>();\n\n /**\n * Émis lors du changement de mois\n */\n monthChange = output<Date>();\n\n /**\n * Émis lors du changement de mode\n */\n modeChange = output<CalendarMode>();\n\n /**\n * Émis lors du clic sur un événement\n */\n eventClick = output<CalendarEvent>();\n\n // =========================================================================\n // ÉTAT INTERNE\n // =========================================================================\n\n /**\n * Date actuellement affichée (mois/année)\n */\n readonly displayDate = signal<Date>(new Date());\n\n /**\n * Mode actuel (interne)\n */\n readonly currentMode = signal<CalendarMode>('month');\n\n // =========================================================================\n // ICÔNES FONTAWESOME\n // =========================================================================\n\n readonly icons = {\n chevronLeft: faChevronLeft,\n chevronRight: faChevronRight,\n } as const;\n\n // =========================================================================\n // COMPUTED SIGNALS\n // =========================================================================\n\n /**\n * Classes CSS de l'hôte\n */\n readonly hostClasses = computed(() => {\n const classes = ['ds-calendar'];\n classes.push(`ds-calendar--${this.size()}`);\n classes.push(`ds-calendar--${this.currentMode()}`);\n return classes.join(' ');\n });\n\n /**\n * Titre du calendrier (mois + année)\n */\n readonly calendarTitle = computed(() => {\n const date = this.displayDate();\n const locale = this.locale();\n\n if (this.currentMode() === 'year') {\n return date.getFullYear().toString();\n }\n\n const monthName = date.toLocaleDateString(locale, { month: 'long' });\n const year = date.getFullYear();\n return `${monthName.charAt(0).toUpperCase() + monthName.slice(1)} ${year}`;\n });\n\n /**\n * Noms des jours de la semaine\n */\n readonly weekDays = computed(() => {\n const locale = this.locale();\n const firstDay = this.firstDayOfWeek();\n const days: string[] = [];\n\n // Générer les noms des jours à partir du premier jour de la semaine\n for (let i = 0; i < 7; i++) {\n const date = new Date(2024, 0, firstDay + i); // Année 2024 (lundi = 1er janvier)\n const dayName = date.toLocaleDateString(locale, { weekday: 'short' });\n days.push(dayName.charAt(0).toUpperCase() + dayName.slice(1));\n }\n\n return days;\n });\n\n /**\n * Grille des jours du mois (6 semaines)\n */\n readonly calendarGrid = computed(() => {\n const date = this.displayDate();\n const firstDay = this.firstDayOfWeek();\n const events = this.events();\n const disabledFn = this.disabledDate();\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const year = date.getFullYear();\n const month = date.getMonth();\n\n // Premier jour du mois\n const firstDayOfMonth = new Date(year, month, 1);\n let startDay = firstDayOfMonth.getDay() - firstDay;\n if (startDay < 0) startDay += 7;\n\n // Calculer la date de début de la grille (peut être dans le mois précédent)\n const startDate = new Date(year, month, 1 - startDay);\n\n const days: CalendarDay[] = [];\n\n // Générer 42 jours (6 semaines x 7 jours)\n for (let i = 0; i < 42; i++) {\n const currentDate = new Date(startDate);\n currentDate.setDate(startDate.getDate() + i);\n currentDate.setHours(0, 0, 0, 0);\n\n const isCurrentMonth = currentDate.getMonth() === month;\n const isToday = currentDate.getTime() === today.getTime();\n const isDisabled = disabledFn ? disabledFn(currentDate) : false;\n\n // Trouver les événements pour ce jour\n const dayEvents = events.filter((event) => {\n const eventDate = new Date(event.date);\n eventDate.setHours(0, 0, 0, 0);\n return eventDate.getTime() === currentDate.getTime();\n });\n\n days.push({\n date: currentDate,\n isCurrentMonth,\n isToday,\n isDisabled,\n events: dayEvents,\n });\n }\n\n return days;\n });\n\n /**\n * Grille des mois (vue année)\n */\n readonly monthGrid = computed(() => {\n const date = this.displayDate();\n const locale = this.locale();\n const currentMonth = new Date().getMonth();\n const currentYear = new Date().getFullYear();\n const displayYear = date.getFullYear();\n\n const months: CalendarMonth[] = [];\n\n for (let i = 0; i < 12; i++) {\n const monthDate = new Date(displayYear, i, 1);\n const monthName = monthDate.toLocaleDateString(locale, { month: 'long' });\n\n months.push({\n monthIndex: i,\n label: monthName.charAt(0).toUpperCase() + monthName.slice(1),\n isCurrentMonth: i === currentMonth && displayYear === currentYear,\n });\n }\n\n return months;\n });\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n\n constructor() {\n // Synchroniser displayDate avec value au démarrage\n effect(\n () => {\n const value = this.value();\n this.displayDate.set(new Date(value));\n },\n { allowSignalWrites: true }\n );\n\n // Synchroniser currentMode avec mode\n effect(\n () => {\n this.currentMode.set(this.mode());\n },\n { allowSignalWrites: true }\n );\n }\n\n // =========================================================================\n // MÉTHODES PUBLIQUES\n // =========================================================================\n\n /**\n * Navigue vers le mois précédent\n */\n previousMonth(): void {\n const current = this.displayDate();\n const newDate = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n this.displayDate.set(newDate);\n this.monthChange.emit(newDate);\n }\n\n /**\n * Navigue vers le mois suivant\n */\n nextMonth(): void {\n const current = this.displayDate();\n const newDate = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n this.displayDate.set(newDate);\n this.monthChange.emit(newDate);\n }\n\n /**\n * Navigue vers l'année précédente\n */\n previousYear(): void {\n const current = this.displayDate();\n const newDate = new Date(current.getFullYear() - 1, current.getMonth(), 1);\n this.displayDate.set(newDate);\n this.monthChange.emit(newDate);\n }\n\n /**\n * Navigue vers l'année suivante\n */\n nextYear(): void {\n const current = this.displayDate();\n const newDate = new Date(current.getFullYear() + 1, current.getMonth(), 1);\n this.displayDate.set(newDate);\n this.monthChange.emit(newDate);\n }\n\n /**\n * Sélectionne une date\n */\n selectDate(day: CalendarDay): void {\n if (day.isDisabled) return;\n this.dateSelect.emit(new Date(day.date));\n }\n\n /**\n * Sélectionne un mois (en mode année)\n */\n selectMonth(month: CalendarMonth): void {\n const current = this.displayDate();\n const newDate = new Date(current.getFullYear(), month.monthIndex, 1);\n this.displayDate.set(newDate);\n this.currentMode.set('month');\n this.modeChange.emit('month');\n }\n\n /**\n * Toggle entre mode mois et année\n */\n toggleMode(): void {\n const newMode = this.currentMode() === 'month' ? 'year' : 'month';\n this.currentMode.set(newMode);\n this.modeChange.emit(newMode);\n }\n\n /**\n * Gère le clic sur un événement\n */\n onEventClick(event: CalendarEvent, mouseEvent: MouseEvent): void {\n mouseEvent.stopPropagation();\n this.eventClick.emit(event);\n }\n\n /**\n * Retourne les classes CSS d'un jour\n */\n getDayClasses(day: CalendarDay): string {\n const classes = ['ds-calendar__day'];\n\n if (!day.isCurrentMonth) {\n classes.push('ds-calendar__day--other-month');\n }\n\n if (day.isToday) {\n classes.push('ds-calendar__day--today');\n }\n\n if (day.isDisabled) {\n classes.push('ds-calendar__day--disabled');\n }\n\n if (day.events.length > 0) {\n classes.push('ds-calendar__day--has-events');\n }\n\n return classes.join(' ');\n }\n\n /**\n * Retourne les classes CSS d'un mois\n */\n getMonthClasses(month: CalendarMonth): string {\n const classes = ['ds-calendar__month'];\n\n if (month.isCurrentMonth) {\n classes.push('ds-calendar__month--current');\n }\n\n return classes.join(' ');\n }\n\n /**\n * Retourne les classes CSS d'un événement\n */\n getEventClasses(event: CalendarEvent): string {\n const classes = ['ds-calendar__event'];\n\n if (event.type) {\n classes.push(`ds-calendar__event--${event.type}`);\n }\n\n return classes.join(' ');\n }\n}\n","<div class=\"ds-calendar__container\">\n <!-- Header avec navigation et sélecteur mode -->\n <div class=\"ds-calendar__header\">\n <div class=\"ds-calendar__nav\">\n @if (currentMode() === 'month') {\n <button\n type=\"button\"\n class=\"ds-calendar__nav-btn\"\n (click)=\"previousMonth()\"\n aria-label=\"Mois précédent\"\n >\n <fa-icon [icon]=\"icons.chevronLeft\"></fa-icon>\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"ds-calendar__nav-btn\"\n (click)=\"previousYear()\"\n aria-label=\"Année précédente\"\n >\n <fa-icon [icon]=\"icons.chevronLeft\"></fa-icon>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"ds-calendar__title\"\n (click)=\"toggleMode()\"\n [attr.aria-label]=\"currentMode() === 'month' ? 'Voir l\\'année' : 'Voir le mois'\"\n >\n {{ calendarTitle() }}\n </button>\n\n @if (currentMode() === 'month') {\n <button\n type=\"button\"\n class=\"ds-calendar__nav-btn\"\n (click)=\"nextMonth()\"\n aria-label=\"Mois suivant\"\n >\n <fa-icon [icon]=\"icons.chevronRight\"></fa-icon>\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"ds-calendar__nav-btn\"\n (click)=\"nextYear()\"\n aria-label=\"Année suivante\"\n >\n <fa-icon [icon]=\"icons.chevronRight\"></fa-icon>\n </button>\n }\n </div>\n\n <div class=\"ds-calendar__mode-selector\">\n <button\n type=\"button\"\n class=\"ds-calendar__mode-btn\"\n [class.ds-calendar__mode-btn--active]=\"currentMode() === 'month'\"\n (click)=\"currentMode() === 'year' && toggleMode()\"\n >\n Mois\n </button>\n <button\n type=\"button\"\n class=\"ds-calendar__mode-btn\"\n [class.ds-calendar__mode-btn--active]=\"currentMode() === 'year'\"\n (click)=\"currentMode() === 'month' && toggleMode()\"\n >\n Année\n </button>\n </div>\n </div>\n\n <!-- Vue mois -->\n @if (currentMode() === 'month') {\n <div class=\"ds-calendar__month-view\">\n <!-- Noms des jours de la semaine -->\n <div class=\"ds-calendar__weekdays\">\n @for (day of weekDays(); track day) {\n <div class=\"ds-calendar__weekday\">{{ day }}</div>\n }\n </div>\n\n <!-- Grille des jours -->\n <div class=\"ds-calendar__grid\">\n @for (day of calendarGrid(); track day.date.getTime()) {\n <button\n type=\"button\"\n [class]=\"getDayClasses(day)\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDate(day)\"\n [attr.aria-label]=\"day.date.toLocaleDateString(locale())\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n >\n <span class=\"ds-calendar__day-number\">{{ day.date.getDate() }}</span>\n\n @if (day.events.length > 0) {\n <div class=\"ds-calendar__events\">\n @for (event of day.events; track event.id) {\n <div\n [class]=\"getEventClasses(event)\"\n [title]=\"event.title\"\n (click)=\"onEventClick(event, $event)\"\n role=\"button\"\n [attr.aria-label]=\"event.title\"\n >\n <span class=\"ds-calendar__event-dot\"></span>\n @if (size() === 'lg') {\n <span class=\"ds-calendar__event-title\">{{ event.title }}</span>\n }\n </div>\n }\n </div>\n }\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Vue année -->\n @if (currentMode() === 'year') {\n <div class=\"ds-calendar__year-view\">\n <div class=\"ds-calendar__months-grid\">\n @for (month of monthGrid(); track month.monthIndex) {\n <button\n type=\"button\"\n [class]=\"getMonthClasses(month)\"\n (click)=\"selectMonth(month)\"\n [attr.aria-label]=\"month.label\"\n [attr.aria-current]=\"month.isCurrentMonth ? 'true' : null\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, forwardRef, input, output, signal, computed, effect, ElementRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { IconDefinition, faMinus, faPlus } from '@fortawesome/free-solid-svg-icons';\n\nexport type InputNumberSize = 'sm' | 'md' | 'lg';\nexport type InputNumberControlsPosition = 'both' | 'right';\n\n@Component({\n selector: 'ds-input-number',\n imports: [CommonModule, FaIconComponent],\n templateUrl: './ds-input-number.html',\n styleUrl: './ds-input-number.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsInputNumber),\n multi: true,\n },\n ],\n})\nexport class DsInputNumber implements ControlValueAccessor {\n // Config\n min = input<number>(-Infinity);\n max = input<number>(Infinity);\n step = input<number>(1);\n disabled = input<boolean>(false);\n readonly = input<boolean>(false);\n required = input<boolean>(false);\n size = input<InputNumberSize>('md');\n placeholder = input<string>('');\n prefix = input<string | undefined>(undefined);\n suffix = input<string | undefined>(undefined);\n precision = input<number>(0);\n controls = input<boolean>(true);\n controlsPosition = input<InputNumberControlsPosition>('both');\n\n // Accessibility\n ariaLabel = input<string | undefined>(undefined);\n id = input<string>(crypto.randomUUID());\n name = input<string | undefined>(undefined);\n\n // Events\n valueChange = output<number>();\n\n // ViewChild\n @ViewChild('inputElement', { static: false }) inputElement?: ElementRef<HTMLInputElement>;\n\n // Icons\n readonly faMinus = faMinus;\n readonly faPlus = faPlus;\n\n // Internal state\n private readonly disabledState = signal<boolean>(false);\n readonly internalValue = signal<number | null>(null);\n readonly focused = signal<boolean>(false);\n readonly displayValue = signal<string>('');\n\n constructor() {\n // Effect pour formater l'affichage\n effect(() => {\n const val = this.internalValue();\n if (val === null) {\n this.displayValue.set('');\n return;\n }\n const formatted = this.formatValue(val);\n this.displayValue.set(formatted);\n });\n }\n\n readonly isDisabled = computed<boolean>(() => this.disabled() || this.disabledState());\n readonly isReadonly = computed<boolean>(() => this.readonly());\n readonly showControls = computed<boolean>(() => this.controls() && !this.isDisabled() && !this.isReadonly());\n readonly controlsOnRight = computed<boolean>(() => this.controlsPosition() === 'right');\n readonly controlsOnBoth = computed<boolean>(() => this.controlsPosition() === 'both');\n\n readonly containerClasses = computed<string>(() => {\n const classes: string[] = ['ds-input-number'];\n classes.push(`ds-input-number--${this.size()}`);\n if (this.isDisabled()) classes.push('ds-input-number--disabled');\n if (this.isReadonly()) classes.push('ds-input-number--readonly');\n if (this.focused()) classes.push('ds-input-number--focused');\n if (this.controlsOnRight()) classes.push('ds-input-number--controls-right');\n if (this.controlsOnBoth()) classes.push('ds-input-number--controls-both');\n if (this.prefix()) classes.push('ds-input-number--has-prefix');\n if (this.suffix()) classes.push('ds-input-number--has-suffix');\n return classes.join(' ');\n });\n\n readonly canDecrement = computed<boolean>(() => {\n if (!this.showControls()) return false;\n const val = this.internalValue();\n if (val === null) return true;\n return val > this.min();\n });\n\n readonly canIncrement = computed<boolean>(() => {\n if (!this.showControls()) return false;\n const val = this.internalValue();\n if (val === null) return true;\n return val < this.max();\n });\n\n // ControlValueAccessor\n private onChange: (value: number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: number | null): void {\n this.internalValue.set(value);\n }\n\n registerOnChange(fn: (value: 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.disabledState.set(isDisabled);\n }\n\n // Helpers\n private formatValue(value: number): string {\n const prec = this.precision();\n return prec > 0 ? value.toFixed(prec) : Math.floor(value).toString();\n }\n\n private parseValue(input: string): number | null {\n if (input === '' || input === '-') return null;\n const parsed = parseFloat(input);\n if (isNaN(parsed)) return null;\n return parsed;\n }\n\n private clampValue(value: number): number {\n return Math.max(this.min(), Math.min(this.max(), value));\n }\n\n private roundToPrecision(value: number): number {\n const prec = this.precision();\n if (prec === 0) return Math.round(value);\n const multiplier = Math.pow(10, prec);\n return Math.round(value * multiplier) / multiplier;\n }\n\n private emitValue(value: number | null): void {\n this.onChange(value);\n if (value !== null) {\n this.valueChange.emit(value);\n }\n }\n\n // Event handlers\n onInputChange(event: Event): void {\n if (this.isDisabled() || this.isReadonly()) return;\n\n const target = event.target as HTMLInputElement;\n const parsed = this.parseValue(target.value);\n\n if (parsed === null) {\n this.internalValue.set(null);\n this.emitValue(null);\n return;\n }\n\n const clamped = this.clampValue(parsed);\n const rounded = this.roundToPrecision(clamped);\n this.internalValue.set(rounded);\n this.emitValue(rounded);\n }\n\n onInputBlur(): void {\n this.focused.set(false);\n this.onTouched();\n\n // Formater la valeur au blur\n const val = this.internalValue();\n if (val !== null) {\n const clamped = this.clampValue(val);\n const rounded = this.roundToPrecision(clamped);\n if (rounded !== val) {\n this.internalValue.set(rounded);\n this.emitValue(rounded);\n }\n }\n }\n\n onInputFocus(): void {\n this.focused.set(true);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.isReadonly()) return;\n\n const stepVal = this.step();\n let handled = false;\n\n switch (event.key) {\n case 'ArrowUp':\n this.increment();\n handled = true;\n break;\n case 'ArrowDown':\n this.decrement();\n handled = true;\n break;\n case 'Home':\n this.setToMin();\n handled = true;\n break;\n case 'End':\n this.setToMax();\n handled = true;\n break;\n case 'PageUp':\n this.incrementBy(stepVal * 10);\n handled = true;\n break;\n case 'PageDown':\n this.decrementBy(stepVal * 10);\n handled = true;\n break;\n }\n\n if (handled) {\n event.preventDefault();\n }\n }\n\n increment(): void {\n if (!this.canIncrement()) return;\n this.incrementBy(this.step());\n }\n\n decrement(): void {\n if (!this.canDecrement()) return;\n this.decrementBy(this.step());\n }\n\n private incrementBy(delta: number): void {\n const current = this.internalValue() ?? this.min();\n const newValue = this.clampValue(this.roundToPrecision(current + delta));\n this.internalValue.set(newValue);\n this.emitValue(newValue);\n this.inputElement?.nativeElement.focus();\n }\n\n private decrementBy(delta: number): void {\n const current = this.internalValue() ?? this.max();\n const newValue = this.clampValue(this.roundToPrecision(current - delta));\n this.internalValue.set(newValue);\n this.emitValue(newValue);\n this.inputElement?.nativeElement.focus();\n }\n\n private setToMin(): void {\n const newValue = this.min();\n this.internalValue.set(newValue);\n this.emitValue(newValue);\n }\n\n private setToMax(): void {\n const newValue = this.max();\n this.internalValue.set(newValue);\n this.emitValue(newValue);\n }\n\n // ARIA helpers\n readonly ariaValueMin = computed<number>(() => this.min());\n readonly ariaValueMax = computed<number>(() => this.max());\n readonly ariaValueNow = computed<number | undefined>(() => this.internalValue() ?? undefined);\n readonly ariaValueText = computed<string | undefined>(() => {\n const val = this.internalValue();\n if (val === null) return undefined;\n const prefixStr = this.prefix() ?? '';\n const suffixStr = this.suffix() ?? '';\n return `${prefixStr}${this.formatValue(val)}${suffixStr}`;\n });\n}\n","<div [class]=\"containerClasses()\">\n <!-- Bouton décrémentation (position both) -->\n @if (showControls() && controlsOnBoth()) {\n <button\n type=\"button\"\n class=\"ds-input-number__btn ds-input-number__btn--decrement\"\n [disabled]=\"!canDecrement()\"\n (click)=\"decrement()\"\n [attr.aria-label]=\"'Decrement value'\"\n tabindex=\"-1\"\n >\n <fa-icon [icon]=\"faMinus\" />\n </button>\n }\n\n <!-- Wrapper pour input + prefix/suffix -->\n <div class=\"ds-input-number__input-wrapper\">\n @if (prefix()) {\n <span class=\"ds-input-number__prefix\">{{ prefix() }}</span>\n }\n\n <input\n #inputElement\n type=\"text\"\n class=\"ds-input-number__input\"\n [id]=\"id()\"\n [name]=\"name()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"isReadonly()\"\n [required]=\"required()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-valuemin]=\"ariaValueMin()\"\n [attr.aria-valuemax]=\"ariaValueMax()\"\n [attr.aria-valuenow]=\"ariaValueNow()\"\n [attr.aria-valuetext]=\"ariaValueText()\"\n role=\"spinbutton\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (focus)=\"onInputFocus()\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n @if (suffix()) {\n <span class=\"ds-input-number__suffix\">{{ suffix() }}</span>\n }\n </div>\n\n <!-- Boutons position right -->\n @if (showControls() && controlsOnRight()) {\n <div class=\"ds-input-number__controls-right\">\n <button\n type=\"button\"\n class=\"ds-input-number__btn ds-input-number__btn--increment-right\"\n [disabled]=\"!canIncrement()\"\n (click)=\"increment()\"\n [attr.aria-label]=\"'Increment value'\"\n tabindex=\"-1\"\n >\n <fa-icon [icon]=\"faPlus\" />\n </button>\n <button\n type=\"button\"\n class=\"ds-input-number__btn ds-input-number__btn--decrement-right\"\n [disabled]=\"!canDecrement()\"\n (click)=\"decrement()\"\n [attr.aria-label]=\"'Decrement value'\"\n tabindex=\"-1\"\n >\n <fa-icon [icon]=\"faMinus\" />\n </button>\n </div>\n }\n\n <!-- Bouton incrémentation (position both) -->\n @if (showControls() && controlsOnBoth()) {\n <button\n type=\"button\"\n class=\"ds-input-number__btn ds-input-number__btn--increment\"\n [disabled]=\"!canIncrement()\"\n (click)=\"increment()\"\n [attr.aria-label]=\"'Increment value'\"\n tabindex=\"-1\"\n >\n <fa-icon [icon]=\"faPlus\" />\n </button>\n }\n</div>\n","import { Component, forwardRef, input, signal, computed, HostListener } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\n\n/**\n * Option pour un segment\n */\nexport interface SegmentOption {\n value: string;\n label: string;\n icon?: string;\n disabled?: boolean;\n}\n\n/**\n * Taille du segmented control\n */\nexport type SegmentedControlSize = 'sm' | 'md' | 'lg';\n\n/**\n * Orientation du segmented control\n */\nexport type SegmentedControlOrientation = 'horizontal' | 'vertical';\n\n/**\n * Couleur du segment actif\n */\nexport type SegmentedControlColor = 'primary' | 'neutral';\n\n/**\n * DS Segmented Control\n *\n * Composant groupe de boutons mutuellement exclusifs visuellement connectés.\n * Alternative stylisée aux boutons radio pour basculer entre vues, modes ou options.\n *\n * @example\n * // Formulaire réactif\n * <ds-segmented-control\n * formControlName=\"view\"\n * [options]=\"viewOptions\"\n * size=\"md\"\n * fullWidth\n * />\n *\n * @example\n * // Template-driven\n * <ds-segmented-control\n * [(ngModel)]=\"selectedView\"\n * [options]=\"[\n * { value: 'list', label: 'Liste', icon: 'fas-list' },\n * { value: 'grid', label: 'Grille', icon: 'fas-grid' },\n * { value: 'map', label: 'Carte', icon: 'fas-map' }\n * ]\"\n * color=\"neutral\"\n * />\n */\n@Component({\n selector: 'ds-segmented-control',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule],\n templateUrl: './ds-segmented-control.html',\n styleUrl: './ds-segmented-control.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSegmentedControl),\n multi: true,\n },\n ],\n})\nexport class DsSegmentedControl implements ControlValueAccessor {\n /**\n * Liste des options du segmented control\n */\n options = input.required<SegmentOption[]>();\n\n /**\n * Taille du segmented control (sm, md, lg)\n */\n size = input<SegmentedControlSize>('md');\n\n /**\n * État désactivé global\n */\n disabled = input<boolean>(false);\n\n /**\n * Prend toute la largeur du conteneur\n */\n fullWidth = input<boolean>(false);\n\n /**\n * Orientation (horizontal, vertical)\n */\n orientation = input<SegmentedControlOrientation>('horizontal');\n\n /**\n * Couleur du segment actif (primary, neutral)\n */\n color = input<SegmentedControlColor>('primary');\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 containerClasses = computed<Record<string, boolean>>(() => ({\n 'ds-segmented-control': true,\n [`ds-segmented-control--${this.size()}`]: true,\n [`ds-segmented-control--${this.orientation()}`]: true,\n [`ds-segmented-control--${this.color()}`]: true,\n 'ds-segmented-control--full-width': this.fullWidth(),\n 'ds-segmented-control--disabled': this.isDisabled(),\n }));\n\n readonly activeIndex = computed<number>(() => {\n const value = this.internalValue();\n if (!value) return -1;\n return this.options().findIndex((opt) => opt.value === value);\n });\n\n /**\n * Vérifie si une option est sélectionnée\n */\n protected isOptionSelected(option: SegmentOption): boolean {\n return this.internalValue() === option.value;\n }\n\n /**\n * Vérifie si une option est désactivée\n */\n protected isOptionDisabled(option: SegmentOption): boolean {\n return this.isDisabled() || !!option.disabled;\n }\n\n /**\n * Classes CSS pour un segment\n */\n protected getSegmentClasses(option: SegmentOption): Record<string, boolean> {\n return {\n 'ds-segmented-control__segment': true,\n 'ds-segmented-control__segment--active': this.isOptionSelected(option),\n 'ds-segmented-control__segment--disabled': this.isOptionDisabled(option),\n };\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 onSegmentClick(option: SegmentOption): void {\n if (this.isOptionDisabled(option)) {\n return;\n }\n this.internalValue.set(option.value);\n this.onChange(option.value);\n this.onTouched();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (target.getAttribute('role') !== 'radio') return;\n\n const currentIndex = this.activeIndex();\n const optionsArray = this.options();\n const isHorizontal = this.orientation() === 'horizontal';\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n if (!isHorizontal) return;\n event.preventDefault();\n nextIndex = this.findPreviousEnabledOption(currentIndex);\n break;\n case 'ArrowRight':\n if (!isHorizontal) return;\n event.preventDefault();\n nextIndex = this.findNextEnabledOption(currentIndex);\n break;\n case 'ArrowUp':\n if (isHorizontal) return;\n event.preventDefault();\n nextIndex = this.findPreviousEnabledOption(currentIndex);\n break;\n case 'ArrowDown':\n if (isHorizontal) return;\n event.preventDefault();\n nextIndex = this.findNextEnabledOption(currentIndex);\n break;\n case 'Home':\n event.preventDefault();\n nextIndex = this.findNextEnabledOption(-1);\n break;\n case 'End':\n event.preventDefault();\n nextIndex = this.findPreviousEnabledOption(optionsArray.length);\n break;\n default:\n return;\n }\n\n if (nextIndex !== currentIndex && nextIndex !== -1) {\n this.onSegmentClick(optionsArray[nextIndex]);\n this.focusSegment(nextIndex);\n }\n }\n\n private findNextEnabledOption(startIndex: number): number {\n const optionsArray = this.options();\n for (let i = startIndex + 1; i < optionsArray.length; i++) {\n if (!optionsArray[i].disabled) return i;\n }\n return startIndex === -1 ? 0 : startIndex;\n }\n\n private findPreviousEnabledOption(startIndex: number): number {\n const optionsArray = this.options();\n for (let i = startIndex - 1; i >= 0; i--) {\n if (!optionsArray[i].disabled) return i;\n }\n return startIndex === optionsArray.length ? optionsArray.length - 1 : startIndex;\n }\n\n private focusSegment(index: number): void {\n setTimeout(() => {\n const segment = document.querySelector(\n `.ds-segmented-control__segment[data-index=\"${index}\"]`\n ) as HTMLElement;\n segment?.focus();\n }, 0);\n }\n\n // Track function for @for\n protected trackByValue(_index: number, option: SegmentOption): string {\n return option.value;\n }\n\n /**\n * Parse l'icône depuis le format string vers le format FontAwesome\n * @param iconName - Nom de l'icône (ex: 'fas-list', 'list', 'fa-solid fa-list')\n * @returns Tuple [prefix, iconName] pour FontAwesome\n */\n protected parseIcon(iconName: string): [string, string] {\n // Format: 'fas-list' ou 'far-check'\n if (iconName.includes('-')) {\n const parts = iconName.split('-');\n if (parts[0] === 'fas' || parts[0] === 'far' || parts[0] === 'fab') {\n return [parts[0], parts.slice(1).join('-')];\n }\n }\n // Par défaut, utiliser 'fas' comme préfixe\n return ['fas', iconName];\n }\n}\n","<div\n [ngClass]=\"containerClasses()\"\n role=\"radiogroup\"\n [attr.aria-disabled]=\"isDisabled()\"\n>\n @for (option of options(); track trackByValue($index, option)) {\n <button\n type=\"button\"\n role=\"radio\"\n [ngClass]=\"getSegmentClasses(option)\"\n [attr.data-index]=\"$index\"\n [attr.aria-checked]=\"isOptionSelected(option)\"\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\n [disabled]=\"isOptionDisabled(option)\"\n [tabindex]=\"isOptionSelected(option) ? 0 : -1\"\n (click)=\"onSegmentClick(option)\"\n >\n @if (option.icon) {\n <fa-icon\n class=\"ds-segmented-control__icon\"\n [icon]=\"parseIcon(option.icon)\"\n />\n }\n <span class=\"ds-segmented-control__label\">{{ option.label }}</span>\n </button>\n }\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n signal,\n computed,\n output,\n effect,\n AfterViewInit,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faCheck } from '@fortawesome/free-solid-svg-icons';\n\nexport type ColorFormat = 'hex' | 'rgb' | 'hsl';\n\n@Component({\n selector: 'ds-color-picker-panel',\n standalone: true,\n imports: [CommonModule, FormsModule, FontAwesomeModule],\n template: `\n <div class=\"ds-color-picker-panel\" role=\"dialog\" aria-label=\"Color picker\">\n <!-- Spectre de couleurs -->\n <div class=\"ds-color-picker-panel__spectrum\">\n <canvas\n #spectrumCanvas\n class=\"ds-color-picker-panel__spectrum-canvas\"\n width=\"280\"\n height=\"180\"\n (mousedown)=\"onSpectrumMouseDown($event)\"\n (mousemove)=\"onSpectrumMouseMove($event)\"\n (mouseup)=\"onSpectrumMouseUp()\"\n (mouseleave)=\"onSpectrumMouseUp()\">\n </canvas>\n\n <!-- Curseur de sélection -->\n @if (cursorX() !== null && cursorY() !== null) {\n <div\n class=\"ds-color-picker-panel__cursor\"\n [style.left.px]=\"cursorX()\"\n [style.top.px]=\"cursorY()\">\n </div>\n }\n </div>\n\n <!-- Slider de teinte -->\n <div class=\"ds-color-picker-panel__hue-slider\">\n <input\n type=\"range\"\n class=\"ds-color-picker-panel__slider\"\n min=\"0\"\n max=\"360\"\n step=\"1\"\n [value]=\"hue()\"\n (input)=\"onHueChange($event)\"\n aria-label=\"Hue\" />\n </div>\n\n <!-- Slider alpha (optionnel) -->\n @if (showAlpha) {\n <div class=\"ds-color-picker-panel__alpha-slider\">\n <div class=\"ds-color-picker-panel__alpha-bg\"></div>\n <input\n type=\"range\"\n class=\"ds-color-picker-panel__slider ds-color-picker-panel__slider--alpha\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n [value]=\"alpha() * 100\"\n (input)=\"onAlphaChange($event)\"\n aria-label=\"Alpha\" />\n </div>\n }\n\n <!-- Inputs manuels -->\n <div class=\"ds-color-picker-panel__inputs\">\n @if (format === 'hex') {\n <div class=\"ds-color-picker-panel__input-group\">\n <label class=\"ds-color-picker-panel__label\">HEX</label>\n <input\n type=\"text\"\n class=\"ds-color-picker-panel__input\"\n [value]=\"hexValue()\"\n (input)=\"onHexInput($event)\"\n maxlength=\"7\"\n placeholder=\"#000000\" />\n </div>\n }\n\n @if (format === 'rgb') {\n <div class=\"ds-color-picker-panel__input-group\">\n <label class=\"ds-color-picker-panel__label\">R</label>\n <input\n type=\"number\"\n class=\"ds-color-picker-panel__input\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().r\"\n (input)=\"onRGBInput('r', $event)\" />\n </div>\n <div class=\"ds-color-picker-panel__input-group\">\n <label class=\"ds-color-picker-panel__label\">G</label>\n <input\n type=\"number\"\n class=\"ds-color-picker-panel__input\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().g\"\n (input)=\"onRGBInput('g', $event)\" />\n </div>\n <div class=\"ds-color-picker-panel__input-group\">\n <label class=\"ds-color-picker-panel__label\">B</label>\n <input\n type=\"number\"\n class=\"ds-color-picker-panel__input\"\n min=\"0\"\n max=\"255\"\n [value]=\"rgb().b\"\n (input)=\"onRGBInput('b', $event)\" />\n </div>\n @if (showAlpha) {\n <div class=\"ds-color-picker-panel__input-group\">\n <label class=\"ds-color-picker-panel__label\">A</label>\n <input\n type=\"number\"\n class=\"ds-color-picker-panel__input\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n [value]=\"alpha()\"\n (input)=\"onAlphaInputManual($event)\" />\n </div>\n }\n }\n </div>\n\n <!-- Couleurs prédéfinies -->\n @if (presetColors.length > 0) {\n <div class=\"ds-color-picker-panel__presets\">\n <div class=\"ds-color-picker-panel__presets-label\">Presets</div>\n <div class=\"ds-color-picker-panel__presets-grid\">\n @for (color of presetColors; track color) {\n <button\n type=\"button\"\n class=\"ds-color-picker-panel__preset\"\n [style.background-color]=\"color\"\n [class.ds-color-picker-panel__preset--selected]=\"color === value\"\n (click)=\"selectPreset(color)\"\n [attr.aria-label]=\"'Select ' + color\">\n @if (color === value) {\n <fa-icon [icon]=\"checkIcon\" class=\"ds-color-picker-panel__preset-check\"></fa-icon>\n }\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Couleurs récentes -->\n @if (showRecentColors && recentColors.length > 0) {\n <div class=\"ds-color-picker-panel__recent\">\n <div class=\"ds-color-picker-panel__recent-label\">Recent</div>\n <div class=\"ds-color-picker-panel__recent-grid\">\n @for (color of recentColors; track color) {\n <button\n type=\"button\"\n class=\"ds-color-picker-panel__preset\"\n [style.background-color]=\"color\"\n [class.ds-color-picker-panel__preset--selected]=\"color === value\"\n (click)=\"selectPreset(color)\"\n [attr.aria-label]=\"'Select ' + color\">\n @if (color === value) {\n <fa-icon [icon]=\"checkIcon\" class=\"ds-color-picker-panel__preset-check\"></fa-icon>\n }\n </button>\n }\n </div>\n </div>\n }\n </div>\n `,\n styleUrl: './color-picker-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsColorPickerPanelComponent implements AfterViewInit {\n @ViewChild('spectrumCanvas') spectrumCanvas?: ElementRef<HTMLCanvasElement>;\n\n // Config (set by parent)\n value = '';\n showAlpha = false;\n presetColors: string[] = [];\n recentColors: string[] = [];\n showRecentColors = false;\n format: ColorFormat = 'hex';\n\n // Outputs\n readonly colorSelected = output<string>();\n readonly closed = output<void>();\n\n // Icons\n readonly checkIcon = faCheck;\n\n // State\n readonly hue = signal(0);\n readonly saturation = signal(100);\n readonly lightness = signal(50);\n readonly alpha = signal(1);\n readonly cursorX = signal<number | null>(null);\n readonly cursorY = signal<number | null>(null);\n readonly isDragging = signal(false);\n\n // Computed\n readonly rgb = computed(() => this.hslToRGB(this.hue(), this.saturation(), this.lightness()));\n\n readonly hexValue = computed(() => {\n const rgb = this.rgb();\n const r = rgb.r.toString(16).padStart(2, '0');\n const g = rgb.g.toString(16).padStart(2, '0');\n const b = rgb.b.toString(16).padStart(2, '0');\n return `#${r}${g}${b}`;\n });\n\n readonly currentColor = computed(() => {\n if (this.showAlpha && this.alpha() < 1) {\n const rgb = this.rgb();\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${this.alpha()})`;\n }\n return this.hexValue();\n });\n\n constructor() {\n // Observer les changements de couleur\n effect(() => {\n const color = this.currentColor();\n if (color !== this.value) {\n this.colorSelected.emit(color);\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.initializeFromValue();\n this.renderSpectrum();\n }\n\n private initializeFromValue(): void {\n if (!this.value) {\n this.updateCursor();\n return;\n }\n\n const rgb = this.parseColor(this.value);\n if (rgb) {\n const hsl = this.rgbToHSL(rgb.r, rgb.g, rgb.b);\n this.hue.set(hsl.h);\n this.saturation.set(hsl.s);\n this.lightness.set(hsl.l);\n if (rgb.a !== undefined) {\n this.alpha.set(rgb.a);\n }\n this.updateCursor();\n }\n }\n\n private renderSpectrum(): void {\n if (!this.spectrumCanvas) return;\n\n const canvas = this.spectrumCanvas.nativeElement;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const width = canvas.width;\n const height = canvas.height;\n\n // Gradient de saturation (horizontal)\n const satGradient = ctx.createLinearGradient(0, 0, width, 0);\n satGradient.addColorStop(0, 'white');\n satGradient.addColorStop(1, `hsl(${this.hue()}, 100%, 50%)`);\n ctx.fillStyle = satGradient;\n ctx.fillRect(0, 0, width, height);\n\n // Gradient de luminosité (vertical)\n const lightGradient = ctx.createLinearGradient(0, 0, 0, height);\n lightGradient.addColorStop(0, 'transparent');\n lightGradient.addColorStop(1, 'black');\n ctx.fillStyle = lightGradient;\n ctx.fillRect(0, 0, width, height);\n }\n\n private updateCursor(): void {\n if (!this.spectrumCanvas) return;\n\n const canvas = this.spectrumCanvas.nativeElement;\n const x = (this.saturation() / 100) * canvas.width;\n const y = ((100 - this.lightness()) / 100) * canvas.height;\n\n this.cursorX.set(x);\n this.cursorY.set(y);\n }\n\n onHueChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.hue.set(parseInt(target.value, 10));\n this.renderSpectrum();\n }\n\n onAlphaChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.alpha.set(parseInt(target.value, 10) / 100);\n }\n\n onSpectrumMouseDown(event: MouseEvent): void {\n this.isDragging.set(true);\n this.updateColorFromSpectrum(event);\n }\n\n onSpectrumMouseMove(event: MouseEvent): void {\n if (this.isDragging()) {\n this.updateColorFromSpectrum(event);\n }\n }\n\n onSpectrumMouseUp(): void {\n this.isDragging.set(false);\n }\n\n private updateColorFromSpectrum(event: MouseEvent): void {\n if (!this.spectrumCanvas) return;\n\n const canvas = this.spectrumCanvas.nativeElement;\n const rect = canvas.getBoundingClientRect();\n const x = Math.max(0, Math.min(event.clientX - rect.left, canvas.width));\n const y = Math.max(0, Math.min(event.clientY - rect.top, canvas.height));\n\n const saturation = (x / canvas.width) * 100;\n const lightness = 100 - (y / canvas.height) * 100;\n\n this.saturation.set(Math.round(saturation));\n this.lightness.set(Math.round(lightness));\n this.cursorX.set(x);\n this.cursorY.set(y);\n }\n\n onHexInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const hex = target.value;\n\n if (!hex.startsWith('#')) {\n target.value = '#' + hex;\n return;\n }\n\n const rgb = this.parseColor(hex);\n if (rgb) {\n const hsl = this.rgbToHSL(rgb.r, rgb.g, rgb.b);\n this.hue.set(hsl.h);\n this.saturation.set(hsl.s);\n this.lightness.set(hsl.l);\n this.renderSpectrum();\n this.updateCursor();\n }\n }\n\n onRGBInput(channel: 'r' | 'g' | 'b', event: Event): void {\n const target = event.target as HTMLInputElement;\n const value = parseInt(target.value, 10);\n\n if (isNaN(value) || value < 0 || value > 255) return;\n\n const currentRGB = this.rgb();\n const newRGB = { ...currentRGB, [channel]: value };\n\n const hsl = this.rgbToHSL(newRGB.r, newRGB.g, newRGB.b);\n this.hue.set(hsl.h);\n this.saturation.set(hsl.s);\n this.lightness.set(hsl.l);\n this.renderSpectrum();\n this.updateCursor();\n }\n\n onAlphaInputManual(event: Event): void {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value);\n\n if (isNaN(value) || value < 0 || value > 1) return;\n\n this.alpha.set(value);\n }\n\n selectPreset(color: string): void {\n const rgb = this.parseColor(color);\n if (rgb) {\n const hsl = this.rgbToHSL(rgb.r, rgb.g, rgb.b);\n this.hue.set(hsl.h);\n this.saturation.set(hsl.s);\n this.lightness.set(hsl.l);\n if (rgb.a !== undefined) {\n this.alpha.set(rgb.a);\n }\n this.renderSpectrum();\n this.updateCursor();\n }\n }\n\n // === Conversions de couleurs ===\n\n private hslToRGB(h: number, s: number, l: number): { r: number; g: number; b: number } {\n h = h / 360;\n s = s / 100;\n l = l / 100;\n\n let r: number, g: number, b: number;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n }\n\n private rgbToHSL(r: number, g: number, b: number): { h: number; s: number; l: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n }\n\n private parseColor(color: string): { r: number; g: number; b: number; a?: number } | null {\n // Parse HEX\n if (color.startsWith('#')) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(color);\n if (!result) return null;\n\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: result[4] ? parseInt(result[4], 16) / 255 : undefined,\n };\n }\n\n // Parse RGB/RGBA\n if (color.startsWith('rgb')) {\n const match = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/);\n if (!match) return null;\n\n return {\n r: parseInt(match[1], 10),\n g: parseInt(match[2], 10),\n b: parseInt(match[3], 10),\n a: match[4] ? parseFloat(match[4]) : undefined,\n };\n }\n\n return null;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n forwardRef,\n effect,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faEyeDropper, faTimes, faCheck } from '@fortawesome/free-solid-svg-icons';\nimport { OverlayModule, OverlayRef, Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DsColorPickerPanelComponent } from './color-picker-panel.component';\n\nexport type ColorPickerSize = 'sm' | 'md' | 'lg';\nexport type ColorFormat = 'hex' | 'rgb' | 'hsl';\n\nexport interface RGBColor {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HSLColor {\n h: number;\n s: number;\n l: number;\n a?: number;\n}\n\n/**\n * DsColorPicker - Composant de sélection de couleur\n *\n * @description\n * Sélecteur de couleur avec palette prédéfinie, spectre de couleurs,\n * support RGB/HSL, alpha channel optionnel, et intégration formulaires.\n *\n * @example\n * ```html\n * <ds-color-picker\n * [value]=\"'#3b82f6'\"\n * [showAlpha]=\"true\"\n * (colorChange)=\"onColorChange($event)\">\n * </ds-color-picker>\n * ```\n */\n@Component({\n selector: 'ds-color-picker',\n standalone: true,\n imports: [CommonModule, FontAwesomeModule, FormsModule, OverlayModule],\n templateUrl: './ds-color-picker.html',\n styleUrl: './ds-color-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsColorPicker),\n multi: true,\n },\n ],\n})\nexport class DsColorPicker implements ControlValueAccessor {\n // Inputs\n readonly value = input<string>('');\n readonly size = input<ColorPickerSize>('md');\n readonly disabled = input(false);\n readonly showAlpha = input(false);\n readonly presetColors = input<string[]>([]);\n readonly format = input<ColorFormat>('hex');\n readonly placeholder = input('Select color');\n readonly allowClear = input(true);\n readonly showRecentColors = input(true);\n readonly maxRecentColors = input(8);\n\n // Outputs\n readonly colorChange = output<string>();\n\n // Icons\n readonly pickerIcon = faEyeDropper;\n readonly clearIcon = faTimes;\n readonly checkIcon = faCheck;\n\n // State\n readonly isOpen = signal(false);\n readonly internalValue = signal<string>('');\n readonly isFocused = signal(false);\n readonly recentColors = signal<string[]>([]);\n\n // Overlay\n private overlayRef: OverlayRef | null = null;\n\n // Computed\n readonly containerClasses = computed(() => {\n const classes = ['ds-color-picker'];\n classes.push(`ds-color-picker--${this.size()}`);\n if (this.disabled()) classes.push('ds-color-picker--disabled');\n if (this.isFocused()) classes.push('ds-color-picker--focused');\n if (this.isOpen()) classes.push('ds-color-picker--open');\n return classes.join(' ');\n });\n\n readonly displayValue = computed(() => {\n const val = this.internalValue();\n if (!val) return '';\n\n // Convertir selon le format demandé\n const format = this.format();\n if (format === 'hex') {\n return this.toHex(val);\n } else if (format === 'rgb') {\n return this.toRGB(val);\n } else if (format === 'hsl') {\n return this.toHSL(val);\n }\n return val;\n });\n\n readonly previewColor = computed(() => {\n return this.internalValue() || 'transparent';\n });\n\n readonly effectivePresets = computed(() => {\n const custom = this.presetColors();\n if (custom.length > 0) return custom;\n\n // Palette par défaut\n return [\n '#000000', '#ffffff', '#f87171', '#fb923c', '#fbbf24', '#facc15',\n '#a3e635', '#4ade80', '#34d399', '#2dd4bf', '#22d3ee', '#38bdf8',\n '#60a5fa', '#818cf8', '#a78bfa', '#c084fc', '#e879f9', '#f472b6',\n '#fb7185', '#f43f5e', '#ef4444', '#dc2626', '#b91c1c', '#991b1b',\n ];\n });\n\n // ControlValueAccessor\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor(\n private overlay: Overlay,\n private elementRef: ElementRef\n ) {\n // Sync external value with internal\n effect(() => {\n const val = this.value();\n if (val !== this.internalValue()) {\n this.internalValue.set(val);\n }\n });\n\n // Charger les couleurs récentes depuis localStorage\n this.loadRecentColors();\n }\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 // Géré par input disabled\n }\n\n toggle(): void {\n if (this.disabled()) return;\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled() || this.isOpen()) return;\n\n this.isOpen.set(true);\n this.createOverlay();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n\n this.isOpen.set(false);\n this.destroyOverlay();\n this.onTouched();\n }\n\n onFocus(): void {\n if (!this.disabled()) {\n this.isFocused.set(true);\n }\n }\n\n onBlur(): void {\n this.isFocused.set(false);\n if (!this.isOpen()) {\n this.onTouched();\n }\n }\n\n clear(): void {\n if (this.disabled()) return;\n this.updateValue('');\n }\n\n onColorSelected(color: string): void {\n this.updateValue(color);\n this.addToRecentColors(color);\n }\n\n private updateValue(value: string): void {\n this.internalValue.set(value);\n this.onChange(value);\n this.colorChange.emit(value);\n }\n\n private createOverlay(): void {\n if (this.overlayRef) return;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement.querySelector('.ds-color-picker__trigger'))\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ]);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n const portal = new ComponentPortal(DsColorPickerPanelComponent);\n const componentRef = this.overlayRef.attach(portal);\n\n // Configuration du panel\n componentRef.instance.value = this.internalValue();\n componentRef.instance.showAlpha = this.showAlpha();\n componentRef.instance.presetColors = this.effectivePresets();\n componentRef.instance.recentColors = this.recentColors();\n componentRef.instance.showRecentColors = this.showRecentColors();\n componentRef.instance.format = this.format();\n\n // Écouter les événements\n componentRef.instance.colorSelected.subscribe((color: string) => {\n this.onColorSelected(color);\n });\n\n componentRef.instance.closed.subscribe(() => {\n this.close();\n });\n\n // Fermer au clic sur backdrop\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private addToRecentColors(color: string): void {\n if (!this.showRecentColors() || !color) return;\n\n const recent = this.recentColors();\n const filtered = recent.filter(c => c !== color);\n const updated = [color, ...filtered].slice(0, this.maxRecentColors());\n\n this.recentColors.set(updated);\n this.saveRecentColors(updated);\n }\n\n private loadRecentColors(): void {\n try {\n const stored = localStorage.getItem('ds-color-picker-recent');\n if (stored) {\n const colors = JSON.parse(stored);\n if (Array.isArray(colors)) {\n this.recentColors.set(colors.slice(0, this.maxRecentColors()));\n }\n }\n } catch (e) {\n // Ignorer les erreurs de parsing\n }\n }\n\n private saveRecentColors(colors: string[]): void {\n try {\n localStorage.setItem('ds-color-picker-recent', JSON.stringify(colors));\n } catch (e) {\n // Ignorer les erreurs de stockage\n }\n }\n\n // === Conversions de couleurs ===\n\n private toHex(color: string): string {\n if (color.startsWith('#')) return color;\n\n const rgb = this.parseRGB(color);\n if (rgb) {\n const r = rgb.r.toString(16).padStart(2, '0');\n const g = rgb.g.toString(16).padStart(2, '0');\n const b = rgb.b.toString(16).padStart(2, '0');\n return `#${r}${g}${b}`;\n }\n\n return color;\n }\n\n private toRGB(color: string): string {\n if (color.startsWith('rgb')) return color;\n\n const rgb = this.hexToRGB(color);\n if (rgb) {\n if (rgb.a !== undefined) {\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${rgb.a})`;\n }\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n }\n\n return color;\n }\n\n private toHSL(color: string): string {\n if (color.startsWith('hsl')) return color;\n\n const rgb = this.hexToRGB(color);\n if (rgb) {\n const hsl = this.rgbToHSL(rgb);\n if (hsl.a !== undefined) {\n return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${hsl.a})`;\n }\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n\n return color;\n }\n\n private hexToRGB(hex: string): RGBColor | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(hex);\n if (!result) return null;\n\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: result[4] ? parseInt(result[4], 16) / 255 : undefined,\n };\n }\n\n private parseRGB(rgb: string): RGBColor | null {\n const match = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/);\n if (!match) return null;\n\n return {\n r: parseInt(match[1], 10),\n g: parseInt(match[2], 10),\n b: parseInt(match[3], 10),\n a: match[4] ? parseFloat(match[4]) : undefined,\n };\n }\n\n private rgbToHSL(rgb: RGBColor): HSLColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n a: rgb.a,\n };\n }\n}\n","<div [class]=\"containerClasses()\">\n <div class=\"ds-color-picker__trigger\" (click)=\"toggle()\">\n <!-- Preview de la couleur -->\n <div\n class=\"ds-color-picker__preview\"\n [style.background-color]=\"previewColor()\"\n [attr.aria-label]=\"'Color: ' + displayValue()\">\n </div>\n\n <!-- Input texte -->\n <input\n type=\"text\"\n class=\"ds-color-picker__input\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n readonly\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-label]=\"placeholder()\" />\n\n <!-- Actions -->\n <div class=\"ds-color-picker__actions\">\n @if (allowClear() && internalValue()) {\n <button\n type=\"button\"\n class=\"ds-color-picker__action ds-color-picker__action--clear\"\n [disabled]=\"disabled()\"\n (click)=\"clear(); $event.stopPropagation()\"\n [attr.aria-label]=\"'Clear color'\">\n <fa-icon [icon]=\"clearIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"ds-color-picker__action ds-color-picker__action--picker\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Open color picker'\">\n <fa-icon [icon]=\"pickerIcon\" aria-hidden=\"true\"></fa-icon>\n </button>\n </div>\n </div>\n</div>\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\nexport {\n DsChip,\n type ChipVariant,\n type ChipSize,\n type ChipColor,\n} from './ds-chip/ds-chip';\n\nexport {\n DsSlider,\n type SliderSize,\n type SliderValue,\n type SliderOrientation,\n} from './ds-slider/ds-slider';\n\nexport {\n DsFileUpload,\n type FileUploadSize,\n type UploadFile,\n} from './ds-file-upload/ds-file-upload';\n\nexport {\n DsEmpty,\n type EmptySize,\n} from './ds-empty/ds-empty';\n\nexport {\n DsRating,\n type RatingSize,\n} from './ds-rating/ds-rating';\n\nexport {\n DsDrawer,\n type DrawerPosition,\n type DrawerSize,\n} from './ds-drawer/ds-drawer';\n\nexport {\n DsTimePicker,\n type TimePickerSize,\n type TimeFormat,\n type TimeValue,\n} from './ds-time-picker/ds-time-picker';\n\nexport {\n DsTree,\n type TreeSize,\n type TreeNode,\n type TreeNodeSelectEvent,\n type TreeNodeExpandEvent,\n type TreeNodeCheckEvent,\n} from './ds-tree/ds-tree';\n\nexport {\n DsPasswordStrength,\n type PasswordStrength,\n type PasswordStrengthSize,\n type PasswordCriterion,\n} from './ds-password-strength/ds-password-strength';\n\nexport {\n DsTimeline,\n type TimelineItem,\n type TimelineMode,\n type TimelineSize,\n type TimelineColor,\n type TimelineItemClickEvent,\n} from './ds-timeline/ds-timeline';\n\nexport {\n DsTransfer,\n type TransferItem,\n type TransferDirection,\n type TransferSize,\n type TransferChangeEvent,\n} from './ds-transfer/ds-transfer';\n\nexport {\n DsCarousel,\n type CarouselSlide,\n type CarouselEffect,\n type CarouselDotsPosition,\n} from './ds-carousel/ds-carousel';\n\nexport { DsNotificationContainerComponent } from './ds-notification/ds-notification-container.component';\n\nexport { DsNotificationItemComponent } from './ds-notification/ds-notification-item.component';\n\nexport { DsNotificationService } from './ds-notification/ds-notification.service';\n\nexport type {\n NotificationConfig,\n NotificationAction,\n NotificationPlacement,\n NotificationItem,\n} from './ds-notification/ds-notification.types';\n\nexport {\n DsCalendar,\n type CalendarEvent,\n type CalendarMode,\n type CalendarSize,\n} from './ds-calendar/ds-calendar';\n\nexport {\n DsInputNumber,\n type InputNumberSize,\n type InputNumberControlsPosition,\n} from './ds-input-number/ds-input-number';\n\nexport {\n DsSegmentedControl,\n type SegmentOption,\n type SegmentedControlSize,\n type SegmentedControlOrientation,\n type SegmentedControlColor,\n} from './ds-segmented-control/ds-segmented-control';\n\nexport {\n DsColorPicker,\n type ColorPickerSize,\n type ColorFormat,\n type RGBColor,\n type HSLColor,\n} from './ds-color-picker/ds-color-picker';\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","i2"],"mappings":"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"}
|