@besaitech/ng-design-system 0.0.11 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"besaitech-ng-design-system.mjs","sources":["../../../projects/saitech-design-system/src/lib/icon/icon-registry.ts","../../../projects/saitech-design-system/src/lib/icon/sds-icon.ts","../../../projects/saitech-design-system/src/lib/button/sds-button.ts","../../../projects/saitech-design-system/src/lib/input/sds-input.ts","../../../projects/saitech-design-system/src/lib/textarea/sds-textarea.ts","../../../projects/saitech-design-system/src/lib/toggle-switch/sds-toggle-switch.ts","../../../projects/saitech-design-system/src/lib/checkbox/sds-checkbox.ts","../../../projects/saitech-design-system/src/lib/avatar/sds-avatar.ts","../../../projects/saitech-design-system/src/lib/badge/sds-badge.ts","../../../projects/saitech-design-system/src/lib/card/sds-card.ts","../../../projects/saitech-design-system/src/lib/datepicker/date-utils.ts","../../../projects/saitech-design-system/src/lib/datepicker/sds-calendar.ts","../../../projects/saitech-design-system/src/lib/datepicker/sds-date-picker.ts","../../../projects/saitech-design-system/src/lib/select/sds-select.ts","../../../projects/saitech-design-system/src/lib/select/sds-multi-select.ts","../../../projects/saitech-design-system/src/lib/phone-input/phone-countries.ts","../../../projects/saitech-design-system/src/lib/phone-input/sds-phone-input.ts","../../../projects/saitech-design-system/src/lib/paginator/sds-paginator.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tabs-store.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tabs.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab-list.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab-panels.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab-panel.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-store.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-panel.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-header.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-content.ts","../../../projects/saitech-design-system/src/lib/table/sds-table-cell.ts","../../../projects/saitech-design-system/src/lib/table/sds-table-row-expansion.ts","../../../projects/saitech-design-system/src/lib/table/sds-table.ts","../../../projects/saitech-design-system/src/lib/sidebar/sidebar-store.ts","../../../projects/saitech-design-system/src/lib/topbar/sds-topbar.ts","../../../projects/saitech-design-system/src/lib/shell/sds-shell.ts","../../../projects/saitech-design-system/src/lib/sidebar/sds-sidebar.ts","../../../projects/saitech-design-system/src/lib/sidebar/sds-nav-group.ts","../../../projects/saitech-design-system/src/lib/sidebar/sds-nav-item.ts","../../../projects/saitech-design-system/src/public-api.ts","../../../projects/saitech-design-system/src/besaitech-ng-design-system.ts"],"sourcesContent":["/**\n * Curated set of line icons (Lucide-style, 24x24 viewBox, stroke-based).\n * Each entry holds only the inner SVG markup; the <sds-icon> component wraps it.\n * Add new icons here and they become available everywhere via name=\"...\".\n */\nexport const SDS_ICONS = {\n home: '<path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/><polyline points=\"9 22 9 12 15 12 15 22\"/>',\n 'user-plus':\n '<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><line x1=\"19\" x2=\"19\" y1=\"8\" y2=\"14\"/><line x1=\"22\" x2=\"16\" y1=\"11\" y2=\"11\"/>',\n hand: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-hand-icon lucide-hand\"><path d=\"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2\"/><path d=\"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2\"/><path d=\"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8\"/><path d=\"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\"/></svg>',\n users:\n '<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M22 21v-2a4 4 0 0 0-3-3.87\"/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"/>',\n 'building-2':\n '<path d=\"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z\"/><path d=\"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2\"/><path d=\"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2\"/><path d=\"M10 6h4\"/><path d=\"M10 10h4\"/><path d=\"M10 14h4\"/><path d=\"M10 18h4\"/>',\n package:\n '<path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\"/><path d=\"M12 22V12\"/><polyline points=\"3.29 7 12 12 20.71 7\"/><path d=\"m7.5 4.27 9 5.15\"/>',\n 'package-plus':\n '<path d=\"M16 16h6\"/><path d=\"M19 13v6\"/><path d=\"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0\"/><path d=\"m7.5 4.27 9 5.15\"/><polyline points=\"3.29 7 12 12 20.71 7\"/><path d=\"M12 22V12\"/>',\n 'package-open':\n '<path d=\"M12 22v-9\"/><path d=\"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z\"/><path d=\"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13\"/><path d=\"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36z\"/>',\n 'rotate-ccw':\n '<path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/><path d=\"M3 3v5h5\"/>',\n 'bar-chart-3':\n '<path d=\"M3 3v18h18\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n 'log-out':\n '<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/><polyline points=\"16 17 21 12 16 7\"/><line x1=\"21\" x2=\"9\" y1=\"12\" y2=\"12\"/>',\n 'panel-left-close':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/><path d=\"m16 15-3-3 3-3\"/>',\n 'panel-left-open':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/><path d=\"m14 9 3 3-3 3\"/>',\n 'panel-left':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/>',\n calendar:\n '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n 'chevron-right': '<path d=\"m9 18 6-6-6-6\"/>',\n 'chevron-left': '<path d=\"m15 18-6-6 6-6\"/>',\n 'chevron-down': '<path d=\"m6 9 6 6 6-6\"/>',\n 'chevrons-left': '<path d=\"m11 17-5-5 5-5\"/><path d=\"m18 17-5-5 5-5\"/>',\n 'chevrons-right': '<path d=\"m6 17 5-5-5-5\"/><path d=\"m13 17 5-5-5-5\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n 'alert-circle':\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n type: '<polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" x2=\"15\" y1=\"20\" y2=\"20\"/><line x1=\"12\" x2=\"12\" y1=\"4\" y2=\"20\"/>',\n tag: '<path d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"/><circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n square: '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/>',\n 'circle-user':\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662\"/>',\n 'layout-grid':\n '<rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\"/>',\n 'panels-top-left':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M9 21V9\"/>',\n 'panel-top': '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/>',\n 'rows-3':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M3 15h18\"/>',\n 'book-open':\n '<path d=\"M12 7v14\"/><path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/>',\n palette:\n '<circle cx=\"13.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"17.5\" cy=\"10.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"8.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"6.5\" cy=\"12.5\" r=\".5\" fill=\"currentColor\"/><path d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.555C21.965 6.012 17.461 2 12 2z\"/>',\n bell: '<path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\"/><path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\"/>',\n phone:\n '<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"/>',\n settings:\n '<path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n 'align-left': '<path d=\"M15 12H3\"/><path d=\"M17 18H3\"/><path d=\"M21 6H3\"/>',\n 'toggle-left':\n '<rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"6\" ry=\"6\"/><circle cx=\"8\" cy=\"12\" r=\"2\"/>',\n 'arrow-up': '<path d=\"m5 12 7-7 7 7\"/><path d=\"M12 19V5\"/>',\n 'arrow-down': '<path d=\"M12 5v14\"/><path d=\"m19 12-7 7-7-7\"/>',\n 'chevrons-up-down': '<path d=\"m7 15 5 5 5-5\"/><path d=\"m7 9 5-5 5 5\"/>',\n filter: '<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>',\n table:\n '<path d=\"M12 3v18\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M3 15h18\"/>',\n eye: '<path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n 'check-circle': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n 'arrows-clockwise':\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>',\n menu: '<line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/>',\n 'file-text':\n '<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/><path d=\"M10 9H8\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/>',\n hash: '<line x1=\"4\" x2=\"20\" y1=\"9\" y2=\"9\"/><line x1=\"4\" x2=\"20\" y1=\"15\" y2=\"15\"/><line x1=\"10\" x2=\"8\" y1=\"3\" y2=\"21\"/><line x1=\"16\" x2=\"14\" y1=\"3\" y2=\"21\"/>',\n 'map-pin':\n '<path d=\"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/>',\n inbox:\n '<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"/><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"/>',\n 'arrow-right': '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n 'refresh-cw':\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>',\n 'loader-circle': '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n} as const;\n\nexport type SdsIconName = keyof typeof SDS_ICONS;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { SDS_ICONS, SdsIconName } from './icon-registry';\n\nexport type SdsIconSize = 'sm' | 'md' | 'lg' | 'xl';\n\nconst SIZE_PX: Record<SdsIconSize, number> = { sm: 16, md: 20, lg: 24, xl: 32 };\n\n/** Accept a pixel number, a numeric string (\"18\"), or a size keyword (\"sm\"). */\nfunction toIconPx(value: number | string): number {\n if (typeof value === 'number') return value;\n const n = Number(value);\n return Number.isNaN(n) ? (SIZE_PX[value as SdsIconSize] ?? 20) : n;\n}\n\n/**\n * Inline SVG icon backed by a curated, dependency-free registry.\n *\n * @example\n * <sds-icon name=\"search\" />\n * <sds-icon name=\"home\" [size]=\"18\" />\n */\n@Component({\n selector: 'sds-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '',\n host: {\n class: 'sds-icon inline-flex shrink-0 items-center justify-center',\n '[style.width.px]': 'size()',\n '[style.height.px]': 'size()',\n '[innerHTML]': 'svg()',\n '[attr.aria-hidden]': '\"true\"',\n },\n})\nexport class SdsIcon {\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Icon identifier from the registry. */\n readonly name = input.required<SdsIconName>();\n /** Square size: a pixel number, a numeric string, or a keyword (sm·md·lg·xl). */\n readonly size = input(20, { transform: toIconPx });\n /** Stroke width of the line icon. */\n readonly strokeWidth = input<number>(2);\n\n protected readonly svg = computed<SafeHtml>(() => {\n const inner = SDS_ICONS[this.name()] ?? '';\n const markup =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" ` +\n `width=\"100%\" height=\"100%\" fill=\"none\" stroke=\"currentColor\" ` +\n `stroke-width=\"${this.strokeWidth()}\" stroke-linecap=\"round\" ` +\n `stroke-linejoin=\"round\">${inner}</svg>`;\n return this.sanitizer.bypassSecurityTrustHtml(markup);\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n isDevMode,\n} from '@angular/core';\n\nexport type SdsButtonVariant =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'ghost'\n | 'danger';\nexport type SdsButtonSize = 'sm' | 'md' | 'lg';\n\nconst BASE =\n 'inline-flex items-center justify-center gap-2 font-medium rounded-control ' +\n 'transition-colors duration-150 select-none whitespace-nowrap cursor-pointer ' +\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-brand-500 disabled:opacity-50 disabled:pointer-events-none';\n\nconst VARIANTS: Record<SdsButtonVariant, string> = {\n primary: 'bg-brand-600 text-white shadow-sm hover:bg-brand-700 active:bg-brand-800',\n secondary:\n 'bg-white text-ink border border-border shadow-sm hover:bg-muted active:bg-brand-50',\n tertiary: 'bg-brand-50 text-brand-700 hover:bg-brand-100 active:bg-brand-200/70',\n ghost: 'bg-transparent text-ink-soft hover:bg-black/5 active:bg-black/10',\n danger: 'bg-danger text-white shadow-sm hover:brightness-95 active:brightness-90',\n};\n\nconst SIZES: Record<SdsButtonSize, string> = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-5 text-base',\n};\n\nconst ICON_ONLY: Record<SdsButtonSize, string> = {\n sm: 'w-8 px-0',\n md: 'w-10 px-0',\n lg: 'w-12 px-0',\n};\n\n/**\n * Brand button. Project an <sds-icon sdsIconLeading/> or <sds-icon sdsIconTrailing/>\n * for icons, or set [iconOnly]=\"true\" for a square icon button.\n *\n * @example\n * <sds-button variant=\"primary\" (click)=\"save()\">Enregistrer</sds-button>\n */\n@Component({\n selector: 'sds-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClass()',\n '[attr.aria-disabled]': '(disabled() || loading()) ? \"true\" : null',\n '[style.pointer-events]': '(disabled() || loading()) ? \"none\" : null',\n '(click)': 'onHostClick($event)',\n },\n template: `\n <button\n [type]=\"type()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [class]=\"classes()\"\n >\n @if (loading()) {\n <span class=\"sds-spinner\" aria-hidden=\"true\"></span>\n } @else {\n <ng-content select=\"[sdsIconLeading]\" />\n }\n <ng-content />\n <ng-content select=\"[sdsIconTrailing]\" />\n </button>\n `,\n styles: `\n .sds-spinner {\n width: 1em;\n height: 1em;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: 9999px;\n animation: sds-spin 0.6s linear infinite;\n }\n @keyframes sds-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n})\nexport class SdsButton {\n readonly variant = input<SdsButtonVariant>('primary');\n readonly size = input<SdsButtonSize>('md');\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n /** Full-width button. */\n readonly block = input(false, { transform: booleanAttribute });\n /** Square icon-only button (provide [ariaLabel] for accessibility). */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n\n constructor() {\n // Dev-only guard: icon-only buttons need an explicit accessible name\n // (the projected icon is aria-hidden, so there is no other source).\n if (isDevMode()) {\n effect(() => {\n if (this.iconOnly() && !this.ariaLabel()) {\n console.warn(\n 'sds-button: icon-only buttons require [ariaLabel] for an accessible name.',\n );\n }\n });\n }\n }\n\n /** Block the documented host-bound (click)/routerLink when inert. */\n protected onHostClick(event: Event): void {\n if (this.disabled() || this.loading()) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n }\n\n protected readonly hostClass = computed(() =>\n this.block() ? 'flex w-full' : 'inline-flex',\n );\n\n protected readonly classes = computed(() => {\n const size = this.size();\n return [\n BASE,\n VARIANTS[this.variant()],\n SIZES[size],\n this.iconOnly() ? ICON_ONLY[size] : '',\n this.block() ? 'w-full' : '',\n ]\n .filter(Boolean)\n .join(' ');\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\n\nexport type SdsInputSize = 'sm' | 'md' | 'lg';\nexport type SdsInputAppearance = 'default' | 'on-brand';\nexport type SdsInputType =\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'search'\n | 'url';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsInputSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\n/**\n * Text input with label, hint/error, optional leading/trailing icons and a\n * clear button. Implements ControlValueAccessor — use with reactive forms or\n * [(ngModel)]. The `on-brand` appearance is tuned for dark surfaces (e.g. the\n * sidebar search field).\n */\n@Component({\n selector: 'sds-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsInput),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label\n [for]=\"inputId\"\n class=\"mb-1.5 block text-sm font-medium\"\n [class]=\"onBrand() ? 'text-white/90' : 'text-ink'\"\n >\n {{ label() }}\n </label>\n }\n\n <div\n class=\"relative flex items-center rounded-control border transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n @if (leadingIcon()) {\n <sds-icon\n [name]=\"leadingIcon()!\"\n [size]=\"18\"\n class=\"pointer-events-none absolute left-3 opacity-70\"\n />\n }\n\n <input\n [id]=\"inputId\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"value()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n class=\"w-full bg-transparent outline-none placeholder:text-current/50 disabled:cursor-not-allowed\"\n [class]=\"fieldPadding()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n\n @if (clearable() && value() && !isDisabled()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer\"\n class=\"absolute right-2.5 inline-flex h-6 w-6 items-center justify-center rounded-full opacity-60 hover:opacity-100 hover:bg-black/5\"\n (click)=\"clear()\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n } @else if (trailingIcon()) {\n <sds-icon\n [name]=\"trailingIcon()!\"\n [size]=\"18\"\n class=\"pointer-events-none absolute right-3 opacity-70\"\n />\n }\n </div>\n\n @if (error()) {\n <p [id]=\"inputId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p\n [id]=\"inputId + '-hint'\"\n class=\"mt-1.5 text-xs\"\n [class]=\"onBrand() ? 'text-white/60' : 'text-ink-faint'\"\n >\n {{ hint() }}\n </p>\n }\n `,\n})\nexport class SdsInput implements ControlValueAccessor {\n readonly inputId = `sds-input-${nextId++}`;\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly type = input<SdsInputType>('text');\n readonly size = input<SdsInputSize>('md');\n readonly appearance = input<SdsInputAppearance>('default');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly leadingIcon = input<SdsIconName | null>(null);\n readonly trailingIcon = input<SdsIconName | null>(null);\n\n /** Current value (driven by CVA + user input). */\n protected readonly value = signal('');\n private readonly cvaDisabled = signal(false);\n\n protected readonly onBrand = computed(() => this.appearance() === 'on-brand');\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n protected readonly describedBy = computed(() => {\n if (this.error()) return `${this.inputId}-err`;\n if (this.hint()) return `${this.inputId}-hint`;\n return null;\n });\n\n protected readonly fieldPadding = computed(() => {\n const left = this.leadingIcon() ? 'pl-10' : 'pl-3.5';\n const right =\n this.trailingIcon() || this.clearable() ? 'pr-10' : 'pr-3.5';\n return `${left} ${right}`;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n\n if (this.onBrand()) {\n parts.push('bg-white/10 text-white');\n parts.push(\n this.error()\n ? 'border-danger focus-within:ring-2 focus-within:ring-danger/30'\n : 'border-white/15 focus-within:border-white/40 focus-within:ring-2 focus-within:ring-white/20',\n );\n } else {\n parts.push('bg-white text-ink');\n parts.push(\n this.error()\n ? 'border-danger focus-within:border-danger focus-within:ring-2 focus-within:ring-danger/25'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n }\n return parts.join(' ');\n });\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).value;\n this.value.set(next);\n this.onChange(next);\n }\n\n protected clear(): void {\n this.value.set('');\n this.onChange('');\n this.onTouched();\n }\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n input,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nexport type SdsTextareaSize = 'sm' | 'md' | 'lg';\nexport type SdsTextareaResize = 'none' | 'vertical' | 'both';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsTextareaSize, string> = {\n sm: 'text-sm px-3 py-2',\n md: 'text-sm px-3.5 py-2.5',\n lg: 'text-base px-4 py-3',\n};\n\n/**\n * Multi-line text field with label, hint/error, character counter and optional\n * auto-resize. Implements ControlValueAccessor — use with reactive forms or\n * [(ngModel)].\n */\n@Component({\n selector: 'sds-textarea',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsTextarea),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label [for]=\"fieldId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <textarea\n #field\n [id]=\"fieldId\"\n [value]=\"value()\"\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n [attr.maxlength]=\"maxLength() || null\"\n [readonly]=\"readonly() || null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [style.resize]=\"autoResize() ? 'none' : resize()\"\n [class]=\"fieldClasses()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n ></textarea>\n\n @if (hasCounter()) {\n <div class=\"mt-1.5 flex items-start gap-2 text-xs\">\n @if (error()) {\n <p [id]=\"fieldId + '-err'\" class=\"flex-1 font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"flex-1 text-ink-faint\">\n {{ hint() }}\n </p>\n } @else {\n <span class=\"flex-1\"></span>\n }\n <span\n [id]=\"fieldId + '-count'\"\n aria-live=\"polite\"\n [attr.aria-label]=\"countLabel()\"\n class=\"shrink-0 tabular-nums text-ink-faint\"\n >\n {{ count() }}{{ maxLength() ? ' / ' + maxLength() : '' }}\n </span>\n </div>\n } @else if (error()) {\n <p [id]=\"fieldId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">\n {{ hint() }}\n </p>\n }\n `,\n})\nexport class SdsTextarea implements ControlValueAccessor {\n readonly fieldId = `sds-textarea-${nextId++}`;\n\n private readonly field =\n viewChild<ElementRef<HTMLTextAreaElement>>('field');\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsTextareaSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n /** Minimum visible rows. */\n readonly rows = input(3, { transform: numberAttribute });\n /** Grow the field to fit its content as the user types. */\n readonly autoResize = input(false, { transform: booleanAttribute });\n /** Hard character cap; 0 means no limit. */\n readonly maxLength = input(0, { transform: numberAttribute });\n /** Show a character counter row. */\n readonly showCount = input(false, { transform: booleanAttribute });\n readonly resize = input<SdsTextareaResize>('vertical');\n\n /** Current value (driven by CVA + user input). */\n protected readonly value = signal('');\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n protected readonly count = computed(() => this.value().length);\n\n protected readonly hasCounter = computed(\n () => this.showCount() || this.maxLength() > 0,\n );\n\n /** Spoken description of the counter for assistive tech. */\n protected readonly countLabel = computed(() =>\n this.maxLength()\n ? `${this.count()} sur ${this.maxLength()} caractères utilisés`\n : `${this.count()} caractère(s)`,\n );\n\n protected readonly describedBy = computed(() => {\n const ids: string[] = [];\n if (this.error()) ids.push(`${this.fieldId}-err`);\n else if (this.hint()) ids.push(`${this.fieldId}-hint`);\n if (this.hasCounter()) ids.push(`${this.fieldId}-count`);\n return ids.length ? ids.join(' ') : null;\n });\n\n protected readonly fieldClasses = computed(() => {\n const parts = [\n 'block w-full rounded-control border bg-white text-ink outline-none transition-colors placeholder:text-ink-faint',\n SIZES[this.size()],\n ];\n\n if (this.autoResize()) parts.push('overflow-hidden');\n\n parts.push(\n this.error()\n ? 'border-danger focus:border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-border focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n\n return parts.join(' ');\n });\n\n constructor() {\n // Drive auto-resize reactively from the value signal. This runs once after\n // the initial render and again whenever the value changes (user input or\n // programmatic writeValue), without accumulating one-shot render hooks.\n afterRenderEffect(() => {\n this.value();\n if (this.autoResize()) this.resizeToContent();\n });\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n // Auto-resize is handled reactively by the afterRenderEffect in the\n // constructor, which re-runs whenever this signal changes.\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLTextAreaElement).value;\n this.value.set(next);\n this.onChange(next);\n if (this.autoResize()) this.resizeToContent();\n }\n\n private resizeToContent(): void {\n const el = this.field()?.nativeElement;\n if (!el) return;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n isDevMode,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\n\nexport type SdsToggleSwitchSize = 'sm' | 'md' | 'lg';\n\nlet nextId = 0;\n\ninterface ToggleSizing {\n /** Track width/height. */\n track: string;\n /** Knob width/height. */\n knob: string;\n /** Knob translate distance when checked. */\n on: string;\n /** Icon size in pixels. */\n icon: number;\n}\n\nconst SIZES: Record<SdsToggleSwitchSize, ToggleSizing> = {\n sm: { track: 'h-5 w-9', knob: 'h-4 w-4', on: 'translate-x-4', icon: 11 },\n md: { track: 'h-6 w-11', knob: 'h-5 w-5', on: 'translate-x-5', icon: 13 },\n lg: { track: 'h-7 w-[3.4rem]', knob: 'h-6 w-6', on: 'translate-x-7', icon: 15 },\n};\n\n/**\n * On/off switch styled as a sliding toggle. Implements ControlValueAccessor —\n * use with reactive forms or [(ngModel)]. Supports an optional visible label,\n * custom `trueValue`/`falseValue`, and optional knob icons for the on/off\n * states.\n */\n@Component({\n selector: 'sds-toggle-switch',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsToggleSwitch),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n <div class=\"flex items-center gap-3\">\n <button\n type=\"button\"\n role=\"switch\"\n [id]=\"fieldId\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-label]=\"!label() ? (ariaLabel() || null) : null\"\n [attr.aria-labelledby]=\"label() ? fieldId + '-label' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n class=\"relative inline-flex shrink-0 cursor-pointer items-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60\"\n [class]=\"trackClasses()\"\n (click)=\"toggle()\"\n (keydown.space)=\"onSpace($event)\"\n >\n <span\n class=\"pointer-events-none inline-flex items-center justify-center rounded-full bg-white shadow-sm transition-transform\"\n [class]=\"knobClasses()\"\n >\n @if (checked() && onIcon()) {\n <sds-icon\n [name]=\"onIcon()!\"\n [size]=\"sizing().icon\"\n class=\"text-brand-600\"\n />\n } @else if (!checked() && offIcon()) {\n <sds-icon\n [name]=\"offIcon()!\"\n [size]=\"sizing().icon\"\n class=\"text-ink-faint\"\n />\n }\n </span>\n </button>\n\n @if (label()) {\n <span\n [id]=\"fieldId + '-label'\"\n class=\"select-none text-sm font-medium text-ink\"\n [class.cursor-pointer]=\"!isDisabled()\"\n [class.cursor-not-allowed]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n {{ label() }}\n </span>\n }\n </div>\n\n @if (error()) {\n <p [id]=\"fieldId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">\n {{ hint() }}\n </p>\n }\n `,\n})\nexport class SdsToggleSwitch implements ControlValueAccessor {\n readonly fieldId = `sds-toggle-switch-${nextId++}`;\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly size = input<SdsToggleSwitchSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n /** Value emitted/stored when the switch is on. */\n readonly trueValue = input<unknown>(true);\n /** Value emitted/stored when the switch is off. */\n readonly falseValue = input<unknown>(false);\n /** Icon shown on the knob when checked. */\n readonly onIcon = input<SdsIconName | null>(null);\n /** Icon shown on the knob when unchecked. */\n readonly offIcon = input<SdsIconName | null>(null);\n readonly hint = input<string>('');\n readonly error = input<string>('');\n\n /**\n * Current value (driven by CVA). Initialized to a stable literal off-state\n * rather than reading falseValue() in the field initializer — a signal input\n * read here always returns its declared default, so capturing it would ignore\n * a custom [falseValue] and is non-reactive. The off-state is resolved live\n * against trueValue() in checked() and against falseValue() in toggle().\n */\n protected readonly value = signal<unknown>(false);\n private readonly cvaDisabled = signal(false);\n\n protected readonly checked = computed(\n () => this.value() === this.trueValue(),\n );\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n protected readonly sizing = computed(() => SIZES[this.size()]);\n\n protected readonly describedBy = computed(() => {\n if (this.error()) return `${this.fieldId}-err`;\n if (this.hint()) return `${this.fieldId}-hint`;\n return null;\n });\n\n protected readonly trackClasses = computed(() => {\n const parts = [this.sizing().track];\n parts.push(this.checked() ? 'bg-brand-600' : 'bg-black/15');\n return parts.join(' ');\n });\n\n protected readonly knobClasses = computed(() => {\n const parts = [this.sizing().knob];\n parts.push(this.checked() ? this.sizing().on : 'translate-x-0.5');\n return parts.join(' ');\n });\n\n constructor() {\n // Dev-only guard: a toggle is effectively icon-only (no intrinsic text), so\n // without a visible [label] or an explicit [ariaLabel] the switch ships with\n // no accessible name. Mirrors the sds-button icon-only guard.\n if (isDevMode()) {\n effect(() => {\n if (!this.label() && !this.ariaLabel()) {\n console.warn(\n 'sds-toggle-switch: provide [label] or [ariaLabel] for an accessible name.',\n );\n }\n });\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: unknown) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n // A null/undefined write (initial bind with no model, or reset()) means the\n // control is unset — resolve it to the configured off value so a custom\n // [falseValue] is honored and checked() renders off consistently.\n this.value.set(value ?? this.falseValue());\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.setValue(this.checked() ? this.falseValue() : this.trueValue());\n }\n\n protected onSpace(event: Event): void {\n event.preventDefault();\n this.toggle();\n }\n\n private setValue(next: unknown): void {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\n\nexport type SdsCheckboxSize = 'sm' | 'md';\n\nlet nextId = 0;\n\n/**\n * Boolean checkbox. Implements ControlValueAccessor — use with reactive forms\n * or `[(ngModel)]`. Renders a styled box (brand-filled with a check when on)\n * and an optional inline label.\n *\n * @example\n * <sds-checkbox label=\"Fusion automatique\" [(ngModel)]=\"autoMerge\" />\n */\n@Component({\n selector: 'sds-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsCheckbox),\n multi: true,\n },\n ],\n host: { class: 'inline-flex' },\n template: `\n <label\n class=\"inline-flex select-none items-center gap-2\"\n [class]=\"isDisabled() ? 'cursor-not-allowed opacity-60' : 'cursor-pointer'\"\n >\n <span\n class=\"relative inline-flex shrink-0 items-center justify-center rounded-control border transition-colors\"\n [class]=\"boxClasses()\"\n >\n <input\n type=\"checkbox\"\n class=\"absolute inset-0 m-0 cursor-[inherit] opacity-0\"\n [id]=\"id\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n (change)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n @if (checked()) {\n <sds-icon name=\"check\" [size]=\"iconSize()\" [strokeWidth]=\"3\" />\n }\n </span>\n @if (label()) {\n <span class=\"text-sm text-ink\">{{ label() }}</span>\n }\n </label>\n `,\n})\nexport class SdsCheckbox implements ControlValueAccessor {\n readonly id = `sds-checkbox-${nextId++}`;\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly size = input<SdsCheckboxSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly checked = signal(false);\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly iconSize = computed(() => (this.size() === 'sm' ? 11 : 13));\n\n protected readonly boxClasses = computed(() => {\n const size = this.size() === 'sm' ? 'h-4 w-4' : 'h-5 w-5';\n const state = this.checked()\n ? 'border-brand-600 bg-brand-600 text-white'\n : 'border-border bg-white text-transparent';\n const focus =\n 'focus-within:ring-2 focus-within:ring-brand-500/30 focus-within:border-brand-500';\n return `${size} ${state} ${focus}`;\n });\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onChange(next);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\n\nexport type SdsAvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst STATUS_COLOR: Record<SdsAvatarStatus, string> = {\n online: 'bg-success',\n offline: 'bg-ink-faint',\n busy: 'bg-danger',\n away: 'bg-warning',\n};\n\n/**\n * Circular avatar showing an image or initials, with an optional status dot.\n */\n@Component({\n selector: 'sds-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'inline-block shrink-0 align-middle' },\n template: `\n <div\n class=\"relative grid place-items-center overflow-hidden rounded-full font-semibold text-white ring-2 ring-white/20\"\n [class]=\"bgClass()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n [style.fontSize.px]=\"size() * 0.4\"\n >\n @if (src()) {\n <img [src]=\"src()\" [alt]=\"name()\" class=\"h-full w-full object-cover\" />\n } @else {\n <span>{{ resolvedInitials() }}</span>\n }\n\n @if (status()) {\n <span\n class=\"absolute bottom-0 right-0 rounded-full ring-2 ring-white\"\n [class]=\"statusColor()\"\n [style.width.px]=\"dotSize()\"\n [style.height.px]=\"dotSize()\"\n ></span>\n }\n </div>\n `,\n})\nexport class SdsAvatar {\n readonly name = input<string>('');\n readonly initials = input<string>('');\n readonly src = input<string | null>(null);\n readonly size = input<number>(36);\n readonly status = input<SdsAvatarStatus | null>(null);\n /** Tailwind bg utility for the initials background. */\n readonly bgClass = input<string>('bg-brand-400');\n\n protected readonly dotSize = computed(() =>\n Math.max(8, Math.round(this.size() * 0.28)),\n );\n\n protected readonly statusColor = computed(() =>\n this.status() ? STATUS_COLOR[this.status()!] : '',\n );\n\n protected readonly resolvedInitials = computed(() => {\n if (this.initials()) return this.initials().slice(0, 2).toUpperCase();\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\n\nexport type SdsBadgeVariant =\n | 'neutral'\n | 'brand'\n | 'info'\n | 'success'\n | 'warning'\n | 'danger';\nexport type SdsBadgeSize = 'sm' | 'md';\n\nconst VARIANTS: Record<SdsBadgeVariant, string> = {\n neutral: 'bg-muted text-ink-soft border-border',\n brand: 'bg-brand-50 text-brand-700 border-brand-100',\n info: 'bg-accent-blue-soft text-accent-blue border-transparent',\n success: 'bg-accent-green-soft text-accent-green border-transparent',\n warning: 'bg-accent-amber-soft text-accent-amber border-transparent',\n danger: 'bg-accent-red-soft text-accent-red border-transparent',\n};\n\nconst DOT: Record<SdsBadgeVariant, string> = {\n neutral: 'bg-ink-faint',\n brand: 'bg-brand-500',\n info: 'bg-accent-blue',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\n/**\n * Small status/label pill. Used e.g. for the \"TEST V.1.0.0\" version chip.\n */\n@Component({\n selector: 'sds-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'inline-flex' },\n template: `\n <span\n class=\"inline-flex items-center gap-1.5 rounded-full border font-semibold uppercase tracking-wide\"\n [class]=\"classes()\"\n >\n @if (dot()) {\n <span class=\"h-1.5 w-1.5 rounded-full\" [class]=\"dotClass()\"></span>\n }\n <ng-content />\n </span>\n `,\n})\nexport class SdsBadge {\n readonly variant = input<SdsBadgeVariant>('neutral');\n readonly size = input<SdsBadgeSize>('md');\n readonly dot = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() => {\n const size =\n this.size() === 'sm'\n ? 'px-2 py-0.5 text-[10px]'\n : 'px-2.5 py-1 text-[11px]';\n return `${VARIANTS[this.variant()]} ${size}`;\n });\n\n protected readonly dotClass = computed(() => DOT[this.variant()]);\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\n\nexport type SdsCardVariant = 'elevated' | 'outlined' | 'subtle';\n\nconst VARIANTS: Record<SdsCardVariant, string> = {\n elevated: 'bg-surface border border-border shadow-sm',\n outlined: 'bg-surface border border-border',\n subtle: 'bg-muted border border-border',\n};\n\n/**\n * Generic surface container. Set [interactive]=\"true\" for hover affordance\n * (used by the dashboard action cards).\n */\n@Component({\n selector: 'sds-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClass()' },\n template: `<ng-content />`,\n})\nexport class SdsCard {\n readonly variant = input<SdsCardVariant>('elevated');\n /** Inner padding utility (override with e.g. \"p-4\"). */\n readonly padding = input<string>('p-5');\n readonly interactive = input(false, { transform: booleanAttribute });\n\n protected readonly hostClass = computed(() => {\n const parts = ['block rounded-card', VARIANTS[this.variant()], this.padding()];\n if (this.interactive()) {\n parts.push(\n 'cursor-pointer transition-all duration-150 hover:border-brand-300 hover:shadow-md',\n );\n }\n return parts.join(' ');\n });\n}\n","/** Small, dependency-free date helpers (day-granularity, local time). */\n\nexport function startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\nexport function addDays(d: Date, n: number): Date {\n const r = new Date(d);\n r.setDate(r.getDate() + n);\n return r;\n}\n\nexport function addMonths(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\n}\n\n/** Add `n` months, keeping the day-of-month but clamping to the target month's length. */\nexport function addMonthsKeepDay(d: Date, n: number): Date {\n const t = new Date(d.getFullYear(), d.getMonth() + n, 1);\n const lastDay = new Date(t.getFullYear(), t.getMonth() + 1, 0).getDate();\n t.setDate(Math.min(d.getDate(), lastDay));\n return t;\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n return (\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** True when `d` falls outside the inclusive [min, max] day range. */\nexport function isOutOfRange(d: Date, min: Date | null, max: Date | null): boolean {\n const day = startOfDay(d).getTime();\n if (min && day < startOfDay(min).getTime()) return true;\n if (max && day > startOfDay(max).getTime()) return true;\n return false;\n}\n\nexport function isoDay(d: Date): string {\n const p = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;\n}\n\n/** Format a date as dd/MM/yyyy (default display format). */\nexport function formatDdMmYyyy(d: Date): string {\n const p = (n: number) => String(n).padStart(2, '0');\n return `${p(d.getDate())}/${p(d.getMonth() + 1)}/${d.getFullYear()}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport {\n addDays,\n addMonths,\n addMonthsKeepDay,\n isOutOfRange,\n isSameDay,\n isoDay,\n startOfDay,\n startOfMonth,\n} from './date-utils';\n\ntype CalView = 'day' | 'month' | 'year';\n\ninterface DayCell {\n date: Date;\n day: number;\n otherMonth: boolean;\n today: boolean;\n selected: boolean;\n disabled: boolean;\n focused: boolean;\n}\n\n/**\n * Inline month calendar with day → month → year drill-down navigation,\n * min/max bounds and keyboard support. Used standalone (inline) or inside\n * <sds-date-picker>.\n */\n@Component({\n selector: 'sds-calendar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <div\n class=\"w-[20rem] select-none rounded-card border border-border bg-surface p-3 shadow-lg\"\n role=\"group\"\n aria-label=\"Calendrier\"\n >\n <!-- Header -->\n <div class=\"mb-2 flex items-center justify-between\">\n <button type=\"button\" [class]=\"navBtn\" aria-label=\"Précédent\" (click)=\"prev()\">\n <sds-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n\n <div class=\"flex items-center gap-1 text-sm font-semibold text-ink\">\n @switch (view()) {\n @case ('day') {\n <button type=\"button\" [class]=\"titleBtn\" (click)=\"view.set('month')\">\n {{ monthLong() }}\n </button>\n <button type=\"button\" [class]=\"titleBtn\" (click)=\"view.set('year')\">\n {{ yearLabel() }}\n </button>\n }\n @case ('month') {\n <button type=\"button\" [class]=\"titleBtn\" (click)=\"view.set('year')\">\n {{ yearLabel() }}\n </button>\n }\n @case ('year') {\n <span class=\"px-1\">{{ decadeStart() }} – {{ decadeStart() + 11 }}</span>\n }\n }\n </div>\n\n <button type=\"button\" [class]=\"navBtn\" aria-label=\"Suivant\" (click)=\"next()\">\n <sds-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </div>\n\n <!-- Day view -->\n @if (view() === 'day') {\n <table class=\"w-full border-collapse\" role=\"grid\">\n <thead>\n <tr>\n @for (wd of weekdayLabels(); track $index) {\n <th scope=\"col\" class=\"pb-1 text-[11px] font-medium uppercase text-ink-faint\">\n {{ wd }}\n </th>\n }\n </tr>\n </thead>\n <tbody (keydown)=\"onGridKeydown($event)\">\n @for (week of weeks(); track $index) {\n <tr>\n @for (cell of week; track cell.date.getTime()) {\n <td class=\"p-0.5 text-center\">\n <button\n type=\"button\"\n [attr.data-date]=\"iso(cell.date)\"\n [tabindex]=\"cell.focused ? 0 : -1\"\n [disabled]=\"cell.disabled\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n [attr.aria-label]=\"fullLabel(cell.date)\"\n [class]=\"dayClass(cell)\"\n (click)=\"selectDay(cell.date)\"\n >\n {{ cell.day }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Month view -->\n @if (view() === 'month') {\n <div class=\"grid grid-cols-3 gap-1.5\">\n @for (m of monthsGrid(); track m.month) {\n <button\n type=\"button\"\n [disabled]=\"m.disabled\"\n [class]=\"cellClass(m.selected, m.current, m.disabled)\"\n (click)=\"selectMonth(m.month)\"\n >\n {{ m.label }}\n </button>\n }\n </div>\n }\n\n <!-- Year view -->\n @if (view() === 'year') {\n <div class=\"grid grid-cols-3 gap-1.5\">\n @for (y of yearsGrid(); track y.year) {\n <button\n type=\"button\"\n [disabled]=\"y.disabled\"\n [class]=\"cellClass(y.selected, y.current, y.disabled)\"\n (click)=\"selectYear(y.year)\"\n >\n {{ y.year }}\n </button>\n }\n </div>\n }\n\n <!-- Actions -->\n @if (showActions()) {\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\n <button\n type=\"button\"\n [class]=\"actionBtn\"\n [disabled]=\"todayDisabled()\"\n (click)=\"goToday()\"\n >\n Aujourd'hui\n </button>\n <button type=\"button\" [class]=\"actionBtn\" (click)=\"clear()\">Effacer</button>\n </div>\n }\n </div>\n `,\n})\nexport class SdsCalendar {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly value = model<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n /** 0 = Sunday, 1 = Monday (default, European). */\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly locale = input<string>('fr-FR');\n readonly showActions = input<boolean>(true);\n\n /** Emitted when a concrete date is picked (day click or \"Aujourd'hui\"). */\n readonly dateSelect = output<Date>();\n\n protected readonly view = signal<CalView>('day');\n protected readonly viewDate = signal<Date>(startOfMonth(new Date()));\n protected readonly focusedDate = signal<Date>(startOfDay(new Date()));\n\n constructor() {\n // Keep the displayed month in sync with the value (e.g. when a form writes\n // a value, including while the panel is open). Plain navigation does not\n // change the value, so this does not fight the user.\n effect(() => {\n const v = this.value();\n if (v) this.viewDate.set(startOfMonth(v));\n });\n }\n\n /** Today falls outside [min, max] — used to disable the \"Today\" action. */\n protected readonly todayDisabled = computed(() =>\n isOutOfRange(new Date(), this.min(), this.max()),\n );\n\n // --- styling helpers ---\n protected readonly navBtn =\n 'inline-flex h-8 w-8 items-center justify-center rounded-control text-ink-soft hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500';\n protected readonly titleBtn =\n 'rounded-control px-2 py-1 capitalize hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500';\n protected readonly actionBtn =\n 'rounded-control px-2 py-1 text-xs font-medium text-brand-700 hover:bg-brand-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40';\n\n // --- labels ---\n protected readonly monthLong = computed(() =>\n new Intl.DateTimeFormat(this.locale(), { month: 'long' }).format(this.viewDate()),\n );\n protected readonly yearLabel = computed(() => this.viewDate().getFullYear());\n protected readonly decadeStart = computed(() => {\n const y = this.viewDate().getFullYear();\n return y - (y % 10);\n });\n\n protected readonly weekdayLabels = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n const sunday = new Date(2023, 0, 1); // a known Sunday\n return Array.from({ length: 7 }, (_, i) =>\n fmt.format(addDays(sunday, (this.firstDayOfWeek() + i) % 7)),\n );\n });\n\n protected readonly weeks = computed<DayCell[][]>(() => {\n const vd = this.viewDate();\n const first = startOfMonth(vd);\n const offset = (first.getDay() - this.firstDayOfWeek() + 7) % 7;\n const start = addDays(first, -offset);\n const today = startOfDay(new Date());\n const val = this.value();\n const min = this.min();\n const max = this.max();\n const focused = this.focusedDate();\n\n const out: DayCell[][] = [];\n let cur = start;\n for (let w = 0; w < 6; w++) {\n const row: DayCell[] = [];\n for (let i = 0; i < 7; i++) {\n row.push({\n date: cur,\n day: cur.getDate(),\n otherMonth: cur.getMonth() !== vd.getMonth(),\n today: isSameDay(cur, today),\n selected: isSameDay(cur, val),\n disabled: isOutOfRange(cur, min, max),\n focused: isSameDay(cur, focused),\n });\n cur = addDays(cur, 1);\n }\n out.push(row);\n }\n return out;\n });\n\n protected readonly monthsGrid = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n const y = this.viewDate().getFullYear();\n const val = this.value();\n const today = new Date();\n const min = this.min();\n const max = this.max();\n return Array.from({ length: 12 }, (_, m) => ({\n month: m,\n label: fmt.format(new Date(y, m, 1)),\n selected: !!val && val.getFullYear() === y && val.getMonth() === m,\n current: today.getFullYear() === y && today.getMonth() === m,\n disabled:\n (!!max && new Date(y, m, 1) > startOfMonth(max)) ||\n (!!min && new Date(y, m + 1, 0) < startOfDay(min)),\n }));\n });\n\n protected readonly yearsGrid = computed(() => {\n const start = this.decadeStart();\n const val = this.value();\n const thisYear = new Date().getFullYear();\n const min = this.min();\n const max = this.max();\n return Array.from({ length: 12 }, (_, i) => {\n const year = start + i;\n return {\n year,\n selected: !!val && val.getFullYear() === year,\n current: thisYear === year,\n disabled:\n (!!max && year > max.getFullYear()) || (!!min && year < min.getFullYear()),\n };\n });\n });\n\n // --- navigation ---\n protected prev(): void {\n const v = this.view();\n if (v === 'day') this.viewDate.set(addMonths(this.viewDate(), -1));\n else if (v === 'month') this.viewDate.set(new Date(this.viewDate().getFullYear() - 1, 0, 1));\n else this.viewDate.set(new Date(this.viewDate().getFullYear() - 10, 0, 1));\n }\n protected next(): void {\n const v = this.view();\n if (v === 'day') this.viewDate.set(addMonths(this.viewDate(), 1));\n else if (v === 'month') this.viewDate.set(new Date(this.viewDate().getFullYear() + 1, 0, 1));\n else this.viewDate.set(new Date(this.viewDate().getFullYear() + 10, 0, 1));\n }\n\n protected selectDay(d: Date): void {\n if (isOutOfRange(d, this.min(), this.max())) return;\n const day = startOfDay(d);\n this.value.set(day);\n this.viewDate.set(startOfMonth(day));\n this.focusedDate.set(day);\n this.dateSelect.emit(day);\n }\n protected selectMonth(m: number): void {\n this.viewDate.set(new Date(this.viewDate().getFullYear(), m, 1));\n this.view.set('day');\n }\n protected selectYear(y: number): void {\n this.viewDate.set(new Date(y, this.viewDate().getMonth(), 1));\n this.view.set('month');\n }\n\n protected goToday(): void {\n this.view.set('day');\n this.selectDay(new Date());\n }\n protected clear(): void {\n this.value.set(null);\n }\n\n // --- keyboard (day grid) ---\n protected onGridKeydown(e: KeyboardEvent): void {\n let f = this.focusedDate();\n switch (e.key) {\n case 'ArrowLeft': f = addDays(f, -1); break;\n case 'ArrowRight': f = addDays(f, 1); break;\n case 'ArrowUp': f = addDays(f, -7); break;\n case 'ArrowDown': f = addDays(f, 7); break;\n case 'Home': f = addDays(f, -((f.getDay() - this.firstDayOfWeek() + 7) % 7)); break;\n case 'End': f = addDays(f, 6 - ((f.getDay() - this.firstDayOfWeek() + 7) % 7)); break;\n case 'PageUp': f = addMonthsKeepDay(f, -1); break;\n case 'PageDown': f = addMonthsKeepDay(f, 1); break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.selectDay(f);\n return;\n default:\n return;\n }\n e.preventDefault();\n if (\n f.getMonth() !== this.viewDate().getMonth() ||\n f.getFullYear() !== this.viewDate().getFullYear()\n ) {\n this.viewDate.set(startOfMonth(f));\n }\n this.focusedDate.set(f);\n this.focusCell(f);\n }\n\n /** Move focus to the active day cell (called when the panel opens). */\n focusActiveCell(): void {\n const target = this.value() ?? new Date();\n this.view.set('day');\n this.viewDate.set(startOfMonth(target));\n this.focusedDate.set(startOfDay(target));\n this.focusCell(target);\n }\n\n private focusHandle?: ReturnType<typeof setTimeout>;\n private focusCell(d: Date): void {\n clearTimeout(this.focusHandle);\n this.focusHandle = setTimeout(() => {\n const el = this.host.nativeElement.querySelector<HTMLElement>(\n `[data-date=\"${isoDay(d)}\"]`,\n );\n el?.focus();\n });\n }\n\n // --- template helpers ---\n protected iso(d: Date): string {\n return isoDay(d);\n }\n protected fullLabel(d: Date): string {\n return new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(d);\n }\n\n protected dayClass(cell: DayCell): string {\n const base =\n 'inline-flex h-9 w-9 items-center justify-center rounded-full text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40';\n if (cell.selected) return `${base} bg-brand-600 font-semibold text-white hover:bg-brand-700`;\n let cls = `${base} hover:bg-brand-50`;\n if (cell.otherMonth) cls += ' text-ink-faint';\n else cls += ' text-ink';\n if (cell.today) cls += ' font-bold text-brand-600 ring-1 ring-inset ring-brand-300';\n return cls;\n }\n\n protected cellClass(selected: boolean, current: boolean, disabled: boolean): string {\n const base =\n 'h-10 rounded-control text-sm capitalize transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40';\n if (selected) return `${base} bg-brand-600 font-semibold text-white hover:bg-brand-700`;\n let cls = `${base} text-ink hover:bg-brand-50`;\n if (current) cls += ' font-semibold text-brand-600';\n return cls;\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsCalendar } from './sds-calendar';\nimport { formatDdMmYyyy } from './date-utils';\n\nexport type SdsDatePickerSize = 'sm' | 'md' | 'lg';\n\nconst SIZES: Record<SdsDatePickerSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\n/**\n * Date picker: a read-only field that opens a calendar overlay, or an inline\n * calendar. Implements ControlValueAccessor — use with reactive forms or\n * [(ngModel)]; the value is a `Date | null`.\n *\n * @example\n * <sds-date-picker label=\"Date de garde\" [(ngModel)]=\"date\" />\n */\n@Component({\n selector: 'sds-date-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, SdsCalendar],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsDatePicker), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n '(keydown.escape)': 'close(true)',\n },\n template: `\n @if (label()) {\n <label [for]=\"fieldId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n @if (inline()) {\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n (valueChange)=\"onCalendarValue($event)\"\n />\n } @else {\n <div class=\"relative\">\n <div\n #trigger\n class=\"relative flex items-center rounded-control border bg-white transition-colors\"\n [class]=\"wrapperClasses()\"\n (click)=\"toggle()\"\n >\n <input\n [id]=\"fieldId\"\n type=\"text\"\n readonly\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n class=\"w-full cursor-pointer bg-transparent pl-3.5 text-ink outline-none placeholder:text-ink-faint disabled:cursor-not-allowed\"\n [class.pr-20]=\"showClear()\"\n [class.pr-11]=\"!showClear()\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer la date\"\n class=\"absolute right-10 inline-flex h-6 w-6 items-center justify-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear($event)\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"open() ? 'Fermer le calendrier' : 'Ouvrir le calendrier'\"\n class=\"absolute right-2 inline-flex h-7 w-7 items-center justify-center rounded-control text-ink-soft hover:bg-muted\"\n (click)=\"toggle($event)\"\n >\n <sds-icon name=\"calendar\" [size]=\"18\" />\n </button>\n </div>\n\n @if (open()) {\n <!-- Relocated to document.body on open (appendTo body) to escape\n ancestor overflow/stacking; positioned via positionPanel(). -->\n <div\n class=\"fixed z-[1000]\"\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Sélection de date\"\n (keydown.escape)=\"close(true)\"\n >\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n (valueChange)=\"onCalendarValue($event)\"\n (dateSelect)=\"close(true)\"\n />\n </div>\n }\n </div>\n }\n\n @if (hint() && !error()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n @if (error()) {\n <p class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n }\n `,\n})\nexport class SdsDatePicker implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n protected readonly fieldId = `sds-date-${nextId++}`;\n\n readonly label = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly placeholder = input<string>('jj/mm/aaaa');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsDatePickerSize>('md');\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly locale = input<string>('fr-FR');\n readonly inline = input(false, { transform: booleanAttribute });\n readonly clearable = input(true, { transform: booleanAttribute });\n readonly showActions = input(true, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Custom display formatter (default dd/MM/yyyy). */\n readonly format = input<(d: Date) => string>(formatDdMmYyyy);\n\n protected readonly value = signal<Date | null>(null);\n protected readonly open = signal(false);\n private readonly cvaDisabled = signal(false);\n private readonly calendar = viewChild(SdsCalendar);\n private readonly trigger = viewChild<ElementRef<HTMLElement>>('trigger');\n /** The overlay panel, relocated to document.body while open. */\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly displayValue = computed(() => {\n const v = this.value();\n return v ? this.format()(v) : '';\n });\n /** Whether the clear button is shown (affects the field's right padding). */\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.error()\n ? 'border-danger focus-within:border-danger focus-within:ring-2 focus-within:ring-danger/25'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed pointer-events-none');\n else parts.push('cursor-pointer');\n return parts.join(' ');\n });\n\n protected toggle(event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.open.set(true);\n this.onTouched();\n // Run after the overlay is rendered, then relocate it to <body>.\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>('[role=\"dialog\"]');\n this.positionPanel(); // also relocates to document.body\n this.addReflowListeners();\n this.calendar()?.focusActiveCell();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove(); // pull the body-relocated node before destroying the view\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) {\n this.host.nativeElement.querySelector<HTMLInputElement>('input')?.focus();\n }\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected onCalendarValue(v: Date | null): void {\n this.setValue(v);\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n // --- body-appended overlay positioning ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n // capture=true so scrolling any ancestor scroll container repositions.\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const triggerEl = this.trigger()?.nativeElement;\n const panelEl = this.panelEl;\n if (!triggerEl || !panelEl) return;\n\n // appendTo body: relocate out of any clipping/stacking ancestor.\n if (panelEl.parentElement !== document.body) {\n document.body.appendChild(panelEl);\n }\n\n const r = triggerEl.getBoundingClientRect();\n const ph = panelEl.offsetHeight || 360;\n const pw = panelEl.offsetWidth || 296;\n const gap = 6;\n const margin = 8;\n\n // Below the field by default; flip above when there isn't room.\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n // Align to the field's left, but keep it within the viewport.\n let left = r.left;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n\n // Set directly (position: fixed → viewport coordinates) to avoid a flash.\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n this.panelEl?.remove();\n }\n\n private setValue(v: Date | null): void {\n this.value.set(v);\n this.onChange(v);\n this.onTouched();\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: Date | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: Date | string | number | null): void {\n if (value === null || value === undefined || value === '') {\n this.value.set(null);\n return;\n }\n const d = value instanceof Date ? value : new Date(value);\n this.value.set(isNaN(d.getTime()) ? null : d);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n\nlet nextId = 0;\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\n\nexport type SdsSelectSize = 'sm' | 'md' | 'lg';\n\ninterface NormOption {\n label: string;\n value: unknown;\n disabled: boolean;\n}\n\nconst SIZES: Record<SdsSelectSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\nlet nextId = 0;\n\n/**\n * Single-select dropdown. Options may be primitives or objects (configure via\n * [optionLabel]/[optionValue]/[optionDisabled]). The overlay is appended to\n * <body>. Supports filtering, clearing, and full keyboard navigation.\n * Implements ControlValueAccessor — use with reactive forms or [(ngModel)].\n *\n * For object options, set [optionValue] or [dataKey] so written values match by\n * key; otherwise selection matching falls back to reference equality (a written\n * copy of an option will not match).\n *\n * @example\n * <sds-select [options]=\"services\" optionLabel=\"name\" optionValue=\"id\"\n * placeholder=\"Choisir un service\" [(ngModel)]=\"serviceId\" filter clearable />\n */\n@Component({\n selector: 'sds-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsSelect), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n @if (label()) {\n <label [for]=\"selectId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div class=\"relative\">\n <div\n #trigger\n [id]=\"selectId\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-activedescendant]=\"open() ? activeDescId() : null\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n class=\"relative flex items-center rounded-control border bg-white transition-colors focus:outline-none\"\n [class]=\"wrapperClasses()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span\n class=\"flex-1 truncate pl-3.5\"\n [class]=\"selectedOption() ? 'text-ink' : 'text-ink-faint'\"\n >\n {{ selectedOption() ? selectedOption()!.label : placeholder() }}\n </span>\n\n @if (showClear()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer la sélection\"\n class=\"mr-1 inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear($event)\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n\n <span\n class=\"mr-3 ml-1 shrink-0 text-ink-soft transition-transform duration-150\"\n [class.rotate-180]=\"open()\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"18\" />\n </span>\n </div>\n\n @if (open()) {\n <!-- Appended to document.body on open (see positionPanel). -->\n <div data-sds-select-panel class=\"fixed z-[1000] overflow-hidden rounded-card border border-border bg-surface shadow-lg\">\n @if (filter()) {\n <div class=\"border-b border-border p-2\">\n <div class=\"relative flex items-center rounded-control border border-border focus-within:border-brand-500\">\n <sds-icon name=\"search\" [size]=\"16\" class=\"pointer-events-none absolute left-2.5 text-ink-faint\" />\n <input\n type=\"text\"\n role=\"combobox\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-activedescendant]=\"activeDescId()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterText()\"\n (input)=\"onFilter($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n aria-label=\"Rechercher\"\n class=\"h-9 w-full bg-transparent pl-8 pr-2 text-sm text-ink outline-none placeholder:text-ink-faint\"\n />\n </div>\n </div>\n }\n\n <ul [id]=\"listId\" role=\"listbox\" class=\"max-h-60 overflow-auto py-1\">\n @for (opt of filteredOptions(); track $index; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(opt.value)\"\n [attr.aria-disabled]=\"opt.disabled ? 'true' : null\"\n [attr.data-index]=\"i\"\n [class]=\"optionClass(i, opt)\"\n (click)=\"opt.disabled ? null : selectOption(opt)\"\n (mouseenter)=\"opt.disabled ? null : highlightedIndex.set(i)\"\n >\n <span class=\"truncate\">{{ opt.label }}</span>\n @if (isSelected(opt.value)) {\n <sds-icon name=\"check\" [size]=\"16\" class=\"shrink-0 text-brand-600\" />\n }\n </li>\n } @empty {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">{{ emptyMessage() }}</li>\n }\n </ul>\n </div>\n }\n </div>\n\n @if (hint() && !error()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n @if (error()) {\n <p class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n }\n `,\n})\nexport class SdsSelect implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n protected readonly selectId = `sds-select-${nextId++}`;\n protected readonly listId = `${this.selectId}-list`;\n\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<string>('label');\n readonly optionValue = input<string>('');\n readonly optionDisabled = input<string>('disabled');\n /** Key used to compare object values for selection equality. */\n readonly dataKey = input<string>('');\n readonly placeholder = input<string>('Sélectionner…');\n readonly label = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsSelectSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input<string>('Rechercher…');\n readonly emptyMessage = input<string>('Aucun résultat');\n\n protected readonly value = signal<unknown>(null);\n protected readonly open = signal(false);\n protected readonly filterText = signal('');\n protected readonly highlightedIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n\n private readonly trigger = viewChild<ElementRef<HTMLElement>>('trigger');\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly normalizedOptions = computed<NormOption[]>(() =>\n this.options().map((o) => this.norm(o)),\n );\n\n protected readonly filteredOptions = computed<NormOption[]>(() => {\n const f = this.filterText().trim().toLowerCase();\n const all = this.normalizedOptions();\n if (!this.filter() || !f) return all;\n return all.filter((o) => o.label.toLowerCase().includes(f));\n });\n\n protected readonly selectedOption = computed<NormOption | null>(\n () => this.normalizedOptions().find((o) => this.equals(o.value, this.value())) ?? null,\n );\n\n protected readonly showClear = computed(\n () => this.clearable() && this.value() != null && !this.isDisabled(),\n );\n\n protected readonly activeDescId = computed(() =>\n this.highlightedIndex() >= 0 ? this.optionId(this.highlightedIndex()) : null,\n );\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.error()\n ? 'border-danger focus:border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-border focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n parts.push(\n this.isDisabled()\n ? 'opacity-60 cursor-not-allowed pointer-events-none'\n : 'cursor-pointer',\n );\n return parts.join(' ');\n });\n\n // --- option normalization & equality ---\n private norm(raw: unknown): NormOption {\n if (raw !== null && typeof raw === 'object') {\n const o = raw as Record<string, unknown>;\n const labelKey = this.optionLabel();\n const label =\n labelKey && labelKey in o ? String(o[labelKey]) : String(o['label'] ?? raw);\n const value = this.optionValue() ? o[this.optionValue()] : raw;\n const disabled = this.optionDisabled() ? !!o[this.optionDisabled()] : !!o['disabled'];\n return { label, value, disabled };\n }\n return { label: String(raw), value: raw, disabled: false };\n }\n\n private equals(a: unknown, b: unknown): boolean {\n const k = this.dataKey();\n if (k && a && b && typeof a === 'object' && typeof b === 'object') {\n return (a as Record<string, unknown>)[k] === (b as Record<string, unknown>)[k];\n }\n return a === b;\n }\n\n protected isSelected(v: unknown): boolean {\n return this.value() != null && this.equals(v, this.value());\n }\n\n protected optionId(i: number): string {\n return `${this.selectId}-opt-${i}`;\n }\n\n protected optionClass(i: number, opt: NormOption): string {\n const base = 'flex cursor-pointer items-center justify-between gap-2 px-3 py-2 text-sm';\n if (opt.disabled) return `${base} cursor-not-allowed text-ink-faint opacity-60`;\n let cls = `${base} text-ink`;\n if (this.highlightedIndex() === i) cls += ' bg-brand-50';\n if (this.isSelected(opt.value)) cls += ' font-medium text-brand-700';\n return cls;\n }\n\n // --- open / close ---\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close(true) : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.filterText.set('');\n this.open.set(true);\n this.onTouched();\n this.initHighlight();\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>(\n '[data-sds-select-panel]',\n );\n this.positionPanel();\n this.addReflowListeners();\n if (this.filter()) {\n this.panelEl?.querySelector<HTMLInputElement>('input')?.focus();\n } else {\n this.trigger()?.nativeElement.focus();\n }\n this.scrollHighlightedIntoView();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove();\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) this.trigger()?.nativeElement.focus();\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected selectOption(opt: NormOption): void {\n this.setValue(opt.value);\n this.close(true);\n }\n\n protected onFilter(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n this.highlightFirst();\n setTimeout(() => this.positionPanel());\n }\n\n // --- keyboard ---\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.openPanel();\n }\n return;\n }\n if (this.handleNavKey(event)) return;\n // Type-ahead (no-filter mode keeps focus on the trigger).\n if (\n event.key.length === 1 &&\n event.key !== ' ' &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n this.typeAhead(event.key);\n }\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n this.handleNavKey(event);\n }\n\n private handleNavKey(event: KeyboardEvent): boolean {\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); this.move(1); return true;\n case 'ArrowUp': event.preventDefault(); this.move(-1); return true;\n case 'Home': event.preventDefault(); this.highlightFirst(); return true;\n case 'End': event.preventDefault(); this.highlightLast(); return true;\n case 'Enter': event.preventDefault(); this.selectHighlighted(); return true;\n case 'Escape': event.preventDefault(); this.close(true); return true;\n case 'Tab': this.close(false); return true;\n default: return false;\n }\n }\n\n private initHighlight(): void {\n const opts = this.filteredOptions();\n const sel = opts.findIndex((o) => !o.disabled && this.equals(o.value, this.value()));\n this.highlightedIndex.set(sel >= 0 ? sel : this.firstEnabled(opts));\n }\n\n private firstEnabled(opts: NormOption[]): number {\n return opts.findIndex((o) => !o.disabled);\n }\n\n private move(delta: number): void {\n const opts = this.filteredOptions();\n if (!opts.length) return;\n let i = this.highlightedIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n return;\n }\n }\n }\n\n private highlightFirst(): void {\n this.highlightedIndex.set(this.firstEnabled(this.filteredOptions()));\n this.scrollHighlightedIntoView();\n }\n\n private highlightLast(): void {\n const opts = this.filteredOptions();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n return;\n }\n }\n }\n\n private selectHighlighted(): void {\n const opt = this.filteredOptions()[this.highlightedIndex()];\n if (opt && !opt.disabled) this.selectOption(opt);\n }\n\n private typeBuffer = '';\n private typeTimer?: ReturnType<typeof setTimeout>;\n private typeAhead(char: string): void {\n clearTimeout(this.typeTimer);\n this.typeBuffer += char.toLowerCase();\n const opts = this.filteredOptions();\n const idx = opts.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(this.typeBuffer),\n );\n if (idx >= 0) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n this.typeTimer = setTimeout(() => (this.typeBuffer = ''), 600);\n }\n\n private scrollHighlightedIntoView(): void {\n setTimeout(() => {\n const el = this.panelEl?.querySelector<HTMLElement>(\n `[data-index=\"${this.highlightedIndex()}\"]`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n // --- body-appended overlay positioning (mirrors sds-date-picker) ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const triggerEl = this.trigger()?.nativeElement;\n const panelEl = this.panelEl;\n if (!triggerEl || !panelEl) return;\n if (panelEl.parentElement !== document.body) document.body.appendChild(panelEl);\n\n const r = triggerEl.getBoundingClientRect();\n panelEl.style.minWidth = `${Math.round(r.width)}px`;\n const ph = panelEl.offsetHeight || 240;\n const gap = 4;\n const margin = 8;\n\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n let left = r.left;\n const pw = panelEl.offsetWidth || r.width;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n clearTimeout(this.typeTimer);\n this.panelEl?.remove();\n }\n\n private setValue(v: unknown): void {\n this.value.set(v);\n this.onChange(v);\n this.onTouched();\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: unknown) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n if (isDisabled) this.close();\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n numberAttribute,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\n\nexport type SdsMultiSelectSize = 'sm' | 'md' | 'lg';\nexport type SdsMultiSelectDisplay = 'comma' | 'chip';\n\ninterface NormOption {\n label: string;\n value: unknown;\n disabled: boolean;\n}\n\nconst SIZES: Record<SdsMultiSelectSize, string> = {\n sm: 'min-h-9 text-sm',\n md: 'min-h-10 text-sm',\n lg: 'min-h-12 text-base',\n};\n\nlet nextId = 0;\n\n/**\n * Multi-select dropdown (value is an array). Options may be primitives or\n * objects (configure via [optionLabel]/[optionValue]/[optionDisabled]). The\n * overlay is appended to <body>. Supports a \"select all\" toggle, per-option\n * checkboxes, chip or comma display, filtering, clearing and keyboard nav.\n * Implements ControlValueAccessor — use with reactive forms or [(ngModel)].\n *\n * For object options, set [optionValue] or [dataKey] so written values match by\n * key; otherwise matching falls back to reference equality.\n *\n * @example\n * <sds-multi-select [options]=\"services\" optionLabel=\"name\" optionValue=\"code\"\n * display=\"chip\" filter [(ngModel)]=\"codes\" />\n */\n@Component({\n selector: 'sds-multi-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsMultiSelect), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n @if (label()) {\n <label [for]=\"selectId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div class=\"relative\">\n <div\n #trigger\n [id]=\"selectId\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-activedescendant]=\"open() && !filter() ? activeDescId() : null\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n class=\"relative flex items-center rounded-control border bg-white transition-colors focus:outline-none\"\n [class]=\"wrapperClasses()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (display() === 'chip' && selectedOptions().length) {\n <div class=\"flex flex-1 flex-wrap items-center gap-1 py-1 pl-2\">\n @for (opt of selectedOptions(); track $index) {\n <span class=\"inline-flex items-center gap-1 rounded bg-brand-50 py-0.5 pl-2 pr-1 text-xs font-medium text-brand-700\">\n {{ opt.label }}\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Retirer ' + opt.label\"\n class=\"inline-flex h-4 w-4 items-center justify-center rounded-full hover:bg-brand-100\"\n (click)=\"removeChip($event, opt)\"\n >\n <sds-icon name=\"x\" [size]=\"12\" />\n </button>\n </span>\n }\n </div>\n } @else {\n <span\n class=\"flex-1 truncate pl-3.5\"\n [class]=\"selectedOptions().length ? 'text-ink' : 'text-ink-faint'\"\n >\n {{ triggerLabel() }}\n </span>\n }\n\n @if (showClear()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Tout effacer\"\n class=\"mr-1 inline-flex h-6 w-6 shrink-0 items-center justify-center self-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear($event)\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n\n <span\n class=\"mr-3 ml-1 shrink-0 self-center text-ink-soft transition-transform duration-150\"\n [class.rotate-180]=\"open()\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"18\" />\n </span>\n </div>\n\n @if (open()) {\n <!-- Appended to document.body on open (see positionPanel). -->\n <div data-sds-select-panel class=\"fixed z-[1000] overflow-hidden rounded-card border border-border bg-surface shadow-lg\">\n @if (filter()) {\n <div class=\"border-b border-border p-2\">\n <div class=\"relative flex items-center rounded-control border border-border focus-within:border-brand-500\">\n <sds-icon name=\"search\" [size]=\"16\" class=\"pointer-events-none absolute left-2.5 text-ink-faint\" />\n <input\n type=\"text\"\n role=\"combobox\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-activedescendant]=\"activeDescId()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterText()\"\n (input)=\"onFilter($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n aria-label=\"Rechercher\"\n class=\"h-9 w-full bg-transparent pl-8 pr-2 text-sm text-ink outline-none placeholder:text-ink-faint\"\n />\n </div>\n </div>\n }\n\n @if (hasToggleAll()) {\n <button\n type=\"button\"\n role=\"checkbox\"\n [id]=\"toggleAllId\"\n [attr.data-index]=\"-1\"\n [attr.aria-checked]=\"allFilteredSelected() ? 'true' : (toggleAllIndeterminate() ? 'mixed' : 'false')\"\n class=\"flex w-full items-center gap-2.5 border-b border-border px-3 py-2 text-sm text-ink\"\n [class.bg-brand-50]=\"highlightedIndex() === -1\"\n (click)=\"toggleAll()\"\n (mouseenter)=\"highlightedIndex.set(-1)\"\n >\n <span class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border\" [class]=\"checkboxClass(allFilteredSelected(), toggleAllIndeterminate())\">\n @if (allFilteredSelected()) {\n <sds-icon name=\"check\" [size]=\"12\" />\n } @else if (toggleAllIndeterminate()) {\n <span class=\"h-0.5 w-2.5 rounded-full bg-white\"></span>\n }\n </span>\n Tout sélectionner\n </button>\n }\n\n <ul [id]=\"listId\" role=\"listbox\" aria-multiselectable=\"true\" class=\"max-h-60 overflow-auto py-1\">\n @for (opt of filteredOptions(); track $index; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(opt.value)\"\n [attr.aria-disabled]=\"opt.disabled ? 'true' : null\"\n [attr.data-index]=\"i\"\n [class]=\"optionClass(i, opt)\"\n (click)=\"opt.disabled ? null : toggleOption(opt)\"\n (mouseenter)=\"opt.disabled ? null : highlightedIndex.set(i)\"\n >\n <span class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border\" [class]=\"checkboxClass(isSelected(opt.value), false)\">\n @if (isSelected(opt.value)) {\n <sds-icon name=\"check\" [size]=\"12\" />\n }\n </span>\n <span class=\"truncate\">{{ opt.label }}</span>\n </li>\n } @empty {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">{{ emptyMessage() }}</li>\n }\n </ul>\n </div>\n }\n </div>\n\n @if (hint() && !error()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n @if (error()) {\n <p class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n }\n `,\n})\nexport class SdsMultiSelect implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n protected readonly selectId = `sds-multiselect-${nextId++}`;\n protected readonly listId = `${this.selectId}-list`;\n\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<string>('label');\n readonly optionValue = input<string>('');\n readonly optionDisabled = input<string>('disabled');\n readonly dataKey = input<string>('');\n readonly placeholder = input<string>('Sélectionner…');\n readonly label = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsMultiSelectSize>('md');\n readonly display = input<SdsMultiSelectDisplay>('comma');\n /** In comma mode, show a count label once more than this many are selected. */\n readonly maxSelectedLabels = input(3, { transform: numberAttribute });\n readonly selectedItemsLabel = input<string>('{0} éléments sélectionnés');\n readonly showToggleAll = input(true, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input<string>('Rechercher…');\n readonly emptyMessage = input<string>('Aucun résultat');\n\n protected readonly value = signal<unknown[]>([]);\n protected readonly open = signal(false);\n protected readonly filterText = signal('');\n protected readonly highlightedIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n\n private readonly trigger = viewChild<ElementRef<HTMLElement>>('trigger');\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly normalizedOptions = computed<NormOption[]>(() =>\n this.options().map((o) => this.norm(o)),\n );\n\n protected readonly filteredOptions = computed<NormOption[]>(() => {\n const f = this.filterText().trim().toLowerCase();\n const all = this.normalizedOptions();\n if (!this.filter() || !f) return all;\n return all.filter((o) => o.label.toLowerCase().includes(f));\n });\n\n protected readonly selectedOptions = computed<NormOption[]>(() =>\n this.normalizedOptions().filter((o) => this.isSelected(o.value)),\n );\n\n protected readonly showClear = computed(\n () => this.clearable() && this.value().length > 0 && !this.isDisabled(),\n );\n\n protected readonly triggerLabel = computed(() => {\n const sel = this.selectedOptions();\n const total = this.value().length;\n if (!total) return this.placeholder();\n const max = this.maxSelectedLabels();\n const limit = Number.isFinite(max) ? max : 3;\n if (total <= limit) {\n const labels = sel.map((o) => o.label).join(', ');\n // Some selected values may not resolve to a current option.\n return total > sel.length ? `${labels} +${total - sel.length}`.trim() : labels;\n }\n return this.selectedItemsLabel().replace('{0}', String(total));\n });\n\n private readonly filteredEnabled = computed(() =>\n this.filteredOptions().filter((o) => !o.disabled),\n );\n protected readonly allFilteredSelected = computed(() => {\n const e = this.filteredEnabled();\n return e.length > 0 && e.every((o) => this.isSelected(o.value));\n });\n protected readonly toggleAllIndeterminate = computed(\n () => !this.allFilteredSelected() && this.filteredEnabled().some((o) => this.isSelected(o.value)),\n );\n /** Show the select-all row only when there is at least one enabled option. */\n protected readonly hasToggleAll = computed(\n () => this.showToggleAll() && this.filteredEnabled().length > 0,\n );\n protected readonly toggleAllId = `${this.selectId}-all`;\n\n protected readonly activeDescId = computed(() => {\n const i = this.highlightedIndex();\n if (i === -1) return this.hasToggleAll() ? this.toggleAllId : null;\n return i >= 0 ? this.optionId(i) : null;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.error()\n ? 'border-danger focus:border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-border focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n parts.push(\n this.isDisabled()\n ? 'opacity-60 cursor-not-allowed pointer-events-none'\n : 'cursor-pointer',\n );\n return parts.join(' ');\n });\n\n // --- normalization & equality ---\n private norm(raw: unknown): NormOption {\n if (raw !== null && typeof raw === 'object') {\n const o = raw as Record<string, unknown>;\n const labelKey = this.optionLabel();\n const label =\n labelKey && labelKey in o ? String(o[labelKey]) : String(o['label'] ?? raw);\n const value = this.optionValue() ? o[this.optionValue()] : raw;\n const disabled = this.optionDisabled() ? !!o[this.optionDisabled()] : !!o['disabled'];\n return { label, value, disabled };\n }\n return { label: String(raw), value: raw, disabled: false };\n }\n\n private equals(a: unknown, b: unknown): boolean {\n const k = this.dataKey();\n if (k && a && b && typeof a === 'object' && typeof b === 'object') {\n return (a as Record<string, unknown>)[k] === (b as Record<string, unknown>)[k];\n }\n return a === b;\n }\n\n protected isSelected(v: unknown): boolean {\n return this.value().some((x) => this.equals(x, v));\n }\n\n protected optionId(i: number): string {\n return `${this.selectId}-opt-${i}`;\n }\n\n protected optionClass(i: number, opt: NormOption): string {\n const base = 'flex cursor-pointer items-center gap-2.5 px-3 py-2 text-sm';\n if (opt.disabled) return `${base} cursor-not-allowed text-ink-faint opacity-60`;\n let cls = `${base} text-ink`;\n if (this.highlightedIndex() === i) cls += ' bg-brand-50';\n if (this.isSelected(opt.value)) cls += ' font-medium';\n return cls;\n }\n\n protected checkboxClass(checked: boolean, indeterminate: boolean): string {\n return checked || indeterminate\n ? 'border-brand-600 bg-brand-600 text-white'\n : 'border-border bg-white';\n }\n\n // --- open / close ---\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close(true) : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.filterText.set('');\n this.open.set(true);\n this.onTouched();\n this.initHighlight();\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>('[data-sds-select-panel]');\n this.positionPanel();\n this.addReflowListeners();\n if (this.filter()) {\n this.panelEl?.querySelector<HTMLInputElement>('input')?.focus();\n } else {\n this.trigger()?.nativeElement.focus();\n }\n this.scrollHighlightedIntoView();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove();\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) this.trigger()?.nativeElement.focus();\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.setValue([]);\n }\n\n protected removeChip(event: Event, opt: NormOption): void {\n event.stopPropagation();\n this.toggleOption(opt);\n }\n\n protected toggleOption(opt: NormOption): void {\n const cur = this.value();\n const exists = cur.some((x) => this.equals(x, opt.value));\n const next = exists\n ? cur.filter((x) => !this.equals(x, opt.value))\n : [...cur, opt.value];\n this.setValue(next);\n }\n\n protected toggleAll(): void {\n const enabled = this.filteredEnabled();\n if (this.allFilteredSelected()) {\n this.setValue(\n this.value().filter((v) => !enabled.some((o) => this.equals(o.value, v))),\n );\n } else {\n const toAdd = enabled.filter((o) => !this.isSelected(o.value)).map((o) => o.value);\n this.setValue([...this.value(), ...toAdd]);\n }\n }\n\n protected onFilter(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n this.highlightFirst();\n setTimeout(() => this.positionPanel());\n }\n\n // --- keyboard ---\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.openPanel();\n } else if (event.key === 'Backspace' && this.selectedOptions().length) {\n event.preventDefault();\n const sel = this.selectedOptions();\n this.toggleOption(sel[sel.length - 1]);\n }\n return;\n }\n if (event.key === ' ') {\n event.preventDefault();\n this.toggleHighlighted();\n return;\n }\n if (this.handleNavKey(event)) return;\n if (\n event.key.length === 1 &&\n event.key !== ' ' &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n this.typeAhead(event.key);\n }\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n this.handleNavKey(event);\n }\n\n private handleNavKey(event: KeyboardEvent): boolean {\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); this.move(1); return true;\n case 'ArrowUp': event.preventDefault(); this.move(-1); return true;\n case 'Home': event.preventDefault(); this.highlightFirst(); return true;\n case 'End': event.preventDefault(); this.highlightLast(); return true;\n case 'Enter': event.preventDefault(); this.toggleHighlighted(); return true;\n case 'Escape': event.preventDefault(); this.close(true); return true;\n case 'Tab': this.close(false); return true;\n default: return false;\n }\n }\n\n private initHighlight(): void {\n this.highlightedIndex.set(this.firstEnabled(this.filteredOptions()));\n }\n\n private firstEnabled(opts: NormOption[]): number {\n return opts.findIndex((o) => !o.disabled);\n }\n\n private move(delta: number): void {\n // Navigable rows: the select-all sentinel (-1) followed by enabled options.\n const nav: number[] = [];\n if (this.hasToggleAll()) nav.push(-1);\n this.filteredOptions().forEach((o, i) => {\n if (!o.disabled) nav.push(i);\n });\n if (!nav.length) return;\n const cur = nav.indexOf(this.highlightedIndex());\n const next = cur === -1 ? (delta > 0 ? 0 : nav.length - 1) : (cur + delta + nav.length) % nav.length;\n this.highlightedIndex.set(nav[next]);\n this.scrollHighlightedIntoView();\n }\n\n private highlightFirst(): void {\n this.highlightedIndex.set(this.firstEnabled(this.filteredOptions()));\n this.scrollHighlightedIntoView();\n }\n\n private highlightLast(): void {\n const opts = this.filteredOptions();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n return;\n }\n }\n }\n\n private toggleHighlighted(): void {\n if (this.highlightedIndex() === -1) {\n if (this.hasToggleAll()) this.toggleAll();\n return;\n }\n const opt = this.filteredOptions()[this.highlightedIndex()];\n if (opt && !opt.disabled) this.toggleOption(opt);\n }\n\n private typeBuffer = '';\n private typeTimer?: ReturnType<typeof setTimeout>;\n private typeAhead(char: string): void {\n clearTimeout(this.typeTimer);\n this.typeBuffer += char.toLowerCase();\n const opts = this.filteredOptions();\n const idx = opts.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(this.typeBuffer),\n );\n if (idx >= 0) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n this.typeTimer = setTimeout(() => (this.typeBuffer = ''), 600);\n }\n\n private scrollHighlightedIntoView(): void {\n setTimeout(() => {\n const el = this.panelEl?.querySelector<HTMLElement>(\n `[data-index=\"${this.highlightedIndex()}\"]`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n // --- body-appended overlay positioning (mirrors sds-select) ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const triggerEl = this.trigger()?.nativeElement;\n const panelEl = this.panelEl;\n if (!triggerEl || !panelEl) return;\n if (panelEl.parentElement !== document.body) document.body.appendChild(panelEl);\n\n const r = triggerEl.getBoundingClientRect();\n panelEl.style.minWidth = `${Math.round(r.width)}px`;\n const ph = panelEl.offsetHeight || 240;\n const gap = 4;\n const margin = 8;\n\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n let left = r.left;\n const pw = panelEl.offsetWidth || r.width;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n clearTimeout(this.typeTimer);\n this.panelEl?.remove();\n }\n\n private setValue(v: unknown[]): void {\n this.value.set(v);\n this.onChange(v);\n this.onTouched();\n // Chip display can change the trigger height while the panel is open.\n if (this.open()) setTimeout(() => this.positionPanel());\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: unknown[]) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: unknown[] | null): void {\n this.value.set(Array.isArray(value) ? [...value] : []);\n }\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n if (isDisabled) this.close();\n }\n}\n","/**\n * Curated country dataset for <sds-phone-input>. Dependency-free: each entry\n * carries the dial code, the valid national-significant digit length(s) used\n * for validation, a best-effort display mask (# = a digit) and an example.\n *\n * `lengths` are the number of significant national digits, i.e. excluding the\n * dial code and any leading trunk \"0\". Add or override entries as needed.\n */\nexport interface SdsPhoneCountry {\n /** ISO 3166-1 alpha-2 code, e.g. 'BE'. */\n iso2: string;\n /** Localised display name. */\n name: string;\n /** International dial code without '+', e.g. '32'. */\n dialCode: string;\n /** Valid national-significant digit counts (excluding dial/trunk). */\n lengths: number[];\n /** Display grouping mask; '#' is a digit placeholder, other chars are literal. */\n format: string;\n /** Example national-significant number (digits only) for the placeholder. */\n example: string;\n}\n\nexport const SDS_PHONE_COUNTRIES: readonly SdsPhoneCountry[] = [\n { iso2: 'BE', name: 'Belgique', dialCode: '32', lengths: [9], format: '### ## ## ##', example: '470123456' },\n { iso2: 'FR', name: 'France', dialCode: '33', lengths: [9], format: '# ## ## ## ##', example: '612345678' },\n { iso2: 'LU', name: 'Luxembourg', dialCode: '352', lengths: [9, 8, 6], format: '### ### ###', example: '628123456' },\n { iso2: 'NL', name: 'Pays-Bas', dialCode: '31', lengths: [9], format: '# ## ## ## ##', example: '612345678' },\n { iso2: 'DE', name: 'Allemagne', dialCode: '49', lengths: [10, 11], format: '#### #######', example: '15123456789' },\n { iso2: 'GB', name: 'Royaume-Uni', dialCode: '44', lengths: [10], format: '#### ######', example: '7400123456' },\n { iso2: 'IE', name: 'Irlande', dialCode: '353', lengths: [9], format: '## ### ####', example: '850123456' },\n { iso2: 'CH', name: 'Suisse', dialCode: '41', lengths: [9], format: '## ### ## ##', example: '781234567' },\n { iso2: 'ES', name: 'Espagne', dialCode: '34', lengths: [9], format: '### ## ## ##', example: '612345678' },\n { iso2: 'IT', name: 'Italie', dialCode: '39', lengths: [9, 10], format: '### ### ####', example: '3123456789' },\n { iso2: 'PT', name: 'Portugal', dialCode: '351', lengths: [9], format: '### ### ###', example: '912345678' },\n { iso2: 'AT', name: 'Autriche', dialCode: '43', lengths: [10, 11], format: '### #######', example: '6641234567' },\n { iso2: 'DK', name: 'Danemark', dialCode: '45', lengths: [8], format: '## ## ## ##', example: '20123456' },\n { iso2: 'SE', name: 'Suède', dialCode: '46', lengths: [9], format: '## ### ## ##', example: '701234567' },\n { iso2: 'NO', name: 'Norvège', dialCode: '47', lengths: [8], format: '### ## ###', example: '40612345' },\n { iso2: 'PL', name: 'Pologne', dialCode: '48', lengths: [9], format: '### ### ###', example: '512345678' },\n { iso2: 'US', name: 'États-Unis', dialCode: '1', lengths: [10], format: '(###) ###-####', example: '2015550123' },\n { iso2: 'CA', name: 'Canada', dialCode: '1', lengths: [10], format: '(###) ###-####', example: '2042345678' },\n { iso2: 'MA', name: 'Maroc', dialCode: '212', lengths: [9], format: '### ## ## ##', example: '612345678' },\n { iso2: 'TR', name: 'Turquie', dialCode: '90', lengths: [10], format: '### ### ## ##', example: '5012345678' },\n];\n\n/** Reduce raw input to national-significant digits (drops non-digits & leading trunk zeros). */\nexport function sdsNormalizeSignificant(raw: string): string {\n return (raw ?? '').replace(/\\D/g, '').replace(/^0+/, '');\n}\n\n/**\n * Group `digits` for display using `mask` ('#' = digit). Digits beyond the mask\n * are appended grouped in pairs; an incomplete number stops at the last digit.\n */\nexport function sdsFormatNational(digits: string, mask: string): string {\n if (!digits) return '';\n if (!mask) return digits.replace(/(\\d{2})(?=\\d)/g, '$1 ');\n\n let out = '';\n let di = 0;\n for (const ch of mask) {\n if (di >= digits.length) break;\n if (ch === '#') out += digits[di++];\n else out += ch;\n }\n if (di < digits.length) {\n out += ' ' + digits.slice(di).replace(/(\\d{2})(?=\\d)/g, '$1 ');\n }\n return out.trim();\n}\n\n/** Find the country whose dial code is the longest prefix of an E.164 digit string. */\nexport function sdsMatchDialCode(\n e164Digits: string,\n countries: readonly SdsPhoneCountry[],\n): SdsPhoneCountry | null {\n let best: SdsPhoneCountry | null = null;\n for (const c of countries) {\n if (e164Digits.startsWith(c.dialCode)) {\n if (!best || c.dialCode.length > best.dialCode.length) best = c;\n }\n }\n return best;\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnDestroy,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport {\n SDS_PHONE_COUNTRIES,\n SdsPhoneCountry,\n sdsFormatNational,\n sdsMatchDialCode,\n sdsNormalizeSignificant,\n} from './phone-countries';\n\nexport type SdsPhoneInputSize = 'sm' | 'md' | 'lg';\n\n/** Payload of (phoneChange): the canonical and parsed parts of the number. */\nexport interface SdsPhoneValue {\n /** E.164 string, e.g. '+32470123456' (empty when no number is entered). */\n e164: string;\n /** Selected country ISO2 code. */\n country: string;\n /** Dial code without '+', e.g. '32'. */\n dialCode: string;\n /** National-significant digits, e.g. '470123456'. */\n national: string;\n /** Whether the national number matches an expected length for the country. */\n valid: boolean;\n}\n\nconst SIZES: Record<SdsPhoneInputSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\nlet nextId = 0;\n\n/**\n * International phone number input: a country selector (ISO chip + dial code)\n * with a searchable, body-appended dropdown, plus a formatted national-number\n * field. Implements ControlValueAccessor (value is an E.164 string such as\n * '+32470123456') and Validator (national length is checked per country).\n *\n * @example\n * <sds-phone-input label=\"Téléphone\" defaultCountry=\"BE\"\n * [preferredCountries]=\"['BE','FR','LU']\"\n * [(ngModel)]=\"phone\" required />\n */\n@Component({\n selector: 'sds-phone-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsPhoneInput), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SdsPhoneInput), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n @if (label()) {\n <label [for]=\"fieldId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div\n #anchor\n class=\"relative flex items-stretch rounded-control border bg-white transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n <!-- country selector -->\n <button\n type=\"button\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"'Indicatif pays : ' + country().name\"\n class=\"flex shrink-0 items-center gap-1.5 rounded-l-control pl-2.5 pr-2 focus:outline-none\"\n [class.cursor-not-allowed]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span class=\"grid h-5 min-w-7 place-items-center rounded bg-muted px-1 text-[11px] font-semibold tracking-wide text-ink-soft\">\n {{ country().iso2 }}\n </span>\n <span class=\"text-ink-soft\">+{{ country().dialCode }}</span>\n <sds-icon\n name=\"chevron-down\"\n [size]=\"16\"\n class=\"text-ink-faint transition-transform duration-150\"\n [class.rotate-180]=\"open()\"\n />\n </button>\n\n <div class=\"my-1.5 w-px shrink-0 bg-border\"></div>\n\n <!-- national number -->\n <input\n #field\n [id]=\"fieldId\"\n type=\"tel\"\n inputmode=\"tel\"\n autocomplete=\"tel-national\"\n [placeholder]=\"placeholderText()\"\n [disabled]=\"isDisabled()\"\n [value]=\"display()\"\n [attr.aria-invalid]=\"showError() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n class=\"w-full min-w-0 bg-transparent px-3 outline-none placeholder:text-ink-faint disabled:cursor-not-allowed\"\n (input)=\"onInput($event)\"\n (blur)=\"markTouched()\"\n />\n\n @if (clearable() && national() && !isDisabled()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer\"\n class=\"mr-1.5 inline-flex w-7 shrink-0 items-center justify-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear()\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n </div>\n\n @if (open()) {\n <!-- Appended to document.body on open (see positionPanel). -->\n <div\n data-sds-phone-panel\n class=\"fixed z-[1000] overflow-hidden rounded-card border border-border bg-surface shadow-lg\"\n >\n <div class=\"border-b border-border p-2\">\n <div class=\"relative flex items-center rounded-control border border-border focus-within:border-brand-500\">\n <sds-icon name=\"search\" [size]=\"16\" class=\"pointer-events-none absolute left-2.5 text-ink-faint\" />\n <input\n type=\"text\"\n [attr.aria-controls]=\"listId\"\n [value]=\"filterText()\"\n placeholder=\"Rechercher un pays…\"\n aria-label=\"Rechercher un pays\"\n class=\"h-9 w-full bg-transparent pl-8 pr-2 text-sm text-ink outline-none placeholder:text-ink-faint\"\n (input)=\"onFilter($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n </div>\n\n <ul [id]=\"listId\" role=\"listbox\" class=\"max-h-64 overflow-auto py-1\">\n @for (c of filteredCountries(); track c.iso2; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"c.iso2 === country().iso2\"\n [attr.data-index]=\"i\"\n [class]=\"optionClass(i, c)\"\n (click)=\"selectCountry(c)\"\n (mouseenter)=\"highlightedIndex.set(i)\"\n >\n <span class=\"grid h-5 min-w-7 place-items-center rounded bg-muted px-1 text-[11px] font-semibold tracking-wide text-ink-soft\">\n {{ c.iso2 }}\n </span>\n <span class=\"flex-1 truncate\">{{ c.name }}</span>\n <span class=\"text-ink-faint\">+{{ c.dialCode }}</span>\n </li>\n } @empty {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">Aucun pays</li>\n }\n </ul>\n </div>\n }\n\n @if (showError()) {\n <p [id]=\"fieldId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ errorMessage() }}\n </p>\n } @else if (hint() || autoHint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">\n {{ hint() || autoHint() }}\n </p>\n }\n `,\n})\nexport class SdsPhoneInput implements ControlValueAccessor, Validator, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n protected readonly fieldId = `sds-phone-${nextId++}`;\n protected readonly listId = `${this.fieldId}-list`;\n\n readonly label = input<string>('');\n readonly hint = input<string>('');\n /** External error message; overrides the built-in validation message. */\n readonly error = input<string>('');\n readonly size = input<SdsPhoneInputSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Initial country (ISO2) when no value is written. */\n readonly defaultCountry = input<string>('BE');\n /** ISO2 codes shown first in the list. */\n readonly preferredCountries = input<string[]>([]);\n /** Restrict the list to these ISO2 codes (empty = all). */\n readonly onlyCountries = input<string[]>([]);\n /** Show an example number as a hint when no [hint] is provided. */\n readonly showExampleHint = input(true, { transform: booleanAttribute });\n readonly requiredMessage = input<string>('Numéro de téléphone requis');\n\n /** Emitted with the parsed parts whenever the number or country changes. */\n readonly phoneChange = output<SdsPhoneValue>();\n\n protected readonly national = signal('');\n protected readonly countryIso = signal('');\n protected readonly open = signal(false);\n protected readonly filterText = signal('');\n protected readonly highlightedIndex = signal(-1);\n protected readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n\n private readonly anchor = viewChild<ElementRef<HTMLElement>>('anchor');\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Countries after applying [onlyCountries] and [preferredCountries] ordering. */\n protected readonly availableCountries = computed<SdsPhoneCountry[]>(() => {\n const only = this.onlyCountries().map((c) => c.toUpperCase());\n let list = SDS_PHONE_COUNTRIES.slice();\n if (only.length) list = list.filter((c) => only.includes(c.iso2));\n\n const preferred = this.preferredCountries().map((c) => c.toUpperCase());\n if (preferred.length) {\n const rank = (iso2: string) => {\n const i = preferred.indexOf(iso2);\n return i === -1 ? preferred.length : i;\n };\n list = list.slice().sort((a, b) => rank(a.iso2) - rank(b.iso2));\n }\n return list;\n });\n\n protected readonly country = computed<SdsPhoneCountry>(() => {\n const iso = this.countryIso() || this.defaultCountry().toUpperCase();\n return (\n this.availableCountries().find((c) => c.iso2 === iso) ??\n this.availableCountries()[0] ??\n SDS_PHONE_COUNTRIES[0]\n );\n });\n\n protected readonly filteredCountries = computed<SdsPhoneCountry[]>(() => {\n const f = this.filterText().trim().toLowerCase();\n const all = this.availableCountries();\n if (!f) return all;\n return all.filter(\n (c) =>\n c.name.toLowerCase().includes(f) ||\n c.iso2.toLowerCase().includes(f) ||\n c.dialCode.includes(f.replace('+', '')),\n );\n });\n\n protected readonly display = computed(() =>\n sdsFormatNational(this.national(), this.country().format),\n );\n\n protected readonly placeholderText = computed(() =>\n sdsFormatNational(this.country().example, this.country().format),\n );\n\n protected readonly autoHint = computed(() => {\n if (!this.showExampleHint()) return '';\n const c = this.country();\n return `Ex. +${c.dialCode} ${sdsFormatNational(c.example, c.format)}`;\n });\n\n protected readonly e164 = computed(() => {\n const d = this.national();\n return d ? `+${this.country().dialCode}${d}` : '';\n });\n\n /** Non-empty but national length is not valid for the country. */\n protected readonly invalid = computed(() => {\n const d = this.national();\n if (!d) return false;\n const lengths = this.country().lengths;\n return lengths.length > 0 && !lengths.includes(d.length);\n });\n\n protected readonly showError = computed(() => {\n if (this.error()) return true;\n if (!this.touched()) return false;\n if (this.required() && !this.national()) return true;\n return this.invalid();\n });\n\n protected readonly errorMessage = computed(() => {\n if (this.error()) return this.error();\n if (this.required() && !this.national()) return this.requiredMessage();\n const lengths = this.country().lengths;\n const expected = lengths.join(' ou ');\n const len = this.national().length;\n const min = Math.min(...lengths);\n if (len < min) return `Numéro incomplet — ${expected} chiffres attendus`;\n return `Numéro invalide — ${expected} chiffres attendus`;\n });\n\n protected readonly describedBy = computed(() => {\n if (this.showError()) return `${this.fieldId}-err`;\n if (this.hint() || this.autoHint()) return `${this.fieldId}-hint`;\n return null;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.showError()\n ? 'border-danger focus-within:border-danger focus-within:ring-2 focus-within:ring-danger/25'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n return parts.join(' ');\n });\n\n protected optionId(i: number): string {\n return `${this.fieldId}-opt-${i}`;\n }\n\n protected optionClass(i: number, c: SdsPhoneCountry): string {\n const base = 'flex cursor-pointer items-center gap-2.5 px-3 py-2 text-sm text-ink';\n let cls = base;\n if (this.highlightedIndex() === i) cls += ' bg-brand-50';\n if (c.iso2 === this.country().iso2) cls += ' font-medium';\n return cls;\n }\n\n // --- national number input ---\n protected onInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n const max = Math.max(...this.country().lengths, 0) || 15;\n const next = sdsNormalizeSignificant(raw).slice(0, max);\n this.national.set(next);\n this.emit();\n }\n\n protected clear(): void {\n this.national.set('');\n this.markTouched();\n this.emit();\n this.field()?.nativeElement.focus();\n }\n\n // --- country dropdown ---\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.filterText.set('');\n this.highlightedIndex.set(\n this.filteredCountries().findIndex((c) => c.iso2 === this.country().iso2),\n );\n this.open.set(true);\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>('[data-sds-phone-panel]');\n this.positionPanel();\n this.addReflowListeners();\n this.panelEl?.querySelector<HTMLInputElement>('input')?.focus();\n this.scrollHighlightedIntoView();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove();\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) this.anchor()?.nativeElement.querySelector('button')?.focus();\n }\n\n protected selectCountry(c: SdsPhoneCountry): void {\n const changed = c.iso2 !== this.country().iso2;\n this.countryIso.set(c.iso2);\n // Re-clamp the existing number to the new country's max length.\n const max = Math.max(...c.lengths, 0) || 15;\n if (this.national().length > max) this.national.set(this.national().slice(0, max));\n this.close(true);\n if (changed) this.emit();\n this.field()?.nativeElement.focus();\n }\n\n protected onFilter(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n this.highlightedIndex.set(this.filteredCountries().length ? 0 : -1);\n setTimeout(() => this.positionPanel());\n }\n\n // --- keyboard ---\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.openPanel();\n }\n return;\n }\n this.handleNavKey(event);\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n this.handleNavKey(event);\n }\n\n private handleNavKey(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); this.move(1); break;\n case 'ArrowUp': event.preventDefault(); this.move(-1); break;\n case 'Home': event.preventDefault(); this.highlightedIndex.set(0); this.scrollHighlightedIntoView(); break;\n case 'End': event.preventDefault(); this.highlightedIndex.set(this.filteredCountries().length - 1); this.scrollHighlightedIntoView(); break;\n case 'Enter': {\n event.preventDefault();\n const c = this.filteredCountries()[this.highlightedIndex()];\n if (c) this.selectCountry(c);\n break;\n }\n case 'Escape': event.preventDefault(); this.close(true); break;\n case 'Tab': this.close(false); break;\n }\n }\n\n private move(delta: number): void {\n const list = this.filteredCountries();\n if (!list.length) return;\n const len = list.length;\n const i = (this.highlightedIndex() + delta + len) % len;\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n }\n\n private scrollHighlightedIntoView(): void {\n setTimeout(() => {\n this.panelEl\n ?.querySelector<HTMLElement>(`[data-index=\"${this.highlightedIndex()}\"]`)\n ?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n // --- body-appended overlay positioning (mirrors sds-select) ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const anchorEl = this.anchor()?.nativeElement;\n const panelEl = this.panelEl;\n if (!anchorEl || !panelEl) return;\n if (panelEl.parentElement !== document.body) document.body.appendChild(panelEl);\n\n const r = anchorEl.getBoundingClientRect();\n panelEl.style.minWidth = `${Math.round(r.width)}px`;\n const ph = panelEl.offsetHeight || 280;\n const gap = 4;\n const margin = 8;\n\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n let left = r.left;\n const pw = panelEl.offsetWidth || r.width;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n protected markTouched(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n this.panelEl?.remove();\n }\n\n private emit(): void {\n const value = this.e164();\n this.onChange(value);\n this.onValidatorChange();\n this.phoneChange.emit({\n e164: value,\n country: this.country().iso2,\n dialCode: this.country().dialCode,\n national: this.national(),\n valid: !!value && !this.invalid(),\n });\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n const raw = (value ?? '').trim();\n if (!raw) {\n this.national.set('');\n return;\n }\n if (raw.startsWith('+')) {\n const digits = raw.slice(1).replace(/\\D/g, '');\n const match = sdsMatchDialCode(digits, this.availableCountries());\n if (match) {\n this.countryIso.set(match.iso2);\n this.national.set(sdsNormalizeSignificant(digits.slice(match.dialCode.length)));\n return;\n }\n }\n // No '+' / unknown dial code: treat as a national number for the current country.\n this.national.set(sdsNormalizeSignificant(raw));\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n if (isDisabled) this.close();\n }\n\n // --- Validator ---\n private onValidatorChange: () => void = () => {};\n\n validate(_control: AbstractControl): ValidationErrors | null {\n const d = this.national();\n if (!d) return this.required() ? { required: true } : null;\n const lengths = this.country().lengths;\n if (lengths.length && !lengths.includes(d.length)) {\n return {\n phoneInvalid: {\n country: this.country().iso2,\n expectedLengths: lengths,\n actualLength: d.length,\n },\n };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsSelect } from '../select/sds-select';\n\nexport type SdsPaginatorSize = 'sm' | 'md' | 'lg';\n\n/** Payload emitted by (pageChange) whenever the page or page size changes. */\nexport interface SdsPaginatorState {\n /** Zero-based index of the current page. */\n page: number;\n /** Zero-based index of the first record on the current page. */\n first: number;\n /** Rows displayed per page. */\n rows: number;\n /** Total number of pages. */\n pageCount: number;\n /** Total number of records. */\n totalRecords: number;\n}\n\nconst SIZES: Record<SdsPaginatorSize, string> = {\n sm: 'h-8 min-w-8 text-xs',\n md: 'h-9 min-w-9 text-sm',\n lg: 'h-11 min-w-11 text-base',\n};\n\nconst ICON_SIZES: Record<SdsPaginatorSize, number> = { sm: 15, md: 16, lg: 18 };\n\nconst BTN_BASE =\n 'inline-flex items-center justify-center rounded-control px-1.5 font-medium ' +\n 'transition-colors select-none focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-brand-500 focus-visible:ring-offset-1';\n\n/**\n * Pagination control (mirrors PrimeNG's paginator). Drives a sliding window of\n * page links with first/prev/next/last navigation, an optional rows-per-page\n * dropdown (reuses <sds-select>), a current-page report and a jump-to-page input.\n *\n * State is exposed as two-way models: [first] (zero-based index of the first\n * record on the page) and [rows] (page size). A combined (pageChange) event\n * carries the full {@link SdsPaginatorState} on every change.\n *\n * @example\n * <sds-paginator\n * [totalRecords]=\"120\"\n * [(first)]=\"first\"\n * [(rows)]=\"rows\"\n * [rowsPerPageOptions]=\"[10, 20, 50]\"\n * showCurrentPageReport\n * (pageChange)=\"load($event)\"\n * />\n */\n@Component({\n selector: 'sds-paginator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, SdsIcon, SdsSelect],\n host: { '[class]': 'hostClass()' },\n template: `\n @if (showCurrentPageReport()) {\n <span class=\"text-sm text-ink-soft\">{{ reportText() }}</span>\n }\n\n <div class=\"flex flex-wrap items-center gap-x-4 gap-y-2\">\n <!-- page navigation -->\n <nav class=\"flex items-center gap-1\" aria-label=\"Pagination\">\n @if (showFirstLastIcon()) {\n <button\n type=\"button\"\n [class]=\"navClass(firstDisabled())\"\n [disabled]=\"firstDisabled()\"\n aria-label=\"Première page\"\n (click)=\"firstPage()\"\n >\n <sds-icon name=\"chevrons-left\" [size]=\"iconSize()\" />\n </button>\n }\n <button\n type=\"button\"\n [class]=\"navClass(firstDisabled())\"\n [disabled]=\"firstDisabled()\"\n aria-label=\"Page précédente\"\n (click)=\"prevPage()\"\n >\n <sds-icon name=\"chevron-left\" [size]=\"iconSize()\" />\n </button>\n\n @if (showPageLinks()) {\n @for (p of pageLinks(); track $index) {\n <button\n type=\"button\"\n [class]=\"linkClass(p === page())\"\n [attr.aria-label]=\"'Page ' + (p + 1)\"\n [attr.aria-current]=\"p === page() ? 'page' : null\"\n [disabled]=\"disabled()\"\n (click)=\"changePage(p)\"\n >\n {{ p + 1 }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n [class]=\"navClass(lastDisabled())\"\n [disabled]=\"lastDisabled()\"\n aria-label=\"Page suivante\"\n (click)=\"nextPage()\"\n >\n <sds-icon name=\"chevron-right\" [size]=\"iconSize()\" />\n </button>\n @if (showFirstLastIcon()) {\n <button\n type=\"button\"\n [class]=\"navClass(lastDisabled())\"\n [disabled]=\"lastDisabled()\"\n aria-label=\"Dernière page\"\n (click)=\"lastPage()\"\n >\n <sds-icon name=\"chevrons-right\" [size]=\"iconSize()\" />\n </button>\n }\n </nav>\n\n <!-- rows per page -->\n @if (rowsPerPageOptions().length) {\n <label class=\"flex items-center gap-2 text-sm text-ink-soft\">\n <span>{{ rowsPerPageLabel() }}</span>\n <span class=\"w-20\">\n <sds-select\n size=\"sm\"\n ariaLabel=\"Lignes par page\"\n [options]=\"rowsPerPageOptions()\"\n [ngModel]=\"rows()\"\n (ngModelChange)=\"onRowsChange($event)\"\n [disabled]=\"disabled()\"\n />\n </span>\n </label>\n }\n\n <!-- jump to page -->\n @if (showJumpToPageInput()) {\n <label class=\"flex items-center gap-2 text-sm text-ink-soft\">\n <span>{{ jumpToPageLabel() }}</span>\n <input\n type=\"number\"\n min=\"1\"\n [max]=\"pageCount()\"\n [value]=\"page() + 1\"\n [disabled]=\"disabled()\"\n aria-label=\"Aller à la page\"\n (change)=\"onJump($event)\"\n class=\"h-9 w-16 rounded-control border border-border bg-white px-2 text-center text-sm text-ink outline-none transition-colors focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25 disabled:opacity-60\"\n />\n </label>\n }\n </div>\n `,\n})\nexport class SdsPaginator {\n /** Total number of records to paginate. */\n readonly totalRecords = input(0, { transform: numberAttribute });\n /** Zero-based index of the first record on the current page (two-way). */\n readonly first = model(0);\n /** Rows displayed per page (two-way). */\n readonly rows = model(10);\n /** When non-empty, renders a rows-per-page dropdown with these choices. */\n readonly rowsPerPageOptions = input<number[]>([]);\n /** Maximum count of numbered page links shown in the sliding window. */\n readonly pageLinkSize = input(5, { transform: numberAttribute });\n readonly showFirstLastIcon = input(true, { transform: booleanAttribute });\n readonly showPageLinks = input(true, { transform: booleanAttribute });\n readonly showCurrentPageReport = input(false, { transform: booleanAttribute });\n /** Tokens: {first} {last} {totalRecords} {currentPage} {totalPages} {rows}. */\n readonly currentPageReportTemplate = input<string>('{first} – {last} sur {totalRecords}');\n readonly showJumpToPageInput = input(false, { transform: booleanAttribute });\n readonly rowsPerPageLabel = input<string>('Lignes par page');\n readonly jumpToPageLabel = input<string>('Aller à');\n readonly size = input<SdsPaginatorSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Fires after any page or page-size change with the full paginator state. */\n readonly pageChange = output<SdsPaginatorState>();\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalRecords() / Math.max(1, this.rows()))),\n );\n\n protected readonly page = computed(() =>\n Math.min(this.pageCount() - 1, Math.floor(this.first() / Math.max(1, this.rows()))),\n );\n\n protected readonly firstDisabled = computed(() => this.disabled() || this.page() <= 0);\n protected readonly lastDisabled = computed(\n () => this.disabled() || this.page() >= this.pageCount() - 1,\n );\n\n protected readonly iconSize = computed(() => ICON_SIZES[this.size()]);\n\n // Sliding window of zero-based page indices, centred on the current page.\n protected readonly pageLinks = computed<number[]>(() => {\n const pages = this.pageCount();\n const visible = Math.min(this.pageLinkSize(), pages);\n let start = Math.max(0, Math.ceil(this.page() - visible / 2));\n const end = Math.min(pages - 1, start + visible - 1);\n start = Math.max(0, start - (visible - (end - start + 1)));\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n protected readonly reportText = computed(() => {\n const total = this.totalRecords();\n const first = total === 0 ? 0 : this.first() + 1;\n const last = Math.min(this.first() + this.rows(), total);\n return this.currentPageReportTemplate()\n .replace('{first}', String(first))\n .replace('{last}', String(last))\n .replace('{totalRecords}', String(total))\n .replace('{currentPage}', String(this.page() + 1))\n .replace('{totalPages}', String(this.pageCount()))\n .replace('{rows}', String(this.rows()));\n });\n\n protected readonly hostClass = computed(() => {\n const base = 'flex flex-wrap items-center gap-x-4 gap-y-3';\n const justify = this.showCurrentPageReport() ? 'justify-between' : 'justify-center';\n return `${base} ${justify}`;\n });\n\n protected navClass(isDisabled: boolean): string {\n const cls = `${BTN_BASE} ${SIZES[this.size()]} px-0`;\n return isDisabled\n ? `${cls} text-ink-faint opacity-50 cursor-not-allowed`\n : `${cls} text-ink-soft hover:bg-muted cursor-pointer`;\n }\n\n protected linkClass(active: boolean): string {\n const cls = `${BTN_BASE} ${SIZES[this.size()]}`;\n if (this.disabled()) return `${cls} text-ink-faint opacity-50 cursor-not-allowed`;\n return active\n ? `${cls} bg-brand-600 text-white hover:bg-brand-700 cursor-pointer`\n : `${cls} text-ink-soft hover:bg-muted cursor-pointer`;\n }\n\n protected firstPage(): void {\n this.changePage(0);\n }\n protected prevPage(): void {\n this.changePage(this.page() - 1);\n }\n protected nextPage(): void {\n this.changePage(this.page() + 1);\n }\n protected lastPage(): void {\n this.changePage(this.pageCount() - 1);\n }\n\n protected changePage(target: number): void {\n if (this.disabled()) return;\n const next = Math.min(Math.max(target, 0), this.pageCount() - 1);\n const newFirst = next * this.rows();\n if (newFirst === this.first()) return;\n this.first.set(newFirst);\n this.emit();\n }\n\n protected onRowsChange(value: number): void {\n if (this.disabled()) return;\n const newRows = Math.max(1, Number(value) || 1);\n if (newRows === this.rows()) return;\n const anchor = this.first();\n this.rows.set(newRows);\n // Keep the first visible record anchored within the new page size.\n const clamped = Math.min(anchor, (this.pageCount() - 1) * newRows);\n this.first.set(Math.floor(clamped / newRows) * newRows);\n this.emit();\n }\n\n protected onJump(event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = parseInt(input.value, 10);\n if (!Number.isNaN(value)) this.changePage(value - 1);\n // Reflect the clamped page back into the field.\n input.value = String(this.page() + 1);\n }\n\n private emit(): void {\n this.pageChange.emit({\n page: this.page(),\n first: this.first(),\n rows: this.rows(),\n pageCount: this.pageCount(),\n totalRecords: this.totalRecords(),\n });\n }\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\n/** Identifier of a tab / panel pair. Keep types consistent across a tab set. */\nexport type SdsTabValue = string | number | null;\n\nlet nextId = 0;\n\n/**\n * Coordinates a single <sds-tabs> instance: holds the active value (shared from\n * the host's two-way model), tracks registered tabs for default selection and\n * generates the ARIA ids that link each tab to its panel.\n *\n * Provided at the <sds-tabs> component level so every tab set is isolated.\n */\n@Injectable()\nexport class SdsTabsStore {\n /** Unique base id used to link tabs and panels via ARIA. */\n readonly id = `sds-tabs-${nextId++}`;\n /** Whether the tab list scrolls horizontally (mirrors [scrollable]). */\n readonly scrollable = signal(false);\n\n private value!: WritableSignal<SdsTabValue>;\n private readonly registered = signal<SdsTabValue[]>([]);\n\n /** Called once by <sds-tabs> to share its two-way `value` signal. */\n connect(value: WritableSignal<SdsTabValue>): void {\n this.value = value;\n }\n\n activeValue(): SdsTabValue {\n return this.value();\n }\n\n isActive(value: SdsTabValue): boolean {\n return this.value() === value;\n }\n\n select(value: SdsTabValue): void {\n this.value.set(value);\n }\n\n registerTab(value: SdsTabValue): void {\n this.registered.update((list) => (list.includes(value) ? list : [...list, value]));\n // Default to the first registered tab when no value has been provided.\n if (this.value() == null) this.value.set(value);\n }\n\n unregisterTab(value: SdsTabValue): void {\n this.registered.update((list) => list.filter((v) => v !== value));\n }\n\n tabId(value: SdsTabValue): string {\n return `${this.id}-tab-${value}`;\n }\n\n panelId(value: SdsTabValue): string {\n return `${this.id}-panel-${value}`;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { SdsTabsStore, SdsTabValue } from './sds-tabs-store';\n\n/**\n * Root of a tab set. Compose with <sds-tab-list> (headers) and <sds-tab-panels>\n * (content). The active tab is the [value], matched against each <sds-tab> /\n * <sds-tab-panel> [value]; it is two-way bindable via [(value)]. When omitted,\n * the first registered tab is selected.\n *\n * @example\n * <sds-tabs [(value)]=\"active\">\n * <sds-tab-list>\n * <sds-tab value=\"0\">Détails</sds-tab>\n * <sds-tab value=\"1\">Historique</sds-tab>\n * </sds-tab-list>\n * <sds-tab-panels>\n * <sds-tab-panel value=\"0\">…</sds-tab-panel>\n * <sds-tab-panel value=\"1\">…</sds-tab-panel>\n * </sds-tab-panels>\n * </sds-tabs>\n */\n@Component({\n selector: 'sds-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [SdsTabsStore],\n host: { class: 'block' },\n template: `<ng-content />`,\n})\nexport class SdsTabs {\n private readonly store = inject(SdsTabsStore);\n\n /** Value of the active tab (two-way). */\n readonly value = model<SdsTabValue>(null);\n /** Let the tab list scroll horizontally instead of overflowing. */\n readonly scrollable = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.store.connect(this.value);\n effect(() => this.store.scrollable.set(this.scrollable()));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { SdsTabsStore } from './sds-tabs-store';\n\n/**\n * Container (role=\"tablist\") for the <sds-tab> headers. Renders the bottom rule\n * and handles roving-focus keyboard navigation (Arrow keys, Home, End) with\n * automatic activation.\n */\n@Component({\n selector: 'sds-tab-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'tablist',\n '[class]': 'listClass()',\n '(keydown)': 'onKeydown($event)',\n },\n template: `<ng-content />`,\n})\nexport class SdsTabList {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly store = inject(SdsTabsStore);\n\n protected readonly listClass = computed(() => {\n const base = 'relative flex border-b border-border';\n return this.store.scrollable() ? `${base} overflow-x-auto` : base;\n });\n\n protected onKeydown(event: KeyboardEvent): void {\n const keys = ['ArrowRight', 'ArrowLeft', 'Home', 'End'];\n if (!keys.includes(event.key)) return;\n\n const tabs = Array.from(\n this.host.nativeElement.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]'),\n ).filter((b) => !b.disabled);\n if (!tabs.length) return;\n\n event.preventDefault();\n const current = tabs.indexOf(document.activeElement as HTMLButtonElement);\n let next: number;\n switch (event.key) {\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = tabs.length - 1;\n break;\n case 'ArrowRight':\n next = current < 0 ? 0 : (current + 1) % tabs.length;\n break;\n default: // ArrowLeft\n next = current <= 0 ? tabs.length - 1 : current - 1;\n break;\n }\n\n const el = tabs[next];\n el.focus();\n el.click(); // automatic activation\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { SdsTabsStore, SdsTabValue } from './sds-tabs-store';\n\n/**\n * A single tab header (role=\"tab\"). Project the label and, optionally, an\n * <sds-icon> for an icon + text header. Set [disabled] to make it unselectable.\n */\n@Component({\n selector: 'sds-tab',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'contents' },\n template: `\n <button\n type=\"button\"\n role=\"tab\"\n [id]=\"store.tabId(value())\"\n [attr.aria-selected]=\"active()\"\n [attr.aria-controls]=\"store.panelId(value())\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.tabindex]=\"active() && !disabled() ? 0 : -1\"\n [disabled]=\"disabled()\"\n [class]=\"tabClass()\"\n (click)=\"select()\"\n >\n <ng-content />\n </button>\n `,\n})\nexport class SdsTab implements OnInit, OnDestroy {\n protected readonly store = inject(SdsTabsStore);\n\n readonly value = input.required<SdsTabValue>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly active = computed(() => this.store.isActive(this.value()));\n\n ngOnInit(): void {\n this.store.registerTab(this.value());\n }\n\n ngOnDestroy(): void {\n this.store.unregisterTab(this.value());\n }\n\n protected select(): void {\n if (this.disabled()) return;\n this.store.select(this.value());\n }\n\n protected tabClass(): string {\n const base =\n 'relative -mb-px inline-flex items-center gap-2 whitespace-nowrap border-b-2 px-4 py-2.5 ' +\n 'text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-brand-500 focus-visible:ring-inset';\n if (this.disabled()) {\n return `${base} border-transparent text-ink-faint opacity-50 cursor-not-allowed`;\n }\n return this.active()\n ? `${base} border-brand-600 text-brand-700 cursor-pointer`\n : `${base} border-transparent text-ink-soft hover:border-border hover:text-ink cursor-pointer`;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/** Wrapper for the <sds-tab-panel> content blocks of a tab set. */\n@Component({\n selector: 'sds-tab-panels',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div class=\"pt-4\">\n <ng-content />\n </div>\n `,\n})\nexport class SdsTabPanels {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { SdsTabsStore, SdsTabValue } from './sds-tabs-store';\n\n/**\n * Content for one tab (role=\"tabpanel\"); shown only while its [value] matches\n * the active tab. Inactive panels are not rendered (their content is created\n * on activation), so panel state does not persist across switches.\n */\n@Component({\n selector: 'sds-tab-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n @if (active()) {\n <div\n role=\"tabpanel\"\n [id]=\"store.panelId(value())\"\n [attr.aria-labelledby]=\"store.tabId(value())\"\n tabindex=\"0\"\n class=\"rounded-control focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n >\n <ng-content />\n </div>\n }\n `,\n})\nexport class SdsTabPanel {\n protected readonly store = inject(SdsTabsStore);\n\n readonly value = input.required<SdsTabValue>();\n\n protected readonly active = computed(() => this.store.isActive(this.value()));\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\n/** Identifier of an accordion panel. Keep types consistent across a set. */\nexport type SdsAccordionValue = string | number;\n/** Active value(s): a single value (or null) normally, an array in multiple mode. */\nexport type SdsAccordionActive = SdsAccordionValue | SdsAccordionValue[] | null;\n\nlet nextId = 0;\n\n/**\n * Coordinates a single <sds-accordion>: holds the open value(s) (shared from the\n * host's two-way model), the multiple-open flag, and generates the ARIA ids that\n * link each header to its content region.\n *\n * Provided at the <sds-accordion> component level so every accordion is isolated.\n */\n@Injectable()\nexport class SdsAccordionStore {\n /** Unique base id used to link headers and content regions via ARIA. */\n readonly id = `sds-accordion-${nextId++}`;\n /** Whether more than one panel may be open at a time (mirrors [multiple]). */\n readonly multiple = signal(false);\n\n private value!: WritableSignal<SdsAccordionActive>;\n\n /** Called once by <sds-accordion> to share its two-way `value` signal. */\n connect(value: WritableSignal<SdsAccordionActive>): void {\n this.value = value;\n }\n\n isOpen(value: SdsAccordionValue): boolean {\n const current = this.value();\n return Array.isArray(current) ? current.includes(value) : current === value;\n }\n\n toggle(value: SdsAccordionValue): void {\n if (this.multiple()) {\n const current = this.asArray();\n this.value.set(\n current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value],\n );\n } else {\n // Single mode: clicking the open panel collapses it.\n this.value.set(this.value() === value ? null : value);\n }\n }\n\n headerId(value: SdsAccordionValue): string {\n return `${this.id}-header-${value}`;\n }\n\n contentId(value: SdsAccordionValue): string {\n return `${this.id}-content-${value}`;\n }\n\n private asArray(): SdsAccordionValue[] {\n const current = this.value();\n if (Array.isArray(current)) return current;\n return current == null ? [] : [current];\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { SdsAccordionActive, SdsAccordionStore } from './sds-accordion-store';\n\n/**\n * Root of an accordion. Compose with <sds-accordion-panel> children, each\n * holding an <sds-accordion-header> and an <sds-accordion-content>. The open\n * panel is the [value], matched against each panel's [value]; it is two-way\n * bindable via [(value)]. With [multiple], several panels may be open at once\n * and [value] is an array.\n *\n * @example\n * <sds-accordion [(value)]=\"open\">\n * <sds-accordion-panel value=\"0\">\n * <sds-accordion-header>Section 1</sds-accordion-header>\n * <sds-accordion-content>…</sds-accordion-content>\n * </sds-accordion-panel>\n * </sds-accordion>\n */\n@Component({\n selector: 'sds-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [SdsAccordionStore],\n host: {\n class: 'block divide-y divide-border overflow-hidden rounded-card border border-border bg-surface',\n '(keydown)': 'onKeydown($event)',\n },\n template: `<ng-content />`,\n})\nexport class SdsAccordion {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly store = inject(SdsAccordionStore);\n\n /** Open panel value, or array of values in multiple mode (two-way). */\n readonly value = model<SdsAccordionActive>(null);\n /** Allow more than one panel open at a time. */\n readonly multiple = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.store.connect(this.value);\n effect(() => this.store.multiple.set(this.multiple()));\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (!target?.matches?.('[data-sds-accordion-header]')) return;\n\n const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];\n if (!keys.includes(event.key)) return;\n\n const headers = Array.from(\n this.host.nativeElement.querySelectorAll<HTMLButtonElement>('[data-sds-accordion-header]'),\n ).filter((b) => !b.disabled);\n if (!headers.length) return;\n\n event.preventDefault();\n const current = headers.indexOf(target as HTMLButtonElement);\n let next: number;\n switch (event.key) {\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = headers.length - 1;\n break;\n case 'ArrowDown':\n next = current < 0 ? 0 : (current + 1) % headers.length;\n break;\n default: // ArrowUp\n next = current <= 0 ? headers.length - 1 : current - 1;\n break;\n }\n headers[next].focus();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { SdsAccordionStore, SdsAccordionValue } from './sds-accordion-store';\n\n/**\n * One accordion section. Holds the [value] and optional [disabled] state shared\n * with its projected <sds-accordion-header> and <sds-accordion-content>.\n */\n@Component({\n selector: 'sds-accordion-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `<ng-content />`,\n})\nexport class SdsAccordionPanel {\n private readonly store = inject(SdsAccordionStore);\n\n readonly value = input.required<SdsAccordionValue>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly open = computed(() => this.store.isOpen(this.value()));\n\n get headerId(): string {\n return this.store.headerId(this.value());\n }\n\n get contentId(): string {\n return this.store.contentId(this.value());\n }\n\n toggle(): void {\n if (!this.disabled()) this.store.toggle(this.value());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsAccordionPanel } from './sds-accordion-panel';\n\n/**\n * Clickable header of an accordion panel. Project the label text and,\n * optionally, an <sds-icon>. Renders a chevron that rotates when open.\n */\n@Component({\n selector: 'sds-accordion-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <button\n type=\"button\"\n data-sds-accordion-header\n [id]=\"panel.headerId\"\n [attr.aria-expanded]=\"panel.open()\"\n [attr.aria-controls]=\"panel.contentId\"\n [attr.aria-disabled]=\"panel.disabled() ? 'true' : null\"\n [disabled]=\"panel.disabled()\"\n [class]=\"headerClass()\"\n (click)=\"panel.toggle()\"\n >\n <span class=\"flex-1 text-left\"><ng-content /></span>\n <sds-icon\n name=\"chevron-down\"\n [size]=\"18\"\n class=\"shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"panel.open()\"\n />\n </button>\n `,\n})\nexport class SdsAccordionHeader {\n protected readonly panel = inject(SdsAccordionPanel);\n\n protected readonly headerClass = computed(() => {\n const base =\n 'flex w-full items-center gap-3 px-4 py-3.5 text-left text-sm font-medium ' +\n 'transition-colors focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-inset focus-visible:ring-brand-500';\n if (this.panel.disabled()) {\n return `${base} text-ink-faint opacity-60 cursor-not-allowed`;\n }\n return this.panel.open()\n ? `${base} text-brand-700 hover:bg-muted cursor-pointer`\n : `${base} text-ink hover:bg-muted cursor-pointer`;\n });\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SdsAccordionPanel } from './sds-accordion-panel';\n\n/**\n * Collapsible content region of an accordion panel. Animates open/closed with a\n * CSS grid-rows transition; while closed it is `inert` (not focusable, hidden\n * from assistive tech) but kept in the DOM, so its state persists.\n */\n@Component({\n selector: 'sds-accordion-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"region\"\n [id]=\"panel.contentId\"\n [attr.aria-labelledby]=\"panel.headerId\"\n [attr.inert]=\"panel.open() ? null : ''\"\n class=\"grid transition-[grid-template-rows] duration-200 ease-out\"\n [style.grid-template-rows]=\"panel.open() ? '1fr' : '0fr'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 pt-0 text-sm leading-relaxed text-ink-soft\">\n <ng-content />\n </div>\n </div>\n </div>\n `,\n})\nexport class SdsAccordionContent {\n protected readonly panel = inject(SdsAccordionPanel);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport { SdsTableColumn } from './sds-table';\n\n/**\n * Typed context handed to a custom cell template. Pulled out so consumers can\n * destructure with `let-value`, `let-row`, `let-i=\"index\"`, etc., with full\n * type inference (see {@link SdsTableCell.ngTemplateContextGuard}).\n */\nexport interface SdsTableCellContext {\n /** Same as {@link value} — enables the `let-value` (implicit) binding. */\n $implicit: unknown;\n /** Resolved cell value for this column (via the table's getValue). */\n value: unknown;\n /** The full row object. */\n row: any;\n /** The column definition the cell belongs to. */\n column: SdsTableColumn;\n /** Zero-based index of the row within the currently displayed page. */\n index: number;\n}\n\n/**\n * Supplies a custom cell template for a single table column, matched by its\n * field key. Use as a structural template inside `<sds-table>`:\n *\n * @example\n * <sds-table [value]=\"rows\" [columns]=\"cols\">\n * <ng-template sdsCell=\"statut\" let-value let-row=\"row\">\n * <sds-badge [variant]=\"row.actif ? 'success' : 'neutral'\">{{ value }}</sds-badge>\n * </ng-template>\n * </sds-table>\n */\n@Directive({\n selector: 'ng-template[sdsCell]',\n standalone: true,\n})\nexport class SdsTableCell {\n /** The column `field` this template renders. */\n readonly column = input.required<string>({ alias: 'sdsCell' });\n\n /** The wrapped template, rendered by the host table via ngTemplateOutlet. */\n readonly template = inject<TemplateRef<SdsTableCellContext>>(TemplateRef);\n\n /** Lets the compiler type-check `let-*` bindings against SdsTableCellContext. */\n static ngTemplateContextGuard(\n _dir: SdsTableCell,\n _ctx: unknown,\n ): _ctx is SdsTableCellContext {\n return true;\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Typed context handed to a row-expansion template. Pulled out so consumers can\n * destructure with `let-row`, `let-i=\"index\"`, etc., with full type inference\n * (see {@link SdsTableRowExpansion.ngTemplateContextGuard}).\n */\nexport interface SdsTableRowExpansionContext {\n /** Same as {@link row} — enables the `let-row` (implicit) binding. */\n $implicit: any;\n /** The full row object whose details are being shown. */\n row: any;\n /** Zero-based index of the row within the currently displayed page. */\n index: number;\n}\n\n/**\n * Supplies the detail template rendered beneath an expanded row when the host\n * `<sds-table>` has `expandable`. Use as a structural template inside the table:\n *\n * @example\n * <sds-table [value]=\"rows\" [columns]=\"cols\" expandable>\n * <ng-template sdsRowExpansion let-row>\n * <div>Détails de {{ row.nom }}</div>\n * </ng-template>\n * </sds-table>\n */\n@Directive({\n selector: 'ng-template[sdsRowExpansion]',\n standalone: true,\n})\nexport class SdsTableRowExpansion {\n /** The wrapped template, rendered by the host table via ngTemplateOutlet. */\n readonly template = inject<TemplateRef<SdsTableRowExpansionContext>>(TemplateRef);\n\n /** Lets the compiler type-check `let-*` bindings against SdsTableRowExpansionContext. */\n static ngTemplateContextGuard(\n _dir: SdsTableRowExpansion,\n _ctx: unknown,\n ): _ctx is SdsTableRowExpansionContext {\n return true;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n effect,\n input,\n model,\n numberAttribute,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsPaginator, SdsPaginatorState } from '../paginator/sds-paginator';\nimport { SdsTableCell, SdsTableCellContext } from './sds-table-cell';\nimport { SdsTableRowExpansion } from './sds-table-row-expansion';\n\n/** Column configuration. `field` may be a dot-path (e.g. `service.name`). */\nexport interface SdsTableColumn {\n /** Row field rendered in this column. Supports dot-paths. */\n field: string;\n /** Header label. */\n header: string;\n /** Allow sorting on this column (also requires the table's `sortable`). */\n sortable?: boolean;\n /** Text alignment for header + body cells. */\n align?: 'left' | 'center' | 'right';\n /** Fixed column width, e.g. `'120px'` or `'20%'`. */\n width?: string;\n}\n\nexport type SdsTableSize = 'sm' | 'md' | 'lg';\n/** 1 = ascending, -1 = descending, 0 = unsorted. */\nexport type SdsSortOrder = 1 | -1 | 0;\n\nexport interface SdsTableSortEvent {\n field: string;\n order: SdsSortOrder;\n}\n\n/** Emitted when `lazy` is true so the host can fetch the matching slice. */\nexport interface SdsTableLazyEvent {\n first: number;\n rows: number;\n sortField: string | null;\n sortOrder: SdsSortOrder;\n globalFilter: string;\n}\n\ntype SdsSelectionMode = 'single' | 'multiple' | null;\n\nconst SIZES: Record<SdsTableSize, { cell: string; head: string }> = {\n sm: { cell: 'px-3 py-2 text-sm', head: 'px-3 py-2' },\n md: { cell: 'px-4 py-2.5 text-sm', head: 'px-4 py-2.5' },\n lg: { cell: 'px-4 py-3 text-base', head: 'px-4 py-3' },\n};\n\nconst ALIGN: Record<NonNullable<SdsTableColumn['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\nlet nextId = 0;\n\n/**\n * Client-side data table mirroring PrimeNG's table, scoped to a strong local\n * feature set: sorting, pagination (reuses {@link SdsPaginator}), global filter,\n * single/multiple selection, custom cell templates (via {@link SdsTableCell}),\n * loading/empty states and visual variants. Set `lazy` to delegate\n * sort/filter/paging to the host through `(lazyLoad)`.\n *\n * @remarks\n * - **`dataKey` is strongly recommended** for sortable and/or selectable\n * tables: it gives each row a stable identity so `trackRow` reuses the\n * correct DOM node when rows reorder (otherwise tracking falls back to the\n * page-relative `$index`, which defeats row-identity animations and can\n * momentarily mis-associate a focused custom-cell control after a re-sort).\n * - The header **\"select all\" checkbox operates over the entire filtered set\n * across all pages**, not just the current page. Toggling it selects/clears\n * every filtered row regardless of pagination (this is an intentional\n * deviation from PrimeNG's per-page select-all).\n *\n * @example\n * <sds-table [value]=\"staff\" [columns]=\"cols\" dataKey=\"id\"\n * sortable paginator [rows]=\"10\" globalFilter\n * selectionMode=\"multiple\" [(selection)]=\"selected\">\n * <ng-template sdsCell=\"statut\" let-value let-row=\"row\">\n * <sds-badge [variant]=\"row.actif ? 'success' : 'neutral'\">{{ value }}</sds-badge>\n * </ng-template>\n * </sds-table>\n */\n@Component({\n selector: 'sds-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, SdsPaginator, NgTemplateOutlet],\n host: { class: 'block' },\n template: `\n <div class=\"rounded-card border border-border bg-white overflow-hidden\">\n <!-- Toolbar: caption + global filter -->\n @if (caption() || globalFilter()) {\n <div class=\"flex flex-wrap items-center justify-between gap-3 border-b border-border px-4 py-3\">\n @if (caption()) {\n <span [id]=\"tableId + '-caption'\" class=\"font-semibold text-ink\">{{ caption() }}</span>\n } @else {\n <span></span>\n }\n\n @if (globalFilter()) {\n <div\n class=\"relative flex h-9 items-center rounded-control border border-border bg-white transition-colors focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25\"\n >\n <sds-icon\n name=\"search\"\n [size]=\"16\"\n class=\"pointer-events-none absolute left-2.5 text-ink-faint\"\n />\n <input\n type=\"search\"\n [id]=\"tableId + '-filter'\"\n [value]=\"filterText()\"\n [placeholder]=\"globalFilterPlaceholder()\"\n [attr.aria-label]=\"globalFilterAriaLabel()\"\n [disabled]=\"loading()\"\n [attr.aria-disabled]=\"loading() ? 'true' : null\"\n class=\"h-full w-56 max-w-full bg-transparent pl-8 pr-3 text-sm text-ink outline-none placeholder:text-ink-faint disabled:opacity-60\"\n (input)=\"onFilterInput($event)\"\n />\n </div>\n }\n </div>\n }\n\n <!-- Scroll region -->\n <div\n class=\"relative overflow-x-auto\"\n [class.overflow-y-auto]=\"scrollHeight()\"\n [style.maxHeight]=\"scrollHeight() || null\"\n [attr.inert]=\"loading() ? '' : null\"\n >\n <table\n class=\"w-full border-collapse text-left\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.aria-labelledby]=\"caption() ? tableId + '-caption' : null\"\n [attr.aria-label]=\"caption() ? null : ariaLabel()\"\n >\n <thead\n class=\"bg-muted text-xs font-semibold uppercase tracking-wide text-ink-soft\"\n >\n <tr [class]=\"gridlines() ? 'divide-x divide-border' : ''\">\n @if (expandable()) {\n <th\n scope=\"col\"\n class=\"w-px\"\n [class]=\"headCellClass()\"\n [class.sticky]=\"scrollHeight()\"\n [class.top-0]=\"scrollHeight()\"\n [class.z-10]=\"scrollHeight()\"\n [class.bg-muted]=\"scrollHeight()\"\n >\n <span class=\"sr-only\">Détails</span>\n </th>\n }\n\n @if (showSelectionColumn()) {\n <th\n scope=\"col\"\n class=\"w-px\"\n [class]=\"headCellClass()\"\n [class.sticky]=\"scrollHeight()\"\n [class.top-0]=\"scrollHeight()\"\n [class.z-10]=\"scrollHeight()\"\n [class.bg-muted]=\"scrollHeight()\"\n >\n @if (selectionMode() === 'multiple') {\n <button\n type=\"button\"\n role=\"checkbox\"\n [attr.aria-checked]=\"headerChecked() ? 'true' : (headerIndeterminate() ? 'mixed' : 'false')\"\n aria-label=\"Tout sélectionner\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n [class]=\"checkboxClass(headerChecked(), headerIndeterminate())\"\n (click)=\"toggleAll()\"\n >\n @if (headerChecked()) {\n <sds-icon name=\"check\" [size]=\"12\" />\n } @else if (headerIndeterminate()) {\n <span class=\"h-0.5 w-2.5 rounded-full bg-white\"></span>\n }\n </button>\n } @else {\n <span class=\"sr-only\">Sélection</span>\n }\n </th>\n }\n\n @for (col of effectiveColumns(); track col.field; let i = $index) {\n <th\n scope=\"col\"\n class=\"relative\"\n [class]=\"headCellClass(col)\"\n [class.sticky]=\"scrollHeight()\"\n [class.top-0]=\"scrollHeight()\"\n [class.z-10]=\"scrollHeight()\"\n [class.bg-muted]=\"scrollHeight()\"\n [class.cursor-move]=\"reorderableColumns()\"\n [style.width]=\"columnStyleWidth(col)\"\n [attr.aria-sort]=\"ariaSort(col)\"\n [attr.draggable]=\"reorderableColumns() ? 'true' : null\"\n (dragstart)=\"onColDragStart(i)\"\n (dragover)=\"onColDragOver($event)\"\n (drop)=\"onColDrop($event, i)\"\n (dragend)=\"onColDragEnd()\"\n >\n @if (isColumnSortable(col)) {\n <button\n type=\"button\"\n [disabled]=\"loading()\"\n class=\"inline-flex items-center gap-1.5 select-none rounded hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n (click)=\"onSort(col)\"\n >\n <span>{{ col.header }}</span>\n <sds-icon [name]=\"sortIcon(col)\" [size]=\"14\" class=\"text-ink-faint\" />\n </button>\n } @else {\n <span>{{ col.header }}</span>\n }\n\n @if (resizableColumns()) {\n <span\n class=\"absolute right-0 top-0 h-full w-1.5 cursor-col-resize select-none touch-none hover:bg-brand-300\"\n (pointerdown)=\"onResizeStart($event, col.field)\"\n (click)=\"$event.stopPropagation()\"\n ></span>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-border\">\n @for (row of displayRows(); track trackRow($index, row); let i = $index) {\n <tr\n [class]=\"rowClass(row, i)\"\n [attr.tabindex]=\"selectionMode() === 'single' && !loading() ? 0 : null\"\n [attr.aria-selected]=\"selectionMode() === 'single' ? (isRowSelected(row) ? 'true' : 'false') : null\"\n (click)=\"onRowClick(row)\"\n (keydown.enter)=\"onRowKeydown($event, row)\"\n (keydown.space)=\"onRowKeydown($event, row)\"\n >\n @if (expandable()) {\n <td [class]=\"cellClass()\" class=\"w-px\">\n <button\n type=\"button\"\n [attr.aria-expanded]=\"isExpanded(row)\"\n [attr.aria-controls]=\"isExpanded(row) ? rowDetailId(row) : null\"\n [attr.aria-label]=\"isExpanded(row) ? 'Réduire la ligne' : 'Développer la ligne'\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded text-ink-soft hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n (click)=\"onExpanderClick($event, row)\"\n >\n <sds-icon\n name=\"chevron-right\"\n [size]=\"16\"\n class=\"transition-transform\"\n [class.rotate-90]=\"isExpanded(row)\"\n />\n </button>\n </td>\n }\n\n @if (showSelectionColumn()) {\n <td\n [class]=\"cellClass()\"\n class=\"w-px\"\n >\n @if (selectionMode() === 'multiple') {\n <button\n type=\"button\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isRowSelected(row) ? 'true' : 'false'\"\n aria-label=\"Sélectionner la ligne\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n [class]=\"checkboxClass(isRowSelected(row), false)\"\n (click)=\"onRowCheckboxClick($event, row)\"\n >\n @if (isRowSelected(row)) {\n <sds-icon name=\"check\" [size]=\"12\" />\n }\n </button>\n } @else if (selectionMode() === 'single') {\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"isRowSelected(row) ? 'true' : 'false'\"\n aria-label=\"Sélectionner la ligne\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded-full border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n [class]=\"checkboxClass(isRowSelected(row), false)\"\n (click)=\"onRowCheckboxClick($event, row)\"\n >\n @if (isRowSelected(row)) {\n <span class=\"h-1.5 w-1.5 rounded-full bg-white\"></span>\n }\n </button>\n }\n </td>\n }\n\n @for (col of effectiveColumns(); track col.field) {\n <td\n [class]=\"cellClass(col)\"\n [style.width]=\"columnStyleWidth(col)\"\n >\n @if (templateFor(col.field); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"cellContext(row, col, i)\"\n />\n } @else {\n {{ display(row, col.field) }}\n }\n </td>\n }\n </tr>\n\n @if (expandable() && isExpanded(row) && expansionTemplate()) {\n <tr>\n <td [id]=\"rowDetailId(row)\" [attr.colspan]=\"totalColumnCount()\" class=\"bg-muted/30 p-0\">\n <div class=\"px-4 py-3\">\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row, index: i }\"\n />\n </div>\n </td>\n </tr>\n }\n } @empty {\n @if (!loading()) {\n <tr>\n <td\n [attr.colspan]=\"totalColumnCount()\"\n class=\"py-10 text-center text-ink-faint\"\n >\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n\n <!-- Loading overlay -->\n @if (loading()) {\n <div\n class=\"absolute inset-0 z-20 grid place-items-center bg-white/60\"\n aria-hidden=\"true\"\n >\n <div\n class=\"h-7 w-7 animate-spin rounded-full border-2 border-brand-200 border-t-brand-600\"\n ></div>\n </div>\n }\n </div>\n\n <!-- Paginator -->\n @if (paginator()) {\n <div class=\"border-t border-border px-4 py-2.5\">\n <sds-paginator\n [totalRecords]=\"totalForPaginator()\"\n [(first)]=\"first\"\n [(rows)]=\"pageRows\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n [disabled]=\"loading()\"\n currentPageReportTemplate=\"{first} – {last} sur {totalRecords}\"\n (pageChange)=\"onPageChange($event)\"\n />\n </div>\n }\n </div>\n `,\n})\nexport class SdsTable implements OnDestroy {\n protected readonly tableId = `sds-table-${nextId++}`;\n\n // --- inputs ---------------------------------------------------------------\n readonly value = input<readonly any[]>([]);\n readonly columns = input<SdsTableColumn[]>([]);\n readonly dataKey = input<string>('');\n readonly size = input<SdsTableSize>('md');\n readonly striped = input(false, { transform: booleanAttribute });\n readonly gridlines = input(false, { transform: booleanAttribute });\n readonly hoverable = input(true, { transform: booleanAttribute });\n /** Master sort switch; per-column `sortable` is still required. */\n readonly sortable = input(true, { transform: booleanAttribute });\n\n readonly paginator = input(false, { transform: booleanAttribute });\n readonly rows = input(10, { transform: numberAttribute });\n readonly rowsPerPageOptions = input<number[]>([10, 20, 50]);\n readonly showCurrentPageReport = input(true, { transform: booleanAttribute });\n\n readonly globalFilter = input(false, { transform: booleanAttribute });\n readonly globalFilterPlaceholder = input<string>('Rechercher…');\n /** Accessible name for the global-filter input. */\n readonly globalFilterAriaLabel = input<string>('Rechercher dans le tableau');\n /** Fields searched by the global filter. Empty = every column field. */\n readonly globalFilterFields = input<string[]>([]);\n\n readonly selectionMode = input<SdsSelectionMode>(null);\n /** Two-way: a single row (single mode) or an array of rows (multiple). */\n readonly selection = model<any>(null);\n\n readonly loading = input(false, { transform: booleanAttribute });\n readonly emptyMessage = input<string>('Aucune donnée');\n readonly caption = input<string>('');\n /** Fallback accessible name for the `<table>` when no `caption` is set. */\n readonly ariaLabel = input<string>('Tableau de données');\n /** When set, the body scrolls vertically with a sticky header, e.g. `'320px'`. */\n readonly scrollHeight = input<string>('');\n\n /** When true: skip internal sort/filter/slice; emit (lazyLoad) instead. */\n readonly lazy = input(false, { transform: booleanAttribute });\n /** Total records for the paginator when `lazy`. */\n readonly totalRecords = input(0, { transform: numberAttribute });\n\n /** Adds a leading expander column; details come from `<ng-template sdsRowExpansion>`. */\n readonly expandable = input(false, { transform: booleanAttribute });\n /** Drag the right edge of a column header to resize it. */\n readonly resizableColumns = input(false, { transform: booleanAttribute });\n /** Drag a column header to reorder columns. */\n readonly reorderableColumns = input(false, { transform: booleanAttribute });\n\n // --- outputs --------------------------------------------------------------\n readonly sortChange = output<SdsTableSortEvent>();\n readonly pageChange = output<SdsPaginatorState>();\n readonly rowSelect = output<any>();\n readonly rowUnselect = output<any>();\n readonly lazyLoad = output<SdsTableLazyEvent>();\n readonly rowClick = output<any>();\n /** Emitted with the row when its expander is opened. */\n readonly rowExpand = output<any>();\n /** Emitted with the row when its expander is closed. */\n readonly rowCollapse = output<any>();\n /** Emitted after a drag-reorder with the moved field and its old/new index. */\n readonly colReorder = output<{ field: string; fromIndex: number; toIndex: number }>();\n\n // --- custom cell templates ------------------------------------------------\n private readonly cellTemplates = contentChildren(SdsTableCell);\n\n private readonly templateMap = computed(() => {\n const map = new Map<string, SdsTableCell['template']>();\n for (const cell of this.cellTemplates()) map.set(cell.column(), cell.template);\n return map;\n });\n\n protected templateFor(field: string) {\n return this.templateMap().get(field) ?? null;\n }\n\n // --- row-expansion template -----------------------------------------------\n private readonly rowExpansion = contentChild(SdsTableRowExpansion);\n\n protected expansionTemplate() {\n return this.rowExpansion()?.template ?? null;\n }\n\n // --- pipeline state -------------------------------------------------------\n protected readonly filterText = signal('');\n protected readonly sortField = signal<string | null>(null);\n protected readonly sortOrder = signal<SdsSortOrder>(0);\n\n // Local paging signals kept in sync with the paginator's two-way models.\n protected readonly first = signal(0);\n protected readonly pageRows = signal(10);\n\n // Expanded-row identities (keyed via keyOf, like selection).\n private readonly expandedKeys = signal(new Set<unknown>());\n\n // Per-field pixel widths set by the resize handle (overrides col.width).\n private readonly columnWidths = signal<Record<string, number>>({});\n\n // Working column order while reorderableColumns is on; seeded from columns().\n private readonly columnOrder = signal<SdsTableColumn[]>([]);\n private readonly dragColIndex = signal<number | null>(null);\n\n constructor() {\n // Seed page size from the `rows` input (and keep it tracking until paged).\n effect(() => this.pageRows.set(this.rows()));\n // Reset the working order whenever the columns input changes.\n effect(() => this.columnOrder.set([...this.columns()]));\n }\n\n ngOnDestroy(): void {\n this.activeResizeCleanup?.();\n this.activeResizeCleanup = null;\n }\n\n // --- value resolution -----------------------------------------------------\n /** Resolve a (possibly dot-pathed) field on a row; null/undefined safe. */\n protected getValue(row: any, field: string): unknown {\n if (row == null || !field) return null;\n if (field.indexOf('.') === -1) return row[field];\n let acc: any = row;\n for (const part of field.split('.')) {\n if (acc == null) return null;\n acc = acc[part];\n }\n return acc;\n }\n\n /** String rendering of a cell value (null/undefined => ''). */\n protected display(row: any, field: string): string {\n const v = this.getValue(row, field);\n return v == null ? '' : String(v);\n }\n\n protected cellContext(row: any, column: SdsTableColumn, index: number): SdsTableCellContext {\n const value = this.getValue(row, column.field);\n return { $implicit: value, value, row, column, index };\n }\n\n // --- filter ---------------------------------------------------------------\n private readonly filtered = computed<readonly any[]>(() => {\n const data = this.value();\n if (this.lazy()) return data;\n const q = this.filterText().trim().toLowerCase();\n if (!this.globalFilter() || !q) return data;\n const fields = this.globalFilterFields().length\n ? this.globalFilterFields()\n : this.effectiveColumns().map((c) => c.field);\n return data.filter((row) =>\n fields.some((f) => {\n const v = this.getValue(row, f);\n return v != null && String(v).toLowerCase().includes(q);\n }),\n );\n });\n\n // --- sort -----------------------------------------------------------------\n private readonly sorted = computed<readonly any[]>(() => {\n const data = this.filtered();\n if (this.lazy()) return data;\n const field = this.sortField();\n const order = this.sortOrder();\n if (!field || order === 0) return data;\n // Stable sort: decorate with original index, compare, then strip.\n return data\n .map((row, index) => ({ row, index }))\n .sort((a, b) => {\n const cmp = this.compare(this.getValue(a.row, field), this.getValue(b.row, field));\n return cmp !== 0 ? cmp * order : a.index - b.index;\n })\n .map((d) => d.row);\n });\n\n private compare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n // Booleans (and mixed types) fall through to a lexical compare:\n // `false` < `true`. Columns are expected to be type-homogeneous.\n return String(a).localeCompare(String(b));\n }\n\n // --- paginate -------------------------------------------------------------\n protected readonly displayRows = computed<readonly any[]>(() => {\n const data = this.sorted();\n if (this.lazy() || !this.paginator()) return data;\n const pageRows = Math.max(1, this.pageRows());\n // Clamp the page offset: if `value` shrinks (server refresh, deleted rows,\n // dataset switch) `first` may point past the new end, slicing to []. Snap\n // it back to the last valid page start, mirroring SdsPaginator.onRowsChange.\n const maxStart = Math.max(0, (Math.ceil(data.length / pageRows) - 1) * pageRows);\n const start = Math.min(this.first(), maxStart);\n return data.slice(start, start + pageRows);\n });\n\n protected readonly totalForPaginator = computed(() =>\n this.lazy() ? this.totalRecords() : this.filtered().length,\n );\n\n /** Columns in their current (possibly reordered) order. */\n protected readonly effectiveColumns = computed<SdsTableColumn[]>(() =>\n this.reorderableColumns() && this.columnOrder().length\n ? this.columnOrder()\n : this.columns(),\n );\n\n /** Leading non-data columns: the expander then the selection column. */\n protected readonly leadingColumnCount = computed(\n () => (this.expandable() ? 1 : 0) + (this.showSelectionColumn() ? 1 : 0),\n );\n\n protected readonly totalColumnCount = computed(\n () => this.effectiveColumns().length + this.leadingColumnCount(),\n );\n\n // --- sorting UI -----------------------------------------------------------\n protected isColumnSortable(col: SdsTableColumn): boolean {\n return this.sortable() && !!col.sortable;\n }\n\n protected sortIcon(col: SdsTableColumn) {\n if (this.sortField() !== col.field || this.sortOrder() === 0) {\n return 'chevrons-up-down' as const;\n }\n return this.sortOrder() === 1 ? ('arrow-up' as const) : ('arrow-down' as const);\n }\n\n protected ariaSort(col: SdsTableColumn): 'ascending' | 'descending' | 'none' | null {\n if (!this.isColumnSortable(col)) return null;\n if (this.sortField() !== col.field || this.sortOrder() === 0) return 'none';\n return this.sortOrder() === 1 ? 'ascending' : 'descending';\n }\n\n protected onSort(col: SdsTableColumn): void {\n if (!this.isColumnSortable(col)) return;\n // Cycle asc(1) -> desc(-1) -> none(0) for this single column.\n let order: SdsSortOrder;\n if (this.sortField() !== col.field) {\n order = 1;\n } else {\n order = this.sortOrder() === 1 ? -1 : this.sortOrder() === -1 ? 0 : 1;\n }\n this.sortField.set(order === 0 ? null : col.field);\n this.sortOrder.set(order);\n // A new sort means the first sorted records belong on page 1.\n this.first.set(0);\n this.sortChange.emit({ field: col.field, order });\n if (this.lazy()) this.emitLazy();\n }\n\n // --- selection ------------------------------------------------------------\n protected readonly showSelectionColumn = computed(() => this.selectionMode() != null);\n\n private equals(a: any, b: any): boolean {\n const k = this.dataKey();\n if (k && a && b && typeof a === 'object' && typeof b === 'object') {\n return a[k] === b[k];\n }\n return a === b;\n }\n\n /** Identity used for O(1) membership tests: dataKey value when set, else the row itself. */\n private keyOf(row: any): unknown {\n const k = this.dataKey();\n return k && row && typeof row === 'object' ? row[k] : row;\n }\n\n /**\n * Set of selected identities, recomputed only when selection()/dataKey()\n * change. Lets isRowSelected/headerChecked/headerIndeterminate do O(1)\n * lookups instead of an O(selection) scan per row.\n */\n private readonly selectedKeys = computed(() => {\n const sel = this.selection();\n const list = Array.isArray(sel) ? sel : sel == null ? [] : [sel];\n return new Set(list.map((s) => this.keyOf(s)));\n });\n\n protected isRowSelected(row: any): boolean {\n if (this.selection() == null) return false;\n return this.selectedKeys().has(this.keyOf(row));\n }\n\n protected readonly headerChecked = computed(() => {\n if (this.selectionMode() !== 'multiple') return false;\n const rows = this.filtered();\n if (!rows.length) return false;\n const keys = this.selectedKeys();\n if (!keys.size) return false;\n return rows.every((r) => keys.has(this.keyOf(r)));\n });\n\n protected readonly headerIndeterminate = computed(() => {\n if (this.selectionMode() !== 'multiple') return false;\n const rows = this.filtered();\n const keys = this.selectedKeys();\n if (!keys.size) return false;\n const selectedCount = rows.reduce((n, r) => (keys.has(this.keyOf(r)) ? n + 1 : n), 0);\n return selectedCount > 0 && selectedCount < rows.length;\n });\n\n protected toggleAll(): void {\n if (this.selectionMode() !== 'multiple') return;\n const rows = this.filtered();\n if (this.headerChecked()) {\n // Deselect every currently-filtered row.\n const next = (this.selection() as any[]).filter(\n (s) => !rows.some((r) => this.equals(s, r)),\n );\n rows.forEach((r) => this.rowUnselect.emit(r));\n this.selection.set(next);\n } else {\n const current = Array.isArray(this.selection()) ? [...this.selection()] : [];\n for (const r of rows) {\n if (!current.some((s) => this.equals(s, r))) {\n current.push(r);\n this.rowSelect.emit(r);\n }\n }\n this.selection.set(current);\n }\n }\n\n protected onRowCheckboxClick(event: Event, row: any): void {\n event.stopPropagation();\n if (this.selectionMode() === 'single') {\n this.onRowClick(row);\n } else {\n this.toggleRowSelection(row);\n }\n }\n\n /** Enter/Space on a (single-mode) focusable row toggles its selection. */\n protected onRowKeydown(event: Event, row: any): void {\n if (this.selectionMode() !== 'single' || this.loading()) return;\n event.preventDefault();\n this.onRowClick(row);\n }\n\n private toggleRowSelection(row: any): void {\n const current = Array.isArray(this.selection()) ? [...this.selection()] : [];\n const idx = current.findIndex((s) => this.equals(s, row));\n if (idx >= 0) {\n current.splice(idx, 1);\n this.selection.set(current);\n this.rowUnselect.emit(row);\n } else {\n current.push(row);\n this.selection.set(current);\n this.rowSelect.emit(row);\n }\n }\n\n protected onRowClick(row: any): void {\n if (this.loading()) return;\n this.rowClick.emit(row);\n if (this.selectionMode() === 'single') {\n if (this.equals(this.selection(), row)) {\n this.selection.set(null);\n this.rowUnselect.emit(row);\n } else {\n this.selection.set(row);\n this.rowSelect.emit(row);\n }\n }\n }\n\n // --- paginator ------------------------------------------------------------\n protected onPageChange(state: SdsPaginatorState): void {\n this.pageChange.emit(state);\n if (this.lazy()) this.emitLazy();\n }\n\n private emitLazy(): void {\n this.lazyLoad.emit({\n first: this.first(),\n rows: this.pageRows(),\n sortField: this.sortField(),\n sortOrder: this.sortOrder(),\n globalFilter: this.filterText(),\n });\n }\n\n protected onFilterInput(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n // New query -> back to the first page.\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n // --- row expansion --------------------------------------------------------\n protected isExpanded(row: any): boolean {\n return this.expandedKeys().has(this.keyOf(row));\n }\n\n protected toggleExpand(row: any): void {\n const key = this.keyOf(row);\n const next = new Set(this.expandedKeys());\n if (next.has(key)) {\n next.delete(key);\n this.expandedKeys.set(next);\n this.rowCollapse.emit(row);\n } else {\n next.add(key);\n this.expandedKeys.set(next);\n this.rowExpand.emit(row);\n }\n }\n\n protected onExpanderClick(event: Event, row: any): void {\n // Keep the expander from triggering single-select row click.\n event.stopPropagation();\n this.toggleExpand(row);\n }\n\n /**\n * Stable per-row id for the expansion region, derived from the row identity\n * (dataKey value when set, else the row itself). Mirrors the accordion's\n * contentId pattern so the expander's aria-controls can point at the detail\n * region. Using keyOf (not $index) keeps the id stable across reorders.\n */\n protected rowDetailId(row: any): string {\n return `${this.tableId}-detail-${String(this.keyOf(row))}`;\n }\n\n // --- resizable columns ----------------------------------------------------\n private activeResizeCleanup: (() => void) | null = null;\n\n /** px override from a resize drag, else the column's declared width, else null. */\n protected columnStyleWidth(col: SdsTableColumn): string | null {\n const px = this.columnWidths()[col.field];\n if (px != null) return px + 'px';\n return col.width || null;\n }\n\n protected onResizeStart(event: PointerEvent, field: string): void {\n event.preventDefault();\n event.stopPropagation();\n const th = (event.target as HTMLElement).closest('th');\n if (!th) return;\n const startX = event.clientX;\n const startW = th.getBoundingClientRect().width;\n const move = (e: PointerEvent) => {\n const w = Math.max(60, Math.round(startW + (e.clientX - startX)));\n this.columnWidths.update((m) => ({ ...m, [field]: w }));\n };\n const up = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', up);\n this.activeResizeCleanup = null;\n };\n // Track for ngOnDestroy in case the pointer-up never lands.\n this.activeResizeCleanup = up;\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', up);\n }\n\n // --- reorderable columns --------------------------------------------------\n protected onColDragStart(i: number): void {\n this.dragColIndex.set(i);\n }\n\n protected onColDragEnd(): void {\n this.dragColIndex.set(null);\n }\n\n protected onColDragOver(e: DragEvent): void {\n e.preventDefault();\n }\n\n protected onColDrop(e: DragEvent, toIndex: number): void {\n e.preventDefault();\n const from = this.dragColIndex();\n if (from == null || from === toIndex) return;\n const cols = [...this.effectiveColumns()];\n const [moved] = cols.splice(from, 1);\n cols.splice(toIndex, 0, moved);\n this.columnOrder.set(cols);\n this.dragColIndex.set(null);\n this.colReorder.emit({ field: moved.field, fromIndex: from, toIndex });\n }\n\n // --- trackBy --------------------------------------------------------------\n protected trackRow(index: number, row: any): unknown {\n const k = this.dataKey();\n if (k && row && typeof row === 'object' && row[k] != null) return row[k];\n return index;\n }\n\n // --- styling --------------------------------------------------------------\n protected headCellClass(col?: SdsTableColumn): string {\n const align = ALIGN[col?.align ?? 'left'];\n return `${SIZES[this.size()].head} ${align} font-semibold`;\n }\n\n protected cellClass(col?: SdsTableColumn): string {\n const align = ALIGN[col?.align ?? 'left'];\n return `${SIZES[this.size()].cell} ${align} text-ink align-middle`;\n }\n\n protected rowClass(row: any, index: number): string {\n const parts: string[] = ['transition-colors'];\n if (this.gridlines()) parts.push('divide-x divide-border');\n if (this.isRowSelected(row)) {\n parts.push('bg-brand-50');\n } else if (this.striped() && index % 2 === 1) {\n parts.push('bg-muted/40');\n }\n if (this.hoverable() && !this.isRowSelected(row)) parts.push('hover:bg-muted/60');\n if (this.selectionMode() === 'single') {\n parts.push(\n 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-brand-500',\n );\n }\n return parts.join(' ');\n }\n\n protected checkboxClass(checked: boolean, indeterminate: boolean): string {\n return checked || indeterminate\n ? 'border-brand-600 bg-brand-600 text-white'\n : 'border-border bg-white';\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\n/**\n * Shared collapse state for the sidebar and its nav items.\n *\n * Provided in root so the sidebar, projected nav groups/items and any layout\n * code observe a single source of truth without prop-drilling. For apps with\n * multiple independent sidebars, provide it at a component level instead.\n */\n@Injectable({ providedIn: 'root' })\nexport class SidebarStore {\n /** Desktop rail state: collapsed to icon-only width (applies at ≥ lg). */\n readonly collapsed = signal(false);\n\n /** Mobile drawer state: whether the off-canvas sidebar is slid in (< lg). */\n readonly mobileOpen = signal(false);\n\n /** Toggle the desktop icon-rail. */\n toggle(): void {\n this.collapsed.update((v) => !v);\n }\n\n setCollapsed(value: boolean): void {\n this.collapsed.set(value);\n }\n\n /** Open the mobile drawer. */\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n /** Close the mobile drawer. */\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n\n /** Toggle the mobile drawer. */\n toggleMobile(): void {\n this.mobileOpen.update((v) => !v);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { SdsAvatar, SdsAvatarStatus } from '../avatar/sds-avatar';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SidebarStore } from '../sidebar/sidebar-store';\n\nexport interface SdsTopbarUser {\n name: string;\n initials?: string;\n status?: SdsAvatarStatus;\n}\n\n/**\n * Application top bar: brand gradient with a decorative wave, a logo slot,\n * the app name, and the signed-in user with a logout action.\n *\n * @example\n * <sds-topbar appName=\"WebApp\" [user]=\"user\" (logout)=\"signOut()\">\n * <img sdsLogo src=\"logo.svg\" alt=\"\" />\n * </sds-topbar>\n */\n@Component({\n selector: 'sds-topbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsAvatar, SdsIcon],\n host: { class: 'block' },\n template: `\n <header\n class=\"relative z-30 flex items-center justify-between overflow-hidden bg-linear-to-r from-brand-800 via-brand-700 to-brand-600 px-4 text-white sm:px-6\"\n style=\"height: var(--sds-topbar-h)\"\n >\n <!-- Decorative wave -->\n <svg\n class=\"pointer-events-none absolute inset-y-0 right-0 h-full w-2/3 min-w-[420px]\"\n viewBox=\"0 0 600 64\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M0,64 C150,64 130,6 340,6 C470,6 480,64 600,64 Z\"\n fill=\"white\"\n fill-opacity=\"0.05\"\n />\n <path\n d=\"M40,64 C210,64 190,18 400,18 C520,18 540,64 660,64\"\n stroke=\"white\"\n stroke-opacity=\"0.13\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M130,64 C300,64 280,2 480,2 C580,2 600,40 680,64\"\n stroke=\"white\"\n stroke-opacity=\"0.10\"\n stroke-width=\"1.5\"\n />\n </svg>\n\n <!-- Left: mobile menu button + logo + app name -->\n <div class=\"relative flex items-center gap-3\">\n @if (menuButton()) {\n <button\n type=\"button\"\n class=\"-ml-1 inline-flex h-9 w-9 items-center justify-center rounded-control text-white/85 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:hidden\"\n aria-label=\"Ouvrir le menu\"\n (click)=\"store.toggleMobile()\"\n >\n <sds-icon name=\"menu\" [size]=\"22\" />\n </button>\n }\n <ng-content select=\"[sdsLogo]\" />\n @if (appName()) {\n <span class=\"h-7 w-px bg-white/30\"></span>\n <span class=\"text-xl font-bold tracking-tight\">{{ appName() }}</span>\n }\n </div>\n\n <!-- Right: actions + user + logout -->\n <div class=\"relative flex items-center gap-3 sm:gap-4\">\n <ng-content select=\"[sdsActions]\" />\n @if (user(); as u) {\n <span class=\"hidden text-sm font-medium sm:block\">{{ u.name }}</span>\n <sds-avatar\n [name]=\"u.name\"\n [initials]=\"u.initials ?? ''\"\n [status]=\"u.status ?? 'online'\"\n [size]=\"38\"\n bgClass=\"bg-white/15\"\n />\n }\n @if (showLogout()) {\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-9 items-center justify-center rounded-control text-white/85 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40\"\n aria-label=\"Se déconnecter\"\n (click)=\"logout.emit()\"\n >\n <sds-icon name=\"log-out\" [size]=\"20\" />\n </button>\n }\n </div>\n </header>\n `,\n})\nexport class SdsTopbar {\n protected readonly store = inject(SidebarStore);\n\n readonly appName = input<string>('');\n readonly user = input<SdsTopbarUser | null>(null);\n readonly showLogout = input(true, { transform: booleanAttribute });\n /** Show the mobile hamburger that toggles the sidebar drawer (< lg). */\n readonly menuButton = input(true, { transform: booleanAttribute });\n\n readonly logout = output<void>();\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * App layout shell: a full-height column with the top bar across the top and a\n * row below holding the sidebar and the scrollable main content.\n *\n * @example\n * <sds-shell>\n * <sds-topbar sdsTopbar … />\n * <sds-sidebar sdsSidebar> … </sds-sidebar>\n * <!-- routed page content -->\n * <router-outlet />\n * </sds-shell>\n */\n@Component({\n selector: 'sds-shell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div class=\"flex h-screen flex-col overflow-hidden\">\n <ng-content select=\"[sdsTopbar]\" />\n <div class=\"flex min-h-0 flex-1\">\n <ng-content select=\"[sdsSidebar]\" />\n <main class=\"min-w-0 flex-1 overflow-y-auto bg-canvas\">\n <ng-content />\n </main>\n </div>\n </div>\n `,\n})\nexport class SdsShell {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * Collapsible navigation rail. Project <sds-nav-group>/<sds-nav-item> as the\n * default content, and pin a footer (e.g. search + version badge) via the\n * [sdsFooter] slot. Collapse state is shared through SidebarStore.\n *\n * @example\n * <sds-sidebar>\n * <sds-nav-group label=\"Membres\">\n * <sds-nav-item icon=\"user-plus\" label=\"Créer un membre\" link=\"/membres/new\" />\n * </sds-nav-group>\n * <div sdsFooter>…</div>\n * </sds-sidebar>\n */\n@Component({\n selector: 'sds-sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block h-full' },\n template: `\n <!-- Mobile backdrop (only when the drawer is open, < lg) -->\n @if (mobileOpen()) {\n <div\n class=\"fixed inset-0 z-40 bg-black/50 lg:hidden\"\n (click)=\"store.closeMobile()\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <!--\n Mobile (< lg): fixed off-canvas drawer that slides in from the left.\n Desktop (≥ lg): static, collapsible icon-rail (width via --sds-rail).\n -->\n <aside\n class=\"fixed inset-y-0 left-0 z-50 flex h-full w-[var(--sds-sidebar-w)] flex-col bg-brand-900 text-white transition-transform duration-200 ease-out lg:static lg:z-auto lg:w-[var(--sds-rail)] lg:translate-x-0 lg:transition-[width]\"\n [class]=\"mobileOpen() ? 'translate-x-0' : '-translate-x-full'\"\n [style.--sds-rail]=\"railWidth()\"\n >\n <!-- Header: collapse toggle (desktop) / close (mobile) -->\n <div\n class=\"flex items-center px-3\"\n style=\"height: 52px\"\n [class]=\"collapsed() ? 'justify-end lg:justify-center' : 'justify-end'\"\n >\n <button\n type=\"button\"\n class=\"hidden h-9 w-9 items-center justify-center rounded-control text-white/70 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:inline-flex\"\n [attr.aria-label]=\"collapsed() ? 'Déplier le menu' : 'Replier le menu'\"\n [attr.aria-expanded]=\"!collapsed()\"\n (click)=\"store.toggle()\"\n >\n <sds-icon\n [name]=\"collapsed() ? 'panel-left-open' : 'panel-left-close'\"\n [size]=\"20\"\n />\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-9 items-center justify-center rounded-control text-white/70 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:hidden\"\n aria-label=\"Fermer le menu\"\n (click)=\"store.closeMobile()\"\n >\n <sds-icon name=\"x\" [size]=\"20\" />\n </button>\n </div>\n\n <!-- Navigation -->\n <nav class=\"flex-1 overflow-y-auto overflow-x-hidden px-3 pb-4\">\n <ng-content />\n </nav>\n\n <!-- Footer (search, version, …) -->\n <div class=\"px-3 pb-4 pt-2\">\n <ng-content select=\"[sdsFooter]\" />\n </div>\n </aside>\n `,\n})\nexport class SdsSidebar {\n protected readonly store = inject(SidebarStore);\n protected readonly collapsed = this.store.collapsed;\n protected readonly mobileOpen = this.store.mobileOpen;\n\n /** Desktop rail width (full vs. collapsed); mobile always uses full width. */\n protected readonly railWidth = computed(() =>\n this.collapsed()\n ? 'var(--sds-sidebar-w-collapsed)'\n : 'var(--sds-sidebar-w)',\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * Groups nav items under an optional uppercase section label. The label is\n * hidden (replaced by a divider) when the sidebar is collapsed.\n */\n@Component({\n selector: 'sds-nav-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div class=\"mt-5 first:mt-3\">\n @if (label()) {\n @if (!collapsed()) {\n <p\n class=\"mb-1.5 px-3 text-[11px] font-semibold uppercase tracking-wider text-white/60\"\n >\n {{ label() }}\n </p>\n } @else {\n <div class=\"mx-3 mb-2 mt-2 h-px bg-white/10\"></div>\n }\n }\n <div class=\"flex flex-col gap-1\">\n <ng-content />\n </div>\n </div>\n `,\n})\nexport class SdsNavGroup {\n private readonly store = inject(SidebarStore);\n\n readonly label = input<string>('');\n\n protected readonly collapsed = this.store.collapsed;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * A single sidebar navigation entry. Renders an anchor when [link] is set\n * (with automatic active state via routerLinkActive) or a button otherwise.\n *\n * Requires the host application to provide the Angular Router (`provideRouter`),\n * as it depends on RouterLink/RouterLinkActive even when used as a button.\n *\n * @example\n * <sds-nav-item icon=\"home\" label=\"Accueil\" link=\"/\" [exact]=\"true\" />\n */\n@Component({\n selector: 'sds-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, RouterLink, RouterLinkActive, SdsIcon],\n host: { class: 'block' },\n template: `\n @if (link() !== null) {\n <a\n [routerLink]=\"link()\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"{ exact: exact() }\"\n [class]=\"itemClass(rla.isActive || active())\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-label]=\"collapsed() ? label() : null\"\n [attr.aria-current]=\"rla.isActive || active() ? 'page' : null\"\n (click)=\"store.closeMobile()\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"itemClass(active())\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-label]=\"collapsed() ? label() : null\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n (click)=\"select.emit(); store.closeMobile()\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </button>\n }\n\n <ng-template #content>\n @if (icon()) {\n <sds-icon [name]=\"icon()!\" [size]=\"20\" class=\"shrink-0\" />\n }\n <!-- Label is hidden only on the collapsed desktop rail; always shown in the mobile drawer. -->\n <span class=\"truncate\" [class]=\"collapsed() ? 'lg:hidden' : ''\">{{ label() }}</span>\n </ng-template>\n `,\n})\nexport class SdsNavItem {\n protected readonly store = inject(SidebarStore);\n\n readonly icon = input<SdsIconName | null>(null);\n readonly label = input.required<string>();\n /** Router link target; when null, the item behaves as a button. */\n readonly link = input<string | unknown[] | null>(null);\n readonly exact = input(false, { transform: booleanAttribute });\n /** Manual active state (combined with routerLinkActive when a link is set). */\n readonly active = input(false, { transform: booleanAttribute });\n\n readonly select = output<void>();\n\n protected readonly collapsed = this.store.collapsed;\n\n protected itemClass(isActive: boolean): string {\n const base =\n 'group flex w-full items-center gap-3 rounded-control px-3 text-sm font-medium ' +\n 'transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-white/40 ' +\n (this.collapsed() ? 'h-10 lg:justify-center' : 'h-10');\n const state = isActive\n ? 'bg-brand-500 text-white shadow-sm'\n : 'text-white/70 hover:bg-white/8 hover:text-white';\n return `${base} ${state}`;\n }\n}\n","/*\n * Public API Surface of saitech-design-system — the Saitech / App design system.\n */\n\n// Primitives\nexport * from './lib/icon/icon-registry';\nexport * from './lib/icon/sds-icon';\nexport * from './lib/button/sds-button';\nexport * from './lib/input/sds-input';\nexport * from './lib/textarea/sds-textarea';\nexport * from './lib/toggle-switch/sds-toggle-switch';\nexport * from './lib/checkbox/sds-checkbox';\nexport * from './lib/avatar/sds-avatar';\nexport * from './lib/badge/sds-badge';\nexport * from './lib/card/sds-card';\nexport * from './lib/datepicker/date-utils';\nexport * from './lib/datepicker/sds-calendar';\nexport * from './lib/datepicker/sds-date-picker';\nexport * from './lib/select/sds-select';\nexport * from './lib/select/sds-multi-select';\nexport * from './lib/phone-input/phone-countries';\nexport * from './lib/phone-input/sds-phone-input';\nexport * from './lib/paginator/sds-paginator';\nexport * from './lib/tabs/sds-tabs-store';\nexport * from './lib/tabs/sds-tabs';\nexport * from './lib/tabs/sds-tab-list';\nexport * from './lib/tabs/sds-tab';\nexport * from './lib/tabs/sds-tab-panels';\nexport * from './lib/tabs/sds-tab-panel';\nexport * from './lib/accordion/sds-accordion-store';\nexport * from './lib/accordion/sds-accordion';\nexport * from './lib/accordion/sds-accordion-panel';\nexport * from './lib/accordion/sds-accordion-header';\nexport * from './lib/accordion/sds-accordion-content';\nexport * from './lib/table/sds-table-cell';\nexport * from './lib/table/sds-table-row-expansion';\nexport * from './lib/table/sds-table';\n\n// Layout\nexport * from './lib/topbar/sds-topbar';\nexport * from './lib/shell/sds-shell';\nexport * from './lib/sidebar/sidebar-store';\nexport * from './lib/sidebar/sds-sidebar';\nexport * from './lib/sidebar/sds-nav-group';\nexport * from './lib/sidebar/sds-nav-item';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VARIANTS","SIZES","nextId"],"mappings":"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"}
1
+ {"version":3,"file":"besaitech-ng-design-system.mjs","sources":["../../../projects/saitech-design-system/src/lib/icon/icon-registry.ts","../../../projects/saitech-design-system/src/lib/icon/sds-icon.ts","../../../projects/saitech-design-system/src/lib/button/sds-button.ts","../../../projects/saitech-design-system/src/lib/input/sds-input.ts","../../../projects/saitech-design-system/src/lib/textarea/sds-textarea.ts","../../../projects/saitech-design-system/src/lib/toggle-switch/sds-toggle-switch.ts","../../../projects/saitech-design-system/src/lib/checkbox/sds-checkbox.ts","../../../projects/saitech-design-system/src/lib/avatar/sds-avatar.ts","../../../projects/saitech-design-system/src/lib/badge/sds-badge.ts","../../../projects/saitech-design-system/src/lib/card/sds-card.ts","../../../projects/saitech-design-system/src/lib/datepicker/date-utils.ts","../../../projects/saitech-design-system/src/lib/datepicker/sds-calendar.ts","../../../projects/saitech-design-system/src/lib/datepicker/sds-date-picker.ts","../../../projects/saitech-design-system/src/lib/select/sds-select.ts","../../../projects/saitech-design-system/src/lib/select/sds-multi-select.ts","../../../projects/saitech-design-system/src/lib/phone-input/phone-countries.ts","../../../projects/saitech-design-system/src/lib/phone-input/sds-phone-input.ts","../../../projects/saitech-design-system/src/lib/paginator/sds-paginator.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tabs-store.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tabs.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab-list.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab-panels.ts","../../../projects/saitech-design-system/src/lib/tabs/sds-tab-panel.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-store.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-panel.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-header.ts","../../../projects/saitech-design-system/src/lib/accordion/sds-accordion-content.ts","../../../projects/saitech-design-system/src/lib/table/sds-table-cell.ts","../../../projects/saitech-design-system/src/lib/table/sds-table-row-expansion.ts","../../../projects/saitech-design-system/src/lib/table/sds-table.ts","../../../projects/saitech-design-system/src/lib/sidebar/sidebar-store.ts","../../../projects/saitech-design-system/src/lib/topbar/sds-topbar.ts","../../../projects/saitech-design-system/src/lib/shell/sds-shell.ts","../../../projects/saitech-design-system/src/lib/sidebar/sds-sidebar.ts","../../../projects/saitech-design-system/src/lib/sidebar/sds-nav-group.ts","../../../projects/saitech-design-system/src/lib/sidebar/sds-nav-item.ts","../../../projects/saitech-design-system/src/public-api.ts","../../../projects/saitech-design-system/src/besaitech-ng-design-system.ts"],"sourcesContent":["/**\n * Curated set of line icons (Lucide-style, 24x24 viewBox, stroke-based).\n * Each entry holds only the inner SVG markup; the <sds-icon> component wraps it.\n * Add new icons here and they become available everywhere via name=\"...\".\n */\nexport const SDS_ICONS = {\n home: '<path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/><polyline points=\"9 22 9 12 15 12 15 22\"/>',\n 'user-plus':\n '<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><line x1=\"19\" x2=\"19\" y1=\"8\" y2=\"14\"/><line x1=\"22\" x2=\"16\" y1=\"11\" y2=\"11\"/>',\n hand: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-hand-icon lucide-hand\"><path d=\"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2\"/><path d=\"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2\"/><path d=\"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8\"/><path d=\"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\"/></svg>',\n users:\n '<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M22 21v-2a4 4 0 0 0-3-3.87\"/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"/>',\n 'building-2':\n '<path d=\"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z\"/><path d=\"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2\"/><path d=\"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2\"/><path d=\"M10 6h4\"/><path d=\"M10 10h4\"/><path d=\"M10 14h4\"/><path d=\"M10 18h4\"/>',\n package:\n '<path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\"/><path d=\"M12 22V12\"/><polyline points=\"3.29 7 12 12 20.71 7\"/><path d=\"m7.5 4.27 9 5.15\"/>',\n 'package-plus':\n '<path d=\"M16 16h6\"/><path d=\"M19 13v6\"/><path d=\"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0\"/><path d=\"m7.5 4.27 9 5.15\"/><polyline points=\"3.29 7 12 12 20.71 7\"/><path d=\"M12 22V12\"/>',\n 'package-open':\n '<path d=\"M12 22v-9\"/><path d=\"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z\"/><path d=\"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13\"/><path d=\"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36z\"/>',\n 'rotate-ccw':\n '<path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/><path d=\"M3 3v5h5\"/>',\n 'bar-chart-3':\n '<path d=\"M3 3v18h18\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n 'log-out':\n '<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/><polyline points=\"16 17 21 12 16 7\"/><line x1=\"21\" x2=\"9\" y1=\"12\" y2=\"12\"/>',\n 'panel-left-close':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/><path d=\"m16 15-3-3 3-3\"/>',\n 'panel-left-open':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/><path d=\"m14 9 3 3-3 3\"/>',\n 'panel-left':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M9 3v18\"/>',\n calendar:\n '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n 'chevron-right': '<path d=\"m9 18 6-6-6-6\"/>',\n 'chevron-left': '<path d=\"m15 18-6-6 6-6\"/>',\n 'chevron-down': '<path d=\"m6 9 6 6 6-6\"/>',\n 'chevrons-left': '<path d=\"m11 17-5-5 5-5\"/><path d=\"m18 17-5-5 5-5\"/>',\n 'chevrons-right': '<path d=\"m6 17 5-5-5-5\"/><path d=\"m13 17 5-5-5-5\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n 'alert-circle':\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n type: '<polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" x2=\"15\" y1=\"20\" y2=\"20\"/><line x1=\"12\" x2=\"12\" y1=\"4\" y2=\"20\"/>',\n tag: '<path d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"/><circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n square: '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/>',\n 'circle-user':\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662\"/>',\n 'layout-grid':\n '<rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\"/><rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\"/>',\n 'panels-top-left':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M9 21V9\"/>',\n 'panel-top': '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/>',\n 'rows-3':\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M3 15h18\"/>',\n 'book-open':\n '<path d=\"M12 7v14\"/><path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/>',\n palette:\n '<circle cx=\"13.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"17.5\" cy=\"10.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"8.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/><circle cx=\"6.5\" cy=\"12.5\" r=\".5\" fill=\"currentColor\"/><path d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.555C21.965 6.012 17.461 2 12 2z\"/>',\n bell: '<path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\"/><path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\"/>',\n phone:\n '<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"/>',\n settings:\n '<path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n 'align-left': '<path d=\"M15 12H3\"/><path d=\"M17 18H3\"/><path d=\"M21 6H3\"/>',\n 'toggle-left':\n '<rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"6\" ry=\"6\"/><circle cx=\"8\" cy=\"12\" r=\"2\"/>',\n 'arrow-up': '<path d=\"m5 12 7-7 7 7\"/><path d=\"M12 19V5\"/>',\n 'arrow-down': '<path d=\"M12 5v14\"/><path d=\"m19 12-7 7-7-7\"/>',\n 'chevrons-up-down': '<path d=\"m7 15 5 5 5-5\"/><path d=\"m7 9 5-5 5 5\"/>',\n filter: '<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>',\n table:\n '<path d=\"M12 3v18\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M3 15h18\"/>',\n eye: '<path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n // Pairs with `eye` for password reveal. Without it a show/hide toggle has no second state to draw,\n // and aria-pressed alone leaves sighted users with no visible change.\n 'eye-off':\n '<path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\"/><path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\"/><path d=\"m2 2 20 20\"/><path d=\"M14.12 14.12a3 3 0 1 1-4.24-4.24\"/>',\n user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n 'check-circle': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n 'arrows-clockwise':\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>',\n menu: '<line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/>',\n 'file-text':\n '<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/><path d=\"M10 9H8\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/>',\n hash: '<line x1=\"4\" x2=\"20\" y1=\"9\" y2=\"9\"/><line x1=\"4\" x2=\"20\" y1=\"15\" y2=\"15\"/><line x1=\"10\" x2=\"8\" y1=\"3\" y2=\"21\"/><line x1=\"16\" x2=\"14\" y1=\"3\" y2=\"21\"/>',\n 'map-pin':\n '<path d=\"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/>',\n inbox:\n '<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"/><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"/>',\n 'arrow-right': '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n 'refresh-cw':\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>',\n 'loader-circle': '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n} as const;\n\nexport type SdsIconName = keyof typeof SDS_ICONS;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { SDS_ICONS, SdsIconName } from './icon-registry';\n\nexport type SdsIconSize = 'sm' | 'md' | 'lg' | 'xl';\n\nconst SIZE_PX: Record<SdsIconSize, number> = { sm: 16, md: 20, lg: 24, xl: 32 };\n\n/** Accept a pixel number, a numeric string (\"18\"), or a size keyword (\"sm\"). */\nfunction toIconPx(value: number | string): number {\n if (typeof value === 'number') return value;\n const n = Number(value);\n return Number.isNaN(n) ? (SIZE_PX[value as SdsIconSize] ?? 20) : n;\n}\n\n/**\n * Inline SVG icon backed by a curated, dependency-free registry.\n *\n * @example\n * <sds-icon name=\"search\" />\n * <sds-icon name=\"home\" [size]=\"18\" />\n */\n@Component({\n selector: 'sds-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '',\n host: {\n class: 'sds-icon inline-flex shrink-0 items-center justify-center',\n '[style.width.px]': 'size()',\n '[style.height.px]': 'size()',\n '[innerHTML]': 'svg()',\n '[attr.aria-hidden]': '\"true\"',\n },\n})\nexport class SdsIcon {\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Icon identifier from the registry. */\n readonly name = input.required<SdsIconName>();\n /** Square size: a pixel number, a numeric string, or a keyword (sm·md·lg·xl). */\n readonly size = input(20, { transform: toIconPx });\n /** Stroke width of the line icon. */\n readonly strokeWidth = input<number>(2);\n\n protected readonly svg = computed<SafeHtml>(() => {\n const inner = SDS_ICONS[this.name()] ?? '';\n const markup =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" ` +\n `width=\"100%\" height=\"100%\" fill=\"none\" stroke=\"currentColor\" ` +\n `stroke-width=\"${this.strokeWidth()}\" stroke-linecap=\"round\" ` +\n `stroke-linejoin=\"round\">${inner}</svg>`;\n return this.sanitizer.bypassSecurityTrustHtml(markup);\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n isDevMode,\n} from '@angular/core';\n\nexport type SdsButtonVariant =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'ghost'\n | 'danger';\nexport type SdsButtonSize = 'sm' | 'md' | 'lg';\n\nconst BASE =\n 'inline-flex items-center justify-center gap-2 font-medium rounded-control ' +\n 'transition-colors duration-150 select-none whitespace-nowrap cursor-pointer ' +\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-brand-500 disabled:opacity-50 disabled:pointer-events-none';\n\nconst VARIANTS: Record<SdsButtonVariant, string> = {\n primary: 'bg-brand-600 text-white shadow-sm hover:bg-brand-700 active:bg-brand-800',\n secondary:\n 'bg-white text-ink border border-border shadow-sm hover:bg-muted active:bg-brand-50',\n tertiary: 'bg-brand-50 text-brand-700 hover:bg-brand-100 active:bg-brand-200/70',\n ghost: 'bg-transparent text-ink-soft hover:bg-black/5 active:bg-black/10',\n danger: 'bg-danger text-white shadow-sm hover:brightness-95 active:brightness-90',\n};\n\nconst SIZES: Record<SdsButtonSize, string> = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-5 text-base',\n};\n\nconst ICON_ONLY: Record<SdsButtonSize, string> = {\n sm: 'w-8 px-0',\n md: 'w-10 px-0',\n lg: 'w-12 px-0',\n};\n\n/**\n * Brand button. Project an <sds-icon sdsIconLeading/> or <sds-icon sdsIconTrailing/>\n * for icons, or set [iconOnly]=\"true\" for a square icon button.\n *\n * @example\n * <sds-button variant=\"primary\" (click)=\"save()\">Enregistrer</sds-button>\n */\n@Component({\n selector: 'sds-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClass()',\n '[attr.aria-disabled]': '(disabled() || loading()) ? \"true\" : null',\n '[style.pointer-events]': '(disabled() || loading()) ? \"none\" : null',\n '(click)': 'onHostClick($event)',\n },\n template: `\n <button\n [type]=\"type()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [class]=\"classes()\"\n >\n @if (loading()) {\n <span class=\"sds-spinner\" aria-hidden=\"true\"></span>\n } @else {\n <ng-content select=\"[sdsIconLeading]\" />\n }\n <ng-content />\n <ng-content select=\"[sdsIconTrailing]\" />\n </button>\n `,\n styles: `\n .sds-spinner {\n width: 1em;\n height: 1em;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: 9999px;\n animation: sds-spin 0.6s linear infinite;\n }\n @keyframes sds-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n})\nexport class SdsButton {\n readonly variant = input<SdsButtonVariant>('primary');\n readonly size = input<SdsButtonSize>('md');\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n /** Full-width button. */\n readonly block = input(false, { transform: booleanAttribute });\n /** Square icon-only button (provide [ariaLabel] for accessibility). */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null);\n\n constructor() {\n // Dev-only guard: icon-only buttons need an explicit accessible name\n // (the projected icon is aria-hidden, so there is no other source).\n if (isDevMode()) {\n effect(() => {\n if (this.iconOnly() && !this.ariaLabel()) {\n console.warn(\n 'sds-button: icon-only buttons require [ariaLabel] for an accessible name.',\n );\n }\n });\n }\n }\n\n /** Block the documented host-bound (click)/routerLink when inert. */\n protected onHostClick(event: Event): void {\n if (this.disabled() || this.loading()) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n }\n\n protected readonly hostClass = computed(() =>\n this.block() ? 'flex w-full' : 'inline-flex',\n );\n\n protected readonly classes = computed(() => {\n const size = this.size();\n return [\n BASE,\n VARIANTS[this.variant()],\n SIZES[size],\n this.iconOnly() ? ICON_ONLY[size] : '',\n this.block() ? 'w-full' : '',\n ]\n .filter(Boolean)\n .join(' ');\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\n\nexport type SdsInputSize = 'sm' | 'md' | 'lg';\nexport type SdsInputAppearance = 'default' | 'on-brand';\nexport type SdsInputType =\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'search'\n | 'url';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsInputSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\n/**\n * Text input with label, hint/error, optional leading/trailing icons and a\n * clear button. Implements ControlValueAccessor — use with reactive forms or\n * [(ngModel)]. The `on-brand` appearance is tuned for dark surfaces (e.g. the\n * sidebar search field).\n */\n@Component({\n selector: 'sds-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsInput),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label\n [for]=\"inputId\"\n class=\"mb-1.5 block text-sm font-medium\"\n [class]=\"onBrand() ? 'text-white/90' : 'text-ink'\"\n >\n {{ label() }}\n </label>\n }\n\n <div\n class=\"relative flex items-center rounded-control border transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n @if (leadingIcon()) {\n <sds-icon\n [name]=\"leadingIcon()!\"\n [size]=\"18\"\n class=\"pointer-events-none absolute left-3 opacity-70\"\n />\n }\n\n <input\n [id]=\"inputId\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"value()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n class=\"w-full bg-transparent outline-none placeholder:text-current/50 disabled:cursor-not-allowed\"\n [class]=\"fieldPadding()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n\n @if (clearable() && value() && !isDisabled()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer\"\n class=\"absolute right-2.5 inline-flex h-6 w-6 items-center justify-center rounded-full opacity-60 hover:opacity-100 hover:bg-black/5\"\n (click)=\"clear()\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n } @else if (trailingAction()) {\n <button\n type=\"button\"\n [attr.aria-label]=\"trailingActionLabel() || null\"\n [attr.aria-pressed]=\"trailingActionPressed()\"\n [attr.aria-controls]=\"inputId\"\n class=\"absolute right-2.5 inline-flex h-7 w-7 items-center justify-center rounded-full\n opacity-70 hover:opacity-100 hover:bg-black/5\"\n (click)=\"trailingActionClick.emit()\"\n >\n <sds-icon [name]=\"trailingAction()!\" [size]=\"18\" />\n </button>\n } @else if (trailingIcon()) {\n <sds-icon\n [name]=\"trailingIcon()!\"\n [size]=\"18\"\n class=\"pointer-events-none absolute right-3 opacity-70\"\n />\n }\n </div>\n\n @if (error()) {\n <p [id]=\"inputId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p\n [id]=\"inputId + '-hint'\"\n class=\"mt-1.5 text-xs\"\n [class]=\"onBrand() ? 'text-white/60' : 'text-ink-faint'\"\n >\n {{ hint() }}\n </p>\n }\n `,\n})\nexport class SdsInput implements ControlValueAccessor {\n readonly inputId = `sds-input-${nextId++}`;\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly type = input<SdsInputType>('text');\n readonly size = input<SdsInputSize>('md');\n readonly appearance = input<SdsInputAppearance>('default');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly leadingIcon = input<SdsIconName | null>(null);\n readonly trailingIcon = input<SdsIconName | null>(null);\n\n /**\n * A CLICKABLE trailing icon, for the affordances that belong to the field itself — password reveal\n * above all. Distinct from {@link trailingIcon}, which is decorative and explicitly\n * `pointer-events-none`; a consumer who needed a working control previously had to abandon\n * `sds-input` and rebuild the whole field, losing the label/error/aria wiring with it.\n *\n * Always pair it with {@link trailingActionLabel} — an icon-only button with no accessible name is\n * unusable by a screen reader. For a toggle, also bind {@link trailingActionPressed}.\n */\n readonly trailingAction = input<SdsIconName | null>(null);\n\n /** Accessible name for {@link trailingAction}. Translate it in the consuming app. */\n readonly trailingActionLabel = input<string>('');\n\n /** `aria-pressed` for a toggling action (e.g. show/hide password). Null renders no attribute. */\n readonly trailingActionPressed = input<boolean | null>(null);\n\n readonly trailingActionClick = output<void>();\n\n /** Current value (driven by CVA + user input). */\n protected readonly value = signal('');\n private readonly cvaDisabled = signal(false);\n\n protected readonly onBrand = computed(() => this.appearance() === 'on-brand');\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n protected readonly describedBy = computed(() => {\n if (this.error()) return `${this.inputId}-err`;\n if (this.hint()) return `${this.inputId}-hint`;\n return null;\n });\n\n protected readonly fieldPadding = computed(() => {\n const left = this.leadingIcon() ? 'pl-10' : 'pl-3.5';\n const right =\n this.trailingIcon() || this.clearable() || this.trailingAction() ? 'pr-10' : 'pr-3.5';\n return `${left} ${right}`;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n\n if (this.onBrand()) {\n parts.push('bg-white/10 text-white');\n parts.push(\n this.error()\n ? 'border-danger focus-within:ring-2 focus-within:ring-danger/30'\n : 'border-white/15 focus-within:border-white/40 focus-within:ring-2 focus-within:ring-white/20',\n );\n } else {\n parts.push('bg-white text-ink');\n parts.push(\n this.error()\n ? 'border-danger focus-within:border-danger focus-within:ring-2 focus-within:ring-danger/25'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n }\n return parts.join(' ');\n });\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).value;\n this.value.set(next);\n this.onChange(next);\n }\n\n protected clear(): void {\n this.value.set('');\n this.onChange('');\n this.onTouched();\n }\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n input,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nexport type SdsTextareaSize = 'sm' | 'md' | 'lg';\nexport type SdsTextareaResize = 'none' | 'vertical' | 'both';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsTextareaSize, string> = {\n sm: 'text-sm px-3 py-2',\n md: 'text-sm px-3.5 py-2.5',\n lg: 'text-base px-4 py-3',\n};\n\n/**\n * Multi-line text field with label, hint/error, character counter and optional\n * auto-resize. Implements ControlValueAccessor — use with reactive forms or\n * [(ngModel)].\n */\n@Component({\n selector: 'sds-textarea',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsTextarea),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label [for]=\"fieldId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <textarea\n #field\n [id]=\"fieldId\"\n [value]=\"value()\"\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n [attr.maxlength]=\"maxLength() || null\"\n [readonly]=\"readonly() || null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [style.resize]=\"autoResize() ? 'none' : resize()\"\n [class]=\"fieldClasses()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n ></textarea>\n\n @if (hasCounter()) {\n <div class=\"mt-1.5 flex items-start gap-2 text-xs\">\n @if (error()) {\n <p [id]=\"fieldId + '-err'\" class=\"flex-1 font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"flex-1 text-ink-faint\">\n {{ hint() }}\n </p>\n } @else {\n <span class=\"flex-1\"></span>\n }\n <span\n [id]=\"fieldId + '-count'\"\n aria-live=\"polite\"\n [attr.aria-label]=\"countLabel()\"\n class=\"shrink-0 tabular-nums text-ink-faint\"\n >\n {{ count() }}{{ maxLength() ? ' / ' + maxLength() : '' }}\n </span>\n </div>\n } @else if (error()) {\n <p [id]=\"fieldId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">\n {{ hint() }}\n </p>\n }\n `,\n})\nexport class SdsTextarea implements ControlValueAccessor {\n readonly fieldId = `sds-textarea-${nextId++}`;\n\n private readonly field =\n viewChild<ElementRef<HTMLTextAreaElement>>('field');\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsTextareaSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n /** Minimum visible rows. */\n readonly rows = input(3, { transform: numberAttribute });\n /** Grow the field to fit its content as the user types. */\n readonly autoResize = input(false, { transform: booleanAttribute });\n /** Hard character cap; 0 means no limit. */\n readonly maxLength = input(0, { transform: numberAttribute });\n /** Show a character counter row. */\n readonly showCount = input(false, { transform: booleanAttribute });\n readonly resize = input<SdsTextareaResize>('vertical');\n\n /** Current value (driven by CVA + user input). */\n protected readonly value = signal('');\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n protected readonly count = computed(() => this.value().length);\n\n protected readonly hasCounter = computed(\n () => this.showCount() || this.maxLength() > 0,\n );\n\n /** Spoken description of the counter for assistive tech. */\n protected readonly countLabel = computed(() =>\n this.maxLength()\n ? `${this.count()} sur ${this.maxLength()} caractères utilisés`\n : `${this.count()} caractère(s)`,\n );\n\n protected readonly describedBy = computed(() => {\n const ids: string[] = [];\n if (this.error()) ids.push(`${this.fieldId}-err`);\n else if (this.hint()) ids.push(`${this.fieldId}-hint`);\n if (this.hasCounter()) ids.push(`${this.fieldId}-count`);\n return ids.length ? ids.join(' ') : null;\n });\n\n protected readonly fieldClasses = computed(() => {\n const parts = [\n 'block w-full rounded-control border bg-white text-ink outline-none transition-colors placeholder:text-ink-faint',\n SIZES[this.size()],\n ];\n\n if (this.autoResize()) parts.push('overflow-hidden');\n\n parts.push(\n this.error()\n ? 'border-danger focus:border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-border focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n\n return parts.join(' ');\n });\n\n constructor() {\n // Drive auto-resize reactively from the value signal. This runs once after\n // the initial render and again whenever the value changes (user input or\n // programmatic writeValue), without accumulating one-shot render hooks.\n afterRenderEffect(() => {\n this.value();\n if (this.autoResize()) this.resizeToContent();\n });\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n // Auto-resize is handled reactively by the afterRenderEffect in the\n // constructor, which re-runs whenever this signal changes.\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLTextAreaElement).value;\n this.value.set(next);\n this.onChange(next);\n if (this.autoResize()) this.resizeToContent();\n }\n\n private resizeToContent(): void {\n const el = this.field()?.nativeElement;\n if (!el) return;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n isDevMode,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\n\nexport type SdsToggleSwitchSize = 'sm' | 'md' | 'lg';\n\nlet nextId = 0;\n\ninterface ToggleSizing {\n /** Track width/height. */\n track: string;\n /** Knob width/height. */\n knob: string;\n /** Knob translate distance when checked. */\n on: string;\n /** Icon size in pixels. */\n icon: number;\n}\n\nconst SIZES: Record<SdsToggleSwitchSize, ToggleSizing> = {\n sm: { track: 'h-5 w-9', knob: 'h-4 w-4', on: 'translate-x-4', icon: 11 },\n md: { track: 'h-6 w-11', knob: 'h-5 w-5', on: 'translate-x-5', icon: 13 },\n lg: { track: 'h-7 w-[3.4rem]', knob: 'h-6 w-6', on: 'translate-x-7', icon: 15 },\n};\n\n/**\n * On/off switch styled as a sliding toggle. Implements ControlValueAccessor —\n * use with reactive forms or [(ngModel)]. Supports an optional visible label,\n * custom `trueValue`/`falseValue`, and optional knob icons for the on/off\n * states.\n */\n@Component({\n selector: 'sds-toggle-switch',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsToggleSwitch),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n <div class=\"flex items-center gap-3\">\n <button\n type=\"button\"\n role=\"switch\"\n [id]=\"fieldId\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-label]=\"!label() ? (ariaLabel() || null) : null\"\n [attr.aria-labelledby]=\"label() ? fieldId + '-label' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n class=\"relative inline-flex shrink-0 cursor-pointer items-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60\"\n [class]=\"trackClasses()\"\n (click)=\"toggle()\"\n (keydown.space)=\"onSpace($event)\"\n >\n <span\n class=\"pointer-events-none inline-flex items-center justify-center rounded-full bg-white shadow-sm transition-transform\"\n [class]=\"knobClasses()\"\n >\n @if (checked() && onIcon()) {\n <sds-icon\n [name]=\"onIcon()!\"\n [size]=\"sizing().icon\"\n class=\"text-brand-600\"\n />\n } @else if (!checked() && offIcon()) {\n <sds-icon\n [name]=\"offIcon()!\"\n [size]=\"sizing().icon\"\n class=\"text-ink-faint\"\n />\n }\n </span>\n </button>\n\n @if (label()) {\n <span\n [id]=\"fieldId + '-label'\"\n class=\"select-none text-sm font-medium text-ink\"\n [class.cursor-pointer]=\"!isDisabled()\"\n [class.cursor-not-allowed]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n {{ label() }}\n </span>\n }\n </div>\n\n @if (error()) {\n <p [id]=\"fieldId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ error() }}\n </p>\n } @else if (hint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">\n {{ hint() }}\n </p>\n }\n `,\n})\nexport class SdsToggleSwitch implements ControlValueAccessor {\n readonly fieldId = `sds-toggle-switch-${nextId++}`;\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly size = input<SdsToggleSwitchSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n /** Value emitted/stored when the switch is on. */\n readonly trueValue = input<unknown>(true);\n /** Value emitted/stored when the switch is off. */\n readonly falseValue = input<unknown>(false);\n /** Icon shown on the knob when checked. */\n readonly onIcon = input<SdsIconName | null>(null);\n /** Icon shown on the knob when unchecked. */\n readonly offIcon = input<SdsIconName | null>(null);\n readonly hint = input<string>('');\n readonly error = input<string>('');\n\n /**\n * Current value (driven by CVA). Initialized to a stable literal off-state\n * rather than reading falseValue() in the field initializer — a signal input\n * read here always returns its declared default, so capturing it would ignore\n * a custom [falseValue] and is non-reactive. The off-state is resolved live\n * against trueValue() in checked() and against falseValue() in toggle().\n */\n protected readonly value = signal<unknown>(false);\n private readonly cvaDisabled = signal(false);\n\n protected readonly checked = computed(\n () => this.value() === this.trueValue(),\n );\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n protected readonly sizing = computed(() => SIZES[this.size()]);\n\n protected readonly describedBy = computed(() => {\n if (this.error()) return `${this.fieldId}-err`;\n if (this.hint()) return `${this.fieldId}-hint`;\n return null;\n });\n\n protected readonly trackClasses = computed(() => {\n const parts = [this.sizing().track];\n parts.push(this.checked() ? 'bg-brand-600' : 'bg-black/15');\n return parts.join(' ');\n });\n\n protected readonly knobClasses = computed(() => {\n const parts = [this.sizing().knob];\n parts.push(this.checked() ? this.sizing().on : 'translate-x-0.5');\n return parts.join(' ');\n });\n\n constructor() {\n // Dev-only guard: a toggle is effectively icon-only (no intrinsic text), so\n // without a visible [label] or an explicit [ariaLabel] the switch ships with\n // no accessible name. Mirrors the sds-button icon-only guard.\n if (isDevMode()) {\n effect(() => {\n if (!this.label() && !this.ariaLabel()) {\n console.warn(\n 'sds-toggle-switch: provide [label] or [ariaLabel] for an accessible name.',\n );\n }\n });\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: unknown) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n // A null/undefined write (initial bind with no model, or reset()) means the\n // control is unset — resolve it to the configured off value so a custom\n // [falseValue] is honored and checked() renders off consistently.\n this.value.set(value ?? this.falseValue());\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.setValue(this.checked() ? this.falseValue() : this.trueValue());\n }\n\n protected onSpace(event: Event): void {\n event.preventDefault();\n this.toggle();\n }\n\n private setValue(next: unknown): void {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\n\nexport type SdsCheckboxSize = 'sm' | 'md';\n\nlet nextId = 0;\n\n/**\n * Boolean checkbox. Implements ControlValueAccessor — use with reactive forms\n * or `[(ngModel)]`. Renders a styled box (brand-filled with a check when on)\n * and an optional inline label.\n *\n * @example\n * <sds-checkbox label=\"Fusion automatique\" [(ngModel)]=\"autoMerge\" />\n */\n@Component({\n selector: 'sds-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsCheckbox),\n multi: true,\n },\n ],\n host: { class: 'inline-flex' },\n template: `\n <label\n class=\"inline-flex select-none items-center gap-2\"\n [class]=\"isDisabled() ? 'cursor-not-allowed opacity-60' : 'cursor-pointer'\"\n >\n <span\n class=\"relative inline-flex shrink-0 items-center justify-center rounded-control border transition-colors\"\n [class]=\"boxClasses()\"\n >\n <input\n type=\"checkbox\"\n class=\"absolute inset-0 m-0 cursor-[inherit] opacity-0\"\n [id]=\"id\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n (change)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n @if (checked()) {\n <sds-icon name=\"check\" [size]=\"iconSize()\" [strokeWidth]=\"3\" />\n }\n </span>\n @if (label()) {\n <span class=\"text-sm text-ink\">{{ label() }}</span>\n }\n </label>\n `,\n})\nexport class SdsCheckbox implements ControlValueAccessor {\n readonly id = `sds-checkbox-${nextId++}`;\n\n readonly label = input<string>('');\n /** Accessible name used when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly size = input<SdsCheckboxSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly checked = signal(false);\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly iconSize = computed(() => (this.size() === 'sm' ? 11 : 13));\n\n protected readonly boxClasses = computed(() => {\n const size = this.size() === 'sm' ? 'h-4 w-4' : 'h-5 w-5';\n const state = this.checked()\n ? 'border-brand-600 bg-brand-600 text-white'\n : 'border-border bg-white text-transparent';\n const focus =\n 'focus-within:ring-2 focus-within:ring-brand-500/30 focus-within:border-brand-500';\n return `${size} ${state} ${focus}`;\n });\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onChange(next);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\n\nexport type SdsAvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst STATUS_COLOR: Record<SdsAvatarStatus, string> = {\n online: 'bg-success',\n offline: 'bg-ink-faint',\n busy: 'bg-danger',\n away: 'bg-warning',\n};\n\n/**\n * Circular avatar showing an image or initials, with an optional status dot.\n */\n@Component({\n selector: 'sds-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'inline-block shrink-0 align-middle' },\n template: `\n <div\n class=\"relative grid place-items-center overflow-hidden rounded-full font-semibold text-white ring-2 ring-white/20\"\n [class]=\"bgClass()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n [style.fontSize.px]=\"size() * 0.4\"\n >\n @if (src()) {\n <img [src]=\"src()\" [alt]=\"name()\" class=\"h-full w-full object-cover\" />\n } @else {\n <span>{{ resolvedInitials() }}</span>\n }\n\n @if (status()) {\n <span\n class=\"absolute bottom-0 right-0 rounded-full ring-2 ring-white\"\n [class]=\"statusColor()\"\n [style.width.px]=\"dotSize()\"\n [style.height.px]=\"dotSize()\"\n ></span>\n }\n </div>\n `,\n})\nexport class SdsAvatar {\n readonly name = input<string>('');\n readonly initials = input<string>('');\n readonly src = input<string | null>(null);\n readonly size = input<number>(36);\n readonly status = input<SdsAvatarStatus | null>(null);\n /** Tailwind bg utility for the initials background. */\n readonly bgClass = input<string>('bg-brand-400');\n\n protected readonly dotSize = computed(() =>\n Math.max(8, Math.round(this.size() * 0.28)),\n );\n\n protected readonly statusColor = computed(() =>\n this.status() ? STATUS_COLOR[this.status()!] : '',\n );\n\n protected readonly resolvedInitials = computed(() => {\n if (this.initials()) return this.initials().slice(0, 2).toUpperCase();\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\n\nexport type SdsBadgeVariant =\n | 'neutral'\n | 'brand'\n | 'info'\n | 'success'\n | 'warning'\n | 'danger';\nexport type SdsBadgeSize = 'sm' | 'md';\n\nconst VARIANTS: Record<SdsBadgeVariant, string> = {\n neutral: 'bg-muted text-ink-soft border-border',\n brand: 'bg-brand-50 text-brand-700 border-brand-100',\n info: 'bg-accent-blue-soft text-accent-blue border-transparent',\n success: 'bg-accent-green-soft text-accent-green border-transparent',\n warning: 'bg-accent-amber-soft text-accent-amber border-transparent',\n danger: 'bg-accent-red-soft text-accent-red border-transparent',\n};\n\nconst DOT: Record<SdsBadgeVariant, string> = {\n neutral: 'bg-ink-faint',\n brand: 'bg-brand-500',\n info: 'bg-accent-blue',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\n/**\n * Small status/label pill. Used e.g. for the \"TEST V.1.0.0\" version chip.\n */\n@Component({\n selector: 'sds-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'inline-flex' },\n template: `\n <span\n class=\"inline-flex items-center gap-1.5 rounded-full border font-semibold uppercase tracking-wide\"\n [class]=\"classes()\"\n >\n @if (dot()) {\n <span class=\"h-1.5 w-1.5 rounded-full\" [class]=\"dotClass()\"></span>\n }\n <ng-content />\n </span>\n `,\n})\nexport class SdsBadge {\n readonly variant = input<SdsBadgeVariant>('neutral');\n readonly size = input<SdsBadgeSize>('md');\n readonly dot = input(false, { transform: booleanAttribute });\n\n protected readonly classes = computed(() => {\n const size =\n this.size() === 'sm'\n ? 'px-2 py-0.5 text-[10px]'\n : 'px-2.5 py-1 text-[11px]';\n return `${VARIANTS[this.variant()]} ${size}`;\n });\n\n protected readonly dotClass = computed(() => DOT[this.variant()]);\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\n\nexport type SdsCardVariant = 'elevated' | 'outlined' | 'subtle';\n\nconst VARIANTS: Record<SdsCardVariant, string> = {\n elevated: 'bg-surface border border-border shadow-sm',\n outlined: 'bg-surface border border-border',\n subtle: 'bg-muted border border-border',\n};\n\n/**\n * Generic surface container. Set [interactive]=\"true\" for hover affordance\n * (used by the dashboard action cards).\n */\n@Component({\n selector: 'sds-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClass()' },\n template: `<ng-content />`,\n})\nexport class SdsCard {\n readonly variant = input<SdsCardVariant>('elevated');\n /** Inner padding utility (override with e.g. \"p-4\"). */\n readonly padding = input<string>('p-5');\n readonly interactive = input(false, { transform: booleanAttribute });\n\n protected readonly hostClass = computed(() => {\n const parts = ['block rounded-card', VARIANTS[this.variant()], this.padding()];\n if (this.interactive()) {\n parts.push(\n 'cursor-pointer transition-all duration-150 hover:border-brand-300 hover:shadow-md',\n );\n }\n return parts.join(' ');\n });\n}\n","/** Small, dependency-free date helpers (day-granularity, local time). */\n\nexport function startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\nexport function addDays(d: Date, n: number): Date {\n const r = new Date(d);\n r.setDate(r.getDate() + n);\n return r;\n}\n\nexport function addMonths(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\n}\n\n/** Add `n` months, keeping the day-of-month but clamping to the target month's length. */\nexport function addMonthsKeepDay(d: Date, n: number): Date {\n const t = new Date(d.getFullYear(), d.getMonth() + n, 1);\n const lastDay = new Date(t.getFullYear(), t.getMonth() + 1, 0).getDate();\n t.setDate(Math.min(d.getDate(), lastDay));\n return t;\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n return (\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** True when `d` falls outside the inclusive [min, max] day range. */\nexport function isOutOfRange(d: Date, min: Date | null, max: Date | null): boolean {\n const day = startOfDay(d).getTime();\n if (min && day < startOfDay(min).getTime()) return true;\n if (max && day > startOfDay(max).getTime()) return true;\n return false;\n}\n\nexport function isoDay(d: Date): string {\n const p = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;\n}\n\n/** Format a date as dd/MM/yyyy (default display format). */\nexport function formatDdMmYyyy(d: Date): string {\n const p = (n: number) => String(n).padStart(2, '0');\n return `${p(d.getDate())}/${p(d.getMonth() + 1)}/${d.getFullYear()}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport {\n addDays,\n addMonths,\n addMonthsKeepDay,\n isOutOfRange,\n isSameDay,\n isoDay,\n startOfDay,\n startOfMonth,\n} from './date-utils';\n\ntype CalView = 'day' | 'month' | 'year';\n\ninterface DayCell {\n date: Date;\n day: number;\n otherMonth: boolean;\n today: boolean;\n selected: boolean;\n disabled: boolean;\n focused: boolean;\n}\n\n/**\n * Inline month calendar with day → month → year drill-down navigation,\n * min/max bounds and keyboard support. Used standalone (inline) or inside\n * <sds-date-picker>.\n */\n@Component({\n selector: 'sds-calendar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <div\n class=\"w-[20rem] select-none rounded-card border border-border bg-surface p-3 shadow-lg\"\n role=\"group\"\n aria-label=\"Calendrier\"\n >\n <!-- Header -->\n <div class=\"mb-2 flex items-center justify-between\">\n <button type=\"button\" [class]=\"navBtn\" aria-label=\"Précédent\" (click)=\"prev()\">\n <sds-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n\n <div class=\"flex items-center gap-1 text-sm font-semibold text-ink\">\n @switch (view()) {\n @case ('day') {\n <button type=\"button\" [class]=\"titleBtn\" (click)=\"view.set('month')\">\n {{ monthLong() }}\n </button>\n <button type=\"button\" [class]=\"titleBtn\" (click)=\"view.set('year')\">\n {{ yearLabel() }}\n </button>\n }\n @case ('month') {\n <button type=\"button\" [class]=\"titleBtn\" (click)=\"view.set('year')\">\n {{ yearLabel() }}\n </button>\n }\n @case ('year') {\n <span class=\"px-1\">{{ decadeStart() }} – {{ decadeStart() + 11 }}</span>\n }\n }\n </div>\n\n <button type=\"button\" [class]=\"navBtn\" aria-label=\"Suivant\" (click)=\"next()\">\n <sds-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </div>\n\n <!-- Day view -->\n @if (view() === 'day') {\n <table class=\"w-full border-collapse\" role=\"grid\">\n <thead>\n <tr>\n @for (wd of weekdayLabels(); track $index) {\n <th scope=\"col\" class=\"pb-1 text-[11px] font-medium uppercase text-ink-faint\">\n {{ wd }}\n </th>\n }\n </tr>\n </thead>\n <tbody (keydown)=\"onGridKeydown($event)\">\n @for (week of weeks(); track $index) {\n <tr>\n @for (cell of week; track cell.date.getTime()) {\n <td class=\"p-0.5 text-center\">\n <button\n type=\"button\"\n [attr.data-date]=\"iso(cell.date)\"\n [tabindex]=\"cell.focused ? 0 : -1\"\n [disabled]=\"cell.disabled\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n [attr.aria-label]=\"fullLabel(cell.date)\"\n [class]=\"dayClass(cell)\"\n (click)=\"selectDay(cell.date)\"\n >\n {{ cell.day }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Month view -->\n @if (view() === 'month') {\n <div class=\"grid grid-cols-3 gap-1.5\">\n @for (m of monthsGrid(); track m.month) {\n <button\n type=\"button\"\n [disabled]=\"m.disabled\"\n [class]=\"cellClass(m.selected, m.current, m.disabled)\"\n (click)=\"selectMonth(m.month)\"\n >\n {{ m.label }}\n </button>\n }\n </div>\n }\n\n <!-- Year view -->\n @if (view() === 'year') {\n <div class=\"grid grid-cols-3 gap-1.5\">\n @for (y of yearsGrid(); track y.year) {\n <button\n type=\"button\"\n [disabled]=\"y.disabled\"\n [class]=\"cellClass(y.selected, y.current, y.disabled)\"\n (click)=\"selectYear(y.year)\"\n >\n {{ y.year }}\n </button>\n }\n </div>\n }\n\n <!-- Actions -->\n @if (showActions()) {\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\n <button\n type=\"button\"\n [class]=\"actionBtn\"\n [disabled]=\"todayDisabled()\"\n (click)=\"goToday()\"\n >\n Aujourd'hui\n </button>\n <button type=\"button\" [class]=\"actionBtn\" (click)=\"clear()\">Effacer</button>\n </div>\n }\n </div>\n `,\n})\nexport class SdsCalendar {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly value = model<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n /** 0 = Sunday, 1 = Monday (default, European). */\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly locale = input<string>('fr-FR');\n readonly showActions = input<boolean>(true);\n\n /** Emitted when a concrete date is picked (day click or \"Aujourd'hui\"). */\n readonly dateSelect = output<Date>();\n\n protected readonly view = signal<CalView>('day');\n protected readonly viewDate = signal<Date>(startOfMonth(new Date()));\n protected readonly focusedDate = signal<Date>(startOfDay(new Date()));\n\n constructor() {\n // Keep the displayed month in sync with the value (e.g. when a form writes\n // a value, including while the panel is open). Plain navigation does not\n // change the value, so this does not fight the user.\n effect(() => {\n const v = this.value();\n if (v) this.viewDate.set(startOfMonth(v));\n });\n }\n\n /** Today falls outside [min, max] — used to disable the \"Today\" action. */\n protected readonly todayDisabled = computed(() =>\n isOutOfRange(new Date(), this.min(), this.max()),\n );\n\n // --- styling helpers ---\n protected readonly navBtn =\n 'inline-flex h-8 w-8 items-center justify-center rounded-control text-ink-soft hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500';\n protected readonly titleBtn =\n 'rounded-control px-2 py-1 capitalize hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500';\n protected readonly actionBtn =\n 'rounded-control px-2 py-1 text-xs font-medium text-brand-700 hover:bg-brand-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40';\n\n // --- labels ---\n protected readonly monthLong = computed(() =>\n new Intl.DateTimeFormat(this.locale(), { month: 'long' }).format(this.viewDate()),\n );\n protected readonly yearLabel = computed(() => this.viewDate().getFullYear());\n protected readonly decadeStart = computed(() => {\n const y = this.viewDate().getFullYear();\n return y - (y % 10);\n });\n\n protected readonly weekdayLabels = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n const sunday = new Date(2023, 0, 1); // a known Sunday\n return Array.from({ length: 7 }, (_, i) =>\n fmt.format(addDays(sunday, (this.firstDayOfWeek() + i) % 7)),\n );\n });\n\n protected readonly weeks = computed<DayCell[][]>(() => {\n const vd = this.viewDate();\n const first = startOfMonth(vd);\n const offset = (first.getDay() - this.firstDayOfWeek() + 7) % 7;\n const start = addDays(first, -offset);\n const today = startOfDay(new Date());\n const val = this.value();\n const min = this.min();\n const max = this.max();\n const focused = this.focusedDate();\n\n const out: DayCell[][] = [];\n let cur = start;\n for (let w = 0; w < 6; w++) {\n const row: DayCell[] = [];\n for (let i = 0; i < 7; i++) {\n row.push({\n date: cur,\n day: cur.getDate(),\n otherMonth: cur.getMonth() !== vd.getMonth(),\n today: isSameDay(cur, today),\n selected: isSameDay(cur, val),\n disabled: isOutOfRange(cur, min, max),\n focused: isSameDay(cur, focused),\n });\n cur = addDays(cur, 1);\n }\n out.push(row);\n }\n return out;\n });\n\n protected readonly monthsGrid = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n const y = this.viewDate().getFullYear();\n const val = this.value();\n const today = new Date();\n const min = this.min();\n const max = this.max();\n return Array.from({ length: 12 }, (_, m) => ({\n month: m,\n label: fmt.format(new Date(y, m, 1)),\n selected: !!val && val.getFullYear() === y && val.getMonth() === m,\n current: today.getFullYear() === y && today.getMonth() === m,\n disabled:\n (!!max && new Date(y, m, 1) > startOfMonth(max)) ||\n (!!min && new Date(y, m + 1, 0) < startOfDay(min)),\n }));\n });\n\n protected readonly yearsGrid = computed(() => {\n const start = this.decadeStart();\n const val = this.value();\n const thisYear = new Date().getFullYear();\n const min = this.min();\n const max = this.max();\n return Array.from({ length: 12 }, (_, i) => {\n const year = start + i;\n return {\n year,\n selected: !!val && val.getFullYear() === year,\n current: thisYear === year,\n disabled:\n (!!max && year > max.getFullYear()) || (!!min && year < min.getFullYear()),\n };\n });\n });\n\n // --- navigation ---\n protected prev(): void {\n const v = this.view();\n if (v === 'day') this.viewDate.set(addMonths(this.viewDate(), -1));\n else if (v === 'month') this.viewDate.set(new Date(this.viewDate().getFullYear() - 1, 0, 1));\n else this.viewDate.set(new Date(this.viewDate().getFullYear() - 10, 0, 1));\n }\n protected next(): void {\n const v = this.view();\n if (v === 'day') this.viewDate.set(addMonths(this.viewDate(), 1));\n else if (v === 'month') this.viewDate.set(new Date(this.viewDate().getFullYear() + 1, 0, 1));\n else this.viewDate.set(new Date(this.viewDate().getFullYear() + 10, 0, 1));\n }\n\n protected selectDay(d: Date): void {\n if (isOutOfRange(d, this.min(), this.max())) return;\n const day = startOfDay(d);\n this.value.set(day);\n this.viewDate.set(startOfMonth(day));\n this.focusedDate.set(day);\n this.dateSelect.emit(day);\n }\n protected selectMonth(m: number): void {\n this.viewDate.set(new Date(this.viewDate().getFullYear(), m, 1));\n this.view.set('day');\n }\n protected selectYear(y: number): void {\n this.viewDate.set(new Date(y, this.viewDate().getMonth(), 1));\n this.view.set('month');\n }\n\n protected goToday(): void {\n this.view.set('day');\n this.selectDay(new Date());\n }\n protected clear(): void {\n this.value.set(null);\n }\n\n // --- keyboard (day grid) ---\n protected onGridKeydown(e: KeyboardEvent): void {\n let f = this.focusedDate();\n switch (e.key) {\n case 'ArrowLeft': f = addDays(f, -1); break;\n case 'ArrowRight': f = addDays(f, 1); break;\n case 'ArrowUp': f = addDays(f, -7); break;\n case 'ArrowDown': f = addDays(f, 7); break;\n case 'Home': f = addDays(f, -((f.getDay() - this.firstDayOfWeek() + 7) % 7)); break;\n case 'End': f = addDays(f, 6 - ((f.getDay() - this.firstDayOfWeek() + 7) % 7)); break;\n case 'PageUp': f = addMonthsKeepDay(f, -1); break;\n case 'PageDown': f = addMonthsKeepDay(f, 1); break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.selectDay(f);\n return;\n default:\n return;\n }\n e.preventDefault();\n if (\n f.getMonth() !== this.viewDate().getMonth() ||\n f.getFullYear() !== this.viewDate().getFullYear()\n ) {\n this.viewDate.set(startOfMonth(f));\n }\n this.focusedDate.set(f);\n this.focusCell(f);\n }\n\n /** Move focus to the active day cell (called when the panel opens). */\n focusActiveCell(): void {\n const target = this.value() ?? new Date();\n this.view.set('day');\n this.viewDate.set(startOfMonth(target));\n this.focusedDate.set(startOfDay(target));\n this.focusCell(target);\n }\n\n private focusHandle?: ReturnType<typeof setTimeout>;\n private focusCell(d: Date): void {\n clearTimeout(this.focusHandle);\n this.focusHandle = setTimeout(() => {\n const el = this.host.nativeElement.querySelector<HTMLElement>(\n `[data-date=\"${isoDay(d)}\"]`,\n );\n el?.focus();\n });\n }\n\n // --- template helpers ---\n protected iso(d: Date): string {\n return isoDay(d);\n }\n protected fullLabel(d: Date): string {\n return new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(d);\n }\n\n protected dayClass(cell: DayCell): string {\n const base =\n 'inline-flex h-9 w-9 items-center justify-center rounded-full text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40';\n if (cell.selected) return `${base} bg-brand-600 font-semibold text-white hover:bg-brand-700`;\n let cls = `${base} hover:bg-brand-50`;\n if (cell.otherMonth) cls += ' text-ink-faint';\n else cls += ' text-ink';\n if (cell.today) cls += ' font-bold text-brand-600 ring-1 ring-inset ring-brand-300';\n return cls;\n }\n\n protected cellClass(selected: boolean, current: boolean, disabled: boolean): string {\n const base =\n 'h-10 rounded-control text-sm capitalize transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 disabled:cursor-not-allowed disabled:opacity-40';\n if (selected) return `${base} bg-brand-600 font-semibold text-white hover:bg-brand-700`;\n let cls = `${base} text-ink hover:bg-brand-50`;\n if (current) cls += ' font-semibold text-brand-600';\n return cls;\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsCalendar } from './sds-calendar';\nimport { formatDdMmYyyy } from './date-utils';\n\nexport type SdsDatePickerSize = 'sm' | 'md' | 'lg';\n\nconst SIZES: Record<SdsDatePickerSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\n/**\n * Date picker: a read-only field that opens a calendar overlay, or an inline\n * calendar. Implements ControlValueAccessor — use with reactive forms or\n * [(ngModel)]; the value is a `Date | null`.\n *\n * @example\n * <sds-date-picker label=\"Date de garde\" [(ngModel)]=\"date\" />\n */\n@Component({\n selector: 'sds-date-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, SdsCalendar],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsDatePicker), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n '(keydown.escape)': 'close(true)',\n },\n template: `\n @if (label()) {\n <label [for]=\"fieldId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n @if (inline()) {\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n (valueChange)=\"onCalendarValue($event)\"\n />\n } @else {\n <div class=\"relative\">\n <div\n #trigger\n class=\"relative flex items-center rounded-control border bg-white transition-colors\"\n [class]=\"wrapperClasses()\"\n (click)=\"toggle()\"\n >\n <input\n [id]=\"fieldId\"\n type=\"text\"\n readonly\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n class=\"w-full cursor-pointer bg-transparent pl-3.5 text-ink outline-none placeholder:text-ink-faint disabled:cursor-not-allowed\"\n [class.pr-20]=\"showClear()\"\n [class.pr-11]=\"!showClear()\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer la date\"\n class=\"absolute right-10 inline-flex h-6 w-6 items-center justify-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear($event)\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"open() ? 'Fermer le calendrier' : 'Ouvrir le calendrier'\"\n class=\"absolute right-2 inline-flex h-7 w-7 items-center justify-center rounded-control text-ink-soft hover:bg-muted\"\n (click)=\"toggle($event)\"\n >\n <sds-icon name=\"calendar\" [size]=\"18\" />\n </button>\n </div>\n\n @if (open()) {\n <!-- Relocated to document.body on open (appendTo body) to escape\n ancestor overflow/stacking; positioned via positionPanel(). -->\n <div\n class=\"fixed z-[1000]\"\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Sélection de date\"\n (keydown.escape)=\"close(true)\"\n >\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n (valueChange)=\"onCalendarValue($event)\"\n (dateSelect)=\"close(true)\"\n />\n </div>\n }\n </div>\n }\n\n @if (hint() && !error()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n @if (error()) {\n <p class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n }\n `,\n})\nexport class SdsDatePicker implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n protected readonly fieldId = `sds-date-${nextId++}`;\n\n readonly label = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly placeholder = input<string>('jj/mm/aaaa');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsDatePickerSize>('md');\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly locale = input<string>('fr-FR');\n readonly inline = input(false, { transform: booleanAttribute });\n readonly clearable = input(true, { transform: booleanAttribute });\n readonly showActions = input(true, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Custom display formatter (default dd/MM/yyyy). */\n readonly format = input<(d: Date) => string>(formatDdMmYyyy);\n\n protected readonly value = signal<Date | null>(null);\n protected readonly open = signal(false);\n private readonly cvaDisabled = signal(false);\n private readonly calendar = viewChild(SdsCalendar);\n private readonly trigger = viewChild<ElementRef<HTMLElement>>('trigger');\n /** The overlay panel, relocated to document.body while open. */\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly displayValue = computed(() => {\n const v = this.value();\n return v ? this.format()(v) : '';\n });\n /** Whether the clear button is shown (affects the field's right padding). */\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.error()\n ? 'border-danger focus-within:border-danger focus-within:ring-2 focus-within:ring-danger/25'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed pointer-events-none');\n else parts.push('cursor-pointer');\n return parts.join(' ');\n });\n\n protected toggle(event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.open.set(true);\n this.onTouched();\n // Run after the overlay is rendered, then relocate it to <body>.\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>('[role=\"dialog\"]');\n this.positionPanel(); // also relocates to document.body\n this.addReflowListeners();\n this.calendar()?.focusActiveCell();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove(); // pull the body-relocated node before destroying the view\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) {\n this.host.nativeElement.querySelector<HTMLInputElement>('input')?.focus();\n }\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected onCalendarValue(v: Date | null): void {\n this.setValue(v);\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n // --- body-appended overlay positioning ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n // capture=true so scrolling any ancestor scroll container repositions.\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const triggerEl = this.trigger()?.nativeElement;\n const panelEl = this.panelEl;\n if (!triggerEl || !panelEl) return;\n\n // appendTo body: relocate out of any clipping/stacking ancestor.\n if (panelEl.parentElement !== document.body) {\n document.body.appendChild(panelEl);\n }\n\n const r = triggerEl.getBoundingClientRect();\n const ph = panelEl.offsetHeight || 360;\n const pw = panelEl.offsetWidth || 296;\n const gap = 6;\n const margin = 8;\n\n // Below the field by default; flip above when there isn't room.\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n // Align to the field's left, but keep it within the viewport.\n let left = r.left;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n\n // Set directly (position: fixed → viewport coordinates) to avoid a flash.\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n this.panelEl?.remove();\n }\n\n private setValue(v: Date | null): void {\n this.value.set(v);\n this.onChange(v);\n this.onTouched();\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: Date | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: Date | string | number | null): void {\n if (value === null || value === undefined || value === '') {\n this.value.set(null);\n return;\n }\n const d = value instanceof Date ? value : new Date(value);\n this.value.set(isNaN(d.getTime()) ? null : d);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n\nlet nextId = 0;\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\n\nexport type SdsSelectSize = 'sm' | 'md' | 'lg';\n\ninterface NormOption {\n label: string;\n value: unknown;\n disabled: boolean;\n}\n\nconst SIZES: Record<SdsSelectSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\nlet nextId = 0;\n\n/**\n * Single-select dropdown. Options may be primitives or objects (configure via\n * [optionLabel]/[optionValue]/[optionDisabled]). The overlay is appended to\n * <body>. Supports filtering, clearing, and full keyboard navigation.\n * Implements ControlValueAccessor — use with reactive forms or [(ngModel)].\n *\n * For object options, set [optionValue] or [dataKey] so written values match by\n * key; otherwise selection matching falls back to reference equality (a written\n * copy of an option will not match).\n *\n * @example\n * <sds-select [options]=\"services\" optionLabel=\"name\" optionValue=\"id\"\n * placeholder=\"Choisir un service\" [(ngModel)]=\"serviceId\" filter clearable />\n */\n@Component({\n selector: 'sds-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsSelect), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n @if (label()) {\n <label [for]=\"selectId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div class=\"relative\">\n <div\n #trigger\n [id]=\"selectId\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-activedescendant]=\"open() ? activeDescId() : null\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n class=\"relative flex items-center rounded-control border bg-white transition-colors focus:outline-none\"\n [class]=\"wrapperClasses()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span\n class=\"flex-1 truncate pl-3.5\"\n [class]=\"selectedOption() ? 'text-ink' : 'text-ink-faint'\"\n >\n {{ selectedOption() ? selectedOption()!.label : placeholder() }}\n </span>\n\n @if (showClear()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer la sélection\"\n class=\"mr-1 inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear($event)\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n\n <span\n class=\"mr-3 ml-1 shrink-0 text-ink-soft transition-transform duration-150\"\n [class.rotate-180]=\"open()\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"18\" />\n </span>\n </div>\n\n @if (open()) {\n <!-- Appended to document.body on open (see positionPanel). -->\n <div data-sds-select-panel class=\"fixed z-[1000] overflow-hidden rounded-card border border-border bg-surface shadow-lg\">\n @if (filter()) {\n <div class=\"border-b border-border p-2\">\n <div class=\"relative flex items-center rounded-control border border-border focus-within:border-brand-500\">\n <sds-icon name=\"search\" [size]=\"16\" class=\"pointer-events-none absolute left-2.5 text-ink-faint\" />\n <input\n type=\"text\"\n role=\"combobox\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-activedescendant]=\"activeDescId()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterText()\"\n (input)=\"onFilter($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n aria-label=\"Rechercher\"\n class=\"h-9 w-full bg-transparent pl-8 pr-2 text-sm text-ink outline-none placeholder:text-ink-faint\"\n />\n </div>\n </div>\n }\n\n <ul [id]=\"listId\" role=\"listbox\" class=\"max-h-60 overflow-auto py-1\">\n @for (opt of filteredOptions(); track $index; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(opt.value)\"\n [attr.aria-disabled]=\"opt.disabled ? 'true' : null\"\n [attr.data-index]=\"i\"\n [class]=\"optionClass(i, opt)\"\n (click)=\"opt.disabled ? null : selectOption(opt)\"\n (mouseenter)=\"opt.disabled ? null : highlightedIndex.set(i)\"\n >\n <span class=\"truncate\">{{ opt.label }}</span>\n @if (isSelected(opt.value)) {\n <sds-icon name=\"check\" [size]=\"16\" class=\"shrink-0 text-brand-600\" />\n }\n </li>\n } @empty {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">{{ emptyMessage() }}</li>\n }\n </ul>\n </div>\n }\n </div>\n\n @if (hint() && !error()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n @if (error()) {\n <p class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n }\n `,\n})\nexport class SdsSelect implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n protected readonly selectId = `sds-select-${nextId++}`;\n protected readonly listId = `${this.selectId}-list`;\n\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<string>('label');\n readonly optionValue = input<string>('');\n readonly optionDisabled = input<string>('disabled');\n /** Key used to compare object values for selection equality. */\n readonly dataKey = input<string>('');\n readonly placeholder = input<string>('Sélectionner…');\n readonly label = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsSelectSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input<string>('Rechercher…');\n readonly emptyMessage = input<string>('Aucun résultat');\n\n protected readonly value = signal<unknown>(null);\n protected readonly open = signal(false);\n protected readonly filterText = signal('');\n protected readonly highlightedIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n\n private readonly trigger = viewChild<ElementRef<HTMLElement>>('trigger');\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly normalizedOptions = computed<NormOption[]>(() =>\n this.options().map((o) => this.norm(o)),\n );\n\n protected readonly filteredOptions = computed<NormOption[]>(() => {\n const f = this.filterText().trim().toLowerCase();\n const all = this.normalizedOptions();\n if (!this.filter() || !f) return all;\n return all.filter((o) => o.label.toLowerCase().includes(f));\n });\n\n protected readonly selectedOption = computed<NormOption | null>(\n () => this.normalizedOptions().find((o) => this.equals(o.value, this.value())) ?? null,\n );\n\n protected readonly showClear = computed(\n () => this.clearable() && this.value() != null && !this.isDisabled(),\n );\n\n protected readonly activeDescId = computed(() =>\n this.highlightedIndex() >= 0 ? this.optionId(this.highlightedIndex()) : null,\n );\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.error()\n ? 'border-danger focus:border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-border focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n parts.push(\n this.isDisabled()\n ? 'opacity-60 cursor-not-allowed pointer-events-none'\n : 'cursor-pointer',\n );\n return parts.join(' ');\n });\n\n // --- option normalization & equality ---\n private norm(raw: unknown): NormOption {\n if (raw !== null && typeof raw === 'object') {\n const o = raw as Record<string, unknown>;\n const labelKey = this.optionLabel();\n const label =\n labelKey && labelKey in o ? String(o[labelKey]) : String(o['label'] ?? raw);\n const value = this.optionValue() ? o[this.optionValue()] : raw;\n const disabled = this.optionDisabled() ? !!o[this.optionDisabled()] : !!o['disabled'];\n return { label, value, disabled };\n }\n return { label: String(raw), value: raw, disabled: false };\n }\n\n private equals(a: unknown, b: unknown): boolean {\n const k = this.dataKey();\n if (k && a && b && typeof a === 'object' && typeof b === 'object') {\n return (a as Record<string, unknown>)[k] === (b as Record<string, unknown>)[k];\n }\n return a === b;\n }\n\n protected isSelected(v: unknown): boolean {\n return this.value() != null && this.equals(v, this.value());\n }\n\n protected optionId(i: number): string {\n return `${this.selectId}-opt-${i}`;\n }\n\n protected optionClass(i: number, opt: NormOption): string {\n const base = 'flex cursor-pointer items-center justify-between gap-2 px-3 py-2 text-sm';\n if (opt.disabled) return `${base} cursor-not-allowed text-ink-faint opacity-60`;\n let cls = `${base} text-ink`;\n if (this.highlightedIndex() === i) cls += ' bg-brand-50';\n if (this.isSelected(opt.value)) cls += ' font-medium text-brand-700';\n return cls;\n }\n\n // --- open / close ---\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close(true) : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.filterText.set('');\n this.open.set(true);\n this.onTouched();\n this.initHighlight();\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>(\n '[data-sds-select-panel]',\n );\n this.positionPanel();\n this.addReflowListeners();\n if (this.filter()) {\n this.panelEl?.querySelector<HTMLInputElement>('input')?.focus();\n } else {\n this.trigger()?.nativeElement.focus();\n }\n this.scrollHighlightedIntoView();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove();\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) this.trigger()?.nativeElement.focus();\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected selectOption(opt: NormOption): void {\n this.setValue(opt.value);\n this.close(true);\n }\n\n protected onFilter(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n this.highlightFirst();\n setTimeout(() => this.positionPanel());\n }\n\n // --- keyboard ---\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.openPanel();\n }\n return;\n }\n if (this.handleNavKey(event)) return;\n // Type-ahead (no-filter mode keeps focus on the trigger).\n if (\n event.key.length === 1 &&\n event.key !== ' ' &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n this.typeAhead(event.key);\n }\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n this.handleNavKey(event);\n }\n\n private handleNavKey(event: KeyboardEvent): boolean {\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); this.move(1); return true;\n case 'ArrowUp': event.preventDefault(); this.move(-1); return true;\n case 'Home': event.preventDefault(); this.highlightFirst(); return true;\n case 'End': event.preventDefault(); this.highlightLast(); return true;\n case 'Enter': event.preventDefault(); this.selectHighlighted(); return true;\n case 'Escape': event.preventDefault(); this.close(true); return true;\n case 'Tab': this.close(false); return true;\n default: return false;\n }\n }\n\n private initHighlight(): void {\n const opts = this.filteredOptions();\n const sel = opts.findIndex((o) => !o.disabled && this.equals(o.value, this.value()));\n this.highlightedIndex.set(sel >= 0 ? sel : this.firstEnabled(opts));\n }\n\n private firstEnabled(opts: NormOption[]): number {\n return opts.findIndex((o) => !o.disabled);\n }\n\n private move(delta: number): void {\n const opts = this.filteredOptions();\n if (!opts.length) return;\n let i = this.highlightedIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n return;\n }\n }\n }\n\n private highlightFirst(): void {\n this.highlightedIndex.set(this.firstEnabled(this.filteredOptions()));\n this.scrollHighlightedIntoView();\n }\n\n private highlightLast(): void {\n const opts = this.filteredOptions();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n return;\n }\n }\n }\n\n private selectHighlighted(): void {\n const opt = this.filteredOptions()[this.highlightedIndex()];\n if (opt && !opt.disabled) this.selectOption(opt);\n }\n\n private typeBuffer = '';\n private typeTimer?: ReturnType<typeof setTimeout>;\n private typeAhead(char: string): void {\n clearTimeout(this.typeTimer);\n this.typeBuffer += char.toLowerCase();\n const opts = this.filteredOptions();\n const idx = opts.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(this.typeBuffer),\n );\n if (idx >= 0) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n this.typeTimer = setTimeout(() => (this.typeBuffer = ''), 600);\n }\n\n private scrollHighlightedIntoView(): void {\n setTimeout(() => {\n const el = this.panelEl?.querySelector<HTMLElement>(\n `[data-index=\"${this.highlightedIndex()}\"]`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n // --- body-appended overlay positioning (mirrors sds-date-picker) ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const triggerEl = this.trigger()?.nativeElement;\n const panelEl = this.panelEl;\n if (!triggerEl || !panelEl) return;\n if (panelEl.parentElement !== document.body) document.body.appendChild(panelEl);\n\n const r = triggerEl.getBoundingClientRect();\n panelEl.style.minWidth = `${Math.round(r.width)}px`;\n const ph = panelEl.offsetHeight || 240;\n const gap = 4;\n const margin = 8;\n\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n let left = r.left;\n const pw = panelEl.offsetWidth || r.width;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n clearTimeout(this.typeTimer);\n this.panelEl?.remove();\n }\n\n private setValue(v: unknown): void {\n this.value.set(v);\n this.onChange(v);\n this.onTouched();\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: unknown) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n if (isDisabled) this.close();\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n numberAttribute,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\n\nexport type SdsMultiSelectSize = 'sm' | 'md' | 'lg';\nexport type SdsMultiSelectDisplay = 'comma' | 'chip';\n\ninterface NormOption {\n label: string;\n value: unknown;\n disabled: boolean;\n}\n\nconst SIZES: Record<SdsMultiSelectSize, string> = {\n sm: 'min-h-9 text-sm',\n md: 'min-h-10 text-sm',\n lg: 'min-h-12 text-base',\n};\n\nlet nextId = 0;\n\n/**\n * Multi-select dropdown (value is an array). Options may be primitives or\n * objects (configure via [optionLabel]/[optionValue]/[optionDisabled]). The\n * overlay is appended to <body>. Supports a \"select all\" toggle, per-option\n * checkboxes, chip or comma display, filtering, clearing and keyboard nav.\n * Implements ControlValueAccessor — use with reactive forms or [(ngModel)].\n *\n * For object options, set [optionValue] or [dataKey] so written values match by\n * key; otherwise matching falls back to reference equality.\n *\n * @example\n * <sds-multi-select [options]=\"services\" optionLabel=\"name\" optionValue=\"code\"\n * display=\"chip\" filter [(ngModel)]=\"codes\" />\n */\n@Component({\n selector: 'sds-multi-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsMultiSelect), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n @if (label()) {\n <label [for]=\"selectId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div class=\"relative\">\n <div\n #trigger\n [id]=\"selectId\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-activedescendant]=\"open() && !filter() ? activeDescId() : null\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n class=\"relative flex items-center rounded-control border bg-white transition-colors focus:outline-none\"\n [class]=\"wrapperClasses()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (display() === 'chip' && selectedOptions().length) {\n <div class=\"flex flex-1 flex-wrap items-center gap-1 py-1 pl-2\">\n @for (opt of selectedOptions(); track $index) {\n <span class=\"inline-flex items-center gap-1 rounded bg-brand-50 py-0.5 pl-2 pr-1 text-xs font-medium text-brand-700\">\n {{ opt.label }}\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Retirer ' + opt.label\"\n class=\"inline-flex h-4 w-4 items-center justify-center rounded-full hover:bg-brand-100\"\n (click)=\"removeChip($event, opt)\"\n >\n <sds-icon name=\"x\" [size]=\"12\" />\n </button>\n </span>\n }\n </div>\n } @else {\n <span\n class=\"flex-1 truncate pl-3.5\"\n [class]=\"selectedOptions().length ? 'text-ink' : 'text-ink-faint'\"\n >\n {{ triggerLabel() }}\n </span>\n }\n\n @if (showClear()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Tout effacer\"\n class=\"mr-1 inline-flex h-6 w-6 shrink-0 items-center justify-center self-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear($event)\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n\n <span\n class=\"mr-3 ml-1 shrink-0 self-center text-ink-soft transition-transform duration-150\"\n [class.rotate-180]=\"open()\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"18\" />\n </span>\n </div>\n\n @if (open()) {\n <!-- Appended to document.body on open (see positionPanel). -->\n <div data-sds-select-panel class=\"fixed z-[1000] overflow-hidden rounded-card border border-border bg-surface shadow-lg\">\n @if (filter()) {\n <div class=\"border-b border-border p-2\">\n <div class=\"relative flex items-center rounded-control border border-border focus-within:border-brand-500\">\n <sds-icon name=\"search\" [size]=\"16\" class=\"pointer-events-none absolute left-2.5 text-ink-faint\" />\n <input\n type=\"text\"\n role=\"combobox\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-activedescendant]=\"activeDescId()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterText()\"\n (input)=\"onFilter($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n aria-label=\"Rechercher\"\n class=\"h-9 w-full bg-transparent pl-8 pr-2 text-sm text-ink outline-none placeholder:text-ink-faint\"\n />\n </div>\n </div>\n }\n\n @if (hasToggleAll()) {\n <button\n type=\"button\"\n role=\"checkbox\"\n [id]=\"toggleAllId\"\n [attr.data-index]=\"-1\"\n [attr.aria-checked]=\"allFilteredSelected() ? 'true' : (toggleAllIndeterminate() ? 'mixed' : 'false')\"\n class=\"flex w-full items-center gap-2.5 border-b border-border px-3 py-2 text-sm text-ink\"\n [class.bg-brand-50]=\"highlightedIndex() === -1\"\n (click)=\"toggleAll()\"\n (mouseenter)=\"highlightedIndex.set(-1)\"\n >\n <span class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border\" [class]=\"checkboxClass(allFilteredSelected(), toggleAllIndeterminate())\">\n @if (allFilteredSelected()) {\n <sds-icon name=\"check\" [size]=\"12\" />\n } @else if (toggleAllIndeterminate()) {\n <span class=\"h-0.5 w-2.5 rounded-full bg-white\"></span>\n }\n </span>\n Tout sélectionner\n </button>\n }\n\n <ul [id]=\"listId\" role=\"listbox\" aria-multiselectable=\"true\" class=\"max-h-60 overflow-auto py-1\">\n @for (opt of filteredOptions(); track $index; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(opt.value)\"\n [attr.aria-disabled]=\"opt.disabled ? 'true' : null\"\n [attr.data-index]=\"i\"\n [class]=\"optionClass(i, opt)\"\n (click)=\"opt.disabled ? null : toggleOption(opt)\"\n (mouseenter)=\"opt.disabled ? null : highlightedIndex.set(i)\"\n >\n <span class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border\" [class]=\"checkboxClass(isSelected(opt.value), false)\">\n @if (isSelected(opt.value)) {\n <sds-icon name=\"check\" [size]=\"12\" />\n }\n </span>\n <span class=\"truncate\">{{ opt.label }}</span>\n </li>\n } @empty {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">{{ emptyMessage() }}</li>\n }\n </ul>\n </div>\n }\n </div>\n\n @if (hint() && !error()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n @if (error()) {\n <p class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n }\n `,\n})\nexport class SdsMultiSelect implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n protected readonly selectId = `sds-multiselect-${nextId++}`;\n protected readonly listId = `${this.selectId}-list`;\n\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<string>('label');\n readonly optionValue = input<string>('');\n readonly optionDisabled = input<string>('disabled');\n readonly dataKey = input<string>('');\n readonly placeholder = input<string>('Sélectionner…');\n readonly label = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsMultiSelectSize>('md');\n readonly display = input<SdsMultiSelectDisplay>('comma');\n /** In comma mode, show a count label once more than this many are selected. */\n readonly maxSelectedLabels = input(3, { transform: numberAttribute });\n readonly selectedItemsLabel = input<string>('{0} éléments sélectionnés');\n readonly showToggleAll = input(true, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input<string>('Rechercher…');\n readonly emptyMessage = input<string>('Aucun résultat');\n\n protected readonly value = signal<unknown[]>([]);\n protected readonly open = signal(false);\n protected readonly filterText = signal('');\n protected readonly highlightedIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n\n private readonly trigger = viewChild<ElementRef<HTMLElement>>('trigger');\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly normalizedOptions = computed<NormOption[]>(() =>\n this.options().map((o) => this.norm(o)),\n );\n\n protected readonly filteredOptions = computed<NormOption[]>(() => {\n const f = this.filterText().trim().toLowerCase();\n const all = this.normalizedOptions();\n if (!this.filter() || !f) return all;\n return all.filter((o) => o.label.toLowerCase().includes(f));\n });\n\n protected readonly selectedOptions = computed<NormOption[]>(() =>\n this.normalizedOptions().filter((o) => this.isSelected(o.value)),\n );\n\n protected readonly showClear = computed(\n () => this.clearable() && this.value().length > 0 && !this.isDisabled(),\n );\n\n protected readonly triggerLabel = computed(() => {\n const sel = this.selectedOptions();\n const total = this.value().length;\n if (!total) return this.placeholder();\n const max = this.maxSelectedLabels();\n const limit = Number.isFinite(max) ? max : 3;\n if (total <= limit) {\n const labels = sel.map((o) => o.label).join(', ');\n // Some selected values may not resolve to a current option.\n return total > sel.length ? `${labels} +${total - sel.length}`.trim() : labels;\n }\n return this.selectedItemsLabel().replace('{0}', String(total));\n });\n\n private readonly filteredEnabled = computed(() =>\n this.filteredOptions().filter((o) => !o.disabled),\n );\n protected readonly allFilteredSelected = computed(() => {\n const e = this.filteredEnabled();\n return e.length > 0 && e.every((o) => this.isSelected(o.value));\n });\n protected readonly toggleAllIndeterminate = computed(\n () => !this.allFilteredSelected() && this.filteredEnabled().some((o) => this.isSelected(o.value)),\n );\n /** Show the select-all row only when there is at least one enabled option. */\n protected readonly hasToggleAll = computed(\n () => this.showToggleAll() && this.filteredEnabled().length > 0,\n );\n protected readonly toggleAllId = `${this.selectId}-all`;\n\n protected readonly activeDescId = computed(() => {\n const i = this.highlightedIndex();\n if (i === -1) return this.hasToggleAll() ? this.toggleAllId : null;\n return i >= 0 ? this.optionId(i) : null;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.error()\n ? 'border-danger focus:border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-border focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n parts.push(\n this.isDisabled()\n ? 'opacity-60 cursor-not-allowed pointer-events-none'\n : 'cursor-pointer',\n );\n return parts.join(' ');\n });\n\n // --- normalization & equality ---\n private norm(raw: unknown): NormOption {\n if (raw !== null && typeof raw === 'object') {\n const o = raw as Record<string, unknown>;\n const labelKey = this.optionLabel();\n const label =\n labelKey && labelKey in o ? String(o[labelKey]) : String(o['label'] ?? raw);\n const value = this.optionValue() ? o[this.optionValue()] : raw;\n const disabled = this.optionDisabled() ? !!o[this.optionDisabled()] : !!o['disabled'];\n return { label, value, disabled };\n }\n return { label: String(raw), value: raw, disabled: false };\n }\n\n private equals(a: unknown, b: unknown): boolean {\n const k = this.dataKey();\n if (k && a && b && typeof a === 'object' && typeof b === 'object') {\n return (a as Record<string, unknown>)[k] === (b as Record<string, unknown>)[k];\n }\n return a === b;\n }\n\n protected isSelected(v: unknown): boolean {\n return this.value().some((x) => this.equals(x, v));\n }\n\n protected optionId(i: number): string {\n return `${this.selectId}-opt-${i}`;\n }\n\n protected optionClass(i: number, opt: NormOption): string {\n const base = 'flex cursor-pointer items-center gap-2.5 px-3 py-2 text-sm';\n if (opt.disabled) return `${base} cursor-not-allowed text-ink-faint opacity-60`;\n let cls = `${base} text-ink`;\n if (this.highlightedIndex() === i) cls += ' bg-brand-50';\n if (this.isSelected(opt.value)) cls += ' font-medium';\n return cls;\n }\n\n protected checkboxClass(checked: boolean, indeterminate: boolean): string {\n return checked || indeterminate\n ? 'border-brand-600 bg-brand-600 text-white'\n : 'border-border bg-white';\n }\n\n // --- open / close ---\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close(true) : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.filterText.set('');\n this.open.set(true);\n this.onTouched();\n this.initHighlight();\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>('[data-sds-select-panel]');\n this.positionPanel();\n this.addReflowListeners();\n if (this.filter()) {\n this.panelEl?.querySelector<HTMLInputElement>('input')?.focus();\n } else {\n this.trigger()?.nativeElement.focus();\n }\n this.scrollHighlightedIntoView();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove();\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) this.trigger()?.nativeElement.focus();\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.setValue([]);\n }\n\n protected removeChip(event: Event, opt: NormOption): void {\n event.stopPropagation();\n this.toggleOption(opt);\n }\n\n protected toggleOption(opt: NormOption): void {\n const cur = this.value();\n const exists = cur.some((x) => this.equals(x, opt.value));\n const next = exists\n ? cur.filter((x) => !this.equals(x, opt.value))\n : [...cur, opt.value];\n this.setValue(next);\n }\n\n protected toggleAll(): void {\n const enabled = this.filteredEnabled();\n if (this.allFilteredSelected()) {\n this.setValue(\n this.value().filter((v) => !enabled.some((o) => this.equals(o.value, v))),\n );\n } else {\n const toAdd = enabled.filter((o) => !this.isSelected(o.value)).map((o) => o.value);\n this.setValue([...this.value(), ...toAdd]);\n }\n }\n\n protected onFilter(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n this.highlightFirst();\n setTimeout(() => this.positionPanel());\n }\n\n // --- keyboard ---\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.openPanel();\n } else if (event.key === 'Backspace' && this.selectedOptions().length) {\n event.preventDefault();\n const sel = this.selectedOptions();\n this.toggleOption(sel[sel.length - 1]);\n }\n return;\n }\n if (event.key === ' ') {\n event.preventDefault();\n this.toggleHighlighted();\n return;\n }\n if (this.handleNavKey(event)) return;\n if (\n event.key.length === 1 &&\n event.key !== ' ' &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n this.typeAhead(event.key);\n }\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n this.handleNavKey(event);\n }\n\n private handleNavKey(event: KeyboardEvent): boolean {\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); this.move(1); return true;\n case 'ArrowUp': event.preventDefault(); this.move(-1); return true;\n case 'Home': event.preventDefault(); this.highlightFirst(); return true;\n case 'End': event.preventDefault(); this.highlightLast(); return true;\n case 'Enter': event.preventDefault(); this.toggleHighlighted(); return true;\n case 'Escape': event.preventDefault(); this.close(true); return true;\n case 'Tab': this.close(false); return true;\n default: return false;\n }\n }\n\n private initHighlight(): void {\n this.highlightedIndex.set(this.firstEnabled(this.filteredOptions()));\n }\n\n private firstEnabled(opts: NormOption[]): number {\n return opts.findIndex((o) => !o.disabled);\n }\n\n private move(delta: number): void {\n // Navigable rows: the select-all sentinel (-1) followed by enabled options.\n const nav: number[] = [];\n if (this.hasToggleAll()) nav.push(-1);\n this.filteredOptions().forEach((o, i) => {\n if (!o.disabled) nav.push(i);\n });\n if (!nav.length) return;\n const cur = nav.indexOf(this.highlightedIndex());\n const next = cur === -1 ? (delta > 0 ? 0 : nav.length - 1) : (cur + delta + nav.length) % nav.length;\n this.highlightedIndex.set(nav[next]);\n this.scrollHighlightedIntoView();\n }\n\n private highlightFirst(): void {\n this.highlightedIndex.set(this.firstEnabled(this.filteredOptions()));\n this.scrollHighlightedIntoView();\n }\n\n private highlightLast(): void {\n const opts = this.filteredOptions();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n return;\n }\n }\n }\n\n private toggleHighlighted(): void {\n if (this.highlightedIndex() === -1) {\n if (this.hasToggleAll()) this.toggleAll();\n return;\n }\n const opt = this.filteredOptions()[this.highlightedIndex()];\n if (opt && !opt.disabled) this.toggleOption(opt);\n }\n\n private typeBuffer = '';\n private typeTimer?: ReturnType<typeof setTimeout>;\n private typeAhead(char: string): void {\n clearTimeout(this.typeTimer);\n this.typeBuffer += char.toLowerCase();\n const opts = this.filteredOptions();\n const idx = opts.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(this.typeBuffer),\n );\n if (idx >= 0) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n this.typeTimer = setTimeout(() => (this.typeBuffer = ''), 600);\n }\n\n private scrollHighlightedIntoView(): void {\n setTimeout(() => {\n const el = this.panelEl?.querySelector<HTMLElement>(\n `[data-index=\"${this.highlightedIndex()}\"]`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n // --- body-appended overlay positioning (mirrors sds-select) ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const triggerEl = this.trigger()?.nativeElement;\n const panelEl = this.panelEl;\n if (!triggerEl || !panelEl) return;\n if (panelEl.parentElement !== document.body) document.body.appendChild(panelEl);\n\n const r = triggerEl.getBoundingClientRect();\n panelEl.style.minWidth = `${Math.round(r.width)}px`;\n const ph = panelEl.offsetHeight || 240;\n const gap = 4;\n const margin = 8;\n\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n let left = r.left;\n const pw = panelEl.offsetWidth || r.width;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n clearTimeout(this.typeTimer);\n this.panelEl?.remove();\n }\n\n private setValue(v: unknown[]): void {\n this.value.set(v);\n this.onChange(v);\n this.onTouched();\n // Chip display can change the trigger height while the panel is open.\n if (this.open()) setTimeout(() => this.positionPanel());\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: unknown[]) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: unknown[] | null): void {\n this.value.set(Array.isArray(value) ? [...value] : []);\n }\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n if (isDisabled) this.close();\n }\n}\n","/**\n * Curated country dataset for <sds-phone-input>. Dependency-free: each entry\n * carries the dial code, the valid national-significant digit length(s) used\n * for validation, a best-effort display mask (# = a digit) and an example.\n *\n * `lengths` are the number of significant national digits, i.e. excluding the\n * dial code and any leading trunk \"0\". Add or override entries as needed.\n */\nexport interface SdsPhoneCountry {\n /** ISO 3166-1 alpha-2 code, e.g. 'BE'. */\n iso2: string;\n /** Localised display name. */\n name: string;\n /** International dial code without '+', e.g. '32'. */\n dialCode: string;\n /** Valid national-significant digit counts (excluding dial/trunk). */\n lengths: number[];\n /** Display grouping mask; '#' is a digit placeholder, other chars are literal. */\n format: string;\n /** Example national-significant number (digits only) for the placeholder. */\n example: string;\n}\n\nexport const SDS_PHONE_COUNTRIES: readonly SdsPhoneCountry[] = [\n { iso2: 'BE', name: 'Belgique', dialCode: '32', lengths: [9], format: '### ## ## ##', example: '470123456' },\n { iso2: 'FR', name: 'France', dialCode: '33', lengths: [9], format: '# ## ## ## ##', example: '612345678' },\n { iso2: 'LU', name: 'Luxembourg', dialCode: '352', lengths: [9, 8, 6], format: '### ### ###', example: '628123456' },\n { iso2: 'NL', name: 'Pays-Bas', dialCode: '31', lengths: [9], format: '# ## ## ## ##', example: '612345678' },\n { iso2: 'DE', name: 'Allemagne', dialCode: '49', lengths: [10, 11], format: '#### #######', example: '15123456789' },\n { iso2: 'GB', name: 'Royaume-Uni', dialCode: '44', lengths: [10], format: '#### ######', example: '7400123456' },\n { iso2: 'IE', name: 'Irlande', dialCode: '353', lengths: [9], format: '## ### ####', example: '850123456' },\n { iso2: 'CH', name: 'Suisse', dialCode: '41', lengths: [9], format: '## ### ## ##', example: '781234567' },\n { iso2: 'ES', name: 'Espagne', dialCode: '34', lengths: [9], format: '### ## ## ##', example: '612345678' },\n { iso2: 'IT', name: 'Italie', dialCode: '39', lengths: [9, 10], format: '### ### ####', example: '3123456789' },\n { iso2: 'PT', name: 'Portugal', dialCode: '351', lengths: [9], format: '### ### ###', example: '912345678' },\n { iso2: 'AT', name: 'Autriche', dialCode: '43', lengths: [10, 11], format: '### #######', example: '6641234567' },\n { iso2: 'DK', name: 'Danemark', dialCode: '45', lengths: [8], format: '## ## ## ##', example: '20123456' },\n { iso2: 'SE', name: 'Suède', dialCode: '46', lengths: [9], format: '## ### ## ##', example: '701234567' },\n { iso2: 'NO', name: 'Norvège', dialCode: '47', lengths: [8], format: '### ## ###', example: '40612345' },\n { iso2: 'PL', name: 'Pologne', dialCode: '48', lengths: [9], format: '### ### ###', example: '512345678' },\n { iso2: 'US', name: 'États-Unis', dialCode: '1', lengths: [10], format: '(###) ###-####', example: '2015550123' },\n { iso2: 'CA', name: 'Canada', dialCode: '1', lengths: [10], format: '(###) ###-####', example: '2042345678' },\n { iso2: 'MA', name: 'Maroc', dialCode: '212', lengths: [9], format: '### ## ## ##', example: '612345678' },\n { iso2: 'TR', name: 'Turquie', dialCode: '90', lengths: [10], format: '### ### ## ##', example: '5012345678' },\n];\n\n/** Reduce raw input to national-significant digits (drops non-digits & leading trunk zeros). */\nexport function sdsNormalizeSignificant(raw: string): string {\n return (raw ?? '').replace(/\\D/g, '').replace(/^0+/, '');\n}\n\n/**\n * Group `digits` for display using `mask` ('#' = digit). Digits beyond the mask\n * are appended grouped in pairs; an incomplete number stops at the last digit.\n */\nexport function sdsFormatNational(digits: string, mask: string): string {\n if (!digits) return '';\n if (!mask) return digits.replace(/(\\d{2})(?=\\d)/g, '$1 ');\n\n let out = '';\n let di = 0;\n for (const ch of mask) {\n if (di >= digits.length) break;\n if (ch === '#') out += digits[di++];\n else out += ch;\n }\n if (di < digits.length) {\n out += ' ' + digits.slice(di).replace(/(\\d{2})(?=\\d)/g, '$1 ');\n }\n return out.trim();\n}\n\n/** Find the country whose dial code is the longest prefix of an E.164 digit string. */\nexport function sdsMatchDialCode(\n e164Digits: string,\n countries: readonly SdsPhoneCountry[],\n): SdsPhoneCountry | null {\n let best: SdsPhoneCountry | null = null;\n for (const c of countries) {\n if (e164Digits.startsWith(c.dialCode)) {\n if (!best || c.dialCode.length > best.dialCode.length) best = c;\n }\n }\n return best;\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnDestroy,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport {\n SDS_PHONE_COUNTRIES,\n SdsPhoneCountry,\n sdsFormatNational,\n sdsMatchDialCode,\n sdsNormalizeSignificant,\n} from './phone-countries';\n\nexport type SdsPhoneInputSize = 'sm' | 'md' | 'lg';\n\n/** Payload of (phoneChange): the canonical and parsed parts of the number. */\nexport interface SdsPhoneValue {\n /** E.164 string, e.g. '+32470123456' (empty when no number is entered). */\n e164: string;\n /** Selected country ISO2 code. */\n country: string;\n /** Dial code without '+', e.g. '32'. */\n dialCode: string;\n /** National-significant digits, e.g. '470123456'. */\n national: string;\n /** Whether the national number matches an expected length for the country. */\n valid: boolean;\n}\n\nconst SIZES: Record<SdsPhoneInputSize, string> = {\n sm: 'h-9 text-sm',\n md: 'h-10 text-sm',\n lg: 'h-12 text-base',\n};\n\nlet nextId = 0;\n\n/**\n * International phone number input: a country selector (ISO chip + dial code)\n * with a searchable, body-appended dropdown, plus a formatted national-number\n * field. Implements ControlValueAccessor (value is an E.164 string such as\n * '+32470123456') and Validator (national length is checked per country).\n *\n * @example\n * <sds-phone-input label=\"Téléphone\" defaultCountry=\"BE\"\n * [preferredCountries]=\"['BE','FR','LU']\"\n * [(ngModel)]=\"phone\" required />\n */\n@Component({\n selector: 'sds-phone-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SdsPhoneInput), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SdsPhoneInput), multi: true },\n ],\n host: {\n class: 'block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n @if (label()) {\n <label [for]=\"fieldId\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div\n #anchor\n class=\"relative flex items-stretch rounded-control border bg-white transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n <!-- country selector -->\n <button\n type=\"button\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"'Indicatif pays : ' + country().name\"\n class=\"flex shrink-0 items-center gap-1.5 rounded-l-control pl-2.5 pr-2 focus:outline-none\"\n [class.cursor-not-allowed]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span class=\"grid h-5 min-w-7 place-items-center rounded bg-muted px-1 text-[11px] font-semibold tracking-wide text-ink-soft\">\n {{ country().iso2 }}\n </span>\n <span class=\"text-ink-soft\">+{{ country().dialCode }}</span>\n <sds-icon\n name=\"chevron-down\"\n [size]=\"16\"\n class=\"text-ink-faint transition-transform duration-150\"\n [class.rotate-180]=\"open()\"\n />\n </button>\n\n <div class=\"my-1.5 w-px shrink-0 bg-border\"></div>\n\n <!-- national number -->\n <input\n #field\n [id]=\"fieldId\"\n type=\"tel\"\n inputmode=\"tel\"\n autocomplete=\"tel-national\"\n [placeholder]=\"placeholderText()\"\n [disabled]=\"isDisabled()\"\n [value]=\"display()\"\n [attr.aria-invalid]=\"showError() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n class=\"w-full min-w-0 bg-transparent px-3 outline-none placeholder:text-ink-faint disabled:cursor-not-allowed\"\n (input)=\"onInput($event)\"\n (blur)=\"markTouched()\"\n />\n\n @if (clearable() && national() && !isDisabled()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-label=\"Effacer\"\n class=\"mr-1.5 inline-flex w-7 shrink-0 items-center justify-center rounded-full text-ink-faint hover:bg-black/5 hover:text-ink-soft\"\n (click)=\"clear()\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n </div>\n\n @if (open()) {\n <!-- Appended to document.body on open (see positionPanel). -->\n <div\n data-sds-phone-panel\n class=\"fixed z-[1000] overflow-hidden rounded-card border border-border bg-surface shadow-lg\"\n >\n <div class=\"border-b border-border p-2\">\n <div class=\"relative flex items-center rounded-control border border-border focus-within:border-brand-500\">\n <sds-icon name=\"search\" [size]=\"16\" class=\"pointer-events-none absolute left-2.5 text-ink-faint\" />\n <input\n type=\"text\"\n [attr.aria-controls]=\"listId\"\n [value]=\"filterText()\"\n placeholder=\"Rechercher un pays…\"\n aria-label=\"Rechercher un pays\"\n class=\"h-9 w-full bg-transparent pl-8 pr-2 text-sm text-ink outline-none placeholder:text-ink-faint\"\n (input)=\"onFilter($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n </div>\n\n <ul [id]=\"listId\" role=\"listbox\" class=\"max-h-64 overflow-auto py-1\">\n @for (c of filteredCountries(); track c.iso2; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"c.iso2 === country().iso2\"\n [attr.data-index]=\"i\"\n [class]=\"optionClass(i, c)\"\n (click)=\"selectCountry(c)\"\n (mouseenter)=\"highlightedIndex.set(i)\"\n >\n <span class=\"grid h-5 min-w-7 place-items-center rounded bg-muted px-1 text-[11px] font-semibold tracking-wide text-ink-soft\">\n {{ c.iso2 }}\n </span>\n <span class=\"flex-1 truncate\">{{ c.name }}</span>\n <span class=\"text-ink-faint\">+{{ c.dialCode }}</span>\n </li>\n } @empty {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">Aucun pays</li>\n }\n </ul>\n </div>\n }\n\n @if (showError()) {\n <p [id]=\"fieldId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">\n {{ errorMessage() }}\n </p>\n } @else if (hint() || autoHint()) {\n <p [id]=\"fieldId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">\n {{ hint() || autoHint() }}\n </p>\n }\n `,\n})\nexport class SdsPhoneInput implements ControlValueAccessor, Validator, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n protected readonly fieldId = `sds-phone-${nextId++}`;\n protected readonly listId = `${this.fieldId}-list`;\n\n readonly label = input<string>('');\n readonly hint = input<string>('');\n /** External error message; overrides the built-in validation message. */\n readonly error = input<string>('');\n readonly size = input<SdsPhoneInputSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Initial country (ISO2) when no value is written. */\n readonly defaultCountry = input<string>('BE');\n /** ISO2 codes shown first in the list. */\n readonly preferredCountries = input<string[]>([]);\n /** Restrict the list to these ISO2 codes (empty = all). */\n readonly onlyCountries = input<string[]>([]);\n /** Show an example number as a hint when no [hint] is provided. */\n readonly showExampleHint = input(true, { transform: booleanAttribute });\n readonly requiredMessage = input<string>('Numéro de téléphone requis');\n\n /** Emitted with the parsed parts whenever the number or country changes. */\n readonly phoneChange = output<SdsPhoneValue>();\n\n protected readonly national = signal('');\n protected readonly countryIso = signal('');\n protected readonly open = signal(false);\n protected readonly filterText = signal('');\n protected readonly highlightedIndex = signal(-1);\n protected readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n\n private readonly anchor = viewChild<ElementRef<HTMLElement>>('anchor');\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private panelEl: HTMLElement | null = null;\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Countries after applying [onlyCountries] and [preferredCountries] ordering. */\n protected readonly availableCountries = computed<SdsPhoneCountry[]>(() => {\n const only = this.onlyCountries().map((c) => c.toUpperCase());\n let list = SDS_PHONE_COUNTRIES.slice();\n if (only.length) list = list.filter((c) => only.includes(c.iso2));\n\n const preferred = this.preferredCountries().map((c) => c.toUpperCase());\n if (preferred.length) {\n const rank = (iso2: string) => {\n const i = preferred.indexOf(iso2);\n return i === -1 ? preferred.length : i;\n };\n list = list.slice().sort((a, b) => rank(a.iso2) - rank(b.iso2));\n }\n return list;\n });\n\n protected readonly country = computed<SdsPhoneCountry>(() => {\n const iso = this.countryIso() || this.defaultCountry().toUpperCase();\n return (\n this.availableCountries().find((c) => c.iso2 === iso) ??\n this.availableCountries()[0] ??\n SDS_PHONE_COUNTRIES[0]\n );\n });\n\n protected readonly filteredCountries = computed<SdsPhoneCountry[]>(() => {\n const f = this.filterText().trim().toLowerCase();\n const all = this.availableCountries();\n if (!f) return all;\n return all.filter(\n (c) =>\n c.name.toLowerCase().includes(f) ||\n c.iso2.toLowerCase().includes(f) ||\n c.dialCode.includes(f.replace('+', '')),\n );\n });\n\n protected readonly display = computed(() =>\n sdsFormatNational(this.national(), this.country().format),\n );\n\n protected readonly placeholderText = computed(() =>\n sdsFormatNational(this.country().example, this.country().format),\n );\n\n protected readonly autoHint = computed(() => {\n if (!this.showExampleHint()) return '';\n const c = this.country();\n return `Ex. +${c.dialCode} ${sdsFormatNational(c.example, c.format)}`;\n });\n\n protected readonly e164 = computed(() => {\n const d = this.national();\n return d ? `+${this.country().dialCode}${d}` : '';\n });\n\n /** Non-empty but national length is not valid for the country. */\n protected readonly invalid = computed(() => {\n const d = this.national();\n if (!d) return false;\n const lengths = this.country().lengths;\n return lengths.length > 0 && !lengths.includes(d.length);\n });\n\n protected readonly showError = computed(() => {\n if (this.error()) return true;\n if (!this.touched()) return false;\n if (this.required() && !this.national()) return true;\n return this.invalid();\n });\n\n protected readonly errorMessage = computed(() => {\n if (this.error()) return this.error();\n if (this.required() && !this.national()) return this.requiredMessage();\n const lengths = this.country().lengths;\n const expected = lengths.join(' ou ');\n const len = this.national().length;\n const min = Math.min(...lengths);\n if (len < min) return `Numéro incomplet — ${expected} chiffres attendus`;\n return `Numéro invalide — ${expected} chiffres attendus`;\n });\n\n protected readonly describedBy = computed(() => {\n if (this.showError()) return `${this.fieldId}-err`;\n if (this.hint() || this.autoHint()) return `${this.fieldId}-hint`;\n return null;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.showError()\n ? 'border-danger focus-within:border-danger focus-within:ring-2 focus-within:ring-danger/25'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n return parts.join(' ');\n });\n\n protected optionId(i: number): string {\n return `${this.fieldId}-opt-${i}`;\n }\n\n protected optionClass(i: number, c: SdsPhoneCountry): string {\n const base = 'flex cursor-pointer items-center gap-2.5 px-3 py-2 text-sm text-ink';\n let cls = base;\n if (this.highlightedIndex() === i) cls += ' bg-brand-50';\n if (c.iso2 === this.country().iso2) cls += ' font-medium';\n return cls;\n }\n\n // --- national number input ---\n protected onInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n const max = Math.max(...this.country().lengths, 0) || 15;\n const next = sdsNormalizeSignificant(raw).slice(0, max);\n this.national.set(next);\n this.emit();\n }\n\n protected clear(): void {\n this.national.set('');\n this.markTouched();\n this.emit();\n this.field()?.nativeElement.focus();\n }\n\n // --- country dropdown ---\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled()) return;\n this.filterText.set('');\n this.highlightedIndex.set(\n this.filteredCountries().findIndex((c) => c.iso2 === this.country().iso2),\n );\n this.open.set(true);\n afterNextRender(\n () => {\n this.panelEl = this.host.nativeElement.querySelector<HTMLElement>('[data-sds-phone-panel]');\n this.positionPanel();\n this.addReflowListeners();\n this.panelEl?.querySelector<HTMLInputElement>('input')?.focus();\n this.scrollHighlightedIntoView();\n },\n { injector: this.injector },\n );\n }\n\n protected close(returnFocus = false): void {\n if (!this.open()) return;\n this.removeReflowListeners();\n this.panelEl?.remove();\n this.panelEl = null;\n this.open.set(false);\n if (returnFocus) this.anchor()?.nativeElement.querySelector('button')?.focus();\n }\n\n protected selectCountry(c: SdsPhoneCountry): void {\n const changed = c.iso2 !== this.country().iso2;\n this.countryIso.set(c.iso2);\n // Re-clamp the existing number to the new country's max length.\n const max = Math.max(...c.lengths, 0) || 15;\n if (this.national().length > max) this.national.set(this.national().slice(0, max));\n this.close(true);\n if (changed) this.emit();\n this.field()?.nativeElement.focus();\n }\n\n protected onFilter(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n this.highlightedIndex.set(this.filteredCountries().length ? 0 : -1);\n setTimeout(() => this.positionPanel());\n }\n\n // --- keyboard ---\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.openPanel();\n }\n return;\n }\n this.handleNavKey(event);\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n this.handleNavKey(event);\n }\n\n private handleNavKey(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); this.move(1); break;\n case 'ArrowUp': event.preventDefault(); this.move(-1); break;\n case 'Home': event.preventDefault(); this.highlightedIndex.set(0); this.scrollHighlightedIntoView(); break;\n case 'End': event.preventDefault(); this.highlightedIndex.set(this.filteredCountries().length - 1); this.scrollHighlightedIntoView(); break;\n case 'Enter': {\n event.preventDefault();\n const c = this.filteredCountries()[this.highlightedIndex()];\n if (c) this.selectCountry(c);\n break;\n }\n case 'Escape': event.preventDefault(); this.close(true); break;\n case 'Tab': this.close(false); break;\n }\n }\n\n private move(delta: number): void {\n const list = this.filteredCountries();\n if (!list.length) return;\n const len = list.length;\n const i = (this.highlightedIndex() + delta + len) % len;\n this.highlightedIndex.set(i);\n this.scrollHighlightedIntoView();\n }\n\n private scrollHighlightedIntoView(): void {\n setTimeout(() => {\n this.panelEl\n ?.querySelector<HTMLElement>(`[data-index=\"${this.highlightedIndex()}\"]`)\n ?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n // --- body-appended overlay positioning (mirrors sds-select) ---\n private readonly reflow = (): void => this.positionPanel();\n private listening = false;\n\n private addReflowListeners(): void {\n if (this.listening) return;\n window.addEventListener('scroll', this.reflow, true);\n window.addEventListener('resize', this.reflow);\n this.listening = true;\n }\n private removeReflowListeners(): void {\n if (!this.listening) return;\n window.removeEventListener('scroll', this.reflow, true);\n window.removeEventListener('resize', this.reflow);\n this.listening = false;\n }\n\n private positionPanel(): void {\n const anchorEl = this.anchor()?.nativeElement;\n const panelEl = this.panelEl;\n if (!anchorEl || !panelEl) return;\n if (panelEl.parentElement !== document.body) document.body.appendChild(panelEl);\n\n const r = anchorEl.getBoundingClientRect();\n panelEl.style.minWidth = `${Math.round(r.width)}px`;\n const ph = panelEl.offsetHeight || 280;\n const gap = 4;\n const margin = 8;\n\n let top = r.bottom + gap;\n if (top + ph > window.innerHeight - margin && r.top - gap - ph > margin) {\n top = r.top - gap - ph;\n }\n let left = r.left;\n const pw = panelEl.offsetWidth || r.width;\n if (left + pw > window.innerWidth - margin) {\n left = Math.max(margin, window.innerWidth - margin - pw);\n }\n panelEl.style.top = `${Math.round(top)}px`;\n panelEl.style.left = `${Math.round(left)}px`;\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.open()) return;\n const target = event.target as Node;\n const inField = this.host.nativeElement.contains(target);\n const inPanel = !!this.panelEl && this.panelEl.contains(target);\n if (!inField && !inPanel) this.close();\n }\n\n protected markTouched(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n ngOnDestroy(): void {\n this.removeReflowListeners();\n this.panelEl?.remove();\n }\n\n private emit(): void {\n const value = this.e164();\n this.onChange(value);\n this.onValidatorChange();\n this.phoneChange.emit({\n e164: value,\n country: this.country().iso2,\n dialCode: this.country().dialCode,\n national: this.national(),\n valid: !!value && !this.invalid(),\n });\n }\n\n // --- ControlValueAccessor ---\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n const raw = (value ?? '').trim();\n if (!raw) {\n this.national.set('');\n return;\n }\n if (raw.startsWith('+')) {\n const digits = raw.slice(1).replace(/\\D/g, '');\n const match = sdsMatchDialCode(digits, this.availableCountries());\n if (match) {\n this.countryIso.set(match.iso2);\n this.national.set(sdsNormalizeSignificant(digits.slice(match.dialCode.length)));\n return;\n }\n }\n // No '+' / unknown dial code: treat as a national number for the current country.\n this.national.set(sdsNormalizeSignificant(raw));\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n if (isDisabled) this.close();\n }\n\n // --- Validator ---\n private onValidatorChange: () => void = () => {};\n\n validate(_control: AbstractControl): ValidationErrors | null {\n const d = this.national();\n if (!d) return this.required() ? { required: true } : null;\n const lengths = this.country().lengths;\n if (lengths.length && !lengths.includes(d.length)) {\n return {\n phoneInvalid: {\n country: this.country().iso2,\n expectedLengths: lengths,\n actualLength: d.length,\n },\n };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsSelect } from '../select/sds-select';\n\nexport type SdsPaginatorSize = 'sm' | 'md' | 'lg';\n\n/** Payload emitted by (pageChange) whenever the page or page size changes. */\nexport interface SdsPaginatorState {\n /** Zero-based index of the current page. */\n page: number;\n /** Zero-based index of the first record on the current page. */\n first: number;\n /** Rows displayed per page. */\n rows: number;\n /** Total number of pages. */\n pageCount: number;\n /** Total number of records. */\n totalRecords: number;\n}\n\nconst SIZES: Record<SdsPaginatorSize, string> = {\n sm: 'h-8 min-w-8 text-xs',\n md: 'h-9 min-w-9 text-sm',\n lg: 'h-11 min-w-11 text-base',\n};\n\nconst ICON_SIZES: Record<SdsPaginatorSize, number> = { sm: 15, md: 16, lg: 18 };\n\nconst BTN_BASE =\n 'inline-flex items-center justify-center rounded-control px-1.5 font-medium ' +\n 'transition-colors select-none focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-brand-500 focus-visible:ring-offset-1';\n\n/**\n * Pagination control (mirrors PrimeNG's paginator). Drives a sliding window of\n * page links with first/prev/next/last navigation, an optional rows-per-page\n * dropdown (reuses <sds-select>), a current-page report and a jump-to-page input.\n *\n * State is exposed as two-way models: [first] (zero-based index of the first\n * record on the page) and [rows] (page size). A combined (pageChange) event\n * carries the full {@link SdsPaginatorState} on every change.\n *\n * @example\n * <sds-paginator\n * [totalRecords]=\"120\"\n * [(first)]=\"first\"\n * [(rows)]=\"rows\"\n * [rowsPerPageOptions]=\"[10, 20, 50]\"\n * showCurrentPageReport\n * (pageChange)=\"load($event)\"\n * />\n */\n@Component({\n selector: 'sds-paginator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, SdsIcon, SdsSelect],\n host: { '[class]': 'hostClass()' },\n template: `\n @if (showCurrentPageReport()) {\n <span class=\"text-sm text-ink-soft\">{{ reportText() }}</span>\n }\n\n <div class=\"flex flex-wrap items-center gap-x-4 gap-y-2\">\n <!-- page navigation -->\n <nav class=\"flex items-center gap-1\" aria-label=\"Pagination\">\n @if (showFirstLastIcon()) {\n <button\n type=\"button\"\n [class]=\"navClass(firstDisabled())\"\n [disabled]=\"firstDisabled()\"\n aria-label=\"Première page\"\n (click)=\"firstPage()\"\n >\n <sds-icon name=\"chevrons-left\" [size]=\"iconSize()\" />\n </button>\n }\n <button\n type=\"button\"\n [class]=\"navClass(firstDisabled())\"\n [disabled]=\"firstDisabled()\"\n aria-label=\"Page précédente\"\n (click)=\"prevPage()\"\n >\n <sds-icon name=\"chevron-left\" [size]=\"iconSize()\" />\n </button>\n\n @if (showPageLinks()) {\n @for (p of pageLinks(); track $index) {\n <button\n type=\"button\"\n [class]=\"linkClass(p === page())\"\n [attr.aria-label]=\"'Page ' + (p + 1)\"\n [attr.aria-current]=\"p === page() ? 'page' : null\"\n [disabled]=\"disabled()\"\n (click)=\"changePage(p)\"\n >\n {{ p + 1 }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n [class]=\"navClass(lastDisabled())\"\n [disabled]=\"lastDisabled()\"\n aria-label=\"Page suivante\"\n (click)=\"nextPage()\"\n >\n <sds-icon name=\"chevron-right\" [size]=\"iconSize()\" />\n </button>\n @if (showFirstLastIcon()) {\n <button\n type=\"button\"\n [class]=\"navClass(lastDisabled())\"\n [disabled]=\"lastDisabled()\"\n aria-label=\"Dernière page\"\n (click)=\"lastPage()\"\n >\n <sds-icon name=\"chevrons-right\" [size]=\"iconSize()\" />\n </button>\n }\n </nav>\n\n <!-- rows per page -->\n @if (rowsPerPageOptions().length) {\n <label class=\"flex items-center gap-2 text-sm text-ink-soft\">\n <span>{{ rowsPerPageLabel() }}</span>\n <span class=\"w-20\">\n <sds-select\n size=\"sm\"\n ariaLabel=\"Lignes par page\"\n [options]=\"rowsPerPageOptions()\"\n [ngModel]=\"rows()\"\n (ngModelChange)=\"onRowsChange($event)\"\n [disabled]=\"disabled()\"\n />\n </span>\n </label>\n }\n\n <!-- jump to page -->\n @if (showJumpToPageInput()) {\n <label class=\"flex items-center gap-2 text-sm text-ink-soft\">\n <span>{{ jumpToPageLabel() }}</span>\n <input\n type=\"number\"\n min=\"1\"\n [max]=\"pageCount()\"\n [value]=\"page() + 1\"\n [disabled]=\"disabled()\"\n aria-label=\"Aller à la page\"\n (change)=\"onJump($event)\"\n class=\"h-9 w-16 rounded-control border border-border bg-white px-2 text-center text-sm text-ink outline-none transition-colors focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25 disabled:opacity-60\"\n />\n </label>\n }\n </div>\n `,\n})\nexport class SdsPaginator {\n /** Total number of records to paginate. */\n readonly totalRecords = input(0, { transform: numberAttribute });\n /** Zero-based index of the first record on the current page (two-way). */\n readonly first = model(0);\n /** Rows displayed per page (two-way). */\n readonly rows = model(10);\n /** When non-empty, renders a rows-per-page dropdown with these choices. */\n readonly rowsPerPageOptions = input<number[]>([]);\n /** Maximum count of numbered page links shown in the sliding window. */\n readonly pageLinkSize = input(5, { transform: numberAttribute });\n readonly showFirstLastIcon = input(true, { transform: booleanAttribute });\n readonly showPageLinks = input(true, { transform: booleanAttribute });\n readonly showCurrentPageReport = input(false, { transform: booleanAttribute });\n /** Tokens: {first} {last} {totalRecords} {currentPage} {totalPages} {rows}. */\n readonly currentPageReportTemplate = input<string>('{first} – {last} sur {totalRecords}');\n readonly showJumpToPageInput = input(false, { transform: booleanAttribute });\n readonly rowsPerPageLabel = input<string>('Lignes par page');\n readonly jumpToPageLabel = input<string>('Aller à');\n readonly size = input<SdsPaginatorSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Fires after any page or page-size change with the full paginator state. */\n readonly pageChange = output<SdsPaginatorState>();\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalRecords() / Math.max(1, this.rows()))),\n );\n\n protected readonly page = computed(() =>\n Math.min(this.pageCount() - 1, Math.floor(this.first() / Math.max(1, this.rows()))),\n );\n\n protected readonly firstDisabled = computed(() => this.disabled() || this.page() <= 0);\n protected readonly lastDisabled = computed(\n () => this.disabled() || this.page() >= this.pageCount() - 1,\n );\n\n protected readonly iconSize = computed(() => ICON_SIZES[this.size()]);\n\n // Sliding window of zero-based page indices, centred on the current page.\n protected readonly pageLinks = computed<number[]>(() => {\n const pages = this.pageCount();\n const visible = Math.min(this.pageLinkSize(), pages);\n let start = Math.max(0, Math.ceil(this.page() - visible / 2));\n const end = Math.min(pages - 1, start + visible - 1);\n start = Math.max(0, start - (visible - (end - start + 1)));\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n protected readonly reportText = computed(() => {\n const total = this.totalRecords();\n const first = total === 0 ? 0 : this.first() + 1;\n const last = Math.min(this.first() + this.rows(), total);\n return this.currentPageReportTemplate()\n .replace('{first}', String(first))\n .replace('{last}', String(last))\n .replace('{totalRecords}', String(total))\n .replace('{currentPage}', String(this.page() + 1))\n .replace('{totalPages}', String(this.pageCount()))\n .replace('{rows}', String(this.rows()));\n });\n\n protected readonly hostClass = computed(() => {\n const base = 'flex flex-wrap items-center gap-x-4 gap-y-3';\n const justify = this.showCurrentPageReport() ? 'justify-between' : 'justify-center';\n return `${base} ${justify}`;\n });\n\n protected navClass(isDisabled: boolean): string {\n const cls = `${BTN_BASE} ${SIZES[this.size()]} px-0`;\n return isDisabled\n ? `${cls} text-ink-faint opacity-50 cursor-not-allowed`\n : `${cls} text-ink-soft hover:bg-muted cursor-pointer`;\n }\n\n protected linkClass(active: boolean): string {\n const cls = `${BTN_BASE} ${SIZES[this.size()]}`;\n if (this.disabled()) return `${cls} text-ink-faint opacity-50 cursor-not-allowed`;\n return active\n ? `${cls} bg-brand-600 text-white hover:bg-brand-700 cursor-pointer`\n : `${cls} text-ink-soft hover:bg-muted cursor-pointer`;\n }\n\n protected firstPage(): void {\n this.changePage(0);\n }\n protected prevPage(): void {\n this.changePage(this.page() - 1);\n }\n protected nextPage(): void {\n this.changePage(this.page() + 1);\n }\n protected lastPage(): void {\n this.changePage(this.pageCount() - 1);\n }\n\n protected changePage(target: number): void {\n if (this.disabled()) return;\n const next = Math.min(Math.max(target, 0), this.pageCount() - 1);\n const newFirst = next * this.rows();\n if (newFirst === this.first()) return;\n this.first.set(newFirst);\n this.emit();\n }\n\n protected onRowsChange(value: number): void {\n if (this.disabled()) return;\n const newRows = Math.max(1, Number(value) || 1);\n if (newRows === this.rows()) return;\n const anchor = this.first();\n this.rows.set(newRows);\n // Keep the first visible record anchored within the new page size.\n const clamped = Math.min(anchor, (this.pageCount() - 1) * newRows);\n this.first.set(Math.floor(clamped / newRows) * newRows);\n this.emit();\n }\n\n protected onJump(event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = parseInt(input.value, 10);\n if (!Number.isNaN(value)) this.changePage(value - 1);\n // Reflect the clamped page back into the field.\n input.value = String(this.page() + 1);\n }\n\n private emit(): void {\n this.pageChange.emit({\n page: this.page(),\n first: this.first(),\n rows: this.rows(),\n pageCount: this.pageCount(),\n totalRecords: this.totalRecords(),\n });\n }\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\n/** Identifier of a tab / panel pair. Keep types consistent across a tab set. */\nexport type SdsTabValue = string | number | null;\n\nlet nextId = 0;\n\n/**\n * Coordinates a single <sds-tabs> instance: holds the active value (shared from\n * the host's two-way model), tracks registered tabs for default selection and\n * generates the ARIA ids that link each tab to its panel.\n *\n * Provided at the <sds-tabs> component level so every tab set is isolated.\n */\n@Injectable()\nexport class SdsTabsStore {\n /** Unique base id used to link tabs and panels via ARIA. */\n readonly id = `sds-tabs-${nextId++}`;\n /** Whether the tab list scrolls horizontally (mirrors [scrollable]). */\n readonly scrollable = signal(false);\n\n private value!: WritableSignal<SdsTabValue>;\n private readonly registered = signal<SdsTabValue[]>([]);\n\n /** Called once by <sds-tabs> to share its two-way `value` signal. */\n connect(value: WritableSignal<SdsTabValue>): void {\n this.value = value;\n }\n\n activeValue(): SdsTabValue {\n return this.value();\n }\n\n isActive(value: SdsTabValue): boolean {\n return this.value() === value;\n }\n\n select(value: SdsTabValue): void {\n this.value.set(value);\n }\n\n registerTab(value: SdsTabValue): void {\n this.registered.update((list) => (list.includes(value) ? list : [...list, value]));\n // Default to the first registered tab when no value has been provided.\n if (this.value() == null) this.value.set(value);\n }\n\n unregisterTab(value: SdsTabValue): void {\n this.registered.update((list) => list.filter((v) => v !== value));\n }\n\n tabId(value: SdsTabValue): string {\n return `${this.id}-tab-${value}`;\n }\n\n panelId(value: SdsTabValue): string {\n return `${this.id}-panel-${value}`;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { SdsTabsStore, SdsTabValue } from './sds-tabs-store';\n\n/**\n * Root of a tab set. Compose with <sds-tab-list> (headers) and <sds-tab-panels>\n * (content). The active tab is the [value], matched against each <sds-tab> /\n * <sds-tab-panel> [value]; it is two-way bindable via [(value)]. When omitted,\n * the first registered tab is selected.\n *\n * @example\n * <sds-tabs [(value)]=\"active\">\n * <sds-tab-list>\n * <sds-tab value=\"0\">Détails</sds-tab>\n * <sds-tab value=\"1\">Historique</sds-tab>\n * </sds-tab-list>\n * <sds-tab-panels>\n * <sds-tab-panel value=\"0\">…</sds-tab-panel>\n * <sds-tab-panel value=\"1\">…</sds-tab-panel>\n * </sds-tab-panels>\n * </sds-tabs>\n */\n@Component({\n selector: 'sds-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [SdsTabsStore],\n host: { class: 'block' },\n template: `<ng-content />`,\n})\nexport class SdsTabs {\n private readonly store = inject(SdsTabsStore);\n\n /** Value of the active tab (two-way). */\n readonly value = model<SdsTabValue>(null);\n /** Let the tab list scroll horizontally instead of overflowing. */\n readonly scrollable = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.store.connect(this.value);\n effect(() => this.store.scrollable.set(this.scrollable()));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { SdsTabsStore } from './sds-tabs-store';\n\n/**\n * Container (role=\"tablist\") for the <sds-tab> headers. Renders the bottom rule\n * and handles roving-focus keyboard navigation (Arrow keys, Home, End) with\n * automatic activation.\n */\n@Component({\n selector: 'sds-tab-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'tablist',\n '[class]': 'listClass()',\n '(keydown)': 'onKeydown($event)',\n },\n template: `<ng-content />`,\n})\nexport class SdsTabList {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly store = inject(SdsTabsStore);\n\n protected readonly listClass = computed(() => {\n const base = 'relative flex border-b border-border';\n return this.store.scrollable() ? `${base} overflow-x-auto` : base;\n });\n\n protected onKeydown(event: KeyboardEvent): void {\n const keys = ['ArrowRight', 'ArrowLeft', 'Home', 'End'];\n if (!keys.includes(event.key)) return;\n\n const tabs = Array.from(\n this.host.nativeElement.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]'),\n ).filter((b) => !b.disabled);\n if (!tabs.length) return;\n\n event.preventDefault();\n const current = tabs.indexOf(document.activeElement as HTMLButtonElement);\n let next: number;\n switch (event.key) {\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = tabs.length - 1;\n break;\n case 'ArrowRight':\n next = current < 0 ? 0 : (current + 1) % tabs.length;\n break;\n default: // ArrowLeft\n next = current <= 0 ? tabs.length - 1 : current - 1;\n break;\n }\n\n const el = tabs[next];\n el.focus();\n el.click(); // automatic activation\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { SdsTabsStore, SdsTabValue } from './sds-tabs-store';\n\n/**\n * A single tab header (role=\"tab\"). Project the label and, optionally, an\n * <sds-icon> for an icon + text header. Set [disabled] to make it unselectable.\n */\n@Component({\n selector: 'sds-tab',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'contents' },\n template: `\n <button\n type=\"button\"\n role=\"tab\"\n [id]=\"store.tabId(value())\"\n [attr.aria-selected]=\"active()\"\n [attr.aria-controls]=\"store.panelId(value())\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.tabindex]=\"active() && !disabled() ? 0 : -1\"\n [disabled]=\"disabled()\"\n [class]=\"tabClass()\"\n (click)=\"select()\"\n >\n <ng-content />\n </button>\n `,\n})\nexport class SdsTab implements OnInit, OnDestroy {\n protected readonly store = inject(SdsTabsStore);\n\n readonly value = input.required<SdsTabValue>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly active = computed(() => this.store.isActive(this.value()));\n\n ngOnInit(): void {\n this.store.registerTab(this.value());\n }\n\n ngOnDestroy(): void {\n this.store.unregisterTab(this.value());\n }\n\n protected select(): void {\n if (this.disabled()) return;\n this.store.select(this.value());\n }\n\n protected tabClass(): string {\n const base =\n 'relative -mb-px inline-flex items-center gap-2 whitespace-nowrap border-b-2 px-4 py-2.5 ' +\n 'text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-brand-500 focus-visible:ring-inset';\n if (this.disabled()) {\n return `${base} border-transparent text-ink-faint opacity-50 cursor-not-allowed`;\n }\n return this.active()\n ? `${base} border-brand-600 text-brand-700 cursor-pointer`\n : `${base} border-transparent text-ink-soft hover:border-border hover:text-ink cursor-pointer`;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/** Wrapper for the <sds-tab-panel> content blocks of a tab set. */\n@Component({\n selector: 'sds-tab-panels',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div class=\"pt-4\">\n <ng-content />\n </div>\n `,\n})\nexport class SdsTabPanels {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { SdsTabsStore, SdsTabValue } from './sds-tabs-store';\n\n/**\n * Content for one tab (role=\"tabpanel\"); shown only while its [value] matches\n * the active tab. Inactive panels are not rendered (their content is created\n * on activation), so panel state does not persist across switches.\n */\n@Component({\n selector: 'sds-tab-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n @if (active()) {\n <div\n role=\"tabpanel\"\n [id]=\"store.panelId(value())\"\n [attr.aria-labelledby]=\"store.tabId(value())\"\n tabindex=\"0\"\n class=\"rounded-control focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n >\n <ng-content />\n </div>\n }\n `,\n})\nexport class SdsTabPanel {\n protected readonly store = inject(SdsTabsStore);\n\n readonly value = input.required<SdsTabValue>();\n\n protected readonly active = computed(() => this.store.isActive(this.value()));\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\n/** Identifier of an accordion panel. Keep types consistent across a set. */\nexport type SdsAccordionValue = string | number;\n/** Active value(s): a single value (or null) normally, an array in multiple mode. */\nexport type SdsAccordionActive = SdsAccordionValue | SdsAccordionValue[] | null;\n\nlet nextId = 0;\n\n/**\n * Coordinates a single <sds-accordion>: holds the open value(s) (shared from the\n * host's two-way model), the multiple-open flag, and generates the ARIA ids that\n * link each header to its content region.\n *\n * Provided at the <sds-accordion> component level so every accordion is isolated.\n */\n@Injectable()\nexport class SdsAccordionStore {\n /** Unique base id used to link headers and content regions via ARIA. */\n readonly id = `sds-accordion-${nextId++}`;\n /** Whether more than one panel may be open at a time (mirrors [multiple]). */\n readonly multiple = signal(false);\n\n private value!: WritableSignal<SdsAccordionActive>;\n\n /** Called once by <sds-accordion> to share its two-way `value` signal. */\n connect(value: WritableSignal<SdsAccordionActive>): void {\n this.value = value;\n }\n\n isOpen(value: SdsAccordionValue): boolean {\n const current = this.value();\n return Array.isArray(current) ? current.includes(value) : current === value;\n }\n\n toggle(value: SdsAccordionValue): void {\n if (this.multiple()) {\n const current = this.asArray();\n this.value.set(\n current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value],\n );\n } else {\n // Single mode: clicking the open panel collapses it.\n this.value.set(this.value() === value ? null : value);\n }\n }\n\n headerId(value: SdsAccordionValue): string {\n return `${this.id}-header-${value}`;\n }\n\n contentId(value: SdsAccordionValue): string {\n return `${this.id}-content-${value}`;\n }\n\n private asArray(): SdsAccordionValue[] {\n const current = this.value();\n if (Array.isArray(current)) return current;\n return current == null ? [] : [current];\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { SdsAccordionActive, SdsAccordionStore } from './sds-accordion-store';\n\n/**\n * Root of an accordion. Compose with <sds-accordion-panel> children, each\n * holding an <sds-accordion-header> and an <sds-accordion-content>. The open\n * panel is the [value], matched against each panel's [value]; it is two-way\n * bindable via [(value)]. With [multiple], several panels may be open at once\n * and [value] is an array.\n *\n * @example\n * <sds-accordion [(value)]=\"open\">\n * <sds-accordion-panel value=\"0\">\n * <sds-accordion-header>Section 1</sds-accordion-header>\n * <sds-accordion-content>…</sds-accordion-content>\n * </sds-accordion-panel>\n * </sds-accordion>\n */\n@Component({\n selector: 'sds-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [SdsAccordionStore],\n host: {\n class: 'block divide-y divide-border overflow-hidden rounded-card border border-border bg-surface',\n '(keydown)': 'onKeydown($event)',\n },\n template: `<ng-content />`,\n})\nexport class SdsAccordion {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly store = inject(SdsAccordionStore);\n\n /** Open panel value, or array of values in multiple mode (two-way). */\n readonly value = model<SdsAccordionActive>(null);\n /** Allow more than one panel open at a time. */\n readonly multiple = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.store.connect(this.value);\n effect(() => this.store.multiple.set(this.multiple()));\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (!target?.matches?.('[data-sds-accordion-header]')) return;\n\n const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];\n if (!keys.includes(event.key)) return;\n\n const headers = Array.from(\n this.host.nativeElement.querySelectorAll<HTMLButtonElement>('[data-sds-accordion-header]'),\n ).filter((b) => !b.disabled);\n if (!headers.length) return;\n\n event.preventDefault();\n const current = headers.indexOf(target as HTMLButtonElement);\n let next: number;\n switch (event.key) {\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = headers.length - 1;\n break;\n case 'ArrowDown':\n next = current < 0 ? 0 : (current + 1) % headers.length;\n break;\n default: // ArrowUp\n next = current <= 0 ? headers.length - 1 : current - 1;\n break;\n }\n headers[next].focus();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { SdsAccordionStore, SdsAccordionValue } from './sds-accordion-store';\n\n/**\n * One accordion section. Holds the [value] and optional [disabled] state shared\n * with its projected <sds-accordion-header> and <sds-accordion-content>.\n */\n@Component({\n selector: 'sds-accordion-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `<ng-content />`,\n})\nexport class SdsAccordionPanel {\n private readonly store = inject(SdsAccordionStore);\n\n readonly value = input.required<SdsAccordionValue>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly open = computed(() => this.store.isOpen(this.value()));\n\n get headerId(): string {\n return this.store.headerId(this.value());\n }\n\n get contentId(): string {\n return this.store.contentId(this.value());\n }\n\n toggle(): void {\n if (!this.disabled()) this.store.toggle(this.value());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsAccordionPanel } from './sds-accordion-panel';\n\n/**\n * Clickable header of an accordion panel. Project the label text and,\n * optionally, an <sds-icon>. Renders a chevron that rotates when open.\n */\n@Component({\n selector: 'sds-accordion-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <button\n type=\"button\"\n data-sds-accordion-header\n [id]=\"panel.headerId\"\n [attr.aria-expanded]=\"panel.open()\"\n [attr.aria-controls]=\"panel.contentId\"\n [attr.aria-disabled]=\"panel.disabled() ? 'true' : null\"\n [disabled]=\"panel.disabled()\"\n [class]=\"headerClass()\"\n (click)=\"panel.toggle()\"\n >\n <span class=\"flex-1 text-left\"><ng-content /></span>\n <sds-icon\n name=\"chevron-down\"\n [size]=\"18\"\n class=\"shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"panel.open()\"\n />\n </button>\n `,\n})\nexport class SdsAccordionHeader {\n protected readonly panel = inject(SdsAccordionPanel);\n\n protected readonly headerClass = computed(() => {\n const base =\n 'flex w-full items-center gap-3 px-4 py-3.5 text-left text-sm font-medium ' +\n 'transition-colors focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-inset focus-visible:ring-brand-500';\n if (this.panel.disabled()) {\n return `${base} text-ink-faint opacity-60 cursor-not-allowed`;\n }\n return this.panel.open()\n ? `${base} text-brand-700 hover:bg-muted cursor-pointer`\n : `${base} text-ink hover:bg-muted cursor-pointer`;\n });\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SdsAccordionPanel } from './sds-accordion-panel';\n\n/**\n * Collapsible content region of an accordion panel. Animates open/closed with a\n * CSS grid-rows transition; while closed it is `inert` (not focusable, hidden\n * from assistive tech) but kept in the DOM, so its state persists.\n */\n@Component({\n selector: 'sds-accordion-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"region\"\n [id]=\"panel.contentId\"\n [attr.aria-labelledby]=\"panel.headerId\"\n [attr.inert]=\"panel.open() ? null : ''\"\n class=\"grid transition-[grid-template-rows] duration-200 ease-out\"\n [style.grid-template-rows]=\"panel.open() ? '1fr' : '0fr'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 pt-0 text-sm leading-relaxed text-ink-soft\">\n <ng-content />\n </div>\n </div>\n </div>\n `,\n})\nexport class SdsAccordionContent {\n protected readonly panel = inject(SdsAccordionPanel);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport { SdsTableColumn } from './sds-table';\n\n/**\n * Typed context handed to a custom cell template. Pulled out so consumers can\n * destructure with `let-value`, `let-row`, `let-i=\"index\"`, etc., with full\n * type inference (see {@link SdsTableCell.ngTemplateContextGuard}).\n */\nexport interface SdsTableCellContext {\n /** Same as {@link value} — enables the `let-value` (implicit) binding. */\n $implicit: unknown;\n /** Resolved cell value for this column (via the table's getValue). */\n value: unknown;\n /** The full row object. */\n row: any;\n /** The column definition the cell belongs to. */\n column: SdsTableColumn;\n /** Zero-based index of the row within the currently displayed page. */\n index: number;\n}\n\n/**\n * Supplies a custom cell template for a single table column, matched by its\n * field key. Use as a structural template inside `<sds-table>`:\n *\n * @example\n * <sds-table [value]=\"rows\" [columns]=\"cols\">\n * <ng-template sdsCell=\"statut\" let-value let-row=\"row\">\n * <sds-badge [variant]=\"row.actif ? 'success' : 'neutral'\">{{ value }}</sds-badge>\n * </ng-template>\n * </sds-table>\n */\n@Directive({\n selector: 'ng-template[sdsCell]',\n standalone: true,\n})\nexport class SdsTableCell {\n /** The column `field` this template renders. */\n readonly column = input.required<string>({ alias: 'sdsCell' });\n\n /** The wrapped template, rendered by the host table via ngTemplateOutlet. */\n readonly template = inject<TemplateRef<SdsTableCellContext>>(TemplateRef);\n\n /** Lets the compiler type-check `let-*` bindings against SdsTableCellContext. */\n static ngTemplateContextGuard(\n _dir: SdsTableCell,\n _ctx: unknown,\n ): _ctx is SdsTableCellContext {\n return true;\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Typed context handed to a row-expansion template. Pulled out so consumers can\n * destructure with `let-row`, `let-i=\"index\"`, etc., with full type inference\n * (see {@link SdsTableRowExpansion.ngTemplateContextGuard}).\n */\nexport interface SdsTableRowExpansionContext {\n /** Same as {@link row} — enables the `let-row` (implicit) binding. */\n $implicit: any;\n /** The full row object whose details are being shown. */\n row: any;\n /** Zero-based index of the row within the currently displayed page. */\n index: number;\n}\n\n/**\n * Supplies the detail template rendered beneath an expanded row when the host\n * `<sds-table>` has `expandable`. Use as a structural template inside the table:\n *\n * @example\n * <sds-table [value]=\"rows\" [columns]=\"cols\" expandable>\n * <ng-template sdsRowExpansion let-row>\n * <div>Détails de {{ row.nom }}</div>\n * </ng-template>\n * </sds-table>\n */\n@Directive({\n selector: 'ng-template[sdsRowExpansion]',\n standalone: true,\n})\nexport class SdsTableRowExpansion {\n /** The wrapped template, rendered by the host table via ngTemplateOutlet. */\n readonly template = inject<TemplateRef<SdsTableRowExpansionContext>>(TemplateRef);\n\n /** Lets the compiler type-check `let-*` bindings against SdsTableRowExpansionContext. */\n static ngTemplateContextGuard(\n _dir: SdsTableRowExpansion,\n _ctx: unknown,\n ): _ctx is SdsTableRowExpansionContext {\n return true;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n effect,\n input,\n model,\n numberAttribute,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsPaginator, SdsPaginatorState } from '../paginator/sds-paginator';\nimport { SdsTableCell, SdsTableCellContext } from './sds-table-cell';\nimport { SdsTableRowExpansion } from './sds-table-row-expansion';\n\n/** Column configuration. `field` may be a dot-path (e.g. `service.name`). */\nexport interface SdsTableColumn {\n /** Row field rendered in this column. Supports dot-paths. */\n field: string;\n /** Header label. */\n header: string;\n /** Allow sorting on this column (also requires the table's `sortable`). */\n sortable?: boolean;\n /** Text alignment for header + body cells. */\n align?: 'left' | 'center' | 'right';\n /** Fixed column width, e.g. `'120px'` or `'20%'`. */\n width?: string;\n}\n\nexport type SdsTableSize = 'sm' | 'md' | 'lg';\n/** 1 = ascending, -1 = descending, 0 = unsorted. */\nexport type SdsSortOrder = 1 | -1 | 0;\n\nexport interface SdsTableSortEvent {\n field: string;\n order: SdsSortOrder;\n}\n\n/** Emitted when `lazy` is true so the host can fetch the matching slice. */\nexport interface SdsTableLazyEvent {\n first: number;\n rows: number;\n sortField: string | null;\n sortOrder: SdsSortOrder;\n globalFilter: string;\n}\n\ntype SdsSelectionMode = 'single' | 'multiple' | null;\n\nconst SIZES: Record<SdsTableSize, { cell: string; head: string }> = {\n sm: { cell: 'px-3 py-2 text-sm', head: 'px-3 py-2' },\n md: { cell: 'px-4 py-2.5 text-sm', head: 'px-4 py-2.5' },\n lg: { cell: 'px-4 py-3 text-base', head: 'px-4 py-3' },\n};\n\nconst ALIGN: Record<NonNullable<SdsTableColumn['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\nlet nextId = 0;\n\n/**\n * Client-side data table mirroring PrimeNG's table, scoped to a strong local\n * feature set: sorting, pagination (reuses {@link SdsPaginator}), global filter,\n * single/multiple selection, custom cell templates (via {@link SdsTableCell}),\n * loading/empty states and visual variants. Set `lazy` to delegate\n * sort/filter/paging to the host through `(lazyLoad)`.\n *\n * @remarks\n * - **`dataKey` is strongly recommended** for sortable and/or selectable\n * tables: it gives each row a stable identity so `trackRow` reuses the\n * correct DOM node when rows reorder (otherwise tracking falls back to the\n * page-relative `$index`, which defeats row-identity animations and can\n * momentarily mis-associate a focused custom-cell control after a re-sort).\n * - The header **\"select all\" checkbox operates over the entire filtered set\n * across all pages**, not just the current page. Toggling it selects/clears\n * every filtered row regardless of pagination (this is an intentional\n * deviation from PrimeNG's per-page select-all).\n *\n * @example\n * <sds-table [value]=\"staff\" [columns]=\"cols\" dataKey=\"id\"\n * sortable paginator [rows]=\"10\" globalFilter\n * selectionMode=\"multiple\" [(selection)]=\"selected\">\n * <ng-template sdsCell=\"statut\" let-value let-row=\"row\">\n * <sds-badge [variant]=\"row.actif ? 'success' : 'neutral'\">{{ value }}</sds-badge>\n * </ng-template>\n * </sds-table>\n */\n@Component({\n selector: 'sds-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, SdsPaginator, NgTemplateOutlet],\n host: { class: 'block' },\n template: `\n <div class=\"rounded-card border border-border bg-white overflow-hidden\">\n <!-- Toolbar: caption + global filter -->\n @if (caption() || globalFilter()) {\n <div class=\"flex flex-wrap items-center justify-between gap-3 border-b border-border px-4 py-3\">\n @if (caption()) {\n <span [id]=\"tableId + '-caption'\" class=\"font-semibold text-ink\">{{ caption() }}</span>\n } @else {\n <span></span>\n }\n\n @if (globalFilter()) {\n <div\n class=\"relative flex h-9 items-center rounded-control border border-border bg-white transition-colors focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25\"\n >\n <sds-icon\n name=\"search\"\n [size]=\"16\"\n class=\"pointer-events-none absolute left-2.5 text-ink-faint\"\n />\n <input\n type=\"search\"\n [id]=\"tableId + '-filter'\"\n [value]=\"filterText()\"\n [placeholder]=\"globalFilterPlaceholder()\"\n [attr.aria-label]=\"globalFilterAriaLabel()\"\n [disabled]=\"loading()\"\n [attr.aria-disabled]=\"loading() ? 'true' : null\"\n class=\"h-full w-56 max-w-full bg-transparent pl-8 pr-3 text-sm text-ink outline-none placeholder:text-ink-faint disabled:opacity-60\"\n (input)=\"onFilterInput($event)\"\n />\n </div>\n }\n </div>\n }\n\n <!-- Scroll region -->\n <div\n class=\"relative overflow-x-auto\"\n [class.overflow-y-auto]=\"scrollHeight()\"\n [style.maxHeight]=\"scrollHeight() || null\"\n [attr.inert]=\"loading() ? '' : null\"\n >\n <table\n class=\"w-full border-collapse text-left\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.aria-labelledby]=\"caption() ? tableId + '-caption' : null\"\n [attr.aria-label]=\"caption() ? null : ariaLabel()\"\n >\n <thead\n class=\"bg-muted text-xs font-semibold uppercase tracking-wide text-ink-soft\"\n >\n <tr [class]=\"gridlines() ? 'divide-x divide-border' : ''\">\n @if (expandable()) {\n <th\n scope=\"col\"\n class=\"w-px\"\n [class]=\"headCellClass()\"\n [class.sticky]=\"scrollHeight()\"\n [class.top-0]=\"scrollHeight()\"\n [class.z-10]=\"scrollHeight()\"\n [class.bg-muted]=\"scrollHeight()\"\n >\n <span class=\"sr-only\">Détails</span>\n </th>\n }\n\n @if (showSelectionColumn()) {\n <th\n scope=\"col\"\n class=\"w-px\"\n [class]=\"headCellClass()\"\n [class.sticky]=\"scrollHeight()\"\n [class.top-0]=\"scrollHeight()\"\n [class.z-10]=\"scrollHeight()\"\n [class.bg-muted]=\"scrollHeight()\"\n >\n @if (selectionMode() === 'multiple') {\n <button\n type=\"button\"\n role=\"checkbox\"\n [attr.aria-checked]=\"headerChecked() ? 'true' : (headerIndeterminate() ? 'mixed' : 'false')\"\n aria-label=\"Tout sélectionner\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n [class]=\"checkboxClass(headerChecked(), headerIndeterminate())\"\n (click)=\"toggleAll()\"\n >\n @if (headerChecked()) {\n <sds-icon name=\"check\" [size]=\"12\" />\n } @else if (headerIndeterminate()) {\n <span class=\"h-0.5 w-2.5 rounded-full bg-white\"></span>\n }\n </button>\n } @else {\n <span class=\"sr-only\">Sélection</span>\n }\n </th>\n }\n\n @for (col of effectiveColumns(); track col.field; let i = $index) {\n <th\n scope=\"col\"\n class=\"relative\"\n [class]=\"headCellClass(col)\"\n [class.sticky]=\"scrollHeight()\"\n [class.top-0]=\"scrollHeight()\"\n [class.z-10]=\"scrollHeight()\"\n [class.bg-muted]=\"scrollHeight()\"\n [class.cursor-move]=\"reorderableColumns()\"\n [style.width]=\"columnStyleWidth(col)\"\n [attr.aria-sort]=\"ariaSort(col)\"\n [attr.draggable]=\"reorderableColumns() ? 'true' : null\"\n (dragstart)=\"onColDragStart(i)\"\n (dragover)=\"onColDragOver($event)\"\n (drop)=\"onColDrop($event, i)\"\n (dragend)=\"onColDragEnd()\"\n >\n @if (isColumnSortable(col)) {\n <button\n type=\"button\"\n [disabled]=\"loading()\"\n class=\"inline-flex items-center gap-1.5 select-none rounded hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n (click)=\"onSort(col)\"\n >\n <span>{{ col.header }}</span>\n <sds-icon [name]=\"sortIcon(col)\" [size]=\"14\" class=\"text-ink-faint\" />\n </button>\n } @else {\n <span>{{ col.header }}</span>\n }\n\n @if (resizableColumns()) {\n <span\n class=\"absolute right-0 top-0 h-full w-1.5 cursor-col-resize select-none touch-none hover:bg-brand-300\"\n (pointerdown)=\"onResizeStart($event, col.field)\"\n (click)=\"$event.stopPropagation()\"\n ></span>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-border\">\n @for (row of displayRows(); track trackRow($index, row); let i = $index) {\n <tr\n [class]=\"rowClass(row, i)\"\n [attr.tabindex]=\"selectionMode() === 'single' && !loading() ? 0 : null\"\n [attr.aria-selected]=\"selectionMode() === 'single' ? (isRowSelected(row) ? 'true' : 'false') : null\"\n (click)=\"onRowClick(row)\"\n (keydown.enter)=\"onRowKeydown($event, row)\"\n (keydown.space)=\"onRowKeydown($event, row)\"\n >\n @if (expandable()) {\n <td [class]=\"cellClass()\" class=\"w-px\">\n <button\n type=\"button\"\n [attr.aria-expanded]=\"isExpanded(row)\"\n [attr.aria-controls]=\"isExpanded(row) ? rowDetailId(row) : null\"\n [attr.aria-label]=\"isExpanded(row) ? 'Réduire la ligne' : 'Développer la ligne'\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded text-ink-soft hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n (click)=\"onExpanderClick($event, row)\"\n >\n <sds-icon\n name=\"chevron-right\"\n [size]=\"16\"\n class=\"transition-transform\"\n [class.rotate-90]=\"isExpanded(row)\"\n />\n </button>\n </td>\n }\n\n @if (showSelectionColumn()) {\n <td\n [class]=\"cellClass()\"\n class=\"w-px\"\n >\n @if (selectionMode() === 'multiple') {\n <button\n type=\"button\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isRowSelected(row) ? 'true' : 'false'\"\n aria-label=\"Sélectionner la ligne\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n [class]=\"checkboxClass(isRowSelected(row), false)\"\n (click)=\"onRowCheckboxClick($event, row)\"\n >\n @if (isRowSelected(row)) {\n <sds-icon name=\"check\" [size]=\"12\" />\n }\n </button>\n } @else if (selectionMode() === 'single') {\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"isRowSelected(row) ? 'true' : 'false'\"\n aria-label=\"Sélectionner la ligne\"\n [disabled]=\"loading()\"\n class=\"grid h-[18px] w-[18px] shrink-0 place-items-center rounded-full border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1 disabled:opacity-60\"\n [class]=\"checkboxClass(isRowSelected(row), false)\"\n (click)=\"onRowCheckboxClick($event, row)\"\n >\n @if (isRowSelected(row)) {\n <span class=\"h-1.5 w-1.5 rounded-full bg-white\"></span>\n }\n </button>\n }\n </td>\n }\n\n @for (col of effectiveColumns(); track col.field) {\n <td\n [class]=\"cellClass(col)\"\n [style.width]=\"columnStyleWidth(col)\"\n >\n @if (templateFor(col.field); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"cellContext(row, col, i)\"\n />\n } @else {\n {{ display(row, col.field) }}\n }\n </td>\n }\n </tr>\n\n @if (expandable() && isExpanded(row) && expansionTemplate()) {\n <tr>\n <td [id]=\"rowDetailId(row)\" [attr.colspan]=\"totalColumnCount()\" class=\"bg-muted/30 p-0\">\n <div class=\"px-4 py-3\">\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row, index: i }\"\n />\n </div>\n </td>\n </tr>\n }\n } @empty {\n @if (!loading()) {\n <tr>\n <td\n [attr.colspan]=\"totalColumnCount()\"\n class=\"py-10 text-center text-ink-faint\"\n >\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n\n <!-- Loading overlay -->\n @if (loading()) {\n <div\n class=\"absolute inset-0 z-20 grid place-items-center bg-white/60\"\n aria-hidden=\"true\"\n >\n <div\n class=\"h-7 w-7 animate-spin rounded-full border-2 border-brand-200 border-t-brand-600\"\n ></div>\n </div>\n }\n </div>\n\n <!-- Paginator -->\n @if (paginator()) {\n <div class=\"border-t border-border px-4 py-2.5\">\n <sds-paginator\n [totalRecords]=\"totalForPaginator()\"\n [(first)]=\"first\"\n [(rows)]=\"pageRows\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n [disabled]=\"loading()\"\n currentPageReportTemplate=\"{first} – {last} sur {totalRecords}\"\n (pageChange)=\"onPageChange($event)\"\n />\n </div>\n }\n </div>\n `,\n})\nexport class SdsTable implements OnDestroy {\n protected readonly tableId = `sds-table-${nextId++}`;\n\n // --- inputs ---------------------------------------------------------------\n readonly value = input<readonly any[]>([]);\n readonly columns = input<SdsTableColumn[]>([]);\n readonly dataKey = input<string>('');\n readonly size = input<SdsTableSize>('md');\n readonly striped = input(false, { transform: booleanAttribute });\n readonly gridlines = input(false, { transform: booleanAttribute });\n readonly hoverable = input(true, { transform: booleanAttribute });\n /** Master sort switch; per-column `sortable` is still required. */\n readonly sortable = input(true, { transform: booleanAttribute });\n\n readonly paginator = input(false, { transform: booleanAttribute });\n readonly rows = input(10, { transform: numberAttribute });\n readonly rowsPerPageOptions = input<number[]>([10, 20, 50]);\n readonly showCurrentPageReport = input(true, { transform: booleanAttribute });\n\n readonly globalFilter = input(false, { transform: booleanAttribute });\n readonly globalFilterPlaceholder = input<string>('Rechercher…');\n /** Accessible name for the global-filter input. */\n readonly globalFilterAriaLabel = input<string>('Rechercher dans le tableau');\n /** Fields searched by the global filter. Empty = every column field. */\n readonly globalFilterFields = input<string[]>([]);\n\n readonly selectionMode = input<SdsSelectionMode>(null);\n /** Two-way: a single row (single mode) or an array of rows (multiple). */\n readonly selection = model<any>(null);\n\n readonly loading = input(false, { transform: booleanAttribute });\n readonly emptyMessage = input<string>('Aucune donnée');\n readonly caption = input<string>('');\n /** Fallback accessible name for the `<table>` when no `caption` is set. */\n readonly ariaLabel = input<string>('Tableau de données');\n /** When set, the body scrolls vertically with a sticky header, e.g. `'320px'`. */\n readonly scrollHeight = input<string>('');\n\n /** When true: skip internal sort/filter/slice; emit (lazyLoad) instead. */\n readonly lazy = input(false, { transform: booleanAttribute });\n /** Total records for the paginator when `lazy`. */\n readonly totalRecords = input(0, { transform: numberAttribute });\n\n /** Adds a leading expander column; details come from `<ng-template sdsRowExpansion>`. */\n readonly expandable = input(false, { transform: booleanAttribute });\n /** Drag the right edge of a column header to resize it. */\n readonly resizableColumns = input(false, { transform: booleanAttribute });\n /** Drag a column header to reorder columns. */\n readonly reorderableColumns = input(false, { transform: booleanAttribute });\n\n // --- outputs --------------------------------------------------------------\n readonly sortChange = output<SdsTableSortEvent>();\n readonly pageChange = output<SdsPaginatorState>();\n readonly rowSelect = output<any>();\n readonly rowUnselect = output<any>();\n readonly lazyLoad = output<SdsTableLazyEvent>();\n readonly rowClick = output<any>();\n /** Emitted with the row when its expander is opened. */\n readonly rowExpand = output<any>();\n /** Emitted with the row when its expander is closed. */\n readonly rowCollapse = output<any>();\n /** Emitted after a drag-reorder with the moved field and its old/new index. */\n readonly colReorder = output<{ field: string; fromIndex: number; toIndex: number }>();\n\n // --- custom cell templates ------------------------------------------------\n private readonly cellTemplates = contentChildren(SdsTableCell);\n\n private readonly templateMap = computed(() => {\n const map = new Map<string, SdsTableCell['template']>();\n for (const cell of this.cellTemplates()) map.set(cell.column(), cell.template);\n return map;\n });\n\n protected templateFor(field: string) {\n return this.templateMap().get(field) ?? null;\n }\n\n // --- row-expansion template -----------------------------------------------\n private readonly rowExpansion = contentChild(SdsTableRowExpansion);\n\n protected expansionTemplate() {\n return this.rowExpansion()?.template ?? null;\n }\n\n // --- pipeline state -------------------------------------------------------\n protected readonly filterText = signal('');\n protected readonly sortField = signal<string | null>(null);\n protected readonly sortOrder = signal<SdsSortOrder>(0);\n\n // Local paging signals kept in sync with the paginator's two-way models.\n protected readonly first = signal(0);\n protected readonly pageRows = signal(10);\n\n // Expanded-row identities (keyed via keyOf, like selection).\n private readonly expandedKeys = signal(new Set<unknown>());\n\n // Per-field pixel widths set by the resize handle (overrides col.width).\n private readonly columnWidths = signal<Record<string, number>>({});\n\n // Working column order while reorderableColumns is on; seeded from columns().\n private readonly columnOrder = signal<SdsTableColumn[]>([]);\n private readonly dragColIndex = signal<number | null>(null);\n\n constructor() {\n // Seed page size from the `rows` input (and keep it tracking until paged).\n effect(() => this.pageRows.set(this.rows()));\n // Reset the working order whenever the columns input changes.\n effect(() => this.columnOrder.set([...this.columns()]));\n }\n\n ngOnDestroy(): void {\n this.activeResizeCleanup?.();\n this.activeResizeCleanup = null;\n }\n\n // --- value resolution -----------------------------------------------------\n /** Resolve a (possibly dot-pathed) field on a row; null/undefined safe. */\n protected getValue(row: any, field: string): unknown {\n if (row == null || !field) return null;\n if (field.indexOf('.') === -1) return row[field];\n let acc: any = row;\n for (const part of field.split('.')) {\n if (acc == null) return null;\n acc = acc[part];\n }\n return acc;\n }\n\n /** String rendering of a cell value (null/undefined => ''). */\n protected display(row: any, field: string): string {\n const v = this.getValue(row, field);\n return v == null ? '' : String(v);\n }\n\n protected cellContext(row: any, column: SdsTableColumn, index: number): SdsTableCellContext {\n const value = this.getValue(row, column.field);\n return { $implicit: value, value, row, column, index };\n }\n\n // --- filter ---------------------------------------------------------------\n private readonly filtered = computed<readonly any[]>(() => {\n const data = this.value();\n if (this.lazy()) return data;\n const q = this.filterText().trim().toLowerCase();\n if (!this.globalFilter() || !q) return data;\n const fields = this.globalFilterFields().length\n ? this.globalFilterFields()\n : this.effectiveColumns().map((c) => c.field);\n return data.filter((row) =>\n fields.some((f) => {\n const v = this.getValue(row, f);\n return v != null && String(v).toLowerCase().includes(q);\n }),\n );\n });\n\n // --- sort -----------------------------------------------------------------\n private readonly sorted = computed<readonly any[]>(() => {\n const data = this.filtered();\n if (this.lazy()) return data;\n const field = this.sortField();\n const order = this.sortOrder();\n if (!field || order === 0) return data;\n // Stable sort: decorate with original index, compare, then strip.\n return data\n .map((row, index) => ({ row, index }))\n .sort((a, b) => {\n const cmp = this.compare(this.getValue(a.row, field), this.getValue(b.row, field));\n return cmp !== 0 ? cmp * order : a.index - b.index;\n })\n .map((d) => d.row);\n });\n\n private compare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n // Booleans (and mixed types) fall through to a lexical compare:\n // `false` < `true`. Columns are expected to be type-homogeneous.\n return String(a).localeCompare(String(b));\n }\n\n // --- paginate -------------------------------------------------------------\n protected readonly displayRows = computed<readonly any[]>(() => {\n const data = this.sorted();\n if (this.lazy() || !this.paginator()) return data;\n const pageRows = Math.max(1, this.pageRows());\n // Clamp the page offset: if `value` shrinks (server refresh, deleted rows,\n // dataset switch) `first` may point past the new end, slicing to []. Snap\n // it back to the last valid page start, mirroring SdsPaginator.onRowsChange.\n const maxStart = Math.max(0, (Math.ceil(data.length / pageRows) - 1) * pageRows);\n const start = Math.min(this.first(), maxStart);\n return data.slice(start, start + pageRows);\n });\n\n protected readonly totalForPaginator = computed(() =>\n this.lazy() ? this.totalRecords() : this.filtered().length,\n );\n\n /** Columns in their current (possibly reordered) order. */\n protected readonly effectiveColumns = computed<SdsTableColumn[]>(() =>\n this.reorderableColumns() && this.columnOrder().length\n ? this.columnOrder()\n : this.columns(),\n );\n\n /** Leading non-data columns: the expander then the selection column. */\n protected readonly leadingColumnCount = computed(\n () => (this.expandable() ? 1 : 0) + (this.showSelectionColumn() ? 1 : 0),\n );\n\n protected readonly totalColumnCount = computed(\n () => this.effectiveColumns().length + this.leadingColumnCount(),\n );\n\n // --- sorting UI -----------------------------------------------------------\n protected isColumnSortable(col: SdsTableColumn): boolean {\n return this.sortable() && !!col.sortable;\n }\n\n protected sortIcon(col: SdsTableColumn) {\n if (this.sortField() !== col.field || this.sortOrder() === 0) {\n return 'chevrons-up-down' as const;\n }\n return this.sortOrder() === 1 ? ('arrow-up' as const) : ('arrow-down' as const);\n }\n\n protected ariaSort(col: SdsTableColumn): 'ascending' | 'descending' | 'none' | null {\n if (!this.isColumnSortable(col)) return null;\n if (this.sortField() !== col.field || this.sortOrder() === 0) return 'none';\n return this.sortOrder() === 1 ? 'ascending' : 'descending';\n }\n\n protected onSort(col: SdsTableColumn): void {\n if (!this.isColumnSortable(col)) return;\n // Cycle asc(1) -> desc(-1) -> none(0) for this single column.\n let order: SdsSortOrder;\n if (this.sortField() !== col.field) {\n order = 1;\n } else {\n order = this.sortOrder() === 1 ? -1 : this.sortOrder() === -1 ? 0 : 1;\n }\n this.sortField.set(order === 0 ? null : col.field);\n this.sortOrder.set(order);\n // A new sort means the first sorted records belong on page 1.\n this.first.set(0);\n this.sortChange.emit({ field: col.field, order });\n if (this.lazy()) this.emitLazy();\n }\n\n // --- selection ------------------------------------------------------------\n protected readonly showSelectionColumn = computed(() => this.selectionMode() != null);\n\n private equals(a: any, b: any): boolean {\n const k = this.dataKey();\n if (k && a && b && typeof a === 'object' && typeof b === 'object') {\n return a[k] === b[k];\n }\n return a === b;\n }\n\n /** Identity used for O(1) membership tests: dataKey value when set, else the row itself. */\n private keyOf(row: any): unknown {\n const k = this.dataKey();\n return k && row && typeof row === 'object' ? row[k] : row;\n }\n\n /**\n * Set of selected identities, recomputed only when selection()/dataKey()\n * change. Lets isRowSelected/headerChecked/headerIndeterminate do O(1)\n * lookups instead of an O(selection) scan per row.\n */\n private readonly selectedKeys = computed(() => {\n const sel = this.selection();\n const list = Array.isArray(sel) ? sel : sel == null ? [] : [sel];\n return new Set(list.map((s) => this.keyOf(s)));\n });\n\n protected isRowSelected(row: any): boolean {\n if (this.selection() == null) return false;\n return this.selectedKeys().has(this.keyOf(row));\n }\n\n protected readonly headerChecked = computed(() => {\n if (this.selectionMode() !== 'multiple') return false;\n const rows = this.filtered();\n if (!rows.length) return false;\n const keys = this.selectedKeys();\n if (!keys.size) return false;\n return rows.every((r) => keys.has(this.keyOf(r)));\n });\n\n protected readonly headerIndeterminate = computed(() => {\n if (this.selectionMode() !== 'multiple') return false;\n const rows = this.filtered();\n const keys = this.selectedKeys();\n if (!keys.size) return false;\n const selectedCount = rows.reduce((n, r) => (keys.has(this.keyOf(r)) ? n + 1 : n), 0);\n return selectedCount > 0 && selectedCount < rows.length;\n });\n\n protected toggleAll(): void {\n if (this.selectionMode() !== 'multiple') return;\n const rows = this.filtered();\n if (this.headerChecked()) {\n // Deselect every currently-filtered row.\n const next = (this.selection() as any[]).filter(\n (s) => !rows.some((r) => this.equals(s, r)),\n );\n rows.forEach((r) => this.rowUnselect.emit(r));\n this.selection.set(next);\n } else {\n const current = Array.isArray(this.selection()) ? [...this.selection()] : [];\n for (const r of rows) {\n if (!current.some((s) => this.equals(s, r))) {\n current.push(r);\n this.rowSelect.emit(r);\n }\n }\n this.selection.set(current);\n }\n }\n\n protected onRowCheckboxClick(event: Event, row: any): void {\n event.stopPropagation();\n if (this.selectionMode() === 'single') {\n this.onRowClick(row);\n } else {\n this.toggleRowSelection(row);\n }\n }\n\n /** Enter/Space on a (single-mode) focusable row toggles its selection. */\n protected onRowKeydown(event: Event, row: any): void {\n if (this.selectionMode() !== 'single' || this.loading()) return;\n event.preventDefault();\n this.onRowClick(row);\n }\n\n private toggleRowSelection(row: any): void {\n const current = Array.isArray(this.selection()) ? [...this.selection()] : [];\n const idx = current.findIndex((s) => this.equals(s, row));\n if (idx >= 0) {\n current.splice(idx, 1);\n this.selection.set(current);\n this.rowUnselect.emit(row);\n } else {\n current.push(row);\n this.selection.set(current);\n this.rowSelect.emit(row);\n }\n }\n\n protected onRowClick(row: any): void {\n if (this.loading()) return;\n this.rowClick.emit(row);\n if (this.selectionMode() === 'single') {\n if (this.equals(this.selection(), row)) {\n this.selection.set(null);\n this.rowUnselect.emit(row);\n } else {\n this.selection.set(row);\n this.rowSelect.emit(row);\n }\n }\n }\n\n // --- paginator ------------------------------------------------------------\n protected onPageChange(state: SdsPaginatorState): void {\n this.pageChange.emit(state);\n if (this.lazy()) this.emitLazy();\n }\n\n private emitLazy(): void {\n this.lazyLoad.emit({\n first: this.first(),\n rows: this.pageRows(),\n sortField: this.sortField(),\n sortOrder: this.sortOrder(),\n globalFilter: this.filterText(),\n });\n }\n\n protected onFilterInput(event: Event): void {\n this.filterText.set((event.target as HTMLInputElement).value);\n // New query -> back to the first page.\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n // --- row expansion --------------------------------------------------------\n protected isExpanded(row: any): boolean {\n return this.expandedKeys().has(this.keyOf(row));\n }\n\n protected toggleExpand(row: any): void {\n const key = this.keyOf(row);\n const next = new Set(this.expandedKeys());\n if (next.has(key)) {\n next.delete(key);\n this.expandedKeys.set(next);\n this.rowCollapse.emit(row);\n } else {\n next.add(key);\n this.expandedKeys.set(next);\n this.rowExpand.emit(row);\n }\n }\n\n protected onExpanderClick(event: Event, row: any): void {\n // Keep the expander from triggering single-select row click.\n event.stopPropagation();\n this.toggleExpand(row);\n }\n\n /**\n * Stable per-row id for the expansion region, derived from the row identity\n * (dataKey value when set, else the row itself). Mirrors the accordion's\n * contentId pattern so the expander's aria-controls can point at the detail\n * region. Using keyOf (not $index) keeps the id stable across reorders.\n */\n protected rowDetailId(row: any): string {\n return `${this.tableId}-detail-${String(this.keyOf(row))}`;\n }\n\n // --- resizable columns ----------------------------------------------------\n private activeResizeCleanup: (() => void) | null = null;\n\n /** px override from a resize drag, else the column's declared width, else null. */\n protected columnStyleWidth(col: SdsTableColumn): string | null {\n const px = this.columnWidths()[col.field];\n if (px != null) return px + 'px';\n return col.width || null;\n }\n\n protected onResizeStart(event: PointerEvent, field: string): void {\n event.preventDefault();\n event.stopPropagation();\n const th = (event.target as HTMLElement).closest('th');\n if (!th) return;\n const startX = event.clientX;\n const startW = th.getBoundingClientRect().width;\n const move = (e: PointerEvent) => {\n const w = Math.max(60, Math.round(startW + (e.clientX - startX)));\n this.columnWidths.update((m) => ({ ...m, [field]: w }));\n };\n const up = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', up);\n this.activeResizeCleanup = null;\n };\n // Track for ngOnDestroy in case the pointer-up never lands.\n this.activeResizeCleanup = up;\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', up);\n }\n\n // --- reorderable columns --------------------------------------------------\n protected onColDragStart(i: number): void {\n this.dragColIndex.set(i);\n }\n\n protected onColDragEnd(): void {\n this.dragColIndex.set(null);\n }\n\n protected onColDragOver(e: DragEvent): void {\n e.preventDefault();\n }\n\n protected onColDrop(e: DragEvent, toIndex: number): void {\n e.preventDefault();\n const from = this.dragColIndex();\n if (from == null || from === toIndex) return;\n const cols = [...this.effectiveColumns()];\n const [moved] = cols.splice(from, 1);\n cols.splice(toIndex, 0, moved);\n this.columnOrder.set(cols);\n this.dragColIndex.set(null);\n this.colReorder.emit({ field: moved.field, fromIndex: from, toIndex });\n }\n\n // --- trackBy --------------------------------------------------------------\n protected trackRow(index: number, row: any): unknown {\n const k = this.dataKey();\n if (k && row && typeof row === 'object' && row[k] != null) return row[k];\n return index;\n }\n\n // --- styling --------------------------------------------------------------\n protected headCellClass(col?: SdsTableColumn): string {\n const align = ALIGN[col?.align ?? 'left'];\n return `${SIZES[this.size()].head} ${align} font-semibold`;\n }\n\n protected cellClass(col?: SdsTableColumn): string {\n const align = ALIGN[col?.align ?? 'left'];\n return `${SIZES[this.size()].cell} ${align} text-ink align-middle`;\n }\n\n protected rowClass(row: any, index: number): string {\n const parts: string[] = ['transition-colors'];\n if (this.gridlines()) parts.push('divide-x divide-border');\n if (this.isRowSelected(row)) {\n parts.push('bg-brand-50');\n } else if (this.striped() && index % 2 === 1) {\n parts.push('bg-muted/40');\n }\n if (this.hoverable() && !this.isRowSelected(row)) parts.push('hover:bg-muted/60');\n if (this.selectionMode() === 'single') {\n parts.push(\n 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-brand-500',\n );\n }\n return parts.join(' ');\n }\n\n protected checkboxClass(checked: boolean, indeterminate: boolean): string {\n return checked || indeterminate\n ? 'border-brand-600 bg-brand-600 text-white'\n : 'border-border bg-white';\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\n/**\n * Shared collapse state for the sidebar and its nav items.\n *\n * Provided in root so the sidebar, projected nav groups/items and any layout\n * code observe a single source of truth without prop-drilling. For apps with\n * multiple independent sidebars, provide it at a component level instead.\n */\n@Injectable({ providedIn: 'root' })\nexport class SidebarStore {\n /** Desktop rail state: collapsed to icon-only width (applies at ≥ lg). */\n readonly collapsed = signal(false);\n\n /** Mobile drawer state: whether the off-canvas sidebar is slid in (< lg). */\n readonly mobileOpen = signal(false);\n\n /** Toggle the desktop icon-rail. */\n toggle(): void {\n this.collapsed.update((v) => !v);\n }\n\n setCollapsed(value: boolean): void {\n this.collapsed.set(value);\n }\n\n /** Open the mobile drawer. */\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n /** Close the mobile drawer. */\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n\n /** Toggle the mobile drawer. */\n toggleMobile(): void {\n this.mobileOpen.update((v) => !v);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { SdsAvatar, SdsAvatarStatus } from '../avatar/sds-avatar';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SidebarStore } from '../sidebar/sidebar-store';\n\nexport interface SdsTopbarUser {\n name: string;\n initials?: string;\n status?: SdsAvatarStatus;\n}\n\n/**\n * Application top bar: brand gradient with a decorative wave, a logo slot,\n * the app name, and the signed-in user with a logout action.\n *\n * @example\n * <sds-topbar appName=\"WebApp\" [user]=\"user\" (logout)=\"signOut()\">\n * <img sdsLogo src=\"logo.svg\" alt=\"\" />\n * </sds-topbar>\n */\n@Component({\n selector: 'sds-topbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsAvatar, SdsIcon],\n host: { class: 'block' },\n template: `\n <header\n class=\"relative z-30 flex items-center justify-between overflow-hidden bg-linear-to-r from-brand-800 via-brand-700 to-brand-600 px-4 text-white sm:px-6\"\n style=\"height: var(--sds-topbar-h)\"\n >\n <!-- Decorative wave -->\n <svg\n class=\"pointer-events-none absolute inset-y-0 right-0 h-full w-2/3 min-w-[420px]\"\n viewBox=\"0 0 600 64\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M0,64 C150,64 130,6 340,6 C470,6 480,64 600,64 Z\"\n fill=\"white\"\n fill-opacity=\"0.05\"\n />\n <path\n d=\"M40,64 C210,64 190,18 400,18 C520,18 540,64 660,64\"\n stroke=\"white\"\n stroke-opacity=\"0.13\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M130,64 C300,64 280,2 480,2 C580,2 600,40 680,64\"\n stroke=\"white\"\n stroke-opacity=\"0.10\"\n stroke-width=\"1.5\"\n />\n </svg>\n\n <!-- Left: mobile menu button + logo + app name -->\n <div class=\"relative flex items-center gap-3\">\n @if (menuButton()) {\n <button\n type=\"button\"\n class=\"-ml-1 inline-flex h-9 w-9 items-center justify-center rounded-control text-white/85 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:hidden\"\n aria-label=\"Ouvrir le menu\"\n (click)=\"store.toggleMobile()\"\n >\n <sds-icon name=\"menu\" [size]=\"22\" />\n </button>\n }\n <ng-content select=\"[sdsLogo]\" />\n @if (appName()) {\n <span class=\"h-7 w-px bg-white/30\"></span>\n <span class=\"text-xl font-bold tracking-tight\">{{ appName() }}</span>\n }\n </div>\n\n <!-- Right: actions + user + logout -->\n <div class=\"relative flex items-center gap-3 sm:gap-4\">\n <ng-content select=\"[sdsActions]\" />\n @if (user(); as u) {\n <span class=\"hidden text-sm font-medium sm:block\">{{ u.name }}</span>\n <sds-avatar\n [name]=\"u.name\"\n [initials]=\"u.initials ?? ''\"\n [status]=\"u.status ?? 'online'\"\n [size]=\"38\"\n bgClass=\"bg-white/15\"\n />\n }\n @if (showLogout()) {\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-9 items-center justify-center rounded-control text-white/85 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40\"\n aria-label=\"Se déconnecter\"\n (click)=\"logout.emit()\"\n >\n <sds-icon name=\"log-out\" [size]=\"20\" />\n </button>\n }\n </div>\n </header>\n `,\n})\nexport class SdsTopbar {\n protected readonly store = inject(SidebarStore);\n\n readonly appName = input<string>('');\n readonly user = input<SdsTopbarUser | null>(null);\n readonly showLogout = input(true, { transform: booleanAttribute });\n /** Show the mobile hamburger that toggles the sidebar drawer (< lg). */\n readonly menuButton = input(true, { transform: booleanAttribute });\n\n readonly logout = output<void>();\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * App layout shell: a full-height column with the top bar across the top and a\n * row below holding the sidebar and the scrollable main content.\n *\n * @example\n * <sds-shell>\n * <sds-topbar sdsTopbar … />\n * <sds-sidebar sdsSidebar> … </sds-sidebar>\n * <!-- routed page content -->\n * <router-outlet />\n * </sds-shell>\n */\n@Component({\n selector: 'sds-shell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div class=\"flex h-screen flex-col overflow-hidden\">\n <ng-content select=\"[sdsTopbar]\" />\n <div class=\"flex min-h-0 flex-1\">\n <ng-content select=\"[sdsSidebar]\" />\n <main class=\"min-w-0 flex-1 overflow-y-auto bg-canvas\">\n <ng-content />\n </main>\n </div>\n </div>\n `,\n})\nexport class SdsShell {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * Collapsible navigation rail. Project <sds-nav-group>/<sds-nav-item> as the\n * default content, and pin a footer (e.g. search + version badge) via the\n * [sdsFooter] slot. Collapse state is shared through SidebarStore.\n *\n * @example\n * <sds-sidebar>\n * <sds-nav-group label=\"Membres\">\n * <sds-nav-item icon=\"user-plus\" label=\"Créer un membre\" link=\"/membres/new\" />\n * </sds-nav-group>\n * <div sdsFooter>…</div>\n * </sds-sidebar>\n */\n@Component({\n selector: 'sds-sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block h-full' },\n template: `\n <!-- Mobile backdrop (only when the drawer is open, < lg) -->\n @if (mobileOpen()) {\n <div\n class=\"fixed inset-0 z-40 bg-black/50 lg:hidden\"\n (click)=\"store.closeMobile()\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <!--\n Mobile (< lg): fixed off-canvas drawer that slides in from the left.\n Desktop (≥ lg): static, collapsible icon-rail (width via --sds-rail).\n -->\n <aside\n class=\"fixed inset-y-0 left-0 z-50 flex h-full w-[var(--sds-sidebar-w)] flex-col bg-brand-900 text-white transition-transform duration-200 ease-out lg:static lg:z-auto lg:w-[var(--sds-rail)] lg:translate-x-0 lg:transition-[width]\"\n [class]=\"mobileOpen() ? 'translate-x-0' : '-translate-x-full'\"\n [style.--sds-rail]=\"railWidth()\"\n >\n <!-- Header: collapse toggle (desktop) / close (mobile) -->\n <div\n class=\"flex items-center px-3\"\n style=\"height: 52px\"\n [class]=\"collapsed() ? 'justify-end lg:justify-center' : 'justify-end'\"\n >\n <button\n type=\"button\"\n class=\"hidden h-9 w-9 items-center justify-center rounded-control text-white/70 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:inline-flex\"\n [attr.aria-label]=\"collapsed() ? 'Déplier le menu' : 'Replier le menu'\"\n [attr.aria-expanded]=\"!collapsed()\"\n (click)=\"store.toggle()\"\n >\n <sds-icon\n [name]=\"collapsed() ? 'panel-left-open' : 'panel-left-close'\"\n [size]=\"20\"\n />\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-9 items-center justify-center rounded-control text-white/70 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:hidden\"\n aria-label=\"Fermer le menu\"\n (click)=\"store.closeMobile()\"\n >\n <sds-icon name=\"x\" [size]=\"20\" />\n </button>\n </div>\n\n <!-- Navigation -->\n <nav class=\"flex-1 overflow-y-auto overflow-x-hidden px-3 pb-4\">\n <ng-content />\n </nav>\n\n <!-- Footer (search, version, …) -->\n <div class=\"px-3 pb-4 pt-2\">\n <ng-content select=\"[sdsFooter]\" />\n </div>\n </aside>\n `,\n})\nexport class SdsSidebar {\n protected readonly store = inject(SidebarStore);\n protected readonly collapsed = this.store.collapsed;\n protected readonly mobileOpen = this.store.mobileOpen;\n\n /** Desktop rail width (full vs. collapsed); mobile always uses full width. */\n protected readonly railWidth = computed(() =>\n this.collapsed()\n ? 'var(--sds-sidebar-w-collapsed)'\n : 'var(--sds-sidebar-w)',\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * Groups nav items under an optional uppercase section label. The label is\n * hidden (replaced by a divider) when the sidebar is collapsed.\n */\n@Component({\n selector: 'sds-nav-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div class=\"mt-5 first:mt-3\">\n @if (label()) {\n @if (!collapsed()) {\n <p\n class=\"mb-1.5 px-3 text-[11px] font-semibold uppercase tracking-wider text-white/60\"\n >\n {{ label() }}\n </p>\n } @else {\n <div class=\"mx-3 mb-2 mt-2 h-px bg-white/10\"></div>\n }\n }\n <div class=\"flex flex-col gap-1\">\n <ng-content />\n </div>\n </div>\n `,\n})\nexport class SdsNavGroup {\n private readonly store = inject(SidebarStore);\n\n readonly label = input<string>('');\n\n protected readonly collapsed = this.store.collapsed;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * A single sidebar navigation entry. Renders an anchor when [link] is set\n * (with automatic active state via routerLinkActive) or a button otherwise.\n *\n * Requires the host application to provide the Angular Router (`provideRouter`),\n * as it depends on RouterLink/RouterLinkActive even when used as a button.\n *\n * @example\n * <sds-nav-item icon=\"home\" label=\"Accueil\" link=\"/\" [exact]=\"true\" />\n */\n@Component({\n selector: 'sds-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, RouterLink, RouterLinkActive, SdsIcon],\n host: { class: 'block' },\n template: `\n @if (link() !== null) {\n <a\n [routerLink]=\"link()\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"{ exact: exact() }\"\n [class]=\"itemClass(rla.isActive || active())\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-label]=\"collapsed() ? label() : null\"\n [attr.aria-current]=\"rla.isActive || active() ? 'page' : null\"\n (click)=\"store.closeMobile()\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"itemClass(active())\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-label]=\"collapsed() ? label() : null\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n (click)=\"select.emit(); store.closeMobile()\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </button>\n }\n\n <ng-template #content>\n @if (icon()) {\n <sds-icon [name]=\"icon()!\" [size]=\"20\" class=\"shrink-0\" />\n }\n <!-- Label is hidden only on the collapsed desktop rail; always shown in the mobile drawer. -->\n <span class=\"truncate\" [class]=\"collapsed() ? 'lg:hidden' : ''\">{{ label() }}</span>\n </ng-template>\n `,\n})\nexport class SdsNavItem {\n protected readonly store = inject(SidebarStore);\n\n readonly icon = input<SdsIconName | null>(null);\n readonly label = input.required<string>();\n /** Router link target; when null, the item behaves as a button. */\n readonly link = input<string | unknown[] | null>(null);\n readonly exact = input(false, { transform: booleanAttribute });\n /** Manual active state (combined with routerLinkActive when a link is set). */\n readonly active = input(false, { transform: booleanAttribute });\n\n readonly select = output<void>();\n\n protected readonly collapsed = this.store.collapsed;\n\n protected itemClass(isActive: boolean): string {\n const base =\n 'group flex w-full items-center gap-3 rounded-control px-3 text-sm font-medium ' +\n 'transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 ' +\n 'focus-visible:ring-white/40 ' +\n (this.collapsed() ? 'h-10 lg:justify-center' : 'h-10');\n const state = isActive\n ? 'bg-brand-500 text-white shadow-sm'\n : 'text-white/70 hover:bg-white/8 hover:text-white';\n return `${base} ${state}`;\n }\n}\n","/*\n * Public API Surface of saitech-design-system — the Saitech / App design system.\n */\n\n// Primitives\nexport * from './lib/icon/icon-registry';\nexport * from './lib/icon/sds-icon';\nexport * from './lib/button/sds-button';\nexport * from './lib/input/sds-input';\nexport * from './lib/textarea/sds-textarea';\nexport * from './lib/toggle-switch/sds-toggle-switch';\nexport * from './lib/checkbox/sds-checkbox';\nexport * from './lib/avatar/sds-avatar';\nexport * from './lib/badge/sds-badge';\nexport * from './lib/card/sds-card';\nexport * from './lib/datepicker/date-utils';\nexport * from './lib/datepicker/sds-calendar';\nexport * from './lib/datepicker/sds-date-picker';\nexport * from './lib/select/sds-select';\nexport * from './lib/select/sds-multi-select';\nexport * from './lib/phone-input/phone-countries';\nexport * from './lib/phone-input/sds-phone-input';\nexport * from './lib/paginator/sds-paginator';\nexport * from './lib/tabs/sds-tabs-store';\nexport * from './lib/tabs/sds-tabs';\nexport * from './lib/tabs/sds-tab-list';\nexport * from './lib/tabs/sds-tab';\nexport * from './lib/tabs/sds-tab-panels';\nexport * from './lib/tabs/sds-tab-panel';\nexport * from './lib/accordion/sds-accordion-store';\nexport * from './lib/accordion/sds-accordion';\nexport * from './lib/accordion/sds-accordion-panel';\nexport * from './lib/accordion/sds-accordion-header';\nexport * from './lib/accordion/sds-accordion-content';\nexport * from './lib/table/sds-table-cell';\nexport * from './lib/table/sds-table-row-expansion';\nexport * from './lib/table/sds-table';\n\n// Layout\nexport * from './lib/topbar/sds-topbar';\nexport * from './lib/shell/sds-shell';\nexport * from './lib/sidebar/sidebar-store';\nexport * from './lib/sidebar/sds-sidebar';\nexport * from './lib/sidebar/sds-nav-group';\nexport * from './lib/sidebar/sds-nav-item';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VARIANTS","SIZES","nextId"],"mappings":"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,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA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"}