@besaitech/ng-design-system 0.0.41 → 0.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/besaitech-ng-design-system.mjs +1054 -36
- package/fesm2022/besaitech-ng-design-system.mjs.map +1 -1
- package/index.d.ts +311 -14
- package/package.json +1 -1
|
@@ -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/localized-input/sds-localized-input.ts","../../../projects/saitech-design-system/src/lib/otp-input/sds-otp-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/toast/sds-toast.service.ts","../../../projects/saitech-design-system/src/lib/toast/sds-toast-host.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 // Added for the Belvigo merchant shell (nav + header). Lucide 24x24 stroke paths, matching the\n // set the app already used before it moved onto this library.\n 'chart-column':\n '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n 'clipboard-list':\n '<rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"/><path d=\"M12 11h4\"/><path d=\"M12 16h4\"/><path d=\"M8 11h.01\"/><path d=\"M8 16h.01\"/>',\n 'credit-card':\n '<rect width=\"20\" height=\"14\" x=\"2\" y=\"5\" rx=\"2\"/><line x1=\"2\" x2=\"22\" y1=\"10\" y2=\"10\"/>',\n 'external-link':\n '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n 'languages':\n '<path d=\"m5 8 6 6\"/><path d=\"m4 14 6-6 2-3\"/><path d=\"M2 5h12\"/><path d=\"M7 2h1\"/><path d=\"m22 22-5-10-5 10\"/><path d=\"M14 18h6\"/>',\n 'megaphone':\n '<path d=\"m3 11 18-5v12L3 14v-3z\"/><path d=\"M11.6 16.8a3 3 0 1 1-5.8-1.6\"/>',\n 'monitor':\n '<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"/><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"/><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"/>',\n 'store':\n '<path d=\"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7\"/><path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\"/><path d=\"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4\"/><path d=\"M2 7h20\"/><path d=\"M22 7v3a2 2 0 0 1-2 2a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12a2 2 0 0 1-2-2V7\"/>',\n 'user-round':\n '<circle cx=\"12\" cy=\"8\" r=\"5\"/><path d=\"M20 21a8 8 0 0 0-16 0\"/>',\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 'user-check':\n '<path d=\"m16 11 2 2 4-4\"/><path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/>',\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 // Couriers. The back-office and the courier-facing screens both name a rider, and every Belvigo\n // surface that does should draw the same one.\n bike: '<circle cx=\"18.5\" cy=\"17.5\" r=\"3.5\"/><circle cx=\"5.5\" cy=\"17.5\" r=\"3.5\"/><circle cx=\"15\" cy=\"5\" r=\"1\"/><path d=\"M12 17.5V14l-3-3 4-3 2 3h2\"/>',\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 bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n 'scroll-text':\n '<path d=\"M15 12h-5\"/><path d=\"M15 8h-5\"/><path d=\"M19 17V5a2 2 0 0 0-2-2H4\"/><path d=\"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3\"/>',\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';\nexport type SdsButtonShape = 'control' | 'pill';\n\nconst BASE =\n 'inline-flex items-center justify-center gap-2 font-medium ' +\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\n /**\n * `pill` fully rounds the button. It is the shape a consumer-facing surface tends to want for its\n * primary action, and the same axis {@link SdsInput} exposes — a design system with pill inputs and\n * no pill buttons would force any app that wants one back onto hand-rolled classes for its single\n * most important control.\n */\n readonly shape = input<SdsButtonShape>('control');\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 this.shape() === 'pill' ? 'rounded-full' : 'rounded-control',\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' | 'filled' | 'on-brand';\nexport type SdsInputShape = 'control' | 'pill';\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 styles: `\n /*\n * Chrome paints an opaque autofill background on the INPUT element. This input is deliberately\n * bg-transparent inside a themed wrapper that owns the field's background, border and radius — so\n * the autofill paint lands as a square block sitting inside the field's rounded, coloured box,\n * and on a filled or on-brand field it is a differently-coloured block at that.\n *\n * The long transition delay is the standard way to suppress it: the UA sets the background\n * through an internal rule no stylesheet can override, but it is still a transition-able\n * property, so deferring the transition indefinitely means it is never painted. The field stays\n * autofilled and the password manager still works — only the paint is suppressed.\n *\n * -webkit-text-fill-color keeps the VALUE readable, since the UA also forces a text colour to\n * match the background it just painted.\n */\n input:-webkit-autofill,\n input:-webkit-autofill:hover,\n input:-webkit-autofill:focus,\n input:-webkit-autofill:active {\n transition: background-color 100000s ease-in-out 0s;\n -webkit-text-fill-color: currentColor;\n caret-color: currentColor;\n }\n `,\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 border transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n @if (leadingIcon()) {\n <!-- A pill needs its icon further in: on a fully-rounded field an icon at left-3 sits over\n the curve rather than inside the field. -->\n <sds-icon\n [name]=\"leadingIcon()!\"\n [size]=\"18\"\n class=\"pointer-events-none absolute opacity-70\"\n [class]=\"pill() ? 'left-4' : 'left-3'\"\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 [&::-webkit-search-cancel-button]:appearance-none\n [&::-webkit-search-decoration]:appearance-none\"\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 [attr.aria-label]=\"clearLabel()\"\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 /**\n * `search` is the semantically right type for a search field, and the template strips the WebKit\n * search decorations that come with it. Without that, a `search` field with {@link clearable} draws\n * TWO clear buttons — the component's and the browser's own, which no stylesheet can reach and which\n * sits outside the field's own padding.\n */\n readonly type = input<SdsInputType>('text');\n readonly size = input<SdsInputSize>('md');\n /**\n * `filled` is a borderless field on a muted ground, for a search box that has to sit inside a page\n * rather than announce itself as a form control — a storefront's search pill above all.\n * `on-brand` is the same field tuned for a dark surface.\n */\n readonly appearance = input<SdsInputAppearance>('default');\n\n /**\n * `pill` fully rounds the field. Separate from {@link appearance} on purpose: a bordered pill and a\n * filled box are both real designs, and folding the two axes into one enum would forbid half of them.\n */\n readonly shape = input<SdsInputShape>('control');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible name for the clear button. French default so existing consumers are unchanged, but an\n * app serving more than one language MUST translate it — it is an icon-only control, so this string\n * is its only name.\n */\n readonly clearLabel = input<string>('Effacer');\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 filled = computed(() => this.appearance() === 'filled');\n protected readonly pill = computed(() => this.shape() === 'pill');\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 inset = this.pill() ? 'pl-11' : 'pl-10';\n const bare = this.pill() ? 'pl-5' : 'pl-3.5';\n const left = this.leadingIcon() ? inset : bare;\n const right =\n this.trailingIcon() || this.clearable() || this.trailingAction()\n ? 'pr-10'\n : this.pill()\n ? 'pr-5'\n : 'pr-3.5';\n return `${left} ${right}`;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()], this.pill() ? 'rounded-full' : 'rounded-control'];\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n\n if (this.filled()) {\n // border-transparent, not border-0: the border box is what keeps a filled field the same height\n // as a bordered one, so the two sit level when a toolbar mixes them.\n parts.push('border-transparent bg-muted text-ink');\n parts.push(\n this.error()\n ? 'border-danger focus-within:ring-2 focus-within:ring-danger/30'\n : 'focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n } else 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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** A translatable string held per language code — e.g. `{ fr: 'Titre', nl: 'Titel' }`. */\nexport type SdsLocalizedValue = Record<string, string>;\n\nexport type SdsLocalizedInputSize = 'sm' | 'md' | 'lg';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsLocalizedInputSize, string> = {\n sm: 'min-h-9 text-sm',\n md: 'min-h-10 text-sm',\n lg: 'min-h-12 text-base',\n};\n\n/**\n * One language-aware text field for editing a translated value (a {@link SdsLocalizedValue} — a title,\n * label or description in several languages). Only one language is edited at a time; a compact switcher\n * sitting **inside the field** flips which translation you are editing, and a dot marks the languages that\n * already have content, so a partially-translated value is obvious at a glance.\n *\n * The active language defaults to {@link currentLanguage} when it is one of {@link languages}, otherwise the\n * first accepted language — so the field \"opens on the language you are working in\". Empty translations are\n * pruned from the emitted value, keeping the stored map clean.\n *\n * Implements ControlValueAccessor over the map — use with reactive forms or `[(ngModel)]`:\n * `<sds-localized-input [languages]=\"['fr','nl','en']\" [(ngModel)]=\"title\" />`.\n */\n@Component({\n selector: 'sds-localized-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsLocalizedInput),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label [for]=\"inputId\" class=\"mb-1.5 block text-sm font-medium text-ink\">{{ label() }}</label>\n }\n\n <div\n class=\"relative flex items-stretch rounded-control border bg-white text-ink transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n @if (multiline()) {\n <textarea\n [id]=\"inputId\"\n [rows]=\"rows()\"\n [placeholder]=\"fieldPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"current()\"\n (input)=\"write($event)\"\n (blur)=\"onTouched()\"\n class=\"min-w-0 flex-1 resize-y bg-transparent px-3.5 py-2 outline-none placeholder:text-current/50 disabled:cursor-not-allowed\"\n ></textarea>\n } @else {\n <input\n [id]=\"inputId\"\n [placeholder]=\"fieldPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"current()\"\n (input)=\"write($event)\"\n (blur)=\"onTouched()\"\n class=\"min-w-0 flex-1 bg-transparent px-3.5 outline-none placeholder:text-current/50 disabled:cursor-not-allowed\"\n />\n }\n\n @if (languages().length > 1) {\n <div\n class=\"flex shrink-0 items-center gap-0.5 self-start p-1\"\n [class]=\"multiline() ? '' : 'self-center'\"\n role=\"tablist\"\n [attr.aria-label]=\"languageSwitcherLabel()\"\n >\n @for (lang of languages(); track lang) {\n <button\n type=\"button\"\n role=\"tab\"\n tabindex=\"-1\"\n [disabled]=\"isDisabled()\"\n (click)=\"select(lang)\"\n [attr.aria-selected]=\"activeLang() === lang\"\n [attr.title]=\"lang.toUpperCase() + (filled(lang) ? '' : ' — ' + untranslatedLabel())\"\n class=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] font-semibold uppercase leading-none transition-colors disabled:cursor-not-allowed disabled:opacity-50\"\n [class]=\"\n activeLang() === lang\n ? 'bg-brand-50 text-brand-700'\n : 'text-ink-faint hover:bg-muted hover:text-ink-soft'\n \"\n >\n {{ lang }}\n <span\n class=\"inline-block h-1 w-1 rounded-full\"\n [class]=\"filled(lang) ? 'bg-success' : 'bg-current/30'\"\n ></span>\n </button>\n }\n </div>\n }\n </div>\n\n @if (hint()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n `,\n})\nexport class SdsLocalizedInput implements ControlValueAccessor {\n readonly inputId = `sds-localized-input-${nextId++}`;\n\n readonly label = input<string>('');\n readonly hint = input<string>('');\n readonly placeholder = input<string>('');\n\n /** The accepted language codes, in display order (e.g. `['fr','nl','en']`). */\n readonly languages = input<string[]>([]);\n\n /** Language to pre-select; used when it is one of {@link languages}, else the first accepted language. */\n readonly currentLanguage = input<string | null>(null);\n\n readonly multiline = input(false, { transform: booleanAttribute });\n readonly rows = input(3, { transform: numberAttribute });\n readonly size = input<SdsLocalizedInputSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible name for the in-field language switcher, and the \"no translation yet\" title suffix on each\n * language button. French defaults so existing consumers are unchanged; translate them in a multi-language\n * app (the buttons are letter-only, so the title carries their meaning).\n */\n readonly languageSwitcherLabel = input<string>('Langue');\n readonly untranslatedLabel = input<string>('à traduire');\n\n private readonly valueMap = signal<SdsLocalizedValue>({});\n /** Language chosen via the switcher; null means \"follow currentLanguage / the first language\". */\n private readonly manual = signal<string | null>(null);\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.isDisabled()\n ? 'border-border opacity-60 cursor-not-allowed'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n return parts.join(' ');\n });\n\n /** The language currently being edited. */\n protected readonly activeLang = computed(() => {\n const langs = this.languages();\n if (!langs.length) {\n return '';\n }\n const manual = this.manual();\n if (manual && langs.includes(manual)) {\n return manual;\n }\n const preferred = this.currentLanguage();\n return preferred && langs.includes(preferred) ? preferred : langs[0];\n });\n\n protected readonly current = computed(() => this.valueMap()[this.activeLang()] ?? '');\n\n protected filled(lang: string): boolean {\n const text = this.valueMap()[lang];\n return !!text && text.trim().length > 0;\n }\n\n protected fieldPlaceholder(): string {\n const base = this.placeholder();\n const lang = this.activeLang().toUpperCase();\n if (base) {\n return lang ? `${base} (${lang})` : base;\n }\n return lang ? `(${lang})` : '';\n }\n\n protected select(lang: string): void {\n this.manual.set(lang);\n this.onTouched();\n }\n\n protected write(event: Event): void {\n const lang = this.activeLang();\n if (!lang) {\n return;\n }\n const text = (event.target as HTMLInputElement | HTMLTextAreaElement).value;\n const next: SdsLocalizedValue = { ...this.valueMap() };\n if (text) {\n next[lang] = text;\n } else {\n delete next[lang];\n }\n this.valueMap.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: SdsLocalizedValue) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: SdsLocalizedValue | null): void {\n this.valueMap.set(value ? { ...value } : {});\n }\n registerOnChange(fn: (value: SdsLocalizedValue) => 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","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n input,\n numberAttribute,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nexport type SdsOtpInputSize = 'md' | 'lg';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsOtpInputSize, string> = {\n md: 'h-12 w-11 text-lg',\n lg: 'h-14 w-12 text-xl',\n};\n\n/**\n * A segmented one-time-code field: one box per character, for the short numeric codes emailed or\n * texted for sign-in and verification. Implements ControlValueAccessor — bind\n * `formControlName`/`[(ngModel)]`; the value is the concatenated string (e.g. `\"483920\"`), and\n * {@link completed} fires the moment every box is filled.\n *\n * <p>Only digits are accepted (`inputMode` is `numeric` by default). Typing auto-advances,\n * Backspace steps back and clears, the arrow keys move between boxes, and pasting a whole code\n * distributes it across the boxes from the focused one — so a user can paste `483920` into the\n * first box and have it land correctly.\n */\n@Component({\n selector: 'sds-otp-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsOtpInput),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label [id]=\"groupId + '-label'\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div\n class=\"flex items-center gap-2\"\n role=\"group\"\n [attr.aria-labelledby]=\"label() ? groupId + '-label' : null\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n @for (i of indexes(); track i) {\n <input\n #cell\n type=\"text\"\n [attr.data-index]=\"i\"\n [inputMode]=\"inputMode()\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"charAt(i)\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"cellLabel() + ' ' + (i + 1)\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n class=\"bg-white text-center font-semibold tabular-nums outline-none transition-colors\n disabled:cursor-not-allowed\"\n [class]=\"cellClasses()\"\n (input)=\"onInput($event, i)\"\n (keydown)=\"onKeydown($event, i)\"\n (paste)=\"onPaste($event, i)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onTouched()\"\n />\n }\n </div>\n\n @if (error()) {\n <p [id]=\"groupId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n } @else if (hint()) {\n <p [id]=\"groupId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n `,\n})\nexport class SdsOtpInput implements ControlValueAccessor {\n readonly groupId = `sds-otp-${nextId++}`;\n\n /** How many boxes / characters the code has. */\n readonly length = input(6, { transform: numberAttribute });\n readonly label = input<string>('');\n /** Accessible name for the whole group when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsOtpInputSize>('md');\n /** `numeric` for digit codes (the default); `text` for alphanumeric codes. */\n readonly inputMode = input<'numeric' | 'text'>('numeric');\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Focus the first box on first render. */\n readonly autoFocus = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible name for an individual box, suffixed with its 1-based position (\"Digit 1\", \"Digit\n * 2\", …). French default so existing consumers are unchanged; translate it in an app serving more\n * than one language, since each box is an icon-less control whose only name this is.\n */\n readonly cellLabel = input<string>('Chiffre');\n\n /** Emitted with the full value the moment the last box is filled. */\n readonly completed = output<string>();\n\n private readonly cells = viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n /** One entry per box; the source of truth, kept exactly {@link length} long. */\n private readonly chars = signal<string[]>([]);\n private readonly cvaDisabled = signal(false);\n\n protected readonly indexes = computed(() =>\n Array.from({ length: this.length() }, (_, i) => i),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly describedBy = computed(() => {\n if (this.error()) return `${this.groupId}-err`;\n if (this.hint()) return `${this.groupId}-hint`;\n return null;\n });\n\n protected readonly cellClasses = computed(() => {\n const parts = ['rounded-control border', 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 text-ink focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n if (this.isDisabled()) parts.push('opacity-60');\n return parts.join(' ');\n });\n\n constructor() {\n // Autofocus once the boxes are in the DOM. afterRenderEffect re-runs on signal reads, but the\n // guard keeps it to the first paint — refocusing on every value change would fight the user.\n let focused = false;\n afterRenderEffect(() => {\n if (this.autoFocus() && !focused && !this.isDisabled()) {\n this.cells()[0]?.nativeElement.focus();\n focused = true;\n }\n });\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n // Programmatic set never emits — CVA writeValue must not call onChange.\n this.chars.set(this.spread(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 // --- events ---------------------------------------------------------------\n\n protected charAt(index: number): string {\n return this.chars()[index] ?? '';\n }\n\n protected onInput(event: Event, index: number): void {\n const el = event.target as HTMLInputElement;\n const raw = el.value;\n const digits = this.sanitize(raw);\n if (digits.length === 0) {\n if (raw.length === 0) {\n // Genuinely emptied (cut, or a deletion the keydown handler did not catch) — clear the box.\n this.setChar(index, '');\n } else {\n // A rejected character (letter, symbol) — reassert the box's real content, since the\n // [value] binding will not repaint an unchanged signal.\n el.value = this.charAt(index);\n }\n return;\n }\n if (digits.length > 1) {\n // Fast typing or an autofill dropped several characters into one box — spread them.\n this.fill(digits, index);\n return;\n }\n this.setChar(index, digits);\n this.focusIndex(index + 1);\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n switch (event.key) {\n case 'Backspace':\n event.preventDefault();\n if (this.charAt(index)) {\n this.setChar(index, '');\n } else if (index > 0) {\n this.setChar(index - 1, '');\n this.focusIndex(index - 1);\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n this.focusIndex(index - 1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.focusIndex(index + 1);\n break;\n case 'Delete':\n event.preventDefault();\n this.setChar(index, '');\n break;\n default:\n break;\n }\n }\n\n protected onPaste(event: ClipboardEvent, index: number): void {\n const digits = this.sanitize(event.clipboardData?.getData('text') ?? '');\n if (!digits) return;\n event.preventDefault();\n this.fill(digits, index);\n }\n\n protected onFocus(event: FocusEvent): void {\n // Select the box's content so a keystroke overwrites rather than being rejected by maxlength.\n (event.target as HTMLInputElement).select();\n }\n\n // --- internals ------------------------------------------------------------\n\n private sanitize(raw: string): string {\n return this.inputMode() === 'numeric'\n ? raw.replace(/\\D/g, '')\n : raw.replace(/[^A-Za-z0-9]/g, '');\n }\n\n /** Normalize any input string into an array exactly {@link length} long. */\n private spread(raw: string): string[] {\n const cleaned = this.sanitize(raw).slice(0, this.length());\n return Array.from({ length: this.length() }, (_, i) => cleaned[i] ?? '');\n }\n\n private setChar(index: number, value: string): void {\n const next = this.normalized();\n next[index] = value;\n this.commit(next);\n }\n\n /** Write `digits` across the boxes starting at `start`, then focus the next empty box. */\n private fill(digits: string, start: number): void {\n const next = this.normalized();\n let cursor = start;\n for (const ch of digits) {\n if (cursor >= this.length()) break;\n next[cursor] = ch;\n cursor += 1;\n }\n this.commit(next);\n this.focusIndex(Math.min(cursor, this.length() - 1));\n }\n\n private commit(next: string[]): void {\n this.chars.set(next);\n const value = next.join('');\n this.onChange(value);\n if (next.every((c) => c !== '')) {\n this.completed.emit(value);\n }\n }\n\n /** The current boxes as a fresh, correctly-sized array to mutate. */\n private normalized(): string[] {\n const current = this.chars();\n return Array.from({ length: this.length() }, (_, i) => current[i] ?? '');\n }\n\n private focusIndex(index: number): void {\n const clamped = Math.max(0, Math.min(index, this.length() - 1));\n const cell = this.cells()[clamped]?.nativeElement;\n if (cell) {\n cell.focus();\n cell.select();\n }\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\n/** Zero-pad a number to two digits (e.g. 9 → \"09\"). */\nexport function pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\n/** Format a date's time-of-day as HH:mm (24h, local time). */\nexport function formatHhMm(d: Date): string {\n return `${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\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 booleanAttribute,\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 pad2,\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 [attr.aria-label]=\"calendarLabel()\"\n >\n <!-- Header -->\n <div class=\"mb-2 flex items-center justify-between\">\n <button type=\"button\" [class]=\"navBtn\" [attr.aria-label]=\"previousLabel()\" (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\" [attr.aria-label]=\"nextLabel()\" (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 <!-- Time editor -->\n @if (showTime()) {\n <div class=\"mt-2 flex items-center gap-2 border-t border-border pt-2\">\n <span class=\"text-xs font-medium text-ink-soft\">{{ timeLabel() }}</span>\n <div class=\"ml-auto inline-flex items-center gap-1.5\">\n <div class=\"inline-flex items-center rounded-control border border-border bg-white\">\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"hoursText()\"\n [disabled]=\"!value()\"\n [attr.aria-label]=\"hoursLabel()\"\n (change)=\"setHours($any($event.target).value)\"\n (blur)=\"$any($event.target).value = hoursText()\"\n (keydown.arrowup)=\"stepHours(1); $event.preventDefault()\"\n (keydown.arrowdown)=\"stepHours(-1); $event.preventDefault()\"\n [class]=\"timeInput\"\n />\n <div class=\"flex flex-col border-l border-border\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepHours(1)\"\n >\n <span class=\"inline-flex rotate-180\"\n ><sds-icon name=\"chevron-down\" [size]=\"11\"\n /></span>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepHours(-1)\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"11\" />\n </button>\n </div>\n </div>\n <span class=\"text-sm font-semibold text-ink-soft\">:</span>\n <div class=\"inline-flex items-center rounded-control border border-border bg-white\">\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"minutesText()\"\n [disabled]=\"!value()\"\n [attr.aria-label]=\"minutesLabel()\"\n (change)=\"setMinutes($any($event.target).value)\"\n (blur)=\"$any($event.target).value = minutesText()\"\n (keydown.arrowup)=\"stepMinutes(1); $event.preventDefault()\"\n (keydown.arrowdown)=\"stepMinutes(-1); $event.preventDefault()\"\n [class]=\"timeInput\"\n />\n <div class=\"flex flex-col border-l border-border\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepMinutes(1)\"\n >\n <span class=\"inline-flex rotate-180\"\n ><sds-icon name=\"chevron-down\" [size]=\"11\"\n /></span>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepMinutes(-1)\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"11\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Actions -->\n @if (showActions() || showDone()) {\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\n <div class=\"flex items-center gap-1\">\n @if (showActions()) {\n <button\n type=\"button\"\n [class]=\"actionBtn\"\n [disabled]=\"todayDisabled()\"\n (click)=\"goToday()\"\n >\n {{ todayActionLabel() }}\n </button>\n <button type=\"button\" [class]=\"actionBtn\" (click)=\"clear()\">\n {{ clearActionLabel() }}\n </button>\n }\n </div>\n @if (showDone()) {\n <button type=\"button\" [class]=\"doneBtn\" (click)=\"done.emit()\">{{ doneLabel() }}</button>\n }\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 /** When true, a time editor (HH:mm, 24h) is shown and the value keeps its time-of-day. */\n readonly showTime = input(false, { transform: booleanAttribute });\n /** When true, a \"done\" action is shown (used by the overlay picker to close the panel). */\n readonly showDone = input(false, { transform: booleanAttribute });\n\n /** Visible label of the time editor. Translate it in the consuming app. */\n readonly timeLabel = input<string>('Heure');\n /** Accessible name of the hours field (it is a bare numeric input). */\n readonly hoursLabel = input<string>('Heures');\n /** Accessible name of the minutes field. */\n readonly minutesLabel = input<string>('Minutes');\n /** Visible text of the \"done\" action (shown when {@link showDone} is true). */\n readonly doneLabel = input<string>('Terminé');\n\n /**\n * Accessible name for the calendar container. French default so existing consumers are unchanged,\n * but an app serving more than one language MUST translate it.\n */\n readonly calendarLabel = input<string>('Calendrier');\n\n /**\n * Accessible name for the \"previous\" nav button. It is icon-only, so this string is its ONLY\n * accessible name — a hardcoded French one is simply wrong in every other locale. Translate it in\n * the consuming app.\n */\n readonly previousLabel = input<string>('Précédent');\n\n /** Accessible name for the icon-only \"next\" nav button. See {@link previousLabel}. */\n readonly nextLabel = input<string>('Suivant');\n\n /**\n * Visible text of the \"today\" action (shown when {@link showActions} is true). Translate it in the\n * consuming app — the library ships no i18n of its own.\n */\n readonly todayActionLabel = input<string>(\"Aujourd'hui\");\n\n /** Visible text of the \"clear\" action. See {@link todayActionLabel}. */\n readonly clearActionLabel = input<string>('Effacer');\n\n /** Emitted when a concrete date is picked (day click or \"Aujourd'hui\"). */\n readonly dateSelect = output<Date>();\n /** Emitted when the \"done\" action is used (see {@link showDone}). */\n readonly done = output<void>();\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 protected readonly doneBtn =\n 'rounded-control bg-brand-600 px-3 py-1 text-xs font-semibold text-white hover:bg-brand-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500';\n protected readonly timeInput =\n 'w-8 bg-transparent py-1 text-center text-sm text-ink outline-none disabled:cursor-not-allowed disabled:opacity-40';\n protected readonly stepBtn =\n 'flex h-3.5 w-5 items-center justify-center text-ink-faint transition-colors hover:text-ink focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-30';\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: (!!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 // showTime keeps the current time-of-day (or 00:00 when nothing was set yet); otherwise midnight.\n const day = this.applyTime(startOfDay(d));\n this.value.set(day);\n this.viewDate.set(startOfMonth(day));\n this.focusedDate.set(startOfDay(day));\n this.dateSelect.emit(day);\n }\n\n /** Carry the previously-selected time-of-day onto a freshly-picked day (only when showTime). */\n private applyTime(day: Date): Date {\n if (!this.showTime()) return day;\n const prev = this.value();\n if (!prev) return day; // no prior time → keep 00:00\n const d = new Date(day);\n d.setHours(prev.getHours(), prev.getMinutes(), 0, 0);\n return d;\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 // --- time editor (only rendered when showTime) ---\n protected readonly hoursText = computed(() => {\n const v = this.value();\n return v ? pad2(v.getHours()) : '';\n });\n protected readonly minutesText = computed(() => {\n const v = this.value();\n return v ? pad2(v.getMinutes()) : '';\n });\n\n protected setHours(raw: string): void {\n const v = this.value();\n if (!v) return;\n const n = parseInt(raw, 10);\n if (Number.isNaN(n)) return;\n const d = new Date(v);\n d.setHours(Math.min(23, Math.max(0, n)));\n this.value.set(d);\n }\n protected setMinutes(raw: string): void {\n const v = this.value();\n if (!v) return;\n const n = parseInt(raw, 10);\n if (Number.isNaN(n)) return;\n const d = new Date(v);\n d.setMinutes(Math.min(59, Math.max(0, n)));\n this.value.set(d);\n }\n /** Wrap hours within 0–23; never carries into the day. */\n protected stepHours(delta: number): void {\n const v = this.value();\n if (!v) return;\n const d = new Date(v);\n d.setHours((d.getHours() + delta + 24) % 24);\n this.value.set(d);\n }\n /** Wrap minutes within 0–59; never carries into the hour. */\n protected stepMinutes(delta: number): void {\n const v = this.value();\n if (!v) return;\n const d = new Date(v);\n d.setMinutes((d.getMinutes() + delta + 60) % 60);\n this.value.set(d);\n }\n\n // --- keyboard (day grid) ---\n protected onGridKeydown(e: KeyboardEvent): void {\n let f = this.focusedDate();\n switch (e.key) {\n case 'ArrowLeft':\n f = addDays(f, -1);\n break;\n case 'ArrowRight':\n f = addDays(f, 1);\n break;\n case 'ArrowUp':\n f = addDays(f, -7);\n break;\n case 'ArrowDown':\n f = addDays(f, 7);\n break;\n case 'Home':\n f = addDays(f, -((f.getDay() - this.firstDayOfWeek() + 7) % 7));\n break;\n case 'End':\n f = addDays(f, 6 - ((f.getDay() - this.firstDayOfWeek() + 7) % 7));\n break;\n case 'PageUp':\n f = addMonthsKeepDay(f, -1);\n break;\n case 'PageDown':\n f = addMonthsKeepDay(f, 1);\n 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>(`[data-date=\"${isoDay(d)}\"]`);\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, formatHhMm } 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)': 'onEscape($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 @if (inline()) {\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n [showTime]=\"showTime()\"\n [timeLabel]=\"timeLabel()\"\n [hoursLabel]=\"hoursLabel()\"\n [minutesLabel]=\"minutesLabel()\"\n [calendarLabel]=\"calendarLabel()\"\n [previousLabel]=\"previousLabel()\"\n [nextLabel]=\"nextLabel()\"\n [todayActionLabel]=\"todayActionLabel()\"\n [clearActionLabel]=\"clearActionLabel()\"\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 (keydown.enter)=\"onTriggerKeydown($event)\"\n (keydown.space)=\"onTriggerKeydown($event)\"\n (keydown.arrowdown)=\"onTriggerKeydown($event)\"\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 [attr.aria-label]=\"clearLabel()\"\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() ? closeCalendarLabel() : openCalendarLabel()\"\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 [attr.aria-label]=\"panelLabel()\"\n (keydown.escape)=\"onEscape($event)\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n [showTime]=\"showTime()\"\n [showDone]=\"showTime()\"\n [timeLabel]=\"timeLabel()\"\n [hoursLabel]=\"hoursLabel()\"\n [minutesLabel]=\"minutesLabel()\"\n [doneLabel]=\"doneLabel()\"\n [calendarLabel]=\"calendarLabel()\"\n [previousLabel]=\"previousLabel()\"\n [nextLabel]=\"nextLabel()\"\n [todayActionLabel]=\"todayActionLabel()\"\n [clearActionLabel]=\"clearActionLabel()\"\n (valueChange)=\"onCalendarValue($event)\"\n (dateSelect)=\"onDateSelect()\"\n (done)=\"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 /**\n * When true, the calendar shows a time editor (HH:mm, 24h), the value keeps its time-of-day, and\n * the field displays date + time. The overlay stays open on day-select so the time can be set;\n * a \"done\" action (and click-away / Escape) closes it.\n */\n readonly showTime = input(false, { transform: booleanAttribute });\n /** Custom display formatter for the DATE part (default dd/MM/yyyy). The time is appended as HH:mm. */\n readonly format = input<(d: Date) => string>(formatDdMmYyyy);\n\n /** Visible label of the time editor (forwarded to the calendar). See {@link showTime}. */\n readonly timeLabel = input<string>('Heure');\n /** Accessible name of the hours field (forwarded to the calendar). */\n readonly hoursLabel = input<string>('Heures');\n /** Accessible name of the minutes field (forwarded to the calendar). */\n readonly minutesLabel = input<string>('Minutes');\n /** Visible text of the calendar's \"done\" action, shown in the overlay when {@link showTime}. */\n readonly doneLabel = input<string>('Terminé');\n\n /**\n * Accessible name for the clear button. French default so existing consumers are unchanged, but an\n * app serving more than one language MUST translate it — it is an icon-only control, so this string\n * is its only name.\n */\n readonly clearLabel = input<string>('Effacer la date');\n\n /**\n * Accessible name for the icon-only calendar toggle while the panel is CLOSED. See\n * {@link clearLabel} for why this has to be translatable.\n */\n readonly openCalendarLabel = input<string>('Ouvrir le calendrier');\n\n /** Accessible name for the calendar toggle while the panel is OPEN. See {@link openCalendarLabel}. */\n readonly closeCalendarLabel = input<string>('Fermer le calendrier');\n\n /** Accessible name for the overlay dialog that holds the calendar. */\n readonly panelLabel = input<string>('Sélection de date');\n\n /**\n * Labels forwarded to the embedded <sds-calendar>. They live here because the picker is how the\n * calendar is normally reached — without forwarding, a consumer could translate the field but not\n * the panel it opens. Defaults match SdsCalendar's own, so nothing changes for existing consumers.\n */\n readonly calendarLabel = input<string>('Calendrier');\n readonly previousLabel = input<string>('Précédent');\n readonly nextLabel = input<string>('Suivant');\n readonly todayActionLabel = input<string>(\"Aujourd'hui\");\n readonly clearActionLabel = input<string>('Effacer');\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 if (!v) return '';\n return this.showTime() ? `${this.format()(v)} ${formatHhMm(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 /**\n * A day was clicked in the overlay. Without a time editor, a day click is the whole selection, so\n * close. With showTime, the user still needs to set the time, so keep the panel open (they close it\n * with the \"done\" action, a click away, or Escape).\n */\n protected onDateSelect(): void {\n if (!this.showTime()) this.close(true);\n }\n\n /**\n * Escape closes the panel and consumes the event while the panel is open, so an ancestor modal does\n * not also dismiss on the same keystroke (mirrors sds-select). When the panel is already closed, the\n * event passes through so Escape can dismiss whatever contains the field.\n */\n protected onEscape(event: Event): void {\n if (!this.open()) return;\n event.preventDefault();\n this.close(true);\n }\n\n /** The readonly trigger is not a button, so open the overlay on Enter / Space / ArrowDown too. */\n protected onTriggerKeydown(event: Event): void {\n event.preventDefault(); // stop Space/ArrowDown scrolling and Enter submitting an enclosing form\n if (!this.isDisabled() && !this.open()) this.openPanel();\n }\n\n /**\n * Self-contained Tab trap for the overlay. The panel is relocated to document.body, so it sits\n * outside any ancestor modal's focus trap; without this, tabbing off the last control would land on\n * the page behind the dialog. Keeps Tab / Shift+Tab cycling within the panel's own focusables.\n */\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab' || !this.panelEl) return;\n const sel =\n 'a[href],button:not([disabled]):not([tabindex=\"-1\"]),input:not([disabled]),' +\n '[tabindex]:not([tabindex=\"-1\"])';\n const items = Array.from(this.panelEl.querySelectorAll<HTMLElement>(sel)).filter(\n (el) => el.offsetParent !== null,\n );\n if (items.length === 0) return;\n const first = items[0];\n const last = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey && (active === first || !this.panelEl.contains(active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\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/** Field skin. `filled` is borderless on a muted ground (to sit inside a page, matching sds-input's\n * filled appearance); `on-brand` is tuned for a dark surface. */\nexport type SdsSelectAppearance = 'default' | 'filled' | 'on-brand';\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 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 inline-flex shrink-0 items-center justify-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 <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 appearance = input<SdsSelectAppearance>('default');\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 protected readonly filled = computed(() => this.appearance() === 'filled');\n protected readonly onBrand = computed(() => this.appearance() === 'on-brand');\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 if (this.filled()) {\n // border-transparent (not border-0) so a filled field is the same height as a bordered one when a\n // form mixes them — mirrors sds-input's filled appearance.\n parts.push('border-transparent bg-muted text-ink');\n parts.push(\n this.error()\n ? 'border-danger focus:ring-2 focus:ring-danger/25'\n : 'focus:ring-2 focus:ring-brand-500/25',\n );\n } else if (this.onBrand()) {\n parts.push('bg-white/10 text-white');\n parts.push(\n this.error()\n ? 'border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-white/15 focus:border-white/40 focus:ring-2 focus:ring-white/20',\n );\n } else {\n parts.push('bg-white text-ink');\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 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]=\"countryAriaLabel()\"\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 [attr.aria-label]=\"clearLabel()\"\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]=\"searchPlaceholder()\"\n [attr.aria-label]=\"searchLabel()\"\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\">{{ noResultsLabel() }}</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 /**\n * Accessible name of the country selector. `{country}` is replaced with the selected country's\n * name. A token rather than a prefix because word order differs per language. French default so\n * existing consumers are unchanged; translate it in any app serving more than one language.\n *\n * Note the interpolated country NAME still comes from the library's built-in country table, which\n * is French-only — translating this template fixes the wrapper, not the name inside it.\n */\n readonly countryLabel = input<string>('Indicatif pays : {country}');\n\n /**\n * Accessible name for the clear button. It is icon-only, so this string is its ONLY accessible\n * name — a hardcoded French one is simply wrong in every other locale.\n */\n readonly clearLabel = input<string>('Effacer');\n\n /** Accessible name for the country-search field inside the dropdown. */\n readonly searchLabel = input<string>('Rechercher un pays');\n\n /** Placeholder text of the country-search field. */\n readonly searchPlaceholder = input<string>('Rechercher un pays…');\n\n /** Shown in place of the list when no country matches the filter. */\n readonly noResultsLabel = input<string>('Aucun pays');\n\n /**\n * Built-in validation messages. `{lengths}` is replaced with the country's accepted national\n * lengths, joined with {@link lengthSeparator}. Siblings of {@link requiredMessage}, which was\n * already translatable — these two were not, so an English or Dutch app showed French errors.\n */\n readonly incompleteMessage = input<string>('Numéro incomplet — {lengths} chiffres attendus');\n readonly invalidMessage = input<string>('Numéro invalide — {lengths} chiffres attendus');\n\n /** Joins the accepted lengths when a country allows more than one (e.g. \"8 ou 9\"). */\n readonly lengthSeparator = input<string>(' ou ');\n\n /**\n * Auto-generated example hint (see {@link showExampleHint}). `{number}` is replaced with the\n * formatted international example number.\n */\n readonly exampleHintTemplate = input<string>('Ex. {number}');\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 const number = `+${c.dialCode} ${sdsFormatNational(c.example, c.format)}`;\n return this.exampleHintTemplate().replace('{number}', number);\n });\n\n protected readonly countryAriaLabel = computed(() =>\n this.countryLabel().replace('{country}', this.country().name),\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(this.lengthSeparator());\n const len = this.national().length;\n const min = Math.min(...lengths);\n if (len < min) return this.incompleteMessage().replace('{lengths}', expected);\n return this.invalidMessage().replace('{lengths}', expected);\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\" [attr.aria-label]=\"paginationLabel()\">\n @if (showFirstLastIcon()) {\n <button\n type=\"button\"\n [class]=\"navClass(firstDisabled())\"\n [disabled]=\"firstDisabled()\"\n [attr.aria-label]=\"firstPageLabel()\"\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 [attr.aria-label]=\"previousPageLabel()\"\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]=\"pageLinkAriaLabel(p)\"\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 [attr.aria-label]=\"nextPageLabel()\"\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 [attr.aria-label]=\"lastPageLabel()\"\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]=\"rowsPerPageLabel()\"\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 [attr.aria-label]=\"jumpToPageAriaLabel()\"\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} of {totalRecords}');\n readonly showJumpToPageInput = input(false, { transform: booleanAttribute });\n readonly rowsPerPageLabel = input<string>('Rows per page');\n readonly jumpToPageLabel = input<string>('Go to');\n\n /**\n * Accessible name for the <nav> wrapping the page controls, and for the four icon-only\n * first/prev/next/last buttons. Those buttons have no text, so these strings are their ONLY\n * accessible names — the English defaults suit an English-first app, but an app serving more than\n * one language MUST pass translated values.\n */\n readonly paginationLabel = input<string>('Pagination');\n readonly firstPageLabel = input<string>('First page');\n readonly previousPageLabel = input<string>('Previous page');\n readonly nextPageLabel = input<string>('Next page');\n readonly lastPageLabel = input<string>('Last page');\n\n /**\n * Accessible name of a numbered page link. `{page}` is replaced with the 1-based page number —\n * a token rather than a prefix because word order is not the same in every language.\n */\n readonly pageLinkLabel = input<string>('Page {page}');\n\n /**\n * Accessible name of the jump-to-page field. Separate from the visible {@link jumpToPageLabel}\n * (\"Go to\") on purpose: the visible text is terse because it sits next to the field, while the\n * accessible name has to stand alone.\n */\n readonly jumpToPageAriaLabel = input<string>('Go to page');\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 pageLinkAriaLabel(page: number): string {\n return this.pageLinkLabel().replace('{page}', String(page + 1));\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]=\"currentPageReportTemplate()\"\n [rowsPerPageLabel]=\"rowsPerPageLabel()\"\n [paginationLabel]=\"paginationLabel()\"\n [firstPageLabel]=\"firstPageLabel()\"\n [previousPageLabel]=\"previousPageLabel()\"\n [nextPageLabel]=\"nextPageLabel()\"\n [lastPageLabel]=\"lastPageLabel()\"\n [pageLinkLabel]=\"pageLinkLabel()\"\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 /**\n * Paginator labels, forwarded to the inner <sds-paginator>. English defaults suit an English-first\n * app; an app serving more than one language MUST pass translated values (the four nav labels and\n * {@link pageLinkLabel} name icon-only controls, so they are their ONLY accessible name).\n * {@link currentPageReportTemplate} tokens: {first} {last} {totalRecords} {currentPage} {totalPages} {rows}.\n */\n readonly currentPageReportTemplate = input<string>('{first} – {last} of {totalRecords}');\n readonly rowsPerPageLabel = input<string>('Rows per page');\n readonly paginationLabel = input<string>('Pagination');\n readonly firstPageLabel = input<string>('First page');\n readonly previousPageLabel = input<string>('Previous page');\n readonly nextPageLabel = input<string>('Next page');\n readonly lastPageLabel = input<string>('Last page');\n /** Accessible name of a numbered page link; `{page}` is the 1-based page number. */\n readonly pageLinkLabel = input<string>('Page {page}');\n\n readonly globalFilter = input(false, { transform: booleanAttribute });\n readonly globalFilterPlaceholder = input<string>('Search…');\n /** Accessible name for the global-filter input. */\n readonly globalFilterAriaLabel = input<string>('Search the table');\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>('No data');\n readonly caption = input<string>('');\n /** Fallback accessible name for the `<table>` when no `caption` is set. */\n readonly ariaLabel = input<string>('Data table');\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\nexport type SdsToastKind = 'success' | 'error' | 'info';\n\nexport interface SdsToast {\n id: number;\n kind: SdsToastKind;\n text: string;\n}\n\n/**\n * A tiny transient-notification bus. Application code calls {@link success} / {@link error} / {@link info}\n * after an action; a single {@link SdsToastHost} mounted in the app shell renders the queue and each toast\n * auto-dismisses. Deliberately minimal — no positions, no actions-in-toast — because it exists to confirm\n * an action, not to be a notification centre.\n *\n * `providedIn: 'root'`, so injecting it anywhere shares one queue:\n *\n * ```ts\n * private readonly toasts = inject(SdsToastService);\n * this.toasts.success('Enregistré.');\n * ```\n *\n * Mount the host once (e.g. in the shell): `<sds-toast-host />`.\n */\n@Injectable({ providedIn: 'root' })\nexport class SdsToastService {\n private seq = 0;\n readonly toasts = signal<SdsToast[]>([]);\n\n /** How long a toast stays, in ms, by kind. Errors linger; success/info are brief. */\n private static readonly TTL: Record<SdsToastKind, number> = {\n success: 3500,\n info: 3500,\n error: 6000,\n };\n\n success(text: string): void {\n this.push('success', text);\n }\n error(text: string): void {\n this.push('error', text);\n }\n info(text: string): void {\n this.push('info', text);\n }\n\n dismiss(id: number): void {\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n private push(kind: SdsToastKind, text: string): void {\n const id = ++this.seq;\n this.toasts.update((list) => [...list, { id, kind, text }]);\n setTimeout(() => this.dismiss(id), SdsToastService.TTL[kind]);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\nimport { SdsToast, SdsToastKind, SdsToastService } from './sds-toast.service';\n\n/**\n * Renders the {@link SdsToastService} queue, fixed bottom-centre. Mount it once, in the app shell:\n * `<sds-toast-host />`. Application code pushes toasts through the injected service.\n *\n * Accessibility: the two live regions are ALWAYS in the DOM (even when empty), because a live region must\n * pre-exist for its later content changes to be announced. Errors go to an assertive `role=\"alert\"` region\n * so a failure interrupts; success/info go to a polite region so they queue.\n */\n@Component({\n selector: 'sds-toast-host',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, SdsIcon],\n template: `\n <div class=\"pointer-events-none fixed inset-x-0 bottom-6 z-[100] flex flex-col items-center gap-2 px-4\">\n <div role=\"alert\" aria-live=\"assertive\" class=\"flex w-full flex-col items-center gap-2\">\n @for (t of errors(); track t.id) {\n <ng-container [ngTemplateOutlet]=\"toast\" [ngTemplateOutletContext]=\"{ t }\" />\n }\n </div>\n <div aria-live=\"polite\" class=\"flex w-full flex-col items-center gap-2\">\n @for (t of notices(); track t.id) {\n <ng-container [ngTemplateOutlet]=\"toast\" [ngTemplateOutletContext]=\"{ t }\" />\n }\n </div>\n </div>\n\n <ng-template #toast let-t=\"t\">\n <div\n class=\"pointer-events-auto flex max-w-md items-start gap-2.5 rounded-card border bg-surface px-4 py-3 text-sm shadow-lg\"\n [class]=\"border(t.kind)\"\n >\n <sds-icon [name]=\"icon(t.kind)\" [size]=\"18\" class=\"mt-0.5 shrink-0\" [class]=\"tone(t.kind)\" />\n <span class=\"text-ink\">{{ t.text }}</span>\n <button\n type=\"button\"\n (click)=\"toasts.dismiss(t.id)\"\n [attr.aria-label]=\"closeLabel()\"\n class=\"ml-1 shrink-0 rounded p-0.5 text-ink-faint hover:bg-muted hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n </div>\n </ng-template>\n `,\n})\nexport class SdsToastHost {\n readonly toasts = inject(SdsToastService);\n\n /**\n * Accessible name for each toast's close button. French default so existing consumers are unchanged; the\n * button is icon-only, so an app serving more than one language MUST translate it.\n */\n readonly closeLabel = input<string>('Fermer');\n\n protected readonly errors = computed(() => this.toasts.toasts().filter((t) => t.kind === 'error'));\n protected readonly notices = computed(() => this.toasts.toasts().filter((t) => t.kind !== 'error'));\n\n protected icon(kind: SdsToastKind): SdsIconName {\n return kind === 'success' ? 'check-circle' : kind === 'error' ? 'alert-circle' : 'info';\n }\n protected tone(kind: SdsToastKind): string {\n return kind === 'success' ? 'text-success' : kind === 'error' ? 'text-danger' : 'text-accent-blue';\n }\n protected border(kind: SdsToast['kind']): string {\n const accent =\n kind === 'success' ? 'border-l-success' : kind === 'error' ? 'border-l-danger' : 'border-l-accent-blue';\n return `border-l-4 ${accent} border-y-border border-r-border`;\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 computed,\n inject,\n input,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SidebarStore } from '../sidebar/sidebar-store';\n\nexport type SdsTopbarAppearance = 'brand' | 'surface';\n\n/**\n * Application top bar: a logo slot, the app name, and three slots the app fills.\n *\n * Two appearances. `brand` is the gradient-and-wave bar an internal tool wants. `surface` is white on\n * a hairline border, for a bar that has to sit under a customer-facing page without dominating it —\n * a storefront header is a bar, but it is not a banner. The slots and the layout are identical in\n * both; only the paint differs, so a consumer app gets the same structure without the brand fill.\n *\n * It deliberately owns NO account UI. It used to render the signed-in user and a logout button, which\n * forced every consumer into one shape — no dropdown, no email, no menu, no busy state, and an\n * icon-only button whose accessible name the library had to guess a language for. What an app needs\n * beside its own brand bar differs per app, so the bar supplies the surface and the app supplies the\n * contents: project them into `[sdsActions]`.\n *\n * Slots, left to right: `[sdsLogo]`, `[sdsLead]` (beside the name — a location or workspace picker),\n * `[sdsCenter]` (the flexible middle — a search field), `[sdsActions]` (the right edge).\n *\n * @example\n * <sds-topbar appName=\"WebApp\">\n * <img sdsLogo src=\"logo.svg\" alt=\"\" />\n * <my-address-picker sdsLead />\n * <my-search sdsCenter />\n * <my-account-menu sdsActions />\n * </sds-topbar>\n */\n@Component({\n selector: 'sds-topbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <header class=\"relative z-30\" [class]=\"shellClasses()\" style=\"height: var(--sds-topbar-h)\">\n <!--\n Decorative wave. The clip lives HERE, on the wave's own wrapper, and not on the header.\n The header used to carry overflow-hidden, which also clipped anything projected into\n [sdsActions] — so an app menu or dropdown, the very thing that slot exists for, rendered as a\n 4px sliver. The wave still needs clipping; nothing else does.\n -->\n @if (appearance() === 'brand') {\n <span class=\"pointer-events-none absolute inset-0 overflow-hidden\" aria-hidden=\"true\">\n <svg\n class=\"pointer-events-none absolute inset-y-0 right-0 h-full w-2/3 min-w-105\"\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 </span>\n }\n\n <!--\n The band is always full-bleed — the gradient and the wave span the viewport — while the\n CONTENTS are constrained by [contentWidth], so a bar over a centred page lines up with it\n instead of running to the edges. Empty (the default) leaves the contents full-bleed too,\n which is what a dashboard shell wants.\n -->\n <div\n class=\"relative mx-auto flex h-full items-center justify-between px-4 sm:px-6\"\n [class]=\"contentWidth()\"\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 transition-colors focus-visible:outline-none focus-visible:ring-2 lg:hidden\"\n [class]=\"menuButtonClasses()\"\n [attr.aria-label]=\"menuLabel()\"\n (click)=\"store.toggleMobile()\"\n >\n <sds-icon name=\"menu\" [size]=\"22\" />\n </button>\n }\n <ng-content select=\"[sdsLogo]\" />\n <!--\n shrink-0 + whitespace-nowrap, both required. The left block is a flex row, so without them a\n two-word app name wraps to a second line INSIDE a bar whose height is fixed at\n --sds-topbar-h, and the name is clipped by its own bar. It surfaced at 375px on a bar\n carrying a logo, a wordmark and a two-syllable name; it is wrong at every width.\n\n The name never truncates and never hides: it is the answer to \"which app am I in\", which on a\n platform of five same-branded apps is the one thing the bar must not drop. An app whose left\n block is too crowded for a phone hides ITS OWN wordmark under sm and keeps the mark.\n -->\n @if (appName()) {\n <span class=\"h-7 w-px shrink-0\" [class]=\"appearance() === 'brand' ? 'bg-white/30' : 'bg-border'\"></span>\n <span class=\"shrink-0 whitespace-nowrap text-xl font-bold tracking-tight\">{{ appName() }}</span>\n }\n <ng-content select=\"[sdsLead]\" />\n </div>\n\n <!-- Flexible middle: takes the space the two ends leave, and is skipped entirely when empty. -->\n <div class=\"relative flex min-w-0 flex-1 items-center justify-center px-2\">\n <ng-content select=\"[sdsCenter]\" />\n </div>\n\n <!-- Right: whatever the app puts here -->\n <div class=\"relative flex items-center gap-3 sm:gap-4\">\n <ng-content select=\"[sdsActions]\" />\n </div>\n </div>\n </header>\n `,\n})\nexport class SdsTopbar {\n protected readonly store = inject(SidebarStore);\n\n readonly appName = input<string>('');\n\n /**\n * Width of the bar's CONTENTS, as Tailwind width utilities — e.g. `\"w-full max-w-7xl\"`.\n *\n * The coloured band always spans the viewport; this constrains only what sits on it, so the logo and\n * the actions line up with a page whose own content is centred at the same width. Default is empty,\n * i.e. contents run edge to edge, which is right for a full-bleed dashboard shell.\n *\n * A class string rather than an enum on purpose: apps already state their content width as a Tailwind\n * utility, and this way the bar is given the SAME string rather than a name that has to be kept in\n * sync with it.\n */\n readonly contentWidth = input<string>('w-full');\n /** Show the mobile hamburger that toggles the sidebar drawer (< lg). */\n readonly menuButton = input(true, { transform: booleanAttribute });\n\n /**\n * Accessible name for the hamburger. Defaults to French so nothing changes for existing consumers,\n * but any app serving more than one language MUST pass a translated value — an icon-only control's\n * aria-label is its only name, and a hardcoded one is simply wrong in every other locale.\n */\n readonly menuLabel = input<string>('Ouvrir le menu');\n\n /** `brand` (default) paints the gradient and the wave; `surface` is white on a hairline border. */\n readonly appearance = input<SdsTopbarAppearance>('brand');\n\n protected readonly shellClasses = computed(() =>\n this.appearance() === 'brand'\n ? 'bg-linear-to-r from-brand-800 via-brand-700 to-brand-600 text-white'\n : 'border-b border-border bg-surface text-ink',\n );\n\n protected readonly menuButtonClasses = computed(() =>\n this.appearance() === 'brand'\n ? 'text-white/85 hover:bg-white/10 hover:text-white focus-visible:ring-white/40'\n : 'text-ink-soft hover:bg-muted hover:text-ink focus-visible:ring-brand-500/40',\n );\n\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 input,\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() ? expandLabel() : collapseLabel()\"\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 [attr.aria-label]=\"closeLabel()\"\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\n /**\n * Accessible names for the rail's three icon-only controls. French defaults keep existing consumers\n * unchanged; a multilingual app must pass translated values, since an icon-only button's aria-label\n * is its only name.\n */\n readonly collapseLabel = input<string>('Replier le menu');\n readonly expandLabel = input<string>('Déplier le menu');\n readonly closeLabel = input<string>('Fermer le menu');\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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, map } from 'rxjs';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * Groups nav items under an optional uppercase section label.\n *\n * Two modes:\n * - **Section** (default) — a static label over its items. The label is replaced by a divider when\n * the rail is collapsed.\n * - **Collapsible** (`[collapsible]`) — the label becomes a button that expands and collapses the\n * group. Set `[basePath]` and the group opens itself whenever the active route is inside it, so a\n * deep link or a browser Back lands with the right section already open instead of the person\n * having to find and re-open it.\n *\n * Collapsible mode exists because a flat rail stops scaling somewhere around a dozen destinations,\n * and the alternative — showing every child of every section at once — buries the ones in use.\n *\n * On the collapsed desktop rail there is nowhere to put a header, so a collapsible group renders\n * exactly like a section: divider, children visible. Hiding them there would leave the rail with\n * unreachable destinations and no affordance to reveal them.\n */\n@Component({\n selector: 'sds-nav-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <div class=\"mt-5 first:mt-3\">\n @if (label()) {\n @if (collapsible()) {\n <!--\n A collapsible header is styled as a NAV ROW, not as a section caption. A small uppercase\n caption says \"everything under me belongs to me\" — which is a lie the moment the group is\n collapsed and the next section's items sit directly beneath it. At row scale, with an icon\n and a chevron, it reads as the control it is.\n\n It renders on the collapsed rail too, as an icon alone, because there it is the group's\n ONLY representation: the children are hidden (a child with no icon of its own would be a\n blank row), so the app is expected to treat the toggle as \"take me into this section\" —\n which is what expandedChange already means.\n -->\n <button\n type=\"button\"\n class=\"mb-1 flex h-10 w-full items-center gap-3 rounded-control px-3 text-sm font-medium\n text-white/70 transition-colors hover:bg-white/8 hover:text-white\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40\"\n [class.lg:justify-center]=\"collapsed()\"\n [class.text-white]=\"routeActive()\"\n [attr.aria-expanded]=\"collapsed() ? null : expanded()\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-label]=\"collapsed() ? label() : null\"\n (click)=\"toggle()\"\n >\n @if (icon()) {\n <sds-icon [name]=\"icon()!\" [size]=\"20\" class=\"shrink-0\" />\n }\n <span class=\"flex-1 truncate text-left\" [class.lg:hidden]=\"collapsed()\">\n {{ label() }}\n </span>\n <sds-icon\n name=\"chevron-down\"\n [size]=\"16\"\n class=\"shrink-0 text-white/50 transition-transform\"\n [class.lg:hidden]=\"collapsed()\"\n [class.rotate-180]=\"expanded()\"\n />\n </button>\n } @else if (collapsed()) {\n <div class=\"mx-3 mb-2 mt-2 h-px bg-white/10\"></div>\n } @else {\n <p class=\"mb-1.5 px-3 text-[11px] font-semibold uppercase tracking-wider text-white/60\">\n {{ label() }}\n </p>\n }\n }\n\n <div [class]=\"childrenClass()\">\n <ng-content />\n </div>\n </div>\n `,\n})\nexport class SdsNavGroup {\n private readonly store = inject(SidebarStore);\n private readonly router = inject(Router);\n\n readonly label = input<string>('');\n\n /** Turn the label into an expand/collapse control. */\n readonly collapsible = input(false, { transform: booleanAttribute });\n\n /** Icon for a collapsible header, so it reads at the same weight as the items it sits among. */\n readonly icon = input<SdsIconName | null>(null);\n\n /**\n * URL prefix owned by this group, e.g. `/payments`. While the active route starts with it the\n * group counts as active and opens itself — unless the person has explicitly toggled it since.\n */\n readonly basePath = input<string | null>(null);\n\n /** Emits the new state on every manual toggle. Not emitted for route-driven auto-expansion. */\n readonly expandedChange = output<boolean>();\n\n /** Explicit user choice; null means \"follow the route\". */\n private readonly manual = signal<boolean | null>(null);\n\n private readonly url = toSignal(\n this.router.events.pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n map((e) => e.urlAfterRedirects),\n ),\n { initialValue: this.router.url },\n );\n\n /** True while the active route lives inside this group. */\n protected readonly routeActive = computed(() => {\n const base = this.basePath();\n return !!base && this.url().startsWith(base);\n });\n\n protected readonly expanded = computed(() => this.manual() ?? this.routeActive());\n\n protected readonly collapsed = this.store.collapsed;\n\n /**\n * A plain section always shows its items — they carry their own icons, so they survive the collapsed\n * rail. A collapsible group hides its children there instead: its children are sub-destinations and\n * typically have no icon, which on an icon-only rail is a row with nothing in it.\n */\n protected readonly childrenVisible = computed(\n () => !this.collapsible() || (!this.collapsed() && this.expanded()),\n );\n\n /**\n * One binding rather than `[class]` alongside `[class.hidden]` — mixing a whole-list binding with a\n * single-class toggle on the same element depends on Angular's styling precedence to resolve, which\n * is a subtlety no template should rest on.\n *\n * The indent rule appears only on an expanded collapsible group on the full-width rail: it is what\n * shows the children belong to the header above them.\n */\n protected readonly childrenClass = computed(() => {\n const parts = ['flex flex-col gap-1'];\n if (!this.childrenVisible()) {\n parts.push('hidden');\n }\n if (this.collapsible() && !this.collapsed()) {\n parts.push('ml-5 border-l border-white/10 pl-3');\n }\n return parts.join(' ');\n });\n\n /**\n * On the collapsed rail there is nothing to expand into, so the toggle always reports \"opening\" —\n * the app's handler takes that as the cue to navigate into the section, which is the only useful\n * meaning the control can have there.\n */\n protected toggle(): void {\n const next = this.collapsed() ? true : !this.expanded();\n this.manual.set(next);\n this.expandedChange.emit(next);\n }\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/localized-input/sds-localized-input';\nexport * from './lib/otp-input/sds-otp-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';\nexport * from './lib/toast/sds-toast.service';\nexport * from './lib/toast/sds-toast-host';\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/input-number/sds-input-number.ts","../../../projects/saitech-design-system/src/lib/localized-input/sds-localized-input.ts","../../../projects/saitech-design-system/src/lib/otp-input/sds-otp-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-templates.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/toast/sds-toast.service.ts","../../../projects/saitech-design-system/src/lib/toast/sds-toast-host.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 // Added for the Belvigo merchant shell (nav + header). Lucide 24x24 stroke paths, matching the\n // set the app already used before it moved onto this library.\n 'chart-column':\n '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n 'clipboard-list':\n '<rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"/><path d=\"M12 11h4\"/><path d=\"M12 16h4\"/><path d=\"M8 11h.01\"/><path d=\"M8 16h.01\"/>',\n 'credit-card':\n '<rect width=\"20\" height=\"14\" x=\"2\" y=\"5\" rx=\"2\"/><line x1=\"2\" x2=\"22\" y1=\"10\" y2=\"10\"/>',\n 'external-link':\n '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n 'languages':\n '<path d=\"m5 8 6 6\"/><path d=\"m4 14 6-6 2-3\"/><path d=\"M2 5h12\"/><path d=\"M7 2h1\"/><path d=\"m22 22-5-10-5 10\"/><path d=\"M14 18h6\"/>',\n 'megaphone':\n '<path d=\"m3 11 18-5v12L3 14v-3z\"/><path d=\"M11.6 16.8a3 3 0 1 1-5.8-1.6\"/>',\n 'monitor':\n '<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"/><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"/><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"/>',\n 'store':\n '<path d=\"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7\"/><path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\"/><path d=\"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4\"/><path d=\"M2 7h20\"/><path d=\"M22 7v3a2 2 0 0 1-2 2a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12a2 2 0 0 1-2-2V7\"/>',\n 'user-round':\n '<circle cx=\"12\" cy=\"8\" r=\"5\"/><path d=\"M20 21a8 8 0 0 0-16 0\"/>',\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 'user-check':\n '<path d=\"m16 11 2 2 4-4\"/><path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/>',\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 // Couriers. The back-office and the courier-facing screens both name a rider, and every Belvigo\n // surface that does should draw the same one.\n bike: '<circle cx=\"18.5\" cy=\"17.5\" r=\"3.5\"/><circle cx=\"5.5\" cy=\"17.5\" r=\"3.5\"/><circle cx=\"15\" cy=\"5\" r=\"1\"/><path d=\"M12 17.5V14l-3-3 4-3 2 3h2\"/>',\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 // Stepper glyphs for sds-input-number: chevrons for the stacked spinner, plus/minus for the\n // horizontal/vertical layouts.\n 'chevron-up': '<path d=\"m18 15-6-6-6 6\"/>',\n plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n minus: '<path d=\"M5 12h14\"/>',\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 bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n 'scroll-text':\n '<path d=\"M15 12h-5\"/><path d=\"M15 8h-5\"/><path d=\"M19 17V5a2 2 0 0 0-2-2H4\"/><path d=\"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3\"/>',\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';\nexport type SdsButtonShape = 'control' | 'pill';\n\nconst BASE =\n 'inline-flex items-center justify-center gap-2 font-medium ' +\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\n /**\n * `pill` fully rounds the button. It is the shape a consumer-facing surface tends to want for its\n * primary action, and the same axis {@link SdsInput} exposes — a design system with pill inputs and\n * no pill buttons would force any app that wants one back onto hand-rolled classes for its single\n * most important control.\n */\n readonly shape = input<SdsButtonShape>('control');\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 this.shape() === 'pill' ? 'rounded-full' : 'rounded-control',\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' | 'filled' | 'on-brand';\nexport type SdsInputShape = 'control' | 'pill';\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 styles: `\n /*\n * Chrome paints an opaque autofill background on the INPUT element. This input is deliberately\n * bg-transparent inside a themed wrapper that owns the field's background, border and radius — so\n * the autofill paint lands as a square block sitting inside the field's rounded, coloured box,\n * and on a filled or on-brand field it is a differently-coloured block at that.\n *\n * The long transition delay is the standard way to suppress it: the UA sets the background\n * through an internal rule no stylesheet can override, but it is still a transition-able\n * property, so deferring the transition indefinitely means it is never painted. The field stays\n * autofilled and the password manager still works — only the paint is suppressed.\n *\n * -webkit-text-fill-color keeps the VALUE readable, since the UA also forces a text colour to\n * match the background it just painted.\n */\n input:-webkit-autofill,\n input:-webkit-autofill:hover,\n input:-webkit-autofill:focus,\n input:-webkit-autofill:active {\n transition: background-color 100000s ease-in-out 0s;\n -webkit-text-fill-color: currentColor;\n caret-color: currentColor;\n }\n `,\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 border transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n @if (leadingIcon()) {\n <!-- A pill needs its icon further in: on a fully-rounded field an icon at left-3 sits over\n the curve rather than inside the field. -->\n <sds-icon\n [name]=\"leadingIcon()!\"\n [size]=\"18\"\n class=\"pointer-events-none absolute opacity-70\"\n [class]=\"pill() ? 'left-4' : 'left-3'\"\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 [&::-webkit-search-cancel-button]:appearance-none\n [&::-webkit-search-decoration]:appearance-none\"\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 [attr.aria-label]=\"clearLabel()\"\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 /**\n * `search` is the semantically right type for a search field, and the template strips the WebKit\n * search decorations that come with it. Without that, a `search` field with {@link clearable} draws\n * TWO clear buttons — the component's and the browser's own, which no stylesheet can reach and which\n * sits outside the field's own padding.\n */\n readonly type = input<SdsInputType>('text');\n readonly size = input<SdsInputSize>('md');\n /**\n * `filled` is a borderless field on a muted ground, for a search box that has to sit inside a page\n * rather than announce itself as a form control — a storefront's search pill above all.\n * `on-brand` is the same field tuned for a dark surface.\n */\n readonly appearance = input<SdsInputAppearance>('default');\n\n /**\n * `pill` fully rounds the field. Separate from {@link appearance} on purpose: a bordered pill and a\n * filled box are both real designs, and folding the two axes into one enum would forbid half of them.\n */\n readonly shape = input<SdsInputShape>('control');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible name for the clear button. French default so existing consumers are unchanged, but an\n * app serving more than one language MUST translate it — it is an icon-only control, so this string\n * is its only name.\n */\n readonly clearLabel = input<string>('Effacer');\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 filled = computed(() => this.appearance() === 'filled');\n protected readonly pill = computed(() => this.shape() === 'pill');\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 inset = this.pill() ? 'pl-11' : 'pl-10';\n const bare = this.pill() ? 'pl-5' : 'pl-3.5';\n const left = this.leadingIcon() ? inset : bare;\n const right =\n this.trailingIcon() || this.clearable() || this.trailingAction()\n ? 'pr-10'\n : this.pill()\n ? 'pr-5'\n : 'pr-3.5';\n return `${left} ${right}`;\n });\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()], this.pill() ? 'rounded-full' : 'rounded-control'];\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n\n if (this.filled()) {\n // border-transparent, not border-0: the border box is what keeps a filled field the same height\n // as a bordered one, so the two sit level when a toolbar mixes them.\n parts.push('border-transparent bg-muted text-ink');\n parts.push(\n this.error()\n ? 'border-danger focus-within:ring-2 focus-within:ring-danger/30'\n : 'focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n } else 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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n input,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\n\nexport type SdsInputNumberSize = 'sm' | 'md' | 'lg';\nexport type SdsInputNumberAppearance = 'default' | 'filled';\n\n/**\n * Formatting behaviour, backed by `Intl.NumberFormat`:\n * - `decimal` — a plain grouped number (`42 723`).\n * - `currency` — a monetary amount; pair with {@link SdsInputNumber.currency} (ISO 4217).\n *\n * For percentages, units or any other affix, use {@link SdsInputNumber.prefix} /\n * {@link SdsInputNumber.suffix} on top of `decimal` — the stored value then stays the plain magnitude.\n */\nexport type SdsInputNumberMode = 'decimal' | 'currency';\n\n/** How the currency is shown in `currency` mode — a symbol (€), the ISO code (EUR) or the name (euros). */\nexport type SdsInputNumberCurrencyDisplay = 'symbol' | 'code' | 'name';\n\n/**\n * Placement of the increment/decrement spinner buttons:\n * - `stacked` — a two-button column at the trailing edge (chevrons).\n * - `horizontal` — a minus button before and a plus button after the field.\n * - `vertical` — a plus button above and a minus button below the field.\n */\nexport type SdsInputNumberButtonLayout = 'stacked' | 'horizontal' | 'vertical';\n\nlet nextId = 0;\n\nconst HEIGHTS: Record<SdsInputNumberSize, string> = {\n sm: 'h-9',\n md: 'h-10',\n lg: 'h-12',\n};\n\nconst TEXT: Record<SdsInputNumberSize, string> = {\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-base',\n};\n\n/** The numeric fragments pulled out of a partially-typed, formatted string. */\ninterface Parsed {\n negative: boolean;\n intDigits: string;\n fracDigits: string;\n /** The user has typed the decimal separator (even if no fraction digits follow yet). */\n hadDecimal: boolean;\n}\n\n/**\n * Numeric input with locale-aware formatting, optional currency, prefix/suffix affixes, min/max/step\n * boundaries and spinner buttons — the design-system counterpart of PrimeNG's `InputNumber`.\n *\n * The value is a `number | null` bound through ControlValueAccessor, so it works with reactive forms\n * or `[(ngModel)]`: `<sds-input-number [(ngModel)]=\"amount\" mode=\"currency\" currency=\"EUR\" />`.\n *\n * The field formats **live as you type**: the currency symbol, grouping separators and prefix/suffix\n * stay visible on every keystroke, and the caret is kept where it belongs. The value is clamped to\n * {@link min}/{@link max} on blur and on every spinner step; ArrowUp / ArrowDown also step it.\n */\n@Component({\n selector: 'sds-input-number',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsInputNumber),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label [for]=\"inputId\" class=\"mb-1.5 block text-sm font-medium text-ink\">{{ label() }}</label>\n }\n\n <div class=\"relative border transition-colors\" [class]=\"wrapperClasses()\">\n <!-- Horizontal: minus before the field. Vertical: plus above it. -->\n @if (showButtons() && buttonLayout() === 'horizontal') {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"decrementLabel()\"\n [disabled]=\"!canDecrement()\"\n class=\"border-r\"\n [class]=\"edgeButtonClasses()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"spin(-1)\"\n >\n <sds-icon [name]=\"decrementIconName()\" [size]=\"16\" />\n </button>\n }\n @if (showButtons() && buttonLayout() === 'vertical') {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"incrementLabel()\"\n [disabled]=\"!canIncrement()\"\n class=\"w-full border-b\"\n [class]=\"edgeButtonClasses()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"spin(1)\"\n >\n <sds-icon [name]=\"incrementIconName()\" [size]=\"16\" />\n </button>\n }\n\n <div class=\"relative flex min-w-0 flex-1 items-center\" [class]=\"fieldCellClasses()\">\n <input\n #field\n [id]=\"inputId\"\n type=\"text\"\n inputmode=\"decimal\"\n role=\"spinbutton\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readOnly]=\"readonly()\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n class=\"w-full bg-transparent outline-none placeholder:text-current/50 disabled:cursor-not-allowed\"\n [class]=\"inputClasses()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n\n @if (clearVisible()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"clearLabel()\"\n class=\"absolute right-1.5 inline-flex h-6 w-6 items-center justify-center rounded-full opacity-60 hover:bg-black/5 hover:opacity-100\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"clear()\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n }\n </div>\n\n <!-- Horizontal: plus after the field. Vertical: minus below it. -->\n @if (showButtons() && buttonLayout() === 'horizontal') {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"incrementLabel()\"\n [disabled]=\"!canIncrement()\"\n class=\"border-l\"\n [class]=\"edgeButtonClasses()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"spin(1)\"\n >\n <sds-icon [name]=\"incrementIconName()\" [size]=\"16\" />\n </button>\n }\n @if (showButtons() && buttonLayout() === 'vertical') {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"decrementLabel()\"\n [disabled]=\"!canDecrement()\"\n class=\"w-full border-t\"\n [class]=\"edgeButtonClasses()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"spin(-1)\"\n >\n <sds-icon [name]=\"decrementIconName()\" [size]=\"16\" />\n </button>\n }\n\n <!-- Stacked: a chevron column at the trailing edge. -->\n @if (showButtons() && buttonLayout() === 'stacked') {\n <div class=\"flex w-9 shrink-0 flex-col divide-y divide-border border-l border-border\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"incrementLabel()\"\n [disabled]=\"!canIncrement()\"\n class=\"min-h-0 flex-1\"\n [class]=\"stackedButtonClasses()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"spin(1)\"\n >\n <sds-icon [name]=\"incrementIconName()\" [size]=\"14\" />\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"decrementLabel()\"\n [disabled]=\"!canDecrement()\"\n class=\"min-h-0 flex-1\"\n [class]=\"stackedButtonClasses()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"spin(-1)\"\n >\n <sds-icon [name]=\"decrementIconName()\" [size]=\"14\" />\n </button>\n </div>\n }\n </div>\n\n @if (error()) {\n <p [id]=\"inputId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n } @else if (hint()) {\n <p [id]=\"inputId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n `,\n})\nexport class SdsInputNumber implements ControlValueAccessor {\n readonly inputId = `sds-input-number-${nextId++}`;\n\n private readonly fieldRef = viewChild<ElementRef<HTMLInputElement>>('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\n readonly size = input<SdsInputNumberSize>('md');\n /** `filled` is a borderless field on a muted ground; `default` is the bordered white field. */\n readonly appearance = input<SdsInputNumberAppearance>('default');\n\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Read-only: the value is shown and selectable but cannot be typed or stepped. */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n // --- Formatting -----------------------------------------------------------\n readonly mode = input<SdsInputNumberMode>('decimal');\n /** BCP 47 locale for grouping/decimal symbols (e.g. `fr-FR`). Empty follows the runtime locale. */\n readonly locale = input<string>('');\n /** ISO 4217 code, required when {@link mode} is `currency` (e.g. `EUR`, `USD`). */\n readonly currency = input<string>('');\n readonly currencyDisplay = input<SdsInputNumberCurrencyDisplay>('symbol');\n /** Thousands/grouping separators. */\n readonly useGrouping = input(true, { transform: booleanAttribute });\n readonly minFractionDigits = input<number | null>(null);\n readonly maxFractionDigits = input<number | null>(null);\n /** Text shown before the value (e.g. `↑ `). */\n readonly prefix = input<string>('');\n /** Text shown after the value (e.g. ` kg`, `%`). */\n readonly suffix = input<string>('');\n\n // --- Boundaries & spinner -------------------------------------------------\n readonly min = input<number | null>(null);\n readonly max = input<number | null>(null);\n readonly step = input(1, { transform: numberAttribute });\n /** Show the increment/decrement spinner buttons. */\n readonly showButtons = input(false, { transform: booleanAttribute });\n readonly buttonLayout = input<SdsInputNumberButtonLayout>('stacked');\n /** Override the increment button icon (defaults: chevron-up when stacked, plus otherwise). */\n readonly incrementIcon = input<SdsIconName | null>(null);\n /** Override the decrement button icon (defaults: chevron-down when stacked, minus otherwise). */\n readonly decrementIcon = input<SdsIconName | null>(null);\n /** Allow an empty (null) value. When false, blurring an empty field falls back to {@link min} or 0. */\n readonly allowEmpty = input(true, { transform: booleanAttribute });\n\n readonly clearable = input(false, { transform: booleanAttribute });\n /**\n * Accessible names for the icon-only controls. French defaults so existing consumers are unchanged;\n * translate them in a multi-language app.\n */\n readonly clearLabel = input<string>('Effacer');\n readonly incrementLabel = input<string>('Augmenter');\n readonly decrementLabel = input<string>('Diminuer');\n\n /** The committed numeric value (driven by CVA + user input). */\n protected readonly value = signal<number | null>(null);\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\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 clearVisible = computed(\n () => this.clearable() && this.value() !== null && !this.isDisabled() && !this.readonly(),\n );\n\n protected readonly incrementIconName = computed<SdsIconName>(\n () => this.incrementIcon() ?? (this.buttonLayout() === 'stacked' ? 'chevron-up' : 'plus'),\n );\n protected readonly decrementIconName = computed<SdsIconName>(\n () => this.decrementIcon() ?? (this.buttonLayout() === 'stacked' ? 'chevron-down' : 'minus'),\n );\n\n protected readonly canIncrement = computed(() => {\n if (this.isDisabled() || this.readonly()) return false;\n const max = this.max();\n return max === null || (this.value() ?? this.min() ?? 0) < max;\n });\n protected readonly canDecrement = computed(() => {\n if (this.isDisabled() || this.readonly()) return false;\n const min = this.min();\n return min === null || (this.value() ?? min ?? 0) > min;\n });\n\n /** Locale grouping/decimal separators, derived from Intl so parsing matches formatting. */\n private readonly separators = computed(() => {\n const sample = new Intl.NumberFormat(this.locale() || undefined, {\n useGrouping: true,\n }).formatToParts(1234567.8);\n return {\n group: sample.find((p) => p.type === 'group')?.value ?? ',',\n decimal: sample.find((p) => p.type === 'decimal')?.value ?? '.',\n };\n });\n\n /** Base Intl options (style/currency/grouping) without any fraction-digit constraints. */\n private baseOptions(): Intl.NumberFormatOptions {\n const opts: Intl.NumberFormatOptions = { useGrouping: this.useGrouping() };\n if (this.mode() === 'currency') {\n opts.style = 'currency';\n opts.currency = this.currency() || 'USD';\n opts.currencyDisplay = this.currencyDisplay();\n } else {\n opts.style = 'decimal';\n }\n return opts;\n }\n\n private readonly committedOptions = computed<Intl.NumberFormatOptions>(() => {\n const opts = this.baseOptions();\n const min = this.minFractionDigits();\n const max = this.maxFractionDigits();\n if (min !== null) opts.minimumFractionDigits = min;\n if (max !== null) opts.maximumFractionDigits = min !== null ? Math.max(max, min) : max;\n return opts;\n });\n\n /** The most fraction digits the field will keep — the resolved Intl maximum (2 for USD, 0 for JPY…). */\n private readonly maxFrac = computed(() => {\n const fallback = this.maxFractionDigits() ?? (this.mode() === 'currency' ? 2 : 3);\n try {\n const resolved = new Intl.NumberFormat(\n this.locale() || undefined,\n this.committedOptions(),\n ).resolvedOptions().maximumFractionDigits;\n return resolved ?? fallback;\n } catch {\n return fallback;\n }\n });\n\n protected readonly wrapperClasses = computed(() => {\n const vertical = this.buttonLayout() === 'vertical' && this.showButtons();\n const parts = [\n 'overflow-hidden rounded-control',\n vertical ? 'flex flex-col' : `flex items-stretch ${HEIGHTS[this.size()]}`,\n ];\n if (this.isDisabled()) parts.push('opacity-60 cursor-not-allowed');\n\n if (this.appearance() === 'filled') {\n parts.push('border-transparent bg-muted text-ink');\n parts.push(\n this.error()\n ? 'border-danger focus-within:ring-2 focus-within:ring-danger/30'\n : 'focus-within:ring-2 focus-within:ring-brand-500/25',\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 protected readonly fieldCellClasses = computed(() =>\n this.buttonLayout() === 'vertical' && this.showButtons() ? HEIGHTS[this.size()] : 'h-full',\n );\n\n protected readonly inputClasses = computed(() => {\n const parts = [TEXT[this.size()], 'pl-3.5', this.clearVisible() ? 'pr-9' : 'pr-3.5'];\n if (this.showButtons() && this.buttonLayout() !== 'stacked') parts.push('text-center');\n return parts.join(' ');\n });\n\n private readonly buttonBase =\n 'inline-flex shrink-0 items-center justify-center text-ink-soft transition-colors ' +\n 'hover:bg-muted hover:text-ink disabled:cursor-not-allowed disabled:opacity-40 select-none';\n\n protected readonly edgeButtonClasses = computed(() =>\n this.buttonLayout() === 'vertical'\n ? `${this.buttonBase} ${HEIGHTS[this.size()]} border-border`\n : `${this.buttonBase} w-10 border-border`,\n );\n protected readonly stackedButtonClasses = computed(() => this.buttonBase);\n\n constructor() {\n // Reflect the committed value into the field whenever it — or a formatting input — changes from\n // OUTSIDE typing (initial render, writeValue, a spin while blurred, a currency/locale switch).\n // While the field is the active element the input handler owns the DOM value and its caret, so this\n // stands down: gating on the live `document.activeElement` (not a signal) is immune to focus-event\n // timing, which is what makes live formatting safe.\n effect(() => {\n const el = this.fieldRef()?.nativeElement;\n const v = this.value();\n // Touch the formatting inputs so a currency/locale/affix change repaints a blurred field.\n this.committedOptions();\n this.prefix();\n this.suffix();\n if (!el || this.isActive(el)) return;\n el.value = v === null ? '' : this.format(v);\n });\n }\n\n private isActive(el: HTMLInputElement): boolean {\n return typeof document !== 'undefined' && document.activeElement === el;\n }\n\n /** Paint the committed value into the field imperatively (used by spin/clear/blur). */\n private paintCommitted(): void {\n const el = this.fieldRef()?.nativeElement;\n if (!el) return;\n const v = this.value();\n el.value = v === null ? '' : this.format(v);\n }\n\n // --- Formatting / parsing helpers -----------------------------------------\n /** Format a committed value with the configured min/max fraction digits (used at rest and on blur). */\n private format(n: number): string {\n try {\n const body = new Intl.NumberFormat(this.locale() || undefined, this.committedOptions()).format(n);\n return `${this.prefix()}${body}${this.suffix()}`;\n } catch {\n return `${this.prefix()}${n}${this.suffix()}`;\n }\n }\n\n /**\n * Format a partially-typed value, keeping exactly the fraction digits the user has entered (so\n * trailing zeros and a lone decimal separator survive) while still grouping the integer part and\n * showing the currency symbol / affixes.\n */\n private formatLive(p: Parsed): string {\n const locale = this.locale() || undefined;\n const fracCount = p.fracDigits.length;\n const num = this.toNumber(p) ?? 0;\n\n if (fracCount > 0 || !p.hadDecimal) {\n try {\n const body = new Intl.NumberFormat(locale, {\n ...this.baseOptions(),\n minimumFractionDigits: fracCount,\n maximumFractionDigits: fracCount,\n }).format(num);\n return `${this.prefix()}${body}${this.suffix()}`;\n } catch {\n return `${this.prefix()}${num}${this.suffix()}`;\n }\n }\n\n // A lone decimal separator was just typed (\"1234,\"): format the integer, then splice the separator\n // in right after the integer digits — which, for a trailing-symbol currency, is NOT the string end.\n const dec = this.separators().decimal;\n let out = '';\n let inserted = false;\n try {\n const parts = new Intl.NumberFormat(locale, {\n ...this.baseOptions(),\n maximumFractionDigits: 0,\n }).formatToParts(num);\n parts.forEach((part, i) => {\n out += part.value;\n const here = part.type === 'integer' || part.type === 'group';\n const next = parts[i + 1];\n const nextHere = next && (next.type === 'integer' || next.type === 'group');\n if (here && !nextHere && !inserted) {\n out += dec;\n inserted = true;\n }\n });\n } catch {\n out = `${num}${dec}`;\n inserted = true;\n }\n if (!inserted) out += dec;\n return `${this.prefix()}${out}${this.suffix()}`;\n }\n\n private toNumber(p: Parsed): number | null {\n const s = `${p.negative ? '-' : ''}${p.intDigits || '0'}${p.fracDigits ? '.' + p.fracDigits : ''}`;\n const n = Number(s);\n return Number.isFinite(n) ? n : null;\n }\n\n /** Pull the sign / integer / fraction fragments out of a formatted, partially-typed string. */\n private parseInput(raw: string): Parsed {\n const { group, decimal } = this.separators();\n let t = raw;\n const prefix = this.prefix();\n const suffix = this.suffix();\n if (prefix && t.startsWith(prefix)) t = t.slice(prefix.length);\n if (suffix && t.endsWith(suffix)) t = t.slice(0, t.length - suffix.length);\n if (group) t = t.split(group).join('');\n if (decimal && decimal !== '.') t = t.split(decimal).join('.');\n t = t.replace(/[^0-9.\\-]/g, '');\n\n const negative = t.includes('-');\n t = t.replace(/-/g, '');\n const dot = t.indexOf('.');\n const hadDecimal = dot !== -1 && this.maxFrac() > 0;\n let intDigits = (hadDecimal ? t.slice(0, dot) : t.replace(/\\./g, '')).replace(/\\D/g, '');\n let fracDigits = hadDecimal ? t.slice(dot + 1).replace(/\\D/g, '') : '';\n // Strip a leading run of zeros (\"007\" -> \"7\") but keep a lone \"0\".\n intDigits = intDigits.replace(/^0+(?=\\d)/, '');\n fracDigits = fracDigits.slice(0, this.maxFrac());\n return { negative, intDigits, fracDigits, hadDecimal };\n }\n\n /** Characters that \"carry meaning\" for caret placement (digits, minus, the decimal separator). */\n private isSignificant(ch: string): boolean {\n return (ch >= '0' && ch <= '9') || ch === '-' || ch === this.separators().decimal;\n }\n\n private significantBefore(s: string, upto: number): number {\n let n = 0;\n for (let i = 0; i < upto && i < s.length; i++) if (this.isSignificant(s[i])) n++;\n return n;\n }\n\n /** The caret index in `formatted` that sits just after `target` significant characters. */\n private caretAfter(formatted: string, target: number): number {\n if (target <= 0) {\n for (let i = 0; i < formatted.length; i++) if (this.isSignificant(formatted[i])) return i;\n return formatted.length;\n }\n let n = 0;\n for (let i = 0; i < formatted.length; i++) {\n if (this.isSignificant(formatted[i]) && ++n === target) return i + 1;\n }\n return formatted.length;\n }\n\n private clamp(n: number): number {\n const min = this.min();\n const max = this.max();\n if (min !== null && n < min) n = min;\n if (max !== null && n > max) n = max;\n return n;\n }\n\n /** Trim binary-float drift (0.1 + 0.2) back to a clean decimal. */\n private tidy(n: number): number {\n return Math.round(n * 1e10) / 1e10;\n }\n\n // --- Interaction ----------------------------------------------------------\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const raw = el.value;\n const caret = el.selectionStart ?? raw.length;\n const target = this.significantBefore(raw, caret);\n\n const parsed = this.parseInput(raw);\n if (parsed.intDigits === '' && parsed.fracDigits === '' && !parsed.hadDecimal) {\n // Nothing numeric left — allow a lone \"-\" mid-entry, otherwise empty.\n const text = parsed.negative ? '-' : '';\n el.value = text;\n el.setSelectionRange(text.length, text.length);\n this.value.set(null);\n this.onChange(null);\n return;\n }\n\n const num = this.toNumber(parsed);\n const formatted = this.formatLive(parsed);\n el.value = formatted;\n const next = this.caretAfter(formatted, target);\n el.setSelectionRange(next, next);\n\n this.value.set(num);\n this.onChange(num);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.spin(1);\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.spin(-1);\n }\n }\n\n protected onBlur(): void {\n let v = this.value();\n if (v === null && !this.allowEmpty()) v = this.min() ?? 0;\n if (v !== null) v = this.clamp(this.tidy(v));\n // Re-render through the committed formatter (applies min-fraction padding + clamping).\n this.value.set(v);\n this.paintCommitted();\n this.onChange(v);\n this.onTouched();\n }\n\n protected spin(direction: 1 | -1): void {\n if (this.isDisabled() || this.readonly()) return;\n const base = this.value() ?? this.min() ?? 0;\n const nextValue = this.clamp(this.tidy(base + direction * this.step()));\n this.value.set(nextValue);\n this.onChange(nextValue);\n this.onTouched();\n // Paint the stepped value ourselves — the effect stands down while the field is focused.\n const el = this.fieldRef()?.nativeElement;\n if (el) {\n const text = this.format(nextValue);\n el.value = text;\n if (this.isActive(el)) el.setSelectionRange(text.length, text.length);\n }\n }\n\n protected clear(): void {\n this.value.set(null);\n this.onChange(null);\n this.onTouched();\n const el = this.fieldRef()?.nativeElement;\n if (el) el.value = '';\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: number | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: number | null): void {\n this.value.set(typeof value === 'number' && Number.isFinite(value) ? value : null);\n }\n registerOnChange(fn: (value: number | 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","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** A translatable string held per language code — e.g. `{ fr: 'Titre', nl: 'Titel' }`. */\nexport type SdsLocalizedValue = Record<string, string>;\n\nexport type SdsLocalizedInputSize = 'sm' | 'md' | 'lg';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsLocalizedInputSize, string> = {\n sm: 'min-h-9 text-sm',\n md: 'min-h-10 text-sm',\n lg: 'min-h-12 text-base',\n};\n\n/**\n * One language-aware text field for editing a translated value (a {@link SdsLocalizedValue} — a title,\n * label or description in several languages). Only one language is edited at a time; a compact switcher\n * sitting **inside the field** flips which translation you are editing, and a dot marks the languages that\n * already have content, so a partially-translated value is obvious at a glance.\n *\n * The active language defaults to {@link currentLanguage} when it is one of {@link languages}, otherwise the\n * first accepted language — so the field \"opens on the language you are working in\". Empty translations are\n * pruned from the emitted value, keeping the stored map clean.\n *\n * Implements ControlValueAccessor over the map — use with reactive forms or `[(ngModel)]`:\n * `<sds-localized-input [languages]=\"['fr','nl','en']\" [(ngModel)]=\"title\" />`.\n */\n@Component({\n selector: 'sds-localized-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsLocalizedInput),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label [for]=\"inputId\" class=\"mb-1.5 block text-sm font-medium text-ink\">{{ label() }}</label>\n }\n\n <div\n class=\"relative flex items-stretch rounded-control border bg-white text-ink transition-colors\"\n [class]=\"wrapperClasses()\"\n >\n @if (multiline()) {\n <textarea\n [id]=\"inputId\"\n [rows]=\"rows()\"\n [placeholder]=\"fieldPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"current()\"\n (input)=\"write($event)\"\n (blur)=\"onTouched()\"\n class=\"min-w-0 flex-1 resize-y bg-transparent px-3.5 py-2 outline-none placeholder:text-current/50 disabled:cursor-not-allowed\"\n ></textarea>\n } @else {\n <input\n [id]=\"inputId\"\n [placeholder]=\"fieldPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"current()\"\n (input)=\"write($event)\"\n (blur)=\"onTouched()\"\n class=\"min-w-0 flex-1 bg-transparent px-3.5 outline-none placeholder:text-current/50 disabled:cursor-not-allowed\"\n />\n }\n\n @if (languages().length > 1) {\n <div\n class=\"flex shrink-0 items-center gap-0.5 self-start p-1\"\n [class]=\"multiline() ? '' : 'self-center'\"\n role=\"tablist\"\n [attr.aria-label]=\"languageSwitcherLabel()\"\n >\n @for (lang of languages(); track lang) {\n <button\n type=\"button\"\n role=\"tab\"\n tabindex=\"-1\"\n [disabled]=\"isDisabled()\"\n (click)=\"select(lang)\"\n [attr.aria-selected]=\"activeLang() === lang\"\n [attr.title]=\"lang.toUpperCase() + (filled(lang) ? '' : ' — ' + untranslatedLabel())\"\n class=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] font-semibold uppercase leading-none transition-colors disabled:cursor-not-allowed disabled:opacity-50\"\n [class]=\"\n activeLang() === lang\n ? 'bg-brand-50 text-brand-700'\n : 'text-ink-faint hover:bg-muted hover:text-ink-soft'\n \"\n >\n {{ lang }}\n <span\n class=\"inline-block h-1 w-1 rounded-full\"\n [class]=\"filled(lang) ? 'bg-success' : 'bg-current/30'\"\n ></span>\n </button>\n }\n </div>\n }\n </div>\n\n @if (hint()) {\n <p class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n `,\n})\nexport class SdsLocalizedInput implements ControlValueAccessor {\n readonly inputId = `sds-localized-input-${nextId++}`;\n\n readonly label = input<string>('');\n readonly hint = input<string>('');\n readonly placeholder = input<string>('');\n\n /** The accepted language codes, in display order (e.g. `['fr','nl','en']`). */\n readonly languages = input<string[]>([]);\n\n /** Language to pre-select; used when it is one of {@link languages}, else the first accepted language. */\n readonly currentLanguage = input<string | null>(null);\n\n readonly multiline = input(false, { transform: booleanAttribute });\n readonly rows = input(3, { transform: numberAttribute });\n readonly size = input<SdsLocalizedInputSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible name for the in-field language switcher, and the \"no translation yet\" title suffix on each\n * language button. French defaults so existing consumers are unchanged; translate them in a multi-language\n * app (the buttons are letter-only, so the title carries their meaning).\n */\n readonly languageSwitcherLabel = input<string>('Langue');\n readonly untranslatedLabel = input<string>('à traduire');\n\n private readonly valueMap = signal<SdsLocalizedValue>({});\n /** Language chosen via the switcher; null means \"follow currentLanguage / the first language\". */\n private readonly manual = signal<string | null>(null);\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly wrapperClasses = computed(() => {\n const parts = [SIZES[this.size()]];\n parts.push(\n this.isDisabled()\n ? 'border-border opacity-60 cursor-not-allowed'\n : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25',\n );\n return parts.join(' ');\n });\n\n /** The language currently being edited. */\n protected readonly activeLang = computed(() => {\n const langs = this.languages();\n if (!langs.length) {\n return '';\n }\n const manual = this.manual();\n if (manual && langs.includes(manual)) {\n return manual;\n }\n const preferred = this.currentLanguage();\n return preferred && langs.includes(preferred) ? preferred : langs[0];\n });\n\n protected readonly current = computed(() => this.valueMap()[this.activeLang()] ?? '');\n\n protected filled(lang: string): boolean {\n const text = this.valueMap()[lang];\n return !!text && text.trim().length > 0;\n }\n\n protected fieldPlaceholder(): string {\n const base = this.placeholder();\n const lang = this.activeLang().toUpperCase();\n if (base) {\n return lang ? `${base} (${lang})` : base;\n }\n return lang ? `(${lang})` : '';\n }\n\n protected select(lang: string): void {\n this.manual.set(lang);\n this.onTouched();\n }\n\n protected write(event: Event): void {\n const lang = this.activeLang();\n if (!lang) {\n return;\n }\n const text = (event.target as HTMLInputElement | HTMLTextAreaElement).value;\n const next: SdsLocalizedValue = { ...this.valueMap() };\n if (text) {\n next[lang] = text;\n } else {\n delete next[lang];\n }\n this.valueMap.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: SdsLocalizedValue) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: SdsLocalizedValue | null): void {\n this.valueMap.set(value ? { ...value } : {});\n }\n registerOnChange(fn: (value: SdsLocalizedValue) => 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","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n input,\n numberAttribute,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nexport type SdsOtpInputSize = 'md' | 'lg';\n\nlet nextId = 0;\n\nconst SIZES: Record<SdsOtpInputSize, string> = {\n md: 'h-12 w-11 text-lg',\n lg: 'h-14 w-12 text-xl',\n};\n\n/**\n * A segmented one-time-code field: one box per character, for the short numeric codes emailed or\n * texted for sign-in and verification. Implements ControlValueAccessor — bind\n * `formControlName`/`[(ngModel)]`; the value is the concatenated string (e.g. `\"483920\"`), and\n * {@link completed} fires the moment every box is filled.\n *\n * <p>Only digits are accepted (`inputMode` is `numeric` by default). Typing auto-advances,\n * Backspace steps back and clears, the arrow keys move between boxes, and pasting a whole code\n * distributes it across the boxes from the focused one — so a user can paste `483920` into the\n * first box and have it land correctly.\n */\n@Component({\n selector: 'sds-otp-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SdsOtpInput),\n multi: true,\n },\n ],\n host: { class: 'block' },\n template: `\n @if (label()) {\n <label [id]=\"groupId + '-label'\" class=\"mb-1.5 block text-sm font-medium text-ink\">\n {{ label() }}\n </label>\n }\n\n <div\n class=\"flex items-center gap-2\"\n role=\"group\"\n [attr.aria-labelledby]=\"label() ? groupId + '-label' : null\"\n [attr.aria-label]=\"!label() && ariaLabel() ? ariaLabel() : null\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n @for (i of indexes(); track i) {\n <input\n #cell\n type=\"text\"\n [attr.data-index]=\"i\"\n [inputMode]=\"inputMode()\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"charAt(i)\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"cellLabel() + ' ' + (i + 1)\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n class=\"bg-white text-center font-semibold tabular-nums outline-none transition-colors\n disabled:cursor-not-allowed\"\n [class]=\"cellClasses()\"\n (input)=\"onInput($event, i)\"\n (keydown)=\"onKeydown($event, i)\"\n (paste)=\"onPaste($event, i)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onTouched()\"\n />\n }\n </div>\n\n @if (error()) {\n <p [id]=\"groupId + '-err'\" class=\"mt-1.5 text-xs font-medium text-danger\">{{ error() }}</p>\n } @else if (hint()) {\n <p [id]=\"groupId + '-hint'\" class=\"mt-1.5 text-xs text-ink-faint\">{{ hint() }}</p>\n }\n `,\n})\nexport class SdsOtpInput implements ControlValueAccessor {\n readonly groupId = `sds-otp-${nextId++}`;\n\n /** How many boxes / characters the code has. */\n readonly length = input(6, { transform: numberAttribute });\n readonly label = input<string>('');\n /** Accessible name for the whole group when no visible [label] is provided. */\n readonly ariaLabel = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly size = input<SdsOtpInputSize>('md');\n /** `numeric` for digit codes (the default); `text` for alphanumeric codes. */\n readonly inputMode = input<'numeric' | 'text'>('numeric');\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Focus the first box on first render. */\n readonly autoFocus = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible name for an individual box, suffixed with its 1-based position (\"Digit 1\", \"Digit\n * 2\", …). French default so existing consumers are unchanged; translate it in an app serving more\n * than one language, since each box is an icon-less control whose only name this is.\n */\n readonly cellLabel = input<string>('Chiffre');\n\n /** Emitted with the full value the moment the last box is filled. */\n readonly completed = output<string>();\n\n private readonly cells = viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n /** One entry per box; the source of truth, kept exactly {@link length} long. */\n private readonly chars = signal<string[]>([]);\n private readonly cvaDisabled = signal(false);\n\n protected readonly indexes = computed(() =>\n Array.from({ length: this.length() }, (_, i) => i),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly describedBy = computed(() => {\n if (this.error()) return `${this.groupId}-err`;\n if (this.hint()) return `${this.groupId}-hint`;\n return null;\n });\n\n protected readonly cellClasses = computed(() => {\n const parts = ['rounded-control border', 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 text-ink focus:border-brand-500 focus:ring-2 focus:ring-brand-500/25',\n );\n if (this.isDisabled()) parts.push('opacity-60');\n return parts.join(' ');\n });\n\n constructor() {\n // Autofocus once the boxes are in the DOM. afterRenderEffect re-runs on signal reads, but the\n // guard keeps it to the first paint — refocusing on every value change would fight the user.\n let focused = false;\n afterRenderEffect(() => {\n if (this.autoFocus() && !focused && !this.isDisabled()) {\n this.cells()[0]?.nativeElement.focus();\n focused = true;\n }\n });\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n // Programmatic set never emits — CVA writeValue must not call onChange.\n this.chars.set(this.spread(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 // --- events ---------------------------------------------------------------\n\n protected charAt(index: number): string {\n return this.chars()[index] ?? '';\n }\n\n protected onInput(event: Event, index: number): void {\n const el = event.target as HTMLInputElement;\n const raw = el.value;\n const digits = this.sanitize(raw);\n if (digits.length === 0) {\n if (raw.length === 0) {\n // Genuinely emptied (cut, or a deletion the keydown handler did not catch) — clear the box.\n this.setChar(index, '');\n } else {\n // A rejected character (letter, symbol) — reassert the box's real content, since the\n // [value] binding will not repaint an unchanged signal.\n el.value = this.charAt(index);\n }\n return;\n }\n if (digits.length > 1) {\n // Fast typing or an autofill dropped several characters into one box — spread them.\n this.fill(digits, index);\n return;\n }\n this.setChar(index, digits);\n this.focusIndex(index + 1);\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n switch (event.key) {\n case 'Backspace':\n event.preventDefault();\n if (this.charAt(index)) {\n this.setChar(index, '');\n } else if (index > 0) {\n this.setChar(index - 1, '');\n this.focusIndex(index - 1);\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n this.focusIndex(index - 1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.focusIndex(index + 1);\n break;\n case 'Delete':\n event.preventDefault();\n this.setChar(index, '');\n break;\n default:\n break;\n }\n }\n\n protected onPaste(event: ClipboardEvent, index: number): void {\n const digits = this.sanitize(event.clipboardData?.getData('text') ?? '');\n if (!digits) return;\n event.preventDefault();\n this.fill(digits, index);\n }\n\n protected onFocus(event: FocusEvent): void {\n // Select the box's content so a keystroke overwrites rather than being rejected by maxlength.\n (event.target as HTMLInputElement).select();\n }\n\n // --- internals ------------------------------------------------------------\n\n private sanitize(raw: string): string {\n return this.inputMode() === 'numeric'\n ? raw.replace(/\\D/g, '')\n : raw.replace(/[^A-Za-z0-9]/g, '');\n }\n\n /** Normalize any input string into an array exactly {@link length} long. */\n private spread(raw: string): string[] {\n const cleaned = this.sanitize(raw).slice(0, this.length());\n return Array.from({ length: this.length() }, (_, i) => cleaned[i] ?? '');\n }\n\n private setChar(index: number, value: string): void {\n const next = this.normalized();\n next[index] = value;\n this.commit(next);\n }\n\n /** Write `digits` across the boxes starting at `start`, then focus the next empty box. */\n private fill(digits: string, start: number): void {\n const next = this.normalized();\n let cursor = start;\n for (const ch of digits) {\n if (cursor >= this.length()) break;\n next[cursor] = ch;\n cursor += 1;\n }\n this.commit(next);\n this.focusIndex(Math.min(cursor, this.length() - 1));\n }\n\n private commit(next: string[]): void {\n this.chars.set(next);\n const value = next.join('');\n this.onChange(value);\n if (next.every((c) => c !== '')) {\n this.completed.emit(value);\n }\n }\n\n /** The current boxes as a fresh, correctly-sized array to mutate. */\n private normalized(): string[] {\n const current = this.chars();\n return Array.from({ length: this.length() }, (_, i) => current[i] ?? '');\n }\n\n private focusIndex(index: number): void {\n const clamped = Math.max(0, Math.min(index, this.length() - 1));\n const cell = this.cells()[clamped]?.nativeElement;\n if (cell) {\n cell.focus();\n cell.select();\n }\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\n/** Zero-pad a number to two digits (e.g. 9 → \"09\"). */\nexport function pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\n/** Format a date's time-of-day as HH:mm (24h, local time). */\nexport function formatHhMm(d: Date): string {\n return `${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\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 booleanAttribute,\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 pad2,\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 [attr.aria-label]=\"calendarLabel()\"\n >\n <!-- Header -->\n <div class=\"mb-2 flex items-center justify-between\">\n <button type=\"button\" [class]=\"navBtn\" [attr.aria-label]=\"previousLabel()\" (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\" [attr.aria-label]=\"nextLabel()\" (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 <!-- Time editor -->\n @if (showTime()) {\n <div class=\"mt-2 flex items-center gap-2 border-t border-border pt-2\">\n <span class=\"text-xs font-medium text-ink-soft\">{{ timeLabel() }}</span>\n <div class=\"ml-auto inline-flex items-center gap-1.5\">\n <div class=\"inline-flex items-center rounded-control border border-border bg-white\">\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"hoursText()\"\n [disabled]=\"!value()\"\n [attr.aria-label]=\"hoursLabel()\"\n (change)=\"setHours($any($event.target).value)\"\n (blur)=\"$any($event.target).value = hoursText()\"\n (keydown.arrowup)=\"stepHours(1); $event.preventDefault()\"\n (keydown.arrowdown)=\"stepHours(-1); $event.preventDefault()\"\n [class]=\"timeInput\"\n />\n <div class=\"flex flex-col border-l border-border\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepHours(1)\"\n >\n <span class=\"inline-flex rotate-180\"\n ><sds-icon name=\"chevron-down\" [size]=\"11\"\n /></span>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepHours(-1)\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"11\" />\n </button>\n </div>\n </div>\n <span class=\"text-sm font-semibold text-ink-soft\">:</span>\n <div class=\"inline-flex items-center rounded-control border border-border bg-white\">\n <input\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"minutesText()\"\n [disabled]=\"!value()\"\n [attr.aria-label]=\"minutesLabel()\"\n (change)=\"setMinutes($any($event.target).value)\"\n (blur)=\"$any($event.target).value = minutesText()\"\n (keydown.arrowup)=\"stepMinutes(1); $event.preventDefault()\"\n (keydown.arrowdown)=\"stepMinutes(-1); $event.preventDefault()\"\n [class]=\"timeInput\"\n />\n <div class=\"flex flex-col border-l border-border\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepMinutes(1)\"\n >\n <span class=\"inline-flex rotate-180\"\n ><sds-icon name=\"chevron-down\" [size]=\"11\"\n /></span>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"!value()\"\n [class]=\"stepBtn\"\n (click)=\"stepMinutes(-1)\"\n >\n <sds-icon name=\"chevron-down\" [size]=\"11\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Actions -->\n @if (showActions() || showDone()) {\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\n <div class=\"flex items-center gap-1\">\n @if (showActions()) {\n <button\n type=\"button\"\n [class]=\"actionBtn\"\n [disabled]=\"todayDisabled()\"\n (click)=\"goToday()\"\n >\n {{ todayActionLabel() }}\n </button>\n <button type=\"button\" [class]=\"actionBtn\" (click)=\"clear()\">\n {{ clearActionLabel() }}\n </button>\n }\n </div>\n @if (showDone()) {\n <button type=\"button\" [class]=\"doneBtn\" (click)=\"done.emit()\">{{ doneLabel() }}</button>\n }\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 /** When true, a time editor (HH:mm, 24h) is shown and the value keeps its time-of-day. */\n readonly showTime = input(false, { transform: booleanAttribute });\n /** When true, a \"done\" action is shown (used by the overlay picker to close the panel). */\n readonly showDone = input(false, { transform: booleanAttribute });\n\n /** Visible label of the time editor. Translate it in the consuming app. */\n readonly timeLabel = input<string>('Heure');\n /** Accessible name of the hours field (it is a bare numeric input). */\n readonly hoursLabel = input<string>('Heures');\n /** Accessible name of the minutes field. */\n readonly minutesLabel = input<string>('Minutes');\n /** Visible text of the \"done\" action (shown when {@link showDone} is true). */\n readonly doneLabel = input<string>('Terminé');\n\n /**\n * Accessible name for the calendar container. French default so existing consumers are unchanged,\n * but an app serving more than one language MUST translate it.\n */\n readonly calendarLabel = input<string>('Calendrier');\n\n /**\n * Accessible name for the \"previous\" nav button. It is icon-only, so this string is its ONLY\n * accessible name — a hardcoded French one is simply wrong in every other locale. Translate it in\n * the consuming app.\n */\n readonly previousLabel = input<string>('Précédent');\n\n /** Accessible name for the icon-only \"next\" nav button. See {@link previousLabel}. */\n readonly nextLabel = input<string>('Suivant');\n\n /**\n * Visible text of the \"today\" action (shown when {@link showActions} is true). Translate it in the\n * consuming app — the library ships no i18n of its own.\n */\n readonly todayActionLabel = input<string>(\"Aujourd'hui\");\n\n /** Visible text of the \"clear\" action. See {@link todayActionLabel}. */\n readonly clearActionLabel = input<string>('Effacer');\n\n /** Emitted when a concrete date is picked (day click or \"Aujourd'hui\"). */\n readonly dateSelect = output<Date>();\n /** Emitted when the \"done\" action is used (see {@link showDone}). */\n readonly done = output<void>();\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 protected readonly doneBtn =\n 'rounded-control bg-brand-600 px-3 py-1 text-xs font-semibold text-white hover:bg-brand-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500';\n protected readonly timeInput =\n 'w-8 bg-transparent py-1 text-center text-sm text-ink outline-none disabled:cursor-not-allowed disabled:opacity-40';\n protected readonly stepBtn =\n 'flex h-3.5 w-5 items-center justify-center text-ink-faint transition-colors hover:text-ink focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-30';\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: (!!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 // showTime keeps the current time-of-day (or 00:00 when nothing was set yet); otherwise midnight.\n const day = this.applyTime(startOfDay(d));\n this.value.set(day);\n this.viewDate.set(startOfMonth(day));\n this.focusedDate.set(startOfDay(day));\n this.dateSelect.emit(day);\n }\n\n /** Carry the previously-selected time-of-day onto a freshly-picked day (only when showTime). */\n private applyTime(day: Date): Date {\n if (!this.showTime()) return day;\n const prev = this.value();\n if (!prev) return day; // no prior time → keep 00:00\n const d = new Date(day);\n d.setHours(prev.getHours(), prev.getMinutes(), 0, 0);\n return d;\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 // --- time editor (only rendered when showTime) ---\n protected readonly hoursText = computed(() => {\n const v = this.value();\n return v ? pad2(v.getHours()) : '';\n });\n protected readonly minutesText = computed(() => {\n const v = this.value();\n return v ? pad2(v.getMinutes()) : '';\n });\n\n protected setHours(raw: string): void {\n const v = this.value();\n if (!v) return;\n const n = parseInt(raw, 10);\n if (Number.isNaN(n)) return;\n const d = new Date(v);\n d.setHours(Math.min(23, Math.max(0, n)));\n this.value.set(d);\n }\n protected setMinutes(raw: string): void {\n const v = this.value();\n if (!v) return;\n const n = parseInt(raw, 10);\n if (Number.isNaN(n)) return;\n const d = new Date(v);\n d.setMinutes(Math.min(59, Math.max(0, n)));\n this.value.set(d);\n }\n /** Wrap hours within 0–23; never carries into the day. */\n protected stepHours(delta: number): void {\n const v = this.value();\n if (!v) return;\n const d = new Date(v);\n d.setHours((d.getHours() + delta + 24) % 24);\n this.value.set(d);\n }\n /** Wrap minutes within 0–59; never carries into the hour. */\n protected stepMinutes(delta: number): void {\n const v = this.value();\n if (!v) return;\n const d = new Date(v);\n d.setMinutes((d.getMinutes() + delta + 60) % 60);\n this.value.set(d);\n }\n\n // --- keyboard (day grid) ---\n protected onGridKeydown(e: KeyboardEvent): void {\n let f = this.focusedDate();\n switch (e.key) {\n case 'ArrowLeft':\n f = addDays(f, -1);\n break;\n case 'ArrowRight':\n f = addDays(f, 1);\n break;\n case 'ArrowUp':\n f = addDays(f, -7);\n break;\n case 'ArrowDown':\n f = addDays(f, 7);\n break;\n case 'Home':\n f = addDays(f, -((f.getDay() - this.firstDayOfWeek() + 7) % 7));\n break;\n case 'End':\n f = addDays(f, 6 - ((f.getDay() - this.firstDayOfWeek() + 7) % 7));\n break;\n case 'PageUp':\n f = addMonthsKeepDay(f, -1);\n break;\n case 'PageDown':\n f = addMonthsKeepDay(f, 1);\n 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>(`[data-date=\"${isoDay(d)}\"]`);\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, formatHhMm } 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)': 'onEscape($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 @if (inline()) {\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n [showTime]=\"showTime()\"\n [timeLabel]=\"timeLabel()\"\n [hoursLabel]=\"hoursLabel()\"\n [minutesLabel]=\"minutesLabel()\"\n [calendarLabel]=\"calendarLabel()\"\n [previousLabel]=\"previousLabel()\"\n [nextLabel]=\"nextLabel()\"\n [todayActionLabel]=\"todayActionLabel()\"\n [clearActionLabel]=\"clearActionLabel()\"\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 (keydown.enter)=\"onTriggerKeydown($event)\"\n (keydown.space)=\"onTriggerKeydown($event)\"\n (keydown.arrowdown)=\"onTriggerKeydown($event)\"\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 [attr.aria-label]=\"clearLabel()\"\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() ? closeCalendarLabel() : openCalendarLabel()\"\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 [attr.aria-label]=\"panelLabel()\"\n (keydown.escape)=\"onEscape($event)\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <sds-calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [showActions]=\"showActions()\"\n [showTime]=\"showTime()\"\n [showDone]=\"showTime()\"\n [timeLabel]=\"timeLabel()\"\n [hoursLabel]=\"hoursLabel()\"\n [minutesLabel]=\"minutesLabel()\"\n [doneLabel]=\"doneLabel()\"\n [calendarLabel]=\"calendarLabel()\"\n [previousLabel]=\"previousLabel()\"\n [nextLabel]=\"nextLabel()\"\n [todayActionLabel]=\"todayActionLabel()\"\n [clearActionLabel]=\"clearActionLabel()\"\n (valueChange)=\"onCalendarValue($event)\"\n (dateSelect)=\"onDateSelect()\"\n (done)=\"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 /**\n * When true, the calendar shows a time editor (HH:mm, 24h), the value keeps its time-of-day, and\n * the field displays date + time. The overlay stays open on day-select so the time can be set;\n * a \"done\" action (and click-away / Escape) closes it.\n */\n readonly showTime = input(false, { transform: booleanAttribute });\n /** Custom display formatter for the DATE part (default dd/MM/yyyy). The time is appended as HH:mm. */\n readonly format = input<(d: Date) => string>(formatDdMmYyyy);\n\n /** Visible label of the time editor (forwarded to the calendar). See {@link showTime}. */\n readonly timeLabel = input<string>('Heure');\n /** Accessible name of the hours field (forwarded to the calendar). */\n readonly hoursLabel = input<string>('Heures');\n /** Accessible name of the minutes field (forwarded to the calendar). */\n readonly minutesLabel = input<string>('Minutes');\n /** Visible text of the calendar's \"done\" action, shown in the overlay when {@link showTime}. */\n readonly doneLabel = input<string>('Terminé');\n\n /**\n * Accessible name for the clear button. French default so existing consumers are unchanged, but an\n * app serving more than one language MUST translate it — it is an icon-only control, so this string\n * is its only name.\n */\n readonly clearLabel = input<string>('Effacer la date');\n\n /**\n * Accessible name for the icon-only calendar toggle while the panel is CLOSED. See\n * {@link clearLabel} for why this has to be translatable.\n */\n readonly openCalendarLabel = input<string>('Ouvrir le calendrier');\n\n /** Accessible name for the calendar toggle while the panel is OPEN. See {@link openCalendarLabel}. */\n readonly closeCalendarLabel = input<string>('Fermer le calendrier');\n\n /** Accessible name for the overlay dialog that holds the calendar. */\n readonly panelLabel = input<string>('Sélection de date');\n\n /**\n * Labels forwarded to the embedded <sds-calendar>. They live here because the picker is how the\n * calendar is normally reached — without forwarding, a consumer could translate the field but not\n * the panel it opens. Defaults match SdsCalendar's own, so nothing changes for existing consumers.\n */\n readonly calendarLabel = input<string>('Calendrier');\n readonly previousLabel = input<string>('Précédent');\n readonly nextLabel = input<string>('Suivant');\n readonly todayActionLabel = input<string>(\"Aujourd'hui\");\n readonly clearActionLabel = input<string>('Effacer');\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 if (!v) return '';\n return this.showTime() ? `${this.format()(v)} ${formatHhMm(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 /**\n * A day was clicked in the overlay. Without a time editor, a day click is the whole selection, so\n * close. With showTime, the user still needs to set the time, so keep the panel open (they close it\n * with the \"done\" action, a click away, or Escape).\n */\n protected onDateSelect(): void {\n if (!this.showTime()) this.close(true);\n }\n\n /**\n * Escape closes the panel and consumes the event while the panel is open, so an ancestor modal does\n * not also dismiss on the same keystroke (mirrors sds-select). When the panel is already closed, the\n * event passes through so Escape can dismiss whatever contains the field.\n */\n protected onEscape(event: Event): void {\n if (!this.open()) return;\n event.preventDefault();\n this.close(true);\n }\n\n /** The readonly trigger is not a button, so open the overlay on Enter / Space / ArrowDown too. */\n protected onTriggerKeydown(event: Event): void {\n event.preventDefault(); // stop Space/ArrowDown scrolling and Enter submitting an enclosing form\n if (!this.isDisabled() && !this.open()) this.openPanel();\n }\n\n /**\n * Self-contained Tab trap for the overlay. The panel is relocated to document.body, so it sits\n * outside any ancestor modal's focus trap; without this, tabbing off the last control would land on\n * the page behind the dialog. Keeps Tab / Shift+Tab cycling within the panel's own focusables.\n */\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab' || !this.panelEl) return;\n const sel =\n 'a[href],button:not([disabled]):not([tabindex=\"-1\"]),input:not([disabled]),' +\n '[tabindex]:not([tabindex=\"-1\"])';\n const items = Array.from(this.panelEl.querySelectorAll<HTMLElement>(sel)).filter(\n (el) => el.offsetParent !== null,\n );\n if (items.length === 0) return;\n const first = items[0];\n const last = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey && (active === first || !this.panelEl.contains(active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\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 { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Context handed to a custom option template. Lets consumers destructure with\n * `let-option`, `let-selected=\"selected\"`, `let-label=\"label\"`, etc., with full\n * type inference (see {@link SdsSelectOption.ngTemplateContextGuard}).\n */\nexport interface SdsSelectOptionContext {\n /** Same as {@link option} — enables the implicit `let-option` binding. Typed `any` so consumer templates\n * can read their own option fields (e.g. `option.color`) without casting. */\n $implicit: any;\n /** The raw option object (or primitive) from the `options` array. */\n option: any;\n /** The resolved display label (via optionLabel). */\n label: string;\n /** The resolved option value (via optionValue). */\n value: unknown;\n /** Whether this option is currently selected. */\n selected: boolean;\n /** Whether this option is disabled. */\n disabled: boolean;\n /** Zero-based index within the currently displayed (filtered) options. */\n index: number;\n}\n\n/**\n * Supplies a custom template for each option row (and the selected value shown\n * in the trigger) of an `<sds-select>` / `<sds-multi-select>`. Use as a\n * structural template projected into the select:\n *\n * @example\n * <sds-select [options]=\"categories\" optionLabel=\"name\" optionValue=\"id\" [(ngModel)]=\"catId\">\n * <ng-template sdsSelectOption let-option let-selected=\"selected\">\n * <span class=\"dot\" [style.background]=\"option.color\"></span>\n * <span class=\"truncate\">{{ option.name }}</span>\n * </ng-template>\n * </sds-select>\n */\n@Directive({\n selector: 'ng-template[sdsSelectOption]',\n standalone: true,\n})\nexport class SdsSelectOption {\n /** The wrapped template, rendered by the host select via ngTemplateOutlet. */\n readonly template = inject<TemplateRef<SdsSelectOptionContext>>(TemplateRef);\n\n /** Lets the compiler type-check `let-*` bindings against SdsSelectOptionContext. */\n static ngTemplateContextGuard(\n _dir: SdsSelectOption,\n _ctx: unknown,\n ): _ctx is SdsSelectOptionContext {\n return true;\n }\n}\n\n/** Context handed to a custom empty-state template. */\nexport interface SdsSelectEmptyContext {\n /** Same as {@link filterText} — enables the implicit `let-filterText` binding. */\n $implicit: string;\n /** The current filter query (empty when the field isn't filterable or is blank). */\n filterText: string;\n}\n\n/**\n * Supplies a custom template shown in place of the default \"no results\" message\n * when a select has no (matching) options.\n *\n * @example\n * <ng-template sdsSelectEmpty let-q>No category matches \"{{ q }}\".</ng-template>\n */\n@Directive({\n selector: 'ng-template[sdsSelectEmpty]',\n standalone: true,\n})\nexport class SdsSelectEmpty {\n readonly template = inject<TemplateRef<SdsSelectEmptyContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: SdsSelectEmpty,\n _ctx: unknown,\n ): _ctx is SdsSelectEmptyContext {\n return true;\n }\n}\n\n/** Context handed to a custom footer template. */\nexport interface SdsSelectFooterContext {\n /** Same as {@link filterText} — enables the implicit `let-filterText` binding. */\n $implicit: string;\n /** The current filter query. */\n filterText: string;\n /** Closes the open panel — handy for a footer action (e.g. \"+ New…\"). */\n close: () => void;\n}\n\n/**\n * Supplies a custom sticky footer rendered below the option list — e.g. a\n * \"+ Create new\" action. The `close` context callback dismisses the panel.\n *\n * @example\n * <ng-template sdsSelectFooter let-close=\"close\">\n * <button (click)=\"createCategory(); close()\">+ New category</button>\n * </ng-template>\n */\n@Directive({\n selector: 'ng-template[sdsSelectFooter]',\n standalone: true,\n})\nexport class SdsSelectFooter {\n readonly template = inject<TemplateRef<SdsSelectFooterContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: SdsSelectFooter,\n _ctx: unknown,\n ): _ctx is SdsSelectFooterContext {\n return true;\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport {\n SdsSelectEmpty,\n SdsSelectFooter,\n SdsSelectOption,\n SdsSelectOptionContext,\n} from './sds-select-templates';\n\nexport type SdsSelectSize = 'sm' | 'md' | 'lg';\n/** Field skin. `filled` is borderless on a muted ground (to sit inside a page, matching sds-input's\n * filled appearance); `on-brand` is tuned for a dark surface. */\nexport type SdsSelectAppearance = 'default' | 'filled' | 'on-brand';\n\ninterface NormOption {\n label: string;\n value: unknown;\n disabled: boolean;\n /** The original option (object or primitive), passed to a custom option template. */\n raw: unknown;\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 * Options render as plain text by default. To render richer options (an icon,\n * an avatar, a two-line row…) project template directives — the same content\n * also renders in the trigger for the selected value:\n * - `<ng-template sdsSelectOption let-option>` — one option row (see {@link SdsSelectOption});\n * context: the raw `option` (implicit), plus `label`, `value`, `selected`, `disabled`, `index`.\n * - `<ng-template sdsSelectEmpty let-query>` — replaces the \"no results\" message (see {@link SdsSelectEmpty}).\n * - `<ng-template sdsSelectFooter let-close=\"close\">` — a sticky footer action, e.g. \"+ New…\"\n * (see {@link SdsSelectFooter}); `close()` dismisses the panel.\n *\n * @example\n * <sds-select [options]=\"services\" optionLabel=\"name\" optionValue=\"id\"\n * placeholder=\"Choisir un service\" [(ngModel)]=\"serviceId\" filter clearable />\n *\n * @example\n * <sds-select [options]=\"categories\" optionLabel=\"name\" optionValue=\"id\" [(ngModel)]=\"categoryId\">\n * <ng-template sdsSelectOption let-option>\n * <span class=\"dot\" [style.background]=\"option.color\"></span> {{ option.name }}\n * </ng-template>\n * </sds-select>\n */\n@Component({\n selector: 'sds-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, NgTemplateOutlet],\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 transition-colors focus:outline-none\"\n [class]=\"wrapperClasses()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (optionTpl() && selectedOption()) {\n <span class=\"flex flex-1 items-center gap-2 truncate pl-3.5 text-ink\">\n <ng-container\n [ngTemplateOutlet]=\"optionTpl()!.template\"\n [ngTemplateOutletContext]=\"triggerContext()!\"\n />\n </span>\n } @else {\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\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 inline-flex shrink-0 items-center justify-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 <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 @if (optionTpl()) {\n <span class=\"flex min-w-0 flex-1 items-center gap-2\">\n <ng-container\n [ngTemplateOutlet]=\"optionTpl()!.template\"\n [ngTemplateOutletContext]=\"optionContext(opt, i)\"\n />\n </span>\n } @else {\n <span class=\"truncate\">{{ opt.label }}</span>\n }\n @if (isSelected(opt.value)) {\n <sds-icon name=\"check\" [size]=\"16\" class=\"shrink-0 text-brand-600\" />\n }\n </li>\n } @empty {\n @if (emptyTpl()) {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">\n <ng-container\n [ngTemplateOutlet]=\"emptyTpl()!.template\"\n [ngTemplateOutletContext]=\"{ $implicit: filterText(), filterText: filterText() }\"\n />\n </li>\n } @else {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">{{ emptyMessage() }}</li>\n }\n }\n </ul>\n\n @if (footerTpl()) {\n <div class=\"border-t border-border\">\n <ng-container\n [ngTemplateOutlet]=\"footerTpl()!.template\"\n [ngTemplateOutletContext]=\"footerContext()\"\n />\n </div>\n }\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 appearance = input<SdsSelectAppearance>('default');\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 /** Optional projected `<ng-template sdsSelectOption>` — custom option + selected-value rendering. */\n protected readonly optionTpl = contentChild(SdsSelectOption);\n /** Optional projected `<ng-template sdsSelectEmpty>` — custom no-results content. */\n protected readonly emptyTpl = contentChild(SdsSelectEmpty);\n /** Optional projected `<ng-template sdsSelectFooter>` — a sticky footer action. */\n protected readonly footerTpl = contentChild(SdsSelectFooter);\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 protected readonly filled = computed(() => this.appearance() === 'filled');\n protected readonly onBrand = computed(() => this.appearance() === 'on-brand');\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 if (this.filled()) {\n // border-transparent (not border-0) so a filled field is the same height as a bordered one when a\n // form mixes them — mirrors sds-input's filled appearance.\n parts.push('border-transparent bg-muted text-ink');\n parts.push(\n this.error()\n ? 'border-danger focus:ring-2 focus:ring-danger/25'\n : 'focus:ring-2 focus:ring-brand-500/25',\n );\n } else if (this.onBrand()) {\n parts.push('bg-white/10 text-white');\n parts.push(\n this.error()\n ? 'border-danger focus:ring-2 focus:ring-danger/25'\n : 'border-white/15 focus:border-white/40 focus:ring-2 focus:ring-white/20',\n );\n } else {\n parts.push('bg-white text-ink');\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 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, raw };\n }\n return { label: String(raw), value: raw, disabled: false, raw };\n }\n\n /** Context for a projected option template (an option row). */\n protected optionContext(opt: NormOption, index: number): SdsSelectOptionContext {\n return {\n $implicit: opt.raw,\n option: opt.raw,\n label: opt.label,\n value: opt.value,\n selected: this.isSelected(opt.value),\n disabled: opt.disabled,\n index,\n };\n }\n\n /** Context for the option template reused in the trigger to render the selected value. */\n protected readonly triggerContext = computed<SdsSelectOptionContext | null>(() => {\n const sel = this.selectedOption();\n return sel ? this.optionContext(sel, -1) : null;\n });\n\n /** Context for a projected footer template. */\n protected footerContext() {\n return { $implicit: this.filterText(), filterText: this.filterText(), close: () => this.close(true) };\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 contentChild,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n numberAttribute,\n OnDestroy,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SdsIcon } from '../icon/sds-icon';\nimport {\n SdsSelectEmpty,\n SdsSelectFooter,\n SdsSelectOption,\n SdsSelectOptionContext,\n} from './sds-select-templates';\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 /** The original option (object or primitive), passed to a custom option template. */\n raw: unknown;\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 * Project template directives to customise the panel:\n * - `<ng-template sdsSelectOption let-option>` — the content of each option row, after its\n * checkbox (see {@link SdsSelectOption}); context: the raw `option` (implicit), plus `label`,\n * `value`, `selected`, `disabled`, `index`.\n * - `<ng-template sdsSelectEmpty let-query>` — replaces the \"no results\" message (see {@link SdsSelectEmpty}).\n * - `<ng-template sdsSelectFooter let-close=\"close\">` — a sticky footer action (see {@link SdsSelectFooter});\n * `close()` dismisses the panel.\n *\n * @example\n * <sds-multi-select [options]=\"services\" optionLabel=\"name\" optionValue=\"code\"\n * display=\"chip\" filter [(ngModel)]=\"codes\" />\n *\n * @example\n * <sds-multi-select [options]=\"tags\" optionLabel=\"name\" optionValue=\"id\" [(ngModel)]=\"tagIds\">\n * <ng-template sdsSelectOption let-option>\n * <span class=\"dot\" [style.background]=\"option.color\"></span> {{ option.name }}\n * </ng-template>\n * </sds-multi-select>\n */\n@Component({\n selector: 'sds-multi-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon, NgTemplateOutlet],\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 @if (optionTpl()) {\n <span class=\"flex min-w-0 flex-1 items-center gap-2\">\n <ng-container\n [ngTemplateOutlet]=\"optionTpl()!.template\"\n [ngTemplateOutletContext]=\"optionContext(opt, i)\"\n />\n </span>\n } @else {\n <span class=\"truncate\">{{ opt.label }}</span>\n }\n </li>\n } @empty {\n @if (emptyTpl()) {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">\n <ng-container\n [ngTemplateOutlet]=\"emptyTpl()!.template\"\n [ngTemplateOutletContext]=\"{ $implicit: filterText(), filterText: filterText() }\"\n />\n </li>\n } @else {\n <li class=\"px-3 py-2 text-sm text-ink-faint\">{{ emptyMessage() }}</li>\n }\n }\n </ul>\n\n @if (footerTpl()) {\n <div class=\"border-t border-border\">\n <ng-container\n [ngTemplateOutlet]=\"footerTpl()!.template\"\n [ngTemplateOutletContext]=\"footerContext()\"\n />\n </div>\n }\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 /** Optional projected `<ng-template sdsSelectOption>` — custom option-row rendering. */\n protected readonly optionTpl = contentChild(SdsSelectOption);\n /** Optional projected `<ng-template sdsSelectEmpty>` — custom no-results content. */\n protected readonly emptyTpl = contentChild(SdsSelectEmpty);\n /** Optional projected `<ng-template sdsSelectFooter>` — a sticky footer action. */\n protected readonly footerTpl = contentChild(SdsSelectFooter);\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, raw };\n }\n return { label: String(raw), value: raw, disabled: false, raw };\n }\n\n /** Context for a projected option template (an option row). */\n protected optionContext(opt: NormOption, index: number): SdsSelectOptionContext {\n return {\n $implicit: opt.raw,\n option: opt.raw,\n label: opt.label,\n value: opt.value,\n selected: this.isSelected(opt.value),\n disabled: opt.disabled,\n index,\n };\n }\n\n /** Context for a projected footer template. */\n protected footerContext() {\n return { $implicit: this.filterText(), filterText: this.filterText(), close: () => this.close(true) };\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]=\"countryAriaLabel()\"\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 [attr.aria-label]=\"clearLabel()\"\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]=\"searchPlaceholder()\"\n [attr.aria-label]=\"searchLabel()\"\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\">{{ noResultsLabel() }}</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 /**\n * Accessible name of the country selector. `{country}` is replaced with the selected country's\n * name. A token rather than a prefix because word order differs per language. French default so\n * existing consumers are unchanged; translate it in any app serving more than one language.\n *\n * Note the interpolated country NAME still comes from the library's built-in country table, which\n * is French-only — translating this template fixes the wrapper, not the name inside it.\n */\n readonly countryLabel = input<string>('Indicatif pays : {country}');\n\n /**\n * Accessible name for the clear button. It is icon-only, so this string is its ONLY accessible\n * name — a hardcoded French one is simply wrong in every other locale.\n */\n readonly clearLabel = input<string>('Effacer');\n\n /** Accessible name for the country-search field inside the dropdown. */\n readonly searchLabel = input<string>('Rechercher un pays');\n\n /** Placeholder text of the country-search field. */\n readonly searchPlaceholder = input<string>('Rechercher un pays…');\n\n /** Shown in place of the list when no country matches the filter. */\n readonly noResultsLabel = input<string>('Aucun pays');\n\n /**\n * Built-in validation messages. `{lengths}` is replaced with the country's accepted national\n * lengths, joined with {@link lengthSeparator}. Siblings of {@link requiredMessage}, which was\n * already translatable — these two were not, so an English or Dutch app showed French errors.\n */\n readonly incompleteMessage = input<string>('Numéro incomplet — {lengths} chiffres attendus');\n readonly invalidMessage = input<string>('Numéro invalide — {lengths} chiffres attendus');\n\n /** Joins the accepted lengths when a country allows more than one (e.g. \"8 ou 9\"). */\n readonly lengthSeparator = input<string>(' ou ');\n\n /**\n * Auto-generated example hint (see {@link showExampleHint}). `{number}` is replaced with the\n * formatted international example number.\n */\n readonly exampleHintTemplate = input<string>('Ex. {number}');\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 const number = `+${c.dialCode} ${sdsFormatNational(c.example, c.format)}`;\n return this.exampleHintTemplate().replace('{number}', number);\n });\n\n protected readonly countryAriaLabel = computed(() =>\n this.countryLabel().replace('{country}', this.country().name),\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(this.lengthSeparator());\n const len = this.national().length;\n const min = Math.min(...lengths);\n if (len < min) return this.incompleteMessage().replace('{lengths}', expected);\n return this.invalidMessage().replace('{lengths}', expected);\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\" [attr.aria-label]=\"paginationLabel()\">\n @if (showFirstLastIcon()) {\n <button\n type=\"button\"\n [class]=\"navClass(firstDisabled())\"\n [disabled]=\"firstDisabled()\"\n [attr.aria-label]=\"firstPageLabel()\"\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 [attr.aria-label]=\"previousPageLabel()\"\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]=\"pageLinkAriaLabel(p)\"\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 [attr.aria-label]=\"nextPageLabel()\"\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 [attr.aria-label]=\"lastPageLabel()\"\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]=\"rowsPerPageLabel()\"\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 [attr.aria-label]=\"jumpToPageAriaLabel()\"\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} of {totalRecords}');\n readonly showJumpToPageInput = input(false, { transform: booleanAttribute });\n readonly rowsPerPageLabel = input<string>('Rows per page');\n readonly jumpToPageLabel = input<string>('Go to');\n\n /**\n * Accessible name for the <nav> wrapping the page controls, and for the four icon-only\n * first/prev/next/last buttons. Those buttons have no text, so these strings are their ONLY\n * accessible names — the English defaults suit an English-first app, but an app serving more than\n * one language MUST pass translated values.\n */\n readonly paginationLabel = input<string>('Pagination');\n readonly firstPageLabel = input<string>('First page');\n readonly previousPageLabel = input<string>('Previous page');\n readonly nextPageLabel = input<string>('Next page');\n readonly lastPageLabel = input<string>('Last page');\n\n /**\n * Accessible name of a numbered page link. `{page}` is replaced with the 1-based page number —\n * a token rather than a prefix because word order is not the same in every language.\n */\n readonly pageLinkLabel = input<string>('Page {page}');\n\n /**\n * Accessible name of the jump-to-page field. Separate from the visible {@link jumpToPageLabel}\n * (\"Go to\") on purpose: the visible text is terse because it sits next to the field, while the\n * accessible name has to stand alone.\n */\n readonly jumpToPageAriaLabel = input<string>('Go to page');\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 pageLinkAriaLabel(page: number): string {\n return this.pageLinkLabel().replace('{page}', String(page + 1));\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]=\"currentPageReportTemplate()\"\n [rowsPerPageLabel]=\"rowsPerPageLabel()\"\n [paginationLabel]=\"paginationLabel()\"\n [firstPageLabel]=\"firstPageLabel()\"\n [previousPageLabel]=\"previousPageLabel()\"\n [nextPageLabel]=\"nextPageLabel()\"\n [lastPageLabel]=\"lastPageLabel()\"\n [pageLinkLabel]=\"pageLinkLabel()\"\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 /**\n * Paginator labels, forwarded to the inner <sds-paginator>. English defaults suit an English-first\n * app; an app serving more than one language MUST pass translated values (the four nav labels and\n * {@link pageLinkLabel} name icon-only controls, so they are their ONLY accessible name).\n * {@link currentPageReportTemplate} tokens: {first} {last} {totalRecords} {currentPage} {totalPages} {rows}.\n */\n readonly currentPageReportTemplate = input<string>('{first} – {last} of {totalRecords}');\n readonly rowsPerPageLabel = input<string>('Rows per page');\n readonly paginationLabel = input<string>('Pagination');\n readonly firstPageLabel = input<string>('First page');\n readonly previousPageLabel = input<string>('Previous page');\n readonly nextPageLabel = input<string>('Next page');\n readonly lastPageLabel = input<string>('Last page');\n /** Accessible name of a numbered page link; `{page}` is the 1-based page number. */\n readonly pageLinkLabel = input<string>('Page {page}');\n\n readonly globalFilter = input(false, { transform: booleanAttribute });\n readonly globalFilterPlaceholder = input<string>('Search…');\n /** Accessible name for the global-filter input. */\n readonly globalFilterAriaLabel = input<string>('Search the table');\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>('No data');\n readonly caption = input<string>('');\n /** Fallback accessible name for the `<table>` when no `caption` is set. */\n readonly ariaLabel = input<string>('Data table');\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\nexport type SdsToastKind = 'success' | 'error' | 'info';\n\nexport interface SdsToast {\n id: number;\n kind: SdsToastKind;\n text: string;\n}\n\n/**\n * A tiny transient-notification bus. Application code calls {@link success} / {@link error} / {@link info}\n * after an action; a single {@link SdsToastHost} mounted in the app shell renders the queue and each toast\n * auto-dismisses. Deliberately minimal — no positions, no actions-in-toast — because it exists to confirm\n * an action, not to be a notification centre.\n *\n * `providedIn: 'root'`, so injecting it anywhere shares one queue:\n *\n * ```ts\n * private readonly toasts = inject(SdsToastService);\n * this.toasts.success('Enregistré.');\n * ```\n *\n * Mount the host once (e.g. in the shell): `<sds-toast-host />`.\n */\n@Injectable({ providedIn: 'root' })\nexport class SdsToastService {\n private seq = 0;\n readonly toasts = signal<SdsToast[]>([]);\n\n /** How long a toast stays, in ms, by kind. Errors linger; success/info are brief. */\n private static readonly TTL: Record<SdsToastKind, number> = {\n success: 3500,\n info: 3500,\n error: 6000,\n };\n\n success(text: string): void {\n this.push('success', text);\n }\n error(text: string): void {\n this.push('error', text);\n }\n info(text: string): void {\n this.push('info', text);\n }\n\n dismiss(id: number): void {\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n private push(kind: SdsToastKind, text: string): void {\n const id = ++this.seq;\n this.toasts.update((list) => [...list, { id, kind, text }]);\n setTimeout(() => this.dismiss(id), SdsToastService.TTL[kind]);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\nimport { SdsToast, SdsToastKind, SdsToastService } from './sds-toast.service';\n\n/**\n * Renders the {@link SdsToastService} queue, fixed bottom-centre. Mount it once, in the app shell:\n * `<sds-toast-host />`. Application code pushes toasts through the injected service.\n *\n * Accessibility: the two live regions are ALWAYS in the DOM (even when empty), because a live region must\n * pre-exist for its later content changes to be announced. Errors go to an assertive `role=\"alert\"` region\n * so a failure interrupts; success/info go to a polite region so they queue.\n */\n@Component({\n selector: 'sds-toast-host',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, SdsIcon],\n template: `\n <div class=\"pointer-events-none fixed inset-x-0 bottom-6 z-[100] flex flex-col items-center gap-2 px-4\">\n <div role=\"alert\" aria-live=\"assertive\" class=\"flex w-full flex-col items-center gap-2\">\n @for (t of errors(); track t.id) {\n <ng-container [ngTemplateOutlet]=\"toast\" [ngTemplateOutletContext]=\"{ t }\" />\n }\n </div>\n <div aria-live=\"polite\" class=\"flex w-full flex-col items-center gap-2\">\n @for (t of notices(); track t.id) {\n <ng-container [ngTemplateOutlet]=\"toast\" [ngTemplateOutletContext]=\"{ t }\" />\n }\n </div>\n </div>\n\n <ng-template #toast let-t=\"t\">\n <div\n class=\"pointer-events-auto flex max-w-md items-start gap-2.5 rounded-card border bg-surface px-4 py-3 text-sm shadow-lg\"\n [class]=\"border(t.kind)\"\n >\n <sds-icon [name]=\"icon(t.kind)\" [size]=\"18\" class=\"mt-0.5 shrink-0\" [class]=\"tone(t.kind)\" />\n <span class=\"text-ink\">{{ t.text }}</span>\n <button\n type=\"button\"\n (click)=\"toasts.dismiss(t.id)\"\n [attr.aria-label]=\"closeLabel()\"\n class=\"ml-1 shrink-0 rounded p-0.5 text-ink-faint hover:bg-muted hover:text-ink focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500\"\n >\n <sds-icon name=\"x\" [size]=\"15\" />\n </button>\n </div>\n </ng-template>\n `,\n})\nexport class SdsToastHost {\n readonly toasts = inject(SdsToastService);\n\n /**\n * Accessible name for each toast's close button. French default so existing consumers are unchanged; the\n * button is icon-only, so an app serving more than one language MUST translate it.\n */\n readonly closeLabel = input<string>('Fermer');\n\n protected readonly errors = computed(() => this.toasts.toasts().filter((t) => t.kind === 'error'));\n protected readonly notices = computed(() => this.toasts.toasts().filter((t) => t.kind !== 'error'));\n\n protected icon(kind: SdsToastKind): SdsIconName {\n return kind === 'success' ? 'check-circle' : kind === 'error' ? 'alert-circle' : 'info';\n }\n protected tone(kind: SdsToastKind): string {\n return kind === 'success' ? 'text-success' : kind === 'error' ? 'text-danger' : 'text-accent-blue';\n }\n protected border(kind: SdsToast['kind']): string {\n const accent =\n kind === 'success' ? 'border-l-success' : kind === 'error' ? 'border-l-danger' : 'border-l-accent-blue';\n return `border-l-4 ${accent} border-y-border border-r-border`;\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 computed,\n inject,\n input,\n} from '@angular/core';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SidebarStore } from '../sidebar/sidebar-store';\n\nexport type SdsTopbarAppearance = 'brand' | 'surface';\n\n/**\n * Application top bar: a logo slot, the app name, and three slots the app fills.\n *\n * Two appearances. `brand` is the gradient-and-wave bar an internal tool wants. `surface` is white on\n * a hairline border, for a bar that has to sit under a customer-facing page without dominating it —\n * a storefront header is a bar, but it is not a banner. The slots and the layout are identical in\n * both; only the paint differs, so a consumer app gets the same structure without the brand fill.\n *\n * It deliberately owns NO account UI. It used to render the signed-in user and a logout button, which\n * forced every consumer into one shape — no dropdown, no email, no menu, no busy state, and an\n * icon-only button whose accessible name the library had to guess a language for. What an app needs\n * beside its own brand bar differs per app, so the bar supplies the surface and the app supplies the\n * contents: project them into `[sdsActions]`.\n *\n * Slots, left to right: `[sdsLogo]`, `[sdsLead]` (beside the name — a location or workspace picker),\n * `[sdsCenter]` (the flexible middle — a search field), `[sdsActions]` (the right edge).\n *\n * @example\n * <sds-topbar appName=\"WebApp\">\n * <img sdsLogo src=\"logo.svg\" alt=\"\" />\n * <my-address-picker sdsLead />\n * <my-search sdsCenter />\n * <my-account-menu sdsActions />\n * </sds-topbar>\n */\n@Component({\n selector: 'sds-topbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <header class=\"relative z-30\" [class]=\"shellClasses()\" style=\"height: var(--sds-topbar-h)\">\n <!--\n Decorative wave. The clip lives HERE, on the wave's own wrapper, and not on the header.\n The header used to carry overflow-hidden, which also clipped anything projected into\n [sdsActions] — so an app menu or dropdown, the very thing that slot exists for, rendered as a\n 4px sliver. The wave still needs clipping; nothing else does.\n -->\n @if (appearance() === 'brand') {\n <span class=\"pointer-events-none absolute inset-0 overflow-hidden\" aria-hidden=\"true\">\n <svg\n class=\"pointer-events-none absolute inset-y-0 right-0 h-full w-2/3 min-w-105\"\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 </span>\n }\n\n <!--\n The band is always full-bleed — the gradient and the wave span the viewport — while the\n CONTENTS are constrained by [contentWidth], so a bar over a centred page lines up with it\n instead of running to the edges. Empty (the default) leaves the contents full-bleed too,\n which is what a dashboard shell wants.\n -->\n <div\n class=\"relative mx-auto flex h-full items-center justify-between px-4 sm:px-6\"\n [class]=\"contentWidth()\"\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 transition-colors focus-visible:outline-none focus-visible:ring-2 lg:hidden\"\n [class]=\"menuButtonClasses()\"\n [attr.aria-label]=\"menuLabel()\"\n (click)=\"store.toggleMobile()\"\n >\n <sds-icon name=\"menu\" [size]=\"22\" />\n </button>\n }\n <ng-content select=\"[sdsLogo]\" />\n <!--\n shrink-0 + whitespace-nowrap, both required. The left block is a flex row, so without them a\n two-word app name wraps to a second line INSIDE a bar whose height is fixed at\n --sds-topbar-h, and the name is clipped by its own bar. It surfaced at 375px on a bar\n carrying a logo, a wordmark and a two-syllable name; it is wrong at every width.\n\n The name never truncates and never hides: it is the answer to \"which app am I in\", which on a\n platform of five same-branded apps is the one thing the bar must not drop. An app whose left\n block is too crowded for a phone hides ITS OWN wordmark under sm and keeps the mark.\n -->\n @if (appName()) {\n <span class=\"h-7 w-px shrink-0\" [class]=\"appearance() === 'brand' ? 'bg-white/30' : 'bg-border'\"></span>\n <span class=\"shrink-0 whitespace-nowrap text-xl font-bold tracking-tight\">{{ appName() }}</span>\n }\n <ng-content select=\"[sdsLead]\" />\n </div>\n\n <!-- Flexible middle: takes the space the two ends leave, and is skipped entirely when empty. -->\n <div class=\"relative flex min-w-0 flex-1 items-center justify-center px-2\">\n <ng-content select=\"[sdsCenter]\" />\n </div>\n\n <!-- Right: whatever the app puts here -->\n <div class=\"relative flex items-center gap-3 sm:gap-4\">\n <ng-content select=\"[sdsActions]\" />\n </div>\n </div>\n </header>\n `,\n})\nexport class SdsTopbar {\n protected readonly store = inject(SidebarStore);\n\n readonly appName = input<string>('');\n\n /**\n * Width of the bar's CONTENTS, as Tailwind width utilities — e.g. `\"w-full max-w-7xl\"`.\n *\n * The coloured band always spans the viewport; this constrains only what sits on it, so the logo and\n * the actions line up with a page whose own content is centred at the same width. Default is empty,\n * i.e. contents run edge to edge, which is right for a full-bleed dashboard shell.\n *\n * A class string rather than an enum on purpose: apps already state their content width as a Tailwind\n * utility, and this way the bar is given the SAME string rather than a name that has to be kept in\n * sync with it.\n */\n readonly contentWidth = input<string>('w-full');\n /** Show the mobile hamburger that toggles the sidebar drawer (< lg). */\n readonly menuButton = input(true, { transform: booleanAttribute });\n\n /**\n * Accessible name for the hamburger. Defaults to French so nothing changes for existing consumers,\n * but any app serving more than one language MUST pass a translated value — an icon-only control's\n * aria-label is its only name, and a hardcoded one is simply wrong in every other locale.\n */\n readonly menuLabel = input<string>('Ouvrir le menu');\n\n /** `brand` (default) paints the gradient and the wave; `surface` is white on a hairline border. */\n readonly appearance = input<SdsTopbarAppearance>('brand');\n\n protected readonly shellClasses = computed(() =>\n this.appearance() === 'brand'\n ? 'bg-linear-to-r from-brand-800 via-brand-700 to-brand-600 text-white'\n : 'border-b border-border bg-surface text-ink',\n );\n\n protected readonly menuButtonClasses = computed(() =>\n this.appearance() === 'brand'\n ? 'text-white/85 hover:bg-white/10 hover:text-white focus-visible:ring-white/40'\n : 'text-ink-soft hover:bg-muted hover:text-ink focus-visible:ring-brand-500/40',\n );\n\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 input,\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() ? expandLabel() : collapseLabel()\"\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 [attr.aria-label]=\"closeLabel()\"\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\n /**\n * Accessible names for the rail's three icon-only controls. French defaults keep existing consumers\n * unchanged; a multilingual app must pass translated values, since an icon-only button's aria-label\n * is its only name.\n */\n readonly collapseLabel = input<string>('Replier le menu');\n readonly expandLabel = input<string>('Déplier le menu');\n readonly closeLabel = input<string>('Fermer le menu');\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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, map } from 'rxjs';\nimport { SdsIcon } from '../icon/sds-icon';\nimport { SdsIconName } from '../icon/icon-registry';\nimport { SidebarStore } from './sidebar-store';\n\n/**\n * Groups nav items under an optional uppercase section label.\n *\n * Two modes:\n * - **Section** (default) — a static label over its items. The label is replaced by a divider when\n * the rail is collapsed.\n * - **Collapsible** (`[collapsible]`) — the label becomes a button that expands and collapses the\n * group. Set `[basePath]` and the group opens itself whenever the active route is inside it, so a\n * deep link or a browser Back lands with the right section already open instead of the person\n * having to find and re-open it.\n *\n * Collapsible mode exists because a flat rail stops scaling somewhere around a dozen destinations,\n * and the alternative — showing every child of every section at once — buries the ones in use.\n *\n * On the collapsed desktop rail there is nowhere to put a header, so a collapsible group renders\n * exactly like a section: divider, children visible. Hiding them there would leave the rail with\n * unreachable destinations and no affordance to reveal them.\n */\n@Component({\n selector: 'sds-nav-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdsIcon],\n host: { class: 'block' },\n template: `\n <div class=\"mt-5 first:mt-3\">\n @if (label()) {\n @if (collapsible()) {\n <!--\n A collapsible header is styled as a NAV ROW, not as a section caption. A small uppercase\n caption says \"everything under me belongs to me\" — which is a lie the moment the group is\n collapsed and the next section's items sit directly beneath it. At row scale, with an icon\n and a chevron, it reads as the control it is.\n\n It renders on the collapsed rail too, as an icon alone, because there it is the group's\n ONLY representation: the children are hidden (a child with no icon of its own would be a\n blank row), so the app is expected to treat the toggle as \"take me into this section\" —\n which is what expandedChange already means.\n -->\n <button\n type=\"button\"\n class=\"mb-1 flex h-10 w-full items-center gap-3 rounded-control px-3 text-sm font-medium\n text-white/70 transition-colors hover:bg-white/8 hover:text-white\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40\"\n [class.lg:justify-center]=\"collapsed()\"\n [class.text-white]=\"routeActive()\"\n [attr.aria-expanded]=\"collapsed() ? null : expanded()\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-label]=\"collapsed() ? label() : null\"\n (click)=\"toggle()\"\n >\n @if (icon()) {\n <sds-icon [name]=\"icon()!\" [size]=\"20\" class=\"shrink-0\" />\n }\n <span class=\"flex-1 truncate text-left\" [class.lg:hidden]=\"collapsed()\">\n {{ label() }}\n </span>\n <sds-icon\n name=\"chevron-down\"\n [size]=\"16\"\n class=\"shrink-0 text-white/50 transition-transform\"\n [class.lg:hidden]=\"collapsed()\"\n [class.rotate-180]=\"expanded()\"\n />\n </button>\n } @else if (collapsed()) {\n <div class=\"mx-3 mb-2 mt-2 h-px bg-white/10\"></div>\n } @else {\n <p class=\"mb-1.5 px-3 text-[11px] font-semibold uppercase tracking-wider text-white/60\">\n {{ label() }}\n </p>\n }\n }\n\n <div [class]=\"childrenClass()\">\n <ng-content />\n </div>\n </div>\n `,\n})\nexport class SdsNavGroup {\n private readonly store = inject(SidebarStore);\n private readonly router = inject(Router);\n\n readonly label = input<string>('');\n\n /** Turn the label into an expand/collapse control. */\n readonly collapsible = input(false, { transform: booleanAttribute });\n\n /** Icon for a collapsible header, so it reads at the same weight as the items it sits among. */\n readonly icon = input<SdsIconName | null>(null);\n\n /**\n * URL prefix owned by this group, e.g. `/payments`. While the active route starts with it the\n * group counts as active and opens itself — unless the person has explicitly toggled it since.\n */\n readonly basePath = input<string | null>(null);\n\n /** Emits the new state on every manual toggle. Not emitted for route-driven auto-expansion. */\n readonly expandedChange = output<boolean>();\n\n /** Explicit user choice; null means \"follow the route\". */\n private readonly manual = signal<boolean | null>(null);\n\n private readonly url = toSignal(\n this.router.events.pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n map((e) => e.urlAfterRedirects),\n ),\n { initialValue: this.router.url },\n );\n\n /** True while the active route lives inside this group. */\n protected readonly routeActive = computed(() => {\n const base = this.basePath();\n return !!base && this.url().startsWith(base);\n });\n\n protected readonly expanded = computed(() => this.manual() ?? this.routeActive());\n\n protected readonly collapsed = this.store.collapsed;\n\n /**\n * A plain section always shows its items — they carry their own icons, so they survive the collapsed\n * rail. A collapsible group hides its children there instead: its children are sub-destinations and\n * typically have no icon, which on an icon-only rail is a row with nothing in it.\n */\n protected readonly childrenVisible = computed(\n () => !this.collapsible() || (!this.collapsed() && this.expanded()),\n );\n\n /**\n * One binding rather than `[class]` alongside `[class.hidden]` — mixing a whole-list binding with a\n * single-class toggle on the same element depends on Angular's styling precedence to resolve, which\n * is a subtlety no template should rest on.\n *\n * The indent rule appears only on an expanded collapsible group on the full-width rail: it is what\n * shows the children belong to the header above them.\n */\n protected readonly childrenClass = computed(() => {\n const parts = ['flex flex-col gap-1'];\n if (!this.childrenVisible()) {\n parts.push('hidden');\n }\n if (this.collapsible() && !this.collapsed()) {\n parts.push('ml-5 border-l border-white/10 pl-3');\n }\n return parts.join(' ');\n });\n\n /**\n * On the collapsed rail there is nothing to expand into, so the toggle always reports \"opening\" —\n * the app's handler takes that as the cue to navigate into the section, which is the only useful\n * meaning the control can have there.\n */\n protected toggle(): void {\n const next = this.collapsed() ? true : !this.expanded();\n this.manual.set(next);\n this.expandedChange.emit(next);\n }\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/input-number/sds-input-number';\nexport * from './lib/localized-input/sds-localized-input';\nexport * from './lib/otp-input/sds-otp-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/select/sds-select-templates';\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';\nexport * from './lib/toast/sds-toast.service';\nexport * from './lib/toast/sds-toast-host';\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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"}
|