@sinequa/galactik 0.0.0-stage → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -2
- package/fesm2022/sinequa-galactik.mjs +23825 -0
- package/fesm2022/sinequa-galactik.mjs.map +1 -0
- package/package.json +28 -3
- package/types/sinequa-galactik.d.ts +7801 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sinequa-galactik.mjs","names":[],"sources":["../../../projects/galactik/icons/arrow-down.icon.ts","../../../projects/galactik/icons/arrow-down-za.icon.ts","../../../projects/galactik/icons/arrow-left.icon.ts","../../../projects/galactik/icons/arrow-right.icon.ts","../../../projects/galactik/icons/arrow-right-from-bracket.icon.ts","../../../projects/galactik/icons/arrow-up.icon.ts","../../../projects/galactik/icons/arrow-up-az.icon.ts","../../../projects/galactik/icons/arrow-up-right-from-square.icon.ts","../../../projects/galactik/icons/arrows-maximize.icon.ts","../../../projects/galactik/icons/award.icon.ts","../../../projects/galactik/icons/bars.icon.ts","../../../projects/galactik/icons/bell.icon.ts","../../../projects/galactik/icons/bookmark.icon.ts","../../../projects/galactik/icons/building.icon.ts","../../../projects/galactik/icons/calendar-clock.icon.ts","../../../projects/galactik/icons/calendar-day.icon.ts","../../../projects/galactik/icons/chat-plus.icon.ts","../../../projects/galactik/icons/check.icon.ts","../../../projects/galactik/icons/chevron-down.icon.ts","../../../projects/galactik/icons/chevron-left.icon.ts","../../../projects/galactik/icons/chevron-right.icon.ts","../../../projects/galactik/icons/chevron-up.icon.ts","../../../projects/galactik/icons/chevrons-left.icon.ts","../../../projects/galactik/icons/chevrons-right.icon.ts","../../../projects/galactik/icons/circle-check.icon.ts","../../../projects/galactik/icons/circle-x.icon.ts","../../../projects/galactik/icons/clipboard.icon.ts","../../../projects/galactik/icons/clock.icon.ts","../../../projects/galactik/icons/cog.icon.ts","../../../projects/galactik/icons/comment.icon.ts","../../../projects/galactik/icons/comments.icon.ts","../../../projects/galactik/icons/debug.icon.ts","../../../projects/galactik/icons/desktop.icon.ts","../../../projects/galactik/icons/download.icon.ts","../../../projects/galactik/icons/edit.icon.ts","../../../projects/galactik/icons/ellipsis.icon.ts","../../../projects/galactik/icons/ellipsis-vertical.icon.ts","../../../projects/galactik/icons/envelope.icon.ts","../../../projects/galactik/icons/external-link.icon.ts","../../../projects/galactik/icons/eye.icon.ts","../../../projects/galactik/icons/eye-slash.icon.ts","../../../projects/galactik/icons/file.icon.ts","../../../projects/galactik/icons/file-html.icon.ts","../../../projects/galactik/icons/file-magnifying-glass.icon.ts","../../../projects/galactik/icons/file-output.icon.ts","../../../projects/galactik/icons/file-search.icon.ts","../../../projects/galactik/icons/file-spreadsheet.icon.ts","../../../projects/galactik/icons/file-text.icon.ts","../../../projects/galactik/icons/files.icon.ts","../../../projects/galactik/icons/filter.icon.ts","../../../projects/galactik/icons/filter-x.icon.ts","../../../projects/galactik/icons/flag-english.icon.ts","../../../projects/galactik/icons/flag-french.icon.ts","../../../projects/galactik/icons/flag-german.icon.ts","../../../projects/galactik/icons/flashlight.icon.ts","../../../projects/galactik/icons/folder.icon.ts","../../../projects/galactik/icons/folder-open.icon.ts","../../../projects/galactik/icons/frown.icon.ts","../../../projects/galactik/icons/gear.icon.ts","../../../projects/galactik/icons/git-fork.icon.ts","../../../projects/galactik/icons/globe.icon.ts","../../../projects/galactik/icons/grid.icon.ts","../../../projects/galactik/icons/highlighter.icon.ts","../../../projects/galactik/icons/history.icon.ts","../../../projects/galactik/icons/home.icon.ts","../../../projects/galactik/icons/house.icon.ts","../../../projects/galactik/icons/image.icon.ts","../../../projects/galactik/icons/inbox.icon.ts","../../../projects/galactik/icons/info-circle.icon.ts","../../../projects/galactik/icons/key.icon.ts","../../../projects/galactik/icons/language.icon.ts","../../../projects/galactik/icons/lightbulb.icon.ts","../../../projects/galactik/icons/lightbulb-slash.icon.ts","../../../projects/galactik/icons/link.icon.ts","../../../projects/galactik/icons/list.icon.ts","../../../projects/galactik/icons/list-filter.icon.ts","../../../projects/galactik/icons/loading-circle.icon.ts","../../../projects/galactik/icons/magnifying-glass.icon.ts","../../../projects/galactik/icons/magnifying-glass-minus.icon.ts","../../../projects/galactik/icons/magnifying-glass-plus.icon.ts","../../../projects/galactik/icons/map-pin.icon.ts","../../../projects/galactik/icons/minus.icon.ts","../../../projects/galactik/icons/moon.icon.ts","../../../projects/galactik/icons/new-chat.icon.ts","../../../projects/galactik/icons/palette.icon.ts","../../../projects/galactik/icons/panel-left.icon.ts","../../../projects/galactik/icons/panel-right.icon.ts","../../../projects/galactik/icons/paperclip.icon.ts","../../../projects/galactik/icons/pen-to-square.icon.ts","../../../projects/galactik/icons/plus.icon.ts","../../../projects/galactik/icons/presentation.icon.ts","../../../projects/galactik/icons/question.icon.ts","../../../projects/galactik/icons/question-circle.icon.ts","../../../projects/galactik/icons/refresh.icon.ts","../../../projects/galactik/icons/robot.icon.ts","../../../projects/galactik/icons/rotate.icon.ts","../../../projects/galactik/icons/save.icon.ts","../../../projects/galactik/icons/search.icon.ts","../../../projects/galactik/icons/send.icon.ts","../../../projects/galactik/icons/send-horizontal.icon.ts","../../../projects/galactik/icons/slash.icon.ts","../../../projects/galactik/icons/sliders.icon.ts","../../../projects/galactik/icons/sparkles.icon.ts","../../../projects/galactik/icons/spinner.icon.ts","../../../projects/galactik/icons/square.icon.ts","../../../projects/galactik/icons/square-check.icon.ts","../../../projects/galactik/icons/square-check-big.icon.ts","../../../projects/galactik/icons/square-minus.icon.ts","../../../projects/galactik/icons/square-pen.icon.ts","../../../projects/galactik/icons/star.icon.ts","../../../projects/galactik/icons/sun-bright.icon.ts","../../../projects/galactik/icons/sync.icon.ts","../../../projects/galactik/icons/tag.icon.ts","../../../projects/galactik/icons/tags.icon.ts","../../../projects/galactik/icons/thumbs-down.icon.ts","../../../projects/galactik/icons/thumbs-up.icon.ts","../../../projects/galactik/icons/toggle-left.icon.ts","../../../projects/galactik/icons/toggle-right.icon.ts","../../../projects/galactik/icons/trash.icon.ts","../../../projects/galactik/icons/trash-can.icon.ts","../../../projects/galactik/icons/triangle-alert.icon.ts","../../../projects/galactik/icons/type.icon.ts","../../../projects/galactik/icons/undo.icon.ts","../../../projects/galactik/icons/upload.icon.ts","../../../projects/galactik/icons/user.icon.ts","../../../projects/galactik/icons/user-round.icon.ts","../../../projects/galactik/icons/user-secret.icon.ts","../../../projects/galactik/icons/video.icon.ts","../../../projects/galactik/icons/x-mark.icon.ts","../../../projects/galactik/ui/popover/inject-popover.ts","../../../projects/galactik/ui/popover/popover.directive.ts","../../../projects/galactik/ui/popover/inject-floating-panel.ts","../../../projects/galactik/ui/tooltip/tooltip.cva.ts","../../../projects/galactik/ui/tooltip/tooltip.ts","../../../projects/galactik/ui/menu/menu.cva.ts","../../../projects/galactik/ui/menu/menu.ts","../../../projects/galactik/ui/menu/menu-trigger.directive.ts","../../../projects/galactik/ui/tabs/tab-group.cva.ts","../../../projects/galactik/ui/tabs/tab-item.cva.ts","../../../projects/galactik/ui/tabs/tabs.ts","../../../projects/galactik/ui/combobox/listbox-activate-on-hover.ts","../../../projects/galactik/ui/select/select-label.ts","../../../projects/galactik/ui/select/select.cva.ts","../../../projects/galactik/ui/select/select.ts","../../../projects/galactik/ui/combobox/combobox-relay-workaround.ts","../../../projects/galactik/ui/input/input.cva.ts","../../../projects/galactik/ui/tag/tag.cva.ts","../../../projects/galactik/ui/tag/tag.ts","../../../projects/galactik/ui/tag/tag-remove.ts","../../../projects/galactik/ui/autocomplete/autocomplete.cva.ts","../../../projects/galactik/ui/autocomplete/autocomplete.ts","../../../projects/galactik/ui/button/button.cva.ts","../../../projects/galactik/ui/button/button.ts","../../../projects/galactik/ui/toggle/toggle.cva.ts","../../../projects/galactik/ui/toggle/toggle-group.cva.ts","../../../projects/galactik/ui/toggle/toggle-group.ts","../../../projects/galactik/ui/toggle/toggle.ts","../../../projects/galactik/ui/list/list.ts","../../../projects/galactik/ui/list/list.cva.ts","../../../projects/galactik/ui/list/list-item.ts","../../../projects/galactik/ui/tree/tree.ts","../../../projects/galactik/ui/tree/tree.cva.ts","../../../projects/galactik/ui/tree/tree-item.ts","../../../projects/galactik/ui/row-grid/row-list-base.ts","../../../projects/galactik/ui/row-grid/row-grid.ts","../../../projects/galactik/ui/row-feed/row-feed.ts","../../../projects/galactik/ui/switch/switch.cva.ts","../../../projects/galactik/ui/switch/switch.ts","../../../projects/galactik/ui/checkbox/checkbox.cva.ts","../../../projects/galactik/ui/checkbox/checkbox.ts","../../../projects/galactik/ui/radio/radio.cva.ts","../../../projects/galactik/ui/radio/radio.ts","../../../projects/galactik/ui/input/input.ts","../../../projects/galactik/ui/tag-input/tag-input.ts","../../../projects/galactik/ui/badge/badge.cva.ts","../../../projects/galactik/ui/badge/badge.ts","../../../projects/galactik/ui/bullet/bullet.cva.ts","../../../projects/galactik/ui/bullet/bullet.ts","../../../projects/galactik/ui/kbd/kbd.cva.ts","../../../projects/galactik/ui/kbd/kbd.ts","../../../projects/galactik/ui/avatar/avatar.cva.ts","../../../projects/galactik/ui/avatar/avatar-fallback.ts","../../../projects/galactik/ui/avatar/avatar-image.ts","../../../projects/galactik/ui/avatar/avatar.ts","../../../projects/galactik/ui/link/link.cva.ts","../../../projects/galactik/ui/link/link.ts","../../../projects/galactik/ui/textarea/textarea.cva.ts","../../../projects/galactik/ui/textarea/textarea.ts","../../../projects/galactik/ui/search/search-input.ts","../../../projects/galactik/ui/search/search-bar.cva.ts","../../../projects/galactik/ui/search/search-bar.ts","../../../projects/galactik/ui/dialog/dialog.interface.ts","../../../projects/galactik/ui/dialog/modal.cva.ts","../../../projects/galactik/ui/dialog/dialog-content.ts","../../../projects/galactik/ui/dialog/dialog-header.ts","../../../projects/galactik/ui/dialog/dialog.ts","../../../projects/galactik/ui/dialog/dialog-title.ts","../../../projects/galactik/ui/dialog/dialog-body.ts","../../../projects/galactik/ui/dialog/dialog-footer.ts","../../../projects/galactik/ui/dialog/call-ref.ts","../../../projects/galactik/ui/dialog/dialog.service.ts","../../../projects/galactik/ui/dialog/create-callable.ts","../../../projects/galactik/ui/sheet/sheet.cva.ts","../../../projects/galactik/ui/sheet/sheet.ts","../../../projects/galactik/ui/sheet/sheet-header.ts","../../../projects/galactik/ui/sheet/sheet-body.ts","../../../projects/galactik/ui/sheet/sheet-footer.ts","../../../projects/galactik/services/breakpoint-observer.service.ts","../../../projects/galactik/ui/sidebar/sidebar.cva.ts","../../../projects/galactik/ui/sidebar/sidebar.token.ts","../../../projects/galactik/ui/sidebar/sidebar.ts","../../../projects/galactik/ui/sidebar/sidebar-trigger.ts","../../../projects/galactik/ui/sidebar/sidebar-header.ts","../../../projects/galactik/ui/sidebar/sidebar-content.ts","../../../projects/galactik/ui/sidebar/sidebar-footer.ts","../../../projects/galactik/ui/sidebar/sidebar-group.ts","../../../projects/galactik/ui/sidebar/sidebar-item.ts","../../../projects/galactik/ui/sidebar/sidebar-inset.ts","../../../projects/galactik/ui/resizable/resizable.cva.ts","../../../projects/galactik/ui/resizable/resizable.token.ts","../../../projects/galactik/ui/resizable/resizable-handle.ts","../../../projects/galactik/ui/resizable/resizable-panel.ts","../../../projects/galactik/ui/resizable/resizable-panel-group.ts"],"sourcesContent":["/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-down.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-down, arrow-down-icon, ArrowDown, ArrowDownIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 5v14\"/>\n <path d=\"m19 12-7 7-7-7\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowDownIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowDownIcon instead.\n */\nexport const ArrowDownIconComponent = ArrowDownIcon;\nexport type ArrowDownIconComponent = ArrowDownIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-down-za.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-down-za, arrow-down-za-icon, ArrowDownZa, ArrowDownZaIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m3 16 4 4 4-4\" />\n <path d=\"M7 20V4\" />\n <path d=\"M15 4h5l-5 6h5\" />\n <path d=\"M15 20v-3.5a2.5 2.5 0 0 1 5 0V20\" />\n <path d=\"M20 18h-5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowDownZaIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowDownZaIcon instead.\n */\nexport const ArrowDownZaIconComponent = ArrowDownZaIcon;\nexport type ArrowDownZaIconComponent = ArrowDownZaIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-left.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-left, arrow-left-icon, ArrowLeft, ArrowLeftIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowLeftIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowLeftIcon instead.\n */\nexport const ArrowLeftIconComponent = ArrowLeftIcon;\nexport type ArrowLeftIconComponent = ArrowLeftIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-right.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-right, arrow-right-icon, ArrowRight, ArrowRightIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowRightIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowRightIcon instead.\n */\nexport const ArrowRightIconComponent = ArrowRightIcon;\nexport type ArrowRightIconComponent = ArrowRightIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-right-from-bracket.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-right-from-bracket, arrow-right-from-bracket-icon, ArrowRightFromBracket, ArrowRightFromBracketIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m16 17 5-5-5-5\" />\n <path d=\"M21 12H9\" />\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowRightFromBracketIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowRightFromBracketIcon instead.\n */\nexport const ArrowRightFromBracketIconComponent = ArrowRightFromBracketIcon;\nexport type ArrowRightFromBracketIconComponent = ArrowRightFromBracketIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-up.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-up, arrow-up-icon, ArrowUp, ArrowUpIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 5v14\"/>\n <path d=\"m19 12-7 7-7-7\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowUpIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowUpIcon instead.\n */\nexport const ArrowUpIconComponent = ArrowUpIcon;\nexport type ArrowUpIconComponent = ArrowUpIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-up-az.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-up-az, arrow-up-az-icon, ArrowUpAz, ArrowUpAzIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m3 8 4-4 4 4\"/>\n <path d=\"M7 4v16\"/>\n <path d=\"M20 8h-5\"/>\n <path d=\"M15 10V6.5a2.5 2.5 0 0 1 5 0V10\"/>\n <path d=\"M15 14h5l-5 6h5\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowUpAzIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowUpAzIcon instead.\n */\nexport const ArrowUpAzIconComponent = ArrowUpAzIcon;\nexport type ArrowUpAzIconComponent = ArrowUpAzIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrow-up-right-from-square.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrow-up-right-from-square, arrow-up-right-from-square-icon, ArrowUpRightFromSquare, ArrowUpRightFromSquareIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowUpRightFromSquareIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowUpRightFromSquareIcon instead.\n */\nexport const ArrowUpRightFromSquareIconComponent = ArrowUpRightFromSquareIcon;\nexport type ArrowUpRightFromSquareIconComponent = ArrowUpRightFromSquareIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/arrows-maximize.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"arrows-maximize, arrows-maximize-icon, ArrowsMaximize, ArrowsMaximizeIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15 3h6v6\" />\n <path d=\"m21 3-7 7\" />\n <path d=\"m3 21 7-7\" />\n <path d=\"M9 21H3v-6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ArrowsMaximizeIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ArrowsMaximizeIcon instead.\n */\nexport const ArrowsMaximizeIconComponent = ArrowsMaximizeIcon;\nexport type ArrowsMaximizeIconComponent = ArrowsMaximizeIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/award.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"award, award-icon, Award, AwardIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"6\" />\n <path d=\"M15.477 12.89 17 22l-5-3-5 3 1.523-9.11\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class AwardIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use AwardIcon instead.\n */\nexport const AwardIconComponent = AwardIcon;\nexport type AwardIconComponent = AwardIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/bars.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"bars, bars-icon, Bars, BarsIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M4 5h16\" />\n <path d=\"M4 12h16\" />\n <path d=\"M4 19h16\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class BarsIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use BarsIcon instead.\n */\nexport const BarsIconComponent = BarsIcon;\nexport type BarsIconComponent = BarsIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/bell.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"bell, bell-icon, Bell, BellIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class BellIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use BellIcon instead.\n */\nexport const BellIconComponent = BellIcon;\nexport type BellIconComponent = BellIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/bookmark.svg`.\n */\nimport { booleanAttribute, Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"bookmark, bookmark-icon, Bookmark, BookmarkIcon\",\n template: `\n @if (solid()) {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M6.32 2.577a49.255 49.255 0 0 1 11.36 0c1.497.174 2.57 1.46 2.57 2.93V21a.75.75 0 0 1-1.085.67L12 18.089l-7.165 3.583A.75.75 0 0 1 3.75 21V5.507c0-1.47 1.073-2.756 2.57-2.93Z\" clip-rule=\"evenodd\" />\n </svg>\n } @else {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.593 3.322c1.1.128 1.907 1.077 1.907 2.185V21L12 17.25 4.5 21V5.507c0-1.108.806-2.057 1.907-2.185a48.507 48.507 0 0 1 11.186 0Z\" />\n </svg>\n }\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class BookmarkIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n solid = input(false, { transform: booleanAttribute });\n}\n\n/**\n * @deprecated Use BookmarkIcon instead.\n */\nexport const BookmarkIconComponent = BookmarkIcon;\nexport type BookmarkIconComponent = BookmarkIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/building.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"building, building-icon, Building, BuildingIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 10h.01\"/>\n <path d=\"M12 14h.01\"/>\n <path d=\"M12 6h.01\"/>\n <path d=\"M16 10h.01\"/>\n <path d=\"M16 14h.01\"/>\n <path d=\"M16 6h.01\"/>\n <path d=\"M8 10h.01\"/>\n <path d=\"M8 14h.01\"/>\n <path d=\"M8 6h.01\"/>\n <path d=\"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/>\n <rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class BuildingIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use BuildingIcon instead.\n */\nexport const BuildingIconComponent = BuildingIcon;\nexport type BuildingIconComponent = BuildingIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/calendar-clock.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"calendar-clock, calendar-clock-icon, CalendarClock, CalendarClockIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4.29646 2C4.60433 2 4.85201 2.24769 4.85201 2.55556V3.48148H8.18535V2.55556C8.18535 2.24769 8.43303 2 8.7409 2C9.04877 2 9.29646 2.24769 9.29646 2.55556V3.48148H10.2224C11.0395 3.48148 11.7039 4.14583 11.7039 4.96296V5.33333V6.44444H11.3335H10.5928H8.00016H2.44461V12.3704C2.44461 12.5741 2.61127 12.7407 2.81498 12.7407H7.91914C8.20387 13.1759 8.56729 13.5532 8.9909 13.8519H2.81498C1.99785 13.8519 1.3335 13.1875 1.3335 12.3704V6.44444V5.33333V4.96296C1.3335 4.14583 1.99785 3.48148 2.81498 3.48148H3.7409V2.55556C3.7409 2.24769 3.98859 2 4.29646 2ZM8.00016 10.5185C8.00016 9.63446 8.35135 8.78662 8.97647 8.1615C9.6016 7.53638 10.4494 7.18519 11.3335 7.18519C12.2176 7.18519 13.0654 7.53638 13.6905 8.1615C14.3156 8.78662 14.6668 9.63446 14.6668 10.5185C14.6668 11.4026 14.3156 12.2504 13.6905 12.8755C13.0654 13.5007 12.2176 13.8519 11.3335 13.8519C10.4494 13.8519 9.6016 13.5007 8.97647 12.8755C8.35135 12.2504 8.00016 11.4026 8.00016 10.5185ZM11.3335 8.66667C11.1298 8.66667 10.9631 8.83333 10.9631 9.03704V10.5185C10.9631 10.7222 11.1298 10.8889 11.3335 10.8889H12.4446C12.6483 10.8889 12.815 10.7222 12.815 10.5185C12.815 10.3148 12.6483 10.1481 12.4446 10.1481H11.7039V9.03704C11.7039 8.83333 11.5372 8.66667 11.3335 8.66667Z\"\n fill=\"currentColor\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CalendarClockIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CalendarClockIcon instead.\n */\nexport const CalendarClockIconComponent = CalendarClockIcon;\nexport type CalendarClockIconComponent = CalendarClockIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/calendar-day.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"calendar-day, calendar-day-icon, CalendarDay, CalendarDayIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M8 2v4\"/>\n <path d=\"M16 2v4\"/>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/>\n <path d=\"M3 10h18\"/>\n <path d=\"M8 14h.01\"/>\n <path d=\"M12 14h.01\"/>\n <path d=\"M16 14h.01\"/>\n <path d=\"M8 18h.01\"/>\n <path d=\"M12 18h.01\"/>\n <path d=\"M16 18h.01\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CalendarDayIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CalendarDayIcon instead.\n */\nexport const CalendarDayIconComponent = CalendarDayIcon;\nexport type CalendarDayIconComponent = CalendarDayIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/chat-plus.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"chat-plus, chat-plus-icon, ChatPlus, ChatPlusIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\" />\n <path d=\"M12 8v6\" />\n <path d=\"M9 11h6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ChatPlusIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ChatPlusIcon instead.\n */\nexport const ChatPlusIconComponent = ChatPlusIcon;\nexport type ChatPlusIconComponent = ChatPlusIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/check.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"check, check-icon, Check, CheckIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CheckIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CheckIcon instead.\n */\nexport const CheckIconComponent = CheckIcon;\nexport type CheckIconComponent = CheckIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/chevron-down.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"chevron-down, chevron-down-icon, ChevronDown, ChevronDownIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ChevronDownIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ChevronDownIcon instead.\n */\nexport const ChevronDownIconComponent = ChevronDownIcon;\nexport type ChevronDownIconComponent = ChevronDownIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/chevron-left.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"chevron-left, chevron-left-icon, ChevronLeft, ChevronLeftIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ChevronLeftIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ChevronLeftIcon instead.\n */\nexport const ChevronLeftIconComponent = ChevronLeftIcon;\nexport type ChevronLeftIconComponent = ChevronLeftIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/chevron-right.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"chevron-right, chevron-right-icon, ChevronRight, ChevronRightIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ChevronRightIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ChevronRightIcon instead.\n */\nexport const ChevronRightIconComponent = ChevronRightIcon;\nexport type ChevronRightIconComponent = ChevronRightIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/chevron-up.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"chevron-up, chevron-up-icon, ChevronUp, ChevronUpIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ChevronUpIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ChevronUpIcon instead.\n */\nexport const ChevronUpIconComponent = ChevronUpIcon;\nexport type ChevronUpIconComponent = ChevronUpIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/chevrons-left.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"chevrons-left, chevrons-left-icon, ChevronsLeft, ChevronsLeftIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"11 17 6 12 11 7\"></polyline>\n <polyline points=\"18 17 13 12 18 7\"></polyline>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ChevronsLeftIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ChevronsLeftIcon instead.\n */\nexport const ChevronsLeftIconComponent = ChevronsLeftIcon;\nexport type ChevronsLeftIconComponent = ChevronsLeftIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/chevrons-right.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"chevrons-right, chevrons-right-icon, ChevronsRight, ChevronsRightIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"13 17 18 12 13 7\"></polyline>\n <polyline points=\"6 17 11 12 6 7\"></polyline>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ChevronsRightIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ChevronsRightIcon instead.\n */\nexport const ChevronsRightIconComponent = ChevronsRightIcon;\nexport type ChevronsRightIconComponent = ChevronsRightIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/circle-check.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"circle-check, circle-check-icon, CircleCheck, CircleCheckIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CircleCheckIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CircleCheckIcon instead.\n */\nexport const CircleCheckIconComponent = CircleCheckIcon;\nexport type CircleCheckIconComponent = CircleCheckIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/circle-x.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"circle-x, circle-x-icon, CircleX, CircleXIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6\" />\n <path d=\"m9 9 6 6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CircleXIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CircleXIcon instead.\n */\nexport const CircleXIconComponent = CircleXIcon;\nexport type CircleXIconComponent = CircleXIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/clipboard.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"clipboard, clipboard-icon, Clipboard, ClipboardIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"/>\n <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\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ClipboardIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ClipboardIcon instead.\n */\nexport const ClipboardIconComponent = ClipboardIcon;\nexport type ClipboardIconComponent = ClipboardIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/clock.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"clock, clock-icon, Clock, ClockIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12,6 12,12 16,14\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ClockIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ClockIcon instead.\n */\nexport const ClockIconComponent = ClockIcon;\nexport type ClockIconComponent = ClockIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/cog.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"cog, cog-icon, Cog, CogIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path\n d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CogIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CogIcon instead.\n */\nexport const CogIconComponent = CogIcon;\nexport type CogIconComponent = CogIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/comment.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"comment, comment-icon, Comment, CommentIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CommentIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CommentIcon instead.\n */\nexport const CommentIconComponent = CommentIcon;\nexport type CommentIconComponent = CommentIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/comments.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"comments, comments-icon, Comments, CommentsIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\" />\n <path d=\"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class CommentsIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use CommentsIcon instead.\n */\nexport const CommentsIconComponent = CommentsIcon;\nexport type CommentsIconComponent = CommentsIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/debug.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"debug, debug-icon, Debug, DebugIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 20v-9\" />\n <path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\" />\n <path d=\"M14.12 3.88 16 2\" />\n <path d=\"M21 21a4 4 0 0 0-3.81-4\" />\n <path d=\"M21 5a4 4 0 0 1-3.55 3.97\" />\n <path d=\"M22 13h-4\" />\n <path d=\"M3 21a4 4 0 0 1 3.81-4\" />\n <path d=\"M3 5a4 4 0 0 0 3.55 3.97\" />\n <path d=\"M6 13H2\" />\n <path d=\"m8 2 1.88 1.88\" />\n <path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class DebugIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use DebugIcon instead.\n */\nexport const DebugIconComponent = DebugIcon;\nexport type DebugIconComponent = DebugIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/desktop.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"desktop, desktop-icon, Desktop, DesktopIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m9 10 2 2 4-4\"/>\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"/>\n <path d=\"M12 17v4\"/>\n <path d=\"M8 21h8\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class DesktopIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use DesktopIcon instead.\n */\nexport const DesktopIconComponent = DesktopIcon;\nexport type DesktopIconComponent = DesktopIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/download.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"download, download-icon, Download, DownloadIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 15V3\"/>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\n <path d=\"m7 10 5 5 5-5\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class DownloadIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use DownloadIcon instead.\n */\nexport const DownloadIconComponent = DownloadIcon;\nexport type DownloadIconComponent = DownloadIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/edit.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"edit, edit-icon, Edit, EditIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n <path d=\"m15 5 4 4\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class EditIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use EditIcon instead.\n */\nexport const EditIconComponent = EditIcon;\nexport type EditIconComponent = EditIcon;\n","import { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"ellipsis-icon, EllipsisIcon, ellipsisicon\",\n standalone: true,\n template: `\n @if(orientation() === 'horizontal') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" [class]=\"classes()\" width=\"1rem\" height=\"1rem\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"19\" cy=\"12\" r=\"1\"/><circle cx=\"5\" cy=\"12\" r=\"1\"/></svg>\n } @else {\n <svg aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" [class]=\"classes()\" >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 12.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 18.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Z\" />\n </svg>\n }\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `\n ]\n})\nexport class EllipsisIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n orientation = input<\"horizontal\" | \"vertical\">(\"horizontal\");\n}\n\n/**\n * @deprecated Use EllipsisIcon instead.\n */\nexport const EllipsisIconComponent = EllipsisIcon;\nexport type EllipsisIconComponent = EllipsisIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/ellipsis-vertical.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"ellipsis-vertical, ellipsis-vertical-icon, EllipsisVertical, EllipsisVerticalIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class EllipsisVerticalIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use EllipsisVerticalIcon instead.\n */\nexport const EllipsisVerticalIconComponent = EllipsisVerticalIcon;\nexport type EllipsisVerticalIconComponent = EllipsisVerticalIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/envelope.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"envelope, envelope-icon, Envelope, EnvelopeIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class EnvelopeIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use EnvelopeIcon instead.\n */\nexport const EnvelopeIconComponent = EnvelopeIcon;\nexport type EnvelopeIconComponent = EnvelopeIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/external-link.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"external-link, external-link-icon, ExternalLink, ExternalLinkIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ExternalLinkIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ExternalLinkIcon instead.\n */\nexport const ExternalLinkIconComponent = ExternalLinkIcon;\nexport type ExternalLinkIconComponent = ExternalLinkIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/eye.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"eye, eye-icon, Eye, EyeIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class EyeIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use EyeIcon instead.\n */\nexport const EyeIconComponent = EyeIcon;\nexport type EyeIconComponent = EyeIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/eye-slash.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"eye-slash, eye-slash-icon, EyeSlash, EyeSlashIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class EyeSlashIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use EyeSlashIcon instead.\n */\nexport const EyeSlashIconComponent = EyeSlashIcon;\nexport type EyeSlashIconComponent = EyeSlashIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/file.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"file, file-icon, File, FileIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14,2H6A2,2,0,0,0,4,4V20a2,2,0,0,0,2,2H18a2,2,0,0,0,2-2V8Z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10,9 9,9 8,9\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FileIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FileIcon instead.\n */\nexport const FileIconComponent = FileIcon;\nexport type FileIconComponent = FileIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/file-html.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"file-html, file-html-icon, FileHTML, FileHTMLIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path\n d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\" />\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\" />\n <path d=\"M10 12.5 8 15l2 2.5\" />\n <path d=\"m14 12.5 2 2.5-2 2.5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FileHTMLIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FileHTMLIcon instead.\n */\nexport const FileHTMLIconComponent = FileHTMLIcon;\nexport type FileHTMLIconComponent = FileHTMLIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/file-magnifying-glass.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"file-magnifying-glass, file-magnifying-glass-icon, FileMagnifyingGlass, FileMagnifyingGlassIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M13 3H7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h1\"/>\n <path d=\"M13 3l4 4v2\"/>\n <path d=\"M13 3v3a1 1 0 0 0 1 1h3\"/>\n <circle cx=\"15\" cy=\"15\" r=\"4\"/>\n <path d=\"m18 18 3 3\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FileMagnifyingGlassIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FileMagnifyingGlassIcon instead.\n */\nexport const FileMagnifyingGlassIconComponent = FileMagnifyingGlassIcon;\nexport type FileMagnifyingGlassIconComponent = FileMagnifyingGlassIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/file-output.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"file-output, file-output-icon, FileOutput, FileOutputIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M4.226 20.925A2 2 0 0 0 6 22h12a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v3.127\" />\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\" />\n <path d=\"m5 11-3 3\" />\n <path d=\"m5 17-3-3h10\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FileOutputIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FileOutputIcon instead.\n */\nexport const FileOutputIconComponent = FileOutputIcon;\nexport type FileOutputIconComponent = FileOutputIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/file-search.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"file-search, file-search-icon, FileSearch, FileSearchIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/>\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>\n <circle cx=\"11.5\" cy=\"14.5\" r=\"2.5\"/>\n <path d=\"M13.3 16.3 15 18\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FileSearchIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FileSearchIcon instead.\n */\nexport const FileSearchIconComponent = FileSearchIcon;\nexport type FileSearchIconComponent = FileSearchIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/file-spreadsheet.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"file-spreadsheet, file-spreadsheet-icon, FileSpreadsheet, FileSpreadsheetIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/>\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>\n <path d=\"M8 13h2\"/>\n <path d=\"M14 13h2\"/>\n <path d=\"M8 17h2\"/>\n <path d=\"M14 17h2\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FileSpreadsheetIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FileSpreadsheetIcon instead.\n */\nexport const FileSpreadsheetIconComponent = FileSpreadsheetIcon;\nexport type FileSpreadsheetIconComponent = FileSpreadsheetIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/file-text.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"file-text, file-text-icon, FileText, FileTextIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n <path d=\"M10 9H8\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FileTextIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FileTextIcon instead.\n */\nexport const FileTextIconComponent = FileTextIcon;\nexport type FileTextIconComponent = FileTextIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/files.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"files, files-icon, Files, FilesIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M20 7h-3a2 2 0 0 1-2-2V2\"/>\n <path d=\"M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z\"/>\n <path d=\"M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FilesIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FilesIcon instead.\n */\nexport const FilesIconComponent = FilesIcon;\nexport type FilesIconComponent = FilesIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/filter.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"filter, filter-icon, Filter, FilterIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 0 1-.659 1.591l-5.432 5.432a2.25 2.25 0 0 0-.659 1.591v2.927a2.25 2.25 0 0 1-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 0 0-.659-1.591L3.659 7.409A2.25 2.25 0 0 1 3 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0 1 12 3Z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FilterIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FilterIcon instead.\n */\nexport const FilterIconComponent = FilterIcon;\nexport type FilterIconComponent = FilterIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/filter-x.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"filter-x, filter-x-icon, FilterX, FilterXIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055\" />\n <path d=\"m22 3-5 5\" />\n <path d=\"m17 3 5 5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FilterXIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FilterXIcon instead.\n */\nexport const FilterXIconComponent = FilterXIcon;\nexport type FilterXIconComponent = FilterXIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/flag-english.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"flag-english, flag-english-icon, FlagEnglish, FlagEnglishIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\">\n <rect x=\"1\" y=\"4\" rx=\"4\" ry=\"4\" fill=\"#fff\"></rect>\n <path d=\"M1.638,5.846H30.362c-.711-1.108-1.947-1.846-3.362-1.846H5c-1.414,0-2.65,.738-3.362,1.846Z\" fill=\"#a62842\"></path>\n <path d=\"M2.03,7.692c-.008,.103-.03,.202-.03,.308v1.539H31v-1.539c0-.105-.022-.204-.03-.308H2.03Z\" fill=\"#a62842\"></path>\n <path fill=\"#a62842\" d=\"M2 11.385H31V13.231H2z\"></path>\n <path fill=\"#a62842\" d=\"M2 15.077H31V16.923000000000002H2z\"></path>\n <path fill=\"#a62842\" d=\"M1 18.769H31V20.615H1z\"></path>\n <path d=\"M1,24c0,.105,.023,.204,.031,.308H30.969c.008-.103,.031-.202,.031-.308v-1.539H1v1.539Z\" fill=\"#a62842\"></path>\n <path d=\"M30.362,26.154H1.638c.711,1.108,1.947,1.846,3.362,1.846H27c1.414,0,2.65-.738,3.362-1.846Z\" fill=\"#a62842\"></path>\n <path d=\"M5,4h11v12.923H1V8c0-2.208,1.792-4,4-4Z\" fill=\"#102d5e\"></path>\n <path\n d=\"M27,4H5c-2.209,0-4,1.791-4,4V24c0,2.209,1.791,4,4,4H27c2.209,0,4-1.791,4-4V8c0-2.209-1.791-4-4-4Zm3,20c0,1.654-1.346,3-3,3H5c-1.654,0-3-1.346-3-3V8c0-1.654,1.346-3,3-3H27c1.654,0,3,1.346,3,3V24Z\"\n opacity=\".15\"></path>\n <path d=\"M27,5H5c-1.657,0-3,1.343-3,3v1c0-1.657,1.343-3,3-3H27c1.657,0,3,1.343,3,3v-1c0-1.657-1.343-3-3-3Z\" fill=\"#fff\" opacity=\".2\"></path>\n <path\n fill=\"#fff\"\n d=\"M4.601 7.463L5.193 7.033 4.462 7.033 4.236 6.338 4.01 7.033 3.279 7.033 3.87 7.463 3.644 8.158 4.236 7.729 4.827 8.158 4.601 7.463z\"></path>\n <path\n fill=\"#fff\"\n d=\"M7.58 7.463L8.172 7.033 7.441 7.033 7.215 6.338 6.989 7.033 6.258 7.033 6.849 7.463 6.623 8.158 7.215 7.729 7.806 8.158 7.58 7.463z\"></path>\n <path\n fill=\"#fff\"\n d=\"M10.56 7.463L11.151 7.033 10.42 7.033 10.194 6.338 9.968 7.033 9.237 7.033 9.828 7.463 9.603 8.158 10.194 7.729 10.785 8.158 10.56 7.463z\"></path>\n <path\n fill=\"#fff\"\n d=\"M6.066 9.283L6.658 8.854 5.927 8.854 5.701 8.158 5.475 8.854 4.744 8.854 5.335 9.283 5.109 9.979 5.701 9.549 6.292 9.979 6.066 9.283z\"></path>\n <path\n fill=\"#fff\"\n d=\"M9.046 9.283L9.637 8.854 8.906 8.854 8.68 8.158 8.454 8.854 7.723 8.854 8.314 9.283 8.089 9.979 8.68 9.549 9.271 9.979 9.046 9.283z\"></path>\n <path\n fill=\"#fff\"\n d=\"M12.025 9.283L12.616 8.854 11.885 8.854 11.659 8.158 11.433 8.854 10.702 8.854 11.294 9.283 11.068 9.979 11.659 9.549 12.251 9.979 12.025 9.283z\"></path>\n <path\n fill=\"#fff\"\n d=\"M6.066 12.924L6.658 12.494 5.927 12.494 5.701 11.799 5.475 12.494 4.744 12.494 5.335 12.924 5.109 13.619 5.701 13.19 6.292 13.619 6.066 12.924z\"></path>\n <path\n fill=\"#fff\"\n d=\"M9.046 12.924L9.637 12.494 8.906 12.494 8.68 11.799 8.454 12.494 7.723 12.494 8.314 12.924 8.089 13.619 8.68 13.19 9.271 13.619 9.046 12.924z\"></path>\n <path\n fill=\"#fff\"\n d=\"M12.025 12.924L12.616 12.494 11.885 12.494 11.659 11.799 11.433 12.494 10.702 12.494 11.294 12.924 11.068 13.619 11.659 13.19 12.251 13.619 12.025 12.924z\"></path>\n <path\n fill=\"#fff\"\n d=\"M13.539 7.463L14.13 7.033 13.399 7.033 13.173 6.338 12.947 7.033 12.216 7.033 12.808 7.463 12.582 8.158 13.173 7.729 13.765 8.158 13.539 7.463z\"></path>\n <path\n fill=\"#fff\"\n d=\"M4.601 11.104L5.193 10.674 4.462 10.674 4.236 9.979 4.01 10.674 3.279 10.674 3.87 11.104 3.644 11.799 4.236 11.369 4.827 11.799 4.601 11.104z\"></path>\n <path\n fill=\"#fff\"\n d=\"M7.58 11.104L8.172 10.674 7.441 10.674 7.215 9.979 6.989 10.674 6.258 10.674 6.849 11.104 6.623 11.799 7.215 11.369 7.806 11.799 7.58 11.104z\"></path>\n <path\n fill=\"#fff\"\n d=\"M10.56 11.104L11.151 10.674 10.42 10.674 10.194 9.979 9.968 10.674 9.237 10.674 9.828 11.104 9.603 11.799 10.194 11.369 10.785 11.799 10.56 11.104z\"></path>\n <path\n fill=\"#fff\"\n d=\"M13.539 11.104L14.13 10.674 13.399 10.674 13.173 9.979 12.947 10.674 12.216 10.674 12.808 11.104 12.582 11.799 13.173 11.369 13.765 11.799 13.539 11.104z\"></path>\n <path\n fill=\"#fff\"\n d=\"M4.601 14.744L5.193 14.315 4.462 14.315 4.236 13.619 4.01 14.315 3.279 14.315 3.87 14.744 3.644 15.44 4.236 15.01 4.827 15.44 4.601 14.744z\"></path>\n <path\n fill=\"#fff\"\n d=\"M7.58 14.744L8.172 14.315 7.441 14.315 7.215 13.619 6.989 14.315 6.258 14.315 6.849 14.744 6.623 15.44 7.215 15.01 7.806 15.44 7.58 14.744z\"></path>\n <path\n fill=\"#fff\"\n d=\"M10.56 14.744L11.151 14.315 10.42 14.315 10.194 13.619 9.968 14.315 9.237 14.315 9.828 14.744 9.603 15.44 10.194 15.01 10.785 15.44 10.56 14.744z\"></path>\n <path\n fill=\"#fff\"\n d=\"M13.539 14.744L14.13 14.315 13.399 14.315 13.173 13.619 12.947 14.315 12.216 14.315 12.808 14.744 12.582 15.44 13.173 15.01 13.765 15.44 13.539 14.744z\"></path>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FlagEnglishIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FlagEnglishIcon instead.\n */\nexport const FlagEnglishIconComponent = FlagEnglishIcon;\nexport type FlagEnglishIconComponent = FlagEnglishIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/flag-french.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"flag-french, flag-french-icon, FlagFrench, FlagFrenchIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\">\n <path fill=\"#fff\" d=\"M10 4H22V28H10z\"></path>\n <path d=\"M5,4h6V28H5c-2.208,0-4-1.792-4-4V8c0-2.208,1.792-4,4-4Z\" fill=\"#092050\"></path>\n <path d=\"M25,4h6V28h-6c-2.208,0-4-1.792-4-4V8c0-2.208,1.792-4,4-4Z\" transform=\"rotate(180 26 16)\" fill=\"#be2a2c\"></path>\n <path\n d=\"M27,4H5c-2.209,0-4,1.791-4,4V24c0,2.209,1.791,4,4,4H27c2.209,0,4-1.791,4-4V8c0-2.209-1.791-4-4-4Zm3,20c0,1.654-1.346,3-3,3H5c-1.654,0-3-1.346-3-3V8c0-1.654,1.346-3,3-3H27c1.654,0,3,1.346,3,3V24Z\"\n opacity=\".15\"></path>\n <path d=\"M27,5H5c-1.657,0-3,1.343-3,3v1c0-1.657,1.343-3,3-3H27c1.657,0,3,1.343,3,3v-1c0-1.657-1.343-3-3-3Z\" fill=\"#fff\" opacity=\".2\"></path>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FlagFrenchIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FlagFrenchIcon instead.\n */\nexport const FlagFrenchIconComponent = FlagFrenchIcon;\nexport type FlagFrenchIconComponent = FlagFrenchIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/flag-german.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"flag-german, flag-german-icon, FlagGerman, FlagGermanIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\">\n <path fill=\"#cc2b1d\" d=\"M1 11H31V21H1z\"></path>\n <path d=\"M5,4H27c2.208,0,4,1.792,4,4v4H1v-4c0-2.208,1.792-4,4-4Z\"></path>\n <path d=\"M5,20H27c2.208,0,4,1.792,4,4v4H1v-4c0-2.208,1.792-4,4-4Z\" transform=\"rotate(180 16 24)\" fill=\"#f8d147\"></path>\n <path\n d=\"M27,4H5c-2.209,0-4,1.791-4,4V24c0,2.209,1.791,4,4,4H27c2.209,0,4-1.791,4-4V8c0-2.209-1.791-4-4-4Zm3,20c0,1.654-1.346,3-3,3H5c-1.654,0-3-1.346-3-3V8c0-1.654,1.346-3,3-3H27c1.654,0,3,1.346,3,3V24Z\"\n opacity=\".15\"></path>\n <path d=\"M27,5H5c-1.657,0-3,1.343-3,3v1c0-1.657,1.343-3,3-3H27c1.657,0,3,1.343,3,3v-1c0-1.657-1.343-3-3-3Z\" fill=\"#fff\" opacity=\".2\"></path>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FlagGermanIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FlagGermanIcon instead.\n */\nexport const FlagGermanIconComponent = FlagGermanIcon;\nexport type FlagGermanIconComponent = FlagGermanIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/flashlight.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"flashlight, flashlight-icon, Flashlight, FlashlightIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FlashlightIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FlashlightIcon instead.\n */\nexport const FlashlightIconComponent = FlashlightIcon;\nexport type FlashlightIconComponent = FlashlightIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/folder.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"folder, folder-icon, Folder, FolderIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FolderIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FolderIcon instead.\n */\nexport const FolderIconComponent = FolderIcon;\nexport type FolderIconComponent = FolderIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/folder-open.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"folder-open, folder-open-icon, FolderOpen, FolderOpenIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FolderOpenIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FolderOpenIcon instead.\n */\nexport const FolderOpenIconComponent = FolderOpenIcon;\nexport type FolderOpenIconComponent = FolderOpenIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/frown.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"frown, frown-icon, Frown, FrownIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M16 16s-1.5-2-4-2-4 2-4 2\" />\n <path d=\"M9 9h.01\" />\n <path d=\"M15 9h.01\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class FrownIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use FrownIcon instead.\n */\nexport const FrownIconComponent = FrownIcon;\nexport type FrownIconComponent = FrownIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/gear.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"gear, gear-icon, Gear, GearIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 17H5\" />\n <path d=\"M19 7h-9\" />\n <circle cx=\"17\" cy=\"17\" r=\"3\" />\n <circle cx=\"7\" cy=\"7\" r=\"3\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class GearIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use GearIcon instead.\n */\nexport const GearIconComponent = GearIcon;\nexport type GearIconComponent = GearIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/git-fork.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"git-fork, git-fork-icon, GitFork, GitForkIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"18\" r=\"3\"/>\n <circle cx=\"6\" cy=\"6\" r=\"3\"/>\n <circle cx=\"18\" cy=\"6\" r=\"3\"/>\n <path d=\"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9\"/>\n <path d=\"M12 12v3\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class GitForkIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use GitForkIcon instead.\n */\nexport const GitForkIconComponent = GitForkIcon;\nexport type GitForkIconComponent = GitForkIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/globe.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"globe, globe-icon, Globe, GlobeIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class GlobeIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use GlobeIcon instead.\n */\nexport const GlobeIconComponent = GlobeIcon;\nexport type GlobeIconComponent = GlobeIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/grid.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"grid, grid-icon, Grid, GridIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class GridIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use GridIcon instead.\n */\nexport const GridIconComponent = GridIcon;\nexport type GridIconComponent = GridIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/highlighter.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"highlighter, highlighter-icon, Highlighter, HighlighterIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m9 11-6 6v3h9l3-3\" />\n <path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class HighlighterIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use HighlighterIcon instead.\n */\nexport const HighlighterIconComponent = HighlighterIcon;\nexport type HighlighterIconComponent = HighlighterIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/history.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"history, history-icon, History, HistoryIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M4.1999 6.40124V4.49999C4.1999 4.00124 3.79865 3.59999 3.2999 3.59999C2.80115 3.59999 2.3999 4.00124 2.3999 4.49999V8.69999C2.3999 9.19874 2.80115 9.59999 3.2999 9.59999H7.4999C7.99865 9.59999 8.3999 9.19874 8.3999 8.69999C8.3999 8.20124 7.99865 7.79999 7.4999 7.79999H5.42615C6.81365 5.63249 9.2399 4.19999 11.9999 4.19999C16.3087 4.19999 19.7999 7.69124 19.7999 12C19.7999 16.3087 16.3087 19.8 11.9999 19.8C10.4062 19.8 8.92865 19.3237 7.69865 18.5062C7.28615 18.2325 6.7274 18.345 6.4499 18.7575C6.1724 19.17 6.28865 19.7287 6.70115 20.0062C8.2199 21.0112 10.0424 21.6 11.9999 21.6C17.3024 21.6 21.5999 17.3025 21.5999 12C21.5999 6.69749 17.3024 2.39999 11.9999 2.39999C8.78615 2.39999 5.9399 3.97874 4.1999 6.40124ZM11.9999 7.19999C11.5012 7.19999 11.0999 7.60124 11.0999 8.09999V12C11.0999 12.24 11.1937 12.4687 11.3624 12.6375L14.0624 15.3375C14.4149 15.69 14.9849 15.69 15.3337 15.3375C15.6824 14.985 15.6862 14.415 15.3337 14.0662L12.8962 11.6287V8.09999C12.8962 7.60124 12.4949 7.19999 11.9962 7.19999H11.9999Z\"\n fill=\"currentColor\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class HistoryIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use HistoryIcon instead.\n */\nexport const HistoryIconComponent = HistoryIcon;\nexport type HistoryIconComponent = HistoryIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/home.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"home, home-icon, Home, HomeIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class HomeIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use HomeIcon instead.\n */\nexport const HomeIconComponent = HomeIcon;\nexport type HomeIconComponent = HomeIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/house.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"house, house-icon, House, HouseIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class HouseIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use HouseIcon instead.\n */\nexport const HouseIconComponent = HouseIcon;\nexport type HouseIconComponent = HouseIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/image.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"image, image-icon, Image, ImageIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/>\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>\n <circle cx=\"10\" cy=\"12\" r=\"2\"/>\n <path d=\"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ImageIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ImageIcon instead.\n */\nexport const ImageIconComponent = ImageIcon;\nexport type ImageIconComponent = ImageIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/inbox.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"inbox, inbox-icon, Inbox, InboxIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\" />\n <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 </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class InboxIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use InboxIcon instead.\n */\nexport const InboxIconComponent = InboxIcon;\nexport type InboxIconComponent = InboxIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/info-circle.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"info-circle, info-circle-icon, InfoCircle, InfoCircleIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class InfoCircleIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use InfoCircleIcon instead.\n */\nexport const InfoCircleIconComponent = InfoCircleIcon;\nexport type InfoCircleIconComponent = InfoCircleIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/key.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"key, key-icon, Key, KeyIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4\" />\n <path d=\"m21 2-9.6 9.6\" />\n <circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class KeyIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use KeyIcon instead.\n */\nexport const KeyIconComponent = KeyIcon;\nexport type KeyIconComponent = KeyIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/language.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"language, language-icon, Language, LanguageIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m5 8 6 6\"/>\n <path d=\"m4 14 6-6 2-3\"/>\n <path d=\"M2 5h12\"/>\n <path d=\"M7 2h1\"/>\n <path d=\"m22 22-5-10-5 10\"/>\n <path d=\"M14 18h6\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class LanguageIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use LanguageIcon instead.\n */\nexport const LanguageIconComponent = LanguageIcon;\nexport type LanguageIconComponent = LanguageIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/lightbulb.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"lightbulb, lightbulb-icon, Lightbulb, LightbulbIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\" />\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class LightbulbIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use LightbulbIcon instead.\n */\nexport const LightbulbIconComponent = LightbulbIcon;\nexport type LightbulbIconComponent = LightbulbIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/lightbulb-slash.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"lightbulb-slash, lightbulb-slash-icon, LightbulbSlash, LightbulbSlashIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M16.8 11.2c.8-.9 1.2-2 1.2-3.2a6 6 0 0 0-9.3-5\" />\n <path d=\"m2 2 20 20\" />\n <path d=\"M6.3 6.3a4.67 4.67 0 0 0 1.2 5.2c.7.7 1.3 1.5 1.5 2.5\" />\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class LightbulbSlashIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use LightbulbSlashIcon instead.\n */\nexport const LightbulbSlashIconComponent = LightbulbSlashIcon;\nexport type LightbulbSlashIconComponent = LightbulbSlashIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/link.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"link, link-icon, Link, LinkIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class LinkIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use LinkIcon instead.\n */\nexport const LinkIconComponent = LinkIcon;\nexport type LinkIconComponent = LinkIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/list.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"list, list-icon, List, ListIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M3 5h.01\" />\n <path d=\"M3 12h.01\" />\n <path d=\"M3 19h.01\" />\n <path d=\"M8 5h13\" />\n <path d=\"M8 12h13\" />\n <path d=\"M8 19h13\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ListIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ListIcon instead.\n */\nexport const ListIconComponent = ListIcon;\nexport type ListIconComponent = ListIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/list-filter.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"list-filter, list-filter-icon, ListFilter, ListFilterIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M2 5h20\" />\n <path d=\"M6 12h12\" />\n <path d=\"M9 19h6\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ListFilterIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ListFilterIcon instead.\n */\nexport const ListFilterIconComponent = ListFilterIcon;\nexport type ListFilterIconComponent = ListFilterIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/loading-circle.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"loading-circle, loading-circle-icon, LoadingCircle, LoadingCircleIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class LoadingCircleIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use LoadingCircleIcon instead.\n */\nexport const LoadingCircleIconComponent = LoadingCircleIcon;\nexport type LoadingCircleIconComponent = LoadingCircleIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/magnifying-glass.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"magnifying-glass, magnifying-glass-icon, MagnifyingGlass, MagnifyingGlassIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.34-4.34\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class MagnifyingGlassIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use MagnifyingGlassIcon instead.\n */\nexport const MagnifyingGlassIconComponent = MagnifyingGlassIcon;\nexport type MagnifyingGlassIconComponent = MagnifyingGlassIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/magnifying-glass-minus.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"magnifying-glass-minus, magnifying-glass-minus-icon, MagnifyingGlassMinus, MagnifyingGlassMinusIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class MagnifyingGlassMinusIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use MagnifyingGlassMinusIcon instead.\n */\nexport const MagnifyingGlassMinusIconComponent = MagnifyingGlassMinusIcon;\nexport type MagnifyingGlassMinusIconComponent = MagnifyingGlassMinusIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/magnifying-glass-plus.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"magnifying-glass-plus, magnifying-glass-plus-icon, MagnifyingGlassPlus, MagnifyingGlassPlusIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\n <line x1=\"11\" x2=\"11\" y1=\"8\" y2=\"14\" />\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class MagnifyingGlassPlusIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use MagnifyingGlassPlusIcon instead.\n */\nexport const MagnifyingGlassPlusIconComponent = MagnifyingGlassPlusIcon;\nexport type MagnifyingGlassPlusIconComponent = MagnifyingGlassPlusIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/map-pin.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"map-pin, map-pin-icon, MapPin, MapPinIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class MapPinIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use MapPinIcon instead.\n */\nexport const MapPinIconComponent = MapPinIcon;\nexport type MapPinIconComponent = MapPinIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/minus.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"minus, minus-icon, Minus, MinusIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 12h14\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class MinusIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use MinusIcon instead.\n */\nexport const MinusIconComponent = MinusIcon;\nexport type MinusIconComponent = MinusIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/moon.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"moon, moon-icon, Moon, MoonIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class MoonIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use MoonIcon instead.\n */\nexport const MoonIconComponent = MoonIcon;\nexport type MoonIconComponent = MoonIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/new-chat.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"new-chat, new-chat-icon, NewChat, NewChatIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M10.0387 21.6338L13.4849 19.2H17.9999C19.9874 19.2 21.5999 17.5875 21.5999 15.6V7.20001C21.5999 5.21251 19.9874 3.60001 17.9999 3.60001H5.9999C4.0124 3.60001 2.3999 5.21251 2.3999 7.20001V15.6C2.3999 17.5875 4.0124 19.2 5.9999 19.2H7.1999V21.9C7.1999 22.2375 7.3874 22.545 7.6874 22.6988C7.9874 22.8525 8.3474 22.83 8.62115 22.635L10.0387 21.6338ZM13.4849 17.4C13.1137 17.4 12.7499 17.5163 12.4462 17.73C11.3737 18.4875 10.2224 19.2975 8.9999 20.1638V18.3C8.9999 18.195 8.98115 18.09 8.9474 17.9963C8.82365 17.6475 8.4899 17.4 8.0999 17.4H5.9999C5.00615 17.4 4.1999 16.5938 4.1999 15.6V7.20001C4.1999 6.20626 5.00615 5.40001 5.9999 5.40001H17.9999C18.9937 5.40001 19.7999 6.20626 19.7999 7.20001V15.6C19.7999 16.5938 18.9937 17.4 17.9999 17.4H13.4849ZM11.9999 7.80001C11.5012 7.80001 11.0999 8.20126 11.0999 8.70001V10.5H9.2999C8.80115 10.5 8.3999 10.9013 8.3999 11.4C8.3999 11.8988 8.80115 12.3 9.2999 12.3H11.0999V14.1C11.0999 14.5988 11.5012 15 11.9999 15C12.4987 15 12.8999 14.5988 12.8999 14.1V12.3H14.6999C15.1987 12.3 15.5999 11.8988 15.5999 11.4C15.5999 10.9013 15.1987 10.5 14.6999 10.5H12.8999V8.70001C12.8999 8.20126 12.4987 7.80001 11.9999 7.80001Z\"\n fill=\"currentColor\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class NewChatIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use NewChatIcon instead.\n */\nexport const NewChatIconComponent = NewChatIcon;\nexport type NewChatIconComponent = NewChatIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/palette.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"palette, palette-icon, Palette, PaletteIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z\" />\n <circle cx=\"13.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\" />\n <circle cx=\"17.5\" cy=\"10.5\" r=\".5\" fill=\"currentColor\" />\n <circle cx=\"6.5\" cy=\"12.5\" r=\".5\" fill=\"currentColor\" />\n <circle cx=\"8.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class PaletteIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use PaletteIcon instead.\n */\nexport const PaletteIconComponent = PaletteIcon;\nexport type PaletteIconComponent = PaletteIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/panel-left.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"panel-left, panel-left-icon, PanelLeft, PanelLeftIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"></rect>\n <path d=\"M9 3v18\"></path>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class PanelLeftIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use PanelLeftIcon instead.\n */\nexport const PanelLeftIconComponent = PanelLeftIcon;\nexport type PanelLeftIconComponent = PanelLeftIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/panel-right.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"panel-right, panel-right-icon, PanelRight, PanelRightIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"></rect>\n <path d=\"M15 3v18\"></path>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class PanelRightIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use PanelRightIcon instead.\n */\nexport const PanelRightIconComponent = PanelRightIcon;\nexport type PanelRightIconComponent = PanelRightIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/paperclip.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"paperclip, paperclip-icon, Paperclip, PaperclipIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class PaperclipIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use PaperclipIcon instead.\n */\nexport const PaperclipIconComponent = PaperclipIcon;\nexport type PaperclipIconComponent = PaperclipIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/pen-to-square.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"pen-to-square, pen-to-square-icon, PenToSquare, PenToSquareIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class PenToSquareIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use PenToSquareIcon instead.\n */\nexport const PenToSquareIconComponent = PenToSquareIcon;\nexport type PenToSquareIconComponent = PenToSquareIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/plus.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"plus, plus-icon, Plus, PlusIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class PlusIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use PlusIcon instead.\n */\nexport const PlusIconComponent = PlusIcon;\nexport type PlusIconComponent = PlusIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/presentation.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"presentation, presentation-icon, Presentation, PresentationIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M2 3h20\" />\n <path d=\"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3\" />\n <path d=\"m7 21 5-5 5 5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class PresentationIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use PresentationIcon instead.\n */\nexport const PresentationIconComponent = PresentationIcon;\nexport type PresentationIconComponent = PresentationIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/question.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"question, question-icon, Question, QuestionIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <path d=\"M12 17h.01\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class QuestionIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use QuestionIcon instead.\n */\nexport const QuestionIconComponent = QuestionIcon;\nexport type QuestionIconComponent = QuestionIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/question-circle.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"question-circle, question-circle-icon, QuestionCircle, QuestionCircleIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <path d=\"M12 17h.01\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class QuestionCircleIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use QuestionCircleIcon instead.\n */\nexport const QuestionCircleIconComponent = QuestionCircleIcon;\nexport type QuestionCircleIconComponent = QuestionCircleIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/refresh.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"refresh, refresh-icon, Refresh, RefreshIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class RefreshIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use RefreshIcon instead.\n */\nexport const RefreshIconComponent = RefreshIcon;\nexport type RefreshIconComponent = RefreshIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/robot.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"robot, robot-icon, Robot, RobotIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 8V4H8\"/>\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\"/>\n <path d=\"M2 14h2\"/>\n <path d=\"M20 14h2\"/>\n <path d=\"M15 13v2\"/>\n <path d=\"M9 13v2\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class RobotIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use RobotIcon instead.\n */\nexport const RobotIconComponent = RobotIcon;\nexport type RobotIconComponent = RobotIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/rotate.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"rotate, rotate-icon, Rotate, RotateIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class RotateIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use RotateIcon instead.\n */\nexport const RotateIconComponent = RotateIcon;\nexport type RotateIconComponent = RotateIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/save.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"save, save-icon, Save, SaveIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\" />\n <path d=\"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7\" />\n <path d=\"M7 3v4a1 1 0 0 0 1 1h7\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SaveIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SaveIcon instead.\n */\nexport const SaveIconComponent = SaveIcon;\nexport type SaveIconComponent = SaveIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/search.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"search, search-icon, Search, SearchIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SearchIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SearchIcon instead.\n */\nexport const SearchIconComponent = SearchIcon;\nexport type SearchIconComponent = SearchIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/send.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"send, send-icon, Send, SendIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M22 2 11 13\" />\n <path d=\"M22 2 15 22 11 13 2 9z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SendIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SendIcon instead.\n */\nexport const SendIconComponent = SendIcon;\nexport type SendIconComponent = SendIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/send-horizontal.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"send-horizontal, send-horizontal-icon, SendHorizontal, SendHorizontalIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z\" />\n <path d=\"M6 12h16\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SendHorizontalIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SendHorizontalIcon instead.\n */\nexport const SendHorizontalIconComponent = SendHorizontalIcon;\nexport type SendHorizontalIconComponent = SendHorizontalIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/slash.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"slash, slash-icon, Slash, SlashIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M22 2 2 22\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SlashIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SlashIcon instead.\n */\nexport const SlashIconComponent = SlashIcon;\nexport type SlashIconComponent = SlashIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/sliders.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"sliders, sliders-icon, Sliders, SlidersIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M10 5H3\" />\n <path d=\"M12 19H3\" />\n <path d=\"M14 3v4\" />\n <path d=\"M16 17v4\" />\n <path d=\"M21 12h-9\" />\n <path d=\"M21 19h-5\" />\n <path d=\"M21 5h-7\" />\n <path d=\"M8 10v4\" />\n <path d=\"M8 12H3\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SlidersIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SlidersIcon instead.\n */\nexport const SlidersIconComponent = SlidersIcon;\nexport type SlidersIconComponent = SlidersIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/sparkles.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"sparkles, sparkles-icon, Sparkles, SparklesIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\" />\n <path d=\"M20 2v4\" />\n <path d=\"M22 4h-4\" />\n <circle cx=\"4\" cy=\"20\" r=\"2\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SparklesIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SparklesIcon instead.\n */\nexport const SparklesIconComponent = SparklesIcon;\nexport type SparklesIconComponent = SparklesIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/spinner.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"spinner, spinner-icon, Spinner, SpinnerIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SpinnerIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SpinnerIcon instead.\n */\nexport const SpinnerIconComponent = SpinnerIcon;\nexport type SpinnerIconComponent = SpinnerIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/square.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"square, square-icon, Square, SquareIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SquareIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SquareIcon instead.\n */\nexport const SquareIconComponent = SquareIcon;\nexport type SquareIconComponent = SquareIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/square-check.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"square-check, square-check-icon, SquareCheck, SquareCheckIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/>\n <path d=\"m9 12 2 2 4-4\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SquareCheckIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SquareCheckIcon instead.\n */\nexport const SquareCheckIconComponent = SquareCheckIcon;\nexport type SquareCheckIconComponent = SquareCheckIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/square-check-big.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"square-check-big, square-check-big-icon, SquareCheckBig, SquareCheckBigIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344\"/>\n <path d=\"m9 11 3 3L22 4\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SquareCheckBigIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SquareCheckBigIcon instead.\n */\nexport const SquareCheckBigIconComponent = SquareCheckBigIcon;\nexport type SquareCheckBigIconComponent = SquareCheckBigIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/square-minus.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"square-minus, square-minus-icon, SquareMinus, SquareMinusIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/>\n <path d=\"M8 12h8\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SquareMinusIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SquareMinusIcon instead.\n */\nexport const SquareMinusIconComponent = SquareMinusIcon;\nexport type SquareMinusIconComponent = SquareMinusIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/square-pen.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"square-pen, square-pen-icon, SquarePen, SquarePenIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SquarePenIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SquarePenIcon instead.\n */\nexport const SquarePenIconComponent = SquarePenIcon;\nexport type SquarePenIconComponent = SquarePenIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/star.svg`.\n */\nimport { booleanAttribute, Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"star, star-icon, Star, StarIcon\",\n template: `\n @if (solid()) {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.006 5.404.434c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.434 2.082-5.005Z\" clip-rule=\"evenodd\" />\n </svg>\n } @else {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 0 1 1.04 0l2.125 5.111a.563.563 0 0 0 .475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 0 0-.182.557l1.285 5.385a.562.562 0 0 1-.84.61l-4.725-2.885a.562.562 0 0 0-.586 0L6.982 20.54a.562.562 0 0 1-.84-.61l1.285-5.386a.562.562 0 0 0-.182-.557l-4.204-3.602a.562.562 0 0 1 .321-.988l5.518-.442a.563.563 0 0 0 .475-.345L11.48 3.5Z\" />\n </svg>\n }\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class StarIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n solid = input(false, { transform: booleanAttribute });\n}\n\n/**\n * @deprecated Use StarIcon instead.\n */\nexport const StarIconComponent = StarIcon;\nexport type StarIconComponent = StarIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/sun-bright.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"sun-bright, sun-bright-icon, SunBright, SunBrightIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SunBrightIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SunBrightIcon instead.\n */\nexport const SunBrightIconComponent = SunBrightIcon;\nexport type SunBrightIconComponent = SunBrightIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/sync.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"sync, sync-icon, Sync, SyncIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class SyncIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use SyncIcon instead.\n */\nexport const SyncIconComponent = SyncIcon;\nexport type SyncIconComponent = SyncIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/tag.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"tag, tag-icon, Tag, TagIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <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\" />\n <circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class TagIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use TagIcon instead.\n */\nexport const TagIconComponent = TagIcon;\nexport type TagIconComponent = TagIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/tags.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"tags, tags-icon, Tags, TagsIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z\" />\n <path d=\"M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193\" />\n <circle cx=\"10.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class TagsIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use TagsIcon instead.\n */\nexport const TagsIconComponent = TagsIcon;\nexport type TagsIconComponent = TagsIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/thumbs-down.svg`.\n */\nimport { booleanAttribute, Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"thumbs-down, thumbs-down-icon, ThumbsDown, ThumbsDownIcon\",\n template: `\n @if (solid()) {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n <path d=\"M17 14V2\" />\n </svg>\n } @else {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n <path d=\"M17 14V2\" />\n </svg>\n }\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ThumbsDownIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n solid = input(false, { transform: booleanAttribute });\n}\n\n/**\n * @deprecated Use ThumbsDownIcon instead.\n */\nexport const ThumbsDownIconComponent = ThumbsDownIcon;\nexport type ThumbsDownIconComponent = ThumbsDownIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/thumbs-up.svg`.\n */\nimport { booleanAttribute, Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"thumbs-up, thumbs-up-icon, ThumbsUp, ThumbsUpIcon\",\n template: `\n @if (solid()) {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n } @else {\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n }\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ThumbsUpIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n solid = input(false, { transform: booleanAttribute });\n}\n\n/**\n * @deprecated Use ThumbsUpIcon instead.\n */\nexport const ThumbsUpIconComponent = ThumbsUpIcon;\nexport type ThumbsUpIconComponent = ThumbsUpIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/toggle-left.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"toggle-left, toggle-left-icon, ToggleLeft, ToggleLeftIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"9\" cy=\"12\" r=\"3\"/>\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"5\" rx=\"7\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ToggleLeftIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ToggleLeftIcon instead.\n */\nexport const ToggleLeftIconComponent = ToggleLeftIcon;\nexport type ToggleLeftIconComponent = ToggleLeftIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/toggle-right.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"toggle-right, toggle-right-icon, ToggleRight, ToggleRightIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"15\" cy=\"12\" r=\"3\"/>\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"5\" rx=\"7\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class ToggleRightIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use ToggleRightIcon instead.\n */\nexport const ToggleRightIconComponent = ToggleRightIcon;\nexport type ToggleRightIconComponent = ToggleRightIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/trash.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"trash, trash-icon, Trash, TrashIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M10 11v6\" />\n <path d=\"M14 11v6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class TrashIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use TrashIcon instead.\n */\nexport const TrashIconComponent = TrashIcon;\nexport type TrashIconComponent = TrashIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/trash-can.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"trash-can, trash-can-icon, TrashCan, TrashCanIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M10 11v6\" />\n <path d=\"M14 11v6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class TrashCanIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use TrashCanIcon instead.\n */\nexport const TrashCanIconComponent = TrashCanIcon;\nexport type TrashCanIconComponent = TrashCanIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/triangle-alert.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"triangle-alert, triangle-alert-icon, TriangleAlert, TriangleAlertIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class TriangleAlertIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use TriangleAlertIcon instead.\n */\nexport const TriangleAlertIconComponent = TriangleAlertIcon;\nexport type TriangleAlertIconComponent = TriangleAlertIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/type.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"type, type-icon, Type, TypeIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 4v16\"/>\n <path d=\"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2\"/>\n <path d=\"M9 20h6\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class TypeIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use TypeIcon instead.\n */\nexport const TypeIconComponent = TypeIcon;\nexport type TypeIconComponent = TypeIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/undo.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"undo, undo-icon, Undo, UndoIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M9 14 4 9l5-5\" />\n <path d=\"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class UndoIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use UndoIcon instead.\n */\nexport const UndoIconComponent = UndoIcon;\nexport type UndoIconComponent = UndoIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/upload.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"upload, upload-icon, Upload, UploadIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 3v12\"/>\n <path d=\"m17 8-5-5-5 5\"/>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class UploadIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use UploadIcon instead.\n */\nexport const UploadIconComponent = UploadIcon;\nexport type UploadIconComponent = UploadIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/user.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"user, user-icon, User, UserIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class UserIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use UserIcon instead.\n */\nexport const UserIconComponent = UserIcon;\nexport type UserIconComponent = UserIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/user-round.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"user-round, user-round-icon, UserRound, UserRoundIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"5\" />\n <path d=\"M20 21a8 8 0 0 0-16 0\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class UserRoundIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use UserRoundIcon instead.\n */\nexport const UserRoundIconComponent = UserRoundIcon;\nexport type UserRoundIconComponent = UserRoundIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/user-secret.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"user-secret, user-secret-icon, UserSecret, UserSecretIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M18 11c-1.5 0-2.5.5-3 2\"/>\n <path d=\"M4 6a2 2 0 0 0-2 2v4a5 5 0 0 0 5 5 8 8 0 0 1 5 2 8 8 0 0 1 5-2 5 5 0 0 0 5-5V8a2 2 0 0 0-2-2h-3a8 8 0 0 0-5 2 8 8 0 0 0-5-2z\"/>\n <path d=\"M6 11c1.5 0 2.5.5 3 2\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class UserSecretIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use UserSecretIcon instead.\n */\nexport const UserSecretIconComponent = UserSecretIcon;\nexport type UserSecretIconComponent = UserSecretIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/video.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"video, video-icon, Video, VideoIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5\"/>\n <rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2\"/>\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class VideoIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use VideoIcon instead.\n */\nexport const VideoIconComponent = VideoIcon;\nexport type VideoIconComponent = VideoIcon;\n","/**\n * THIS FILE IS AUTO-GENERATED by `scripts/generate-icons.ts`.\n * Do not edit by hand — any manual change will be overwritten on the next\n * generation (`npm run generate:icons`). Source: `svg/x-mark.svg`.\n */\nimport { Component, computed, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"x-mark, x-mark-icon, XMark, XMarkIcon\",\n template: `\n <svg [class]=\"classes()\" aria-hidden=\"true\" width=\"1rem\" height=\"1rem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n `,\n styles: `\n :host {\n display: contents;\n }\n `\n})\nexport class XMarkIcon {\n class = input<string>();\n classes = computed(() => cn(this.class()));\n}\n\n/**\n * @deprecated Use XMarkIcon instead.\n */\nexport const XMarkIconComponent = XMarkIcon;\nexport type XMarkIconComponent = XMarkIcon;\n","import { afterNextRender, DestroyRef, ElementRef, inject, Signal, signal } from \"@angular/core\";\nimport { autoUpdate, computePosition, flip, offset, Placement, shift, size } from \"@floating-ui/dom\";\n\nexport interface PopoverConfig {\n closeOnScroll?: boolean;\n closeOnClick?: boolean;\n}\n\nexport function injectPopover(options: {\n placement: Signal<Placement>;\n offset: Signal<number>;\n config: Signal<PopoverConfig>;\n lockPosition: Signal<boolean>;\n matchTriggerWidth: Signal<boolean>;\n}) {\n const el: HTMLElement = inject(ElementRef).nativeElement;\n const destroyRef = inject(DestroyRef);\n // undefined (not 0): bound via [style.width.px], where undefined removes the inline style\n // entirely instead of forcing `width: 0px` — letting the popover fall back to CSS (shrink-to-fit,\n // clamped by whatever min-w-*/max-w-* the caller put on the popover element itself) when\n // matchTriggerWidth() is false.\n const width = signal<number | undefined>(undefined);\n const state = signal<\"open\" | \"closed\">(\"closed\");\n\n el.style.visibility = \"hidden\";\n\n let triggerEl = document.querySelector(`[popovertarget=\"${el.id}\"]`) as HTMLElement | null;\n\n function calculatePosition() {\n if (!triggerEl) return;\n computePosition(triggerEl, el, {\n strategy: \"fixed\",\n placement: options.placement(),\n middleware: [\n offset(options.offset()),\n // Skipped when lockPosition() is true — the popover then always renders at its configured\n // placement instead of letting floating-ui flip/shift it based on available space.\n ...(options.lockPosition() ? [] : [flip(), shift()]),\n // Exposes how much room is actually available in the chosen direction as a CSS var, so\n // content relying on a fixed max-height can shrink to fit instead of overflowing past the\n // viewport when neither side has enough space for its usual size — flip()/shift() only\n // reposition, they never shrink.\n size({\n padding: 8,\n apply: ({ availableHeight }) => {\n el.style.setProperty(\"--popover-available-height\", `${availableHeight}px`);\n }\n })\n ]\n }).then(({ x, y }) => {\n el.style.left = `${x}px`;\n el.style.top = `${y}px`;\n el.style.visibility = \"\";\n width.set(options.matchTriggerWidth() ? triggerEl!.offsetWidth : undefined);\n });\n }\n\n afterNextRender(() => {\n if (!triggerEl) {\n triggerEl = document.querySelector(`[popovertarget=\"${el.id}\"]`) as HTMLElement;\n }\n\n let cleanupAutoUpdate: (() => void) | null = null;\n\n el.addEventListener(\"toggle\", (event: any) => {\n state.set(event.newState);\n if (event.newState === \"open\") {\n if (!triggerEl) {\n triggerEl = document.querySelector(`[popovertarget=\"${el.id}\"]`) as HTMLElement | null;\n }\n if (!triggerEl) return;\n cleanupAutoUpdate = autoUpdate(triggerEl, el, calculatePosition);\n } else {\n cleanupAutoUpdate?.();\n cleanupAutoUpdate = null;\n }\n });\n\n destroyRef.onDestroy(() => cleanupAutoUpdate?.());\n\n const onScroll = () => {\n if (options.config().closeOnScroll ?? false) el.hidePopover();\n };\n document.addEventListener(\"scroll\", onScroll, { passive: true, capture: true });\n destroyRef.onDestroy(() => document.removeEventListener(\"scroll\", onScroll, { capture: true }));\n\n const onClick = () => {\n if (options.config().closeOnClick ?? false) el.hidePopover();\n };\n el.addEventListener(\"click\", onClick);\n destroyRef.onDestroy(() => el.removeEventListener(\"click\", onClick));\n });\n\n return {\n width,\n state,\n close: () => el.hidePopover(),\n show: () => el.showPopover(),\n toggle: () => {\n if (state() === \"open\") {\n el.hidePopover();\n state.set(\"closed\");\n } else {\n el.showPopover();\n state.set(\"open\");\n }\n }\n };\n}\n","import { booleanAttribute, computed, Directive, ElementRef, HostAttributeToken, inject, input, numberAttribute } from \"@angular/core\";\nimport { Placement } from \"@floating-ui/dom\";\nimport { cn } from \"cn\";\nimport { injectPopover, PopoverConfig } from \"./inject-popover\";\n\n/**\n * Directive that creates a popover element using the Floating UI library.\n *\n * Can be used as `[popover]` or `[dropdown]` (alias). The `[dropdown]` usage\n * sets the `popover` attribute automatically and defaults to closing on click\n * via `[config]=\"{ closeOnClick: true }\"`.\n *\n * @example\n * ```html\n * <button popovertarget=\"mypopover\">Open</button>\n * <div popover id=\"mypopover\">Popover Content</div>\n *\n * <button popovertarget=\"mydropdown\">Open</button>\n * <div dropdown id=\"mydropdown\">Dropdown Content</div>\n * ```\n *\n * @see https://floating-ui.com/docs/computePosition\n */\n@Directive({\n selector: \"[popover],[dropdown]\",\n exportAs: \"popover,dropdown\",\n host: {\n popover: \"\",\n // No padding of its own: the surface that wears this directive decides (a Menu wears `p-(--spacing-2xs)`).\n // A `p-1` here used to sit next to it as a second class on the same element — `cn()` merges only within\n // one binding — and, emitted later in the stylesheet, won over the Menu's and over a consumer's `p-0`.\n \"[class]\": \"cn('m-0 fixed', class())\",\n \"[style.width.px]\": \"width()\"\n }\n})\nexport class PopoverDirective {\n cn = cn;\n class = input<string>();\n placement = input<Placement>(\"bottom\");\n offset = input(4, { transform: numberAttribute });\n config = input<PopoverConfig>({});\n /**\n * When true, forces the popover to stay at the exact `placement()`, disabling the `flip()`/\n * `shift()` middleware that would otherwise reposition it based on available viewport space.\n *\n * @default false\n */\n lockPosition = input(false, { transform: booleanAttribute });\n /**\n * When true (default), the popover's width is forced to match its trigger's `offsetWidth` — the\n * right behavior for a dropdown/select-like popover that should line up with what opened it.\n * Set to `false` for a popover whose trigger is unrelated to its content's natural width (e.g. an\n * icon button opening a wider panel): the inline width style is then omitted entirely, so the\n * popover falls back to CSS shrink-to-fit sizing — size it with `min-w-*`/`max-w-*` on the\n * popover element itself instead.\n */\n matchTriggerWidth = input(true, { transform: booleanAttribute });\n\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly _isDropdown = inject(new HostAttributeToken(\"dropdown\"), { optional: true }) !== null;\n private readonly _config = computed(() => ({ closeOnClick: this._isDropdown, ...this.config() }));\n\n private readonly _p = injectPopover({\n placement: this.placement,\n offset: this.offset,\n config: this._config,\n lockPosition: this.lockPosition,\n matchTriggerWidth: this.matchTriggerWidth\n });\n\n width = this._p.width;\n state = this._p.state;\n\n close() {\n this._p.close();\n }\n show() {\n this._p.show();\n }\n toggle() {\n this._p.toggle();\n }\n}\n","import { afterRenderEffect } from \"@angular/core\";\nimport { arrow, autoUpdate, computePosition, flip, offset, type Placement, shift, size } from \"@floating-ui/dom\";\n\n/** What {@link injectFloatingPanel} needs to know about a panel and the element it hangs from. */\nexport interface FloatingPanelOptions {\n /**\n * The panel. A signal read (a `viewChild`, a computed…): the panel may appear and disappear — a combobox's popup is\n * rendered when it opens — and is positioned each time it appears.\n */\n panel: () => HTMLElement | null | undefined;\n\n /** The element the panel hangs from: the field box, a trigger, the parent item of a submenu. */\n anchor: () => HTMLElement | null | undefined;\n\n /** Where the panel goes, in Floating UI's terms. A signal read is fine. Default `\"bottom-start\"`. */\n placement?: Placement | (() => Placement);\n\n /** Distance from the anchor, in pixels. Default `4`. */\n offset?: number;\n\n /**\n * Flips the panel to the opposite side when it does not fit on the requested one. Default `true`. Turn it off for a panel\n * that must stay where `placement` puts it (a menu that scrolls itself rather than jump above the field). A signal read is fine.\n */\n flip?: boolean | (() => boolean);\n\n /** Margin kept from the edges of the viewport when the panel is shifted back in. Default `8`. */\n padding?: number;\n\n /** Name of a CSS custom property (`\"--select-trigger-w\"`) that receives the anchor's width, for the panel's own CSS (`min-w-(--select-trigger-w)`). */\n anchorWidthVariable?: string;\n\n /** Gives the panel the width of the anchor (an inline `width`). A signal read is fine. */\n matchAnchorWidth?: boolean | (() => boolean);\n\n /**\n * Puts the panel in the browser's top layer (`popover=\"manual\"` + `showPopover()`), above a `<dialog>` and outside the\n * clipping of any ancestor. The panel is the one to close: it is hidden again when it goes away. A signal read is fine.\n */\n topLayer?: boolean | (() => boolean);\n\n /**\n * An arrow pointing at the anchor: a small element inside the panel (rotated square, `absolute`). The helper slides it\n * along the panel's edge to face the anchor, puts it on the side that touches the anchor (half of it outside the panel),\n * and writes the placement the panel ended up with (after `flip`) in its `data-placement` attribute, for the CSS that\n * colours the arrow's visible sides.\n */\n arrow?: () => HTMLElement | null | undefined;\n\n /** Runs after each position update, with the anchor and the panel (a submenu that mirrors the anchor's width in a signal…). */\n afterPosition?: (anchor: HTMLElement, panel: HTMLElement) => void;\n}\n\n/**\n * Keeps a floating panel under (or beside) an anchor with Floating UI. Call it from a constructor — an injection context.\n *\n * It does what every popup of the library did by hand, in one place: waits for the panel and the anchor, starts\n * `autoUpdate`, computes the position with `strategy: \"fixed\"` and writes `left`/`top`, and stops everything when the\n * panel goes away or the component is destroyed.\n *\n * - **`fixed` is the contract.** The panel must be `position: fixed` (a class on it, so that it is never in flow, not even\n * on the frame it is created). Floating UI then answers in viewport coordinates; without that, they would be relative to\n * the offset parent and the panel would drift by the page's scroll.\n * - **Hidden until placed.** The panel is `visibility: hidden` until its first position is computed, so it never paints for\n * a frame at the corner of the page.\n *\n * ```ts\n * private readonly list = viewChild<ElementRef<HTMLElement>>(\"list\");\n * private readonly field = viewChild<ElementRef<HTMLElement>>(\"field\");\n *\n * constructor() {\n * injectFloatingPanel({\n * panel: () => this.list()?.nativeElement,\n * anchor: () => this.field()?.nativeElement,\n * matchAnchorWidth: true\n * });\n * }\n * ```\n */\n/** The panels whose inline width this helper wrote: a width the caller set itself (a `[style.width]` binding) is not ours to clear. */\nconst sized = new WeakSet<HTMLElement>();\n\nexport function injectFloatingPanel(options: FloatingPanelOptions): void {\n afterRenderEffect({\n write: onCleanup => {\n const panel = options.panel();\n const anchor = options.anchor();\n if (!panel || !anchor) return;\n const topLayer = resolve(options.topLayer);\n const matchAnchorWidth = resolve(options.matchAnchorWidth);\n const allowFlip = options.flip === undefined ? true : resolve(options.flip);\n const arrowElement = options.arrow?.();\n\n // Hidden until the first position: the panel would otherwise paint for a frame where it was created.\n panel.style.visibility = \"hidden\";\n\n // The width matching was turned off: give back the width this helper had written.\n if (!matchAnchorWidth && sized.has(panel)) {\n panel.style.width = \"\";\n sized.delete(panel);\n }\n\n if (topLayer && typeof panel.showPopover === \"function\") {\n if (!panel.hasAttribute(\"popover\")) panel.setAttribute(\"popover\", \"manual\");\n panel.showPopover();\n }\n\n const placement = typeof options.placement === \"function\" ? options.placement() : (options.placement ?? \"bottom-start\");\n const stop = autoUpdate(anchor, panel, () => {\n computePosition(anchor, panel, {\n strategy: \"fixed\",\n placement,\n middleware: [\n offset(options.offset ?? 4),\n ...(allowFlip ? [flip()] : []),\n shift({ padding: options.padding ?? 8 }),\n ...(arrowElement ? [arrow({ element: arrowElement, padding: 6 })] : []),\n ...(matchAnchorWidth\n ? [\n size({\n apply: ({ rects, elements }) => {\n elements.floating.style.width = `${rects.reference.width}px`;\n sized.add(elements.floating as HTMLElement);\n }\n })\n ]\n : [])\n ]\n }).then(({ x, y, placement: placed, middlewareData }) => {\n panel.style.left = `${x}px`;\n panel.style.top = `${y}px`;\n if (arrowElement) placeArrow(panel, arrowElement, placed, middlewareData.arrow);\n if (options.anchorWidthVariable) panel.style.setProperty(options.anchorWidthVariable, `${anchor.offsetWidth}px`);\n panel.style.visibility = \"\";\n options.afterPosition?.(anchor, panel);\n });\n });\n\n onCleanup(() => {\n stop();\n if (topLayer && panel.isConnected && typeof panel.hidePopover === \"function\") {\n try {\n panel.hidePopover();\n } catch {\n // Already hidden: nothing to undo.\n }\n }\n });\n }\n });\n}\n\n/** A boolean option given as a value or as a signal read. */\nfunction resolve(option: boolean | (() => boolean) | undefined): boolean {\n return typeof option === \"function\" ? option() : !!option;\n}\n\n/** Slides the arrow along the edge that faces the anchor, and sticks half of it out of that edge. */\nfunction placeArrow(panel: HTMLElement, arrowElement: HTMLElement, placed: Placement, data: { x?: number; y?: number } | undefined): void {\n const side = placed.split(\"-\")[0] as \"top\" | \"bottom\" | \"left\" | \"right\";\n const staticSide = { top: \"bottom\", bottom: \"top\", left: \"right\", right: \"left\" }[side];\n panel.dataset[\"placement\"] = side;\n arrowElement.style.left = data?.x != null ? `${data.x}px` : \"\";\n arrowElement.style.top = data?.y != null ? `${data.y}px` : \"\";\n arrowElement.style.right = arrowElement.style.bottom = \"\";\n arrowElement.style.setProperty(staticSide, `${-arrowElement.offsetWidth / 2}px`);\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/** Class of the tooltip panel, for a consumer that needs to target it (a `data-` selector, a test). */\nexport const TOOLTIP_CLASS = \"tooltip-panel\";\n\n/**\n * The tooltip surface. Tokens only: the dark neutral (`--bg-neutral-base-alt`, grey-800) against white text reaches\n * well over 4.5:1, and no shadcn utility is used (they emit no CSS in an application that does not declare them).\n *\n * - `fixed` is the contract of `injectFloatingPanel` (declared in the classes, so the panel is never in flow);\n * - `inset-auto m-0 border-0 overflow-visible` undo the user-agent styles of a `popover` element (`inset: 0`,\n * `margin: auto`, a border, `overflow: auto`), the panel being put in the top layer as a manual popover;\n * - `w-max` + `max-w` : as wide as its text, up to `--tooltip-max-w`, then it wraps.\n */\nexport const tooltipVariants = cva(\n [\n TOOLTIP_CLASS,\n \"fixed inset-auto m-0 w-max max-w-(--tooltip-max-w,20rem) overflow-visible border-0 break-words\",\n \"rounded-(--radius-xs) bg-(--bg-neutral-base-alt) px-(--spacing-xs) py-(--spacing-3xs)\",\n \"text-(length:--size-sm) leading-(--line-height-sm) text-(--font-neutral-white) shadow-(--shadow-2)\"\n ],\n {\n variants: {\n // A tooltip that closes as soon as the pointer leaves its anchor (`autoHide` off) must not catch the pointer.\n interactive: {\n true: \"pointer-events-auto\",\n false: \"pointer-events-none\"\n }\n },\n defaultVariants: { interactive: true }\n }\n);\n\nexport type TooltipVariants = VariantProps<typeof tooltipVariants>;\n","import { DOCUMENT, NgTemplateOutlet } from \"@angular/common\";\nimport {\n ApplicationRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ComponentRef,\n contentChild,\n createComponent,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n signal,\n type Signal,\n TemplateRef,\n untracked,\n viewChild\n} from \"@angular/core\";\nimport type { Placement } from \"@floating-ui/dom\";\nimport { cn } from \"cn\";\n\nimport { injectFloatingPanel } from \"../popover/inject-floating-panel\";\nimport { tooltipVariants } from \"./tooltip.cva\";\n\n/** Where the tooltip goes: `top`, `bottom`, `left`, `right`, or any other Floating UI placement (`top-start`…). */\nexport type TooltipPosition = Placement;\n\n/**\n * What opens the tooltip. `both` (the default) opens it on hover **and** on keyboard focus — a tooltip that only\n * answers the mouse is invisible to a keyboard user (WCAG 1.4.13).\n */\nexport type TooltipEvent = \"hover\" | \"focus\" | \"both\";\n\n/** The same settings as the inputs, in one object (`[tooltipOptions]`). An input set on its own wins over the object. */\nexport interface TooltipOptions {\n /** The text of the tooltip, when `[tooltip]` is not given a value. */\n tooltipLabel?: string;\n tooltipPosition?: TooltipPosition;\n tooltipEvent?: TooltipEvent;\n tooltipStyleClass?: string;\n /** A small arrow pointing at the host. Default `true`. */\n tooltipArrow?: boolean;\n tooltipOffset?: number;\n escape?: boolean;\n disabled?: boolean;\n showDelay?: number;\n hideDelay?: number;\n life?: number;\n autoHide?: boolean;\n hideOnEscape?: boolean;\n /** The id of the tooltip element — the one `aria-describedby` points to. Generated when absent. */\n id?: string;\n}\n\n/**\n * How long the tooltip stays open after the pointer left its anchor, when `autoHide` is on: the time to cross the gap\n * between the anchor and the tooltip. Without it the tooltip would close under the pointer that is going to it, and\n * \"stays visible while hovered\" (WCAG 1.4.13) could not be honoured.\n */\nconst HOVER_GRACE_MS = 100;\n\nlet nextId = 0;\n\n/**\n * The tooltip that is open right now. A tooltip is a transient hint, never a second one next to it: opening one closes\n * the other. Without it, a host that kept the keyboard focus (the one a dialog gives back when it closes) leaves its\n * tooltip up while the pointer opens another.\n */\nlet openTooltip: { hide(): void } | undefined;\n\n/** A number input that tells \"not set\" (`undefined`) from `0`, so that `[tooltipOptions]` can fill the gap. */\nconst optionalNumber = (value: number | string | null | undefined): number | undefined => {\n if (value == null || value === \"\") return undefined;\n const parsed = Number(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n};\n\n/** A boolean input that tells \"not set\" (`undefined`) from `false`. */\nconst optionalBoolean = (value: unknown): boolean | undefined => (value == null ? undefined : booleanAttribute(value));\n\n/** Whether the browser shows a focus ring on that element (keyboard focus). A browser that cannot tell says yes. */\nconst isFocusVisible = (element: Element): boolean => {\n try {\n return element.matches(\":focus-visible\");\n } catch {\n return true;\n }\n};\n\n/** What the panel reads from the directive. Signals, so that a tooltip left open follows a change of text. */\nexport interface TooltipPanelState {\n readonly anchor: HTMLElement;\n readonly id: Signal<string>;\n readonly text: Signal<string>;\n readonly template: Signal<TemplateRef<unknown> | null>;\n readonly escape: Signal<boolean>;\n readonly placement: Signal<Placement>;\n readonly offset: Signal<number>;\n readonly styleClass: Signal<string | undefined>;\n readonly arrow: Signal<boolean>;\n readonly interactive: Signal<boolean>;\n}\n\n/**\n * The tooltip surface, created by {@link TooltipDirective} — not meant to be written in a template.\n *\n * It is placed by `injectFloatingPanel` in the browser's top layer (a manual popover), so it goes above a `<dialog>` and\n * is never clipped by an ancestor, without a `z-index`.\n */\n@Component({\n selector: \"tooltip-panel\",\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"tooltip\",\n \"[id]\": \"state()?.id()\",\n \"[class]\": \"classes()\"\n },\n template: `\n @if (state(); as s) {\n @if (s.template(); as template) {\n <ng-container [ngTemplateOutlet]=\"template\" />\n } @else if (s.escape()) {\n {{ s.text() }}\n } @else {\n <span [innerHTML]=\"s.text()\"></span>\n }\n @if (s.arrow()) {\n <span #arrow class=\"tooltip-arrow absolute size-2 rotate-45 bg-(--bg-neutral-base-alt)\" aria-hidden=\"true\"></span>\n }\n }\n `\n})\nexport class TooltipComponent {\n readonly state = input<TooltipPanelState>();\n private readonly arrowElement = viewChild<ElementRef<HTMLElement>>(\"arrow\");\n\n protected readonly classes = computed(() => cn(tooltipVariants({ interactive: this.state()?.interactive() ?? true }), this.state()?.styleClass()));\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const offset = () => this.state()?.offset() ?? 8;\n injectFloatingPanel({\n panel: () => host,\n anchor: () => this.state()?.anchor,\n placement: () => this.state()?.placement() ?? \"bottom\",\n // A getter: the helper reads it while it positions, inside its effect, so a new `tooltipOffset` moves an open tooltip.\n get offset() {\n return offset();\n },\n arrow: () => this.arrowElement()?.nativeElement,\n topLayer: true\n });\n }\n}\n\n/** The template of a tooltip with rich content: `<ng-template tooltip-content>…</ng-template>` inside the host. */\n@Directive({\n selector: \"[tooltip-content], [tooltipContent]\",\n standalone: true\n})\nexport class TooltipContentDirective {\n readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * A tooltip on any element: shown on hover and on keyboard focus, hidden on `Escape`, on blur, on scroll and as soon as\n * the host is pressed. The pointer can move onto the tooltip without closing it.\n *\n * - **Accessibility.** The tooltip is a `role=\"tooltip\"` element and the host gets `aria-describedby` pointing at it\n * **while it is open** (the id is added to an existing `aria-describedby`, and removed again). A tooltip *describes*:\n * an icon-only button still needs its own accessible name (`aria-label`).\n * - **Placement.** `injectFloatingPanel` — Floating UI with `autoUpdate`, `flip` and `shift` — in the top layer.\n * - **Content.** A string, or a template (`[tooltip]=\"tpl\"` or `<ng-template tooltip-content>`).\n *\n * @example\n * ```html\n * <button type=\"button\" aria-label=\"Delete\" tooltip=\"Delete this item\" tooltipPosition=\"top\">…</button>\n *\n * <button type=\"button\" [tooltip]=\"help\" showDelay=\"500\" hideDelay=\"200\">Help</button>\n * <ng-template #help><strong>Tip</strong> Press <kbd>Enter</kbd></ng-template>\n * ```\n */\n@Directive({\n selector: \"[tooltip]\",\n exportAs: \"tooltip\",\n standalone: true,\n host: {\n \"(mouseenter)\": \"onEnter()\",\n \"(mouseleave)\": \"onLeave()\",\n \"(focusin)\": \"onFocusIn()\",\n \"(focusout)\": \"onFocusOut()\",\n \"(pointerdown)\": \"onPointerDown()\",\n \"(pointerup)\": \"pointerFocus = false\",\n \"(pointercancel)\": \"pointerFocus = false\",\n \"(click)\": \"onClick()\"\n }\n})\nexport class TooltipDirective {\n /** The content: a text, or a template. Empty (or only blanks) → nothing is shown. */\n readonly tooltip = input<string | TemplateRef<unknown> | null | undefined>(\"\");\n\n /** Where the tooltip goes, relative to the host. Default `bottom`. */\n readonly tooltipPosition = input<TooltipPosition>();\n\n /** What opens it. Default `both` (hover and keyboard focus). */\n readonly tooltipEvent = input<TooltipEvent>();\n\n /** Delay before showing, in milliseconds. Default `0`. */\n readonly showDelay = input<number | undefined, number | string | null | undefined>(undefined, { transform: optionalNumber });\n\n /** Delay before hiding once the pointer left, in milliseconds. Default `0` (plus the short grace of `autoHide`). */\n readonly hideDelay = input<number | undefined, number | string | null | undefined>(undefined, { transform: optionalNumber });\n\n /** Hides the tooltip after that many milliseconds, even if the host is still hovered. Default `0`: no limit. */\n readonly life = input<number | undefined, number | string | null | undefined>(undefined, { transform: optionalNumber });\n\n /** Distance between the host and the tooltip, in pixels. Default `8`. */\n readonly tooltipOffset = input<number | undefined, number | string | null | undefined>(undefined, { transform: optionalNumber });\n\n /**\n * Keeps the tooltip open while the pointer is over it (WCAG 1.4.13 \"hoverable\"). Default `true`. Off, the tooltip\n * ignores the pointer and closes as soon as it leaves the host.\n */\n readonly autoHide = input<boolean | undefined, unknown>(undefined, { transform: optionalBoolean });\n\n /** Closes the tooltip on `Escape` (and keeps that `Escape` from also closing a dialog around it). Default `true`. */\n readonly hideOnEscape = input<boolean | undefined, unknown>(undefined, { transform: optionalBoolean });\n\n /** The content is text. Off, it is HTML (sanitized by Angular). Default `true`. */\n readonly escape = input<boolean | undefined, unknown>(undefined, { transform: optionalBoolean });\n\n /** Disables the tooltip. (PrimeNG calls it `disabled`; that name belongs to the native attribute of a button.) */\n readonly tooltipDisabled = input<boolean | undefined, unknown>(undefined, { transform: optionalBoolean });\n\n /** A small arrow pointing at the host, like PrimeNG's and the Chapsvision design system's. Default `true`. */\n readonly tooltipArrow = input<boolean | undefined, unknown>(undefined, { transform: optionalBoolean });\n\n /** Classes merged last into the tooltip's own, so that they win. */\n readonly tooltipStyleClass = input<string>();\n\n /** All the settings above in one object. An input set on its own wins. */\n readonly tooltipOptions = input<TooltipOptions>();\n\n /** @deprecated Legacy `@sinequa/ui` name of `tooltipPosition`. */\n readonly legacyPosition = input<TooltipPosition>(undefined, { alias: \"tooltip-position\" });\n /** @deprecated Legacy `@sinequa/ui` name of `hideDelay`. */\n readonly legacyDelay = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: \"tooltip-delay\",\n transform: optionalNumber\n });\n /** @deprecated Legacy `@sinequa/ui` name of `life` — which used to default to 3000, and no longer limits the tooltip by default. */\n readonly legacyDuration = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: \"tooltip-duration\",\n transform: optionalNumber\n });\n /** @deprecated Legacy `@sinequa/ui` name of `tooltipOffset`. */\n readonly legacyOffset = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: \"tooltip-offset\",\n transform: optionalNumber\n });\n\n private readonly contentTemplate = contentChild(TooltipContentDirective);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly document = inject(DOCUMENT);\n private readonly appRef = inject(ApplicationRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly generatedId = `tooltip-${nextId++}`;\n\n private readonly options = computed(() => this.tooltipOptions() ?? {});\n\n private readonly settings = computed(() => {\n const o = this.options();\n return {\n placement: this.tooltipPosition() ?? this.legacyPosition() ?? o.tooltipPosition ?? \"bottom\",\n event: this.tooltipEvent() ?? o.tooltipEvent ?? \"both\",\n showDelay: this.showDelay() ?? o.showDelay ?? 0,\n hideDelay: this.hideDelay() ?? this.legacyDelay() ?? o.hideDelay ?? 0,\n life: this.life() ?? this.legacyDuration() ?? o.life ?? 0,\n offset: this.tooltipOffset() ?? this.legacyOffset() ?? o.tooltipOffset ?? 8,\n autoHide: this.autoHide() ?? o.autoHide ?? true,\n hideOnEscape: this.hideOnEscape() ?? o.hideOnEscape ?? true,\n escape: this.escape() ?? o.escape ?? true,\n arrow: this.tooltipArrow() ?? o.tooltipArrow ?? true,\n disabled: this.tooltipDisabled() ?? o.disabled ?? false\n };\n });\n\n private readonly template = computed(() => {\n const value = this.tooltip();\n return value instanceof TemplateRef ? value : (this.contentTemplate()?.templateRef ?? null);\n });\n private readonly text = computed(() => {\n const value = this.tooltip();\n return typeof value === \"string\" && value.trim() ? value : (this.options().tooltipLabel ?? \"\");\n });\n\n /** There is something to show, and the tooltip is not disabled. */\n private readonly canShow = computed(() => !this.settings().disabled && (!!this.template() || this.text().trim().length > 0));\n\n private readonly id = computed(() => this.options().id ?? this.generatedId);\n\n private readonly visible = signal(false);\n /** Whether the tooltip is on screen. */\n readonly isOpen = this.visible.asReadonly();\n\n private readonly state: TooltipPanelState = {\n anchor: this.host,\n id: this.id,\n text: this.text,\n template: this.template,\n escape: computed(() => this.settings().escape),\n placement: computed(() => this.settings().placement),\n offset: computed(() => this.settings().offset),\n styleClass: computed(() => this.tooltipStyleClass() ?? this.options().tooltipStyleClass),\n arrow: computed(() => this.settings().arrow),\n interactive: computed(() => this.settings().autoHide)\n };\n\n private panel?: ComponentRef<TooltipComponent>;\n private showTimer?: ReturnType<typeof setTimeout>;\n private hideTimer?: ReturnType<typeof setTimeout>;\n private lifeTimer?: ReturnType<typeof setTimeout>;\n /** What to undo when the tooltip closes: the listeners put on the document and on the panel. */\n private teardown: Array<() => void> = [];\n\n /**\n * The press that is giving the host its focus. A click on a button focuses it: without this, the tooltip hidden by the\n * press would open again on `focusin`. Only a keyboard focus (no press) opens it.\n */\n protected pointerFocus = false;\n\n constructor() {\n // Gone with its content, or disabled while open: close. `hide()` reads signals — keep them out of this effect.\n effect(() => {\n if (!this.canShow()) untracked(() => this.hide());\n });\n inject(DestroyRef).onDestroy(() => this.hide());\n }\n\n /** Opens the tooltip now, without the `showDelay`. */\n show(): void {\n this.clearTimers();\n this.open();\n }\n\n /** Closes the tooltip now, without the `hideDelay`. */\n hide(): void {\n this.clearTimers();\n this.close();\n }\n\n protected onEnter(): void {\n if (this.settings().event !== \"focus\") this.scheduleShow();\n }\n\n protected onLeave(): void {\n if (this.settings().event !== \"focus\") this.scheduleHide(true);\n }\n\n protected onFocusIn(): void {\n if (this.settings().event === \"hover\") return;\n if (this.pointerFocus) {\n this.pointerFocus = false;\n return;\n }\n // Only a keyboard focus opens it. A dialog opened from this host hands the focus back when it closes: that focus\n // follows a click, it is not `:focus-visible`, and the tooltip must not come back up behind the pointer.\n const focused = this.document.activeElement;\n if (focused && this.host.contains(focused) && !isFocusVisible(focused)) return;\n this.scheduleShow();\n }\n\n protected onFocusOut(): void {\n if (this.settings().event !== \"hover\") this.scheduleHide(false);\n }\n\n protected onPointerDown(): void {\n this.pointerFocus = true;\n this.hide();\n }\n\n protected onClick(): void {\n this.pointerFocus = false;\n this.hide();\n }\n\n private scheduleShow(): void {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n if (this.panel || !this.canShow()) return;\n\n const { showDelay } = this.settings();\n clearTimeout(this.showTimer);\n if (showDelay > 0) {\n this.showTimer = setTimeout(() => this.open(), showDelay);\n } else {\n this.open();\n }\n }\n\n private scheduleHide(withGrace: boolean): void {\n clearTimeout(this.showTimer);\n this.showTimer = undefined;\n if (!this.panel) return;\n\n const { hideDelay, autoHide } = this.settings();\n const delay = withGrace && autoHide ? Math.max(hideDelay, HOVER_GRACE_MS) : hideDelay;\n clearTimeout(this.hideTimer);\n if (delay > 0) {\n this.hideTimer = setTimeout(() => this.close(), delay);\n } else {\n this.hide();\n }\n }\n\n private open(): void {\n if (this.panel || !this.canShow()) return;\n\n if (openTooltip && openTooltip !== this) openTooltip.hide();\n openTooltip = this;\n\n const ref = createComponent(TooltipComponent, { environmentInjector: this.environmentInjector });\n ref.setInput(\"state\", this.state);\n const element = ref.location.nativeElement as HTMLElement;\n // Inside the closest `<dialog>` or popover when there is one. A modal dialog makes the rest of the document `inert`: a\n // tooltip left on `body` could be seen but not hovered (no `autoHide`, no text selection). A popover in `auto` mode\n // closes on a click outside of it: a click on a tooltip left on `body` would count as one. The top layer still puts the\n // tooltip above its container and outside the clipping of its ancestors, wherever it sits in the DOM.\n (this.host.closest(\"dialog, [popover]\") ?? this.document.body).appendChild(element);\n this.appRef.attachView(ref.hostView);\n ref.changeDetectorRef.detectChanges();\n this.panel = ref;\n this.visible.set(true);\n this.describe(true);\n\n const { life, autoHide } = this.settings();\n\n // The pointer goes from the host to the tooltip: it stays open while it is over it.\n if (autoHide) {\n this.listen(element, \"mouseenter\", () => {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n });\n this.listen(element, \"mouseleave\", () => this.scheduleHide(false));\n }\n\n this.listen(this.document, \"keydown\", event => {\n if ((event as KeyboardEvent).key !== \"Escape\" || !this.settings().hideOnEscape) return;\n // The first Escape closes the tooltip only — not the dialog it is in, whose native `cancel` is this key's default.\n event.preventDefault();\n this.hide();\n });\n // Capture: a scroll does not bubble, and the host may sit in any scroller.\n this.listen(\n this.document,\n \"scroll\",\n event => {\n if (!element.contains(event.target as Node | null)) this.hide();\n },\n { capture: true, passive: true }\n );\n\n if (life > 0) this.lifeTimer = setTimeout(() => this.hide(), life);\n }\n\n private close(): void {\n for (const undo of this.teardown) undo();\n this.teardown = [];\n if (openTooltip === this) openTooltip = undefined;\n\n const ref = this.panel;\n if (!ref) return;\n this.panel = undefined;\n this.describe(false);\n this.appRef.detachView(ref.hostView);\n ref.destroy();\n this.visible.set(false);\n }\n\n private clearTimers(): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n clearTimeout(this.lifeTimer);\n this.showTimer = this.hideTimer = this.lifeTimer = undefined;\n }\n\n private listen(target: EventTarget, type: string, handler: (event: Event) => void, options?: AddEventListenerOptions): void {\n target.addEventListener(type, handler, options);\n this.teardown.push(() => target.removeEventListener(type, handler, options));\n }\n\n /** Adds (or removes) the tooltip's id to the host's `aria-describedby`, keeping what the consumer put there. */\n private describe(on: boolean): void {\n const id = this.id();\n const ids = (this.host.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter(token => token && token !== id);\n if (on) ids.push(id);\n\n if (ids.length) this.host.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else this.host.removeAttribute(\"aria-describedby\");\n }\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Marker classes a consumer writes in its markup (`.dialog-sep`, `.dialog-item-icon`, `.heading`): the names kept from when the\n// panel was called a dialog, because renaming them would break every template that uses them.\nexport const MENU_CONTENT_CLASS = \"dialog-content\";\nexport const MENU_ITEM_CLASS = \"dialog-item\";\nexport const MENU_ITEM_ICON_CLASS = \"dialog-item-icon\";\nexport const MENU_SEPARATOR_CLASS = \"dialog-sep\";\n// Floating dropdown panel. Not the native <dialog> — it's a small surface used\n// e.g. as a menu/dropdown shell. Consumer positions it (popover/portal).\n// Token mapping mirrors app/components/css/dialog.css verbatim.\nexport const menuPanelVariants = cva([\n \"p-(--spacing-2xs)\",\n \"rounded-(--radius-sm) bg-(--layer-page-layer) shadow-(--shadow-1)\",\n // Group heading (marker class `.heading`)\n // `font-medium` and no letter-spacing: `font-semibold` + `tracking-wide` made a short all-caps\n // label like \"FILE\" read as large as — or larger than — the items below it, despite the smaller\n // size. Text size goes below `--size-xs` (11px, galactik's smallest defined step) to `0.625rem`\n // (10px) — a plain arbitrary value, since the token scale has nothing smaller. `py` drops to\n // `--spacing-4xs` (2px, vs. the items' `--spacing-xs`) so the label sits close to its own items\n // rather than occupying a full row. `pl` sits a step inside the items' own `--spacing-md`, at\n // `--spacing-2xs` — a slight outdent so the label reads as a caption *for* the group rather than\n // another row aligned with it; `pr` keeps `--spacing-md` to match the panel's own right inset.\n \"[&_.heading]:block [&_.heading]:py-(--spacing-4xs) [&_.heading]:pr-(--spacing-md) [&_.heading]:pl-(--spacing-2xs) [&_.heading]:text-[0.625rem] [&_.heading]:font-medium [&_.heading]:text-(--font-primary-muted)\",\n // Divider (marker class `.dialog-sep`) — mirrors dialogSeparatorVariants. `--spacing-2xs` (8px)\n // instead of `--spacing-md` (16px): closer to the panel's own edge than to the items' text inset,\n // without reaching all the way to it (that full-bleed version broke on the menu's `fit-content`\n // width — see git history).\n \"[&_.dialog-sep]:mx-(--spacing-2xs) [&_.dialog-sep]:my-(--spacing-3xs) [&_.dialog-sep]:h-px [&_.dialog-sep]:w-[calc(100%-2*var(--spacing-2xs))] [&_.dialog-sep]:shrink-0 [&_.dialog-sep]:bg-(--layer-page-separator)\"\n]);\nexport const menuContentVariants = cva(\"flex w-full flex-col items-start\");\nexport const menuItemVariants = cva([\n \"flex w-full items-center gap-(--spacing-xs)\",\n \"rounded-(--radius-xs) px-(--spacing-md) py-(--spacing-xs)\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] text-(length:--size-sm) font-normal\",\n \"cursor-pointer whitespace-nowrap text-(--layer-page-font) select-none\",\n \"transition-[background-color] duration-120 ease-[ease] motion-reduce:transition-none\",\n \"not-aria-disabled:hover:bg-(--bg-primary-lighter)\",\n // Galactik : l'aria menu (roving) marque l'item navigué au clavier avec `data-active=\"true\"`\n // — on reflète l'état survol (même couleur que `:hover`).\n \"not-aria-disabled:data-[active=true]:bg-(--bg-primary-lighter)\",\n // Une liste d'options écrite à la main (`role=\"option\"`, APG) marque la ligne courante avec `aria-selected=\"true\"` :\n // c'est l'état que lisent les lecteurs d'écran, donc le style le suit. Les options d'`@angular/aria` marquent la\n // ligne courante avec `data-active` (leur `aria-selected` dit « choisie »), couvert par la règle du dessus.\n // Un `menuitem` n'a pas d'`aria-selected` : ce variant ne s'applique jamais aux items du Menu.\n \"not-aria-disabled:aria-selected:bg-(--bg-primary-lighter)\",\n \"active:bg-(--bg-primary-light)\",\n \"disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:text-(--font-neutral-disabled)\",\n \"[&_.dialog-item-icon]:inline-flex [&_.dialog-item-icon]:w-4 [&_.dialog-item-icon]:shrink-0 [&_.dialog-item-icon]:items-center [&_.dialog-item-icon]:justify-center [&_.dialog-item-icon]:text-(length:--icon-sm) [&_.dialog-item-icon]:text-(--layer-page-font)\",\n // Label fills the row so a trailing `.arrow` (submenu indicator) is pushed to the far edge\n \"[&_.label]:flex-1 [&_.label]:text-left\",\n \"[&_.arrow]:shrink-0 [&_.arrow]:text-(--font-primary-muted)\"\n]);\nexport const menuSeparatorVariants = cva(\"mx-(--spacing-2xs) my-(--spacing-3xs) h-px w-[calc(100%-2*var(--spacing-2xs))] shrink-0 bg-(--layer-page-separator)\");\n\nexport type MenuPanelVariants = VariantProps<typeof menuPanelVariants>;\n","import { Menu, MenuContent, MenuItem } from \"@angular/aria/menu\";\nimport { Component, computed, DestroyRef, Directive, effect, ElementRef, inject, input, signal, untracked } from \"@angular/core\";\nimport type { Placement } from \"@floating-ui/dom\";\nimport { cn } from \"cn\";\nimport { injectFloatingPanel } from \"../popover/inject-floating-panel\";\nimport { PopoverDirective } from \"../popover/popover.directive\";\nimport { menuContentVariants, menuItemVariants, menuPanelVariants } from \"./menu.cva\";\n\nconst menuBaseClass = \"min-w-fit w-60 max-w-fit data-[visible=false]:hidden\";\n\n/** Rôles dont l'activation change un état sans fermer le menu (cf. WAI-ARIA APG, pattern Menu). */\nconst isToggleRole = (role?: string) => role === \"menuitemcheckbox\" || role === \"menuitemradio\";\n\n@Directive({\n selector: \"Menu,menu\",\n exportAs: \"menu\",\n hostDirectives: [\n {\n directive: Menu,\n inputs: [\"wrap\", \"typeaheadDelay\"],\n outputs: [\"itemSelected\"]\n },\n {\n directive: PopoverDirective,\n inputs: [\"placement\", \"offset\", \"config\"]\n }\n ],\n host: {\n popover: \"\",\n dropdown: \"\",\n \"[class]\": \"classes()\",\n \"(click)\": \"onClick($event)\"\n }\n})\nexport class MenuComponent {\n class = input<string>();\n classes = computed(() => cn(menuPanelVariants(), menuBaseClass, this.class()));\n\n ngMenu = inject(Menu);\n readonly popover = inject(PopoverDirective);\n\n constructor() {\n const sub = this.ngMenu.itemSelected.subscribe(() => {\n // Un item bascule (checkbox / radio) ne referme pas le menu : on enchaîne plusieurs choix.\n // `activeItem` vaut aussi pour la souris — le pattern fait `goto(item)` avant `submit(item)`.\n if (isToggleRole(this.ngMenu._pattern.inputs.activeItem()?.role())) return;\n this.popover.close();\n });\n inject(DestroyRef).onDestroy(() => sub.unsubscribe());\n\n const popover = this.popover;\n effect(() => {\n const state = popover.state();\n untracked(() => {\n if (state === \"closed\") {\n this.ngMenu.close();\n return;\n }\n const firstEnabled = this.ngMenu._pattern.inputs.items().find(i => !i.disabled());\n if (firstEnabled) this.ngMenu._pattern.listBehavior.goto(firstEnabled);\n });\n });\n }\n\n onClick(event: MouseEvent) {\n // Court-circuite le `closeOnClick` du popover (enregistré plus tard, dans un `afterNextRender`) pour\n // les deux cas où le menu doit rester ouvert : ouverture d'un sous-menu, et bascule d'un item.\n const keepOpen = (event.target as Element).closest('[role=\"menuitem\"][aria-haspopup=\"true\"],[role=\"menuitemcheckbox\"],[role=\"menuitemradio\"]');\n if (keepOpen) event.stopImmediatePropagation();\n }\n}\n\n@Component({\n selector: \"menu-content,MenuContent,menucontent\",\n imports: [MenuContent],\n template: `<ng-template ngMenuContent><ng-content /></ng-template>`,\n host: {\n \"[class]\": \"classes()\"\n }\n})\nexport class MenuContentComponent {\n class = input<string>();\n classes = computed(() => cn(menuContentVariants(), this.class()));\n}\n\n@Directive({\n selector: \"menu-item,MenuItem,menuitem\",\n exportAs: \"menuitem\",\n hostDirectives: [\n {\n directive: MenuItem,\n inputs: [\"value\", \"submenu\", \"disabled\", \"role\"]\n }\n ],\n host: {\n \"[class]\": \"classes()\",\n \"[attr.aria-checked]\": \"checked()\"\n }\n})\nexport class MenuItemComponent {\n class = input<string>();\n classes = computed(() => cn(menuItemVariants(), this.class()));\n\n /**\n * État coché d'un item `role=\"menuitemcheckbox\"` / `\"menuitemradio\"`.\n *\n * `@angular/aria` pose le `role` mais pas `aria-checked` : c'est au consommateur de le fournir.\n * Laissé à `undefined`, l'attribut est absent — un item ordinaire n'est pas affecté.\n */\n checked = input<boolean | undefined>(undefined);\n}\n\n@Component({\n selector: \"sub-menu,SubMenu,submenu\",\n exportAs: \"submenu\",\n imports: [MenuContent],\n hostDirectives: [\n {\n directive: Menu,\n outputs: [\"itemSelected\"]\n }\n ],\n template: `\n <ng-template ngMenuContent>\n <ng-content />\n </ng-template>\n `,\n host: {\n ngMenu: \"\",\n \"[class]\": \"classes()\",\n \"attr.popover\": \"\",\n \"[style.width.px]\": \"width()\"\n }\n})\nexport class SubMenuComponent {\n class = input<string>();\n classes = computed(() => cn(menuPanelVariants(), \"fixed\", menuBaseClass, this.class()));\n\n placement = input<Placement>(\"right-start\");\n width = signal(0);\n\n private content = inject(ElementRef<HTMLElement>);\n private menu = inject(Menu);\n\n constructor() {\n // Hung beside its parent item. The helper also stops following it when the submenu goes away, which the previous\n // `autoUpdate` call, whose cleanup was dropped, never did.\n injectFloatingPanel({\n panel: () => this.content.nativeElement,\n anchor: () => this.menu.parent()?.element,\n placement: () => this.placement(),\n offset: 8,\n padding: 0,\n afterPosition: anchor => this.width.set(anchor.offsetWidth)\n });\n\n const destroyRef = inject(DestroyRef);\n const onScroll = (event: Event) => {\n if (this.content.nativeElement.contains(event.target as Node)) return;\n this.menu.close();\n };\n document.addEventListener(\"scroll\", onScroll, { passive: true, capture: true });\n destroyRef.onDestroy(() => document.removeEventListener(\"scroll\", onScroll, { capture: true }));\n }\n}\n","import { afterNextRender, computed, Directive, input, signal } from \"@angular/core\";\n\nimport { MenuComponent } from \"./menu\";\n\nlet _idCounter = 0;\n\n/**\n * Câble un bouton à un `<Menu>` sans avoir à écrire manuellement\n * `popovertarget` / `id`. Synchronise aussi `aria-haspopup` et `aria-expanded`.\n *\n * @example\n * ```html\n * <button [menuTrigger]=\"userMenu\">Options</button>\n *\n * <Menu #userMenu=\"menu\" (itemSelected)=\"onSelect($event)\">\n * <MenuContent>\n * <MenuItem value=\"profile\">Profil</MenuItem>\n * </MenuContent>\n * </Menu>\n * ```\n *\n * Note l'`exportAs=\"menu\"` sur la référence template — sans lui, `#userMenu`\n * résout vers l'élément hôte (et non vers `MenuComponent`), ce qui produit\n * une erreur TypeScript sur l'input `[menuTrigger]`.\n *\n * Pas de wrapper requis : `<Menu>` est lui-même un popover (via `hostDirectives`),\n * et c'est sur son élément hôte qu'est posé l'`id` auto-généré.\n */\n@Directive({\n selector: \"[menuTrigger]\",\n exportAs: \"menuTrigger\",\n host: {\n \"[attr.popovertarget]\": \"_targetId()\",\n \"[attr.aria-haspopup]\": '\"menu\"',\n \"[attr.aria-expanded]\": \"_expanded()\",\n },\n})\nexport class MenuTriggerDirective {\n menu = input.required<MenuComponent>({ alias: \"menuTrigger\" });\n\n protected _targetId = signal<string | null>(null);\n\n constructor() {\n afterNextRender(() => {\n const el = this.menu().popover.elementRef.nativeElement;\n if (!el.id) el.id = `menu-trigger-${++_idCounter}`;\n this._targetId.set(el.id);\n });\n }\n\n protected _expanded = computed(() => {\n return this.menu()?.popover?.state() === \"open\" ? \"true\" : \"false\";\n });\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// <div className=\"tab-group-items\"> wraps the sequence of tab-wrap elements.\nexport const TAB_GROUP_ITEMS_CLASS = \"tab-group-items\";\n// <div role=\"tablist\"> wrapper.\n// primary → pill tablist on a lightest-sage strip\n// secondary → white container with bottom rule + active tab overlap (-1px)\n// inner → transparent container with bottom rule + active tab overlap + z-stack\n// Token mapping mirrors app/components/css/tab-group.css verbatim.\nexport const tabGroupVariants = cva([\"flex items-center gap-(--spacing-3xs)\"], {\n variants: {\n variant: {\n // Bordure : `--stroke-primary-light` (sage-300 clair / sage-600 sombre) et non\n // `--stroke-primary-lighter` de l'amont, qui vaut exactement `--bg-primary-light`\n // (sage-200 / sage-700) et ne se voit pas — 1,35:1 contre blanc, contre 1,91:1 ici.\n // C'est aussi le token de bordure des autres conteneurs (input, select, autocomplete).\n // `border` suffit : le preflight Tailwind pose déjà `border-style: solid`.\n primary:\n \"inline-flex rounded-(--radius-md) border border-(--stroke-primary-light) bg-(--bg-primary-lightest) p-(--spacing-3xs) aria-[orientation='vertical']:flex-col\",\n // Use descendant `button` selector so we hit the tab without relying on a slot class.\n secondary: \"flex items-end border-b border-(--stroke-primary-lighter) bg-(--bg-neutral-white) **:[[role='tab']]:-mb-px\",\n // L'élévation cible l'onglet *sélectionné* (`aria-selected`), comme le fait\n // `tab-item.cva.ts` : c'est sa bordure basse colorée qui doit masquer celle du\n // conteneur. `data-active` suivrait le curseur clavier et dissocierait les deux.\n inner:\n \"flex items-end border-b border-(--stroke-primary-lighter) [&_[role='tab'][aria-selected='true']]:relative [&_[role='tab'][aria-selected='true']]:z-1 **:[[role='tab']]:-mb-px\"\n }\n },\n defaultVariants: {\n variant: \"primary\"\n }\n});\n\nexport type TabGroupVariants = VariantProps<typeof tabGroupVariants>;\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// <span className=\"tab-wrap\"> wraps the button + optional close button.\nexport const TAB_ITEM_WRAP_CLASS = \"tab-wrap\";\n// Slot classes preserved for compound targeting\nexport const TAB_ITEM_ICON_CLASS = \"tab-icon\";\nexport const TAB_ITEM_LABEL_CLASS = \"tab-label\";\nexport const tabItemVariants = cva(\n [\n // Layout\n \"inline-flex items-center gap-(--spacing-xs) px-(--spacing-md) py-0\",\n \"cursor-pointer border-0 bg-transparent whitespace-nowrap outline-none select-none\",\n \"max-w-(--tab-max-width,100%)\",\n // Typography\n \"[font-family:var(--family-base),'Hanken_Grotesk',sans-serif]\",\n \"text-(length:--size-sm) leading-none font-normal text-(--font-primary-base)\",\n // Transition\n \"transition-[background,color,border-color] duration-120 ease-[ease] motion-reduce:transition-none\",\n // Focus ring — `outline-solid` est indispensable : le `outline-none` de la base ci-dessus pose\n // `--tw-outline-style: none`, et `outline-2` ne définit que la largeur en laissant\n // `outline-style: var(--tw-outline-style)`. Sans lui, la largeur et la couleur sont bien\n // appliquées mais le trait n'est jamais peint — l'onglet focalisé au clavier n'a aucun anneau.\n \"focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-(--stroke-focus) focus-visible:outline-solid\",\n // Disabled (driven by aria-disabled)\n \"aria-disabled:cursor-not-allowed\"\n ],\n {\n variants: {\n variant: {\n // Galactik : l'état sélectionné est piloté par `aria-selected`, pas par `data-active`.\n // La directive `Tab` de @angular/aria pose les deux : `data-active` suit le curseur\n // clavier (roving), `aria-selected` la sélection réelle. Les deux ne coïncident qu'en\n // `selectionMode=\"follow\"` — or `<TabList>` expose `selectionMode`, donc en \"explicit\"\n // `data-active` déplacerait tout le style d'onglet actif sans rien sélectionner.\n // Le retour visuel de navigation clavier reste assuré par le `focus-visible:` de la base :\n // `focusMode` n'est pas exposé, seul le mode `roving` est atteignable et il déplace le\n // focus DOM sur l'onglet. Disabled via `aria-disabled`.\n //\n // L'amont ajoute par ailleurs `active:not-aria-disabled:font-bold` sur les trois\n // variants : retiré ici volontairement, le passage en gras élargit le libellé et\n // provoque un décalage de mise en page visible au clic.\n primary: [\n \"rounded-sm font-normal\",\n \"hover:not-aria-disabled:bg-(--bg-primary-hovered) hover:not-aria-disabled:text-(--font-neutral-white)\",\n \"active:not-aria-disabled:bg-(--bg-primary-pressed) active:not-aria-disabled:text-(--font-neutral-black)\",\n \"aria-selected:bg-(--bg-primary-base) aria-selected:text-(--font-neutral-white)\",\n \"aria-disabled:bg-(--bg-neutral-disabled) aria-disabled:text-(--font-neutral-muted)\"\n ],\n secondary: [\n \"rounded-t-sm border-b-2 font-normal not-aria-selected:border-b-transparent\",\n \"hover:not-aria-disabled:bg-(--bg-primary-lighter) hover:not-aria-disabled:text-(--font-primary-hovered)\",\n \"active:not-aria-disabled:bg-(--bg-primary-light) active:not-aria-disabled:text-(--font-primary-dark)\",\n \"aria-selected:border-b-(--stroke-primary-base) aria-selected:bg-(--bg-neutral-white)\",\n \"aria-selected:hover:not-aria-disabled:border-b-(--stroke-primary-hovered) aria-selected:hover:not-aria-disabled:bg-(--bg-primary-lighter)\",\n \"aria-disabled:bg-(--bg-neutral-disabled) aria-disabled:text-(--font-neutral-muted)\"\n ],\n inner: [\n \"rounded-t-sm border-b-2 font-normal not-aria-selected:border-b-transparent\",\n \"hover:not-aria-disabled:bg-(--bg-primary-lighter) hover:not-aria-disabled:text-(--font-primary-hovered)\",\n \"active:not-aria-disabled:bg-(--bg-primary-light) active:not-aria-disabled:text-(--font-primary-dark)\",\n \"aria-selected:border-b-(--stroke-primary-base) aria-selected:bg-transparent\",\n \"aria-selected:hover:not-aria-disabled:border-b-(--stroke-primary-hovered) aria-selected:hover:not-aria-disabled:bg-(--bg-primary-lighter)\",\n \"aria-disabled:text-(--font-neutral-muted)\"\n ],\n \"see-more\": \"tab-see-more\"\n },\n size: {\n sm: \"h-6 px-(--spacing-xs) py-0 text-(length:--size-xs)\",\n md: \"h-9\"\n },\n // Discriminants — consumer drives rendering; left for type-safety\n icon: { true: \"\", false: \"\" },\n badge: { true: \"\", false: \"\" },\n onClose: { true: \"\", false: \"\" }\n },\n // Galactik : volontairement AUCUN `compoundVariants`, contrairement à l'amont (@galactik/cva),\n // qui impose `h-9 !px-(--spacing-md)` au couple (primary, sm) — ajouté en amont 0.6.1 pour la\n // « parité Figma ». Ici `size` pilote la hauteur pour *tous* les variants (`sm` = 24px,\n // `md` = 36px — cf. docs/navigation/tabs.md, « Tab height/typography size ») : ce compound\n // ramènerait un onglet `primary size=\"sm\"` à 36px et son `!important` écraserait le\n // `px-(--spacing-xs)` de la taille `sm`, annulant de fait le variant.\n // L'écart vient de la structure DOM : l'amont applique le CVA à un <button> imbriqué dans un\n // wrapper `.tab-group-items` en `items-stretch`, wrapper qui n'existe pas ici (le style est\n // porté directement par l'hôte <Tab>). Ne pas restaurer sans revoir le contrat de taille.\n defaultVariants: {\n variant: \"secondary\",\n size: \"sm\",\n icon: false,\n badge: false,\n onClose: false\n }\n }\n);\n// Badge props passed to <Badge />\n// primary tab → secondary badge | secondary/inner tab → primary badge\nexport const TAB_ITEM_BADGE_SIZE = \"xs\";\nexport const TAB_ITEM_BADGE_SCHEME = \"sage\";\nexport const TAB_ITEM_BADGE_VARIANT_BY_VARIANT = {\n primary: \"secondary\",\n secondary: \"primary\",\n inner: \"primary\",\n \"see-more\": \"primary\"\n};\nexport const TAB_ITEM_CLOSE_BUTTON_CLASS = \"tab-close-btn\";\n\nexport type TabItemVariants = VariantProps<typeof tabItemVariants>;\n","import { ɵɵDeferredContentAware as DeferredContentAware, Tab, TabContent, TabList, TabPanel, Tabs } from \"@angular/aria/tabs\";\nimport { afterRenderEffect, booleanAttribute, Component, computed, Directive, effect, ElementRef, inject, input, numberAttribute } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { tabGroupVariants, TabGroupVariants } from \"./tab-group.cva\";\nimport { tabItemVariants, TabItemVariants } from \"./tab-item.cva\";\n\n@Directive({\n selector: \"Tabs\",\n hostDirectives: [Tabs],\n host: {\n \"[class]\": \"class()\"\n }\n})\nexport class TabsComponent {\n class = input<string>();\n}\n\n@Directive({\n selector: \"TabList\",\n hostDirectives: [\n {\n directive: TabList,\n inputs: [\"selectionMode\", \"selectedTab\", \"softDisabled\", \"orientation\"],\n outputs: [\"selectedTabChange\"]\n }\n ],\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class TabListComponent {\n class = input<string>();\n variant = input<TabGroupVariants[\"variant\"]>(\"primary\");\n variants = computed(() => cn(tabGroupVariants({ variant: this.variant() }), this.class()));\n}\n\n@Directive({\n selector: \"Tab\",\n hostDirectives: [\n {\n directive: Tab,\n inputs: [\"value\", \"disabled\"]\n }\n ],\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class TabComponent {\n class = input<string>(\"\");\n variant = input<TabItemVariants[\"variant\"]>(\"primary\");\n size = input<TabItemVariants[\"size\"]>(\"md\");\n noTruncate = input(false, { transform: booleanAttribute });\n\n variants = computed(() =>\n cn(\n tabItemVariants({\n variant: this.variant(),\n size: this.size(),\n class: this.class()\n }),\n // noTruncate (base): the tab stays content-sized so its label is never clipped\n this.noTruncate() && \"min-w-fit\",\n // when truncating, the tab can shrink down to --tab-min-width (0 by default)\n !this.noTruncate() && \"truncate min-w-(--tab-min-width,0px) has-[span]:[&>span]:truncate\",\n this.class()\n )\n );\n}\n\n@Component({\n selector: \"TabPanel\",\n imports: [TabContent],\n hostDirectives: [\n {\n directive: TabPanel,\n inputs: [\"value\"]\n }\n ],\n template: `<ng-template ngTabContent ><ng-content /></ng-template>`,\n host: {\n \"[class.hidden]\": \"!panel.visible()\"\n }\n})\nexport class TabPanelComponent {\n protected panel = inject(TabPanel);\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n preserveContent = input(false, { transform: booleanAttribute });\n\n /**\n * The panel's tab stop. `undefined` leaves the decision to `@angular/aria` — the same contract as\n * its own `Listbox.tabIndex`, alias included, so a caller writes `tabindex=\"-1\"`.\n *\n * Set it to -1 when the panel's content is reachable on its own: a listbox with a roving tabindex,\n * a form, a link. The APG makes a tab panel focusable only when it holds NO focusable child —\n * otherwise Tab from the tab lands on the panel, where there is nothing to activate, and the\n * content costs a second Tab. The primitive hardcodes `hidden ? -1 : 0` and exposes no input, so\n * the choice is offered here instead.\n */\n tabIndex = input<number | undefined, unknown>(undefined, {\n alias: \"tabindex\",\n transform: value => (value == null ? undefined : numberAttribute(value))\n });\n\n constructor() {\n const deferred = inject(DeferredContentAware);\n effect(() => deferred.preserveContent.set(this.preserveContent()));\n\n /*\n Written imperatively, and after the render, because no host binding of ours could hold: the\n primitive owns `[attr.tabindex]` too, and Angular only writes a binding whose value changed.\n An override is a constant — -1 whether the panel is visible or hidden — so it would be written\n once and never again, while the panel element outlives every tab change and the primitive\n rewrites its own value (-1 → 0) each time the panel becomes visible. The attribute would come\n back to 0 on the first return to a tab. A write phase runs after every host binding of the\n same render, so this one lands last whatever the order, and reading `visible()` here is what\n makes it run again exactly when the primitive rewrites the attribute.\n */\n afterRenderEffect({\n write: () => this.element.setAttribute(\"tabindex\", `${this.panel.visible() ? (this.tabIndex() ?? 0) : -1}`)\n });\n }\n}\n","import { Listbox } from \"@angular/aria/listbox\";\nimport { Directive, inject } from \"@angular/core\";\n\n/**\n * Makes the active option of an `ngListbox` follow the mouse pointer.\n *\n * `@angular/aria` only tracks the keyboard-driven active option (`data-active=\"true\"`, `aria-activedescendant`): the\n * hovered row gets its own `:hover` background, so two rows look highlighted at once. With this directive the row under\n * the pointer BECOMES the active one — a single highlight, and arrow keys carry on from the hovered row (same behaviour\n * as `ngMenu`, which already does it natively).\n *\n * Why `pointermove` and not `mouseover`/`mouseenter`: those also fire when the list scrolls (or re-renders) under a\n * still pointer, which would steal the keyboard's active row without any user gesture. `pointermove` only fires on a\n * real pointer move. Touch is ignored: a finger drag is a scroll, not a hover.\n *\n * Nothing is activated until the pointer moves, so \"Enter picks the first row\" of a freshly opened popup is unchanged.\n * Disabled rows are ignored: hovering one leaves the current active row alone.\n *\n * ```html\n * <ul ngListbox activateOnHover focusMode=\"activedescendant\">…</ul>\n * ```\n */\n@Directive({\n selector: \"[ngListbox][activateOnHover]\",\n host: {\n \"(pointermove)\": \"onPointerMove($event)\"\n }\n})\nexport class ListboxActivateOnHover {\n private readonly listbox = inject(Listbox);\n\n protected onPointerMove(event: PointerEvent): void {\n if (event.pointerType === \"touch\") return;\n\n const pattern = this.listbox._pattern;\n const { items, activeItem } = pattern.inputs;\n // Same lookup `ngMenu` uses: the option pattern whose element contains the event target.\n const item = items().find(i => i.element()?.contains(event.target as Node));\n if (!item || item === activeItem()) return;\n // A disabled row never takes the highlight from the hover (aria would allow it while `softDisabled` is on, the\n // default, since the keyboard can reach it): the active row stays as it is.\n if (item.disabled()) return;\n pattern.listBehavior.goto(item);\n }\n}\n","import { Directive, input } from \"@angular/core\";\n\nlet _labelCounter = 0;\n\n/**\n * Marks the `.select-label` element a consumer projects into a `<SelectMenu>` (a rich label that `fieldLabel`\n * cannot express), so the select can name its trigger and its list from it.\n *\n * `SelectMenu` reads it through `contentChild`, the way it reads `SelectTriggerDirective`: the directive gives the\n * element an id (generated unless it has one) and the select points `aria-labelledby` at it. Without the directive\n * a projected `.select-label` is still painted, but it is not part of the accessible name.\n *\n * @example\n * ```html\n * <SelectMenu [options]=\"fruits\" [(value)]=\"fruit\">\n * <span class=\"select-label\">Favourite <em>fruit</em></span>\n * </SelectMenu>\n * ```\n * (with `SelectLabelDirective` in the `imports` of the declaring component)\n */\n@Directive({\n selector: \".select-label, [selectLabel]\",\n standalone: true,\n host: {\n \"[attr.id]\": \"id()\"\n }\n})\nexport class SelectLabelDirective {\n /** Id of the label element. Generated when not given. */\n readonly id = input<string>(`select-label-${++_labelCounter}`);\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// Slot classes\nexport const SELECT_LABEL_CLASS = \"select-label\";\nexport const SELECT_TRIGGER_CLASS = \"select-trigger\";\nexport const SELECT_TRIGGER_LABEL_CLASS = \"select-trigger-label\";\nexport const SELECT_PLACEHOLDER_CLASS = \"select-placeholder\";\nexport const SELECT_TRIGGER_ICON_CLASS = \"select-trigger-icon\";\nexport const SELECT_MENU_CLASS = \"select-menu\";\nexport const SELECT_OPTION_CLASS = \"select-option\";\nexport const SELECT_EMPTY_CLASS = \"select-empty\";\nexport const SELECT_OPTION_LEADING_ICON_CLASS = \"select-option-leading-icon\";\nexport const SELECT_OPTION_BODY_CLASS = \"select-option-body\";\nexport const SELECT_OPTION_LABEL_CLASS = \"select-option-label\";\nexport const SELECT_OPTION_SUBLABEL_CLASS = \"select-option-sublabel\";\nexport const SELECT_OPTION_CHECK_CLASS = \"select-option-check\";\nexport const SELECT_HINT_CLASS = \"select-hint\";\nexport const SELECT_CHEVRON_CLASS = \"select-chevron\";\n\n// Outer wrap. All inner trigger/menu/option styling flows through compound\n// selectors on this root, so a marker class on the descendant is enough.\n// Token mapping mirrors app/components/css/select.css verbatim.\n//\n// Galactik note: `--shadow-1` and `--weight-semibold` live in `:root` (not\n// `@theme`), so the utility forms `shadow-1` / `font-(--weight-semibold)` do\n// not resolve here — they are written as `shadow-(--shadow-1)` / `font-semibold`.\nexport const selectWrapVariants = cva(\n [\n // The gap between the label, the field and whatever sits under it (hint, tags) belongs to the\n // `size` ladder below, like every other measurement here.\n \"relative inline-flex w-full flex-col\",\n // Label. Weight and colour are size-independent; the font size is part of the `size` ladder\n // below, along with the trigger's — a label is the heading of its control, so it scales with it\n // and never ends up smaller than the text inside the field. Weight follows `radio-label`, the\n // DS's other labelled control: semibold.\n \"[&_.select-label]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.select-label]:leading-[1.3] [&_.select-label]:font-semibold [&_.select-label]:text-(--font-primary-base)\",\n // Trigger base\n \"[&_.select-trigger]:box-border [&_.select-trigger]:inline-flex [&_.select-trigger]:w-full [&_.select-trigger]:cursor-pointer [&_.select-trigger]:items-center [&_.select-trigger]:gap-(--spacing-xs) [&_.select-trigger]:text-left\",\n \"[&_.select-trigger]:rounded-(--radius-sm) [&_.select-trigger]:border [&_.select-trigger]:border-solid [&_.select-trigger]:border-(--stroke-primary-muted)\",\n \"[&_.select-trigger]:bg-(--bg-neutral-white) [&_.select-trigger]:text-(--font-primary-base)\",\n \"[&_.select-trigger]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.select-trigger]:font-medium\",\n \"[&_.select-trigger]:transition-[border-color,background-color] [&_.select-trigger]:duration-[120ms] [&_.select-trigger]:ease-[ease] motion-reduce:[&_.select-trigger]:transition-none\",\n // Trigger hover (not aria-expanded, not disabled)\n \"[&_.select-trigger:hover:not(:disabled):not([aria-expanded='true'])]:border-(--stroke-primary-hovered) [&_.select-trigger:hover:not(:disabled):not([aria-expanded='true'])]:bg-(--bg-primary-lighter)\",\n // Trigger open. The 2px emphasis is a 1px border plus a 1px *inset* ring, not `border-2`: with\n // `box-border` and no explicit width, a thicker border grows the element's own max-content size,\n // and a shrink-to-fit ancestor (`w-fit`) passes that on as a layout shift — leftward when the\n // ancestor is right-anchored, which is how the user-profile language picker sits. An inset shadow\n // paints the same 2px for no layout at all. Not an `outline`: that slot belongs to `:focus-visible`\n // just below, and the two states overlap whenever the popup is opened from the keyboard.\n \"[&_.select-trigger[aria-expanded='true']]:border-(--stroke-primary-pressed) [&_.select-trigger[aria-expanded='true']]:bg-(--bg-neutral-white) [&_.select-trigger[aria-expanded='true']]:shadow-[inset_0_0_0_1px_var(--stroke-primary-pressed)]\",\n // Trigger focus\n \"[&_.select-trigger:focus-visible]:outline-2 [&_.select-trigger:focus-visible]:outline-offset-0 [&_.select-trigger:focus-visible]:outline-(--stroke-focus)\",\n // Trigger disabled\n \"[&_.select-trigger:disabled]:pointer-events-none [&_.select-trigger:disabled]:cursor-not-allowed [&_.select-trigger:disabled]:border-(--stroke-neutral-disabled) [&_.select-trigger:disabled]:bg-(--bg-neutral-disabled) [&_.select-trigger:disabled]:text-(--font-neutral-muted)\",\n // Trigger label slot\n \"[&_.select-trigger-label]:min-w-0 [&_.select-trigger-label]:flex-1 [&_.select-trigger-label]:overflow-hidden [&_.select-trigger-label]:text-ellipsis [&_.select-trigger-label]:whitespace-nowrap\",\n // Placeholder\n \"[&_.select-placeholder]:text-(--font-primary-muted)\",\n // Trigger icon\n \"[&_.select-trigger-icon]:inline-flex [&_.select-trigger-icon]:h-3.5 [&_.select-trigger-icon]:w-3.5 [&_.select-trigger-icon]:shrink-0 [&_.select-trigger-icon]:items-center [&_.select-trigger-icon]:justify-center [&_.select-trigger-icon]:text-[12px] [&_.select-trigger-icon]:text-(--font-primary-muted)\",\n // Chevron\n \"[&_.select-chevron]:inline-flex [&_.select-chevron]:shrink-0 [&_.select-chevron]:items-center [&_.select-chevron]:justify-center [&_.select-chevron]:text-[10px] [&_.select-chevron]:text-(--font-primary-muted) [&_.select-chevron]:transition-transform [&_.select-chevron]:duration-150 [&_.select-chevron]:ease-[ease]\",\n \"[&_.select-trigger[aria-expanded='true']_.select-chevron]:rotate-180\",\n \"[&_.select-menu]:block [&_.select-menu]:max-h-[280px] [&_.select-menu]:overflow-hidden [&_.select-menu]:overflow-y-auto [&_.select-menu]:p-0\",\n \"[&_.select-menu]:rounded-(--radius-sm) [&_.select-menu]:border [&_.select-menu]:border-solid [&_.select-menu]:border-(--stroke-primary-light) [&_.select-menu]:bg-(--bg-neutral-white) [&_.select-menu]:shadow-(--shadow-1)\",\n // Options\n \"[&_.select-option]:box-border [&_.select-option]:flex [&_.select-option]:w-full [&_.select-option]:cursor-pointer [&_.select-option]:items-center [&_.select-option]:gap-(--spacing-xs) [&_.select-option]:border-0 [&_.select-option]:bg-transparent [&_.select-option]:px-(--spacing-md) [&_.select-option]:py-(--spacing-xs) [&_.select-option]:text-left [&_.select-option]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.select-option]:text-(length:--size-sm) [&_.select-option]:text-(--font-primary-muted)\",\n \"[&_.select-option:focus-visible]:bg-(--bg-primary-lighter) [&_.select-option:hover]:bg-(--bg-primary-lighter) [&_.select-option:hover]:outline-none\",\n // Galactik : l'aria listbox (focusMode activedescendant) marque l'option navigée au clavier\n // avec `data-active=\"true\"` — on reflète l'état survol (même spécificité que `:hover` ici).\n \"[&_.select-option[data-active='true']]:bg-(--bg-primary-lighter)\",\n \"[&_.select-option[aria-selected='true']]:text-(--font-primary-dark)\",\n \"[&_.select-option-label]:overflow-hidden [&_.select-option-label]:text-(length:--size-sm) [&_.select-option-label]:font-medium [&_.select-option-label]:text-ellipsis [&_.select-option-label]:whitespace-nowrap [&_.select-option-label]:text-(--font-primary-base)\",\n \"[&_.select-option[aria-selected='true']_.select-option-label]:font-semibold\",\n \"[&_.select-option-sublabel]:text-[11px] [&_.select-option-sublabel]:tracking-[0.05em] [&_.select-option-sublabel]:text-(--font-primary-muted) [&_.select-option-sublabel]:uppercase\",\n \"[&_.select-option-check]:ml-auto [&_.select-option-check]:inline-flex [&_.select-option-check]:h-4 [&_.select-option-check]:w-4 [&_.select-option-check]:items-center [&_.select-option-check]:justify-center [&_.select-option-check]:text-[11px] [&_.select-option-check]:text-(--font-primary-muted)\",\n \"[&_.select-option-body]:flex [&_.select-option-body]:min-w-0 [&_.select-option-body]:flex-1 [&_.select-option-body]:flex-col [&_.select-option-body]:gap-px\",\n \"[&_.select-option-leading-icon]:inline-flex [&_.select-option-leading-icon]:h-3.5 [&_.select-option-leading-icon]:w-3.5 [&_.select-option-leading-icon]:shrink-0 [&_.select-option-leading-icon]:items-center [&_.select-option-leading-icon]:justify-center [&_.select-option-leading-icon]:text-[12px] [&_.select-option-leading-icon]:text-(--font-primary-muted)\",\n \"[&_.select-empty]:px-(--spacing-md) [&_.select-empty]:py-(--spacing-md) [&_.select-empty]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.select-empty]:text-(length:--size-sm) [&_.select-empty]:text-(--font-primary-muted) [&_.select-empty]:italic\",\n \"[&_.select-hint]:m-0 [&_.select-hint]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.select-hint]:text-(length:--size-sm) [&_.select-hint]:text-(--font-primary-muted)\"\n ],\n {\n variants: {\n // One rung per size for the field *and* its label. Both font sizes live here rather than in\n // the base list on purpose: declared in both places they would be two same-group utilities\n // fighting, and which one wins would rest on tailwind-merge's grouping of\n // `text-(length:…)` under an arbitrary modifier. Declared once, there is nothing to arbitrate.\n //\n // `sm` takes the field text down to `--size-sm` too — 12px content in a 24px field is what\n // `inputWrapVariants` and `textareaWrapVariants` already do, and it keeps the label from\n // being the smaller of the two at that rung.\n //\n // The vertical gap rides the same ladder, on the spacing scale's own doubling steps\n // (`4xs` → `3xs` → `2xs`, 2 → 4 → 8px). A single 8px for all three was inherited from a\n // reference CSS where the label was 12px: under a 14–16px semibold label it read as a\n // detached caption rather than the field's own heading, and it pushed the hint and tags away\n // from the field they belong to.\n size: {\n lg: \"gap-(--spacing-2xs) [&_.select-label]:text-(length:--size-lg) [&_.select-trigger]:h-11 [&_.select-trigger]:gap-(--spacing-xs) [&_.select-trigger]:px-(--spacing-md) [&_.select-trigger]:text-(length:--size-base)\",\n md: \"gap-(--spacing-3xs) [&_.select-label]:text-(length:--size-base) [&_.select-trigger]:h-9 [&_.select-trigger]:gap-(--spacing-sm) [&_.select-trigger]:px-(--spacing-xs) [&_.select-trigger]:text-(length:--size-base)\",\n sm: \"gap-(--spacing-4xs) [&_.select-label]:text-(length:--size-sm) [&_.select-trigger]:h-6 [&_.select-trigger]:gap-(--spacing-sm) [&_.select-trigger]:px-(--spacing-xs) [&_.select-trigger]:text-(length:--size-sm)\"\n }\n },\n defaultVariants: {\n size: \"md\"\n }\n }\n);\n\n// Trigger button — kept as standalone CVA for direct use in React. Returns\n// the same styles via inline utilities. Identical to the wrap-compound output.\nexport const selectTriggerVariants = cva(\n [\n \"select-trigger box-border inline-flex w-full cursor-pointer items-center gap-(--spacing-xs) text-left\",\n // Same contrasted resting border as the wrap compound above (RGAA 3.3 / WCAG 1.4.11): this\n // standalone form had been left on `--stroke-primary-light` (1.91:1) when the wrap moved to\n // `--stroke-primary-muted` (6.52:1), so a React consumer of this CVA still failed the audit.\n \"rounded-(--radius-sm) border border-solid border-(--stroke-primary-muted)\",\n \"bg-(--bg-neutral-white) text-(--font-primary-base)\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] font-medium\",\n \"transition-[border-color,background-color] duration-[120ms] ease-[ease] motion-reduce:transition-none\",\n \"enabled:not-aria-expanded:hover:border-(--stroke-primary-hovered) enabled:not-aria-expanded:hover:bg-(--bg-primary-lighter)\",\n // Same 1px border + 1px inset ring as the wrap compound, for the same no-reflow reason.\n \"aria-expanded:border-(--stroke-primary-pressed) aria-expanded:bg-(--bg-neutral-white) aria-expanded:shadow-[inset_0_0_0_1px_var(--stroke-primary-pressed)]\",\n \"focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-(--stroke-focus)\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:border-(--stroke-neutral-disabled) disabled:bg-(--bg-neutral-disabled) disabled:text-(--font-neutral-muted)\"\n ],\n {\n variants: {\n size: {\n lg: \"h-11 gap-(--spacing-xs) px-(--spacing-md) text-(length:--size-base)\",\n md: \"h-9 gap-(--spacing-sm) px-(--spacing-xs) text-(length:--size-base)\",\n sm: \"h-6 gap-(--spacing-sm) px-(--spacing-xs) text-(length:--size-sm)\"\n },\n empty: {\n true: \"[&_.select-trigger-label]:text-(--font-primary-muted)\",\n false: \"\"\n }\n },\n defaultVariants: {\n size: \"md\",\n empty: false\n }\n }\n);\n\n// Chevron — direct use for non-button hosts; rotates 180° when `open=true`.\nexport const selectChevronVariants = cva(\n [\n \"inline-flex shrink-0 items-center justify-center text-(--font-primary-muted)\",\n \"text-[10px]\",\n \"transition-transform duration-150 ease-[ease] motion-reduce:transition-none\"\n ],\n {\n variants: {\n open: {\n true: \"rotate-180\",\n false: \"\"\n }\n },\n defaultVariants: { open: false }\n }\n);\n\n// Listbox option for direct use (renders identically to the wrap-compound output).\nexport const selectOptionVariants = cva([\n \"box-border flex w-full items-center gap-(--spacing-xs) px-(--spacing-md) py-(--spacing-xs)\",\n \"cursor-pointer border-0 bg-transparent text-left\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] text-(length:--size-sm) text-(--font-primary-muted)\",\n \"transition-[background-color] duration-100 ease-[ease] motion-reduce:transition-none\",\n // No `:hover` background: the hovered row becomes THE active one (`activateOnHover` on the listbox), so `data-active`\n // is the only highlight: a `:hover` too would light two rows at once (keyboard row + hovered row).\n \"focus-visible:bg-(--bg-primary-lighter) focus-visible:outline-none\",\n \"data-[active=true]:bg-(--bg-primary-lighter)\",\n \"aria-selected:text-(--font-primary-dark)\",\n \"aria-disabled:cursor-not-allowed aria-disabled:text-(--font-neutral-muted)\"\n]);\n\nexport const selectMenuVariants = cva([\n \"block max-h-[280px] overflow-hidden overflow-y-auto p-0\",\n \"rounded-(--radius-sm) border border-solid border-(--stroke-primary-light) bg-(--bg-neutral-white) shadow-(--shadow-1)\"\n]);\n\nexport type SelectWrapVariants = VariantProps<typeof selectWrapVariants>;\nexport type SelectTriggerVariants = VariantProps<typeof selectTriggerVariants>;\nexport type SelectChevronVariants = VariantProps<typeof selectChevronVariants>;\nexport type SelectOptionVariants = VariantProps<typeof selectOptionVariants>;\n","import { Combobox, ComboboxPopup, ComboboxWidget } from \"@angular/aria/combobox\";\nimport { Listbox, Option } from \"@angular/aria/listbox\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { ChevronDownIcon } from \"../../icons/chevron-down.icon\";\nimport { cn } from \"cn\";\nimport {\n afterRenderEffect,\n booleanAttribute,\n Component,\n computed,\n contentChild,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n input,\n model,\n output,\n TemplateRef,\n viewChild\n} from \"@angular/core\";\nimport type { FormValueControl } from \"@angular/forms/signals\";\nimport type { Placement } from \"@floating-ui/dom\";\n\nimport { ListboxActivateOnHover } from \"../combobox/listbox-activate-on-hover\";\nimport { injectFloatingPanel } from \"../popover/inject-floating-panel\";\nimport { SelectLabelDirective } from \"./select-label\";\nimport { SELECT_EMPTY_CLASS, SELECT_MENU_CLASS, SELECT_OPTION_CLASS, selectWrapVariants, type SelectWrapVariants } from \"./select.cva\";\n\n/**\n * Contexte fourni au template `#selectOption`.\n *\n * @example\n * ```html\n * <ng-template #selectOption let-option let-selected=\"selected\">\n * {{ option.label }} @if (selected) { ✓ }\n * </ng-template>\n * ```\n */\nexport interface SelectOptionContext<T> {\n $implicit: T;\n selected: boolean;\n index: number;\n}\n\n/**\n * Référence partagée du `Select`, exposée via DI aux sous-directives (le trigger).\n * On injecte ce token — jamais `SelectComponent` directement — pour éviter les\n * dépendances circulaires entre le composant et ses directives filles.\n */\nexport const SELECT_REF = new InjectionToken<SelectComponent<unknown>>(\"SELECT_REF\");\n\nlet _idCounter = 0;\n\n/**\n * Directive à poser sur l'élément déclencheur (typiquement un `<button>`) d'un `<SelectMenu>`.\n * Applique le comportement `ngCombobox` (non éditable) : `role=combobox`, `aria-expanded`,\n * ouverture/fermeture au clic et au clavier.\n *\n * Optionnelle : sans trigger projeté, `SelectMenu` rend un trigger par défaut (bouton + libellé\n * de la valeur + chevron), piloté par `placeholder`. On ne projette un `[selectTrigger]` que pour\n * un trigger totalement custom (icône, chrome différent, pas de chevron…).\n *\n * @example\n * ```html\n * <SelectMenu [(value)]=\"v\"><button selectTrigger type=\"button\">{{ v() }}</button>…</SelectMenu>\n * ```\n */\n@Directive({\n selector: \"[selectTrigger]\",\n exportAs: \"selectTrigger\",\n hostDirectives: [{ directive: Combobox, inputs: [\"disabled\"] }]\n})\nexport class SelectTriggerDirective {\n /** L'instance `Combobox` appliquée à l'élément déclencheur. */\n readonly combobox = inject(Combobox);\n /** L'élément DOM du déclencheur (origine du positionnement du popup). */\n readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n}\n\n/**\n * `Select` — liste déroulante générique (choix unique ou multiple via `multiple`), bâtie sur les\n * primitives accessibles `@angular/aria` (combobox non éditable + listbox). Se comporte comme un\n * `<select>` HTML mais accepte un contenu d'option et de déclencheur arbitraire.\n *\n * Le trigger par défaut (bouton + libellé + chevron) est rendu automatiquement ; on ne\n * projette un `[selectTrigger]` que pour un trigger custom. Les options sont fournies via\n * `[options]` et rendues par le template optionnel `#selectOption` (à défaut, le `label` est\n * affiché) ; la valeur dans le trigger par défaut est rendue par `#selectValue` (à défaut, `label`).\n *\n * @example Usage courant — trigger par défaut, `fieldLabel` / `placeholder` / `hint` en inputs :\n * ```html\n * <SelectMenu [options]=\"fruits\" [(value)]=\"fruit\" [label]=\"labelOf\"\n * fieldLabel=\"Fruit\" placeholder=\"Choisir…\" hint=\"Sélectionne un fruit.\">\n * <ng-template #selectOption let-o>{{ o.name }}</ng-template>\n * </SelectMenu>\n * ```\n *\n * @example Trigger custom (échappatoire) — via `[selectTrigger]` :\n * ```html\n * <SelectMenu [options]=\"fruits\" [(value)]=\"fruit\" [label]=\"labelOf\">\n * <button selectTrigger type=\"button\" variant=\"tertiary\">{{ fruit()?.name ?? 'Choisir…' }}</button>\n * <ng-template #selectOption let-o>{{ o.name }}</ng-template>\n * </SelectMenu>\n * ```\n */\n@Component({\n selector: \"SelectMenu,select-menu\",\n exportAs: \"select\",\n standalone: true,\n imports: [Combobox, ComboboxPopup, ComboboxWidget, Listbox, ListboxActivateOnHover, Option, NgTemplateOutlet, ChevronDownIcon],\n template: `\n <!-- The label span is what the default trigger and the popup are named from (aria-labelledby below).\n Without a fieldLabel, an aria-label is rendered as a hidden span for the same purpose, so that the\n name is \"<label>, <value>\" in both cases — an aria-label on the button itself would replace the value. -->\n <ng-content select=\".select-label\">\n @if (fieldLabel(); as l) {\n <span class=\"select-label\" [attr.id]=\"labelId()\">{{ l }}</span>\n } @else if (ariaLabel(); as a) {\n @if (!hasCustomTrigger()) {\n <span class=\"sr-only\" [attr.id]=\"labelId()\">{{ a }}</span>\n }\n }\n </ng-content>\n\n <!-- Trigger : soit celui projeté via [selectTrigger], soit — à défaut — le trigger par défaut\n (fallback content de <ng-content>, résolu synchroniquement par Angular). -->\n <ng-content select=\"[selectTrigger]\">\n <button\n ngCombobox\n type=\"button\"\n class=\"select-trigger\"\n [attr.id]=\"triggerId\"\n [attr.aria-labelledby]=\"hasName() ? labelId() + ' ' + triggerId : null\"\n [disabled]=\"disabled()\"\n [attr.disabled]=\"disabled() ? '' : null\"\n (blur)=\"touch.emit()\">\n @if (hasValue()) {\n <span class=\"select-trigger-label\">\n @if (valueTemplate(); as vt) {\n <ng-container [ngTemplateOutlet]=\"vt\" [ngTemplateOutletContext]=\"{ $implicit: value()! }\" />\n } @else {\n {{ triggerLabel() }}\n }\n </span>\n } @else {\n <span class=\"select-trigger-label select-placeholder\">{{ placeholder() }}</span>\n }\n <chevron-down-icon class=\"select-chevron\" />\n </button>\n </ng-content>\n\n @if (combobox(); as cb) {\n <ng-template ngComboboxPopup [combobox]=\"cb\" popupType=\"listbox\">\n <ul\n #listbox\n ngComboboxWidget\n ngListbox\n #lb=\"ngListbox\"\n activateOnHover\n focusMode=\"activedescendant\"\n [attr.aria-labelledby]=\"listboxLabelledBy()\"\n [multi]=\"multiple()\"\n [selectionMode]=\"selectionMode()\"\n [wrap]=\"wrap()\"\n [value]=\"listboxValue()\"\n (valueChange)=\"onSelectionChange($event)\"\n [activeDescendant]=\"lb.activeDescendant()\"\n [class]=\"popupClasses()\">\n @for (option of options(); track keyOf(option); let i = $index) {\n <li\n ngOption\n [value]=\"keyOf(option)\"\n [disabled]=\"disabledPredicate()(option)\"\n [label]=\"label()(option)\"\n [class]=\"optionClass\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate() ?? defaultOption\"\n [ngTemplateOutletContext]=\"{ $implicit: option, selected: isSelected(option), index: i }\" />\n </li>\n } @empty {\n <li [class]=\"emptyClass\">{{ noOptionsText() }}</li>\n }\n </ul>\n </ng-template>\n }\n\n <ng-content select=\".select-hint\">\n @if (hint(); as h) {\n <p class=\"select-hint\">{{ h }}</p>\n }\n </ng-content>\n\n <ng-template #defaultOption let-option>{{ label()(option) }}</ng-template>\n `,\n host: {\n \"[class]\": \"hostClasses()\",\n // The host has no role, where ARIA forbids `aria-label`: a static `aria-label=\"…\"` written by the\n // consumer is consumed by the input below and must not stay on this element.\n \"[attr.aria-label]\": \"null\"\n },\n providers: [{ provide: SELECT_REF, useExisting: SelectComponent }]\n})\nexport class SelectComponent<TOption, TValue = TOption | null> implements FormValueControl<TValue> {\n /**\n * Valeur sélectionnée (liaison bidirectionnelle). Sa forme dépend du mode et est portée par le\n * paramètre de type `TValue` (défaut `TOption | null`) — le type du field reste ainsi exact, ce qui\n * garde `[formField]` typé correctement (contrat `FormValueControl` invariant sur `TValue`) :\n *\n * - Mono (défaut) : `TValue = TOption | null` — `null` = aucune sélection.\n * - Multi (`multiple`) : lier une valeur `TOption[]` (`[value]`/`[(value)]`) infère `TValue = TOption[]` — `[]` = aucune sélection.\n *\n * Unique membre requis du contrat `FormValueControl` des signal forms : le composant est utilisable\n * soit en liaison directe (`[(value)]=\"v\"`), soit comme champ de formulaire (`[formField]=\"form.field\"`).\n *\n * L'état vide mono est `null` (et non `undefined`) : relié à un field signal-form, `undefined`\n * supprimerait la propriété du field (orphan `NG01902`), alors que `null` est une valeur valide.\n */\n readonly value = model<TValue>(null as TValue);\n\n /**\n * Membre optionnel du contrat `FormValueControl` : émis quand l'utilisateur interagit (sélection ou\n * perte de focus du trigger interne). La directive `[formField]` l'écoute (`listenToCustomControlOutput('touch')`)\n * pour marquer le field comme *touched* — indispensable pour n'afficher les erreurs de validation qu'après\n * interaction. `output` (`@angular/core`) → aucune dépendance runtime à `@angular/forms`.\n */\n readonly touch = output<void>();\n\n /** Options disponibles. */\n readonly options = input<readonly TOption[]>([]);\n\n /** Placement du popup (Floating UI). */\n readonly placement = input<Placement>(\"bottom-start\");\n\n /** Taille du champ DS (hauteur du trigger marqué `select-trigger`). */\n readonly size = input<SelectWrapVariants[\"size\"]>(\"md\");\n\n /**\n * Libellé du champ, rendu au-dessus du trigger (`.select-label`). Sert de repli au contenu\n * projeté : un `<… class=\"select-label\">` projeté a la priorité (pour un libellé riche).\n *\n * Nommé `fieldLabel` et non `label` car `label` désigne déjà la fonction texte d'une option.\n */\n readonly fieldLabel = input<string>();\n\n /**\n * Nom accessible du champ quand il n'y a pas de `fieldLabel` visible (ex. un sélecteur compact). Même\n * convention que les autres composants galactik : `aria-label=\"…\"` ou `[aria-label]=\"expr\"`.\n *\n * Le trigger par défaut est nommé « <nom>, <valeur> » (`aria-labelledby` vers ce nom puis vers lui-même),\n * et la liste du popup porte le même nom. Ignoré si un trigger custom est projeté : son nom est alors\n * à la charge du consommateur. À traduire, comme tout libellé de la librairie.\n */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n /**\n * Texte affiché dans le trigger par défaut quand aucune valeur n'est sélectionnée.\n * Ignoré si un trigger custom est projeté via `[selectTrigger]`.\n */\n readonly placeholder = input<string>(\"\");\n\n /**\n * Texte d'aide rendu sous le trigger (`.select-hint`). Sert de repli au contenu projeté :\n * un `<… class=\"select-hint\">` projeté a la priorité.\n */\n readonly hint = input<string>();\n\n /** Désactive le trigger par défaut. Ignoré si un trigger custom est projeté. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Classe(s) additionnelle(s) pour le host (racine de styling DS). */\n readonly class = input<string>();\n\n /**\n * `explicit` (défaut) : les flèches surlignent, la valeur n'est validée qu'à\n * l'Entrée/au clic. `follow` : la sélection suit la navigation (comme un `<select>` natif).\n */\n readonly selectionMode = input<\"explicit\" | \"follow\">(\"explicit\");\n\n /**\n * Sélection multiple. En multi, `value` porte un tableau `T[]` (vide `[]` = aucune sélection),\n * le popup reste ouvert à chaque (dé)sélection et le listbox ARIA passe en `[multi]`.\n */\n readonly multiple = input(false, { transform: booleanAttribute });\n\n /** Autoriser le bouclage de la navigation clavier. */\n readonly wrap = input(true, { transform: booleanAttribute });\n\n /** Clé d'identité d'une option (comparaison stricte pour la sélection). Défaut : l'option elle-même. */\n readonly key = input<(option: TOption) => unknown>(option => option);\n\n /** Libellé texte d'une option (typeahead + template par défaut). */\n readonly label = input<(option: TOption) => string>(option => String(option));\n\n /** Prédicat de désactivation d'une option. */\n readonly disabledPredicate = input<(option: TOption) => boolean>(() => false, { alias: \"optionDisabled\" });\n\n /** Texte affiché à la place de la liste quand `options` est vide. */\n readonly noOptionsText = input<string>(\"No options\");\n\n /** Classe(s) additionnelle(s) pour la surface du popup. */\n readonly contentClass = input<string>();\n\n /** Template de rendu d'une option (contexte : `SelectOptionContext<TOption>`). */\n readonly optionTemplate = contentChild<TemplateRef<SelectOptionContext<TOption>>>(\"selectOption\");\n\n /**\n * Template optionnel de rendu de la valeur sélectionnée dans le trigger par défaut\n * (contexte : `{ $implicit: TValue }`). À défaut, le `label` de la valeur est affiché.\n * Ignoré si un trigger custom est projeté via `[selectTrigger]`.\n */\n readonly valueTemplate = contentChild<TemplateRef<{ $implicit: TValue }>>(\"selectValue\");\n\n /** Trigger custom projeté (`[selectTrigger]`) s'il existe ; sinon le trigger interne par défaut (fallback de `ng-content`). */\n private readonly trigger = contentChild(SelectTriggerDirective);\n private readonly internalCombobox = viewChild(Combobox);\n private readonly listboxEl = viewChild<ElementRef<HTMLElement>>(\"listbox\");\n private readonly listbox = viewChild(Listbox);\n\n /**\n * L'instance `Combobox` active : celle du trigger projeté si présent, sinon celle du\n * trigger interne par défaut. Disponible une fois le contenu/la vue résolus.\n */\n readonly combobox = computed(() => this.trigger()?.combobox ?? this.internalCombobox() ?? null);\n\n /** Élément d'ancrage du popup (Floating UI) : l'hôte du combobox actif. */\n private readonly triggerElement = computed(() => this.combobox()?.element ?? null);\n\n /** Préfixe des ids propres à cette instance (libellé, trigger par défaut). */\n protected readonly id = `select-menu-${++_idCounter}`;\n private readonly ownLabelId = `${this.id}-label`;\n protected readonly triggerId = `${this.id}-trigger`;\n\n /** Libellé riche projeté par le consommateur (`.select-label` + `SelectLabelDirective`), s'il y en a un. */\n private readonly projectedLabel = contentChild(SelectLabelDirective);\n\n /** Id de l'élément qui porte le libellé : celui du libellé projeté, sinon notre propre span (`fieldLabel` / `aria-label`). */\n protected readonly labelId = computed(() => this.projectedLabel()?.id() ?? this.ownLabelId);\n\n /** Vrai si le champ a un libellé quelconque dont nommer le trigger : projeté, `fieldLabel` ou `aria-label`. */\n protected readonly hasName = computed(() => !!(this.projectedLabel() || this.fieldLabel() || this.ariaLabel()));\n\n /** Vrai si le consommateur a projeté son propre `[selectTrigger]` (il en porte alors le nom). */\n protected readonly hasCustomTrigger = computed(() => !!this.trigger());\n\n /**\n * Nom de la liste du popup : le libellé visible du champ, ou l'`aria-label` rendu en span masqué (que le\n * trigger par défaut seul produit). Une liste sans nom serait annoncée comme une simple « liste ».\n */\n protected readonly listboxLabelledBy = computed(() => {\n if (this.projectedLabel() || this.fieldLabel()) return this.labelId();\n return this.ariaLabel() && !this.hasCustomTrigger() ? this.labelId() : null;\n });\n\n /** Classe racine DS (wrap) : rayonne le styling vers le trigger marqué, le popup et les options. */\n protected readonly hostClasses = computed(() => cn(selectWrapVariants({ size: this.size() }), this.class()));\n\n /**\n * Ligne d'option : classe marqueur DS. La surbrillance de navigation clavier (`data-active`)\n * est gérée par le wrap (`selectWrapVariants`) pour avoir la bonne spécificité face au `bg-transparent`.\n */\n protected readonly optionClass = SELECT_OPTION_CLASS;\n\n /** Ligne affichée par le `@empty` du `@for` quand `options()` est vide. */\n protected readonly emptyClass = SELECT_EMPTY_CLASS;\n\n /**\n * Popup : classe marqueur DS `select-menu` (surface stylée par le wrap) + largeur adaptée au trigger.\n * `z-50` car le popup est `position: fixed` (le DS `.select-menu` ne pose ni position ni z-index,\n * il suppose un wrap `relative` + menu `absolute`).\n *\n * `fixed` est déclaré **ici** et non seulement écrit par Floating UI : `DeferredContent`\n * (`@angular/aria`) crée la vue du popup via le `ViewContainerRef` du `<ng-template>` lui-même —\n * pas de portail, elle atterrit donc *dans* l'hôte. Sans `position` dans les classes, le `<ul>`\n * existe dans le flux entre son écriture par le change detection et celle de Floating UI, avec un\n * `w-max` qui élargit un hôte en largeur intrinsèque (`w-fit`). C'est le décalage de mise en page\n * observé sur le sélecteur de langue du profil utilisateur, poussé contre le bord droit.\n */\n protected readonly popupClasses = computed(() =>\n cn(SELECT_MENU_CLASS, \"fixed z-50 w-max min-w-(--select-trigger-w,0px) max-w-[min(24rem,90vw)]\", this.contentClass())\n );\n\n /**\n * Sélection normalisée en tableau, quel que soit le mode. Branché sur `multiple()` (et non sur\n * `Array.isArray` : une option `T` peut légitimement être un tableau). Source unique pour le\n * listbox, `hasValue`, `isSelected` et le libellé du trigger.\n */\n protected readonly selectedValues = computed<TOption[]>(() => {\n const v = this.value();\n if (this.multiple()) return (v as TOption[] | null) ?? [];\n return v == null ? [] : [v as TOption];\n });\n\n /** Valeur passée au listbox ARIA : tableau de clés. */\n protected readonly listboxValue = computed(() => this.selectedValues().map(o => this.key()(o)));\n\n /** Libellé de la valeur dans le trigger par défaut (mono : le libellé ; multi : les libellés joints). */\n protected readonly triggerLabel = computed(() =>\n this.selectedValues()\n .map(o => this.label()(o))\n .join(\", \")\n );\n\n /** Vrai si au moins une valeur est sélectionnée. */\n protected readonly hasValue = computed(() => this.selectedValues().length > 0);\n\n constructor() {\n // Positionnement Floating UI : le popup est un contenu différé (rendu à l'ouverture), le helper le (re)cale\n // chaque fois qu'il apparaît. `popupClasses` porte `fixed` (voir le helper : les coordonnées sont celles du viewport).\n injectFloatingPanel({\n panel: () => this.listboxEl()?.nativeElement,\n anchor: () => this.triggerElement(),\n placement: () => this.placement(),\n anchorWidthVariable: \"--select-trigger-w\"\n });\n\n // Ramène l'élément actif du listbox dans la zone visible — API native @angular/aria\n // (cf. https://angular.dev/guide/aria/select). Réactif : à l'ouverture l'actif vaut\n // l'option sélectionnée (focusMode activedescendant), et il change à chaque navigation\n // clavier → le popup suit dans les deux cas.\n afterRenderEffect(() => this.listbox()?.scrollActiveItemIntoView());\n }\n\n protected keyOf(option: TOption): unknown {\n return this.key()(option);\n }\n\n protected isSelected(option: TOption): boolean {\n const k = this.key()(option);\n return this.selectedValues().some(v => this.key()(v) === k);\n }\n\n protected onSelectionChange(keys: readonly unknown[]): void {\n const picked = keys.map(k => this.options().find(option => this.key()(option) === k)).filter((option): option is TOption => option !== undefined);\n\n if (this.multiple()) {\n // Multi : `value` porte l'ensemble sélectionné (éventuellement `[]`).\n this.value.set(picked as TValue);\n } else {\n // Mono : le listbox (multi-capable) émet une étape vide `[]` lors d'un changement de valeur\n // (retrait avant ajout) et d'un toggle-off → on mappe vers `null` (jamais `undefined`, qui\n // orphelinerait un field signal-form — `NG01902`). `null` = désélection sûre partout.\n this.value.set((picked.at(-1) ?? null) as TValue);\n }\n this.touch.emit();\n // Mono + `explicit` : `valueChange` = validation (Entrée/clic) → on referme. En `follow` il se\n // déclenche à chaque navigation ; en multi on garde le popup ouvert pour enchaîner les (dé)sélections.\n if (!this.multiple() && this.selectionMode() === \"explicit\") {\n this.combobox()?.expanded.set(false);\n }\n }\n}\n","import type { Combobox } from \"@angular/aria/combobox\";\nimport { afterRenderEffect } from \"@angular/core\";\n\n/**\n * Workaround for https://github.com/angular/components/issues/33361.\n *\n * `@angular/aria`'s `keyboardEventRelayEffect` reads `controlTarget()` outside of `untracked()`, so it re-runs when the\n * popup widget registers again on a later expansion and re-dispatches the LAST relayed keyboard event onto the fresh\n * listbox: reopening the popup with ArrowDown lands on the 2nd option instead of the 1st. Clearing the relayed event\n * whenever the popup collapses prevents the replay.\n *\n * Call it from the constructor (an injection context) of every component that owns an `ngCombobox`. It is the one place\n * to delete once the issue is fixed upstream.\n *\n * ```ts\n * private readonly combobox = viewChild.required(Combobox);\n * constructor() {\n * fixStaleComboboxRelay(() => this.combobox());\n * }\n * ```\n */\nexport function fixStaleComboboxRelay(combobox: () => Combobox): void {\n afterRenderEffect(() => {\n const instance = combobox();\n if (!instance.expanded()) {\n instance._pattern.keyboardEventRelay.set(undefined);\n }\n });\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Slot classes\nexport const INPUT_CONTROL_CLASS = \"input-control\";\nexport const INPUT_ICON_LEFT_CLASS = \"input-icon-left\";\nexport const INPUT_ICON_RIGHT_CLASS = \"input-icon-right\";\nexport const INPUT_COUNTER_CLASS = \"input-counter\";\n// Masque les décorations natives de Chrome/Safari d'un `type=\"search\"` (croix d'effacement, loupe) : galactik\n// dessine sa propre croix. Variants ciblés sur `[type='search']` : sans effet sur les autres types. Portée par\n// `input-control` ; un `<input>` brut n'en bénéficie pas et garde sa croix native, seule affordance d'effacement.\nexport const INPUT_SEARCH_NATIVE_RESET = [\n \"[&[type='search']::-webkit-search-decoration]:appearance-none\",\n \"[&[type='search']::-webkit-search-cancel-button]:appearance-none\",\n \"[&[type='search']::-webkit-search-results-button]:appearance-none\",\n \"[&[type='search']::-webkit-search-results-decoration]:appearance-none\"\n].join(\" \");\n// Wrap = horizontal flex containing optional icons + the native <input>.\n// State is driven by native selectors on the <input> via has-[]:\n// • active → has-[:focus] (visual: primary outline ring; any focus modality)\n// • disabled → has-[:disabled]\n// • read-only → has-[[readonly]]\n// The keyboard-only focus ring (--stroke-focus / pink) is intentionally NOT here.\n// It is applied by the consumer framework via the `gl-input-focus-visible` CSS class,\n// which overrides the active ring when the user navigated with the keyboard.\n// Filled / scheme drive the colour theme; consumer toggles `filled` prop.\nexport const inputWrapVariants = cva(\n [\n \"box-border flex items-center gap-(--spacing-xs)\",\n \"border border-solid bg-(--bg-neutral-white)\",\n \"transition-[border-color,background-color,outline-color] duration-150 ease-[ease] motion-reduce:transition-none\",\n // Hover (default scheme, not disabled/readonly/focused)\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-primary-hovered)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-primary-lighter)\",\n // Active state (any :focus) — primary outline ring, background reset to white\n \"has-focus:not-has-disabled:not-has-[[readonly]]:bg-(--bg-neutral-white)\",\n // `outline-solid` explicite : `outline-2` ne pose que la largeur, le style venant de\n // `--tw-outline-style`. Sans lui, l'anneau était mesurable (largeur, couleur) mais jamais peint.\n \"has-focus:not-has-disabled:not-has-[[readonly]]:outline-2 has-focus:not-has-disabled:not-has-[[readonly]]:outline-offset-0 has-focus:not-has-disabled:not-has-[[readonly]]:outline-(--bg-primary-hovered) has-focus:not-has-disabled:not-has-[[readonly]]:outline-solid\",\n // Disabled\n \"has-disabled:cursor-not-allowed has-disabled:border-(--stroke-neutral-disabled) has-disabled:bg-(--bg-neutral-disabled)\",\n \"has-disabled:[&_.input-control]:text-(--font-neutral-muted)\",\n \"has-disabled:[&_.input-control]:cursor-not-allowed\",\n \"has-disabled:[&_.input-icon-left]:text-(--font-neutral-muted) has-disabled:[&_.input-icon-right]:text-(--font-neutral-muted)\",\n // Read-only\n \"has-[[readonly]]:cursor-default has-[[readonly]]:border-transparent has-[[readonly]]:bg-transparent\",\n // Un champ en lecture seule reste focalisable : il lui faut donc un anneau de focus, que\n // l'état actif ci-dessus lui refuse (`not-has-[[readonly]]`). Sans cela, le focus clavier\n // disparaissait complètement sur les champs de plage de dates de la barre de filtres.\n \"has-focus:has-[[readonly]]:outline-2 has-focus:has-[[readonly]]:outline-offset-0 has-focus:has-[[readonly]]:outline-(--stroke-focus) has-focus:has-[[readonly]]:outline-solid\",\n \"has-[[readonly]]:[&_.input-control]:cursor-default has-[[readonly]]:[&_.input-control]:text-(--font-primary-muted)\",\n // Control reset\n \"[&_.input-control]:min-w-0 [&_.input-control]:flex-1 [&_.input-control]:border-0 [&_.input-control]:bg-transparent\",\n \"[&_.input-control]:p-0 [&_.input-control]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.input-control]:leading-[1.4] [&_.input-control]:text-(--font-primary-base)\",\n \"[&_.input-control]:focus:outline-none [&_.input-control]:focus-visible:outline-none\",\n \"[&_.input-control]:placeholder:text-(--font-primary-muted)\",\n // Icon slots\n \"[&_.input-icon-left]:inline-flex [&_.input-icon-left]:shrink-0 [&_.input-icon-left]:items-center [&_.input-icon-left]:justify-center [&_.input-icon-left]:leading-none [&_.input-icon-left]:text-(--font-primary-muted)\",\n \"[&_.input-icon-right]:inline-flex [&_.input-icon-right]:shrink-0 [&_.input-icon-right]:cursor-pointer [&_.input-icon-right]:items-center [&_.input-icon-right]:justify-center [&_.input-icon-right]:border-0 [&_.input-icon-right]:bg-transparent [&_.input-icon-right]:p-0 [&_.input-icon-right]:leading-none [&_.input-icon-right]:text-(--font-primary-muted)\",\n \"[&_.input-icon-right]:enabled:hover:text-(--font-primary-base)\",\n // Anneau de focus du bouton de droite RENTRANT (offset négatif) : le bouton occupe presque toute la hauteur\n // d'un champ bas (h-6), un anneau décalé vers l'extérieur sortirait du composant. Indépendant de la hauteur.\n \"[&_.input-icon-right]:focus-visible:rounded-(--radius-xs) [&_.input-icon-right]:focus-visible:outline-2 [&_.input-icon-right]:focus-visible:-outline-offset-2 [&_.input-icon-right]:focus-visible:outline-(--stroke-focus)\"\n ],\n {\n variants: {\n size: {\n lg: \"h-11 rounded-(--radius-sm) px-(--spacing-xl) [&_.input-control]:text-(length:--size-base) [&_.input-icon-left]:text-(length:--icon-xs) [&_.input-icon-right]:text-(length:--icon-xs)\",\n md: \"h-9 rounded-(--radius-sm) px-(--spacing-md) [&_.input-control]:text-(length:--size-base) [&_.input-icon-left]:text-(length:--icon-xs) [&_.input-icon-right]:text-(length:--icon-xs)\",\n sm: \"h-6 rounded-(--radius-xs) px-(--spacing-xs) [&_.input-control]:text-(length:--size-sm) [&_.input-icon-left]:text-[11px] [&_.input-icon-right]:text-[11px]\"\n },\n scheme: {\n // RGAA 3.3 / WCAG 1.4.11 : la bordure est la seule limite visible d'un champ, elle doit donc\n // atteindre 3:1 avec le fond de page. --stroke-primary-light mesurait 1.91:1 en clair et\n // 2.55:1 en sombre ; --stroke-primary-muted donne 6.52:1 et 3.71:1. Les schémas success,\n // error, les deux autres schémas, passaient déjà (9.17:1 au pire), seul le défaut échouait.\n default: \"border-(--stroke-primary-muted)\",\n success: [\n \"border-(--stroke-success-base) bg-(--bg-neutral-white)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-success-base-alt)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-success-base)\",\n \"has-focus:not-has-disabled:not-has-[[readonly]]:outline-(--stroke-success-base)\",\n \"[&_.input-control]:text-(--font-success-base) [&_.input-icon-left]:text-(--font-success-base) [&_.input-icon-right]:text-(--font-success-base)\"\n ],\n error: [\n \"border-(--stroke-error-base) bg-(--bg-neutral-white)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-error-base-alt)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-error-base)\",\n \"has-focus:not-has-disabled:not-has-[[readonly]]:outline-(--stroke-error-base)\",\n \"[&_.input-control]:text-(--font-error-base) [&_.input-icon-left]:text-(--font-error-base) [&_.input-icon-right]:text-(--font-error-base)\"\n ]\n },\n // Visual variant: filled tint background, no border (kept transparent border).\n filled: {\n true: \"border-transparent bg-(--bg-primary-lighter) hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-primary-hovered) hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-primary-light)\",\n false: \"\"\n },\n // Numbers: right-aligned text with tabular numerals (via compound variant below).\n numbers: {\n true: \"\",\n false: \"\"\n },\n // The group grows with its content instead of keeping the height of its size: a field whose content wraps\n // (tags before the text being typed). `min-h` keeps the size's height as the floor.\n autoHeight: {\n true: \"h-auto flex-wrap gap-(--spacing-3xs)\",\n false: \"\"\n },\n // Text size decoupled from `size` (height, padding, radius, icons): e.g. the height of `md` with the text of `sm`.\n // No default value, so no class unless asked: the text then follows `size`. Declared after `size` so that, through\n // `cn()` (tailwind-merge), it wins over the text size `size` already carries.\n textSize: {\n sm: \"[&_.input-control]:text-(length:--size-sm)\",\n base: \"[&_.input-control]:text-(length:--size-base)\"\n }\n },\n compoundVariants: [\n // Filled + success/error keeps coloured background, no border\n { filled: true, scheme: \"success\", class: \"border-transparent bg-(--bg-success-base-alt)\" },\n { filled: true, scheme: \"error\", class: \"border-transparent bg-(--bg-error-base-alt)\" },\n // Numbers: right-align text, tabular numerals\n { numbers: true, class: \"[&_.input-control]:text-right [&_.input-control]:tabular-nums\" },\n // Auto height: the size's height becomes the minimum, and the vertical padding keeps a single row at that height.\n { autoHeight: true, size: \"lg\", class: \"min-h-11 py-(--spacing-3xs)\" },\n { autoHeight: true, size: \"md\", class: \"min-h-9 py-(--spacing-3xs)\" },\n { autoHeight: true, size: \"sm\", class: \"min-h-6 py-(--spacing-4xs)\" }\n ],\n defaultVariants: {\n size: \"md\",\n scheme: \"default\",\n filled: false,\n numbers: false,\n autoHeight: false\n }\n }\n);\nexport const inputCounterVariants = cva(\n \"shrink-0 font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] whitespace-nowrap text-(--font-neutral-muted) tabular-nums\",\n {\n variants: {\n scheme: {\n default: \"\",\n success: \"text-(--font-success-base)\",\n error: \"text-(--font-error-base)\"\n },\n size: {\n lg: \"text-(length:--size-sm)\",\n md: \"text-(length:--size-sm)\",\n sm: \"text-(length:--size-xs)\"\n }\n },\n defaultVariants: {\n scheme: \"default\",\n size: \"md\"\n }\n }\n);\nexport type InputWrapVariants = VariantProps<typeof inputWrapVariants>;\nexport type InputCounterVariants = VariantProps<typeof inputCounterVariants>;\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Sub-element classes\nexport const TAG_LABEL_CLASS = \"tag-label\";\nexport const TAG_ICON_CLASS = \"tag-icon\";\nexport const TAG_FLAG_CLASS = \"tag-flag\";\n// 12 semantic palettes × 2 variants (primary = soft fill, secondary = outline).\n// Token mapping mirrors app/components/css/tag.css verbatim.\nexport const tagVariants = cva(\n [\n \"inline-flex w-fit max-w-full min-w-0 items-center overflow-hidden whitespace-nowrap\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] font-normal\",\n \"border border-solid\"\n ],\n {\n variants: {\n variant: {\n primary: \"border-transparent\",\n secondary: \"bg-transparent\"\n },\n scheme: {\n sage: \"\",\n almond: \"\",\n pink: \"\",\n grey: \"\",\n yellow: \"\",\n cherry: \"\",\n indigo: \"\",\n cyan: \"\",\n success: \"\",\n warning: \"\",\n info: \"\",\n error: \"\"\n },\n // xs/sm/md aliases — match BEM tag.css exactly (height is content-driven via padding).\n size: {\n xs: \"gap-1 rounded-(--radius-xs) px-1 py-0.5 text-(length:--size-sm) leading-(--line-height-sm) [&_.tag-icon]:text-(length:--icon-xs)\",\n sm: \"gap-1 rounded-(--radius-sm) px-2 py-1 text-(length:--size-sm) leading-(--line-height-sm) [&_.tag-icon]:text-(length:--icon-xs)\",\n md: \"gap-2 rounded-(--radius-sm) px-3 py-2 text-(length:--size-base) leading-(--line-height-base) [&_.tag-icon]:text-(length:--icon-sm)\",\n xsmall: \"gap-1 rounded-(--radius-xs) px-1 py-0.5 text-(length:--size-sm) leading-(--line-height-sm) [&_.tag-icon]:text-(length:--icon-xs)\",\n small: \"gap-1 rounded-(--radius-sm) px-2 py-1 text-(length:--size-sm) leading-(--line-height-sm) [&_.tag-icon]:text-(length:--icon-xs)\",\n medium: \"gap-2 rounded-(--radius-sm) px-3 py-2 text-(length:--size-base) leading-(--line-height-base) [&_.tag-icon]:text-(length:--icon-sm)\"\n }\n },\n compoundVariants: [\n // ── primary (soft fill) — bg from CSS source ─────────────────────────\n { variant: \"primary\", scheme: \"sage\", class: \"bg-(--bg-primary-light) text-(--font-primary-base)\" },\n { variant: \"primary\", scheme: \"almond\", class: \"bg-(--bg-secondary-light) text-(--font-secondary-base)\" },\n { variant: \"primary\", scheme: \"pink\", class: \"bg-(--bg-accent-base-alt) text-(--font-accent-base)\" },\n { variant: \"primary\", scheme: \"grey\", class: \"bg-(--bg-neutral-base) text-(--font-neutral-muted)\" },\n { variant: \"primary\", scheme: \"yellow\", class: \"bg-(--bg-yellow-base-alt) text-(--font-yellow-base)\" },\n { variant: \"primary\", scheme: \"cherry\", class: \"bg-(--bg-cherry-base-alt) text-(--font-cherry-base)\" },\n { variant: \"primary\", scheme: \"indigo\", class: \"bg-(--bg-indigo-base-alt) text-(--font-indigo-base)\" },\n { variant: \"primary\", scheme: \"cyan\", class: \"bg-(--bg-cyan-base-alt) text-(--font-cyan-base)\" },\n { variant: \"primary\", scheme: \"success\", class: \"bg-(--bg-success-base-alt) text-(--font-success-base)\" },\n { variant: \"primary\", scheme: \"warning\", class: \"bg-(--bg-warning-base-alt) text-(--font-warning-base)\" },\n { variant: \"primary\", scheme: \"info\", class: \"bg-(--bg-info-base-alt) text-(--font-info-base)\" },\n { variant: \"primary\", scheme: \"error\", class: \"bg-(--bg-error-base-alt) text-(--font-error-base)\" },\n // ── secondary (outline) — fg / stroke from CSS source ───────────────\n { variant: \"secondary\", scheme: \"sage\", class: \"border-(--stroke-primary-base) text-(--font-primary-base)\" },\n { variant: \"secondary\", scheme: \"almond\", class: \"border-(--stroke-secondary-base) text-(--font-secondary-base-alt)\" },\n { variant: \"secondary\", scheme: \"pink\", class: \"border-(--stroke-accent-base) text-(--font-accent-muted)\" },\n { variant: \"secondary\", scheme: \"grey\", class: \"border-(--stroke-neutral-dark) text-(--font-neutral-muted)\" },\n { variant: \"secondary\", scheme: \"yellow\", class: \"border-(--stroke-yellow-base) text-(--font-yellow-base)\" },\n { variant: \"secondary\", scheme: \"cherry\", class: \"border-(--stroke-cherry-base) text-(--font-cherry-base)\" },\n { variant: \"secondary\", scheme: \"indigo\", class: \"border-(--stroke-indigo-base) text-(--font-indigo-base)\" },\n { variant: \"secondary\", scheme: \"cyan\", class: \"border-(--stroke-cyan-base) text-(--font-cyan-base)\" },\n { variant: \"secondary\", scheme: \"success\", class: \"border-(--stroke-success-base) text-(--font-success-base)\" },\n { variant: \"secondary\", scheme: \"warning\", class: \"border-(--stroke-warning-base) text-(--font-warning-base)\" },\n { variant: \"secondary\", scheme: \"info\", class: \"border-(--stroke-info-base) text-(--font-info-base)\" },\n { variant: \"secondary\", scheme: \"error\", class: \"border-(--stroke-error-base) text-(--font-error-base)\" }\n ],\n defaultVariants: {\n variant: \"primary\",\n scheme: \"sage\",\n size: \"md\"\n }\n }\n);\n\nexport type TagVariants = VariantProps<typeof tagVariants>;\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { tagVariants, TagVariants } from \"./tag.cva\";\n\n@Directive({\n selector: \"tag, Tag\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class TagComponent {\n class = input<string>();\n variant = input<TagVariants[\"variant\"]>(\"primary\");\n scheme = input<TagVariants[\"scheme\"]>(\"sage\");\n size = input<TagVariants[\"size\"]>(\"md\");\n\n variants = computed(() => cn(tagVariants({ variant: this.variant(), scheme: this.scheme(), size: this.size(), class: this.class() })));\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef, inject, input, OnDestroy, output } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { XMarkIcon } from \"../../icons/x-mark.icon\";\n\n/**\n * The remove button of a removable [`Tag`](./tag.ts): a real `<button>`, reachable with Tab and activated with Enter or\n * Space, named after the tag it removes.\n *\n * ```html\n * <tag scheme=\"grey\" size=\"xs\">\n * design\n * <tag-remove [aria-label]=\"'Remove design'\" (removed)=\"remove('design')\" />\n * </tag>\n * ```\n *\n * It is an element with its own `<button>`, rather than an attribute on yours, so that a component importing\n * `ButtonComponent` (which matches every `button` of its template) does not restyle it.\n *\n * - **`aria-label` is required**: an icon alone names nothing. Nothing in the library translates, so pass it translated\n * and bind it (`[aria-label]`), as for `SearchInput`.\n * - `removed` fires on a click, Enter or Space; the click does not bubble, so a click handler on the field around the tags\n * (to focus its input) is not triggered by it.\n * - `disabled` keeps the button in place and stops it from removing anything.\n * - **Focus is kept**: removing a tag from the keyboard destroys the button that has the focus, which would drop it on\n * the page's `<body>`. When that happens, the focus goes to the next remove button of the same tags (the previous one\n * for the last), and when none is left to the text field of the group (`input-group`, `[role=group]`, or the host\n * around the tags). A component that moves the focus itself (as `TagInput` does) is not overridden.\n */\n@Component({\n selector: \"tag-remove, TagRemove\",\n imports: [XMarkIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n [class]=\"buttonClass\"\n [attr.aria-label]=\"ariaLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick($event)\">\n <x-mark-icon class=\"size-3\" />\n </button>\n `,\n host: {\n class: \"inline-flex shrink-0\"\n }\n})\nexport class TagRemoveComponent implements OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Accessible name of the button: what it removes (\"Remove design\"). Aliased on the attribute, as `SearchInput` does. */\n readonly ariaLabel = input.required<string>({ alias: \"aria-label\" });\n\n /** The button stays but removes nothing. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** The remove button was activated. */\n readonly removed = output<void>();\n\n protected readonly buttonClass = cn(\n \"inline-flex cursor-pointer items-center justify-center rounded-(--radius-xs) border-0 bg-transparent p-0 text-current\",\n \"opacity-70 transition-opacity duration-150 motion-reduce:transition-none\",\n \"enabled:hover:opacity-100 focus-visible:opacity-100\",\n \"focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-(--stroke-focus)\",\n \"disabled:cursor-not-allowed disabled:opacity-40\"\n );\n\n /** Where the focus goes if this button disappears now; worked out at activation, while the button is still in place. */\n private handoff: { to: () => HTMLElement | null | undefined; at: number } | null = null;\n\n protected onClick(event: Event): void {\n event.stopPropagation();\n this.handoff = this.planHandoff(event.currentTarget as HTMLButtonElement);\n this.removed.emit();\n }\n\n ngOnDestroy(): void {\n const handoff = this.handoff;\n // Only a removal that has just been asked for (a later, unrelated destruction must not move the focus).\n if (!handoff || performance.now() - handoff.at > 1000) return;\n // After the removal has rendered: the neighbour is still there, the removed button is not.\n setTimeout(() => {\n // Somebody else moved the focus already (`TagInput` puts it back in its field): leave it where it is.\n const active = document.activeElement;\n if (active && active !== document.body) return;\n handoff.to()?.focus();\n });\n }\n\n /**\n * By the time `ngOnDestroy` runs the element is already out of the DOM and the focus is on `<body>`, so what is\n * needed is decided here: the next remove button of the same tags (the previous one for the last), else the text\n * field of the group. Nothing is planned when the button does not have the focus.\n */\n private planHandoff(button: HTMLButtonElement): TagRemoveComponent[\"handoff\"] {\n if (button !== button.ownerDocument.activeElement) return null;\n\n const tags = this.host.nativeElement.closest(\"tag\")?.parentElement;\n const buttons = tags ? Array.from(tags.querySelectorAll<HTMLButtonElement>(\"tag-remove button:not(:disabled)\")) : [];\n const index = buttons.indexOf(button);\n const neighbour = buttons[index + 1] ?? buttons[index - 1];\n const field = (tags?.closest(\"input-group, [role=group]\") ?? tags?.parentElement)?.querySelector(\"input\");\n\n return { to: () => (neighbour?.isConnected ? neighbour : field), at: performance.now() };\n }\n}\n","/**\n * Editable field of `Autocomplete`. Wears the DS trigger marker class so `selectWrapVariants`\n * (the same wrap `SelectMenu` uses) paints it exactly like a select trigger — border, height,\n * hover, open (`aria-expanded`) and focus states all fire natively on the `<input>`.\n *\n * The three `!` deltas are the price of an *editable* trigger: the wrap paints those properties\n * through descendant compounds (`.host .select-trigger`, specificity 0,2,0), which outrank the\n * utilities carried by the input itself (0,1,0) — and `cn`/tailwind-merge cannot arbitrate, the\n * two rules living in different class lists. `cursor-text` replaces the trigger's `cursor-pointer`,\n * and the inline-end padding reserves room for the chevron overlay (an `<input>` can't contain it).\n */\nexport const AUTOCOMPLETE_TRIGGER_CLASS = \"select-trigger w-full cursor-text! pe-(--spacing-2xl)! placeholder:text-(--font-primary-muted)\";\n\n/** Layout for the row of selected-value tags rendered under the field (`chips=\"below\"`). */\nexport const AUTOCOMPLETE_TAGS_CLASS = \"flex flex-wrap gap-(--spacing-3xs)\";\n","import { Combobox, ComboboxPopup, ComboboxWidget } from \"@angular/aria/combobox\";\nimport { Listbox, Option } from \"@angular/aria/listbox\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { ChevronDownIcon } from \"../../icons/chevron-down.icon\";\nimport { SpinnerIcon } from \"../../icons/spinner.icon\";\nimport { cn } from \"cn\";\nimport {\n afterRenderEffect,\n booleanAttribute,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n input,\n linkedSignal,\n model,\n output,\n resource,\n signal,\n TemplateRef,\n untracked,\n viewChild\n} from \"@angular/core\";\n\nimport {\n SELECT_EMPTY_CLASS,\n SELECT_MENU_CLASS,\n SELECT_OPTION_CLASS,\n selectChevronVariants,\n selectWrapVariants,\n type SelectWrapVariants\n} from \"../select/select.cva\";\nimport { fixStaleComboboxRelay } from \"../combobox/combobox-relay-workaround\";\nimport { inputWrapVariants } from \"../input/input.cva\";\nimport { ListboxActivateOnHover } from \"../combobox/listbox-activate-on-hover\";\nimport { injectFloatingPanel } from \"../popover/inject-floating-panel\";\nimport { TagComponent } from \"../tag/tag\";\nimport { TagRemoveComponent } from \"../tag/tag-remove\";\nimport { AUTOCOMPLETE_TAGS_CLASS, AUTOCOMPLETE_TRIGGER_CLASS } from \"./autocomplete.cva\";\n\nlet _idCounter = 0;\n\n/** Context provided to the `#autocompleteOption` template. */\nexport interface AutocompleteOptionContext<T> {\n $implicit: T;\n selected: boolean;\n index: number;\n}\n\n/** Context provided to the `#autocompleteTag` template. */\nexport interface AutocompleteTagContext<T> {\n $implicit: T;\n index: number;\n}\n\n/**\n * The backend search. `signal` is aborted when a newer query supersedes this one: hand it to `fetch` and the\n * superseded request is cancelled instead of landing late.\n */\nexport type AutocompleteLoader<T> = (query: string, context: { signal: AbortSignal }) => Promise<T[]>;\n\n/**\n * `Autocomplete` — an editable combobox that searches a backend as the user types and builds a multi-selection of\n * removable chips. The one component behind every \"type, pick from a list\" field of the library: a label picker, a\n * filter facet, a people picker.\n *\n * Visually it *is* a `SelectMenu`: the host wears the same `selectWrapVariants` wrap, so the label, the field, the popup\n * surface, the option rows, the empty row and the hint are painted by the one DS source of truth — a change there lands\n * on both components at once. The only structural differences are that the trigger is an editable `<input>` (hence the\n * chevron overlay, which an `<input>` cannot contain) and that picked values live in chips.\n *\n * The component never owns persistence: `selected` is the currently-applied set (input only), and `picked`/`removed` let\n * the host perform its own backend call (with error handling) before updating it.\n *\n * **While it searches**, a spinner replaces the chevron, the rows of the previous search stay (swapping them for a\n * \"Searching…\" line made the list blink on every keystroke) and that line only shows when there are no rows at all. A\n * failed search says so in an alert row; \"no results\" is only claimed by a search that came back.\n *\n * **Keyboard**: arrows move in the rows, Enter picks the active one (the first, with no keystroke to move to it — as in a\n * chat's mention box), Escape closes the list and only then reaches a dialog around it, Backspace in an empty field\n * removes the last chip (inline chips).\n *\n * @example\n * ```html\n * <Autocomplete\n * [selected]=\"labels()\" [loader]=\"loadSuggestions\" [createFromText]=\"identity\"\n * placeholder=\"Start typing…\" noResultsText=\"No matching labels\"\n * (picked)=\"addLabel($event)\" (removed)=\"removeLabel($event)\" />\n * ```\n */\n@Component({\n selector: \"Autocomplete,autocomplete\",\n exportAs: \"autocomplete\",\n standalone: true,\n imports: [\n Combobox,\n ComboboxPopup,\n ComboboxWidget,\n Listbox,\n ListboxActivateOnHover,\n Option,\n NgTemplateOutlet,\n TagComponent,\n TagRemoveComponent,\n ChevronDownIcon,\n SpinnerIcon\n ],\n template: `\n @if (fieldLabel(); as l) {\n <label [htmlFor]=\"id\" class=\"select-label\" [attr.lang]=\"fieldLabelLang() ?? null\">{{ l }}</label>\n }\n\n <!-- The field box (and the Floating UI anchor). 'inline' chips: an input-group look that grows with its content, the chips\n sit in it before the text being typed. Otherwise: the select-trigger look; the chevron then has to be overlaid, an\n <input> being unable to contain it. -->\n <div #field [class]=\"fieldClass()\" (click)=\"focusInput()\">\n @if (inline()) {\n @for (option of selected(); track selectedKeyOf(option); let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate() ?? defaultTag\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\" />\n }\n }\n <input\n ngCombobox\n #input\n [class]=\"inputClass()\"\n [id]=\"id\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.aria-label]=\"fieldLabel() ? null : (ariaLabel() ?? placeholder())\"\n [attr.placeholder]=\"inline() && selected().length ? null : placeholder()\"\n [(value)]=\"query\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (keydown.enter)=\"onEnter($event)\" />\n @if (loading() || indicator()) {\n <span [class]=\"indicatorClass()\">\n @if (loading()) {\n <spinner-icon class=\"animate-spin text-(--font-primary-base)\" />\n } @else {\n <chevron-down-icon [class]=\"chevronClass()\" />\n }\n </span>\n }\n <!-- Whatever the host wants after the text, inside the box: a role menu, a button. -->\n <ng-content select=\"[autocompleteSuffix]\" />\n </div>\n\n <ng-template ngComboboxPopup [combobox]=\"combobox()\" popupType=\"listbox\">\n <ul\n #listbox\n ngComboboxWidget\n ngListbox\n #lb=\"ngListbox\"\n activateOnHover\n focusMode=\"activedescendant\"\n [multi]=\"true\"\n selectionMode=\"explicit\"\n [activeDescendant]=\"lb.activeDescendant()\"\n (valueChange)=\"onSuggestionsPicked($event)\"\n [class]=\"popupClasses()\">\n @if (failed()) {\n <li role=\"alert\" [class]=\"errorRowClass\">{{ errorText() }}</li>\n } @else if (loading() && !suggestions().length) {\n <li role=\"status\" [class]=\"emptyClass\">{{ searchingText() }}</li>\n } @else {\n @for (option of suggestions(); track keyOf(option); let i = $index) {\n <li\n ngOption\n [value]=\"keyOf(option)\"\n [disabled]=\"disabledPredicate()(option)\"\n [label]=\"label()(option)\"\n [class]=\"optionClass\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate() ?? defaultOption\"\n [ngTemplateOutletContext]=\"{ $implicit: option, selected: false, index: i }\" />\n </li>\n } @empty {\n <li [class]=\"emptyClass\">{{ noResultsText() }}</li>\n }\n }\n </ul>\n </ng-template>\n\n @if (hint(); as h) {\n <p class=\"select-hint\">{{ h }}</p>\n }\n\n @if (chips() === \"below\" && selected().length > 0) {\n <div [class]=\"tagsClass\">\n @for (option of selected(); track selectedKeyOf(option); let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate() ?? defaultTag\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\" />\n }\n </div>\n }\n\n <ng-template #defaultOption let-option>\n <span class=\"select-option-body\"><span class=\"select-option-label\">{{ label()(option) }}</span></span>\n </ng-template>\n\n <ng-template #defaultTag let-option>\n <Tag [size]=\"inline() ? 'xs' : 'sm'\">\n {{ selectedLabelOf(option) }}\n @if (allowRemove()) {\n <tag-remove [aria-label]=\"removeText(option)\" (removed)=\"removed.emit(option)\" />\n }\n </Tag>\n </ng-template>\n `,\n host: {\n \"[class]\": \"hostClasses()\",\n \"(focusout)\": \"onFocusOut($event)\"\n }\n})\nexport class AutocompleteComponent<TOption, TSelected = TOption> {\n /** Currently-applied values — display only (chips + suggestion exclusion). The host owns them. */\n readonly selected = input.required<readonly TSelected[]>();\n\n /** Typed query text (two-way; rarely read/written by the host). */\n readonly query = model<string>(\"\");\n\n /**\n * Backend search. The host closes over whatever extra context it needs (e.g. a fixed\n * `isPublic()` flag) — a signal read only inside the closure body (not through `query`) won't\n * reactively re-trigger the fetch on change; call {@link reload} if that's ever needed.\n */\n readonly loader = input.required<AutocompleteLoader<TOption>>();\n\n /** Minimum typed length before a search is triggered (and the popup can open). */\n readonly minLength = input(1);\n\n /** Debounce delay (ms) applied to the typed query before searching. */\n readonly debounceMs = input(300);\n\n /** Identity of a suggestion (comparison + exclusion). Default: the option itself. */\n readonly key = input<(option: TOption) => unknown>(option => option);\n\n /** Text label of a suggestion (rows, typeahead). Default: `String(option)`. */\n readonly label = input<(option: TOption) => string>(option => String(option));\n\n /** Identity of an applied value, when it isn't shaped like a suggestion. Default: `key`. */\n readonly selectedKey = input<(selected: TSelected) => unknown>();\n\n /** Text label of an applied value (chips). Default: `label`. */\n readonly selectedLabel = input<(selected: TSelected) => string>();\n\n /** Disables individual suggestion rows. */\n readonly disabledPredicate = input<(option: TOption) => boolean>(() => false, { alias: \"optionDisabled\" });\n\n /** Identities to keep out of the suggestions, besides the applied values — e.g. the people who already have access. */\n readonly excludeKeys = input<readonly unknown[]>([]);\n\n /** When set, Enter with no suggestions shown creates a free-text option from the typed query. */\n readonly createFromText = input<(text: string) => TOption>();\n\n readonly fieldLabel = input<string>();\n /**\n * Language of the `fieldLabel` when it is not the language of the page (`en`, `fr`…): written on the\n * label as `lang`, so that a screen reader reads it with the right voice (RGAA 8.7).\n */\n readonly fieldLabelLang = input<string>();\n readonly placeholder = input<string>(\"\");\n /** Accessible name of the field when there is no `fieldLabel` (a visible label names it already). Default: the placeholder. */\n readonly ariaLabel = input<string>();\n readonly noResultsText = input<string>(\"No results\");\n readonly searchingText = input<string>(\"Searching…\");\n readonly errorText = input<string>(\"Search failed\");\n readonly size = input<SelectWrapVariants[\"size\"]>(\"md\");\n\n /** Help text rendered under the field (`.select-hint`), like `SelectMenu`'s. */\n readonly hint = input<string>();\n\n /** Additional class(es) for the host — the DS styling root. */\n readonly class = input<string>();\n\n /** Additional class(es) for the popup surface. */\n readonly contentClass = input<string>();\n\n /** Shows/hides the remove (×) affordance on the default chip. */\n readonly allowRemove = input(true, { transform: booleanAttribute });\n\n /** Accessible name of the remove button of a chip; `{label}` is replaced by its label. Nothing in the library translates: pass it translated. */\n readonly removeLabel = input<string>(\"Remove {label}\");\n\n /**\n * Where the applied values are shown. `inline` (default): inside the field, before the text being typed — the field\n * grows with them, and Backspace in an empty field removes the last one. `below`: the row under the field. `none`: not\n * shown — the host draws them.\n */\n readonly chips = input<\"inline\" | \"below\" | \"none\">(\"inline\");\n\n /**\n * Where the popup lives. `top-layer` (default): a manual popover, above everything — a dialog's edges cannot clip it.\n * `inline`: a `position: fixed` panel in the flow of the page, for a field that is never inside a clipping container.\n */\n readonly popup = input<\"top-layer\" | \"inline\">(\"top-layer\");\n\n /** Shows the chevron. The spinner still shows while a search runs. */\n readonly indicator = input(true, { transform: booleanAttribute });\n\n /**\n * Picking closes the list and clears the typed text — the chat mention box. By default the list stays open with the\n * remaining suggestions and the query untouched, to pick several in a row.\n */\n readonly closeOnPick = input(false, { transform: booleanAttribute });\n\n /** Emitted once per suggestion picked, or once for a free-text creation. The host persists it. */\n readonly picked = output<TOption>();\n /** Emitted when a chip's remove button is clicked, or Backspace removes the last. The host persists the removal. */\n readonly removed = output<TSelected>();\n\n /** Custom suggestion row content (context: {@link AutocompleteOptionContext}). Default: `label(option)`. */\n readonly optionTemplate = contentChild<TemplateRef<AutocompleteOptionContext<TOption>>>(\"autocompleteOption\");\n /** Custom chip content (context: {@link AutocompleteTagContext}). Default: `Tag` + a remove button. */\n readonly tagTemplate = contentChild<TemplateRef<AutocompleteTagContext<TSelected>>>(\"autocompleteTag\");\n\n protected readonly id = `autocomplete-${++_idCounter}`;\n\n /**\n * The editable field carries the DS trigger marker class, so the wrap below paints it — and its\n * hover / open (`aria-expanded`) / focus / disabled states — exactly like `SelectMenu`'s trigger.\n */\n protected readonly triggerClass = AUTOCOMPLETE_TRIGGER_CLASS;\n protected readonly optionClass = SELECT_OPTION_CLASS;\n protected readonly emptyClass = SELECT_EMPTY_CLASS;\n /** The wrap paints `select-empty` through a descendant compound: only an `!` utility outranks its colour and italic. */\n protected readonly errorRowClass = cn(SELECT_EMPTY_CLASS, \"text-(--font-error-base)! not-italic!\");\n protected readonly tagsClass = AUTOCOMPLETE_TAGS_CLASS;\n\n protected readonly inline = computed(() => this.chips() === \"inline\");\n\n /** The field box: an input group that grows with its chips (`inline`), or the bare wrapper of the select-trigger input. */\n protected readonly fieldClass = computed(() =>\n this.inline() ? cn(inputWrapVariants({ size: this.size(), autoHeight: true }), \"relative cursor-text\") : \"relative flex\"\n );\n\n /** The typed text: the input-group's control (`inline`), or the select-trigger-styled input. */\n protected readonly inputClass = computed(() => (this.inline() ? \"input-control min-w-24 flex-1\" : this.triggerClass));\n\n /** The chevron / spinner: after the text in the flow (`inline`), or overlaid at the end of the trigger. */\n protected readonly indicatorClass = computed(() =>\n this.inline() ? \"pointer-events-none ms-auto flex shrink-0 items-center\" : \"pointer-events-none absolute inset-y-0 end-(--spacing-xs) flex items-center\"\n );\n\n /** DS styling root — the very wrap `SelectMenu` uses, so both components share one look. */\n protected readonly hostClasses = computed(() => cn(selectWrapVariants({ size: this.size() }), this.class()));\n\n /**\n * Popup: the DS `.select-menu` surface + a width tracking the field, same as `SelectMenu`.\n * `z-50` because the popup is `position: fixed` (the DS class sets neither position nor z-index, it assumes a `relative`\n * wrap + an `absolute` menu). `m-0 inset-auto` undo the user agent's centring of a popover.\n */\n protected readonly popupClasses = computed(() =>\n cn(\n SELECT_MENU_CLASS,\n // `fixed` here and not only written by Floating UI: `DeferredContent` creates the popup view\n // through the `<ng-template>`'s own `ViewContainerRef` — no portal, so it lands *inside* the\n // host. With no position in the classes the `<ul>` is in flow between change detection and\n // Floating UI's style write, and its `w-max` widens a shrink-to-fit host.\n \"fixed z-50 m-0 inset-auto w-max min-w-(--select-trigger-w,0px) max-w-[min(24rem,90vw)]\",\n this.contentClass()\n )\n );\n\n /**\n * The chevron cannot use the DS `.select-chevron` class: its rotation is written as\n * `.select-trigger[aria-expanded='true'] .select-chevron`, and here the chevron is a *sibling* of\n * the `<input>`, never a descendant. The standalone CVA exists for exactly this case.\n */\n protected readonly chevronClass = computed(() => selectChevronVariants({ open: this.combobox().expanded() }));\n\n protected readonly combobox = viewChild.required(Combobox);\n private readonly inputEl = viewChild.required<ElementRef<HTMLInputElement>>(\"input\");\n private readonly listboxEl = viewChild<ElementRef<HTMLElement>>(\"listbox\");\n private readonly fieldEl = viewChild<ElementRef<HTMLElement>>(\"field\");\n\n /**\n * The query once the user stopped typing. An empty one settles at once, and so does `clearQuery()`: with a settled value\n * that lagged behind, typing again the very text that was just cleared found the search already \"done\" for it and\n * opened nothing.\n */\n private readonly settledQuery = signal(\"\");\n\n private readonly search = resource<TOption[], string | undefined>({\n params: () => {\n const q = this.settledQuery().trim();\n return q.length >= this.minLength() ? q : undefined;\n },\n loader: ({ params, abortSignal }) => this.loader()(params, { signal: abortSignal })\n });\n\n protected readonly loading = computed(() => this.search.isLoading());\n protected readonly failed = computed(() => this.search.status() === \"error\");\n\n /**\n * What the last search found, kept while a newer one runs. `resource.value()` is empty from the moment the query changes,\n * and swapping the rows for a \"Searching…\" line on every keystroke made the list blink; they go only when the search is\n * over (below `minLength`) or answers. `hasValue()` is the guard, not a nicety: `resource.value()` *throws* when the\n * loader rejected, which used to take the whole component down on any network error.\n */\n private readonly found = linkedSignal<{ status: string; value: readonly TOption[] | undefined }, readonly TOption[]>({\n source: () => ({ status: this.search.status(), value: this.search.hasValue() ? this.search.value() : undefined }),\n computation: (current, previous) => (current.status === \"idle\" ? [] : (current.value ?? previous?.value ?? []))\n });\n\n private readonly selectedKeyFn = computed(() => this.selectedKey() ?? (this.key() as unknown as (selected: TSelected) => unknown));\n private readonly selectedLabelFn = computed(() => this.selectedLabel() ?? (this.label() as unknown as (selected: TSelected) => string));\n\n /** Suggestions not already applied — excludes `selected()` and `excludeKeys()` by identity. */\n protected readonly suggestions = computed<readonly TOption[]>(() => {\n const keyOf = this.key();\n const selectedKeyOf = this.selectedKeyFn();\n const hidden = new Set<unknown>([...this.selected().map(selectedKeyOf), ...this.excludeKeys()]);\n return this.found().filter(option => !hidden.has(keyOf(option)));\n });\n\n /**\n * Whether a search is on screen: it drives the combobox's `expanded`. Not `expanded` itself, which is not ours alone to\n * drive: `@angular/aria` opens the popup on every keystroke, before there is anything to show (it would say \"No\n * results\" about a search that has not started).\n */\n private readonly open = signal(false);\n\n constructor() {\n fixStaleComboboxRelay(() => this.combobox());\n\n effect(onCleanup => {\n const query = this.query();\n if (query === untracked(this.settledQuery)) return;\n if (!query.trim()) {\n this.settledQuery.set(query);\n return;\n }\n const timer = setTimeout(() => this.settledQuery.set(query), this.debounceMs());\n onCleanup(() => clearTimeout(timer));\n });\n\n // A search starting opens the list, the query falling below `minLength` closes it. Only the status is tracked: a list\n // the user closed (Escape) stays closed until the next search.\n effect(() => {\n const status = this.search.status();\n untracked(() => this.open.set(status !== \"idle\"));\n });\n\n // Only `open` is tracked here: reading `expanded` as well made this effect rewrite what it reads (NG0103).\n afterRenderEffect(() => {\n this.combobox().expanded.set(this.open());\n });\n // The library closes the popup by itself (Escape, blur): follow it.\n afterRenderEffect(() => {\n if (!this.combobox().expanded() && untracked(this.open)) this.open.set(false);\n });\n\n // Positioned with Floating UI rather than `position: absolute` in a relative wrapper. Anchored on the field box (not the\n // bare `<input>`) so the popup matches its full width. In the top layer it is above a dialog and outside the clipping of\n // every ancestor.\n injectFloatingPanel({\n panel: () => this.listboxEl()?.nativeElement,\n anchor: () => this.fieldEl()?.nativeElement,\n anchorWidthVariable: \"--select-trigger-w\",\n topLayer: () => this.popup() === \"top-layer\"\n });\n }\n\n /** A click anywhere in the field box (a chip's margin, the padding) puts the caret in the text. */\n protected focusInput(): void {\n this.inputEl().nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n // The library expanded the popup on this keystroke: put it back where `open` says it is, in a microtask — before the\n // popup's content renders.\n queueMicrotask(() => this.combobox().expanded.set(this.open()));\n if (!(event.target as HTMLInputElement).value.trim()) this.open.set(false);\n }\n\n /** Backspace in an empty field removes the last applied value, when the chips are in the field. */\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key !== \"Backspace\" || !this.inline() || !this.allowRemove() || this.query()) return;\n const last = this.selected().at(-1);\n if (last !== undefined) this.removed.emit(last);\n }\n\n protected removeText(option: TSelected): string {\n return this.removeLabel().replace(\"{label}\", this.selectedLabelOf(option));\n }\n\n protected keyOf(option: TOption): unknown {\n return this.key()(option);\n }\n\n protected selectedKeyOf(option: TSelected): unknown {\n return this.selectedKeyFn()(option);\n }\n\n protected selectedLabelOf(option: TSelected): string {\n return this.selectedLabelFn()(option);\n }\n\n protected onSuggestionsPicked(keys: readonly unknown[]): void {\n const keyOf = this.key();\n const selectedKeyOf = this.selectedKeyFn();\n const applied = this.selected();\n let pickedAny = false;\n for (const k of keys) {\n const option = this.suggestions().find(o => keyOf(o) === k);\n if (option && !applied.some(a => selectedKeyOf(a) === k)) {\n this.picked.emit(option);\n pickedAny = true;\n }\n }\n if (!pickedAny) return;\n\n if (this.closeOnPick()) {\n this.clearQuery();\n }\n // A picked suggestion is immediately excluded from `suggestions()` (already applied) and its row removed from the DOM.\n // A mouse pick leaves real focus on that row (`focusMode` \"activedescendant\" still lets a pointerdown focus it) —\n // removing a focused element resets focus to <body>, which `@angular/aria`'s Combobox reads as \"focus left the widget\"\n // and closes the popup. Refocusing the input here (a no-op for keyboard picks, which never left it) keeps the popup\n // open so multiple suggestions can be picked in a row, and leaves the caret in the field when it closed.\n this.combobox().element.focus();\n }\n\n protected onEnter(event: Event): void {\n if (this.loading() || this.suggestions().length > 0) return;\n const text = this.query().trim();\n const create = this.createFromText();\n if (!create || !text) return;\n\n event.preventDefault();\n this.picked.emit(create(text));\n this.clearQuery();\n }\n\n /** Empties the field and closes the list, with nothing left pending from what was typed. */\n private clearQuery(): void {\n this.query.set(\"\");\n this.settledQuery.set(\"\");\n this.open.set(false);\n }\n\n /** Leaving the component closes the list. */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && (event.currentTarget as HTMLElement).contains(next)) return;\n this.open.set(false);\n }\n\n /** Forces the current search to re-run — escape hatch when a closure-captured signal changes. */\n reload(): void {\n this.search.reload();\n }\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Icon slot sizes per button size — consumers pass to <Icon size={…} />.\n// xs uses a literal 10px because no design token matches that value.\nexport const BUTTON_ICON_SIZE = {\n xs: \"2xs\",\n sm: \"2xs\",\n md: \"xs\",\n lg: \"md\",\n};\n// Slot classes preserved for compound targeting via [&_.btn-label]\nexport const BUTTON_LABEL_CLASS = \"btn-label\";\nexport const BUTTON_ICON_LEFT_CLASS = \"btn-icon-left\";\nexport const BUTTON_ICON_RIGHT_CLASS = \"btn-icon-right\";\nexport const BUTTON_ICON_SOLO_CLASS = \"btn-icon-solo\";\nexport const buttonVariants = cva([\n \"inline-flex items-center justify-center box-border\",\n \"border-[1.5px] border-solid rounded-(--radius-2xl)\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] font-normal tracking-normal\",\n \"whitespace-nowrap no-underline cursor-pointer\",\n // Transition\n \"transition-[background-color,color,border-color,box-shadow] duration-150 ease-[ease]\",\n \"motion-reduce:transition-none\",\n // Focus ring\n \"focus-visible:outline-2 focus-visible:outline-(--stroke-focus) focus-visible:outline-offset-2\",\n // Disabled cursor\n \"disabled:cursor-not-allowed disabled:pointer-events-auto aria-disabled:cursor-not-allowed\",\n], {\n variants: {\n variant: {\n none: \"border-transparent\",\n \"light-accent\": [\n \"border-transparent\",\n \"bg-(--bg-accent-base-alt) text-(--font-accent-base)\",\n \"enabled:hover:bg-(--bg-accent-hover)\",\n \"enabled:active:bg-(--bg-accent-pressed) enabled:active:text-(--font-accent-pressed)\",\n \"enabled:active:[&_.btn-label]:font-bold\",\n \"disabled:bg-(--bg-neutral-disabled) disabled:text-(--btn-disabled-fg)\",\n // Focus: variant-specific bg/color\n \"enabled:focus-visible:bg-transparent enabled:focus-visible:text-(--font-accent-base)\",\n ],\n accent: [\n \"border-transparent\",\n \"bg-(--bg-accent-base-alt) text-(--font-accent-base)\",\n \"enabled:hover:bg-(--bg-accent-hover)\",\n \"enabled:active:bg-(--bg-accent-pressed) enabled:active:text-(--font-accent-pressed)\",\n \"enabled:active:[&_.btn-label]:font-bold\",\n \"disabled:bg-(--bg-neutral-disabled) disabled:text-(--btn-disabled-fg)\",\n // Focus: variant-specific bg/color\n \"enabled:focus-visible:bg-transparent enabled:focus-visible:text-(--font-accent-base)\",\n ],\n primary: [\n \"border-transparent\",\n \"bg-(--bg-primary-base) text-(--font-neutral-white)\",\n \"[&_.btn-label]:font-normal\",\n \"enabled:hover:bg-(--bg-primary-hovered)\",\n \"enabled:active:bg-(--bg-primary-pressed) enabled:active:text-(--font-neutral-black)\",\n \"enabled:active:[&_.btn-label]:font-bold\",\n \"disabled:bg-(--bg-neutral-disabled) disabled:text-(--btn-disabled-fg)\",\n ],\n secondary: [\n \"bg-transparent text-(--font-primary-base) border-(--stroke-primary-base)\",\n \"enabled:hover:bg-(--bg-primary-lighter) enabled:hover:text-(--font-primary-hovered)\",\n \"enabled:active:bg-(--bg-primary-light) enabled:active:text-(--font-primary-pressed) enabled:active:border-(--stroke-primary-pressed) enabled:active:shadow-[inset_0_0_0_1px_var(--stroke-primary-pressed)]\",\n \"enabled:active:[&_.btn-label]:font-bold\",\n \"disabled:bg-(--bg-neutral-white) disabled:text-(--btn-disabled-fg) disabled:border-(--stroke-neutral-disabled)\",\n \"enabled:focus-visible:bg-transparent enabled:focus-visible:text-(--font-primary-base) enabled:focus-visible:border-(--stroke-primary-base)\",\n ],\n tertiary: [\n \"border-transparent\",\n \"bg-transparent\",\n \"disabled:text-(--btn-disabled-fg) disabled:bg-transparent\",\n \"enabled:focus-visible:bg-transparent enabled:focus-visible:text-(--font-secondary-base)\",\n ],\n },\n scheme: {\n // Only affects tertiary — wired via compoundVariants\n default: \"\",\n neutral: \"\",\n },\n size: {\n xs: \"h-4 px-1.5 gap-(--spacing-3xs) text-[10px] leading-3\",\n xsmall: \"h-4 px-1.5 gap-(--spacing-3xs) text-[10px] leading-3\",\n sm: \"h-6 px-(--spacing-xs) gap-(--spacing-3xs) text-(length:--size-sm) leading-(--line-height-2)\",\n small: \"h-6 px-(--spacing-xs) gap-(--spacing-3xs) text-(length:--size-sm) leading-(--line-height-2)\",\n md: \"h-9 px-(--spacing-md) gap-(--spacing-2xs) text-(length:--size-base) leading-(--line-height-3)\",\n medium: \"h-9 px-(--spacing-md) gap-(--spacing-2xs) text-(length:--size-base) leading-(--line-height-3)\",\n lg: \"h-11 px-(--spacing-xl) gap-(--spacing-xs) text-(length:--size-lg) leading-(--line-height-4)\",\n large: \"h-11 px-(--spacing-xl) gap-(--spacing-xs) text-(length:--size-lg) leading-(--line-height-4)\",\n },\n iconOnly: {\n true: \"p-0\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Icon-only squares\n { iconOnly: true, size: \"xs\", class: \"w-4\" },\n { iconOnly: true, size: \"sm\", class: \"w-6\" },\n { iconOnly: true, size: \"md\", class: \"w-9\" },\n { iconOnly: true, size: \"lg\", class: \"w-11\" },\n // Icon slot sizing inside button at each size\n { size: \"lg\", class: \"[&_.btn-icon-left]:text-(length:--icon-md) [&_.btn-icon-right]:text-(length:--icon-md) [&_.btn-icon-solo]:text-(length:--icon-md)\" },\n { size: \"md\", class: \"[&_.btn-icon-left]:text-(length:--icon-sm) [&_.btn-icon-right]:text-(length:--icon-sm) [&_.btn-icon-solo]:text-(length:--icon-sm)\" },\n { size: \"sm\", class: \"[&_.btn-icon-left]:text-(length:--icon-xs) [&_.btn-icon-right]:text-(length:--icon-xs) [&_.btn-icon-solo]:text-(length:--icon-xs)\" },\n { size: \"xs\", class: \"[&_.btn-icon-left]:text-[10px] [&_.btn-icon-right]:text-[10px] [&_.btn-icon-solo]:text-[10px]\" },\n // Tertiary · scheme default\n {\n variant: \"tertiary\",\n scheme: \"default\",\n class: [\n \"text-(--font-secondary-base-alt)\",\n \"enabled:hover:bg-(--bg-secondary-lighter) enabled:hover:text-(--font-secondary-hovered)\",\n \"enabled:active:bg-(--bg-secondary-light) enabled:active:text-(--font-secondary-pressed)\",\n \"enabled:active:[&_.btn-label]:font-bold\",\n ],\n },\n // Tertiary · scheme neutral\n {\n variant: \"tertiary\",\n scheme: \"neutral\",\n class: [\n \"text-(--font-neutral-black)\",\n \"enabled:hover:bg-(--bg-secondary-lighter) enabled:hover:text-(--font-secondary-hovered)\",\n \"enabled:active:bg-(--bg-secondary-light) enabled:active:text-(--font-secondary-pressed)\",\n \"enabled:active:[&_.btn-label]:font-bold\",\n ],\n },\n ],\n defaultVariants: {\n variant: \"primary\",\n scheme: \"default\",\n size: \"lg\",\n iconOnly: false,\n },\n});\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { buttonVariants, ButtonVariants } from \"./button.cva\";\n\n@Directive({\n selector: \"button\",\n standalone: true,\n host: {\n \"[class]\": `variants()`\n }\n})\nexport class ButtonComponent {\n class = input<string>();\n variant = input<ButtonVariants[\"variant\"]>(\"primary\");\n scheme = input<ButtonVariants[\"scheme\"]>(\"default\");\n iconOnly = input<ButtonVariants[\"iconOnly\"]>(false);\n size = input<ButtonVariants[\"size\"]>(\"md\");\n variants = computed(() => {\n if (this.variant() === \"none\") return this.class();\n return cn(\n buttonVariants({\n variant: this.variant(),\n scheme: this.scheme(),\n iconOnly: this.iconOnly(),\n size: this.size(),\n class: this.class()\n })\n );\n });\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nexport const TOGGLE_ICON_CLASS = \"toggle-icon\";\nexport const TOGGLE_LABEL_CLASS = \"toggle-label\";\n// Toggle = pill button with active state shown via aria-pressed=true (or `active` prop).\n// Two variants:\n// • unique → primary palette (active = white pill + shadow-2 + underline below label)\n// • multi → secondary palette (active = almond-active background)\n// Token mapping mirrors app/components/css/toggle.css verbatim.\nexport const toggleVariants = cva(\n [\n \"relative inline-flex w-fit max-w-full items-center justify-center\",\n \"cursor-pointer rounded-full border-0 bg-transparent whitespace-nowrap select-none\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] font-normal\",\n \"transition-[background-color,color,box-shadow] duration-[140ms] ease-[ease] motion-reduce:transition-none\",\n \"outline-none\",\n // Focus ring via ::after\n \"after:pointer-events-none after:absolute after:-inset-[2px] after:rounded-full after:border-2 after:border-transparent after:transition-[border-color] after:duration-[140ms] after:ease-[ease] after:content-['']\",\n \"focus-visible:after:border-(--stroke-focus)\",\n // Disabled — driven by aria-disabled (<Toggle> is a custom element, not a form control)\n \"aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:bg-(--bg-neutral-disabled) aria-disabled:text-(--font-neutral-muted)\",\n // Icon slot\n \"[&_.toggle-icon]:inline-flex [&_.toggle-icon]:shrink-0 [&_.toggle-icon]:items-center [&_.toggle-icon]:justify-center [&_.toggle-icon]:leading-none\",\n // Label slot\n \"[&_.toggle-label]:inline-flex [&_.toggle-label]:min-w-0 [&_.toggle-label]:items-center [&_.toggle-label]:overflow-hidden [&_.toggle-label]:text-ellipsis\"\n ],\n {\n variants: {\n variant: {\n unique: [\n \"text-(--font-primary-base)\",\n // hover (not active, not disabled)\n \"not-aria-disabled:not-aria-pressed:hover:bg-(--bg-primary-hovered) not-aria-disabled:not-aria-pressed:hover:text-(--font-neutral-white)\",\n // active (pressed/pointer down)\n \"not-aria-disabled:not-aria-pressed:active:bg-(--bg-primary-pressed) not-aria-disabled:not-aria-pressed:active:font-bold not-aria-disabled:not-aria-pressed:active:text-(--font-primary-pressed)\",\n // toggled on\n \"aria-pressed:bg-(--bg-neutral-white) aria-pressed:text-(--font-primary-base) aria-pressed:shadow-(--shadow-2)\"\n ],\n multi: [\n \"text-(--font-neutral-black)\",\n \"not-aria-disabled:not-aria-pressed:hover:bg-(--bg-secondary-lighter) not-aria-disabled:not-aria-pressed:hover:text-(--font-secondary-hovered)\",\n \"not-aria-disabled:not-aria-pressed:active:bg-(--bg-secondary-light) not-aria-disabled:not-aria-pressed:active:font-bold not-aria-disabled:not-aria-pressed:active:text-(--font-secondary-pressed)\",\n \"aria-pressed:bg-(--bg-secondary-active) aria-pressed:text-(--font-neutral-black)\"\n ]\n },\n // sm/md aliases for the older naming (small/medium).\n size: {\n sm: \"h-6 gap-(--spacing-3xs) px-(--spacing-xs) text-(length:--size-sm) leading-(--line-height-2) [&_.toggle-icon]:text-(length:--icon-xs)\",\n md: \"h-9 gap-(--spacing-3xs) px-(--spacing-xl) text-(length:--size-base) leading-(--line-height-3) [&_.toggle-icon]:text-(length:--icon-sm)\",\n small: \"h-6 gap-(--spacing-3xs) px-(--spacing-xs) text-(length:--size-sm) leading-(--line-height-2) [&_.toggle-icon]:text-(length:--icon-xs)\",\n medium: \"h-9 gap-(--spacing-3xs) px-(--spacing-xl) text-(length:--size-base) leading-(--line-height-3) [&_.toggle-icon]:text-(length:--icon-sm)\"\n },\n iconOnly: {\n true: \"gap-0 px-0\",\n false: \"\"\n },\n // Discriminant — consumer controls rendering.\n showIcon: { true: \"\", false: \"\" }\n },\n compoundVariants: [\n // Icon-only square — width follows height\n { iconOnly: true, size: \"sm\", class: \"w-6 [&_.toggle-icon]:text-(length:--icon-sm)\" },\n { iconOnly: true, size: \"small\", class: \"w-6 [&_.toggle-icon]:text-(length:--icon-sm)\" },\n { iconOnly: true, size: \"md\", class: \"w-9 [&_.toggle-icon]:text-(length:--icon-md)\" },\n { iconOnly: true, size: \"medium\", class: \"w-9 [&_.toggle-icon]:text-(length:--icon-md)\" },\n // unique active underline — shared base styles (not icon-only)\n {\n variant: \"unique\",\n iconOnly: false,\n class: [\n \"aria-pressed:before:absolute aria-pressed:before:content-['']\",\n \"aria-pressed:before:h-[2px] aria-pressed:before:rounded-[1px]\",\n \"aria-pressed:before:pointer-events-none aria-pressed:before:bg-(--stroke-primary-lighter)\"\n ]\n },\n // medium size — inset 16px / bottom 5px\n {\n variant: \"unique\",\n iconOnly: false,\n size: \"md\",\n class: \"aria-pressed:before:right-(--spacing-xl) aria-pressed:before:bottom-[5px] aria-pressed:before:left-(--spacing-xl)\"\n },\n {\n variant: \"unique\",\n iconOnly: false,\n size: \"medium\",\n class: \"aria-pressed:before:right-(--spacing-xl) aria-pressed:before:bottom-[5px] aria-pressed:before:left-(--spacing-xl)\"\n },\n // small size — inset 12px / bottom 0px (2px gap from text line-box bottom)\n {\n variant: \"unique\",\n iconOnly: false,\n size: \"sm\",\n class: \"aria-pressed:before:right-(--spacing-xs) aria-pressed:before:bottom-0 aria-pressed:before:left-(--spacing-xs)\"\n },\n {\n variant: \"unique\",\n iconOnly: false,\n size: \"small\",\n class: \"aria-pressed:before:right-(--spacing-xs) aria-pressed:before:bottom-0 aria-pressed:before:left-(--spacing-xs)\"\n },\n // unique active underline — icon-only: 8px centered line\n {\n variant: \"unique\",\n iconOnly: true,\n class: [\n \"aria-pressed:before:absolute aria-pressed:before:content-['']\",\n \"aria-pressed:before:left-1/2 aria-pressed:before:-translate-x-1/2\",\n \"aria-pressed:before:h-[2px] aria-pressed:before:w-2 aria-pressed:before:rounded-[1px]\",\n \"aria-pressed:before:pointer-events-none aria-pressed:before:bg-(--stroke-primary-lighter)\"\n ]\n },\n { variant: \"unique\", iconOnly: true, size: \"md\", class: \"aria-pressed:before:bottom-[5px]\" },\n { variant: \"unique\", iconOnly: true, size: \"medium\", class: \"aria-pressed:before:bottom-[5px]\" },\n { variant: \"unique\", iconOnly: true, size: \"sm\", class: \"aria-pressed:before:bottom-0\" },\n { variant: \"unique\", iconOnly: true, size: \"small\", class: \"aria-pressed:before:bottom-0\" }\n ],\n defaultVariants: {\n variant: \"unique\",\n size: \"sm\",\n iconOnly: false,\n showIcon: true\n }\n }\n);\n\nexport type ToggleVariants = VariantProps<typeof toggleVariants>;\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Wraps a sequence of <Toggle> buttons (built on @angular/aria/toolbar).\n// single → lightest-sage pill, 4px padding all around\n// multi → white pill with sage border + shadow-1\n// Token mapping mirrors app/components/css/toggle-group.css verbatim.\n// The flex/gap sits directly on the host so <ToggleGroup> stays template-less:\n// the toggles are direct light-DOM children — no inner wrapper element is needed.\nexport const toggleGroupVariants = cva([\"inline-flex items-center gap-(--spacing-3xs)\"], {\n variants: {\n variant: {\n single: \"rounded-(--radius-rounded) bg-(--bg-primary-lightest) p-(--spacing-3xs)\",\n multi:\n \"rounded-(--radius-rounded) border border-(--stroke-primary-lighter) bg-(--bg-neutral-white) px-(--spacing-xl) py-(--spacing-2xs) shadow-(--shadow-1)\"\n }\n },\n defaultVariants: {\n variant: \"single\"\n }\n});\n\nexport type ToggleGroupVariants = VariantProps<typeof toggleGroupVariants>;\n","import { Toolbar } from \"@angular/aria/toolbar\";\nimport { booleanAttribute, computed, Directive, InjectionToken, input, model } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { toggleGroupVariants } from \"./toggle-group.cva\";\n\n/**\n * Référence du groupe, exposée par DI aux `<Toggle value>` enfants (propagation de la variante).\n * On injecte ce token — jamais `ToggleGroupComponent` — pour éviter toute dépendance circulaire.\n */\nexport const TOGGLE_GROUP = new InjectionToken<ToggleGroupComponent>(\"TOGGLE_GROUP\");\n\n/**\n * `<ToggleGroup>` — conteneur d'une série de `<Toggle value>`, bâti sur la primitive accessible\n * `@angular/aria/toolbar` (roving tabindex + navigation clavier). Depuis `@angular/aria` 22.2 le toolbar ne\n * porte plus de sélection : le groupe la possède lui-même (`value`, `multi`) et les `<Toggle value>` la pilotent.\n *\n * - **single** (défaut) : sélection **exclusive** (comme un groupe radio).\n * - **multi** (`multi`) : sélections **indépendantes**.\n *\n * La sélection est possédée par le modèle `value` (`string[]`) du groupe — `[(value)]=\"picked\"`.\n * `Toolbar` est posé en host directive sur le **même hôte** : c'est là que les `<Toggle value>`\n * enfants résolvent `inject(Toolbar)` (roving tabindex) par la hiérarchie d'injecteurs, et\n * `inject(TOGGLE_GROUP)` pour lire / modifier la sélection.\n *\n * @example\n * ```html\n * <ToggleGroup [(value)]=\"picked\">\n * <Toggle value=\"all\">All</Toggle>\n * <Toggle value=\"docs\">Documents</Toggle>\n * </ToggleGroup>\n *\n * <ToggleGroup multi [(value)]=\"facets\">\n * <Toggle value=\"a\">A</Toggle>\n * <Toggle value=\"b\">B</Toggle>\n * </ToggleGroup>\n * ```\n */\n@Directive({\n selector: \"ToggleGroup, toggle-group, togglegroup\",\n exportAs: \"toggleGroup\",\n standalone: true,\n hostDirectives: [\n {\n directive: Toolbar,\n inputs: [\"orientation\", \"wrap\", \"disabled\", \"softDisabled\"]\n }\n ],\n host: {\n \"[class]\": \"variants()\"\n },\n providers: [{ provide: TOGGLE_GROUP, useExisting: ToggleGroupComponent }]\n})\nexport class ToggleGroupComponent {\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n\n /** Sélection courante (identités des `<Toggle value>` pressés) — `[(value)]`. */\n readonly value = model<string[]>([]);\n\n /** Sélections indépendantes ; sinon sélection exclusive (comme un groupe radio). */\n readonly multi = input(false, { transform: booleanAttribute });\n\n /** Variante propagée aux enfants : `multi` → `multi`, single → `unique`. */\n readonly itemVariant = computed<\"unique\" | \"multi\">(() => (this.multi() ? \"multi\" : \"unique\"));\n\n protected readonly variants = computed(() =>\n cn(\n toggleGroupVariants({\n variant: this.multi() ? \"multi\" : \"single\",\n class: this.class()\n })\n )\n );\n\n /** Indique si `itemValue` est pressé. */\n isSelected(itemValue: string): boolean {\n return this.value().includes(itemValue);\n }\n\n /**\n * Bascule `itemValue`. Multi : ajoute / retire. Single : exclusif, un re-clic sur l'option\n * active la désélectionne (`[]`) — au consommateur de l'ignorer s'il veut un choix obligatoire.\n */\n toggle(itemValue: string): void {\n const current = this.value();\n if (this.multi()) {\n this.value.set(current.includes(itemValue) ? current.filter(v => v !== itemValue) : [...current, itemValue]);\n } else {\n this.value.set(current.includes(itemValue) ? [] : [itemValue]);\n }\n }\n}\n","import { ToolbarWidget } from \"@angular/aria/toolbar\";\nimport { booleanAttribute, computed, Directive, inject, input, model } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { toggleVariants, type ToggleVariants } from \"./toggle.cva\";\nimport { TOGGLE_GROUP } from \"./toggle-group\";\n\n/**\n * `<Toggle>` — bouton pilule à état \"pressé\", en **mode autonome**.\n *\n * Élément custom stylé via `toggleVariants` (CVA) ; l'état est reflété en `aria-pressed`\n * (le CVA style l'état pressé via les variantes `aria-pressed:`). Étant un élément custom\n * (et non un `<button>`), il porte lui-même `role=\"button\"`, un `tabindex` et la gestion\n * clavier (Espace/Entrée). Pour un usage dans un groupe, poser un `value` → voir\n * {@link ToggleItemComponent}.\n *\n * @example\n * ```html\n * <Toggle variant=\"multi\" [(pressed)]=\"bookmarked\">Favori</Toggle>\n * ```\n */\n@Directive({\n selector: \"Toggle:not([value]), toggle:not([value])\",\n exportAs: \"toggle\",\n standalone: true,\n host: {\n role: \"button\",\n \"[class]\": \"variants()\",\n \"[attr.aria-pressed]\": \"pressed()\",\n \"[attr.aria-disabled]\": \"disabled() || null\",\n \"[attr.tabindex]\": \"disabled() ? -1 : 0\",\n \"(click)\": \"toggle()\",\n \"(keydown.enter)\": \"onKeydown($event)\",\n \"(keydown.space)\": \"onKeydown($event)\"\n }\n})\nexport class ToggleComponent {\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n /** Palette : `unique` (primaire) ou `multi` (secondaire). */\n readonly variant = input<ToggleVariants[\"variant\"]>(\"unique\");\n /** Taille (`sm`/`md`, alias `small`/`medium`). */\n readonly size = input<ToggleVariants[\"size\"]>(\"sm\");\n /** Pilule carrée (icône seule). */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n /** Discriminant de rendu d'icône (piloté par le consommateur). */\n readonly showIcon = input(true, { transform: booleanAttribute });\n /** Désactive le toggle (→ `aria-disabled`, non focusable, clic ignoré). */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** État pressé — `[(pressed)]`. */\n readonly pressed = model<boolean>(false);\n\n protected readonly variants = computed(() =>\n cn(\n toggleVariants({\n variant: this.variant(),\n size: this.size(),\n iconOnly: this.iconOnly(),\n showIcon: this.showIcon(),\n class: this.class()\n })\n )\n );\n\n protected toggle(): void {\n if (this.disabled()) return;\n this.pressed.update(v => !v);\n }\n\n protected onKeydown(event: Event): void {\n // Espace ne doit pas scroller la page ; on active sur keydown pour Espace et Entrée.\n event.preventDefault();\n this.toggle();\n }\n}\n\n/**\n * `<Toggle value=\"…\">` — toggle **dans un `<ToggleGroup>`**.\n *\n * Compose le widget ARIA `ngToolbarWidget` (roving tabindex). La sélection appartient au\n * `<ToggleGroup>` (`@angular/aria` 22.2 ne la porte plus) : l'état pressé est dérivé de\n * `group.value()` et reflété en `aria-pressed` ; clic / Espace / Entrée basculent la valeur. La palette est héritée du groupe\n * (`single` → `unique`, `multi` → `multi`) sauf si `variant` est fourni explicitement.\n *\n * `value` est **requis** (identité du widget dans la sélection du groupe) et réservé à\n * l'usage groupé — un `<Toggle value>` hors d'un `<ToggleGroup>` échouera (le widget exige\n * un ancêtre `ngToolbar`).\n */\n@Directive({\n selector: \"Toggle[value]\",\n exportAs: \"toggle\",\n standalone: true,\n hostDirectives: [{ directive: ToolbarWidget, inputs: [\"disabled\", \"id\"] }],\n host: {\n role: \"button\",\n \"[class]\": \"variants()\",\n \"[attr.aria-pressed]\": \"pressed()\",\n \"(click)\": \"toggle()\",\n \"(keydown.enter)\": \"onKeydown($event)\",\n \"(keydown.space)\": \"onKeydown($event)\"\n }\n})\nexport class ToggleItemComponent {\n /** Identité du toggle dans la sélection du groupe. */\n readonly value = input.required<string>();\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n /** Palette explicite ; à défaut, héritée du `<ToggleGroup>` parent, sinon `unique`. */\n readonly variant = input<ToggleVariants[\"variant\"]>();\n /** Taille (`sm`/`md`, alias `small`/`medium`). */\n readonly size = input<ToggleVariants[\"size\"]>(\"sm\");\n /** Pilule carrée (icône seule). */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n /** Discriminant de rendu d'icône (piloté par le consommateur). */\n readonly showIcon = input(true, { transform: booleanAttribute });\n\n /** Le widget de toolbar co-localisé (host directive) — roving tabindex et `disabled`. */\n protected readonly widget = inject(ToolbarWidget, { self: true });\n /** Groupe parent : sélection et variante de palette. */\n private readonly group = inject(TOGGLE_GROUP);\n\n protected readonly pressed = computed(() => this.group.isSelected(this.value()));\n\n protected readonly resolvedVariant = computed<NonNullable<ToggleVariants[\"variant\"]>>(() => this.variant() ?? this.group.itemVariant());\n\n protected readonly variants = computed(() =>\n cn(\n toggleVariants({\n variant: this.resolvedVariant(),\n size: this.size(),\n iconOnly: this.iconOnly(),\n showIcon: this.showIcon(),\n class: this.class()\n })\n )\n );\n\n protected toggle(): void {\n if (this.widget.disabled()) return;\n this.group.toggle(this.value());\n }\n\n protected onKeydown(event: Event): void {\n // Espace ne doit pas scroller la page ; on active sur keydown pour Espace et Entrée.\n event.preventDefault();\n this.toggle();\n }\n}\n","import { Listbox } from \"@angular/aria/listbox\";\nimport { computed, Directive, InjectionToken, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport type { ListItemVariants } from \"./list.cva\";\n\n/**\n * Référence du `<List>`, exposée par DI aux `<ListItem>` enfants pour hériter la variante/taille\n * par défaut. On injecte ce token — jamais `ListComponent` directement — pour éviter toute\n * dépendance circulaire entre le conteneur et ses items.\n */\nexport const LIST_REF = new InjectionToken<ListComponent>(\"LIST_REF\");\n\n/**\n * `<List>` — conteneur de `<ListItem>`, bâti sur la primitive accessible `@angular/aria/listbox`\n * (`role=\"listbox\"` : roving tabindex, navigation clavier, typeahead, sélection simple/multiple).\n *\n * La sélection est possédée par le modèle `value` (`V[]`) du listbox — `[(value)]=\"picked\"`.\n * `Listbox` est posé en **host directive** sur l'hôte `<List>` : c'est là que les `<ListItem>`\n * enfants résolvent `inject(Listbox)` par la hiérarchie d'injecteurs (leur parent d'élément est\n * l'hôte `<List>`). Un wrapper `<ng-content>` casserait ce DI — d'où le choix des host directives.\n *\n * `variant`/`size` posés ici sont propagés par défaut à tous les `<ListItem>` (chaque item peut\n * surcharger localement).\n *\n * @remarks\n * Défauts hérités de `@angular/aria/listbox` (non modifiables via le forwarding host-directive) :\n * `focusMode=\"roving\"`, `selectionMode=\"follow\"` (la sélection suit le focus), `wrap=true`,\n * `orientation=\"vertical\"`. Passer `selectionMode=\"explicit\"` pour ne sélectionner qu'au clic/Espace.\n *\n * @example Liste de contenu, sélection multiple explicite :\n * ```html\n * <List multi selectionMode=\"explicit\" [(value)]=\"picked\">\n * @for (b of bookmarks(); track b.id) {\n * <ListItem [value]=\"b.id\" [disabled]=\"b.locked\">\n * <ListItemText [subtext]=\"b.url\">{{ b.title }}</ListItemText>\n * </ListItem>\n * }\n * </List>\n * ```\n */\n@Directive({\n selector: \"List,list\",\n exportAs: \"list\",\n standalone: true,\n hostDirectives: [\n {\n directive: Listbox,\n inputs: [\"value\", \"multi\", \"wrap\", \"orientation\", \"focusMode\", \"selectionMode\", \"disabled\", \"readonly\", \"softDisabled\", \"typeaheadDelay\"],\n outputs: [\"valueChange\"]\n }\n ],\n host: {\n \"[class]\": \"variants()\"\n },\n providers: [{ provide: LIST_REF, useExisting: ListComponent }]\n})\nexport class ListComponent {\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n\n /** Variante visuelle par défaut propagée aux `<ListItem>` (override possible par item). */\n readonly variant = input<ListItemVariants[\"variant\"]>(\"list-content\");\n\n /**\n * Taille par défaut propagée aux `<ListItem>` (override possible par item). No-op sur\n * `list-content` : cette variante réaffirme sa propre hauteur (deux lignes, label + sous-texte)\n * après `size` dans le CVA — voir `compoundVariants` de `listItemVariants`. N'a d'effet que sur\n * `list-navigation` / `list-menu`.\n */\n readonly size = input<ListItemVariants[\"size\"]>(\"small\");\n\n /** Le CVA ne stylise pas le conteneur : classes minimales de layout + `class` consommateur. */\n protected readonly variants = computed(() => cn(\"flex flex-col outline-none\", this.class()));\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Slot classes (kept for compound selectors & DOM hooks)\nexport const LIST_ITEM_LEFT_CLASS = \"list-item-left\";\nexport const LIST_ITEM_TEXT_BLOCK_CLASS = \"list-item-text-block\";\nexport const LIST_ITEM_TEXT_CLASS = \"list-item-text\";\nexport const LIST_ITEM_SUBTEXT_CLASS = \"list-item-subtext\";\nexport const LIST_ITEM_ICON_CLASS = \"list-item-icon\";\nexport const LIST_ITEM_EXPANDER_CLASS = \"list-item-expander\";\nexport const LIST_ITEM_EXPANDER_BUTTON_CLASS = \"list-item-expander-btn\";\nexport const LIST_ITEM_AVATAR_CLASS = \"list-item-avatar\";\nexport const LIST_ITEM_ICON_RIGHT_CLASS = \"list-item-icon-right\";\nexport const LIST_ITEM_CHEVRON_RIGHT_CLASS = \"list-item-chevron-right\";\nexport function getListDepthStyle(depth = 0) {\n return depth > 0 ? { paddingLeft: `calc(var(--spacing-2xs) + ${depth} * 20px)` } : undefined;\n}\n// List item. Selected = aria-selected; keyboard-active = data-active; disabled = aria-disabled or :disabled.\n// Token mapping mirrors app/components/css/list.css verbatim.\nexport const listItemVariants = cva(\n [\n \"box-border flex w-full items-center gap-(--spacing-2xs)\",\n \"rounded-(--radius-sm) px-(--spacing-2xs) py-(--spacing-3xs)\",\n \"bg-transparent\",\n \"transition-[background-color] duration-100 ease-out motion-reduce:transition-none\",\n // Ring drawn INSIDE the row, not around it: a row spans the full width of its list, and a list\n // that scrolls (ListPanel caps itself at max-h-115 overflow-auto) clips whatever sits outside\n // its padding box — measured on the home widgets, where the first row shares its top, left and\n // right edges with the scroller, so an offset-0 ring lost three of its four sides.\n \"focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--stroke-focus)\",\n // Hover / pressed (not disabled)\n \"not-aria-disabled:hover:bg-(--bg-primary-lighter)\",\n \"not-aria-disabled:active:bg-(--bg-primary-light)\",\n // Selected\n \"aria-selected:bg-(--bg-primary-lighter)\",\n // Keyboard-active, roving focusMode (the only mode any current `<List>` consumer uses):\n // @angular/aria always designates a default `data-active` candidate (the first focusable\n // option) even before any real interaction — gate on native `:focus` too, otherwise that\n // default candidate reads as permanently \"selected\" on first render.\n \"not-aria-disabled:data-[active=true]:focus:bg-(--bg-primary-lighter)\",\n // Disabled — wins over all\n \"aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:bg-(--bg-neutral-base)\",\n \"aria-disabled:[&_.list-item-expander]:text-(--font-neutral-muted) aria-disabled:[&_.list-item-icon]:text-(--font-neutral-muted) aria-disabled:[&_.list-item-subtext]:text-(--font-neutral-muted) aria-disabled:[&_.list-item-text]:text-(--font-neutral-muted)\",\n \"disabled:pointer-events-none disabled:cursor-default disabled:bg-(--bg-neutral-base)\",\n // Left wrapper\n // `flex-auto` and not `flex-1`: the difference is the basis, and it decides who gives way when a\n // row is too narrow. At `flex-basis: 0%` the label weighs nothing in the negotiation, so it\n // yields everything to the trailing decorations — measured on a bookmark row of 435px, where a\n // four-author tag kept 383px and this wrapper collapsed to 0, taking the leading icon with it.\n // With `auto`, both are sized from their content and shrink in proportion.\n // The leading icon is excluded from that: an svg is a flex item like any other and would shrink\n // to a sliver, which is worse than a truncated label.\n \"[&_.list-item-left]:flex [&_.list-item-left]:min-w-0 [&_.list-item-left]:flex-auto [&_.list-item-left]:items-center [&_.list-item-left]:gap-(--spacing-2xs)\",\n \"[&_.list-item-left>svg]:shrink-0\",\n // Text block. No truncation by default (no `overflow-hidden` / `text-ellipsis` / `whitespace-nowrap`):\n // a label cut off by the library cannot be read back at 200% zoom or text spacing (RGAA 10.12), and\n // only the consuming application knows where truncation is acceptable — it opts in with `truncate`.\n \"[&_.list-item-text-block]:flex [&_.list-item-text-block]:min-w-0 [&_.list-item-text-block]:flex-1 [&_.list-item-text-block]:flex-col [&_.list-item-text-block]:items-start\",\n \"[&_.list-item-text]:w-full [&_.list-item-text]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.list-item-text]:text-(length:--size-base) [&_.list-item-text]:leading-(--line-height-3) [&_.list-item-text]:font-normal [&_.list-item-text]:text-(--font-neutral-black)\",\n \"[&_.list-item-subtext]:w-full [&_.list-item-subtext]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.list-item-subtext]:text-(length:--size-sm) [&_.list-item-subtext]:leading-(--line-height-2) [&_.list-item-subtext]:text-(--bg-primary-base)\",\n // Icons / expander / avatar / right slots\n \"[&_.list-item-icon]:inline-flex [&_.list-item-icon]:h-(--icon-sm) [&_.list-item-icon]:w-(--icon-sm) [&_.list-item-icon]:shrink-0 [&_.list-item-icon]:items-center [&_.list-item-icon]:justify-center [&_.list-item-icon]:text-(length:--icon-sm) [&_.list-item-icon]:leading-none [&_.list-item-icon]:text-(--font-secondary-base-alt)\",\n \"[&_.list-item-expander]:inline-flex [&_.list-item-expander]:h-(--icon-sm) [&_.list-item-expander]:w-(--icon-sm) [&_.list-item-expander]:shrink-0 [&_.list-item-expander]:items-center [&_.list-item-expander]:justify-center [&_.list-item-expander]:text-(length:--icon-xs) [&_.list-item-expander]:leading-none [&_.list-item-expander]:text-(--font-secondary-base-alt)\",\n \"[&_.list-item-expander-btn]:m-0 [&_.list-item-expander-btn]:cursor-pointer [&_.list-item-expander-btn]:rounded-(--radius-xs) [&_.list-item-expander-btn]:border-0 [&_.list-item-expander-btn]:bg-transparent [&_.list-item-expander-btn]:p-0\",\n \"[&_.list-item-expander-btn:hover:not(:disabled)]:bg-(--bg-primary-light) [&_.list-item-expander-btn:hover:not(:disabled)]:text-(--font-neutral-black)\",\n \"[&_.list-item-avatar]:inline-flex [&_.list-item-avatar]:h-6 [&_.list-item-avatar]:w-6 [&_.list-item-avatar]:shrink-0 [&_.list-item-avatar]:items-center [&_.list-item-avatar]:justify-center [&_.list-item-avatar]:overflow-hidden [&_.list-item-avatar]:rounded-full [&_.list-item-avatar]:bg-(--bg-primary-lightest) [&_.list-item-avatar]:text-(length:--size-sm) [&_.list-item-avatar]:font-bold [&_.list-item-avatar]:text-(--font-primary-base)\",\n // Icon-right: hidden by default, revealed on hover / selected / pressed\n \"[&_.list-item-icon-right]:inline-flex [&_.list-item-icon-right]:shrink-0 [&_.list-item-icon-right]:cursor-pointer [&_.list-item-icon-right]:items-center [&_.list-item-icon-right]:justify-center [&_.list-item-icon-right]:rounded-(--radius-xs) [&_.list-item-icon-right]:border-0 [&_.list-item-icon-right]:bg-transparent [&_.list-item-icon-right]:p-0.5 [&_.list-item-icon-right]:text-(length:--icon-xs) [&_.list-item-icon-right]:leading-none [&_.list-item-icon-right]:text-(--font-primary-muted) [&_.list-item-icon-right]:opacity-0\",\n // `focus-visible:` en plus du survol : l'action de fin de ligne n'existe qu'en `opacity-0`\n // jusqu'au survol de la souris. Au clavier, la ligne active ne montrait donc rien, alors que\n // `Suppr` y est disponible et annoncée par `aria-keyshortcuts`.\n \"hover:[&_.list-item-icon-right]:opacity-100 focus-visible:[&_.list-item-icon-right]:opacity-100 active:[&_.list-item-icon-right]:opacity-100 aria-selected:[&_.list-item-icon-right]:opacity-100\",\n \"[&_.list-item-icon-right:hover]:bg-(--bg-error-lightest) [&_.list-item-icon-right:hover]:text-(--font-error-base)\",\n // Chevron-right: slides 2px on hover\n \"[&_.list-item-chevron-right]:inline-flex [&_.list-item-chevron-right]:shrink-0 [&_.list-item-chevron-right]:items-center [&_.list-item-chevron-right]:justify-center [&_.list-item-chevron-right]:text-(length:--icon-sm) [&_.list-item-chevron-right]:text-(--font-secondary-base-alt) [&_.list-item-chevron-right]:transition-transform [&_.list-item-chevron-right]:duration-150 [&_.list-item-chevron-right]:ease-out\",\n \"hover:[&_.list-item-chevron-right]:translate-x-0.5\"\n ],\n {\n variants: {\n variant: {\n \"list-content\": \"h-10.5 gap-0\",\n \"list-navigation\":\n \"m-0 h-[var(--row-height-sm)] cursor-pointer appearance-none border-0 bg-transparent text-left font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif]\",\n \"list-menu\":\n \"m-0 h-[var(--row-height-sm)] cursor-pointer appearance-none gap-0 border-0 bg-transparent text-left font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif]\"\n },\n size: {\n small: \"h-[var(--row-height-sm)]\",\n medium: \"h-[var(--row-height-md)]\"\n },\n // Aria-selected fallback (for non-listbox children that can't use aria-selected).\n selected: {\n true: \"bg-(--bg-primary-lighter)\",\n false: \"\"\n }\n },\n compoundVariants: [\n // `list-content` owns its row height: 42px, sized for a label + subtext (18px + 16px)\n // plus the vertical padding. `size` is evaluated after `variant`, so its `h-*` would\n // win through tailwind-merge and clamp the row back to 24/36px — clipping two-line\n // content. Re-assert the variant height here so `size` stays a no-op for this variant\n // (it keeps driving the single-line `list-navigation` / `list-menu` rows).\n { variant: \"list-content\", size: \"small\", class: \"h-10.5\" },\n { variant: \"list-content\", size: \"medium\", class: \"h-10.5\" }\n ],\n defaultVariants: {\n variant: \"list-content\",\n size: \"small\",\n selected: false\n }\n }\n);\n\nexport type ListItemVariants = VariantProps<typeof listItemVariants>;\n","import { Option } from \"@angular/aria/listbox\";\nimport { ChevronDownIcon } from \"../../icons/chevron-down.icon\";\nimport { ChevronRightIcon } from \"../../icons/chevron-right.icon\";\nimport { cn } from \"cn\";\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n ElementRef,\n inject,\n input,\n numberAttribute\n} from \"@angular/core\";\n\nimport { LIST_REF } from \"./list\";\nimport {\n getListDepthStyle,\n LIST_ITEM_AVATAR_CLASS,\n LIST_ITEM_CHEVRON_RIGHT_CLASS,\n LIST_ITEM_EXPANDER_BUTTON_CLASS,\n LIST_ITEM_EXPANDER_CLASS,\n LIST_ITEM_ICON_CLASS,\n LIST_ITEM_ICON_RIGHT_CLASS,\n LIST_ITEM_LEFT_CLASS,\n LIST_ITEM_SUBTEXT_CLASS,\n LIST_ITEM_TEXT_BLOCK_CLASS,\n LIST_ITEM_TEXT_CLASS,\n listItemVariants,\n type ListItemVariants\n} from \"./list.cva\";\n\n/**\n * `<ListItem>` — item d'un `<List>`, bâti sur la primitive accessible `@angular/aria/listbox`\n * (`Option` → `role=\"option\"`, `aria-selected`/`aria-disabled` reflétés automatiquement, ce que\n * le CVA `listItemVariants` stylise via ses sélecteurs d'attributs).\n *\n * `variant`/`size` sont hérités du `<List>` parent (via {@link LIST_REF}) sauf s'ils sont fournis\n * explicitement sur l'item. `depth` applique l'indentation d'arbre (`getListDepthStyle`).\n *\n * La sélection appartient au modèle `value` du `<List>` (listbox) — on ne pilote donc pas de\n * `selected` manuel ici.\n *\n * @example\n * ```html\n * <ListItem [value]=\"u.id\">\n * <ListItemLeft>\n * <ListItemAvatar>{{ u.initials }}</ListItemAvatar>\n * <ListItemText [subtext]=\"u.email\">{{ u.name }}</ListItemText>\n * </ListItemLeft>\n * <ListItemAction ariaLabel=\"Supprimer\" (click)=\"remove(u)\"><trash-icon /></ListItemAction>\n * </ListItem>\n * ```\n */\n@Directive({\n selector: \"ListItem,list-item,listitem\",\n exportAs: \"listItem\",\n standalone: true,\n hostDirectives: [{ directive: Option, inputs: [\"value\", \"disabled\", \"label\"] }],\n host: {\n \"[class]\": \"variants()\",\n \"[style.padding-left]\": \"paddingLeft()\",\n \"[attr.aria-keyshortcuts]\": \"hasAction() ? 'Delete' : null\",\n \"(keydown)\": \"onKeydown($event)\"\n }\n})\nexport class ListItemComponent {\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n\n /** Variante explicite ; à défaut, héritée du `<List>` parent, sinon `list-content`. */\n readonly variant = input<ListItemVariants[\"variant\"]>();\n\n /**\n * Taille explicite ; à défaut, héritée du `<List>` parent, sinon `small`. No-op quand la\n * variante résolue est `list-content` (hauteur deux-lignes fixe) — voir `ListComponent.size`.\n */\n readonly size = input<ListItemVariants[\"size\"]>();\n\n /** Profondeur d'indentation (arbre) — 20px par niveau. */\n readonly depth = input(0, { transform: numberAttribute });\n\n /** Conteneur parent, pour hériter la variante/taille par défaut. */\n private readonly list = inject(LIST_REF, { optional: true });\n\n protected readonly resolvedVariant = computed<NonNullable<ListItemVariants[\"variant\"]>>(() => this.variant() ?? this.list?.variant() ?? \"list-content\");\n\n protected readonly resolvedSize = computed<NonNullable<ListItemVariants[\"size\"]>>(() => this.size() ?? this.list?.size() ?? \"small\");\n\n protected readonly variants = computed(() =>\n cn(\n listItemVariants({\n variant: this.resolvedVariant(),\n size: this.resolvedSize(),\n class: this.class()\n })\n )\n );\n\n /** Indentation d'arbre (réutilise le helper du CVA) ; `null` à la racine (depth 0). */\n protected readonly paddingLeft = computed(() => getListDepthStyle(this.depth())?.paddingLeft ?? null);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Vrai quand la ligne projette une `<ListItemAction>` — conditionne `aria-keyshortcuts`. */\n protected readonly hasAction = computed(() => !!this.action());\n private readonly action = contentChild(ListItemActionComponent);\n\n /**\n * `Suppr` déclenche l'action de fin de ligne. Celle-ci n'est pas un contrôle focusable (une\n * option de listbox ne peut pas en contenir), donc c'est le seul chemin clavier vers elle.\n */\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key !== \"Delete\" || !this.hasAction()) return;\n const action = this.host.nativeElement.querySelector<HTMLElement>(`.${LIST_ITEM_ICON_RIGHT_CLASS}`);\n if (!action || action.dataset[\"disabled\"]) return;\n event.preventDefault();\n event.stopPropagation();\n action.click();\n }\n}\n\n/**\n * `<ListItemText [subtext]>` — bloc texte d'un item : libellé principal (projeté) + sous-texte\n * optionnel. Hôte = wrapper `.list-item-text-block` (croît et tronque via le CVA parent).\n */\n@Component({\n selector: \"ListItemText,list-item-text,listitemtext\",\n exportAs: \"listItemText\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span [class]=\"textClass\"><ng-content /></span>\n @if (subtext(); as s) {\n <span [class]=\"subtextClass\">{{ s }}</span>\n }\n `,\n host: { \"[class]\": \"hostClasses()\" }\n})\nexport class ListItemTextComponent {\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n /** Sous-texte optionnel affiché sous le libellé principal. */\n readonly subtext = input<string>();\n\n protected readonly textClass = LIST_ITEM_TEXT_CLASS;\n protected readonly subtextClass = LIST_ITEM_SUBTEXT_CLASS;\n protected readonly hostClasses = computed(() => cn(LIST_ITEM_TEXT_BLOCK_CLASS, this.class()));\n}\n\n/**\n * `<ListItemLeft>` — wrapper de la **zone de gauche** (visuel de tête + texte). C'est lui qui porte\n * l'espacement icône/avatar ↔ texte : les variantes `list-content`/`list-menu` mettent le `gap` de\n * l'item à `0`, et `.list-item-left` fournit son propre `gap-(--spacing-2xs)`. Étant `flex-1`, il\n * pousse aussi les actions de fin de ligne (`<ListItemAction>`, `<ListItemChevron>`) contre le bord droit.\n *\n * → À utiliser dès qu'un item a une icône/avatar **et** du texte. Inutile pour une ligne au seul texte\n * (le bloc `<ListItemText>` est déjà `flex-1`).\n */\n@Directive({\n selector: \"ListItemLeft,list-item-left,listitemleft\",\n standalone: true,\n host: { \"[class]\": \"hostClasses()\" }\n})\nexport class ListItemLeftDirective {\n readonly class = input<string>();\n protected readonly hostClasses = computed(() => cn(LIST_ITEM_LEFT_CLASS, this.class()));\n}\n\n/**\n * `<ListItemIcon>` — icône de tête. Poser l'icône galactik en contenu projeté.\n */\n@Directive({\n selector: \"ListItemIcon,list-item-icon,listitemicon\",\n standalone: true,\n host: { \"[class]\": \"hostClasses()\" }\n})\nexport class ListItemIconDirective {\n readonly class = input<string>();\n protected readonly hostClasses = computed(() => cn(LIST_ITEM_ICON_CLASS, this.class()));\n}\n\n/**\n * `<ListItemAvatar>` — avatar rond de tête (initiales ou image projetées).\n */\n@Directive({\n selector: \"ListItemAvatar,list-item-avatar,listitemavatar\",\n standalone: true,\n host: { \"[class]\": \"hostClasses()\" }\n})\nexport class ListItemAvatarDirective {\n readonly class = input<string>();\n protected readonly hostClasses = computed(() => cn(LIST_ITEM_AVATAR_CLASS, this.class()));\n}\n\n/**\n * `<ListItemAction>` — action de fin de ligne, **révélée au survol et au focus clavier** (opacité 0\n * par défaut ; rouge au survol propre — ex. suppression). Le clic remonte naturellement\n * (`(click)` sur `<ListItemAction>`). Poser l'icône en contenu projeté.\n *\n * Rendu comme un `<span>` **non focusable**, et non comme un `<button>` : son hôte `<ListItem>` est\n * une `option` de listbox, or ARIA interdit à une option de contenir un élément interactif — le\n * lecteur d'écran ne sait alors plus s'il annonce une option ou un bouton, et la navigation par\n * flèches du listbox entre en conflit avec Tab. Un `tabindex=\"-1\"` ne suffit pas : un `<button>`\n * reste un contrôle imbriqué.\n *\n * L'accès clavier passe donc par `<ListItem>`, qui déclenche l'action sur `Suppr` et l'annonce via\n * `aria-keyshortcuts`. Le `<span>` reste la cible souris, et garde tout son style (le CVA cible la\n * classe, jamais la balise).\n */\n@Component({\n selector: \"ListItemAction,list-item-action,listitemaction\",\n exportAs: \"listItemAction\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"btnClass\"\n aria-hidden=\"true\"\n [class.pointer-events-none]=\"disabled()\"\n [class.opacity-50]=\"disabled()\"\n [attr.title]=\"ariaLabel()\"\n [attr.data-disabled]=\"disabled() || null\">\n <ng-content />\n </span>\n `,\n host: { class: \"contents\" }\n})\nexport class ListItemActionComponent {\n /**\n * Libellé de l'action. Rendu en `title` (infobulle souris) et non en `aria-label` : l'élément\n * est masqué aux technologies d'assistance, qui atteignent l'action par le raccourci `Suppr`\n * porté par `<ListItem>`. Le nom de l'entrée est conservé pour ne pas casser les appelants.\n */\n readonly ariaLabel = input<string>();\n /** Désactive le bouton d'action. */\n readonly disabled = input(false, { transform: booleanAttribute });\n protected readonly btnClass = LIST_ITEM_ICON_RIGHT_CLASS;\n}\n\n/**\n * `<ListItemChevron>` — affordance de navigation « › » en fin de ligne (glisse au survol via le CVA).\n */\n@Component({\n selector: \"ListItemChevron,list-item-chevron,listitemchevron\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ChevronRightIcon],\n template: `<chevron-right-icon />`,\n host: { \"[class]\": \"hostClass\" }\n})\nexport class ListItemChevronComponent {\n protected readonly hostClass = LIST_ITEM_CHEVRON_RIGHT_CLASS;\n}\n\n/**\n * `<ListItemExpander [expanded] (click)>` — bouton d'expansion d'arbre (chevron).\n *\n * **Style seul** dans le mode listbox actuel : la rotation reflète `expanded`, le clic remonte\n * pour pilotage par le consommateur, mais il n'y a **pas** de sémantique clavier d'arbre — celle-ci\n * sera fournie par une future variante adossée à `@angular/aria/tree`.\n */\n@Component({\n selector: \"ListItemExpander,list-item-expander,listitemexpander\",\n exportAs: \"listItemExpander\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ChevronDownIcon],\n template: `\n <button type=\"button\" [class]=\"btnClass\" [attr.aria-expanded]=\"expanded()\" [attr.aria-label]=\"ariaLabel()\">\n <chevron-down-icon [class]=\"iconClasses()\" />\n </button>\n `,\n host: { class: \"contents\" }\n})\nexport class ListItemExpanderComponent {\n /** État d'expansion (piloté par le consommateur) — oriente le chevron. */\n readonly expanded = input(false, { transform: booleanAttribute });\n /** Libellé accessible du bouton. */\n readonly ariaLabel = input<string>();\n protected readonly btnClass = LIST_ITEM_EXPANDER_BUTTON_CLASS;\n /** Chevron : bas quand ouvert, pointe à droite (rotation -90°) quand fermé. */\n protected readonly iconClasses = computed(() =>\n cn(LIST_ITEM_EXPANDER_CLASS, \"transition-transform duration-150 motion-reduce:transition-none\", this.expanded() ? \"\" : \"-rotate-90\")\n );\n}\n","import { Tree } from \"@angular/aria/tree\";\nimport { computed, Directive, inject, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n/**\n * `<Tree>` — accessible tree container, built on the primitive `@angular/aria/tree` (`[ngTree]`:\n * `role=\"tree\"`, roving tabindex, expand/collapse, typeahead, single/multi selection).\n *\n * Posed as a **host directive**, exactly like `<List>` wraps `Listbox` (`ui/list/list.ts`) — so\n * `<TreeItem>` descendants resolve `[ngTreeItem]` through the same element. Unlike `Listbox`,\n * `@angular/aria/tree`'s `TreeItem.parent` is an explicit *required* input\n * (`Tree<string> | TreeItemGroup<string>`), not resolved through DI — so a `<TreeItem>` cannot\n * inherit its parent implicitly the way `<ListItem>` inherits `LIST_REF`. Read the underlying aria\n * instance off {@link ref} and pass it explicitly.\n *\n * @example Two fixed levels (category → values):\n * ```html\n * <Tree #tree=\"tree\">\n * @for (category of categories(); track category.id) {\n * <TreeItem #catItem=\"treeItem\" [parent]=\"tree.ref\" [value]=\"category.id\">\n * <TreeItemExpander />\n * {{ category.label }}\n * </TreeItem>\n * <ng-template TreeItemGroup [ownedBy]=\"catItem.ref\" #group=\"treeItemGroup\">\n * @for (leaf of category.items; track leaf.id) {\n * <TreeItem [parent]=\"group.ref\" [value]=\"leaf.id\">{{ leaf.label }}</TreeItem>\n * }\n * </ng-template>\n * }\n * </Tree>\n * ```\n */\n@Directive({\n selector: \"Tree,tree\",\n exportAs: \"tree\",\n standalone: true,\n hostDirectives: [\n {\n directive: Tree,\n inputs: [\n \"value\",\n \"multi\",\n \"wrap\",\n \"orientation\",\n \"focusMode\",\n \"selectionMode\",\n \"disabled\",\n \"softDisabled\",\n \"typeaheadDelay\",\n \"nav\",\n \"currentType\",\n \"tabindex\"\n ],\n outputs: [\"valueChange\"]\n }\n ],\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class TreeComponent {\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n\n /** Le CVA ne stylise pas le conteneur : classes minimales de layout + `class` consommateur. */\n protected readonly variants = computed(() => cn(\"flex flex-col outline-none\", this.class()));\n\n /**\n * L'instance `@angular/aria` sous-jacente (posée en host directive sur ce même élément) — à\n * passer en `[parent]` aux `<TreeItem>` racines : `[parent]=\"tree.ref\"`.\n */\n readonly ref = inject(Tree, { self: true }) as Tree<string>;\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// Slot class (kept for compound selectors & DOM hooks)\nexport const TREE_ITEM_EXPANDER_CLASS = \"tree-item-expander\";\n\n// Tree item row. Selected = aria-selected; keyboard-active = data-active; disabled = aria-disabled.\n// Mirrors `listItemVariants` (ui/list/list.cva.ts) — same interaction states, tree semantics\n// (role=\"treeitem\") instead of listbox.\nexport const treeItemVariants = cva(\n [\n \"box-border flex w-full cursor-pointer items-center gap-(--spacing-2xs) select-none\",\n \"rounded-(--radius-sm) px-(--spacing-2xs) py-(--spacing-3xs)\",\n \"bg-transparent\",\n \"transition-[background-color] duration-100 ease-out motion-reduce:transition-none\",\n \"focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--stroke-focus) focus-visible:outline-solid\",\n \"not-aria-disabled:hover:bg-(--bg-primary-lighter)\",\n \"not-aria-disabled:active:bg-(--bg-primary-light)\",\n \"aria-selected:bg-(--bg-primary-lighter)\",\n // Keyboard-active, roving focusMode: @angular/aria always designates a default active candidate\n // (the first focusable item) even before any real interaction — gate on native `:focus` too,\n // same reasoning as `listItemVariants` (ui/list/list.cva.ts).\n \"not-aria-disabled:data-[active=true]:focus:bg-(--bg-primary-lighter)\",\n \"aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:bg-(--bg-neutral-base)\",\n `[&_.${TREE_ITEM_EXPANDER_CLASS}]:inline-flex [&_.${TREE_ITEM_EXPANDER_CLASS}]:h-(--icon-sm) [&_.${TREE_ITEM_EXPANDER_CLASS}]:w-(--icon-sm) [&_.${TREE_ITEM_EXPANDER_CLASS}]:shrink-0 [&_.${TREE_ITEM_EXPANDER_CLASS}]:items-center [&_.${TREE_ITEM_EXPANDER_CLASS}]:justify-center [&_.${TREE_ITEM_EXPANDER_CLASS}]:text-(length:--icon-xs) [&_.${TREE_ITEM_EXPANDER_CLASS}]:leading-none [&_.${TREE_ITEM_EXPANDER_CLASS}]:text-(--font-secondary-base-alt)`\n ],\n {\n variants: {\n size: {\n small: \"h-[var(--row-height-sm)]\",\n medium: \"h-[var(--row-height-md)]\"\n }\n },\n defaultVariants: {\n size: \"small\"\n }\n }\n);\n\nexport type TreeItemVariants = VariantProps<typeof treeItemVariants>;\n","import { TreeItem, TreeItemGroup } from \"@angular/aria/tree\";\nimport { ChangeDetectionStrategy, Component, computed, Directive, inject, input } from \"@angular/core\";\nimport { ChevronRightIcon } from \"../../icons/chevron-right.icon\";\nimport { cn } from \"cn\";\n\nimport { getListDepthStyle } from \"../list/list.cva\";\nimport { TREE_ITEM_EXPANDER_CLASS, treeItemVariants, type TreeItemVariants } from \"./tree.cva\";\n\n/**\n * `<TreeItem>` — node of a `<Tree>`, built on `@angular/aria/tree` (`[ngTreeItem]` →\n * `role=\"treeitem\"`, `aria-expanded`/`aria-selected`/`aria-level` reflected automatically).\n *\n * `[parent]` is **required** and explicit (no implicit DI, unlike `<ListItem>` inheriting\n * `LIST_REF`): pass either the tree root (`tree.ref`) or the enclosing `<TreeItemGroup>`\n * (`group.ref`) — see the example on `<Tree>` (`ui/tree/tree.ts`).\n *\n * @example\n * ```html\n * <TreeItem #catItem=\"treeItem\" [parent]=\"tree.ref\" [value]=\"cat.id\">{{ cat.label }}</TreeItem>\n * ```\n */\n@Directive({\n selector: \"TreeItem,tree-item,treeitem\",\n exportAs: \"treeItem\",\n standalone: true,\n hostDirectives: [\n {\n directive: TreeItem,\n inputs: [\"value\", \"parent\", \"disabled\", \"selectable\", \"label\", \"expanded\"],\n outputs: [\"expandedChange\"]\n }\n ],\n host: {\n \"[class]\": \"variants()\",\n \"[style.padding-left]\": \"paddingLeft()\"\n }\n})\nexport class TreeItemComponent {\n /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */\n readonly class = input<string>();\n\n /** Taille de la ligne. */\n readonly size = input<TreeItemVariants[\"size\"]>(\"small\");\n\n /**\n * L'instance `@angular/aria` sous-jacente — à passer en `[parent]`/`[ownedBy]` aux enfants\n * (`[parent]=\"item.ref\"`, `[ownedBy]=\"item.ref\"`).\n */\n readonly ref = inject(TreeItem, { self: true }) as TreeItem<string>;\n\n protected readonly variants = computed(() => cn(treeItemVariants({ size: this.size(), class: this.class() })));\n\n /** Indentation d'arbre — réutilise le helper de `<List>` (20px par niveau). */\n protected readonly paddingLeft = computed(() => getListDepthStyle(Math.max(0, this.ref.level() - 1))?.paddingLeft ?? null);\n}\n\n/**\n * `<TreeItemGroup [ownedBy]>` — groupe des enfants d'un `<TreeItem>` expansible. Doit être posé sur\n * un `<ng-template>` : `ngTreeItemGroup` n'instancie sa vue que lorsque le nœud est ouvert (lazy\n * render), un `<ul>` déclaré en dehors resterait vide dans le DOM pour chaque nœud fermé (RGAA 8.9).\n *\n * @example\n * ```html\n * <ng-template TreeItemGroup [ownedBy]=\"catItem.ref\" #group=\"treeItemGroup\">\n * <TreeItem [parent]=\"group.ref\" [value]=\"leaf.id\">{{ leaf.label }}</TreeItem>\n * </ng-template>\n * ```\n */\n@Directive({\n selector: \"ng-template[TreeItemGroup],ng-template[treeItemGroup]\",\n exportAs: \"treeItemGroup\",\n standalone: true,\n hostDirectives: [{ directive: TreeItemGroup, inputs: [\"ownedBy\"] }]\n})\nexport class TreeItemGroupComponent {\n /** L'instance `@angular/aria` sous-jacente — à passer en `[parent]` aux `<TreeItem>` enfants. */\n readonly ref = inject(TreeItemGroup, { self: true }) as TreeItemGroup<string>;\n}\n\n/**\n * `<TreeItemExpander>` — chevron d'expand/collapse à la souris, à projeter à l'intérieur d'un\n * `<TreeItem>` expansible.\n *\n * Rendu comme un `<span aria-hidden>` cliqué, jamais un `<button>` : `role=\"treeitem\"` n'admet aucun\n * descendant focusable, et le clavier expand/collapse (flèches gauche/droite) est déjà géré par\n * `ngTreeItem`. Le clic bascule directement le modèle `expanded` de la directive Aria de l'ancêtre\n * `<TreeItem>` (résolu par injection d'élément), pour que souris et clavier empruntent le même\n * chemin — jamais d'état applicatif séparé. `stopPropagation` : `[ngTree]` gère les clics par\n * délégation et ré-exécuterait sinon son propre toggle.\n */\n@Component({\n selector: \"TreeItemExpander,tree-item-expander,treeitemexpander\",\n exportAs: \"treeItemExpander\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ChevronRightIcon],\n template: `\n <span aria-hidden=\"true\" class=\"inline-flex cursor-pointer items-center justify-center\" (click)=\"onClick($event)\">\n <chevron-right-icon [class]=\"iconClasses()\" />\n </span>\n `,\n host: { class: \"contents\" }\n})\nexport class TreeItemExpanderComponent {\n private readonly item = inject(TreeItem, { optional: true });\n\n protected readonly iconClasses = computed(() =>\n cn(TREE_ITEM_EXPANDER_CLASS, \"transition-transform duration-150 motion-reduce:transition-none\", this.item?.expanded() ? \"rotate-90\" : \"\")\n );\n\n protected onClick(event: Event): void {\n event.stopPropagation();\n this.item?.expanded.set(!this.item.expanded());\n }\n}\n","import { contentChild, Directive, input, output, TemplateRef } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n/**\n * What `RowGridComponent` and `RowFeedComponent` have in common: a list of rows rendered through a\n * projected `ng-template`, an accessible name, a total when the list is only a page of it, and the\n * two outputs that make the list usable from the keyboard (activate a row, grow near the end).\n *\n * Not exported from the public API: the two components differ on everything else — ARIA role,\n * keyboard, markup — which is why they are two components rather than one with a `mode`.\n */\n@Directive()\nexport abstract class RowListBase<T> {\n readonly items = input.required<readonly T[]>();\n\n /** Names the list for assistive technology. */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /**\n * Total the source reports, when the rendered list is only part of it — e.g. results filled in as\n * the user scrolls. Leave unset for a list that is entirely present.\n */\n readonly ariaRowCount = input<number | null>(null);\n\n readonly trackBy = input<(item: T, index: number) => unknown>((_item, index) => index);\n\n /** How many rows from the end a focus move starts asking for more. */\n readonly rowsBeforeEnd = input(2);\n\n /** Spacing between rows. Cards stand apart; list rows sit against each other. */\n readonly gridClass = input(\"gap-(--spacing-sm)\");\n\n /** Shape of a row. A card is rounded like a card, a list row like a list row. */\n readonly cellClass = input(\"rounded-(--radius-lg)\");\n\n /** Enter pressed on a row. Handled here because the cell is above the content in the DOM. */\n readonly rowActivate = output<T>();\n\n /**\n * The focus reached the last rows.\n *\n * Infinite scrolling never fires for a keyboard user: a sentinel at the bottom of the list only\n * enters the viewport when someone scrolls there, and moving the focus scrolls by the strict\n * minimum. Watching the focus instead is what makes the list grow under the keyboard.\n */\n readonly endApproached = output<void>();\n\n protected readonly rowTemplate = contentChild.required(TemplateRef);\n\n protected readonly gridClasses = () => cn(\"flex flex-col\", this.gridClass());\n // The ring colour is explicit: `outline-2` only sets width and style, and the ring otherwise fell\n // back to the browser's default black — a contrast failure against a dark background. Paired with\n // `outline-solid` (§5.5) and `--stroke-focus`, the token already used for focus rings elsewhere.\n // scroll-my-3: moving the focus scrolls by the strict minimum, which leaves the row flush against\n // the edge and clips its ring. A scroll margin makes the browser treat the row as taller than it\n // is, so its own scroll-into-view keeps the ring — and a little air — in view.\n protected readonly cellClasses = () =>\n cn(\n \"scroll-my-3 focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-(--stroke-focus)\",\n this.cellClass()\n );\n\n protected onFocusIn(event: FocusEvent): void {\n const target = event.target as HTMLElement | null;\n const row = target?.closest(\"[role='row'], article\");\n const rows = row?.parentElement?.children;\n\n if (!row || !rows) return;\n const index = [...rows].indexOf(row);\n this.rowFocused(index);\n if (index >= rows.length - this.rowsBeforeEnd()) this.endApproached.emit();\n }\n\n /** The focus entered the row at `index`, on itself or on one of its controls. */\n protected rowFocused(_index: number): void {}\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Grid, GridCell, GridRow } from \"@angular/aria/grid\";\nimport { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\nimport { RowListBase } from \"./row-list-base\";\n\n/**\n * A keyboard-navigable ARIA grid shell for a list of rows.\n *\n * It owns the ARIA grid and nothing else: ↑↓ walk the rows, Tab enters the focused row's own\n * controls, Enter activates the row. A grid rather than a listbox because a row here may hold\n * several controls — a link, a delete button — and an `option` may not contain focusable controls.\n * That is what rules out `ListItem`, whose host directive gives it `role=\"option\"`.\n *\n * The row content is left to the caller through a projected `ng-template`: different lists need\n * different row shapes (an article, a placeholder for a document gone from the index, a day\n * heading between rows). Trying to express all of that through inputs would have made this\n * component know about every possible list it could be used for.\n *\n * `rowWrap=\"nowrap\"` stops ↑ on the first row from jumping to the last: in a list fed by infinite\n * scrolling that is a trip to nowhere, and even in a finite one it loses the reader.\n *\n * For a list of cards that is not a table — a grid without headers reads as a layout table\n * (RGAA 5.3) — use `RowFeedComponent` instead.\n *\n * @example\n * ```html\n * <row-grid [items]=\"results()\" [ariaLabel]=\"'Results'\" (rowActivate)=\"open($event)\">\n * <ng-template let-item let-index=\"index\">\n * <a [href]=\"item.url\">{{ item.title }}</a>\n * </ng-template>\n * </row-grid>\n * ```\n */\n@Component({\n selector: \"row-grid, RowGrid\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Grid, GridRow, GridCell, NgTemplateOutlet],\n template: `\n <div\n ngGrid\n rowWrap=\"nowrap\"\n [class]=\"gridClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-rowcount]=\"ariaRowCount()\"\n (focusin)=\"onFocusIn($event)\">\n @for (item of items(); track trackBy()(item, $index)) {\n <div ngGridRow>\n <div ngGridCell [class]=\"cellClasses()\" (keydown.enter)=\"rowActivate.emit(item)\">\n <ng-container *ngTemplateOutlet=\"rowTemplate(); context: { $implicit: item, index: $index }\" />\n </div>\n </div>\n }\n </div>\n `\n})\nexport class RowGridComponent<T> extends RowListBase<T> {}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, signal } from \"@angular/core\";\n\nimport { RowListBase } from \"../row-grid/row-list-base\";\n\n/**\n * A WAI-ARIA feed of articles, for a list of cards that is not a data table and that grows as the\n * user scrolls. A grid without headers reads as a layout table (RGAA 5.3) — that is what\n * `RowGridComponent` would give here; a feed is the pattern for this shape of list.\n *\n * `@angular/aria` has no feed primitive, so the keyboard lives here: the focus is a roving stop over\n * the articles (↑↓ / PageUp / PageDown / Home / End move from one to the next, Enter activates), and\n * Tab walks the controls inside the article as it does in any page. Each article carries\n * `aria-posinset` / `aria-setsize` (`ariaRowCount` when the source reports a total, else the rendered\n * length) and the feed `aria-busy` while `busy` is set.\n *\n * The article content is left to the caller through a projected `ng-template`, as in `RowGridComponent`.\n *\n * @example\n * ```html\n * <row-feed [items]=\"results()\" [ariaLabel]=\"'Results'\" [busy]=\"loading()\" (endApproached)=\"loadMore()\">\n * <ng-template let-item let-index=\"index\">\n * <a [href]=\"item.url\">{{ item.title }}</a>\n * </ng-template>\n * </row-feed>\n * ```\n */\n@Component({\n selector: \"row-feed, RowFeed\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n template: `\n <div\n role=\"feed\"\n [class]=\"gridClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"busy() ? 'true' : null\"\n (focusin)=\"onFocusIn($event)\"\n (keydown)=\"onFeedKeydown($event)\">\n @for (item of items(); track trackBy()(item, $index)) {\n <!-- tabindex: 0 on the one article the keyboard stands on, -1 on the others (roving). -->\n <article\n [class]=\"cellClasses()\"\n [attr.tabindex]=\"$index === activeIndex() ? 0 : -1\"\n [attr.aria-posinset]=\"$index + 1\"\n [attr.aria-setsize]=\"ariaRowCount() ?? items().length\"\n (keydown.enter)=\"onArticleEnter($event, item)\">\n <ng-container *ngTemplateOutlet=\"rowTemplate(); context: { $implicit: item, index: $index }\" />\n </article>\n }\n </div>\n `\n})\nexport class RowFeedComponent<T> extends RowListBase<T> {\n /** The list is loading more rows (`aria-busy`). */\n readonly busy = input(false);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Index of the article that is the roving tab stop. */\n private readonly focusedIndex = signal(0);\n protected readonly activeIndex = computed(() => Math.max(0, Math.min(this.focusedIndex(), this.items().length - 1)));\n\n /** The focus entered the article — on itself or on one of its controls — so it is the stop to come back to. */\n protected override rowFocused(index: number): void {\n this.focusedIndex.set(index);\n }\n\n /** Enter on the article itself; on one of its controls it keeps the control's own meaning. */\n protected onArticleEnter(event: Event, item: T): void {\n if (event.target === event.currentTarget) this.rowActivate.emit(item);\n }\n\n /**\n * Moves the focus between articles. Only when the key is pressed on the article itself: arrows,\n * Home and End typed in a field or on a control inside a card keep their own meaning.\n */\n protected onFeedKeydown(event: KeyboardEvent): void {\n if (!(event.target as HTMLElement).matches(\"article\") || event.altKey || event.ctrlKey || event.metaKey) return;\n\n const articles = [...this.host.nativeElement.querySelectorAll<HTMLElement>(\"[role='feed'] > article\")];\n if (!articles.length) return;\n\n const current = articles.indexOf(event.target as HTMLElement);\n const last = articles.length - 1;\n const next = {\n ArrowDown: current + 1,\n PageDown: current + 1,\n ArrowUp: current - 1,\n PageUp: current - 1,\n Home: 0,\n End: last\n }[event.key];\n if (next === undefined) return;\n\n event.preventDefault();\n const target = articles[Math.max(0, Math.min(next, last))];\n this.focusedIndex.set(articles.indexOf(target));\n target.focus();\n }\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Slot classes\nexport const SWITCH_INPUT_CLASS = \"switch-input\";\nexport const SWITCH_TRACK_CLASS = \"switch-track\";\nexport const SWITCH_THUMB_CLASS = \"switch-thumb\";\nexport const SWITCH_THUMB_ICON_CLASS = \"switch-thumb-icon\";\nexport const SWITCH_THUMB_ICON_OFF_CLASS = \"switch-thumb-icon-off\";\nexport const SWITCH_THUMB_ICON_ON_CLASS = \"switch-thumb-icon-on\";\n// Root = 44×44 touch target around the visually-hidden <input> + track + thumb.\n// All state driven by has-[:checked] / has-[:focus-visible] / has-[:disabled].\n// Token mapping mirrors app/components/css/switch.css verbatim.\nexport const switchRootVariants = cva(\n [\n \"relative inline-flex h-11 w-11 cursor-pointer items-center justify-center select-none\",\n \"has-disabled:cursor-not-allowed\",\n // Visually-hidden input\n \"[&_.switch-input]:absolute [&_.switch-input]:-m-px [&_.switch-input]:h-px [&_.switch-input]:w-px [&_.switch-input]:overflow-hidden [&_.switch-input]:border-0 [&_.switch-input]:p-0 [&_.switch-input]:whitespace-nowrap [&_.switch-input]:[clip:rect(0,0,0,0)]\",\n // Track (uses size-scoped custom props via variants)\n \"[&_.switch-track]:relative [&_.switch-track]:inline-flex [&_.switch-track]:shrink-0 [&_.switch-track]:rounded-full\",\n \"[&_.switch-track]:border [&_.switch-track]:border-solid [&_.switch-track]:border-(--stroke-primary-base) [&_.switch-track]:bg-(--bg-neutral-white)\",\n \"[&_.switch-track]:transition-[background,border-color] [&_.switch-track]:duration-120 [&_.switch-track]:ease-[ease] motion-reduce:[&_.switch-track]:transition-none\",\n // Thumb\n \"[&_.switch-thumb]:absolute [&_.switch-thumb]:top-1/2 [&_.switch-thumb]:rounded-full [&_.switch-thumb]:bg-(--bg-primary-base)\",\n \"[&_.switch-thumb]:flex [&_.switch-thumb]:items-center [&_.switch-thumb]:justify-center\",\n \"[&_.switch-thumb]:-translate-y-1/2\",\n \"[&_.switch-thumb]:transition-[transform,background] [&_.switch-thumb]:duration-150 [&_.switch-thumb]:ease-[ease] motion-reduce:[&_.switch-thumb]:transition-none\",\n // Thumb icon\n \"[&_.switch-thumb-icon]:absolute [&_.switch-thumb-icon]:shrink-0 [&_.switch-thumb-icon]:text-(--font-neutral-white)\",\n \"[&_.switch-thumb-icon]:transition-[color,opacity] [&_.switch-thumb-icon]:duration-120 [&_.switch-thumb-icon]:ease-[ease]\",\n \"[&_.switch-thumb-icon-off]:opacity-100 [&_.switch-thumb-icon-on]:opacity-0\",\n // Checked → track + thumb shift + icon swap\n \"has-checked:[&_.switch-track]:border-(--stroke-primary-base) has-checked:[&_.switch-track]:bg-(--bg-primary-base)\",\n \"has-checked:[&_.switch-thumb]:bg-(--bg-neutral-white)\",\n \"has-checked:[&_.switch-thumb-icon]:text-(--bg-primary-base)\",\n \"has-checked:[&_.switch-thumb-icon-off]:opacity-0 has-checked:[&_.switch-thumb-icon-on]:opacity-100\",\n // Hover unchecked\n \"hover:not-has-disabled:not-has-checked:[&_.switch-track]:bg-(--bg-primary-lighter)\",\n \"hover:not-has-disabled:not-has-checked:[&_.switch-track]:border-(--stroke-primary-hovered)\",\n // Hover checked\n \"hover:not-has-disabled:has-checked:[&_.switch-track]:bg-(--bg-primary-hovered)\",\n // Focus ring\n \"has-focus-visible:[&_.switch-track]:outline-2 has-focus-visible:[&_.switch-track]:outline-offset-1 has-focus-visible:[&_.switch-track]:outline-(--stroke-focus)\",\n // Disabled\n \"has-disabled:[&_.switch-track]:border-(--stroke-neutral-disabled) has-disabled:[&_.switch-track]:bg-(--bg-neutral-disabled)\",\n \"has-disabled:[&_.switch-thumb]:bg-(--bg-neutral-white)\",\n \"has-disabled:[&_.switch-thumb-icon]:text-(--stroke-neutral-disabled)\"\n ],\n {\n variants: {\n // sm aliases for xsmall — track width/height + thumb size/shift differ\n size: {\n // small — 38×24 track, 18 thumb (inset 2, shift 14)\n small:\n \"[&_.switch-thumb]:left-0.5 [&_.switch-thumb]:h-4.5 [&_.switch-thumb]:w-4.5 has-checked:[&_.switch-thumb]:translate-x-3.5 [&_.switch-thumb-icon]:text-[10px] [&_.switch-thumb-icon>svg]:size-4 [&_.switch-track]:h-6 [&_.switch-track]:w-9.5\",\n // xsmall — 28×18 track, 14 thumb (inset 1, shift 10)\n xsmall:\n \"[&_.switch-thumb]:left-px [&_.switch-thumb]:h-3.5 [&_.switch-thumb]:w-3.5 has-checked:[&_.switch-thumb]:translate-x-2.5 [&_.switch-thumb-icon]:text-[8px] [&_.switch-thumb-icon>svg]:size-3 [&_.switch-track]:h-4.5 [&_.switch-track]:w-7 hover:not-has-disabled:has-checked:[&_.switch-track]:border-(--stroke-primary-hovered)\",\n xs: \"[&_.switch-thumb]:left-px [&_.switch-thumb]:h-3.5 [&_.switch-thumb]:w-3.5 has-checked:[&_.switch-thumb]:translate-x-2.5 [&_.switch-thumb-icon]:text-[8px] [&_.switch-thumb-icon>svg]:size-3 [&_.switch-track]:h-4.5 [&_.switch-track]:w-7 hover:not-has-disabled:has-checked:[&_.switch-track]:border-(--stroke-primary-hovered)\"\n }\n },\n defaultVariants: {\n size: \"small\"\n }\n }\n);\n// Track / Thumb variants — kept exported for API parity. Sizing handled by root.\nexport const switchTrackVariants = cva(\"switch-track\");\nexport const switchThumbVariants = cva(\"switch-thumb\");\n\nexport type SwitchRootVariants = VariantProps<typeof switchRootVariants>;\nexport type SwitchTrackVariants = VariantProps<typeof switchTrackVariants>;\n","import { booleanAttribute, Component, computed, input, model } from \"@angular/core\";\nimport { CheckIcon } from \"../../icons/check.icon\";\nimport { XMarkIcon } from \"../../icons/x-mark.icon\";\nimport { cn } from \"cn\";\n\nimport { switchRootVariants, SwitchRootVariants } from \"./switch.cva\";\n\n@Component({\n selector: \"switch, Switch\",\n imports: [XMarkIcon, CheckIcon],\n standalone: true,\n template: `\n <label [class]=\"variants()\" [attr.aria-hidden]=\"presentational() ? 'true' : null\">\n <input\n class=\"switch-input\"\n type=\"checkbox\"\n role=\"switch\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.inert]=\"presentational() ? '' : null\"\n (change)=\"onCheckedChange($event)\"\n >\n <span class=\"switch-track\">\n <span class=\"switch-thumb\">\n <XMarkIcon class=\"switch-thumb-icon switch-thumb-icon-off\"/>\n <CheckIcon class=\"switch-thumb-icon switch-thumb-icon-on\"/>\n </span>\n </span>\n </label>\n `,\n host: {\n class: \"contents\"\n }\n})\nexport class SwitchComponent {\n readonly checked = model<boolean>(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly size = input<SwitchRootVariants[\"size\"]>(\"small\");\n readonly class = input<string>();\n\n /**\n * Accessible name of the inner `<input>`, for a switch whose label is not projected.\n *\n * A switch has no content, so without a name it is unlabelled (RGAA 11.1). Aliased on the\n * attribute, as `Checkbox.ariaLabel` is, and applied to the `<input>`: the host is in\n * `display: contents` and carries no role, so a name on it would be read by nobody.\n */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n /**\n * Id of the element that names the inner `<input>`, for a switch labelled by visible text elsewhere\n * in the template. Wrapping the switch in a `<label>` is not an option: it already renders its own\n * (nested labels are invalid, RGAA 8.2). Takes precedence over `aria-label`.\n */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: \"aria-labelledby\" });\n\n /**\n * Indicateur décoratif : le switch n'est plus un contrôle, il reflète un état porté par son parent\n * (typiquement un `<MenuItem role=\"menuitemcheckbox\">`, où un contrôle imbriqué serait invalide).\n *\n * L'`<input>` devient `inert` — hors parcours clavier **et** hors arbre d'accessibilité, ce qu'un\n * simple `tabindex=\"-1\"` ne ferait pas : `aria-hidden` avec un descendant focusable est une violation.\n * Le clic traverse vers le parent, et `:checked` continue de piloter le rendu.\n */\n readonly presentational = input(false, { transform: booleanAttribute });\n\n /**\n * Index de tabulation de l'`<input>`, pour un hôte qui possède l'ordre de tabulation.\n *\n * Dans un `ngToolbar`, le tabindex tournant doit atteindre le vrai focalisable — or c'est\n * l'`<input>` interne, que la barre d'outils ne peut pas viser elle-même (l'hôte est en\n * `display: contents` et n'a pas de rôle). L'hôte passe 0 pour le widget actif et -1 pour les\n * autres ; laisser indéfini hors barre d'outils, où l'`<input>` garde son arrêt naturel.\n *\n * Sans effet quand `presentational` est vrai : `inert` retire déjà l'élément du parcours.\n */\n readonly tabIndex = input<number | undefined>(undefined);\n\n readonly variants = computed(() => cn(switchRootVariants({ size: this.size() }), this.presentational() && \"pointer-events-none\", this.class()));\n\n protected onCheckedChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Slot classes\nexport const CHECKBOX_INPUT_CLASS = \"checkbox-input\";\nexport const CHECKBOX_HITBOX_CLASS = \"checkbox-hitbox\";\nexport const CHECKBOX_CONTROL_CLASS = \"checkbox-control\";\nexport const CHECKBOX_ICON_CLASS = \"checkbox-icon\";\nexport const CHECKBOX_CHECK_ICON_CLASS = \"checkbox-icon-check\";\nexport const CHECKBOX_MINUS_ICON_CLASS = \"checkbox-icon-minus\";\nexport const CHECKBOX_TEXT_BLOCK_CLASS = \"checkbox-text-block\";\nexport const CHECKBOX_LABEL_CLASS = \"checkbox-label\";\nexport const CHECKBOX_HINT_CLASS = \"checkbox-hint\";\n// Root <label> wraps a visually-hidden <input> + .checkbox-hitbox + text.\n// All visual state driven by the input's :checked / :indeterminate / :focus-visible / :disabled\n// via has-[…]:[&_.checkbox-control]:… selectors.\n// Token mapping mirrors app/components/css/checkbox.css, with one deliberate departure: the checked\n// fill uses --bg-primary-* where the reference uses --font-primary-*, see the comment on it below.\nexport const checkboxRootVariants = cva([\n \"relative inline-flex cursor-pointer items-start gap-(--spacing-xs) select-none\",\n \"has-disabled:cursor-not-allowed\",\n // Hitbox geometry\n \"[&_.checkbox-hitbox]:inline-flex [&_.checkbox-hitbox]:h-4.5 [&_.checkbox-hitbox]:w-4.5 [&_.checkbox-hitbox]:shrink-0 [&_.checkbox-hitbox]:items-center [&_.checkbox-hitbox]:justify-center [&_.checkbox-hitbox]:rounded-(--radius-xs)\",\n // Control (visible square)\n \"[&_.checkbox-control]:relative [&_.checkbox-control]:h-4 [&_.checkbox-control]:w-4 [&_.checkbox-control]:rounded-(--radius-xs)\",\n \"[&_.checkbox-control]:border [&_.checkbox-control]:border-solid [&_.checkbox-control]:border-(--stroke-primary-base)\",\n \"[&_.checkbox-control]:inline-flex [&_.checkbox-control]:items-center [&_.checkbox-control]:justify-center [&_.checkbox-control]:bg-(--bg-neutral-white)\",\n \"[&_.checkbox-control]:transition-[border-color,background-color,box-shadow] [&_.checkbox-control]:duration-150 [&_.checkbox-control]:ease-[ease] motion-reduce:[&_.checkbox-control]:transition-none\",\n // Focus ring via ::after pseudo-element\n \"[&_.checkbox-control]:after:pointer-events-none [&_.checkbox-control]:after:absolute [&_.checkbox-control]:after:-inset-0.75 [&_.checkbox-control]:after:rounded-[calc(var(--radius-xs)+3px)] [&_.checkbox-control]:after:border-2 [&_.checkbox-control]:after:border-transparent [&_.checkbox-control]:after:content-['']\",\n \"has-focus-visible:[&_.checkbox-control]:after:border-(--stroke-focus)\",\n // Icons (positioned inside the control)\n \"[&_.checkbox-icon]:absolute [&_.checkbox-icon]:scale-[0.85] [&_.checkbox-icon]:leading-none [&_.checkbox-icon]:text-(--font-neutral-white) [&_.checkbox-icon]:opacity-0 [&_.checkbox-icon]:transition-[opacity,transform,color] [&_.checkbox-icon]:duration-120 [&_.checkbox-icon]:ease-[ease] motion-reduce:[&_.checkbox-icon]:transition-none\",\n \"[&_.checkbox-icon-check]:text-[9px]\",\n \"[&_.checkbox-icon-minus]:text-[10px]\",\n // Checked → primary fill + check icon visible.\n // The fill is a *background* token on purpose. The reference CSS uses --font-primary-base, which\n // happens to be the same --sage-800 as --bg-primary-base in light mode, so both look identical\n // there — but in dark mode --font-primary-base lightens (it is a text colour) while the icon\n // above it sits on --font-neutral-white, which lightens too: a checked box came out white on\n // white. --bg-primary-base darkens instead, so the pair keeps its contrast in both themes.\n \"has-checked:[&_.checkbox-control]:border-(--bg-primary-base) has-checked:[&_.checkbox-control]:bg-(--bg-primary-base)\",\n \"has-checked:[&_.checkbox-icon-check]:scale-100 has-checked:[&_.checkbox-icon-check]:opacity-100\",\n // Indeterminate → primary fill + minus icon visible\n \"has-indeterminate:[&_.checkbox-control]:border-(--bg-primary-base) has-indeterminate:[&_.checkbox-control]:bg-(--bg-primary-base)\",\n \"has-indeterminate:[&_.checkbox-icon-minus]:scale-100 has-indeterminate:[&_.checkbox-icon-minus]:opacity-100\",\n // Hover unchecked (not disabled, not checked, not indeterminate)\n \"[&:hover:not(:has(:disabled))_:not(:checked):not(:indeterminate)+.checkbox-hitbox_.checkbox-control]:bg-(--bg-primary-lighter)\",\n \"[&:hover:not(:has(:disabled))_:not(:checked):not(:indeterminate)+.checkbox-hitbox_.checkbox-control]:border-(--stroke-primary-hovered)\",\n // Hover checked/indeterminate — background token, same reason as the checked fill above\n \"[&:hover:not(:has(:disabled))_.checkbox-control]:has-checked:border-(--bg-primary-hovered) [&:hover:not(:has(:disabled))_.checkbox-control]:has-checked:bg-(--bg-primary-hovered)\",\n // Active unchecked → light bg, 2px border\n \"[&:active:not(:has(:disabled))_:not(:checked):not(:indeterminate)+.checkbox-hitbox_.checkbox-control]:bg-(--bg-primary-light)\",\n \"[&:active:not(:has(:disabled))_:not(:checked):not(:indeterminate)+.checkbox-hitbox_.checkbox-control]:border-2 [&:active:not(:has(:disabled))_:not(:checked):not(:indeterminate)+.checkbox-hitbox_.checkbox-control]:border-(--stroke-primary-base)\",\n // Active checked/indeterminate → pressed bg\n \"[&:active:not(:has(:disabled))_.checkbox-control]:has-checked:border-(--bg-primary-pressed) [&:active:not(:has(:disabled))_.checkbox-control]:has-checked:bg-(--bg-primary-pressed)\",\n // Disabled — neutral fill, muted icons and text\n \"has-disabled:[&_.checkbox-control]:border-(--stroke-neutral-disabled) has-disabled:[&_.checkbox-control]:bg-(--bg-neutral-disabled)\",\n \"has-disabled:[&_.checkbox-icon]:text-(--stroke-neutral-disabled)\",\n \"has-disabled:[&_.checkbox-hint]:text-(--font-neutral-muted) has-disabled:[&_.checkbox-label]:text-(--font-neutral-muted)\",\n // Text block\n \"[&_.checkbox-text-block]:inline-flex [&_.checkbox-text-block]:min-w-0 [&_.checkbox-text-block]:flex-col [&_.checkbox-text-block]:gap-px\",\n \"[&_.checkbox-label]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.checkbox-label]:font-normal [&_.checkbox-label]:whitespace-nowrap [&_.checkbox-label]:text-(--font-primary-base)\",\n \"[&_.checkbox-label]:text-(length:--size-sm) [&_.checkbox-label]:leading-4\",\n \"[&_.checkbox-hint]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.checkbox-hint]:text-(length:--size-sm) [&_.checkbox-hint]:leading-[1.3] [&_.checkbox-hint]:text-(--font-primary-muted)\",\n // Visually-hidden input\n \"[&_.checkbox-input]:absolute [&_.checkbox-input]:-m-px [&_.checkbox-input]:h-px [&_.checkbox-input]:w-px [&_.checkbox-input]:overflow-hidden [&_.checkbox-input]:border-0 [&_.checkbox-input]:p-0 [&_.checkbox-input]:whitespace-nowrap [&_.checkbox-input]:[clip:rect(0,0,0,0)]\"\n]);\n\nexport type CheckboxRootVariants = VariantProps<typeof checkboxRootVariants>;\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, viewChild } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { CheckIcon } from \"../../icons/check.icon\";\nimport { MinusIcon } from \"../../icons/minus.icon\";\n\nimport { checkboxRootVariants } from \"./checkbox.cva\";\n\n@Component({\n selector: \"checkbox, Checkbox\",\n imports: [CheckIcon, MinusIcon],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label [class]=\"variants()\">\n <input\n #inputEl\n class=\"checkbox-input\"\n type=\"checkbox\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n (change)=\"onCheckedChange($event)\"\n />\n <span class=\"checkbox-hitbox\" aria-hidden=\"true\">\n <span class=\"checkbox-control\">\n <MinusIcon class=\"checkbox-icon checkbox-icon-minus\"/>\n <CheckIcon class=\"checkbox-icon checkbox-icon-check\"/>\n </span>\n </span>\n <span class=\"checkbox-text-block\">\n <span class=\"checkbox-label\"><ng-content /></span>\n @if (hint()) {\n <span class=\"checkbox-hint\">{{ hint() }}</span>\n }\n </span>\n </label>\n `,\n host: {\n class: \"contents\",\n \"(click)\": \"$event.stopPropagation()\"\n }\n})\nexport class CheckboxComponent {\n readonly checked = model<boolean>(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly indeterminate = input(false, { transform: booleanAttribute });\n readonly hint = input<string>();\n readonly class = input<string>();\n\n /**\n * Accessible name of the inner `<input>`, for a box whose label is not projected.\n *\n * A checkbox called with no content has no accessible name at all (RGAA 11.1) — the case of a\n * \"select all\" box that only makes sense next to the header it belongs to. Aliased on the\n * attribute, as `Badge.ariaLabel` is, and applied to the `<input>`: the host is in\n * `display: contents` and carries no role, so a name on it would be read by nobody.\n */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n // `cn`, not the cva's own `class`: that one only appends, so a consumer's `items-center` would sit next\n // to the root's `items-start` and the stylesheet order would decide. `cn` merges them (tailwind-merge),\n // as every other component of the library does.\n readonly variants = computed(() => cn(checkboxRootVariants(), this.class()));\n\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>(\"inputEl\");\n\n constructor() {\n // indeterminate is a DOM property only — cannot be set via HTML attribute\n effect(() => {\n const el = this.inputEl()?.nativeElement;\n if (el) el.indeterminate = this.indeterminate();\n });\n }\n\n protected onCheckedChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n// Slot classes\nexport const RADIO_INPUT_CLASS = \"radio-input\";\nexport const RADIO_HITBOX_CLASS = \"radio-hitbox\";\nexport const RADIO_CONTROL_CLASS = \"radio-control\";\nexport const RADIO_DOT_CLASS = \"radio-dot\";\nexport const RADIO_TEXT_BLOCK_CLASS = \"radio-text-block\";\nexport const RADIO_LABEL_CLASS = \"radio-label\";\nexport const RADIO_HINT_CLASS = \"radio-hint\";\n// Root <label> wraps a visually-hidden <input type=\"radio\"> + .radio-hitbox + text.\n// All visual state (selected/disabled/focus/hover/active) driven by native input\n// pseudo-classes via has-[…]:[&_.radio-*]:… selectors — no CVA variant props.\n// Token mapping mirrors app/components/css/radio.css verbatim.\n// propMapping: [] — zero Figma-prop variants; all states are CSS-driven.\nexport const radioRootVariants = cva([\n \"relative inline-flex cursor-pointer gap-(--spacing-xs) select-none\",\n \"has-[:disabled]:cursor-not-allowed\",\n // Visually-hidden input\n \"[&_.radio-input]:absolute [&_.radio-input]:-m-px [&_.radio-input]:h-px [&_.radio-input]:w-px [&_.radio-input]:overflow-hidden [&_.radio-input]:border-0 [&_.radio-input]:p-0 [&_.radio-input]:whitespace-nowrap [&_.radio-input]:[clip:rect(0,0,0,0)]\",\n // Hitbox\n \"[&_.radio-hitbox]:inline-flex [&_.radio-hitbox]:h-[18px] [&_.radio-hitbox]:w-[18px] [&_.radio-hitbox]:shrink-0 [&_.radio-hitbox]:items-center [&_.radio-hitbox]:justify-center\",\n // Control (visible circle) — unchecked base\n \"[&_.radio-control]:relative [&_.radio-control]:h-(--row-height-xs) [&_.radio-control]:w-(--row-height-xs) [&_.radio-control]:rounded-full\",\n \"[&_.radio-control]:border [&_.radio-control]:border-solid [&_.radio-control]:border-(--stroke-primary-base)\",\n \"[&_.radio-control]:inline-flex [&_.radio-control]:items-center [&_.radio-control]:justify-center [&_.radio-control]:bg-(--bg-neutral-white)\",\n \"[&_.radio-control]:transition-[border-color,background-color] [&_.radio-control]:duration-150 [&_.radio-control]:ease-[ease] motion-reduce:[&_.radio-control]:transition-none\",\n // Focus ring ::after pseudo-element — hidden by default\n \"[&_.radio-control]:after:pointer-events-none [&_.radio-control]:after:absolute [&_.radio-control]:after:-inset-[3px] [&_.radio-control]:after:rounded-full [&_.radio-control]:after:border-2 [&_.radio-control]:after:border-transparent [&_.radio-control]:after:content-['']\",\n \"has-[:focus-visible]:[&_.radio-control]:after:border-(--stroke-focus)\",\n // Dot — hidden by default\n \"[&_.radio-dot]:h-2.5 [&_.radio-dot]:w-2.5 [&_.radio-dot]:rounded-full [&_.radio-dot]:bg-(--font-primary-base)\",\n \"[&_.radio-dot]:scale-0 [&_.radio-dot]:opacity-0\",\n \"[&_.radio-dot]:transition-[transform,opacity,background-color] [&_.radio-dot]:duration-[120ms] [&_.radio-dot]:ease-[ease] motion-reduce:[&_.radio-dot]:transition-none\",\n // Checked — show dot (border stays --stroke-primary-base, already set above)\n \"has-[:checked]:[&_.radio-dot]:scale-100 has-[:checked]:[&_.radio-dot]:opacity-100\",\n // Hover — unselected (not disabled, not checked)\n \"[&:hover:not(:has(:disabled))_:not(:checked)+.radio-hitbox_.radio-control]:bg-(--bg-primary-lighter)\",\n \"[&:hover:not(:has(:disabled))_:not(:checked)+.radio-hitbox_.radio-control]:border-(--stroke-primary-base)\",\n // Hover — selected (not disabled, checked)\n \"[&:hover:not(:has(:disabled))_:checked+.radio-hitbox_.radio-control]:bg-(--bg-primary-light)\",\n \"[&:hover:not(:has(:disabled))_:checked+.radio-hitbox_.radio-control]:border-(--stroke-primary-hovered)\",\n \"[&:hover:not(:has(:disabled))_:checked+.radio-hitbox_.radio-dot]:bg-(--font-primary-hovered)\",\n // Active/pressed — unselected\n \"[&:active:not(:has(:disabled))_:not(:checked)+.radio-hitbox_.radio-control]:bg-(--bg-primary-light)\",\n \"[&:active:not(:has(:disabled))_:not(:checked)+.radio-hitbox_.radio-control]:border-(--stroke-primary-pressed) [&:active:not(:has(:disabled))_:not(:checked)+.radio-hitbox_.radio-control]:border-(--stroke-sm)\",\n // Active/pressed — selected\n \"[&:active:not(:has(:disabled))_:checked+.radio-hitbox_.radio-control]:bg-(--bg-primary-pressed)\",\n \"[&:active:not(:has(:disabled))_:checked+.radio-hitbox_.radio-control]:border-(--font-neutral-black)\",\n \"[&:active:not(:has(:disabled))_:checked+.radio-hitbox_.radio-dot]:bg-(--font-neutral-black)\",\n // Disabled\n \"has-[:disabled]:[&_.radio-control]:border-(--stroke-neutral-disabled) has-[:disabled]:[&_.radio-control]:bg-(--bg-neutral-disabled)\",\n \"has-[:disabled]:[&_.radio-dot]:bg-(--stroke-neutral-disabled)\",\n \"has-[:disabled]:has-[:checked]:[&_.radio-dot]:scale-100 has-[:disabled]:has-[:checked]:[&_.radio-dot]:opacity-100\",\n \"has-[:disabled]:[&_.radio-hint]:text-(--font-neutral-muted) has-[:disabled]:[&_.radio-label]:text-(--font-neutral-muted)\",\n // Text block\n \"[&_.radio-text-block]:inline-flex [&_.radio-text-block]:min-w-0 [&_.radio-text-block]:flex-col [&_.radio-text-block]:gap-px\",\n \"[&_.radio-label]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.radio-label]:text-(length:--size-base) [&_.radio-label]:leading-[1.3] [&_.radio-label]:font-semibold [&_.radio-label]:text-(--font-primary-base)\",\n \"[&_.radio-hint]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.radio-hint]:text-(length:--size-sm) [&_.radio-hint]:leading-[1.3] [&_.radio-hint]:text-(--font-primary-muted)\"\n]);\n\nexport type RadioRootVariants = VariantProps<typeof radioRootVariants>;\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, input, model } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { radioRootVariants } from \"./radio.cva\";\n\n@Component({\n selector: \"radio, Radio\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label [class]=\"variants()\">\n <input\n class=\"radio-input\"\n type=\"radio\"\n [name]=\"name()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-checked]=\"checked()\"\n (change)=\"onCheckedChange($event)\"\n />\n <span class=\"radio-hitbox\" aria-hidden=\"true\">\n <span class=\"radio-control\">\n <span class=\"radio-dot\"></span>\n </span>\n </span>\n <span class=\"radio-text-block\">\n <span class=\"radio-label\"><ng-content /></span>\n @if (hint()) {\n <span class=\"radio-hint\">{{ hint() }}</span>\n }\n </span>\n </label>\n `,\n host: {\n class: \"contents\"\n }\n})\nexport class RadioComponent {\n readonly checked = model<boolean>(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly name = input<string>();\n readonly hint = input<string>();\n readonly class = input<string>();\n\n readonly variants = computed(() => cn(radioRootVariants(), this.class()));\n\n protected onCheckedChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n}\n","import { booleanAttribute, computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport {\n INPUT_CONTROL_CLASS,\n INPUT_COUNTER_CLASS,\n INPUT_ICON_LEFT_CLASS,\n INPUT_ICON_RIGHT_CLASS,\n INPUT_SEARCH_NATIVE_RESET,\n inputCounterVariants,\n InputCounterVariants,\n inputWrapVariants,\n InputWrapVariants\n} from \"./input.cva\";\n\n/**\n * Input wrapper — the horizontal flex that holds the optional icon slots and\n * the native control. It drives the focus / disabled / read-only visuals from\n * the inner `<input input-control>` via `has-[]` selectors, so it must *wrap*\n * the control — it is no longer a directive on the `<input>` itself.\n *\n * Expected markup (slot classes are applied by the helper directives below):\n *\n * <input-group size=\"md\" scheme=\"default\">\n * <search-icon input-icon-left />\n * <input input-control type=\"text\" />\n * <button input-icon-right><x-icon /></button>\n * </input-group>\n */\n@Directive({\n selector: \"input-group, inputgroup, InputGroup\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class InputComponent {\n class = input<string>();\n size = input<InputWrapVariants[\"size\"]>(\"md\");\n scheme = input<InputWrapVariants[\"scheme\"]>(\"default\");\n filled = input(false, { transform: booleanAttribute });\n numbers = input(false, { transform: booleanAttribute });\n /** The group grows with its content (wrapping chips, several lines) instead of keeping a fixed height; the size's height is its minimum. */\n autoHeight = input(false, { transform: booleanAttribute });\n /** Text size, independent of `size` (e.g. `md` height with `sm` text). Follows `size` when not set. */\n textSize = input<InputWrapVariants[\"textSize\"]>();\n\n variants = computed(() =>\n cn(\n inputWrapVariants({\n size: this.size(),\n scheme: this.scheme(),\n filled: this.filled(),\n numbers: this.numbers(),\n autoHeight: this.autoHeight(),\n textSize: this.textSize(),\n class: this.class()\n })\n )\n );\n}\n\n/**\n * Native control slot — tags the `<input>` with the `input-control` class the\n * wrapper styles via `[&_.input-control]`. Marker attribute (not the bare\n * `input` element) to avoid clashing with other input directives.\n */\n@Directive({\n selector: \"input[input-control], input[inputControl]\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class InputControlDirective {\n class = input<string>();\n variants = computed(() => cn(INPUT_CONTROL_CLASS, INPUT_SEARCH_NATIVE_RESET, this.class()));\n}\n\n/** Left icon slot — tags its host with the `input-icon-left` class. */\n@Directive({\n selector: \"[input-icon-left], [inputIconLeft]\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class InputIconLeftDirective {\n class = input<string>();\n variants = computed(() => cn(INPUT_ICON_LEFT_CLASS, this.class()));\n}\n\n/** Right icon slot — tags its host with the `input-icon-right` class. */\n@Directive({\n selector: \"[input-icon-right], [inputIconRight]\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class InputIconRightDirective {\n class = input<string>();\n variants = computed(() => cn(INPUT_ICON_RIGHT_CLASS, this.class()));\n}\n\n/**\n * Character counter (e.g. \"12 / 100\"). Styled by its own CVA, independently of\n * the wrapper — mirror its `scheme` / `size` to the wrapper to stay in sync.\n * Carries the `input-counter` slot class for identification.\n */\n@Directive({\n selector: \"input-counter, inputcounter, InputCounter\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class InputCounterComponent {\n class = input<string>();\n size = input<InputCounterVariants[\"size\"]>(\"md\");\n scheme = input<InputCounterVariants[\"scheme\"]>(\"default\");\n\n variants = computed(() =>\n cn(\n INPUT_COUNTER_CLASS,\n inputCounterVariants({\n size: this.size(),\n scheme: this.scheme(),\n class: this.class()\n })\n )\n );\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef, input, model, output, signal, viewChild } from \"@angular/core\";\nimport type { FormValueControl } from \"@angular/forms/signals\";\nimport { cn } from \"cn\";\n\nimport { InputComponent, InputControlDirective } from \"../input/input\";\nimport type { InputWrapVariants } from \"../input/input.cva\";\nimport { TagComponent } from \"../tag/tag\";\nimport { TagRemoveComponent } from \"../tag/tag-remove\";\n\n/**\n * A field that turns what is typed into removable tags — free text, no suggestions.\n *\n * It is a `FormValueControl<string[]>`: `[formField]` binds it, or `[(value)]` for a plain two-way binding.\n *\n * ```html\n * <TagInput aria-label=\"Tags\" placeholder=\"Type a tag and press comma…\" [formField]=\"form.tags\" />\n * ```\n *\n * - The separator (`,` by default) and **Enter** add the tag being typed; Enter never submits the surrounding form.\n * - A tag is trimmed, an empty one is ignored, and a duplicate is ignored whatever its case (the first spelling stays).\n * - **Backspace** in an empty field removes the last tag.\n * - Pasting `a, b, c` adds three tags.\n * - Leaving the field adds what is typed (`addOnBlur`), so a Save button never loses the last word.\n *\n * Nothing in the library translates: every string a user or a screen reader meets is an input with an English default.\n */\n@Component({\n selector: \"TagInput, tag-input, taginput\",\n imports: [InputComponent, InputControlDirective, TagComponent, TagRemoveComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <input-group\n role=\"group\"\n [attr.aria-label]=\"ariaLabel()\"\n [size]=\"size()\"\n [scheme]=\"scheme()\"\n [autoHeight]=\"true\"\n [class]=\"class()\"\n (click)=\"focus()\">\n @for (tag of value(); track tag) {\n <tag scheme=\"grey\" size=\"xs\" data-testid=\"tag\">\n {{ tag }}\n <tag-remove [aria-label]=\"removeText(tag)\" [disabled]=\"disabled() || readonly()\" (removed)=\"remove(tag)\" />\n </tag>\n }\n <input\n input-control\n #field\n type=\"text\"\n class=\"min-w-24 flex-1\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n [attr.placeholder]=\"value().length ? null : placeholder()\"\n [attr.aria-label]=\"addLabel()\"\n [attr.aria-invalid]=\"scheme() === 'error' ? 'true' : null\"\n [value]=\"draft()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (paste)=\"onPaste($event)\"\n (blur)=\"onBlur()\" />\n </input-group>\n <span class=\"sr-only\" aria-live=\"polite\" data-testid=\"announcement\">{{ announcement() }}</span>\n `,\n host: {\n class: \"block\",\n \"[class.opacity-50]\": \"disabled()\"\n }\n})\nexport class TagInputComponent implements FormValueControl<string[]> {\n protected readonly cn = cn;\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>(\"field\");\n\n /** The tags, in the order they were added. The only required member of the signal forms contract. */\n readonly value = model<string[]>([]);\n\n /** Disables the field and every remove button; dims the host. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** The tags stay visible but cannot be changed. */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /** Written by signal forms from the field's `touched` state; also set by this component on blur. */\n readonly touch = output<void>();\n\n /** Shown while there is no tag yet — it would otherwise sit after the chips and read as one of them. */\n readonly placeholder = input<string>(\"Add a tag…\");\n\n /** The character that adds the tag being typed, besides Enter. Several characters may be given (`\",;\"`). */\n readonly separator = input<string>(\",\");\n\n /** Adds what is typed when the field loses focus. Turn it off for a field that must only take explicit additions. */\n readonly addOnBlur = input(true, { transform: booleanAttribute });\n\n readonly size = input<InputWrapVariants[\"size\"]>(\"md\");\n readonly scheme = input<InputWrapVariants[\"scheme\"]>(\"default\");\n readonly class = input<string>();\n\n /** Accessible name of the whole group (what the tags are: \"Tags\"). Aliased on the attribute, as `SearchInput` does. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n /** Accessible name of the typing field. */\n readonly addLabel = input<string>(\"Add a tag\");\n\n /** Accessible name of a remove button; `{tag}` is replaced by the tag. */\n readonly removeLabel = input<string>(\"Remove {tag}\");\n\n /** Announced politely after an addition; `{tag}` is replaced by the tag. */\n readonly addedLabel = input<string>(\"{tag} added\");\n\n /** Announced politely after a removal; `{tag}` is replaced by the tag. */\n readonly removedLabel = input<string>(\"{tag} removed\");\n\n /** What is typed and not committed yet (`pending` is taken: it is part of the forms contract). */\n readonly draft = signal(\"\");\n protected readonly announcement = signal(\"\");\n\n /** Moves the focus into the typing field. */\n focus(): void {\n this.field().nativeElement.focus();\n }\n\n /**\n * Adds what is typed and clears the field. A form that submits without the field losing focus (Enter in another\n * field) calls it first, so the last word is not lost.\n */\n commit(): void {\n this.add(this.draft());\n this.setPending(this.field().nativeElement, \"\");\n }\n\n /** Adds a tag the way typing it and pressing Enter would; returns whether it was added. */\n add(raw: string): boolean {\n const tag = raw.trim();\n if (!tag || this.disabled() || this.readonly()) return false;\n if (this.value().some(t => t.toLowerCase() === tag.toLowerCase())) return false;\n this.value.update(tags => [...tags, tag]);\n this.announcement.set(this.addedLabel().replace(\"{tag}\", tag));\n return true;\n }\n\n /** Removes a tag; returns whether it was there. */\n remove(tag: string): boolean {\n if (this.disabled() || this.readonly() || !this.value().includes(tag)) return false;\n this.value.update(tags => tags.filter(t => t !== tag));\n this.announcement.set(this.removedLabel().replace(\"{tag}\", tag));\n this.focus();\n return true;\n }\n\n protected removeText(tag: string): string {\n return this.removeLabel().replace(\"{tag}\", tag);\n }\n\n protected onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const separators = this.separator();\n const text = input.value;\n // Typing the separator commits what precedes it; the separator itself is never kept.\n if (separators && [...separators].some(s => text.includes(s))) {\n const parts = text.split(new RegExp(`[${escapeForClass(separators)}]`));\n const rest = parts.pop() ?? \"\";\n for (const part of parts) this.add(part);\n this.setPending(input, rest);\n } else {\n this.draft.set(text);\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\") {\n // Enter adds the tag; it does not submit the form.\n event.preventDefault();\n this.commit();\n } else if (event.key === \"Backspace\" && !this.draft() && this.value().length && !this.readonly() && !this.disabled()) {\n const last = this.value().at(-1)!;\n this.value.update(tags => tags.slice(0, -1));\n this.announcement.set(this.removedLabel().replace(\"{tag}\", last));\n }\n }\n\n protected onPaste(event: ClipboardEvent): void {\n const text = event.clipboardData?.getData(\"text\") ?? \"\";\n const separators = this.separator();\n if (!separators || ![...separators, \"\\n\"].some(s => text.includes(s))) return;\n event.preventDefault();\n for (const part of text.split(new RegExp(`[${escapeForClass(separators)}\\\\n]`))) this.add(part);\n }\n\n protected onBlur(): void {\n if (this.addOnBlur()) this.commit();\n this.touch.emit();\n }\n\n private setPending(input: HTMLInputElement, value: string): void {\n this.draft.set(value);\n input.value = value;\n }\n}\n\n/** Escapes the characters that mean something inside a regular expression character class. */\nfunction escapeForClass(chars: string): string {\n return chars.replace(/[\\\\\\]^-]/g, \"\\\\$&\");\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// Slot classes — used for compound targeting via [&_.badge-*]\nexport const BADGE_LABEL_CLASS = \"badge-label\";\nexport const BADGE_ICON_CLASS = \"badge-icon\";\nexport const BADGE_NUMBER_CLASS = \"badge-number\";\n\n// Icon size lookup per badge size — consumers pass to <Icon />.\n// Token mapping mirrors Figma: Badge (icon) nodeId 2405:3870 + Badge (number) nodeId 2405:4055.\n// Figma prop `style` → CVA `style`; Figma prop `scheme` → CVA `scheme`.\n// Figma component set discriminator → CVA `variant` (\"icon\" | \"number\").\nexport const badgeVariants = cva([\"inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full\"], {\n variants: {\n // Figma component set discriminator: \"icon\" = Badge (icon), \"number\" = Badge (number)\n variant: {\n icon: \"aspect-square\", // force square for icon-only badges\n number: \"px-(--spacing-3xs)\" // breathing room for 2-3 digit counts; width is unconstrained (see size compoundVariants)\n },\n // Figma `style` → CVA `style` (primary = dark fill, secondary = light tonal fill)\n style: {\n primary: \"\",\n secondary: \"\"\n },\n // Figma `scheme` → CVA `scheme` (12 schemes, matching manifest valueMap)\n scheme: {\n sage: \"\",\n almond: \"\",\n pink: \"\",\n grey: \"\",\n success: \"\", // Figma: success (was: green)\n warning: \"\", // Figma: warning (was: orange)\n info: \"\", // Figma: info (was: blue)\n error: \"\", // Figma: error (was: red)\n cyan: \"\",\n yellow: \"\",\n cherry: \"\",\n indigo: \"\"\n },\n // Figma `size` → CVA `size` (md/sm/xs)\n // No fixed width here: \"icon\" derives its width from aspect-square, while \"number\"\n // gets its width floor from the compoundVariants below (so it can grow into a pill).\n size: {\n md: \"h-(--row-height-md)\",\n sm: \"h-(--row-height-sm) text-(length:--size-base)\",\n xs: \"h-(--row-height-xs) text-(length:--size-xs)\"\n }\n },\n compoundVariants: [\n // ── number: circle by default, pill only once content is wider than the row height ──\n { variant: \"number\", size: \"md\", class: \"min-w-(--row-height-md)\" },\n { variant: \"number\", size: \"sm\", class: \"min-w-(--row-height-sm)\" },\n { variant: \"number\", size: \"xs\", class: \"min-w-(--row-height-xs)\" },\n\n // ── primary (dark fill) ───────────────────────────────────────────\n // sage → primary role tokens\n { style: \"primary\", scheme: \"sage\", class: \"bg-(--bg-primary-base) text-(--font-neutral-white)\" },\n // almond → secondary role tokens\n { style: \"primary\", scheme: \"almond\", class: \"bg-(--bg-secondary-base-alt) text-(--font-neutral-white)\" },\n // pink → accent role tokens\n { style: \"primary\", scheme: \"pink\", class: \"bg-(--bg-accent-base) text-(--font-neutral-white)\" },\n // grey → neutral base-alt (darkest neutral)\n { style: \"primary\", scheme: \"grey\", class: \"bg-(--bg-neutral-base-alt) text-(--font-neutral-white)\" },\n // semantic / hue — solid fills\n { style: \"primary\", scheme: \"success\", class: \"bg-(--bg-success-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"warning\", class: \"bg-(--bg-warning-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"info\", class: \"bg-(--bg-info-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"error\", class: \"bg-(--bg-error-base) text-(--font-neutral-white)\" },\n // hue fills\n { style: \"primary\", scheme: \"cyan\", class: \"bg-(--bg-cyan-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"yellow\", class: \"bg-(--bg-yellow-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"cherry\", class: \"bg-(--bg-cherry-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"indigo\", class: \"bg-(--bg-indigo-base) text-(--font-neutral-white)\" },\n\n // ── secondary (light tonal fill) ──────────────────────────────────\n { style: \"secondary\", scheme: \"sage\", class: \"bg-(--bg-primary-light) text-(--font-primary-base)\" },\n { style: \"secondary\", scheme: \"almond\", class: \"bg-(--bg-secondary-light) text-(--font-secondary-base)\" },\n { style: \"secondary\", scheme: \"pink\", class: \"bg-(--bg-accent-base-alt) text-(--font-accent-base)\" },\n { style: \"secondary\", scheme: \"grey\", class: \"bg-(--bg-neutral-base) text-(--font-neutral-base)\" },\n // semantic light tints\n { style: \"secondary\", scheme: \"success\", class: \"bg-(--bg-success-base-alt) text-(--font-success-base)\" },\n { style: \"secondary\", scheme: \"warning\", class: \"bg-(--bg-warning-base-alt) text-(--font-warning-base)\" },\n { style: \"secondary\", scheme: \"info\", class: \"bg-(--bg-info-base-alt) text-(--font-info-base)\" },\n { style: \"secondary\", scheme: \"error\", class: \"bg-(--bg-error-base-alt) text-(--font-error-base)\" },\n // hue light tints\n { style: \"secondary\", scheme: \"cyan\", class: \"bg-(--bg-cyan-base-alt) text-(--font-cyan-base)\" },\n { style: \"secondary\", scheme: \"yellow\", class: \"bg-(--bg-yellow-base-alt) text-(--font-yellow-base)\" },\n { style: \"secondary\", scheme: \"cherry\", class: \"bg-(--bg-cherry-base-alt) text-(--font-cherry-base)\" },\n { style: \"secondary\", scheme: \"indigo\", class: \"bg-(--bg-indigo-base-alt) text-(--font-indigo-base)\" }\n ],\n defaultVariants: {\n variant: \"number\",\n style: \"primary\",\n scheme: \"sage\",\n size: \"sm\"\n }\n});\n\nexport type BadgeVariants = VariantProps<typeof badgeVariants>;\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { badgeVariants, BadgeVariants } from \"./badge.cva\";\n\n@Directive({\n selector: \"badge, Badge\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\",\n \"[attr.role]\": \"ariaLabel() ? 'img' : null\",\n \"[attr.aria-label]\": \"ariaLabel() ?? null\"\n }\n})\nexport class BadgeComponent {\n class = input<string>();\n variant = input<BadgeVariants[\"variant\"]>(\"number\");\n // Exposed as \"fill\" (not \"style\"): an Angular input named \"style\" collides with the native\n // HTML style attribute/property. Maps to the CVA's \"style\" variant (primary/secondary).\n fill = input<BadgeVariants[\"style\"]>(\"primary\");\n scheme = input<BadgeVariants[\"scheme\"]>(\"sage\");\n size = input<BadgeVariants[\"size\"]>(\"sm\");\n ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n variants = computed(() => cn(badgeVariants({ variant: this.variant(), style: this.fill(), scheme: this.scheme(), size: this.size(), class: this.class() })));\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// A Bullet is the dot half of a Badge: the same 12 schemes and the same two fills, with no content.\n// The background tokens below are deliberately kept identical to `badge.cva.ts` — a bullet and a\n// badge of the same scheme must read as the same color, side by side in a legend.\n//\n// Sizes come from Figma (md = 18px, sm = 12px, xs = 8px) and are expressed with tokens only:\n// `--row-height-xs` is the very 18px the Radio control is built on, and the two smaller dots fall\n// on the spacing scale.\nexport const bulletVariants = cva(\"inline-block shrink-0 rounded-(--radius-rounded)\", {\n variants: {\n // Same scheme names as Badge (Figma naming): sage/almond/pink/grey, semantics, then hues.\n scheme: {\n sage: \"\",\n almond: \"\",\n pink: \"\",\n grey: \"\",\n success: \"\",\n warning: \"\",\n info: \"\",\n error: \"\",\n cyan: \"\",\n yellow: \"\",\n cherry: \"\",\n indigo: \"\"\n },\n // Same meaning as Badge's `fill`: primary = solid fill, secondary = light tonal fill.\n fill: {\n primary: \"\",\n secondary: \"\"\n },\n size: {\n md: \"size-(--row-height-xs)\", // 18px\n sm: \"size-(--spacing-xs)\", // 12px\n xs: \"size-(--spacing-2xs)\" // 8px\n },\n /**\n * The \"live\" halo: a `::before` ring expanding out of the dot and fading, the way a status\n * light announces that something is happening right now.\n *\n * It is a pseudo-element rather than a second bullet so that turning it on stays a single\n * boolean, and `bg-inherit` makes the ring pick up the dot's own background — so it follows\n * `scheme` and `fill` with no color to repeat.\n *\n * Silenced under `prefers-reduced-motion`: a blinking indicator is precisely what a user who\n * asked for reduced motion asked to be spared (WCAG 2.3.3).\n */\n pulse: {\n true: [\n \"relative\",\n \"before:absolute before:inset-0 before:rounded-(--radius-rounded) before:bg-inherit before:content-['']\",\n \"before:animate-ping motion-reduce:before:animate-none\"\n ],\n false: \"\"\n }\n },\n compoundVariants: [\n // ── primary (solid fill) ──────────────────────────────────────────\n { fill: \"primary\", scheme: \"sage\", class: \"bg-(--bg-primary-base)\" },\n { fill: \"primary\", scheme: \"almond\", class: \"bg-(--bg-secondary-base-alt)\" },\n { fill: \"primary\", scheme: \"pink\", class: \"bg-(--bg-accent-base)\" },\n { fill: \"primary\", scheme: \"grey\", class: \"bg-(--bg-neutral-base-alt)\" },\n { fill: \"primary\", scheme: \"success\", class: \"bg-(--bg-success-base)\" },\n { fill: \"primary\", scheme: \"warning\", class: \"bg-(--bg-warning-base)\" },\n { fill: \"primary\", scheme: \"info\", class: \"bg-(--bg-info-base)\" },\n { fill: \"primary\", scheme: \"error\", class: \"bg-(--bg-error-base)\" },\n { fill: \"primary\", scheme: \"cyan\", class: \"bg-(--bg-cyan-base)\" },\n { fill: \"primary\", scheme: \"yellow\", class: \"bg-(--bg-yellow-base)\" },\n { fill: \"primary\", scheme: \"cherry\", class: \"bg-(--bg-cherry-base)\" },\n { fill: \"primary\", scheme: \"indigo\", class: \"bg-(--bg-indigo-base)\" },\n\n // ── secondary (light tonal fill) ──────────────────────────────────\n { fill: \"secondary\", scheme: \"sage\", class: \"bg-(--bg-primary-light)\" },\n { fill: \"secondary\", scheme: \"almond\", class: \"bg-(--bg-secondary-light)\" },\n { fill: \"secondary\", scheme: \"pink\", class: \"bg-(--bg-accent-base-alt)\" },\n { fill: \"secondary\", scheme: \"grey\", class: \"bg-(--bg-neutral-base)\" },\n { fill: \"secondary\", scheme: \"success\", class: \"bg-(--bg-success-base-alt)\" },\n { fill: \"secondary\", scheme: \"warning\", class: \"bg-(--bg-warning-base-alt)\" },\n { fill: \"secondary\", scheme: \"info\", class: \"bg-(--bg-info-base-alt)\" },\n { fill: \"secondary\", scheme: \"error\", class: \"bg-(--bg-error-base-alt)\" },\n { fill: \"secondary\", scheme: \"cyan\", class: \"bg-(--bg-cyan-base-alt)\" },\n { fill: \"secondary\", scheme: \"yellow\", class: \"bg-(--bg-yellow-base-alt)\" },\n { fill: \"secondary\", scheme: \"cherry\", class: \"bg-(--bg-cherry-base-alt)\" },\n { fill: \"secondary\", scheme: \"indigo\", class: \"bg-(--bg-indigo-base-alt)\" }\n ],\n defaultVariants: {\n scheme: \"sage\",\n fill: \"primary\",\n size: \"md\",\n pulse: false\n }\n});\n\nexport type BulletVariants = VariantProps<typeof bulletVariants>;\n","import { booleanAttribute, computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { bulletVariants, type BulletVariants } from \"./bullet.cva\";\n\n/**\n * A colored dot: status, category or priority, next to a label.\n *\n * A bullet carries no text, so on its own it says nothing to assistive technology. Two cases:\n * - it decorates a label that already names the status → leave it as is, it is decoration;\n * - it is the *only* thing carrying the meaning → pass `aria-label`, which turns it into an\n * `img` with a name.\n *\n * @example\n * ```html\n * <bullet scheme=\"success\" size=\"sm\" />\n * <bullet scheme=\"success\" size=\"sm\" pulse />\n * <bullet scheme=\"error\" fill=\"secondary\" aria-label=\"Indexing failed\" />\n * ```\n */\n@Directive({\n selector: \"bullet, Bullet\",\n host: {\n \"[class]\": \"variants()\",\n \"[attr.role]\": \"ariaLabel() ? 'img' : null\",\n \"[attr.aria-label]\": \"ariaLabel() ?? null\"\n }\n})\nexport class BulletComponent {\n readonly class = input<string>();\n readonly scheme = input<BulletVariants[\"scheme\"]>(\"sage\");\n // Same naming as Badge: `fill` is the solid/tonal axis (`primary`/`secondary`).\n readonly fill = input<BulletVariants[\"fill\"]>(\"primary\");\n readonly size = input<BulletVariants[\"size\"]>(\"md\");\n /**\n * Wraps the dot in an expanding, fading halo — the \"live\" status light. Off by default; it\n * animates nothing under `prefers-reduced-motion`.\n */\n readonly pulse = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n readonly variants = computed(() =>\n cn(bulletVariants({ scheme: this.scheme(), fill: this.fill(), size: this.size(), pulse: this.pulse(), class: this.class() }))\n );\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Touche de clavier.\n *\n * Porté depuis `@sinequa/ui` (`atomic-ui/ui/button/kbd.ts`), dont les classes venaient du thème\n * shadcn (`bg-muted`, `text-muted-foreground`). Ces utilitaires n'émettent aucun CSS dans une\n * application qui ne déclare pas ces couleurs — le cas de Mint, où `--color-muted` n'existe que dans\n * le thème de l'assistant : les touches y étaient transparentes. Tout passe donc par les tokens\n * galactik.\n *\n * `pointer-events-none` : la touche est un libellé, pas une cible. `select-none` : la sélectionner\n * n'aurait pas de sens et gêne le copier d'un texte l'entourant.\n */\nexport const kbdVariants = cva(\n [\n \"pointer-events-none inline-flex w-fit items-center justify-center gap-(--spacing-4xs) select-none\",\n // `--font-neutral-base` et non `--font-neutral-muted` : à 12 px sur `--bg-neutral-base`, le token\n // « muted » ne donnait que 4,47:1 en thème clair, sous les 4,5:1 requis (grey-600 sur grey-100).\n // Le token de base tient dans les deux thèmes — grey-800 en clair, grey-100 en sombre — sans\n // tomber dans le piège des paires qui s'éclaircissent toutes les deux.\n \"border border-solid border-(--stroke-neutral-disabled) bg-(--bg-neutral-base) text-(--font-neutral-base)\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] font-medium\",\n // Une icône projetée sans taille explicite s'aligne sur la touche\n \"[&_svg:not([class*='size-'])]:size-3\"\n ],\n {\n variants: {\n size: {\n // `min-w` égal à la hauteur : une touche d'un seul caractère reste carrée\n xs: \"h-4 min-w-4 rounded-(--radius-xs) px-(--spacing-4xs) text-(length:--size-xs) leading-(--line-height-xs)\",\n sm: \"h-5 min-w-5 rounded-(--radius-xs) px-(--spacing-4xs) text-(length:--size-sm) leading-(--line-height-sm)\",\n md: \"h-6 min-w-6 rounded-(--radius-sm) px-(--spacing-3xs) text-(length:--size-base) leading-(--line-height-base)\"\n }\n },\n defaultVariants: {\n size: \"sm\"\n }\n }\n);\n\nexport type KbdVariants = VariantProps<typeof kbdVariants>;\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { kbdVariants, KbdVariants } from \"./kbd.cva\";\n\n/**\n * Une touche de clavier.\n *\n * @example\n * ```html\n * <kbd>Ctrl</kbd>\n * ```\n */\n@Directive({\n selector: \"kbd, Kbd\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class KbdComponent {\n class = input<string>();\n size = input<KbdVariants[\"size\"]>(\"sm\");\n\n variants = computed(() => cn(kbdVariants({ size: this.size(), class: this.class() })));\n}\n\n/**\n * Un groupe de touches présentées comme une seule combinaison.\n *\n * Le groupe porte le nom accessible de la combinaison entière et les touches sont masquées aux\n * technologies d'assistance : sans cela un lecteur d'écran énonce « Control », « plus », « Shift »\n * comme trois éléments distincts, séparateurs compris.\n *\n * L'hôte porte `role=\"group\"`, ce qui est ce qui **autorise** l'`aria-label` : sur un élément sans\n * rôle, ARIA interdit l'attribut et la combinaison n'est plus annoncée du tout.\n *\n * @example\n * ```html\n * <KbdGroup aria-label=\"Control+Shift+F\">\n * <kbd aria-hidden=\"true\">Ctrl</kbd>\n * <span aria-hidden=\"true\">+</span>\n * <kbd aria-hidden=\"true\">Shift</kbd>\n * <span aria-hidden=\"true\">+</span>\n * <kbd aria-hidden=\"true\">F</kbd>\n * </KbdGroup>\n * ```\n */\n@Directive({\n selector: \"kbd-group, kbdgroup, KbdGroup\",\n standalone: true,\n host: {\n // `role=\"group\"` est indispensable, pas décoratif : sans rôle, ARIA **interdit** `aria-label` sur\n // l'élément — l'attribut y est ignoré, et comme les touches sont `aria-hidden`, la combinaison\n // n'est plus annoncée du tout. Constaté par axe (`aria-prohibited-attr`) sur le dialogue des\n // raccourcis, où les 8 groupes étaient muets.\n role: \"group\",\n class: \"inline-flex items-center gap-(--spacing-4xs)\"\n }\n})\nexport class KbdGroupComponent {}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// Slot classes\nexport const AVATAR_INITIALS_CLASS = \"avatar-initials\";\nexport const AVATAR_IMAGE_CLASS = \"avatar-image\";\nexport const AVATAR_ICON_CLASS = \"avatar-icon\";\n\n// Initials font-size per avatar size (for inline style usage in React).\nexport const AVATAR_INITIALS_SIZE = {\n large: \"var(--size-sm)\",\n medium: \"var(--size-xs)\",\n small: \"var(--size-xs)\",\n xsmall: \"var(--size-xs)\"\n};\n\n// Icon size mapping for <Icon size={…} /> children.\nexport const AVATAR_ICON_SIZE = {\n large: \"md\", // 16px\n medium: \"sm\", // 14px\n small: \"xs\", // 12px\n xsmall: \"xs\" // 12px\n} as const;\n\n/**\n * avatarVariants — 1:1 Figma parity for Avatar (initials) + Avatar (picture).\n *\n * content: \"initials\" → Avatar (initials) set (nodeId 196:3373)\n * content: \"picture\" → Avatar (picture) set (nodeId 196:3405)\n *\n * scheme × style compoundVariants drive color via semantic CSS-var tokens.\n * Sizes use --row-height-* tokens:\n * xsmall = 18px (--row-height-xs, picture-only)\n * small = 24px (--row-height-sm)\n * medium = 36px (--row-height-md)\n * large = 44px (--row-height-lg)\n */\nexport const avatarVariants = cva(\n [\n \"inline-flex shrink-0 items-center justify-center overflow-hidden\",\n \"rounded-(--radius-rounded)\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] select-none\",\n // Initials slot — font weight + leading applied on the inner span\n \"[&_.avatar-initials]:leading-none [&_.avatar-initials]:font-(--weight-semibold)\"\n ],\n {\n variants: {\n /** Distinguishes the two Figma sets; also gates xsmall (picture-only). */\n content: {\n initials: \"avatar-content-initials\",\n picture: \"avatar-content-picture\"\n },\n /** primary = filled/strong; secondary = subtle/tinted. */\n style: {\n primary: \"\",\n secondary: \"\"\n },\n /**\n * 12 Figma scheme values for Avatar (initials).\n * Avatar (picture) does not expose scheme; leave at default.\n */\n scheme: {\n sage: \"\",\n almond: \"\",\n grey: \"\",\n indigo: \"\",\n cyan: \"\",\n yellow: \"\",\n cherry: \"\",\n info: \"\",\n error: \"\",\n pink: \"\",\n success: \"\",\n warning: \"\"\n },\n /**\n * xsmall is picture-only (18 px); initials would be illegible at that size.\n */\n size: {\n xsmall: \"h-(--row-height-xs) w-(--row-height-xs)\",\n small: \"h-(--row-height-sm) w-(--row-height-sm)\",\n medium: \"h-(--row-height-md) w-(--row-height-md)\",\n large: \"h-(--row-height-lg) w-(--row-height-lg)\"\n }\n },\n compoundVariants: [\n // ── primary (dark/saturated fill, white text) ──────────────────────────\n { style: \"primary\", scheme: \"sage\", class: \"bg-(--bg-primary-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"almond\", class: \"bg-(--bg-secondary-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"pink\", class: \"bg-(--bg-accent-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"grey\", class: \"bg-(--bg-neutral-base-alt) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"success\", class: \"bg-(--bg-success-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"warning\", class: \"bg-(--bg-warning-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"info\", class: \"bg-(--bg-info-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"error\", class: \"bg-(--bg-error-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"cherry\", class: \"bg-(--bg-cherry-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"indigo\", class: \"bg-(--bg-indigo-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"yellow\", class: \"bg-(--bg-yellow-base) text-(--font-neutral-white)\" },\n { style: \"primary\", scheme: \"cyan\", class: \"bg-(--bg-cyan-base) text-(--font-neutral-white)\" },\n\n // ── secondary (light tonal bg, dark semantic text) ─────────────────────\n { style: \"secondary\", scheme: \"sage\", class: \"bg-(--bg-primary-light) text-(--font-primary-base)\" },\n { style: \"secondary\", scheme: \"almond\", class: \"bg-(--bg-secondary-light) text-(--font-secondary-base)\" },\n { style: \"secondary\", scheme: \"pink\", class: \"bg-(--bg-accent-base-alt) text-(--font-accent-base)\" },\n { style: \"secondary\", scheme: \"grey\", class: \"bg-(--bg-neutral-base) text-(--font-neutral-base)\" },\n { style: \"secondary\", scheme: \"success\", class: \"bg-(--bg-success-base-alt) text-(--font-success-base)\" },\n { style: \"secondary\", scheme: \"warning\", class: \"bg-(--bg-warning-base-alt) text-(--font-warning-base)\" },\n { style: \"secondary\", scheme: \"info\", class: \"bg-(--bg-info-base-alt) text-(--font-info-base)\" },\n { style: \"secondary\", scheme: \"error\", class: \"bg-(--bg-error-base-alt) text-(--font-error-base)\" },\n { style: \"secondary\", scheme: \"cherry\", class: \"bg-(--bg-cherry-base-alt) text-(--font-cherry-base)\" },\n { style: \"secondary\", scheme: \"indigo\", class: \"bg-(--bg-indigo-base-alt) text-(--font-indigo-base)\" },\n { style: \"secondary\", scheme: \"yellow\", class: \"bg-(--bg-yellow-base-alt) text-(--font-yellow-base)\" },\n { style: \"secondary\", scheme: \"cyan\", class: \"bg-(--bg-cyan-base-alt) text-(--font-cyan-base)\" }\n ],\n defaultVariants: {\n content: \"initials\",\n style: \"primary\",\n scheme: \"sage\",\n size: \"large\"\n }\n }\n);\n\nexport type AvatarVariants = VariantProps<typeof avatarVariants>;\n","import { Component, computed, inject, InjectionToken, input, signal } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { avatarVariants, AvatarVariants } from \"./avatar.cva\";\nimport type { AvatarComponent } from \"./avatar\";\n\n/**\n * Référence de l'`<avatar>` parent, exposée par DI à `<AvatarFallback>` pour hériter\n * size/fill/scheme par défaut. Déclaré ici (pas dans avatar.ts) et référencé en `import type`\n * côté avatar.ts pour éviter toute dépendance circulaire au runtime : avatar.ts importe déjà\n * `AvatarFallbackComponent` depuis ce fichier (pour son `contentChild`).\n */\nexport const AVATAR_REF = new InjectionToken<AvatarComponent>(\"AVATAR_REF\");\n\n@Component({\n selector: \"avatar-fallback, avatarfallback, AvatarFallback\",\n standalone: true,\n template: `\n @if (canrender()) {\n <span [class]=\"variants()\"><ng-content /></span>\n }\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `\n ]\n})\nexport class AvatarFallbackComponent {\n canrender = signal(false);\n class = input<string>();\n\n /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `\"large\"` (aligné sur le cva). */\n size = input<AvatarVariants[\"size\"]>();\n /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `\"primary\"`. */\n fill = input<AvatarVariants[\"style\"]>();\n /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `\"sage\"`. */\n scheme = input<AvatarVariants[\"scheme\"]>();\n\n /** Conteneur parent, pour hériter size/fill/scheme par défaut. */\n private readonly avatar = inject(AVATAR_REF, { optional: true });\n\n protected readonly resolvedSize = computed<NonNullable<AvatarVariants[\"size\"]>>(() => this.size() ?? this.avatar?.size() ?? \"large\");\n protected readonly resolvedFill = computed<NonNullable<AvatarVariants[\"style\"]>>(() => this.fill() ?? this.avatar?.fill() ?? \"primary\");\n protected readonly resolvedScheme = computed<NonNullable<AvatarVariants[\"scheme\"]>>(() => this.scheme() ?? this.avatar?.scheme() ?? \"sage\");\n\n variants = computed(() =>\n cn(\n avatarVariants({\n size: this.resolvedSize(),\n style: this.resolvedFill(),\n scheme: this.resolvedScheme(),\n class: this.class()\n })\n )\n );\n}\n","import { Component, computed, effect, input, signal } from \"@angular/core\";\nimport { cn } from \"cn\";\n\n@Component({\n selector: \"avatar-image, AvatarImage, avatarimage\",\n standalone: true,\n template: `\n @if (status() === 'loaded') {\n <img [src]=\"src()\" [width]=\"width()\" [height]=\"height()\" [alt]=\"alt()\" [class]=\"variants()\" />\n }\n `\n})\nexport class AvatarImageComponent {\n class = input<string>();\n src = input.required<string>();\n alt = input<string>();\n width = input<string>();\n height = input<string>();\n referrerPolicy = input<string>(\"\");\n crossOrigin = input<string>(\"\");\n\n variants = computed(() => cn(\"aspect-square size-full\", this.class()));\n\n status = signal<\"loading\" | \"loaded\" | \"error\">(\"loading\");\n\n constructor() {\n effect(() => {\n const image = new window.Image();\n\n image.onload = () => {\n this.status.set(\"loaded\");\n };\n image.onerror = () => {\n console.log(\"Image failed to load\", this.src());\n this.status.set(\"error\");\n };\n if (this.referrerPolicy()) {\n image.referrerPolicy = this.referrerPolicy();\n }\n if (this.crossOrigin()) {\n image.crossOrigin = this.crossOrigin();\n }\n image.src = this.src();\n });\n }\n}\n","import { Component, computed, contentChild, effect, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { AVATAR_REF, AvatarFallbackComponent } from \"./avatar-fallback\";\nimport { AvatarImageComponent } from \"./avatar-image\";\nimport { avatarVariants, AvatarVariants } from \"./avatar.cva\";\n\n@Component({\n selector: \"avatar, Avatar\",\n standalone: true,\n template: `\n <ng-content select=\"AvatarImage\" />\n <ng-content select=\"AvatarFallback\" />\n `,\n host: {\n \"[class]\": \"variants()\"\n },\n providers: [{ provide: AVATAR_REF, useExisting: AvatarComponent }]\n})\nexport class AvatarComponent {\n avatarImage = contentChild(AvatarImageComponent);\n avatarFallback = contentChild(AvatarFallbackComponent);\n\n class = input<string>();\n size = input<AvatarVariants[\"size\"]>(\"large\");\n // Exposed as \"fill\" (not \"style\"): an Angular input named \"style\" collides with the native\n // HTML style attribute/property. Maps to the CVA's \"style\" variant (primary/secondary).\n fill = input<AvatarVariants[\"style\"]>(\"primary\");\n scheme = input<AvatarVariants[\"scheme\"]>(\"sage\");\n\n variants = computed(() => cn(avatarVariants({ size: this.size(), style: this.fill(), scheme: this.scheme(), class: this.class() })));\n\n constructor() {\n effect(() => {\n if (this.avatarImage()?.status() === \"loaded\") {\n this.avatarFallback()?.canrender.set(false);\n } else {\n this.avatarFallback()?.canrender.set(true);\n }\n });\n }\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nexport const LINK_LABEL_CLASS = \"link-label\";\n// <a> link — uses native pseudo-classes for state.\n// State driven by:\n// • :hover, :active, :focus-visible — native\n// • visited prop → adds bottom border (CSS source uses .link-visited)\n// • active prop → current-page indicator (background highlight)\n// • aria-disabled → blocks interactions + muted look\n// Token mapping mirrors app/components/css/link.css verbatim.\nexport const linkVariants = cva(\n [\n \"box-border inline-flex items-center gap-(--spacing-3xs) p-0\",\n \"rounded-(--radius-xs) border-0 bg-transparent\",\n \"text-(--font-secondary-base-alt)\",\n \"font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] font-normal no-underline\",\n \"cursor-pointer whitespace-nowrap select-none\",\n \"transition-[background,color,font-weight,box-shadow] duration-100 ease-[ease] motion-reduce:transition-none\",\n \"focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-(--stroke-focus)\",\n // Hover (not disabled / not aria-current=page)\n \"not-aria-disabled:not-aria-[current=page]:hover:bg-(--bg-secondary-lighter)\",\n \"not-aria-disabled:not-aria-[current=page]:hover:text-(--font-secondary-hovered)\",\n \"not-aria-disabled:not-aria-[current=page]:hover:font-(--weight-semibold)\",\n // Active (mousedown)\n \"not-aria-disabled:not-aria-[current=page]:active:bg-(--bg-secondary-light)\",\n \"not-aria-disabled:not-aria-[current=page]:active:text-(--font-secondary-pressed)\",\n \"not-aria-disabled:not-aria-[current=page]:active:font-(--weight-semibold)\",\n // Disabled\n \"aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:bg-(--bg-neutral-disabled) aria-disabled:text-(--font-neutral-muted) aria-disabled:shadow-none\",\n // Current page — solid almond-active background\n \"aria-[current=page]:bg-(--bg-secondary-active) aria-[current=page]:text-(--font-neutral-black)\"\n ],\n {\n variants: {\n // sm/md aliases preserved.\n size: {\n sm: \"text-(length:--size-sm) leading-4 [&_.link-icon-left]:size-3 [&_.link-icon-left_svg]:size-3 [&_.link-icon-right]:size-3 [&_.link-icon-right_svg]:size-3\",\n md: \"text-(length:--size-base) leading-5 [&_.link-icon-left]:size-3.5 [&_.link-icon-left_svg]:size-3.5 [&_.link-icon-right]:size-3.5 [&_.link-icon-right_svg]:size-3.5\",\n small:\n \"text-(length:--size-sm) leading-4 [&_.link-icon-left]:size-3 [&_.link-icon-left_svg]:size-3 [&_.link-icon-right]:size-3 [&_.link-icon-right_svg]:size-3\",\n medium:\n \"text-(length:--size-base) leading-5 [&_.link-icon-left]:size-3.5 [&_.link-icon-left_svg]:size-3.5 [&_.link-icon-right]:size-3.5 [&_.link-icon-right_svg]:size-3.5\"\n },\n // Visited state — adds bottom border + squares the bottom corners.\n visited: {\n true: \"rounded-br-none rounded-bl-none border-b-2 border-b-(--stroke-secondary-base) not-aria-disabled:not-aria-[current=page]:hover:border-b-(--font-secondary-hovered) not-aria-disabled:not-aria-[current=page]:active:border-b-(--font-secondary-pressed) aria-[current=page]:border-b-(--stroke-neutral-black)\",\n false: \"\"\n },\n // Discriminants — consumer renders icons / new-window indicator.\n icon: { true: \"\", false: \"\" },\n openWindow: { true: \"\", false: \"\" }\n },\n defaultVariants: {\n size: \"sm\",\n visited: false,\n icon: false,\n openWindow: false\n }\n }\n);\n// Icon slot — sizing applied via parent link size selectors. position is purely for ordering.\nexport const linkIconVariants = cva(\"inline-flex shrink-0 items-center justify-center\", {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n small: \"\",\n medium: \"\"\n },\n position: {\n left: \"link-icon-left order-first [&_svg]:order-first\",\n right: \"link-icon-right order-last [&_svg]:order-last\"\n }\n },\n defaultVariants: {\n size: \"sm\",\n position: \"left\"\n }\n});\n\nexport type LinkVariants = VariantProps<typeof linkVariants>;\nexport type LinkIconVariants = VariantProps<typeof linkIconVariants>;\n","import { booleanAttribute, Component, computed, Directive, input } from \"@angular/core\";\nimport { ArrowUpRightFromSquareIcon } from \"../../icons/arrow-up-right-from-square.icon\";\nimport { cn } from \"cn\";\n\nimport { linkVariants, linkIconVariants, type LinkVariants } from \"./link.cva\";\n\n/** Left icon slot — tags its host with the `link-icon-left` class and pins it to the start. */\n@Directive({\n selector: \"[link-icon-left], [linkIconLeft]\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class LinkIconLeftDirective {\n class = input<string>();\n variants = computed(() => cn(linkIconVariants({ position: \"left\" }), this.class()));\n}\n\n/** Right icon slot — tags its host with the `link-icon-right` class and pins it to the end. */\n@Directive({\n selector: \"[link-icon-right], [linkIconRight]\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class LinkIconRightDirective {\n class = input<string>();\n variants = computed(() => cn(linkIconVariants({ position: \"right\" }), this.class()));\n}\n\n/**\n * Galactik Design System — Link\n *\n * Styles native anchors AND a dedicated `<Link>` element, keeping the host\n * semantics intact (routerLink, href, target, …).\n *\n * The current-page indicator is driven by the native `aria-current=\"page\"`\n * attribute, matched directly by the CVA (`aria-[current=page]:` selector)\n * regardless of how it got there — set it statically, bind it yourself, or\n * let `routerLinkActive` + `[ariaCurrentWhenActive]=\"'page'\"` manage it. The\n * component never touches `aria-current` itself so it can't fight with the\n * router for ownership of that attribute.\n *\n * `openWindow` fully owns `target`/`rel` — the same way `disabled` owns\n * `aria-disabled`/`tabindex` — and appends the canonical external-link icon\n * for you, together with the `openWindowLabel` text that announces it. Don't\n * set `target`/`rel` manually on a link that binds `openWindow`, and don't use\n * `openWindow` if a custom `rel` is needed. For any other icon, tag it\n * yourself with `link-icon-left` / `link-icon-right`.\n *\n * Usage:\n * <a link href=\"/pricing\">Pricing</a>\n * <a link [visited]=\"true\" [routerLink]=\"['/docs']\">Docs</a>\n * <a link disabled>Unavailable</a>\n * <a link [openWindow]=\"true\" href=\"/docs\">Read the docs</a>\n * <a link [routerLink]=\"['/home']\" routerLinkActive [ariaCurrentWhenActive]=\"'page'\">Home</a>\n */\n@Component({\n selector: \"a[link], Link\",\n standalone: true,\n imports: [ArrowUpRightFromSquareIcon, LinkIconRightDirective],\n host: {\n \"[class]\": \"variants()\",\n \"[attr.aria-disabled]\": \"disabled() ? 'true' : null\",\n \"[attr.tabindex]\": \"disabled() ? -1 : null\",\n \"[attr.target]\": \"openWindow() ? '_blank' : null\",\n \"[attr.rel]\": \"openWindow() ? 'noopener noreferrer' : null\"\n },\n template: `\n <ng-content />\n @if (openWindow()) {\n <!-- The separating space belongs to the text node, not to the template: Angular drops\n whitespace-only text nodes, and the accessible name is a concatenation — without it the\n label and the announcement come out as one word, \"Docs(opens in a new window)\". -->\n <span class=\"sr-only\">{{ \" \" + openWindowLabel() }}</span>\n <arrow-up-right-from-square-icon linkIconRight />\n }\n `\n})\nexport class LinkComponent {\n class = input<string>();\n size = input<LinkVariants[\"size\"]>(\"sm\");\n visited = input<LinkVariants[\"visited\"]>(false);\n icon = input<LinkVariants[\"icon\"]>(false);\n openWindow = input<LinkVariants[\"openWindow\"]>(false);\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Announced after the label when `openWindow` is set, and appended to the accessible name.\n *\n * The icon this component adds is the only sign a link leaves the page, and an icon says nothing\n * to a screen reader — the accessible name has to carry it (RGAA 6.1 and 13.2, WCAG 3.2.5). It is\n * appended AFTER the projected content on purpose: the visible label stays the beginning of the\n * accessible name, which is what WCAG 2.5.3 asks of a control the user can address by voice.\n *\n * English default rather than silence, this library having no translation layer of its own — pass\n * the app's own string when there is one.\n */\n openWindowLabel = input(\"(opens in a new window)\");\n\n variants = computed(() =>\n cn(\n linkVariants({\n size: this.size(),\n visited: this.visited(),\n icon: this.icon() || this.openWindow(),\n openWindow: this.openWindow(),\n class: this.class()\n })\n )\n );\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// Slot classes\nexport const TEXTAREA_CONTROL_CLASS = \"textarea-control\";\nexport const TEXTAREA_COUNTER_CLASS = \"textarea-counter\";\n\n/**\n * Line height of the control, kept in sync with the `leading-[1.4]` of the control reset below.\n * `TextareaComponent` multiplies it to turn `minRows`/`maxRows` into `em` heights — the literal\n * cannot be interpolated into the class string, since Tailwind only sees static text.\n */\nexport const TEXTAREA_LINE_HEIGHT = 1.4;\n\n// Wrap = vertical flex containing the native <textarea> and an optional counter.\n// This is the multi-line sibling of `inputWrapVariants` and mirrors its state model exactly:\n// nothing is duplicated in JavaScript, everything is derived from the control via has-[]:\n// • active → has-[:focus] (visual: primary outline ring; any focus modality)\n// • disabled → has-[:disabled]\n// • read-only → has-[[readonly]]\n// Two structural differences with the input:\n// • column flex, so the counter sits under the control (`self-end`) rather than beside it;\n// • no fixed height per size — the box is sized by `rows`, by the resize handle, or by\n// `field-sizing` (see the `resize` variant), so `size` only drives padding and typography.\n// `w-full` is deliberate: a multi-line field is a full-width block in nearly every case, and\n// baking it in is what lets call sites carry no class at all. Override via `class` if needed.\nexport const textareaWrapVariants = cva(\n [\n \"box-border flex w-full flex-col gap-(--spacing-3xs)\",\n \"border border-solid bg-(--bg-neutral-white)\",\n \"transition-[border-color,background-color,outline-color] duration-150 ease-[ease] motion-reduce:transition-none\",\n // Hover (default scheme, not disabled/readonly/focused)\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-primary-hovered)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-primary-lighter)\",\n // Active state (any :focus) — primary outline ring, background reset to white\n \"has-focus:not-has-disabled:not-has-[[readonly]]:bg-(--bg-neutral-white)\",\n \"has-focus:not-has-disabled:not-has-[[readonly]]:outline-2 has-focus:not-has-disabled:not-has-[[readonly]]:outline-offset-0 has-focus:not-has-disabled:not-has-[[readonly]]:outline-(--bg-primary-hovered)\",\n // Disabled\n \"has-disabled:cursor-not-allowed has-disabled:border-(--stroke-neutral-disabled) has-disabled:bg-(--bg-neutral-disabled)\",\n \"has-disabled:[&_.textarea-control]:text-(--font-neutral-muted)\",\n \"has-disabled:[&_.textarea-control]:cursor-not-allowed\",\n \"has-disabled:[&_.textarea-control]:resize-none\",\n // Read-only\n \"has-[[readonly]]:cursor-default has-[[readonly]]:border-transparent has-[[readonly]]:bg-transparent\",\n \"has-[[readonly]]:[&_.textarea-control]:cursor-default has-[[readonly]]:[&_.textarea-control]:text-(--font-primary-muted)\",\n // Control reset\n \"[&_.textarea-control]:w-full [&_.textarea-control]:min-w-0 [&_.textarea-control]:border-0 [&_.textarea-control]:bg-transparent\",\n \"[&_.textarea-control]:p-0 [&_.textarea-control]:font-[family-name:var(--family-base,'Hanken_Grotesk'),sans-serif] [&_.textarea-control]:leading-[1.4] [&_.textarea-control]:text-(--font-primary-base)\",\n \"[&_.textarea-control]:focus:outline-none [&_.textarea-control]:focus-visible:outline-none\",\n \"[&_.textarea-control]:placeholder:text-(--font-primary-muted)\",\n // Height bounds, fed by the wrapper's `minRows`/`maxRows` as custom properties. They are\n // declared here (rather than as variants) because the row count is a number, not an enum.\n // The `em` in the substituted value resolves against the control's own font size, so the\n // bounds follow the `size` variant. Min/max are the only sizing that `field-sizing` honours —\n // a fixed `height` would cancel it outright.\n \"[&_.textarea-control]:min-h-(--gl-textarea-min-h,auto)\",\n \"[&_.textarea-control]:max-h-(--gl-textarea-max-h,none)\",\n // Counter slot — under the control, trailing edge\n \"[&_.textarea-counter]:self-end\"\n ],\n {\n variants: {\n // No height here: `size` only drives padding, radius and type scale. Vertical padding is\n // calibrated on the input's usable height (md = 36px for 14px x 1.4 ~ 20px of text).\n size: {\n lg: \"rounded-(--radius-sm) px-(--spacing-xl) py-(--spacing-2xs) [&_.textarea-control]:text-(length:--size-base)\",\n md: \"rounded-(--radius-sm) px-(--spacing-md) py-(--spacing-2xs) [&_.textarea-control]:text-(length:--size-base)\",\n sm: \"rounded-(--radius-xs) px-(--spacing-xs) py-(--spacing-3xs) [&_.textarea-control]:text-(length:--size-sm)\"\n },\n scheme: {\n // RGAA 3.3 : la bordure est la seule limite visible du champ, 1.91:1 en clair et 2.55:1 en\n // sombre avec --stroke-primary-light, contre 3:1 demandés. --stroke-primary-muted donne 6.52:1\n // et 3.71:1.\n default: \"border-(--stroke-primary-muted)\",\n success: [\n \"border-(--stroke-success-base) bg-(--bg-neutral-white)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-success-base-alt)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-success-base)\",\n \"has-focus:not-has-disabled:not-has-[[readonly]]:outline-(--stroke-success-base)\",\n \"[&_.textarea-control]:text-(--font-success-base)\"\n ],\n error: [\n \"border-(--stroke-error-base) bg-(--bg-neutral-white)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-error-base-alt)\",\n \"hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-error-base)\",\n \"has-focus:not-has-disabled:not-has-[[readonly]]:outline-(--stroke-error-base)\",\n \"[&_.textarea-control]:text-(--font-error-base)\"\n ]\n },\n // How the box gets its height.\n // vertical — native drag handle (the browser default), height seeded by `rows`\n // none — locked to `rows`\n // auto — grows with the content via `field-sizing: content`\n //\n // `auto` is a progressive enhancement, and the guard matters: Firefox does not implement\n // `field-sizing` at all. Applying `resize-none` unconditionally there would leave a box\n // that neither grows nor can be dragged — worse than no auto-sizing. So the handle is only\n // removed where the growth actually happens, and Firefox keeps a draggable field.\n //\n // Note that `rows`/`cols` are ignored once `field-sizing: content` applies: an `auto` field\n // therefore starts one line tall whatever `rows` says, and grows from there. Use the\n // wrapper's `minRows`/`maxRows` to bound it — they are the only sizing API that survives\n // in this mode, and they keep working as a plain fallback where `field-sizing` does not.\n resize: {\n vertical: \"[&_.textarea-control]:resize-y\",\n none: \"[&_.textarea-control]:resize-none\",\n auto: [\n \"[&_.textarea-control]:resize-y\",\n \"[&_.textarea-control]:supports-[field-sizing:content]:field-sizing-content\",\n \"[&_.textarea-control]:supports-[field-sizing:content]:resize-none\"\n ]\n },\n // Visual variant: filled tint background, no border (kept transparent border).\n filled: {\n true: \"border-transparent bg-(--bg-primary-lighter) hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:border-(--stroke-primary-hovered) hover:not-has-disabled:not-has-[[readonly]]:not-has-focus:bg-(--bg-primary-light)\",\n false: \"\"\n }\n },\n compoundVariants: [\n // Filled + success/error keeps coloured background, no border\n { filled: true, scheme: \"success\", class: \"border-transparent bg-(--bg-success-base-alt)\" },\n { filled: true, scheme: \"error\", class: \"border-transparent bg-(--bg-error-base-alt)\" }\n ],\n defaultVariants: {\n size: \"md\",\n scheme: \"default\",\n resize: \"vertical\",\n filled: false\n }\n }\n);\n\nexport type TextareaWrapVariants = VariantProps<typeof textareaWrapVariants>;\n","import { booleanAttribute, computed, Directive, input, numberAttribute } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { inputCounterVariants, InputCounterVariants } from \"../input/input.cva\";\nimport { TEXTAREA_CONTROL_CLASS, TEXTAREA_COUNTER_CLASS, TEXTAREA_LINE_HEIGHT, textareaWrapVariants, TextareaWrapVariants } from \"./textarea.cva\";\n\n/**\n * Textarea wrapper — the vertical flex that holds the native control and an\n * optional counter. Like `InputComponent`, it drives the focus / disabled /\n * read-only visuals from the inner `<textarea textarea-control>` via `has-[]`\n * selectors, so it must *wrap* the control rather than sit on it.\n *\n * Expected markup (slot classes are applied by the helper directives below):\n *\n * <textarea-group size=\"md\" scheme=\"default\" resize=\"auto\" [maxRows]=\"3\">\n * <textarea textarea-control rows=\"4\" placeholder=\"Your message…\"></textarea>\n * <textarea-counter>12 / 300</textarea-counter>\n * </textarea-group>\n */\n@Directive({\n selector: \"textarea-group, textareagroup, TextareaGroup\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\",\n \"[style.--gl-textarea-min-h]\": \"rowsToHeight(minRows())\",\n \"[style.--gl-textarea-max-h]\": \"rowsToHeight(maxRows())\"\n }\n})\nexport class TextareaComponent {\n class = input<string>();\n size = input<TextareaWrapVariants[\"size\"]>(\"md\");\n scheme = input<TextareaWrapVariants[\"scheme\"]>(\"default\");\n /** How the box gets its height: native handle, locked, or content-driven. */\n resize = input<TextareaWrapVariants[\"resize\"]>(\"vertical\");\n filled = input(false, { transform: booleanAttribute });\n\n /**\n * Height floor and ceiling, in lines of text.\n *\n * These exist because the native `rows` attribute is ignored as soon as `resize=\"auto\"` takes\n * effect (`field-sizing: content` overrides it), leaving no attribute-level way to say \"start at\n * one line, never exceed three\". They are applied as `min-height` / `max-height`, the only\n * sizing `field-sizing` honours, so they work in every resize mode and degrade cleanly where\n * `field-sizing` is unsupported. Past `maxRows`, the control scrolls.\n */\n minRows = input<number | undefined, unknown>(undefined, { transform: numberAttribute });\n maxRows = input<number | undefined, unknown>(undefined, { transform: numberAttribute });\n\n /** Row count → an `em` height, resolved against the control's own font size. */\n protected rowsToHeight(rows: number | undefined): string | null {\n return Number.isFinite(rows) ? `calc(${rows} * ${TEXTAREA_LINE_HEIGHT}em)` : null;\n }\n\n variants = computed(() =>\n cn(\n textareaWrapVariants({\n size: this.size(),\n scheme: this.scheme(),\n resize: this.resize(),\n filled: this.filled(),\n class: this.class()\n })\n )\n );\n}\n\n/**\n * Native control slot — tags the `<textarea>` with the `textarea-control` class\n * the wrapper styles via `[&_.textarea-control]`. Marker attribute (not the bare\n * `textarea` element) to avoid clashing with other textarea directives.\n */\n@Directive({\n selector: \"textarea[textarea-control], textarea[textareaControl]\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class TextareaControlDirective {\n class = input<string>();\n variants = computed(() => cn(TEXTAREA_CONTROL_CLASS, this.class()));\n}\n\n/**\n * Character counter (e.g. \"12 / 300\"), placed under the control and aligned to\n * its trailing edge. The count itself is not computed — project the text you\n * want, as with `InputCounterComponent`.\n *\n * Shares `inputCounterVariants` with the input: the counter typography is the\n * same object in the design system, only the slot class differs.\n */\n@Directive({\n selector: \"textarea-counter, textareacounter, TextareaCounter\",\n standalone: true,\n host: {\n \"[class]\": \"variants()\"\n }\n})\nexport class TextareaCounterComponent {\n class = input<string>();\n size = input<InputCounterVariants[\"size\"]>(\"md\");\n scheme = input<InputCounterVariants[\"scheme\"]>(\"default\");\n\n variants = computed(() =>\n cn(\n TEXTAREA_COUNTER_CLASS,\n inputCounterVariants({\n size: this.size(),\n scheme: this.scheme(),\n class: this.class()\n })\n )\n );\n}\n","import { Combobox } from \"@angular/aria/combobox\";\nimport { booleanAttribute, Component, computed, ElementRef, input, model, viewChild } from \"@angular/core\";\nimport type { FormValueControl } from \"@angular/forms/signals\";\nimport { SearchIcon } from \"../../icons/search.icon\";\nimport { XMarkIcon } from \"../../icons/x-mark.icon\";\nimport { cn } from \"cn\";\n\nimport { ButtonComponent } from \"../button/button\";\nimport { fixStaleComboboxRelay } from \"../combobox/combobox-relay-workaround\";\nimport { InputComponent, InputControlDirective, InputIconLeftDirective, InputIconRightDirective } from \"../input/input\";\nimport type { InputWrapVariants } from \"../input/input.cva\";\nimport { TooltipDirective } from \"../tooltip/tooltip\";\n\n@Component({\n selector: \"SearchInput, search-input, searchinput\",\n standalone: true,\n imports: [\n SearchIcon,\n ButtonComponent,\n Combobox,\n InputComponent,\n InputControlDirective,\n InputIconLeftDirective,\n InputIconRightDirective,\n XMarkIcon,\n TooltipDirective\n ],\n template: `\n <input-group [size]=\"size()\" [textSize]=\"textSize()\" [class]=\"cn('group/search', class())\">\n <span input-icon-left>\n <SearchIcon [class]=\"searchIconClass()\" />\n </span>\n <input\n input-control\n #search\n ngCombobox\n type=\"search\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n [(value)]=\"value\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-keyshortcuts]=\"hotkey()\" />\n <button\n input-icon-right\n variant=\"tertiary\"\n scheme=\"neutral\"\n [iconOnly]=\"true\"\n [size]=\"buttonSize()\"\n type=\"button\"\n [class]=\"value()\n ? 'rotate-90 opacity-100 transition-[rotate,opacity] duration-500'\n : 'rotate-0 opacity-0 pointer-events-none transition-[rotate,opacity] duration-500'\"\n [tabindex]=\"value() ? 0 : -1\"\n [attr.aria-label]=\"clearLabel()\"\n [tooltip]=\"clearLabel()\"\n (keydown.enter)=\"clearSearch($event)\"\n (click)=\"clearSearch($event)\">\n <XMarkIcon [class]=\"iconClass()\" />\n <span class=\"sr-only\">{{ clearLabel() }}</span>\n </button>\n <ng-content />\n </input-group>\n `,\n host: {\n \"[class]\": \"cn(disabled() && 'pointer-events-none opacity-50')\"\n }\n})\nexport class SearchInputComponent implements FormValueControl<string> {\n cn = cn;\n searchInput = viewChild.required<ElementRef>(\"search\");\n\n /**\n * The `ngCombobox` directive instance applied to the inner input element.\n *\n * @remarks\n * Use this reference to attach a suggestions popup from the consumer side:\n *\n * ```html\n * <SearchInput #si [(value)]=\"query\" />\n * <ng-template ngComboboxPopup [combobox]=\"si.combobox()\">\n * <ul ngComboboxWidget ngListbox #lb=\"ngListbox\" [activeDescendant]=\"lb.activeDescendant()\">\n * <li ngOption [value]=\"suggestion\">…</li>\n * </ul>\n * </ng-template>\n * ```\n */\n combobox = viewChild.required(Combobox);\n\n /**\n * The search text, kept in sync with the inner input element.\n *\n * As the only required member of the signal forms `FormValueControl`\n * contract, it makes the component usable either as a plain two-way\n * binding (`[(value)]=\"query\"`) or as a form field\n * (`<SearchInput [formField]=\"form.query\" />`).\n */\n value = model<string>(\"\");\n\n placeholder = input<string>(\"Search...\");\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible name of the inner `<input>`.\n *\n * A placeholder is not a label: it disappears on the first keystroke and screen readers are not\n * required to announce it (RGAA 11.1). This is what a page carrying several search fields — one\n * per facet, say — needs to tell them apart. Aliased on the attribute, as `Badge.ariaLabel` is,\n * so a caller writes `aria-label=\"…\"` on the element and the name lands where it is read: the\n * `<input>`, this host being an unknown element with no role of its own.\n */\n ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n /**\n * Raccourci annoncé sur l'`<input>` via `aria-keyshortcuts`. Sans valeur par défaut : voir\n * `SearchBar.hotkey` — une bibliothèque ne préempte pas une touche globale, et l'ancien défaut\n * `\"shift+/\"` annonçait un raccourci inopérant en QWERTY US.\n */\n hotkey = input<string>();\n\n /** Accessible name of the clear button. Nothing in the library translates: pass it translated. */\n clearLabel = input<string>(\"Clear search\");\n\n class = input<string>();\n\n /**\n * Size of the field, as `InputGroup`: `lg` (44px), `md` (36px, default) or `sm` (24px). A `h-*` class\n * still overrides the height. At `sm` the clear button and the icons shrink so they fit inside the field.\n */\n size = input<InputWrapVariants[\"size\"]>(\"md\");\n\n /**\n * Text size, independent of `size` (e.g. `md` height with `sm` text). Follows `size` when not set.\n * The magnifier and the clear cross follow the text size.\n */\n textSize = input<InputWrapVariants[\"textSize\"]>();\n\n /** The text size actually rendered: `textSize`, else the one `size` carries. */\n private readonly smallText = computed(() => (this.textSize() ?? (this.size() === \"sm\" ? \"sm\" : \"base\")) === \"sm\");\n\n /**\n * The clear button is a square box: it drops to `xs` (16px) with small text, and always at `size=\"sm\"`\n * so it fits inside the 24px field whatever the text size.\n */\n buttonSize = computed<\"xs\" | \"sm\">(() => (this.size() === \"sm\" || this.smallText() ? \"xs\" : \"sm\"));\n\n /** Icon size follows the text: below the default 16px with small text, like `SearchBar`'s `small`. */\n iconClass = computed(() => (this.smallText() ? \"size-3\" : \"\"));\n\n /** Leading magnifier: focus-rotation animation + size-aware sizing. */\n searchIconClass = computed(() => cn(\"rotate-0 transition-[rotate] duration-500 group-focus-within/search:rotate-90\", this.iconClass()));\n\n constructor() {\n fixStaleComboboxRelay(() => this.combobox());\n }\n\n clearSearch(e: Event) {\n e.stopImmediatePropagation();\n this.value.set(\"\");\n }\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nexport const SB_ICON_CLASS = \"sb-icon\";\nexport const SB_INPUT_CLASS = \"sb-input\";\n// Pill search bar — leading icon + native <input> + optional trailing controls.\n// State driven by selectors on the inner <input>:\n// • focus → has-[:focus-visible]\n// • disabled → has-[:disabled]\n// Token mapping mirrors app/components/css/search-bar.css verbatim.\nexport const searchBarVariants = cva(\n [\n \"box-border inline-flex cursor-text items-center bg-(--bg-neutral-white)\",\n // RGAA 3.3 / WCAG 1.4.11 : --bg-primary-pressed est un token de *fond*, et employé comme bordure\n // il ne mesurait que 1.91:1 en clair et 2.12:1 en sombre — la barre de recherche n'avait donc pas\n // de limite visible conforme au repos, alors que son survol (9.85:1) et son focus (11.95:1)\n // passaient. --stroke-primary-muted est un token de trait, et donne 6.52:1 et 3.71:1.\n \"rounded-(--radius-rounded) border border-solid border-(--stroke-primary-muted)\",\n \"transition-[border-color,background] duration-120 ease-[ease] motion-reduce:transition-none\",\n // Hover (not focused/disabled)\n \"hover:not-has-focus:not-has-disabled:bg-(--bg-primary-lighter)\",\n \"hover:not-has-focus:not-has-disabled:border-(--stroke-primary-hovered)\",\n // Active state (any :focus) — subtle border tighten\n \"has-focus:not-has-disabled:border-(--stroke-primary-pressed)\",\n // Keyboard-only focus ring, porté par la pilule : l'`<input>` est en `outline-none` (plus bas)\n // et le clavier ne laissait donc aucune trace visible. `outline-solid` est requis même ici —\n // `outline-2` ne définit que la largeur, le style venant de `--tw-outline-style`.\n \"has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-(--stroke-focus) has-[:focus-visible]:outline-solid\",\n // Disabled\n \"has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:border-(--stroke-neutral-disabled) has-disabled:bg-(--bg-neutral-base)\",\n // Icon slots\n \"[&_.sb-icon]:inline-flex [&_.sb-icon]:shrink-0 [&_.sb-icon]:items-center [&_.sb-icon]:justify-center [&_.sb-icon]:leading-none [&_.sb-icon]:text-(--font-primary-muted)\",\n \"has-disabled:[&_.sb-icon]:text-(--font-neutral-muted)\",\n // Input\n \"[&_.sb-input]:min-w-0 [&_.sb-input]:flex-1 [&_.sb-input]:border-0 [&_.sb-input]:bg-transparent [&_.sb-input]:outline-none\",\n \"[&_.sb-input]:p-0 [&_.sb-input]:font-[family-name:var(--family-base),sans-serif] [&_.sb-input]:leading-[1.4] [&_.sb-input]:text-(--font-neutral-black)\",\n \"[&_.sb-input]:placeholder:text-(--font-primary-muted)\",\n \"has-disabled:[&_.sb-input]:text-(--font-neutral-muted)\"\n ],\n {\n variants: {\n size: {\n small: \"h-6 gap-(--spacing-xs) px-(--spacing-xs) [&_.sb-icon]:text-(length:--icon-xs) [&_.sb-input]:text-(length:--size-xs)\",\n medium: \"h-9 gap-(--spacing-xs) px-(--spacing-md) [&_.sb-icon]:text-(length:--icon-sm) [&_.sb-input]:text-(length:--size-base)\",\n large: \"h-(--row-height-lg) gap-(--spacing-2xs) px-(--spacing-md) [&_.sb-icon]:text-base [&_.sb-input]:text-(length:--size-lg)\"\n }\n },\n defaultVariants: {\n size: \"large\"\n }\n }\n);\n\nexport type SearchBarVariants = VariantProps<typeof searchBarVariants>;\n","import { Combobox } from \"@angular/aria/combobox\";\nimport { afterRenderEffect, booleanAttribute, Component, computed, ElementRef, input, model, output, viewChild } from \"@angular/core\";\nimport type { FormValueControl } from \"@angular/forms/signals\";\nimport { SearchIcon } from \"../../icons/search.icon\";\nimport { SendHorizontalIcon } from \"../../icons/send-horizontal.icon\";\nimport { XMarkIcon } from \"../../icons/x-mark.icon\";\nimport { cn } from \"cn\";\n\nimport { ButtonComponent } from \"../button/button\";\nimport { INPUT_SEARCH_NATIVE_RESET } from \"../input/input.cva\";\nimport { TooltipDirective } from \"../tooltip/tooltip\";\nimport { searchBarVariants, type SearchBarVariants } from \"./search-bar.cva\";\n\n@Component({\n selector: \"SearchBar, search-bar, searchbar\",\n standalone: true,\n imports: [SearchIcon, SendHorizontalIcon, Combobox, ButtonComponent, XMarkIcon, TooltipDirective],\n template: `\n <span class=\"sb-icon\">\n <SearchIcon [class]=\"searchIconClass()\" />\n </span>\n <input\n class=\"sb-input\"\n [class]=\"searchNativeReset\"\n #search\n ngCombobox\n type=\"search\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n [(value)]=\"value\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-keyshortcuts]=\"hotkey()\" />\n <button\n variant=\"tertiary\"\n scheme=\"neutral\"\n [iconOnly]=\"true\"\n [size]=\"buttonSize()\"\n type=\"button\"\n [disabled]=\"disabled()\"\n [class]=\"value()\n ? 'rotate-90 opacity-100 transition-[rotate,opacity] duration-500'\n : 'rotate-0 opacity-0 pointer-events-none transition-[rotate,opacity] duration-500'\"\n [tabindex]=\"value() && !disabled() ? 0 : -1\"\n [attr.aria-label]=\"clearLabel()\"\n [tooltip]=\"clearLabel()\"\n (keydown.enter)=\"clearSearch($event)\"\n (click)=\"clearSearch($event)\">\n <XMarkIcon [class]=\"iconClass()\" aria-hidden=\"true\" />\n <span class=\"sr-only\">{{ clearLabel() }}</span>\n </button>\n <!-- Actions applicatives (favori, filtre rapide…) : le slot par défaut est ici, entre « clear »\n et « send », parce que c'est la place naturelle d'une action liée à la requête. Ce qui doit\n rester APRÈS le bouton d'envoi porte slot=\"trailing\" (voir plus bas). -->\n <ng-content />\n <button\n variant=\"tertiary\"\n scheme=\"neutral\"\n [iconOnly]=\"true\"\n [size]=\"buttonSize()\"\n type=\"button\"\n [disabled]=\"disabled()\"\n [class]=\"value()\n ? 'opacity-100 transition-opacity duration-300'\n : 'opacity-0 pointer-events-none transition-opacity duration-300'\"\n [tabindex]=\"value() && !disabled() ? 0 : -1\"\n [attr.aria-label]=\"sendLabel()\"\n [tooltip]=\"sendLabel()\"\n (keydown.enter)=\"emitSearch($event)\"\n (click)=\"emitSearch($event)\">\n <SendHorizontalIcon [class]=\"iconClass()\" aria-hidden=\"true\" />\n <span class=\"sr-only\">{{ sendLabel() }}</span>\n </button>\n <!-- Zone de fin de pilule, après le bouton d'envoi (CTA du type « Ask AI »…).\n ⚠️ Le contenu d'un bloc @if ne peut pas atteindre ce slot : la projection ne teste que les\n enfants directs de l'hôte, et le nœud d'un @if ne porte aucun attribut — il retombe donc\n dans le slot par défaut. Envelopper alors le bloc dans un <ng-container slot=\"trailing\">. -->\n <ng-content select=\"[slot='trailing']\" />\n `,\n host: {\n \"[class]\": \"cn('group/search', searchBarVariants({ size: size(), class: class() }))\"\n }\n})\nexport class SearchBarComponent implements FormValueControl<string> {\n cn = cn;\n searchBarVariants = searchBarVariants;\n protected readonly searchNativeReset = INPUT_SEARCH_NATIVE_RESET;\n searchInput = viewChild.required<ElementRef>(\"search\");\n\n /**\n * The `ngCombobox` directive instance applied to the inner input element.\n *\n * @remarks\n * Use this reference to attach a suggestions popup from the consumer side:\n *\n * ```html\n * <SearchBar #sb [(value)]=\"query\" />\n * <ng-template ngComboboxPopup [combobox]=\"sb.combobox()\">\n * <ul ngComboboxWidget ngListbox #lb=\"ngListbox\" [activeDescendant]=\"lb.activeDescendant()\">\n * <li ngOption [value]=\"suggestion\">…</li>\n * </ul>\n * </ng-template>\n * ```\n */\n combobox = viewChild.required(Combobox);\n\n /**\n * The search text, kept in sync with the inner input element.\n *\n * As the only required member of the signal forms `FormValueControl`\n * contract, it makes the component usable either as a plain two-way\n * binding (`[(value)]=\"query\"`) or as a form field\n * (`<SearchBar [formField]=\"form.query\" />`).\n */\n value = model<string>(\"\");\n\n /** Emitted with the current query when the built-in send button is activated (click or Enter). */\n search = output<string>();\n\n placeholder = input<string>(\"Search...\");\n /**\n * Nom accessible du champ, posé sur l'`<input>` interne.\n *\n * À utiliser plutôt qu'un `aria-label` sur `<SearchBar>` : l'hôte est un élément personnalisé\n * sans rôle, où ARIA interdit `aria-label` — l'attribut y est ignoré et le champ retombe sur son\n * `placeholder` pour tout nom accessible.\n */\n ariaLabel = input<string>();\n\n /** Accessible name of the clear button. Nothing in the library translates: pass it translated. */\n clearLabel = input<string>(\"Clear search\");\n\n /** Accessible name of the send button. Nothing in the library translates: pass it translated. */\n sendLabel = input<string>(\"Send\");\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Raccourci annoncé sur l'`<input>` via `aria-keyshortcuts` (« Alt+1 », « Shift+? »…).\n *\n * Sans valeur par défaut, et c'est délibéré : une bibliothèque de composants ne peut pas\n * préempter une touche globale — elle ignore ce que l'application en fait, et le composant peut\n * être instancié plusieurs fois dans une page. L'ancien défaut `\"shift+/\"` était de surcroît\n * faux en QWERTY US (le geste y produit `?`, pas `/`), donc il annonçait un raccourci qui ne\n * fonctionnait pas (WCAG 4.1.2).\n *\n * `aria-keyshortcuts` ne fait qu'annoncer : c'est à l'application de câbler l'exécution.\n */\n hotkey = input<string>();\n size = input<SearchBarVariants[\"size\"]>(\"large\");\n\n class = input<string>();\n\n /**\n * Icon-only action buttons (clear / send) shrink to `xs` at the `small`\n * size so their square box fits inside the `h-6` pill instead of overflowing.\n */\n buttonSize = computed<\"xs\" | \"sm\">(() => (this.size() === \"small\" ? \"xs\" : \"sm\"));\n\n /**\n * Trailing/leading icons drop below the default 16px at the `small` size\n * so they leave breathing room inside the smaller buttons/pill.\n *\n * `shrink-0` is mandatory: the icon components are `display: contents`, so the\n * `<svg>` itself is the flex item. Without it, a cramped pill (long query, tight\n * container) collapses the icons to zero width/height instead of squeezing the input.\n */\n iconClass = computed(() => cn(\"shrink-0\", this.size() === \"small\" ? \"size-3\" : \"\"));\n\n /** Leading magnifier class: focus-rotation animation + size-aware sizing. */\n searchIconClass = computed(() => cn(\"rotate-0 transition-[rotate] duration-500 group-focus-within/search:rotate-90\", this.iconClass()));\n\n constructor() {\n // Workaround for https://github.com/angular/components/issues/33361:\n // `keyboardEventRelayEffect` reads `controlTarget()` outside of\n // `untracked()`, so the effect re-runs when the popup widget re-registers\n // on a later expansion and re-dispatches the LAST relayed keyboard event\n // onto the fresh listbox — e.g. reopening the popup with ArrowDown lands\n // on the 2nd option instead of the 1st. Clearing the relayed event\n // whenever the popup collapses prevents the replay. Remove once fixed.\n afterRenderEffect(() => {\n const combobox = this.combobox();\n if (!combobox.expanded()) {\n combobox._pattern.keyboardEventRelay.set(undefined);\n }\n });\n }\n\n clearSearch(e: Event) {\n e.stopImmediatePropagation();\n this.value.set(\"\");\n }\n\n emitSearch(e: Event) {\n e.stopImmediatePropagation();\n this.search.emit(this.value());\n }\n}\n","import { InjectionToken, OutputEmitterRef, WritableSignal } from \"@angular/core\";\n\nexport type DialogEvent = \"dialog-close\" | \"dialog-cancel\" | \"dialog-confirm\" | \"dialog-no\" | \"dialog-yes\";\n\nexport type DialogResult = DialogEvent | { type: DialogEvent; [key: string]: any };\n\nexport interface DialogInterface {\n open(...args: any[]): void;\n closed?: OutputEmitterRef<DialogResult>;\n}\n\nexport interface DialogRef {\n close(eventType?: DialogEvent): void;\n /**\n * The container's accessible name for the close buttons it renders or hosts, when it has one.\n * A header uses it when it was not given a `closeLabel` of its own: explicit input wins, then the\n * container, then the English default.\n */\n closeLabel?: () => string | undefined;\n}\n\nexport const DIALOG_REF = new InjectionToken<DialogRef>(\"DIALOG_REF\");\n\n/**\n * Exposes the `.modal-title` element id to the `.modal` surface so it can wire\n * `aria-labelledby`. Provided by {@link DialogContentComponent}; the title\n * directive registers its generated id here. Mirrors the {@link DIALOG_REF}\n * provider pattern to cross the `DialogHeader` content-projection boundary.\n */\nexport interface ModalLabel {\n titleId: WritableSignal<string | undefined>;\n}\n\nexport const MODAL_LABEL = new InjectionToken<ModalLabel>(\"MODAL_LABEL\");\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// ── Slot class constants ────────────────────────────────────────────────────\nexport const MODAL_CLASS = \"modal\";\nexport const MODAL_HEADER_CLASS = \"modal-header\";\nexport const MODAL_HEADER_LEFT_CLASS = \"modal-header-left\";\nexport const MODAL_TITLE_WRAP_CLASS = \"modal-title-wrap\";\nexport const MODAL_TITLE_CLASS = \"modal-title\";\nexport const MODAL_CLOSE_CLASS = \"modal-close\";\nexport const MODAL_BODY_CLASS = \"modal-body\";\nexport const MODAL_BODY_TEXT_CLASS = \"modal-body-text\";\nexport const MODAL_FOOTER_CLASS = \"modal-footer\";\n\n// ── Modal variants ──────────────────────────────────────────────────────────\nexport const modalVariants = cva(\n [\n // Surface — same colour as the page, the footer is the only surface that differs\n \"bg-(--layer-page-layer)\",\n \"relative flex flex-col items-start overflow-clip\",\n // Shape\n \"rounded-(--radius-lg)\",\n // Elevation — shadow-3 (double drop-shadow)\n \"shadow-[0px_10px_10px_-5px_color-mix(in_srgb,var(--font-primary-dark)_4%,transparent),0px_20px_25px_-5px_color-mix(in_srgb,var(--font-primary-dark)_10%,transparent)]\",\n // ── Header slot ────────────────────────────────────────────────────\n \"[&_.modal-header]:flex [&_.modal-header]:items-center\",\n \"[&_.modal-header]:w-full [&_.modal-header]:shrink-0 [&_.modal-header]:justify-between\",\n \"[&_.modal-header]:px-(--spacing-xl) [&_.modal-header]:pt-(--spacing-xl) [&_.modal-header]:pb-(--spacing-md)\",\n // Header-left — leading badge + title cluster\n \"[&_.modal-header-left]:flex [&_.modal-header-left]:min-w-0 [&_.modal-header-left]:items-center [&_.modal-header-left]:gap-(--spacing-sm)\",\n // Title wrap — stacks title (+ optional subtitle) vertically\n \"[&_.modal-title-wrap]:flex [&_.modal-title-wrap]:min-w-0 [&_.modal-title-wrap]:flex-col\",\n // Title text\n \"[&_.modal-title]:truncate [&_.modal-title]:text-(length:--size-lg) [&_.modal-title]:leading-(--line-height-4) [&_.modal-title]:font-semibold [&_.modal-title]:text-(--layer-page-font)\",\n // Close button (plain <button>) — icon-button hover/focus affordance\n \"[&_.modal-close]:inline-flex [&_.modal-close]:h-6 [&_.modal-close]:w-6 [&_.modal-close]:shrink-0 [&_.modal-close]:cursor-pointer [&_.modal-close]:items-center [&_.modal-close]:justify-center [&_.modal-close]:rounded-(--radius-xs) [&_.modal-close]:border-0 [&_.modal-close]:bg-transparent [&_.modal-close]:text-(--layer-page-font)\",\n \"[&_.modal-close]:transition-[background-color,color] [&_.modal-close]:duration-120 [&_.modal-close]:ease-[ease] [&_.modal-close]:motion-reduce:transition-none\",\n \"[&_.modal-close:hover]:bg-(--bg-primary-lighter) [&_.modal-close:hover]:text-(--font-primary-base)\",\n \"[&_.modal-close:focus-visible]:outline-2 [&_.modal-close:focus-visible]:outline-offset-0 [&_.modal-close:focus-visible]:outline-(--stroke-focus)\",\n // ── Body slot ──────────────────────────────────────────────────────\n // `min-h-0` lets the body shrink inside the flex column so `overflow-y-auto`\n // actually scrolls (header/footer are shrink-0) once the modal hits max-h.\n \"[&_.modal-body]:flex [&_.modal-body]:min-h-0 [&_.modal-body]:w-full [&_.modal-body]:flex-col\",\n \"[&_.modal-body]:px-(--spacing-xl) [&_.modal-body]:py-(--spacing-md)\",\n \"[&_.modal-body]:overflow-y-auto\",\n // Body text — default paragraph styling inside the body\n \"[&_.modal-body-text]:m-0 [&_.modal-body-text]:text-(length:--size-sm) [&_.modal-body-text]:text-(--layer-page-font)\",\n // ── Footer slot ────────────────────────────────────────────────────\n \"[&_.modal-footer]:flex [&_.modal-footer]:gap-(--spacing-xs)\",\n \"[&_.modal-footer]:items-center [&_.modal-footer]:justify-end\",\n \"[&_.modal-footer]:w-full [&_.modal-footer]:shrink-0\",\n \"[&_.modal-footer]:bg-(--layer-page-on-layer)\",\n \"[&_.modal-footer]:rounded-br-(--radius-lg) [&_.modal-footer]:rounded-bl-(--radius-lg)\",\n \"[&_.modal-footer]:px-(--spacing-xl) [&_.modal-footer]:py-(--spacing-md)\"\n ],\n {\n variants: {\n // size — modal width: sm=400px, md=520px, lg=720px, xl=960px, each of them yielding to\n // the viewport once it is narrower than that, less the 1rem gutter the centred surface\n // keeps on either side.\n //\n // These were plain `w-*` utilities, i.e. a fixed width at every viewport: `md` (520px)\n // overflowed a 375px phone by 145px, half of it off each side, and the surface being\n // `fixed` there was nothing to scroll it back into view.\n //\n // `min()` rather than a `max-w-*` alongside, so `width` stays the single property that\n // decides how wide a modal is — a consumer overriding it needs one class, not two. And\n // rather than `clamp()`, whose lower bound would win back below it and overflow again on\n // the narrowest screens.\n //\n // Spelled out in full on purpose: Tailwind scans these files as text, so a class\n // assembled from a shared constant would never be generated.\n size: {\n sm: \"w-[min(25rem,calc(100dvw-2rem))]\",\n md: \"w-[min(32.5rem,calc(100dvw-2rem))]\",\n lg: \"w-[min(45rem,calc(100dvw-2rem))]\",\n xl: \"w-[min(60rem,calc(100dvw-2rem))]\"\n }\n },\n defaultVariants: {\n size: \"sm\"\n }\n }\n);\n\nexport type ModalVariants = VariantProps<typeof modalVariants>;\n","import { computed, Directive, input, signal } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { MODAL_CLASS, modalVariants, ModalVariants } from \"./modal.cva\";\nimport { MODAL_LABEL } from \"./dialog.interface\";\n\n@Directive({\n selector: \"DialogContent\",\n standalone: true,\n providers: [{ provide: MODAL_LABEL, useExisting: DialogContentComponent }],\n host: {\n \"data-slot\": \"dialog-content\",\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"[attr.aria-labelledby]\": \"labelledby() ?? titleId()\",\n \"[class]\": \"variants()\"\n }\n})\nexport class DialogContentComponent {\n /** Modal width variant (sm/md/lg/xl). Left unset lets the cva default (`sm`) apply. */\n size = input<ModalVariants[\"size\"]>();\n /** Explicit id for `aria-labelledby`; falls back to the projected `.modal-title` id. */\n labelledby = input<string>();\n class = input<string>();\n\n /** Registered by the projected {@link DialogTitleComponent} via {@link MODAL_LABEL}. */\n readonly titleId = signal<string | undefined>(undefined);\n\n variants = computed(() =>\n cn(\n MODAL_CLASS,\n modalVariants({ size: this.size() }),\n // Positioning lives here, not in the cva (which is a pure surface skin).\n // Fixed + viewport-centered works for BOTH open paths: the native\n // `<dialog>` (its box collapses since this child is out of flow, so its\n // default UA chrome stays hidden behind us) and the `[dialog]` attribute\n // path (manual backdrop). No `w-*` here — width is owned by the size variant.\n \"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-1100 max-h-[calc(100dvh-2rem)]\",\n this.class()\n )\n );\n}\n","import { Component, computed, inject, input } from \"@angular/core\";\nimport { XMarkIcon } from \"../../icons/x-mark.icon\";\nimport { cn } from \"cn\";\n\nimport { DIALOG_REF } from \"./dialog.interface\";\nimport { MODAL_HEADER_CLASS } from \"./modal.cva\";\n\n@Component({\n selector: \"DialogHeader\",\n standalone: true,\n imports: [XMarkIcon],\n template: `\n <div class=\"modal-header-left\">\n <ng-content select=\"badge, Badge, .modal-leading\" />\n <div class=\"modal-title-wrap\">\n <ng-content select=\"DialogTitle\" />\n </div>\n </div>\n <!-- The label is an input, not a literal: a hard-coded English \"Close\" is unreadable to everyone else,\n and it is the only name this button has -- the icon is decorative and hidden from assistive\n technology. Same contract as SheetHeader. -->\n <button class=\"modal-close\" type=\"button\" [attr.aria-label]=\"resolvedCloseLabel()\" (click)=\"dialog?.close()\">\n <XMarkIcon />\n </button>\n <ng-content />\n `,\n host: {\n \"data-slot\": \"dialog-header\",\n \"[class]\": \"variants()\"\n }\n})\nexport class DialogHeaderComponent {\n dialog = inject(DIALOG_REF, { optional: true });\n\n /**\n * Accessible name of the close button. Translate it. Left unset, it comes from the `closeLabel` of the\n * enclosing `<dialog>`, then falls back to the English \"Close\".\n */\n closeLabel = input<string>();\n protected readonly resolvedCloseLabel = computed(() => this.closeLabel() ?? this.dialog?.closeLabel?.() ?? \"Close\");\n class = input<string>();\n variants = computed(() => cn(MODAL_HEADER_CLASS, this.class()));\n}\n","import { Component, ElementRef, inject, input, output, signal } from \"@angular/core\";\nimport { DIALOG_REF, DialogEvent } from \"./dialog.interface\";\nimport { DialogContentComponent } from \"./dialog-content\";\nimport { DialogHeaderComponent } from \"./dialog-header\";\n\n@Component({\n selector: \"dialog, [dialog]\",\n exportAs: \"dialog\",\n standalone: true,\n providers: [{ provide: DIALOG_REF, useExisting: DialogComponent }],\n template: `\n @if (isOpen()) {\n <!-- Manual backdrop for the [dialog] attribute path, which has no ::backdrop of its own.\n Same scrim tokens as the native ::backdrop styled on the host, so both paths render\n identically. Skipped in popover mode, documented as light-dismiss and backdrop-less. -->\n @if(dialog.tagName !== 'DIALOG' && !isPopover()) {\n <div class=\"fixed inset-0 z-1000 bg-(color:--scrim-base,#2d393a52) backdrop-blur-(--blur-xs,4px)\" (click)=\"backdropClose()\"></div>\n }\n <ng-content select=\"DialogContent\">\n <DialogContent>\n <ng-content select=\"DialogHeader\">\n <DialogHeader />\n </ng-content>\n <ng-content select=\"DialogBody\" />\n <ng-content select=\"DialogFooter\" />\n </DialogContent>\n </ng-content>\n }\n `,\n host: {\n // Native `<dialog>` path: `::backdrop` is a pseudo-element, unreachable from a plain utility\n // class — Tailwind's `backdrop:` variant is what lets the scrim live here rather than in every\n // consuming app's CSS. Inert on a `[dialog]` host, which paints its own backdrop <div> instead.\n //\n // The literal fallbacks are not cosmetic: `::backdrop` only inherits custom properties from its\n // originating element on recent engines. Where it does not, `var(--scrim-base)` resolves to\n // nothing, the declaration is invalid at computed-value time and `background-color` falls back\n // to `transparent` — which would *remove* the UA's own backdrop instead of restyling it.\n class: \"backdrop:bg-(color:--scrim-base,#2d393a52) backdrop:backdrop-blur-(--blur-xs,4px)\",\n \"[attr.closedby]\": \"isPopover() ? 'any' : null\",\n \"[attr.open]\": \"isOpen() ? '' : null\",\n \"(close)\": \"close()\",\n \"(document:keydown.escape)\": \"dialog.tagName !== 'DIALOG' ? close() : null\",\n // `-1`, jamais `0` : sur un hôte `[dialog]` (non natif), l'élément reste dans le flux même\n // fermé. Avec `0`, il ajoutait un arrêt de tabulation invisible — une boîte de 0 px de haut qui\n // recevait le focus sans que rien ne s'affiche. `-1` le garde focalisable par script (mise au\n // focus à l'ouverture) sans l'insérer dans l'ordre de tabulation.\n tabindex: \"-1\"\n },\n imports: [DialogHeaderComponent, DialogContentComponent]\n})\nexport class DialogComponent {\n dialog = inject<ElementRef<HTMLDialogElement>>(ElementRef).nativeElement;\n closed = output<DialogEvent>();\n\n /**\n * Accessible name of the close button of every `DialogHeader` in this dialog, the default header\n * included. A `DialogHeader` that sets its own `closeLabel` keeps it. Translate it.\n */\n closeLabel = input<string>();\n\n isOpen = signal(false);\n /**\n * Signal indicating whether the dialog should be displayed as a popover.\n * When true, the dialog will be rendered with popover-style positioning and behavior.\n * When false, the dialog will be rendered as a standard modal dialog.\n * @default false\n */\n isPopover = signal(false);\n isModal = signal(false);\n\n /**\n * Opens the dialog by displaying the modal.\n *\n * @remarks\n * This method triggers the dialog to become visible by calling the `showModal` method.\n *\n * @public\n */\n open() {\n this.showModal();\n }\n\n openModal() {\n this.isModal.set(true);\n this.showModal();\n }\n\n show() {\n this.isOpen.set(true);\n this.dialog?.show();\n }\n\n /**\n * Opens the dialog modal by setting the `isOpen` state to `true` and invoking the native `showModal()` method\n * on the dialog element, if it exists.\n *\n * @remarks\n * This method assumes that `dialog` is a reference to a native dialog element and `isOpen` is a state management property.\n */\n showModal() {\n this.isOpen.set(true);\n this.isPopover.set(false);\n\n if (this.dialog.tagName === \"DIALOG\") {\n this.dialog?.showModal();\n this.isModal.set(true);\n }\n }\n\n /**\n * Shows the dialog as a popover element.\n *\n * Sets the dialog state to open and popover mode, then displays the native popover.\n * This method utilizes the HTML Popover API to show the dialog element as a popover.\n */\n showPopover() {\n this.isOpen.set(true);\n this.isPopover.set(true);\n\n if (this.dialog.tagName === \"DIALOG\") this.dialog?.showPopover();\n }\n\n /**\n * Closes the dialog and emits a close event.\n *\n * This method performs the following actions:\n * - Sets the `isOpen` state to `false`.\n * - Calls the native `close()` method on the dialog element, if available.\n * - Emits the `closed` event with the specified event type.\n * - Dispatches a JavaScript event of the given type on the document.\n *\n * @param eventType - The type of event to emit and dispatch. Defaults to `'dialog-close'`.\n *\n * @remarks\n * Idempotent: a no-op if the dialog is already closed. This guards against re-entrancy on a\n * real `<dialog>` tag, where the native `close()` call below queues the browser's own `close`\n * event, which the `(close)` host listener catches and re-invokes this method with — without\n * the guard, `closed` would emit a second time with the default `'dialog-close'` eventType.\n */\n close(eventType: DialogEvent = \"dialog-close\") {\n if (!this.isOpen()) return;\n\n this.isOpen.set(false);\n this.isPopover.set(false);\n\n if (this.dialog.tagName === \"DIALOG\") this.dialog?.close(eventType);\n this.closed.emit(eventType);\n // dispatch a javascript event\n document.dispatchEvent(new Event(eventType));\n }\n\n backdropClose(eventType: DialogEvent = \"dialog-close\") {\n // click on backdrop does not close modal dialog\n if (this.isModal()) return;\n this.close(eventType);\n }\n /**\n * Cancels the dialog by closing it with a cancel event.\n * @param eventType - The type of dialog event to emit when canceling. Defaults to \"dialog-cancel\".\n */\n cancel(eventType: DialogEvent = \"dialog-cancel\") {\n this.close(eventType);\n }\n}\n","import { computed, Directive, effect, inject, input } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { MODAL_BODY_TEXT_CLASS, MODAL_TITLE_CLASS } from \"./modal.cva\";\nimport { MODAL_LABEL } from \"./dialog.interface\";\n\nlet nextTitleId = 0;\n\n@Directive({\n selector: \"DialogTitle\",\n standalone: true,\n host: {\n \"data-slot\": \"dialog-title\",\n \"[id]\": \"resolvedId()\",\n \"[class]\": \"variants()\"\n }\n})\nexport class DialogTitleComponent {\n private readonly label = inject(MODAL_LABEL, { optional: true });\n private readonly autoId = `modal-title-${++nextTitleId}`;\n\n /** Explicit id override; otherwise an auto-generated one is used. */\n id = input<string>();\n class = input<string>();\n\n resolvedId = computed(() => this.id() ?? this.autoId);\n variants = computed(() => cn(MODAL_TITLE_CLASS, this.class()));\n\n constructor() {\n // Publish the title id so the `.modal` surface can wire `aria-labelledby`.\n effect(() => this.label?.titleId.set(this.resolvedId()));\n }\n}\n\n@Directive({\n selector: \"DialogDescription\",\n standalone: true,\n host: {\n \"data-slot\": \"dialog-description\",\n \"[class]\": \"variants()\"\n }\n})\nexport class DialogDescriptionComponent {\n class = input<string>();\n variants = computed(() => cn(MODAL_BODY_TEXT_CLASS, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { MODAL_BODY_CLASS } from \"./modal.cva\";\n\n@Directive({\n selector: \"DialogBody\",\n standalone: true,\n host: {\n \"data-slot\": \"dialog-body\",\n \"[class]\": \"variants()\"\n }\n})\nexport class DialogBodyComponent {\n class = input<string>(\"\");\n variants = computed(() => cn(MODAL_BODY_CLASS, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { MODAL_FOOTER_CLASS } from \"./modal.cva\";\n\n@Directive({\n selector: \"DialogFooter\",\n standalone: true,\n host: {\n \"data-slot\": \"dialog-footer\",\n \"[class]\": \"variants()\"\n }\n})\nexport class DialogFooterComponent {\n class = input<string>(\"\");\n variants = computed(() => cn(MODAL_FOOTER_CLASS, this.class()));\n}\n","import { inject, InjectionToken, signal } from \"@angular/core\";\n\n/**\n * Handle injected into a callable dialog component, mirroring react-call's\n * `call` prop. The component reads its arguments from {@link props} and resolves\n * the pending `call()` promise by invoking {@link end}.\n *\n * Obtain it from within the component via {@link injectCallRef}:\n *\n * @example\n * ```typescript\n * protected call = injectCallRef<{ message: string }, boolean>();\n * // template: {{ call.props().message }} ... (click)=\"call.end(true)\"\n * ```\n *\n * @template P - Type of the arguments passed to `call(props)`.\n * @template R - Type the `call()` promise resolves with.\n */\nexport class CallRef<P = void, R = void> {\n /** Arguments passed to `call(props)`, reactive so updates re-render the dialog. */\n readonly props = signal<P>(undefined as P);\n\n /**\n * `true` once {@link end} has been invoked. Useful to drive an exit\n * animation before the instance is removed (see `unmountDelay`).\n */\n readonly ended = signal(false);\n\n /** 0-based position of this instance in the dialog stack (maintained by DialogService). */\n readonly index = signal(0);\n\n /** Total number of callable instances currently mounted (maintained by DialogService). */\n readonly stackSize = signal(0);\n\n private _resolve?: (result: R) => void;\n\n /**\n * Wires the promise resolver. Called by `DialogService.call()` — not part of\n * the public contract.\n * @internal\n */\n _attach(resolve: (result: R) => void): void {\n this._resolve = resolve;\n }\n\n /**\n * Resolves the pending `call()` promise with `result` and tears down the\n * instance. Equivalent to react-call's `call.end(value)`. No-op if already ended.\n */\n end(result: R): void {\n if (this.ended()) return;\n this.ended.set(true);\n this._resolve?.(result);\n }\n}\n\n/**\n * DI token exposing the {@link CallRef} of the current callable instance.\n * Provided automatically by `DialogService.call()` on the dynamically created\n * component's element injector. Prefer {@link injectCallRef} to obtain a typed\n * handle rather than reading this token directly.\n */\nexport const CALL_REF = new InjectionToken<CallRef<unknown, unknown>>(\"CALL_REF\");\n\n/**\n * Injects the current {@link CallRef}, typed to the component's argument and\n * result types. Must run in an injection context (field initializer or constructor).\n *\n * @example\n * ```typescript\n * protected call = injectCallRef<{ message: string }, boolean>();\n * ```\n *\n * @template P - Type of the arguments passed to `call(props)`.\n * @template R - Type the `call()` promise resolves with.\n */\nexport function injectCallRef<P = void, R = void>(): CallRef<P, R> {\n return inject(CALL_REF) as CallRef<P, R>;\n}\n","import { computed, createComponent, inject, signal, ApplicationRef, ComponentRef, DestroyRef, Injector, Service, Type } from \"@angular/core\";\nimport { CALL_REF, CallRef } from \"./call-ref\";\nimport { DialogInterface, DialogResult } from \"./dialog.interface\";\n\ninterface CallInstance {\n ref: ComponentRef<unknown>;\n callRef: CallRef<unknown, unknown>;\n}\n\n/**\n * Service for dynamically creating and managing dialog components.\n *\n * The `DialogService` allows you to open dialog components at runtime,\n * attach them to the DOM, and handle their lifecycle and close events.\n *\n * @example\n * ```typescript\n * const result = await dialogService.open(MyDialogComponent, { data: 'example' });\n * ```\n *\n * @template U - The type of dialog component that implements `DialogInterface`.\n */\n@Service()\nexport class DialogService {\n protected dialogRef?: ComponentRef<DialogInterface>;\n\n /** Currently mounted callable instances (see {@link call}). */\n private readonly stack = signal<CallInstance[]>([]);\n\n /** Number of callable dialog instances currently mounted. */\n readonly openCount = computed(() => this.stack().length);\n\n /** `inject()` rather than a constructor parameter: `@Service` forbids constructor DI. */\n private readonly appRef = inject(ApplicationRef);\n\n /**\n * Imperatively mounts `component`, injects a typed {@link CallRef} (arguments +\n * resolution handle) on its element injector, and resolves the returned promise\n * when the instance calls `call.end(result)`.\n *\n * Unlike {@link open}, calls **stack**: each invocation renders an independent\n * instance and the component injects its handle via DI instead of implementing\n * `DialogInterface`. Prefer the typed `createCallable` factory over calling\n * this directly.\n *\n * @template P - Type of the arguments.\n * @template R - Type the promise resolves with.\n * @param component - Standalone component injecting `CALL_REF`.\n * @param props - Arguments exposed via `callRef.props()`.\n * @param options - Optional parent injector, exit-animation `unmountDelay` (ms) and\n * `destroyRef` (ends the call with `undefined` when destroyed) and `container` (mount point,\n * `document.body` by default).\n */\n call<P = void, R = void>(\n component: Type<unknown>,\n props: P,\n options: { injector?: Injector; unmountDelay?: number; destroyRef?: DestroyRef; container?: HTMLElement } = {}\n ): Promise<R> {\n const parent = options.injector ?? this.appRef.injector;\n\n const callRef = new CallRef<P, R>();\n callRef.props.set(props);\n\n const elementInjector = Injector.create({\n parent,\n providers: [{ provide: CALL_REF, useValue: callRef as CallRef<unknown, unknown> }]\n });\n\n const componentRef = createComponent(component, {\n environmentInjector: this.appRef.injector,\n elementInjector\n });\n\n return new Promise<R>(resolve => {\n // End the call when the caller is destroyed: the promise resolves with `undefined`\n // instead of staying pending forever. `end()` is idempotent.\n const unregisterDestroy = options.destroyRef?.onDestroy(() => callRef.end(undefined as R));\n\n callRef._attach((result: R) => {\n unregisterDestroy?.();\n resolve(result);\n // Teardown is deferred so destroying the instance never runs re-entrantly\n // when end() is triggered from within the dialog's own (closed) emission.\n const delay = options.unmountDelay ?? 0;\n if (delay > 0) setTimeout(() => this.destroyInstance(componentRef), delay);\n else queueMicrotask(() => this.destroyInstance(componentRef));\n });\n\n (options.container ?? document.body).appendChild(componentRef.location.nativeElement);\n this.appRef.attachView(componentRef.hostView);\n this.stack.update(instances => [...instances, { ref: componentRef, callRef: callRef as CallRef<unknown, unknown> }]);\n this.syncStack();\n });\n }\n\n /**\n * Ends every mounted callable instance at once, resolving each pending promise\n * with `result`, then tearing them all down. No-op on the legacy {@link open} dialog.\n */\n closeAll(result?: unknown): void {\n this.stack().forEach(({ callRef }) => callRef.end(result));\n }\n\n private destroyInstance(ref: ComponentRef<unknown>): void {\n if (!this.stack().some(instance => instance.ref === ref)) return;\n this.stack.update(instances => instances.filter(instance => instance.ref !== ref));\n this.appRef.detachView(ref.hostView);\n ref.destroy();\n this.syncStack();\n }\n\n /**\n * Refreshes per-instance stack metadata (`index`, `stackSize`) and backdrops.\n *\n * A single visible backdrop is kept for the whole stack: every instance except\n * the bottom-most gets the `atomic-dialog--behind` host class, which neutralises\n * its native `::backdrop`. Anchoring the visible backdrop to the bottom instance\n * (rather than the top) keeps it stable while upper dialogs close top-down — so\n * no backdrop fades transparent→dim mid-close, avoiding a flicker.\n */\n private syncStack(): void {\n const instances = this.stack();\n const stackSize = instances.length;\n instances.forEach(({ ref, callRef }, index) => {\n callRef.index.set(index);\n callRef.stackSize.set(stackSize);\n (ref.location.nativeElement as HTMLElement).classList.toggle(\"atomic-dialog--behind\", index > 0);\n });\n }\n\n open<T extends DialogResult>(componentType: Type<DialogInterface>, args?: unknown): Promise<T> {\n // remove previous dialog if exists\n this.removeDialog();\n\n this.dialogRef = createComponent<DialogInterface>(componentType, {\n environmentInjector: this.appRef.injector\n });\n\n document.body.appendChild(this.dialogRef.location.nativeElement);\n this.appRef.attachView(this.dialogRef.hostView);\n\n this.dialogRef.instance.open(args);\n\n return new Promise<T>(resolve => {\n const subscription = this.dialogRef?.instance.closed?.subscribe((e: DialogResult) => {\n this.removeDialog();\n resolve(e as T);\n subscription?.unsubscribe();\n });\n });\n }\n\n protected removeDialog() {\n if (this.dialogRef) {\n this.appRef.detachView(this.dialogRef.hostView);\n this.dialogRef.destroy();\n this.dialogRef.changeDetectorRef.detectChanges();\n }\n }\n}\n","import { DestroyRef, EnvironmentProviders, inject, Injector, makeEnvironmentProviders, provideAppInitializer, Type } from \"@angular/core\";\nimport { DialogService } from \"./dialog.service\";\n\n/**\n * Root injector captured by {@link provideCallable}, enabling `call(props)`\n * without passing an injector (react-call ergonomics).\n */\nlet rootInjector: Injector | null = null;\n\n/**\n * Options accepted by {@link Callable.call}.\n */\nexport interface CallOptions {\n /**\n * Injector used to resolve `DialogService` and parent the instance's DI.\n * Defaults to the root injector captured by {@link provideCallable}.\n */\n injector?: Injector;\n /**\n * Delay in ms between `call.end()` and the actual teardown, leaving time for\n * an exit animation. Overrides the value passed to {@link createCallable}.\n */\n unmountDelay?: number;\n /**\n * When destroyed (typically the caller component's `DestroyRef`), the call is\n * ended and its promise resolves with `undefined` — so code after `await`\n * must check `destroyRef`/the component state before touching it. The\n * registration is dropped as soon as the call ends normally.\n */\n destroyRef?: DestroyRef;\n /**\n * Element the instance is mounted in. Defaults to `document.body`.\n *\n * Pass the nearest `[popover]` ancestor when the call is made from inside a native `popover=\"auto\"`:\n * `showModal()` hides every auto popover that is not an ancestor of the dialog, so a dialog mounted\n * in `document.body` closes the popover that opened it.\n */\n container?: HTMLElement;\n}\n\n/**\n * Imperative, type-safe handle returned by {@link createCallable}.\n */\nexport interface Callable<P = void, R = void> {\n /**\n * Mounts the bound component and resolves once it calls `call.end(result)`.\n * Multiple invocations stack — each renders an independent instance.\n */\n call(props: P, options?: CallOptions): Promise<R>;\n}\n\n/**\n * Captures the root injector at bootstrap so {@link Callable.call} can be used\n * from anywhere without an explicit injector — the closest equivalent to\n * react-call's \"call from anywhere\" ergonomics.\n *\n * @example\n * ```typescript\n * bootstrapApplication(App, { providers: [provideCallable()] });\n * // then, anywhere: await Confirm.call({ message: \"Sure?\" });\n * ```\n */\nexport function provideCallable(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAppInitializer(() => {\n rootInjector = inject(Injector);\n })\n ]);\n}\n\n/**\n * Binds a dialog component once and returns a typed, imperative `call()` — the\n * Angular counterpart of react-call's `createCallable`.\n *\n * The component receives its arguments and resolution handle via DI\n * (`injectCallRef()`); it does not need to implement `DialogInterface`.\n *\n * @example\n * ```typescript\n * export const Confirm = createCallable<{ message: string }, boolean>(ConfirmDialog);\n * const accepted = await Confirm.call({ message: \"Continue?\" });\n * ```\n *\n * @template P - Type of the arguments passed to `call(props)`.\n * @template R - Type the `call()` promise resolves with.\n * @param component - Standalone component injecting `CALL_REF` (via `injectCallRef`).\n * @param unmountDelay - Default teardown delay (ms) after `call.end()`, for exit animations.\n */\nexport function createCallable<P = void, R = void>(component: Type<unknown>, unmountDelay = 0): Callable<P, R> {\n return {\n call(props: P, options: CallOptions = {}): Promise<R> {\n const injector = options.injector ?? rootInjector;\n if (!injector) {\n throw new Error(\n \"[atomic] createCallable: no injector available. \" + \"Call provideCallable() during bootstrap, or pass { injector } from an injection context.\"\n );\n }\n return injector.get(DialogService).call<P, R>(component, props, {\n injector,\n unmountDelay: options.unmountDelay ?? unmountDelay,\n destroyRef: options.destroyRef,\n container: options.container\n });\n }\n };\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// ── Slot class constants ────────────────────────────────────────────────────\nexport const SHEET_CLASS = \"sheet\";\nexport const SHEET_HEADER_CLASS = \"sheet-header\";\nexport const SHEET_HEADER_LEFT_CLASS = \"sheet-header-left\";\nexport const SHEET_TITLE_WRAP_CLASS = \"sheet-title-wrap\";\nexport const SHEET_CLOSE_CLASS = \"sheet-close\";\nexport const SHEET_BODY_CLASS = \"sheet-body\";\nexport const SHEET_FOOTER_CLASS = \"sheet-footer\";\n\n// ── Sheet variants ──────────────────────────────────────────────────────────\n// These land on the `<dialog>` element itself, which is both the surface and the animated box.\n// Unlike `modalVariants`, which is a pure skin with the positioning left to the component, the\n// geometry lives here: the edge a sheet is anchored to is what distinguishes it from a dialog, so\n// `side` drives the inset, the size axis, the border, the corners and the direction it slides from,\n// all together.\nexport const sheetVariants = cva(\n [\n // Reset of the user-agent chrome of `<dialog>`: its own margin centres it, and its max-width /\n // max-height cap it well short of an edge-to-edge panel.\n \"fixed m-0 max-h-none max-w-none border-0 p-0\",\n // Surface — same colour as the page, the footer is the only surface that differs\n \"bg-(--layer-page-layer) text-(--layer-page-font)\",\n // No `flex` here: `display` is owned by the component styles, which alternate it with `none`.\n // A utility class would apply to the closed panel too — and an author-origin `.flex` beats the\n // user-agent's `dialog:not([open]) { display: none }` whatever their specificity, leaving an\n // invisible panel intercepting clicks over half the viewport. Measured, before it was moved.\n \"flex-col items-stretch overflow-hidden\",\n // Elevation — shadow-3 (double drop-shadow), as the modal surface\n \"shadow-[0px_10px_10px_-5px_color-mix(in_srgb,var(--font-primary-dark)_4%,transparent),0px_20px_25px_-5px_color-mix(in_srgb,var(--font-primary-dark)_10%,transparent)]\",\n \"border-(--layer-page-edge)\",\n // Scrim. `::backdrop` is a pseudo-element no utility class can reach, which is why it is styled\n // from the element itself through the `backdrop:` variant. The literal fallbacks are not\n // cosmetic: `::backdrop` only inherits custom properties from its originating element on recent\n // engines, and without them the declaration would be invalid at computed-value time and fall\n // back to `transparent` — removing the browser's own backdrop instead of restyling it.\n \"backdrop:bg-(color:--scrim-base,#2d393a52) backdrop:backdrop-blur-(--blur-xs,4px)\",\n // ── Header slot ────────────────────────────────────────────────────────\n \"[&_.sheet-header]:flex [&_.sheet-header]:items-center\",\n \"[&_.sheet-header]:w-full [&_.sheet-header]:shrink-0 [&_.sheet-header]:justify-between\",\n \"[&_.sheet-header]:px-(--spacing-xl) [&_.sheet-header]:pt-(--spacing-xl) [&_.sheet-header]:pb-(--spacing-md)\",\n \"[&_.sheet-header-left]:flex [&_.sheet-header-left]:min-w-0 [&_.sheet-header-left]:items-center [&_.sheet-header-left]:gap-(--spacing-sm)\",\n \"[&_.sheet-title-wrap]:flex [&_.sheet-title-wrap]:min-w-0 [&_.sheet-title-wrap]:flex-col\",\n // The title is `DialogTitle`, reused as-is: it already publishes its id through MODAL_LABEL,\n // which is how the panel gets its accessible name.\n \"[&_.modal-title]:truncate [&_.modal-title]:text-(length:--size-lg) [&_.modal-title]:leading-(--line-height-4) [&_.modal-title]:font-semibold [&_.modal-title]:text-(--layer-page-font)\",\n // Close button — 24x24, the minimum target size of WCAG 2.5.8, with its focus ring drawn inside\n // (`outline-offset-0`): a sheet sits against an edge of the viewport, where an outward ring has\n // nothing to be drawn on.\n \"[&_.sheet-close]:inline-flex [&_.sheet-close]:h-6 [&_.sheet-close]:w-6 [&_.sheet-close]:shrink-0 [&_.sheet-close]:cursor-pointer [&_.sheet-close]:items-center [&_.sheet-close]:justify-center [&_.sheet-close]:rounded-(--radius-xs) [&_.sheet-close]:border-0 [&_.sheet-close]:bg-transparent [&_.sheet-close]:text-(--font-primary-muted)\",\n \"[&_.sheet-close]:transition-[background-color,color] [&_.sheet-close]:duration-120 [&_.sheet-close]:ease-[ease] [&_.sheet-close]:motion-reduce:transition-none\",\n \"[&_.sheet-close:hover]:bg-(--bg-primary-lighter) [&_.sheet-close:hover]:text-(--font-primary-base)\",\n \"[&_.sheet-close:focus-visible]:outline-2 [&_.sheet-close:focus-visible]:outline-offset-0 [&_.sheet-close:focus-visible]:outline-(--stroke-focus)\",\n // Floating variant, for a panel with no header: the same button, lifted out of the flow and\n // given a surface of its own so it stays legible over whatever it covers.\n \"[&_.sheet-close-floating]:absolute [&_.sheet-close-floating]:top-(--spacing-md) [&_.sheet-close-floating]:right-(--spacing-md) [&_.sheet-close-floating]:z-10\",\n \"[&_.sheet-close-floating]:bg-(--layer-page-layer)/80 [&_.sheet-close-floating]:backdrop-blur-(--blur-xs,4px)\",\n // ── Body slot ──────────────────────────────────────────────────────────\n // `min-h-0` lets the body shrink inside the flex column so `overflow-y-auto` actually scrolls,\n // header and footer being `shrink-0`. `overscroll-contain` stops a scroll that reaches the end\n // of the body from chaining to the page behind the panel.\n \"[&_.sheet-body]:flex [&_.sheet-body]:min-h-0 [&_.sheet-body]:w-full [&_.sheet-body]:flex-1 [&_.sheet-body]:flex-col\",\n \"[&_.sheet-body]:px-(--spacing-xl) [&_.sheet-body]:py-(--spacing-md)\",\n \"[&_.sheet-body]:overflow-y-auto [&_.sheet-body]:overscroll-contain\",\n \"[&_.modal-body-text]:m-0 [&_.modal-body-text]:text-(length:--size-sm) [&_.modal-body-text]:text-(--layer-page-font)\",\n // ── Footer slot ────────────────────────────────────────────────────────\n \"[&_.sheet-footer]:flex [&_.sheet-footer]:gap-(--spacing-xs)\",\n \"[&_.sheet-footer]:items-center [&_.sheet-footer]:justify-end\",\n \"[&_.sheet-footer]:w-full [&_.sheet-footer]:shrink-0\",\n \"[&_.sheet-footer]:bg-(--layer-page-on-layer)\",\n \"[&_.sheet-footer]:px-(--spacing-xl) [&_.sheet-footer]:py-(--spacing-md)\"\n ],\n {\n variants: {\n // Edge the panel is anchored to. The two corners flush against the viewport stay square:\n // there is no surface next to them to round away from. `--sheet-x` / `--sheet-y` are read by\n // the transition declared in the component, which is where the closed position is expressed —\n // a custom property is the only way to give a single transition rule a per-side direction.\n // The four insets are always stated, including the `auto` one. The user-agent stylesheet of\n // `<dialog>` sets *both* inline insets to 0 and centres the box with `margin: auto`; killing\n // that margin with `m-0` leaves the two insets facing each other, and an over-constrained box\n // resolves by ignoring the end one — so a panel asking for `right: 0` was laid out flush\n // LEFT. Measured on the demo before the `auto` was added.\n side: {\n right: \"top-0 right-0 bottom-0 left-auto h-dvh max-w-dvw rounded-l-(--radius-lg) border-l [--sheet-x:100%]\",\n left: \"top-0 right-auto bottom-0 left-0 h-dvh max-w-dvw rounded-r-(--radius-lg) border-r [--sheet-x:-100%]\",\n top: \"top-0 right-0 bottom-auto left-0 max-h-dvh w-dvw rounded-b-(--radius-lg) border-b [--sheet-y:-100%]\",\n bottom: \"top-auto right-0 bottom-0 left-0 max-h-dvh w-dvw rounded-t-(--radius-lg) border-t [--sheet-y:100%]\"\n },\n // Extent along the axis the side implies — a width for a left/right panel, a height for a\n // top/bottom one. Resolved by the compound variants below.\n size: { sm: \"\", md: \"\", lg: \"\", xl: \"\", full: \"\" }\n },\n compoundVariants: [\n { side: [\"left\", \"right\"], size: \"sm\", class: \"w-100\" },\n { side: [\"left\", \"right\"], size: \"md\", class: \"w-130\" },\n { side: [\"left\", \"right\"], size: \"lg\", class: \"w-180\" },\n { side: [\"left\", \"right\"], size: \"xl\", class: \"w-240\" },\n { side: [\"left\", \"right\"], size: \"full\", class: \"w-dvw\" },\n { side: [\"top\", \"bottom\"], size: \"sm\", class: \"h-1/4\" },\n { side: [\"top\", \"bottom\"], size: \"md\", class: \"h-1/3\" },\n { side: [\"top\", \"bottom\"], size: \"lg\", class: \"h-1/2\" },\n { side: [\"top\", \"bottom\"], size: \"xl\", class: \"h-3/4\" },\n { side: [\"top\", \"bottom\"], size: \"full\", class: \"h-dvh\" }\n ],\n defaultVariants: {\n side: \"right\",\n size: \"md\"\n }\n }\n);\n\nexport type SheetVariants = VariantProps<typeof sheetVariants>;\n","import { computed, Component, DestroyRef, ElementRef, inject, input, output, signal, viewChild } from \"@angular/core\";\nimport { XMarkIcon } from \"../../icons/x-mark.icon\";\nimport { cn } from \"cn\";\nimport { DIALOG_REF, DialogEvent, MODAL_LABEL } from \"../dialog/dialog.interface\";\nimport { SHEET_CLASS, sheetVariants, SheetVariants } from \"./sheet.cva\";\n\n/** Sheets currently open, so stacked sheets restore the page scroll only once, at the last close. */\nlet openSheets = 0;\nlet previousBodyOverflow: string | null = null;\nlet previousBodyPaddingRight: string | null = null;\n\n/**\n * A modal panel anchored to one edge of the viewport.\n *\n * Built on a native `<dialog>` opened with `showModal()`, exactly as `DialogComponent` is, because\n * a sheet *is* a modal dialog — only its geometry differs. Everything an overlay has to get right\n * therefore comes from the platform rather than from this code: the top layer (no z-index to\n * arbitrate), the focus trap, the focus returned to whatever opened the sheet, `Escape` from\n * anywhere, the rest of the document made inert for assistive technology, and a real `::backdrop`.\n *\n * The `<dialog>` element *is* the panel — it carries the surface, the geometry and the animation —\n * rather than wrapping a separate content element. Two reasons: a native modal `<dialog>` already\n * exposes `role=\"dialog\"` and `aria-modal=\"true\"`, so an inner element repeating them would put a\n * second, redundant dialog in the accessibility tree; and the element that animates has to be the\n * one this component owns, which projected content is not.\n *\n * The component owns that `<dialog>` rather than being one, since `DialogComponent` already matches\n * the `dialog` selector and two components cannot share a host element.\n *\n * ```html\n * <Sheet #panel side=\"right\">\n * <SheetHeader closeLabel=\"Close\">\n * <DialogTitle>Document</DialogTitle>\n * </SheetHeader>\n * <SheetBody>…</SheetBody>\n * </Sheet>\n *\n * <button (click)=\"panel.open()\">Open</button>\n * ```\n */\n@Component({\n // No lowercase `sheet` alias, unlike most roots of the library: `@sinequa/ui` still ships a\n // `SheetComponent` whose selector is exactly `sheet`, and two components matching one element is\n // a compile error. The alias can be added once that deprecated component is gone.\n selector: \"Sheet\",\n exportAs: \"sheet\",\n standalone: true,\n imports: [XMarkIcon],\n providers: [\n { provide: DIALOG_REF, useExisting: SheetComponent },\n { provide: MODAL_LABEL, useExisting: SheetComponent }\n ],\n styles: [\n `\n /* Enter and exit both come from the same two declarations, and neither needs keyframes or a\n JavaScript timer to drive it.\n\n @starting-style gives the transition a value to start from on the very first frame, which is\n what makes an element animate as it appears. The exit is the harder half: closing a <dialog>\n flips it to display:none and drops it out of the top layer at once, so there would normally\n be nothing left to animate. Declaring display and overlay as transitionable with\n allow-discrete defers both to the end of the transition — the panel stays visible, and stays\n in the top layer, while it slides out.\n\n The direction is read from --sheet-x / --sheet-y, set per side by the cva: a custom property\n is what lets a single pair of rules serve the four sides. */\n /* display is alternated here rather than through a utility class on the element. The user agent\n hides a closed dialog with a rule of its own, but that is a user-agent rule: any author\n declaration beats it, whatever their specificity. A flex utility therefore left the closed\n panel laid out — invisible at opacity 0, yet still intercepting clicks over half the\n viewport. Measured, before it was moved here. */\n dialog {\n display: none;\n opacity: 0;\n translate: var(--sheet-x, 0) var(--sheet-y, 0);\n transition:\n opacity 300ms ease-out,\n translate 300ms ease-out,\n display 300ms allow-discrete,\n overlay 300ms allow-discrete;\n }\n\n dialog[open] {\n display: flex;\n opacity: 1;\n translate: 0 0;\n }\n\n @starting-style {\n dialog[open] {\n opacity: 0;\n translate: var(--sheet-x, 0) var(--sheet-y, 0);\n }\n }\n\n /* Reduced motion keeps the discrete part — without it the panel would vanish instead of\n closing — and drops every movement. */\n @media (prefers-reduced-motion: reduce) {\n dialog,\n dialog[open] {\n transition:\n display 0s allow-discrete,\n overlay 0s allow-discrete;\n }\n }\n `\n ],\n template: `\n <dialog\n #native\n [class]=\"variants()\"\n [attr.aria-labelledby]=\"ariaLabel() ? null : (labelledby() ?? titleId())\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n (close)=\"onNativeClose()\"\n (click)=\"onDialogClick($event)\">\n @if (isMounted()) {\n <!-- No fallback header. A dialog is always a titled box, so DialogComponent may impose one;\n a sheet is just as often a full-bleed panel whose content brings its own chrome, and an\n empty header bar wedged above it is worse than none. A sheet without a SheetHeader must\n therefore carry its own way to close, beyond Escape and the scrim. -->\n <ng-content select=\"SheetHeader\" />\n <ng-content select=\"SheetBody\" />\n <ng-content select=\"SheetFooter\" />\n <ng-content />\n\n <!-- Standalone close affordance, for a full-bleed panel that has no SheetHeader to carry\n one. Floating over the content rather than taking a row of its own, so it costs the\n panel no layout. -->\n @if (closeButton()) {\n <button class=\"sheet-close sheet-close-floating\" type=\"button\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\">\n <XMarkIcon />\n </button>\n }\n }\n </dialog>\n `,\n host: { class: \"contents\" }\n})\nexport class SheetComponent {\n private readonly native = viewChild.required<ElementRef<HTMLDialogElement>>(\"native\");\n\n /** Edge the panel is anchored to. */\n side = input<SheetVariants[\"side\"]>();\n /** Extent along the axis the side implies — a width for left/right, a height for top/bottom. */\n size = input<SheetVariants[\"size\"]>();\n /** Explicit id for `aria-labelledby`; falls back to the projected `DialogTitle` id. */\n labelledby = input<string>();\n /**\n * Accessible name for a panel with no visible title. Takes precedence over `labelledby`.\n *\n * A sheet needs one or the other. Without a projected `DialogTitle` and without this, it has no\n * accessible name at all — there is no sensible default to invent in its place.\n */\n ariaLabel = input<string>();\n /** Whether a click on the scrim closes the sheet. `Escape` closes it either way. */\n dismissible = input(true);\n /**\n * Whether to float a close button over the panel.\n *\n * A `SheetHeader` already carries one, so this is for the panels that have no header: without it\n * such a sheet can only be dismissed with `Escape` or a click on the scrim, neither of which is\n * visible. Give it a label — it is the button's only accessible name, its icon being decorative.\n */\n closeButton = input(false);\n /** Accessible name of the floating close button. Translate it. */\n closeLabel = input<string>(\"Close\");\n class = input<string>();\n\n closed = output<DialogEvent>();\n\n /**\n * Emitted once the panel has finished sliding out and its content has left the DOM.\n *\n * {@link closed} fires when closing *starts*, which is what a consumer needs to react to — but a\n * consumer that renders the panel's content conditionally cannot use it to drop that content:\n * doing so empties the panel while it is still on screen. This is the moment to release it.\n * Under reduced motion, where there is nothing to animate, it follows {@link closed} immediately.\n */\n closeEnd = output<void>();\n\n /** Whether the panel is open. Goes false the moment closing starts, before the exit animation. */\n readonly isOpen = signal(false);\n\n /** Registered by the projected `DialogTitle` through {@link MODAL_LABEL}. */\n readonly titleId = signal<string | undefined>(undefined);\n\n /**\n * Whether the content is in the DOM. It outlives {@link isOpen} for the length of the exit\n * animation — unmounting on close would empty the panel while it is still sliding out — and is\n * cleared once the panel's own animations have settled, so the CSS remains the single source of\n * truth for how long that takes.\n */\n protected readonly isMounted = signal(false);\n\n /**\n * Set once the sheet is destroyed. The exit animation outlives {@link closed}, and a consumer that\n * tears the sheet down as soon as it hears `closed` (`DialogService.call()` does) leaves the\n * animation callback to run against a destroyed output — Angular reports that as NG0953.\n */\n private destroyed = false;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => (this.destroyed = true));\n }\n\n protected readonly variants = computed(() => cn(SHEET_CLASS, sheetVariants({ side: this.side(), size: this.size() }), this.class()));\n\n /** Opens the sheet. Alias of {@link showModal}, to read like the rest of the library. */\n open() {\n this.showModal();\n }\n\n showModal() {\n if (this.isOpen()) return;\n\n this.isMounted.set(true);\n this.isOpen.set(true);\n this.native().nativeElement.showModal();\n this.lockPageScroll();\n }\n\n /**\n * Closes the sheet and emits {@link closed}.\n *\n * Idempotent, and it has to be: the native `close()` below queues the browser's own `close`\n * event, which the host listener catches and calls back into here. Without the guard, `closed`\n * would emit twice, the second time with the default event type.\n */\n close(eventType: DialogEvent = \"dialog-close\") {\n if (!this.isOpen()) return;\n\n this.isOpen.set(false);\n this.native().nativeElement.close(eventType);\n this.afterClose();\n this.closed.emit(eventType);\n }\n\n cancel(eventType: DialogEvent = \"dialog-cancel\") {\n this.close(eventType);\n }\n\n /** The browser closed the dialog on its own — `Escape`, or a form submission. */\n protected onNativeClose() {\n if (!this.isOpen()) return;\n\n this.isOpen.set(false);\n this.afterClose();\n this.closed.emit(\"dialog-close\");\n }\n\n /**\n * A click on the scrim. The backdrop belongs to the `<dialog>` element, so a click on it has the\n * dialog itself as its target — anything inside the panel is a different element.\n */\n protected onDialogClick(event: MouseEvent) {\n if (!this.dismissible()) return;\n if (event.target === this.native().nativeElement) this.close();\n }\n\n /**\n * Waits for the exit animation, then lets the content leave the DOM.\n *\n * `getAnimations()` rather than a `transitionend` listener, and rather than a timer. A listener\n * misses the cases that matter: a transition that is *interrupted* emits `transitioncancel` and\n * never `transitionend`, and one that never starts — under `prefers-reduced-motion`, where the\n * durations are zero — emits nothing at all. Both were measured on a consumer, and both left the\n * content mounted for good inside a hidden panel, which in turn stopped the consumer from ever\n * releasing what it had rendered there.\n *\n * The animations are collected on the next frame, once the style change from `close()` has been\n * turned into running transitions. `allSettled` because a cancelled animation rejects its\n * `finished` promise, and a cancelled exit still means the panel is done.\n */\n private afterClose() {\n this.unlockPageScroll();\n\n const el = this.native().nativeElement;\n requestAnimationFrame(() => {\n const animations = el.getAnimations();\n if (!animations.length) {\n this.releaseContent();\n return;\n }\n\n Promise.allSettled(animations.map(animation => animation.finished)).then(() => this.releaseContent());\n });\n }\n\n /** Single exit point: the content leaves the DOM and consumers hear about it, once. */\n private releaseContent() {\n if (this.destroyed || !this.isMounted()) return;\n\n this.isMounted.set(false);\n this.closeEnd.emit();\n }\n\n /**\n * The rest of the document is inert for the keyboard and for assistive technology as soon as\n * `showModal()` is called, but a wheel or a touch drag still scrolls the page behind the panel.\n * This is the one place the sheet departs from `DialogComponent`, which locks nothing: a dialog\n * covers a small part of the viewport, a sheet covers a whole edge of it, and scrolling the page\n * underneath while reading a panel is disorienting.\n *\n * `overflow: hidden` alone removes the page's own scrollbar, which on a desktop browser (a real\n * scrollbar, not the overlay kind mobile OSes use) widens `document.documentElement.clientWidth`\n * by the scrollbar's track — a reflow that happens synchronously, inside this same call stack, one\n * line after `showModal()`. A consumer whose mobile/desktop split is a `width`-based media query\n * (`BreakpointObserverService`) reads that same, now-wider viewport: opening a sheet right at the\n * breakpoint can cross it and report \"no longer mobile\" a tick after this trigger's own click\n * opened it, tearing the `@if (isMobile())` branch — and this sheet with it — back down. The\n * compensating `padding-right` keeps the content box's width constant across the lock, so no\n * width-based media query ever observes a change from opening one.\n */\n private lockPageScroll() {\n if (openSheets++ > 0) return;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n previousBodyOverflow = document.body.style.overflow;\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.overflow = \"hidden\";\n if (scrollbarWidth > 0) {\n const currentPaddingRight = parseFloat(getComputedStyle(document.body).paddingRight) || 0;\n document.body.style.paddingRight = `${currentPaddingRight + scrollbarWidth}px`;\n }\n }\n\n private unlockPageScroll() {\n if (--openSheets > 0) return;\n openSheets = 0;\n document.body.style.overflow = previousBodyOverflow ?? \"\";\n document.body.style.paddingRight = previousBodyPaddingRight ?? \"\";\n previousBodyOverflow = null;\n previousBodyPaddingRight = null;\n }\n}\n","import { Component, computed, inject, input } from \"@angular/core\";\nimport { XMarkIcon } from \"../../icons/x-mark.icon\";\nimport { TooltipDirective } from \"../tooltip/tooltip\";\nimport { cn } from \"cn\";\n\nimport { DIALOG_REF } from \"../dialog/dialog.interface\";\nimport { SHEET_HEADER_CLASS } from \"./sheet.cva\";\n\n@Component({\n selector: \"SheetHeader\",\n standalone: true,\n imports: [XMarkIcon, TooltipDirective],\n template: `\n <div class=\"sheet-header-left\">\n <ng-content select=\"badge, Badge, .sheet-leading\" />\n <div class=\"sheet-title-wrap\">\n <ng-content select=\"DialogTitle\" />\n </div>\n </div>\n <!-- The label is an input, not a literal: a hard-coded English \"Close\" is unreadable to\n everyone else, and it is the only name this button has -- the icon is decorative and hidden\n from assistive technology. -->\n <button class=\"sheet-close\" type=\"button\" [attr.aria-label]=\"resolvedCloseLabel()\" [tooltip]=\"resolvedCloseLabel()\" (click)=\"sheet?.close()\">\n <XMarkIcon />\n <span class=\"sr-only\">{{ resolvedCloseLabel() }}</span>\n </button>\n <ng-content />\n `,\n host: {\n \"data-slot\": \"sheet-header\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SheetHeaderComponent {\n sheet = inject(DIALOG_REF, { optional: true });\n\n /**\n * Accessible name of the close button. Translate it. Left unset, it comes from the `closeLabel` of the\n * enclosing `Sheet` (the same one its floating close button uses), then falls back to the English \"Close\".\n */\n closeLabel = input<string>();\n protected readonly resolvedCloseLabel = computed(() => this.closeLabel() ?? this.sheet?.closeLabel?.() ?? \"Close\");\n class = input<string>();\n variants = computed(() => cn(SHEET_HEADER_CLASS, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { SHEET_BODY_CLASS } from \"./sheet.cva\";\n\n@Directive({\n selector: \"SheetBody\",\n standalone: true,\n host: {\n \"data-slot\": \"sheet-body\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SheetBodyComponent {\n class = input<string>(\"\");\n variants = computed(() => cn(SHEET_BODY_CLASS, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\nimport { SHEET_FOOTER_CLASS } from \"./sheet.cva\";\n\n@Directive({\n selector: \"SheetFooter\",\n standalone: true,\n host: {\n \"data-slot\": \"sheet-footer\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SheetFooterComponent {\n class = input<string>(\"\");\n variants = computed(() => cn(SHEET_FOOTER_CLASS, this.class()));\n}\n","import { DestroyRef, inject, signal, Service } from \"@angular/core\";\n\nconst MOBILE_BREAKPOINT = 768;\n\n// `(width < 768px)` is the exact negation of Tailwind's `md` (`min-width: 48rem`), so the signal and\n// the CSS can never disagree — including on fractional viewport widths, where a `max-width: 767px`\n// query leaves a gap. The range syntax is in the project's browser baseline (Chrome 104+).\nconst MOBILE_QUERY = `(width < ${MOBILE_BREAKPOINT}px)`;\n\n/**\n * Observes viewport breakpoints.\n *\n * Currently it only answers one question — is the viewport mobile-sized, i.e. narrower than the\n * `md` breakpoint (768px). The `isMobile` signal is safe to read from the first change-detection\n * pass onwards: the viewport is measured in the constructor, not after a render.\n *\n * @example\n * ```ts\n * private readonly breakpoints = inject(BreakpointObserverService);\n * protected readonly placement = computed(() => (this.breakpoints.isMobile() ? \"bottom\" : \"left\"));\n * ```\n */\n@Service()\nexport class BreakpointObserverService {\n private readonly _isMobile = signal(false);\n readonly isMobile = this._isMobile.asReadonly();\n\n constructor() {\n // `window.matchMedia?.()` covers both server-side rendering and the JSDOM builds that do not\n // implement it: the signal then stays at its default and no listener is attached.\n const query = typeof window === \"undefined\" ? undefined : window.matchMedia?.(MOBILE_QUERY);\n if (!query) return;\n\n // Read the viewport SYNCHRONOUSLY, in the constructor. The `@sinequa/ui` version this replaces\n // did it in an `afterNextRender` callback, which left `isMobile()` reporting `false` on a narrow\n // viewport until the next render — and when the service was first injected AFTER the last\n // render, that callback never ran at all, so neither the initial read nor the listener below\n // ever happened and only a resize could fix the state.\n this._isMobile.set(query.matches);\n query.addEventListener(\"change\", this.handleChange);\n inject(DestroyRef).onDestroy(() => query.removeEventListener(\"change\", this.handleChange));\n }\n\n private readonly handleChange = (event: MediaQueryListEvent): void => {\n this._isMobile.set(event.matches);\n };\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n// Slot marker classes — `data-slot` values and, for the item, a couple of genuine descendant hooks\n// (`[&_svg]`, `[&>badge]`) applied from the item's OWN style, never from an ancestor. See the\n// warning below `sidebarVariants` for why an ancestor-side `[&_.slot-class]` hook was the wrong\n// choice for anything that also needs to react to `data-collapsed`.\nexport const SIDEBAR_CLASS = \"sidebar\";\nexport const SIDEBAR_HEADER_CLASS = \"sidebar-header\";\nexport const SIDEBAR_CONTENT_CLASS = \"sidebar-content\";\nexport const SIDEBAR_FOOTER_CLASS = \"sidebar-footer\";\nexport const SIDEBAR_GROUP_CLASS = \"sidebar-group\";\nexport const SIDEBAR_GROUP_LABEL_CLASS = \"sidebar-group-label\";\nexport const SIDEBAR_ITEM_CLASS = \"sidebar-item\";\nexport const SIDEBAR_ITEM_LABEL_CLASS = \"sidebar-item-label\";\nexport const SIDEBAR_INSET_CLASS = \"sidebar-inset\";\n\n/**\n * Base style of each slot — a plain string, applied from that slot's OWN directive through ITS OWN\n * `cn(…, this.class())` call, never from an ancestor via a `[&_.slot-class]` descendant selector\n * (the way `ui/sheet/sheet.cva.ts` styles `.sheet-header`/`.sheet-body` from the root\n * `sheetVariants`, and the way an earlier version of this file styled every slot here).\n *\n * That indirection broke two things, both found while testing this component:\n *\n * 1. A consumer's own layout override on `sidebarHeader` (e.g. `class=\"flex-row\"`, to sit a logo\n * and a trigger side by side) competed against the exact same property set by the ancestor's\n * an equivalent `[&_.sidebar-header]` rule (`flex-col`), at equal CSS specificity — the winner came down to Tailwind's\n * internal rule order, not to `cn()`'s guarantees, and lost more often than not. Styling the slot\n * from its own directive keeps the override and the base in the same `cn()` call, where\n * tailwind-merge resolves the conflict deterministically (last one wins, cleanly, not \"wins if\n * the cascade happens to agree\").\n * 2. Every slot was unstyled inside the mobile `Sheet`, which never carried the ancestor's\n * `sidebarVariants()` class in the first place — only the desktop `<aside>` did. A slot styled\n * from its own directive does not depend on which root — `<aside>` or `Sheet`'s `<dialog>` —\n * happens to contain it.\n */\n/**\n * `overflow-y-auto` + `[scrollbar-width:thin]`/`[scrollbar-gutter:stable]` (the latter two are\n * genuine CSS properties, not Tailwind utilities — v4 arbitrary-property syntax) — repeated,\n * fully literally, in all three slots below, `sidebarContent` included, even though only\n * `sidebarContent` actually overflows. (Composing it from one shared constant via template-literal\n * interpolation instead would defeat Tailwind's static candidate scanner, which only ever sees\n * whatever is written as a literal string at the call site — see `SIDEBAR_ITEM_STYLE`'s own history\n * a few lines below for the exact same mistake, made once already in this file.)\n *\n * - `scrollbar-width: thin` — the default scrollbar this content area would get from\n * `overflow-y-auto` alone is the browser's full-width one, noticeably heavy against a panel this\n * narrow.\n * - `scrollbar-gutter: stable` — reserves that scrollbar's width whether or not the content\n * actually overflows enough to draw one — `overflow-y-auto` alone does not: a group short enough\n * to fit sits flush against the edge while one long enough to scroll pushes everything one\n * scrollbar-width narrower. In an icon-only rail, where every item is centered by width rather\n * than filling it, that shows up as a real, visible misalignment: `sidebarHeader`/`sidebarFooter`\n * never scroll, so without this they'd always center on the FULL available width, while\n * `sidebarContent` centers on a narrower one the moment it has enough items to actually scroll —\n * the two rails then simply don't line up. Applying the same reservation to all three, scrolling\n * or not, keeps that centered width identical everywhere.\n *\n * Both degrade gracefully in a browser that doesn't support them (still Safari, for\n * `scrollbar-gutter`, at the time of writing): scrolling itself never depends on either — only\n * their width/alignment polish does.\n *\n * `overflow-x-hidden` is NOT optional alongside `overflow-y-auto` here, even though nothing in\n * `sidebarHeader`/`sidebarFooter` ever needs to scroll horizontally: per the CSS overflow spec, a\n * `visible` `overflow-x` paired with a non-`visible` `overflow-y` computes to `auto`, not\n * `visible` — leaving it off caused a real, visible horizontal scrollbar to appear on these two\n * slots the moment the rail narrowed enough for their own content to overflow it sideways.\n *\n * `[scrollbar-color:color-mix(in_srgb,currentColor_40%,transparent)_transparent]` — without it, a\n * browser that honours `scrollbar-width: thin` still paints its OWN default track colour behind the\n * thumb (an opaque light-grey band in Chromium/Firefox), which reads as a stray filled bar against\n * the panel's own background the moment `scrollbar-gutter: stable` reserves that space on a slot\n * that isn't actually scrolling yet. Firefox's two-value shorthand (`<thumb> <track>`) needs the\n * space encoded as `_` — Tailwind's own convention for a literal space inside an arbitrary-property\n * value.\n *\n * The thumb is deliberately `currentColor`-derived, NOT one specific colour token: `sidebarVariants`\n * sets the panel's text colour to `--layer-page-font` by default, but a consuming app can override\n * it (via `<Sidebar class=\"text-(--layer-100-font)\">`, say) to match whichever `--layer-*` surface\n * it actually embeds the sidebar on — the whole point of this repo's `--layer-*-layer`/\n * `--layer-*-font`/`--layer-*-edge` family being scoped per surface rather than one fixed palette.\n * A hardcoded thumb colour (tried first: `--layer-page-edge`, then `--bg-neutral-muted`) only ever\n * looks right against the ONE background it happened to be picked for — `--layer-page-edge` nearly\n * vanished against this panel's own `grey-50` fill (the two sit one step apart on the grey scale),\n * and would have vanished just as easily the other way against a dark surface. `currentColor` sees\n * whatever `text-(--layer-*-font)` is actually in effect at the point of use, so `color-mix` (a\n * muted, 40%-opacity version of it) reads correctly whether that resolves to a dark grey on a light\n * layer or a light grey on a dark one, with no per-background token to keep re-picking by hand.\n */\nexport const SIDEBAR_HEADER_STYLE =\n \"flex shrink-0 flex-col gap-(--spacing-2xs) p-(--spacing-2xs) overflow-x-hidden overflow-y-auto [scrollbar-width:thin] [scrollbar-gutter:stable] [scrollbar-color:color-mix(in_srgb,currentColor_40%,transparent)_transparent]\";\n\nexport const SIDEBAR_CONTENT_STYLE =\n \"flex min-h-0 flex-1 flex-col gap-(--spacing-md) overflow-x-hidden overflow-y-auto p-(--spacing-2xs) [scrollbar-width:thin] [scrollbar-gutter:stable] [scrollbar-color:color-mix(in_srgb,currentColor_40%,transparent)_transparent]\";\n\n// `gap-(--spacing-4xs)`, matching `SIDEBAR_GROUP_STYLE` below: the footer holds a stack of items\n// directly (no `sidebarGroup` wrapper of its own), so the gap between them needs to read the same\n// as the gap between items inside any group — not `--spacing-2xs`, which is for spacing UNLIKE\n// items (e.g. header's logo + trigger), a wider gap that looked inconsistent stacked between rows.\nexport const SIDEBAR_FOOTER_STYLE =\n \"flex shrink-0 flex-col gap-(--spacing-4xs) border-t border-(--sidebar-border,var(--layer-page-edge)) p-(--spacing-2xs) overflow-x-hidden overflow-y-auto [scrollbar-width:thin] [scrollbar-gutter:stable] [scrollbar-color:color-mix(in_srgb,currentColor_40%,transparent)_transparent]\";\n\nexport const SIDEBAR_GROUP_STYLE = \"flex flex-col gap-(--spacing-4xs)\";\n\n/**\n * `group-data-[collapsed=true]:sr-only` reacts to the ROOT `<aside>`'s own `.group` + `data-collapsed`\n * (set only there — never on the mobile `Sheet`, which has no icon-only state of its own). It is\n * applied HERE, directly on the label's own style, because it is a genuine descendant of that root.\n *\n * Stacking the same rule on the ROOT instead, through a `[&_.sidebar-group-label]` indirection —\n * what an earlier version of this file did — cannot work: `group-data-[…]` requires the reacting\n * element to be a DESCENDANT of `.group`, and the root is not a descendant of itself. Verified\n * against the compiled CSS: the rule was present in the stylesheet and never matched anything.\n *\n * `text-(--sidebar-group-label,var(--font-neutral-muted))` — same `(--var,fallback)` mechanism as\n * every other themable colour in this file (see `SIDEBAR_ITEM_STYLE`'s doc comment). Deliberately\n * its OWN variable, not a percentage of `--sidebar-foreground`: this component's\n * `--sidebar-foreground` default and this label's own `--font-neutral-muted` default are two\n * genuinely different colours (not the same token at reduced alpha) — deriving one from the\n * other would change the label's current look the moment `--sidebar-foreground` alone got\n * overridden, exactly the kind of unrequested default-rendering change every other variable here\n * avoids. A dedicated variable keeps the two independently overridable while matching today's exact\n * rendering until either is set.\n */\nexport const SIDEBAR_GROUP_LABEL_STYLE =\n \"block px-(--spacing-2xs) pt-(--spacing-2xs) pb-(--spacing-4xs) text-(length:--size-xs) leading-(--line-height-1) font-(--weight-semibold) tracking-wide text-(--sidebar-group-label,var(--font-neutral-muted)) uppercase group-data-[collapsed=true]:sr-only\";\n\n/**\n * A real `<a>`, focusable and reachable by Tab like any link — no roving-tabindex widget semantics\n * are applied on purpose: a vertical nav of links is not an ARIA composite widget, and the native\n * tab order is exactly what a sighted keyboard user already expects here.\n *\n * Current-page and disabled styling target the native `aria-current`/`aria-disabled` attributes\n * directly (same as `LinkComponent`) — set them yourself, or let `routerLinkActive` manage\n * `aria-current`. `[&_svg]`/`[&>badge]` are genuine descendants of THIS element (the leading icon,\n * the trailing `<badge>`), which is why they are safe to express as `&`-relative selectors here,\n * unlike the ancestor-side indirection described above `SIDEBAR_GROUP_LABEL_STYLE`.\n *\n * Every colour below is read through Tailwind v4's `(--var,fallback)` syntax — e.g.\n * `bg-(--sidebar-accent,var(--bg-primary-lighter))` — rather than the galactik token directly, so a\n * consuming app can restyle this one property by declaring `--sidebar-accent` (on `<Sidebar>` or an\n * ancestor) without ever having to know the galactik token it defaults to. As long as nobody\n * declares it, `var()` falls back to that exact token, so this changes NO default rendering — only\n * `SIDEBAR_ITEM_STYLE` gets INHERITANCE-sensitive treatment: unlike `--sidebar-width`\n * (`SIDEBAR_HOST_CLASS`'s own doc comment), nothing here is read by a PARENT of the element that\n * would declare it, so there is no need to pre-declare a default anywhere — each site is\n * self-contained.\n *\n * The themable variables are `--sidebar-foreground`, `--sidebar-accent(-foreground)`,\n * `--sidebar-active(-foreground)` and `--sidebar-ring`, plus `--sidebar-accent-pressed`: hover and\n * mousedown are distinguished (a lighter hover, a slightly stronger press) — reusing\n * `--sidebar-accent` for both would leave the press colour stuck on its default the moment an app\n * overrides the hover one, an inconsistent, half-themed result. A dedicated variable keeps both\n * independently overridable while defaulting to the exact two-tone look.\n *\n * `rounded-(--sidebar-item-radius,var(--radius-sm))` is its OWN variable, separate from\n * `--sidebar-radius` (`sidebarVariants`/`sidebarInsetVariants`, `sidebar.cva.ts`): the panel's own\n * rounding needs a value that reads right on a whole card-sized shape, an item row needs one that\n * reads right on a `--row-height-md`-tall pill-adjacent shape — sharing one variable between the two\n * would make either the panel look too square or every item look like an actual pill the moment an\n * app picks a value for one that fits the other.\n *\n * `--sidebar-disabled` (the `aria-disabled` text colour): a custom\n * brand palette that overrides every other `--sidebar-*` variable here would otherwise leave a\n * disabled item rendering in a colour that has nothing to do with the rest of the theme (still\n * `--font-neutral-disabled`, a plain galactik grey) — `--sidebar-disabled` closes that one gap the\n * same way as every other variable above, falling back to that exact grey until an app sets it.\n */\nexport const SIDEBAR_ITEM_STYLE = [\n // `text-left`: a `<button>`'s own UA stylesheet default is `text-align: center` (unlike an `<a>`,\n // which has none) — Tailwind's preflight never resets it either. Without this, `button[sidebarItem]`\n // centred its label instead of starting it flush with the icon, the one visible difference from\n // `a[sidebarItem]` despite sharing this exact class list.\n \"group/item relative flex h-(--row-height-md) w-full items-center gap-(--spacing-2xs) text-left\",\n \"overflow-hidden rounded-(--sidebar-item-radius,var(--radius-sm)) px-(--spacing-2xs)\",\n // Icon-only mode: the label is `sr-only` (out of flow), leaving the icon as the row's only\n // visible child. A full-width, `--row-height-md`-tall row reads as a flattened bar once it's\n // carrying nothing but that one centered icon — pin the width to the same value as the height\n // instead, for a true square (the same icon-button proportions every trigger already has).\n // `self-center` is still needed alongside the fixed width: the row sits inside a `sidebarGroup`\n // flex column, which stretches a child of indefinite width by default — an explicit width alone\n // stops that stretch, but leaves the row at the cross axis's start rather than centered in it.\n \"group-data-[collapsed=true]:w-(--row-height-md) group-data-[collapsed=true]:self-center group-data-[collapsed=true]:justify-center\",\n \"cursor-pointer no-underline text-(length:--size-base) leading-(--line-height-3) text-(--sidebar-foreground,var(--font-neutral-base))\",\n \"transition-[background-color,color] duration-100 ease-out motion-reduce:transition-none\",\n \"focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--sidebar-ring,var(--stroke-focus))\",\n // Hover / active (mousedown) — not when the item is the current page, not when disabled\n \"not-aria-disabled:not-aria-[current=page]:hover:bg-(--sidebar-accent,var(--bg-primary-lighter))\",\n \"not-aria-disabled:not-aria-[current=page]:hover:text-(--sidebar-accent-foreground,var(--font-neutral-base))\",\n \"not-aria-disabled:not-aria-[current=page]:active:bg-(--sidebar-accent-pressed,var(--bg-primary-light))\",\n \"not-aria-disabled:not-aria-[current=page]:active:text-(--sidebar-accent-foreground,var(--font-neutral-base))\",\n \"aria-[current=page]:bg-(--sidebar-active,var(--bg-primary-light)) aria-[current=page]:font-(--weight-semibold) aria-[current=page]:text-(--sidebar-active-foreground,var(--font-primary-base))\",\n \"aria-disabled:pointer-events-none aria-disabled:text-(--sidebar-disabled,var(--font-neutral-disabled))\",\n // Leading icon: whatever galactik icon is projected first. No size override — a galactik icon's\n // own default (16px) already matches `--icon-md`; only `shrink-0` is needed.\n \"[&_svg]:shrink-0\",\n // Trailing `<badge>` (galactik `BadgeComponent`, projected as-is) — pinned to the end, and\n // dropped in icon-only mode: there is no room next to a bare icon for a pill.\n \"[&>badge]:ml-auto [&>badge]:shrink-0 group-data-[collapsed=true]:[&>badge]:hidden\"\n].join(\" \");\n\n/**\n * See {@link SIDEBAR_GROUP_LABEL_STYLE} for why `group-data-[collapsed=true]:sr-only` is applied\n * here, directly on the label's own style, and not on an ancestor.\n */\nexport const SIDEBAR_ITEM_LABEL_STYLE = \"min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap group-data-[collapsed=true]:sr-only\";\n\n/**\n * The `<aside>` sits absolutely positioned (`inset-y-0` + `left-0`/`right-0`) inside this wrapper,\n * rather than directly in the flex flow — the same split the reference implementation this\n * component replaced a hand-rolled version of (`usage-analytics`'s own sidebar) already used, for\n * the same reason: it is what lets the slot's *reserved* width animate independently of the panel's\n * own width/position, which the collapse behaviours in `sidebar.ts` need, differently.\n *\n * Deliberately `overflow-visible`, not `-hidden`: an earlier version clipped here, on the\n * assumption that the panel's width always exactly matched its slot's — true for the built-in\n * variants, but not for a `class` a CONSUMER adds on top (a margin, say, to detach the panel with\n * its own shadow — exactly what `floating` itself does). Margin does not shrink an explicit width,\n * so the panel then overflows its slot by that margin on the far side, and clipping cut the\n * corner off flat there instead of just leaving it be. Nothing relies on the clip: the offcanvas\n * variants translate fully clear of their slot when collapsed regardless of whether it clips, and\n * an expanded panel's width already matches its slot's (`sidebar.ts`'s `asideWidth`), `class`\n * overrides aside.\n */\nexport const SIDEBAR_SLOT_STYLE = \"relative h-full shrink-0 overflow-visible transition-[width] duration-200 ease-in-out motion-reduce:transition-none\";\n\n/**\n * Raw CSS, not a Tailwind utility: `visibility` needs `transition-behavior: allow-discrete`, which\n * has no Tailwind class, and which a plain `transition-[width,transform,visibility]` utility cannot\n * express either (that only sets *which* properties transition, not the discrete-vs-continuous\n * behaviour of one of them). This is the same technique — and the same reason — `ui/sheet/sheet.ts`\n * already uses for its own `display`/`overlay` transitions; see its own comment for the full detail\n * on why a browser-native discrete transition beats a hand-rolled timer.\n *\n * The payoff here: an offcanvas panel's `visibility` flips to `hidden` only once ITS OWN slide\n * finishes (never cutting the animation short), and back to `visible` IMMEDIATELY when re-opening\n * (so the slide-in is visible from its first frame) — entirely through the CSS transition spec's\n * own rules for a discrete property, no JavaScript timer needed to time it by hand. `sidebar.ts`\n * only has to bind `[style.visibility]` to whether the panel is off-screen; the browser does the\n * rest. Applied via the component's `styles: […]`, the same as `SheetComponent`, since Tailwind has\n * no arbitrary-property syntax for `transition-behavior`.\n */\nexport const SIDEBAR_ASIDE_TRANSITION_STYLE = `\n aside {\n transition:\n width 200ms ease-in-out,\n transform 200ms ease-in-out,\n visibility 200ms allow-discrete;\n }\n @media (prefers-reduced-motion: reduce) {\n aside {\n transition-duration: 0s;\n }\n }\n`;\n\n/**\n * Declares `--sidebar-width`/`--sidebar-width-icon` — applied to `SidebarComponent`'s OWN host\n * (`sidebar.ts`), never to the `<aside>` (`sidebarVariants`, below) or to `SIDEBAR_SLOT_STYLE`'s\n * slot `<div>`.\n *\n * That placement is load-bearing, not stylistic: `sidebar.ts`'s `slotWidth()` reads\n * `var(--sidebar-width)` through `[style.width]` on the SLOT DIV, which is the `<aside>`'s OWN\n * PARENT. CSS custom properties inherit downward only — a value declared on a descendant (the\n * `<aside>`) is never visible to that descendant's own ancestor. Declaring it there once made the\n * slot's `width: var(--sidebar-width)` resolve to nothing everywhere (invalid at computed-value\n * time falls back to `width`'s initial value, `auto`), and since the `<aside>` inside it is\n * `position: absolute` — removed from flow, so it contributes nothing to the slot's own\n * shrink-to-fit sizing — the slot collapsed to a real `0px`. The reserved layout space silently\n * vanished while the (still absolutely positioned, still its own explicit width) `<aside>` kept\n * rendering exactly where it always had, painting over the sibling content that had just been\n * handed the space the slot no longer reserved (positioned descendants always paint after in-flow\n * siblings in the same stacking context, regardless of DOM order) — a real, visible full overlap in\n * an app shell, easy to miss in a short-text sandbox demo where the `<aside>`'s own opaque\n * background happens to sit on top of and hide it.\n *\n * `SidebarComponent`'s host is `display: contents` (own box removed, itself out of layout) but\n * still an ancestor for INHERITANCE purposes — exactly what `display: contents` is for — so\n * declaring these two here reaches both the slot `<div>` and the `<aside>` inside it, and the\n * mobile `Sheet` branch, from one place.\n */\nexport const SIDEBAR_HOST_CLASS = \"contents [--sidebar-width-icon:3.5rem] [--sidebar-width:16rem]\";\n\n/**\n * `<Sidebar>` root — surface, border/variant treatment and the collapsed-state marker only. No\n * slot styling lives here (see {@link SIDEBAR_HEADER_STYLE} and its neighbours for why).\n *\n * The panel width itself is NOT a variant: it is read from `--sidebar-width` /\n * `--sidebar-width-icon`, two custom properties defaulted on the component's own host\n * ({@link SIDEBAR_HOST_CLASS} — read its doc comment before moving them) and meant to be\n * overridden by the consuming application (a panel width is a layout concern of the app embedding the sidebar, not a design token, so\n * it does not belong in the galactik token sheet).\n *\n * Collapsing behaves differently depending on `variant`, computed in `sidebar.ts`\n * (`slotWidth`/`asideWidth`/`translateStyle`) rather than expressed as CVA compound variants — the\n * logic genuinely branches, not merely restyles:\n *\n * - `sidebar` narrows to `--sidebar-width-icon` — an icon rail, still fully visible and usable. Its\n * slot reserves that width in the layout, so sibling content shares the row with it.\n * - `inset` slides the WHOLE panel off-screen (`translateX`) instead, reserved width collapsing to\n * `0px` right along with it — nothing narrows, the panel disappears entirely, the way an `offcanvas`\n * panel works. Its slot still reserves `--sidebar-width` while\n * expanded, though: `sidebarInset` needs that room to look encased next to it.\n * - `floating` also slides off-screen the same way, but its slot reserves NOTHING, ever — not even\n * expanded. A floating panel does not push sibling content over, it sits on top of it: the slot\n * being 0-width is what leaves that content the full row to itself, and `z-10` (below) plus the\n * the panel painting above a plain static sibling by default is what keeps it visually on top.\n *\n * `SidebarComponent` marks the `<aside>` `inert` while an offcanvas variant (`floating`/`inset`) is\n * off-screen: without it, its content — a trigger inside `sidebarHeader` included — would still be\n * reachable by keyboard even though invisible, a focus trap on unseen content. An app using either\n * with collapse therefore needs a trigger placed OUTSIDE the `<Sidebar>` (same `[sidebar]` binding\n * the mobile drawer already requires, see `sidebar-trigger.ts`) — the one inside `sidebarHeader`\n * becomes unreachable once collapsed.\n *\n * `data-collapsed` + the literal `group` class, both applied only on the desktop `<aside>` (never\n * on the mobile `Sheet`, which has no icon-only state), are what `SIDEBAR_GROUP_LABEL_STYLE` /\n * `SIDEBAR_ITEM_LABEL_STYLE` / `SIDEBAR_ITEM_STYLE`'s `group-data-[collapsed=true]:` rules react to.\n *\n * `bg-(--sidebar,var(--layer-page-layer))` / `text-(--sidebar-foreground,var(--layer-page-font))` /\n * `border-(--sidebar-border,var(--layer-page-edge))` / `floating`'s own\n * `rounded-(--sidebar-radius,var(--radius-lg))` (below) read through the same `(--var,fallback)`\n * mechanism as `SIDEBAR_ITEM_STYLE` — see its own doc comment for why a fallback at each call site,\n * not a pre-declared default, is enough here (nothing on THIS element is read by a parent of it,\n * unlike `--sidebar-width`). `--sidebar-radius`\n * also drives `sidebarInsetVariants`'s own rounding (`sidebar-inset.ts`), so the panel and the main\n * content wrapper it sits next to round by the same amount without having to set two variables for\n * one visual corner. `SIDEBAR_ITEM_STYLE`'s own item rows have a SEPARATE, smaller\n * `--sidebar-item-radius` instead of sharing this one — a radius large enough to look right on the\n * whole panel would round a compact item row into more of a pill than a rectangle.\n */\nexport const sidebarVariants = cva(\n [\n \"group absolute inset-y-0 flex min-w-0 flex-col overflow-hidden\",\n \"bg-(--sidebar,var(--layer-page-layer)) text-(--sidebar-foreground,var(--layer-page-font))\"\n // No `transition-*` utility here — see `SIDEBAR_ASIDE_TRANSITION_STYLE`, which needs raw CSS.\n // `--sidebar-width`/`--sidebar-width-icon` themselves are NOT declared here — see\n // `SIDEBAR_HOST_CLASS` in this file for why they have to live on an ANCESTOR of this element\n // instead.\n ],\n {\n variants: {\n /** Edge the panel is anchored to — also the side the mobile `<Sheet>` slides in from. */\n side: {\n left: \"left-0 border-r border-(--sidebar-border,var(--layer-page-edge))\",\n right: \"right-0 border-l border-(--sidebar-border,var(--layer-page-edge))\"\n },\n /**\n * `sidebar` sits flush against the viewport edge, filled with its own surface tone, sharing the\n * row with sibling content (its slot reserves its width). `floating` detaches it with a\n * margin, a border and a shadow, and — unlike the other two — floats ON TOP of sibling content\n * instead of sharing the row with it (`z-10`; its slot reserves no space at all, see\n * `sidebarVariants`'s own doc comment above). `inset` draws no border AND no fill of its own —\n * the panel look comes entirely from the app's main content wrapper instead, once it carries\n * `sidebarInset` (`sidebar-inset.ts`); the sidebar itself sits directly on the page background.\n */\n variant: {\n sidebar: \"\",\n floating:\n \"z-10 m-(--spacing-2xs) rounded-(--sidebar-radius,var(--radius-lg)) border border-(--sidebar-border,var(--layer-page-edge)) shadow-(--shadow-2)\",\n // `bg-transparent` overrides the base `bg-(--sidebar,var(--layer-page-layer))` fill (both flow\n // through the same outer `cn()` at the call site, which resolves the conflict deterministically,\n // this one winning by being the later one) — an inset sidebar sits directly on the page's own\n // background; only `sidebarInset`, on the main content wrapper, gets a surface of its own.\n inset: \"border-0 bg-transparent\"\n }\n },\n defaultVariants: {\n side: \"left\",\n variant: \"sidebar\"\n }\n }\n);\n\nexport type SidebarVariants = VariantProps<typeof sidebarVariants>;\n\n/**\n * `sidebarInset` — the app's main content wrapper, styled to look encased when the sibling\n * `<Sidebar variant=\"inset\">` gives it room to. Applies no layout of its own beyond that: it does\n * not know where the sidebar sits, so it cannot supply the margin that creates the inset look —\n * that margin is the consuming app's own layout, `sidebar-inset` only supplies the surface.\n *\n * `rounded-(--sidebar-radius,var(--radius-lg))` shares the SAME variable as `<Sidebar\n * variant=\"floating\">`'s own rounding (`sidebarVariants`, above) — one custom property for what\n * reads as one visual corner treatment across the whole feature, not two to keep in sync by hand.\n */\nexport const sidebarInsetVariants = cva([\n \"flex min-w-0 flex-1 flex-col overflow-hidden\",\n \"bg-(--layer-page-layer) text-(--layer-page-font)\",\n \"rounded-(--sidebar-radius,var(--radius-lg)) shadow-(--shadow-1)\"\n]);\n\nexport type SidebarInsetVariants = VariantProps<typeof sidebarInsetVariants>;\n","import { InjectionToken, Signal } from \"@angular/core\";\n\n/**\n * Ce qu'un `<SidebarTrigger>` — ou tout autre consommateur — a besoin de connaître du `<Sidebar>`\n * auquel il appartient.\n */\nexport interface SidebarRef {\n readonly collapsed: Signal<boolean>;\n readonly isMobile: Signal<boolean>;\n /** Whether the panel is fully visible right now — `!collapsed()` on desktop, the mobile drawer's own open state otherwise. */\n readonly expanded: Signal<boolean>;\n toggle(): void;\n open(): void;\n close(): void;\n}\n\n// Fichier séparé à dessein : il casse la dépendance circulaire SidebarTrigger ↔ Sidebar, comme\n// RESIZABLE_PANEL_GROUP le fait entre resizable-handle et resizable-panel-group.\nexport const SIDEBAR_REF = new InjectionToken<SidebarRef>(\"SIDEBAR_REF\");\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { ChangeDetectionStrategy, Component, computed, inject, input, model, TemplateRef, viewChild } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { BreakpointObserverService } from \"../../services/breakpoint-observer.service\";\nimport { SheetComponent } from \"../sheet/sheet\";\nimport { SIDEBAR_ASIDE_TRANSITION_STYLE, SIDEBAR_CLASS, SIDEBAR_HOST_CLASS, SIDEBAR_SLOT_STYLE, sidebarVariants, type SidebarVariants } from \"./sidebar.cva\";\nimport { SIDEBAR_REF, type SidebarRef } from \"./sidebar.token\";\n\n/**\n * `<Sidebar>` — application navigation panel: collapsible on desktop, a native `<dialog>` drawer\n * (`Sheet`) below the mobile breakpoint. Desktop collapse itself depends on `variant`: `sidebar`\n * narrows to an icon rail, `floating`/`inset` instead slide the whole panel off-screen (see\n * `sidebar.cva.ts` and the `offcanvas`/`offscreen` computed signals below for the full reasoning,\n * including why the latter needs a second trigger placed outside this component).\n *\n * Composed of `sidebar-header` / `sidebar-content` / `sidebar-footer` (plain marker directives the\n * consumer poses on whichever native element fits — typically a `<nav>` for `sidebar-content`,\n * which is where `SidebarGroupComponent` / `SidebarItemDirective` belong), projected once and\n * rendered inside either an `<aside>` (desktop) or a `Sheet` (mobile) — never both, so there is only\n * ever one copy of the navigation in the DOM.\n *\n * Persistence of `collapsed` (cookie, `localStorage`…) is deliberately left to the consuming\n * application: galactik is presentation-only and has no side effects of its own (see\n * `CONTRIBUTING.md` §1) — bind `[(collapsed)]` to whatever the app already uses.\n *\n * @example\n * ```html\n * <Sidebar [(collapsed)]=\"collapsed\" aria-label=\"Navigation principale\">\n * <div sidebarHeader>\n * <img src=\"logo.svg\" alt=\"\" />\n * <!-- Resolves its `<Sidebar>` through DI (SIDEBAR_REF) — no explicit binding needed. -->\n * <button sidebarTrigger type=\"button\" aria-label=\"Replier la navigation\">\n * <ChevronsLeftIcon />\n * </button>\n * </div>\n * <nav sidebarContent aria-label=\"Navigation principale\">\n * <div sidebarGroup>\n * <span sidebarGroupLabel>Général</span>\n * <a sidebarItem routerLink=\"/home\" routerLinkActive [ariaCurrentWhenActive]=\"'page'\">\n * <HouseIcon />\n * <span sidebarItemLabel>Accueil</span>\n * </a>\n * </div>\n * </nav>\n * </Sidebar>\n * ```\n */\n@Component({\n selector: \"Sidebar\",\n exportAs: \"sidebar\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, SheetComponent],\n providers: [{ provide: SIDEBAR_REF, useExisting: SidebarComponent }],\n // The component owns two mutually exclusive roots (`<aside>` or `Sheet`) picked at render time —\n // its own host stays out of layout, exactly like `SheetComponent` does for the same reason.\n // `SIDEBAR_HOST_CLASS` also carries `--sidebar-width`/`--sidebar-width-icon` — see its own doc\n // comment in `sidebar.cva.ts` for why they have to live here rather than on the `<aside>` itself.\n host: { class: SIDEBAR_HOST_CLASS },\n styles: [SIDEBAR_ASIDE_TRANSITION_STYLE],\n template: `\n @if (isMobile()) {\n <!-- size=\"full\" (w-dvw): a navigation drawer isn't a fixed-width reading panel — Sheet's own\n default (\"md\") is a fixed rem width that can exceed a narrow phone's viewport, pushing the\n far edge of the header (the in-panel collapse trigger, sidebarHeader) off-screen along with\n it. A drawer that covers the whole width never has an edge to push past.\n\n Same surface as the desktop <aside> (sidebarVariants' own base classes) — a Sheet defaults\n to the page's own background (sheet.cva.ts), which read as a jarring surface swap for\n content that is otherwise identical, panel and mobile drawer alike. -->\n <Sheet #mobileSheet [side]=\"side()\" size=\"full\" [ariaLabel]=\"ariaLabel()\" class=\"bg-(--sidebar,var(--layer-page-layer)) text-(--sidebar-foreground,var(--layer-page-font))\">\n <ng-container *ngTemplateOutlet=\"body\" />\n </Sheet>\n } @else {\n <div [class]=\"slotClass\" [style.width]=\"slotWidth()\">\n <aside\n [class]=\"variants()\"\n [style.width]=\"asideWidth()\"\n [style.transform]=\"translateStyle()\"\n [attr.data-collapsed]=\"collapsed() || null\"\n [attr.data-side]=\"side()\"\n [attr.data-variant]=\"variant()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.inert]=\"offscreen() ? '' : null\"\n [style.visibility]=\"offscreen() ? 'hidden' : 'visible'\">\n <ng-container *ngTemplateOutlet=\"body\" />\n </aside>\n </div>\n }\n <ng-template #body>\n <ng-content select=\"[sidebarHeader]\" />\n <ng-content select=\"[sidebarContent]\" />\n <ng-content select=\"[sidebarFooter]\" />\n </ng-template>\n `\n})\nexport class SidebarComponent implements SidebarRef {\n /** Replié/déplié, contrôlé par le consommateur — aucune persistance intégrée (cf. doc de classe). */\n readonly collapsed = model(false);\n\n /** Bord d'ancrage, en desktop comme pour le tiroir mobile. */\n readonly side = input<SidebarVariants[\"side\"]>(\"left\");\n\n /**\n * `sidebar` = collée au bord ; `floating` = panneau détaché avec marge/ombre ; `inset` = pas de\n * bordure propre, le contenu principal de l'app (marqué `sidebarInset`, `sidebar-inset.ts`) prend\n * l'apparence encastrée à la place.\n */\n readonly variant = input<SidebarVariants[\"variant\"]>(\"sidebar\");\n\n /**\n * Nom accessible du panneau. Porté par le `<aside>` en desktop ; c'est le seul nom du tiroir\n * `<dialog>` en mode mobile (`Sheet` l'exige, cf. `ui/sheet/sheet.ts`). Pas de valeur par défaut :\n * un libellé anglais générique oublié en production serait un défaut\n * d'accessibilité silencieux (nom non traduit lu par les lecteurs d'écran).\n */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n readonly class = input<string>();\n\n private readonly breakpoints = inject(BreakpointObserverService);\n readonly isMobile = this.breakpoints.isMobile;\n\n private readonly mobileSheet = viewChild<SheetComponent>(\"mobileSheet\");\n\n /** Visible actuellement, quel que soit le mode — `!collapsed()` en desktop, l'état du tiroir en mobile. */\n readonly expanded = computed(() => (this.isMobile() ? (this.mobileSheet()?.isOpen() ?? false) : !this.collapsed()));\n\n protected readonly body = viewChild.required<TemplateRef<unknown>>(\"body\");\n\n protected readonly variants = computed(() => cn(SIDEBAR_CLASS, sidebarVariants({ side: this.side(), variant: this.variant() }), this.class()));\n\n protected readonly slotClass = SIDEBAR_SLOT_STYLE;\n\n /**\n * `sidebar` narrows to an icon rail (still visible/usable) ; `floating`/`inset` slide the whole\n * panel off-screen instead — nothing narrows, see `sidebar.cva.ts` for why these are two genuinely\n * different behaviours rather than one restyled by variant.\n */\n private readonly offcanvas = computed(() => this.variant() !== \"sidebar\");\n\n /**\n * Space RESERVED for the panel in the layout. `sidebar` shrinks it to icon width when collapsed;\n * `inset` collapses it to nothing (so `sidebarInset` can reclaim the room). `floating` reserves\n * NOTHING, ever, expanded or not: a floating panel does not push sibling content over, it floats\n * on top of it — see `sidebarVariants`'s own doc comment in `sidebar.cva.ts`.\n */\n protected readonly slotWidth = computed(() => {\n if (this.variant() === \"floating\") return \"0px\";\n if (this.offcanvas()) return this.collapsed() ? \"0px\" : \"var(--sidebar-width)\";\n return this.collapsed() ? \"var(--sidebar-width-icon)\" : \"var(--sidebar-width)\";\n });\n\n /** The panel's OWN width — narrows together with the slot in icon mode ; stays full width off-screen, since it slides rather than shrinks. */\n protected readonly asideWidth = computed(() => (this.offcanvas() ? \"var(--sidebar-width)\" : this.slotWidth()));\n\n /**\n * Slide transform for `floating`/`inset` — a no-op (`sidebar` never slides; nor does an expanded\n * panel of any variant) resolves to the CSS keyword `none`, NOT `translateX(0)`.\n *\n * That distinction is load-bearing, not cosmetic: per the CSS Transforms spec, ANY `transform`\n * value other than `none` — `translateX(0)` included, despite moving nothing — establishes a new\n * containing block for `position: fixed`/`absolute` descendants. A consuming app routinely\n * projects exactly that kind of descendant inside `sidebarContent`/`sidebarFooter` (a `Menu`, a\n * `Popover`, a `Dialog` — the galactik ones all render `position: fixed`, computed by floating-ui\n * under the assumption that \"fixed\" means \"relative to the real viewport\"). With `translateX(0)`\n * permanently active on `<aside>` (every variant, whenever not mid-slide), any such element ends\n * up positioned relative to the SIDEBAR'S OWN, much narrower box instead — floating-ui still\n * measures real viewport space for its `flip`/`shift` decisions, so the placement it computes gets\n * applied against the wrong containing block and renders somewhere else entirely, often looking\n * like it \"flipped\" to the wrong side no matter which `placement` is requested. `none` avoids\n * creating that containing block in the first place, for every variant that isn't actively\n * sliding — which is the overwhelming majority of the time, `sidebar` (the default) always\n * included, since it never slides at all.\n *\n * `translateX(±100%)` alone is NOT enough for the actual slide, once one variant needs it: that\n * percentage is relative to the panel's OWN width, not its actual distance from the edge — which\n * is greater by however much `floating`'s own `m-(--spacing-2xs)` margin adds, and, in turn, by\n * whatever margin/padding the app's own layout happens to put around the `<Sidebar>`. `-100%` alone\n * left exactly that much of the panel's far edge still on screen once collapsed. The extra `2rem`\n * overshoots on purpose: the panel is already outside the visible area by the time `-100%` is\n * reached, so exactly how much further past that point it travels is invisible — a fixed, generous\n * buffer costs nothing and, unlike hard-coding a specific margin value, keeps working if that\n * margin is customised via `class`.\n */\n protected readonly translateStyle = computed(() => {\n if (!this.offcanvas() || !this.collapsed()) return \"none\";\n return this.side() === \"right\" ? \"translateX(calc(100% + 2rem))\" : \"translateX(calc(-100% - 2rem))\";\n });\n\n /**\n * Whether the panel is currently off-screen (`floating`/`inset`, collapsed). Drives two things:\n *\n * - `inert`: without it, everything inside — a trigger placed in `sidebarHeader` included —\n * would still be reachable by keyboard even though invisible, a focus trap on content nobody\n * can see. An app using `floating`/`inset` therefore needs a SECOND trigger outside the\n * `<Sidebar>` to re-open it once collapsed (the same `[sidebar]` binding the mobile drawer\n * already requires).\n * - `visibility`: `translateStyle`'s overshoot only has to look fully gone DURING the slide — it\n * cannot promise clearing every margin/padding an app's own layout might add around the panel,\n * however generous. `SIDEBAR_ASIDE_TRANSITION_STYLE` (`sidebar.cva.ts`) is what turns this\n * boolean into the actual guarantee: `visibility` transitions with `allow-discrete`, so the\n * panel only actually leaves the render tree once the slide's own duration has elapsed (never\n * cutting it short) — and comes back the instant this flips to `false`, so the slide-in is\n * visible from its very first frame. No JavaScript timer involved.\n */\n protected readonly offscreen = computed(() => this.offcanvas() && this.collapsed());\n\n toggle(): void {\n if (this.isMobile()) {\n if (this.expanded()) this.close();\n else this.open();\n return;\n }\n this.collapsed.set(!this.collapsed());\n }\n\n open(): void {\n if (this.isMobile()) {\n this.mobileSheet()?.open();\n return;\n }\n this.collapsed.set(false);\n }\n\n close(): void {\n if (this.isMobile()) {\n this.mobileSheet()?.close();\n return;\n }\n this.collapsed.set(true);\n }\n}\n","import { computed, Directive, inject, input } from \"@angular/core\";\n\nimport { SIDEBAR_REF, type SidebarRef } from \"./sidebar.token\";\n\n/**\n * `<button sidebarTrigger>` — toggles a `<Sidebar>` (desktop collapse, or the mobile drawer,\n * automatically — see `SidebarComponent.toggle()`).\n *\n * No baked icon: this directive renders nothing of its own —\n * project whatever icon fits the app (a hamburger for the mobile drawer, chevrons for the desktop\n * collapse…), it never has to be the same one.\n *\n * Resolves the `<Sidebar>` it controls through DI ({@link SIDEBAR_REF}) by default, which only works\n * when the button sits somewhere inside that `<Sidebar>`'s projected content (`sidebarHeader`,\n * typically) — the same relationship `ListItemComponent` has with its `<List>` via `LIST_REF`. That\n * placement is exactly what breaks on mobile: the whole panel, trigger included, lives inside the\n * drawer's own `<dialog>`, closed by default — there is nothing on screen to open it from. Pass\n * `[sidebar]` explicitly to place a trigger OUTSIDE the `<Sidebar>` instead (the app's own top bar,\n * typically), using the `#ref=\"sidebar\"` template reference `SidebarComponent` exports.\n *\n * @example Inside the sidebar (desktop collapse)\n * ```html\n * <button sidebarTrigger type=\"button\" [attr.aria-label]=\"sidebar.collapsed() ? expandLabel : collapseLabel\">\n * <ChevronsLeftIcon />\n * </button>\n * ```\n *\n * @example Outside the sidebar (opens the mobile drawer)\n * ```html\n * <Sidebar #sidebar=\"sidebar\">…</Sidebar>\n * <button sidebarTrigger [sidebar]=\"sidebar\" type=\"button\" aria-label=\"Open navigation\">\n * <BarsIcon />\n * </button>\n * ```\n */\n@Directive({\n selector: \"button[sidebarTrigger]\",\n standalone: true,\n host: {\n \"[attr.aria-label]\": \"ariaLabel() ?? null\",\n \"[attr.aria-expanded]\": \"resolvedSidebar()?.expanded() ?? null\",\n \"(click)\": \"resolvedSidebar()?.toggle()\"\n }\n})\nexport class SidebarTriggerDirective {\n /**\n * Nom accessible du bouton. Pas de valeur par défaut : c'est en général le seul nom du bouton\n * (icône seule), et un libellé générique anglais oublié en production serait un défaut\n * d'accessibilité silencieux (nom non traduit lu par les lecteurs d'écran).\n */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: \"aria-label\" });\n\n /** `<Sidebar>` à contrôler — nécessaire uniquement quand ce bouton n'est pas projeté dedans (cf. doc de classe). */\n readonly sidebar = input<SidebarRef>();\n\n private readonly injectedSidebar = inject(SIDEBAR_REF, { optional: true });\n\n protected readonly resolvedSidebar = computed(() => this.sidebar() ?? this.injectedSidebar);\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { SIDEBAR_HEADER_CLASS, SIDEBAR_HEADER_STYLE } from \"./sidebar.cva\";\n\n/**\n * `[sidebarHeader]` — top slot of a `<Sidebar>` (logo, `sidebarTrigger`…). Pose it on whichever\n * native element fits (a `<div>` is the usual choice) — styling lives centrally in `sidebar.cva.ts`,\n * this directive only tags the element so that CSS can find it.\n */\n@Directive({\n selector: \"[sidebarHeader]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-header\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SidebarHeaderDirective {\n readonly class = input<string>();\n protected readonly variants = computed(() => cn(SIDEBAR_HEADER_CLASS, SIDEBAR_HEADER_STYLE, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { SIDEBAR_CONTENT_CLASS, SIDEBAR_CONTENT_STYLE } from \"./sidebar.cva\";\n\n/**\n * `[sidebarContent]` — scrollable middle slot of a `<Sidebar>`, holding the `sidebarGroup`s. Pose it\n * on a `<nav>` with its own `aria-label` when the sidebar carries more than navigation (a header\n * logo, a footer user menu…) so assistive technology can tell the navigation landmark apart from\n * the rest of the panel — a plain HTML attribute, nothing this directive needs to own.\n */\n@Directive({\n selector: \"[sidebarContent]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-content\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SidebarContentDirective {\n readonly class = input<string>();\n protected readonly variants = computed(() => cn(SIDEBAR_CONTENT_CLASS, SIDEBAR_CONTENT_STYLE, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { SIDEBAR_FOOTER_CLASS, SIDEBAR_FOOTER_STYLE } from \"./sidebar.cva\";\n\n/**\n * `[sidebarFooter]` — bottom slot of a `<Sidebar>` (user menu, help/admin links…). Pose it on\n * whichever native element fits — styling lives centrally in `sidebar.cva.ts`.\n */\n@Directive({\n selector: \"[sidebarFooter]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-footer\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SidebarFooterDirective {\n readonly class = input<string>();\n protected readonly variants = computed(() => cn(SIDEBAR_FOOTER_CLASS, SIDEBAR_FOOTER_STYLE, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { SIDEBAR_GROUP_CLASS, SIDEBAR_GROUP_LABEL_CLASS, SIDEBAR_GROUP_LABEL_STYLE, SIDEBAR_GROUP_STYLE } from \"./sidebar.cva\";\n\n/** `[sidebarGroup]` — one section of `sidebarContent` (a heading plus its `sidebarItem`s). */\n@Directive({\n selector: \"[sidebarGroup]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-group\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SidebarGroupDirective {\n readonly class = input<string>();\n protected readonly variants = computed(() => cn(SIDEBAR_GROUP_CLASS, SIDEBAR_GROUP_STYLE, this.class()));\n}\n\n/**\n * `[sidebarGroupLabel]` — heading of a `sidebarGroup`. Stays in the DOM once the sidebar is\n * icon-only (`sr-only`, not removed): a screen-reader user still hears which section an item\n * belongs to even though sighted users no longer see the heading text.\n */\n@Directive({\n selector: \"[sidebarGroupLabel]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-group-label\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SidebarGroupLabelDirective {\n readonly class = input<string>();\n protected readonly variants = computed(() => cn(SIDEBAR_GROUP_LABEL_CLASS, SIDEBAR_GROUP_LABEL_STYLE, this.class()));\n}\n","import { booleanAttribute, computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { SIDEBAR_ITEM_CLASS, SIDEBAR_ITEM_LABEL_CLASS, SIDEBAR_ITEM_LABEL_STYLE, SIDEBAR_ITEM_STYLE } from \"./sidebar.cva\";\n\n/**\n * `<a sidebarItem>` — one entry of a `sidebarGroup`. A real, attribute-selected anchor — never an\n * element-tag component standing in for it — so it composes with `routerLink`/`routerLinkActive`\n * exactly as any other link would:\n *\n * ```html\n * <a sidebarItem routerLink=\"/home\" routerLinkActive [ariaCurrentWhenActive]=\"'page'\">\n * <HouseIcon />\n * <span sidebarItemLabel>Accueil</span>\n * <badge size=\"xs\">3</badge>\n * </a>\n * ```\n *\n * As an attribute directive (not an element-tag one), it can be placed directly on an `<a>`: no\n * `aria-hidden` button duplicated next to a real `sr-only` link is needed. The element the user\n * tabs to, clicks, and the one the router targets, are the same element.\n *\n * The current-page highlight is driven by the native `aria-current=\"page\"` attribute (see\n * `sidebar.cva.ts`) — set it yourself, or let `routerLinkActive` manage it, same as `LinkComponent`.\n * A leading icon is just the first projected element; sizing applies to whatever galactik icon\n * comes first. A trailing `<badge>` (galactik's own `BadgeComponent`, projected as-is — no dedicated\n * \"sidebar badge\" component needed) is pinned to the end and hidden once the sidebar goes icon-only.\n *\n * `button[sidebarItem]` — same visual language and `disabled` handling, for a row that is an ACTION\n * rather than a navigation destination: opening a menu, a popover, or a dialog. Nothing here is\n * link-specific (`aria-disabled`/`tabindex`, not `routerLink`/`aria-current`), so the directive\n * applies identically to either host; it never touches interaction semantics — `(click)`,\n * `[popovertarget]`, `[menuTrigger]`, `type=\"button\"` (Tailwind's preflight already resets a\n * `<button>`'s native appearance, so `SIDEBAR_ITEM_STYLE` needs no button-specific adjustment) are\n * all still the consumer's own responsibility, same as `SidebarTriggerDirective` never sets `type`\n * either:\n *\n * ```html\n * <button type=\"button\" sidebarItem (click)=\"openSettings()\">\n * <GearIcon />\n * <span sidebarItemLabel>Réglages</span>\n * </button>\n * ```\n */\n@Directive({\n selector: \"a[sidebarItem], button[sidebarItem]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-item\",\n \"[class]\": \"variants()\",\n \"[attr.aria-disabled]\": \"disabled() ? 'true' : null\",\n \"[attr.tabindex]\": \"disabled() ? -1 : null\"\n }\n})\nexport class SidebarItemDirective {\n readonly class = input<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n protected readonly variants = computed(() => cn(SIDEBAR_ITEM_CLASS, SIDEBAR_ITEM_STYLE, this.class()));\n}\n\n/**\n * `[sidebarItemLabel]` — text label of a `sidebarItem`. Stays in the DOM once the sidebar is\n * icon-only (`sr-only`, not removed): the item's accessible name never depends on a separate\n * `aria-label` kept in sync by hand.\n */\n@Directive({\n selector: \"[sidebarItemLabel]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-item-label\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SidebarItemLabelDirective {\n readonly class = input<string>();\n protected readonly variants = computed(() => cn(SIDEBAR_ITEM_LABEL_CLASS, SIDEBAR_ITEM_LABEL_STYLE, this.class()));\n}\n","import { computed, Directive, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { sidebarInsetVariants } from \"./sidebar.cva\";\n\n/**\n * `[sidebarInset]` — the app's main content wrapper, styled to look encased next to a sibling\n * `<Sidebar variant=\"inset\">`. Pose it on the element that already holds the app's routed content;\n * it supplies only the surface (background, rounding, shadow), not the margin that creates the\n * inset look — that margin is the app's own layout (a flex row with the sidebar), which this\n * directive has no way to know about.\n */\n@Directive({\n selector: \"[sidebarInset]\",\n standalone: true,\n host: {\n \"data-slot\": \"sidebar-inset\",\n \"[class]\": \"variants()\"\n }\n})\nexport class SidebarInsetDirective {\n readonly class = input<string>();\n protected readonly variants = computed(() => cn(sidebarInsetVariants(), this.class()));\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * The group is a plain flex container; the direction only picks the axis. `overflow-hidden` keeps\n * a panel whose content is wider than its share from pushing the whole group.\n */\nexport const resizableGroupVariants = cva(\"flex size-full overflow-hidden\", {\n variants: {\n direction: {\n horizontal: \"flex-row\",\n vertical: \"flex-col\"\n }\n },\n defaultVariants: {\n direction: \"horizontal\"\n }\n});\n\nexport type ResizableGroupVariants = VariantProps<typeof resizableGroupVariants>;\n\n/**\n * A panel takes its main size from `flex-basis` (set by the group), and must neither grow past it\n * nor spill: `grow-0` freezes the share, `overflow-hidden` contains the content.\n */\nexport const RESIZABLE_PANEL_CLASS = \"block size-full grow-0 shrink overflow-hidden\";\n\n/**\n * The handle is a 1px line (`--stroke-xs`) across the group's cross axis, with two additions:\n * - `::after` widens the *hit area* well past the line, which is too thin to aim at;\n * - `::before` is the optional grip, an 8×20 pill (`--spacing-2xs` × `--spacing-lg`).\n *\n * The direction comes from the `data-direction` attribute the handle mirrors from its group, so a\n * single class string covers both axes.\n */\nexport const resizableHandleVariants = cva(\n [\n \"relative flex shrink-0 touch-none items-center justify-center select-none\",\n // Visible at rest, not only on hover — same shade the grip (`withHandle`) already sits at.\n \"bg-(--bg-neutral-hovered) hover:bg-(--bg-neutral-muted) active:bg-(--bg-neutral-muted)\",\n // `outline-2` only sets the width — without `outline-solid` the ring is measurable but never\n // painted (same trap as input.cva.ts / search-bar.cva.ts).\n \"focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-(--stroke-focus) focus-visible:outline-solid\",\n // The line itself\n \"data-[direction=horizontal]:h-full data-[direction=horizontal]:w-(--stroke-xs) data-[direction=horizontal]:cursor-col-resize\",\n \"data-[direction=vertical]:h-(--stroke-xs) data-[direction=vertical]:w-full data-[direction=vertical]:cursor-row-resize\",\n // Hit area, centred on the line\n \"after:absolute after:-inset-1 after:z-10\"\n ],\n {\n variants: {\n withHandle: {\n true: [\n \"before:absolute before:z-15 before:rounded-(--radius-rounded)\",\n // A translucent rest colour would let the line underneath bleed through the pill, so this\n // stays a solid fill at every state — just a lighter one at rest, one step above the line's\n // own colour, then darker on interaction.\n \"before:bg-(--grey-300) hover:before:bg-(--bg-neutral-muted) active:before:bg-(--bg-neutral-base-alt)\",\n \"data-[direction=horizontal]:before:top-1/2 data-[direction=horizontal]:before:-translate-y-1/2\",\n \"data-[direction=horizontal]:before:h-(--spacing-lg) data-[direction=horizontal]:before:w-(--spacing-2xs)\",\n \"data-[direction=vertical]:before:left-1/2 data-[direction=vertical]:before:-translate-x-1/2\",\n \"data-[direction=vertical]:before:h-(--spacing-2xs) data-[direction=vertical]:before:w-(--spacing-lg)\"\n ],\n false: \"\"\n }\n },\n defaultVariants: {\n withHandle: false\n }\n }\n);\n\nexport type ResizableHandleVariants = VariantProps<typeof resizableHandleVariants>;\n","import { InjectionToken } from \"@angular/core\";\n\n/** Axis the panels are laid out along — `horizontal` puts them side by side. */\nexport type ResizableDirection = \"horizontal\" | \"vertical\";\n\n/**\n * What one handle announces, in the ARIA window-splitter sense: the size of the panel *before* it,\n * as a percentage of the group, plus that panel's own bounds and id.\n */\nexport interface ResizableHandleAria {\n valueNow: number;\n valueMin: number;\n valueMax: number;\n controls: string | null;\n}\n\n/**\n * The slice of the panel group a handle or a panel needs. Handles and panels talk to their group\n * through this interface only, which is what keeps the three files free of circular imports.\n */\nexport interface ResizablePanelGroupLike {\n direction(): ResizableDirection;\n isResizing(): boolean;\n handleAria(handle: unknown): ResizableHandleAria | null;\n startResize(handle: unknown, event: PointerEvent): void;\n updateResize(event: PointerEvent): void;\n endResize(): void;\n nudge(handle: unknown, deltaPercentage: number): void;\n}\n\n// Separate file on purpose: it breaks the handle ↔ group and panel ↔ group circular dependencies.\nexport const RESIZABLE_PANEL_GROUP = new InjectionToken<ResizablePanelGroupLike>(\"RESIZABLE_PANEL_GROUP\");\n","import { Component, computed, ElementRef, inject, input } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { resizableHandleVariants } from \"./resizable.cva\";\nimport { RESIZABLE_PANEL_GROUP } from \"./resizable.token\";\n\n/** How much of the group one arrow key moves, in percent. */\nconst KEYBOARD_STEP = 10;\n\n/**\n * The draggable divider between two panels — the ARIA *window splitter*: a focusable `separator`\n * that reports the size of the panel before it through `aria-valuenow`, and moves with the arrow\n * keys as well as with the pointer.\n *\n * Place one between every two `resizable-panel`s of a group.\n *\n * @example\n * ```html\n * <resizable-handle [withHandle]=\"true\" aria-label=\"Resize the results list\" />\n * ```\n */\n@Component({\n selector: \"resizable-handle, resizablehandle, ResizableHandle\",\n exportAs: \"resizableHandle\",\n template: `<ng-content />`,\n host: {\n \"[class]\": \"variants()\",\n \"[attr.data-direction]\": \"group.direction()\",\n role: \"separator\",\n tabindex: \"0\",\n \"[attr.aria-label]\": \"ariaLabel()\",\n // A separator between side-by-side panels is itself a vertical line, and vice versa.\n \"[attr.aria-orientation]\": \"group.direction() === 'horizontal' ? 'vertical' : 'horizontal'\",\n \"[attr.aria-valuenow]\": \"aria()?.valueNow ?? null\",\n \"[attr.aria-valuemin]\": \"aria()?.valueMin ?? null\",\n \"[attr.aria-valuemax]\": \"aria()?.valueMax ?? null\",\n \"[attr.aria-controls]\": \"aria()?.controls ?? null\",\n \"(pointerdown)\": \"onPointerDown($event)\",\n // Pointer capture sends every subsequent move to this element, so the group needs no\n // window-level listeners: the drag keeps working with the pointer far outside the handle.\n \"(pointermove)\": \"group.updateResize($event)\",\n \"(pointerup)\": \"group.endResize()\",\n \"(pointercancel)\": \"group.endResize()\",\n \"(lostpointercapture)\": \"group.endResize()\",\n \"(keydown)\": \"onKeyDown($event)\"\n }\n})\nexport class ResizableHandleComponent {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected readonly group = inject(RESIZABLE_PANEL_GROUP);\n\n /** Shows the grip pill on the line. Off by default: the bare line is the quieter divider. */\n readonly withHandle = input(false);\n readonly class = input<string>();\n readonly ariaLabel = input(\"Resize panels\", { alias: \"aria-label\" });\n\n protected readonly aria = computed(() => this.group.handleAria(this));\n protected readonly variants = computed(() => cn(resizableHandleVariants({ withHandle: this.withHandle() }), this.class()));\n\n protected onPointerDown(event: PointerEvent): void {\n // Secondary buttons open context menus, they do not drag.\n if (event.button > 0) return;\n\n try {\n this.host.nativeElement.setPointerCapture(event.pointerId);\n } catch {\n // No pointer capture here (JSDOM, or an already-released pointer) — the drag still starts.\n }\n\n this.group.startResize(this, event);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.group.isResizing()) return;\n\n const horizontal = this.group.direction() === \"horizontal\";\n const decrease = horizontal ? \"ArrowLeft\" : \"ArrowUp\";\n const increase = horizontal ? \"ArrowRight\" : \"ArrowDown\";\n\n const delta = event.key === decrease ? -KEYBOARD_STEP : event.key === increase ? KEYBOARD_STEP : 0;\n\n if (delta === 0) return;\n\n event.preventDefault();\n this.group.nudge(this, delta);\n }\n}\n","import { Component, computed, inject, input, signal } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { RESIZABLE_PANEL_CLASS } from \"./resizable.cva\";\nimport { RESIZABLE_PANEL_GROUP } from \"./resizable.token\";\n\nlet nextPanelId = 0;\n\n/**\n * One resizable region of a `ResizablePanelGroup`.\n *\n * Its main size is written by the group into `layout` and applied as a `flex-basis` percentage;\n * `minSize`/`maxSize` become a min/max on the axis the group is laid out along. Sizes are\n * percentages of the group, never pixels — that is what makes a layout survive a window resize.\n *\n * @example\n * ```html\n * <resizable-panel [defaultSize]=\"30\" [minSize]=\"20\">…</resizable-panel>\n * ```\n */\n@Component({\n selector: \"resizable-panel, resizablepanel, ResizablePanel\",\n exportAs: \"resizablePanel\",\n template: `<ng-content />`,\n host: {\n \"[class]\": \"variants()\",\n \"[attr.id]\": \"id()\",\n \"[attr.data-panel-id]\": \"id()\",\n \"[style.flex-basis.%]\": \"layout() ?? defaultSize()\",\n // Only the axis the group runs along is constrained; the cross axis stays free.\n \"[style.min-width.%]\": \"horizontal() ? minSize() : null\",\n \"[style.max-width.%]\": \"horizontal() ? maxSize() : null\",\n \"[style.min-height.%]\": \"horizontal() ? null : minSize()\",\n \"[style.max-height.%]\": \"horizontal() ? null : maxSize()\"\n }\n})\nexport class ResizablePanelComponent {\n private readonly group = inject(RESIZABLE_PANEL_GROUP);\n\n /**\n * Identifies the panel, and is written to the DOM as its `id` so a handle can point at it with\n * `aria-controls`. Counter-based rather than `crypto.randomUUID()`, which throws outside a\n * secure context.\n */\n readonly id = input(`resizable-panel-${++nextPanelId}`);\n /** Share of the group, in percent, before any user resize. Normalized across siblings. */\n readonly defaultSize = input(50);\n readonly minSize = input(0);\n readonly maxSize = input(100);\n readonly class = input<string>();\n\n /** Current share, written by the group. `undefined` until the group has laid the panels out. */\n readonly layout = signal<number | undefined>(undefined);\n\n protected readonly horizontal = computed(() => this.group.direction() === \"horizontal\");\n protected readonly variants = computed(() => cn(RESIZABLE_PANEL_CLASS, this.class()));\n}\n","import { Component, computed, contentChildren, DestroyRef, effect, ElementRef, forwardRef, inject, input, output, signal, untracked } from \"@angular/core\";\nimport { cn } from \"cn\";\n\nimport { ResizableHandleComponent } from \"./resizable-handle\";\nimport { ResizablePanelComponent } from \"./resizable-panel\";\nimport { resizableGroupVariants } from \"./resizable.cva\";\nimport { RESIZABLE_PANEL_GROUP, type ResizableDirection, type ResizableHandleAria } from \"./resizable.token\";\n\ninterface DragState {\n /** Index of the handle being dragged, which is also the index of the panel before it. */\n index: number;\n /** Pointer position on the group's axis when the drag started. */\n startPos: number;\n startBefore: number;\n startAfter: number;\n}\n\n/**\n * Lays a row (or a column) of `resizable-panel`s out, separated by `resizable-handle`s, and owns\n * their sizes.\n *\n * Sizes are percentages of the group, so the layout holds through a window resize. Give the group\n * an `autoSaveId` and the layout is remembered in `localStorage` under that id.\n *\n * @example\n * ```html\n * <resizable-panel-group direction=\"horizontal\" autoSaveId=\"results\">\n * <resizable-panel [defaultSize]=\"30\" [minSize]=\"20\">…</resizable-panel>\n * <resizable-handle [withHandle]=\"true\" />\n * <resizable-panel [defaultSize]=\"70\">…</resizable-panel>\n * </resizable-panel-group>\n * ```\n */\n@Component({\n selector: \"resizable-panel-group, resizablepanelgroup, ResizablePanelGroup\",\n exportAs: \"resizablePanelGroup\",\n template: `<ng-content />`,\n providers: [{ provide: RESIZABLE_PANEL_GROUP, useExisting: forwardRef(() => ResizablePanelGroupComponent) }],\n host: {\n \"[class]\": \"variants()\",\n \"[attr.data-direction]\": \"direction()\",\n \"[attr.data-resizing]\": \"dragging() ? '' : null\"\n }\n})\nexport class ResizablePanelGroupComponent {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly direction = input<ResizableDirection>(\"horizontal\");\n /** Key under which the layout is persisted. Without it, nothing is stored. */\n readonly autoSaveId = input<string>();\n readonly class = input<string>();\n\n /** Emitted on every change of the sizes, drag included — so it fires while dragging. */\n readonly layout = output<number[]>();\n\n readonly panels = contentChildren(ResizablePanelComponent);\n readonly handles = contentChildren(ResizableHandleComponent);\n\n /** Current share of each panel, in percent, summing to 100. */\n readonly sizes = signal<number[]>([]);\n\n protected readonly dragging = signal(false);\n protected readonly variants = computed(() => cn(resizableGroupVariants({ direction: this.direction() }), this.class()));\n\n private drag: DragState | null = null;\n /** Covers the page during a drag so an `<iframe>` cannot swallow the pointer. */\n private overlay: HTMLElement | undefined;\n\n constructor() {\n effect(() => {\n const panels = this.panels();\n\n untracked(() => this.initializeLayout(panels));\n });\n\n this.destroyRef.onDestroy(() => this.releasePointer());\n }\n\n isResizing(): boolean {\n return this.dragging();\n }\n\n /** Sets every panel's share at once. Ignored unless it covers exactly the panels present. */\n setLayout(sizes: number[]): void {\n if (sizes.length !== this.panels().length) return;\n\n this.sizes.set(sizes);\n this.pushSizesToPanels();\n this.saveLayout();\n this.layout.emit(sizes);\n }\n\n /** Moves one handle by `deltaPercentage` — how the keyboard resizes. */\n nudge(handle: unknown, deltaPercentage: number): void {\n const index = this.indexOfHandle(handle);\n\n if (index === null) return;\n\n const sizes = this.sizes();\n\n this.commit(index, this.constrainPair(index, sizes[index], sizes[index + 1], deltaPercentage));\n this.saveLayout();\n }\n\n startResize(handle: unknown, event: PointerEvent): void {\n const index = this.indexOfHandle(handle);\n\n if (index === null) return;\n\n // Keeps the drag from selecting the text of the surrounding panels.\n event.preventDefault();\n\n const sizes = this.sizes();\n\n this.drag = {\n index,\n startPos: this.axisPosition(event),\n startBefore: sizes[index],\n startAfter: sizes[index + 1]\n };\n this.dragging.set(true);\n\n document.body.style.cursor = this.resizeCursor();\n this.createOverlay();\n }\n\n updateResize(event: PointerEvent): void {\n if (!this.drag) return;\n\n const groupSize = this.direction() === \"horizontal\" ? this.host.nativeElement.offsetWidth : this.host.nativeElement.offsetHeight;\n\n // A group with no measurable size gives no meaningful percentage — a hidden route, typically.\n if (groupSize === 0) return;\n\n const deltaPercentage = ((this.axisPosition(event) - this.drag.startPos) / groupSize) * 100;\n\n this.commit(this.drag.index, this.constrainPair(this.drag.index, this.drag.startBefore, this.drag.startAfter, deltaPercentage));\n }\n\n endResize(): void {\n if (!this.drag) return;\n\n this.drag = null;\n this.dragging.set(false);\n this.saveLayout();\n this.releasePointer();\n }\n\n /**\n * Reports the panel before `handle` the way the ARIA window-splitter pattern wants it: its\n * current share, its bounds, and the id of the element it controls.\n */\n handleAria(handle: unknown): ResizableHandleAria | null {\n const index = this.indexOfHandle(handle);\n\n if (index === null) return null;\n\n const before = this.panels()[index];\n const size = this.sizes()[index];\n\n if (size === undefined) return null;\n\n return {\n valueNow: Math.round(size),\n valueMin: Math.round(before.minSize()),\n valueMax: Math.round(before.maxSize()),\n controls: before.id()\n };\n }\n\n /** Index of a handle, or `null` when it has no panel on both of its sides. */\n private indexOfHandle(handle: unknown): number | null {\n const index = this.handles().indexOf(handle as ResizableHandleComponent);\n\n if (index < 0 || index >= this.panels().length - 1) return null;\n\n return index;\n }\n\n private initializeLayout(panels: readonly ResizablePanelComponent[]): void {\n if (panels.length === 0) return;\n\n const saved = this.loadLayout();\n\n // A stored layout only applies to the same number of panels; otherwise the panels have changed\n // and their own defaults are the better answer.\n this.sizes.set(saved?.length === panels.length ? saved : normalize(panels.map(panel => panel.defaultSize())));\n\n this.pushSizesToPanels();\n }\n\n /**\n * Moves `delta` percent of the group across the handle at `indexBefore`, and gives back the pair\n * of sizes that respects both panels' `minSize`/`maxSize`. The sum is preserved: what one panel\n * refuses to take, the other keeps.\n */\n private constrainPair(indexBefore: number, startBefore: number, startAfter: number, delta: number): [number, number] {\n const panels = this.panels();\n const before = panels[indexBefore];\n const after = panels[indexBefore + 1];\n\n let sizeBefore = startBefore + delta;\n let sizeAfter = startAfter - delta;\n\n if (sizeBefore < before.minSize()) {\n sizeAfter -= before.minSize() - sizeBefore;\n sizeBefore = before.minSize();\n }\n if (sizeBefore > before.maxSize()) {\n sizeAfter += sizeBefore - before.maxSize();\n sizeBefore = before.maxSize();\n }\n\n if (sizeAfter < after.minSize()) {\n sizeBefore -= after.minSize() - sizeAfter;\n sizeAfter = after.minSize();\n }\n if (sizeAfter > after.maxSize()) {\n sizeBefore += sizeAfter - after.maxSize();\n sizeAfter = after.maxSize();\n }\n\n // Contradictory bounds (a min on one side larger than the max on the other) can still push a\n // size below zero; a negative flex-basis would be dropped by the browser anyway.\n return [Math.max(0, sizeBefore), Math.max(0, sizeAfter)];\n }\n\n private commit(indexBefore: number, [sizeBefore, sizeAfter]: [number, number]): void {\n const sizes = [...this.sizes()];\n\n sizes[indexBefore] = sizeBefore;\n sizes[indexBefore + 1] = sizeAfter;\n\n this.sizes.set(sizes);\n this.pushSizesToPanels();\n this.layout.emit(sizes);\n }\n\n private pushSizesToPanels(): void {\n const sizes = this.sizes();\n\n this.panels().forEach((panel, index) => {\n if (sizes[index] !== undefined) panel.layout.set(sizes[index]);\n });\n }\n\n private axisPosition(event: PointerEvent): number {\n return this.direction() === \"horizontal\" ? event.clientX : event.clientY;\n }\n\n private resizeCursor(): string {\n return this.direction() === \"horizontal\" ? \"col-resize\" : \"row-resize\";\n }\n\n private loadLayout(): number[] | null {\n const autoSaveId = this.autoSaveId();\n\n if (!autoSaveId) return null;\n\n try {\n const stored = localStorage.getItem(storageKey(autoSaveId));\n\n return stored ? JSON.parse(stored) : null;\n } catch {\n // Unavailable or unparsable storage is not a reason to render nothing.\n return null;\n }\n }\n\n private saveLayout(): void {\n const autoSaveId = this.autoSaveId();\n\n if (!autoSaveId) return;\n\n try {\n localStorage.setItem(storageKey(autoSaveId), JSON.stringify(this.sizes()));\n } catch {\n // Storage full, or denied in private browsing — the layout simply is not remembered.\n }\n }\n\n private createOverlay(): void {\n if (this.overlay) return;\n\n this.overlay = document.createElement(\"div\");\n this.overlay.style.cssText = \"position:fixed;inset:0;z-index:9999\";\n this.overlay.style.cursor = this.resizeCursor();\n document.body.appendChild(this.overlay);\n }\n\n /** Undoes everything a drag put on the document — also on destroy, mid-drag included. */\n private releasePointer(): void {\n document.body.style.cursor = \"\";\n this.overlay?.remove();\n this.overlay = undefined;\n }\n}\n\nconst storageKey = (autoSaveId: string) => `resizable-panel:${autoSaveId}`;\n\n/** Rescales shares so they sum to 100, keeping their ratios. */\nfunction normalize(sizes: number[]): number[] {\n const total = sizes.reduce((sum, size) => sum + size, 0);\n\n if (total <= 0) return sizes.map(() => 100 / sizes.length);\n\n return sizes.map(size => (size / total) * 100);\n}\n"],"mappings":"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"}
|