@masmarino/gabarit 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"masmarino-gabarit.mjs","sources":["../../../projects/gabarit/src/lib/version.ts","../../../projects/gabarit/src/lib/components/atoms/icon/built-in-icons.ts","../../../projects/gabarit/src/lib/components/atoms/icon/icon-registry.ts","../../../projects/gabarit/src/lib/components/atoms/icon/icon.ts","../../../projects/gabarit/src/lib/components/templates/app-shell/app-shell.ts","../../../projects/gabarit/src/lib/components/templates/app-shell/app-shell.html","../../../projects/gabarit/src/lib/components/atoms/button/button.ts","../../../projects/gabarit/src/lib/components/atoms/button/button.html","../../../projects/gabarit/src/lib/components/atoms/badge/badge.ts","../../../projects/gabarit/src/lib/components/atoms/badge/badge.html","../../../projects/gabarit/src/lib/components/atoms/avatar/avatar.ts","../../../projects/gabarit/src/lib/components/atoms/avatar/avatar.html","../../../projects/gabarit/src/lib/components/atoms/skeleton/skeleton.ts","../../../projects/gabarit/src/lib/components/molecules/avatar-group/avatar-group.ts","../../../projects/gabarit/src/lib/components/molecules/avatar-group/avatar-group.html","../../../projects/gabarit/src/lib/components/molecules/alert/alert.ts","../../../projects/gabarit/src/lib/components/molecules/alert/alert.html","../../../projects/gabarit/src/lib/components/atoms/tag/tag-contrast.ts","../../../projects/gabarit/src/lib/components/atoms/tag/tag.ts","../../../projects/gabarit/src/lib/components/atoms/tag/tag.html","../../../projects/gabarit/src/lib/components/molecules/empty-state/empty-state.ts","../../../projects/gabarit/src/lib/components/molecules/empty-state/empty-state.html","../../../projects/gabarit/src/lib/components/atoms/input/input.ts","../../../projects/gabarit/src/lib/components/atoms/input/input.html","../../../projects/gabarit/src/lib/components/molecules/select/select.ts","../../../projects/gabarit/src/lib/components/molecules/select/select.html","../../../projects/gabarit/src/lib/components/molecules/list-toolbar/list-toolbar.ts","../../../projects/gabarit/src/lib/components/molecules/list-toolbar/list-toolbar.html","../../../projects/gabarit/src/lib/components/molecules/card/card.ts","../../../projects/gabarit/src/lib/components/molecules/card/card.html","../../../projects/gabarit/src/lib/components/atoms/checkbox/checkbox.ts","../../../projects/gabarit/src/lib/components/atoms/checkbox/checkbox.html","../../../projects/gabarit/src/lib/components/organisms/modal/modal.ts","../../../projects/gabarit/src/lib/components/organisms/modal/modal.html","../../../projects/gabarit/src/lib/components/organisms/drawer/drawer.ts","../../../projects/gabarit/src/lib/components/organisms/drawer/drawer.html","../../../projects/gabarit/src/lib/components/molecules/table/table.ts","../../../projects/gabarit/src/lib/components/molecules/table/table.html","../../../projects/gabarit/src/lib/components/organisms/search-bar/search-bar.ts","../../../projects/gabarit/src/lib/components/organisms/search-bar/search-bar.html","../../../projects/gabarit/src/lib/components/molecules/tab/tab.ts","../../../projects/gabarit/src/lib/components/molecules/tabs/tabs.ts","../../../projects/gabarit/src/lib/components/molecules/tabs/tabs.html","../../../projects/gabarit/src/lib/primitives/scales.ts","../../../projects/gabarit/src/lib/primitives/ticks.ts","../../../projects/gabarit/src/lib/primitives/format.ts","../../../projects/gabarit/src/lib/primitives/path.ts","../../../projects/gabarit/src/lib/primitives/nearest.ts","../../../projects/gabarit/src/lib/primitives/label.ts","../../../projects/gabarit/src/lib/components/organisms/chart-context/chart-context.ts","../../../projects/gabarit/src/lib/components/organisms/chart-frame/chart-frame.ts","../../../projects/gabarit/src/lib/components/organisms/chart-frame/chart-frame.html","../../../projects/gabarit/src/lib/components/organisms/chart-axis/chart-axis.ts","../../../projects/gabarit/src/lib/components/organisms/chart-axis/chart-axis.html","../../../projects/gabarit/src/lib/components/organisms/chart-tooltip/chart-tooltip.ts","../../../projects/gabarit/src/lib/components/organisms/chart-tooltip/chart-tooltip.html","../../../projects/gabarit/src/lib/components/organisms/chart-legend/chart-legend.ts","../../../projects/gabarit/src/lib/components/organisms/chart-legend/chart-legend.html","../../../projects/gabarit/src/lib/components/organisms/chart-empty/chart-empty.ts","../../../projects/gabarit/src/lib/components/organisms/chart-empty/chart-empty.html","../../../projects/gabarit/src/lib/components/organisms/chart-table/chart-table.ts","../../../projects/gabarit/src/lib/components/organisms/chart-table/chart-table.html","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-series.ts","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-series.html","../../../projects/gabarit/src/lib/components/organisms/chart-data/chart-data.ts","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-chart.ts","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-chart.html","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-series.ts","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-series.html","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-chart.ts","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-chart.html","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-series.ts","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-series.html","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-chart.ts","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-chart.html","../../../projects/gabarit/src/lib/components/organisms/pie-chart/pie-chart.ts","../../../projects/gabarit/src/lib/components/organisms/pie-chart/pie-chart.html","../../../projects/gabarit/src/lib/components/atoms/sparkline/sparkline.ts","../../../projects/gabarit/src/lib/components/atoms/sparkline/sparkline.html","../../../projects/gabarit/src/lib/components/atoms/gauge-bar/gauge-bar.ts","../../../projects/gabarit/src/lib/components/atoms/gauge-bar/gauge-bar.html","../../../projects/gabarit/src/lib/components/molecules/dimension-card/dimension-card.ts","../../../projects/gabarit/src/lib/components/molecules/dimension-card/dimension-card.html","../../../projects/gabarit/src/lib/components/molecules/funnel-chart/funnel-chart.ts","../../../projects/gabarit/src/lib/components/molecules/funnel-chart/funnel-chart.html","../../../projects/gabarit/src/lib/components/molecules/menu/menu.ts","../../../projects/gabarit/src/lib/components/molecules/menu/menu.html","../../../projects/gabarit/src/lib/components/molecules/popover/popover.ts","../../../projects/gabarit/src/lib/components/molecules/popover/popover.html","../../../projects/gabarit/src/lib/components/molecules/description-list/description-list.ts","../../../projects/gabarit/src/lib/components/molecules/description-list/description-list.html","../../../projects/gabarit/src/lib/components/molecules/segmented-control/segmented-control.ts","../../../projects/gabarit/src/lib/components/molecules/segmented-control/segmented-control.html","../../../projects/gabarit/src/lib/components/molecules/date-picker/date-picker-calendar.ts","../../../projects/gabarit/src/lib/components/molecules/date-picker/date-picker.ts","../../../projects/gabarit/src/lib/components/molecules/date-picker/date-picker.html","../../../projects/gabarit/src/lib/components/molecules/date-range-picker/date-range-picker.ts","../../../projects/gabarit/src/lib/components/molecules/date-range-picker/date-range-picker.html","../../../projects/gabarit/src/lib/components/molecules/accordion-item/accordion-item.ts","../../../projects/gabarit/src/lib/components/molecules/accordion-item/accordion-item.html","../../../projects/gabarit/src/lib/components/molecules/accordion/accordion.ts","../../../projects/gabarit/src/lib/components/molecules/pagination/pagination.ts","../../../projects/gabarit/src/lib/components/molecules/pagination/pagination.html","../../../projects/gabarit/src/lib/components/molecules/breadcrumb/breadcrumb.ts","../../../projects/gabarit/src/lib/components/molecules/breadcrumb/breadcrumb.html","../../../projects/gabarit/src/lib/components/organisms/confirm-danger-modal/confirm-danger-modal.ts","../../../projects/gabarit/src/lib/components/organisms/confirm-danger-modal/confirm-danger-modal.html","../../../projects/gabarit/src/lib/components/organisms/toaster/toaster.ts","../../../projects/gabarit/src/lib/components/organisms/toaster/toaster.html","../../../projects/gabarit/src/lib/components/molecules/tooltip/tooltip.ts","../../../projects/gabarit/src/lib/components/molecules/tooltip/tooltip.html","../../../projects/gabarit/src/lib/components/molecules/radio-group/radio-group.ts","../../../projects/gabarit/src/lib/components/molecules/radio-group/radio-group.html","../../../projects/gabarit/src/lib/components/atoms/switch/switch.ts","../../../projects/gabarit/src/lib/components/atoms/switch/switch.html","../../../projects/gabarit/src/lib/components/atoms/textarea/textarea.ts","../../../projects/gabarit/src/lib/components/atoms/textarea/textarea.html","../../../projects/gabarit/src/lib/components/molecules/autocomplete/autocomplete.ts","../../../projects/gabarit/src/lib/components/molecules/autocomplete/autocomplete.html","../../../projects/gabarit/src/lib/components/atoms/divider/divider.ts","../../../projects/gabarit/src/lib/components/atoms/divider/divider.html","../../../projects/gabarit/src/lib/components/atoms/spinner/spinner.ts","../../../projects/gabarit/src/lib/components/atoms/spinner/spinner.html","../../../projects/gabarit/src/lib/components/atoms/slider/slider.ts","../../../projects/gabarit/src/lib/components/atoms/slider/slider.html","../../../projects/gabarit/src/lib/components/molecules/stepper/stepper.ts","../../../projects/gabarit/src/lib/components/molecules/stepper/stepper.html","../../../projects/gabarit/src/lib/components/molecules/job-graph/job-graph-layout.ts","../../../projects/gabarit/src/lib/components/molecules/job-graph/job-graph.ts","../../../projects/gabarit/src/lib/components/molecules/job-graph/job-graph.html","../../../projects/gabarit/src/lib/components/molecules/file-upload/file-upload.ts","../../../projects/gabarit/src/lib/components/molecules/file-upload/file-upload.html","../../../projects/gabarit/src/lib/components/atoms/notification-dot/notification-dot.ts","../../../projects/gabarit/src/lib/components/atoms/notification-dot/notification-dot.html","../../../projects/gabarit/src/lib/components/molecules/tag-input/tag-input.ts","../../../projects/gabarit/src/lib/components/molecules/tag-input/tag-input.html","../../../projects/gabarit/src/lib/components/molecules/tree/tree-flatten.ts","../../../projects/gabarit/src/lib/components/molecules/tree/tree.ts","../../../projects/gabarit/src/lib/components/molecules/tree/tree.html","../../../projects/gabarit/src/masmarino-gabarit.ts"],"sourcesContent":["export const GABARIT_VERSION = '1.1.0'\n","export const BUILT_IN_ICONS: Record<string, string> = {\n search: `<path d=\"m21 21-4.34-4.34\" />\n<circle cx=\"11\" cy=\"11\" r=\"8\" />`,\n x: `<path d=\"M18 6 6 18\" />\n<path d=\"m6 6 12 12\" />`,\n eye: `<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 'eye-off': `<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 'chevron-down': `<path d=\"m6 9 6 6 6-6\" />`,\n 'chevron-left': `<path d=\"m15 18-6-6 6-6\" />`,\n 'chevron-right': `<path d=\"m9 18 6-6-6-6\" />`,\n 'chevrons-left': `<path d=\"m11 17-5-5 5-5\" />\n<path d=\"m18 17-5-5 5-5\" />`,\n 'chevrons-right': `<path d=\"m6 17 5-5-5-5\" />\n<path d=\"m13 17 5-5-5-5\" />`,\n 'ellipsis-vertical': `<circle cx=\"12\" cy=\"12\" r=\"1\" />\n<circle cx=\"12\" cy=\"5\" r=\"1\" />\n<circle cx=\"12\" cy=\"19\" r=\"1\" />`,\n check: `<path d=\"M20 6 9 17l-5-5\" />`,\n 'check-circle': `<path d=\"m5 12 5 5 9-10\" />`,\n 'alert-circle': `<path d=\"M12 7v6\" />\n<path d=\"M12 17h.01\" />`,\n 'alert-triangle': `<path d=\"m21.73 18-8-14a2 2 0 0 0-3.46 0L2.27 18a2 2 0 0 0 1.73 3h16a2 2 0 0 0 1.73-3Z\" />\n<path d=\"M12 9v4\" />\n<path d=\"M12 17h.01\" />`,\n info: `<path d=\"M12 17v-6\" />\n<path d=\"M12 7h.01\" />`,\n 'arrow-up': `<path d=\"m5 12 7-7 7 7\" />\n<path d=\"M12 19V5\" />`,\n 'arrow-down': `<path d=\"M12 5v14\" />\n<path d=\"m19 12-7 7-7-7\" />`,\n calendar: `<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 upload: `<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 folder: `<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\" />`,\n file: `<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}\n","import { Injectable } from '@angular/core'\nimport { BUILT_IN_ICONS } from './built-in-icons'\n\n@Injectable({ providedIn: 'root' })\nexport class IconRegistry {\n private readonly icons = new Map<string, string>(Object.entries(BUILT_IN_ICONS))\n\n register(name: string, svgInnerMarkup: string): void {\n this.icons.set(name, svgInnerMarkup)\n }\n\n registerAll(icons: Record<string, string>): void {\n for (const [name, markup] of Object.entries(icons)) {\n this.icons.set(name, markup)\n }\n }\n\n get(name: string): string | null {\n return this.icons.get(name) ?? null\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport { IconRegistry } from './icon-registry'\n\n@Component({\n selector: 'gbt-icon',\n standalone: true,\n template: `\n @if (svgContent(); as content) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n [innerHTML]=\"content\"\n ></svg>\n }\n `,\n styles: `\n :host {\n display: inline-flex;\n flex-shrink: 0;\n width: 1.25em;\n height: 1.25em;\n }\n svg {\n width: 100%;\n height: 100%;\n }\n `,\n host: {\n '[attr.aria-hidden]': '\"true\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Icon {\n private readonly sanitizer = inject(DomSanitizer)\n private readonly registry = inject(IconRegistry)\n\n name = input.required<string>()\n\n protected readonly svgContent = computed(() => {\n const markup = this.registry.get(this.name())\n return markup ? this.sanitizer.bypassSecurityTrustHtml(markup) : null\n })\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n computed,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-app-shell',\n standalone: true,\n imports: [Icon],\n templateUrl: './app-shell.html',\n styleUrl: './app-shell.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppShell {\n navLabel = input.required<string>()\n skipLabel = input.required<string>()\n openMenuLabel = input.required<string>()\n closeMenuLabel = input.required<string>()\n collapseLabel = input<string>('')\n expandLabel = input<string>('')\n versionLabel = input<string | null>(null)\n collapsed = input<boolean>(false)\n collapsible = input<boolean>(true)\n collapsedChange = output<boolean>()\n\n private readonly id = ++nextId\n protected readonly mainId = `gbt-app-shell-main-${this.id}`\n protected readonly navId = `gbt-app-shell-nav-${this.id}`\n\n protected readonly menuOpen = signal(false)\n\n protected readonly menuLabel = computed(() =>\n this.menuOpen() ? this.closeMenuLabel() : this.openMenuLabel(),\n )\n\n private readonly toggleButton = viewChild<ElementRef<HTMLButtonElement>>('toggle')\n private readonly nav = viewChild<ElementRef<HTMLElement>>('nav')\n\n protected toggleMenu(): void {\n if (this.menuOpen()) {\n this.close()\n return\n }\n this.menuOpen.set(true)\n queueMicrotask(() => this.nav()?.nativeElement.focus())\n }\n\n protected close(): void {\n if (!this.menuOpen()) return\n this.menuOpen.set(false)\n this.toggleButton()?.nativeElement.focus()\n }\n\n protected toggleCollapsed(): void {\n this.collapsedChange.emit(!this.collapsed())\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close()\n }\n\n protected onNavKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab' || !this.menuOpen()) return\n const nav = this.nav()?.nativeElement\n if (!nav) return\n\n const focusableElements = nav.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n )\n if (focusableElements.length === 0) return\n\n const first = focusableElements[0]\n const last = focusableElements[focusableElements.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n","<div class=\"gbt-app-shell\">\n <a class=\"gbt-app-shell__skip\" [href]=\"'#' + mainId\">{{ skipLabel() }}</a>\n\n <nav\n #nav\n [id]=\"navId\"\n class=\"gbt-app-shell__nav\"\n [class.gbt-app-shell__nav--open]=\"menuOpen()\"\n [class.gbt-app-shell__nav--collapsed]=\"collapsed()\"\n [attr.aria-label]=\"navLabel()\"\n tabindex=\"-1\"\n (keydown)=\"onNavKeydown($event)\"\n >\n <div class=\"gbt-app-shell__brand\">\n <ng-content select=\"[shell-brand]\" />\n </div>\n <ng-content select=\"[shell-nav]\" />\n <div class=\"gbt-app-shell__bottom\">\n @if (versionLabel()) {\n @if (!collapsed()) {\n <div class=\"gbt-app-shell__version\">v{{ versionLabel() }}</div>\n }\n }\n @if (collapsible()) {\n <button\n type=\"button\"\n class=\"gbt-app-shell__collapse-toggle\"\n [class.gbt-app-shell__collapse-toggle--collapsed]=\"collapsed()\"\n [attr.aria-expanded]=\"!collapsed()\"\n [attr.aria-label]=\"collapsed() ? expandLabel() : collapseLabel()\"\n (click)=\"toggleCollapsed()\"\n >\n <gbt-icon name=\"chevrons-left\" />\n </button>\n }\n </div>\n </nav>\n\n @if (menuOpen()) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div class=\"gbt-app-shell__scrim\" (click)=\"close()\"></div>\n }\n\n <div class=\"gbt-app-shell__body\">\n <header class=\"gbt-app-shell__header\">\n <button\n #toggle\n type=\"button\"\n class=\"gbt-app-shell__toggle\"\n [attr.aria-expanded]=\"menuOpen()\"\n [attr.aria-controls]=\"navId\"\n [attr.aria-label]=\"menuLabel()\"\n (click)=\"toggleMenu()\"\n >\n <span class=\"gbt-app-shell__burger\" aria-hidden=\"true\"></span>\n </button>\n <ng-content select=\"[shell-header]\" />\n </header>\n\n <main [id]=\"mainId\" class=\"gbt-app-shell__content\" tabindex=\"-1\">\n <ng-content />\n </main>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, booleanAttribute, input, output } from '@angular/core'\nimport { Icon } from '../icon/icon'\n\n@Component({\n selector: 'gbt-button',\n standalone: true,\n imports: [Icon],\n templateUrl: './button.html',\n styleUrl: './button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Button {\n variant = input<'primary' | 'secondary' | 'danger'>('primary')\n size = input<'small' | 'medium' | 'large'>('medium')\n type = input<'button' | 'submit'>('button')\n text = input<string>('')\n iconName = input<string | null>(null)\n ariaLabel = input<string | null>(null)\n loading = input(false, { transform: booleanAttribute })\n loadingLabel = input<string>('Loading')\n disabled = input(false, { transform: booleanAttribute })\n\n clicked = output<void>()\n\n protected handleClick(): void {\n if (!this.disabled() && !this.loading()) {\n this.clicked.emit()\n }\n }\n}\n","<button\n [type]=\"type()\"\n class=\"gbt-button gbt-button--{{ variant() }} gbt-button--{{ size() }}\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n (click)=\"handleClick()\"\n>\n @if (iconName()) {\n <gbt-icon [name]=\"iconName()!\" aria-hidden=\"true\" />\n }\n @if (loading()) {\n <span class=\"gbt-button__spinner\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">{{ loadingLabel() }}</span>\n }\n <span>{{ text() }}</span>\n</button>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\nimport { Icon } from '../icon/icon'\n\nexport type BadgeVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info'\n\n@Component({\n selector: 'gbt-badge',\n standalone: true,\n imports: [Icon],\n templateUrl: './badge.html',\n styleUrl: './badge.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Badge {\n variant = input<BadgeVariant>('neutral')\n icon = input<string>()\n}\n","<span class=\"gbt-badge\" [attr.data-variant]=\"variant()\">\n @if (icon(); as name) {\n <gbt-icon [name]=\"name\" class=\"gbt-badge__icon\" aria-hidden=\"true\" />\n }\n <span class=\"gbt-badge__label\"><ng-content /></span>\n</span>\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\n\nexport type AvatarSize = 'sm' | 'md' | 'lg'\n\nexport function computeInitials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean)\n if (words.length === 0) return ''\n if (words.length === 1) return words[0].slice(0, 2).toUpperCase()\n return (words[0][0] + words[words.length - 1][0]).toUpperCase()\n}\n\n@Component({\n selector: 'gbt-avatar',\n standalone: true,\n templateUrl: './avatar.html',\n styleUrl: './avatar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-size]': 'size()',\n },\n})\nexport class Avatar {\n name = input.required<string>()\n src = input<string | null>(null)\n size = input<AvatarSize>('md')\n\n protected readonly imageFailed = signal(false)\n\n protected readonly showImage = computed(() => !!this.src() && !this.imageFailed())\n protected readonly initials = computed(() => computeInitials(this.name()))\n\n protected onImageError(): void {\n this.imageFailed.set(true)\n }\n}\n","@if (showImage()) {\n <img class=\"gbt-avatar__image\" [src]=\"src()\" [alt]=\"name()\" (error)=\"onImageError()\" />\n} @else {\n <span class=\"gbt-avatar__initials\" [attr.aria-label]=\"name()\">{{ initials() }}</span>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type SkeletonVariant = 'text' | 'circle' | 'rect'\n\n@Component({\n selector: 'gbt-skeleton',\n standalone: true,\n template: '',\n styleUrl: './skeleton.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-variant]': 'variant()',\n '[style.width]': 'width()',\n '[style.height]': 'height()',\n 'aria-hidden': 'true',\n },\n})\nexport class Skeleton {\n variant = input<SkeletonVariant>('text')\n width = input<string>('100%')\n height = input<string | null>(null)\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, computed, inject, input, output, signal } from '@angular/core'\nimport { Avatar } from '../../atoms/avatar/avatar'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport interface AvatarGroupItem {\n name: string\n src?: string\n}\n\n@Component({\n selector: 'gbt-avatar-group',\n standalone: true,\n imports: [Avatar, Icon],\n templateUrl: './avatar-group.html',\n styleUrl: './avatar-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onKeydown($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n})\nexport class AvatarGroup<T extends AvatarGroupItem = AvatarGroupItem> {\n private readonly elementRef = inject(ElementRef)\n\n items = input.required<T[]>()\n max = input<number>(5)\n ariaLabel = input<string>('Users')\n moreLabel = input<(count: number) => string>((count) => `${count} more`)\n activeItem = input<T | null>(null)\n\n itemClick = output<T>()\n\n protected readonly panelOpen = signal(false)\n protected readonly panelStyle = signal<{ top: string; left: string } | null>(null)\n\n protected readonly visibleItems = computed(() => this.items().slice(0, this.max()))\n protected readonly overflowItems = computed(() => this.items().slice(this.max()))\n protected readonly overflowCount = computed(() => this.overflowItems().length)\n\n protected isActive(item: T): boolean {\n return this.activeItem() === item\n }\n\n protected selectItem(item: T): void {\n this.itemClick.emit(item)\n this.panelOpen.set(false)\n }\n\n protected toggleOverflowPanel(): void {\n this.panelOpen.update((value) => !value)\n if (this.panelOpen()) {\n this.updatePanelPosition()\n }\n }\n\n protected updatePanelPosition(): void {\n if (!this.panelOpen()) {\n return\n }\n const trigger = this.elementRef.nativeElement.querySelector(\n '.gbt-avatar-group__more',\n ) as HTMLElement | null\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n this.panelStyle.set({\n top: `${rect.bottom + 6}px`,\n left: `${rect.left}px`,\n })\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.panelOpen() && !this.elementRef.nativeElement.contains(event.target)) {\n this.panelOpen.set(false)\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.panelOpen()) {\n event.preventDefault()\n event.stopPropagation()\n this.panelOpen.set(false)\n }\n }\n}\n","<ul class=\"gbt-avatar-group__list\" [attr.aria-label]=\"ariaLabel()\">\n @for (item of visibleItems(); track $index) {\n <li class=\"gbt-avatar-group__item\">\n <button\n type=\"button\"\n class=\"gbt-avatar-group__button\"\n [class.gbt-avatar-group__button--active]=\"isActive(item)\"\n [attr.aria-label]=\"item.name\"\n [attr.aria-current]=\"isActive(item) ? 'true' : null\"\n (click)=\"selectItem(item)\"\n >\n <gbt-avatar [name]=\"item.name\" [src]=\"item.src ?? null\" size=\"md\" />\n </button>\n </li>\n }\n @if (overflowCount() > 0) {\n <li class=\"gbt-avatar-group__item\">\n <button\n type=\"button\"\n class=\"gbt-avatar-group__more\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"panelOpen()\"\n [attr.aria-label]=\"moreLabel()(overflowCount())\"\n (click)=\"toggleOverflowPanel()\"\n >\n +{{ overflowCount() }}\n </button>\n </li>\n }\n</ul>\n\n@if (panelOpen() && panelStyle(); as style) {\n <ul\n class=\"gbt-avatar-group__panel\"\n role=\"menu\"\n [attr.aria-label]=\"moreLabel()(overflowCount())\"\n [style.top]=\"style.top\"\n [style.left]=\"style.left\"\n >\n @for (item of overflowItems(); track $index) {\n <li role=\"presentation\">\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"gbt-avatar-group__panel-item\"\n [attr.aria-current]=\"isActive(item) ? 'true' : null\"\n (click)=\"selectItem(item)\"\n >\n <gbt-avatar [name]=\"item.name\" [src]=\"item.src ?? null\" size=\"sm\" />\n <span class=\"gbt-avatar-group__panel-item-name\">{{ item.name }}</span>\n @if (isActive(item)) {\n <gbt-icon name=\"check\" class=\"gbt-avatar-group__panel-item-check\" aria-hidden=\"true\" />\n }\n </button>\n </li>\n }\n </ul>\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, input, output } from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nconst ASSERTIVE_VARIANTS: ReadonlySet<AlertVariant> = new Set(['warning', 'error'])\n\nconst VARIANT_ICONS: Record<AlertVariant, string> = {\n success: 'check-circle',\n error: 'alert-circle',\n warning: 'alert-triangle',\n info: 'info',\n}\n\n@Component({\n selector: 'gbt-alert',\n standalone: true,\n imports: [Icon],\n templateUrl: './alert.html',\n styleUrl: './alert.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Alert {\n variant = input<AlertVariant>('info')\n dismissible = input(false, { transform: booleanAttribute })\n closeLabel = input<string>('Dismiss')\n\n dismissed = output<void>()\n\n protected readonly role = computed(() => (ASSERTIVE_VARIANTS.has(this.variant()) ? 'alert' : 'status'))\n\n protected readonly icon = computed(() => VARIANT_ICONS[this.variant()])\n}\n","<div class=\"gbt-alert\" [attr.data-variant]=\"variant()\" [attr.role]=\"role()\" aria-atomic=\"true\">\n <span class=\"gbt-alert__icon\">\n <gbt-icon [name]=\"icon()\" aria-hidden=\"true\" />\n </span>\n <div class=\"gbt-alert__content\"><ng-content /></div>\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"gbt-alert__close\"\n [attr.aria-label]=\"closeLabel()\"\n (click)=\"dismissed.emit()\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n }\n</div>\n","/** A 6-digit hex color, with or without its leading `#`. */\nconst HEX_6 = /^#?[0-9a-fA-F]{6}$/\n\nfunction normalizeHex(hex: string): string {\n if (!HEX_6.test(hex)) {\n throw new Error(\n `getReadableTextColor: expected a 6-digit hex color such as \"#dc2626\" or \"dc2626\", got ${JSON.stringify(hex)}. ` +\n 'Shorthand hex (#abc), CSS named colors, rgb()/hsl() and custom properties are not supported.',\n )\n }\n return hex.replace('#', '')\n}\n\nfunction linearizeChannel(value: number): number {\n const c = value / 255\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)\n}\n\nfunction relativeLuminance(normalizedHex: string): number {\n const r = parseInt(normalizedHex.substring(0, 2), 16)\n const g = parseInt(normalizedHex.substring(2, 4), 16)\n const b = parseInt(normalizedHex.substring(4, 6), 16)\n return 0.2126 * linearizeChannel(r) + 0.7152 * linearizeChannel(g) + 0.0722 * linearizeChannel(b)\n}\n\nfunction contrastRatio(normalizedA: string, normalizedB: string): number {\n const lA = relativeLuminance(normalizedA)\n const lB = relativeLuminance(normalizedB)\n const lighter = Math.max(lA, lB)\n const darker = Math.min(lA, lB)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\n/**\n * Returns `'#ffffff'` or `'#000000'`, whichever reaches a higher WCAG contrast\n * ratio against `backgroundHex`. Used by `Tag` to keep its text readable on\n * an arbitrary caller-supplied background color that isn't one of the\n * design system's own semantic tokens.\n *\n * These two endpoints are not interchangeable with a \"softer\" dark such as\n * `#1a1a1a`: sweeping all 16 777 216 sRGB backgrounds, the worst achievable\n * ratio is **4.58:1** with `#000000` (at `#cf0dcc`) but only **4.17:1** with\n * `#1a1a1a` (at `#da25c3`) — below the 4.5:1 AA threshold that `Tag`'s\n * 12px bold text must meet, since it is not \"large text\".\n *\n * @param backgroundHex a 6-digit hex color, with or without its leading `#`.\n * @throws if `backgroundHex` is not a well-formed 6-digit hex color. Silently\n * guessing would be worse: a malformed value used to produce `NaN` ratios,\n * and `NaN >= NaN` being `false` returned dark text for *any* unparseable\n * input — so `'#000'` got dark text on a black background.\n */\nexport function getReadableTextColor(backgroundHex: string): string {\n const background = normalizeHex(backgroundHex)\n const white = 'ffffff'\n const dark = '000000'\n return contrastRatio(background, white) >= contrastRatio(background, dark) ? '#ffffff' : '#000000'\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core'\nimport { Icon } from '../icon/icon'\nimport { getReadableTextColor } from './tag-contrast'\n\n@Component({\n selector: 'gbt-tag',\n standalone: true,\n imports: [Icon],\n templateUrl: './tag.html',\n styleUrl: './tag.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tag {\n color = input.required<string>()\n removable = input<boolean>(false)\n removeLabel = input<string>('Remove')\n disabled = input<boolean>(false)\n\n removed = output<void>()\n\n protected readonly textColor = computed(() => getReadableTextColor(this.color()))\n\n protected onRemoveClick(event: MouseEvent): void {\n event.stopPropagation()\n this.removed.emit()\n }\n}\n","<span\n class=\"gbt-tag\"\n [style.background]=\"color()\"\n [style.color]=\"textColor()\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n>\n <span class=\"gbt-tag__label\"><ng-content /></span>\n @if (removable()) {\n <button type=\"button\" class=\"gbt-tag__remove\" [attr.aria-label]=\"removeLabel()\" (click)=\"onRemoveClick($event)\">\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n }\n</span>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type EmptyStateIllustration = 'folder' | 'star' | 'checklist' | 'merge' | 'pipeline' | 'tag' | 'book' | 'server'\n\n@Component({\n selector: 'gbt-empty-state',\n standalone: true,\n imports: [],\n templateUrl: './empty-state.html',\n styleUrl: './empty-state.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyState {\n illustration = input.required<EmptyStateIllustration>()\n heading = input.required<string>()\n message = input<string>('')\n}\n","<div class=\"gbt-empty-state\">\n <div class=\"gbt-empty-state__illustration\" aria-hidden=\"true\">\n @switch (illustration()) {\n @case ('folder') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"16\" y=\"38\" width=\"64\" height=\"40\" rx=\"4\" />\n <path d=\"M16 38 v-8a4 4 0 0 1 4-4h16l8 8h28a4 4 0 0 1 4 4\" />\n <rect x=\"34\" y=\"14\" width=\"16\" height=\"20\" rx=\"2\" transform=\"rotate(-8 42 24)\" opacity=\"0.55\" />\n <rect x=\"50\" y=\"16\" width=\"16\" height=\"20\" rx=\"2\" transform=\"rotate(6 58 26)\" opacity=\"0.55\" />\n </svg>\n }\n @case ('star') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M48,18 L55.6,37.5 L76.5,38.7 L60.4,52 L65.6,72.3 L48,61 L30.4,72.3 L35.6,52 L19.5,38.7 L40.4,37.5 Z\" />\n <path d=\"M78,14 L81,20 L78,26 L75,20 Z\" opacity=\"0.55\" />\n <path d=\"M16,64 L19,70 L16,76 L13,70 Z\" opacity=\"0.55\" />\n </svg>\n }\n @case ('checklist') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"24\" y=\"18\" width=\"48\" height=\"64\" rx=\"6\" />\n <rect x=\"38\" y=\"12\" width=\"20\" height=\"10\" rx=\"3\" />\n <line x1=\"34\" y1=\"38\" x2=\"62\" y2=\"38\" />\n <path d=\"M32 50 l4 4 l8-8\" />\n <line x1=\"46\" y1=\"52\" x2=\"62\" y2=\"52\" />\n <line x1=\"34\" y1=\"66\" x2=\"62\" y2=\"66\" opacity=\"0.55\" />\n </svg>\n }\n @case ('merge') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"24\" cy=\"22\" r=\"7\" />\n <circle cx=\"72\" cy=\"22\" r=\"7\" />\n <circle cx=\"48\" cy=\"76\" r=\"8\" />\n <path d=\"M24 29 V50 Q24 69 39 72\" />\n <path d=\"M72 29 V50 Q72 69 57 72\" />\n </svg>\n }\n @case ('pipeline') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"22\" cy=\"68\" r=\"12\" />\n <path d=\"M17 60 L29 68 L17 76 Z\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M29 58 L44 38\" />\n <circle cx=\"50\" cy=\"30\" r=\"10\" />\n <path d=\"M56 38 L70 54\" />\n <circle cx=\"76\" cy=\"62\" r=\"10\" />\n </svg>\n }\n @case ('tag') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M18 20 H54 L82 48 L54 76 H18 Q14 76 14 72 V24 Q14 20 18 20 Z\" />\n <circle cx=\"34\" cy=\"36\" r=\"5\" />\n </svg>\n }\n @case ('book') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M48 26 Q34 16 16 20 V72 Q34 68 48 78 Q62 68 80 72 V20 Q62 16 48 26 Z\" />\n <line x1=\"24\" y1=\"32\" x2=\"40\" y2=\"30\" />\n <line x1=\"24\" y1=\"42\" x2=\"40\" y2=\"40\" />\n <line x1=\"56\" y1=\"30\" x2=\"72\" y2=\"32\" />\n <line x1=\"56\" y1=\"40\" x2=\"72\" y2=\"42\" />\n </svg>\n }\n @case ('server') {\n <svg viewBox=\"0 0 96 96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"14\" y=\"16\" width=\"68\" height=\"26\" rx=\"5\" />\n <rect x=\"14\" y=\"54\" width=\"68\" height=\"26\" rx=\"5\" />\n <circle cx=\"26\" cy=\"29\" r=\"3\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"26\" cy=\"67\" r=\"3\" fill=\"currentColor\" stroke=\"none\" />\n <line x1=\"38\" y1=\"29\" x2=\"70\" y2=\"29\" opacity=\"0.55\" />\n <line x1=\"38\" y1=\"67\" x2=\"70\" y2=\"67\" opacity=\"0.55\" />\n </svg>\n }\n }\n </div>\n <p class=\"gbt-empty-state__heading\">{{ heading() }}</p>\n @if (message()) {\n <p class=\"gbt-empty-state__message\">{{ message() }}</p>\n }\n <div class=\"gbt-empty-state__action\">\n <ng-content />\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../icon/icon'\n\nlet nextInputId = 0\n\n@Component({\n selector: 'gbt-input',\n standalone: true,\n imports: [Icon],\n templateUrl: './input.html',\n styleUrl: './input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GbtInput),\n multi: true,\n },\n ],\n})\nexport class GbtInput implements ControlValueAccessor {\n id = input<string>(`gbt-input-${++nextInputId}`)\n label = input<string>('')\n type = input<'text' | 'password' | 'email'>('text')\n required = input(false, { transform: booleanAttribute })\n disabled = input(false, { transform: booleanAttribute })\n placeholder = input<string>('')\n errorMessage = input<string | null>(null)\n autocomplete = input<string>('off')\n\n showPasswordLabel = input<string>('Show password')\n\n hidePasswordLabel = input<string>('Hide password')\n\n committed = output<string>()\n\n protected readonly value = signal('')\n protected readonly passwordVisible = signal(false)\n protected readonly effectiveType = computed(() => {\n if (this.type() !== 'password') {\n return this.type()\n }\n return this.passwordVisible() ? 'text' : 'password'\n })\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: string) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: string): void {\n this.value.set(value ?? '')\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value\n this.value.set(value)\n this.onChange(value)\n }\n\n protected onBlur(): void {\n this.onTouched()\n this.committed.emit(this.value())\n }\n\n protected togglePasswordVisibility(): void {\n this.passwordVisible.update((visible) => !visible)\n }\n}\n","<div class=\"gbt-input\">\n @if (label()) {\n <label [for]=\"id()\">{{ label() }}{{ required() ? ' *' : '' }}</label>\n }\n <div class=\"gbt-input__wrapper\">\n <input\n [id]=\"id()\"\n [type]=\"effectiveType()\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [value]=\"value()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (type() === 'password') {\n <button\n type=\"button\"\n class=\"gbt-input__toggle\"\n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"passwordVisible() ? hidePasswordLabel() : showPasswordLabel()\"\n >\n <gbt-icon [name]=\"passwordVisible() ? 'eye-off' : 'eye'\" aria-hidden=\"true\" />\n </button>\n }\n </div>\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-input__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport { Tag } from '../../atoms/tag/tag'\n\nexport interface SelectOption<T = string> {\n value: T\n label: string\n icon?: string\n color?: string\n}\n\nlet nextSelectId = 0\n\n@Component({\n selector: 'gbt-select',\n standalone: true,\n imports: [Icon, Tag],\n templateUrl: './select.html',\n styleUrl: './select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onKeydown($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n '[class.gbt-select--sm]': \"size() === 'sm'\",\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Select),\n multi: true,\n },\n ],\n})\nexport class Select<T = string> implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef)\n\n id = input<string>(`gbt-select-${++nextSelectId}`)\n label = input<string>('')\n size = input<'md' | 'sm'>('md')\n options = input.required<SelectOption<T>[]>()\n multiple = input(false, { transform: booleanAttribute })\n chips = input(false, { transform: booleanAttribute })\n placeholder = input<string>('Select…')\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n selectedCountLabel = input<(count: number) => string>((count) => `${count} selected`)\n chipRemoveLabel = input<(label: string) => string>((label) => `Remove ${label}`)\n\n protected readonly open = signal(false)\n protected readonly activeIndex = signal(-1)\n protected readonly selected = signal<T[]>([])\n protected readonly panelStyle = signal<{ top: string; left: string; width: string } | null>(null)\n private readonly formDisabled = signal(false)\n\n protected readonly labelId = computed(() => `${this.id()}-label`)\n protected readonly chipsId = computed(() => `${this.id()}-chips`)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: T | T[] | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n writeValue(value: T | T[] | null): void {\n if (this.multiple()) {\n this.selected.set(Array.isArray(value) ? (value as T[]) : [])\n } else {\n this.selected.set(value === null || value === undefined ? [] : [value as T])\n }\n }\n\n registerOnChange(fn: (value: T | T[] | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n protected readonly selectedOptions = computed(() => {\n const selected = this.selected()\n return this.options().filter((option) => selected.includes(option.value))\n })\n\n protected readonly triggerLabel = computed(() => {\n const opts = this.selectedOptions()\n if (opts.length === 0) {\n return this.placeholder()\n }\n if (this.chips() && this.multiple()) {\n return this.placeholder()\n }\n if (this.multiple() && opts.length > 1) {\n return this.selectedCountLabel()(opts.length)\n }\n return opts[0].label\n })\n\n protected readonly chipsVisible = computed(\n () => this.chips() && this.multiple() && this.selectedOptions().length > 0,\n )\n\n /**\n * In chips mode the trigger keeps showing the placeholder, so the selection\n * is conveyed to assistive technology by describing the trigger with the\n * chip row itself. The error message keeps its own id in the list.\n */\n protected readonly describedBy = computed(() => {\n const ids: string[] = []\n if (this.chipsVisible()) {\n ids.push(this.chipsId())\n }\n if (this.errorMessage()) {\n ids.push(`${this.id()}-error`)\n }\n return ids.length > 0 ? ids.join(' ') : null\n })\n\n protected readonly triggerIcon = computed(() => {\n const opts = this.selectedOptions()\n return opts.length === 1 ? opts[0].icon : undefined\n })\n\n protected readonly activeOptionId = computed(() =>\n this.open() && this.activeIndex() >= 0 ? `${this.id()}-option-${this.activeIndex()}` : null,\n )\n\n protected isSelected(value: T): boolean {\n return this.selected().includes(value)\n }\n\n protected toggleOpen(): void {\n if (this.isDisabled()) {\n return\n }\n this.open.update((value) => !value)\n if (this.open()) {\n this.activeIndex.set(\n Math.max(\n 0,\n this.options().findIndex((o) => this.isSelected(o.value)),\n ),\n )\n this.updatePanelPosition()\n } else {\n this.onTouched()\n }\n }\n\n protected updatePanelPosition(): void {\n if (!this.open()) {\n return\n }\n const trigger = this.elementRef.nativeElement.querySelector(\n '.gbt-select__trigger',\n ) as HTMLElement | null\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n // In chips mode the chip row sits between the trigger and the panel.\n // Anchoring the panel to the trigger alone would lay it over the chips,\n // whose remove buttons are focusable — WCAG 2.4.11 \"focus not obscured\".\n const chipRow = this.elementRef.nativeElement.querySelector(\n '.gbt-select__chips',\n ) as HTMLElement | null\n const anchorBottom = chipRow\n ? Math.max(rect.bottom, chipRow.getBoundingClientRect().bottom)\n : rect.bottom\n this.panelStyle.set({\n top: `${anchorBottom + 6}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n })\n }\n\n /**\n * Removes the chip at `index`. Refuses to mutate anything while the control\n * is disabled (the remove buttons are not rendered then, but a programmatic\n * caller must not be able to bypass the disabled state either), and moves\n * focus off the button it is about to destroy — otherwise focus falls back\n * to `<body>`.\n */\n protected removeChip(value: T, index: number): void {\n if (this.isDisabled()) {\n return\n }\n const host = this.elementRef.nativeElement as HTMLElement\n const removeButtons = Array.from(\n host.querySelectorAll<HTMLElement>('.gbt-select__chips .gbt-tag__remove'),\n )\n // `@for` tracks options by value, so the surviving chips keep their DOM\n // nodes across this removal — the element resolved here is still the right\n // one once the view updates.\n const nextFocus =\n removeButtons[index + 1] ??\n removeButtons[index - 1] ??\n host.querySelector<HTMLElement>('.gbt-select__trigger')\n this.selectOption(value)\n nextFocus?.focus()\n }\n\n protected selectOption(value: T): void {\n if (this.multiple()) {\n const current = this.selected()\n const next = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value]\n this.selected.set(next)\n this.onChange(next)\n // A chip can be removed without ever opening the panel, so this is the\n // only place that marks the control as touched in that flow.\n this.onTouched()\n } else {\n this.selected.set([value])\n this.onChange(value)\n this.open.set(false)\n this.onTouched()\n }\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target)) {\n this.open.set(false)\n this.onTouched()\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) {\n return\n }\n if (!this.open()) {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.toggleOpen()\n }\n return\n }\n const options = this.options()\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n event.stopPropagation()\n this.open.set(false)\n this.onTouched()\n break\n case 'ArrowDown':\n event.preventDefault()\n this.activeIndex.update((i) => Math.min(i + 1, options.length - 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n this.activeIndex.update((i) => Math.max(i - 1, 0))\n break\n case 'Enter':\n case ' ': {\n event.preventDefault()\n const active = options[this.activeIndex()]\n if (active) {\n this.selectOption(active.value)\n }\n break\n }\n }\n }\n}\n","<div class=\"gbt-select\" [class.gbt-select--disabled]=\"isDisabled()\">\n @if (label()) {\n <label [id]=\"labelId()\" [for]=\"id()\" class=\"gbt-select__label\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n\n <button\n type=\"button\"\n [id]=\"id()\"\n class=\"gbt-select__trigger\"\n [class.gbt-select__trigger--open]=\"open()\"\n [disabled]=\"isDisabled()\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? id() + '-listbox' : null\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n [attr.aria-labelledby]=\"label() ? labelId() + ' ' + id() : null\"\n [attr.aria-required]=\"required() ? true : null\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n (click)=\"toggleOpen()\"\n >\n @if (triggerIcon(); as icon) {\n <gbt-icon [name]=\"icon\" class=\"gbt-select__trigger-icon\" aria-hidden=\"true\" />\n }\n <span\n class=\"gbt-select__trigger-label\"\n [class.gbt-select__trigger-label--placeholder]=\"selectedOptions().length === 0\"\n >\n {{ triggerLabel() }}\n </span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-select__chevron\" aria-hidden=\"true\" />\n </button>\n @if (chipsVisible()) {\n <div class=\"gbt-select__chips\" [id]=\"chipsId()\">\n @for (option of selectedOptions(); track option.value; let i = $index) {\n <gbt-tag\n [color]=\"option.color ?? '#6b7280'\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"chipRemoveLabel()(option.label)\"\n (removed)=\"removeChip(option.value, i)\"\n >\n {{ option.label }}\n </gbt-tag>\n }\n </div>\n }\n @if (chips() && multiple()) {\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n {{ selectedCountLabel()(selectedOptions().length) }}\n </div>\n }\n @if (open() && panelStyle(); as style) {\n <ul\n [id]=\"id() + '-listbox'\"\n class=\"gbt-select__panel\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || placeholder()\"\n [attr.aria-multiselectable]=\"multiple()\"\n [style.top]=\"style.top\"\n [style.left]=\"style.left\"\n [style.width]=\"style.width\"\n >\n @for (option of options(); track option.value; let i = $index) {\n <li role=\"presentation\">\n <button\n [id]=\"id() + '-option-' + i\"\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n class=\"gbt-select__option\"\n [class.gbt-select__option--selected]=\"isSelected(option.value)\"\n [class.gbt-select__option--active]=\"i === activeIndex()\"\n [attr.aria-selected]=\"isSelected(option.value)\"\n (click)=\"selectOption(option.value)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n @if (option.icon) {\n <gbt-icon [name]=\"option.icon\" class=\"gbt-select__option-icon\" aria-hidden=\"true\" />\n }\n <span class=\"gbt-select__option-label\">{{ option.label }}</span>\n @if (isSelected(option.value)) {\n <gbt-icon name=\"check\" class=\"gbt-select__option-check\" aria-hidden=\"true\" />\n }\n </button>\n </li>\n }\n </ul>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-select__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, effect, input, output } from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { FormControl, ReactiveFormsModule } from '@angular/forms'\nimport { GbtInput } from '../../atoms/input/input'\nimport { Select, SelectOption } from '../select/select'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport interface ListToolbarSortOption<T extends string = string> {\n value: T\n label: string\n}\n\n@Component({\n selector: 'gbt-list-toolbar',\n standalone: true,\n imports: [ReactiveFormsModule, GbtInput, Select, Icon],\n templateUrl: './list-toolbar.html',\n styleUrl: './list-toolbar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListToolbar<T extends string = string> {\n searchValue = input<string>('')\n searchLabel = input.required<string>()\n searchPlaceholder = input<string>('')\n sortOptions = input.required<ListToolbarSortOption<T>[]>()\n sortValue = input.required<T>()\n sortDirection = input<'asc' | 'desc'>('asc')\n sortLabel = input<string>('Sort by')\n directionLabel = input<string>('Reverse sort direction')\n\n searchValueChange = output<string>()\n sortValueChange = output<T>()\n sortDirectionChange = output<'asc' | 'desc'>()\n\n // Plain `[ngModel]` bindings on the child `gbt-input`/`gbt-select` defer their\n // initial value to a control-value-accessor writeValue() call scheduled on a\n // microtask (an Angular Forms `NgModel` implementation detail), so the very\n // first render would briefly show the empty/placeholder state. Reactive\n // FormControls propagate `setValue()` to the CVA synchronously, so we mirror\n // the inputs onto internal controls instead and forward user edits back out.\n protected readonly searchControl = new FormControl<string>('', { nonNullable: true })\n protected readonly sortControl = new FormControl<T | null>(null)\n\n constructor() {\n effect(() => this.searchControl.setValue(this.searchValue(), { emitEvent: false }))\n effect(() => this.sortControl.setValue(this.sortValue(), { emitEvent: false }))\n\n this.searchControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((value) => this.searchValueChange.emit(value))\n\n this.sortControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((value) => {\n if (value !== null && value !== this.sortValue()) {\n this.sortValueChange.emit(value)\n }\n })\n }\n\n protected asSelectOptions(options: ListToolbarSortOption<T>[]): SelectOption<T>[] {\n return options\n }\n\n protected toggleDirection(): void {\n this.sortDirectionChange.emit(this.sortDirection() === 'asc' ? 'desc' : 'asc')\n }\n}\n","<div class=\"gbt-list-toolbar\">\n <gbt-input\n class=\"gbt-list-toolbar__search\"\n [label]=\"searchLabel()\"\n [placeholder]=\"searchPlaceholder()\"\n [formControl]=\"searchControl\"\n />\n <gbt-select\n class=\"gbt-list-toolbar__sort\"\n [label]=\"sortLabel()\"\n [options]=\"asSelectOptions(sortOptions())\"\n [formControl]=\"sortControl\"\n />\n <button\n type=\"button\"\n class=\"gbt-list-toolbar__direction\"\n (click)=\"toggleDirection()\"\n [attr.aria-label]=\"directionLabel()\"\n [attr.aria-pressed]=\"sortDirection() === 'desc'\"\n >\n <gbt-icon [name]=\"sortDirection() === 'asc' ? 'arrow-up' : 'arrow-down'\" />\n </button>\n</div>\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\n@Component({\n selector: 'gbt-card',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './card.html',\n styleUrl: './card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Card {\n hoverable = input(false, { transform: booleanAttribute })\n heading = input<string>('')\n icon = input<string>('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n\n protected readonly cardClass = computed(\n () => 'gbt-card' + (this.hoverable() ? ' gbt-card--hoverable' : ''),\n )\n}\n","<div [class]=\"cardClass()\">\n @if (heading()) {\n <div class=\"gbt-card__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"headingContent\" /></h1>\n }\n @case (3) {\n <h3 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"headingContent\" /></h3>\n }\n @case (4) {\n <h4 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"headingContent\" /></h4>\n }\n @case (5) {\n <h5 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"headingContent\" /></h5>\n }\n @case (6) {\n <h6 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"headingContent\" /></h6>\n }\n @default {\n <h2 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"headingContent\" /></h2>\n }\n }\n <ng-content select=\"[card-header-actions]\"></ng-content>\n </div>\n }\n <ng-content></ng-content>\n</div>\n<ng-template #headingContent>\n @if (icon()) {\n <gbt-icon [name]=\"icon()\" aria-hidden=\"true\" />\n }\n {{ heading() }}\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextCheckboxId = 0\n\n@Component({\n selector: 'gbt-checkbox',\n standalone: true,\n templateUrl: './checkbox.html',\n styleUrl: './checkbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Checkbox),\n multi: true,\n },\n ],\n})\nexport class Checkbox implements ControlValueAccessor {\n id = input<string>(`gbt-checkbox-${++nextCheckboxId}`)\n label = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n\n protected readonly checked = signal(false)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: boolean) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: boolean): void {\n this.checked.set(!!value)\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked\n this.checked.set(value)\n this.onChange(value)\n this.onTouched()\n }\n}\n","<label class=\"gbt-checkbox\" [class.gbt-checkbox--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n [id]=\"id()\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onToggle($event)\"\n />\n <span>{{ label() }}</span>\n</label>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n OnDestroy,\n effect,\n input,\n output,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\n@Component({\n selector: 'gbt-modal',\n standalone: true,\n imports: [Icon],\n templateUrl: './modal.html',\n styleUrl: './modal.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Modal implements OnDestroy {\n isOpen = input.required<boolean>()\n heading = input<string>('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n closeLabel = input<string>('Close')\n\n closed = output<void>()\n\n private readonly dialog = viewChild<ElementRef<HTMLElement>>('dialog')\n\n private previouslyFocused: HTMLElement | null = null\n\n constructor() {\n effect(() => {\n if (this.isOpen()) {\n this.previouslyFocused = document.activeElement as HTMLElement | null\n queueMicrotask(() => this.dialog()?.nativeElement.focus())\n } else if (this.previouslyFocused) {\n const target = this.previouslyFocused\n this.previouslyFocused = null\n target.focus()\n }\n })\n }\n\n ngOnDestroy(): void {\n this.previouslyFocused?.focus()\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n if (this.isOpen()) {\n this.closed.emit()\n }\n }\n\n protected onBackdropClick(event: MouseEvent): void {\n if (event.target === event.currentTarget) {\n this.closed.emit()\n }\n }\n\n protected onDialogKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab') {\n return\n }\n const dialog = this.dialog()?.nativeElement\n if (!dialog) {\n return\n }\n const focusable = dialog.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n )\n if (focusable.length === 0) {\n return\n }\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n","@if (isOpen()) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div class=\"gbt-modal__backdrop\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"gbt-modal__dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"heading() || null\"\n tabindex=\"-1\"\n #dialog\n (keydown)=\"onDialogKeydown($event)\"\n >\n <header class=\"gbt-modal__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-modal__title\">{{ heading() }}</h1>\n }\n @case (3) {\n <h3 class=\"gbt-modal__title\">{{ heading() }}</h3>\n }\n @case (4) {\n <h4 class=\"gbt-modal__title\">{{ heading() }}</h4>\n }\n @case (5) {\n <h5 class=\"gbt-modal__title\">{{ heading() }}</h5>\n }\n @case (6) {\n <h6 class=\"gbt-modal__title\">{{ heading() }}</h6>\n }\n @default {\n <h2 class=\"gbt-modal__title\">{{ heading() }}</h2>\n }\n }\n <button\n type=\"button\"\n class=\"gbt-modal__close\"\n (click)=\"closed.emit()\"\n [attr.aria-label]=\"closeLabel()\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </header>\n <div class=\"gbt-modal__body\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n OnDestroy,\n effect,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type DrawerEdge = 'right' | 'left' | 'top' | 'bottom'\n\nconst CLOSE_ANIMATION_MS = 200\n\n@Component({\n selector: 'gbt-drawer',\n standalone: true,\n imports: [Icon],\n templateUrl: './drawer.html',\n styleUrl: './drawer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Drawer implements OnDestroy {\n isOpen = input.required<boolean>()\n edge = input<DrawerEdge>('right')\n heading = input<string>('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n closeLabel = input<string>('Close')\n\n closed = output<void>()\n\n protected readonly rendered = signal(false)\n\n private readonly panel = viewChild<ElementRef<HTMLElement>>('panel')\n\n private previouslyFocused: HTMLElement | null = null\n private closeTimer: ReturnType<typeof setTimeout> | null = null\n\n constructor() {\n effect(() => {\n if (this.isOpen()) {\n if (this.closeTimer !== null) {\n clearTimeout(this.closeTimer)\n this.closeTimer = null\n }\n this.rendered.set(true)\n this.previouslyFocused = document.activeElement as HTMLElement | null\n queueMicrotask(() => this.panel()?.nativeElement.focus())\n } else if (this.rendered()) {\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null\n this.rendered.set(false)\n if (this.previouslyFocused) {\n const target = this.previouslyFocused\n this.previouslyFocused = null\n target.focus()\n }\n }, CLOSE_ANIMATION_MS)\n }\n })\n }\n\n ngOnDestroy(): void {\n if (this.closeTimer !== null) {\n clearTimeout(this.closeTimer)\n }\n this.previouslyFocused?.focus()\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n if (this.isOpen()) {\n this.closed.emit()\n }\n }\n\n protected onBackdropClick(event: MouseEvent): void {\n if (event.target === event.currentTarget) {\n this.closed.emit()\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab') {\n return\n }\n const panel = this.panel()?.nativeElement\n if (!panel) {\n return\n }\n const focusable = panel.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n )\n if (focusable.length === 0) {\n return\n }\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n","@if (rendered()) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"gbt-drawer__backdrop\"\n [class.gbt-drawer__backdrop--closing]=\"!isOpen()\"\n (click)=\"onBackdropClick($event)\"\n >\n <div\n #panel\n class=\"gbt-drawer__panel\"\n [class.gbt-drawer__panel--closing]=\"!isOpen()\"\n [attr.data-edge]=\"edge()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"heading() || null\"\n tabindex=\"-1\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <header class=\"gbt-drawer__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-drawer__title\">{{ heading() }}</h1>\n }\n @case (3) {\n <h3 class=\"gbt-drawer__title\">{{ heading() }}</h3>\n }\n @case (4) {\n <h4 class=\"gbt-drawer__title\">{{ heading() }}</h4>\n }\n @case (5) {\n <h5 class=\"gbt-drawer__title\">{{ heading() }}</h5>\n }\n @case (6) {\n <h6 class=\"gbt-drawer__title\">{{ heading() }}</h6>\n }\n @default {\n <h2 class=\"gbt-drawer__title\">{{ heading() }}</h2>\n }\n }\n <button\n type=\"button\"\n class=\"gbt-drawer__close\"\n (click)=\"closed.emit()\"\n [attr.aria-label]=\"closeLabel()\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </header>\n <div class=\"gbt-drawer__body\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, booleanAttribute, input, output } from '@angular/core'\nimport { NgTemplateOutlet } from '@angular/common'\n\nexport interface TableColumn<T> {\n key: string\n label: string\n format?: (row: T) => string\n cellTemplate?: TemplateRef<{ $implicit: T }>\n}\n\n@Component({\n selector: 'gbt-table',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './table.html',\n styleUrl: './table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Table<T extends object> {\n data = input.required<T[]>()\n columns = input.required<TableColumn<T>[]>()\n trackBy = input<((row: T) => unknown) | null>(null)\n emptyMessage = input<string>('No data')\n caption = input.required<string>()\n clickableRows = input(false, { transform: booleanAttribute })\n\n rowClick = output<T>()\n\n protected trackRow = (index: number, row: T): unknown => {\n const identify = this.trackBy()\n return identify ? identify(row) : index\n }\n\n protected onRowKeydown(event: KeyboardEvent, row: T): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.rowClick.emit(row)\n }\n }\n\n protected cellValue(row: T, column: TableColumn<T>): unknown {\n return column.format ? column.format(row) : (row as Record<string, unknown>)[column.key]\n }\n}\n","<table class=\"gbt-table\">\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n @for (column of columns(); track column.key) {\n <th scope=\"col\">{{ column.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data(); track trackRow($index, row)) {\n <tr\n [class.gbt-table__row--clickable]=\"clickableRows()\"\n [attr.tabindex]=\"clickableRows() ? 0 : null\"\n (click)=\"clickableRows() && rowClick.emit(row)\"\n (keydown)=\"clickableRows() && onRowKeydown($event, row)\"\n >\n @for (column of columns(); track column.key) {\n <td>\n @if (column.cellTemplate) {\n <ng-container [ngTemplateOutlet]=\"column.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row }\" />\n } @else {\n {{ cellValue(row, column) }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr class=\"gbt-table__empty\">\n <td [attr.colspan]=\"columns().length\">{{ emptyMessage() }}</td>\n </tr>\n }\n </tbody>\n</table>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport interface SearchResultCategory<T = unknown> {\n label: string\n icon?: string\n items: T[]\n}\n\nlet nextSearchBarId = 0\n\n@Component({\n selector: 'gbt-search-bar',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './search-bar.html',\n styleUrl: './search-bar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown)': 'onNavigationKeydown($event)',\n '(document:click)': 'handleClickOutside($event)',\n },\n})\nexport class SearchBar<T = unknown> {\n private readonly elementRef = inject(ElementRef)\n\n id = input<string>(`gbt-search-bar-${++nextSearchBarId}`)\n results = input<T[] | null>(null)\n groupedResults = input<SearchResultCategory<T>[] | null>(null)\n placeholder = input<string>('Search…')\n ariaLabel = input<string>('')\n displayFn = input<(item: T) => string>((item) => String(item))\n itemTemplate = input<TemplateRef<unknown>>()\n keepQueryOnSelect = input(false)\n noResultsMessage = input<string>('No results')\n noResultsHint = input<string>('Try a different search.')\n clearLabel = input<string>('Clear search')\n resultsAnnouncement = input<(count: number) => string>(\n (count) => `${count} result${count !== 1 ? 's' : ''}`,\n )\n navigateHint = input<string>('Navigate')\n selectHint = input<string>('Select')\n closeHint = input<string>('Close')\n\n queryChange = output<string>()\n itemSelected = output<T>()\n clear = output<void>()\n\n protected readonly isFocused = signal(false)\n protected readonly showResults = signal(false)\n protected readonly searchQuery = signal('')\n protected readonly activeIndex = signal(0)\n\n protected readonly searchInput = viewChild<ElementRef<HTMLInputElement>>('searchInput')\n\n private readonly hasGroupedResultsInput = computed(() => !!this.groupedResults())\n\n protected readonly allVisibleItems = computed<T[]>(() => {\n if (this.groupedResults()) {\n return this.groupedResults()!.flatMap((category) => category.items)\n }\n return this.results() ?? []\n })\n\n protected readonly showOverlay = computed(() => this.showResults())\n\n protected readonly panelId = computed(() => `${this.id()}-panel`)\n\n protected itemDomId(index: number): string {\n return `${this.id()}-item-${index}`\n }\n\n protected readonly indexedGroupedResults = computed(() => {\n const grouped = this.groupedResults()\n if (!grouped) return null\n const format = this.displayFn()\n let index = 0\n return grouped.map((category) => ({\n ...category,\n indexedItems: category.items.map((item) => ({\n item,\n index: index++,\n formatted: format(item),\n })),\n }))\n })\n\n protected readonly indexedResults = computed(() => {\n const format = this.displayFn()\n return (this.results() ?? []).map((item, index) => ({ item, index, formatted: format(item) }))\n })\n\n protected readonly activeItemDomId = computed(() => {\n if (!this.showOverlay()) return null\n const idx = this.activeIndex()\n\n return idx >= 0 && idx < this.allVisibleItems().length ? this.itemDomId(idx) : null\n })\n\n protected readonly resultCount = computed(() =>\n this.showOverlay() ? this.allVisibleItems().length : 0,\n )\n\n protected readonly hasGroupedResults = computed(\n () => this.hasGroupedResultsInput() && !!this.groupedResults()?.some((c) => c.items.length > 0),\n )\n\n protected readonly hasNoResults = computed(() => this.allVisibleItems().length === 0)\n\n protected onNavigationKeydown(event: KeyboardEvent): void {\n if (!this.isFocused() || !this.showOverlay()) return\n\n if (event.key === 'Escape') {\n event.preventDefault()\n this.blurSearch()\n return\n }\n\n const items = this.allVisibleItems()\n if (items.length === 0) return\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.activeIndex.update((i) => Math.min(i + 1, items.length - 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n this.activeIndex.update((i) => Math.max(i - 1, 0))\n break\n case 'Enter': {\n const active = items[this.activeIndex()]\n if (!active) break\n event.preventDefault()\n this.onSelect(active)\n break\n }\n }\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.showResults.set(false)\n }\n }\n\n focusSearch(): void {\n this.searchInput()?.nativeElement.focus()\n }\n\n protected blurSearch(): void {\n this.searchInput()?.nativeElement.blur()\n this.showResults.set(false)\n }\n\n protected onFocus(): void {\n this.isFocused.set(true)\n if (this.searchQuery().length > 0) this.showResults.set(true)\n }\n\n protected onBlur(): void {\n this.isFocused.set(false)\n setTimeout(() => {\n if (!this.elementRef.nativeElement.contains(document.activeElement)) {\n this.showResults.set(false)\n }\n }, 200)\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value\n this.searchQuery.set(value)\n this.activeIndex.set(0)\n this.showResults.set(value.length > 0)\n\n this.queryChange.emit(value)\n }\n\n protected onClear(): void {\n this.searchQuery.set('')\n this.activeIndex.set(0)\n this.showResults.set(false)\n this.clear.emit()\n this.focusSearch()\n }\n\n protected onSelect(item: T): void {\n this.itemSelected.emit(item)\n this.showResults.set(false)\n this.searchQuery.set(this.keepQueryOnSelect() ? this.displayFn()(item) : '')\n }\n}\n","<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n<div class=\"gbt-sb-trigger\" [class.gbt-sb-trigger--open]=\"isFocused()\" (click)=\"focusSearch()\">\n <gbt-icon name=\"search\" class=\"gbt-sb-trigger__icon\" aria-hidden=\"true\" />\n <input\n #searchInput\n type=\"text\"\n role=\"combobox\"\n class=\"gbt-sb-trigger__input\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"ariaLabel() || placeholder()\"\n [value]=\"searchQuery()\"\n [attr.aria-expanded]=\"showOverlay()\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"showOverlay() ? panelId() : null\"\n [attr.aria-activedescendant]=\"activeItemDomId()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (input)=\"onInput($event)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n @if (searchQuery().length > 0) {\n <button\n type=\"button\"\n class=\"gbt-sb-trigger__clear\"\n (click)=\"onClear()\"\n [attr.aria-label]=\"clearLabel()\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n }\n</div>\n@if (showOverlay()) {\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n {{ resultsAnnouncement()(resultCount()) }}\n </div>\n}\n@if (showOverlay()) {\n <div class=\"gbt-sb-backdrop\" (click)=\"blurSearch()\" aria-hidden=\"true\"></div>\n <ng-template #footer>\n <div class=\"gbt-sb-footer\" aria-hidden=\"true\">\n <span class=\"gbt-sb-footer__hint\">\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">↑</kbd>\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">↓</kbd>\n {{ navigateHint() }}\n </span>\n <span class=\"gbt-sb-footer__hint\">\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">↵</kbd>\n {{ selectHint() }}\n </span>\n <span class=\"gbt-sb-footer__hint\">\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">Esc</kbd>\n {{ closeHint() }}\n </span>\n </div>\n </ng-template>\n @if (hasNoResults()) {\n <div [id]=\"panelId()\" class=\"gbt-sb-panel\">\n <div class=\"gbt-sb-state\" role=\"status\">\n <gbt-icon name=\"search\" class=\"gbt-sb-state__icon\" aria-hidden=\"true\" />\n <span>{{ noResultsMessage() }}</span>\n <p class=\"gbt-sb-state__hint\">{{ noResultsHint() }}</p>\n </div>\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n } @else {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n [id]=\"panelId()\"\n class=\"gbt-sb-panel\"\n role=\"listbox\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (hasGroupedResults()) {\n <div class=\"gbt-sb-list\">\n @for (category of indexedGroupedResults(); track category.label) {\n @if (category.items.length > 0) {\n <div class=\"gbt-sb-group-label\">\n @if (category.icon) {\n <gbt-icon [name]=\"category.icon\" aria-hidden=\"true\" />\n }\n {{ category.label }}\n <span class=\"gbt-sb-group-count\" aria-hidden=\"true\">{{\n category.items.length\n }}</span>\n </div>\n @for (entry of category.indexedItems; track entry.index) {\n <button\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"itemDomId(entry.index)\"\n class=\"gbt-sb-item\"\n [attr.aria-selected]=\"entry.index === activeIndex()\"\n [class.gbt-sb-item--active]=\"entry.index === activeIndex()\"\n (click)=\"onSelect(entry.item)\"\n (mouseenter)=\"activeIndex.set(entry.index)\"\n >\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: entry.item }\"\n ></ng-container>\n } @else {\n @if (category.icon) {\n <gbt-icon\n [name]=\"category.icon\"\n class=\"gbt-sb-item__icon\"\n aria-hidden=\"true\"\n />\n }\n <span class=\"gbt-sb-item__label\">{{ entry.formatted }}</span>\n }\n </button>\n }\n }\n }\n </div>\n } @else if (results() && results()!.length > 0) {\n <div class=\"gbt-sb-list\">\n @for (entry of indexedResults(); track entry.index) {\n <button\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"itemDomId(entry.index)\"\n class=\"gbt-sb-item\"\n [attr.aria-selected]=\"entry.index === activeIndex()\"\n [class.gbt-sb-item--active]=\"entry.index === activeIndex()\"\n (click)=\"onSelect(entry.item)\"\n (mouseenter)=\"activeIndex.set(entry.index)\"\n >\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: entry.item }\"\n ></ng-container>\n } @else {\n <span class=\"gbt-sb-item__label\">{{ entry.formatted }}</span>\n }\n </button>\n }\n </div>\n }\n\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n}\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core'\n\n@Component({\n selector: 'gbt-tab',\n standalone: true,\n imports: [],\n template: `<ng-content></ng-content>`,\n host: {\n role: 'tabpanel',\n '[style.display]': \"active() ? null : 'none'\",\n '[id]': \"groupId() + '-panel-' + index()\",\n '[attr.aria-labelledby]': \"groupId() + '-trigger-' + index()\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tab {\n label = input.required<string>()\n\n protected readonly active = signal(false)\n protected readonly index = signal(0)\n protected readonly groupId = signal('')\n\n setState(index: number, active: boolean, groupId: string): void {\n this.index.set(index)\n this.active.set(active)\n this.groupId.set(groupId)\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n contentChildren,\n effect,\n input,\n model,\n viewChildren,\n} from '@angular/core'\nimport { Tab } from '../tab/tab'\n\nlet nextTabsId = 0\n\n@Component({\n selector: 'gbt-tabs',\n standalone: true,\n imports: [],\n templateUrl: './tabs.html',\n styleUrl: './tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tabs {\n id = input<string>(`gbt-tabs-${++nextTabsId}`)\n\n protected readonly tabs = contentChildren(Tab)\n private readonly triggers = viewChildren<ElementRef<HTMLButtonElement>>('trigger')\n\n activeIndex = model(0)\n\n constructor() {\n effect(() => {\n const tabs = this.tabs()\n const active = this.activeIndex()\n const groupId = this.id()\n tabs.forEach((tab, i) => tab.setState(i, i === active, groupId))\n })\n\n // Self-heals an out-of-range `activeIndex` — e.g. a consumer binds it to\n // a URL query parameter and the stored value no longer matches any tab —\n // instead of leaving every panel hidden and every trigger out of the\n // keyboard tab order with no way to reach the component at all.\n effect(() => {\n const count = this.tabs().length\n if (count === 0) {\n return\n }\n const current = this.activeIndex()\n const clamped = Math.min(Math.max(current, 0), count - 1)\n if (clamped !== current) {\n this.activeIndex.set(clamped)\n }\n })\n }\n\n protected select(index: number): void {\n this.activeIndex.set(index)\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const count = this.tabs().length\n if (count === 0) {\n return\n }\n let next: number | null = null\n if (event.key === 'ArrowRight') {\n next = (index + 1) % count\n } else if (event.key === 'ArrowLeft') {\n next = (index - 1 + count) % count\n }\n if (next === null) {\n return\n }\n event.preventDefault()\n this.select(next)\n this.triggers()[next]?.nativeElement.focus()\n }\n}\n","<div class=\"gbt-tabs\">\n <div class=\"gbt-tabs__list\" role=\"tablist\">\n @for (tab of tabs(); track tab; let i = $index) {\n <button\n #trigger\n type=\"button\"\n class=\"gbt-tabs__trigger\"\n [class.gbt-tabs__trigger--active]=\"activeIndex() === i\"\n role=\"tab\"\n [id]=\"id() + '-trigger-' + i\"\n [attr.aria-selected]=\"activeIndex() === i\"\n [attr.aria-controls]=\"id() + '-panel-' + i\"\n [tabIndex]=\"activeIndex() === i ? 0 : -1\"\n (click)=\"select(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n {{ tab.label() }}\n </button>\n }\n </div>\n <div class=\"gbt-tabs__panels\">\n <ng-content></ng-content>\n </div>\n</div>\n","export interface Scale<T> {\n map(value: T): number\n invert(pixel: number): T\n readonly domain: [T, T]\n readonly range: [number, number]\n}\n\nexport function linearScale(domain: [number, number], range: [number, number]): Scale<number> {\n const [d0, d1] = domain\n const [r0, r1] = range\n const span = d1 - d0\n\n const ratio = span === 0 ? 0 : (r1 - r0) / span\n return {\n domain,\n range,\n map: (value) => r0 + (value - d0) * ratio,\n invert: (pixel) => (ratio === 0 ? d0 : d0 + (pixel - r0) / ratio),\n }\n}\n\nexport function timeScale(domain: [Date, Date], range: [number, number]): Scale<Date> {\n const numeric = linearScale([domain[0].getTime(), domain[1].getTime()], range)\n return {\n domain,\n range,\n map: (value) => numeric.map(value.getTime()),\n invert: (pixel) => new Date(numeric.invert(pixel)),\n }\n}\n\nexport interface BandScale {\n map(value: string): number\n invert(pixel: number): string | null\n readonly bandwidth: number\n readonly domain: string[]\n readonly range: [number, number]\n}\n\nexport function bandScale(domain: string[], range: [number, number], padding = 0): BandScale {\n const [r0, r1] = range\n const step = domain.length === 0 ? 0 : (r1 - r0) / domain.length\n\n const gutter = Math.min(Math.max(padding, 0), 1)\n const bandwidth = step * (1 - gutter)\n return {\n domain,\n range,\n bandwidth,\n map: (value) => {\n const index = domain.indexOf(value)\n\n return index === -1 ? Number.NaN : r0 + index * step\n },\n invert: (pixel) => {\n if (step === 0) return null\n const index = Math.floor((pixel - r0) / step)\n return index >= 0 && index < domain.length ? domain[index] : null\n },\n }\n}\n","export function niceTicks(min: number, max: number, count: number): number[] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return []\n\n if (min === max) return [min]\n\n if (max < min) return niceTicks(max, min, count)\n\n const rawStep = (max - min) / Math.max(1, count)\n const magnitude = 10 ** Math.floor(Math.log10(rawStep))\n const normalized = rawStep / magnitude\n const step = magnitude * (normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10)\n\n const first = Math.floor(min / step) * step\n const last = Math.ceil(max / step) * step\n\n const decimals = Math.max(0, -Math.floor(Math.log10(step)))\n\n const ticks: number[] = []\n\n for (let value = first; value <= last + step / 1e9; value += step) {\n ticks.push(Number(value.toFixed(decimals)))\n }\n return ticks\n}\n\nexport type TimeUnit = 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'\n\nexport interface TimeTicks {\n readonly values: Date[]\n readonly unit: TimeUnit\n format(date: Date, locale: string): string\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\n\nconst STEPS: { ms: number; unit: TimeUnit; months?: number }[] = [\n { ms: SECOND, unit: 'second' },\n { ms: 5 * SECOND, unit: 'second' },\n { ms: 15 * SECOND, unit: 'second' },\n { ms: 30 * SECOND, unit: 'second' },\n { ms: MINUTE, unit: 'minute' },\n { ms: 5 * MINUTE, unit: 'minute' },\n { ms: 15 * MINUTE, unit: 'minute' },\n { ms: 30 * MINUTE, unit: 'minute' },\n { ms: HOUR, unit: 'hour' },\n { ms: 3 * HOUR, unit: 'hour' },\n { ms: 6 * HOUR, unit: 'hour' },\n { ms: 12 * HOUR, unit: 'hour' },\n { ms: DAY, unit: 'day' },\n { ms: 2 * DAY, unit: 'day' },\n { ms: 7 * DAY, unit: 'day' },\n { ms: 30 * DAY, unit: 'month', months: 1 },\n { ms: 90 * DAY, unit: 'month', months: 3 },\n { ms: 365 * DAY, unit: 'year', months: 12 },\n]\n\nconst FORMATS: Record<TimeUnit, Intl.DateTimeFormatOptions> = {\n second: { hour: '2-digit', minute: '2-digit', second: '2-digit' },\n minute: { hour: '2-digit', minute: '2-digit' },\n hour: { hour: '2-digit', minute: '2-digit' },\n day: { day: '2-digit', month: '2-digit' },\n month: { month: 'short', year: 'numeric' },\n year: { year: 'numeric' },\n}\n\nconst MIN_PIXELS_PER_TICK = 60\n\nexport function timeTicks(start: Date, end: Date, pixelWidth: number): TimeTicks {\n const span = end.getTime() - start.getTime()\n const makeFormatter = (unit: TimeUnit) => (date: Date, locale: string) =>\n new Intl.DateTimeFormat(locale, { ...FORMATS[unit], timeZone: 'UTC' }).format(date)\n\n if (span <= 0) {\n return { values: [start], unit: 'day', format: makeFormatter('day') }\n }\n\n const maxTicks = Math.max(2, Math.floor(pixelWidth / MIN_PIXELS_PER_TICK))\n\n const coarsest = STEPS[STEPS.length - 1]\n const chosen = STEPS.find((step) => span / step.ms + 1 <= maxTicks) ?? {\n ...coarsest,\n months: coarsest.months! * Math.max(1, Math.ceil((span / coarsest.ms + 1) / maxTicks)),\n }\n\n const values: Date[] = []\n if (chosen.months) {\n const step = chosen.months\n const cursor =\n step >= 12\n ? new Date(Date.UTC(Math.floor(start.getUTCFullYear() / (step / 12)) * (step / 12), 0, 1))\n : new Date(\n Date.UTC(start.getUTCFullYear(), Math.floor(start.getUTCMonth() / step) * step, 1),\n )\n while (cursor.getTime() < start.getTime()) cursor.setUTCMonth(cursor.getUTCMonth() + step)\n while (cursor.getTime() <= end.getTime()) {\n values.push(new Date(cursor))\n cursor.setUTCMonth(cursor.getUTCMonth() + step)\n }\n } else {\n const first = Math.ceil(start.getTime() / chosen.ms) * chosen.ms\n for (let t = first; t <= end.getTime(); t += chosen.ms) {\n values.push(new Date(t))\n }\n }\n\n if (values.length === 0) values.push(start)\n\n return { values, unit: chosen.unit, format: makeFormatter(chosen.unit) }\n}\n","export function formatNumber(value: number, locale: string, decimals?: number): string {\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value)\n}\n\nexport function formatCompact(value: number, locale: string): string {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(value)\n}\n\nexport function formatDuration(ms: number, locale: string): string {\n if (ms < 1000) return `${formatNumber(Math.round(ms), locale)} ms`\n\n const totalSeconds = Math.round(ms / 1000)\n const hours = Math.floor(totalSeconds / 3600)\n const minutes = Math.floor((totalSeconds % 3600) / 60)\n const seconds = totalSeconds % 60\n const num = (value: number) => formatNumber(value, locale)\n\n if (hours > 0) return minutes > 0 ? `${num(hours)} h ${num(minutes)} min` : `${num(hours)} h`\n if (minutes > 0)\n return seconds > 0 ? `${num(minutes)} min ${num(seconds)} s` : `${num(minutes)} min`\n return `${num(seconds)} s`\n}\n\nexport function formatPercent(ratio: number, locale: string, decimals = 0): string {\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(ratio)\n}\n","export interface Point {\n x: number\n y: number\n}\n\nconst round = (n: number): number => Number(n.toFixed(2))\n\nexport function linePath(points: Point[]): string {\n if (points.length === 0) return ''\n return points\n .map((point, index) => `${index === 0 ? 'M' : 'L'}${round(point.x)},${round(point.y)}`)\n .join('')\n}\n\nexport function areaPath(points: Point[], baseline: number): string {\n if (points.length === 0) return ''\n const last = points[points.length - 1]\n const first = points[0]\n return `${linePath(points)}L${round(last.x)},${round(baseline)}L${round(first.x)},${round(baseline)}Z`\n}\n\nexport interface Arc {\n startAngle: number\n endAngle: number\n innerRadius: number\n outerRadius: number\n}\n\nfunction arcPoint(radius: number, angle: number): Point {\n return { x: radius * Math.sin(angle), y: -radius * Math.cos(angle) }\n}\n\nfunction point(p: Point): string {\n return `${round(p.x)},${round(p.y)}`\n}\n\nconst FULL_CIRCLE = Math.PI * 2\n\nexport function arcPath(arc: Arc): string {\n const { startAngle, endAngle, innerRadius, outerRadius } = arc\n const span = endAngle - startAngle\n if (span <= 0) return ''\n if (span >= FULL_CIRCLE - 1e-9) {\n const mid = startAngle + Math.PI\n return (\n arcPath({ startAngle, endAngle: mid, innerRadius, outerRadius }) +\n arcPath({ startAngle: mid, endAngle: startAngle + FULL_CIRCLE, innerRadius, outerRadius })\n )\n }\n\n const largeArc = span > Math.PI ? 1 : 0\n const outerStart = arcPoint(outerRadius, startAngle)\n const outerEnd = arcPoint(outerRadius, endAngle)\n const outerArc = `A${round(outerRadius)},${round(outerRadius)} 0 ${largeArc},1 ${point(outerEnd)}`\n\n if (innerRadius <= 0) {\n return `M0,0L${point(outerStart)}${outerArc}Z`\n }\n\n const innerStart = arcPoint(innerRadius, startAngle)\n const innerEnd = arcPoint(innerRadius, endAngle)\n const innerArc = `A${round(innerRadius)},${round(innerRadius)} 0 ${largeArc},0 ${point(innerStart)}`\n return `M${point(outerStart)}${outerArc}L${point(innerEnd)}${innerArc}Z`\n}\n","export function nearestIndex(sorted: number[], target: number): number {\n if (sorted.length === 0) return -1\n\n let low = 0\n let high = sorted.length - 1\n while (low < high) {\n const mid = (low + high) >> 1\n if (sorted[mid] < target) low = mid + 1\n else high = mid\n }\n\n const previous = low - 1\n if (previous < 0) return low\n return target - sorted[previous] <= sorted[low] - target ? previous : low\n}\n","export const ESTIMATED_CHAR_WIDTH = 6.5\n\nexport const LABEL_GAP = 8\n\nexport function estimateLabelWidth(label: string): number {\n return label.length * ESTIMATED_CHAR_WIDTH\n}\n","import { Injectable, InjectionToken, computed, signal, type Signal } from '@angular/core'\nimport { bandScale, linearScale, timeScale, type BandScale, type Scale } from '../../../primitives'\n\nexport interface ChartMargin {\n top: number\n right: number\n bottom: number\n left: number\n}\n\nexport interface ChartBox {\n readonly width: number\n readonly height: number\n readonly margin: ChartMargin\n readonly innerWidth: number\n readonly innerHeight: number\n}\n\nexport type LinearAxisSpec = { kind: 'linear'; domain: [number, number] }\n\nexport type PointValue = number | Date | string\n\nexport type AxisSpec =\n | LinearAxisSpec\n | { kind: 'time'; domain: [Date, Date] }\n | { kind: 'band'; domain: string[]; padding?: number }\n\nconst EMPTY_BOX: ChartBox = {\n width: 0,\n height: 0,\n margin: { top: 0, right: 0, bottom: 0, left: 0 },\n innerWidth: 0,\n innerHeight: 0,\n}\n\nexport interface ChartReader {\n readonly box: Signal<ChartBox>\n readonly xSpec: Signal<AxisSpec>\n readonly ySpec: Signal<LinearAxisSpec>\n readonly xScale: Signal<Scale<number> | Scale<Date> | BandScale>\n readonly yScale: Signal<Scale<number>>\n readonly activeIndex: Signal<number | null>\n readonly pointValues: Signal<PointValue[]>\n readonly activePosition: Signal<number | null>\n}\n\nexport const CHART_CONTEXT = new InjectionToken<ChartReader>('gbt-chart-context')\n\n@Injectable()\nexport class ChartContext implements ChartReader {\n private readonly _box = signal<ChartBox>(EMPTY_BOX)\n private readonly _xSpec = signal<AxisSpec>({ kind: 'linear', domain: [0, 1] })\n private readonly _ySpec = signal<LinearAxisSpec>({ kind: 'linear', domain: [0, 1] })\n private readonly _activeIndex = signal<number | null>(null)\n private readonly _pointValues = signal<PointValue[]>([])\n\n readonly box = this._box.asReadonly()\n readonly xSpec = this._xSpec.asReadonly()\n readonly ySpec = this._ySpec.asReadonly()\n readonly activeIndex = this._activeIndex.asReadonly()\n readonly pointValues = this._pointValues.asReadonly()\n\n readonly xScale = computed<Scale<number> | Scale<Date> | BandScale>(() => {\n const spec = this._xSpec()\n const range: [number, number] = [0, this._box().innerWidth]\n if (spec.kind === 'time') return timeScale(spec.domain, range)\n if (spec.kind === 'band') return bandScale(spec.domain, range, spec.padding ?? 0)\n return linearScale(spec.domain, range)\n })\n\n readonly yScale = computed<Scale<number>>(() =>\n linearScale(this._ySpec().domain, [this._box().innerHeight, 0]),\n )\n\n readonly pointPositions = computed<number[]>(() => {\n const kind = this._xSpec().kind\n const scale = this.xScale()\n return this._pointValues().map((value) =>\n kind === 'band'\n ? (scale as BandScale).map(value as string) + (scale as BandScale).bandwidth / 2\n : (scale as Scale<number> | Scale<Date>).map(value as never),\n )\n })\n\n readonly activePosition = computed<number | null>(() => {\n const index = this._activeIndex()\n if (index === null) return null\n return this.pointPositions()[index] ?? null\n })\n\n setPointValues(values: PointValue[]): void {\n this._pointValues.set(values)\n }\n\n setGeometry(box: ChartBox): void {\n this._box.set(box)\n }\n\n setSpecs(x: AxisSpec, y: LinearAxisSpec): void {\n this._xSpec.set(x)\n this._ySpec.set(y)\n }\n\n setActiveIndex(index: number | null): void {\n this._activeIndex.set(index)\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport {\n CHART_CONTEXT,\n ChartContext,\n type AxisSpec,\n type ChartMargin,\n type LinearAxisSpec,\n type PointValue,\n} from '../chart-context/chart-context'\nimport { nearestIndex } from '../../../primitives'\n\nconst DEFAULT_MARGIN: ChartMargin = { top: 16, right: 8, bottom: 32, left: 48 }\n\n@Component({\n selector: 'gbt-chart-frame',\n standalone: true,\n imports: [],\n templateUrl: './chart-frame.html',\n styleUrl: './chart-frame.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ChartContext, { provide: CHART_CONTEXT, useExisting: ChartContext }],\n})\nexport class ChartFrame {\n private readonly context = inject(ChartContext)\n\n label = input.required<string>()\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n x = input.required<AxisSpec>()\n y = input.required<LinearAxisSpec>()\n margin = input<Partial<ChartMargin>>({})\n size = input<{ width: number; height: number } | null>(null)\n pointValues = input<PointValue[]>([])\n\n readonly activeIndexChange = output<number | null>()\n\n private readonly surface = viewChild.required<ElementRef<HTMLElement>>('surface')\n private readonly measured = signal<{ width: number; height: number } | null>(null)\n\n protected readonly ready = computed(() => this.context.box().innerWidth > 0)\n\n protected readonly viewBox = computed(() => {\n const b = this.context.box()\n return `0 0 ${b.width} ${b.height}`\n })\n\n protected readonly innerTransform = computed(() => {\n const m = this.context.box().margin\n return `translate(${m.left},${m.top})`\n })\n\n protected readonly activePosition = computed(() => this.context.activePosition())\n protected readonly innerHeight = computed(() => this.context.box().innerHeight)\n\n constructor() {\n effect(() => this.activeIndexChange.emit(this.context.activeIndex()))\n\n effect(() => {\n const margin = { ...DEFAULT_MARGIN, ...this.margin() }\n const size = this.size() ?? this.measured()\n const width = size?.width ?? 0\n const height = size?.height ?? 0\n this.context.setSpecs(this.x(), this.y())\n this.context.setPointValues(this.pointValues())\n this.context.setGeometry({\n width,\n height,\n margin,\n innerWidth: Math.max(0, width - margin.left - margin.right),\n innerHeight: Math.max(0, height - margin.top - margin.bottom),\n })\n })\n\n effect((onCleanup) => {\n if (this.size() || typeof ResizeObserver === 'undefined') return\n\n const element = this.surface().nativeElement\n const observer = new ResizeObserver((entries) => {\n const rect = entries[0]?.contentRect\n if (rect) this.measured.set({ width: rect.width, height: rect.height })\n })\n observer.observe(element)\n onCleanup(() => observer.disconnect())\n })\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const count = this.pointValues().length\n if (count === 0) return\n\n const current = this.context.activeIndex()\n const last = count - 1\n\n switch (event.key) {\n case 'ArrowRight':\n this.context.setActiveIndex(current === null ? 0 : Math.min(last, current + 1))\n break\n case 'ArrowLeft':\n this.context.setActiveIndex(current === null ? last : Math.max(0, current - 1))\n break\n case 'Home':\n this.context.setActiveIndex(0)\n break\n case 'End':\n this.context.setActiveIndex(last)\n break\n case 'Escape':\n this.context.setActiveIndex(null)\n break\n default:\n return\n }\n\n event.preventDefault()\n }\n\n protected onBlur(): void {\n this.context.setActiveIndex(null)\n }\n\n protected onPointerMove(event: PointerEvent | MouseEvent): void {\n const positions = this.context.pointPositions()\n if (positions.length === 0) return\n\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect()\n const local = event.clientX - rect.left - this.context.box().margin.left\n\n this.context.setActiveIndex(nearestIndex(positions, local))\n }\n\n protected onPointerLeave(event: PointerEvent | MouseEvent): void {\n const surface = event.currentTarget as HTMLElement\n if (surface.ownerDocument.activeElement === surface) return\n this.context.setActiveIndex(null)\n }\n}\n","<div class=\"gbt-chart-frame\">\n @if (heading()) {\n <div class=\"gbt-chart-frame__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-chart-frame__title\">{{ heading() }}</h1>\n }\n @case (3) {\n <h3 class=\"gbt-chart-frame__title\">{{ heading() }}</h3>\n }\n @case (4) {\n <h4 class=\"gbt-chart-frame__title\">{{ heading() }}</h4>\n }\n @case (5) {\n <h5 class=\"gbt-chart-frame__title\">{{ heading() }}</h5>\n }\n @case (6) {\n <h6 class=\"gbt-chart-frame__title\">{{ heading() }}</h6>\n }\n @default {\n <h2 class=\"gbt-chart-frame__title\">{{ heading() }}</h2>\n }\n }\n @if (headline()) {\n <p class=\"gbt-chart-frame__headline\">{{ headline() }}</p>\n }\n @if (trend()) {\n <p class=\"gbt-chart-frame__trend\">{{ trend() }}</p>\n }\n </div>\n }\n\n <div\n #surface\n class=\"gbt-chart-frame__surface\"\n [attr.tabindex]=\"ready() && pointValues().length > 0 ? 0 : null\"\n [attr.role]=\"ready() ? 'group' : null\"\n [attr.aria-label]=\"ready() ? label() : null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave($event)\"\n >\n @if (ready()) {\n <svg\n class=\"gbt-chart-frame__svg\"\n [attr.viewBox]=\"viewBox()\"\n role=\"presentation\"\n focusable=\"false\"\n >\n <g [attr.transform]=\"innerTransform()\">\n <ng-content select=\"[gbtChartLayer]\" />\n @if (activePosition() !== null) {\n <line\n class=\"gbt-chart-frame__guide\"\n [attr.x1]=\"activePosition()\"\n [attr.x2]=\"activePosition()\"\n y1=\"0\"\n [attr.y2]=\"innerHeight()\"\n aria-hidden=\"true\"\n />\n }\n </g>\n </svg>\n <ng-content select=\"gbt-chart-tooltip\" />\n }\n </div>\n <ng-content select=\"gbt-chart-empty\" />\n <ng-content select=\"gbt-chart-table\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core'\nimport { CHART_CONTEXT, type ChartReader } from '../chart-context/chart-context'\nimport {\n LABEL_GAP,\n estimateLabelWidth,\n formatCompact,\n niceTicks,\n timeTicks,\n type BandScale,\n type Scale,\n} from '../../../primitives'\n\ninterface Tick {\n key: string\n x: number\n y: number\n label: string\n\n date: string | null\n anchor: 'start' | 'middle' | 'end'\n}\n\n@Component({\n selector: 'g[gbtChartAxis]',\n standalone: true,\n imports: [],\n templateUrl: './chart-axis.html',\n styleUrl: './chart-axis.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.transform]': 'groupTransform()',\n '[attr.axis]': 'axis()',\n 'aria-hidden': 'true',\n },\n})\nexport class ChartAxis {\n private readonly context: ChartReader = inject(CHART_CONTEXT)\n\n axis = input.required<'x' | 'y'>()\n locale = input.required<string>()\n tickCount = input(5)\n format = input<((value: never) => string) | null>(null)\n grid = input(false, { transform: booleanAttribute })\n\n protected readonly groupTransform = computed(() => {\n const box = this.context.box()\n\n return this.axis() === 'x' ? `translate(0,${box.innerHeight})` : 'translate(0,0)'\n })\n\n protected readonly ticks = computed<Tick[]>(() => {\n if (this.axis() === 'y') return this.yTicks()\n const ticks = this.xTicks()\n\n if (this.context.xSpec().kind === 'band') return ticks\n\n const last = ticks.length - 1\n return ticks.map((tick, index) => ({\n ...tick,\n anchor: index === 0 ? 'start' : index === last ? 'end' : 'middle',\n }))\n })\n\n protected readonly gridLines = computed<number[]>(() => {\n if (!this.grid() || this.axis() !== 'y') return []\n return this.yTicks().map((tick) => tick.y - 4)\n })\n\n protected readonly innerWidth = computed(() => this.context.box().innerWidth)\n\n private yTicks(): Tick[] {\n const spec = this.context.ySpec()\n const scale = this.context.yScale()\n const custom = this.format()\n return niceTicks(spec.domain[0], spec.domain[1], this.tickCount()).map((value) => ({\n key: `y-${value}`,\n x: -8,\n y: scale.map(value) + 4,\n label: custom ? custom(value as never) : formatCompact(value, this.locale()),\n date: null,\n anchor: 'end',\n }))\n }\n\n private xTicks(): Tick[] {\n const spec = this.context.xSpec()\n const box = this.context.box()\n const custom = this.format()\n\n if (spec.kind === 'band') {\n const scale = this.context.xScale() as BandScale\n\n const labels = spec.domain.map((category) => (custom ? custom(category as never) : category))\n const step = spec.domain.length === 0 ? 0 : box.innerWidth / spec.domain.length\n const widest = labels.reduce((large, label) => Math.max(large, estimateLabelWidth(label)), 0)\n const keepEvery = Math.max(1, Math.ceil((widest + LABEL_GAP) / Math.max(step, 1)))\n\n return spec.domain\n .map((category, index) => ({\n key: `x-${category}`,\n x: scale.map(category) + scale.bandwidth / 2,\n y: 20,\n label: labels[index],\n date: null,\n anchor: 'middle' as const,\n }))\n .filter((_, index) => index % keepEvery === 0)\n }\n\n if (spec.kind === 'time') {\n const scale = this.context.xScale() as Scale<Date>\n const result = timeTicks(spec.domain[0], spec.domain[1], box.innerWidth)\n\n const fine = result.unit === 'hour' || result.unit === 'minute' || result.unit === 'second'\n const days = new Set(result.values.map((v) => v.toISOString().slice(0, 10)))\n const multiDay = days.size > 1\n const seen = new Set<string>()\n\n return result.values.map((value) => {\n const day = value.toISOString().slice(0, 10)\n\n const first = fine && multiDay && !seen.has(day)\n seen.add(day)\n\n return {\n key: `x-${value.getTime()}`,\n x: scale.map(value),\n y: first ? 14 : 20,\n label: custom ? custom(value as never) : result.format(value, this.locale()),\n date: first\n ? new Intl.DateTimeFormat(this.locale(), {\n day: '2-digit',\n month: '2-digit',\n timeZone: 'UTC',\n }).format(value)\n : null,\n anchor: 'middle',\n }\n })\n }\n\n const scale = this.context.xScale() as Scale<number>\n return niceTicks(spec.domain[0], spec.domain[1], this.tickCount()).map((value) => ({\n key: `x-${value}`,\n x: scale.map(value),\n y: 20,\n label: custom ? custom(value as never) : formatCompact(value, this.locale()),\n date: null,\n anchor: 'middle',\n }))\n }\n}\n","@for (y of gridLines(); track $index) {\n <svg:line\n class=\"gbt-chart-axis__grid\"\n x1=\"0\"\n [attr.x2]=\"innerWidth()\"\n [attr.y1]=\"y\"\n [attr.y2]=\"y\"\n />\n}\n@for (tick of ticks(); track tick.key) {\n <svg:text\n class=\"gbt-chart-axis__label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"tick.y\"\n [attr.text-anchor]=\"tick.anchor\"\n >\n @if (tick.date) {\n <svg:tspan [attr.x]=\"tick.x\" dy=\"0\">{{ tick.label }}</svg:tspan>\n <svg:tspan [attr.x]=\"tick.x\" dy=\"1.1em\">{{ tick.date }}</svg:tspan>\n } @else {\n {{ tick.label }}\n }\n </svg:text>\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\n\nexport interface TooltipRow {\n label: string\n value: string\n\n series?: 1 | 2 | 3\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n}\n\nexport interface TooltipPoint<X> {\n x: X\n\n header: string\n rows: TooltipRow[]\n}\n\n@Component({\n selector: 'gbt-chart-tooltip',\n standalone: true,\n imports: [],\n templateUrl: './chart-tooltip.html',\n styleUrl: './chart-tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartTooltip<X> {\n private readonly context = inject(CHART_CONTEXT)\n\n points = input.required<TooltipPoint<X>[]>()\n\n protected readonly active = computed<TooltipPoint<X> | null>(() => {\n const index = this.context.activeIndex()\n if (index === null) return null\n return this.points()[index] ?? null\n })\n\n protected readonly left = computed(() => {\n const position = this.context.activePosition()\n if (position === null) return 0\n return position + this.context.box().margin.left\n })\n\n protected readonly anchor = computed<'start' | 'middle' | 'end'>(() => {\n const index = this.context.activeIndex()\n if (index === null) return 'middle'\n const last = this.context.pointValues().length - 1\n return index === 0 ? 'start' : index === last ? 'end' : 'middle'\n })\n}\n","<div class=\"gbt-chart-tooltip\" role=\"status\" aria-live=\"polite\">\n @if (active(); as point) {\n <div class=\"gbt-chart-tooltip__panel\" [style.left.px]=\"left()\" [attr.data-anchor]=\"anchor()\">\n <p class=\"gbt-chart-tooltip__header\">{{ point.header }}</p>\n <ul class=\"gbt-chart-tooltip__rows\">\n @for (row of point.rows; track $index) {\n <li>\n <span\n class=\"gbt-chart-tooltip__swatch\"\n [attr.data-series]=\"row.series ?? null\"\n [attr.data-pattern]=\"row.pattern ?? 'solid'\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"gbt-chart-tooltip__label\">{{ row.label }}</span>\n <span class=\"gbt-chart-tooltip__value\">{{ row.value }}</span>\n </li>\n }\n </ul>\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, booleanAttribute, input, output } from '@angular/core'\n\nexport interface LegendEntry {\n label: string\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n\n color?: string\n\n value?: string\n}\n\nconst DASH_ARRAYS: Record<NonNullable<LegendEntry['pattern']>, string> = {\n solid: 'none',\n dashed: '6 3',\n dotted: '1 3',\n}\n\n@Component({\n selector: 'gbt-chart-legend',\n standalone: true,\n imports: [],\n templateUrl: './chart-legend.html',\n styleUrl: './chart-legend.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartLegend {\n entries = input.required<LegendEntry[]>()\n\n interactive = input(false, { transform: booleanAttribute })\n activeIndex = input<number | null>(null)\n activeIndexChange = output<number | null>()\n\n protected dashArray(pattern: LegendEntry['pattern']): string {\n return DASH_ARRAYS[pattern ?? 'solid']\n }\n\n protected onMouseLeave(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement\n if (target.ownerDocument.activeElement === target) return\n this.activeIndexChange.emit(null)\n }\n}\n","<ul class=\"gbt-chart-legend\">\n @for (entry of entries(); track $index) {\n <li\n class=\"gbt-chart-legend__item\"\n [class.gbt-chart-legend__item--active]=\"interactive() && activeIndex() === $index\"\n [attr.data-pattern]=\"entry.pattern ?? 'solid'\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n (mouseenter)=\"interactive() && activeIndexChange.emit($index)\"\n (mouseleave)=\"interactive() && onMouseLeave($event)\"\n (focus)=\"interactive() && activeIndexChange.emit($index)\"\n (blur)=\"interactive() && activeIndexChange.emit(null)\"\n >\n <svg class=\"gbt-chart-legend__swatch\" viewBox=\"0 0 24 8\" aria-hidden=\"true\" focusable=\"false\">\n @if (entry.color; as color) {\n <rect class=\"gbt-chart-legend__fill\" x=\"4\" y=\"0\" width=\"8\" height=\"8\" rx=\"2\" [attr.fill]=\"color\" />\n } @else {\n <line\n class=\"gbt-chart-legend__line\"\n x1=\"0\"\n y1=\"4\"\n x2=\"24\"\n y2=\"4\"\n [attr.stroke-dasharray]=\"dashArray(entry.pattern)\"\n stroke-width=\"2\"\n />\n }\n </svg>\n {{ entry.label }}\n @if (entry.value; as value) {\n <span class=\"gbt-chart-legend__value\">{{ value }}</span>\n }\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'\n\n@Component({\n selector: 'gbt-chart-empty',\n standalone: true,\n imports: [],\n templateUrl: './chart-empty.html',\n styleUrl: './chart-empty.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartEmpty {\n message = input.required<string>()\n actionLabel = input<string>('')\n\n action = output<void>()\n}\n","<div class=\"gbt-chart-empty\" role=\"status\">\n <div class=\"gbt-chart-empty__icon\" aria-hidden=\"true\">\n <ng-content select=\"[gbtChartEmptyIcon]\" />\n </div>\n <p class=\"gbt-chart-empty__message\">{{ message() }}</p>\n @if (actionLabel()) {\n <button type=\"button\" class=\"gbt-chart-empty__action\" (click)=\"action.emit()\">\n {{ actionLabel() }}\n </button>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-chart-table',\n standalone: true,\n imports: [],\n templateUrl: './chart-table.html',\n styleUrl: './chart-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartTable {\n caption = input.required<string>()\n columns = input.required<string[]>()\n rows = input.required<(string | number)[][]>()\n}\n","<div class=\"gbt-sr-only\">\n <table>\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n @for (column of columns(); track column) {\n <th scope=\"col\">{{ column }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of rows(); track $index) {\n <tr>\n @for (cell of row; track $index) {\n <td>{{ cell }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\nimport { areaPath, linePath, type Scale } from '../../../primitives'\nimport type { ChartSeries } from '../chart-data/chart-data'\n\ninterface RenderedSeries {\n label: string\n strokePath: string\n fillPath: string\n\n colorIndex: number\n dashArray: string\n}\n\ninterface ActiveDot {\n x: number\n y: number\n colorIndex: number\n}\n\nconst DASH_ARRAYS: Record<NonNullable<ChartSeries<unknown>['pattern']>, string> = {\n solid: 'none',\n dashed: '6 3',\n dotted: '1 3',\n}\n\nexport const DEFAULT_PATTERNS: NonNullable<ChartSeries<unknown>['pattern']>[] = [\n 'solid',\n 'dashed',\n 'dotted',\n]\n\n@Component({\n selector: 'g[gbtLineSeries]',\n standalone: true,\n imports: [],\n templateUrl: './line-series.html',\n styleUrl: './line-series.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'aria-hidden': 'true' },\n})\nexport class LineSeries<X> {\n series = input.required<ChartSeries<X>[]>()\n area = input(false)\n\n private readonly context = inject(CHART_CONTEXT)\n\n protected readonly renderedLines = computed<RenderedSeries[]>(() => {\n const x = this.context.xScale() as Scale<never>\n const y = this.context.yScale()\n\n const base = Math.min(Math.max(y.map(0), 0), this.context.box().innerHeight)\n\n return this.series().map((oneSeries, index) => {\n const points = oneSeries.points.map((p) => ({\n x: x.map(p.x as never),\n y: y.map(p.y),\n }))\n return {\n label: oneSeries.label,\n strokePath: linePath(points),\n fillPath: areaPath(points, base),\n colorIndex: (index % 3) + 1,\n dashArray:\n DASH_ARRAYS[oneSeries.pattern ?? DEFAULT_PATTERNS[index % DEFAULT_PATTERNS.length]],\n }\n })\n })\n\n protected readonly activeDots = computed<ActiveDot[]>(() => {\n const activeIndex = this.context.activeIndex()\n if (activeIndex === null) return []\n const activeXValue = this.context.pointValues()[activeIndex]\n if (activeXValue === undefined) return []\n\n const key = activeXValue instanceof Date ? activeXValue.getTime() : activeXValue\n const x = this.context.xScale() as Scale<never>\n const y = this.context.yScale()\n\n const dots: ActiveDot[] = []\n this.series().forEach((oneSeries, seriesIndex) => {\n const point = oneSeries.points.find(\n (p) => (p.x instanceof Date ? p.x.getTime() : p.x) === key,\n )\n if (point === undefined) return\n dots.push({\n x: x.map(point.x as never),\n y: y.map(point.y),\n colorIndex: (seriesIndex % 3) + 1,\n })\n })\n return dots\n })\n}\n","@for (renderedLine of renderedLines(); track $index) {\n @if (area()) {\n <svg:path\n class=\"gbt-line-series__area\"\n [attr.d]=\"renderedLine.fillPath\"\n [attr.data-series]=\"renderedLine.colorIndex\"\n />\n }\n <svg:path\n class=\"gbt-line-series__line\"\n [attr.d]=\"renderedLine.strokePath\"\n [attr.data-series]=\"renderedLine.colorIndex\"\n [attr.stroke-dasharray]=\"renderedLine.dashArray\"\n />\n}\n@for (dot of activeDots(); track $index) {\n <svg:circle\n class=\"gbt-line-series__dot\"\n [attr.cx]=\"dot.x\"\n [attr.cy]=\"dot.y\"\n r=\"4\"\n [attr.data-series]=\"dot.colorIndex\"\n />\n}\n","import { niceTicks } from '../../../primitives'\n\nexport interface ChartPoint<X> {\n x: X\n y: number\n\n display?: string\n}\n\nexport interface ChartSeries<X> {\n label: string\n points: ChartPoint<X>[]\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n}\n\nexport interface ChartInterval {\n start: Date\n end: Date\n label: string\n}\n\nconst DAY = 86400000\n\nexport function yDomain<X>(series: ChartSeries<X>[], includeZero: boolean): [number, number] {\n const values = series.flatMap((s) => s.points.map((p) => p.y))\n\n if (values.length === 0) return [0, 1]\n\n let min = Math.min(...values)\n let max = Math.max(...values)\n if (includeZero) {\n min = Math.min(min, 0)\n max = Math.max(max, 0)\n }\n\n if (min === max) return [min, min + 1]\n return [min, max]\n}\n\nexport function numericXDomain(series: ChartSeries<number>[]): [number, number] {\n const values = series.flatMap((s) => s.points.map((p) => p.x))\n if (values.length === 0) return [0, 1]\n const min = Math.min(...values)\n const max = Math.max(...values)\n return min === max ? [min, min + 1] : [min, max]\n}\n\nexport function timeXDomain(series: ChartSeries<Date>[]): [Date, Date] {\n const values = series.flatMap((s) => s.points.map((p) => p.x.getTime()))\n\n if (values.length === 0) return [new Date(-DAY), new Date(0)]\n const min = Math.min(...values)\n const max = Math.max(...values)\n return min === max ? [new Date(min), new Date(min + DAY)] : [new Date(min), new Date(max)]\n}\n\nexport function longestSeriesLength<X>(series: ChartSeries<X>[]): number {\n return series.reduce((longest, s) => Math.max(longest, s.points.length), 0)\n}\n\nexport function niceYDomain<X>(\n series: ChartSeries<X>[],\n includeZero: boolean,\n tickCount: number,\n): [number, number] {\n const [min, max] = yDomain(series, includeZero)\n const ticks = niceTicks(min, max, tickCount)\n\n if (ticks.length === 0) return [min, max]\n return [ticks[0], ticks[ticks.length - 1]]\n}\n\nexport function niceXDomain(series: ChartSeries<number>[], tickCount: number): [number, number] {\n const [min, max] = numericXDomain(series)\n const ticks = niceTicks(min, max, tickCount)\n if (ticks.length === 0) return [min, max]\n return [ticks[0], ticks[ticks.length - 1]]\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n isDevMode,\n signal,\n} from '@angular/core'\nimport { ChartFrame } from '../chart-frame/chart-frame'\nimport { ChartAxis } from '../chart-axis/chart-axis'\nimport { ChartTooltip, type TooltipPoint } from '../chart-tooltip/chart-tooltip'\nimport { ChartLegend, type LegendEntry } from '../chart-legend/chart-legend'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { DEFAULT_PATTERNS, LineSeries } from './line-series'\nimport { formatCompact, formatNumber } from '../../../primitives'\nimport type { AxisSpec, LinearAxisSpec, PointValue } from '../chart-context/chart-context'\nimport {\n niceXDomain,\n niceYDomain,\n timeXDomain,\n type ChartPoint,\n type ChartSeries,\n} from '../chart-data/chart-data'\n\nconst MAX_SERIES = 3\n\nconst ABSENT = '—'\n\n@Component({\n selector: 'gbt-line-chart',\n standalone: true,\n imports: [ChartFrame, ChartAxis, ChartTooltip, ChartLegend, ChartEmpty, ChartTable, LineSeries],\n templateUrl: './line-chart.html',\n styleUrl: './line-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineChart<X extends number | Date> {\n series = input.required<ChartSeries<X>[]>()\n xKind = input.required<'linear' | 'time'>()\n locale = input.required<string>()\n label = input.required<string>()\n tableCaption = input.required<string>()\n xColumn = input.required<string>()\n emptyMessage = input.required<string>()\n area = input(false)\n yZero = input(true)\n yTickCount = input(5)\n xTickCount = input(5)\n size = input<{ width: number; height: number } | null>(null)\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected readonly hasData = computed(() => this.series().some((s) => s.points.length > 0))\n\n protected readonly xSpec = computed<AxisSpec>(() =>\n this.xKind() === 'time'\n ? { kind: 'time', domain: timeXDomain(this.series() as ChartSeries<Date>[]) }\n : {\n kind: 'linear',\n domain: niceXDomain(this.series() as ChartSeries<number>[], this.xTickCount()),\n },\n )\n\n protected readonly ySpec = computed<LinearAxisSpec>(() => ({\n kind: 'linear',\n domain: niceYDomain(this.series(), this.yZero(), this.yTickCount()),\n }))\n\n protected readonly legendEntries = computed<LegendEntry[]>(() => {\n const index = this.activeIndex()\n const xValues = this.xValues()\n\n const x = index === null ? xValues[xValues.length - 1] : xValues[index]\n return this.series().map((s, seriesIndex) => ({\n label: s.label,\n\n pattern: s.pattern ?? DEFAULT_PATTERNS[seriesIndex % DEFAULT_PATTERNS.length],\n value: x === undefined ? ABSENT : this.displayValue(s, x),\n }))\n })\n\n protected readonly publicXValues = computed<PointValue[]>(() => this.xValues())\n\n protected readonly tooltipPoints = computed<TooltipPoint<X>[]>(() =>\n this.xValues().map((x) => ({\n x,\n header: this.formatX(x),\n rows: this.series().map((s, index) => ({\n label: s.label,\n value: this.displayValue(s, x),\n series: ((index % 3) + 1) as 1 | 2 | 3,\n pattern: s.pattern ?? DEFAULT_PATTERNS[index % DEFAULT_PATTERNS.length],\n })),\n })),\n )\n\n protected readonly tableColumns = computed(() => [\n this.xColumn(),\n ...this.series().map((s) => s.label),\n ])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.xValues().map((x) => [\n this.formatX(x),\n ...this.series().map((s) => this.displayValue(s, x)),\n ]),\n )\n\n private readonly formatX = (x: X): string =>\n x instanceof Date\n ? new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'short',\n timeStyle: 'short',\n timeZone: 'UTC',\n }).format(x)\n : formatCompact(x as number, this.locale())\n\n private readonly xValues = computed<X[]>(() => {\n const seen = new Map<number | string, X>()\n for (const oneSeries of this.series()) {\n for (const point of oneSeries.points) {\n seen.set(point.x instanceof Date ? point.x.getTime() : (point.x as number), point.x)\n }\n }\n return [...seen.entries()]\n .sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0))\n .map(([, x]) => x)\n })\n\n private findPoint(oneSeries: ChartSeries<X>, x: X): ChartPoint<X> | null {\n const key = x instanceof Date ? x.getTime() : x\n return oneSeries.points.find((p) => (p.x instanceof Date ? p.x.getTime() : p.x) === key) ?? null\n }\n\n private displayValue(oneSeries: ChartSeries<X>, x: X): string {\n const point = this.findPoint(oneSeries, x)\n if (point === null) return ABSENT\n return point.display ?? formatNumber(point.y, this.locale())\n }\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const count = this.series().length\n if (count > MAX_SERIES) {\n console.warn(\n `gbt-line-chart: ${count} series received for ${MAX_SERIES} distinguishable colors. The palette cycles.`,\n )\n }\n })\n }\n }\n}\n","<gbt-chart-frame\n [label]=\"label()\"\n [x]=\"xSpec()\"\n [y]=\"ySpec()\"\n [pointValues]=\"publicXValues()\"\n [size]=\"size()\"\n [heading]=\"heading()\"\n [headingLevel]=\"headingLevel()\"\n [headline]=\"headline()\"\n [trend]=\"trend()\"\n (activeIndexChange)=\"activeIndex.set($event)\"\n>\n <svg:g gbtChartLayer>\n <svg:g gbtChartAxis axis=\"y\" [locale]=\"locale()\" [tickCount]=\"yTickCount()\" grid></svg:g>\n <svg:g gbtChartAxis axis=\"x\" [locale]=\"locale()\" [tickCount]=\"xTickCount()\"></svg:g>\n <svg:g gbtLineSeries [series]=\"series()\" [area]=\"area()\"></svg:g>\n </svg:g>\n <gbt-chart-tooltip [points]=\"tooltipPoints()\" />\n @if (hasData()) {\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"tableColumns()\" [rows]=\"tableRows()\" />\n } @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n }\n</gbt-chart-frame>\n@if (series().length > 1) {\n <gbt-chart-legend [entries]=\"legendEntries()\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\nimport type { BandScale } from '../../../primitives'\nimport type { ChartSeries } from '../chart-data/chart-data'\n\ninterface RenderedBar {\n category: string\n x: number\n y: number\n width: number\n height: number\n}\n\n@Component({\n selector: 'g[gbtBarSeries]',\n standalone: true,\n imports: [],\n templateUrl: './bar-series.html',\n styleUrl: './bar-series.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'aria-hidden': 'true' },\n})\nexport class BarSeries {\n private readonly context = inject(CHART_CONTEXT)\n\n series = input.required<ChartSeries<string>>()\n\n protected readonly activeIndex = computed(() => this.context.activeIndex())\n\n protected readonly bars = computed<RenderedBar[]>(() => {\n const x = this.context.xScale() as BandScale\n const y = this.context.yScale()\n const base = y.map(0)\n\n return this.series().points.map((point) => {\n const top = y.map(point.y)\n return {\n category: point.x,\n x: x.map(point.x),\n\n y: Math.min(top, base),\n width: x.bandwidth,\n height: Math.abs(base - top),\n }\n })\n })\n}\n","@for (bar of bars(); track bar.category) {\n <svg:rect\n class=\"gbt-bar-series__bar\"\n [attr.x]=\"bar.x\"\n [attr.y]=\"bar.y\"\n [attr.width]=\"bar.width\"\n [attr.height]=\"bar.height\"\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n />\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\nimport { ChartFrame } from '../chart-frame/chart-frame'\nimport { ChartAxis } from '../chart-axis/chart-axis'\nimport { ChartTooltip, type TooltipPoint } from '../chart-tooltip/chart-tooltip'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { BarSeries } from './bar-series'\nimport { formatNumber } from '../../../primitives'\nimport type { AxisSpec, LinearAxisSpec, PointValue } from '../chart-context/chart-context'\nimport { niceYDomain, type ChartPoint, type ChartSeries } from '../chart-data/chart-data'\n\nconst BAND_PADDING = 0.2\n\n@Component({\n selector: 'gbt-bar-chart',\n standalone: true,\n imports: [ChartFrame, ChartAxis, ChartTooltip, ChartEmpty, ChartTable, BarSeries],\n templateUrl: './bar-chart.html',\n styleUrl: './bar-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarChart {\n series = input.required<ChartSeries<string>>()\n locale = input.required<string>()\n label = input.required<string>()\n tableCaption = input.required<string>()\n xColumn = input.required<string>()\n emptyMessage = input.required<string>()\n yTickCount = input(5)\n size = input<{ width: number; height: number } | null>(null)\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n\n protected readonly hasData = computed(() => this.series().points.length > 0)\n\n protected readonly publicXValues = computed<PointValue[]>(() =>\n this.series().points.map((p) => p.x),\n )\n\n protected readonly xSpec = computed<AxisSpec>(() => ({\n kind: 'band',\n domain: this.series().points.map((p) => p.x),\n padding: BAND_PADDING,\n }))\n\n protected readonly ySpec = computed<LinearAxisSpec>(() => ({\n kind: 'linear',\n\n domain: niceYDomain([this.series()], true, this.yTickCount()),\n }))\n\n private displayValue(point: ChartPoint<string>): string {\n return point.display ?? formatNumber(point.y, this.locale())\n }\n\n protected readonly tooltipPoints = computed<TooltipPoint<string>[]>(() =>\n this.series().points.map((point) => ({\n x: point.x,\n header: point.x,\n rows: [{ label: this.series().label, value: this.displayValue(point), series: 1 }],\n })),\n )\n\n protected readonly tableColumns = computed(() => [this.xColumn(), this.series().label])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.series().points.map((point) => [point.x, this.displayValue(point)]),\n )\n}\n","<gbt-chart-frame\n [label]=\"label()\"\n [x]=\"xSpec()\"\n [y]=\"ySpec()\"\n [pointValues]=\"publicXValues()\"\n [size]=\"size()\"\n [heading]=\"heading()\"\n [headingLevel]=\"headingLevel()\"\n [headline]=\"headline()\"\n [trend]=\"trend()\"\n>\n <svg:g gbtChartLayer>\n <svg:g gbtChartAxis axis=\"y\" [locale]=\"locale()\" [tickCount]=\"yTickCount()\" grid></svg:g>\n <svg:g gbtChartAxis axis=\"x\" [locale]=\"locale()\"></svg:g>\n <svg:g gbtBarSeries [series]=\"series()\"></svg:g>\n </svg:g>\n <gbt-chart-tooltip [points]=\"tooltipPoints()\" />\n @if (hasData()) {\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"tableColumns()\" [rows]=\"tableRows()\" />\n } @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n }\n</gbt-chart-frame>\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\nimport { estimateLabelWidth, linePath, type Scale } from '../../../primitives'\nimport type { ChartInterval, ChartSeries } from '../chart-data/chart-data'\n\nconst LABEL_INSET = 4\n\nconst STROKE_WIDTH = 3\nconst STROKE_WIDTH_ACTIVE = 6\n\ninterface RenderedBand {\n label: string\n x: number\n width: number\n\n labeled: boolean\n\n active: boolean\n strokeWidth: number\n}\n\n@Component({\n selector: 'g[gbtTimelineSeries]',\n standalone: true,\n imports: [],\n templateUrl: './timeline-series.html',\n styleUrl: './timeline-series.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'aria-hidden': 'true' },\n})\nexport class TimelineSeries {\n series = input.required<ChartSeries<Date>>()\n intervals = input.required<ChartInterval[]>()\n\n private readonly context = inject(CHART_CONTEXT)\n\n protected readonly height = computed(() => this.context.box().innerHeight)\n\n protected readonly strokePath = computed(() => {\n const x = this.context.xScale() as Scale<Date>\n const y = this.context.yScale()\n return linePath(this.series().points.map((p) => ({ x: x.map(p.x), y: y.map(p.y) })))\n })\n\n private readonly activeInstant = computed<number | null>(() => {\n const index = this.context.activeIndex()\n if (index === null) return null\n const value = this.context.pointValues()[index]\n return value instanceof Date ? value.getTime() : null\n })\n\n protected readonly activePoint = computed<{ x: number; y: number } | null>(() => {\n const time = this.activeInstant()\n if (time === null) return null\n const point = this.series().points.find((p) => p.x.getTime() === time)\n if (point === undefined) return null\n const x = this.context.xScale() as Scale<Date>\n const y = this.context.yScale()\n return { x: x.map(point.x), y: y.map(point.y) }\n })\n\n protected readonly bands = computed<RenderedBand[]>(() => {\n const x = this.context.xScale() as Scale<Date>\n const activeTime = this.activeInstant()\n return this.intervals().map((interval) => {\n const start = x.map(interval.start)\n const end = x.map(interval.end)\n const width = Math.max(1, end - start)\n\n const active =\n activeTime !== null &&\n activeTime >= interval.start.getTime() &&\n activeTime <= interval.end.getTime()\n return {\n label: interval.label,\n x: start,\n width,\n\n labeled: LABEL_INSET + estimateLabelWidth(interval.label) <= width,\n active,\n strokeWidth: active ? STROKE_WIDTH_ACTIVE : STROKE_WIDTH,\n }\n })\n })\n}\n","@for (band of bands(); track $index) {\n <svg:rect\n class=\"gbt-timeline-series__band\"\n [attr.x]=\"band.x\"\n y=\"0\"\n [attr.width]=\"band.width\"\n [attr.height]=\"height()\"\n />\n <svg:rect\n class=\"gbt-timeline-series__band-edge\"\n [attr.x]=\"band.x\"\n y=\"0\"\n [attr.width]=\"band.width\"\n [attr.height]=\"band.strokeWidth\"\n [attr.data-active]=\"band.active ? '' : null\"\n />\n @if (band.labeled) {\n <svg:text class=\"gbt-timeline-series__band-label\" [attr.x]=\"band.x + 4\" y=\"14\">\n {{ band.label }}\n </svg:text>\n }\n}\n@if (strokePath(); as d) {\n <svg:path class=\"gbt-timeline-series__line\" [attr.d]=\"d\" />\n}\n@if (activePoint(); as p) {\n <svg:circle class=\"gbt-timeline-series__dot\" [attr.cx]=\"p.x\" [attr.cy]=\"p.y\" r=\"4\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\nimport { ChartFrame } from '../chart-frame/chart-frame'\nimport { ChartAxis } from '../chart-axis/chart-axis'\nimport { ChartTooltip, type TooltipPoint } from '../chart-tooltip/chart-tooltip'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { TimelineSeries } from './timeline-series'\nimport { formatNumber } from '../../../primitives'\nimport type { AxisSpec, LinearAxisSpec, PointValue } from '../chart-context/chart-context'\nimport {\n niceYDomain,\n timeXDomain,\n type ChartInterval,\n type ChartPoint,\n type ChartSeries,\n} from '../chart-data/chart-data'\n\n@Component({\n selector: 'gbt-timeline-chart',\n standalone: true,\n imports: [ChartFrame, ChartAxis, ChartTooltip, ChartEmpty, ChartTable, TimelineSeries],\n templateUrl: './timeline-chart.html',\n styleUrl: './timeline-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimelineChart {\n series = input.required<ChartSeries<Date>>()\n intervals = input.required<ChartInterval[]>()\n locale = input.required<string>()\n label = input.required<string>()\n tableCaption = input.required<string>()\n intervalsCaption = input.required<string>()\n xColumn = input.required<string>()\n emptyMessage = input.required<string>()\n yZero = input(true)\n yTickCount = input(5)\n size = input<{ width: number; height: number } | null>(null)\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n\n protected readonly hasData = computed(() => this.series().points.length > 0)\n\n protected readonly publicXValues = computed<PointValue[]>(() =>\n this.series().points.map((p) => p.x),\n )\n\n protected readonly xSpec = computed<AxisSpec>(() => ({\n kind: 'time',\n domain: timeXDomain([this.series()]),\n }))\n\n protected readonly ySpec = computed<LinearAxisSpec>(() => ({\n kind: 'linear',\n domain: niceYDomain([this.series()], this.yZero(), this.yTickCount()),\n }))\n\n protected readonly tooltipPoints = computed<TooltipPoint<Date>[]>(() =>\n this.series().points.map((point) => ({\n x: point.x,\n header: this.formatInstant(point.x),\n rows: [{ label: this.series().label, value: this.displayValue(point), series: 1 }],\n })),\n )\n\n protected readonly tableColumns = computed(() => [this.xColumn(), this.series().label])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.series().points.map((point) => [this.formatInstant(point.x), this.displayValue(point)]),\n )\n\n protected readonly intervalColumns = computed(() => [\n this.intervalsCaption(),\n `${this.xColumn()} — start`,\n `${this.xColumn()} — end`,\n ])\n\n protected readonly intervalRows = computed<(string | number)[][]>(() =>\n this.intervals().map((interval) => [\n interval.label,\n this.formatInstant(interval.start),\n this.formatInstant(interval.end),\n ]),\n )\n\n private readonly formatInstant = (d: Date): string =>\n new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'short',\n timeStyle: 'short',\n timeZone: 'UTC',\n }).format(d)\n\n private displayValue(point: ChartPoint<Date>): string {\n return point.display ?? formatNumber(point.y, this.locale())\n }\n}\n","<gbt-chart-frame\n [label]=\"label()\"\n [x]=\"xSpec()\"\n [y]=\"ySpec()\"\n [pointValues]=\"publicXValues()\"\n [size]=\"size()\"\n [heading]=\"heading()\"\n [headingLevel]=\"headingLevel()\"\n [headline]=\"headline()\"\n [trend]=\"trend()\"\n>\n <svg:g gbtChartLayer>\n <svg:g gbtChartAxis axis=\"y\" [locale]=\"locale()\" [tickCount]=\"yTickCount()\" grid></svg:g>\n <svg:g gbtChartAxis axis=\"x\" [locale]=\"locale()\"></svg:g>\n <svg:g gbtTimelineSeries [series]=\"series()\" [intervals]=\"intervals()\"></svg:g>\n </svg:g>\n <gbt-chart-tooltip [points]=\"tooltipPoints()\" />\n @if (hasData()) {\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"tableColumns()\" [rows]=\"tableRows()\" />\n }\n @if (hasData() && intervals().length > 0) {\n <gbt-chart-table\n [caption]=\"intervalsCaption()\"\n [columns]=\"intervalColumns()\"\n [rows]=\"intervalRows()\"\n />\n }\n @if (!hasData()) {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n }\n</gbt-chart-frame>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n isDevMode,\n input,\n signal,\n} from '@angular/core'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartLegend, type LegendEntry } from '../chart-legend/chart-legend'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { arcPath, formatNumber, formatPercent } from '../../../primitives'\n\nexport interface PieSlice {\n label: string\n value: number\n}\n\ninterface RenderedSlice {\n label: string\n formattedValue: string\n formattedShare: string\n path: string\n color: string\n showLabel: boolean\n labelX: number\n labelY: number\n labelAnchor: 'start' | 'middle' | 'end'\n accessibleLabel: string\n}\n\nconst OUTER_RADIUS = 90\nconst LABEL_RADIUS = OUTER_RADIUS + 14\nconst LABEL_SHARE_THRESHOLD = 0.15\nconst PALETTE_SIZE = 6\n\n@Component({\n selector: 'gbt-pie-chart',\n standalone: true,\n imports: [ChartTable, ChartEmpty, ChartLegend],\n templateUrl: './pie-chart.html',\n styleUrl: './pie-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PieChart {\n slices = input.required<PieSlice[]>()\n label = input.required<string>()\n locale = input.required<string>()\n emptyMessage = input.required<string>()\n tableCaption = input.required<string>()\n categoryColumn = input.required<string>()\n valueColumn = input.required<string>()\n shareColumn = input.required<string>()\n sliceAnnouncement = input.required<(label: string, value: string, share: string) => string>()\n\n innerRadiusRatio = input<number>(0)\n\n protected readonly activeIndex = signal<number | null>(null)\n\n private readonly total = computed(() =>\n this.slices().reduce((sum, slice) => sum + slice.value, 0),\n )\n\n protected readonly renderedSlices = computed<RenderedSlice[]>(() => {\n const total = this.total()\n const innerRadius = OUTER_RADIUS * this.innerRadiusRatio()\n let angle = 0\n return this.slices().map((slice, index) => {\n const share = total <= 0 ? 0 : slice.value / total\n const startAngle = angle\n const endAngle = angle + share * Math.PI * 2\n angle = endAngle\n\n const midAngle = (startAngle + endAngle) / 2\n const labelX = Math.round(LABEL_RADIUS * Math.sin(midAngle) * 100) / 100\n const labelY = Math.round(-LABEL_RADIUS * Math.cos(midAngle) * 100) / 100\n\n const formattedValue = formatNumber(slice.value, this.locale())\n const formattedShare = formatPercent(share, this.locale())\n\n return {\n label: slice.label,\n formattedValue,\n formattedShare,\n path: arcPath({ startAngle, endAngle, innerRadius, outerRadius: OUTER_RADIUS }),\n color: this.colorFor(index),\n showLabel: share >= LABEL_SHARE_THRESHOLD,\n labelX,\n labelY,\n labelAnchor: labelX > 5 ? 'start' : labelX < -5 ? 'end' : 'middle',\n accessibleLabel: `${slice.label} — ${formattedValue}`,\n }\n })\n })\n\n protected readonly legendEntries = computed<LegendEntry[]>(() =>\n this.renderedSlices().map((slice) => ({\n label: slice.label,\n value: slice.formattedValue,\n color: slice.color,\n })),\n )\n\n protected readonly activeSlice = computed<RenderedSlice | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n return this.renderedSlices()[index] ?? null\n })\n\n protected readonly columns = computed(() => [\n this.categoryColumn(),\n this.valueColumn(),\n this.shareColumn(),\n ])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.renderedSlices().map((slice) => [slice.label, slice.formattedValue, slice.formattedShare]),\n )\n\n private colorFor(index: number): string {\n return `var(--chart-series-${(index % PALETTE_SIZE) + 1}-base)`\n }\n\n protected onMouseLeave(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement\n if (target.ownerDocument.activeElement === target) return\n this.activeIndex.set(null)\n }\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const count = this.slices().length\n if (count > PALETTE_SIZE) {\n console.warn(\n `gbt-pie-chart: ${count} slices received for ${PALETTE_SIZE} distinguishable colors. The palette cycles.`,\n )\n }\n })\n }\n }\n}\n","@if (renderedSlices().length > 0) {\n <div class=\"gbt-pie-chart\">\n <svg class=\"gbt-pie-chart__svg\" viewBox=\"-100 -100 200 200\" role=\"group\" [attr.aria-label]=\"label()\">\n @for (slice of renderedSlices(); track $index) {\n <path\n class=\"gbt-pie-chart__slice\"\n role=\"img\"\n tabindex=\"0\"\n [attr.aria-label]=\"slice.accessibleLabel\"\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n [attr.d]=\"slice.path\"\n [attr.fill]=\"slice.color\"\n (mouseenter)=\"activeIndex.set($index)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (focus)=\"activeIndex.set($index)\"\n (blur)=\"activeIndex.set(null)\"\n />\n }\n @for (slice of renderedSlices(); track $index) {\n @if (slice.showLabel) {\n <text\n class=\"gbt-pie-chart__label\"\n aria-hidden=\"true\"\n [attr.x]=\"slice.labelX\"\n [attr.y]=\"slice.labelY\"\n [attr.text-anchor]=\"slice.labelAnchor\"\n >{{ slice.formattedShare }}</text\n >\n }\n }\n </svg>\n <gbt-chart-legend\n [entries]=\"legendEntries()\"\n interactive\n [activeIndex]=\"activeIndex()\"\n (activeIndexChange)=\"activeIndex.set($event)\"\n />\n <div class=\"gbt-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n @if (activeSlice(); as slice) {\n {{ sliceAnnouncement()(slice.label, slice.formattedValue, slice.formattedShare) }}\n }\n </div>\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"columns()\" [rows]=\"tableRows()\" />\n </div>\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\">\n <svg\n gbtChartEmptyIcon\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"48\" cy=\"48\" r=\"30\" />\n <path d=\"M48 48 L48 18 A30 30 0 0 1 74 63 Z\" fill=\"currentColor\" stroke=\"none\" opacity=\"0.85\" />\n </svg>\n </gbt-chart-empty>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\nimport { ChartEmpty } from '../../organisms/chart-empty/chart-empty'\nimport { ChartTable } from '../../organisms/chart-table/chart-table'\nimport { formatNumber, linePath, linearScale, nearestIndex } from '../../../primitives'\n\nconst MARGIN = 4\n\n@Component({\n selector: 'gbt-sparkline',\n standalone: true,\n imports: [ChartEmpty, ChartTable],\n templateUrl: './sparkline.html',\n styleUrl: './sparkline.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Sparkline {\n values = input.required<number[]>()\n tableCaption = input.required<string>()\n xColumn = input.required<string>()\n yColumn = input.required<string>()\n locale = input.required<string>()\n emptyMessage = input.required<string>()\n width = input(80)\n height = input(24)\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected readonly viewBox = computed(() => `0 0 ${this.width()} ${this.height()}`)\n\n protected readonly columns = computed(() => [this.xColumn(), this.yColumn()])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.values().map((value, index) => [\n formatNumber(index + 1, this.locale()),\n formatNumber(value, this.locale()),\n ]),\n )\n\n private readonly scales = computed(() => {\n const values = this.values()\n const min = Math.min(...values)\n const max = Math.max(...values)\n return {\n x: linearScale([0, Math.max(values.length - 1, 0)], [MARGIN, this.width() - MARGIN]),\n y: linearScale([min, max], [this.height() - MARGIN, MARGIN]),\n }\n })\n\n protected readonly path = computed(() => {\n const values = this.values()\n if (values.length === 0) return null\n const { x, y } = this.scales()\n return linePath(values.map((value, index) => ({ x: x.map(index), y: y.map(value) })))\n })\n\n protected readonly positions = computed<number[]>(() => {\n const { x } = this.scales()\n return this.values().map((_, index) => x.map(index))\n })\n\n protected readonly dot = computed<{ x: number; y: number } | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n const value = this.values()[index]\n if (value === undefined) return null\n const { x, y } = this.scales()\n return { x: x.map(index), y: y.map(value) }\n })\n\n protected readonly tooltip = computed<string | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n const value = this.values()[index]\n if (value === undefined) return null\n return `${this.xColumn()} ${formatNumber(index + 1, this.locale())} — ${this.yColumn()} ${formatNumber(value, this.locale())}`\n })\n\n protected onPointerMove(event: PointerEvent | MouseEvent): void {\n const positions = this.positions()\n if (positions.length === 0) return\n const rect = (event.currentTarget as Element).getBoundingClientRect()\n this.activeIndex.set(nearestIndex(positions, event.clientX - rect.left))\n }\n\n protected onPointerLeave(event: PointerEvent | MouseEvent): void {\n const target = event.currentTarget as Element\n if (target.ownerDocument.activeElement === target) return\n this.activeIndex.set(null)\n }\n\n protected onBlur(): void {\n this.activeIndex.set(null)\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const lastIndex = this.values().length - 1\n if (lastIndex < 0) return\n const current = this.activeIndex()\n switch (event.key) {\n case 'ArrowRight':\n this.activeIndex.set(current === null ? 0 : Math.min(lastIndex, current + 1))\n break\n case 'ArrowLeft':\n this.activeIndex.set(current === null ? lastIndex : Math.max(0, current - 1))\n break\n case 'Home':\n this.activeIndex.set(0)\n break\n case 'End':\n this.activeIndex.set(lastIndex)\n break\n case 'Escape':\n this.activeIndex.set(null)\n break\n default:\n return\n }\n event.preventDefault()\n }\n}\n","@if (path(); as d) {\n <div class=\"gbt-sparkline\" role=\"status\" aria-live=\"polite\">\n <svg\n class=\"gbt-sparkline__svg\"\n [attr.viewBox]=\"viewBox()\"\n [attr.width]=\"width()\"\n [attr.height]=\"height()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-label]=\"tableCaption()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n >\n <path class=\"gbt-sparkline__line\" [attr.d]=\"d\" />\n @if (dot(); as p) {\n <circle class=\"gbt-sparkline__dot\" [attr.cx]=\"p.x\" [attr.cy]=\"p.y\" r=\"3\" />\n }\n </svg>\n @if (tooltip(); as text) {\n <span class=\"gbt-sparkline__tooltip\">{{ text }}</span>\n }\n </div>\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"columns()\" [rows]=\"tableRows()\" />\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-gauge-bar',\n standalone: true,\n imports: [],\n templateUrl: './gauge-bar.html',\n styleUrl: './gauge-bar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GaugeBar {\n value = input.required<number>()\n max = input.required<number>()\n label = input.required<string>()\n formattedValue = input.required<string>()\n warningLabel = input.required<string>()\n criticalLabel = input.required<string>()\n thresholds = input<{ warning: number; critical: number }>({ warning: 70, critical: 90 })\n\n protected readonly percentage = computed(() => {\n const max = this.max()\n\n if (max <= 0) return 0\n return Math.max(0, Math.min(100, (this.value() / max) * 100))\n })\n\n protected readonly severity = computed<'warning' | 'critical' | null>(() => {\n const percentage = this.percentage()\n const { warning, critical } = this.thresholds()\n if (percentage >= critical) return 'critical'\n if (percentage >= warning) return 'warning'\n return null\n })\n\n protected readonly severityLabel = computed(() => {\n const severity = this.severity()\n if (severity === 'critical') return this.criticalLabel()\n if (severity === 'warning') return this.warningLabel()\n return null\n })\n}\n","<div class=\"gbt-gauge-bar\">\n <div class=\"gbt-gauge-bar__header\">\n <span class=\"gbt-gauge-bar__label\">{{ label() }}</span>\n <span class=\"gbt-gauge-bar__value\">\n {{ formattedValue() }}\n @if (severityLabel(); as tierLabel) {\n <span class=\"gbt-gauge-bar__tier\" [attr.data-tier]=\"severity()\">{{ tierLabel }}</span>\n }\n </span>\n </div>\n <div\n class=\"gbt-gauge-bar__track\"\n role=\"progressbar\"\n [attr.aria-label]=\"label()\"\n [attr.aria-valuenow]=\"percentage()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuetext]=\"formattedValue()\"\n >\n <div\n class=\"gbt-gauge-bar__fill\"\n [attr.data-tier]=\"severity()\"\n [style.width.%]=\"percentage()\"\n ></div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\nimport { ChartEmpty } from '../../organisms/chart-empty/chart-empty'\nimport { formatNumber } from '../../../primitives'\n\nexport interface DimensionRow {\n label: string\n value: number\n\n display?: string\n}\n\ninterface RenderedRow {\n label: string\n formattedValue: string\n\n part: number\n}\n\n@Component({\n selector: 'gbt-dimension-card',\n standalone: true,\n imports: [ChartEmpty],\n templateUrl: './dimension-card.html',\n styleUrl: './dimension-card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DimensionCard {\n rows = input.required<DimensionRow[]>()\n caption = input.required<string>()\n labelColumn = input.required<string>()\n valueColumn = input.required<string>()\n emptyMessage = input.required<string>()\n locale = input.required<string>()\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected readonly renderedRows = computed<RenderedRow[]>(() => {\n const rows = this.rows()\n const maxValue = rows.reduce((max, row) => Math.max(max, row.value), 0)\n return rows.map((row) => ({\n label: row.label,\n formattedValue: row.display ?? formatNumber(row.value, this.locale()),\n\n part: maxValue <= 0 ? 0 : (row.value / maxValue) * 100,\n }))\n })\n}\n","@if (rows().length > 0) {\n <table class=\"gbt-dimension-card\">\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ labelColumn() }}</th>\n <th scope=\"col\">{{ valueColumn() }}</th>\n </tr>\n </thead>\n <tbody>\n @for (row of renderedRows(); track $index) {\n <tr\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n (mouseenter)=\"activeIndex.set($index)\"\n (mouseleave)=\"activeIndex.set(null)\"\n >\n <th scope=\"row\" class=\"gbt-dimension-card__cell\">\n <span\n class=\"gbt-dimension-card__bar\"\n [style.width.%]=\"row.part\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"gbt-dimension-card__label\">{{ row.label }}</span>\n </th>\n <td class=\"gbt-dimension-card__value\">{{ row.formattedValue }}</td>\n </tr>\n }\n </tbody>\n </table>\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\nimport { ChartEmpty } from '../../organisms/chart-empty/chart-empty'\nimport { ChartTable } from '../../organisms/chart-table/chart-table'\nimport { formatNumber, formatPercent } from '../../../primitives'\n\nexport interface FunnelStep {\n label: string\n value: number\n}\n\ninterface RenderedStep {\n label: string\n formattedValue: string\n\n part: number\n\n conversionFromPrevious: string\n}\n\n@Component({\n selector: 'gbt-funnel-chart',\n standalone: true,\n imports: [ChartTable, ChartEmpty],\n templateUrl: './funnel-chart.html',\n styleUrl: './funnel-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FunnelChart {\n steps = input.required<FunnelStep[]>()\n label = input.required<string>()\n locale = input.required<string>()\n emptyMessage = input.required<string>()\n tableCaption = input.required<string>()\n stepColumn = input.required<string>()\n valueColumn = input.required<string>()\n conversionColumn = input.required<string>()\n stepAnnouncement = input.required<(label: string, conversion: string) => string>()\n\n private readonly reference = computed(() => this.steps()[0]?.value ?? 0)\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected onMouseLeave(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement\n if (target.ownerDocument.activeElement === target) return\n this.activeIndex.set(null)\n }\n\n protected readonly renderedSteps = computed<RenderedStep[]>(() => {\n const reference = this.reference()\n const steps = this.steps()\n return steps.map((step, index) => {\n const previousValue = index === 0 ? step.value : steps[index - 1].value\n return {\n label: step.label,\n formattedValue: formatNumber(step.value, this.locale()),\n\n part: reference <= 0 ? 0 : (step.value / reference) * 100,\n conversionFromPrevious: formatPercent(\n previousValue <= 0 ? 0 : step.value / previousValue,\n this.locale(),\n ),\n }\n })\n })\n\n protected readonly activeStep = computed<RenderedStep | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n return this.renderedSteps()[index] ?? null\n })\n\n protected readonly columns = computed(() => [\n this.stepColumn(),\n this.valueColumn(),\n this.conversionColumn(),\n ])\n\n protected readonly tableRows = computed<(string | number)[][]>(() => {\n const reference = this.reference()\n return this.steps().map((step) => [\n step.label,\n formatNumber(step.value, this.locale()),\n formatPercent(reference <= 0 ? 0 : step.value / reference, this.locale()),\n ])\n })\n}\n","@if (renderedSteps().length > 0) {\n <ol class=\"gbt-funnel-chart\" [attr.aria-label]=\"label()\">\n @for (step of renderedSteps(); track $index) {\n <li\n class=\"gbt-funnel-chart__step\"\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n tabindex=\"0\"\n (mouseenter)=\"activeIndex.set($index)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (focus)=\"activeIndex.set($index)\"\n (blur)=\"activeIndex.set(null)\"\n >\n <div class=\"gbt-funnel-chart__bar\" [style.width.%]=\"step.part\" aria-hidden=\"true\"></div>\n <span class=\"gbt-funnel-chart__label\">{{ step.label }}</span>\n <span class=\"gbt-funnel-chart__value\">{{ step.formattedValue }}</span>\n @if ($index === activeIndex()) {\n <span class=\"gbt-funnel-chart__tip\" aria-hidden=\"true\">{{\n step.conversionFromPrevious\n }}</span>\n }\n </li>\n }\n </ol>\n <div class=\"gbt-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n @if (activeStep(); as step) {\n {{ stepAnnouncement()(step.label, step.conversionFromPrevious) }}\n }\n </div>\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"columns()\" [rows]=\"tableRows()\" />\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\ninterface PopupPosition {\n top: string\n left: string | null\n right: string | null\n}\n\n@Component({\n selector: 'gbt-menu',\n standalone: true,\n imports: [Icon],\n templateUrl: './menu.html',\n styleUrl: './menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'onDocumentClick($event)',\n '(focusout)': 'onFocusOut($event)',\n '(window:scroll)': 'updatePosition()',\n '(window:resize)': 'updatePosition()',\n },\n})\nexport class Menu {\n private readonly elementRef = inject(ElementRef<HTMLElement>)\n private readonly injector = inject(Injector)\n\n label = input.required<string>()\n align = input<'start' | 'end'>('start')\n triggerIcon = input<string | null>(null)\n opened = output<void>()\n\n protected readonly open = signal(false)\n protected readonly position = signal<PopupPosition | null>(null)\n\n private readonly trigger = viewChild<ElementRef<HTMLButtonElement>>('trigger')\n private readonly list = viewChild<ElementRef<HTMLElement>>('list')\n\n protected toggle(): void {\n this.open.update((value) => !value)\n if (this.open()) {\n this.updatePosition()\n this.focusAfterRender('first')\n this.opened.emit()\n }\n }\n\n protected close(returnFocus: boolean): void {\n if (!this.open()) return\n this.open.set(false)\n if (returnFocus) {\n this.trigger()?.nativeElement.focus()\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return\n event.preventDefault()\n const target = event.key === 'ArrowUp' ? 'last' : 'first'\n if (!this.open()) {\n this.open.set(true)\n this.updatePosition()\n this.opened.emit()\n }\n this.focusAfterRender(target)\n }\n\n protected onListKeydown(event: KeyboardEvent): void {\n const items = this.items()\n if (items.length === 0) return\n const index = items.indexOf(document.activeElement as HTMLElement)\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this.close(true)\n break\n case 'ArrowDown':\n event.preventDefault()\n this.focus((index + 1) % items.length)\n break\n case 'ArrowUp':\n event.preventDefault()\n this.focus((index - 1 + items.length) % items.length)\n break\n case 'Home':\n event.preventDefault()\n this.focus(0)\n break\n case 'End':\n event.preventDefault()\n this.focus(items.length - 1)\n break\n }\n }\n\n protected onListClick(): void {\n this.close(false)\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.close(false)\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const target = event.relatedTarget as Node | null\n if (this.open() && !this.elementRef.nativeElement.contains(target)) {\n this.open.set(false)\n }\n }\n\n protected updatePosition(): void {\n if (!this.open()) return\n const trigger = this.trigger()?.nativeElement\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n this.position.set(\n this.align() === 'end'\n ? { top: `${rect.bottom + 6}px`, left: null, right: `${window.innerWidth - rect.right}px` }\n : { top: `${rect.bottom + 6}px`, left: `${rect.left}px`, right: null },\n )\n }\n\n private items(): HTMLElement[] {\n const list = this.list()?.nativeElement\n if (!list) return []\n return [...list.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')]\n }\n\n private focus(index: number): void {\n this.items()[index]?.focus()\n }\n\n private focusAfterRender(target: 'first' | 'last'): void {\n afterNextRender(\n () => {\n const items = this.items()\n this.focus(target === 'last' ? items.length - 1 : 0)\n },\n { injector: this.injector },\n )\n }\n}\n","<div class=\"gbt-menu\">\n <button\n #trigger\n type=\"button\"\n class=\"gbt-menu__trigger\"\n [class.gbt-menu__trigger--open]=\"open()\"\n [class.gbt-menu__trigger--icon-only]=\"triggerIcon()\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"triggerIcon() ? label() : null\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (triggerIcon(); as icon) {\n <gbt-icon [name]=\"icon\" aria-hidden=\"true\" />\n } @else {\n <span class=\"gbt-menu__label\">{{ label() }}</span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-menu__chevron\" aria-hidden=\"true\" />\n }\n </button>\n\n @if (open() && position(); as pos) {\n <div\n #list\n class=\"gbt-menu__list\"\n role=\"menu\"\n tabindex=\"-1\"\n [attr.aria-label]=\"label()\"\n [style.top]=\"pos.top\"\n [style.left]=\"pos.left\"\n [style.right]=\"pos.right\"\n (keydown)=\"onListKeydown($event)\"\n (click)=\"onListClick()\"\n >\n <ng-content />\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core'\n\nexport type PopoverAlign = 'start' | 'end'\n\ninterface PopoverPosition {\n top: string\n left: string | null\n right: string | null\n}\n\nlet nextPopoverId = 0\n\n@Component({\n selector: 'gbt-popover',\n standalone: true,\n exportAs: 'gbtPopover',\n imports: [],\n templateUrl: './popover.html',\n styleUrl: './popover.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gbt-popover-host',\n '(click)': 'onTriggerClick($event)',\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onKeydown($event)',\n '(window:scroll)': 'updatePosition()',\n '(window:resize)': 'updatePosition()',\n },\n})\nexport class Popover {\n private readonly elementRef = inject(ElementRef<HTMLElement>)\n private readonly triggerSlot = viewChild<ElementRef<HTMLElement>>('triggerSlot')\n\n align = input<PopoverAlign>('start')\n\n readonly panelId = `gbt-popover-${++nextPopoverId}`\n\n private readonly isOpen = signal(false)\n readonly open = this.isOpen.asReadonly()\n\n protected readonly position = signal<PopoverPosition | null>(null)\n\n toggle(): void {\n this.isOpen.update((value) => !value)\n if (this.isOpen()) {\n this.updatePosition()\n }\n }\n\n close(returnFocus = false): void {\n if (!this.isOpen()) {\n return\n }\n this.isOpen.set(false)\n if (returnFocus) {\n this.focusTrigger()\n }\n }\n\n protected onTriggerClick(event: MouseEvent): void {\n const trigger = this.triggerSlot()?.nativeElement\n if (trigger?.contains(event.target as Node)) {\n this.toggle()\n }\n }\n\n protected updatePosition(): void {\n if (!this.isOpen()) {\n return\n }\n const trigger = this.triggerSlot()?.nativeElement\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n this.position.set(\n this.align() === 'end'\n ? { top: `${rect.bottom + 6}px`, left: null, right: `${window.innerWidth - rect.right}px` }\n : { top: `${rect.bottom + 6}px`, left: `${rect.left}px`, right: null },\n )\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.isOpen() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.close(false)\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.isOpen()) {\n event.preventDefault()\n event.stopPropagation()\n this.close(true)\n }\n }\n\n private focusTrigger(): void {\n const trigger = this.triggerSlot()?.nativeElement\n trigger?.querySelector<HTMLElement>('button, a[href], input, select, textarea, [tabindex]')?.focus()\n }\n}\n","<span #triggerSlot class=\"gbt-popover__trigger\">\n <ng-content></ng-content>\n</span>\n@if (open() && position(); as pos) {\n <div class=\"gbt-popover__panel\" [id]=\"panelId\" [style.top]=\"pos.top\" [style.left]=\"pos.left\" [style.right]=\"pos.right\">\n <ng-content select=\"[popover-content]\"></ng-content>\n </div>\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, input } from '@angular/core'\nimport { NgTemplateOutlet } from '@angular/common'\n\nexport type DescriptionListLayout = 'stacked' | 'inline'\n\nexport interface DescriptionListEntry {\n term: string\n value: string | TemplateRef<unknown>\n}\n\n@Component({\n selector: 'gbt-description-list',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './description-list.html',\n styleUrl: './description-list.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DescriptionList {\n items = input.required<DescriptionListEntry[]>()\n layout = input<DescriptionListLayout>('stacked')\n\n protected isTemplate(value: DescriptionListEntry['value']): value is TemplateRef<unknown> {\n return value instanceof TemplateRef\n }\n}\n","<dl class=\"gbt-description-list\" [attr.data-layout]=\"layout()\">\n @for (item of items(); track $index) {\n <dt class=\"gbt-description-list__term\">{{ item.term }}</dt>\n <dd class=\"gbt-description-list__value\">\n @if (isTemplate(item.value)) {\n <ng-container [ngTemplateOutlet]=\"item.value\"></ng-container>\n } @else {\n {{ item.value }}\n }\n </dd>\n }\n</dl>\n","import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, input, model, viewChild } from '@angular/core'\n\nexport interface SegmentedControlOption<T = string> {\n value: T\n label: string\n disabled?: boolean\n}\n\n@Component({\n selector: 'gbt-segmented-control',\n standalone: true,\n imports: [],\n templateUrl: './segmented-control.html',\n styleUrl: './segmented-control.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SegmentedControl<T = string> {\n private readonly group = viewChild<ElementRef<HTMLElement>>('group')\n\n options = input.required<SegmentedControlOption<T>[]>()\n value = model.required<T>()\n ariaLabel = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n\n protected isSelected(value: T): boolean {\n return this.value() === value\n }\n\n protected select(option: SegmentedControlOption<T>): void {\n if (this.disabled() || option.disabled) {\n return\n }\n this.value.set(option.value)\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const options = this.options()\n const count = options.length\n if (count === 0) {\n return\n }\n let next: number | null = null\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextEnabledIndex(index, 1)\n break\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextEnabledIndex(index, -1)\n break\n case 'Home':\n next = this.nextEnabledIndex(-1, 1)\n break\n case 'End':\n next = this.nextEnabledIndex(count, -1)\n break\n }\n if (next === null) {\n return\n }\n event.preventDefault()\n this.select(options[next])\n this.focusButton(next)\n }\n\n private nextEnabledIndex(from: number, direction: 1 | -1): number | null {\n const options = this.options()\n const count = options.length\n for (let step = 1; step <= count; step++) {\n const candidate = (from + direction * step + count) % count\n if (!options[candidate].disabled) {\n return candidate\n }\n }\n return null\n }\n\n private focusButton(index: number): void {\n this.group()?.nativeElement.querySelectorAll<HTMLElement>('[role=\"radio\"]')[index]?.focus()\n }\n}\n","<div #group class=\"gbt-segmented-control\" role=\"radiogroup\" [attr.aria-label]=\"ariaLabel() || null\">\n @for (option of options(); track option.value; let i = $index) {\n <button\n type=\"button\"\n role=\"radio\"\n class=\"gbt-segmented-control__option\"\n [class.gbt-segmented-control__option--selected]=\"isSelected(option.value)\"\n [attr.aria-checked]=\"isSelected(option.value)\"\n [tabIndex]=\"isSelected(option.value) ? 0 : -1\"\n [disabled]=\"disabled() || !!option.disabled\"\n (click)=\"select(option)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n {{ option.label }}\n </button>\n }\n</div>\n","export type WeekStartsOn = 0 | 1\n\nexport interface CalendarDay {\n date: Date\n inCurrentMonth: boolean\n isToday: boolean\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n )\n}\n\n/** Adds `delta` whole months, clamping an overflowing day to the target month's last day. */\nexport function addMonths(date: Date, delta: number): Date {\n const day = date.getDate()\n const firstOfTarget = new Date(date.getFullYear(), date.getMonth() + delta, 1)\n const daysInTarget = new Date(firstOfTarget.getFullYear(), firstOfTarget.getMonth() + 1, 0).getDate()\n return new Date(firstOfTarget.getFullYear(), firstOfTarget.getMonth(), Math.min(day, daysInTarget))\n}\n\n/** Adds `delta` whole years, clamping Feb 29 to Feb 28 on a non-leap target year. */\nexport function addYears(date: Date, delta: number): Date {\n return addMonths(date, delta * 12)\n}\n\nexport function startOfWeek(date: Date, weekStartsOn: WeekStartsOn): Date {\n const weekday = date.getDay()\n const diff = (weekday - weekStartsOn + 7) % 7\n const result = new Date(date.getFullYear(), date.getMonth(), date.getDate())\n result.setDate(result.getDate() - diff)\n return result\n}\n\nexport function endOfWeek(date: Date, weekStartsOn: WeekStartsOn): Date {\n const start = startOfWeek(date, weekStartsOn)\n start.setDate(start.getDate() + 6)\n return start\n}\n\n/** Always 42 days (6 full weeks), starting on the week containing the 1st of `month`. */\nexport function buildCalendarGrid(year: number, month: number, weekStartsOn: WeekStartsOn): CalendarDay[] {\n const firstOfMonth = new Date(year, month, 1)\n const gridStart = startOfWeek(firstOfMonth, weekStartsOn)\n const today = new Date()\n\n const days: CalendarDay[] = []\n for (let i = 0; i < 42; i++) {\n const date = new Date(gridStart.getFullYear(), gridStart.getMonth(), gridStart.getDate() + i)\n days.push({\n date,\n inCurrentMonth: date.getMonth() === month,\n isToday: isSameDay(date, today),\n })\n }\n return days\n}\n\nexport function weekdayLabels(locale: string, weekStartsOn: WeekStartsOn): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' })\n // Any Sunday-anchored reference week: Jan 7 2024 is a Sunday.\n const reference = new Date(2024, 0, 7 + weekStartsOn)\n return Array.from({ length: 7 }, (_, i) => {\n const date = new Date(reference.getFullYear(), reference.getMonth(), reference.getDate() + i)\n return formatter.format(date)\n })\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport {\n CalendarDay,\n WeekStartsOn,\n addMonths,\n addYears,\n buildCalendarGrid,\n endOfWeek,\n isSameDay,\n startOfWeek,\n weekdayLabels,\n} from './date-picker-calendar'\n\nexport type DatePickerVisibleMonths = 1 | 2\n\nexport interface DatePickerMonthView {\n year: number\n month: number\n label: string\n weeks: CalendarDay[][]\n}\n\nlet nextDatePickerId = 0\n\nconst CURRENT_YEAR = new Date().getFullYear()\n\n@Component({\n selector: 'gbt-date-picker',\n standalone: true,\n imports: [Icon],\n templateUrl: './date-picker.html',\n styleUrl: './date-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onEscape($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePicker),\n multi: true,\n },\n ],\n})\nexport class DatePicker implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef)\n private readonly injector = inject(Injector)\n\n id = input<string>(`gbt-date-picker-${++nextDatePickerId}`)\n label = input<string>('')\n placeholder = input<string>('Select a date…')\n locale = input<string>('en-US')\n weekStartsOn = input<WeekStartsOn>(1)\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n previousMonthLabel = input<string>('Previous month')\n nextMonthLabel = input<string>('Next month')\n clearable = input(false, { transform: booleanAttribute })\n clearLabel = input<string>('Clear date')\n visibleMonths = input<DatePickerVisibleMonths>(1)\n monthSelectLabel = input<string>('Month')\n yearSelectLabel = input<string>('Year')\n minYear = input<number>(CURRENT_YEAR - 100)\n maxYear = input<number>(CURRENT_YEAR + 10)\n\n protected readonly open = signal(false)\n protected readonly selected = signal<Date | null>(null)\n protected readonly focusedDate = signal<Date>(new Date())\n protected readonly anchorDate = signal<Date>(new Date())\n protected readonly panelStyle = signal<{ top: string; left: string } | null>(null)\n\n private readonly formDisabled = signal(false)\n private onChange: (value: Date | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n protected readonly showClear = computed(\n () => this.clearable() && this.selected() !== null && !this.isDisabled(),\n )\n\n protected readonly monthViews = computed<DatePickerMonthView[]>(() => {\n const anchor = this.anchorDate()\n const count = this.visibleMonths()\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' })\n const views = Array.from({ length: count }, (_, i) => {\n const monthDate = new Date(anchor.getFullYear(), anchor.getMonth() + i, 1)\n const year = monthDate.getFullYear()\n const month = monthDate.getMonth()\n const days = buildCalendarGrid(year, month, this.weekStartsOn())\n const weeks: CalendarDay[][] = []\n for (let d = 0; d < days.length; d += 7) {\n weeks.push(days.slice(d, d + 7))\n }\n return { year, month, label: formatter.format(monthDate), weeks }\n })\n // Trim wholly-blank trailing weeks (pure next-month filler) — but by the\n // same amount across every visible month, so side-by-side calendars\n // (`visibleMonths=\"2\"`) stay the same height even when only one of them\n // actually needs the extra week.\n const neededWeeks = views.map((view) => {\n let last = view.weeks.length\n while (last > 1 && view.weeks[last - 1].every((day) => !day.inCurrentMonth)) {\n last--\n }\n return last\n })\n const sharedWeeks = Math.max(...neededWeeks)\n return views.map((view) => ({ ...view, weeks: view.weeks.slice(0, sharedWeeks) }))\n })\n\n protected readonly panelLabel = computed(() => {\n const views = this.monthViews()\n return views.length === 1 ? views[0].label : `${views[0].label} – ${views[views.length - 1].label}`\n })\n\n protected readonly weekdayLabels = computed(() => weekdayLabels(this.locale(), this.weekStartsOn()))\n\n protected readonly monthOptions = computed(() => {\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'long' })\n return Array.from({ length: 12 }, (_, i) => ({ value: i, label: formatter.format(new Date(2024, i, 1)) }))\n })\n\n protected readonly yearOptions = computed(() => {\n const min = this.minYear()\n const max = this.maxYear()\n return Array.from({ length: max - min + 1 }, (_, i) => min + i)\n })\n\n protected readonly triggerLabel = computed(() => {\n const value = this.selected()\n return value ? new Intl.DateTimeFormat(this.locale(), { dateStyle: 'medium' }).format(value) : ''\n })\n\n writeValue(value: Date | null): void {\n this.selected.set(value)\n if (value) {\n this.focusedDate.set(value)\n this.anchorDate.set(new Date(value.getFullYear(), value.getMonth(), 1))\n }\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isSelected(date: Date): boolean {\n const value = this.selected()\n return value !== null && isSameDay(value, date)\n }\n\n protected isFocused(date: Date): boolean {\n return isSameDay(this.focusedDate(), date)\n }\n\n protected cellId(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(\n date.getDate(),\n ).padStart(2, '0')}`\n }\n\n protected toggleOpen(): void {\n if (this.isDisabled()) {\n return\n }\n this.open.update((value) => !value)\n if (this.open()) {\n const target = this.selected() ?? new Date()\n this.focusedDate.set(target)\n this.anchorDate.set(new Date(target.getFullYear(), target.getMonth(), 1))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n } else {\n this.onTouched()\n }\n }\n\n protected close(returnFocus: boolean): void {\n if (!this.open()) {\n return\n }\n this.open.set(false)\n this.onTouched()\n if (returnFocus) {\n this.trigger()?.focus()\n }\n }\n\n protected clear(event: Event): void {\n event.stopPropagation()\n if (this.isDisabled()) {\n return\n }\n this.selected.set(null)\n this.onChange(null)\n this.onTouched()\n this.close(false)\n }\n\n protected selectDay(day: CalendarDay): void {\n if (this.isDisabled()) {\n return\n }\n this.selected.set(day.date)\n this.focusedDate.set(day.date)\n this.ensureVisible(day.date)\n this.onChange(day.date)\n this.close(true)\n }\n\n protected shiftMonth(delta: number): void {\n this.anchorDate.set(addMonths(this.anchorDate(), delta))\n this.focusedDate.set(addMonths(this.focusedDate(), delta))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n }\n\n protected onMonthSelect(value: string): void {\n this.setAnchorMonth(this.anchorDate().getFullYear(), Number(value))\n }\n\n protected onYearSelect(value: string): void {\n this.setAnchorMonth(Number(value), this.anchorDate().getMonth())\n }\n\n private setAnchorMonth(year: number, month: number): void {\n const dayOfMonth = this.focusedDate().getDate()\n const daysInTarget = new Date(year, month + 1, 0).getDate()\n this.anchorDate.set(new Date(year, month, 1))\n this.focusedDate.set(new Date(year, month, Math.min(dayOfMonth, daysInTarget)))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n }\n\n protected onGridKeydown(event: KeyboardEvent): void {\n const current = this.focusedDate()\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.selectDay({ date: current, inCurrentMonth: true, isToday: isSameDay(current, new Date()) })\n return\n }\n if (event.key === 'PageDown' || event.key === 'PageUp') {\n event.preventDefault()\n const delta = event.key === 'PageDown' ? 1 : -1\n if (event.shiftKey) {\n this.anchorDate.set(addYears(this.anchorDate(), delta))\n this.focusedDate.set(addYears(current, delta))\n } else {\n this.anchorDate.set(addMonths(this.anchorDate(), delta))\n this.focusedDate.set(addMonths(current, delta))\n }\n this.updatePanelPosition()\n this.focusCellAfterRender()\n return\n }\n const next = this.nextFocusedDate(current, event)\n if (next === null) {\n return\n }\n event.preventDefault()\n this.ensureVisible(next)\n this.focusedDate.set(next)\n this.focusCellAfterRender()\n }\n\n private nextFocusedDate(current: Date, event: KeyboardEvent): Date | null {\n switch (event.key) {\n case 'ArrowRight':\n return shiftDays(current, 1)\n case 'ArrowLeft':\n return shiftDays(current, -1)\n case 'ArrowDown':\n return shiftDays(current, 7)\n case 'ArrowUp':\n return shiftDays(current, -7)\n case 'Home':\n return startOfWeek(current, this.weekStartsOn())\n case 'End':\n return endOfWeek(current, this.weekStartsOn())\n default:\n return null\n }\n }\n\n /** Shifts the anchor by the minimum amount needed so `date`'s month becomes visible. */\n private ensureVisible(date: Date): void {\n const anchor = this.anchorDate()\n const visibleMonths = this.visibleMonths()\n const monthsDiff =\n (date.getFullYear() - anchor.getFullYear()) * 12 + (date.getMonth() - anchor.getMonth())\n if (monthsDiff < 0) {\n this.anchorDate.set(new Date(date.getFullYear(), date.getMonth(), 1))\n } else if (monthsDiff >= visibleMonths) {\n this.anchorDate.set(addMonths(anchor, monthsDiff - visibleMonths + 1))\n }\n }\n\n protected onEscape(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault()\n event.stopPropagation()\n this.close(true)\n }\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.close(false)\n }\n }\n\n protected updatePanelPosition(): void {\n if (!this.open()) {\n return\n }\n const trigger = this.trigger()\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n this.panelStyle.set({ top: `${rect.bottom + 6}px`, left: `${rect.left}px` })\n }\n\n private trigger(): HTMLButtonElement | null {\n return this.elementRef.nativeElement.querySelector('.gbt-date-picker__trigger')\n }\n\n private focusCellAfterRender(): void {\n afterNextRender(\n () => {\n const id = this.cellId(this.focusedDate())\n const host = this.elementRef.nativeElement as HTMLElement\n host.querySelector<HTMLElement>(`[data-date=\"${id}\"]`)?.focus()\n },\n { injector: this.injector },\n )\n }\n}\n\nfunction shiftDays(date: Date, delta: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + delta)\n}\n","<div class=\"gbt-date-picker\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-date-picker__label\">{{ label() }}{{ required() ? ' *' : '' }}</label>\n }\n <div class=\"gbt-date-picker__field\">\n <button\n type=\"button\"\n [id]=\"id()\"\n class=\"gbt-date-picker__trigger\"\n [class.gbt-date-picker__trigger--open]=\"open()\"\n [disabled]=\"isDisabled()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (click)=\"toggleOpen()\"\n >\n <span\n class=\"gbt-date-picker__trigger-label\"\n [class.gbt-date-picker__trigger-label--placeholder]=\"!triggerLabel()\"\n >\n {{ triggerLabel() || placeholder() }}\n </span>\n </button>\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"gbt-date-picker__clear\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"clear($event)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n } @else {\n <gbt-icon name=\"calendar\" class=\"gbt-date-picker__icon\" aria-hidden=\"true\" />\n }\n </div>\n @if (open() && panelStyle(); as pos) {\n <div\n class=\"gbt-date-picker__panel\"\n role=\"dialog\"\n aria-modal=\"false\"\n [attr.aria-label]=\"panelLabel()\"\n [style.top]=\"pos.top\"\n [style.left]=\"pos.left\"\n >\n <div class=\"gbt-date-picker__nav\">\n <button\n type=\"button\"\n class=\"gbt-date-picker__nav-button\"\n [attr.aria-label]=\"previousMonthLabel()\"\n (click)=\"shiftMonth(-1)\"\n >\n <gbt-icon name=\"chevron-left\" aria-hidden=\"true\" />\n </button>\n <div class=\"gbt-date-picker__headings\">\n @for (view of monthViews(); track view.year + '-' + view.month; let i = $index) {\n <div class=\"gbt-date-picker__month-heading\">\n @if (i === 0) {\n <select\n #monthSelect\n class=\"gbt-date-picker__select\"\n [attr.aria-label]=\"monthSelectLabel()\"\n (change)=\"onMonthSelect(monthSelect.value)\"\n >\n @for (opt of monthOptions(); track opt.value) {\n <option [value]=\"opt.value\" [selected]=\"opt.value === anchorDate().getMonth()\">\n {{ opt.label }}\n </option>\n }\n </select>\n <select\n #yearSelect\n class=\"gbt-date-picker__select\"\n [attr.aria-label]=\"yearSelectLabel()\"\n (change)=\"onYearSelect(yearSelect.value)\"\n >\n @for (year of yearOptions(); track year) {\n <option [value]=\"year\" [selected]=\"year === anchorDate().getFullYear()\">{{ year }}</option>\n }\n </select>\n } @else {\n <span class=\"gbt-date-picker__month-label\">{{ view.label }}</span>\n }\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"gbt-date-picker__nav-button\"\n [attr.aria-label]=\"nextMonthLabel()\"\n (click)=\"shiftMonth(1)\"\n >\n <gbt-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"gbt-date-picker__months\">\n @for (view of monthViews(); track view.year + '-' + view.month) {\n <div class=\"gbt-date-picker__month\">\n <div\n class=\"gbt-date-picker__grid\"\n role=\"grid\"\n tabindex=\"-1\"\n [attr.aria-label]=\"view.label\"\n (keydown)=\"onGridKeydown($event)\"\n >\n <div class=\"gbt-date-picker__row gbt-date-picker__row--head\" role=\"row\">\n @for (wd of weekdayLabels(); track $index) {\n <span role=\"columnheader\" class=\"gbt-date-picker__weekday\">{{ wd }}</span>\n }\n </div>\n @for (week of view.weeks; track $index) {\n <div class=\"gbt-date-picker__row\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n @if (day.inCurrentMonth) {\n <button\n type=\"button\"\n role=\"gridcell\"\n class=\"gbt-date-picker__day\"\n [class.gbt-date-picker__day--today]=\"day.isToday\"\n [class.gbt-date-picker__day--selected]=\"isSelected(day.date)\"\n [attr.data-date]=\"cellId(day.date)\"\n [attr.aria-selected]=\"isSelected(day.date)\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [tabIndex]=\"isFocused(day.date) ? 0 : -1\"\n (click)=\"selectDay(day)\"\n >\n {{ day.date.getDate() }}\n </button>\n } @else {\n <span role=\"gridcell\" class=\"gbt-date-picker__day gbt-date-picker__day--empty\"></span>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-date-picker__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport {\n CalendarDay,\n WeekStartsOn,\n addMonths,\n addYears,\n buildCalendarGrid,\n endOfWeek,\n isSameDay,\n startOfWeek,\n weekdayLabels,\n} from '../date-picker/date-picker-calendar'\n\nexport type DateRangeVisibleMonths = 1 | 2\n\nexport interface DateRangeValue {\n start: Date\n end: Date | null\n}\n\nexport interface DateRangePickerMonthView {\n year: number\n month: number\n label: string\n weeks: CalendarDay[][]\n}\n\nlet nextId = 0\n\nconst CURRENT_YEAR = new Date().getFullYear()\n\n@Component({\n selector: 'gbt-date-range-picker',\n standalone: true,\n imports: [Icon],\n templateUrl: './date-range-picker.html',\n styleUrl: './date-range-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onEscape($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangePicker),\n multi: true,\n },\n ],\n})\nexport class DateRangePicker implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef)\n private readonly injector = inject(Injector)\n\n id = input<string>(`gbt-date-range-picker-${++nextId}`)\n label = input<string>('')\n placeholder = input<string>('Select a date range…')\n locale = input<string>('en-US')\n weekStartsOn = input<WeekStartsOn>(1)\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n previousMonthLabel = input<string>('Previous month')\n nextMonthLabel = input<string>('Next month')\n clearable = input(false, { transform: booleanAttribute })\n clearLabel = input<string>('Clear date range')\n visibleMonths = input<DateRangeVisibleMonths>(2)\n monthSelectLabel = input<string>('Month')\n yearSelectLabel = input<string>('Year')\n minYear = input<number>(CURRENT_YEAR - 100)\n maxYear = input<number>(CURRENT_YEAR + 10)\n rangeStatus = input<(start: string | null, end: string | null) => string>((start, end) => {\n if (!start) return ''\n if (!end) return `${start} selected as the start date. Choose an end date.`\n return `Date range: ${start} to ${end}.`\n })\n\n protected readonly open = signal(false)\n protected readonly value = signal<DateRangeValue | null>(null)\n protected readonly draftStart = signal<Date | null>(null)\n protected readonly draftEnd = signal<Date | null>(null)\n protected readonly hoveredDate = signal<Date | null>(null)\n protected readonly focusedDate = signal<Date>(new Date())\n protected readonly anchorDate = signal<Date>(new Date())\n protected readonly panelStyle = signal<{ top: string; left: string } | null>(null)\n\n private readonly formDisabled = signal(false)\n private onChange: (value: DateRangeValue | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n protected readonly showClear = computed(\n () => this.clearable() && this.value() !== null && !this.isDisabled(),\n )\n\n protected readonly monthViews = computed<DateRangePickerMonthView[]>(() => {\n const anchor = this.anchorDate()\n const count = this.visibleMonths()\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' })\n const views = Array.from({ length: count }, (_, i) => {\n const monthDate = new Date(anchor.getFullYear(), anchor.getMonth() + i, 1)\n const year = monthDate.getFullYear()\n const month = monthDate.getMonth()\n const days = buildCalendarGrid(year, month, this.weekStartsOn())\n const weeks: CalendarDay[][] = []\n for (let d = 0; d < days.length; d += 7) {\n weeks.push(days.slice(d, d + 7))\n }\n return { year, month, label: formatter.format(monthDate), weeks }\n })\n const neededWeeks = views.map((view) => {\n let last = view.weeks.length\n while (last > 1 && view.weeks[last - 1].every((day) => !day.inCurrentMonth)) {\n last--\n }\n return last\n })\n const sharedWeeks = Math.max(...neededWeeks)\n return views.map((view) => ({ ...view, weeks: view.weeks.slice(0, sharedWeeks) }))\n })\n\n protected readonly panelLabel = computed(() => {\n const views = this.monthViews()\n return views.length === 1 ? views[0].label : `${views[0].label} – ${views[views.length - 1].label}`\n })\n\n protected readonly weekdayLabels = computed(() => weekdayLabels(this.locale(), this.weekStartsOn()))\n\n protected readonly monthOptions = computed(() => {\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'long' })\n return Array.from({ length: 12 }, (_, i) => ({ value: i, label: formatter.format(new Date(2024, i, 1)) }))\n })\n\n protected readonly yearOptions = computed(() => {\n const min = this.minYear()\n const max = this.maxYear()\n return Array.from({ length: max - min + 1 }, (_, i) => min + i)\n })\n\n private readonly dateFormatter = computed(\n () => new Intl.DateTimeFormat(this.locale(), { dateStyle: 'medium' }),\n )\n\n protected readonly triggerLabel = computed(() => {\n const v = this.value()\n if (!v) return ''\n const formatter = this.dateFormatter()\n if (!v.end) return formatter.format(v.start)\n return `${formatter.format(v.start)} – ${formatter.format(v.end)}`\n })\n\n /** The visual [lower, upper] bounds to paint — the confirmed range once `draftEnd` is set, else a live preview against `hoveredDate`. */\n private readonly previewBounds = computed<{ lower: Date; upper: Date } | null>(() => {\n const start = this.draftStart()\n if (!start) return null\n const other = this.draftEnd() ?? this.hoveredDate()\n if (!other) return null\n return start.getTime() <= other.getTime() ? { lower: start, upper: other } : { lower: other, upper: start }\n })\n\n protected readonly isPreviewing = computed(() => this.draftStart() !== null && this.draftEnd() === null)\n\n protected readonly statusMessage = computed(() => {\n const start = this.draftStart()\n if (!start) return ''\n const formatter = this.dateFormatter()\n const end = this.draftEnd()\n return this.rangeStatus()(formatter.format(start), end ? formatter.format(end) : null)\n })\n\n writeValue(value: DateRangeValue | null): void {\n this.value.set(value)\n if (value) {\n this.focusedDate.set(value.start)\n this.anchorDate.set(new Date(value.start.getFullYear(), value.start.getMonth(), 1))\n }\n }\n\n registerOnChange(fn: (value: DateRangeValue | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isRangeStartCap(date: Date): boolean {\n const bounds = this.previewBounds()\n return bounds !== null && isSameDay(date, bounds.lower)\n }\n\n protected isRangeEndCap(date: Date): boolean {\n const bounds = this.previewBounds()\n return bounds !== null && isSameDay(date, bounds.upper)\n }\n\n protected isInRange(date: Date): boolean {\n const bounds = this.previewBounds()\n return bounds !== null && date.getTime() > bounds.lower.getTime() && date.getTime() < bounds.upper.getTime()\n }\n\n protected isFocused(date: Date): boolean {\n return isSameDay(this.focusedDate(), date)\n }\n\n protected cellId(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(\n date.getDate(),\n ).padStart(2, '0')}`\n }\n\n protected toggleOpen(): void {\n if (this.isDisabled()) {\n return\n }\n this.open.update((v) => !v)\n if (this.open()) {\n const value = this.value()\n const target = value?.start ?? new Date()\n this.draftStart.set(value?.start ?? null)\n this.draftEnd.set(value?.end ?? null)\n this.hoveredDate.set(null)\n this.focusedDate.set(target)\n this.anchorDate.set(new Date(target.getFullYear(), target.getMonth(), 1))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n } else {\n this.onTouched()\n }\n }\n\n protected close(returnFocus: boolean): void {\n if (!this.open()) {\n return\n }\n this.open.set(false)\n this.onTouched()\n if (returnFocus) {\n this.trigger()?.focus()\n }\n }\n\n protected clear(event: Event): void {\n event.stopPropagation()\n if (this.isDisabled()) {\n return\n }\n this.value.set(null)\n this.draftStart.set(null)\n this.draftEnd.set(null)\n this.onChange(null)\n this.onTouched()\n this.close(false)\n }\n\n protected selectDay(date: Date): void {\n if (this.isDisabled()) {\n return\n }\n const start = this.draftStart()\n const complete = start !== null && this.draftEnd() !== null\n if (!start || complete) {\n this.draftStart.set(date)\n this.draftEnd.set(null)\n this.focusedDate.set(date)\n this.ensureVisible(date)\n this.focusCellAfterRender()\n return\n }\n const [rangeStart, rangeEnd] = start.getTime() <= date.getTime() ? [start, date] : [date, start]\n this.draftStart.set(rangeStart)\n this.draftEnd.set(rangeEnd)\n this.focusedDate.set(date)\n this.ensureVisible(date)\n const next: DateRangeValue = { start: rangeStart, end: rangeEnd }\n this.value.set(next)\n this.onChange(next)\n this.onTouched()\n this.close(true)\n }\n\n protected onDayMouseEnter(date: Date): void {\n this.hoveredDate.set(date)\n }\n\n protected onDayMouseLeave(): void {\n this.hoveredDate.set(null)\n }\n\n protected shiftMonth(delta: number): void {\n this.anchorDate.set(addMonths(this.anchorDate(), delta))\n this.focusedDate.set(addMonths(this.focusedDate(), delta))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n }\n\n protected onMonthSelect(value: string): void {\n this.setAnchorMonth(this.anchorDate().getFullYear(), Number(value))\n }\n\n protected onYearSelect(value: string): void {\n this.setAnchorMonth(Number(value), this.anchorDate().getMonth())\n }\n\n private setAnchorMonth(year: number, month: number): void {\n const dayOfMonth = this.focusedDate().getDate()\n const daysInTarget = new Date(year, month + 1, 0).getDate()\n this.anchorDate.set(new Date(year, month, 1))\n this.focusedDate.set(new Date(year, month, Math.min(dayOfMonth, daysInTarget)))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n }\n\n protected onGridKeydown(event: KeyboardEvent): void {\n const current = this.focusedDate()\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.selectDay(current)\n return\n }\n if (event.key === 'PageDown' || event.key === 'PageUp') {\n event.preventDefault()\n const delta = event.key === 'PageDown' ? 1 : -1\n if (event.shiftKey) {\n this.anchorDate.set(addYears(this.anchorDate(), delta))\n this.focusedDate.set(addYears(current, delta))\n } else {\n this.anchorDate.set(addMonths(this.anchorDate(), delta))\n this.focusedDate.set(addMonths(current, delta))\n }\n this.updatePanelPosition()\n this.focusCellAfterRender()\n return\n }\n const next = this.nextFocusedDate(current, event)\n if (next === null) {\n return\n }\n event.preventDefault()\n this.ensureVisible(next)\n this.focusedDate.set(next)\n this.focusCellAfterRender()\n }\n\n private nextFocusedDate(current: Date, event: KeyboardEvent): Date | null {\n switch (event.key) {\n case 'ArrowRight':\n return shiftDays(current, 1)\n case 'ArrowLeft':\n return shiftDays(current, -1)\n case 'ArrowDown':\n return shiftDays(current, 7)\n case 'ArrowUp':\n return shiftDays(current, -7)\n case 'Home':\n return startOfWeek(current, this.weekStartsOn())\n case 'End':\n return endOfWeek(current, this.weekStartsOn())\n default:\n return null\n }\n }\n\n /** Shifts the anchor by the minimum amount needed so `date`'s month becomes visible. */\n private ensureVisible(date: Date): void {\n const anchor = this.anchorDate()\n const visibleMonths = this.visibleMonths()\n const monthsDiff =\n (date.getFullYear() - anchor.getFullYear()) * 12 + (date.getMonth() - anchor.getMonth())\n if (monthsDiff < 0) {\n this.anchorDate.set(new Date(date.getFullYear(), date.getMonth(), 1))\n } else if (monthsDiff >= visibleMonths) {\n this.anchorDate.set(addMonths(anchor, monthsDiff - visibleMonths + 1))\n }\n }\n\n protected onEscape(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault()\n event.stopPropagation()\n this.close(true)\n }\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.close(false)\n }\n }\n\n protected updatePanelPosition(): void {\n if (!this.open()) {\n return\n }\n const trigger = this.trigger()\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n this.panelStyle.set({ top: `${rect.bottom + 6}px`, left: `${rect.left}px` })\n }\n\n private trigger(): HTMLButtonElement | null {\n return this.elementRef.nativeElement.querySelector('.gbt-date-range-picker__trigger')\n }\n\n private focusCellAfterRender(): void {\n afterNextRender(\n () => {\n const id = this.cellId(this.focusedDate())\n const host = this.elementRef.nativeElement as HTMLElement\n host.querySelector<HTMLElement>(`[data-date=\"${id}\"]`)?.focus()\n },\n { injector: this.injector },\n )\n }\n}\n\nfunction shiftDays(date: Date, delta: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + delta)\n}\n","<div class=\"gbt-date-range-picker\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-date-range-picker__label\">{{ label() }}{{ required() ? ' *' : '' }}</label>\n }\n <div class=\"gbt-date-range-picker__field\">\n <button\n type=\"button\"\n [id]=\"id()\"\n class=\"gbt-date-range-picker__trigger\"\n [class.gbt-date-range-picker__trigger--open]=\"open()\"\n [disabled]=\"isDisabled()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (click)=\"toggleOpen()\"\n >\n <span\n class=\"gbt-date-range-picker__trigger-label\"\n [class.gbt-date-range-picker__trigger-label--placeholder]=\"!triggerLabel()\"\n >\n {{ triggerLabel() || placeholder() }}\n </span>\n </button>\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"gbt-date-range-picker__clear\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"clear($event)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n } @else {\n <gbt-icon name=\"calendar\" class=\"gbt-date-range-picker__icon\" aria-hidden=\"true\" />\n }\n </div>\n @if (open() && panelStyle(); as pos) {\n <div\n class=\"gbt-date-range-picker__panel\"\n role=\"dialog\"\n aria-modal=\"false\"\n [attr.aria-label]=\"panelLabel()\"\n [style.top]=\"pos.top\"\n [style.left]=\"pos.left\"\n >\n <div class=\"gbt-date-range-picker__nav\">\n <button\n type=\"button\"\n class=\"gbt-date-range-picker__nav-button\"\n [attr.aria-label]=\"previousMonthLabel()\"\n (click)=\"shiftMonth(-1)\"\n >\n <gbt-icon name=\"chevron-left\" aria-hidden=\"true\" />\n </button>\n <div class=\"gbt-date-range-picker__headings\">\n @for (view of monthViews(); track view.year + '-' + view.month; let i = $index) {\n <div class=\"gbt-date-range-picker__month-heading\">\n @if (i === 0) {\n <select\n #monthSelect\n class=\"gbt-date-range-picker__select\"\n [attr.aria-label]=\"monthSelectLabel()\"\n (change)=\"onMonthSelect(monthSelect.value)\"\n >\n @for (opt of monthOptions(); track opt.value) {\n <option [value]=\"opt.value\" [selected]=\"opt.value === anchorDate().getMonth()\">\n {{ opt.label }}\n </option>\n }\n </select>\n <select\n #yearSelect\n class=\"gbt-date-range-picker__select\"\n [attr.aria-label]=\"yearSelectLabel()\"\n (change)=\"onYearSelect(yearSelect.value)\"\n >\n @for (year of yearOptions(); track year) {\n <option [value]=\"year\" [selected]=\"year === anchorDate().getFullYear()\">{{ year }}</option>\n }\n </select>\n } @else {\n <span class=\"gbt-date-range-picker__month-label\">{{ view.label }}</span>\n }\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"gbt-date-range-picker__nav-button\"\n [attr.aria-label]=\"nextMonthLabel()\"\n (click)=\"shiftMonth(1)\"\n >\n <gbt-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"gbt-date-range-picker__months\">\n @for (view of monthViews(); track view.year + '-' + view.month) {\n <div class=\"gbt-date-range-picker__month\">\n <div\n class=\"gbt-date-range-picker__grid\"\n role=\"grid\"\n tabindex=\"-1\"\n [attr.aria-label]=\"view.label\"\n (keydown)=\"onGridKeydown($event)\"\n >\n <div class=\"gbt-date-range-picker__row gbt-date-range-picker__row--head\" role=\"row\">\n @for (wd of weekdayLabels(); track $index) {\n <span role=\"columnheader\" class=\"gbt-date-range-picker__weekday\">{{ wd }}</span>\n }\n </div>\n @for (week of view.weeks; track $index) {\n <div class=\"gbt-date-range-picker__row\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n @if (day.inCurrentMonth) {\n <button\n type=\"button\"\n role=\"gridcell\"\n class=\"gbt-date-range-picker__day\"\n [class.gbt-date-range-picker__day--today]=\"day.isToday\"\n [class.gbt-date-range-picker__day--start-cap]=\"isRangeStartCap(day.date)\"\n [class.gbt-date-range-picker__day--end-cap]=\"isRangeEndCap(day.date)\"\n [class.gbt-date-range-picker__day--in-range]=\"isInRange(day.date)\"\n [class.gbt-date-range-picker__day--preview]=\"isPreviewing()\"\n [attr.data-date]=\"cellId(day.date)\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [tabIndex]=\"isFocused(day.date) ? 0 : -1\"\n (click)=\"selectDay(day.date)\"\n (mouseenter)=\"onDayMouseEnter(day.date)\"\n (mouseleave)=\"onDayMouseLeave()\"\n >\n {{ day.date.getDate() }}\n </button>\n } @else {\n <span role=\"gridcell\" class=\"gbt-date-range-picker__day gbt-date-range-picker__day--empty\"></span>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"gbt-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ statusMessage() }}</div>\n </div>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-date-range-picker__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { Accordion } from '../accordion/accordion'\n\n@Component({\n selector: 'gbt-accordion-item',\n standalone: true,\n imports: [Icon],\n templateUrl: './accordion-item.html',\n styleUrl: './accordion-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionItem {\n private readonly parent = inject(Accordion)\n private readonly header = viewChild<ElementRef<HTMLButtonElement>>('header')\n\n label = input.required<string>()\n\n protected readonly active = signal(false)\n protected readonly index = signal(0)\n protected readonly groupId = signal('')\n\n protected readonly headerId = computed(() => `${this.groupId()}-header-${this.index()}`)\n protected readonly panelId = computed(() => `${this.groupId()}-panel-${this.index()}`)\n\n setState(index: number, active: boolean, groupId: string): void {\n this.index.set(index)\n this.active.set(active)\n this.groupId.set(groupId)\n }\n\n focusHeader(): void {\n this.header()?.nativeElement.focus()\n }\n\n protected toggle(): void {\n this.parent.toggle(this.index())\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n this.parent.focusHeader(this.index() + 1)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n this.parent.focusHeader(this.index() - 1)\n }\n }\n}\n","<button\n #header\n type=\"button\"\n class=\"gbt-accordion-item__header\"\n [class.gbt-accordion-item__header--open]=\"active()\"\n [id]=\"headerId()\"\n [attr.aria-expanded]=\"active()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"gbt-accordion-item__label\">{{ label() }}</span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-accordion-item__chevron\" aria-hidden=\"true\" />\n</button>\n<div\n class=\"gbt-accordion-item__panel\"\n [class.gbt-accordion-item__panel--open]=\"active()\"\n [id]=\"panelId()\"\n [attr.aria-labelledby]=\"headerId()\"\n [attr.inert]=\"active() ? null : ''\"\n>\n <div class=\"gbt-accordion-item__panel-inner\">\n <div class=\"gbt-accordion-item__panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, contentChildren, effect, input, model } from '@angular/core'\nimport { AccordionItem } from '../accordion-item/accordion-item'\n\nexport type AccordionMode = 'single' | 'multiple'\n\nlet nextAccordionId = 0\n\n@Component({\n selector: 'gbt-accordion',\n standalone: true,\n imports: [],\n template: `\n <div class=\"gbt-accordion\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrl: './accordion.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Accordion {\n id = input<string>(`gbt-accordion-${++nextAccordionId}`)\n mode = input<AccordionMode>('single')\n expanded = model<number[]>([])\n\n protected readonly items = contentChildren(AccordionItem)\n\n constructor() {\n effect(() => {\n const items = this.items()\n const expanded = this.expanded()\n const groupId = this.id()\n items.forEach((item, i) => item.setState(i, expanded.includes(i), groupId))\n })\n }\n\n toggle(index: number): void {\n const current = this.expanded()\n if (this.mode() === 'single') {\n this.expanded.set(current.includes(index) ? [] : [index])\n return\n }\n this.expanded.set(\n current.includes(index) ? current.filter((i) => i !== index) : [...current, index],\n )\n }\n\n focusHeader(index: number): void {\n const items = this.items()\n const count = items.length\n if (count === 0) {\n return\n }\n const wrapped = ((index % count) + count) % count\n items[wrapped]?.focusHeader()\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { FormControl, ReactiveFormsModule } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport { Select, SelectOption } from '../select/select'\n\nexport const ELLIPSIS = '…' as const\nexport type PaginationItem = number | typeof ELLIPSIS\n\nfunction range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n\nexport function paginationRange(page: number, pageCount: number, siblingCount: number): PaginationItem[] {\n const totalPageNumbers = siblingCount + 5\n\n if (totalPageNumbers >= pageCount) {\n return range(1, pageCount)\n }\n\n const leftSiblingIndex = Math.max(page - siblingCount, 1)\n const rightSiblingIndex = Math.min(page + siblingCount, pageCount)\n\n const shouldShowLeftDots = leftSiblingIndex > 2\n // -2, not -1: a lone skipped page right before the last one isn't worth an\n // ellipsis — showing that page costs no more room than the \"…\" would.\n const shouldShowRightDots = rightSiblingIndex < pageCount - 2\n\n if (!shouldShowLeftDots && shouldShowRightDots) {\n const leftItemCount = 3 + siblingCount * 2\n return [...range(1, leftItemCount), ELLIPSIS, pageCount]\n }\n\n if (shouldShowLeftDots && !shouldShowRightDots) {\n const rightItemCount = 3 + siblingCount * 2\n return [1, ELLIPSIS, ...range(pageCount - rightItemCount + 1, pageCount)]\n }\n\n return [1, ELLIPSIS, ...range(leftSiblingIndex, rightSiblingIndex), ELLIPSIS, pageCount]\n}\n\n@Component({\n selector: 'gbt-pagination',\n standalone: true,\n imports: [Icon, Select, ReactiveFormsModule],\n templateUrl: './pagination.html',\n styleUrl: './pagination.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Pagination {\n page = input<number>(1)\n pageSize = input<number>(10)\n totalItems = input.required<number>()\n siblingCount = input<number>(1)\n disabled = input(false, { transform: booleanAttribute })\n ariaLabel = input<string>('Pagination')\n previousLabel = input<string>('Previous page')\n nextLabel = input<string>('Next page')\n pageLabel = input<(page: number) => string>((page) => `Page ${page}`)\n\n pageSizeOptions = input<number[]>([])\n pageSizeLabel = input<(size: number) => string>((size) => `${size} / page`)\n pageSizeSelectLabel = input<string>('Rows per page')\n showItemsSummary = input(false, { transform: booleanAttribute })\n itemsSummaryLabel = input<(shown: number, total: number) => string>(\n (shown, total) => `${shown} of ${total} items`,\n )\n\n pageChange = output<number>()\n pageSizeChange = output<number>()\n\n protected readonly ELLIPSIS = ELLIPSIS\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalItems() / this.pageSize())),\n )\n\n protected readonly items = computed(() =>\n paginationRange(this.page(), this.pageCount(), this.siblingCount()),\n )\n\n protected readonly itemsShown = computed(() => {\n const start = (this.page() - 1) * this.pageSize()\n return Math.max(0, Math.min(this.pageSize(), this.totalItems() - start))\n })\n\n protected readonly itemsSummary = computed(() =>\n this.itemsSummaryLabel()(this.itemsShown(), this.totalItems()),\n )\n\n protected readonly pageSizeSelectOptions = computed<SelectOption<number>[]>(() =>\n this.pageSizeOptions().map((size) => ({ value: size, label: this.pageSizeLabel()(size) })),\n )\n\n protected readonly pageSizeControl = new FormControl<number>(this.pageSize(), {\n nonNullable: true,\n })\n\n constructor() {\n effect(() => {\n const size = this.pageSize()\n if (this.pageSizeControl.value !== size) {\n this.pageSizeControl.setValue(size, { emitEvent: false })\n }\n })\n\n this.pageSizeControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((size) => {\n this.pageSizeChange.emit(size)\n this.pageChange.emit(1)\n })\n\n // Self-heals a stale `page` — e.g. a filter shrinks `totalItems` while\n // the app was sitting on a now out-of-range page — instead of leaving\n // the pager stuck with no page marked current and a live \"previous\"\n // button pointing at a page that no longer exists.\n effect(() => {\n const count = this.pageCount()\n const current = this.page()\n const clamped = Math.min(Math.max(current, 1), count)\n if (clamped !== current) {\n this.pageChange.emit(clamped)\n }\n })\n }\n\n protected goTo(page: number): void {\n if (this.disabled()) return\n const clamped = Math.min(Math.max(page, 1), this.pageCount())\n if (clamped === this.page()) return\n this.pageChange.emit(clamped)\n }\n}\n","<div class=\"gbt-pagination\">\n <div class=\"gbt-pagination__side gbt-pagination__side--start\">\n @if (showItemsSummary()) {\n <span class=\"gbt-pagination__summary\">{{ itemsSummary() }}</span>\n }\n </div>\n\n <nav [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"gbt-pagination__list\">\n <li>\n <button\n type=\"button\"\n class=\"gbt-pagination__nav\"\n [disabled]=\"disabled() || page() <= 1\"\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"goTo(page() - 1)\"\n >\n <gbt-icon name=\"chevron-left\" aria-hidden=\"true\" />\n </button>\n </li>\n @for (item of items(); track $index) {\n @if (item === ELLIPSIS) {\n <li class=\"gbt-pagination__ellipsis\" aria-hidden=\"true\">{{ ELLIPSIS }}</li>\n } @else {\n <li>\n <button\n type=\"button\"\n class=\"gbt-pagination__page\"\n [class.gbt-pagination__page--current]=\"item === page()\"\n [attr.aria-current]=\"item === page() ? 'page' : null\"\n [attr.aria-label]=\"pageLabel()(item)\"\n [disabled]=\"disabled()\"\n (click)=\"goTo(item)\"\n >\n {{ item }}\n </button>\n </li>\n }\n }\n <li>\n <button\n type=\"button\"\n class=\"gbt-pagination__nav\"\n [disabled]=\"disabled() || page() >= pageCount()\"\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"goTo(page() + 1)\"\n >\n <gbt-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </button>\n </li>\n </ul>\n </nav>\n\n <div class=\"gbt-pagination__side gbt-pagination__side--end\">\n @if (pageSizeOptions().length > 0) {\n <gbt-select\n class=\"gbt-pagination__page-size\"\n size=\"sm\"\n [label]=\"pageSizeSelectLabel()\"\n [options]=\"pageSizeSelectOptions()\"\n [disabled]=\"disabled()\"\n [formControl]=\"pageSizeControl\"\n />\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-breadcrumb',\n standalone: true,\n imports: [],\n templateUrl: './breadcrumb.html',\n styleUrl: './breadcrumb.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Breadcrumb {\n ariaLabel = input.required<string>()\n}\n","<nav [attr.aria-label]=\"ariaLabel()\" class=\"gbt-breadcrumb\">\n <ol class=\"gbt-breadcrumb__list\">\n <ng-content select=\"[breadcrumb-ancestor]\" />\n <li class=\"gbt-breadcrumb__current\" aria-current=\"page\"><ng-content /></li>\n </ol>\n</nav>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { Button } from '../../atoms/button/button'\nimport { GbtInput } from '../../atoms/input/input'\nimport { Modal } from '../modal/modal'\n\n@Component({\n selector: 'gbt-confirm-danger-modal',\n standalone: true,\n imports: [FormsModule, Modal, GbtInput, Button],\n templateUrl: './confirm-danger-modal.html',\n styleUrl: './confirm-danger-modal.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDangerModal {\n isOpen = input.required<boolean>()\n heading = input.required<string>()\n message = input.required<string>()\n confirmText = input.required<string>()\n confirmInputLabel = input<string>('Type to confirm')\n confirmLabel = input<string>('Confirm')\n cancelLabel = input<string>('Cancel')\n closeLabel = input<string>('Close')\n\n confirmed = output<void>()\n closed = output<void>()\n\n protected readonly typed = signal('')\n protected readonly canConfirm = computed(\n () => this.typed().length > 0 && this.typed() === this.confirmText(),\n )\n\n constructor() {\n // Cleared whenever the modal transitions to closed (Cancel, Escape,\n // backdrop, or the consumer setting isOpen false after a successful\n // confirm) — a later reopen must never show the previous attempt's text.\n effect(() => {\n if (!this.isOpen()) {\n this.typed.set('')\n }\n })\n }\n\n protected confirm(): void {\n if (this.canConfirm()) {\n this.confirmed.emit()\n }\n }\n\n protected cancel(): void {\n this.closed.emit()\n }\n}\n","<gbt-modal\n [isOpen]=\"isOpen()\"\n [heading]=\"heading()\"\n [closeLabel]=\"closeLabel()\"\n (closed)=\"cancel()\"\n>\n <p class=\"gbt-confirm-danger-modal__message\">{{ message() }}</p>\n <gbt-input\n [label]=\"confirmInputLabel()\"\n [ngModel]=\"typed()\"\n (ngModelChange)=\"typed.set($event)\"\n />\n <div class=\"gbt-confirm-danger-modal__actions\">\n <gbt-button variant=\"secondary\" [text]=\"cancelLabel()\" (clicked)=\"cancel()\" />\n <gbt-button\n variant=\"danger\"\n [text]=\"confirmLabel()\"\n [disabled]=\"!canConfirm()\"\n (clicked)=\"confirm()\"\n />\n </div>\n</gbt-modal>\n","import { ChangeDetectionStrategy, Component, OnDestroy, effect, input, output } from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nconst DEFAULT_DURATION_MS = 5000\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info'\n\nexport type ToasterPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n\nexport interface ToastItem {\n id: string\n variant: ToastVariant\n message: string\n duration?: number\n}\n\nconst ASSERTIVE_VARIANTS: ReadonlySet<ToastVariant> = new Set(['warning', 'error'])\n\nconst VARIANT_ICONS: Record<ToastVariant, string> = {\n success: 'check-circle',\n error: 'alert-circle',\n warning: 'alert-triangle',\n info: 'info',\n}\n\n@Component({\n selector: 'gbt-toaster',\n standalone: true,\n imports: [Icon],\n templateUrl: './toaster.html',\n styleUrl: './toaster.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Toaster implements OnDestroy {\n toasts = input.required<ToastItem[]>()\n position = input<ToasterPosition>('bottom-right')\n closeLabel = input<string>('Close')\n\n dismissed = output<string>()\n\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n constructor() {\n effect(() => {\n const currentIds = new Set(this.toasts().map((toast) => toast.id))\n\n for (const [id, timer] of this.timers) {\n if (!currentIds.has(id)) {\n clearTimeout(timer)\n this.timers.delete(id)\n }\n }\n\n for (const toast of this.toasts()) {\n if (this.timers.has(toast.id)) {\n continue\n }\n const duration = toast.duration ?? DEFAULT_DURATION_MS\n if (!Number.isFinite(duration) || duration <= 0) {\n continue\n }\n this.timers.set(\n toast.id,\n setTimeout(() => {\n this.timers.delete(toast.id)\n this.dismissed.emit(toast.id)\n }, duration),\n )\n }\n })\n }\n\n ngOnDestroy(): void {\n for (const timer of this.timers.values()) {\n clearTimeout(timer)\n }\n this.timers.clear()\n }\n\n protected roleFor(variant: ToastVariant): 'alert' | 'status' {\n return ASSERTIVE_VARIANTS.has(variant) ? 'alert' : 'status'\n }\n\n protected iconFor(variant: ToastVariant): string {\n return VARIANT_ICONS[variant]\n }\n}\n","<div class=\"gbt-toaster\" [attr.data-position]=\"position()\">\n @for (toast of toasts(); track toast.id) {\n <div\n class=\"gbt-toaster__item\"\n [attr.data-variant]=\"toast.variant\"\n [attr.role]=\"roleFor(toast.variant)\"\n aria-atomic=\"true\"\n >\n <span class=\"gbt-toaster__icon\">\n <gbt-icon [name]=\"iconFor(toast.variant)\" aria-hidden=\"true\" />\n </span>\n <p class=\"gbt-toaster__message\">{{ toast.message }}</p>\n <button\n type=\"button\"\n class=\"gbt-toaster__close\"\n [attr.aria-label]=\"closeLabel()\"\n (click)=\"dismissed.emit(toast.id)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n inject,\n input,\n signal,\n} from '@angular/core'\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipCoords {\n top: number\n left: number\n}\n\nconst SHOW_DELAY_MS = 400\nconst FADE_MS = 120\nconst GAP_PX = 8\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-tooltip',\n standalone: true,\n exportAs: 'gbtTooltip',\n imports: [],\n templateUrl: './tooltip.html',\n styleUrl: './tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gbt-tooltip-host',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'hide()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'hide()',\n '(keydown.escape)': 'hide()',\n '(window:scroll)': 'updatePosition()',\n '(window:resize)': 'updatePosition()',\n },\n})\nexport class Tooltip implements OnDestroy {\n private readonly elementRef = inject(ElementRef<HTMLElement>)\n\n text = input.required<string>()\n position = input<TooltipPosition>('top')\n\n readonly tooltipId = `gbt-tooltip-${++nextId}`\n\n protected readonly visible = signal(false)\n protected readonly closing = signal(false)\n protected readonly coords = signal<TooltipCoords | null>(null)\n\n private showTimer: ReturnType<typeof setTimeout> | null = null\n private hideTimer: ReturnType<typeof setTimeout> | null = null\n\n protected onMouseEnter(): void {\n this.showTimer = setTimeout(() => {\n this.showTimer = null\n this.show()\n }, SHOW_DELAY_MS)\n }\n\n protected onFocusIn(): void {\n this.show()\n }\n\n private show(): void {\n if (this.hideTimer !== null) {\n clearTimeout(this.hideTimer)\n this.hideTimer = null\n }\n this.closing.set(false)\n this.updatePosition()\n this.visible.set(true)\n }\n\n protected updatePosition(): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect()\n switch (this.position()) {\n case 'top':\n this.coords.set({ top: rect.top - GAP_PX, left: rect.left + rect.width / 2 })\n break\n case 'bottom':\n this.coords.set({ top: rect.bottom + GAP_PX, left: rect.left + rect.width / 2 })\n break\n case 'left':\n this.coords.set({ top: rect.top + rect.height / 2, left: rect.left - GAP_PX })\n break\n case 'right':\n this.coords.set({ top: rect.top + rect.height / 2, left: rect.right + GAP_PX })\n break\n }\n }\n\n protected hide(): void {\n if (this.showTimer !== null) {\n clearTimeout(this.showTimer)\n this.showTimer = null\n }\n if (!this.visible() || this.closing()) return\n this.closing.set(true)\n this.hideTimer = setTimeout(() => {\n this.hideTimer = null\n this.closing.set(false)\n this.visible.set(false)\n }, FADE_MS)\n }\n\n ngOnDestroy(): void {\n if (this.showTimer !== null) {\n clearTimeout(this.showTimer)\n this.showTimer = null\n }\n if (this.hideTimer !== null) {\n clearTimeout(this.hideTimer)\n this.hideTimer = null\n }\n }\n}\n","<ng-content />\n@if (visible() && coords(); as pos) {\n <span\n class=\"gbt-tooltip__bubble\"\n [class.gbt-tooltip__bubble--leaving]=\"closing()\"\n role=\"tooltip\"\n [id]=\"tooltipId\"\n [attr.data-position]=\"position()\"\n [style.top.px]=\"pos.top\"\n [style.left.px]=\"pos.left\"\n >\n {{ text() }}\n </span>\n}","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nexport interface RadioOption<T = string> {\n value: T\n label: string\n disabled?: boolean\n}\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-radio-group',\n standalone: true,\n imports: [],\n templateUrl: './radio-group.html',\n styleUrl: './radio-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioGroup),\n multi: true,\n },\n ],\n})\nexport class RadioGroup<T = string> implements ControlValueAccessor {\n id = input<string>(`gbt-radio-group-${++nextId}`)\n label = input.required<string>()\n options = input.required<RadioOption<T>[]>()\n orientation = input<'vertical' | 'horizontal'>('vertical')\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n\n protected readonly selected = signal<T | null>(null)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: T) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: T | null): void {\n this.selected.set(value)\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isSelected(value: T): boolean {\n return this.selected() === value\n }\n\n protected selectOption(value: T): void {\n this.selected.set(value)\n this.onChange(value)\n this.onTouched()\n }\n}\n","<fieldset\n class=\"gbt-radio-group\"\n [attr.data-orientation]=\"orientation()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n>\n <legend class=\"gbt-radio-group__legend\">{{ label() }}{{ required() ? ' *' : '' }}</legend>\n <div class=\"gbt-radio-group__options\">\n @for (option of options(); track option.value; let i = $index) {\n <label class=\"gbt-radio-group__option\">\n <input\n type=\"radio\"\n [id]=\"id() + '-' + i\"\n [name]=\"id()\"\n [value]=\"option.value\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"isDisabled() || !!option.disabled\"\n (change)=\"selectOption(option.value)\"\n />\n <span>{{ option.label }}</span>\n </label>\n }\n </div>\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-radio-group__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</fieldset>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextSwitchId = 0\n\n@Component({\n selector: 'gbt-switch',\n standalone: true,\n templateUrl: './switch.html',\n styleUrl: './switch.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Switch),\n multi: true,\n },\n ],\n})\nexport class Switch implements ControlValueAccessor {\n id = input<string>(`gbt-switch-${++nextSwitchId}`)\n label = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n\n protected readonly checked = signal(false)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: boolean) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: boolean): void {\n this.checked.set(!!value)\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked\n this.checked.set(value)\n this.onChange(value)\n this.onTouched()\n }\n}\n","<label class=\"gbt-switch\" [class.gbt-switch--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"gbt-switch__input\"\n [id]=\"id()\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onToggle($event)\"\n />\n <span class=\"gbt-switch__track\">\n <span class=\"gbt-switch__thumb\"></span>\n </span>\n <span>{{ label() }}</span>\n</label>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-textarea',\n standalone: true,\n imports: [],\n templateUrl: './textarea.html',\n styleUrl: './textarea.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Textarea),\n multi: true,\n },\n ],\n})\nexport class Textarea implements ControlValueAccessor {\n id = input<string>(`gbt-textarea-${++nextId}`)\n label = input<string>('')\n required = input(false, { transform: booleanAttribute })\n disabled = input(false, { transform: booleanAttribute })\n placeholder = input<string>('')\n errorMessage = input<string | null>(null)\n rows = input(3)\n\n committed = output<string>()\n\n protected readonly value = signal('')\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: string) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: string): void {\n this.value.set(value ?? '')\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLTextAreaElement).value\n this.value.set(value)\n this.onChange(value)\n }\n\n protected onBlur(): void {\n this.onTouched()\n this.committed.emit(this.value())\n }\n}\n","<div class=\"gbt-textarea\">\n @if (label()) {\n <label [for]=\"id()\">{{ label() }}{{ required() ? ' *' : '' }}</label>\n }\n <textarea\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [disabled]=\"isDisabled()\"\n [rows]=\"rows()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n >{{ value() }}</textarea\n >\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-textarea__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n TemplateRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { Subscription, isObservable, type Observable } from 'rxjs'\n\nexport type AutocompleteSearchFn<T> = (query: string) => Observable<T[]> | Promise<T[]>\n\nlet nextAutocompleteId = 0\n\n@Component({\n selector: 'gbt-autocomplete',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './autocomplete.html',\n styleUrl: './autocomplete.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Autocomplete),\n multi: true,\n },\n ],\n})\nexport class Autocomplete<T = unknown> implements ControlValueAccessor, OnDestroy {\n private readonly elementRef = inject(ElementRef)\n\n id = input<string>(`gbt-autocomplete-${++nextAutocompleteId}`)\n label = input<string>('')\n placeholder = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n search = input.required<AutocompleteSearchFn<T>>()\n displayFn = input<(item: T) => string>((item) => String(item))\n itemTemplate = input<TemplateRef<unknown>>()\n debounceMs = input<number>(300)\n minLength = input<number>(1)\n loadingMessage = input<string>('Searching…')\n noResultsMessage = input<string>('No results')\n searchErrorMessage = input<string>('Search failed')\n resultsAnnouncement = input<(count: number) => string>(\n (count) => `${count} result${count !== 1 ? 's' : ''}`,\n )\n\n itemSelected = output<T>()\n\n protected readonly query = signal('')\n protected readonly open = signal(false)\n protected readonly results = signal<T[]>([])\n protected readonly loading = signal(false)\n protected readonly searchFailed = signal(false)\n protected readonly activeIndex = signal(0)\n protected readonly selectedItem = signal<T | null>(null)\n protected readonly panelStyle = signal<{ top: string; left: string; width: string } | null>(null)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n protected readonly hasNoResults = computed(\n () => this.open() && !this.loading() && !this.searchFailed() && this.results().length === 0,\n )\n\n protected readonly activeOptionId = computed(() =>\n this.open() && this.results().length > 0 ? `${this.id()}-option-${this.activeIndex()}` : null,\n )\n\n private onChange: (value: T | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n private requestSeq = 0\n private debounceHandle?: ReturnType<typeof setTimeout>\n private subscription?: Subscription\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n writeValue(value: T | null): void {\n this.selectedItem.set(value)\n this.query.set(value === null || value === undefined ? '' : this.displayFn()(value))\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value\n this.query.set(value)\n this.activeIndex.set(0)\n if (this.selectedItem() !== null) {\n this.selectedItem.set(null)\n this.onChange(null)\n }\n this.scheduleSearch(value)\n }\n\n protected onFocus(): void {\n if (\n this.query().trim().length >= this.minLength() &&\n (this.results().length > 0 || this.searchFailed())\n ) {\n this.open.set(true)\n this.updatePanelPosition()\n }\n }\n\n protected onBlur(): void {\n this.onTouched()\n setTimeout(() => {\n if (!this.elementRef.nativeElement.contains(document.activeElement)) {\n this.open.set(false)\n }\n }, 200)\n }\n\n private scheduleSearch(value: string): void {\n clearTimeout(this.debounceHandle)\n if (value.trim().length < this.minLength()) {\n this.requestSeq++\n this.subscription?.unsubscribe()\n this.open.set(false)\n this.results.set([])\n this.loading.set(false)\n this.searchFailed.set(false)\n return\n }\n this.debounceHandle = setTimeout(() => this.runSearch(value), this.debounceMs())\n }\n\n private runSearch(query: string): void {\n const seq = ++this.requestSeq\n this.subscription?.unsubscribe()\n this.loading.set(true)\n this.searchFailed.set(false)\n this.open.set(true)\n this.updatePanelPosition()\n\n const applyResults = (items: T[]): void => {\n if (seq !== this.requestSeq) return\n this.results.set(items)\n this.loading.set(false)\n this.activeIndex.set(0)\n this.updatePanelPosition()\n }\n const applyError = (): void => {\n if (seq !== this.requestSeq) return\n this.results.set([])\n this.loading.set(false)\n this.searchFailed.set(true)\n this.updatePanelPosition()\n }\n\n const result = this.search()(query)\n if (isObservable(result)) {\n this.subscription = result.subscribe({ next: applyResults, error: applyError })\n } else {\n result.then(applyResults, applyError)\n }\n }\n\n protected updatePanelPosition(): void {\n if (!this.open()) {\n return\n }\n const trigger = this.elementRef.nativeElement.querySelector(\n '.gbt-autocomplete__input',\n ) as HTMLElement | null\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n this.panelStyle.set({\n top: `${rect.bottom + 6}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n })\n }\n\n protected selectOption(item: T): void {\n this.selectedItem.set(item)\n this.query.set(this.displayFn()(item))\n this.results.set([])\n this.open.set(false)\n this.onChange(item)\n this.onTouched()\n this.itemSelected.emit(item)\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) {\n return\n }\n if (event.key === 'Escape') {\n if (this.open()) {\n event.preventDefault()\n event.stopPropagation()\n this.open.set(false)\n }\n return\n }\n if (!this.open() || this.results().length === 0) {\n return\n }\n const results = this.results()\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.activeIndex.update((i) => Math.min(i + 1, results.length - 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n this.activeIndex.update((i) => Math.max(i - 1, 0))\n break\n case 'Enter': {\n event.preventDefault()\n const active = results[this.activeIndex()]\n if (active) {\n this.selectOption(active)\n }\n break\n }\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.debounceHandle)\n this.subscription?.unsubscribe()\n }\n}\n","<div class=\"gbt-autocomplete\" [class.gbt-autocomplete--disabled]=\"isDisabled()\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-autocomplete__label\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n\n <input\n [id]=\"id()\"\n type=\"text\"\n class=\"gbt-autocomplete__input\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? id() + '-listbox' : null\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n [attr.aria-required]=\"required() ? true : null\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"query()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n\n @if (open()) {\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n @if (loading()) {\n {{ loadingMessage() }}\n } @else if (searchFailed()) {\n {{ searchErrorMessage() }}\n } @else {\n {{ resultsAnnouncement()(results().length) }}\n }\n </div>\n }\n\n @if (open() && panelStyle(); as style) {\n <div\n class=\"gbt-autocomplete__panel\"\n [style.top]=\"style.top\"\n [style.left]=\"style.left\"\n [style.width]=\"style.width\"\n (mousedown)=\"$event.preventDefault()\"\n >\n @if (loading()) {\n <div class=\"gbt-autocomplete__state\" role=\"status\">\n <span>{{ loadingMessage() }}</span>\n </div>\n } @else if (searchFailed()) {\n <div class=\"gbt-autocomplete__state gbt-autocomplete__state--error\" role=\"alert\">\n <span>{{ searchErrorMessage() }}</span>\n </div>\n } @else if (hasNoResults()) {\n <div class=\"gbt-autocomplete__state\" role=\"status\">\n <span>{{ noResultsMessage() }}</span>\n </div>\n } @else {\n <ul\n [id]=\"id() + '-listbox'\"\n class=\"gbt-autocomplete__list\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || placeholder()\"\n >\n @for (item of results(); track $index; let i = $index) {\n <li role=\"presentation\">\n <button\n [id]=\"id() + '-option-' + i\"\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n class=\"gbt-autocomplete__option\"\n [class.gbt-autocomplete__option--active]=\"i === activeIndex()\"\n [attr.aria-selected]=\"i === activeIndex()\"\n (click)=\"selectOption(item)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n @if (itemTemplate(); as template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n } @else {\n <span class=\"gbt-autocomplete__option-label\">{{ displayFn()(item) }}</span>\n }\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-autocomplete__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\n@Component({\n selector: 'gbt-divider',\n standalone: true,\n templateUrl: './divider.html',\n styleUrl: './divider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.data-orientation]': 'orientation()',\n '[attr.aria-orientation]': \"orientation() === 'vertical' ? 'vertical' : null\",\n },\n})\nexport class Divider {\n orientation = input<DividerOrientation>('horizontal')\n label = input<string>('')\n}\n","@if (label()) {\n <span class=\"gbt-divider__line\"></span>\n <span class=\"gbt-divider__label\">{{ label() }}</span>\n <span class=\"gbt-divider__line\"></span>\n} @else {\n <span class=\"gbt-divider__line\"></span>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\n@Component({\n selector: 'gbt-spinner',\n standalone: true,\n templateUrl: './spinner.html',\n styleUrl: './spinner.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'status',\n '[attr.data-size]': 'size()',\n },\n})\nexport class Spinner {\n size = input<SpinnerSize>('md')\n label = input<string>('Loading…')\n}\n","<span class=\"gbt-spinner__ring\" aria-hidden=\"true\"></span>\n<span class=\"sr-only\">{{ label() }}</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-slider',\n standalone: true,\n imports: [],\n templateUrl: './slider.html',\n styleUrl: './slider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Slider),\n multi: true,\n },\n ],\n})\nexport class Slider implements ControlValueAccessor {\n id = input<string>(`gbt-slider-${++nextId}`)\n label = input.required<string>()\n min = input(0)\n max = input(100)\n step = input(1)\n disabled = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n showValue = input(true, { transform: booleanAttribute })\n formatValue = input<(value: number) => string>((value) => `${value}`)\n\n protected readonly value = signal(0)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n protected readonly fillPercent = computed(() => {\n const range = this.max() - this.min()\n if (range <= 0) {\n return 0\n }\n return ((this.value() - this.min()) / range) * 100\n })\n\n private onChange: (value: number) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: number): void {\n this.value.set(value ?? 0)\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value)\n this.value.set(value)\n this.onChange(value)\n }\n\n protected onBlur(): void {\n this.onTouched()\n }\n}\n","<div class=\"gbt-slider\">\n <div class=\"gbt-slider__header\">\n <label [for]=\"id()\">{{ label() }}</label>\n @if (showValue()) {\n <span class=\"gbt-slider__value\">{{ formatValue()(value()) }}</span>\n }\n </div>\n <input\n type=\"range\"\n [id]=\"id()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [style.--gbt-slider-fill.%]=\"fillPercent()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-slider__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, booleanAttribute, input, model } from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type StepperStatus = 'upcoming' | 'current' | 'completed' | 'error'\nexport type StepperOrientation = 'horizontal' | 'vertical'\n\nexport interface StepperStep {\n label: string\n hasError?: boolean\n}\n\n@Component({\n selector: 'gbt-stepper',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './stepper.html',\n styleUrl: './stepper.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Stepper {\n steps = input.required<StepperStep[]>()\n activeIndex = model(0)\n orientation = input<StepperOrientation>('horizontal')\n completedLabel = input<string>('Completed')\n errorLabel = input<string>('Error')\n interactive = input(false, { transform: booleanAttribute })\n selectedIndex = model<number | null>(null)\n selectedLabel = input<string>('Selected')\n\n protected select(index: number): void {\n this.selectedIndex.set(index)\n }\n\n protected isSelected(index: number): boolean {\n return this.interactive() && this.selectedIndex() === index\n }\n\n protected statusOf(index: number): StepperStatus {\n const step = this.steps()[index]\n const active = this.activeIndex()\n if (step.hasError && index <= active) {\n return 'error'\n }\n if (index < active) {\n return 'completed'\n }\n if (index === active) {\n return 'current'\n }\n return 'upcoming'\n }\n}\n","<ng-template #content let-index=\"index\" let-step=\"step\">\n <span class=\"gbt-stepper__indicator\">\n @switch (statusOf(index)) {\n @case ('completed') {\n <gbt-icon name=\"check\" aria-hidden=\"true\" />\n }\n @case ('error') {\n <gbt-icon name=\"alert-triangle\" aria-hidden=\"true\" />\n }\n @default {\n {{ index + 1 }}\n }\n }\n </span>\n <span class=\"gbt-stepper__label\">\n {{ step.label }}\n @if (statusOf(index) === 'completed') {\n <span class=\"sr-only\"> — {{ completedLabel() }}</span>\n } @else if (statusOf(index) === 'error') {\n <span class=\"sr-only\"> — {{ errorLabel() }}</span>\n }\n @if (isSelected(index)) {\n <span class=\"sr-only\"> — {{ selectedLabel() }}</span>\n }\n </span>\n</ng-template>\n\n<ol class=\"gbt-stepper\" [attr.data-orientation]=\"orientation()\">\n @for (step of steps(); track $index) {\n <li\n class=\"gbt-stepper__step\"\n [attr.data-status]=\"statusOf($index)\"\n [attr.data-selected]=\"isSelected($index) ? '' : null\"\n [attr.aria-current]=\"statusOf($index) === 'current' ? 'step' : null\"\n >\n @if (interactive()) {\n <button type=\"button\" class=\"gbt-stepper__button\" (click)=\"select($index)\">\n <ng-container *ngTemplateOutlet=\"content; context: { index: $index, step: step }\" />\n </button>\n } @else {\n <ng-container *ngTemplateOutlet=\"content; context: { index: $index, step: step }\" />\n }\n </li>\n }\n</ol>\n","import type { JobGraphStage } from './job-graph.types'\n\nexport interface GraphEdge {\n from: string\n to: string\n}\n\nexport interface Box {\n left: number\n top: number\n width: number\n height: number\n}\n\nexport function graphEdges(stages: JobGraphStage[]): GraphEdge[] {\n const names = new Set(stages.flatMap((stage) => stage.jobs.map((job) => job.name)))\n return stages.flatMap((stage) =>\n stage.jobs.flatMap((job) =>\n job.needs.filter((need) => names.has(need)).map((need) => ({ from: need, to: job.name })),\n ),\n )\n}\n\nconst round = (value: number): number => Math.round(value * 10) / 10\n\nexport function linkPath(from: Box, to: Box): string {\n const x1 = from.left + from.width\n const y1 = from.top + from.height / 2\n const x2 = to.left\n const y2 = to.top + to.height / 2\n const dx = Math.max(24, (x2 - x1) / 2)\n return `M ${round(x1)} ${round(y1)} C ${round(x1 + dx)} ${round(y1)}, ${round(x2 - dx)} ${round(y2)}, ${round(x2)} ${round(y2)}`\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterNextRender,\n afterRenderEffect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { graphEdges, linkPath } from './job-graph-layout'\nimport type { JobGraphStage, JobGraphStatus } from './job-graph.types'\n\nexport type { JobGraphJob, JobGraphStage, JobGraphStatus } from './job-graph.types'\n\ninterface GraphLink {\n key: string\n d: string\n done: boolean\n}\n\nconst DEFAULT_STATUS_LABELS: Record<JobGraphStatus, string> = {\n pending: 'Pending',\n running: 'Running',\n success: 'Succeeded',\n failed: 'Failed',\n canceled: 'Canceled',\n}\n\n@Component({\n selector: 'gbt-job-graph',\n standalone: true,\n imports: [Icon],\n templateUrl: './job-graph.html',\n styleUrl: './job-graph.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JobGraph {\n stages = input.required<JobGraphStage[]>()\n selectedJobId = input<string | null>(null)\n statusLabels = input<Record<JobGraphStatus, string>>(DEFAULT_STATUS_LABELS)\n needsLabel = input<string>('Needs')\n ariaLabel = input<string>('Pipeline jobs')\n jobSelected = output<string>()\n\n protected readonly links = signal<GraphLink[]>([])\n\n private readonly graph = viewChild<ElementRef<HTMLElement>>('graph')\n private readonly destroyRef = inject(DestroyRef)\n\n constructor() {\n afterRenderEffect(() => {\n this.stages()\n this.measure()\n })\n afterNextRender(() => {\n const root = this.graph()?.nativeElement\n if (!root || typeof ResizeObserver === 'undefined') {\n return\n }\n const observer = new ResizeObserver(() => this.measure())\n observer.observe(root)\n this.destroyRef.onDestroy(() => observer.disconnect())\n })\n }\n\n private measure(): void {\n const root = this.graph()?.nativeElement\n if (!root) {\n return\n }\n const origin = root.getBoundingClientRect()\n const boxes = new Map<string, { left: number; top: number; width: number; height: number }>()\n root.querySelectorAll<HTMLElement>('[data-job-name]').forEach((node) => {\n const rect = node.getBoundingClientRect()\n boxes.set(node.dataset['jobName'] ?? '', {\n left: rect.left - origin.left + root.scrollLeft,\n top: rect.top - origin.top + root.scrollTop,\n width: rect.width,\n height: rect.height,\n })\n })\n const statuses = new Map(\n this.stages().flatMap((s) => s.jobs.map((j) => [j.name, j.status] as const)),\n )\n this.links.set(\n graphEdges(this.stages()).flatMap((edge) => {\n const from = boxes.get(edge.from)\n const to = boxes.get(edge.to)\n return from && to\n ? [\n {\n key: `${edge.from}->${edge.to}`,\n d: linkPath(from, to),\n done: statuses.get(edge.from) === 'success',\n },\n ]\n : []\n }),\n )\n }\n}\n","<div class=\"gbt-job-graph\" #graph>\n <ol class=\"gbt-job-graph__stages\" [attr.aria-label]=\"ariaLabel()\">\n @for (stage of stages(); track stage.name) {\n <li class=\"gbt-job-graph__stage\">\n <h3 class=\"gbt-job-graph__stage-name\">{{ stage.name }}</h3>\n <ul class=\"gbt-job-graph__jobs\">\n @for (job of stage.jobs; track job.id) {\n <li>\n <button\n type=\"button\"\n class=\"gbt-job-graph__node\"\n [attr.data-job-name]=\"job.name\"\n [attr.data-status]=\"job.status\"\n [attr.aria-current]=\"job.id === selectedJobId() ? 'true' : null\"\n (click)=\"jobSelected.emit(job.id)\"\n >\n <span class=\"gbt-job-graph__glyph\" data-glyph aria-hidden=\"true\">\n @switch (job.status) {\n @case ('success') {\n <gbt-icon name=\"check-circle\" />\n }\n @case ('failed') {\n <gbt-icon name=\"alert-circle\" />\n }\n @case ('canceled') {\n <gbt-icon name=\"x\" />\n }\n @default {\n <span class=\"gbt-job-graph__dot\"></span>\n }\n }\n </span>\n <span class=\"gbt-job-graph__name\">{{ job.name }}</span>\n @if (job.durationLabel) {\n <span class=\"gbt-job-graph__duration\">{{ job.durationLabel }}</span>\n }\n <span class=\"sr-only\">\n — {{ statusLabels()[job.status] }}@if (job.needs.length > 0) {. {{ needsLabel() }}: {{ job.needs.join(', ') }}}\n </span>\n </button>\n </li>\n }\n </ul>\n </li>\n }\n </ol>\n <svg class=\"gbt-job-graph__links\" aria-hidden=\"true\" focusable=\"false\">\n @for (link of links(); track link.key) {\n <path [attr.d]=\"link.d\" [attr.data-done]=\"link.done ? '' : null\" />\n }\n </svg>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\n\nlet nextId = 0\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) {\n return `${bytes} B`\n }\n if (bytes < 1024 * 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`\n }\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\n@Component({\n selector: 'gbt-file-upload',\n standalone: true,\n imports: [Icon],\n templateUrl: './file-upload.html',\n styleUrl: './file-upload.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUpload),\n multi: true,\n },\n ],\n})\nexport class FileUpload implements ControlValueAccessor {\n private readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput')\n\n id = input<string>(`gbt-file-upload-${++nextId}`)\n label = input<string>('')\n multiple = input(false, { transform: booleanAttribute })\n accept = input<string>('')\n maxSizeMb = input<number | null>(null)\n disabled = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n dropLabel = input<string>('Drag and drop a file here, or click to browse')\n removeLabel = input<(name: string) => string>((name) => `Remove ${name}`)\n oversizeMessage = input<(name: string, maxSizeMb: number) => string>(\n (name, maxSizeMb) => `${name} exceeds ${maxSizeMb} MB and was not added.`,\n )\n\n protected readonly files = signal<File[]>([])\n protected readonly rejections = signal<string[]>([])\n protected readonly dragOver = signal(false)\n\n protected readonly formatFileSize = formatFileSize\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: File[]) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: File[] | null): void {\n this.files.set(value ?? [])\n }\n\n registerOnChange(fn: (value: File[]) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected openPicker(): void {\n if (this.isDisabled()) {\n return\n }\n this.fileInput()?.nativeElement.click()\n }\n\n protected onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement\n this.addFiles(input.files)\n input.value = ''\n }\n\n protected onDragEnter(event: DragEvent): void {\n event.preventDefault()\n if (!this.isDisabled()) {\n this.dragOver.set(true)\n }\n }\n\n protected onDragOver(event: DragEvent): void {\n event.preventDefault()\n }\n\n protected onDragLeave(event: DragEvent): void {\n event.preventDefault()\n this.dragOver.set(false)\n }\n\n protected onDrop(event: DragEvent): void {\n event.preventDefault()\n this.dragOver.set(false)\n if (this.isDisabled()) {\n return\n }\n this.addFiles(event.dataTransfer?.files ?? null)\n }\n\n protected removeFile(file: File): void {\n if (this.isDisabled()) {\n return\n }\n const next = this.files().filter((f) => f !== file)\n this.files.set(next)\n this.onChange(next)\n this.onTouched()\n }\n\n private addFiles(fileList: FileList | null): void {\n if (!fileList || fileList.length === 0) {\n return\n }\n const incoming = Array.from(fileList)\n const maxSizeMb = this.maxSizeMb()\n const accepted: File[] = []\n const rejected: string[] = []\n for (const file of incoming) {\n if (maxSizeMb !== null && file.size > maxSizeMb * 1024 * 1024) {\n rejected.push(this.oversizeMessage()(file.name, maxSizeMb))\n } else {\n accepted.push(file)\n }\n }\n this.rejections.set(rejected)\n if (accepted.length === 0) {\n return\n }\n const next = this.multiple() ? [...this.files(), ...accepted] : accepted.slice(0, 1)\n this.files.set(next)\n this.onChange(next)\n this.onTouched()\n }\n}\n","<div class=\"gbt-file-upload\">\n @if (label()) {\n <span class=\"gbt-file-upload__label\" [id]=\"id() + '-label'\">{{ label() }}</span>\n }\n <button\n type=\"button\"\n class=\"gbt-file-upload__dropzone\"\n [class.gbt-file-upload__dropzone--drag-over]=\"dragOver()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"label() ? id() + '-label' : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (click)=\"openPicker()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event)\"\n >\n <gbt-icon name=\"upload\" class=\"gbt-file-upload__icon\" aria-hidden=\"true\" />\n <span class=\"gbt-file-upload__hint\">{{ dropLabel() }}</span>\n </button>\n <input\n #fileInput\n type=\"file\"\n class=\"gbt-file-upload__input\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [multiple]=\"multiple()\"\n [attr.accept]=\"accept() || null\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFilesSelected($event)\"\n />\n @if (rejections().length > 0) {\n <div class=\"gbt-file-upload__rejections\" role=\"alert\">\n <ul>\n @for (message of rejections(); track message) {\n <li>{{ message }}</li>\n }\n </ul>\n </div>\n }\n @if (files().length > 0) {\n <ul class=\"gbt-file-upload__files\">\n @for (file of files(); track file) {\n <li class=\"gbt-file-upload__file\">\n <span class=\"gbt-file-upload__file-name\">{{ file.name }}</span>\n <span class=\"gbt-file-upload__file-size\">{{ formatFileSize(file.size) }}</span>\n <button\n type=\"button\"\n class=\"gbt-file-upload__file-remove\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"removeLabel()(file.name)\"\n (click)=\"removeFile(file)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </li>\n }\n </ul>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-file-upload__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\n\nexport type NotificationDotVariant = 'error' | 'warning' | 'success' | 'info'\n\n@Component({\n selector: 'gbt-notification-dot',\n standalone: true,\n exportAs: 'gbtNotificationDot',\n templateUrl: './notification-dot.html',\n styleUrl: './notification-dot.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationDot {\n count = input<number | null>(null)\n max = input<number>(99)\n variant = input<NotificationDotVariant>('error')\n hidden = input(false)\n\n protected readonly showDot = computed(() => !this.hidden() && this.count() !== 0)\n\n protected readonly displayValue = computed(() => {\n const count = this.count()\n if (count === null) {\n return ''\n }\n const max = this.max()\n return count > max ? `${max}+` : `${count}`\n })\n}\n","<span class=\"gbt-notification-dot__anchor\">\n <ng-content></ng-content>\n</span>\n@if (showDot()) {\n <span\n class=\"gbt-notification-dot__badge\"\n [class.gbt-notification-dot__badge--count]=\"count() !== null\"\n [attr.data-variant]=\"variant()\"\n aria-hidden=\"true\"\n >{{ displayValue() }}</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Tag } from '../../atoms/tag/tag'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-tag-input',\n standalone: true,\n imports: [Tag],\n templateUrl: './tag-input.html',\n styleUrl: './tag-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TagInput),\n multi: true,\n },\n ],\n})\nexport class TagInput implements ControlValueAccessor {\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input')\n\n id = input<string>(`gbt-tag-input-${++nextId}`)\n label = input<string>('')\n placeholder = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n separatorKeys = input<string[]>(['Enter', ','])\n allowDuplicates = input(false, { transform: booleanAttribute })\n color = input<string>('#6b7280')\n removeLabel = input<(value: string) => string>((value) => `Remove ${value}`)\n\n protected readonly tags = signal<string[]>([])\n protected readonly draft = signal('')\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: string[]) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: string[] | null): void {\n this.tags.set(value ?? [])\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected focusInput(): void {\n if (!this.isDisabled()) {\n this.inputRef()?.nativeElement.focus()\n }\n }\n\n protected onInputChange(event: Event): void {\n this.draft.set((event.target as HTMLInputElement).value)\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n if (this.separatorKeys().includes(event.key)) {\n event.preventDefault()\n this.commitDraft()\n return\n }\n if (event.key === 'Backspace' && this.draft() === '' && this.tags().length > 0) {\n event.preventDefault()\n this.removeTagAt(this.tags().length - 1)\n }\n }\n\n protected onBlur(): void {\n this.commitDraft()\n this.onTouched()\n }\n\n protected removeTagAt(index: number): void {\n if (this.isDisabled()) {\n return\n }\n const next = this.tags().filter((_, i) => i !== index)\n this.tags.set(next)\n this.onChange(next)\n }\n\n private commitDraft(): void {\n const value = this.draft().trim()\n this.draft.set('')\n if (!value || this.isDisabled()) {\n return\n }\n if (!this.allowDuplicates() && this.tags().includes(value)) {\n return\n }\n const next = [...this.tags(), value]\n this.tags.set(next)\n this.onChange(next)\n }\n}\n","<div class=\"gbt-tag-input\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-tag-input__label\">{{ label() }}</label>\n }\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"gbt-tag-input__field\"\n [class.gbt-tag-input__field--disabled]=\"isDisabled()\"\n (click)=\"focusInput()\"\n >\n @for (tag of tags(); track tag; let i = $index) {\n <gbt-tag\n [color]=\"color()\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"removeLabel()(tag)\"\n (removed)=\"removeTagAt(i)\"\n >\n {{ tag }}\n </gbt-tag>\n }\n <input\n #input\n type=\"text\"\n [id]=\"id()\"\n class=\"gbt-tag-input__input\"\n [placeholder]=\"tags().length === 0 ? placeholder() : ''\"\n [disabled]=\"isDisabled()\"\n [value]=\"draft()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"onInputKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n </div>\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-tag-input__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","export interface TreeNode {\n id: string\n label: string\n icon?: string\n children?: TreeNode[]\n}\n\nexport interface FlatTreeNode {\n node: TreeNode\n depth: number\n hasChildren: boolean\n parentId: string | null\n}\n\nexport function flattenTree(\n nodes: TreeNode[],\n expandedIds: ReadonlySet<string>,\n depth = 0,\n parentId: string | null = null,\n): FlatTreeNode[] {\n const result: FlatTreeNode[] = []\n for (const node of nodes) {\n const hasChildren = !!node.children && node.children.length > 0\n result.push({ node, depth, hasChildren, parentId })\n if (hasChildren && expandedIds.has(node.id)) {\n result.push(...flattenTree(node.children!, expandedIds, depth + 1, node.id))\n }\n }\n return result\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { FlatTreeNode, TreeNode, flattenTree } from './tree-flatten'\n\n@Component({\n selector: 'gbt-tree',\n standalone: true,\n imports: [Icon],\n templateUrl: './tree.html',\n styleUrl: './tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tree {\n private readonly elementRef = inject(ElementRef)\n private readonly injector = inject(Injector)\n\n items = input.required<TreeNode[]>()\n ariaLabel = input<string>('')\n selectedId = model<string | null>(null)\n expandedIds = model<string[]>([])\n expandLabel = input<string>('Expand')\n collapseLabel = input<string>('Collapse')\n\n protected readonly focusedId = signal<string | null>(null)\n\n private readonly expandedSet = computed(() => new Set(this.expandedIds()))\n protected readonly flatNodes = computed(() => flattenTree(this.items(), this.expandedSet()))\n\n protected readonly activeId = computed(() => {\n const focused = this.focusedId()\n const flat = this.flatNodes()\n if (focused && flat.some((f) => f.node.id === focused)) {\n return focused\n }\n const selected = this.selectedId()\n if (selected && flat.some((f) => f.node.id === selected)) {\n return selected\n }\n return flat[0]?.node.id ?? null\n })\n\n protected isExpanded(id: string): boolean {\n return this.expandedSet().has(id)\n }\n\n protected toggle(id: string): void {\n const set = new Set(this.expandedIds())\n if (set.has(id)) {\n set.delete(id)\n } else {\n set.add(id)\n }\n this.expandedIds.set([...set])\n }\n\n protected select(node: TreeNode): void {\n this.selectedId.set(node.id)\n this.focusedId.set(node.id)\n }\n\n protected onItemClick(flat: FlatTreeNode): void {\n this.select(flat.node)\n if (flat.hasChildren) {\n this.toggle(flat.node.id)\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const flat = this.flatNodes()\n const index = flat.findIndex((f) => f.node.id === this.activeId())\n if (index === -1) {\n return\n }\n const current = flat[index]\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.focusIndex(Math.min(index + 1, flat.length - 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n this.focusIndex(Math.max(index - 1, 0))\n break\n case 'ArrowRight':\n event.preventDefault()\n if (current.hasChildren && !this.isExpanded(current.node.id)) {\n this.toggle(current.node.id)\n } else if (current.hasChildren) {\n this.focusIndex(index + 1)\n }\n break\n case 'ArrowLeft':\n event.preventDefault()\n if (current.hasChildren && this.isExpanded(current.node.id)) {\n this.toggle(current.node.id)\n } else if (current.parentId) {\n const parentIndex = flat.findIndex((f) => f.node.id === current.parentId)\n if (parentIndex !== -1) {\n this.focusIndex(parentIndex)\n }\n }\n break\n case 'Home':\n event.preventDefault()\n this.focusIndex(0)\n break\n case 'End':\n event.preventDefault()\n this.focusIndex(flat.length - 1)\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n this.select(current.node)\n break\n default:\n return\n }\n }\n\n private focusIndex(index: number): void {\n const target = this.flatNodes()[index]\n if (!target) {\n return\n }\n this.focusedId.set(target.node.id)\n afterNextRender(\n () => {\n const host = this.elementRef.nativeElement as HTMLElement\n host.querySelector<HTMLElement>(`[data-node-id=\"${cssEscape(target.node.id)}\"]`)?.focus()\n },\n { injector: this.injector },\n )\n }\n}\n\nfunction cssEscape(value: string): string {\n return typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(value) : value.replace(/\"/g, '\\\\\"')\n}\n","<ul\n class=\"gbt-tree\"\n role=\"tree\"\n tabindex=\"-1\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (keydown)=\"onKeydown($event)\"\n>\n @for (flat of flatNodes(); track flat.node.id) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\n <li\n class=\"gbt-tree__item\"\n role=\"treeitem\"\n [attr.data-node-id]=\"flat.node.id\"\n [attr.aria-level]=\"flat.depth + 1\"\n [attr.aria-expanded]=\"flat.hasChildren ? isExpanded(flat.node.id) : null\"\n [attr.aria-selected]=\"selectedId() === flat.node.id\"\n [style.paddingLeft.px]=\"flat.depth * 20\"\n [attr.tabindex]=\"activeId() === flat.node.id ? 0 : -1\"\n (click)=\"onItemClick(flat)\"\n >\n @if (flat.hasChildren) {\n <button\n type=\"button\"\n class=\"gbt-tree__toggle\"\n tabindex=\"-1\"\n [attr.aria-label]=\"isExpanded(flat.node.id) ? collapseLabel() : expandLabel()\"\n (click)=\"toggle(flat.node.id); $event.stopPropagation()\"\n >\n <gbt-icon\n name=\"chevron-right\"\n class=\"gbt-tree__chevron\"\n [class.gbt-tree__chevron--expanded]=\"isExpanded(flat.node.id)\"\n aria-hidden=\"true\"\n />\n </button>\n } @else {\n <span class=\"gbt-tree__spacer\"></span>\n }\n @if (flat.node.icon) {\n <gbt-icon [name]=\"flat.node.icon\" class=\"gbt-tree__icon\" aria-hidden=\"true\" />\n }\n <span class=\"gbt-tree__label\">{{ flat.node.label }}</span>\n </li>\n }\n</ul>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","ASSERTIVE_VARIANTS","VARIANT_ICONS","DAY","round","DASH_ARRAYS","CURRENT_YEAR","shiftDays"],"mappings":"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"}
1
+ {"version":3,"file":"masmarino-gabarit.mjs","sources":["../../../projects/gabarit/src/lib/version.ts","../../../projects/gabarit/src/lib/components/atoms/icon/built-in-icons.ts","../../../projects/gabarit/src/lib/components/atoms/icon/icon-registry.ts","../../../projects/gabarit/src/lib/components/atoms/icon/icon.ts","../../../projects/gabarit/src/lib/components/templates/app-shell/app-shell.ts","../../../projects/gabarit/src/lib/components/templates/app-shell/app-shell.html","../../../projects/gabarit/src/lib/components/templates/app-shell-nav-group/app-shell-nav-group.ts","../../../projects/gabarit/src/lib/components/templates/app-shell-nav-group/app-shell-nav-group.html","../../../projects/gabarit/src/lib/components/atoms/button/button.ts","../../../projects/gabarit/src/lib/components/atoms/button/button.html","../../../projects/gabarit/src/lib/components/atoms/copy-button/clipboard.ts","../../../projects/gabarit/src/lib/components/atoms/badge/badge.ts","../../../projects/gabarit/src/lib/components/atoms/badge/badge.html","../../../projects/gabarit/src/lib/primitives/scales.ts","../../../projects/gabarit/src/lib/primitives/ticks.ts","../../../projects/gabarit/src/lib/primitives/intl-cache.ts","../../../projects/gabarit/src/lib/primitives/format.ts","../../../projects/gabarit/src/lib/primitives/no-value.ts","../../../projects/gabarit/src/lib/primitives/format-bytes.ts","../../../projects/gabarit/src/lib/primitives/format-time.ts","../../../projects/gabarit/src/lib/primitives/initials.ts","../../../projects/gabarit/src/lib/primitives/list-toolbar-state.ts","../../../projects/gabarit/src/lib/primitives/path.ts","../../../projects/gabarit/src/lib/primitives/nearest.ts","../../../projects/gabarit/src/lib/primitives/label.ts","../../../projects/gabarit/src/lib/components/atoms/avatar/avatar.ts","../../../projects/gabarit/src/lib/components/atoms/avatar/avatar.html","../../../projects/gabarit/src/lib/components/atoms/skeleton/skeleton.ts","../../../projects/gabarit/src/lib/components/molecules/avatar-group/avatar-group.ts","../../../projects/gabarit/src/lib/components/molecules/avatar-group/avatar-group.html","../../../projects/gabarit/src/lib/components/molecules/alert/alert.ts","../../../projects/gabarit/src/lib/components/molecules/alert/alert.html","../../../projects/gabarit/src/lib/components/atoms/tag/tag-contrast.ts","../../../projects/gabarit/src/lib/components/atoms/tag/tag.ts","../../../projects/gabarit/src/lib/components/atoms/tag/tag.html","../../../projects/gabarit/src/lib/components/molecules/empty-state/empty-state.ts","../../../projects/gabarit/src/lib/components/molecules/empty-state/empty-state.html","../../../projects/gabarit/src/lib/components/atoms/input/input.ts","../../../projects/gabarit/src/lib/components/atoms/input/input.html","../../../projects/gabarit/src/lib/components/shared/floating-panel-position.ts","../../../projects/gabarit/src/lib/components/molecules/select/select.ts","../../../projects/gabarit/src/lib/components/molecules/select/select.html","../../../projects/gabarit/src/lib/components/molecules/list-toolbar/list-toolbar.ts","../../../projects/gabarit/src/lib/components/molecules/list-toolbar/list-toolbar.html","../../../projects/gabarit/src/lib/components/molecules/card/card-link.ts","../../../projects/gabarit/src/lib/components/molecules/card/card.ts","../../../projects/gabarit/src/lib/components/molecules/card/card.html","../../../projects/gabarit/src/lib/components/atoms/checkbox/checkbox.ts","../../../projects/gabarit/src/lib/components/atoms/checkbox/checkbox.html","../../../projects/gabarit/src/lib/components/organisms/modal/modal.ts","../../../projects/gabarit/src/lib/components/organisms/modal/modal.html","../../../projects/gabarit/src/lib/components/organisms/drawer/drawer.ts","../../../projects/gabarit/src/lib/components/organisms/drawer/drawer.html","../../../projects/gabarit/src/lib/components/molecules/table/table.ts","../../../projects/gabarit/src/lib/components/molecules/table/table.html","../../../projects/gabarit/src/lib/components/organisms/search-bar/search-bar.ts","../../../projects/gabarit/src/lib/components/organisms/search-bar/search-bar.html","../../../projects/gabarit/src/lib/components/molecules/tab/tab.ts","../../../projects/gabarit/src/lib/components/molecules/tabs/tabs.ts","../../../projects/gabarit/src/lib/components/molecules/tabs/tabs.html","../../../projects/gabarit/src/lib/pipes/format.pipes.ts","../../../projects/gabarit/src/lib/components/organisms/chart-context/chart-context.ts","../../../projects/gabarit/src/lib/components/organisms/chart-frame/chart-frame.ts","../../../projects/gabarit/src/lib/components/organisms/chart-frame/chart-frame.html","../../../projects/gabarit/src/lib/components/organisms/chart-axis/chart-axis.ts","../../../projects/gabarit/src/lib/components/organisms/chart-axis/chart-axis.html","../../../projects/gabarit/src/lib/components/organisms/chart-tooltip/chart-tooltip.ts","../../../projects/gabarit/src/lib/components/organisms/chart-tooltip/chart-tooltip.html","../../../projects/gabarit/src/lib/components/organisms/chart-legend/chart-legend.ts","../../../projects/gabarit/src/lib/components/organisms/chart-legend/chart-legend.html","../../../projects/gabarit/src/lib/components/organisms/chart-empty/chart-empty.ts","../../../projects/gabarit/src/lib/components/organisms/chart-empty/chart-empty.html","../../../projects/gabarit/src/lib/components/organisms/chart-table/chart-table.ts","../../../projects/gabarit/src/lib/components/organisms/chart-table/chart-table.html","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-series.ts","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-series.html","../../../projects/gabarit/src/lib/components/organisms/chart-data/chart-data.ts","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-chart.ts","../../../projects/gabarit/src/lib/components/organisms/line-chart/line-chart.html","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-series.ts","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-series.html","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-chart.ts","../../../projects/gabarit/src/lib/components/organisms/bar-chart/bar-chart.html","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-series.ts","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-series.html","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-chart.ts","../../../projects/gabarit/src/lib/components/organisms/timeline-chart/timeline-chart.html","../../../projects/gabarit/src/lib/components/organisms/pie-chart/pie-chart.ts","../../../projects/gabarit/src/lib/components/organisms/pie-chart/pie-chart.html","../../../projects/gabarit/src/lib/components/atoms/sparkline/sparkline.ts","../../../projects/gabarit/src/lib/components/atoms/sparkline/sparkline.html","../../../projects/gabarit/src/lib/components/atoms/gauge-bar/gauge-bar.ts","../../../projects/gabarit/src/lib/components/atoms/gauge-bar/gauge-bar.html","../../../projects/gabarit/src/lib/components/molecules/dimension-card/dimension-card.ts","../../../projects/gabarit/src/lib/components/molecules/dimension-card/dimension-card.html","../../../projects/gabarit/src/lib/components/molecules/funnel-chart/funnel-chart.ts","../../../projects/gabarit/src/lib/components/molecules/funnel-chart/funnel-chart.html","../../../projects/gabarit/src/lib/components/molecules/menu/menu.ts","../../../projects/gabarit/src/lib/components/molecules/menu/menu.html","../../../projects/gabarit/src/lib/components/molecules/menu-item/menu-item.ts","../../../projects/gabarit/src/lib/components/molecules/menu-item/menu-item.html","../../../projects/gabarit/src/lib/components/molecules/popover/popover.ts","../../../projects/gabarit/src/lib/components/molecules/popover/popover.html","../../../projects/gabarit/src/lib/components/molecules/description-list/description-list.ts","../../../projects/gabarit/src/lib/components/molecules/description-list/description-list.html","../../../projects/gabarit/src/lib/components/molecules/segmented-control/segmented-control.ts","../../../projects/gabarit/src/lib/components/molecules/segmented-control/segmented-control.html","../../../projects/gabarit/src/lib/components/molecules/date-picker/date-picker-calendar.ts","../../../projects/gabarit/src/lib/components/molecules/date-picker/calendar-panel.ts","../../../projects/gabarit/src/lib/components/molecules/date-picker/date-picker.ts","../../../projects/gabarit/src/lib/components/molecules/date-picker/date-picker.html","../../../projects/gabarit/src/lib/components/molecules/date-range-picker/date-range-picker.ts","../../../projects/gabarit/src/lib/components/molecules/date-range-picker/date-range-picker.html","../../../projects/gabarit/src/lib/components/molecules/accordion-item/accordion-item.ts","../../../projects/gabarit/src/lib/components/molecules/accordion-item/accordion-item.html","../../../projects/gabarit/src/lib/components/molecules/accordion/accordion.ts","../../../projects/gabarit/src/lib/components/molecules/pagination/pagination.ts","../../../projects/gabarit/src/lib/components/molecules/pagination/pagination.html","../../../projects/gabarit/src/lib/components/molecules/breadcrumb/breadcrumb.ts","../../../projects/gabarit/src/lib/components/molecules/breadcrumb/breadcrumb.html","../../../projects/gabarit/src/lib/components/organisms/confirm-danger-modal/confirm-danger-modal.ts","../../../projects/gabarit/src/lib/components/organisms/confirm-danger-modal/confirm-danger-modal.html","../../../projects/gabarit/src/lib/components/organisms/toaster/toast.service.ts","../../../projects/gabarit/src/lib/components/organisms/toaster/toaster.ts","../../../projects/gabarit/src/lib/components/organisms/toaster/toaster.html","../../../projects/gabarit/src/lib/components/molecules/tooltip/tooltip.ts","../../../projects/gabarit/src/lib/components/molecules/tooltip/tooltip.html","../../../projects/gabarit/src/lib/components/molecules/radio-group/radio-group.ts","../../../projects/gabarit/src/lib/components/molecules/radio-group/radio-group.html","../../../projects/gabarit/src/lib/components/molecules/checkbox-group/checkbox-group.ts","../../../projects/gabarit/src/lib/components/molecules/checkbox-group/checkbox-group.html","../../../projects/gabarit/src/lib/components/atoms/switch/switch.ts","../../../projects/gabarit/src/lib/components/atoms/switch/switch.html","../../../projects/gabarit/src/lib/components/atoms/textarea/textarea.ts","../../../projects/gabarit/src/lib/components/atoms/textarea/textarea.html","../../../projects/gabarit/src/lib/components/molecules/autocomplete/autocomplete.ts","../../../projects/gabarit/src/lib/components/molecules/autocomplete/autocomplete.html","../../../projects/gabarit/src/lib/components/atoms/divider/divider.ts","../../../projects/gabarit/src/lib/components/atoms/divider/divider.html","../../../projects/gabarit/src/lib/components/atoms/spinner/spinner.ts","../../../projects/gabarit/src/lib/components/atoms/spinner/spinner.html","../../../projects/gabarit/src/lib/components/atoms/slider/slider.ts","../../../projects/gabarit/src/lib/components/atoms/slider/slider.html","../../../projects/gabarit/src/lib/components/molecules/stepper/stepper.ts","../../../projects/gabarit/src/lib/components/molecules/stepper/stepper.html","../../../projects/gabarit/src/lib/components/atoms/job-status/job-status.ts","../../../projects/gabarit/src/lib/components/atoms/job-status/job-status.html","../../../projects/gabarit/src/lib/components/molecules/job-graph/job-graph-layout.ts","../../../projects/gabarit/src/lib/components/molecules/job-graph/job-graph.ts","../../../projects/gabarit/src/lib/components/molecules/job-graph/job-graph.html","../../../projects/gabarit/src/lib/components/molecules/file-upload/file-upload.ts","../../../projects/gabarit/src/lib/components/molecules/file-upload/file-upload.html","../../../projects/gabarit/src/lib/components/atoms/notification-dot/notification-dot.ts","../../../projects/gabarit/src/lib/components/atoms/notification-dot/notification-dot.html","../../../projects/gabarit/src/lib/components/molecules/tag-input/tag-input.ts","../../../projects/gabarit/src/lib/components/molecules/tag-input/tag-input.html","../../../projects/gabarit/src/lib/components/molecules/tree/tree-flatten.ts","../../../projects/gabarit/src/lib/components/molecules/tree/tree.ts","../../../projects/gabarit/src/lib/components/molecules/tree/tree.html","../../../projects/gabarit/src/lib/components/molecules/user-chip/user-chip.ts","../../../projects/gabarit/src/lib/components/molecules/user-chip/user-chip.html","../../../projects/gabarit/src/lib/components/molecules/panel/panel.ts","../../../projects/gabarit/src/lib/components/molecules/panel/panel.html","../../../projects/gabarit/src/lib/components/molecules/page-header/page-header.ts","../../../projects/gabarit/src/lib/components/molecules/page-header/page-header.html","../../../projects/gabarit/src/lib/components/templates/page-layout/page-layout.ts","../../../projects/gabarit/src/lib/components/templates/page-layout/page-layout.html","../../../projects/gabarit/src/lib/components/molecules/list-row/list-row.ts","../../../projects/gabarit/src/lib/components/molecules/list-row/list-row.html","../../../projects/gabarit/src/lib/components/molecules/list-card/list-card.ts","../../../projects/gabarit/src/lib/components/molecules/list-card/list-card.html","../../../projects/gabarit/src/lib/components/atoms/copy-button/copy-button.ts","../../../projects/gabarit/src/lib/components/atoms/copy-button/copy-button.html","../../../projects/gabarit/src/lib/components/molecules/copy-field/copy-field.ts","../../../projects/gabarit/src/lib/components/molecules/copy-field/copy-field.html","../../../projects/gabarit/src/lib/components/molecules/secret-reveal/secret-reveal.ts","../../../projects/gabarit/src/lib/components/molecules/secret-reveal/secret-reveal.html","../../../projects/gabarit/src/lib/components/atoms/save-status/save-status.ts","../../../projects/gabarit/src/lib/components/atoms/save-status/save-status.html","../../../projects/gabarit/src/lib/components/atoms/icon-marker/icon-marker.ts","../../../projects/gabarit/src/lib/components/atoms/icon-marker/icon-marker.html","../../../projects/gabarit/src/lib/components/molecules/stat-grid/stat-grid.ts","../../../projects/gabarit/src/lib/components/molecules/stat-grid/stat-grid.html","../../../projects/gabarit/src/lib/components/molecules/stat-tile/stat-tile-link.ts","../../../projects/gabarit/src/lib/components/molecules/stat-tile/stat-tile.ts","../../../projects/gabarit/src/lib/components/molecules/stat-tile/stat-tile.html","../../../projects/gabarit/src/lib/components/molecules/skeleton-list/skeleton-list.ts","../../../projects/gabarit/src/lib/components/molecules/skeleton-list/skeleton-list.html","../../../projects/gabarit/src/lib/components/molecules/disclosure/disclosure.ts","../../../projects/gabarit/src/lib/components/molecules/disclosure/disclosure.html","../../../projects/gabarit/src/lib/components/molecules/nav-tabs/nav-tabs.token.ts","../../../projects/gabarit/src/lib/components/molecules/nav-tabs/nav-tab.ts","../../../projects/gabarit/src/lib/components/molecules/nav-tabs/nav-tab.html","../../../projects/gabarit/src/lib/components/molecules/nav-tabs/nav-tabs.ts","../../../projects/gabarit/src/lib/components/molecules/nav-tabs/nav-tabs.html","../../../projects/gabarit/src/lib/auth/ports/auth.port.ts","../../../projects/gabarit/src/lib/auth/ports/mfa.port.ts","../../../projects/gabarit/src/lib/auth/webauthn.ts","../../../projects/gabarit/src/lib/auth/auth-labels.ts","../../../projects/gabarit/src/lib/auth/shared/port-error.ts","../../../projects/gabarit/src/lib/auth/shared/mfa-errors.ts","../../../projects/gabarit/src/lib/auth/shared/account-errors.ts","../../../projects/gabarit/src/lib/auth/shared/account-rules.ts","../../../projects/gabarit/src/lib/auth/shared/activation-link.ts","../../../projects/gabarit/src/lib/auth/shared/passkey-name.ts","../../../projects/gabarit/src/lib/auth/shared/mfa-settings-state.ts","../../../projects/gabarit/src/lib/auth/auth-panel/auth-panel.ts","../../../projects/gabarit/src/lib/auth/auth-panel/auth-panel.html","../../../projects/gabarit/src/lib/auth/auth-footer/auth-footer.ts","../../../projects/gabarit/src/lib/auth/auth-footer/auth-footer.html","../../../projects/gabarit/src/lib/auth/totp-qr/totp-qr.ts","../../../projects/gabarit/src/lib/auth/totp-qr/totp-qr.html","../../../projects/gabarit/src/lib/auth/backup-codes/backup-codes.ts","../../../projects/gabarit/src/lib/auth/backup-codes/backup-codes.html","../../../projects/gabarit/src/lib/auth/shared/focus-after-render.ts","../../../projects/gabarit/src/lib/auth/mfa-enrollment/mfa-enrollment.ts","../../../projects/gabarit/src/lib/auth/mfa-enrollment/mfa-enrollment.html","../../../projects/gabarit/src/lib/auth/login/login.ts","../../../projects/gabarit/src/lib/auth/login/login.html","../../../projects/gabarit/src/lib/auth/register/register.ts","../../../projects/gabarit/src/lib/auth/register/register.html","../../../projects/gabarit/src/lib/auth/activate/activate.ts","../../../projects/gabarit/src/lib/auth/activate/activate.html","../../../projects/gabarit/src/lib/auth/mfa-settings/mfa-settings.ts","../../../projects/gabarit/src/lib/auth/mfa-settings/mfa-settings.html","../../../projects/gabarit/src/lib/auth/passkey-settings/passkey-settings.ts","../../../projects/gabarit/src/lib/auth/passkey-settings/passkey-settings.html","../../../projects/gabarit/src/masmarino-gabarit.ts"],"sourcesContent":["export const GABARIT_VERSION = '1.2.1'\n","export const BUILT_IN_ICONS: Record<string, string> = {\n search: `<path d=\"m21 21-4.34-4.34\" />\n<circle cx=\"11\" cy=\"11\" r=\"8\" />`,\n x: `<path d=\"M18 6 6 18\" />\n<path d=\"m6 6 12 12\" />`,\n eye: `<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 'eye-off': `<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 'chevron-down': `<path d=\"m6 9 6 6 6-6\" />`,\n 'chevron-left': `<path d=\"m15 18-6-6 6-6\" />`,\n 'chevron-right': `<path d=\"m9 18 6-6-6-6\" />`,\n 'chevrons-left': `<path d=\"m11 17-5-5 5-5\" />\n<path d=\"m18 17-5-5 5-5\" />`,\n 'chevrons-right': `<path d=\"m6 17 5-5-5-5\" />\n<path d=\"m13 17 5-5-5-5\" />`,\n 'ellipsis-vertical': `<circle cx=\"12\" cy=\"12\" r=\"1\" />\n<circle cx=\"12\" cy=\"5\" r=\"1\" />\n<circle cx=\"12\" cy=\"19\" r=\"1\" />`,\n check: `<path d=\"M20 6 9 17l-5-5\" />`,\n copy: `<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n<path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />`,\n 'check-circle': `<path d=\"m5 12 5 5 9-10\" />`,\n 'alert-circle': `<path d=\"M12 7v6\" />\n<path d=\"M12 17h.01\" />`,\n 'alert-triangle': `<path d=\"m21.73 18-8-14a2 2 0 0 0-3.46 0L2.27 18a2 2 0 0 0 1.73 3h16a2 2 0 0 0 1.73-3Z\" />\n<path d=\"M12 9v4\" />\n<path d=\"M12 17h.01\" />`,\n info: `<path d=\"M12 17v-6\" />\n<path d=\"M12 7h.01\" />`,\n 'arrow-up': `<path d=\"m5 12 7-7 7 7\" />\n<path d=\"M12 19V5\" />`,\n 'arrow-down': `<path d=\"M12 5v14\" />\n<path d=\"m19 12-7 7-7-7\" />`,\n calendar: `<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 upload: `<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 folder: `<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\" />`,\n file: `<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 home: `<path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n<path d=\"M9 22V12h6v10\" />`,\n folders: `<path d=\"M20 17a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3.9a2 2 0 0 1-1.69-.9L13.2 4.9A2 2 0 0 0 11.53 4H9a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2Z\" />\n<path d=\"M17 17v2a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2\" />`,\n server: `<rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n<rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n<line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n<line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />`,\n lock: `<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n<path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />`,\n key: `<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 settings: `<circle cx=\"12\" cy=\"12\" r=\"3\" />\n<path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1Z\" />`,\n 'log-out': `<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n<polyline points=\"16 17 21 12 16 7\" />\n<line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />`,\n user: `<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 bell: `<path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\n<path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />`,\n activity: `<path d=\"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\" />`,\n 'layout-dashboard': `<rect width=\"7\" height=\"9\" x=\"3\" y=\"3\" rx=\"1\" />\n<rect width=\"7\" height=\"5\" x=\"14\" y=\"3\" rx=\"1\" />\n<rect width=\"7\" height=\"9\" x=\"14\" y=\"12\" rx=\"1\" />\n<rect width=\"7\" height=\"5\" x=\"3\" y=\"16\" rx=\"1\" />`,\n 'circle-dot': `<circle cx=\"12\" cy=\"12\" r=\"10\" />\n<circle cx=\"12\" cy=\"12\" r=\"1\" />`,\n 'arrow-left': `<path d=\"m12 19-7-7 7-7\" />\n<path d=\"M19 12H5\" />`,\n play: `<polygon points=\"6 3 20 12 6 21 6 3\" />`,\n tag: `<path d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42Z\" />\n<circle cx=\"7.5\" cy=\"7.5\" r=\"1.5\" />`,\n 'book-open': `<path d=\"M12 7v14\" />\n<path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\" />`,\n 'folder-open': `<path d=\"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 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 'message-circle': `<path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />`,\n pencil: `<path d=\"M17 3a2.85 2.85 0 0 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n<path d=\"m15 5 4 4\" />`,\n flag: `<path d=\"M4 22V4\" />\n<path d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1\" />`,\n star: `<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\" />`,\n download: `<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n<polyline points=\"7 10 12 15 17 10\" />\n<line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\" />`,\n globe: `<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 'circle-check': `<circle cx=\"12\" cy=\"12\" r=\"10\" />\n<path d=\"m9 12 2 2 4-4\" />`,\n bug: `<path d=\"m8 2 1.88 1.88\" />\n<path d=\"M14.12 3.88 16 2\" />\n<path d=\"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\" />\n<path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6\" />\n<path d=\"M12 20v-9\" />\n<path d=\"M6.53 9C4.6 8.8 3 7.1 3 5\" />\n<path d=\"M6 13H2\" />\n<path d=\"M3 21c0-2.1 1.7-3.9 3.8-4\" />\n<path d=\"M20.97 5c0 2.1-1.6 3.8-3.5 4\" />\n<path d=\"M22 13h-4\" />\n<path d=\"M17.2 17c2.1.1 3.8 1.9 3.8 4\" />`,\n sparkles: `<path d=\"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\" />\n<path d=\"M20 3v4\" />\n<path d=\"M22 5h-4\" />`,\n 'square-check': `<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n<path d=\"m9 12 2 2 4-4\" />`,\n layers: `<path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\n<path d=\"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65\" />\n<path d=\"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65\" />`,\n plus: `<path d=\"M5 12h14\" />\n<path d=\"M12 5v14\" />`,\n kanban: `<path d=\"M6 5v11\" />\n<path d=\"M12 5v6\" />\n<path d=\"M18 5v14\" />`,\n list: `<path d=\"M3 12h.01\" />\n<path d=\"M3 18h.01\" />\n<path d=\"M3 6h.01\" />\n<path d=\"M8 12h13\" />\n<path d=\"M8 18h13\" />\n<path d=\"M8 6h13\" />`,\n clock: `<circle cx=\"12\" cy=\"12\" r=\"10\" />\n<path d=\"M12 6v6l4 2\" />`,\n 'circle-play': `<circle cx=\"12\" cy=\"12\" r=\"10\" />\n<path d=\"m10 8 6 4-6 4z\" />`,\n 'circle-x': `<circle cx=\"12\" cy=\"12\" r=\"10\" />\n<path d=\"m15 9-6 6\" />\n<path d=\"m9 9 6 6\" />`,\n 'circle-slash': `<circle cx=\"12\" cy=\"12\" r=\"10\" />\n<path d=\"m9 15 6-6\" />`,\n 'flask-conical': `<path d=\"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2\" />\n<path d=\"M6.453 15h11.094\" />\n<path d=\"M8.5 2h7\" />`,\n 'trash-2': `<path d=\"M3 6h18\" />\n<path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n<path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n<line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\" />\n<line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\" />`,\n database: `<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n<path d=\"M3 5V19A9 3 0 0 0 21 19V5\" />\n<path d=\"M3 12A9 3 0 0 0 21 12\" />`,\n 'hard-drive': `<line x1=\"22\" x2=\"2\" y1=\"12\" y2=\"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<line x1=\"6\" x2=\"6.01\" y1=\"16\" y2=\"16\" />\n<line x1=\"10\" x2=\"10.01\" y1=\"16\" y2=\"16\" />`,\n mail: `<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\" />\n<rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />`,\n send: `<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" />\n<path d=\"m21.854 2.147-10.94 10.939\" />`,\n 'shield-check': `<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n<path d=\"m9 12 2 2 4-4\" />`,\n 'shield-alert': `<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n<path d=\"M12 8v4\" />\n<path d=\"M12 16h.01\" />`,\n smartphone: `<rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\" />\n<path d=\"M12 18h.01\" />`,\n users: `<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n<circle cx=\"9\" cy=\"7\" r=\"4\" />\n<path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n<path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />`,\n 'user-plus': `<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n<circle cx=\"9\" cy=\"7\" r=\"4\" />\n<line x1=\"19\" x2=\"19\" y1=\"8\" y2=\"14\" />\n<line x1=\"22\" x2=\"16\" y1=\"11\" y2=\"11\" />`,\n 'refresh-cw': `<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}\n","import { Injectable } from '@angular/core'\nimport { BUILT_IN_ICONS } from './built-in-icons'\n\n@Injectable({ providedIn: 'root' })\nexport class IconRegistry {\n private readonly icons = new Map<string, string>(Object.entries(BUILT_IN_ICONS))\n\n register(name: string, svgInnerMarkup: string): void {\n this.icons.set(name, svgInnerMarkup)\n }\n\n registerAll(icons: Record<string, string>): void {\n for (const [name, markup] of Object.entries(icons)) {\n this.icons.set(name, markup)\n }\n }\n\n get(name: string): string | null {\n return this.icons.get(name) ?? null\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport { IconRegistry } from './icon-registry'\n\n@Component({\n selector: 'gbt-icon',\n standalone: true,\n template: `\n @if (svgContent(); as content) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n [innerHTML]=\"content\"\n ></svg>\n }\n `,\n styles: `\n :host {\n display: inline-flex;\n flex-shrink: 0;\n width: 1.25em;\n height: 1.25em;\n }\n svg {\n width: 100%;\n height: 100%;\n }\n `,\n host: {\n '[attr.aria-hidden]': '\"true\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Icon {\n private readonly sanitizer = inject(DomSanitizer)\n private readonly registry = inject(IconRegistry)\n\n name = input.required<string>()\n\n protected readonly svgContent = computed(() => {\n const markup = this.registry.get(this.name())\n return markup ? this.sanitizer.bypassSecurityTrustHtml(markup) : null\n })\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n computed,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-app-shell',\n standalone: true,\n imports: [Icon],\n templateUrl: './app-shell.html',\n styleUrl: './app-shell.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppShell {\n navLabel = input.required<string>()\n skipLabel = input.required<string>()\n openMenuLabel = input.required<string>()\n closeMenuLabel = input.required<string>()\n collapseLabel = input<string>('')\n expandLabel = input<string>('')\n versionLabel = input<string | null>(null)\n collapsed = input<boolean>(false)\n collapsible = input<boolean>(true)\n collapsedChange = output<boolean>()\n\n private readonly id = ++nextId\n protected readonly mainId = `gbt-app-shell-main-${this.id}`\n protected readonly navId = `gbt-app-shell-nav-${this.id}`\n\n protected readonly menuOpen = signal(false)\n\n protected readonly menuLabel = computed(() =>\n this.menuOpen() ? this.closeMenuLabel() : this.openMenuLabel(),\n )\n\n private readonly toggleButton = viewChild<ElementRef<HTMLButtonElement>>('toggle')\n private readonly nav = viewChild<ElementRef<HTMLElement>>('nav')\n\n protected toggleMenu(): void {\n if (this.menuOpen()) {\n this.close()\n return\n }\n this.menuOpen.set(true)\n queueMicrotask(() => this.nav()?.nativeElement.focus())\n }\n\n protected close(): void {\n if (!this.menuOpen()) return\n this.menuOpen.set(false)\n this.toggleButton()?.nativeElement.focus()\n }\n\n protected toggleCollapsed(): void {\n this.collapsedChange.emit(!this.collapsed())\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close()\n }\n\n protected onNavKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab' || !this.menuOpen()) return\n const nav = this.nav()?.nativeElement\n if (!nav) return\n\n const focusableElements = [\n ...nav.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ].filter((element) => !element.closest('[hidden]') && element.checkVisibility?.() !== false)\n if (focusableElements.length === 0) return\n\n const first = focusableElements[0]\n const last = focusableElements[focusableElements.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n","<div class=\"gbt-app-shell\">\n <a class=\"gbt-app-shell__skip\" [href]=\"'#' + mainId\">{{ skipLabel() }}</a>\n\n <nav\n #nav\n [id]=\"navId\"\n class=\"gbt-app-shell__nav\"\n [class.gbt-app-shell__nav--open]=\"menuOpen()\"\n [class.gbt-app-shell__nav--collapsed]=\"collapsed()\"\n [attr.aria-label]=\"navLabel()\"\n tabindex=\"-1\"\n (keydown)=\"onNavKeydown($event)\"\n >\n <div class=\"gbt-app-shell__brand\">\n <ng-content select=\"[shell-brand]\" />\n </div>\n <ng-content select=\"[shell-nav]\" />\n <div class=\"gbt-app-shell__bottom\">\n @if (versionLabel()) {\n @if (!collapsed()) {\n <div class=\"gbt-app-shell__version\">v{{ versionLabel() }}</div>\n }\n }\n @if (collapsible()) {\n <button\n type=\"button\"\n class=\"gbt-app-shell__collapse-toggle\"\n [class.gbt-app-shell__collapse-toggle--collapsed]=\"collapsed()\"\n [attr.aria-expanded]=\"!collapsed()\"\n [attr.aria-label]=\"collapsed() ? expandLabel() : collapseLabel()\"\n (click)=\"toggleCollapsed()\"\n >\n <gbt-icon name=\"chevrons-left\" />\n </button>\n }\n </div>\n </nav>\n\n @if (menuOpen()) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div class=\"gbt-app-shell__scrim\" (click)=\"close()\"></div>\n }\n\n <div class=\"gbt-app-shell__body\">\n <header class=\"gbt-app-shell__header\">\n <button\n #toggle\n type=\"button\"\n class=\"gbt-app-shell__toggle\"\n [attr.aria-expanded]=\"menuOpen()\"\n [attr.aria-controls]=\"navId\"\n [attr.aria-label]=\"menuLabel()\"\n (click)=\"toggleMenu()\"\n >\n <span class=\"gbt-app-shell__burger\" aria-hidden=\"true\"></span>\n </button>\n <ng-content select=\"[shell-header]\" />\n </header>\n\n <main [id]=\"mainId\" class=\"gbt-app-shell__content\" tabindex=\"-1\">\n <ng-content />\n </main>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nlet nextNavGroupId = 0\n\n@Component({\n selector: 'gbt-app-shell-nav-group',\n standalone: true,\n imports: [Icon],\n templateUrl: './app-shell-nav-group.html',\n styleUrl: './app-shell-nav-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppShellNavGroup {\n label = input.required<string>()\n icon = input<string | null>(null)\n expanded = model(false)\n\n protected readonly panelId = `gbt-app-shell-nav-group-${++nextNavGroupId}`\n\n protected toggle(): void {\n this.expanded.update((value) => !value)\n }\n}\n","<div class=\"gbt-app-shell-nav-group\" [attr.data-expanded]=\"expanded() ? '' : null\">\n <button\n type=\"button\"\n class=\"gbt-app-shell__link gbt-app-shell-nav-group__toggle\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"panelId\"\n (click)=\"toggle()\"\n >\n @if (icon(); as name) {\n <gbt-icon [name]=\"name\" />\n }\n <span>{{ label() }}</span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-app-shell-nav-group__chevron\" />\n </button>\n <div class=\"gbt-app-shell-nav-group__panel\" [id]=\"panelId\" [hidden]=\"!expanded()\">\n <ng-content />\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n output,\n} from '@angular/core'\nimport { Icon } from '../icon/icon'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'ghost' | 'ghost-danger' | 'link'\nexport type ButtonSize = 'small' | 'medium' | 'large'\nexport type ButtonHaspopup = 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | 'true' | 'false'\n\nfunction nullableBoolean(value: boolean | string | null | undefined): boolean | null {\n return value === null || value === undefined ? null : booleanAttribute(value)\n}\n\n@Component({\n selector: 'gbt-button, a[gbtButton]',\n standalone: true,\n imports: [Icon],\n templateUrl: './button.html',\n styleUrl: './button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.gbt-button-host--block]': 'block()',\n '[class]': 'anchorHostClass()',\n '[attr.aria-disabled]': 'isAnchor && disabled() ? \"true\" : null',\n },\n})\nexport class Button {\n private readonly elementRef = inject(ElementRef<HTMLElement>)\n protected readonly isAnchor = this.elementRef.nativeElement.tagName === 'A'\n\n variant = input<ButtonVariant>('primary')\n size = input<ButtonSize>('medium')\n type = input<'button' | 'submit'>('button')\n text = input<string>('')\n iconName = input<string | null>(null)\n ariaLabel = input<string | null>(null)\n loading = input(false, { transform: booleanAttribute })\n loadingLabel = input<string>('Loading')\n disabled = input(false, { transform: booleanAttribute })\n\n pressed = input<boolean | null, boolean | string | null | undefined>(null, {\n transform: nullableBoolean,\n })\n ariaExpanded = input<boolean | null, boolean | string | null | undefined>(null, {\n transform: nullableBoolean,\n })\n ariaControls = input<string | null>(null)\n ariaHaspopup = input<ButtonHaspopup | boolean | null>(null)\n block = input(false, { transform: booleanAttribute })\n iconOnly = input(false, { transform: booleanAttribute })\n\n clicked = output<void>()\n\n protected readonly anchorHostClass = computed(() => {\n if (!this.isAnchor) {\n return ''\n }\n const classes = ['gbt-button', `gbt-button--${this.variant()}`, `gbt-button--${this.size()}`]\n if (this.iconOnly()) {\n classes.push('gbt-button--icon-only')\n }\n return classes.join(' ')\n })\n\n constructor() {\n if (!this.isAnchor) {\n return\n }\n const anchor = this.elementRef.nativeElement\n const swallowWhenDisabled = (event: Event): void => {\n if (this.disabled()) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n anchor.addEventListener('click', swallowWhenDisabled, true)\n anchor.addEventListener('auxclick', swallowWhenDisabled, true)\n\n let consumerTabindex: string | null | undefined\n effect(() => {\n if (this.disabled()) {\n if (consumerTabindex === undefined) {\n consumerTabindex = anchor.getAttribute('tabindex')\n }\n anchor.setAttribute('tabindex', '-1')\n } else if (consumerTabindex !== undefined) {\n if (consumerTabindex === null) {\n anchor.removeAttribute('tabindex')\n } else {\n anchor.setAttribute('tabindex', consumerTabindex)\n }\n consumerTabindex = undefined\n }\n })\n\n inject(DestroyRef).onDestroy(() => {\n anchor.removeEventListener('click', swallowWhenDisabled, true)\n anchor.removeEventListener('auxclick', swallowWhenDisabled, true)\n })\n }\n\n protected handleClick(): void {\n if (!this.disabled() && !this.loading()) {\n this.clicked.emit()\n }\n }\n}\n","@if (isAnchor) {\n @if (iconName()) {\n <gbt-icon [name]=\"iconName()!\" aria-hidden=\"true\" />\n }\n <ng-content />\n} @else {\n <button\n [type]=\"type()\"\n class=\"gbt-button gbt-button--{{ variant() }} gbt-button--{{ size() }}\"\n [class.gbt-button--icon-only]=\"iconOnly()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.aria-pressed]=\"pressed()\"\n [attr.aria-expanded]=\"ariaExpanded()\"\n [attr.aria-controls]=\"ariaControls()\"\n [attr.aria-haspopup]=\"ariaHaspopup()\"\n (click)=\"handleClick()\"\n >\n @if (iconName()) {\n <gbt-icon [name]=\"iconName()!\" aria-hidden=\"true\" />\n }\n @if (loading()) {\n <span class=\"gbt-button__spinner\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">{{ loadingLabel() }}</span>\n }\n @if (text()) {\n <span>{{ text() }}</span>\n }\n </button>\n}\n","import { DestroyRef, inject, signal } from '@angular/core'\n\nexport type CopyStatus = 'idle' | 'copied' | 'failed'\n\nexport type CopyValue = string | (() => string)\n\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n if (typeof navigator !== 'undefined' && typeof navigator.clipboard?.writeText === 'function') {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // Refused (permissions, focus, insecure context): try the legacy path below.\n }\n return legacyCopy(text)\n}\n\nfunction legacyCopy(text: string): boolean {\n if (typeof document === 'undefined' || typeof document.execCommand !== 'function') {\n return false\n }\n const active = document.activeElement instanceof HTMLElement ? document.activeElement : null\n const selection = document.getSelection()\n const savedRange =\n selection && selection.rangeCount > 0 ? selection.getRangeAt(0).cloneRange() : null\n\n const area = document.createElement('textarea')\n area.value = text\n area.readOnly = true\n area.tabIndex = -1\n area.setAttribute('aria-hidden', 'true')\n area.style.cssText =\n 'position:fixed;top:0;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none;'\n const host = active?.closest('dialog, [role=\"dialog\"]') ?? document.body\n host.appendChild(area)\n\n let copied: boolean\n try {\n area.focus({ preventScroll: true })\n area.select()\n area.setSelectionRange(0, text.length)\n copied = document.execCommand('copy')\n } catch {\n copied = false\n } finally {\n area.remove()\n active?.focus({ preventScroll: true })\n if (selection && savedRange) {\n selection.removeAllRanges()\n selection.addRange(savedRange)\n }\n }\n return copied\n}\n\nexport function selectContents(element: HTMLElement | null | undefined): void {\n const selection = typeof window === 'undefined' ? null : window.getSelection()\n if (!element || !selection) {\n return\n }\n const range = document.createRange()\n range.selectNodeContents(element)\n selection.removeAllRanges()\n selection.addRange(range)\n}\n\nexport interface CopyOutcome {\n copied: boolean\n text: string\n}\n\nexport class ClipboardFeedback {\n readonly status = signal<CopyStatus>('idle')\n\n private timer: ReturnType<typeof setTimeout> | null = null\n private destroyed = false\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.destroyed = true\n this.clearTimer()\n })\n }\n\n async copy(\n value: CopyValue,\n feedbackMs: number,\n selectTarget?: HTMLElement | null,\n ): Promise<CopyOutcome | null> {\n let text = ''\n let copied: boolean\n try {\n text = typeof value === 'function' ? value() : value\n copied = await copyToClipboard(text)\n } catch {\n copied = false\n }\n if (this.destroyed) {\n return null\n }\n if (!copied) {\n selectContents(selectTarget)\n }\n this.show(copied ? 'copied' : 'failed', copied ? feedbackMs : feedbackMs * 2)\n return { copied, text }\n }\n\n reset(): void {\n this.clearTimer()\n this.status.set('idle')\n }\n\n private show(status: CopyStatus, durationMs: number): void {\n this.clearTimer()\n this.status.set(status)\n this.timer = setTimeout(() => {\n this.timer = null\n this.status.set('idle')\n }, durationMs)\n }\n\n private clearTimer(): void {\n if (this.timer !== null) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n input,\n output,\n viewChild,\n} from '@angular/core'\nimport { ClipboardFeedback } from '../copy-button/clipboard'\nimport { Icon } from '../icon/icon'\n\nexport type BadgeVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info'\nexport type BadgeAppearance = 'filled' | 'outline'\nexport type BadgeSize = 'md' | 'sm'\n\n@Component({\n selector: 'gbt-badge',\n standalone: true,\n imports: [Icon],\n templateUrl: './badge.html',\n styleUrl: './badge.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.gbt-badge-host--truncate]': 'truncate()',\n '[style.max-width]': 'maxWidth()',\n '[attr.hidden]': 'visible() ? null : \"\"',\n },\n})\nexport class Badge {\n variant = input<BadgeVariant>('neutral')\n icon = input<string>()\n appearance = input<BadgeAppearance>('filled')\n size = input<BadgeSize>('md')\n truncate = input(false, { transform: booleanAttribute })\n tabularNums = input(false, { transform: booleanAttribute })\n\n mono = input(false, { transform: booleanAttribute })\n maxWidth = input<string | null>(null)\n fullText = input<string | null>(null)\n\n copyable = input(false, { transform: booleanAttribute })\n copyValue = input<string | null>(null)\n copyLabel = input('Copy')\n copiedText = input('Copied')\n failedText = input('Copy failed')\n feedbackMs = input(2000)\n\n value = input<number | null>(null)\n max = input<number | null>(null)\n hideZero = input(false, { transform: booleanAttribute })\n label = input<string | null>(null)\n\n copied = output<string>()\n copyFailed = output<void>()\n\n protected readonly clipboard = new ClipboardFeedback()\n private readonly content = viewChild<ElementRef<HTMLElement>>('content')\n\n protected readonly hasValue = computed(() => this.value() !== null)\n\n private readonly count = computed(() => {\n const value = this.value()\n if (value === null) {\n return null\n }\n return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0\n })\n\n protected readonly displayText = computed(() => {\n const count = this.count()\n if (count === null) {\n return ''\n }\n const max = this.max()\n return max !== null && count > max ? `${max}+` : String(count)\n })\n\n protected readonly visible = computed(() => {\n const count = this.count()\n return !(this.hideZero() && count === 0)\n })\n\n protected readonly glyph = computed(() => {\n switch (this.clipboard.status()) {\n case 'copied':\n return 'check'\n case 'failed':\n return 'alert-circle'\n default:\n return 'copy'\n }\n })\n\n protected readonly statusText = computed(() => {\n switch (this.clipboard.status()) {\n case 'copied':\n return this.copiedText()\n case 'failed':\n return this.failedText()\n default:\n return ''\n }\n })\n\n protected async copy(): Promise<void> {\n const element = this.content()?.nativeElement\n const value = this.copyValue() ?? element?.textContent?.trim() ?? ''\n const outcome = await this.clipboard.copy(value, this.feedbackMs(), element)\n if (!outcome) {\n return\n }\n if (outcome.copied) {\n this.copied.emit(outcome.text)\n } else {\n this.copyFailed.emit()\n }\n }\n}\n","<span\n class=\"gbt-badge\"\n [class.gbt-badge--truncate]=\"truncate()\"\n [class.gbt-badge--tabular]=\"tabularNums()\"\n [class.gbt-badge--mono]=\"mono()\"\n [attr.data-variant]=\"variant()\"\n [attr.data-appearance]=\"appearance() === 'outline' ? 'outline' : null\"\n [attr.data-size]=\"size() === 'sm' ? 'sm' : null\"\n>\n @if (icon(); as name) {\n <gbt-icon [name]=\"name\" class=\"gbt-badge__icon\" aria-hidden=\"true\" />\n }\n <!-- prettier-ignore -->\n <span #content class=\"gbt-badge__label\" [attr.title]=\"fullText()\">@if (hasValue()) {{{ displayText() }}@if (label(); as description) {<span class=\"sr-only\"> {{ description }}</span>}} @else {<ng-content />}</span>\n @if (copyable()) {\n <button\n type=\"button\"\n class=\"gbt-badge__copy\"\n [attr.aria-label]=\"copyLabel()\"\n [attr.data-status]=\"clipboard.status()\"\n (click)=\"copy()\"\n >\n <gbt-icon [name]=\"glyph()\" />\n </button>\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\">{{ statusText() }}</span>\n }\n</span>\n","export interface Scale<T> {\n map(value: T): number\n invert(pixel: number): T\n readonly domain: [T, T]\n readonly range: [number, number]\n}\n\nexport function linearScale(domain: [number, number], range: [number, number]): Scale<number> {\n const [d0, d1] = domain\n const [r0, r1] = range\n const span = d1 - d0\n\n const ratio = span === 0 ? 0 : (r1 - r0) / span\n return {\n domain,\n range,\n map: (value) => r0 + (value - d0) * ratio,\n invert: (pixel) => (ratio === 0 ? d0 : d0 + (pixel - r0) / ratio),\n }\n}\n\nexport function timeScale(domain: [Date, Date], range: [number, number]): Scale<Date> {\n const numeric = linearScale([domain[0].getTime(), domain[1].getTime()], range)\n return {\n domain,\n range,\n map: (value) => numeric.map(value.getTime()),\n invert: (pixel) => new Date(numeric.invert(pixel)),\n }\n}\n\nexport interface BandScale {\n map(value: string): number\n invert(pixel: number): string | null\n readonly bandwidth: number\n readonly domain: string[]\n readonly range: [number, number]\n}\n\nexport function bandScale(domain: string[], range: [number, number], padding = 0): BandScale {\n const [r0, r1] = range\n const step = domain.length === 0 ? 0 : (r1 - r0) / domain.length\n\n const gutter = Math.min(Math.max(padding, 0), 1)\n const bandwidth = step * (1 - gutter)\n return {\n domain,\n range,\n bandwidth,\n map: (value) => {\n const index = domain.indexOf(value)\n\n return index === -1 ? Number.NaN : r0 + index * step\n },\n invert: (pixel) => {\n if (step === 0) return null\n const index = Math.floor((pixel - r0) / step)\n return index >= 0 && index < domain.length ? domain[index] : null\n },\n }\n}\n","export function niceTicks(min: number, max: number, count: number): number[] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return []\n\n if (min === max) return [min]\n\n if (max < min) return niceTicks(max, min, count)\n\n const rawStep = (max - min) / Math.max(1, count)\n const magnitude = 10 ** Math.floor(Math.log10(rawStep))\n const normalized = rawStep / magnitude\n const step = magnitude * (normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10)\n\n const first = Math.floor(min / step) * step\n const last = Math.ceil(max / step) * step\n\n const decimals = Math.max(0, -Math.floor(Math.log10(step)))\n\n const ticks: number[] = []\n\n for (let value = first; value <= last + step / 1e9; value += step) {\n ticks.push(Number(value.toFixed(decimals)))\n }\n return ticks\n}\n\nexport type TimeUnit = 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'\n\nexport interface TimeTicks {\n readonly values: Date[]\n readonly unit: TimeUnit\n format(date: Date, locale: string): string\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\n\nconst STEPS: { ms: number; unit: TimeUnit; months?: number }[] = [\n { ms: SECOND, unit: 'second' },\n { ms: 5 * SECOND, unit: 'second' },\n { ms: 15 * SECOND, unit: 'second' },\n { ms: 30 * SECOND, unit: 'second' },\n { ms: MINUTE, unit: 'minute' },\n { ms: 5 * MINUTE, unit: 'minute' },\n { ms: 15 * MINUTE, unit: 'minute' },\n { ms: 30 * MINUTE, unit: 'minute' },\n { ms: HOUR, unit: 'hour' },\n { ms: 3 * HOUR, unit: 'hour' },\n { ms: 6 * HOUR, unit: 'hour' },\n { ms: 12 * HOUR, unit: 'hour' },\n { ms: DAY, unit: 'day' },\n { ms: 2 * DAY, unit: 'day' },\n { ms: 7 * DAY, unit: 'day' },\n { ms: 30 * DAY, unit: 'month', months: 1 },\n { ms: 90 * DAY, unit: 'month', months: 3 },\n { ms: 365 * DAY, unit: 'year', months: 12 },\n]\n\nconst FORMATS: Record<TimeUnit, Intl.DateTimeFormatOptions> = {\n second: { hour: '2-digit', minute: '2-digit', second: '2-digit' },\n minute: { hour: '2-digit', minute: '2-digit' },\n hour: { hour: '2-digit', minute: '2-digit' },\n day: { day: '2-digit', month: '2-digit' },\n month: { month: 'short', year: 'numeric' },\n year: { year: 'numeric' },\n}\n\nconst MIN_PIXELS_PER_TICK = 60\n\nexport function timeTicks(start: Date, end: Date, pixelWidth: number): TimeTicks {\n const span = end.getTime() - start.getTime()\n const makeFormatter = (unit: TimeUnit) => (date: Date, locale: string) =>\n new Intl.DateTimeFormat(locale, { ...FORMATS[unit], timeZone: 'UTC' }).format(date)\n\n if (span <= 0) {\n return { values: [start], unit: 'day', format: makeFormatter('day') }\n }\n\n const maxTicks = Math.max(2, Math.floor(pixelWidth / MIN_PIXELS_PER_TICK))\n\n const coarsest = STEPS[STEPS.length - 1]\n const chosen = STEPS.find((step) => span / step.ms + 1 <= maxTicks) ?? {\n ...coarsest,\n months: coarsest.months! * Math.max(1, Math.ceil((span / coarsest.ms + 1) / maxTicks)),\n }\n\n const values: Date[] = []\n if (chosen.months) {\n const step = chosen.months\n const cursor =\n step >= 12\n ? new Date(Date.UTC(Math.floor(start.getUTCFullYear() / (step / 12)) * (step / 12), 0, 1))\n : new Date(\n Date.UTC(start.getUTCFullYear(), Math.floor(start.getUTCMonth() / step) * step, 1),\n )\n while (cursor.getTime() < start.getTime()) cursor.setUTCMonth(cursor.getUTCMonth() + step)\n while (cursor.getTime() <= end.getTime()) {\n values.push(new Date(cursor))\n cursor.setUTCMonth(cursor.getUTCMonth() + step)\n }\n } else {\n const first = Math.ceil(start.getTime() / chosen.ms) * chosen.ms\n for (let t = first; t <= end.getTime(); t += chosen.ms) {\n values.push(new Date(t))\n }\n }\n\n if (values.length === 0) values.push(start)\n\n return { values, unit: chosen.unit, format: makeFormatter(chosen.unit) }\n}\n","const MAX_ENTRIES = 100\nconst cache = new Map<string, unknown>()\n\nexport function cachedIntl<T>(\n kind: string,\n locale: string,\n options: object | undefined,\n create: () => T,\n): T {\n const key = `${kind}|${locale}|${options === undefined ? '' : JSON.stringify(options)}`\n const hit = cache.get(key)\n if (hit !== undefined) return hit as T\n if (cache.size >= MAX_ENTRIES) cache.clear()\n const created = create()\n cache.set(key, created)\n return created\n}\n","import { cachedIntl } from './intl-cache'\n\nexport function formatNumber(value: number, locale: string, decimals?: number): string {\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value)\n}\n\nexport function formatCompact(value: number, locale: string): string {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(value)\n}\n\nexport interface FormatDurationOptions {\n days?: boolean\n}\n\nfunction dayLabel(locale: string): string {\n return cachedIntl('day-label', locale, undefined, () => {\n const parts = new Intl.NumberFormat(locale, {\n style: 'unit',\n unit: 'day',\n unitDisplay: 'narrow',\n }).formatToParts(1)\n return parts.find((part) => part.type === 'unit')?.value ?? 'd'\n })\n}\n\nexport function formatDuration(\n ms: number,\n locale: string,\n options: FormatDurationOptions = {},\n): string {\n if (ms < 1000) return `${formatNumber(Math.round(ms), locale)} ms`\n\n const totalSeconds = Math.round(ms / 1000)\n const num = (value: number) => formatNumber(value, locale)\n\n if (options.days && totalSeconds >= 86400) {\n const days = Math.floor(totalSeconds / 86400)\n const hours = Math.floor((totalSeconds % 86400) / 3600)\n const unit = dayLabel(locale)\n return hours > 0 ? `${num(days)} ${unit} ${num(hours)} h` : `${num(days)} ${unit}`\n }\n\n const hours = Math.floor(totalSeconds / 3600)\n const minutes = Math.floor((totalSeconds % 3600) / 60)\n const seconds = totalSeconds % 60\n\n if (hours > 0) return minutes > 0 ? `${num(hours)} h ${num(minutes)} min` : `${num(hours)} h`\n if (minutes > 0)\n return seconds > 0 ? `${num(minutes)} min ${num(seconds)} s` : `${num(minutes)} min`\n return `${num(seconds)} s`\n}\n\nexport function formatPercent(ratio: number, locale: string, decimals = 0): string {\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(ratio)\n}\n","export const NO_VALUE = '—'\n","import { cachedIntl } from './intl-cache'\nimport { NO_VALUE } from './no-value'\n\nexport interface FormatBytesOptions {\n base?: 1000 | 1024\n decimals?: number\n binaryUnits?: 'iec' | 'legacy'\n}\n\nconst NBSP = '\\u00a0'\n\nconst UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte', 'terabyte', 'petabyte'] as const\n\nfunction siLabels(locale: string): string[] {\n return cachedIntl('bytes-labels', locale, undefined, () =>\n UNITS.map((unit) => {\n const parts = new Intl.NumberFormat(locale, {\n style: 'unit',\n unit,\n unitDisplay: 'narrow',\n }).formatToParts(1)\n return parts.find((part) => part.type === 'unit')?.value ?? unit\n }),\n )\n}\n\nconst IEC_SYMBOLS = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB']\n\nfunction label(locale: string, rank: number, options: FormatBytesOptions): string {\n const si = siLabels(locale)[rank]\n if (rank === 0 || options.base === 1000) return si\n const capital = si.charAt(0).toUpperCase()\n if (options.binaryUnits === 'legacy') return capital + si.slice(1)\n return /^\\p{Script=Latin}/u.test(si) ? `${capital}i${si.slice(1)}` : IEC_SYMBOLS[rank]\n}\n\nfunction round(value: number, decimals: number): number {\n const factor = 10 ** decimals\n return Math.round(value * factor) / factor\n}\n\nexport function formatBytes(\n bytes: number,\n locale: string,\n options: FormatBytesOptions = {},\n): string {\n if (!Number.isFinite(bytes)) return NO_VALUE\n const base = options.base === 1000 ? 1000 : 1024\n const requested = Math.trunc(options.decimals ?? 1)\n const decimals = Number.isFinite(requested) ? Math.max(0, Math.min(20, requested)) : 1\n const last = UNITS.length - 1\n\n let value = Math.abs(bytes)\n let rank = 0\n while (value >= base && rank < last) {\n value /= base\n rank++\n }\n let shown = round(value, rank === 0 ? 0 : decimals)\n if (shown >= base && rank < last) {\n shown = round(shown / base, decimals)\n rank++\n }\n\n const signed = bytes < 0 && shown !== 0 ? -shown : shown\n const number = cachedIntl(\n 'bytes-number',\n locale,\n { decimals: rank === 0 ? 0 : decimals },\n () =>\n new Intl.NumberFormat(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: rank === 0 ? 0 : decimals,\n }),\n ).format(signed)\n return `${number}${NBSP}${label(locale, rank, { ...options, base })}`\n}\n","import { cachedIntl } from './intl-cache'\nimport { NO_VALUE } from './no-value'\n\nexport type DateInput = Date | string | number\n\nexport interface FormatRelativeTimeOptions {\n style?: 'long' | 'short' | 'narrow'\n numeric?: 'auto' | 'always'\n maxUnit?: 'hour' | 'day' | 'week' | 'month'\n absoluteAfterDays?: number\n timeZone?: string\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\nconst WEEK = 7 * DAY\nconst MONTH = 30 * DAY\nconst YEAR = 365 * DAY\n\nconst RANKS: [Intl.RelativeTimeFormatUnit, number, number][] = [\n ['second', SECOND, MINUTE],\n ['minute', MINUTE, HOUR],\n ['hour', HOUR, DAY],\n ['day', DAY, WEEK],\n ['week', WEEK, MONTH],\n ['month', MONTH, YEAR],\n ['year', YEAR, Infinity],\n]\n\nconst NOW_WINDOW = 10 * SECOND\n\nfunction toTime(value: DateInput): number {\n return value instanceof Date ? value.getTime() : new Date(value).getTime()\n}\n\nfunction relativeFormat(locale: string, style: string, numeric: string): Intl.RelativeTimeFormat {\n return cachedIntl(\n 'relative',\n locale,\n { style, numeric },\n () =>\n new Intl.RelativeTimeFormat(locale, {\n style: style as Intl.RelativeTimeFormatStyle,\n numeric: numeric as Intl.RelativeTimeFormatNumeric,\n }),\n )\n}\n\nexport function formatRelativeTime(\n date: DateInput | null | undefined,\n locale: string,\n now: DateInput = Date.now(),\n options: FormatRelativeTimeOptions = {},\n): string {\n if (date === null || date === undefined) return ''\n const time = toTime(date)\n const reference = toTime(now)\n if (Number.isNaN(time) || Number.isNaN(reference)) return NO_VALUE\n\n const diff = time - reference\n const gap = Math.abs(diff)\n const sign = diff < 0 ? -1 : 1\n const style = options.style ?? 'long'\n\n if (options.absoluteAfterDays !== undefined && gap >= options.absoluteAfterDays * DAY) {\n return formatDateTime(time, locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n ...(options.timeZone ? { timeZone: options.timeZone } : {}),\n })\n }\n\n if (gap < NOW_WINDOW) return relativeFormat(locale, style, 'auto').format(0, 'second')\n\n const numeric = options.numeric ?? 'auto'\n const rtf = relativeFormat(locale, style, numeric)\n for (const [unit, size, below] of RANKS) {\n if (gap < below || unit === options.maxUnit) {\n return rtf.format(sign * Math.trunc(gap / size), unit)\n }\n }\n return rtf.format(sign * Math.trunc(gap / YEAR), 'year')\n}\n\nconst FIELD_OPTIONS = [\n 'dateStyle',\n 'timeStyle',\n 'weekday',\n 'era',\n 'year',\n 'month',\n 'day',\n 'dayPeriod',\n 'hour',\n 'minute',\n 'second',\n 'fractionalSecondDigits',\n 'timeZoneName',\n] as const\n\nfunction selectsFields(options: Intl.DateTimeFormatOptions | undefined): boolean {\n return options !== undefined && FIELD_OPTIONS.some((field) => options[field] !== undefined)\n}\n\nexport function formatDateTime(\n date: DateInput | null | undefined,\n locale: string,\n options?: Intl.DateTimeFormatOptions,\n): string {\n if (date === null || date === undefined) return ''\n const time = toTime(date)\n if (Number.isNaN(time)) return NO_VALUE\n const resolved: Intl.DateTimeFormatOptions = selectsFields(options)\n ? (options as Intl.DateTimeFormatOptions)\n : { dateStyle: 'medium' as const, timeStyle: 'short' as const, ...options }\n return cachedIntl(\n 'datetime',\n locale,\n resolved,\n () => new Intl.DateTimeFormat(locale, resolved),\n ).format(time)\n}\n","export function computeInitials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean)\n if (words.length === 0) return ''\n if (words.length === 1) return words[0].slice(0, 2).toUpperCase()\n return (words[0][0] + words[words.length - 1][0]).toUpperCase()\n}\n","import { computed, signal, type Signal, type WritableSignal } from '@angular/core'\nimport { cachedIntl } from './intl-cache'\nimport type { ListToolbarSortOption } from '../components/molecules/list-toolbar/list-toolbar'\n\nexport type ListToolbarDirection = 'asc' | 'desc'\n\nexport type ListToolbarSortValue = string | number | boolean | Date | null | undefined\n\nexport interface ListToolbarStateConfig<K extends string> {\n sortOptions?: ListToolbarSortOption<K>[]\n defaultSort?: K\n defaultDirection?: ListToolbarDirection\n initialSearch?: string\n}\n\nexport interface ListToolbarAccessors<T, K extends string> {\n text?: (item: T) => string | readonly (string | null | undefined)[] | null | undefined\n matches?: (item: T, query: string) => boolean\n sortBy?: Partial<Record<K, (item: T) => ListToolbarSortValue>>\n compare?: (a: T, b: T, key: K) => number\n locale?: string\n}\n\nexport interface ListToolbarState<K extends string = string> {\n readonly search: WritableSignal<string>\n readonly sortValue: WritableSignal<K>\n readonly direction: WritableSignal<ListToolbarDirection>\n readonly sortOptions: ListToolbarSortOption<K>[]\n readonly dirty: Signal<boolean>\n reset(): void\n apply<T>(items: readonly T[], accessors: ListToolbarAccessors<T, K>): T[]\n filtered<T>(source: () => readonly T[], accessors: ListToolbarAccessors<T, K>): Signal<T[]>\n}\n\nfunction normalise(value: ListToolbarSortValue): string | number | null {\n if (value === null || value === undefined) return null\n const primitive =\n value instanceof Date ? value.getTime() : typeof value === 'boolean' ? +value : value\n if (typeof primitive === 'number') return Number.isFinite(primitive) ? primitive : null\n return primitive\n}\n\nexport function createListToolbarState<K extends string = string>(\n config: ListToolbarStateConfig<K> = {},\n): ListToolbarState<K> {\n const sortOptions = config.sortOptions ?? []\n const defaultSort = config.defaultSort ?? sortOptions[0]?.value ?? ('' as K)\n const defaultDirection = config.defaultDirection ?? 'asc'\n const initialSearch = config.initialSearch ?? ''\n\n const search = signal(initialSearch)\n const sortValue = signal<K>(defaultSort)\n const direction = signal<ListToolbarDirection>(defaultDirection)\n const dirty = computed(\n () =>\n search() !== initialSearch || sortValue() !== defaultSort || direction() !== defaultDirection,\n )\n\n const apply = <T>(items: readonly T[], accessors: ListToolbarAccessors<T, K>): T[] => {\n const query = search().trim().toLowerCase()\n const matches =\n accessors.matches ??\n ((item: T, q: string) => {\n const text = accessors.text?.(item)\n const texts = Array.isArray(text) ? text : [text]\n return texts.some((entry) => typeof entry === 'string' && entry.toLowerCase().includes(q))\n })\n const filtered = query ? items.filter((item) => matches(item, query)) : [...items]\n\n const key = sortValue()\n const sign = direction() === 'asc' ? 1 : -1\n\n if (accessors.compare) {\n const compare = accessors.compare\n const sorted = filtered.sort((a, b) => compare(a, b, key))\n return sign === 1 ? sorted : sorted.reverse()\n }\n\n const read = accessors.sortBy?.[key]\n if (!read) return filtered\n let collator: Intl.Collator | undefined\n const text = (left: string, right: string) => {\n collator ??= cachedIntl(\n 'collator',\n accessors.locale ?? '',\n undefined,\n () => new Intl.Collator(accessors.locale, { numeric: true, sensitivity: 'accent' }),\n )\n return collator.compare(left, right)\n }\n return filtered.sort((a, b) => {\n const left = normalise(read(a))\n const right = normalise(read(b))\n if (left === null || right === null) return left === right ? 0 : left === null ? 1 : -1\n if (typeof left === 'number' && typeof right === 'number') {\n return sign * (left < right ? -1 : left > right ? 1 : 0)\n }\n return sign * text(String(left), String(right))\n })\n }\n\n return {\n search,\n sortValue,\n direction,\n sortOptions,\n dirty,\n reset: () => {\n search.set(initialSearch)\n sortValue.set(defaultSort)\n direction.set(defaultDirection)\n },\n apply,\n filtered: (source, accessors) => computed(() => apply(source(), accessors)),\n }\n}\n","export interface Point {\n x: number\n y: number\n}\n\nconst round = (n: number): number => Number(n.toFixed(2))\n\nexport function linePath(points: Point[]): string {\n if (points.length === 0) return ''\n return points\n .map((point, index) => `${index === 0 ? 'M' : 'L'}${round(point.x)},${round(point.y)}`)\n .join('')\n}\n\nexport function areaPath(points: Point[], baseline: number): string {\n if (points.length === 0) return ''\n const last = points[points.length - 1]\n const first = points[0]\n return `${linePath(points)}L${round(last.x)},${round(baseline)}L${round(first.x)},${round(baseline)}Z`\n}\n\nexport interface Arc {\n startAngle: number\n endAngle: number\n innerRadius: number\n outerRadius: number\n}\n\nfunction arcPoint(radius: number, angle: number): Point {\n return { x: radius * Math.sin(angle), y: -radius * Math.cos(angle) }\n}\n\nfunction point(p: Point): string {\n return `${round(p.x)},${round(p.y)}`\n}\n\nconst FULL_CIRCLE = Math.PI * 2\n\nexport function arcPath(arc: Arc): string {\n const { startAngle, endAngle, innerRadius, outerRadius } = arc\n const span = endAngle - startAngle\n if (span <= 0) return ''\n if (span >= FULL_CIRCLE - 1e-9) {\n const mid = startAngle + Math.PI\n return (\n arcPath({ startAngle, endAngle: mid, innerRadius, outerRadius }) +\n arcPath({ startAngle: mid, endAngle: startAngle + FULL_CIRCLE, innerRadius, outerRadius })\n )\n }\n\n const largeArc = span > Math.PI ? 1 : 0\n const outerStart = arcPoint(outerRadius, startAngle)\n const outerEnd = arcPoint(outerRadius, endAngle)\n const outerArc = `A${round(outerRadius)},${round(outerRadius)} 0 ${largeArc},1 ${point(outerEnd)}`\n\n if (innerRadius <= 0) {\n return `M0,0L${point(outerStart)}${outerArc}Z`\n }\n\n const innerStart = arcPoint(innerRadius, startAngle)\n const innerEnd = arcPoint(innerRadius, endAngle)\n const innerArc = `A${round(innerRadius)},${round(innerRadius)} 0 ${largeArc},0 ${point(innerStart)}`\n return `M${point(outerStart)}${outerArc}L${point(innerEnd)}${innerArc}Z`\n}\n","export function nearestIndex(sorted: number[], target: number): number {\n if (sorted.length === 0) return -1\n\n let low = 0\n let high = sorted.length - 1\n while (low < high) {\n const mid = (low + high) >> 1\n if (sorted[mid] < target) low = mid + 1\n else high = mid\n }\n\n const previous = low - 1\n if (previous < 0) return low\n return target - sorted[previous] <= sorted[low] - target ? previous : low\n}\n","export const ESTIMATED_CHAR_WIDTH = 6.5\n\nexport const LABEL_GAP = 8\n\nexport function estimateLabelWidth(label: string): number {\n return label.length * ESTIMATED_CHAR_WIDTH\n}\n","import { ChangeDetectionStrategy, Component, computed, input, linkedSignal } from '@angular/core'\nimport { computeInitials } from '../../../primitives'\n\nexport { computeInitials }\n\nexport type AvatarSize = 'sm' | 'md' | 'lg'\n\n@Component({\n selector: 'gbt-avatar',\n standalone: true,\n templateUrl: './avatar.html',\n styleUrl: './avatar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-size]': 'size()',\n },\n})\nexport class Avatar {\n name = input.required<string>()\n src = input<string | null>(null)\n size = input<AvatarSize>('md')\n\n protected readonly imageFailed = linkedSignal<string | null, boolean>({\n source: this.src,\n computation: () => false,\n })\n\n protected readonly showImage = computed(() => !!this.src() && !this.imageFailed())\n protected readonly initials = computed(() => computeInitials(this.name()))\n\n protected onImageError(): void {\n this.imageFailed.set(true)\n }\n}\n","@if (showImage()) {\n <img class=\"gbt-avatar__image\" [src]=\"src()\" [alt]=\"name()\" (error)=\"onImageError()\" />\n} @else {\n <span class=\"gbt-avatar__initials\" [attr.aria-label]=\"name()\">{{ initials() }}</span>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type SkeletonVariant = 'text' | 'circle' | 'rect'\n\n@Component({\n selector: 'gbt-skeleton',\n standalone: true,\n template: '',\n styleUrl: './skeleton.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-variant]': 'variant()',\n '[style.width]': 'width()',\n '[style.height]': 'height()',\n 'aria-hidden': 'true',\n },\n})\nexport class Skeleton {\n variant = input<SkeletonVariant>('text')\n width = input<string>('100%')\n height = input<string | null>(null)\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { Avatar } from '../../atoms/avatar/avatar'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport interface AvatarGroupItem {\n name: string\n src?: string\n}\n\n@Component({\n selector: 'gbt-avatar-group',\n standalone: true,\n imports: [Avatar, Icon],\n templateUrl: './avatar-group.html',\n styleUrl: './avatar-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onKeydown($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n})\nexport class AvatarGroup<T extends AvatarGroupItem = AvatarGroupItem> {\n private readonly elementRef = inject(ElementRef)\n\n items = input.required<T[]>()\n max = input<number>(5)\n ariaLabel = input<string>('Users')\n moreLabel = input<(count: number) => string>((count) => `${count} more`)\n activeItem = input<T | null>(null)\n\n itemClick = output<T>()\n\n protected readonly panelOpen = signal(false)\n protected readonly panelStyle = signal<{ top: string; left: string } | null>(null)\n\n protected readonly visibleItems = computed(() => this.items().slice(0, this.max()))\n protected readonly overflowItems = computed(() => this.items().slice(this.max()))\n protected readonly overflowCount = computed(() => this.overflowItems().length)\n\n protected isActive(item: T): boolean {\n return this.activeItem() === item\n }\n\n protected selectItem(item: T): void {\n this.itemClick.emit(item)\n this.panelOpen.set(false)\n }\n\n protected toggleOverflowPanel(): void {\n this.panelOpen.update((value) => !value)\n if (this.panelOpen()) {\n this.updatePanelPosition()\n }\n }\n\n protected updatePanelPosition(): void {\n if (!this.panelOpen()) {\n return\n }\n const trigger = this.elementRef.nativeElement.querySelector(\n '.gbt-avatar-group__more',\n ) as HTMLElement | null\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n this.panelStyle.set({\n top: `${rect.bottom + 6}px`,\n left: `${rect.left}px`,\n })\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.panelOpen() && !this.elementRef.nativeElement.contains(event.target)) {\n this.panelOpen.set(false)\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.panelOpen()) {\n event.preventDefault()\n event.stopPropagation()\n this.panelOpen.set(false)\n }\n }\n}\n","<ul class=\"gbt-avatar-group__list\" [attr.aria-label]=\"ariaLabel()\">\n @for (item of visibleItems(); track $index) {\n <li class=\"gbt-avatar-group__item\">\n <button\n type=\"button\"\n class=\"gbt-avatar-group__button\"\n [class.gbt-avatar-group__button--active]=\"isActive(item)\"\n [attr.aria-label]=\"item.name\"\n [attr.aria-current]=\"isActive(item) ? 'true' : null\"\n (click)=\"selectItem(item)\"\n >\n <gbt-avatar [name]=\"item.name\" [src]=\"item.src ?? null\" size=\"md\" />\n </button>\n </li>\n }\n @if (overflowCount() > 0) {\n <li class=\"gbt-avatar-group__item\">\n <button\n type=\"button\"\n class=\"gbt-avatar-group__more\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"panelOpen()\"\n [attr.aria-label]=\"moreLabel()(overflowCount())\"\n (click)=\"toggleOverflowPanel()\"\n >\n +{{ overflowCount() }}\n </button>\n </li>\n }\n</ul>\n\n@if (panelOpen() && panelStyle(); as style) {\n <ul\n class=\"gbt-avatar-group__panel\"\n role=\"menu\"\n [attr.aria-label]=\"moreLabel()(overflowCount())\"\n [style.top]=\"style.top\"\n [style.left]=\"style.left\"\n >\n @for (item of overflowItems(); track $index) {\n <li role=\"presentation\">\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"gbt-avatar-group__panel-item\"\n [attr.aria-current]=\"isActive(item) ? 'true' : null\"\n (click)=\"selectItem(item)\"\n >\n <gbt-avatar [name]=\"item.name\" [src]=\"item.src ?? null\" size=\"sm\" />\n <span class=\"gbt-avatar-group__panel-item-name\">{{ item.name }}</span>\n @if (isActive(item)) {\n <gbt-icon name=\"check\" class=\"gbt-avatar-group__panel-item-check\" aria-hidden=\"true\" />\n }\n </button>\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n input,\n output,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error' | 'neutral'\n\nexport type AlertLive = 'auto' | 'assertive' | 'polite' | 'off'\nexport type AlertSize = 'md' | 'sm'\nexport type AlertAppearance = 'default' | 'subtle'\nexport type AlertIconAlign = 'auto' | 'center' | 'start'\n\nconst ASSERTIVE_VARIANTS: ReadonlySet<AlertVariant> = new Set(['warning', 'error'])\n\nconst VARIANT_ICONS: Record<AlertVariant, string> = {\n success: 'check-circle',\n error: 'alert-circle',\n warning: 'alert-triangle',\n info: 'info',\n neutral: 'info',\n}\n\n@Component({\n selector: 'gbt-alert',\n standalone: true,\n imports: [Icon],\n templateUrl: './alert.html',\n styleUrl: './alert.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Alert {\n variant = input<AlertVariant>('info')\n dismissible = input(false, { transform: booleanAttribute })\n closeLabel = input<string>('Dismiss')\n\n live = input<AlertLive>('auto')\n heading = input<string>('')\n size = input<AlertSize>('md')\n appearance = input<AlertAppearance>('default')\n iconAlign = input<AlertIconAlign>('auto')\n\n dismissed = output<void>()\n\n protected readonly role = computed(() => {\n switch (this.live()) {\n case 'assertive':\n return 'alert'\n case 'polite':\n return 'status'\n case 'off':\n return null\n default:\n return ASSERTIVE_VARIANTS.has(this.variant()) ? 'alert' : 'status'\n }\n })\n\n protected readonly icon = computed(() => VARIANT_ICONS[this.variant()])\n}\n","<div\n class=\"gbt-alert\"\n [attr.data-variant]=\"variant()\"\n [attr.data-heading]=\"heading() ? '' : null\"\n [attr.data-size]=\"size() === 'md' ? null : size()\"\n [attr.data-appearance]=\"appearance() === 'default' ? null : appearance()\"\n [attr.data-icon-align]=\"iconAlign() === 'auto' ? null : iconAlign()\"\n [attr.role]=\"role()\"\n [attr.aria-atomic]=\"role() ? 'true' : null\"\n>\n <span class=\"gbt-alert__icon\">\n <gbt-icon [name]=\"icon()\" aria-hidden=\"true\" />\n </span>\n <div class=\"gbt-alert__content\">\n <div class=\"gbt-alert__message\">\n @if (heading()) {\n <p class=\"gbt-alert__heading\">{{ heading() }}</p>\n }\n <ng-content />\n </div>\n <div class=\"gbt-alert__actions\"><ng-content select=\"[alert-actions]\" /></div>\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"gbt-alert__close\"\n [attr.aria-label]=\"closeLabel()\"\n (click)=\"dismissed.emit()\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n }\n</div>\n","const HEX_6 = /^#?[0-9a-fA-F]{6}$/\n\nfunction normalizeHex(hex: string): string {\n if (!HEX_6.test(hex)) {\n throw new Error(\n `getReadableTextColor: expected a 6-digit hex color such as \"#dc2626\" or \"dc2626\", got ${JSON.stringify(hex)}. ` +\n 'Shorthand hex (#abc), CSS named colors, rgb()/hsl() and custom properties are not supported.',\n )\n }\n return hex.replace('#', '')\n}\n\nfunction linearizeChannel(value: number): number {\n const c = value / 255\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)\n}\n\nfunction relativeLuminance(normalizedHex: string): number {\n const r = parseInt(normalizedHex.substring(0, 2), 16)\n const g = parseInt(normalizedHex.substring(2, 4), 16)\n const b = parseInt(normalizedHex.substring(4, 6), 16)\n return 0.2126 * linearizeChannel(r) + 0.7152 * linearizeChannel(g) + 0.0722 * linearizeChannel(b)\n}\n\nfunction contrastRatio(normalizedA: string, normalizedB: string): number {\n const lA = relativeLuminance(normalizedA)\n const lB = relativeLuminance(normalizedB)\n const lighter = Math.max(lA, lB)\n const darker = Math.min(lA, lB)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\nexport function getReadableTextColor(backgroundHex: string): string {\n const background = normalizeHex(backgroundHex)\n const white = 'ffffff'\n const dark = '000000'\n return contrastRatio(background, white) >= contrastRatio(background, dark) ? '#ffffff' : '#000000'\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core'\nimport { Icon } from '../icon/icon'\nimport { getReadableTextColor } from './tag-contrast'\n\n@Component({\n selector: 'gbt-tag',\n standalone: true,\n imports: [Icon],\n templateUrl: './tag.html',\n styleUrl: './tag.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tag {\n color = input.required<string>()\n removable = input<boolean>(false)\n removeLabel = input<string>('Remove')\n disabled = input<boolean>(false)\n\n removed = output<void>()\n\n protected readonly textColor = computed(() => getReadableTextColor(this.color()))\n\n protected onRemoveClick(event: MouseEvent): void {\n event.stopPropagation()\n this.removed.emit()\n }\n}\n","<span\n class=\"gbt-tag\"\n [style.background]=\"color()\"\n [style.color]=\"textColor()\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n>\n <span class=\"gbt-tag__label\"><ng-content /></span>\n @if (removable()) {\n <button\n type=\"button\"\n class=\"gbt-tag__remove\"\n [attr.aria-label]=\"removeLabel()\"\n (click)=\"onRemoveClick($event)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n }\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n input,\n viewChild,\n} from '@angular/core'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type EmptyStateIllustration =\n 'folder' | 'star' | 'checklist' | 'merge' | 'pipeline' | 'tag' | 'book' | 'server'\n\nexport type EmptyStateSize = 'default' | 'compact'\nexport type EmptyStateTone = 'default' | 'error'\nexport type EmptyStateHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6\n\n@Component({\n selector: 'gbt-empty-state',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './empty-state.html',\n styleUrl: './empty-state.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyState {\n illustration = input<EmptyStateIllustration | null | undefined>(null)\n heading = input.required<string>()\n message = input<string>('')\n\n icon = input<string | null>(null)\n size = input<EmptyStateSize>('default')\n tone = input<EmptyStateTone>('default')\n headingLevel = input<EmptyStateHeadingLevel | null>(null)\n headingId = input<string | null>(null)\n headingFocusable = input(false, { transform: booleanAttribute })\n\n private readonly headingEl = viewChild<ElementRef<HTMLElement>>('headingEl')\n\n focusHeading(): void {\n this.headingEl()?.nativeElement.focus()\n }\n}\n","<div\n class=\"gbt-empty-state\"\n [attr.data-size]=\"size() === 'default' ? null : size()\"\n [attr.data-tone]=\"tone() === 'default' ? null : tone()\"\n>\n @if (illustration()) {\n <div class=\"gbt-empty-state__illustration\" aria-hidden=\"true\">\n @switch (illustration()) {\n @case ('folder') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"16\" y=\"38\" width=\"64\" height=\"40\" rx=\"4\" />\n <path d=\"M16 38 v-8a4 4 0 0 1 4-4h16l8 8h28a4 4 0 0 1 4 4\" />\n <rect\n x=\"34\"\n y=\"14\"\n width=\"16\"\n height=\"20\"\n rx=\"2\"\n transform=\"rotate(-8 42 24)\"\n opacity=\"0.55\"\n />\n <rect\n x=\"50\"\n y=\"16\"\n width=\"16\"\n height=\"20\"\n rx=\"2\"\n transform=\"rotate(6 58 26)\"\n opacity=\"0.55\"\n />\n </svg>\n }\n @case ('star') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path\n d=\"M48,18 L55.6,37.5 L76.5,38.7 L60.4,52 L65.6,72.3 L48,61 L30.4,72.3 L35.6,52 L19.5,38.7 L40.4,37.5 Z\"\n />\n <path d=\"M78,14 L81,20 L78,26 L75,20 Z\" opacity=\"0.55\" />\n <path d=\"M16,64 L19,70 L16,76 L13,70 Z\" opacity=\"0.55\" />\n </svg>\n }\n @case ('checklist') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"24\" y=\"18\" width=\"48\" height=\"64\" rx=\"6\" />\n <rect x=\"38\" y=\"12\" width=\"20\" height=\"10\" rx=\"3\" />\n <line x1=\"34\" y1=\"38\" x2=\"62\" y2=\"38\" />\n <path d=\"M32 50 l4 4 l8-8\" />\n <line x1=\"46\" y1=\"52\" x2=\"62\" y2=\"52\" />\n <line x1=\"34\" y1=\"66\" x2=\"62\" y2=\"66\" opacity=\"0.55\" />\n </svg>\n }\n @case ('merge') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"24\" cy=\"22\" r=\"7\" />\n <circle cx=\"72\" cy=\"22\" r=\"7\" />\n <circle cx=\"48\" cy=\"76\" r=\"8\" />\n <path d=\"M24 29 V50 Q24 69 39 72\" />\n <path d=\"M72 29 V50 Q72 69 57 72\" />\n </svg>\n }\n @case ('pipeline') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"22\" cy=\"68\" r=\"12\" />\n <path d=\"M17 60 L29 68 L17 76 Z\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M29 58 L44 38\" />\n <circle cx=\"50\" cy=\"30\" r=\"10\" />\n <path d=\"M56 38 L70 54\" />\n <circle cx=\"76\" cy=\"62\" r=\"10\" />\n </svg>\n }\n @case ('tag') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 20 H54 L82 48 L54 76 H18 Q14 76 14 72 V24 Q14 20 18 20 Z\" />\n <circle cx=\"34\" cy=\"36\" r=\"5\" />\n </svg>\n }\n @case ('book') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M48 26 Q34 16 16 20 V72 Q34 68 48 78 Q62 68 80 72 V20 Q62 16 48 26 Z\" />\n <line x1=\"24\" y1=\"32\" x2=\"40\" y2=\"30\" />\n <line x1=\"24\" y1=\"42\" x2=\"40\" y2=\"40\" />\n <line x1=\"56\" y1=\"30\" x2=\"72\" y2=\"32\" />\n <line x1=\"56\" y1=\"40\" x2=\"72\" y2=\"42\" />\n </svg>\n }\n @case ('server') {\n <svg\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"14\" y=\"16\" width=\"68\" height=\"26\" rx=\"5\" />\n <rect x=\"14\" y=\"54\" width=\"68\" height=\"26\" rx=\"5\" />\n <circle cx=\"26\" cy=\"29\" r=\"3\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"26\" cy=\"67\" r=\"3\" fill=\"currentColor\" stroke=\"none\" />\n <line x1=\"38\" y1=\"29\" x2=\"70\" y2=\"29\" opacity=\"0.55\" />\n <line x1=\"38\" y1=\"67\" x2=\"70\" y2=\"67\" opacity=\"0.55\" />\n </svg>\n }\n }\n </div>\n } @else if (icon()) {\n <div class=\"gbt-empty-state__icon\" aria-hidden=\"true\"><gbt-icon [name]=\"icon()!\" /></div>\n }\n @switch (headingLevel()) {\n @case (1) {\n <h1\n #headingEl\n class=\"gbt-empty-state__heading\"\n [attr.id]=\"headingId()\"\n [attr.tabindex]=\"headingFocusable() ? -1 : null\"\n >\n <ng-container *ngTemplateOutlet=\"headingText\" />\n </h1>\n }\n @case (2) {\n <h2\n #headingEl\n class=\"gbt-empty-state__heading\"\n [attr.id]=\"headingId()\"\n [attr.tabindex]=\"headingFocusable() ? -1 : null\"\n >\n <ng-container *ngTemplateOutlet=\"headingText\" />\n </h2>\n }\n @case (3) {\n <h3\n #headingEl\n class=\"gbt-empty-state__heading\"\n [attr.id]=\"headingId()\"\n [attr.tabindex]=\"headingFocusable() ? -1 : null\"\n >\n <ng-container *ngTemplateOutlet=\"headingText\" />\n </h3>\n }\n @case (4) {\n <h4\n #headingEl\n class=\"gbt-empty-state__heading\"\n [attr.id]=\"headingId()\"\n [attr.tabindex]=\"headingFocusable() ? -1 : null\"\n >\n <ng-container *ngTemplateOutlet=\"headingText\" />\n </h4>\n }\n @case (5) {\n <h5\n #headingEl\n class=\"gbt-empty-state__heading\"\n [attr.id]=\"headingId()\"\n [attr.tabindex]=\"headingFocusable() ? -1 : null\"\n >\n <ng-container *ngTemplateOutlet=\"headingText\" />\n </h5>\n }\n @case (6) {\n <h6\n #headingEl\n class=\"gbt-empty-state__heading\"\n [attr.id]=\"headingId()\"\n [attr.tabindex]=\"headingFocusable() ? -1 : null\"\n >\n <ng-container *ngTemplateOutlet=\"headingText\" />\n </h6>\n }\n @default {\n <p\n #headingEl\n class=\"gbt-empty-state__heading\"\n [attr.id]=\"headingId()\"\n [attr.tabindex]=\"headingFocusable() ? -1 : null\"\n >\n <ng-container *ngTemplateOutlet=\"headingText\" />\n </p>\n }\n }\n @if (message()) {\n <p class=\"gbt-empty-state__message\">{{ message() }}</p>\n }\n <div class=\"gbt-empty-state__action\">\n <ng-content />\n </div>\n</div>\n<ng-template #headingText>{{ heading() }}</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../icon/icon'\n\nlet nextInputId = 0\n\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'url'\nexport type InputSize = 'md' | 'sm'\nexport type InputInputmode =\n 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'\nexport type InputAutocapitalize = 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters'\nexport type InputEnterkeyhint = 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'\n\n@Component({\n selector: 'gbt-input',\n standalone: true,\n imports: [Icon],\n templateUrl: './input.html',\n styleUrl: './input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GbtInput),\n multi: true,\n },\n ],\n})\nexport class GbtInput implements ControlValueAccessor {\n id = input<string>(`gbt-input-${++nextInputId}`)\n label = input<string>('')\n type = input<InputType>('text')\n required = input(false, { transform: booleanAttribute })\n disabled = input(false, { transform: booleanAttribute })\n placeholder = input<string>('')\n errorMessage = input<string | null>(null)\n autocomplete = input<string>('off')\n\n hint = input<string>('')\n hideLabel = input(false, { transform: booleanAttribute })\n size = input<InputSize>('md')\n mono = input(false, { transform: booleanAttribute })\n leadingIcon = input<string | null>(null)\n inputmode = input<InputInputmode | null>(null)\n spellcheck = input<boolean | null>(null)\n autocapitalize = input<InputAutocapitalize | null>(null)\n enterkeyhint = input<InputEnterkeyhint | null>(null)\n maxlength = input<number | null>(null)\n min = input<number | string | null>(null)\n max = input<number | string | null>(null)\n\n showPasswordLabel = input<string>('Show password')\n\n hidePasswordLabel = input<string>('Hide password')\n\n committed = output<string>()\n\n protected readonly value = signal('')\n protected readonly passwordVisible = signal(false)\n protected readonly effectiveType = computed(() => {\n if (this.type() !== 'password') {\n return this.type()\n }\n return this.passwordVisible() ? 'text' : 'password'\n })\n\n protected readonly hintId = computed(() => `${this.id()}-hint`)\n protected readonly errorId = computed(() => `${this.id()}-error`)\n protected readonly showHint = computed(() => !!this.hint() && !this.errorMessage())\n protected readonly describedBy = computed(() => {\n if (this.errorMessage()) {\n return this.errorId()\n }\n return this.showHint() ? this.hintId() : null\n })\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: string) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: string): void {\n this.value.set(value ?? '')\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value\n this.value.set(value)\n this.onChange(value)\n }\n\n protected onBlur(): void {\n this.onTouched()\n this.committed.emit(this.value())\n }\n\n protected togglePasswordVisibility(): void {\n this.passwordVisible.update((visible) => !visible)\n }\n}\n","<div\n class=\"gbt-input\"\n [class.gbt-input--sm]=\"size() === 'sm'\"\n [class.gbt-input--mono]=\"mono()\"\n [class.gbt-input--leading]=\"!!leadingIcon()\"\n>\n @if (label()) {\n <label [for]=\"id()\" [class.gbt-input__label--hidden]=\"hideLabel()\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n <div class=\"gbt-input__wrapper\">\n @if (leadingIcon(); as icon) {\n <span class=\"gbt-input__leading\" aria-hidden=\"true\">\n <gbt-icon [name]=\"icon\" />\n </span>\n }\n <input\n [id]=\"id()\"\n [type]=\"effectiveType()\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.inputmode]=\"inputmode()\"\n [attr.spellcheck]=\"spellcheck()\"\n [attr.autocapitalize]=\"autocapitalize()\"\n [attr.enterkeyhint]=\"enterkeyhint()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.min]=\"min()\"\n [attr.max]=\"max()\"\n [value]=\"value()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (type() === 'password') {\n <button\n type=\"button\"\n class=\"gbt-input__toggle\"\n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"passwordVisible() ? hidePasswordLabel() : showPasswordLabel()\"\n >\n <gbt-icon [name]=\"passwordVisible() ? 'eye-off' : 'eye'\" aria-hidden=\"true\" />\n </button>\n }\n </div>\n @if (showHint()) {\n <p [id]=\"hintId()\" class=\"gbt-input__hint\">{{ hint() }}</p>\n }\n @if (errorMessage()) {\n <p [id]=\"errorId()\" class=\"gbt-input__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","const GAP = 6\n\nexport interface FloatingPanelAnchor {\n rect: DOMRect\n bottom: number\n left: number\n}\n\n/** Returns `null` (panel closed, or trigger not in the DOM) when the caller should leave `panelStyle` untouched. */\nexport function floatingPanelAnchor(\n open: boolean,\n trigger: HTMLElement | null,\n anchorBottom?: (rect: DOMRect) => number,\n): FloatingPanelAnchor | null {\n if (!open || !trigger) {\n return null\n }\n const rect = trigger.getBoundingClientRect()\n return {\n rect,\n bottom: (anchorBottom ? anchorBottom(rect) : rect.bottom) + GAP,\n left: rect.left,\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport { Tag } from '../../atoms/tag/tag'\nimport { floatingPanelAnchor } from '../../shared/floating-panel-position'\n\nexport interface SelectOption<T = string> {\n value: T\n label: string\n icon?: string\n color?: string\n}\n\nlet nextSelectId = 0\n\n@Component({\n selector: 'gbt-select',\n standalone: true,\n imports: [Icon, Tag],\n templateUrl: './select.html',\n styleUrl: './select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onKeydown($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n '[class.gbt-select--sm]': \"size() === 'sm'\",\n '[class.gbt-select--full]': 'fullWidth()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Select),\n multi: true,\n },\n ],\n})\nexport class Select<T = string> implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef)\n\n id = input<string>(`gbt-select-${++nextSelectId}`)\n label = input<string>('')\n size = input<'md' | 'sm'>('md')\n hint = input<string>('')\n hideLabel = input(false, { transform: booleanAttribute })\n fullWidth = input(false, { transform: booleanAttribute })\n options = input.required<SelectOption<T>[]>()\n multiple = input(false, { transform: booleanAttribute })\n chips = input(false, { transform: booleanAttribute })\n placeholder = input<string>('Select…')\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n selectedCountLabel = input<(count: number) => string>((count) => `${count} selected`)\n chipRemoveLabel = input<(label: string) => string>((label) => `Remove ${label}`)\n noOptionsMessage = input<string>('No options')\n\n protected readonly open = signal(false)\n protected readonly activeIndex = signal(-1)\n protected readonly selected = signal<T[]>([])\n protected readonly panelStyle = signal<{ top: string; left: string; width: string } | null>(null)\n private readonly formDisabled = signal(false)\n\n protected readonly labelId = computed(() => `${this.id()}-label`)\n protected readonly chipsId = computed(() => `${this.id()}-chips`)\n protected readonly hintId = computed(() => `${this.id()}-hint`)\n protected readonly showHint = computed(() => !!this.hint() && !this.errorMessage())\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: T | T[] | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n writeValue(value: T | T[] | null): void {\n if (this.multiple()) {\n this.selected.set(Array.isArray(value) ? (value as T[]) : [])\n } else {\n this.selected.set(value === null || value === undefined ? [] : [value as T])\n }\n }\n\n registerOnChange(fn: (value: T | T[] | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n protected readonly selectedOptions = computed(() => {\n const selected = this.selected()\n return this.options().filter((option) => selected.includes(option.value))\n })\n\n protected readonly triggerLabel = computed(() => {\n const opts = this.selectedOptions()\n if (opts.length === 0) {\n return this.placeholder()\n }\n if (this.chips() && this.multiple()) {\n return this.placeholder()\n }\n if (this.multiple() && opts.length > 1) {\n return this.selectedCountLabel()(opts.length)\n }\n return opts[0].label\n })\n\n protected readonly chipsVisible = computed(\n () => this.chips() && this.multiple() && this.selectedOptions().length > 0,\n )\n\n protected readonly describedBy = computed(() => {\n const ids: string[] = []\n if (this.chipsVisible()) {\n ids.push(this.chipsId())\n }\n if (this.errorMessage()) {\n ids.push(`${this.id()}-error`)\n } else if (this.showHint()) {\n ids.push(this.hintId())\n }\n return ids.length > 0 ? ids.join(' ') : null\n })\n\n protected readonly triggerIcon = computed(() => {\n const opts = this.selectedOptions()\n return opts.length === 1 ? opts[0].icon : undefined\n })\n\n protected readonly activeOptionId = computed(() =>\n this.open() && this.activeIndex() >= 0 ? `${this.id()}-option-${this.activeIndex()}` : null,\n )\n\n protected readonly hasNoOptions = computed(() => this.options().length === 0)\n\n protected isSelected(value: T): boolean {\n return this.selected().includes(value)\n }\n\n protected toggleOpen(): void {\n if (this.isDisabled()) {\n return\n }\n this.open.update((value) => !value)\n if (this.open()) {\n const options = this.options()\n this.activeIndex.set(\n options.length === 0\n ? -1\n : Math.max(\n 0,\n options.findIndex((o) => this.isSelected(o.value)),\n ),\n )\n this.updatePanelPosition()\n } else {\n this.onTouched()\n }\n }\n\n protected updatePanelPosition(): void {\n const trigger = this.elementRef.nativeElement.querySelector(\n '.gbt-select__trigger',\n ) as HTMLElement | null\n const anchor = floatingPanelAnchor(this.open(), trigger, (rect) => {\n const chipRow = this.elementRef.nativeElement.querySelector(\n '.gbt-select__chips',\n ) as HTMLElement | null\n return chipRow ? Math.max(rect.bottom, chipRow.getBoundingClientRect().bottom) : rect.bottom\n })\n if (anchor) {\n this.panelStyle.set({\n top: `${anchor.bottom}px`,\n left: `${anchor.left}px`,\n width: `${anchor.rect.width}px`,\n })\n }\n }\n\n protected removeChip(value: T, index: number): void {\n if (this.isDisabled()) {\n return\n }\n const host = this.elementRef.nativeElement as HTMLElement\n const removeButtons = Array.from(\n host.querySelectorAll<HTMLElement>('.gbt-select__chips .gbt-tag__remove'),\n )\n const nextFocus =\n removeButtons[index + 1] ??\n removeButtons[index - 1] ??\n host.querySelector<HTMLElement>('.gbt-select__trigger')\n this.selectOption(value)\n nextFocus?.focus()\n }\n\n protected selectOption(value: T): void {\n if (this.multiple()) {\n const current = this.selected()\n const next = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value]\n this.selected.set(next)\n this.onChange(next)\n this.onTouched()\n } else {\n this.selected.set([value])\n this.onChange(value)\n this.open.set(false)\n this.onTouched()\n }\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target)) {\n this.open.set(false)\n this.onTouched()\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) {\n return\n }\n if (!this.open()) {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.toggleOpen()\n }\n return\n }\n const options = this.options()\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n event.stopPropagation()\n this.open.set(false)\n this.onTouched()\n break\n case 'ArrowDown':\n event.preventDefault()\n if (options.length > 0) {\n this.activeIndex.update((i) => Math.min(i + 1, options.length - 1))\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n if (options.length > 0) {\n this.activeIndex.update((i) => Math.max(i - 1, 0))\n }\n break\n case 'Enter':\n case ' ': {\n event.preventDefault()\n const active = options[this.activeIndex()]\n if (active) {\n this.selectOption(active.value)\n }\n break\n }\n }\n }\n}\n","<div class=\"gbt-select\" [class.gbt-select--disabled]=\"isDisabled()\">\n @if (label()) {\n <label\n [id]=\"labelId()\"\n [for]=\"id()\"\n class=\"gbt-select__label\"\n [class.gbt-select__label--hidden]=\"hideLabel()\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n\n <button\n type=\"button\"\n [id]=\"id()\"\n class=\"gbt-select__trigger\"\n [class.gbt-select__trigger--open]=\"open()\"\n [disabled]=\"isDisabled()\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? id() + '-listbox' : null\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n [attr.aria-labelledby]=\"label() ? labelId() + ' ' + id() : null\"\n [attr.aria-label]=\"label() ? null : placeholder() || null\"\n [attr.aria-required]=\"required() ? true : null\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n (click)=\"toggleOpen()\"\n >\n @if (triggerIcon(); as icon) {\n <gbt-icon [name]=\"icon\" class=\"gbt-select__trigger-icon\" aria-hidden=\"true\" />\n }\n <span\n class=\"gbt-select__trigger-label\"\n [class.gbt-select__trigger-label--placeholder]=\"selectedOptions().length === 0\"\n >\n {{ triggerLabel() }}\n </span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-select__chevron\" aria-hidden=\"true\" />\n </button>\n @if (chipsVisible()) {\n <div class=\"gbt-select__chips\" [id]=\"chipsId()\">\n @for (option of selectedOptions(); track option.value; let i = $index) {\n <gbt-tag\n [color]=\"option.color ?? '#6b7280'\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"chipRemoveLabel()(option.label)\"\n (removed)=\"removeChip(option.value, i)\"\n >\n {{ option.label }}\n </gbt-tag>\n }\n </div>\n }\n @if (chips() && multiple()) {\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n {{ selectedCountLabel()(selectedOptions().length) }}\n </div>\n }\n @if (open() && panelStyle(); as style) {\n @if (hasNoOptions()) {\n <div\n [id]=\"id() + '-listbox'\"\n class=\"gbt-select__panel gbt-select__empty\"\n role=\"status\"\n [style.top]=\"style.top\"\n [style.left]=\"style.left\"\n [style.width]=\"style.width\"\n >\n {{ noOptionsMessage() }}\n </div>\n } @else {\n <ul\n [id]=\"id() + '-listbox'\"\n class=\"gbt-select__panel\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || placeholder()\"\n [attr.aria-multiselectable]=\"multiple()\"\n [style.top]=\"style.top\"\n [style.left]=\"style.left\"\n [style.width]=\"style.width\"\n >\n @for (option of options(); track option.value; let i = $index) {\n <li role=\"presentation\">\n <button\n [id]=\"id() + '-option-' + i\"\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n class=\"gbt-select__option\"\n [class.gbt-select__option--selected]=\"isSelected(option.value)\"\n [class.gbt-select__option--active]=\"i === activeIndex()\"\n [attr.aria-selected]=\"isSelected(option.value)\"\n (click)=\"selectOption(option.value)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n @if (option.icon) {\n <gbt-icon [name]=\"option.icon\" class=\"gbt-select__option-icon\" aria-hidden=\"true\" />\n }\n <span class=\"gbt-select__option-label\">{{ option.label }}</span>\n @if (isSelected(option.value)) {\n <gbt-icon name=\"check\" class=\"gbt-select__option-check\" aria-hidden=\"true\" />\n }\n </button>\n </li>\n }\n </ul>\n }\n }\n @if (showHint()) {\n <p [id]=\"hintId()\" class=\"gbt-select__hint\">{{ hint() }}</p>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-select__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, effect, input, output } from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { FormControl, ReactiveFormsModule } from '@angular/forms'\nimport { GbtInput } from '../../atoms/input/input'\nimport { Select, SelectOption } from '../select/select'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport interface ListToolbarSortOption<T extends string = string> {\n value: T\n label: string\n}\n\n@Component({\n selector: 'gbt-list-toolbar',\n standalone: true,\n imports: [ReactiveFormsModule, GbtInput, Select, Icon],\n templateUrl: './list-toolbar.html',\n styleUrl: './list-toolbar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListToolbar<T extends string = string> {\n searchValue = input<string>('')\n searchLabel = input.required<string>()\n searchPlaceholder = input<string>('')\n sortOptions = input.required<ListToolbarSortOption<T>[]>()\n sortValue = input.required<T>()\n sortDirection = input<'asc' | 'desc'>('asc')\n sortLabel = input<string>('Sort by')\n directionLabel = input<string>('Reverse sort direction')\n\n searchValueChange = output<string>()\n sortValueChange = output<T>()\n sortDirectionChange = output<'asc' | 'desc'>()\n\n protected readonly searchControl = new FormControl<string>('', { nonNullable: true })\n protected readonly sortControl = new FormControl<T | null>(null)\n\n constructor() {\n effect(() => this.searchControl.setValue(this.searchValue(), { emitEvent: false }))\n effect(() => this.sortControl.setValue(this.sortValue(), { emitEvent: false }))\n\n this.searchControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((value) => this.searchValueChange.emit(value))\n\n this.sortControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((value) => {\n if (value !== null && value !== this.sortValue()) {\n this.sortValueChange.emit(value)\n }\n })\n }\n\n protected asSelectOptions(options: ListToolbarSortOption<T>[]): SelectOption<T>[] {\n return options\n }\n\n protected toggleDirection(): void {\n this.sortDirectionChange.emit(this.sortDirection() === 'asc' ? 'desc' : 'asc')\n }\n}\n","<div class=\"gbt-list-toolbar\">\n <gbt-input\n class=\"gbt-list-toolbar__search\"\n [label]=\"searchLabel()\"\n [placeholder]=\"searchPlaceholder()\"\n [formControl]=\"searchControl\"\n />\n <gbt-select\n class=\"gbt-list-toolbar__sort\"\n [label]=\"sortLabel()\"\n [options]=\"asSelectOptions(sortOptions())\"\n [formControl]=\"sortControl\"\n />\n <button\n type=\"button\"\n class=\"gbt-list-toolbar__direction\"\n (click)=\"toggleDirection()\"\n [attr.aria-label]=\"directionLabel()\"\n [attr.aria-pressed]=\"sortDirection() === 'desc'\"\n >\n <gbt-icon [name]=\"sortDirection() === 'asc' ? 'arrow-up' : 'arrow-down'\" />\n </button>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n selector: 'a[gbtCardLink]',\n standalone: true,\n template: '<ng-content />',\n styleUrl: './card-link.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'gbt-card__link' },\n})\nexport class CardLink {}\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n input,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { CardLink } from './card-link'\n\nexport type CardVariant = 'elevated' | 'outlined'\nexport type CardTone = 'default' | 'success' | 'warning' | 'error'\n\nconst TONE_ICONS: Record<Exclude<CardTone, 'default'>, string> = {\n success: 'check-circle',\n warning: 'alert-triangle',\n error: 'alert-circle',\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[card-header]',\n standalone: true,\n})\nexport class CardHeader {}\n\n@Component({\n selector: 'gbt-card',\n standalone: true,\n imports: [Icon, NgTemplateOutlet, CardLink],\n templateUrl: './card.html',\n styleUrl: './card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Card {\n hoverable = input(false, { transform: booleanAttribute })\n heading = input<string>('')\n icon = input<string>('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n\n variant = input<CardVariant>('elevated')\n description = input<string>('')\n count = input<number | null>(null)\n flush = input(false, { transform: booleanAttribute })\n tone = input<CardTone>('default')\n selected = input(false, { transform: booleanAttribute })\n selectedLabel = input<string>('Selected')\n\n href = input<string | null>(null)\n linkLabel = input<string | null>(null)\n\n private readonly customHeader = contentChild(CardHeader)\n private readonly projectedLink = contentChild(CardLink)\n\n protected readonly hasCustomHeader = computed(() => !!this.customHeader())\n protected readonly hasHeader = computed(() => !!this.heading() || this.hasCustomHeader())\n protected readonly linked = computed(() => !!this.href() || !!this.projectedLink())\n protected readonly headerIcon = computed(() => {\n const tone = this.tone()\n return this.icon() || (tone === 'default' ? '' : TONE_ICONS[tone])\n })\n\n protected readonly cardClass = computed(\n () => 'gbt-card' + (this.hoverable() ? ' gbt-card--hoverable' : ''),\n )\n}\n","@if (hasHeader()) {\n <div class=\"gbt-card__header\" [attr.data-tone]=\"tone() === 'default' ? null : tone()\">\n @if (hasCustomHeader()) {\n <div class=\"gbt-card__header-slot\">\n <ng-container *ngTemplateOutlet=\"headerSlot\" />\n </div>\n } @else {\n @if (headerIcon()) {\n <span class=\"gbt-card__icon\" [class.gbt-card__icon--status]=\"!icon()\">\n <gbt-icon [name]=\"headerIcon()\" aria-hidden=\"true\" />\n </span>\n }\n @if (description()) {\n <div class=\"gbt-card__titles\">\n <ng-container *ngTemplateOutlet=\"titleTemplate\" />\n <p class=\"gbt-card__description\">{{ description() }}</p>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"titleTemplate\" />\n }\n }\n <ng-content select=\"[card-header-actions]\"></ng-content>\n </div>\n}\n<div\n [class]=\"cardClass()\"\n [attr.data-variant]=\"variant() === 'elevated' ? null : variant()\"\n [attr.data-flush]=\"flush() ? '' : null\"\n [attr.data-selected]=\"selected() ? '' : null\"\n [attr.data-link]=\"linked() ? '' : null\"\n>\n @if (selected() && selectedLabel()) {\n <span class=\"gbt-card__selected-label\">{{ selectedLabel() }}</span>\n }\n @if (!hasCustomHeader()) {\n <ng-container *ngTemplateOutlet=\"headerSlot\" />\n }\n @if (href() && !hasHeader()) {\n <a gbtCardLink [attr.href]=\"href()\" [attr.aria-label]=\"linkLabel()\"></a>\n }\n <div class=\"gbt-card__body\"><ng-content></ng-content></div>\n</div>\n\n<ng-template #headerSlot><ng-content select=\"[card-header]\" /></ng-template>\n<ng-template #titleTemplate>\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"titleContent\" /></h1>\n }\n @case (3) {\n <h3 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"titleContent\" /></h3>\n }\n @case (4) {\n <h4 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"titleContent\" /></h4>\n }\n @case (5) {\n <h5 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"titleContent\" /></h5>\n }\n @case (6) {\n <h6 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"titleContent\" /></h6>\n }\n @default {\n <h2 class=\"gbt-card__title\"><ng-container *ngTemplateOutlet=\"titleContent\" /></h2>\n }\n }\n</ng-template>\n<ng-template #titleContent>\n @if (href()) {\n <a gbtCardLink [attr.href]=\"href()\">{{ heading() }}</a>\n } @else {\n {{ heading() }}\n }\n @if (count() !== null) {\n <span class=\"gbt-card__count\">{{ count() }}</span>\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextCheckboxId = 0\n\n@Component({\n selector: 'gbt-checkbox',\n standalone: true,\n templateUrl: './checkbox.html',\n styleUrl: './checkbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.gbt-checkbox-host--hint]': '!!hint()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Checkbox),\n multi: true,\n },\n ],\n})\nexport class Checkbox implements ControlValueAccessor {\n id = input<string>(`gbt-checkbox-${++nextCheckboxId}`)\n label = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n hint = input<string>('')\n checked = model(false)\n\n protected readonly hintId = computed(() => `${this.id()}-hint`)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: boolean) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: boolean): void {\n this.checked.set(!!value)\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked\n this.checked.set(value)\n this.onChange(value)\n this.onTouched()\n }\n}\n","<label class=\"gbt-checkbox\" [class.gbt-checkbox--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n [id]=\"id()\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-describedby]=\"hint() ? hintId() : null\"\n (change)=\"onToggle($event)\"\n />\n <span>{{ label() }}</span>\n</label>\n@if (hint()) {\n <p [id]=\"hintId()\" class=\"gbt-checkbox__hint\">{{ hint() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n OnDestroy,\n afterRenderEffect,\n booleanAttribute,\n effect,\n input,\n output,\n untracked,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\n@Component({\n selector: 'gbt-modal',\n standalone: true,\n imports: [Icon],\n templateUrl: './modal.html',\n styleUrl: './modal.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Modal implements OnDestroy {\n isOpen = input.required<boolean>()\n heading = input<string>('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n closeLabel = input<string>('Close')\n busy = input(false, { transform: booleanAttribute })\n busyLabel = input<string>('Please wait')\n returnFocus = input(true, { transform: booleanAttribute })\n\n closed = output<void>()\n\n private readonly dialog = viewChild<ElementRef<HTMLElement>>('dialog')\n\n private previouslyFocused: HTMLElement | null = null\n\n constructor() {\n effect(() => {\n if (this.isOpen()) {\n this.previouslyFocused = document.activeElement as HTMLElement | null\n queueMicrotask(() => this.dialog()?.nativeElement.focus())\n } else if (this.previouslyFocused) {\n const target = this.previouslyFocused\n this.previouslyFocused = null\n if (untracked(() => this.returnFocus())) {\n target.focus()\n }\n }\n })\n\n afterRenderEffect((onCleanup) => {\n const dialog = this.dialog()?.nativeElement\n if (!this.busy() || !dialog) {\n return\n }\n const restore = (): void => {\n if (this.busy() && !dialog.contains(document.activeElement)) {\n dialog.focus()\n }\n }\n restore()\n onCleanup(afterTwoFrames(restore))\n })\n }\n\n ngOnDestroy(): void {\n if (this.returnFocus()) {\n this.previouslyFocused?.focus()\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n if (this.isOpen() && !this.busy()) {\n this.closed.emit()\n }\n }\n\n protected onBackdropClick(event: MouseEvent): void {\n if (event.target === event.currentTarget && !this.busy()) {\n this.closed.emit()\n }\n }\n\n protected onCloseClick(): void {\n if (!this.busy()) {\n this.closed.emit()\n }\n }\n\n protected onDialogKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab') {\n return\n }\n const dialog = this.dialog()?.nativeElement\n if (!dialog) {\n return\n }\n const focusable = dialog.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n )\n if (focusable.length === 0) {\n return\n }\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (event.shiftKey && (document.activeElement === first || document.activeElement === dialog)) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n\nfunction afterTwoFrames(callback: () => void): () => void {\n if (typeof requestAnimationFrame === 'function') {\n let inner = 0\n const outer = requestAnimationFrame(() => {\n inner = requestAnimationFrame(callback)\n })\n return () => {\n cancelAnimationFrame(outer)\n cancelAnimationFrame(inner)\n }\n }\n const timer = setTimeout(callback, 50)\n return () => clearTimeout(timer)\n}\n","@if (isOpen()) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div class=\"gbt-modal__backdrop\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"gbt-modal__dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"heading() || null\"\n [attr.data-busy]=\"busy() ? '' : null\"\n tabindex=\"-1\"\n #dialog\n (keydown)=\"onDialogKeydown($event)\"\n >\n <header class=\"gbt-modal__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-modal__title\">{{ heading() }}</h1>\n }\n @case (3) {\n <h3 class=\"gbt-modal__title\">{{ heading() }}</h3>\n }\n @case (4) {\n <h4 class=\"gbt-modal__title\">{{ heading() }}</h4>\n }\n @case (5) {\n <h5 class=\"gbt-modal__title\">{{ heading() }}</h5>\n }\n @case (6) {\n <h6 class=\"gbt-modal__title\">{{ heading() }}</h6>\n }\n @default {\n <h2 class=\"gbt-modal__title\">{{ heading() }}</h2>\n }\n }\n <button\n type=\"button\"\n class=\"gbt-modal__close\"\n (click)=\"onCloseClick()\"\n [attr.aria-label]=\"closeLabel()\"\n [attr.aria-disabled]=\"busy() ? 'true' : null\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </header>\n <div class=\"gbt-modal__body\" [attr.aria-busy]=\"busy() ? 'true' : null\">\n <ng-content />\n </div>\n <div class=\"gbt-modal__footer\"><ng-content select=\"[modal-footer]\" /></div>\n <span class=\"gbt-modal__status\" role=\"status\">{{ busy() ? busyLabel() : '' }}</span>\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n OnDestroy,\n effect,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type DrawerEdge = 'right' | 'left' | 'top' | 'bottom'\n\nconst CLOSE_ANIMATION_MS = 200\n\n@Component({\n selector: 'gbt-drawer',\n standalone: true,\n imports: [Icon],\n templateUrl: './drawer.html',\n styleUrl: './drawer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Drawer implements OnDestroy {\n isOpen = input.required<boolean>()\n edge = input<DrawerEdge>('right')\n heading = input<string>('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n closeLabel = input<string>('Close')\n\n closed = output<void>()\n\n protected readonly rendered = signal(false)\n\n private readonly panel = viewChild<ElementRef<HTMLElement>>('panel')\n\n private previouslyFocused: HTMLElement | null = null\n private closeTimer: ReturnType<typeof setTimeout> | null = null\n\n constructor() {\n effect(() => {\n if (this.isOpen()) {\n if (this.closeTimer !== null) {\n clearTimeout(this.closeTimer)\n this.closeTimer = null\n }\n this.rendered.set(true)\n this.previouslyFocused = document.activeElement as HTMLElement | null\n queueMicrotask(() => this.panel()?.nativeElement.focus())\n } else if (this.rendered()) {\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null\n this.rendered.set(false)\n if (this.previouslyFocused) {\n const target = this.previouslyFocused\n this.previouslyFocused = null\n target.focus()\n }\n }, CLOSE_ANIMATION_MS)\n }\n })\n }\n\n ngOnDestroy(): void {\n if (this.closeTimer !== null) {\n clearTimeout(this.closeTimer)\n }\n this.previouslyFocused?.focus()\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n if (this.isOpen()) {\n this.closed.emit()\n }\n }\n\n protected onBackdropClick(event: MouseEvent): void {\n if (event.target === event.currentTarget) {\n this.closed.emit()\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab') {\n return\n }\n const panel = this.panel()?.nativeElement\n if (!panel) {\n return\n }\n const focusable = panel.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n )\n if (focusable.length === 0) {\n return\n }\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n","@if (rendered()) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"gbt-drawer__backdrop\"\n [class.gbt-drawer__backdrop--closing]=\"!isOpen()\"\n (click)=\"onBackdropClick($event)\"\n >\n <div\n #panel\n class=\"gbt-drawer__panel\"\n [class.gbt-drawer__panel--closing]=\"!isOpen()\"\n [attr.data-edge]=\"edge()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"heading() || null\"\n tabindex=\"-1\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <header class=\"gbt-drawer__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-drawer__title\">{{ heading() }}</h1>\n }\n @case (3) {\n <h3 class=\"gbt-drawer__title\">{{ heading() }}</h3>\n }\n @case (4) {\n <h4 class=\"gbt-drawer__title\">{{ heading() }}</h4>\n }\n @case (5) {\n <h5 class=\"gbt-drawer__title\">{{ heading() }}</h5>\n }\n @case (6) {\n <h6 class=\"gbt-drawer__title\">{{ heading() }}</h6>\n }\n @default {\n <h2 class=\"gbt-drawer__title\">{{ heading() }}</h2>\n }\n }\n <button\n type=\"button\"\n class=\"gbt-drawer__close\"\n (click)=\"closed.emit()\"\n [attr.aria-label]=\"closeLabel()\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </header>\n <div class=\"gbt-drawer__body\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n booleanAttribute,\n input,\n output,\n} from '@angular/core'\nimport { NgTemplateOutlet } from '@angular/common'\n\nexport interface TableColumn<T> {\n key: string\n label: string\n format?: (row: T) => string\n cellTemplate?: TemplateRef<{ $implicit: T }>\n}\n\nconst INTERACTIVE_TARGET_SELECTOR = [\n 'button',\n 'a[href]',\n 'input',\n 'select',\n 'textarea',\n 'label',\n 'summary',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"checkbox\"]',\n '[role=\"switch\"]',\n '[role=\"radio\"]',\n '[role=\"tab\"]',\n '[role=\"option\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"textbox\"]',\n '[role=\"searchbox\"]',\n '[role=\"slider\"]',\n '[role=\"spinbutton\"]',\n].join(', ')\n\n@Component({\n selector: 'gbt-table',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './table.html',\n styleUrl: './table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Table<T extends object> {\n data = input.required<T[]>()\n columns = input.required<TableColumn<T>[]>()\n trackBy = input<((row: T) => unknown) | null>(null)\n emptyMessage = input<string>('No data')\n caption = input.required<string>()\n clickableRows = input(false, { transform: booleanAttribute })\n\n rowClick = output<T>()\n\n protected trackRow = (index: number, row: T): unknown => {\n const identify = this.trackBy()\n return identify ? identify(row) : index\n }\n\n protected onRowClick(event: MouseEvent, row: T): void {\n if (!this.isInteractiveTarget(event)) {\n this.rowClick.emit(row)\n }\n }\n\n protected onRowKeydown(event: KeyboardEvent, row: T): void {\n if ((event.key === 'Enter' || event.key === ' ') && !this.isInteractiveTarget(event)) {\n event.preventDefault()\n this.rowClick.emit(row)\n }\n }\n\n private isInteractiveTarget(event: Event): boolean {\n return (event.target as HTMLElement).closest(INTERACTIVE_TARGET_SELECTOR) !== null\n }\n\n protected cellValue(row: T, column: TableColumn<T>): unknown {\n return column.format ? column.format(row) : (row as Record<string, unknown>)[column.key]\n }\n}\n","<table class=\"gbt-table\">\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n @for (column of columns(); track column.key) {\n <th scope=\"col\">{{ column.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data(); track trackRow($index, row)) {\n <tr\n [class.gbt-table__row--clickable]=\"clickableRows()\"\n [attr.tabindex]=\"clickableRows() ? 0 : null\"\n (click)=\"clickableRows() && onRowClick($event, row)\"\n (keydown)=\"clickableRows() && onRowKeydown($event, row)\"\n >\n @for (column of columns(); track column.key) {\n <td>\n @if (column.cellTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"column.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\n />\n } @else {\n {{ cellValue(row, column) }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr class=\"gbt-table__empty\">\n <td [attr.colspan]=\"columns().length\">{{ emptyMessage() }}</td>\n </tr>\n }\n </tbody>\n</table>\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport interface SearchResultCategory<T = unknown> {\n label: string\n icon?: string\n items: T[]\n}\n\nlet nextSearchBarId = 0\n\nexport type SearchBarCollapsible = boolean | 'narrow'\n\nfunction collapsibleAttribute(value: boolean | string | null | undefined): SearchBarCollapsible {\n return value === 'narrow' ? 'narrow' : booleanAttribute(value)\n}\n\n@Component({\n selector: 'gbt-search-bar',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './search-bar.html',\n styleUrl: './search-bar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown)': 'onNavigationKeydown($event)',\n '(document:click)': 'handleClickOutside($event)',\n '[attr.data-collapsible]': 'collapsibleMode()',\n '[attr.data-expanded]': 'collapsibleMode() && expanded() ? \"\" : null',\n },\n})\nexport class SearchBar<T = unknown> {\n private readonly elementRef = inject(ElementRef)\n private readonly injector = inject(Injector)\n\n id = input<string>(`gbt-search-bar-${++nextSearchBarId}`)\n results = input<T[] | null>(null)\n groupedResults = input<SearchResultCategory<T>[] | null>(null)\n placeholder = input<string>('Search…')\n ariaLabel = input<string>('')\n displayFn = input<(item: T) => string>((item) => String(item))\n itemTemplate = input<TemplateRef<unknown>>()\n keepQueryOnSelect = input(false)\n noResultsMessage = input<string>('No results')\n noResultsHint = input<string>('Try a different search.')\n clearLabel = input<string>('Clear search')\n resultsAnnouncement = input<(count: number) => string>(\n (count) => `${count} result${count !== 1 ? 's' : ''}`,\n )\n navigateHint = input<string>('Navigate')\n selectHint = input<string>('Select')\n closeHint = input<string>('Close')\n collapsible = input<SearchBarCollapsible, boolean | string | null | undefined>(false, {\n transform: collapsibleAttribute,\n })\n expanded = model(false)\n openLabel = input<string>('Search')\n closeLabel = input<string>('Close search')\n\n queryChange = output<string>()\n itemSelected = output<T>()\n clear = output<void>()\n\n protected readonly isFocused = signal(false)\n protected readonly showResults = signal(false)\n protected readonly searchQuery = signal('')\n protected readonly activeIndex = signal(0)\n\n protected readonly searchInput = viewChild<ElementRef<HTMLInputElement>>('searchInput')\n private readonly toggleButton = viewChild<ElementRef<HTMLButtonElement>>('toggle')\n\n protected readonly collapsibleMode = computed(() => {\n const mode = this.collapsible()\n return mode === 'narrow' ? 'narrow' : mode ? 'always' : null\n })\n\n protected readonly folded = computed(() => this.collapsibleMode() !== null && !this.expanded())\n\n protected readonly triggerId = computed(() => `${this.id()}-trigger`)\n\n private readonly hasGroupedResultsInput = computed(() => !!this.groupedResults())\n\n protected readonly allVisibleItems = computed<T[]>(() => {\n if (this.groupedResults()) {\n return this.groupedResults()!.flatMap((category) => category.items)\n }\n return this.results() ?? []\n })\n\n protected readonly showOverlay = computed(() => this.showResults())\n\n protected readonly panelId = computed(() => `${this.id()}-panel`)\n\n protected itemDomId(index: number): string {\n return `${this.id()}-item-${index}`\n }\n\n protected readonly indexedGroupedResults = computed(() => {\n const grouped = this.groupedResults()\n if (!grouped) return null\n const format = this.displayFn()\n let index = 0\n return grouped.map((category) => ({\n ...category,\n indexedItems: category.items.map((item) => ({\n item,\n index: index++,\n formatted: format(item),\n })),\n }))\n })\n\n protected readonly indexedResults = computed(() => {\n const format = this.displayFn()\n return (this.results() ?? []).map((item, index) => ({ item, index, formatted: format(item) }))\n })\n\n protected readonly activeItemDomId = computed(() => {\n if (!this.showOverlay()) return null\n const idx = this.activeIndex()\n\n return idx >= 0 && idx < this.allVisibleItems().length ? this.itemDomId(idx) : null\n })\n\n protected readonly resultCount = computed(() =>\n this.showOverlay() ? this.allVisibleItems().length : 0,\n )\n\n protected readonly hasGroupedResults = computed(\n () => this.hasGroupedResultsInput() && !!this.groupedResults()?.some((c) => c.items.length > 0),\n )\n\n protected readonly hasNoResults = computed(() => this.allVisibleItems().length === 0)\n\n protected onNavigationKeydown(event: KeyboardEvent): void {\n if (\n event.key === 'Escape' &&\n this.collapsibleMode() !== null &&\n this.expanded() &&\n !this.showOverlay()\n ) {\n event.preventDefault()\n this.fold(true)\n return\n }\n\n if (!this.isFocused() || !this.showOverlay()) return\n\n if (event.key === 'Escape') {\n event.preventDefault()\n this.blurSearch()\n return\n }\n\n const items = this.allVisibleItems()\n if (items.length === 0) return\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.activeIndex.update((i) => Math.min(i + 1, items.length - 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n this.activeIndex.update((i) => Math.max(i - 1, 0))\n break\n case 'Enter': {\n const active = items[this.activeIndex()]\n if (!active) break\n event.preventDefault()\n this.onSelect(active)\n break\n }\n }\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.showResults.set(false)\n }\n }\n\n focusSearch(): void {\n this.searchInput()?.nativeElement.focus()\n }\n\n protected blurSearch(): void {\n this.searchInput()?.nativeElement.blur()\n this.showResults.set(false)\n }\n\n protected onFocus(): void {\n this.isFocused.set(true)\n if (this.searchQuery().length > 0) this.showResults.set(true)\n }\n\n protected expand(): void {\n this.expanded.set(true)\n afterNextRender(() => this.focusSearch(), { injector: this.injector })\n }\n\n private fold(returnFocus: boolean): void {\n this.expanded.set(false)\n if (returnFocus) {\n afterNextRender(() => this.toggleButton()?.nativeElement.focus(), { injector: this.injector })\n }\n }\n\n protected close(event: Event): void {\n event.stopPropagation()\n this.showResults.set(false)\n this.fold(true)\n }\n\n protected onBlur(event?: FocusEvent): void {\n this.isFocused.set(false)\n if (\n this.collapsibleMode() !== null &&\n this.expanded() &&\n this.searchQuery().length === 0 &&\n !this.elementRef.nativeElement.contains(event?.relatedTarget)\n ) {\n this.fold(false)\n }\n setTimeout(() => {\n if (!this.elementRef.nativeElement.contains(document.activeElement)) {\n this.showResults.set(false)\n }\n }, 200)\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value\n this.searchQuery.set(value)\n this.activeIndex.set(0)\n this.showResults.set(value.length > 0)\n\n this.queryChange.emit(value)\n }\n\n protected onClear(): void {\n this.searchQuery.set('')\n this.activeIndex.set(0)\n this.showResults.set(false)\n this.clear.emit()\n this.focusSearch()\n }\n\n protected onSelect(item: T): void {\n this.itemSelected.emit(item)\n this.showResults.set(false)\n this.searchQuery.set(this.keepQueryOnSelect() ? this.displayFn()(item) : '')\n if (this.collapsibleMode() !== null && !this.keepQueryOnSelect()) this.fold(false)\n }\n}\n","@if (collapsibleMode()) {\n @if (folded()) {\n <button\n #toggle\n type=\"button\"\n class=\"gbt-sb-toggle\"\n aria-expanded=\"false\"\n [attr.aria-controls]=\"triggerId()\"\n [attr.aria-label]=\"openLabel()\"\n (click)=\"expand()\"\n >\n <gbt-icon name=\"search\" aria-hidden=\"true\" />\n </button>\n }\n}\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n<div\n class=\"gbt-sb-trigger\"\n [attr.id]=\"collapsibleMode() ? triggerId() : null\"\n [attr.hidden]=\"folded() ? '' : null\"\n [class.gbt-sb-trigger--open]=\"isFocused()\"\n (click)=\"focusSearch()\"\n>\n @if (collapsibleMode() && expanded()) {\n <button\n type=\"button\"\n class=\"gbt-sb-trigger__close\"\n [attr.aria-label]=\"closeLabel()\"\n (click)=\"close($event)\"\n >\n <gbt-icon name=\"arrow-left\" aria-hidden=\"true\" />\n </button>\n }\n <gbt-icon name=\"search\" class=\"gbt-sb-trigger__icon\" aria-hidden=\"true\" />\n <input\n #searchInput\n type=\"text\"\n role=\"combobox\"\n class=\"gbt-sb-trigger__input\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"ariaLabel() || placeholder()\"\n [value]=\"searchQuery()\"\n [attr.aria-expanded]=\"showOverlay()\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"showOverlay() ? panelId() : null\"\n [attr.aria-activedescendant]=\"activeItemDomId()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur($event)\"\n (input)=\"onInput($event)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n @if (searchQuery().length > 0) {\n <button\n type=\"button\"\n class=\"gbt-sb-trigger__clear\"\n (click)=\"onClear()\"\n [attr.aria-label]=\"clearLabel()\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n }\n</div>\n@if (showOverlay()) {\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n {{ resultsAnnouncement()(resultCount()) }}\n </div>\n}\n@if (showOverlay()) {\n <div class=\"gbt-sb-backdrop\" (click)=\"blurSearch()\" aria-hidden=\"true\"></div>\n <ng-template #footer>\n <div class=\"gbt-sb-footer\" aria-hidden=\"true\">\n <span class=\"gbt-sb-footer__hint\">\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">↑</kbd>\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">↓</kbd>\n {{ navigateHint() }}\n </span>\n <span class=\"gbt-sb-footer__hint\">\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">↵</kbd>\n {{ selectHint() }}\n </span>\n <span class=\"gbt-sb-footer__hint\">\n <kbd class=\"gbt-sb-kbd gbt-sb-kbd--sm\">Esc</kbd>\n {{ closeHint() }}\n </span>\n </div>\n </ng-template>\n @if (hasNoResults()) {\n <div [id]=\"panelId()\" class=\"gbt-sb-panel\">\n <div class=\"gbt-sb-state\" role=\"status\">\n <gbt-icon name=\"search\" class=\"gbt-sb-state__icon\" aria-hidden=\"true\" />\n <span>{{ noResultsMessage() }}</span>\n <p class=\"gbt-sb-state__hint\">{{ noResultsHint() }}</p>\n </div>\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n } @else {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n [id]=\"panelId()\"\n class=\"gbt-sb-panel\"\n role=\"listbox\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (hasGroupedResults()) {\n <div class=\"gbt-sb-list\">\n @for (category of indexedGroupedResults(); track category.label) {\n @if (category.items.length > 0) {\n <div class=\"gbt-sb-group-label\">\n @if (category.icon) {\n <gbt-icon [name]=\"category.icon\" aria-hidden=\"true\" />\n }\n {{ category.label }}\n <span class=\"gbt-sb-group-count\" aria-hidden=\"true\">{{\n category.items.length\n }}</span>\n </div>\n @for (entry of category.indexedItems; track entry.index) {\n <button\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"itemDomId(entry.index)\"\n class=\"gbt-sb-item\"\n [attr.aria-selected]=\"entry.index === activeIndex()\"\n [class.gbt-sb-item--active]=\"entry.index === activeIndex()\"\n (click)=\"onSelect(entry.item)\"\n (mouseenter)=\"activeIndex.set(entry.index)\"\n >\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: entry.item }\"\n ></ng-container>\n } @else {\n @if (category.icon) {\n <gbt-icon\n [name]=\"category.icon\"\n class=\"gbt-sb-item__icon\"\n aria-hidden=\"true\"\n />\n }\n <span class=\"gbt-sb-item__label\">{{ entry.formatted }}</span>\n }\n </button>\n }\n }\n }\n </div>\n } @else if (results() && results()!.length > 0) {\n <div class=\"gbt-sb-list\">\n @for (entry of indexedResults(); track entry.index) {\n <button\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"itemDomId(entry.index)\"\n class=\"gbt-sb-item\"\n [attr.aria-selected]=\"entry.index === activeIndex()\"\n [class.gbt-sb-item--active]=\"entry.index === activeIndex()\"\n (click)=\"onSelect(entry.item)\"\n (mouseenter)=\"activeIndex.set(entry.index)\"\n >\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: entry.item }\"\n ></ng-container>\n } @else {\n <span class=\"gbt-sb-item__label\">{{ entry.formatted }}</span>\n }\n </button>\n }\n </div>\n }\n\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n}\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core'\n\n@Component({\n selector: 'gbt-tab',\n standalone: true,\n imports: [],\n template: `<ng-content></ng-content>`,\n host: {\n role: 'tabpanel',\n '[style.display]': \"active() ? null : 'none'\",\n '[id]': \"groupId() + '-panel-' + index()\",\n '[attr.aria-labelledby]': \"groupId() + '-trigger-' + index()\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tab {\n label = input.required<string>()\n\n protected readonly active = signal(false)\n protected readonly index = signal(0)\n protected readonly groupId = signal('')\n\n setState(index: number, active: boolean, groupId: string): void {\n this.index.set(index)\n this.active.set(active)\n this.groupId.set(groupId)\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n contentChildren,\n effect,\n input,\n model,\n viewChildren,\n} from '@angular/core'\nimport { Tab } from '../tab/tab'\n\nlet nextTabsId = 0\n\n@Component({\n selector: 'gbt-tabs',\n standalone: true,\n imports: [],\n templateUrl: './tabs.html',\n styleUrl: './tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tabs {\n id = input<string>(`gbt-tabs-${++nextTabsId}`)\n\n protected readonly tabs = contentChildren(Tab)\n private readonly triggers = viewChildren<ElementRef<HTMLButtonElement>>('trigger')\n\n activeIndex = model(0)\n\n constructor() {\n effect(() => {\n const tabs = this.tabs()\n const active = this.activeIndex()\n const groupId = this.id()\n tabs.forEach((tab, i) => tab.setState(i, i === active, groupId))\n })\n\n effect(() => {\n const count = this.tabs().length\n if (count === 0) {\n return\n }\n const current = this.activeIndex()\n const clamped = Math.min(Math.max(current, 0), count - 1)\n if (clamped !== current) {\n this.activeIndex.set(clamped)\n }\n })\n }\n\n protected select(index: number): void {\n this.activeIndex.set(index)\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const count = this.tabs().length\n if (count === 0) {\n return\n }\n let next: number | null = null\n if (event.key === 'ArrowRight') {\n next = (index + 1) % count\n } else if (event.key === 'ArrowLeft') {\n next = (index - 1 + count) % count\n }\n if (next === null) {\n return\n }\n event.preventDefault()\n this.select(next)\n this.triggers()[next]?.nativeElement.focus()\n }\n}\n","<div class=\"gbt-tabs\">\n <div class=\"gbt-tabs__list\" role=\"tablist\">\n @for (tab of tabs(); track tab; let i = $index) {\n <button\n #trigger\n type=\"button\"\n class=\"gbt-tabs__trigger\"\n [class.gbt-tabs__trigger--active]=\"activeIndex() === i\"\n role=\"tab\"\n [id]=\"id() + '-trigger-' + i\"\n [attr.aria-selected]=\"activeIndex() === i\"\n [attr.aria-controls]=\"id() + '-panel-' + i\"\n [tabIndex]=\"activeIndex() === i ? 0 : -1\"\n (click)=\"select(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n {{ tab.label() }}\n </button>\n }\n </div>\n <div class=\"gbt-tabs__panels\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { inject, LOCALE_ID, Pipe, type PipeTransform } from '@angular/core'\nimport { formatBytes, type FormatBytesOptions } from '../primitives/format-bytes'\nimport {\n formatDateTime,\n formatRelativeTime,\n type DateInput,\n type FormatRelativeTimeOptions,\n} from '../primitives/format-time'\n\nexport interface GbtPipeLocale {\n locale?: string\n}\n\nexport type GbtRelativeTimePipeOptions = FormatRelativeTimeOptions &\n GbtPipeLocale & {\n now?: DateInput\n }\n\nexport type GbtBytesPipeOptions = FormatBytesOptions & GbtPipeLocale\n\nexport type GbtDateTimePipeOptions = Intl.DateTimeFormatOptions & GbtPipeLocale\n\n@Pipe({ name: 'gbtRelativeTime', standalone: true })\nexport class GbtRelativeTimePipe implements PipeTransform {\n private readonly localeId = inject(LOCALE_ID)\n\n transform(value: DateInput | null | undefined, options: GbtRelativeTimePipeOptions = {}): string {\n const { locale, now, ...rest } = options\n return formatRelativeTime(value, locale ?? this.localeId, now, rest)\n }\n}\n\n@Pipe({ name: 'gbtBytes', standalone: true })\nexport class GbtBytesPipe implements PipeTransform {\n private readonly localeId = inject(LOCALE_ID)\n\n transform(value: number | null | undefined, options: GbtBytesPipeOptions = {}): string {\n if (value === null || value === undefined) return ''\n const { locale, ...rest } = options\n return formatBytes(value, locale ?? this.localeId, rest)\n }\n}\n\n@Pipe({ name: 'gbtDateTime', standalone: true })\nexport class GbtDateTimePipe implements PipeTransform {\n private readonly localeId = inject(LOCALE_ID)\n\n transform(value: DateInput | null | undefined, options?: GbtDateTimePipeOptions): string {\n const { locale, ...rest } = options ?? {}\n return formatDateTime(value, locale ?? this.localeId, rest)\n }\n}\n","import { Injectable, InjectionToken, computed, signal, type Signal } from '@angular/core'\nimport { bandScale, linearScale, timeScale, type BandScale, type Scale } from '../../../primitives'\n\nexport interface ChartMargin {\n top: number\n right: number\n bottom: number\n left: number\n}\n\nexport interface ChartBox {\n readonly width: number\n readonly height: number\n readonly margin: ChartMargin\n readonly innerWidth: number\n readonly innerHeight: number\n}\n\nexport type LinearAxisSpec = { kind: 'linear'; domain: [number, number] }\n\nexport type PointValue = number | Date | string\n\nexport type AxisSpec =\n | LinearAxisSpec\n | { kind: 'time'; domain: [Date, Date] }\n | { kind: 'band'; domain: string[]; padding?: number }\n\nconst EMPTY_BOX: ChartBox = {\n width: 0,\n height: 0,\n margin: { top: 0, right: 0, bottom: 0, left: 0 },\n innerWidth: 0,\n innerHeight: 0,\n}\n\nexport interface ChartReader {\n readonly box: Signal<ChartBox>\n readonly xSpec: Signal<AxisSpec>\n readonly ySpec: Signal<LinearAxisSpec>\n readonly xScale: Signal<Scale<number> | Scale<Date> | BandScale>\n readonly yScale: Signal<Scale<number>>\n readonly activeIndex: Signal<number | null>\n readonly pointValues: Signal<PointValue[]>\n readonly activePosition: Signal<number | null>\n}\n\nexport const CHART_CONTEXT = new InjectionToken<ChartReader>('gbt-chart-context')\n\n@Injectable()\nexport class ChartContext implements ChartReader {\n private readonly _box = signal<ChartBox>(EMPTY_BOX)\n private readonly _xSpec = signal<AxisSpec>({ kind: 'linear', domain: [0, 1] })\n private readonly _ySpec = signal<LinearAxisSpec>({ kind: 'linear', domain: [0, 1] })\n private readonly _activeIndex = signal<number | null>(null)\n private readonly _pointValues = signal<PointValue[]>([])\n\n readonly box = this._box.asReadonly()\n readonly xSpec = this._xSpec.asReadonly()\n readonly ySpec = this._ySpec.asReadonly()\n readonly activeIndex = this._activeIndex.asReadonly()\n readonly pointValues = this._pointValues.asReadonly()\n\n readonly xScale = computed<Scale<number> | Scale<Date> | BandScale>(() => {\n const spec = this._xSpec()\n const range: [number, number] = [0, this._box().innerWidth]\n if (spec.kind === 'time') return timeScale(spec.domain, range)\n if (spec.kind === 'band') return bandScale(spec.domain, range, spec.padding ?? 0)\n return linearScale(spec.domain, range)\n })\n\n readonly yScale = computed<Scale<number>>(() =>\n linearScale(this._ySpec().domain, [this._box().innerHeight, 0]),\n )\n\n readonly pointPositions = computed<number[]>(() => {\n const kind = this._xSpec().kind\n const scale = this.xScale()\n return this._pointValues().map((value) =>\n kind === 'band'\n ? (scale as BandScale).map(value as string) + (scale as BandScale).bandwidth / 2\n : (scale as Scale<number> | Scale<Date>).map(value as never),\n )\n })\n\n readonly activePosition = computed<number | null>(() => {\n const index = this._activeIndex()\n if (index === null) return null\n return this.pointPositions()[index] ?? null\n })\n\n setPointValues(values: PointValue[]): void {\n this._pointValues.set(values)\n }\n\n setGeometry(box: ChartBox): void {\n this._box.set(box)\n }\n\n setSpecs(x: AxisSpec, y: LinearAxisSpec): void {\n this._xSpec.set(x)\n this._ySpec.set(y)\n }\n\n setActiveIndex(index: number | null): void {\n this._activeIndex.set(index)\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport {\n CHART_CONTEXT,\n ChartContext,\n type AxisSpec,\n type ChartMargin,\n type LinearAxisSpec,\n type PointValue,\n} from '../chart-context/chart-context'\nimport { nearestIndex } from '../../../primitives'\n\nconst DEFAULT_MARGIN: ChartMargin = { top: 16, right: 8, bottom: 32, left: 48 }\n\n@Component({\n selector: 'gbt-chart-frame',\n standalone: true,\n imports: [],\n templateUrl: './chart-frame.html',\n styleUrl: './chart-frame.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ChartContext, { provide: CHART_CONTEXT, useExisting: ChartContext }],\n})\nexport class ChartFrame {\n private readonly context = inject(ChartContext)\n\n label = input.required<string>()\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n x = input.required<AxisSpec>()\n y = input.required<LinearAxisSpec>()\n margin = input<Partial<ChartMargin>>({})\n size = input<{ width: number; height: number } | null>(null)\n pointValues = input<PointValue[]>([])\n\n readonly activeIndexChange = output<number | null>()\n\n private readonly surface = viewChild.required<ElementRef<HTMLElement>>('surface')\n private readonly measured = signal<{ width: number; height: number } | null>(null)\n\n protected readonly ready = computed(() => this.context.box().innerWidth > 0)\n\n protected readonly viewBox = computed(() => {\n const b = this.context.box()\n return `0 0 ${b.width} ${b.height}`\n })\n\n protected readonly innerTransform = computed(() => {\n const m = this.context.box().margin\n return `translate(${m.left},${m.top})`\n })\n\n protected readonly activePosition = computed(() => this.context.activePosition())\n protected readonly innerHeight = computed(() => this.context.box().innerHeight)\n\n constructor() {\n effect(() => this.activeIndexChange.emit(this.context.activeIndex()))\n\n effect(() => {\n const margin = { ...DEFAULT_MARGIN, ...this.margin() }\n const size = this.size() ?? this.measured()\n const width = size?.width ?? 0\n const height = size?.height ?? 0\n this.context.setSpecs(this.x(), this.y())\n this.context.setPointValues(this.pointValues())\n this.context.setGeometry({\n width,\n height,\n margin,\n innerWidth: Math.max(0, width - margin.left - margin.right),\n innerHeight: Math.max(0, height - margin.top - margin.bottom),\n })\n })\n\n effect((onCleanup) => {\n if (this.size() || typeof ResizeObserver === 'undefined') return\n\n const element = this.surface().nativeElement\n const observer = new ResizeObserver((entries) => {\n const rect = entries[0]?.contentRect\n if (rect) this.measured.set({ width: rect.width, height: rect.height })\n })\n observer.observe(element)\n onCleanup(() => observer.disconnect())\n })\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const count = this.pointValues().length\n if (count === 0) return\n\n const current = this.context.activeIndex()\n const last = count - 1\n\n switch (event.key) {\n case 'ArrowRight':\n this.context.setActiveIndex(current === null ? 0 : Math.min(last, current + 1))\n break\n case 'ArrowLeft':\n this.context.setActiveIndex(current === null ? last : Math.max(0, current - 1))\n break\n case 'Home':\n this.context.setActiveIndex(0)\n break\n case 'End':\n this.context.setActiveIndex(last)\n break\n case 'Escape':\n this.context.setActiveIndex(null)\n break\n default:\n return\n }\n\n event.preventDefault()\n }\n\n protected onBlur(): void {\n this.context.setActiveIndex(null)\n }\n\n protected onPointerMove(event: PointerEvent | MouseEvent): void {\n const positions = this.context.pointPositions()\n if (positions.length === 0) return\n\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect()\n const local = event.clientX - rect.left - this.context.box().margin.left\n\n this.context.setActiveIndex(nearestIndex(positions, local))\n }\n\n protected onPointerLeave(event: PointerEvent | MouseEvent): void {\n const surface = event.currentTarget as HTMLElement\n if (surface.ownerDocument.activeElement === surface) return\n this.context.setActiveIndex(null)\n }\n}\n","<div class=\"gbt-chart-frame\">\n @if (heading()) {\n <div class=\"gbt-chart-frame__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-chart-frame__title\">{{ heading() }}</h1>\n }\n @case (3) {\n <h3 class=\"gbt-chart-frame__title\">{{ heading() }}</h3>\n }\n @case (4) {\n <h4 class=\"gbt-chart-frame__title\">{{ heading() }}</h4>\n }\n @case (5) {\n <h5 class=\"gbt-chart-frame__title\">{{ heading() }}</h5>\n }\n @case (6) {\n <h6 class=\"gbt-chart-frame__title\">{{ heading() }}</h6>\n }\n @default {\n <h2 class=\"gbt-chart-frame__title\">{{ heading() }}</h2>\n }\n }\n @if (headline()) {\n <p class=\"gbt-chart-frame__headline\">{{ headline() }}</p>\n }\n @if (trend()) {\n <p class=\"gbt-chart-frame__trend\">{{ trend() }}</p>\n }\n </div>\n }\n\n <div\n #surface\n class=\"gbt-chart-frame__surface\"\n [attr.tabindex]=\"ready() && pointValues().length > 0 ? 0 : null\"\n [attr.role]=\"ready() ? 'group' : null\"\n [attr.aria-label]=\"ready() ? label() : null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave($event)\"\n >\n @if (ready()) {\n <svg\n class=\"gbt-chart-frame__svg\"\n [attr.viewBox]=\"viewBox()\"\n role=\"presentation\"\n focusable=\"false\"\n >\n <g [attr.transform]=\"innerTransform()\">\n <ng-content select=\"[gbtChartLayer]\" />\n @if (activePosition() !== null) {\n <line\n class=\"gbt-chart-frame__guide\"\n [attr.x1]=\"activePosition()\"\n [attr.x2]=\"activePosition()\"\n y1=\"0\"\n [attr.y2]=\"innerHeight()\"\n aria-hidden=\"true\"\n />\n }\n </g>\n </svg>\n <ng-content select=\"gbt-chart-tooltip\" />\n }\n </div>\n <ng-content select=\"gbt-chart-empty\" />\n <ng-content select=\"gbt-chart-table\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core'\nimport { CHART_CONTEXT, type ChartReader } from '../chart-context/chart-context'\nimport {\n LABEL_GAP,\n estimateLabelWidth,\n formatCompact,\n niceTicks,\n timeTicks,\n type BandScale,\n type Scale,\n} from '../../../primitives'\n\ninterface Tick {\n key: string\n x: number\n y: number\n label: string\n\n date: string | null\n anchor: 'start' | 'middle' | 'end'\n}\n\n@Component({\n selector: 'g[gbtChartAxis]',\n standalone: true,\n imports: [],\n templateUrl: './chart-axis.html',\n styleUrl: './chart-axis.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.transform]': 'groupTransform()',\n '[attr.axis]': 'axis()',\n 'aria-hidden': 'true',\n },\n})\nexport class ChartAxis {\n private readonly context: ChartReader = inject(CHART_CONTEXT)\n\n axis = input.required<'x' | 'y'>()\n locale = input.required<string>()\n tickCount = input(5)\n format = input<((value: never) => string) | null>(null)\n grid = input(false, { transform: booleanAttribute })\n\n protected readonly groupTransform = computed(() => {\n const box = this.context.box()\n\n return this.axis() === 'x' ? `translate(0,${box.innerHeight})` : 'translate(0,0)'\n })\n\n protected readonly ticks = computed<Tick[]>(() => {\n if (this.axis() === 'y') return this.yTicks()\n const ticks = this.xTicks()\n\n if (this.context.xSpec().kind === 'band') return ticks\n\n const last = ticks.length - 1\n return ticks.map((tick, index) => ({\n ...tick,\n anchor: index === 0 ? 'start' : index === last ? 'end' : 'middle',\n }))\n })\n\n protected readonly gridLines = computed<number[]>(() => {\n if (!this.grid() || this.axis() !== 'y') return []\n return this.yTicks().map((tick) => tick.y - 4)\n })\n\n protected readonly innerWidth = computed(() => this.context.box().innerWidth)\n\n private yTicks(): Tick[] {\n const spec = this.context.ySpec()\n const scale = this.context.yScale()\n const custom = this.format()\n return niceTicks(spec.domain[0], spec.domain[1], this.tickCount()).map((value) => ({\n key: `y-${value}`,\n x: -8,\n y: scale.map(value) + 4,\n label: custom ? custom(value as never) : formatCompact(value, this.locale()),\n date: null,\n anchor: 'end',\n }))\n }\n\n private xTicks(): Tick[] {\n const spec = this.context.xSpec()\n const box = this.context.box()\n const custom = this.format()\n\n if (spec.kind === 'band') {\n const scale = this.context.xScale() as BandScale\n\n const labels = spec.domain.map((category) => (custom ? custom(category as never) : category))\n const step = spec.domain.length === 0 ? 0 : box.innerWidth / spec.domain.length\n const widest = labels.reduce((large, label) => Math.max(large, estimateLabelWidth(label)), 0)\n const keepEvery = Math.max(1, Math.ceil((widest + LABEL_GAP) / Math.max(step, 1)))\n\n return spec.domain\n .map((category, index) => ({\n key: `x-${category}`,\n x: scale.map(category) + scale.bandwidth / 2,\n y: 20,\n label: labels[index],\n date: null,\n anchor: 'middle' as const,\n }))\n .filter((_, index) => index % keepEvery === 0)\n }\n\n if (spec.kind === 'time') {\n const scale = this.context.xScale() as Scale<Date>\n const result = timeTicks(spec.domain[0], spec.domain[1], box.innerWidth)\n\n const fine = result.unit === 'hour' || result.unit === 'minute' || result.unit === 'second'\n const days = new Set(result.values.map((v) => v.toISOString().slice(0, 10)))\n const multiDay = days.size > 1\n const seen = new Set<string>()\n\n return result.values.map((value) => {\n const day = value.toISOString().slice(0, 10)\n\n const first = fine && multiDay && !seen.has(day)\n seen.add(day)\n\n return {\n key: `x-${value.getTime()}`,\n x: scale.map(value),\n y: first ? 14 : 20,\n label: custom ? custom(value as never) : result.format(value, this.locale()),\n date: first\n ? new Intl.DateTimeFormat(this.locale(), {\n day: '2-digit',\n month: '2-digit',\n timeZone: 'UTC',\n }).format(value)\n : null,\n anchor: 'middle',\n }\n })\n }\n\n const scale = this.context.xScale() as Scale<number>\n return niceTicks(spec.domain[0], spec.domain[1], this.tickCount()).map((value) => ({\n key: `x-${value}`,\n x: scale.map(value),\n y: 20,\n label: custom ? custom(value as never) : formatCompact(value, this.locale()),\n date: null,\n anchor: 'middle',\n }))\n }\n}\n","@for (y of gridLines(); track $index) {\n <svg:line\n class=\"gbt-chart-axis__grid\"\n x1=\"0\"\n [attr.x2]=\"innerWidth()\"\n [attr.y1]=\"y\"\n [attr.y2]=\"y\"\n />\n}\n@for (tick of ticks(); track tick.key) {\n <svg:text\n class=\"gbt-chart-axis__label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"tick.y\"\n [attr.text-anchor]=\"tick.anchor\"\n >\n @if (tick.date) {\n <svg:tspan [attr.x]=\"tick.x\" dy=\"0\">{{ tick.label }}</svg:tspan>\n <svg:tspan [attr.x]=\"tick.x\" dy=\"1.1em\">{{ tick.date }}</svg:tspan>\n } @else {\n {{ tick.label }}\n }\n </svg:text>\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\n\nexport interface TooltipRow {\n label: string\n value: string\n\n series?: 1 | 2 | 3\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n}\n\nexport interface TooltipPoint<X> {\n x: X\n\n header: string\n rows: TooltipRow[]\n}\n\n@Component({\n selector: 'gbt-chart-tooltip',\n standalone: true,\n imports: [],\n templateUrl: './chart-tooltip.html',\n styleUrl: './chart-tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartTooltip<X> {\n private readonly context = inject(CHART_CONTEXT)\n\n points = input.required<TooltipPoint<X>[]>()\n\n protected readonly active = computed<TooltipPoint<X> | null>(() => {\n const index = this.context.activeIndex()\n if (index === null) return null\n return this.points()[index] ?? null\n })\n\n protected readonly left = computed(() => {\n const position = this.context.activePosition()\n if (position === null) return 0\n return position + this.context.box().margin.left\n })\n\n protected readonly anchor = computed<'start' | 'middle' | 'end'>(() => {\n const index = this.context.activeIndex()\n if (index === null) return 'middle'\n const last = this.context.pointValues().length - 1\n return index === 0 ? 'start' : index === last ? 'end' : 'middle'\n })\n}\n","<div class=\"gbt-chart-tooltip\" role=\"status\" aria-live=\"polite\">\n @if (active(); as point) {\n <div class=\"gbt-chart-tooltip__panel\" [style.left.px]=\"left()\" [attr.data-anchor]=\"anchor()\">\n <p class=\"gbt-chart-tooltip__header\">{{ point.header }}</p>\n <ul class=\"gbt-chart-tooltip__rows\">\n @for (row of point.rows; track $index) {\n <li>\n <span\n class=\"gbt-chart-tooltip__swatch\"\n [attr.data-series]=\"row.series ?? null\"\n [attr.data-pattern]=\"row.pattern ?? 'solid'\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"gbt-chart-tooltip__label\">{{ row.label }}</span>\n <span class=\"gbt-chart-tooltip__value\">{{ row.value }}</span>\n </li>\n }\n </ul>\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, booleanAttribute, input, output } from '@angular/core'\n\nexport interface LegendEntry {\n label: string\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n\n color?: string\n\n value?: string\n}\n\nconst DASH_ARRAYS: Record<NonNullable<LegendEntry['pattern']>, string> = {\n solid: 'none',\n dashed: '6 3',\n dotted: '1 3',\n}\n\n@Component({\n selector: 'gbt-chart-legend',\n standalone: true,\n imports: [],\n templateUrl: './chart-legend.html',\n styleUrl: './chart-legend.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartLegend {\n entries = input.required<LegendEntry[]>()\n\n interactive = input(false, { transform: booleanAttribute })\n activeIndex = input<number | null>(null)\n activeIndexChange = output<number | null>()\n\n protected dashArray(pattern: LegendEntry['pattern']): string {\n return DASH_ARRAYS[pattern ?? 'solid']\n }\n\n protected onMouseLeave(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement\n if (target.ownerDocument.activeElement === target) return\n this.activeIndexChange.emit(null)\n }\n}\n","<ul class=\"gbt-chart-legend\">\n @for (entry of entries(); track $index) {\n <li\n class=\"gbt-chart-legend__item\"\n [class.gbt-chart-legend__item--active]=\"interactive() && activeIndex() === $index\"\n [attr.data-pattern]=\"entry.pattern ?? 'solid'\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n (mouseenter)=\"interactive() && activeIndexChange.emit($index)\"\n (mouseleave)=\"interactive() && onMouseLeave($event)\"\n (focus)=\"interactive() && activeIndexChange.emit($index)\"\n (blur)=\"interactive() && activeIndexChange.emit(null)\"\n >\n <svg class=\"gbt-chart-legend__swatch\" viewBox=\"0 0 24 8\" aria-hidden=\"true\" focusable=\"false\">\n @if (entry.color; as color) {\n <rect\n class=\"gbt-chart-legend__fill\"\n x=\"4\"\n y=\"0\"\n width=\"8\"\n height=\"8\"\n rx=\"2\"\n [attr.fill]=\"color\"\n />\n } @else {\n <line\n class=\"gbt-chart-legend__line\"\n x1=\"0\"\n y1=\"4\"\n x2=\"24\"\n y2=\"4\"\n [attr.stroke-dasharray]=\"dashArray(entry.pattern)\"\n stroke-width=\"2\"\n />\n }\n </svg>\n {{ entry.label }}\n @if (entry.value; as value) {\n <span class=\"gbt-chart-legend__value\">{{ value }}</span>\n }\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'\n\n@Component({\n selector: 'gbt-chart-empty',\n standalone: true,\n imports: [],\n templateUrl: './chart-empty.html',\n styleUrl: './chart-empty.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartEmpty {\n message = input.required<string>()\n actionLabel = input<string>('')\n\n action = output<void>()\n}\n","<div class=\"gbt-chart-empty\" role=\"status\">\n <div class=\"gbt-chart-empty__icon\" aria-hidden=\"true\">\n <ng-content select=\"[gbtChartEmptyIcon]\" />\n </div>\n <p class=\"gbt-chart-empty__message\">{{ message() }}</p>\n @if (actionLabel()) {\n <button type=\"button\" class=\"gbt-chart-empty__action\" (click)=\"action.emit()\">\n {{ actionLabel() }}\n </button>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-chart-table',\n standalone: true,\n imports: [],\n templateUrl: './chart-table.html',\n styleUrl: './chart-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartTable {\n caption = input.required<string>()\n columns = input.required<string[]>()\n rows = input.required<(string | number)[][]>()\n}\n","<div class=\"gbt-sr-only\">\n <table>\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n @for (column of columns(); track column) {\n <th scope=\"col\">{{ column }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of rows(); track $index) {\n <tr>\n @for (cell of row; track $index) {\n <td>{{ cell }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\nimport { areaPath, linePath, type Scale } from '../../../primitives'\nimport type { ChartSeries } from '../chart-data/chart-data'\n\ninterface RenderedSeries {\n label: string\n strokePath: string\n fillPath: string\n\n colorIndex: number\n dashArray: string\n}\n\ninterface ActiveDot {\n x: number\n y: number\n colorIndex: number\n}\n\nconst DASH_ARRAYS: Record<NonNullable<ChartSeries<unknown>['pattern']>, string> = {\n solid: 'none',\n dashed: '6 3',\n dotted: '1 3',\n}\n\nexport const DEFAULT_PATTERNS: NonNullable<ChartSeries<unknown>['pattern']>[] = [\n 'solid',\n 'dashed',\n 'dotted',\n]\n\n@Component({\n selector: 'g[gbtLineSeries]',\n standalone: true,\n imports: [],\n templateUrl: './line-series.html',\n styleUrl: './line-series.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'aria-hidden': 'true' },\n})\nexport class LineSeries<X> {\n series = input.required<ChartSeries<X>[]>()\n area = input(false)\n\n private readonly context = inject(CHART_CONTEXT)\n\n protected readonly renderedLines = computed<RenderedSeries[]>(() => {\n const x = this.context.xScale() as Scale<never>\n const y = this.context.yScale()\n\n const base = Math.min(Math.max(y.map(0), 0), this.context.box().innerHeight)\n\n return this.series().map((oneSeries, index) => {\n const points = oneSeries.points.map((p) => ({\n x: x.map(p.x as never),\n y: y.map(p.y),\n }))\n return {\n label: oneSeries.label,\n strokePath: linePath(points),\n fillPath: areaPath(points, base),\n colorIndex: (index % 3) + 1,\n dashArray:\n DASH_ARRAYS[oneSeries.pattern ?? DEFAULT_PATTERNS[index % DEFAULT_PATTERNS.length]],\n }\n })\n })\n\n protected readonly activeDots = computed<ActiveDot[]>(() => {\n const activeIndex = this.context.activeIndex()\n if (activeIndex === null) return []\n const activeXValue = this.context.pointValues()[activeIndex]\n if (activeXValue === undefined) return []\n\n const key = activeXValue instanceof Date ? activeXValue.getTime() : activeXValue\n const x = this.context.xScale() as Scale<never>\n const y = this.context.yScale()\n\n const dots: ActiveDot[] = []\n this.series().forEach((oneSeries, seriesIndex) => {\n const point = oneSeries.points.find(\n (p) => (p.x instanceof Date ? p.x.getTime() : p.x) === key,\n )\n if (point === undefined) return\n dots.push({\n x: x.map(point.x as never),\n y: y.map(point.y),\n colorIndex: (seriesIndex % 3) + 1,\n })\n })\n return dots\n })\n}\n","@for (renderedLine of renderedLines(); track $index) {\n @if (area()) {\n <svg:path\n class=\"gbt-line-series__area\"\n [attr.d]=\"renderedLine.fillPath\"\n [attr.data-series]=\"renderedLine.colorIndex\"\n />\n }\n <svg:path\n class=\"gbt-line-series__line\"\n [attr.d]=\"renderedLine.strokePath\"\n [attr.data-series]=\"renderedLine.colorIndex\"\n [attr.stroke-dasharray]=\"renderedLine.dashArray\"\n />\n}\n@for (dot of activeDots(); track $index) {\n <svg:circle\n class=\"gbt-line-series__dot\"\n [attr.cx]=\"dot.x\"\n [attr.cy]=\"dot.y\"\n r=\"4\"\n [attr.data-series]=\"dot.colorIndex\"\n />\n}\n","import { niceTicks } from '../../../primitives'\n\nexport interface ChartPoint<X> {\n x: X\n y: number\n\n display?: string\n}\n\nexport interface ChartSeries<X> {\n label: string\n points: ChartPoint<X>[]\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n}\n\nexport interface ChartInterval {\n start: Date\n end: Date\n label: string\n}\n\nconst DAY = 86400000\n\nexport function yDomain<X>(series: ChartSeries<X>[], includeZero: boolean): [number, number] {\n const values = series.flatMap((s) => s.points.map((p) => p.y))\n\n if (values.length === 0) return [0, 1]\n\n let min = Math.min(...values)\n let max = Math.max(...values)\n if (includeZero) {\n min = Math.min(min, 0)\n max = Math.max(max, 0)\n }\n\n if (min === max) return [min, min + 1]\n return [min, max]\n}\n\nexport function numericXDomain(series: ChartSeries<number>[]): [number, number] {\n const values = series.flatMap((s) => s.points.map((p) => p.x))\n if (values.length === 0) return [0, 1]\n const min = Math.min(...values)\n const max = Math.max(...values)\n return min === max ? [min, min + 1] : [min, max]\n}\n\nexport function timeXDomain(series: ChartSeries<Date>[]): [Date, Date] {\n const values = series.flatMap((s) => s.points.map((p) => p.x.getTime()))\n\n if (values.length === 0) return [new Date(-DAY), new Date(0)]\n const min = Math.min(...values)\n const max = Math.max(...values)\n return min === max ? [new Date(min), new Date(min + DAY)] : [new Date(min), new Date(max)]\n}\n\nexport function longestSeriesLength<X>(series: ChartSeries<X>[]): number {\n return series.reduce((longest, s) => Math.max(longest, s.points.length), 0)\n}\n\nexport function niceYDomain<X>(\n series: ChartSeries<X>[],\n includeZero: boolean,\n tickCount: number,\n): [number, number] {\n const [min, max] = yDomain(series, includeZero)\n const ticks = niceTicks(min, max, tickCount)\n\n if (ticks.length === 0) return [min, max]\n return [ticks[0], ticks[ticks.length - 1]]\n}\n\nexport function niceXDomain(series: ChartSeries<number>[], tickCount: number): [number, number] {\n const [min, max] = numericXDomain(series)\n const ticks = niceTicks(min, max, tickCount)\n if (ticks.length === 0) return [min, max]\n return [ticks[0], ticks[ticks.length - 1]]\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n isDevMode,\n signal,\n} from '@angular/core'\nimport { ChartFrame } from '../chart-frame/chart-frame'\nimport { ChartAxis } from '../chart-axis/chart-axis'\nimport { ChartTooltip, type TooltipPoint } from '../chart-tooltip/chart-tooltip'\nimport { ChartLegend, type LegendEntry } from '../chart-legend/chart-legend'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { DEFAULT_PATTERNS, LineSeries } from './line-series'\nimport { formatCompact, formatNumber } from '../../../primitives'\nimport type { AxisSpec, LinearAxisSpec, PointValue } from '../chart-context/chart-context'\nimport {\n niceXDomain,\n niceYDomain,\n timeXDomain,\n type ChartPoint,\n type ChartSeries,\n} from '../chart-data/chart-data'\n\nconst MAX_SERIES = 3\n\nconst ABSENT = '—'\n\n@Component({\n selector: 'gbt-line-chart',\n standalone: true,\n imports: [ChartFrame, ChartAxis, ChartTooltip, ChartLegend, ChartEmpty, ChartTable, LineSeries],\n templateUrl: './line-chart.html',\n styleUrl: './line-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineChart<X extends number | Date> {\n series = input.required<ChartSeries<X>[]>()\n xKind = input.required<'linear' | 'time'>()\n locale = input.required<string>()\n label = input.required<string>()\n tableCaption = input.required<string>()\n xColumn = input.required<string>()\n emptyMessage = input.required<string>()\n area = input(false)\n yZero = input(true)\n yTickCount = input(5)\n xTickCount = input(5)\n size = input<{ width: number; height: number } | null>(null)\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected readonly hasData = computed(() => this.series().some((s) => s.points.length > 0))\n\n protected readonly xSpec = computed<AxisSpec>(() =>\n this.xKind() === 'time'\n ? { kind: 'time', domain: timeXDomain(this.series() as ChartSeries<Date>[]) }\n : {\n kind: 'linear',\n domain: niceXDomain(this.series() as ChartSeries<number>[], this.xTickCount()),\n },\n )\n\n protected readonly ySpec = computed<LinearAxisSpec>(() => ({\n kind: 'linear',\n domain: niceYDomain(this.series(), this.yZero(), this.yTickCount()),\n }))\n\n protected readonly legendEntries = computed<LegendEntry[]>(() => {\n const index = this.activeIndex()\n const xValues = this.xValues()\n\n const x = index === null ? xValues[xValues.length - 1] : xValues[index]\n return this.series().map((s, seriesIndex) => ({\n label: s.label,\n\n pattern: s.pattern ?? DEFAULT_PATTERNS[seriesIndex % DEFAULT_PATTERNS.length],\n value: x === undefined ? ABSENT : this.displayValue(s, x),\n }))\n })\n\n protected readonly publicXValues = computed<PointValue[]>(() => this.xValues())\n\n protected readonly tooltipPoints = computed<TooltipPoint<X>[]>(() =>\n this.xValues().map((x) => ({\n x,\n header: this.formatX(x),\n rows: this.series().map((s, index) => ({\n label: s.label,\n value: this.displayValue(s, x),\n series: ((index % 3) + 1) as 1 | 2 | 3,\n pattern: s.pattern ?? DEFAULT_PATTERNS[index % DEFAULT_PATTERNS.length],\n })),\n })),\n )\n\n protected readonly tableColumns = computed(() => [\n this.xColumn(),\n ...this.series().map((s) => s.label),\n ])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.xValues().map((x) => [\n this.formatX(x),\n ...this.series().map((s) => this.displayValue(s, x)),\n ]),\n )\n\n private readonly formatX = (x: X): string =>\n x instanceof Date\n ? new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'short',\n timeStyle: 'short',\n timeZone: 'UTC',\n }).format(x)\n : formatCompact(x as number, this.locale())\n\n private readonly xValues = computed<X[]>(() => {\n const seen = new Map<number | string, X>()\n for (const oneSeries of this.series()) {\n for (const point of oneSeries.points) {\n seen.set(point.x instanceof Date ? point.x.getTime() : (point.x as number), point.x)\n }\n }\n return [...seen.entries()]\n .sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0))\n .map(([, x]) => x)\n })\n\n private findPoint(oneSeries: ChartSeries<X>, x: X): ChartPoint<X> | null {\n const key = x instanceof Date ? x.getTime() : x\n return oneSeries.points.find((p) => (p.x instanceof Date ? p.x.getTime() : p.x) === key) ?? null\n }\n\n private displayValue(oneSeries: ChartSeries<X>, x: X): string {\n const point = this.findPoint(oneSeries, x)\n if (point === null) return ABSENT\n return point.display ?? formatNumber(point.y, this.locale())\n }\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const count = this.series().length\n if (count > MAX_SERIES) {\n console.warn(\n `gbt-line-chart: ${count} series received for ${MAX_SERIES} distinguishable colors. The palette cycles.`,\n )\n }\n })\n }\n }\n}\n","<gbt-chart-frame\n [label]=\"label()\"\n [x]=\"xSpec()\"\n [y]=\"ySpec()\"\n [pointValues]=\"publicXValues()\"\n [size]=\"size()\"\n [heading]=\"heading()\"\n [headingLevel]=\"headingLevel()\"\n [headline]=\"headline()\"\n [trend]=\"trend()\"\n (activeIndexChange)=\"activeIndex.set($event)\"\n>\n <svg:g gbtChartLayer>\n <svg:g gbtChartAxis axis=\"y\" [locale]=\"locale()\" [tickCount]=\"yTickCount()\" grid></svg:g>\n <svg:g gbtChartAxis axis=\"x\" [locale]=\"locale()\" [tickCount]=\"xTickCount()\"></svg:g>\n <svg:g gbtLineSeries [series]=\"series()\" [area]=\"area()\"></svg:g>\n </svg:g>\n <gbt-chart-tooltip [points]=\"tooltipPoints()\" />\n @if (hasData()) {\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"tableColumns()\" [rows]=\"tableRows()\" />\n } @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n }\n</gbt-chart-frame>\n@if (series().length > 1) {\n <gbt-chart-legend [entries]=\"legendEntries()\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\nimport type { BandScale } from '../../../primitives'\nimport type { ChartSeries } from '../chart-data/chart-data'\n\ninterface RenderedBar {\n category: string\n x: number\n y: number\n width: number\n height: number\n}\n\n@Component({\n selector: 'g[gbtBarSeries]',\n standalone: true,\n imports: [],\n templateUrl: './bar-series.html',\n styleUrl: './bar-series.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'aria-hidden': 'true' },\n})\nexport class BarSeries {\n private readonly context = inject(CHART_CONTEXT)\n\n series = input.required<ChartSeries<string>>()\n\n protected readonly activeIndex = computed(() => this.context.activeIndex())\n\n protected readonly bars = computed<RenderedBar[]>(() => {\n const x = this.context.xScale() as BandScale\n const y = this.context.yScale()\n const base = y.map(0)\n\n return this.series().points.map((point) => {\n const top = y.map(point.y)\n return {\n category: point.x,\n x: x.map(point.x),\n\n y: Math.min(top, base),\n width: x.bandwidth,\n height: Math.abs(base - top),\n }\n })\n })\n}\n","@for (bar of bars(); track bar.category) {\n <svg:rect\n class=\"gbt-bar-series__bar\"\n [attr.x]=\"bar.x\"\n [attr.y]=\"bar.y\"\n [attr.width]=\"bar.width\"\n [attr.height]=\"bar.height\"\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n />\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\nimport { ChartFrame } from '../chart-frame/chart-frame'\nimport { ChartAxis } from '../chart-axis/chart-axis'\nimport { ChartTooltip, type TooltipPoint } from '../chart-tooltip/chart-tooltip'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { BarSeries } from './bar-series'\nimport { formatNumber } from '../../../primitives'\nimport type { AxisSpec, LinearAxisSpec, PointValue } from '../chart-context/chart-context'\nimport { niceYDomain, type ChartPoint, type ChartSeries } from '../chart-data/chart-data'\n\nconst BAND_PADDING = 0.2\n\n@Component({\n selector: 'gbt-bar-chart',\n standalone: true,\n imports: [ChartFrame, ChartAxis, ChartTooltip, ChartEmpty, ChartTable, BarSeries],\n templateUrl: './bar-chart.html',\n styleUrl: './bar-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarChart {\n series = input.required<ChartSeries<string>>()\n locale = input.required<string>()\n label = input.required<string>()\n tableCaption = input.required<string>()\n xColumn = input.required<string>()\n emptyMessage = input.required<string>()\n yTickCount = input(5)\n size = input<{ width: number; height: number } | null>(null)\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n\n protected readonly hasData = computed(() => this.series().points.length > 0)\n\n protected readonly publicXValues = computed<PointValue[]>(() =>\n this.series().points.map((p) => p.x),\n )\n\n protected readonly xSpec = computed<AxisSpec>(() => ({\n kind: 'band',\n domain: this.series().points.map((p) => p.x),\n padding: BAND_PADDING,\n }))\n\n protected readonly ySpec = computed<LinearAxisSpec>(() => ({\n kind: 'linear',\n\n domain: niceYDomain([this.series()], true, this.yTickCount()),\n }))\n\n private displayValue(point: ChartPoint<string>): string {\n return point.display ?? formatNumber(point.y, this.locale())\n }\n\n protected readonly tooltipPoints = computed<TooltipPoint<string>[]>(() =>\n this.series().points.map((point) => ({\n x: point.x,\n header: point.x,\n rows: [{ label: this.series().label, value: this.displayValue(point), series: 1 }],\n })),\n )\n\n protected readonly tableColumns = computed(() => [this.xColumn(), this.series().label])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.series().points.map((point) => [point.x, this.displayValue(point)]),\n )\n}\n","<gbt-chart-frame\n [label]=\"label()\"\n [x]=\"xSpec()\"\n [y]=\"ySpec()\"\n [pointValues]=\"publicXValues()\"\n [size]=\"size()\"\n [heading]=\"heading()\"\n [headingLevel]=\"headingLevel()\"\n [headline]=\"headline()\"\n [trend]=\"trend()\"\n>\n <svg:g gbtChartLayer>\n <svg:g gbtChartAxis axis=\"y\" [locale]=\"locale()\" [tickCount]=\"yTickCount()\" grid></svg:g>\n <svg:g gbtChartAxis axis=\"x\" [locale]=\"locale()\"></svg:g>\n <svg:g gbtBarSeries [series]=\"series()\"></svg:g>\n </svg:g>\n <gbt-chart-tooltip [points]=\"tooltipPoints()\" />\n @if (hasData()) {\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"tableColumns()\" [rows]=\"tableRows()\" />\n } @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n }\n</gbt-chart-frame>\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\nimport { estimateLabelWidth, linePath, type Scale } from '../../../primitives'\nimport type { ChartInterval, ChartSeries } from '../chart-data/chart-data'\n\nconst LABEL_INSET = 4\n\nconst STROKE_WIDTH = 3\nconst STROKE_WIDTH_ACTIVE = 6\n\ninterface RenderedBand {\n label: string\n x: number\n width: number\n\n labeled: boolean\n\n active: boolean\n strokeWidth: number\n}\n\n@Component({\n selector: 'g[gbtTimelineSeries]',\n standalone: true,\n imports: [],\n templateUrl: './timeline-series.html',\n styleUrl: './timeline-series.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'aria-hidden': 'true' },\n})\nexport class TimelineSeries {\n series = input.required<ChartSeries<Date>>()\n intervals = input.required<ChartInterval[]>()\n\n private readonly context = inject(CHART_CONTEXT)\n\n protected readonly height = computed(() => this.context.box().innerHeight)\n\n protected readonly strokePath = computed(() => {\n const x = this.context.xScale() as Scale<Date>\n const y = this.context.yScale()\n return linePath(this.series().points.map((p) => ({ x: x.map(p.x), y: y.map(p.y) })))\n })\n\n private readonly activeInstant = computed<number | null>(() => {\n const index = this.context.activeIndex()\n if (index === null) return null\n const value = this.context.pointValues()[index]\n return value instanceof Date ? value.getTime() : null\n })\n\n protected readonly activePoint = computed<{ x: number; y: number } | null>(() => {\n const time = this.activeInstant()\n if (time === null) return null\n const point = this.series().points.find((p) => p.x.getTime() === time)\n if (point === undefined) return null\n const x = this.context.xScale() as Scale<Date>\n const y = this.context.yScale()\n return { x: x.map(point.x), y: y.map(point.y) }\n })\n\n protected readonly bands = computed<RenderedBand[]>(() => {\n const x = this.context.xScale() as Scale<Date>\n const activeTime = this.activeInstant()\n return this.intervals().map((interval) => {\n const start = x.map(interval.start)\n const end = x.map(interval.end)\n const width = Math.max(1, end - start)\n\n const active =\n activeTime !== null &&\n activeTime >= interval.start.getTime() &&\n activeTime <= interval.end.getTime()\n return {\n label: interval.label,\n x: start,\n width,\n\n labeled: LABEL_INSET + estimateLabelWidth(interval.label) <= width,\n active,\n strokeWidth: active ? STROKE_WIDTH_ACTIVE : STROKE_WIDTH,\n }\n })\n })\n}\n","@for (band of bands(); track $index) {\n <svg:rect\n class=\"gbt-timeline-series__band\"\n [attr.x]=\"band.x\"\n y=\"0\"\n [attr.width]=\"band.width\"\n [attr.height]=\"height()\"\n />\n <svg:rect\n class=\"gbt-timeline-series__band-edge\"\n [attr.x]=\"band.x\"\n y=\"0\"\n [attr.width]=\"band.width\"\n [attr.height]=\"band.strokeWidth\"\n [attr.data-active]=\"band.active ? '' : null\"\n />\n @if (band.labeled) {\n <svg:text class=\"gbt-timeline-series__band-label\" [attr.x]=\"band.x + 4\" y=\"14\">\n {{ band.label }}\n </svg:text>\n }\n}\n@if (strokePath(); as d) {\n <svg:path class=\"gbt-timeline-series__line\" [attr.d]=\"d\" />\n}\n@if (activePoint(); as p) {\n <svg:circle class=\"gbt-timeline-series__dot\" [attr.cx]=\"p.x\" [attr.cy]=\"p.y\" r=\"4\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\nimport { ChartFrame } from '../chart-frame/chart-frame'\nimport { ChartAxis } from '../chart-axis/chart-axis'\nimport { ChartTooltip, type TooltipPoint } from '../chart-tooltip/chart-tooltip'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { TimelineSeries } from './timeline-series'\nimport { formatNumber } from '../../../primitives'\nimport type { AxisSpec, LinearAxisSpec, PointValue } from '../chart-context/chart-context'\nimport {\n niceYDomain,\n timeXDomain,\n type ChartInterval,\n type ChartPoint,\n type ChartSeries,\n} from '../chart-data/chart-data'\n\n@Component({\n selector: 'gbt-timeline-chart',\n standalone: true,\n imports: [ChartFrame, ChartAxis, ChartTooltip, ChartEmpty, ChartTable, TimelineSeries],\n templateUrl: './timeline-chart.html',\n styleUrl: './timeline-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimelineChart {\n series = input.required<ChartSeries<Date>>()\n intervals = input.required<ChartInterval[]>()\n locale = input.required<string>()\n label = input.required<string>()\n tableCaption = input.required<string>()\n intervalsCaption = input.required<string>()\n xColumn = input.required<string>()\n emptyMessage = input.required<string>()\n yZero = input(true)\n yTickCount = input(5)\n size = input<{ width: number; height: number } | null>(null)\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n\n protected readonly hasData = computed(() => this.series().points.length > 0)\n\n protected readonly publicXValues = computed<PointValue[]>(() =>\n this.series().points.map((p) => p.x),\n )\n\n protected readonly xSpec = computed<AxisSpec>(() => ({\n kind: 'time',\n domain: timeXDomain([this.series()]),\n }))\n\n protected readonly ySpec = computed<LinearAxisSpec>(() => ({\n kind: 'linear',\n domain: niceYDomain([this.series()], this.yZero(), this.yTickCount()),\n }))\n\n protected readonly tooltipPoints = computed<TooltipPoint<Date>[]>(() =>\n this.series().points.map((point) => ({\n x: point.x,\n header: this.formatInstant(point.x),\n rows: [{ label: this.series().label, value: this.displayValue(point), series: 1 }],\n })),\n )\n\n protected readonly tableColumns = computed(() => [this.xColumn(), this.series().label])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.series().points.map((point) => [this.formatInstant(point.x), this.displayValue(point)]),\n )\n\n protected readonly intervalColumns = computed(() => [\n this.intervalsCaption(),\n `${this.xColumn()} — start`,\n `${this.xColumn()} — end`,\n ])\n\n protected readonly intervalRows = computed<(string | number)[][]>(() =>\n this.intervals().map((interval) => [\n interval.label,\n this.formatInstant(interval.start),\n this.formatInstant(interval.end),\n ]),\n )\n\n private readonly formatInstant = (d: Date): string =>\n new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'short',\n timeStyle: 'short',\n timeZone: 'UTC',\n }).format(d)\n\n private displayValue(point: ChartPoint<Date>): string {\n return point.display ?? formatNumber(point.y, this.locale())\n }\n}\n","<gbt-chart-frame\n [label]=\"label()\"\n [x]=\"xSpec()\"\n [y]=\"ySpec()\"\n [pointValues]=\"publicXValues()\"\n [size]=\"size()\"\n [heading]=\"heading()\"\n [headingLevel]=\"headingLevel()\"\n [headline]=\"headline()\"\n [trend]=\"trend()\"\n>\n <svg:g gbtChartLayer>\n <svg:g gbtChartAxis axis=\"y\" [locale]=\"locale()\" [tickCount]=\"yTickCount()\" grid></svg:g>\n <svg:g gbtChartAxis axis=\"x\" [locale]=\"locale()\"></svg:g>\n <svg:g gbtTimelineSeries [series]=\"series()\" [intervals]=\"intervals()\"></svg:g>\n </svg:g>\n <gbt-chart-tooltip [points]=\"tooltipPoints()\" />\n @if (hasData()) {\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"tableColumns()\" [rows]=\"tableRows()\" />\n }\n @if (hasData() && intervals().length > 0) {\n <gbt-chart-table\n [caption]=\"intervalsCaption()\"\n [columns]=\"intervalColumns()\"\n [rows]=\"intervalRows()\"\n />\n }\n @if (!hasData()) {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n }\n</gbt-chart-frame>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n isDevMode,\n input,\n signal,\n} from '@angular/core'\nimport { ChartEmpty } from '../chart-empty/chart-empty'\nimport { ChartLegend, type LegendEntry } from '../chart-legend/chart-legend'\nimport { ChartTable } from '../chart-table/chart-table'\nimport { arcPath, formatNumber, formatPercent } from '../../../primitives'\n\nexport interface PieSlice {\n label: string\n value: number\n}\n\ninterface RenderedSlice {\n label: string\n formattedValue: string\n formattedShare: string\n path: string\n color: string\n showLabel: boolean\n labelX: number\n labelY: number\n labelAnchor: 'start' | 'middle' | 'end'\n accessibleLabel: string\n}\n\nconst OUTER_RADIUS = 90\nconst LABEL_RADIUS = OUTER_RADIUS + 14\nconst LABEL_SHARE_THRESHOLD = 0.15\nconst PALETTE_SIZE = 6\n\n@Component({\n selector: 'gbt-pie-chart',\n standalone: true,\n imports: [ChartTable, ChartEmpty, ChartLegend],\n templateUrl: './pie-chart.html',\n styleUrl: './pie-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PieChart {\n slices = input.required<PieSlice[]>()\n label = input.required<string>()\n locale = input.required<string>()\n emptyMessage = input.required<string>()\n tableCaption = input.required<string>()\n categoryColumn = input.required<string>()\n valueColumn = input.required<string>()\n shareColumn = input.required<string>()\n sliceAnnouncement = input.required<(label: string, value: string, share: string) => string>()\n\n innerRadiusRatio = input<number>(0)\n\n protected readonly activeIndex = signal<number | null>(null)\n\n private readonly total = computed(() =>\n this.slices().reduce((sum, slice) => sum + slice.value, 0),\n )\n\n protected readonly renderedSlices = computed<RenderedSlice[]>(() => {\n const total = this.total()\n const innerRadius = OUTER_RADIUS * this.innerRadiusRatio()\n let angle = 0\n return this.slices().map((slice, index) => {\n const share = total <= 0 ? 0 : slice.value / total\n const startAngle = angle\n const endAngle = angle + share * Math.PI * 2\n angle = endAngle\n\n const midAngle = (startAngle + endAngle) / 2\n const labelX = Math.round(LABEL_RADIUS * Math.sin(midAngle) * 100) / 100\n const labelY = Math.round(-LABEL_RADIUS * Math.cos(midAngle) * 100) / 100\n\n const formattedValue = formatNumber(slice.value, this.locale())\n const formattedShare = formatPercent(share, this.locale())\n\n return {\n label: slice.label,\n formattedValue,\n formattedShare,\n path: arcPath({ startAngle, endAngle, innerRadius, outerRadius: OUTER_RADIUS }),\n color: this.colorFor(index),\n showLabel: share >= LABEL_SHARE_THRESHOLD,\n labelX,\n labelY,\n labelAnchor: labelX > 5 ? 'start' : labelX < -5 ? 'end' : 'middle',\n accessibleLabel: `${slice.label} — ${formattedValue}`,\n }\n })\n })\n\n protected readonly legendEntries = computed<LegendEntry[]>(() =>\n this.renderedSlices().map((slice) => ({\n label: slice.label,\n value: slice.formattedValue,\n color: slice.color,\n })),\n )\n\n protected readonly activeSlice = computed<RenderedSlice | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n return this.renderedSlices()[index] ?? null\n })\n\n protected readonly columns = computed(() => [\n this.categoryColumn(),\n this.valueColumn(),\n this.shareColumn(),\n ])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.renderedSlices().map((slice) => [slice.label, slice.formattedValue, slice.formattedShare]),\n )\n\n private colorFor(index: number): string {\n return `var(--chart-series-${(index % PALETTE_SIZE) + 1}-base)`\n }\n\n protected onMouseLeave(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement\n if (target.ownerDocument.activeElement === target) return\n this.activeIndex.set(null)\n }\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const count = this.slices().length\n if (count > PALETTE_SIZE) {\n console.warn(\n `gbt-pie-chart: ${count} slices received for ${PALETTE_SIZE} distinguishable colors. The palette cycles.`,\n )\n }\n })\n }\n }\n}\n","@if (renderedSlices().length > 0) {\n <div class=\"gbt-pie-chart\">\n <svg\n class=\"gbt-pie-chart__svg\"\n viewBox=\"-100 -100 200 200\"\n role=\"group\"\n [attr.aria-label]=\"label()\"\n >\n @for (slice of renderedSlices(); track $index) {\n <path\n class=\"gbt-pie-chart__slice\"\n role=\"img\"\n tabindex=\"0\"\n [attr.aria-label]=\"slice.accessibleLabel\"\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n [attr.d]=\"slice.path\"\n [attr.fill]=\"slice.color\"\n (mouseenter)=\"activeIndex.set($index)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (focus)=\"activeIndex.set($index)\"\n (blur)=\"activeIndex.set(null)\"\n />\n }\n @for (slice of renderedSlices(); track $index) {\n @if (slice.showLabel) {\n <!-- prettier-ignore -->\n <text\n class=\"gbt-pie-chart__label\"\n aria-hidden=\"true\"\n [attr.x]=\"slice.labelX\"\n [attr.y]=\"slice.labelY\"\n [attr.text-anchor]=\"slice.labelAnchor\"\n >{{ slice.formattedShare }}</text\n >\n }\n }\n </svg>\n <gbt-chart-legend\n [entries]=\"legendEntries()\"\n interactive\n [activeIndex]=\"activeIndex()\"\n (activeIndexChange)=\"activeIndex.set($event)\"\n />\n <div class=\"gbt-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n @if (activeSlice(); as slice) {\n {{ sliceAnnouncement()(slice.label, slice.formattedValue, slice.formattedShare) }}\n }\n </div>\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"columns()\" [rows]=\"tableRows()\" />\n </div>\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\">\n <svg\n gbtChartEmptyIcon\n viewBox=\"0 0 96 96\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"48\" cy=\"48\" r=\"30\" />\n <path\n d=\"M48 48 L48 18 A30 30 0 0 1 74 63 Z\"\n fill=\"currentColor\"\n stroke=\"none\"\n opacity=\"0.85\"\n />\n </svg>\n </gbt-chart-empty>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\nimport { ChartEmpty } from '../../organisms/chart-empty/chart-empty'\nimport { ChartTable } from '../../organisms/chart-table/chart-table'\nimport { formatNumber, linePath, linearScale, nearestIndex } from '../../../primitives'\n\nconst MARGIN = 4\n\n@Component({\n selector: 'gbt-sparkline',\n standalone: true,\n imports: [ChartEmpty, ChartTable],\n templateUrl: './sparkline.html',\n styleUrl: './sparkline.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Sparkline {\n values = input.required<number[]>()\n tableCaption = input.required<string>()\n xColumn = input.required<string>()\n yColumn = input.required<string>()\n locale = input.required<string>()\n emptyMessage = input.required<string>()\n width = input(80)\n height = input(24)\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected readonly viewBox = computed(() => `0 0 ${this.width()} ${this.height()}`)\n\n protected readonly columns = computed(() => [this.xColumn(), this.yColumn()])\n\n protected readonly tableRows = computed<(string | number)[][]>(() =>\n this.values().map((value, index) => [\n formatNumber(index + 1, this.locale()),\n formatNumber(value, this.locale()),\n ]),\n )\n\n private readonly scales = computed(() => {\n const values = this.values()\n const min = Math.min(...values)\n const max = Math.max(...values)\n return {\n x: linearScale([0, Math.max(values.length - 1, 0)], [MARGIN, this.width() - MARGIN]),\n y: linearScale([min, max], [this.height() - MARGIN, MARGIN]),\n }\n })\n\n protected readonly path = computed(() => {\n const values = this.values()\n if (values.length === 0) return null\n const { x, y } = this.scales()\n return linePath(values.map((value, index) => ({ x: x.map(index), y: y.map(value) })))\n })\n\n protected readonly positions = computed<number[]>(() => {\n const { x } = this.scales()\n return this.values().map((_, index) => x.map(index))\n })\n\n protected readonly dot = computed<{ x: number; y: number } | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n const value = this.values()[index]\n if (value === undefined) return null\n const { x, y } = this.scales()\n return { x: x.map(index), y: y.map(value) }\n })\n\n protected readonly tooltip = computed<string | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n const value = this.values()[index]\n if (value === undefined) return null\n return `${this.xColumn()} ${formatNumber(index + 1, this.locale())} — ${this.yColumn()} ${formatNumber(value, this.locale())}`\n })\n\n protected onPointerMove(event: PointerEvent | MouseEvent): void {\n const positions = this.positions()\n if (positions.length === 0) return\n const rect = (event.currentTarget as Element).getBoundingClientRect()\n this.activeIndex.set(nearestIndex(positions, event.clientX - rect.left))\n }\n\n protected onPointerLeave(event: PointerEvent | MouseEvent): void {\n const target = event.currentTarget as Element\n if (target.ownerDocument.activeElement === target) return\n this.activeIndex.set(null)\n }\n\n protected onBlur(): void {\n this.activeIndex.set(null)\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const lastIndex = this.values().length - 1\n if (lastIndex < 0) return\n const current = this.activeIndex()\n switch (event.key) {\n case 'ArrowRight':\n this.activeIndex.set(current === null ? 0 : Math.min(lastIndex, current + 1))\n break\n case 'ArrowLeft':\n this.activeIndex.set(current === null ? lastIndex : Math.max(0, current - 1))\n break\n case 'Home':\n this.activeIndex.set(0)\n break\n case 'End':\n this.activeIndex.set(lastIndex)\n break\n case 'Escape':\n this.activeIndex.set(null)\n break\n default:\n return\n }\n event.preventDefault()\n }\n}\n","@if (path(); as d) {\n <div class=\"gbt-sparkline\" role=\"status\" aria-live=\"polite\">\n <svg\n class=\"gbt-sparkline__svg\"\n [attr.viewBox]=\"viewBox()\"\n [attr.width]=\"width()\"\n [attr.height]=\"height()\"\n tabindex=\"0\"\n role=\"group\"\n [attr.aria-label]=\"tableCaption()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n >\n <path class=\"gbt-sparkline__line\" [attr.d]=\"d\" />\n @if (dot(); as p) {\n <circle class=\"gbt-sparkline__dot\" [attr.cx]=\"p.x\" [attr.cy]=\"p.y\" r=\"3\" />\n }\n </svg>\n @if (tooltip(); as text) {\n <span class=\"gbt-sparkline__tooltip\">{{ text }}</span>\n }\n </div>\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"columns()\" [rows]=\"tableRows()\" />\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-gauge-bar',\n standalone: true,\n imports: [],\n templateUrl: './gauge-bar.html',\n styleUrl: './gauge-bar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GaugeBar {\n value = input.required<number>()\n max = input.required<number>()\n label = input.required<string>()\n formattedValue = input.required<string>()\n warningLabel = input.required<string>()\n criticalLabel = input.required<string>()\n thresholds = input<{ warning: number; critical: number }>({ warning: 70, critical: 90 })\n\n protected readonly percentage = computed(() => {\n const max = this.max()\n\n if (max <= 0) return 0\n return Math.max(0, Math.min(100, (this.value() / max) * 100))\n })\n\n protected readonly severity = computed<'warning' | 'critical' | null>(() => {\n const percentage = this.percentage()\n const { warning, critical } = this.thresholds()\n if (percentage >= critical) return 'critical'\n if (percentage >= warning) return 'warning'\n return null\n })\n\n protected readonly severityLabel = computed(() => {\n const severity = this.severity()\n if (severity === 'critical') return this.criticalLabel()\n if (severity === 'warning') return this.warningLabel()\n return null\n })\n}\n","<div class=\"gbt-gauge-bar\">\n <div class=\"gbt-gauge-bar__header\">\n <span class=\"gbt-gauge-bar__label\">{{ label() }}</span>\n <span class=\"gbt-gauge-bar__value\">\n {{ formattedValue() }}\n @if (severityLabel(); as tierLabel) {\n <span class=\"gbt-gauge-bar__tier\" [attr.data-tier]=\"severity()\">{{ tierLabel }}</span>\n }\n </span>\n </div>\n <div\n class=\"gbt-gauge-bar__track\"\n role=\"progressbar\"\n [attr.aria-label]=\"label()\"\n [attr.aria-valuenow]=\"percentage()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuetext]=\"formattedValue()\"\n >\n <div\n class=\"gbt-gauge-bar__fill\"\n [attr.data-tier]=\"severity()\"\n [style.width.%]=\"percentage()\"\n ></div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\nimport { ChartEmpty } from '../../organisms/chart-empty/chart-empty'\nimport { formatNumber } from '../../../primitives'\n\nexport interface DimensionRow {\n label: string\n value: number\n\n display?: string\n}\n\ninterface RenderedRow {\n label: string\n formattedValue: string\n\n part: number\n}\n\n@Component({\n selector: 'gbt-dimension-card',\n standalone: true,\n imports: [ChartEmpty],\n templateUrl: './dimension-card.html',\n styleUrl: './dimension-card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DimensionCard {\n rows = input.required<DimensionRow[]>()\n caption = input.required<string>()\n labelColumn = input.required<string>()\n valueColumn = input.required<string>()\n emptyMessage = input.required<string>()\n locale = input.required<string>()\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected readonly renderedRows = computed<RenderedRow[]>(() => {\n const rows = this.rows()\n const maxValue = rows.reduce((max, row) => Math.max(max, row.value), 0)\n return rows.map((row) => ({\n label: row.label,\n formattedValue: row.display ?? formatNumber(row.value, this.locale()),\n\n part: maxValue <= 0 ? 0 : (row.value / maxValue) * 100,\n }))\n })\n}\n","@if (rows().length > 0) {\n <table class=\"gbt-dimension-card\">\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ labelColumn() }}</th>\n <th scope=\"col\">{{ valueColumn() }}</th>\n </tr>\n </thead>\n <tbody>\n @for (row of renderedRows(); track $index) {\n <tr\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n (mouseenter)=\"activeIndex.set($index)\"\n (mouseleave)=\"activeIndex.set(null)\"\n >\n <th scope=\"row\" class=\"gbt-dimension-card__cell\">\n <span\n class=\"gbt-dimension-card__bar\"\n [style.width.%]=\"row.part\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"gbt-dimension-card__label\">{{ row.label }}</span>\n </th>\n <td class=\"gbt-dimension-card__value\">{{ row.formattedValue }}</td>\n </tr>\n }\n </tbody>\n </table>\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\nimport { ChartEmpty } from '../../organisms/chart-empty/chart-empty'\nimport { ChartTable } from '../../organisms/chart-table/chart-table'\nimport { formatNumber, formatPercent } from '../../../primitives'\n\nexport interface FunnelStep {\n label: string\n value: number\n}\n\ninterface RenderedStep {\n label: string\n formattedValue: string\n\n part: number\n\n conversionFromPrevious: string\n}\n\n@Component({\n selector: 'gbt-funnel-chart',\n standalone: true,\n imports: [ChartTable, ChartEmpty],\n templateUrl: './funnel-chart.html',\n styleUrl: './funnel-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FunnelChart {\n steps = input.required<FunnelStep[]>()\n label = input.required<string>()\n locale = input.required<string>()\n emptyMessage = input.required<string>()\n tableCaption = input.required<string>()\n stepColumn = input.required<string>()\n valueColumn = input.required<string>()\n conversionColumn = input.required<string>()\n stepAnnouncement = input.required<(label: string, conversion: string) => string>()\n\n private readonly reference = computed(() => this.steps()[0]?.value ?? 0)\n\n protected readonly activeIndex = signal<number | null>(null)\n\n protected onMouseLeave(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement\n if (target.ownerDocument.activeElement === target) return\n this.activeIndex.set(null)\n }\n\n protected readonly renderedSteps = computed<RenderedStep[]>(() => {\n const reference = this.reference()\n const steps = this.steps()\n return steps.map((step, index) => {\n const previousValue = index === 0 ? step.value : steps[index - 1].value\n return {\n label: step.label,\n formattedValue: formatNumber(step.value, this.locale()),\n\n part: reference <= 0 ? 0 : (step.value / reference) * 100,\n conversionFromPrevious: formatPercent(\n previousValue <= 0 ? 0 : step.value / previousValue,\n this.locale(),\n ),\n }\n })\n })\n\n protected readonly activeStep = computed<RenderedStep | null>(() => {\n const index = this.activeIndex()\n if (index === null) return null\n return this.renderedSteps()[index] ?? null\n })\n\n protected readonly columns = computed(() => [\n this.stepColumn(),\n this.valueColumn(),\n this.conversionColumn(),\n ])\n\n protected readonly tableRows = computed<(string | number)[][]>(() => {\n const reference = this.reference()\n return this.steps().map((step) => [\n step.label,\n formatNumber(step.value, this.locale()),\n formatPercent(reference <= 0 ? 0 : step.value / reference, this.locale()),\n ])\n })\n}\n","@if (renderedSteps().length > 0) {\n <ol class=\"gbt-funnel-chart\" [attr.aria-label]=\"label()\">\n @for (step of renderedSteps(); track $index) {\n <li\n class=\"gbt-funnel-chart__step\"\n [attr.data-active]=\"$index === activeIndex() ? '' : null\"\n tabindex=\"0\"\n (mouseenter)=\"activeIndex.set($index)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (focus)=\"activeIndex.set($index)\"\n (blur)=\"activeIndex.set(null)\"\n >\n <div class=\"gbt-funnel-chart__bar\" [style.width.%]=\"step.part\" aria-hidden=\"true\"></div>\n <span class=\"gbt-funnel-chart__label\">{{ step.label }}</span>\n <span class=\"gbt-funnel-chart__value\">{{ step.formattedValue }}</span>\n @if ($index === activeIndex()) {\n <span class=\"gbt-funnel-chart__tip\" aria-hidden=\"true\">{{\n step.conversionFromPrevious\n }}</span>\n }\n </li>\n }\n </ol>\n <div class=\"gbt-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n @if (activeStep(); as step) {\n {{ stepAnnouncement()(step.label, step.conversionFromPrevious) }}\n }\n </div>\n <gbt-chart-table [caption]=\"tableCaption()\" [columns]=\"columns()\" [rows]=\"tableRows()\" />\n} @else {\n <gbt-chart-empty [message]=\"emptyMessage()\" />\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n contentChild,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\ninterface PopupPosition {\n top: string\n left: string | null\n right: string | null\n}\n\n@Directive({\n selector: '[gbtMenuTrigger]',\n standalone: true,\n})\nexport class MenuTrigger {}\n\n@Component({\n selector: 'gbt-menu',\n standalone: true,\n imports: [Icon],\n templateUrl: './menu.html',\n styleUrl: './menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'onDocumentClick($event)',\n '(focusout)': 'onFocusOut($event)',\n '(window:scroll)': 'updatePosition()',\n '(window:resize)': 'updatePosition()',\n '[class.gbt-menu-host--custom]': '!triggerIcon() && !!customTrigger()',\n },\n})\nexport class Menu {\n private readonly elementRef = inject(ElementRef<HTMLElement>)\n private readonly injector = inject(Injector)\n\n label = input.required<string>()\n align = input<'start' | 'end'>('start')\n triggerIcon = input<string | null>(null)\n triggerAriaLabel = input<string | null>(null)\n chevron = input(true, { transform: booleanAttribute })\n opened = output<void>()\n\n protected readonly open = signal(false)\n protected readonly position = signal<PopupPosition | null>(null)\n\n protected readonly customTrigger = contentChild(MenuTrigger)\n\n private readonly trigger = viewChild<ElementRef<HTMLButtonElement>>('trigger')\n private readonly list = viewChild<ElementRef<HTMLElement>>('list')\n\n protected toggle(): void {\n this.open.update((value) => !value)\n if (this.open()) {\n this.updatePosition()\n this.focusAfterRender('first')\n this.opened.emit()\n }\n }\n\n protected close(returnFocus: boolean): void {\n if (!this.open()) return\n const active = document.activeElement\n const focusIsFree =\n !active || active === document.body || !!this.list()?.nativeElement.contains(active)\n this.open.set(false)\n if (returnFocus && focusIsFree) {\n this.trigger()?.nativeElement.focus()\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault()\n this.close(true)\n return\n }\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return\n event.preventDefault()\n const target = event.key === 'ArrowUp' ? 'last' : 'first'\n if (!this.open()) {\n this.open.set(true)\n this.updatePosition()\n this.opened.emit()\n }\n this.focusAfterRender(target)\n }\n\n protected onListKeydown(event: KeyboardEvent): void {\n const items = this.items()\n if (items.length === 0) return\n const index = items.indexOf(document.activeElement as HTMLElement)\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this.close(true)\n break\n case 'ArrowDown':\n event.preventDefault()\n this.focus((index + 1) % items.length)\n break\n case 'ArrowUp':\n event.preventDefault()\n this.focus((index - 1 + items.length) % items.length)\n break\n case 'Home':\n event.preventDefault()\n this.focus(0)\n break\n case 'End':\n event.preventDefault()\n this.focus(items.length - 1)\n break\n }\n }\n\n protected onListClick(event: MouseEvent): void {\n const item = (event.target as Element | null)?.closest('[role=\"menuitem\"]') ?? null\n if (item?.getAttribute('aria-disabled') === 'true') return\n this.close(item !== null)\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.close(false)\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const target = event.relatedTarget as Node | null\n if (this.open() && !this.elementRef.nativeElement.contains(target)) {\n this.open.set(false)\n }\n }\n\n protected updatePosition(): void {\n if (!this.open()) return\n const trigger = this.trigger()?.nativeElement\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n this.position.set(\n this.align() === 'end'\n ? { top: `${rect.bottom + 6}px`, left: null, right: `${window.innerWidth - rect.right}px` }\n : { top: `${rect.bottom + 6}px`, left: `${rect.left}px`, right: null },\n )\n }\n\n private items(): HTMLElement[] {\n const list = this.list()?.nativeElement\n if (!list) return []\n return [...list.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')]\n }\n\n private focus(index: number): void {\n this.items()[index]?.focus()\n }\n\n private focusAfterRender(target: 'first' | 'last'): void {\n afterNextRender(\n () => {\n const items = this.items()\n this.focus(target === 'last' ? items.length - 1 : 0)\n },\n { injector: this.injector },\n )\n }\n}\n","<div class=\"gbt-menu\">\n <button\n #trigger\n type=\"button\"\n class=\"gbt-menu__trigger\"\n [class.gbt-menu__trigger--open]=\"open()\"\n [class.gbt-menu__trigger--icon-only]=\"triggerIcon()\"\n [class.gbt-menu__trigger--custom]=\"!triggerIcon() && customTrigger()\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"triggerIcon() ? label() : triggerAriaLabel()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (triggerIcon(); as icon) {\n <gbt-icon [name]=\"icon\" aria-hidden=\"true\" />\n } @else {\n <ng-content select=\"[gbtMenuTrigger]\">\n <span class=\"gbt-menu__label\">{{ label() }}</span>\n </ng-content>\n @if (chevron()) {\n <gbt-icon name=\"chevron-down\" class=\"gbt-menu__chevron\" aria-hidden=\"true\" />\n }\n }\n </button>\n\n @if (open() && position(); as pos) {\n <div\n #list\n class=\"gbt-menu__list\"\n role=\"menu\"\n tabindex=\"-1\"\n [attr.aria-label]=\"label()\"\n [style.top]=\"pos.top\"\n [style.left]=\"pos.left\"\n [style.right]=\"pos.right\"\n (keydown)=\"onListKeydown($event)\"\n (click)=\"onListClick($event)\"\n >\n <ng-content />\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n booleanAttribute,\n inject,\n input,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type MenuItemVariant = 'default' | 'danger'\n\n@Component({\n selector: 'button[gbtMenuItem], a[gbtMenuItem]',\n standalone: true,\n imports: [Icon],\n templateUrl: './menu-item.html',\n styleUrl: './menu-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gbt-menu__item',\n role: 'menuitem',\n tabindex: '-1',\n '[attr.data-variant]': 'variant() === \"danger\" ? \"danger\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n },\n})\nexport class MenuItem {\n icon = input<string | null>(null)\n variant = input<MenuItemVariant>('default')\n disabled = input(false, { transform: booleanAttribute })\n\n constructor() {\n const host: HTMLElement = inject(ElementRef).nativeElement\n if (host.tagName === 'BUTTON' && !host.hasAttribute('type')) {\n host.setAttribute('type', 'button')\n }\n\n const swallowWhenDisabled = (event: Event): void => {\n if (this.disabled()) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n host.addEventListener('click', swallowWhenDisabled, true)\n host.addEventListener('auxclick', swallowWhenDisabled, true)\n inject(DestroyRef).onDestroy(() => {\n host.removeEventListener('click', swallowWhenDisabled, true)\n host.removeEventListener('auxclick', swallowWhenDisabled, true)\n })\n }\n}\n","@if (icon(); as name) {\n <gbt-icon [name]=\"name\" class=\"gbt-menu-item__icon\" aria-hidden=\"true\" />\n}\n<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core'\n\nexport type PopoverAlign = 'start' | 'end'\n\ninterface PopoverPosition {\n top: string\n left: string | null\n right: string | null\n}\n\nlet nextPopoverId = 0\n\n@Component({\n selector: 'gbt-popover',\n standalone: true,\n exportAs: 'gbtPopover',\n imports: [],\n templateUrl: './popover.html',\n styleUrl: './popover.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gbt-popover-host',\n '(click)': 'onTriggerClick($event)',\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onKeydown($event)',\n '(window:scroll)': 'updatePosition()',\n '(window:resize)': 'updatePosition()',\n },\n})\nexport class Popover {\n private readonly elementRef = inject(ElementRef<HTMLElement>)\n private readonly triggerSlot = viewChild<ElementRef<HTMLElement>>('triggerSlot')\n\n align = input<PopoverAlign>('start')\n\n readonly panelId = `gbt-popover-${++nextPopoverId}`\n\n private readonly isOpen = signal(false)\n readonly open = this.isOpen.asReadonly()\n\n protected readonly position = signal<PopoverPosition | null>(null)\n\n toggle(): void {\n this.isOpen.update((value) => !value)\n if (this.isOpen()) {\n this.updatePosition()\n }\n }\n\n close(returnFocus = false): void {\n if (!this.isOpen()) {\n return\n }\n this.isOpen.set(false)\n if (returnFocus) {\n this.focusTrigger()\n }\n }\n\n protected onTriggerClick(event: MouseEvent): void {\n const trigger = this.triggerSlot()?.nativeElement\n if (trigger?.contains(event.target as Node)) {\n this.toggle()\n }\n }\n\n protected updatePosition(): void {\n if (!this.isOpen()) {\n return\n }\n const trigger = this.triggerSlot()?.nativeElement\n if (!trigger) {\n return\n }\n const rect = trigger.getBoundingClientRect()\n this.position.set(\n this.align() === 'end'\n ? { top: `${rect.bottom + 6}px`, left: null, right: `${window.innerWidth - rect.right}px` }\n : { top: `${rect.bottom + 6}px`, left: `${rect.left}px`, right: null },\n )\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n if (this.isOpen() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.close(false)\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.isOpen()) {\n event.preventDefault()\n event.stopPropagation()\n this.close(true)\n }\n }\n\n private focusTrigger(): void {\n const trigger = this.triggerSlot()?.nativeElement\n trigger\n ?.querySelector<HTMLElement>('button, a[href], input, select, textarea, [tabindex]')\n ?.focus()\n }\n}\n","<span #triggerSlot class=\"gbt-popover__trigger\">\n <ng-content></ng-content>\n</span>\n@if (open() && position(); as pos) {\n <div\n class=\"gbt-popover__panel\"\n [id]=\"panelId\"\n [style.top]=\"pos.top\"\n [style.left]=\"pos.left\"\n [style.right]=\"pos.right\"\n >\n <ng-content select=\"[popover-content]\"></ng-content>\n </div>\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, input } from '@angular/core'\nimport { NgTemplateOutlet } from '@angular/common'\n\nexport type DescriptionListLayout = 'stacked' | 'inline'\nexport type DescriptionListValueAlign = 'start' | 'end'\nexport type DescriptionListResponsive = 'viewport' | 'container'\n\nexport interface DescriptionListEntry {\n term: string\n value: string | TemplateRef<unknown>\n}\n\n@Component({\n selector: 'gbt-description-list',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './description-list.html',\n styleUrl: './description-list.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-responsive]': \"responsive() === 'container' ? 'container' : null\",\n },\n})\nexport class DescriptionList {\n items = input.required<DescriptionListEntry[]>()\n layout = input<DescriptionListLayout>('stacked')\n valueAlign = input<DescriptionListValueAlign>('start')\n responsive = input<DescriptionListResponsive>('viewport')\n\n protected isTemplate(value: DescriptionListEntry['value']): value is TemplateRef<unknown> {\n return value instanceof TemplateRef\n }\n}\n","<dl\n class=\"gbt-description-list\"\n [attr.data-layout]=\"layout()\"\n [attr.data-value-align]=\"valueAlign() === 'end' ? 'end' : null\"\n [attr.data-responsive]=\"responsive() === 'container' ? 'container' : null\"\n>\n @for (item of items(); track $index) {\n <dt class=\"gbt-description-list__term\">{{ item.term }}</dt>\n <dd class=\"gbt-description-list__value\">\n @if (isTemplate(item.value)) {\n <ng-container [ngTemplateOutlet]=\"item.value\"></ng-container>\n } @else {\n {{ item.value }}\n }\n </dd>\n }\n</dl>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n input,\n model,\n viewChild,\n} from '@angular/core'\n\nexport interface SegmentedControlOption<T = string> {\n value: T\n label: string\n disabled?: boolean\n}\n\nexport type SegmentedControlSize = 'md' | 'sm'\n\nlet nextSegmentedControlId = 0\n\n@Component({\n selector: 'gbt-segmented-control',\n standalone: true,\n imports: [],\n templateUrl: './segmented-control.html',\n styleUrl: './segmented-control.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.gbt-segmented-control-host--full]': 'fullWidth()',\n '[class.gbt-segmented-control-host--labelled]': '!!label()',\n },\n})\nexport class SegmentedControl<T = string> {\n private readonly group = viewChild<ElementRef<HTMLElement>>('group')\n\n options = input.required<SegmentedControlOption<T>[]>()\n value = model.required<T>()\n ariaLabel = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n label = input<string>('')\n fullWidth = input(false, { transform: booleanAttribute })\n wrap = input(false, { transform: booleanAttribute })\n size = input<SegmentedControlSize>('md')\n tinted = input(false, { transform: booleanAttribute })\n\n protected readonly labelId = `gbt-segmented-control-label-${++nextSegmentedControlId}`\n\n protected isSelected(value: T): boolean {\n return this.value() === value\n }\n\n protected select(option: SegmentedControlOption<T>): void {\n if (this.disabled() || option.disabled) {\n return\n }\n this.value.set(option.value)\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const options = this.options()\n const count = options.length\n if (count === 0) {\n return\n }\n let next: number | null = null\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextEnabledIndex(index, 1)\n break\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextEnabledIndex(index, -1)\n break\n case 'Home':\n next = this.nextEnabledIndex(-1, 1)\n break\n case 'End':\n next = this.nextEnabledIndex(count, -1)\n break\n }\n if (next === null) {\n return\n }\n event.preventDefault()\n this.select(options[next])\n this.focusButton(next)\n }\n\n private nextEnabledIndex(from: number, direction: 1 | -1): number | null {\n const options = this.options()\n const count = options.length\n for (let step = 1; step <= count; step++) {\n const candidate = (from + direction * step + count) % count\n if (!options[candidate].disabled) {\n return candidate\n }\n }\n return null\n }\n\n private focusButton(index: number): void {\n this.group()?.nativeElement.querySelectorAll<HTMLElement>('[role=\"radio\"]')[index]?.focus()\n }\n}\n","@if (label()) {\n <span [id]=\"labelId\" class=\"gbt-segmented-control__label\">{{ label() }}</span>\n}\n<div\n #group\n class=\"gbt-segmented-control\"\n [class.gbt-segmented-control--sm]=\"size() === 'sm'\"\n [class.gbt-segmented-control--wrap]=\"wrap()\"\n [class.gbt-segmented-control--tinted]=\"tinted()\"\n role=\"radiogroup\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n>\n @for (option of options(); track option.value; let i = $index) {\n <button\n type=\"button\"\n role=\"radio\"\n class=\"gbt-segmented-control__option\"\n [class.gbt-segmented-control__option--selected]=\"isSelected(option.value)\"\n [attr.aria-checked]=\"isSelected(option.value)\"\n [tabIndex]=\"isSelected(option.value) ? 0 : -1\"\n [disabled]=\"disabled() || !!option.disabled\"\n (click)=\"select(option)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n {{ option.label }}\n </button>\n }\n</div>\n","export type WeekStartsOn = 0 | 1\n\nexport interface CalendarDay {\n date: Date\n inCurrentMonth: boolean\n isToday: boolean\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nexport function addMonths(date: Date, delta: number): Date {\n const day = date.getDate()\n const firstOfTarget = new Date(date.getFullYear(), date.getMonth() + delta, 1)\n const daysInTarget = new Date(\n firstOfTarget.getFullYear(),\n firstOfTarget.getMonth() + 1,\n 0,\n ).getDate()\n return new Date(\n firstOfTarget.getFullYear(),\n firstOfTarget.getMonth(),\n Math.min(day, daysInTarget),\n )\n}\n\nexport function addYears(date: Date, delta: number): Date {\n return addMonths(date, delta * 12)\n}\n\nexport function shiftDays(date: Date, delta: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + delta)\n}\n\nexport function startOfWeek(date: Date, weekStartsOn: WeekStartsOn): Date {\n const weekday = date.getDay()\n const diff = (weekday - weekStartsOn + 7) % 7\n const result = new Date(date.getFullYear(), date.getMonth(), date.getDate())\n result.setDate(result.getDate() - diff)\n return result\n}\n\nexport function endOfWeek(date: Date, weekStartsOn: WeekStartsOn): Date {\n const start = startOfWeek(date, weekStartsOn)\n start.setDate(start.getDate() + 6)\n return start\n}\n\nexport function buildCalendarGrid(\n year: number,\n month: number,\n weekStartsOn: WeekStartsOn,\n): CalendarDay[] {\n const firstOfMonth = new Date(year, month, 1)\n const gridStart = startOfWeek(firstOfMonth, weekStartsOn)\n const today = new Date()\n\n const days: CalendarDay[] = []\n for (let i = 0; i < 42; i++) {\n const date = new Date(gridStart.getFullYear(), gridStart.getMonth(), gridStart.getDate() + i)\n days.push({\n date,\n inCurrentMonth: date.getMonth() === month,\n isToday: isSameDay(date, today),\n })\n }\n return days\n}\n\nexport function weekdayLabels(locale: string, weekStartsOn: WeekStartsOn): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' })\n const reference = new Date(2024, 0, 7 + weekStartsOn)\n return Array.from({ length: 7 }, (_, i) => {\n const date = new Date(reference.getFullYear(), reference.getMonth(), reference.getDate() + i)\n return formatter.format(date)\n })\n}\n","import { ElementRef, Injector, afterNextRender, computed, signal } from '@angular/core'\nimport { floatingPanelAnchor } from '../../shared/floating-panel-position'\nimport {\n CalendarDay,\n WeekStartsOn,\n addMonths,\n addYears,\n buildCalendarGrid,\n endOfWeek,\n isSameDay,\n shiftDays,\n startOfWeek,\n weekdayLabels as computeWeekdayLabels,\n} from './date-picker-calendar'\n\nexport interface CalendarPanelView {\n year: number\n month: number\n label: string\n weeks: CalendarDay[][]\n}\n\nexport interface CalendarPanelDeps {\n elementRef: ElementRef<HTMLElement>\n injector: Injector\n triggerSelector: string\n locale: () => string\n weekStartsOn: () => WeekStartsOn\n visibleMonths: () => number\n minYear: () => number\n maxYear: () => number\n onTouched: () => void\n}\n\nexport type NavigationResult = 'month-changed' | 'day-changed' | 'unhandled'\n\n/** Panel and calendar-grid mechanics shared by `DatePicker` and `DateRangePicker`; one instance per component. */\nexport class CalendarPanel {\n readonly open = signal(false)\n readonly anchorDate = signal<Date>(new Date())\n readonly focusedDate = signal<Date>(new Date())\n readonly panelStyle = signal<{ top: string; left: string } | null>(null)\n\n readonly monthViews = computed<CalendarPanelView[]>(() => {\n const anchor = this.anchorDate()\n const count = this.deps.visibleMonths()\n const formatter = new Intl.DateTimeFormat(this.deps.locale(), {\n month: 'long',\n year: 'numeric',\n })\n const views = Array.from({ length: count }, (_, i) => {\n const monthDate = new Date(anchor.getFullYear(), anchor.getMonth() + i, 1)\n const year = monthDate.getFullYear()\n const month = monthDate.getMonth()\n const days = buildCalendarGrid(year, month, this.deps.weekStartsOn())\n const weeks: CalendarDay[][] = []\n for (let d = 0; d < days.length; d += 7) {\n weeks.push(days.slice(d, d + 7))\n }\n return { year, month, label: formatter.format(monthDate), weeks }\n })\n const neededWeeks = views.map((view) => {\n let last = view.weeks.length\n while (last > 1 && view.weeks[last - 1].every((day) => !day.inCurrentMonth)) {\n last--\n }\n return last\n })\n const sharedWeeks = Math.max(...neededWeeks)\n return views.map((view) => ({ ...view, weeks: view.weeks.slice(0, sharedWeeks) }))\n })\n\n readonly panelLabel = computed(() => {\n const views = this.monthViews()\n return views.length === 1\n ? views[0].label\n : `${views[0].label} – ${views[views.length - 1].label}`\n })\n\n readonly weekdayLabels = computed(() =>\n computeWeekdayLabels(this.deps.locale(), this.deps.weekStartsOn()),\n )\n\n readonly monthOptions = computed(() => {\n const formatter = new Intl.DateTimeFormat(this.deps.locale(), { month: 'long' })\n return Array.from({ length: 12 }, (_, i) => ({\n value: i,\n label: formatter.format(new Date(2024, i, 1)),\n }))\n })\n\n readonly yearOptions = computed(() => {\n const min = this.deps.minYear()\n const max = this.deps.maxYear()\n return Array.from({ length: max - min + 1 }, (_, i) => min + i)\n })\n\n constructor(private readonly deps: CalendarPanelDeps) {}\n\n cellId(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(\n date.getDate(),\n ).padStart(2, '0')}`\n }\n\n isFocused(date: Date): boolean {\n return isSameDay(this.focusedDate(), date)\n }\n\n toggle(onOpen: () => Date): void {\n this.open.update((value) => !value)\n if (this.open()) {\n const target = onOpen()\n this.focusedDate.set(target)\n this.anchorDate.set(new Date(target.getFullYear(), target.getMonth(), 1))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n } else {\n this.deps.onTouched()\n }\n }\n\n close(returnFocus: boolean): void {\n if (!this.open()) {\n return\n }\n this.open.set(false)\n this.deps.onTouched()\n if (returnFocus) {\n this.trigger()?.focus()\n }\n }\n\n shiftMonth(delta: number): void {\n this.anchorDate.set(addMonths(this.anchorDate(), delta))\n this.focusedDate.set(addMonths(this.focusedDate(), delta))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n }\n\n onMonthSelect(value: string): void {\n this.setAnchorMonth(this.anchorDate().getFullYear(), Number(value))\n }\n\n onYearSelect(value: string): void {\n this.setAnchorMonth(Number(value), this.anchorDate().getMonth())\n }\n\n private setAnchorMonth(year: number, month: number): void {\n const dayOfMonth = this.focusedDate().getDate()\n const daysInTarget = new Date(year, month + 1, 0).getDate()\n this.anchorDate.set(new Date(year, month, 1))\n this.focusedDate.set(new Date(year, month, Math.min(dayOfMonth, daysInTarget)))\n this.updatePanelPosition()\n this.focusCellAfterRender()\n }\n\n handleNavigationKeydown(event: KeyboardEvent): NavigationResult {\n const current = this.focusedDate()\n if (event.key === 'PageDown' || event.key === 'PageUp') {\n event.preventDefault()\n const delta = event.key === 'PageDown' ? 1 : -1\n if (event.shiftKey) {\n this.anchorDate.set(addYears(this.anchorDate(), delta))\n this.focusedDate.set(addYears(current, delta))\n } else {\n this.anchorDate.set(addMonths(this.anchorDate(), delta))\n this.focusedDate.set(addMonths(current, delta))\n }\n this.updatePanelPosition()\n this.focusCellAfterRender()\n return 'month-changed'\n }\n const next = this.nextFocusedDate(current, event)\n if (next === null) {\n return 'unhandled'\n }\n event.preventDefault()\n this.ensureVisible(next)\n this.focusedDate.set(next)\n this.focusCellAfterRender()\n return 'day-changed'\n }\n\n private nextFocusedDate(current: Date, event: KeyboardEvent): Date | null {\n switch (event.key) {\n case 'ArrowRight':\n return shiftDays(current, 1)\n case 'ArrowLeft':\n return shiftDays(current, -1)\n case 'ArrowDown':\n return shiftDays(current, 7)\n case 'ArrowUp':\n return shiftDays(current, -7)\n case 'Home':\n return startOfWeek(current, this.deps.weekStartsOn())\n case 'End':\n return endOfWeek(current, this.deps.weekStartsOn())\n default:\n return null\n }\n }\n\n ensureVisible(date: Date): void {\n const anchor = this.anchorDate()\n const visibleMonths = this.deps.visibleMonths()\n const monthsDiff =\n (date.getFullYear() - anchor.getFullYear()) * 12 + (date.getMonth() - anchor.getMonth())\n if (monthsDiff < 0) {\n this.anchorDate.set(new Date(date.getFullYear(), date.getMonth(), 1))\n } else if (monthsDiff >= visibleMonths) {\n this.anchorDate.set(addMonths(anchor, monthsDiff - visibleMonths + 1))\n }\n }\n\n onEscape(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault()\n event.stopPropagation()\n this.close(true)\n }\n }\n\n handleClickOutside(event: MouseEvent): void {\n if (this.open() && !this.deps.elementRef.nativeElement.contains(event.target as Node)) {\n this.close(false)\n }\n }\n\n updatePanelPosition(): void {\n const anchor = floatingPanelAnchor(this.open(), this.trigger())\n if (anchor) {\n this.panelStyle.set({ top: `${anchor.bottom}px`, left: `${anchor.left}px` })\n }\n }\n\n private trigger(): HTMLButtonElement | null {\n return this.deps.elementRef.nativeElement.querySelector(this.deps.triggerSelector)\n }\n\n focusCellAfterRender(): void {\n afterNextRender(\n () => {\n const id = this.cellId(this.focusedDate())\n const host = this.deps.elementRef.nativeElement\n host.querySelector<HTMLElement>(`[data-date=\"${id}\"]`)?.focus()\n },\n { injector: this.deps.injector },\n )\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport { CalendarPanel, type CalendarPanelView } from './calendar-panel'\nimport { CalendarDay, WeekStartsOn, isSameDay } from './date-picker-calendar'\n\nexport type DatePickerVisibleMonths = 1 | 2\n\nexport type DatePickerMonthView = CalendarPanelView\n\nlet nextDatePickerId = 0\n\nconst CURRENT_YEAR = new Date().getFullYear()\n\n@Component({\n selector: 'gbt-date-picker',\n standalone: true,\n imports: [Icon],\n templateUrl: './date-picker.html',\n styleUrl: './date-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onEscape($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePicker),\n multi: true,\n },\n ],\n})\nexport class DatePicker implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef)\n private readonly injector = inject(Injector)\n\n id = input<string>(`gbt-date-picker-${++nextDatePickerId}`)\n label = input<string>('')\n placeholder = input<string>('Select a date…')\n locale = input<string>('en-US')\n weekStartsOn = input<WeekStartsOn>(1)\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n previousMonthLabel = input<string>('Previous month')\n nextMonthLabel = input<string>('Next month')\n clearable = input(false, { transform: booleanAttribute })\n clearLabel = input<string>('Clear date')\n visibleMonths = input<DatePickerVisibleMonths>(1)\n monthSelectLabel = input<string>('Month')\n yearSelectLabel = input<string>('Year')\n minYear = input<number>(CURRENT_YEAR - 100)\n maxYear = input<number>(CURRENT_YEAR + 10)\n\n private readonly panel = new CalendarPanel({\n elementRef: this.elementRef,\n injector: this.injector,\n triggerSelector: '.gbt-date-picker__trigger',\n locale: () => this.locale(),\n weekStartsOn: () => this.weekStartsOn(),\n visibleMonths: () => this.visibleMonths(),\n minYear: () => this.minYear(),\n maxYear: () => this.maxYear(),\n onTouched: () => this.onTouched(),\n })\n\n protected readonly open = this.panel.open\n protected readonly selected = signal<Date | null>(null)\n protected readonly focusedDate = this.panel.focusedDate\n protected readonly anchorDate = this.panel.anchorDate\n protected readonly panelStyle = this.panel.panelStyle\n\n private readonly formDisabled = signal(false)\n private onChange: (value: Date | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n protected readonly showClear = computed(\n () => this.clearable() && this.selected() !== null && !this.isDisabled(),\n )\n\n protected readonly monthViews = this.panel.monthViews\n protected readonly panelLabel = this.panel.panelLabel\n protected readonly weekdayLabels = this.panel.weekdayLabels\n protected readonly monthOptions = this.panel.monthOptions\n protected readonly yearOptions = this.panel.yearOptions\n\n protected readonly triggerLabel = computed(() => {\n const value = this.selected()\n return value\n ? new Intl.DateTimeFormat(this.locale(), { dateStyle: 'medium' }).format(value)\n : ''\n })\n\n writeValue(value: Date | null): void {\n this.selected.set(value)\n if (value) {\n this.focusedDate.set(value)\n this.anchorDate.set(new Date(value.getFullYear(), value.getMonth(), 1))\n }\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isSelected(date: Date): boolean {\n const value = this.selected()\n return value !== null && isSameDay(value, date)\n }\n\n protected isFocused(date: Date): boolean {\n return this.panel.isFocused(date)\n }\n\n protected cellId(date: Date): string {\n return this.panel.cellId(date)\n }\n\n protected toggleOpen(): void {\n if (this.isDisabled()) {\n return\n }\n this.panel.toggle(() => this.selected() ?? new Date())\n }\n\n protected close(returnFocus: boolean): void {\n this.panel.close(returnFocus)\n }\n\n protected clear(event: Event): void {\n event.stopPropagation()\n if (this.isDisabled()) {\n return\n }\n this.selected.set(null)\n this.onChange(null)\n this.onTouched()\n this.panel.close(false)\n }\n\n protected selectDay(day: CalendarDay): void {\n if (this.isDisabled()) {\n return\n }\n this.selected.set(day.date)\n this.focusedDate.set(day.date)\n this.panel.ensureVisible(day.date)\n this.onChange(day.date)\n this.panel.close(true)\n }\n\n protected shiftMonth(delta: number): void {\n this.panel.shiftMonth(delta)\n }\n\n protected onMonthSelect(value: string): void {\n this.panel.onMonthSelect(value)\n }\n\n protected onYearSelect(value: string): void {\n this.panel.onYearSelect(value)\n }\n\n protected onGridKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n const current = this.focusedDate()\n this.selectDay({\n date: current,\n inCurrentMonth: true,\n isToday: isSameDay(current, new Date()),\n })\n return\n }\n this.panel.handleNavigationKeydown(event)\n }\n\n protected onEscape(event: KeyboardEvent): void {\n this.panel.onEscape(event)\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n this.panel.handleClickOutside(event)\n }\n\n protected updatePanelPosition(): void {\n this.panel.updatePanelPosition()\n }\n}\n","<div class=\"gbt-date-picker\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-date-picker__label\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n <div class=\"gbt-date-picker__field\">\n <button\n type=\"button\"\n [id]=\"id()\"\n class=\"gbt-date-picker__trigger\"\n [class.gbt-date-picker__trigger--open]=\"open()\"\n [disabled]=\"isDisabled()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (click)=\"toggleOpen()\"\n >\n <span\n class=\"gbt-date-picker__trigger-label\"\n [class.gbt-date-picker__trigger-label--placeholder]=\"!triggerLabel()\"\n >\n {{ triggerLabel() || placeholder() }}\n </span>\n </button>\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"gbt-date-picker__clear\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"clear($event)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n } @else {\n <gbt-icon name=\"calendar\" class=\"gbt-date-picker__icon\" aria-hidden=\"true\" />\n }\n </div>\n @if (open() && panelStyle(); as pos) {\n <div\n class=\"gbt-date-picker__panel\"\n role=\"dialog\"\n aria-modal=\"false\"\n [attr.aria-label]=\"panelLabel()\"\n [style.top]=\"pos.top\"\n [style.left]=\"pos.left\"\n >\n <div class=\"gbt-date-picker__nav\">\n <button\n type=\"button\"\n class=\"gbt-date-picker__nav-button\"\n [attr.aria-label]=\"previousMonthLabel()\"\n (click)=\"shiftMonth(-1)\"\n >\n <gbt-icon name=\"chevron-left\" aria-hidden=\"true\" />\n </button>\n <div class=\"gbt-date-picker__headings\">\n @for (view of monthViews(); track view.year + '-' + view.month; let i = $index) {\n <div class=\"gbt-date-picker__month-heading\">\n @if (i === 0) {\n <select\n #monthSelect\n class=\"gbt-date-picker__select\"\n [attr.aria-label]=\"monthSelectLabel()\"\n (change)=\"onMonthSelect(monthSelect.value)\"\n >\n @for (opt of monthOptions(); track opt.value) {\n <option [value]=\"opt.value\" [selected]=\"opt.value === anchorDate().getMonth()\">\n {{ opt.label }}\n </option>\n }\n </select>\n <select\n #yearSelect\n class=\"gbt-date-picker__select\"\n [attr.aria-label]=\"yearSelectLabel()\"\n (change)=\"onYearSelect(yearSelect.value)\"\n >\n @for (year of yearOptions(); track year) {\n <option [value]=\"year\" [selected]=\"year === anchorDate().getFullYear()\">\n {{ year }}\n </option>\n }\n </select>\n } @else {\n <span class=\"gbt-date-picker__month-label\">{{ view.label }}</span>\n }\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"gbt-date-picker__nav-button\"\n [attr.aria-label]=\"nextMonthLabel()\"\n (click)=\"shiftMonth(1)\"\n >\n <gbt-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"gbt-date-picker__months\">\n @for (view of monthViews(); track view.year + '-' + view.month) {\n <div class=\"gbt-date-picker__month\">\n <div\n class=\"gbt-date-picker__grid\"\n role=\"grid\"\n tabindex=\"-1\"\n [attr.aria-label]=\"view.label\"\n (keydown)=\"onGridKeydown($event)\"\n >\n <div class=\"gbt-date-picker__row gbt-date-picker__row--head\" role=\"row\">\n @for (wd of weekdayLabels(); track $index) {\n <span role=\"columnheader\" class=\"gbt-date-picker__weekday\">{{ wd }}</span>\n }\n </div>\n @for (week of view.weeks; track $index) {\n <div class=\"gbt-date-picker__row\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n @if (day.inCurrentMonth) {\n <button\n type=\"button\"\n role=\"gridcell\"\n class=\"gbt-date-picker__day\"\n [class.gbt-date-picker__day--today]=\"day.isToday\"\n [class.gbt-date-picker__day--selected]=\"isSelected(day.date)\"\n [attr.data-date]=\"cellId(day.date)\"\n [attr.aria-selected]=\"isSelected(day.date)\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [tabIndex]=\"isFocused(day.date) ? 0 : -1\"\n (click)=\"selectDay(day)\"\n >\n {{ day.date.getDate() }}\n </button>\n } @else {\n <span\n role=\"gridcell\"\n class=\"gbt-date-picker__day gbt-date-picker__day--empty\"\n ></span>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-date-picker__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport { CalendarPanel, type CalendarPanelView } from '../date-picker/calendar-panel'\nimport { WeekStartsOn, isSameDay } from '../date-picker/date-picker-calendar'\n\nexport type DateRangeVisibleMonths = 1 | 2\n\nexport interface DateRangeValue {\n start: Date\n end: Date | null\n}\n\nexport type DateRangePickerMonthView = CalendarPanelView\n\nlet nextId = 0\n\nconst CURRENT_YEAR = new Date().getFullYear()\n\n@Component({\n selector: 'gbt-date-range-picker',\n standalone: true,\n imports: [Icon],\n templateUrl: './date-range-picker.html',\n styleUrl: './date-range-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'handleClickOutside($event)',\n '(keydown)': 'onEscape($event)',\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangePicker),\n multi: true,\n },\n ],\n})\nexport class DateRangePicker implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef)\n private readonly injector = inject(Injector)\n\n id = input<string>(`gbt-date-range-picker-${++nextId}`)\n label = input<string>('')\n placeholder = input<string>('Select a date range…')\n locale = input<string>('en-US')\n weekStartsOn = input<WeekStartsOn>(1)\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n previousMonthLabel = input<string>('Previous month')\n nextMonthLabel = input<string>('Next month')\n clearable = input(false, { transform: booleanAttribute })\n clearLabel = input<string>('Clear date range')\n visibleMonths = input<DateRangeVisibleMonths>(2)\n monthSelectLabel = input<string>('Month')\n yearSelectLabel = input<string>('Year')\n minYear = input<number>(CURRENT_YEAR - 100)\n maxYear = input<number>(CURRENT_YEAR + 10)\n rangeStatus = input<(start: string | null, end: string | null) => string>((start, end) => {\n if (!start) return ''\n if (!end) return `${start} selected as the start date. Choose an end date.`\n return `Date range: ${start} to ${end}.`\n })\n\n private readonly panel = new CalendarPanel({\n elementRef: this.elementRef,\n injector: this.injector,\n triggerSelector: '.gbt-date-range-picker__trigger',\n locale: () => this.locale(),\n weekStartsOn: () => this.weekStartsOn(),\n visibleMonths: () => this.visibleMonths(),\n minYear: () => this.minYear(),\n maxYear: () => this.maxYear(),\n onTouched: () => this.onTouched(),\n })\n\n protected readonly open = this.panel.open\n protected readonly value = signal<DateRangeValue | null>(null)\n protected readonly draftStart = signal<Date | null>(null)\n protected readonly draftEnd = signal<Date | null>(null)\n protected readonly hoveredDate = signal<Date | null>(null)\n protected readonly focusedDate = this.panel.focusedDate\n protected readonly anchorDate = this.panel.anchorDate\n protected readonly panelStyle = this.panel.panelStyle\n\n private readonly formDisabled = signal(false)\n private onChange: (value: DateRangeValue | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n protected readonly showClear = computed(\n () => this.clearable() && this.value() !== null && !this.isDisabled(),\n )\n\n protected readonly monthViews = this.panel.monthViews\n protected readonly panelLabel = this.panel.panelLabel\n protected readonly weekdayLabels = this.panel.weekdayLabels\n protected readonly monthOptions = this.panel.monthOptions\n protected readonly yearOptions = this.panel.yearOptions\n\n private readonly dateFormatter = computed(\n () => new Intl.DateTimeFormat(this.locale(), { dateStyle: 'medium' }),\n )\n\n protected readonly triggerLabel = computed(() => {\n const v = this.value()\n if (!v) return ''\n const formatter = this.dateFormatter()\n if (!v.end) return formatter.format(v.start)\n return `${formatter.format(v.start)} – ${formatter.format(v.end)}`\n })\n\n private readonly previewBounds = computed<{ lower: Date; upper: Date } | null>(() => {\n const start = this.draftStart()\n if (!start) return null\n const other = this.draftEnd() ?? this.hoveredDate()\n if (!other) return null\n return start.getTime() <= other.getTime()\n ? { lower: start, upper: other }\n : { lower: other, upper: start }\n })\n\n protected readonly isPreviewing = computed(\n () => this.draftStart() !== null && this.draftEnd() === null,\n )\n\n protected readonly statusMessage = computed(() => {\n const start = this.draftStart()\n if (!start) return ''\n const formatter = this.dateFormatter()\n const end = this.draftEnd()\n return this.rangeStatus()(formatter.format(start), end ? formatter.format(end) : null)\n })\n\n writeValue(value: DateRangeValue | null): void {\n this.value.set(value)\n if (value) {\n this.focusedDate.set(value.start)\n this.anchorDate.set(new Date(value.start.getFullYear(), value.start.getMonth(), 1))\n }\n }\n\n registerOnChange(fn: (value: DateRangeValue | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isRangeStartCap(date: Date): boolean {\n const bounds = this.previewBounds()\n return bounds !== null && isSameDay(date, bounds.lower)\n }\n\n protected isRangeEndCap(date: Date): boolean {\n const bounds = this.previewBounds()\n return bounds !== null && isSameDay(date, bounds.upper)\n }\n\n protected isInRange(date: Date): boolean {\n const bounds = this.previewBounds()\n return (\n bounds !== null &&\n date.getTime() > bounds.lower.getTime() &&\n date.getTime() < bounds.upper.getTime()\n )\n }\n\n protected isFocused(date: Date): boolean {\n return this.panel.isFocused(date)\n }\n\n protected cellId(date: Date): string {\n return this.panel.cellId(date)\n }\n\n protected toggleOpen(): void {\n if (this.isDisabled()) {\n return\n }\n this.panel.toggle(() => {\n const value = this.value()\n this.draftStart.set(value?.start ?? null)\n this.draftEnd.set(value?.end ?? null)\n this.hoveredDate.set(null)\n return value?.start ?? new Date()\n })\n }\n\n protected close(returnFocus: boolean): void {\n this.panel.close(returnFocus)\n }\n\n protected clear(event: Event): void {\n event.stopPropagation()\n if (this.isDisabled()) {\n return\n }\n this.value.set(null)\n this.draftStart.set(null)\n this.draftEnd.set(null)\n this.onChange(null)\n this.onTouched()\n this.panel.close(false)\n }\n\n protected selectDay(date: Date): void {\n if (this.isDisabled()) {\n return\n }\n const start = this.draftStart()\n const complete = start !== null && this.draftEnd() !== null\n if (!start || complete) {\n this.draftStart.set(date)\n this.draftEnd.set(null)\n this.focusedDate.set(date)\n this.panel.ensureVisible(date)\n this.panel.focusCellAfterRender()\n return\n }\n const [rangeStart, rangeEnd] = start.getTime() <= date.getTime() ? [start, date] : [date, start]\n this.draftStart.set(rangeStart)\n this.draftEnd.set(rangeEnd)\n this.focusedDate.set(date)\n this.panel.ensureVisible(date)\n const next: DateRangeValue = { start: rangeStart, end: rangeEnd }\n this.value.set(next)\n this.onChange(next)\n this.onTouched()\n this.panel.close(true)\n }\n\n protected onDayMouseEnter(date: Date): void {\n this.hoveredDate.set(date)\n }\n\n protected onDayMouseLeave(): void {\n this.hoveredDate.set(null)\n }\n\n protected shiftMonth(delta: number): void {\n this.panel.shiftMonth(delta)\n }\n\n protected onMonthSelect(value: string): void {\n this.panel.onMonthSelect(value)\n }\n\n protected onYearSelect(value: string): void {\n this.panel.onYearSelect(value)\n }\n\n protected onGridKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.selectDay(this.focusedDate())\n return\n }\n this.panel.handleNavigationKeydown(event)\n }\n\n protected onEscape(event: KeyboardEvent): void {\n this.panel.onEscape(event)\n }\n\n protected handleClickOutside(event: MouseEvent): void {\n this.panel.handleClickOutside(event)\n }\n\n protected updatePanelPosition(): void {\n this.panel.updatePanelPosition()\n }\n}\n","<div class=\"gbt-date-range-picker\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-date-range-picker__label\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n <div class=\"gbt-date-range-picker__field\">\n <button\n type=\"button\"\n [id]=\"id()\"\n class=\"gbt-date-range-picker__trigger\"\n [class.gbt-date-range-picker__trigger--open]=\"open()\"\n [disabled]=\"isDisabled()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (click)=\"toggleOpen()\"\n >\n <span\n class=\"gbt-date-range-picker__trigger-label\"\n [class.gbt-date-range-picker__trigger-label--placeholder]=\"!triggerLabel()\"\n >\n {{ triggerLabel() || placeholder() }}\n </span>\n </button>\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"gbt-date-range-picker__clear\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"clear($event)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n } @else {\n <gbt-icon name=\"calendar\" class=\"gbt-date-range-picker__icon\" aria-hidden=\"true\" />\n }\n </div>\n @if (open() && panelStyle(); as pos) {\n <div\n class=\"gbt-date-range-picker__panel\"\n role=\"dialog\"\n aria-modal=\"false\"\n [attr.aria-label]=\"panelLabel()\"\n [style.top]=\"pos.top\"\n [style.left]=\"pos.left\"\n >\n <div class=\"gbt-date-range-picker__nav\">\n <button\n type=\"button\"\n class=\"gbt-date-range-picker__nav-button\"\n [attr.aria-label]=\"previousMonthLabel()\"\n (click)=\"shiftMonth(-1)\"\n >\n <gbt-icon name=\"chevron-left\" aria-hidden=\"true\" />\n </button>\n <div class=\"gbt-date-range-picker__headings\">\n @for (view of monthViews(); track view.year + '-' + view.month; let i = $index) {\n <div class=\"gbt-date-range-picker__month-heading\">\n @if (i === 0) {\n <select\n #monthSelect\n class=\"gbt-date-range-picker__select\"\n [attr.aria-label]=\"monthSelectLabel()\"\n (change)=\"onMonthSelect(monthSelect.value)\"\n >\n @for (opt of monthOptions(); track opt.value) {\n <option [value]=\"opt.value\" [selected]=\"opt.value === anchorDate().getMonth()\">\n {{ opt.label }}\n </option>\n }\n </select>\n <select\n #yearSelect\n class=\"gbt-date-range-picker__select\"\n [attr.aria-label]=\"yearSelectLabel()\"\n (change)=\"onYearSelect(yearSelect.value)\"\n >\n @for (year of yearOptions(); track year) {\n <option [value]=\"year\" [selected]=\"year === anchorDate().getFullYear()\">\n {{ year }}\n </option>\n }\n </select>\n } @else {\n <span class=\"gbt-date-range-picker__month-label\">{{ view.label }}</span>\n }\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"gbt-date-range-picker__nav-button\"\n [attr.aria-label]=\"nextMonthLabel()\"\n (click)=\"shiftMonth(1)\"\n >\n <gbt-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"gbt-date-range-picker__months\">\n @for (view of monthViews(); track view.year + '-' + view.month) {\n <div class=\"gbt-date-range-picker__month\">\n <div\n class=\"gbt-date-range-picker__grid\"\n role=\"grid\"\n tabindex=\"-1\"\n [attr.aria-label]=\"view.label\"\n (keydown)=\"onGridKeydown($event)\"\n >\n <div class=\"gbt-date-range-picker__row gbt-date-range-picker__row--head\" role=\"row\">\n @for (wd of weekdayLabels(); track $index) {\n <span role=\"columnheader\" class=\"gbt-date-range-picker__weekday\">{{ wd }}</span>\n }\n </div>\n @for (week of view.weeks; track $index) {\n <div class=\"gbt-date-range-picker__row\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n @if (day.inCurrentMonth) {\n <button\n type=\"button\"\n role=\"gridcell\"\n class=\"gbt-date-range-picker__day\"\n [class.gbt-date-range-picker__day--today]=\"day.isToday\"\n [class.gbt-date-range-picker__day--start-cap]=\"isRangeStartCap(day.date)\"\n [class.gbt-date-range-picker__day--end-cap]=\"isRangeEndCap(day.date)\"\n [class.gbt-date-range-picker__day--in-range]=\"isInRange(day.date)\"\n [class.gbt-date-range-picker__day--preview]=\"isPreviewing()\"\n [attr.data-date]=\"cellId(day.date)\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [tabIndex]=\"isFocused(day.date) ? 0 : -1\"\n (click)=\"selectDay(day.date)\"\n (mouseenter)=\"onDayMouseEnter(day.date)\"\n (mouseleave)=\"onDayMouseLeave()\"\n >\n {{ day.date.getDate() }}\n </button>\n } @else {\n <span\n role=\"gridcell\"\n class=\"gbt-date-range-picker__day gbt-date-range-picker__day--empty\"\n ></span>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"gbt-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ statusMessage() }}\n </div>\n </div>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-date-range-picker__error\" role=\"alert\">\n {{ errorMessage() }}\n </p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { Accordion } from '../accordion/accordion'\n\n@Component({\n selector: 'gbt-accordion-item',\n standalone: true,\n imports: [Icon],\n templateUrl: './accordion-item.html',\n styleUrl: './accordion-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionItem {\n private readonly parent = inject(Accordion)\n private readonly header = viewChild<ElementRef<HTMLButtonElement>>('header')\n\n label = input.required<string>()\n\n protected readonly active = signal(false)\n protected readonly index = signal(0)\n protected readonly groupId = signal('')\n\n protected readonly headerId = computed(() => `${this.groupId()}-header-${this.index()}`)\n protected readonly panelId = computed(() => `${this.groupId()}-panel-${this.index()}`)\n\n setState(index: number, active: boolean, groupId: string): void {\n this.index.set(index)\n this.active.set(active)\n this.groupId.set(groupId)\n }\n\n focusHeader(): void {\n this.header()?.nativeElement.focus()\n }\n\n protected toggle(): void {\n this.parent.toggle(this.index())\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n this.parent.focusHeader(this.index() + 1)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n this.parent.focusHeader(this.index() - 1)\n }\n }\n}\n","<button\n #header\n type=\"button\"\n class=\"gbt-accordion-item__header\"\n [class.gbt-accordion-item__header--open]=\"active()\"\n [id]=\"headerId()\"\n [attr.aria-expanded]=\"active()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"gbt-accordion-item__label\">{{ label() }}</span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-accordion-item__chevron\" aria-hidden=\"true\" />\n</button>\n<div\n class=\"gbt-accordion-item__panel\"\n [class.gbt-accordion-item__panel--open]=\"active()\"\n [id]=\"panelId()\"\n [attr.aria-labelledby]=\"headerId()\"\n [attr.inert]=\"active() ? null : ''\"\n>\n <div class=\"gbt-accordion-item__panel-inner\">\n <div class=\"gbt-accordion-item__panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n input,\n model,\n} from '@angular/core'\nimport { AccordionItem } from '../accordion-item/accordion-item'\n\nexport type AccordionMode = 'single' | 'multiple'\n\nlet nextAccordionId = 0\n\n@Component({\n selector: 'gbt-accordion',\n standalone: true,\n imports: [],\n template: `\n <div class=\"gbt-accordion\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrl: './accordion.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Accordion {\n id = input<string>(`gbt-accordion-${++nextAccordionId}`)\n mode = input<AccordionMode>('single')\n expanded = model<number[]>([])\n\n protected readonly items = contentChildren(AccordionItem)\n\n constructor() {\n effect(() => {\n const items = this.items()\n const expanded = this.expanded()\n const groupId = this.id()\n items.forEach((item, i) => item.setState(i, expanded.includes(i), groupId))\n })\n }\n\n toggle(index: number): void {\n const current = this.expanded()\n if (this.mode() === 'single') {\n this.expanded.set(current.includes(index) ? [] : [index])\n return\n }\n this.expanded.set(\n current.includes(index) ? current.filter((i) => i !== index) : [...current, index],\n )\n }\n\n focusHeader(index: number): void {\n const items = this.items()\n const count = items.length\n if (count === 0) {\n return\n }\n const wrapped = ((index % count) + count) % count\n items[wrapped]?.focusHeader()\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { FormControl, ReactiveFormsModule } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\nimport { Select, SelectOption } from '../select/select'\n\nexport const ELLIPSIS = '…' as const\nexport type PaginationItem = number | typeof ELLIPSIS\n\nfunction range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n\nexport function paginationRange(\n page: number,\n pageCount: number,\n siblingCount: number,\n): PaginationItem[] {\n const totalPageNumbers = siblingCount + 5\n\n if (totalPageNumbers >= pageCount) {\n return range(1, pageCount)\n }\n\n const leftSiblingIndex = Math.max(page - siblingCount, 1)\n const rightSiblingIndex = Math.min(page + siblingCount, pageCount)\n\n const shouldShowLeftDots = leftSiblingIndex > 2\n const shouldShowRightDots = rightSiblingIndex < pageCount - 2\n\n if (!shouldShowLeftDots && shouldShowRightDots) {\n const leftItemCount = 3 + siblingCount * 2\n return [...range(1, leftItemCount), ELLIPSIS, pageCount]\n }\n\n if (shouldShowLeftDots && !shouldShowRightDots) {\n const rightItemCount = 3 + siblingCount * 2\n return [1, ELLIPSIS, ...range(pageCount - rightItemCount + 1, pageCount)]\n }\n\n return [1, ELLIPSIS, ...range(leftSiblingIndex, rightSiblingIndex), ELLIPSIS, pageCount]\n}\n\n@Component({\n selector: 'gbt-pagination',\n standalone: true,\n imports: [Icon, Select, ReactiveFormsModule],\n templateUrl: './pagination.html',\n styleUrl: './pagination.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Pagination {\n page = input<number>(1)\n pageSize = input<number>(10)\n totalItems = input.required<number>()\n siblingCount = input<number>(1)\n disabled = input(false, { transform: booleanAttribute })\n ariaLabel = input<string>('Pagination')\n previousLabel = input<string>('Previous page')\n nextLabel = input<string>('Next page')\n pageLabel = input<(page: number) => string>((page) => `Page ${page}`)\n\n pageSizeOptions = input<number[]>([])\n pageSizeLabel = input<(size: number) => string>((size) => `${size} / page`)\n pageSizeSelectLabel = input<string>('Rows per page')\n showItemsSummary = input(false, { transform: booleanAttribute })\n itemsSummaryLabel = input<(shown: number, total: number) => string>(\n (shown, total) => `${shown} of ${total} items`,\n )\n\n pageChange = output<number>()\n pageSizeChange = output<number>()\n\n protected readonly ELLIPSIS = ELLIPSIS\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalItems() / this.pageSize())),\n )\n\n protected readonly items = computed(() =>\n paginationRange(this.page(), this.pageCount(), this.siblingCount()),\n )\n\n protected readonly itemsShown = computed(() => {\n const start = (this.page() - 1) * this.pageSize()\n return Math.max(0, Math.min(this.pageSize(), this.totalItems() - start))\n })\n\n protected readonly itemsSummary = computed(() =>\n this.itemsSummaryLabel()(this.itemsShown(), this.totalItems()),\n )\n\n protected readonly pageSizeSelectOptions = computed<SelectOption<number>[]>(() =>\n this.pageSizeOptions().map((size) => ({ value: size, label: this.pageSizeLabel()(size) })),\n )\n\n protected readonly pageSizeControl = new FormControl<number>(this.pageSize(), {\n nonNullable: true,\n })\n\n constructor() {\n effect(() => {\n const size = this.pageSize()\n if (this.pageSizeControl.value !== size) {\n this.pageSizeControl.setValue(size, { emitEvent: false })\n }\n })\n\n this.pageSizeControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((size) => {\n this.pageSizeChange.emit(size)\n this.pageChange.emit(1)\n })\n\n effect(() => {\n const count = this.pageCount()\n const current = this.page()\n const clamped = Math.min(Math.max(current, 1), count)\n if (clamped !== current) {\n this.pageChange.emit(clamped)\n }\n })\n }\n\n protected goTo(page: number): void {\n if (this.disabled()) return\n const clamped = Math.min(Math.max(page, 1), this.pageCount())\n if (clamped === this.page()) return\n this.pageChange.emit(clamped)\n }\n}\n","<div class=\"gbt-pagination\">\n <div class=\"gbt-pagination__side gbt-pagination__side--start\">\n @if (showItemsSummary()) {\n <span class=\"gbt-pagination__summary\">{{ itemsSummary() }}</span>\n }\n </div>\n\n <nav [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"gbt-pagination__list\">\n <li>\n <button\n type=\"button\"\n class=\"gbt-pagination__nav\"\n [disabled]=\"disabled() || page() <= 1\"\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"goTo(page() - 1)\"\n >\n <gbt-icon name=\"chevron-left\" aria-hidden=\"true\" />\n </button>\n </li>\n @for (item of items(); track $index) {\n @if (item === ELLIPSIS) {\n <li class=\"gbt-pagination__ellipsis\" aria-hidden=\"true\">{{ ELLIPSIS }}</li>\n } @else {\n <li>\n <button\n type=\"button\"\n class=\"gbt-pagination__page\"\n [class.gbt-pagination__page--current]=\"item === page()\"\n [attr.aria-current]=\"item === page() ? 'page' : null\"\n [attr.aria-label]=\"pageLabel()(item)\"\n [disabled]=\"disabled()\"\n (click)=\"goTo(item)\"\n >\n {{ item }}\n </button>\n </li>\n }\n }\n <li>\n <button\n type=\"button\"\n class=\"gbt-pagination__nav\"\n [disabled]=\"disabled() || page() >= pageCount()\"\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"goTo(page() + 1)\"\n >\n <gbt-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </button>\n </li>\n </ul>\n </nav>\n\n <div class=\"gbt-pagination__side gbt-pagination__side--end\">\n @if (pageSizeOptions().length > 0) {\n <gbt-select\n class=\"gbt-pagination__page-size\"\n size=\"sm\"\n [label]=\"pageSizeSelectLabel()\"\n [options]=\"pageSizeSelectOptions()\"\n [disabled]=\"disabled()\"\n [formControl]=\"pageSizeControl\"\n />\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-breadcrumb',\n standalone: true,\n imports: [],\n templateUrl: './breadcrumb.html',\n styleUrl: './breadcrumb.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Breadcrumb {\n ariaLabel = input.required<string>()\n}\n","<nav [attr.aria-label]=\"ariaLabel()\" class=\"gbt-breadcrumb\">\n <ol class=\"gbt-breadcrumb__list\">\n <ng-content select=\"[breadcrumb-ancestor]\" />\n <li class=\"gbt-breadcrumb__current\" aria-current=\"page\"><ng-content /></li>\n </ol>\n</nav>\n","import {\n ChangeDetectionStrategy,\n booleanAttribute,\n Component,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { Button, ButtonVariant } from '../../atoms/button/button'\nimport { Icon } from '../../atoms/icon/icon'\nimport { GbtInput } from '../../atoms/input/input'\nimport { Modal } from '../modal/modal'\n\nexport type ConfirmDangerModalTone = 'danger' | 'warning' | 'neutral'\n\n@Component({\n selector: 'gbt-confirm-danger-modal',\n standalone: true,\n imports: [FormsModule, Modal, GbtInput, Button, Icon],\n templateUrl: './confirm-danger-modal.html',\n styleUrl: './confirm-danger-modal.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDangerModal {\n isOpen = input.required<boolean>()\n heading = input.required<string>()\n message = input.required<string>()\n confirmText = input<string | null | undefined>(undefined)\n confirmInputLabel = input<string>('Type to confirm')\n confirmLabel = input<string>('Confirm')\n cancelLabel = input<string>('Cancel')\n closeLabel = input<string>('Close')\n busy = input(false, { transform: booleanAttribute })\n busyLabel = input<string>('Working')\n confirmIcon = input<string | null>(null)\n tone = input<ConfirmDangerModalTone>('danger')\n\n confirmed = output<void>()\n closed = output<void>()\n\n protected readonly typed = signal('')\n protected readonly requiresTyping = computed(() => {\n const expected = this.confirmText()\n return expected !== null && expected !== undefined\n })\n protected readonly canConfirm = computed(\n () =>\n !this.requiresTyping() || (this.typed().length > 0 && this.typed() === this.confirmText()),\n )\n protected readonly confirmVariant = computed<ButtonVariant>(() =>\n this.tone() === 'danger' ? 'danger' : 'primary',\n )\n protected readonly toneIcon = computed(() =>\n this.tone() === 'neutral' ? 'info' : 'alert-triangle',\n )\n\n constructor() {\n effect(() => {\n if (!this.isOpen()) {\n this.typed.set('')\n }\n })\n }\n\n protected confirm(): void {\n if (this.canConfirm() && !this.busy()) {\n this.confirmed.emit()\n }\n }\n\n protected cancel(): void {\n if (!this.busy()) {\n this.closed.emit()\n }\n }\n}\n","<gbt-modal\n [isOpen]=\"isOpen()\"\n [heading]=\"heading()\"\n [closeLabel]=\"closeLabel()\"\n [busy]=\"busy()\"\n [busyLabel]=\"busyLabel()\"\n (closed)=\"cancel()\"\n>\n @if (requiresTyping()) {\n <p class=\"gbt-confirm-danger-modal__message\">{{ message() }}</p>\n <gbt-input\n [label]=\"confirmInputLabel()\"\n [disabled]=\"busy()\"\n [ngModel]=\"typed()\"\n (ngModelChange)=\"typed.set($event)\"\n />\n } @else {\n <div class=\"gbt-confirm-danger-modal__summary\" [attr.data-tone]=\"tone()\">\n <span class=\"gbt-confirm-danger-modal__icon\" aria-hidden=\"true\">\n <gbt-icon [name]=\"toneIcon()\" />\n </span>\n <p class=\"gbt-confirm-danger-modal__message\">{{ message() }}</p>\n </div>\n }\n <div class=\"gbt-confirm-danger-modal__actions\">\n <gbt-button\n variant=\"secondary\"\n [text]=\"cancelLabel()\"\n [disabled]=\"busy()\"\n (clicked)=\"cancel()\"\n />\n <gbt-button\n [variant]=\"confirmVariant()\"\n [text]=\"confirmLabel()\"\n [iconName]=\"confirmIcon()\"\n [disabled]=\"!canConfirm()\"\n [loading]=\"busy()\"\n [loadingLabel]=\"busyLabel()\"\n (clicked)=\"confirm()\"\n />\n </div>\n</gbt-modal>\n","import { DestroyRef, Injectable, inject, signal } from '@angular/core'\nimport type { ToastItem, ToastVariant } from './toaster'\n\nexport type GbtToastKind = ToastVariant\n\nexport interface GbtToastOptions {\n duration?: number\n}\n\nlet nextToastId = 0\n\n@Injectable({ providedIn: 'root' })\nexport class GbtToastService {\n private readonly items = signal<ToastItem[]>([])\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n readonly toasts = this.items.asReadonly()\n\n readonly defaultDuration = signal(5000)\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.clearTimers())\n }\n\n show(message: string, kind: GbtToastKind = 'success', options: GbtToastOptions = {}): string {\n const id = `gbt-toast-${++nextToastId}`\n const duration = options.duration ?? this.defaultDuration()\n this.items.update((current) => [...current, { id, variant: kind, message, duration }])\n\n if (Number.isFinite(duration) && duration > 0) {\n this.timers.set(\n id,\n setTimeout(() => this.dismiss(id), duration),\n )\n }\n return id\n }\n\n dismiss(id: string): void {\n const timer = this.timers.get(id)\n if (timer !== undefined) {\n clearTimeout(timer)\n this.timers.delete(id)\n }\n this.items.update((current) => {\n const next = current.filter((toast) => toast.id !== id)\n return next.length === current.length ? current : next\n })\n }\n\n clear(): void {\n this.clearTimers()\n this.items.set([])\n }\n\n private clearTimers(): void {\n for (const timer of this.timers.values()) {\n clearTimeout(timer)\n }\n this.timers.clear()\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n computed,\n effect,\n inject,\n input,\n output,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { GbtToastService } from './toast.service'\n\nconst DEFAULT_DURATION_MS = 5000\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info'\n\nexport type ToasterPosition =\n 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center'\n\nexport interface ToastItem {\n id: string\n variant: ToastVariant\n message: string\n duration?: number\n}\n\nconst ASSERTIVE_VARIANTS: ReadonlySet<ToastVariant> = new Set(['warning', 'error'])\n\nconst VARIANT_ICONS: Record<ToastVariant, string> = {\n success: 'check-circle',\n error: 'alert-circle',\n warning: 'alert-triangle',\n info: 'info',\n}\n\n@Component({\n selector: 'gbt-toaster',\n standalone: true,\n imports: [Icon],\n templateUrl: './toaster.html',\n styleUrl: './toaster.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Toaster implements OnDestroy {\n toasts = input<ToastItem[] | undefined>(undefined)\n position = input<ToasterPosition>('bottom-right')\n closeLabel = input<string>('Close')\n\n dismissed = output<string>()\n\n private readonly service = inject(GbtToastService)\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n protected readonly items = computed(() => this.toasts() ?? this.service.toasts())\n\n constructor() {\n effect(() => {\n const explicit = this.toasts()\n const list = explicit ?? []\n const currentIds = new Set(list.map((toast) => toast.id))\n\n for (const [id, timer] of this.timers) {\n if (!currentIds.has(id)) {\n clearTimeout(timer)\n this.timers.delete(id)\n }\n }\n\n for (const toast of list) {\n if (this.timers.has(toast.id)) {\n continue\n }\n const duration = toast.duration ?? DEFAULT_DURATION_MS\n if (!Number.isFinite(duration) || duration <= 0) {\n continue\n }\n this.timers.set(\n toast.id,\n setTimeout(() => {\n this.timers.delete(toast.id)\n this.dismissed.emit(toast.id)\n }, duration),\n )\n }\n })\n }\n\n ngOnDestroy(): void {\n for (const timer of this.timers.values()) {\n clearTimeout(timer)\n }\n this.timers.clear()\n }\n\n protected close(id: string): void {\n this.dismissed.emit(id)\n if (this.toasts() === undefined) {\n this.service.dismiss(id)\n }\n }\n\n protected roleFor(variant: ToastVariant): 'alert' | 'status' {\n return ASSERTIVE_VARIANTS.has(variant) ? 'alert' : 'status'\n }\n\n protected iconFor(variant: ToastVariant): string {\n return VARIANT_ICONS[variant]\n }\n}\n","<div class=\"gbt-toaster\" [attr.data-position]=\"position()\">\n @for (toast of items(); track toast.id) {\n <div\n class=\"gbt-toaster__item\"\n [attr.data-variant]=\"toast.variant\"\n [attr.role]=\"roleFor(toast.variant)\"\n aria-atomic=\"true\"\n >\n <span class=\"gbt-toaster__icon\">\n <gbt-icon [name]=\"iconFor(toast.variant)\" aria-hidden=\"true\" />\n </span>\n <p class=\"gbt-toaster__message\">{{ toast.message }}</p>\n <button\n type=\"button\"\n class=\"gbt-toaster__close\"\n [attr.aria-label]=\"closeLabel()\"\n (click)=\"close(toast.id)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n inject,\n input,\n signal,\n} from '@angular/core'\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipCoords {\n top: number\n left: number\n}\n\nconst SHOW_DELAY_MS = 400\nconst FADE_MS = 120\nconst GAP_PX = 8\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-tooltip',\n standalone: true,\n exportAs: 'gbtTooltip',\n imports: [],\n templateUrl: './tooltip.html',\n styleUrl: './tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gbt-tooltip-host',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'hide()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'hide()',\n '(keydown.escape)': 'hide()',\n '(window:scroll)': 'updatePosition()',\n '(window:resize)': 'updatePosition()',\n },\n})\nexport class Tooltip implements OnDestroy {\n private readonly elementRef = inject(ElementRef<HTMLElement>)\n\n text = input.required<string>()\n position = input<TooltipPosition>('top')\n\n readonly tooltipId = `gbt-tooltip-${++nextId}`\n\n protected readonly visible = signal(false)\n protected readonly closing = signal(false)\n protected readonly coords = signal<TooltipCoords | null>(null)\n\n private showTimer: ReturnType<typeof setTimeout> | null = null\n private hideTimer: ReturnType<typeof setTimeout> | null = null\n\n protected onMouseEnter(): void {\n this.showTimer = setTimeout(() => {\n this.showTimer = null\n this.show()\n }, SHOW_DELAY_MS)\n }\n\n protected onFocusIn(): void {\n this.show()\n }\n\n private show(): void {\n if (this.hideTimer !== null) {\n clearTimeout(this.hideTimer)\n this.hideTimer = null\n }\n this.closing.set(false)\n this.updatePosition()\n this.visible.set(true)\n }\n\n protected updatePosition(): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect()\n switch (this.position()) {\n case 'top':\n this.coords.set({ top: rect.top - GAP_PX, left: rect.left + rect.width / 2 })\n break\n case 'bottom':\n this.coords.set({ top: rect.bottom + GAP_PX, left: rect.left + rect.width / 2 })\n break\n case 'left':\n this.coords.set({ top: rect.top + rect.height / 2, left: rect.left - GAP_PX })\n break\n case 'right':\n this.coords.set({ top: rect.top + rect.height / 2, left: rect.right + GAP_PX })\n break\n }\n }\n\n protected hide(): void {\n if (this.showTimer !== null) {\n clearTimeout(this.showTimer)\n this.showTimer = null\n }\n if (!this.visible() || this.closing()) return\n this.closing.set(true)\n this.hideTimer = setTimeout(() => {\n this.hideTimer = null\n this.closing.set(false)\n this.visible.set(false)\n }, FADE_MS)\n }\n\n ngOnDestroy(): void {\n if (this.showTimer !== null) {\n clearTimeout(this.showTimer)\n this.showTimer = null\n }\n if (this.hideTimer !== null) {\n clearTimeout(this.hideTimer)\n this.hideTimer = null\n }\n }\n}\n","<ng-content />\n@if (visible() && coords(); as pos) {\n <span\n class=\"gbt-tooltip__bubble\"\n [class.gbt-tooltip__bubble--leaving]=\"closing()\"\n role=\"tooltip\"\n [id]=\"tooltipId\"\n [attr.data-position]=\"position()\"\n [style.top.px]=\"pos.top\"\n [style.left.px]=\"pos.left\"\n >\n {{ text() }}\n </span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nexport interface RadioOption<T = string> {\n value: T\n label: string\n disabled?: boolean\n}\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-radio-group',\n standalone: true,\n imports: [],\n templateUrl: './radio-group.html',\n styleUrl: './radio-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioGroup),\n multi: true,\n },\n ],\n})\nexport class RadioGroup<T = string> implements ControlValueAccessor {\n id = input<string>(`gbt-radio-group-${++nextId}`)\n label = input.required<string>()\n options = input.required<RadioOption<T>[]>()\n orientation = input<'vertical' | 'horizontal'>('vertical')\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n\n protected readonly selected = signal<T | null>(null)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: T) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: T | null): void {\n this.selected.set(value)\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isSelected(value: T): boolean {\n return this.selected() === value\n }\n\n protected selectOption(value: T): void {\n this.selected.set(value)\n this.onChange(value)\n this.onTouched()\n }\n}\n","<fieldset\n class=\"gbt-radio-group\"\n [attr.data-orientation]=\"orientation()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n>\n <legend class=\"gbt-radio-group__legend\">{{ label() }}{{ required() ? ' *' : '' }}</legend>\n <div class=\"gbt-radio-group__options\">\n @for (option of options(); track option.value; let i = $index) {\n <label class=\"gbt-radio-group__option\">\n <input\n type=\"radio\"\n [id]=\"id() + '-' + i\"\n [name]=\"id()\"\n [value]=\"option.value\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"isDisabled() || !!option.disabled\"\n (change)=\"selectOption(option.value)\"\n />\n <span>{{ option.label }}</span>\n </label>\n }\n </div>\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-radio-group__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</fieldset>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Checkbox } from '../../atoms/checkbox/checkbox'\n\nexport interface CheckboxGroupOption<T = string> {\n value: T\n label: string\n hint?: string\n disabled?: boolean\n}\n\nexport interface CheckboxGroupSection<T = string> {\n label: string\n options: CheckboxGroupOption<T>[]\n}\n\ninterface RenderedItem<T> {\n id: string\n option: CheckboxGroupOption<T>\n}\n\ninterface RenderedSection<T> {\n key: string\n label: string | null\n labelId: string\n items: RenderedItem<T>[]\n}\n\nlet nextCheckboxGroupId = 0\n\n@Component({\n selector: 'gbt-checkbox-group',\n standalone: true,\n imports: [Checkbox],\n templateUrl: './checkbox-group.html',\n styleUrl: './checkbox-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxGroup),\n multi: true,\n },\n ],\n})\nexport class CheckboxGroup<T = string> implements ControlValueAccessor {\n id = input<string>(`gbt-checkbox-group-${++nextCheckboxGroupId}`)\n legend = input.required<string>()\n hideLegend = input(false, { transform: booleanAttribute })\n options = input<CheckboxGroupOption<T>[]>([])\n groups = input<CheckboxGroupSection<T>[]>([])\n columns = input<number | 'auto'>(1)\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n hint = input<string>('')\n errorMessage = input<string | null>(null)\n value = model<T[]>([])\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n protected readonly hintId = computed(() => `${this.id()}-hint`)\n protected readonly errorId = computed(() => `${this.id()}-error`)\n protected readonly showHint = computed(() => !!this.hint() && !this.errorMessage())\n protected readonly describedBy = computed(() => {\n if (this.errorMessage()) return this.errorId()\n return this.showHint() ? this.hintId() : null\n })\n\n protected readonly sections = computed<RenderedSection<T>[]>(() => {\n const id = this.id()\n const result: RenderedSection<T>[] = []\n const flat = this.options()\n if (flat.length > 0) {\n result.push({\n key: 'options',\n label: null,\n labelId: '',\n items: flat.map((option, i) => ({ id: `${id}-${i}`, option })),\n })\n }\n this.groups().forEach((group, g) => {\n result.push({\n key: `group-${g}`,\n label: group.label,\n labelId: `${id}-group-${g}`,\n items: group.options.map((option, i) => ({ id: `${id}-g${g}-${i}`, option })),\n })\n })\n return result\n })\n\n protected readonly sectioned = computed(() => this.sections().some((s) => s.label !== null))\n\n protected readonly gridColumns = computed(() => {\n const columns = this.columns()\n if (columns === 'auto') return 'repeat(auto-fill, minmax(11rem, 1fr))'\n const count = Math.max(1, Math.floor(columns))\n return count === 1 ? null : `repeat(${count}, minmax(0, 1fr))`\n })\n\n private onChange: (value: T[]) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: T[] | null): void {\n this.value.set(Array.isArray(value) ? [...value] : [])\n }\n\n registerOnChange(fn: (value: T[]) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isChecked(value: T): boolean {\n return this.value().includes(value)\n }\n\n protected setChecked(value: T, checked: boolean): void {\n const current = this.value()\n if (current.includes(value) === checked) return\n const next = checked ? [...current, value] : current.filter((v) => v !== value)\n const order = this.sections().flatMap((s) => s.items.map((item) => item.option.value))\n const rank = (v: T): number => {\n const index = order.indexOf(v)\n return index === -1 ? order.length : index\n }\n next.sort((a, b) => rank(a) - rank(b))\n this.value.set(next)\n this.onChange(next)\n this.onTouched()\n }\n}\n","<fieldset\n class=\"gbt-checkbox-group\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <legend\n class=\"gbt-checkbox-group__legend\"\n [class.gbt-checkbox-group__legend--hidden]=\"hideLegend()\"\n >\n {{ legend() }}{{ required() ? ' *' : '' }}\n </legend>\n @if (showHint()) {\n <p [id]=\"hintId()\" class=\"gbt-checkbox-group__hint\">{{ hint() }}</p>\n }\n <div\n class=\"gbt-checkbox-group__sections\"\n [style.grid-template-columns]=\"sectioned() ? gridColumns() : null\"\n >\n @for (section of sections(); track section.key) {\n <div\n class=\"gbt-checkbox-group__section\"\n [attr.role]=\"section.label ? 'group' : null\"\n [attr.aria-labelledby]=\"section.label ? section.labelId : null\"\n >\n @if (section.label) {\n <p [id]=\"section.labelId\" class=\"gbt-checkbox-group__group-label\">{{ section.label }}</p>\n }\n <div\n class=\"gbt-checkbox-group__list\"\n [style.grid-template-columns]=\"sectioned() ? null : gridColumns()\"\n >\n @for (item of section.items; track item.id) {\n <gbt-checkbox\n [id]=\"item.id\"\n [label]=\"item.option.label\"\n [hint]=\"item.option.hint ?? ''\"\n [disabled]=\"isDisabled() || !!item.option.disabled\"\n [checked]=\"isChecked(item.option.value)\"\n (checkedChange)=\"setChecked(item.option.value, $event)\"\n />\n }\n </div>\n </div>\n }\n </div>\n @if (errorMessage()) {\n <p [id]=\"errorId()\" class=\"gbt-checkbox-group__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</fieldset>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextSwitchId = 0\n\n@Component({\n selector: 'gbt-switch',\n standalone: true,\n templateUrl: './switch.html',\n styleUrl: './switch.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.gbt-switch-host--hint]': '!!hint()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Switch),\n multi: true,\n },\n ],\n})\nexport class Switch implements ControlValueAccessor {\n id = input<string>(`gbt-switch-${++nextSwitchId}`)\n label = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n hint = input<string>('')\n\n protected readonly hintId = computed(() => `${this.id()}-hint`)\n protected readonly checked = signal(false)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: boolean) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: boolean): void {\n this.checked.set(!!value)\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked\n this.checked.set(value)\n this.onChange(value)\n this.onTouched()\n }\n}\n","<label class=\"gbt-switch\" [class.gbt-switch--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"gbt-switch__input\"\n [id]=\"id()\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-describedby]=\"hint() ? hintId() : null\"\n (change)=\"onToggle($event)\"\n />\n <span class=\"gbt-switch__track\">\n <span class=\"gbt-switch__thumb\"></span>\n </span>\n <span>{{ label() }}</span>\n</label>\n@if (hint()) {\n <p [id]=\"hintId()\" class=\"gbt-switch__hint\">{{ hint() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterRenderEffect,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextId = 0\n\nexport type TextareaResize = 'vertical' | 'none' | 'both' | 'horizontal'\n\n@Component({\n selector: 'gbt-textarea',\n standalone: true,\n imports: [],\n templateUrl: './textarea.html',\n styleUrl: './textarea.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Textarea),\n multi: true,\n },\n ],\n})\nexport class Textarea implements ControlValueAccessor {\n id = input<string>(`gbt-textarea-${++nextId}`)\n label = input<string>('')\n required = input(false, { transform: booleanAttribute })\n disabled = input(false, { transform: booleanAttribute })\n placeholder = input<string>('')\n errorMessage = input<string | null>(null)\n rows = input(3)\n\n hint = input<string>('')\n hideLabel = input(false, { transform: booleanAttribute })\n mono = input(false, { transform: booleanAttribute })\n autosize = input(false, { transform: booleanAttribute })\n maxRows = input<number | null>(null)\n resize = input<TextareaResize>('vertical')\n\n committed = output<string>()\n\n protected readonly value = signal('')\n\n private readonly field = viewChild.required<ElementRef<HTMLTextAreaElement>>('field')\n\n protected readonly hintId = computed(() => `${this.id()}-hint`)\n protected readonly errorId = computed(() => `${this.id()}-error`)\n protected readonly showHint = computed(() => !!this.hint() && !this.errorMessage())\n protected readonly describedBy = computed(() => {\n if (this.errorMessage()) {\n return this.errorId()\n }\n return this.showHint() ? this.hintId() : null\n })\n protected readonly effectiveResize = computed(() => (this.autosize() ? 'none' : this.resize()))\n protected readonly maxRowsProperty = computed(() => (this.autosize() ? this.maxRows() : null))\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n constructor() {\n const host: HTMLElement = inject(ElementRef).nativeElement\n\n let wasAutosize = false\n afterRenderEffect(() => {\n const textarea = this.field().nativeElement\n this.value()\n this.rows()\n if (this.autosize()) {\n this.fitToContent(textarea)\n wasAutosize = true\n } else if (wasAutosize) {\n textarea.style.height = ''\n wasAutosize = false\n }\n })\n\n afterRenderEffect((onCleanup) => {\n if (!this.autosize() || typeof ResizeObserver === 'undefined') {\n return\n }\n let lastWidth = host.clientWidth\n const observer = new ResizeObserver(() => {\n if (host.clientWidth !== lastWidth) {\n lastWidth = host.clientWidth\n this.fitToContent(this.field().nativeElement)\n }\n })\n observer.observe(host)\n onCleanup(() => observer.disconnect())\n })\n }\n\n private fitToContent(textarea: HTMLTextAreaElement): void {\n textarea.style.height = 'auto'\n const borders = textarea.offsetHeight - textarea.clientHeight\n textarea.style.height = `${Math.ceil(textarea.scrollHeight + borders)}px`\n }\n\n private onChange: (value: string) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: string): void {\n this.value.set(value ?? '')\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLTextAreaElement).value\n this.value.set(value)\n this.onChange(value)\n }\n\n protected onBlur(): void {\n this.onTouched()\n this.committed.emit(this.value())\n }\n}\n","<div\n class=\"gbt-textarea\"\n [class.gbt-textarea--mono]=\"mono()\"\n [class.gbt-textarea--autosize]=\"autosize()\"\n>\n @if (label()) {\n <label [for]=\"id()\" [class.gbt-textarea__label--hidden]=\"hideLabel()\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n <textarea\n #field\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [disabled]=\"isDisabled()\"\n [rows]=\"rows()\"\n [value]=\"value()\"\n [attr.data-resize]=\"effectiveResize()\"\n [style.--gbt-textarea-max-rows]=\"maxRowsProperty()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n ></textarea>\n @if (showHint()) {\n <p [id]=\"hintId()\" class=\"gbt-textarea__hint\">{{ hint() }}</p>\n }\n @if (errorMessage()) {\n <p [id]=\"errorId()\" class=\"gbt-textarea__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n TemplateRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { Subscription, isObservable, type Observable } from 'rxjs'\nimport { floatingPanelAnchor } from '../../shared/floating-panel-position'\n\nexport type AutocompleteSearchFn<T> = (query: string) => Observable<T[]> | Promise<T[]>\n\nlet nextAutocompleteId = 0\n\n@Component({\n selector: 'gbt-autocomplete',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './autocomplete.html',\n styleUrl: './autocomplete.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(window:scroll)': 'updatePanelPosition()',\n '(window:resize)': 'updatePanelPosition()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Autocomplete),\n multi: true,\n },\n ],\n})\nexport class Autocomplete<T = unknown> implements ControlValueAccessor, OnDestroy {\n private readonly elementRef = inject(ElementRef)\n\n id = input<string>(`gbt-autocomplete-${++nextAutocompleteId}`)\n label = input<string>('')\n placeholder = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n search = input.required<AutocompleteSearchFn<T>>()\n displayFn = input<(item: T) => string>((item) => String(item))\n itemTemplate = input<TemplateRef<unknown>>()\n debounceMs = input<number>(300)\n minLength = input<number>(1)\n loadingMessage = input<string>('Searching…')\n noResultsMessage = input<string>('No results')\n searchErrorMessage = input<string>('Search failed')\n resultsAnnouncement = input<(count: number) => string>(\n (count) => `${count} result${count !== 1 ? 's' : ''}`,\n )\n\n itemSelected = output<T>()\n\n protected readonly query = signal('')\n protected readonly open = signal(false)\n protected readonly results = signal<T[]>([])\n protected readonly loading = signal(false)\n protected readonly searchFailed = signal(false)\n protected readonly activeIndex = signal(0)\n protected readonly selectedItem = signal<T | null>(null)\n protected readonly panelStyle = signal<{ top: string; left: string; width: string } | null>(null)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n protected readonly hasNoResults = computed(\n () => this.open() && !this.loading() && !this.searchFailed() && this.results().length === 0,\n )\n\n protected readonly activeOptionId = computed(() =>\n this.open() && this.results().length > 0 ? `${this.id()}-option-${this.activeIndex()}` : null,\n )\n\n private onChange: (value: T | null) => void = () => {}\n private onTouched: () => void = () => {}\n\n private requestSeq = 0\n private debounceHandle?: ReturnType<typeof setTimeout>\n private subscription?: Subscription\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n writeValue(value: T | null): void {\n this.selectedItem.set(value)\n this.query.set(value === null || value === undefined ? '' : this.displayFn()(value))\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value\n this.query.set(value)\n this.activeIndex.set(0)\n if (this.selectedItem() !== null) {\n this.selectedItem.set(null)\n this.onChange(null)\n }\n this.scheduleSearch(value)\n }\n\n protected onFocus(): void {\n if (\n this.query().trim().length >= this.minLength() &&\n (this.results().length > 0 || this.searchFailed())\n ) {\n this.open.set(true)\n this.updatePanelPosition()\n }\n }\n\n protected onBlur(): void {\n this.onTouched()\n setTimeout(() => {\n if (!this.elementRef.nativeElement.contains(document.activeElement)) {\n this.open.set(false)\n }\n }, 200)\n }\n\n private scheduleSearch(value: string): void {\n clearTimeout(this.debounceHandle)\n if (value.trim().length < this.minLength()) {\n this.requestSeq++\n this.subscription?.unsubscribe()\n this.open.set(false)\n this.results.set([])\n this.loading.set(false)\n this.searchFailed.set(false)\n return\n }\n this.debounceHandle = setTimeout(() => this.runSearch(value), this.debounceMs())\n }\n\n private runSearch(query: string): void {\n const seq = ++this.requestSeq\n this.subscription?.unsubscribe()\n this.loading.set(true)\n this.searchFailed.set(false)\n this.open.set(true)\n this.updatePanelPosition()\n\n const applyResults = (items: T[]): void => {\n if (seq !== this.requestSeq) return\n this.results.set(items)\n this.loading.set(false)\n this.activeIndex.set(0)\n this.updatePanelPosition()\n }\n const applyError = (): void => {\n if (seq !== this.requestSeq) return\n this.results.set([])\n this.loading.set(false)\n this.searchFailed.set(true)\n this.updatePanelPosition()\n }\n\n const result = this.search()(query)\n if (isObservable(result)) {\n this.subscription = result.subscribe({ next: applyResults, error: applyError })\n } else {\n result.then(applyResults, applyError)\n }\n }\n\n protected updatePanelPosition(): void {\n const trigger = this.elementRef.nativeElement.querySelector(\n '.gbt-autocomplete__input',\n ) as HTMLElement | null\n const anchor = floatingPanelAnchor(this.open(), trigger)\n if (anchor) {\n this.panelStyle.set({\n top: `${anchor.bottom}px`,\n left: `${anchor.left}px`,\n width: `${anchor.rect.width}px`,\n })\n }\n }\n\n protected selectOption(item: T): void {\n this.selectedItem.set(item)\n this.query.set(this.displayFn()(item))\n this.results.set([])\n this.open.set(false)\n this.onChange(item)\n this.onTouched()\n this.itemSelected.emit(item)\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) {\n return\n }\n if (event.key === 'Escape') {\n if (this.open()) {\n event.preventDefault()\n event.stopPropagation()\n this.open.set(false)\n }\n return\n }\n if (!this.open() || this.results().length === 0) {\n return\n }\n const results = this.results()\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.activeIndex.update((i) => Math.min(i + 1, results.length - 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n this.activeIndex.update((i) => Math.max(i - 1, 0))\n break\n case 'Enter': {\n event.preventDefault()\n const active = results[this.activeIndex()]\n if (active) {\n this.selectOption(active)\n }\n break\n }\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.debounceHandle)\n this.subscription?.unsubscribe()\n }\n}\n","<div class=\"gbt-autocomplete\" [class.gbt-autocomplete--disabled]=\"isDisabled()\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-autocomplete__label\"\n >{{ label() }}{{ required() ? ' *' : '' }}</label\n >\n }\n\n <input\n [id]=\"id()\"\n type=\"text\"\n class=\"gbt-autocomplete__input\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? id() + '-listbox' : null\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n [attr.aria-required]=\"required() ? true : null\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"query()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n\n @if (open()) {\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">\n @if (loading()) {\n {{ loadingMessage() }}\n } @else if (searchFailed()) {\n {{ searchErrorMessage() }}\n } @else {\n {{ resultsAnnouncement()(results().length) }}\n }\n </div>\n }\n\n @if (open() && panelStyle(); as style) {\n <div\n class=\"gbt-autocomplete__panel\"\n [style.top]=\"style.top\"\n [style.left]=\"style.left\"\n [style.width]=\"style.width\"\n (mousedown)=\"$event.preventDefault()\"\n >\n @if (loading()) {\n <div class=\"gbt-autocomplete__state\" role=\"status\">\n <span>{{ loadingMessage() }}</span>\n </div>\n } @else if (searchFailed()) {\n <div class=\"gbt-autocomplete__state gbt-autocomplete__state--error\" role=\"alert\">\n <span>{{ searchErrorMessage() }}</span>\n </div>\n } @else if (hasNoResults()) {\n <div class=\"gbt-autocomplete__state\" role=\"status\">\n <span>{{ noResultsMessage() }}</span>\n </div>\n } @else {\n <ul\n [id]=\"id() + '-listbox'\"\n class=\"gbt-autocomplete__list\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || placeholder()\"\n >\n @for (item of results(); track $index; let i = $index) {\n <li role=\"presentation\">\n <button\n [id]=\"id() + '-option-' + i\"\n type=\"button\"\n role=\"option\"\n tabindex=\"-1\"\n class=\"gbt-autocomplete__option\"\n [class.gbt-autocomplete__option--active]=\"i === activeIndex()\"\n [attr.aria-selected]=\"i === activeIndex()\"\n (click)=\"selectOption(item)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n @if (itemTemplate(); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n } @else {\n <span class=\"gbt-autocomplete__option-label\">{{ displayFn()(item) }}</span>\n }\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-autocomplete__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\n@Component({\n selector: 'gbt-divider',\n standalone: true,\n templateUrl: './divider.html',\n styleUrl: './divider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.data-orientation]': 'orientation()',\n '[attr.aria-orientation]': \"orientation() === 'vertical' ? 'vertical' : null\",\n },\n})\nexport class Divider {\n orientation = input<DividerOrientation>('horizontal')\n label = input<string>('')\n}\n","@if (label()) {\n <span class=\"gbt-divider__line\"></span>\n <span class=\"gbt-divider__label\">{{ label() }}</span>\n <span class=\"gbt-divider__line\"></span>\n} @else {\n <span class=\"gbt-divider__line\"></span>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\n@Component({\n selector: 'gbt-spinner',\n standalone: true,\n templateUrl: './spinner.html',\n styleUrl: './spinner.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'status',\n '[attr.data-size]': 'size()',\n },\n})\nexport class Spinner {\n size = input<SpinnerSize>('md')\n label = input<string>('Loading…')\n}\n","<span class=\"gbt-spinner__ring\" aria-hidden=\"true\"></span>\n<span class=\"sr-only\">{{ label() }}</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-slider',\n standalone: true,\n imports: [],\n templateUrl: './slider.html',\n styleUrl: './slider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => Slider),\n multi: true,\n },\n ],\n})\nexport class Slider implements ControlValueAccessor {\n id = input<string>(`gbt-slider-${++nextId}`)\n label = input.required<string>()\n min = input(0)\n max = input(100)\n step = input(1)\n disabled = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n showValue = input(true, { transform: booleanAttribute })\n formatValue = input<(value: number) => string>((value) => `${value}`)\n\n protected readonly value = signal(0)\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n protected readonly fillPercent = computed(() => {\n const range = this.max() - this.min()\n if (range <= 0) {\n return 0\n }\n return ((this.value() - this.min()) / range) * 100\n })\n\n private onChange: (value: number) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: number): void {\n this.value.set(value ?? 0)\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected onInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value)\n this.value.set(value)\n this.onChange(value)\n }\n\n protected onBlur(): void {\n this.onTouched()\n }\n}\n","<div class=\"gbt-slider\">\n <div class=\"gbt-slider__header\">\n <label [for]=\"id()\">{{ label() }}</label>\n @if (showValue()) {\n <span class=\"gbt-slider__value\">{{ formatValue()(value()) }}</span>\n }\n </div>\n <input\n type=\"range\"\n [id]=\"id()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [style.--gbt-slider-fill.%]=\"fillPercent()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-slider__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, booleanAttribute, input, model } from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type StepperStatus = 'upcoming' | 'current' | 'completed' | 'error'\nexport type StepperOrientation = 'horizontal' | 'vertical'\n\nexport interface StepperStep {\n label: string\n hasError?: boolean\n}\n\n@Component({\n selector: 'gbt-stepper',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './stepper.html',\n styleUrl: './stepper.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Stepper {\n steps = input.required<StepperStep[]>()\n activeIndex = model(0)\n orientation = input<StepperOrientation>('horizontal')\n completedLabel = input<string>('Completed')\n errorLabel = input<string>('Error')\n interactive = input(false, { transform: booleanAttribute })\n selectedIndex = model<number | null>(null)\n selectedLabel = input<string>('Selected')\n\n protected select(index: number): void {\n this.selectedIndex.set(index)\n }\n\n protected isSelected(index: number): boolean {\n return this.interactive() && this.selectedIndex() === index\n }\n\n protected statusOf(index: number): StepperStatus {\n const step = this.steps()[index]\n const active = this.activeIndex()\n if (step.hasError && index <= active) {\n return 'error'\n }\n if (index < active) {\n return 'completed'\n }\n if (index === active) {\n return 'current'\n }\n return 'upcoming'\n }\n}\n","<ng-template #content let-index=\"index\" let-step=\"step\">\n <span class=\"gbt-stepper__indicator\">\n @switch (statusOf(index)) {\n @case ('completed') {\n <gbt-icon name=\"check\" aria-hidden=\"true\" />\n }\n @case ('error') {\n <gbt-icon name=\"alert-triangle\" aria-hidden=\"true\" />\n }\n @default {\n {{ index + 1 }}\n }\n }\n </span>\n <span class=\"gbt-stepper__label\">\n {{ step.label }}\n @if (statusOf(index) === 'completed') {\n <span class=\"sr-only\"> — {{ completedLabel() }}</span>\n } @else if (statusOf(index) === 'error') {\n <span class=\"sr-only\"> — {{ errorLabel() }}</span>\n }\n @if (isSelected(index)) {\n <span class=\"sr-only\"> — {{ selectedLabel() }}</span>\n }\n </span>\n</ng-template>\n\n<ol class=\"gbt-stepper\" [attr.data-orientation]=\"orientation()\">\n @for (step of steps(); track $index) {\n <li\n class=\"gbt-stepper__step\"\n [attr.data-status]=\"statusOf($index)\"\n [attr.data-selected]=\"isSelected($index) ? '' : null\"\n [attr.aria-current]=\"statusOf($index) === 'current' ? 'step' : null\"\n >\n @if (interactive()) {\n <button type=\"button\" class=\"gbt-stepper__button\" (click)=\"select($index)\">\n <ng-container *ngTemplateOutlet=\"content; context: { index: $index, step: step }\" />\n </button>\n } @else {\n <ng-container *ngTemplateOutlet=\"content; context: { index: $index, step: step }\" />\n }\n </li>\n }\n</ol>\n","import { NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core'\nimport { Icon } from '../icon/icon'\n\nexport type JobStatusValue = 'pending' | 'running' | 'success' | 'failed' | 'canceled'\n\n@Component({\n selector: 'gbt-job-status',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './job-status.html',\n styleUrl: './job-status.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-status]': 'status()',\n '[attr.aria-hidden]': 'label() ? null : \"true\"',\n },\n})\nexport class JobStatus {\n status = input.required<JobStatusValue>()\n label = input<string | null>(null)\n}\n","<ng-template #glyph>\n @switch (status()) {\n @case ('success') {\n <gbt-icon name=\"check-circle\" />\n }\n @case ('failed') {\n <gbt-icon name=\"alert-circle\" />\n }\n @case ('canceled') {\n <gbt-icon name=\"x\" />\n }\n @default {\n <span class=\"gbt-job-status__dot\"></span>\n }\n }\n</ng-template>\n@if (label(); as text) {\n <span class=\"gbt-job-status__glyph\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"glyph\" />\n </span>\n <span class=\"sr-only\">{{ text }}</span>\n} @else {\n <ng-container *ngTemplateOutlet=\"glyph\" />\n}\n","import type { JobGraphStage } from './job-graph.types'\n\nexport interface GraphEdge {\n from: string\n to: string\n}\n\nexport interface Box {\n left: number\n top: number\n width: number\n height: number\n}\n\nexport function graphEdges(stages: JobGraphStage[]): GraphEdge[] {\n const names = new Set(stages.flatMap((stage) => stage.jobs.map((job) => job.name)))\n return stages.flatMap((stage) =>\n stage.jobs.flatMap((job) =>\n job.needs.filter((need) => names.has(need)).map((need) => ({ from: need, to: job.name })),\n ),\n )\n}\n\nconst round = (value: number): number => Math.round(value * 10) / 10\n\nexport function linkPath(from: Box, to: Box): string {\n const x1 = from.left + from.width\n const y1 = from.top + from.height / 2\n const x2 = to.left\n const y2 = to.top + to.height / 2\n const dx = Math.max(24, (x2 - x1) / 2)\n return `M ${round(x1)} ${round(y1)} C ${round(x1 + dx)} ${round(y1)}, ${round(x2 - dx)} ${round(y2)}, ${round(x2)} ${round(y2)}`\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterNextRender,\n afterRenderEffect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { JobStatus } from '../../atoms/job-status/job-status'\nimport { graphEdges, linkPath } from './job-graph-layout'\nimport type { JobGraphStage, JobGraphStatus } from './job-graph.types'\n\nexport type { JobGraphJob, JobGraphStage, JobGraphStatus } from './job-graph.types'\n\ninterface GraphLink {\n key: string\n d: string\n done: boolean\n}\n\nconst DEFAULT_STATUS_LABELS: Record<JobGraphStatus, string> = {\n pending: 'Pending',\n running: 'Running',\n success: 'Succeeded',\n failed: 'Failed',\n canceled: 'Canceled',\n}\n\n@Component({\n selector: 'gbt-job-graph',\n standalone: true,\n imports: [JobStatus],\n templateUrl: './job-graph.html',\n styleUrl: './job-graph.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JobGraph {\n stages = input.required<JobGraphStage[]>()\n selectedJobId = input<string | null>(null)\n statusLabels = input<Record<JobGraphStatus, string>>(DEFAULT_STATUS_LABELS)\n needsLabel = input<string>('Needs')\n ariaLabel = input<string>('Pipeline jobs')\n jobSelected = output<string>()\n\n protected readonly links = signal<GraphLink[]>([])\n\n private readonly graph = viewChild<ElementRef<HTMLElement>>('graph')\n private readonly destroyRef = inject(DestroyRef)\n\n constructor() {\n afterRenderEffect(() => {\n this.stages()\n this.measure()\n })\n afterNextRender(() => {\n const root = this.graph()?.nativeElement\n if (!root || typeof ResizeObserver === 'undefined') {\n return\n }\n const observer = new ResizeObserver(() => this.measure())\n observer.observe(root)\n this.destroyRef.onDestroy(() => observer.disconnect())\n })\n }\n\n private measure(): void {\n const root = this.graph()?.nativeElement\n if (!root) {\n return\n }\n const origin = root.getBoundingClientRect()\n const boxes = new Map<string, { left: number; top: number; width: number; height: number }>()\n root.querySelectorAll<HTMLElement>('[data-job-name]').forEach((node) => {\n const rect = node.getBoundingClientRect()\n boxes.set(node.dataset['jobName'] ?? '', {\n left: rect.left - origin.left + root.scrollLeft,\n top: rect.top - origin.top + root.scrollTop,\n width: rect.width,\n height: rect.height,\n })\n })\n const statuses = new Map(\n this.stages().flatMap((s) => s.jobs.map((j) => [j.name, j.status] as const)),\n )\n this.links.set(\n graphEdges(this.stages()).flatMap((edge) => {\n const from = boxes.get(edge.from)\n const to = boxes.get(edge.to)\n return from && to\n ? [\n {\n key: `${edge.from}->${edge.to}`,\n d: linkPath(from, to),\n done: statuses.get(edge.from) === 'success',\n },\n ]\n : []\n }),\n )\n }\n}\n","<div class=\"gbt-job-graph\" #graph>\n <ol class=\"gbt-job-graph__stages\" [attr.aria-label]=\"ariaLabel()\">\n @for (stage of stages(); track stage.name) {\n <li class=\"gbt-job-graph__stage\">\n <h3 class=\"gbt-job-graph__stage-name\">{{ stage.name }}</h3>\n <ul class=\"gbt-job-graph__jobs\">\n @for (job of stage.jobs; track job.id) {\n <li>\n <button\n type=\"button\"\n class=\"gbt-job-graph__node\"\n [attr.data-job-name]=\"job.name\"\n [attr.data-status]=\"job.status\"\n [attr.aria-current]=\"job.id === selectedJobId() ? 'true' : null\"\n (click)=\"jobSelected.emit(job.id)\"\n >\n <gbt-job-status class=\"gbt-job-graph__glyph\" data-glyph [status]=\"job.status\" />\n <span class=\"gbt-job-graph__name\">{{ job.name }}</span>\n @if (job.durationLabel) {\n <span class=\"gbt-job-graph__duration\">{{ job.durationLabel }}</span>\n }\n <!-- prettier-ignore -->\n <span class=\"sr-only\">\n — {{ statusLabels()[job.status] }}@if (job.needs.length > 0) {. {{ needsLabel() }}: {{ job.needs.join(', ') }}}\n </span>\n </button>\n </li>\n }\n </ul>\n </li>\n }\n </ol>\n <svg class=\"gbt-job-graph__links\" aria-hidden=\"true\" focusable=\"false\">\n @for (link of links(); track link.key) {\n <path [attr.d]=\"link.d\" [attr.data-done]=\"link.done ? '' : null\" />\n }\n </svg>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Icon } from '../../atoms/icon/icon'\n\nlet nextId = 0\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) {\n return `${bytes} B`\n }\n if (bytes < 1024 * 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`\n }\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\n@Component({\n selector: 'gbt-file-upload',\n standalone: true,\n imports: [Icon],\n templateUrl: './file-upload.html',\n styleUrl: './file-upload.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUpload),\n multi: true,\n },\n ],\n})\nexport class FileUpload implements ControlValueAccessor {\n private readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput')\n\n id = input<string>(`gbt-file-upload-${++nextId}`)\n label = input<string>('')\n multiple = input(false, { transform: booleanAttribute })\n accept = input<string>('')\n maxSizeMb = input<number | null>(null)\n disabled = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n dropLabel = input<string>('Drag and drop a file here, or click to browse')\n removeLabel = input<(name: string) => string>((name) => `Remove ${name}`)\n oversizeMessage = input<(name: string, maxSizeMb: number) => string>(\n (name, maxSizeMb) => `${name} exceeds ${maxSizeMb} MB and was not added.`,\n )\n extraFileMessage = input<(name: string) => string>(\n (name) => `${name} was not added — only one file is allowed.`,\n )\n\n protected readonly files = signal<File[]>([])\n protected readonly rejections = signal<string[]>([])\n protected readonly dragOver = signal(false)\n\n protected readonly formatFileSize = formatFileSize\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: File[]) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: File[] | null): void {\n this.files.set(value ?? [])\n }\n\n registerOnChange(fn: (value: File[]) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected openPicker(): void {\n if (this.isDisabled()) {\n return\n }\n this.fileInput()?.nativeElement.click()\n }\n\n protected onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement\n this.addFiles(input.files)\n input.value = ''\n }\n\n protected onDragEnter(event: DragEvent): void {\n event.preventDefault()\n if (!this.isDisabled()) {\n this.dragOver.set(true)\n }\n }\n\n protected onDragOver(event: DragEvent): void {\n event.preventDefault()\n }\n\n protected onDragLeave(event: DragEvent): void {\n event.preventDefault()\n this.dragOver.set(false)\n }\n\n protected onDrop(event: DragEvent): void {\n event.preventDefault()\n this.dragOver.set(false)\n if (this.isDisabled()) {\n return\n }\n this.addFiles(event.dataTransfer?.files ?? null)\n }\n\n protected removeFile(file: File): void {\n if (this.isDisabled()) {\n return\n }\n const next = this.files().filter((f) => f !== file)\n this.files.set(next)\n this.onChange(next)\n this.onTouched()\n }\n\n private addFiles(fileList: FileList | null): void {\n if (!fileList || fileList.length === 0) {\n return\n }\n const incoming = Array.from(fileList)\n const maxSizeMb = this.maxSizeMb()\n const accepted: File[] = []\n const rejected: string[] = []\n for (const file of incoming) {\n if (maxSizeMb !== null && file.size > maxSizeMb * 1024 * 1024) {\n rejected.push(this.oversizeMessage()(file.name, maxSizeMb))\n } else {\n accepted.push(file)\n }\n }\n const extra = this.multiple() ? [] : accepted.slice(1)\n for (const file of extra) {\n rejected.push(this.extraFileMessage()(file.name))\n }\n this.rejections.set(rejected)\n if (accepted.length === 0) {\n return\n }\n const next = this.multiple() ? [...this.files(), ...accepted] : accepted.slice(0, 1)\n this.files.set(next)\n this.onChange(next)\n this.onTouched()\n }\n}\n","<div class=\"gbt-file-upload\">\n @if (label()) {\n <span class=\"gbt-file-upload__label\" [id]=\"id() + '-label'\">{{ label() }}</span>\n }\n <button\n type=\"button\"\n class=\"gbt-file-upload__dropzone\"\n [class.gbt-file-upload__dropzone--drag-over]=\"dragOver()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"label() ? id() + '-label' : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (click)=\"openPicker()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event)\"\n >\n <gbt-icon name=\"upload\" class=\"gbt-file-upload__icon\" aria-hidden=\"true\" />\n <span class=\"gbt-file-upload__hint\">{{ dropLabel() }}</span>\n </button>\n <input\n #fileInput\n type=\"file\"\n class=\"gbt-file-upload__input\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [multiple]=\"multiple()\"\n [attr.accept]=\"accept() || null\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFilesSelected($event)\"\n />\n @if (rejections().length > 0) {\n <div class=\"gbt-file-upload__rejections\" role=\"alert\">\n <ul>\n @for (message of rejections(); track message) {\n <li>{{ message }}</li>\n }\n </ul>\n </div>\n }\n @if (files().length > 0) {\n <ul class=\"gbt-file-upload__files\">\n @for (file of files(); track file) {\n <li class=\"gbt-file-upload__file\">\n <span class=\"gbt-file-upload__file-name\">{{ file.name }}</span>\n <span class=\"gbt-file-upload__file-size\">{{ formatFileSize(file.size) }}</span>\n <button\n type=\"button\"\n class=\"gbt-file-upload__file-remove\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"removeLabel()(file.name)\"\n (click)=\"removeFile(file)\"\n >\n <gbt-icon name=\"x\" aria-hidden=\"true\" />\n </button>\n </li>\n }\n </ul>\n }\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-file-upload__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\n\nexport type NotificationDotVariant = 'error' | 'warning' | 'success' | 'info'\n\n@Component({\n selector: 'gbt-notification-dot',\n standalone: true,\n exportAs: 'gbtNotificationDot',\n templateUrl: './notification-dot.html',\n styleUrl: './notification-dot.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationDot {\n count = input<number | null>(null)\n max = input<number>(99)\n variant = input<NotificationDotVariant>('error')\n hidden = input(false)\n\n protected readonly showDot = computed(() => !this.hidden() && this.count() !== 0)\n\n protected readonly displayValue = computed(() => {\n const count = this.count()\n if (count === null) {\n return ''\n }\n const max = this.max()\n return count > max ? `${max}+` : `${count}`\n })\n}\n","<span class=\"gbt-notification-dot__anchor\">\n <ng-content></ng-content>\n</span>\n@if (showDot()) {\n <span\n class=\"gbt-notification-dot__badge\"\n [class.gbt-notification-dot__badge--count]=\"count() !== null\"\n [attr.data-variant]=\"variant()\"\n aria-hidden=\"true\"\n >{{ displayValue() }}</span\n >\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Tag } from '../../atoms/tag/tag'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-tag-input',\n standalone: true,\n imports: [Tag],\n templateUrl: './tag-input.html',\n styleUrl: './tag-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TagInput),\n multi: true,\n },\n ],\n})\nexport class TagInput implements ControlValueAccessor {\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input')\n\n id = input<string>(`gbt-tag-input-${++nextId}`)\n label = input<string>('')\n placeholder = input<string>('')\n disabled = input(false, { transform: booleanAttribute })\n errorMessage = input<string | null>(null)\n separatorKeys = input<string[]>(['Enter', ','])\n allowDuplicates = input(false, { transform: booleanAttribute })\n color = input<string>('#6b7280')\n removeLabel = input<(value: string) => string>((value) => `Remove ${value}`)\n\n protected readonly tags = signal<string[]>([])\n protected readonly draft = signal('')\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n private onChange: (value: string[]) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: string[] | null): void {\n this.tags.set(value ?? [])\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected focusInput(): void {\n if (!this.isDisabled()) {\n this.inputRef()?.nativeElement.focus()\n }\n }\n\n protected onInputChange(event: Event): void {\n this.draft.set((event.target as HTMLInputElement).value)\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n if (this.separatorKeys().includes(event.key)) {\n event.preventDefault()\n this.commitDraft()\n return\n }\n if (event.key === 'Backspace' && this.draft() === '' && this.tags().length > 0) {\n event.preventDefault()\n this.removeTagAt(this.tags().length - 1)\n }\n }\n\n protected onBlur(): void {\n this.commitDraft()\n this.onTouched()\n }\n\n protected removeTagAt(index: number): void {\n if (this.isDisabled()) {\n return\n }\n const next = this.tags().filter((_, i) => i !== index)\n this.tags.set(next)\n this.onChange(next)\n }\n\n private commitDraft(): void {\n const value = this.draft().trim()\n this.draft.set('')\n if (!value || this.isDisabled()) {\n return\n }\n if (!this.allowDuplicates() && this.tags().includes(value)) {\n return\n }\n const next = [...this.tags(), value]\n this.tags.set(next)\n this.onChange(next)\n }\n}\n","<div class=\"gbt-tag-input\">\n @if (label()) {\n <label [for]=\"id()\" class=\"gbt-tag-input__label\">{{ label() }}</label>\n }\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"gbt-tag-input__field\"\n [class.gbt-tag-input__field--disabled]=\"isDisabled()\"\n (click)=\"focusInput()\"\n >\n @for (tag of tags(); track tag; let i = $index) {\n <gbt-tag\n [color]=\"color()\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"removeLabel()(tag)\"\n (removed)=\"removeTagAt(i)\"\n >\n {{ tag }}\n </gbt-tag>\n }\n <input\n #input\n type=\"text\"\n [id]=\"id()\"\n class=\"gbt-tag-input__input\"\n [placeholder]=\"tags().length === 0 ? placeholder() : ''\"\n [disabled]=\"isDisabled()\"\n [value]=\"draft()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"errorMessage() ? id() + '-error' : null\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"onInputKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n </div>\n @if (errorMessage()) {\n <p [id]=\"id() + '-error'\" class=\"gbt-tag-input__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","export interface TreeNode {\n id: string\n label: string\n icon?: string\n children?: TreeNode[]\n}\n\nexport interface FlatTreeNode {\n node: TreeNode\n depth: number\n hasChildren: boolean\n parentId: string | null\n}\n\nexport function flattenTree(\n nodes: TreeNode[],\n expandedIds: ReadonlySet<string>,\n depth = 0,\n parentId: string | null = null,\n): FlatTreeNode[] {\n const result: FlatTreeNode[] = []\n for (const node of nodes) {\n const hasChildren = !!node.children && node.children.length > 0\n result.push({ node, depth, hasChildren, parentId })\n if (hasChildren && expandedIds.has(node.id)) {\n result.push(...flattenTree(node.children!, expandedIds, depth + 1, node.id))\n }\n }\n return result\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { FlatTreeNode, TreeNode, flattenTree } from './tree-flatten'\n\n@Component({\n selector: 'gbt-tree',\n standalone: true,\n imports: [Icon],\n templateUrl: './tree.html',\n styleUrl: './tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Tree {\n private readonly elementRef = inject(ElementRef)\n private readonly injector = inject(Injector)\n\n items = input.required<TreeNode[]>()\n ariaLabel = input<string>('')\n selectedId = model<string | null>(null)\n expandedIds = model<string[]>([])\n expandLabel = input<string>('Expand')\n collapseLabel = input<string>('Collapse')\n\n protected readonly focusedId = signal<string | null>(null)\n\n private readonly expandedSet = computed(() => new Set(this.expandedIds()))\n protected readonly flatNodes = computed(() => flattenTree(this.items(), this.expandedSet()))\n\n protected readonly activeId = computed(() => {\n const focused = this.focusedId()\n const flat = this.flatNodes()\n if (focused && flat.some((f) => f.node.id === focused)) {\n return focused\n }\n const selected = this.selectedId()\n if (selected && flat.some((f) => f.node.id === selected)) {\n return selected\n }\n return flat[0]?.node.id ?? null\n })\n\n protected isExpanded(id: string): boolean {\n return this.expandedSet().has(id)\n }\n\n protected toggle(id: string): void {\n const set = new Set(this.expandedIds())\n if (set.has(id)) {\n set.delete(id)\n } else {\n set.add(id)\n }\n this.expandedIds.set([...set])\n }\n\n protected select(node: TreeNode): void {\n this.selectedId.set(node.id)\n this.focusedId.set(node.id)\n }\n\n protected onItemClick(flat: FlatTreeNode): void {\n this.select(flat.node)\n if (flat.hasChildren) {\n this.toggle(flat.node.id)\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const flat = this.flatNodes()\n const index = flat.findIndex((f) => f.node.id === this.activeId())\n if (index === -1) {\n return\n }\n const current = flat[index]\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.focusIndex(Math.min(index + 1, flat.length - 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n this.focusIndex(Math.max(index - 1, 0))\n break\n case 'ArrowRight':\n event.preventDefault()\n if (current.hasChildren && !this.isExpanded(current.node.id)) {\n this.toggle(current.node.id)\n } else if (current.hasChildren) {\n this.focusIndex(index + 1)\n }\n break\n case 'ArrowLeft':\n event.preventDefault()\n if (current.hasChildren && this.isExpanded(current.node.id)) {\n this.toggle(current.node.id)\n } else if (current.parentId) {\n const parentIndex = flat.findIndex((f) => f.node.id === current.parentId)\n if (parentIndex !== -1) {\n this.focusIndex(parentIndex)\n }\n }\n break\n case 'Home':\n event.preventDefault()\n this.focusIndex(0)\n break\n case 'End':\n event.preventDefault()\n this.focusIndex(flat.length - 1)\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n this.select(current.node)\n break\n default:\n return\n }\n }\n\n private focusIndex(index: number): void {\n const target = this.flatNodes()[index]\n if (!target) {\n return\n }\n this.focusedId.set(target.node.id)\n afterNextRender(\n () => {\n const host = this.elementRef.nativeElement as HTMLElement\n host.querySelector<HTMLElement>(`[data-node-id=\"${cssEscape(target.node.id)}\"]`)?.focus()\n },\n { injector: this.injector },\n )\n }\n}\n\nfunction cssEscape(value: string): string {\n return typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(value) : value.replace(/\"/g, '\\\\\"')\n}\n","<ul\n class=\"gbt-tree\"\n role=\"tree\"\n tabindex=\"-1\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (keydown)=\"onKeydown($event)\"\n>\n @for (flat of flatNodes(); track flat.node.id) {\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\n <li\n class=\"gbt-tree__item\"\n role=\"treeitem\"\n [attr.data-node-id]=\"flat.node.id\"\n [attr.aria-level]=\"flat.depth + 1\"\n [attr.aria-expanded]=\"flat.hasChildren ? isExpanded(flat.node.id) : null\"\n [attr.aria-selected]=\"selectedId() === flat.node.id\"\n [style.paddingLeft.px]=\"flat.depth * 20\"\n [attr.tabindex]=\"activeId() === flat.node.id ? 0 : -1\"\n (click)=\"onItemClick(flat)\"\n >\n @if (flat.hasChildren) {\n <button\n type=\"button\"\n class=\"gbt-tree__toggle\"\n tabindex=\"-1\"\n [attr.aria-label]=\"isExpanded(flat.node.id) ? collapseLabel() : expandLabel()\"\n (click)=\"toggle(flat.node.id); $event.stopPropagation()\"\n >\n <gbt-icon\n name=\"chevron-right\"\n class=\"gbt-tree__chevron\"\n [class.gbt-tree__chevron--expanded]=\"isExpanded(flat.node.id)\"\n aria-hidden=\"true\"\n />\n </button>\n } @else {\n <span class=\"gbt-tree__spacer\"></span>\n }\n @if (flat.node.icon) {\n <gbt-icon [name]=\"flat.node.icon\" class=\"gbt-tree__icon\" aria-hidden=\"true\" />\n }\n <span class=\"gbt-tree__label\">{{ flat.node.label }}</span>\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\nimport { Avatar } from '../../atoms/avatar/avatar'\n\nexport type UserChipSize = 'sm' | 'md'\n\n@Component({\n selector: 'gbt-user-chip',\n standalone: true,\n imports: [Avatar],\n templateUrl: './user-chip.html',\n styleUrl: './user-chip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserChip {\n name = input.required<string>()\n size = input<UserChipSize>('sm')\n src = input<string | null>(null)\n}\n","<span class=\"gbt-user-chip\" [attr.data-size]=\"size()\" [attr.title]=\"name()\">\n <gbt-avatar [name]=\"name()\" [src]=\"src()\" [size]=\"size()\" aria-hidden=\"true\" />\n <span class=\"gbt-user-chip__name\">{{ name() }}</span>\n</span>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type PanelHeadingLevel = 2 | 3 | 4\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-panel',\n standalone: true,\n templateUrl: './panel.html',\n styleUrl: './panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Panel {\n heading = input.required<string>()\n headingLevel = input<PanelHeadingLevel>(3)\n\n protected readonly headingId = `gbt-panel-heading-${nextId++}`\n}\n","<section class=\"gbt-panel\" [attr.aria-labelledby]=\"headingId\">\n <div class=\"gbt-panel__header\">\n @switch (headingLevel()) {\n @case (2) {\n <h2 class=\"gbt-panel__heading\" [id]=\"headingId\">{{ heading() }}</h2>\n }\n @case (4) {\n <h4 class=\"gbt-panel__heading\" [id]=\"headingId\">{{ heading() }}</h4>\n }\n @default {\n <h3 class=\"gbt-panel__heading\" [id]=\"headingId\">{{ heading() }}</h3>\n }\n }\n <div class=\"gbt-panel__actions\"><ng-content select=\"[panel-actions]\" /></div>\n </div>\n <div class=\"gbt-panel__body\"><ng-content /></div>\n</section>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type PageHeaderLevel = 1 | 2 | 3\n\n@Component({\n selector: 'gbt-page-header',\n standalone: true,\n templateUrl: './page-header.html',\n styleUrl: './page-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PageHeader {\n heading = input.required<string>()\n headingLevel = input<PageHeaderLevel>(1)\n}\n","<header class=\"gbt-page-header\">\n <div class=\"gbt-page-header__main\">\n <div class=\"gbt-page-header__title-row\">\n @switch (headingLevel()) {\n @case (2) {\n <h2 class=\"gbt-page-header__title\">{{ heading() }}</h2>\n }\n @case (3) {\n <h3 class=\"gbt-page-header__title\">{{ heading() }}</h3>\n }\n @default {\n <h1 class=\"gbt-page-header__title\">{{ heading() }}</h1>\n }\n }\n <ng-content select=\"[header-title]\" />\n <div class=\"gbt-page-header__badges\"><ng-content select=\"[header-badges]\" /></div>\n </div>\n <div class=\"gbt-page-header__meta\"><ng-content select=\"[header-meta]\" /></div>\n </div>\n <div class=\"gbt-page-header__actions\"><ng-content select=\"[header-actions]\" /></div>\n</header>\n","import { ChangeDetectionStrategy, Component, booleanAttribute, input } from '@angular/core'\n\nexport type PageLayoutWidth = 'narrow' | 'default' | 'wide' | 'full'\nexport type PageLayoutAsideWidth = 'sm' | 'md' | 'lg'\nexport type PageLayoutAsidePosition = 'start' | 'end'\n\n@Component({\n selector: 'gbt-page-layout',\n standalone: true,\n templateUrl: './page-layout.html',\n styleUrl: './page-layout.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-width]': 'width()',\n '[attr.data-aside-width]': 'asideWidth()',\n '[attr.data-aside-position]': 'asidePosition()',\n '[attr.data-sticky-nav]': \"stickyNav() ? '' : null\",\n },\n})\nexport class PageLayout {\n width = input<PageLayoutWidth>('default')\n asideWidth = input<PageLayoutAsideWidth>('md')\n asidePosition = input<PageLayoutAsidePosition>('end')\n navLabel = input('Page navigation')\n asideLabel = input<string | null>(null)\n stickyNav = input(false, { transform: booleanAttribute })\n}\n","<div class=\"gbt-page-layout\">\n <nav class=\"gbt-page-layout__nav\" [attr.aria-label]=\"navLabel()\">\n <ng-content select=\"[page-nav]\" />\n </nav>\n <div class=\"gbt-page-layout__main\"><ng-content /></div>\n <aside class=\"gbt-page-layout__aside\" [attr.aria-label]=\"asideLabel()\">\n <ng-content select=\"[page-aside]\" />\n </aside>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nexport type ListRowTone = 'neutral' | 'success' | 'warning' | 'error' | 'info'\n\n@Component({\n selector: 'gbt-list-row',\n standalone: true,\n templateUrl: './list-row.html',\n styleUrl: './list-row.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListRow {\n tone = input<ListRowTone>('neutral')\n}\n","<div class=\"gbt-list-row\">\n <div class=\"gbt-list-row__leading\" [attr.data-tone]=\"tone()\">\n <ng-content select=\"[row-leading]\" />\n </div>\n <div class=\"gbt-list-row__main\">\n <div class=\"gbt-list-row__title\"><ng-content /></div>\n <div class=\"gbt-list-row__meta\"><ng-content select=\"[row-meta]\" /></div>\n </div>\n <div class=\"gbt-list-row__trailing\"><ng-content select=\"[row-trailing]\" /></div>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core'\nimport { Button } from '../../atoms/button/button'\nimport { Skeleton } from '../../atoms/skeleton/skeleton'\nimport { EmptyState, EmptyStateIllustration } from '../empty-state/empty-state'\n\nexport type ListCardState = 'loading' | 'failed' | 'empty' | 'ready'\n\nconst SKELETON_WIDTHS = ['62%', '48%', '70%', '55%', '66%', '44%']\n\n@Component({\n selector: 'gbt-list-card',\n standalone: true,\n imports: [Button, EmptyState, Skeleton],\n templateUrl: './list-card.html',\n styleUrl: './list-card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListCard {\n state = input<ListCardState>('ready')\n ariaLabel = input<string | null>(null)\n\n loadingLabel = input('Loading…')\n skeletonRows = input(4)\n skeletonHeader = input(true)\n\n failedHeading = input('The list could not be loaded')\n failedMessage = input('')\n retryLabel = input<string | null>('Retry')\n retry = output<void>()\n\n emptyHeading = input('Nothing here yet')\n emptyMessage = input('')\n emptyIllustration = input<EmptyStateIllustration | null>(null)\n emptyIcon = input<string | null>(null)\n\n /**\n * What sits above the box: the projected `[list-card-header]` (ready), its placeholder (loading,\n * unless `skeletonHeader` is off), or nothing (failed, empty).\n */\n protected readonly header = computed<'slot' | 'skeleton' | null>(() => {\n switch (this.state()) {\n case 'loading':\n return this.skeletonHeader() ? 'skeleton' : null\n case 'failed':\n case 'empty':\n return null\n default:\n return 'slot'\n }\n })\n\n protected readonly placeholders = computed(() =>\n Array.from(\n { length: Math.max(0, Math.floor(this.skeletonRows())) },\n (_, index) => SKELETON_WIDTHS[index % SKELETON_WIDTHS.length],\n ),\n )\n}\n","<section class=\"gbt-list-card\" [attr.aria-label]=\"ariaLabel()\" [attr.data-state]=\"state()\">\n <span class=\"sr-only\" role=\"status\">{{ state() === 'loading' ? loadingLabel() : '' }}</span>\n @switch (header()) {\n @case ('skeleton') {\n <div class=\"gbt-list-card__header\" aria-hidden=\"true\">\n <gbt-skeleton variant=\"rect\" width=\"14rem\" height=\"var(--gbt-control-height-sm)\" />\n </div>\n }\n @case ('slot') {\n <div class=\"gbt-list-card__header\"><ng-content select=\"[list-card-header]\" /></div>\n }\n }\n <div class=\"gbt-list-card__box\">\n @switch (state()) {\n @case ('loading') {\n <div class=\"gbt-list-card__loading\" aria-busy=\"true\">\n <div aria-hidden=\"true\">\n @for (width of placeholders(); track $index) {\n <div class=\"gbt-list-card__skeleton-row\">\n <gbt-skeleton variant=\"circle\" width=\"1rem\" height=\"1rem\" />\n <div class=\"gbt-list-card__skeleton-lines\">\n <gbt-skeleton [width]=\"width\" height=\"0.875rem\" />\n <gbt-skeleton width=\"36%\" height=\"0.625rem\" />\n </div>\n </div>\n }\n </div>\n </div>\n }\n @case ('failed') {\n <div class=\"gbt-list-card__failed\" role=\"alert\">\n <gbt-empty-state\n size=\"compact\"\n tone=\"error\"\n icon=\"alert-triangle\"\n [heading]=\"failedHeading()\"\n [message]=\"failedMessage()\"\n >\n @if (retryLabel(); as label) {\n <gbt-button\n variant=\"secondary\"\n size=\"small\"\n [text]=\"label\"\n (clicked)=\"retry.emit()\"\n />\n }\n <ng-content select=\"[list-card-failed]\" />\n </gbt-empty-state>\n </div>\n }\n @case ('empty') {\n <gbt-empty-state\n [size]=\"emptyIllustration() ? 'default' : 'compact'\"\n [illustration]=\"emptyIllustration()\"\n [icon]=\"emptyIcon()\"\n [heading]=\"emptyHeading()\"\n [message]=\"emptyMessage()\"\n >\n <ng-content select=\"[list-card-empty]\" />\n </gbt-empty-state>\n }\n @default {\n <div class=\"gbt-list-card__body\"><ng-content /></div>\n }\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n untracked,\n} from '@angular/core'\nimport { Button, ButtonSize, ButtonVariant } from '../button/button'\nimport { ClipboardFeedback, CopyValue } from './clipboard'\n\nexport type CopyButtonFeedback = 'bubble' | 'inline' | 'hidden'\n\nexport type { CopyValue } from './clipboard'\n\n@Component({\n selector: 'gbt-copy-button',\n standalone: true,\n imports: [Button],\n templateUrl: './copy-button.html',\n styleUrl: './copy-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-status]': 'clipboard.status()',\n },\n})\nexport class CopyButton {\n value = input<CopyValue>('')\n text = input('')\n ariaLabel = input<string | null>(null)\n copiedText = input('Copied')\n failedText = input('Copy failed')\n feedbackMs = input(2000)\n variant = input<ButtonVariant>('secondary')\n size = input<ButtonSize>('small')\n icon = input('copy')\n disabled = input(false, { transform: booleanAttribute })\n feedback = input<CopyButtonFeedback>('bubble')\n selectTarget = input<HTMLElement | null>(null)\n\n copied = output<string>()\n copyFailed = output<void>()\n\n protected readonly clipboard = new ClipboardFeedback()\n\n constructor() {\n effect(() => {\n const value = this.value()\n if (typeof value === 'string') {\n untracked(() => this.clipboard.reset())\n }\n })\n }\n\n reset(): void {\n this.clipboard.reset()\n }\n\n protected readonly glyph = computed(() => {\n switch (this.clipboard.status()) {\n case 'copied':\n return 'check'\n case 'failed':\n return 'alert-circle'\n default:\n return this.icon()\n }\n })\n\n protected readonly statusText = computed(() => {\n switch (this.clipboard.status()) {\n case 'copied':\n return this.copiedText()\n case 'failed':\n return this.failedText()\n default:\n return ''\n }\n })\n\n protected readonly name = computed(() => this.ariaLabel() ?? (this.text() ? null : 'Copy'))\n\n protected async copy(): Promise<void> {\n if (this.disabled()) {\n return\n }\n const outcome = await this.clipboard.copy(this.value(), this.feedbackMs(), this.selectTarget())\n if (!outcome) {\n return\n }\n if (outcome.copied) {\n this.copied.emit(outcome.text)\n } else {\n this.copyFailed.emit()\n }\n }\n}\n","<gbt-button\n class=\"gbt-copy-button__button\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [iconName]=\"glyph()\"\n [iconOnly]=\"!text()\"\n [text]=\"text()\"\n [ariaLabel]=\"name()\"\n [disabled]=\"disabled()\"\n (clicked)=\"copy()\"\n/>\n<span\n class=\"gbt-copy-button__status\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.data-status]=\"clipboard.status()\"\n [attr.data-feedback]=\"feedback()\"\n >{{ statusText() }}</span\n>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core'\nimport { CopyButton, CopyButtonFeedback } from '../../atoms/copy-button/copy-button'\n\nexport const COPY_FIELD_WRAP_AT = /(?<=[^/:]\\/)/\n\nlet nextCopyFieldId = 0\n\n@Component({\n selector: 'gbt-copy-field',\n standalone: true,\n imports: [CopyButton],\n templateUrl: './copy-field.html',\n styleUrl: './copy-field.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CopyField {\n value = input.required<string>()\n label = input<string | null>(null)\n copyLabel = input('Copy')\n copiedText = input('Copied')\n failedText = input('Copy failed, value selected')\n feedbackMs = input(2000)\n feedback = input<CopyButtonFeedback>('bubble')\n wrapAt = input<RegExp | null>(COPY_FIELD_WRAP_AT)\n\n copied = output<string>()\n copyFailed = output<void>()\n\n protected readonly labelId = `gbt-copy-field-label-${++nextCopyFieldId}`\n\n protected readonly segments = computed(() => this.cut(this.value(), this.wrapAt()))\n\n private cut(value: string, pattern: RegExp | null): string[] {\n if (!pattern) {\n return [value]\n }\n const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`\n const segments: string[] = []\n let start = 0\n for (const match of value.matchAll(new RegExp(pattern.source, flags))) {\n const end = match.index + match[0].length\n if (end > start && end < value.length) {\n segments.push(value.slice(start, end))\n start = end\n }\n }\n segments.push(value.slice(start))\n return segments\n }\n}\n","@if (label(); as text) {\n <span class=\"gbt-copy-field__label\" [id]=\"labelId\">{{ text }}</span>\n}\n<div\n class=\"gbt-copy-field__box\"\n [attr.role]=\"label() ? 'group' : null\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n>\n <!-- prettier-ignore -->\n <code #code class=\"gbt-copy-field__value\">@for (segment of segments(); track $index) {{{ segment }}<wbr />}</code>\n <gbt-copy-button\n class=\"gbt-copy-field__copy\"\n [value]=\"value()\"\n [ariaLabel]=\"copyLabel()\"\n [copiedText]=\"copiedText()\"\n [failedText]=\"failedText()\"\n [feedbackMs]=\"feedbackMs()\"\n [feedback]=\"feedback()\"\n [selectTarget]=\"code\"\n (copied)=\"copied.emit($event)\"\n (copyFailed)=\"copyFailed.emit()\"\n />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n effect,\n untracked,\n afterNextRender,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core'\nimport { Button } from '../../atoms/button/button'\nimport { CopyButton, CopyButtonFeedback } from '../../atoms/copy-button/copy-button'\nimport { selectContents } from '../../atoms/copy-button/clipboard'\n\nlet nextSecretRevealId = 0\n\n@Component({\n selector: 'gbt-secret-reveal',\n standalone: true,\n imports: [Button, CopyButton],\n templateUrl: './secret-reveal.html',\n styleUrl: './secret-reveal.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-revealed]': 'revealed() ? \"\" : null',\n },\n})\nexport class SecretReveal {\n value = input.required<string>()\n revealed = model(false)\n label = input<string | null>(null)\n showLabel = input('Show the secret')\n hideLabel = input('Hide the secret')\n hiddenLabel = input('Secret hidden')\n copyLabel = input('Copy the secret')\n copiedText = input('Copied')\n failedText = input('Copy failed, secret shown and selected')\n feedbackMs = input(2000)\n feedback = input<CopyButtonFeedback>('bubble')\n maskLength = input(24)\n\n copied = output<string>()\n copyFailed = output<void>()\n\n protected readonly id = `gbt-secret-reveal-${++nextSecretRevealId}`\n protected readonly valueId = `${this.id}-value`\n protected readonly labelId = `${this.id}-label`\n\n private readonly code = viewChild<ElementRef<HTMLElement>>('code')\n private readonly copyButton = viewChild(CopyButton)\n private readonly injector = inject(Injector)\n\n constructor() {\n effect(() => {\n if (!this.revealed()) {\n untracked(() => this.copyButton()?.reset())\n }\n })\n }\n\n protected mask(): string {\n return '•'.repeat(Math.max(1, Math.round(this.maskLength())))\n }\n\n protected toggle(): void {\n this.revealed.set(!this.revealed())\n }\n\n protected onCopyFailed(): void {\n this.copyFailed.emit()\n if (!this.revealed()) {\n this.revealed.set(true)\n }\n afterNextRender(() => selectContents(this.code()?.nativeElement), { injector: this.injector })\n }\n}\n","@if (label(); as text) {\n <span class=\"gbt-secret-reveal__label\" [id]=\"labelId\">{{ text }}</span>\n}\n<div\n class=\"gbt-secret-reveal__box\"\n [attr.role]=\"label() ? 'group' : null\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n>\n <!-- prettier-ignore -->\n <code #code class=\"gbt-secret-reveal__value\" [id]=\"valueId\">@if (revealed()) {{{ value() }}} @else {<span aria-hidden=\"true\">{{ mask() }}</span><span class=\"sr-only\">{{ hiddenLabel() }}</span>}</code>\n <gbt-button\n class=\"gbt-secret-reveal__toggle\"\n variant=\"secondary\"\n size=\"small\"\n [iconOnly]=\"true\"\n [iconName]=\"revealed() ? 'eye-off' : 'eye'\"\n [ariaLabel]=\"revealed() ? hideLabel() : showLabel()\"\n [ariaControls]=\"valueId\"\n (clicked)=\"toggle()\"\n />\n <gbt-copy-button\n class=\"gbt-secret-reveal__copy\"\n [value]=\"value()\"\n [ariaLabel]=\"copyLabel()\"\n [copiedText]=\"copiedText()\"\n [failedText]=\"failedText()\"\n [feedbackMs]=\"feedbackMs()\"\n [feedback]=\"feedback()\"\n (copied)=\"copied.emit($event)\"\n (copyFailed)=\"onCopyFailed()\"\n />\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\nimport { Icon } from '../icon/icon'\n\nexport type SaveStatusState = 'idle' | 'saving' | 'saved' | 'error'\n\n@Component({\n selector: 'gbt-save-status',\n standalone: true,\n imports: [Icon],\n templateUrl: './save-status.html',\n styleUrl: './save-status.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SaveStatus {\n state = input<SaveStatusState>('idle')\n savingLabel = input('Saving…')\n savedLabel = input('Saved')\n errorLabel = input('Not saved')\n message = input<string | null>(null)\n\n protected readonly text = computed(() => {\n switch (this.state()) {\n case 'saving':\n return this.message() ?? this.savingLabel()\n case 'saved':\n return this.message() ?? this.savedLabel()\n case 'error':\n return this.message() ?? this.errorLabel()\n default:\n return ''\n }\n })\n}\n","<span class=\"gbt-save-status\" role=\"status\" [attr.data-state]=\"state()\">\n @switch (state()) {\n @case ('saving') {\n <span class=\"gbt-save-status__spinner\" aria-hidden=\"true\"></span>\n }\n @case ('saved') {\n <gbt-icon name=\"check\" />\n }\n @case ('error') {\n <gbt-icon name=\"alert-circle\" />\n }\n }\n <span class=\"gbt-save-status__text\">{{ text() }}</span>\n</span>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\nimport { Icon } from '../icon/icon'\n\nexport type IconMarkerTone = 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info'\nexport type IconMarkerSize = 'sm' | 'md' | 'lg' | 'xl'\nexport type IconMarkerShape = 'disc' | 'tile'\nexport type IconMarkerAppearance = 'soft' | 'outline'\n\n@Component({\n selector: 'gbt-icon-marker',\n standalone: true,\n imports: [Icon],\n templateUrl: './icon-marker.html',\n styleUrl: './icon-marker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconMarker {\n icon = input.required<string>()\n tone = input<IconMarkerTone>('neutral')\n size = input<IconMarkerSize>('md')\n shape = input<IconMarkerShape>('disc')\n appearance = input<IconMarkerAppearance>('soft')\n label = input<string | null>(null)\n}\n","<span\n class=\"gbt-icon-marker\"\n [attr.data-tone]=\"tone()\"\n [attr.data-size]=\"size()\"\n [attr.data-shape]=\"shape() === 'tile' ? 'tile' : null\"\n [attr.data-appearance]=\"appearance() === 'outline' ? 'outline' : null\"\n [attr.role]=\"label() ? 'img' : null\"\n [attr.aria-label]=\"label()\"\n [attr.aria-hidden]=\"label() ? null : 'true'\"\n>\n <gbt-icon [name]=\"icon()\" />\n</span>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\nimport { Skeleton } from '../../atoms/skeleton/skeleton'\n\nexport type StatGridColumns = 2 | 3 | 4 | 5 | 6\n\n@Component({\n selector: 'gbt-stat-grid',\n standalone: true,\n imports: [Skeleton],\n templateUrl: './stat-grid.html',\n styleUrl: './stat-grid.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StatGrid {\n ariaLabel = input('Summary')\n columns = input<StatGridColumns>(4)\n loading = input(false)\n loadingCount = input(4)\n loadingLabel = input('Loading…')\n\n protected readonly placeholders = computed(() =>\n Array.from({ length: Math.max(0, Math.round(this.loadingCount())) }, (_, i) => i),\n )\n}\n","<div\n class=\"gbt-stat-grid\"\n role=\"list\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-hidden]=\"loading() ? 'true' : null\"\n [attr.data-columns]=\"columns()\"\n>\n @if (loading()) {\n @for (index of placeholders(); track index) {\n <div class=\"gbt-stat-grid__placeholder\" role=\"listitem\">\n <gbt-skeleton width=\"3rem\" height=\"1.75rem\" />\n <gbt-skeleton width=\"60%\" height=\"0.75rem\" />\n </div>\n }\n } @else {\n <ng-content />\n }\n</div>\n<span class=\"sr-only\" role=\"status\">{{ loading() ? loadingLabel() : '' }}</span>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n selector: 'a[gbtStatTileLink]',\n standalone: true,\n template: '<ng-content />',\n styleUrl: './stat-tile-link.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'gbt-stat-tile__link' },\n})\nexport class StatTileLink {}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n contentChild,\n inject,\n input,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { IconMarker, IconMarkerTone } from '../../atoms/icon-marker/icon-marker'\nimport { StatGrid } from '../stat-grid/stat-grid'\nimport { StatTileLink } from './stat-tile-link'\n\nexport type StatTileTrend = 'up' | 'down' | 'flat'\nexport type StatTileTrendTone = 'neutral' | 'success' | 'error'\n\n@Component({\n selector: 'gbt-stat-tile',\n standalone: true,\n imports: [Icon, IconMarker, StatTileLink],\n templateUrl: './stat-tile.html',\n styleUrl: './stat-tile.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.role]': 'grid ? \"listitem\" : null',\n '[attr.data-link]': 'linked() ? \"\" : null',\n '[attr.data-muted]': 'muted() ? \"\" : null',\n },\n})\nexport class StatTile {\n label = input('')\n value = input.required<string | number>()\n icon = input<string | null>(null)\n iconTone = input<IconMarkerTone>('info')\n hint = input<string | null>(null)\n trend = input<StatTileTrend | null>(null)\n trendLabel = input<string | null>(null)\n trendTone = input<StatTileTrendTone>('neutral')\n href = input<string | null>(null)\n muted = input(false, { transform: booleanAttribute })\n\n private readonly link = contentChild(StatTileLink)\n protected readonly grid = inject(StatGrid, { optional: true })\n\n protected linked(): boolean {\n return !!this.href() || !!this.link()\n }\n\n protected hasLink(): boolean {\n return !!this.link()\n }\n}\n","<div class=\"gbt-stat-tile\">\n <span class=\"gbt-stat-tile__label\">\n <ng-content select=\"a[gbtStatTileLink]\" />\n @if (!hasLink()) {\n @if (href(); as target) {\n <a gbtStatTileLink [attr.href]=\"target\">{{ label() }}</a>\n } @else {\n {{ label() }}\n }\n }\n </span>\n @if (icon(); as name) {\n <gbt-icon-marker\n class=\"gbt-stat-tile__icon\"\n [icon]=\"name\"\n [tone]=\"muted() ? 'neutral' : iconTone()\"\n shape=\"tile\"\n />\n }\n <span class=\"gbt-stat-tile__value\">{{ value() }}</span>\n @if (hint() || trendLabel()) {\n <span class=\"gbt-stat-tile__meta\">\n @if (trendLabel(); as text) {\n <span\n class=\"gbt-stat-tile__trend\"\n [attr.data-trend]=\"trend()\"\n [attr.data-tone]=\"trendTone()\"\n >\n @if (trend() === 'up') {\n <gbt-icon name=\"arrow-up\" />\n } @else if (trend() === 'down') {\n <gbt-icon name=\"arrow-down\" />\n }\n {{ text }}\n </span>\n }\n @if (hint(); as text) {\n <span class=\"gbt-stat-tile__hint\">{{ text }}</span>\n }\n </span>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n input,\n} from '@angular/core'\nimport { Skeleton } from '../../atoms/skeleton/skeleton'\n\nexport type SkeletonListLeading = 'circle' | 'square' | 'none'\n\nconst TITLE_WIDTHS = ['62%', '48%', '70%', '55%', '66%', '44%']\nconst DETAIL_WIDTHS = ['36%', '24%']\n\n@Component({\n selector: 'gbt-skeleton-list',\n standalone: true,\n imports: [Skeleton],\n templateUrl: './skeleton-list.html',\n styleUrl: './skeleton-list.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonList {\n rows = input(4)\n leading = input<SkeletonListLeading>('circle')\n leadingSize = input('1rem')\n lines = input<1 | 2 | 3>(2)\n loadingLabel = input('Loading…')\n divided = input(true, { transform: booleanAttribute })\n padded = input(true, { transform: booleanAttribute })\n\n protected readonly items = computed(() =>\n Array.from({ length: Math.max(0, Math.round(this.rows())) }, (_, row) => ({\n row,\n widths: Array.from({ length: this.lines() }, (_, line) =>\n line === 0\n ? TITLE_WIDTHS[row % TITLE_WIDTHS.length]\n : DETAIL_WIDTHS[Math.min(line - 1, DETAIL_WIDTHS.length - 1)],\n ),\n })),\n )\n}\n","<div\n class=\"gbt-skeleton-list\"\n [attr.data-divided]=\"divided() ? '' : null\"\n [attr.data-padded]=\"padded() ? '' : null\"\n>\n <span class=\"sr-only\" role=\"status\">{{ loadingLabel() }}</span>\n <div aria-hidden=\"true\">\n @for (item of items(); track item.row) {\n <div class=\"gbt-skeleton-list__row\">\n @if (leading() !== 'none') {\n <gbt-skeleton\n class=\"gbt-skeleton-list__leading\"\n [variant]=\"leading() === 'circle' ? 'circle' : 'rect'\"\n [attr.data-leading]=\"leading()\"\n [width]=\"leadingSize()\"\n [height]=\"leadingSize()\"\n />\n }\n <div class=\"gbt-skeleton-list__lines\">\n @for (width of item.widths; track $index) {\n <gbt-skeleton [width]=\"width\" [height]=\"$index === 0 ? '0.875rem' : '0.625rem'\" />\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, input, model } from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\n\nexport type DisclosureAppearance = 'bordered' | 'plain'\nexport type DisclosureHeadingLevel = 2 | 3 | 4 | 5 | 6\n\nlet nextDisclosureId = 0\n\n@Component({\n selector: 'gbt-disclosure',\n standalone: true,\n imports: [Icon, NgTemplateOutlet],\n templateUrl: './disclosure.html',\n styleUrl: './disclosure.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Disclosure {\n label = input.required<string>()\n open = model(false)\n icon = input<string | null>(null)\n appearance = input<DisclosureAppearance>('bordered')\n headingLevel = input<DisclosureHeadingLevel | null>(null)\n\n protected readonly buttonId = `gbt-disclosure-${++nextDisclosureId}`\n protected readonly panelId = `${this.buttonId}-panel`\n\n protected toggle(): void {\n this.open.set(!this.open())\n }\n}\n","<div\n class=\"gbt-disclosure\"\n [attr.data-appearance]=\"appearance()\"\n [attr.data-open]=\"open() ? '' : null\"\n>\n @switch (headingLevel()) {\n @case (2) {\n <h2 class=\"gbt-disclosure__heading\"><ng-container *ngTemplateOutlet=\"toggleButton\" /></h2>\n }\n @case (3) {\n <h3 class=\"gbt-disclosure__heading\"><ng-container *ngTemplateOutlet=\"toggleButton\" /></h3>\n }\n @case (4) {\n <h4 class=\"gbt-disclosure__heading\"><ng-container *ngTemplateOutlet=\"toggleButton\" /></h4>\n }\n @case (5) {\n <h5 class=\"gbt-disclosure__heading\"><ng-container *ngTemplateOutlet=\"toggleButton\" /></h5>\n }\n @case (6) {\n <h6 class=\"gbt-disclosure__heading\"><ng-container *ngTemplateOutlet=\"toggleButton\" /></h6>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"toggleButton\" />\n }\n }\n <div\n class=\"gbt-disclosure__panel\"\n [id]=\"panelId\"\n [attr.data-open]=\"open() ? '' : null\"\n [attr.inert]=\"open() ? null : ''\"\n >\n <div class=\"gbt-disclosure__panel-inner\">\n <div class=\"gbt-disclosure__content\"><ng-content /></div>\n </div>\n </div>\n</div>\n\n<ng-template #toggleButton>\n <button\n type=\"button\"\n class=\"gbt-disclosure__toggle\"\n [id]=\"buttonId\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n (click)=\"toggle()\"\n >\n @if (icon(); as name) {\n <gbt-icon class=\"gbt-disclosure__icon\" [name]=\"name\" />\n }\n <span class=\"gbt-disclosure__label\">{{ label() }}</span>\n <gbt-icon class=\"gbt-disclosure__chevron\" name=\"chevron-down\" />\n </button>\n</ng-template>\n","import { InjectionToken, type Signal } from '@angular/core'\n\nexport type NavTabsOrientation = 'horizontal' | 'vertical'\n\nexport interface NavTabsHost {\n readonly orientation: Signal<NavTabsOrientation>\n}\n\nexport const GBT_NAV_TABS = new InjectionToken<NavTabsHost>('GBT_NAV_TABS')\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterEveryRender,\n booleanAttribute,\n computed,\n inject,\n input,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '../../atoms/icon/icon'\nimport { GBT_NAV_TABS } from './nav-tabs.token'\n\n@Component({\n selector: 'a[gbtNavTab]',\n standalone: true,\n imports: [Icon],\n templateUrl: './nav-tab.html',\n styleUrl: './nav-tab.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gbt-nav-tab',\n '[attr.aria-current]': 'active() ? \"page\" : null',\n '[attr.data-active]': 'active() ? \"\" : null',\n '[attr.data-orientation]': 'orientation()',\n },\n})\nexport class NavTab {\n active = input(false, { transform: booleanAttribute })\n icon = input<string | null>(null)\n badge = input<number | string | null>(null)\n\n private readonly nav = inject(GBT_NAV_TABS, { optional: true })\n private readonly label = viewChild<ElementRef<HTMLElement>>('label')\n\n protected readonly orientation = computed(() => this.nav?.orientation() ?? 'horizontal')\n\n protected readonly hasBadge = computed(() => {\n const badge = this.badge()\n return badge !== null && badge !== undefined && badge !== ''\n })\n\n constructor() {\n afterEveryRender({\n write: () => {\n const label = this.label()?.nativeElement\n const text = label?.textContent?.trim() ?? ''\n if (label && label.getAttribute('data-label') !== text) {\n label.setAttribute('data-label', text)\n }\n },\n })\n }\n}\n","@if (icon(); as name) {\n <gbt-icon class=\"gbt-nav-tab__icon\" [name]=\"name\" />\n}\n<span #label class=\"gbt-nav-tab__label\"><ng-content /></span>\n@if (hasBadge()) {\n &ngsp;<span class=\"gbt-nav-tab__badge\">{{ badge() }}</span>\n}\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterRenderEffect,\n booleanAttribute,\n contentChildren,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { NavTab } from './nav-tab'\nimport { GBT_NAV_TABS, type NavTabsOrientation } from './nav-tabs.token'\n\nexport type { NavTabsOrientation } from './nav-tabs.token'\n\n@Component({\n selector: 'gbt-nav-tabs',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './nav-tabs.html',\n styleUrl: './nav-tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: GBT_NAV_TABS, useExisting: NavTabs }],\n})\nexport class NavTabs {\n ariaLabel = input<string>('')\n orientation = input<NavTabsOrientation>('horizontal')\n landmark = input(true, { transform: booleanAttribute })\n\n private readonly list = viewChild<ElementRef<HTMLElement>>('list')\n private readonly tabs = contentChildren(NavTab, { descendants: true })\n\n protected readonly hiddenBefore = signal(false)\n protected readonly hiddenAfter = signal(false)\n\n protected updateOverflow(): void {\n const list = this.list()?.nativeElement\n if (!list) return\n const hidden = list.scrollWidth - list.clientWidth\n this.hiddenBefore.set(hidden > 1 && list.scrollLeft > 1)\n this.hiddenAfter.set(hidden > 1 && list.scrollLeft < hidden - 1)\n }\n\n constructor() {\n afterRenderEffect({\n write: () => {\n this.tabs().forEach((tab) => tab.active())\n const list = this.list()?.nativeElement\n if (!list) return\n const active = list.querySelector<HTMLElement>('[aria-current=\"page\"]')\n if (active && list.scrollWidth > list.clientWidth) {\n const start = active.offsetLeft\n const end = start + active.offsetWidth\n const glimpse = 40\n if (start - glimpse < list.scrollLeft) {\n list.scrollLeft = Math.max(0, start - glimpse)\n } else if (end + glimpse > list.scrollLeft + list.clientWidth) {\n list.scrollLeft = end + glimpse - list.clientWidth\n }\n }\n this.updateOverflow()\n },\n })\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver(() => this.updateOverflow())\n const observed = new Set<Element>()\n afterRenderEffect({\n write: () => {\n this.tabs()\n const list = this.list()?.nativeElement\n if (!list) return\n const wanted = new Set<Element>([list, ...Array.from(list.children)])\n for (const element of observed) {\n if (!wanted.has(element)) {\n observer.unobserve(element)\n observed.delete(element)\n }\n }\n for (const element of wanted) {\n if (!observed.has(element)) {\n observer.observe(element)\n observed.add(element)\n }\n }\n },\n })\n inject(DestroyRef).onDestroy(() => observer.disconnect())\n }\n }\n}\n","@if (landmark()) {\n <nav\n class=\"gbt-nav-tabs\"\n [attr.data-orientation]=\"orientation()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n >\n <ng-container [ngTemplateOutlet]=\"links\" />\n </nav>\n} @else {\n <div class=\"gbt-nav-tabs\" [attr.data-orientation]=\"orientation()\">\n <ng-container [ngTemplateOutlet]=\"links\" />\n </div>\n}\n\n<ng-template #links>\n <div\n #list\n class=\"gbt-nav-tabs__list\"\n [attr.data-hidden-before]=\"hiddenBefore() ? '' : null\"\n [attr.data-hidden-after]=\"hiddenAfter() ? '' : null\"\n (scroll)=\"updateOverflow()\"\n >\n <ng-content />\n </div>\n</ng-template>\n","import { InjectionToken } from '@angular/core'\nimport type { Observable } from 'rxjs'\n\nexport interface LoginResponse {\n token: string | null\n mfaToken?: string\n mfaSetupRequired?: boolean\n mfaHasTotp?: boolean\n mfaHasPasskey?: boolean\n}\n\nexport interface AuthConfig {\n registrationEnabled: boolean\n passkeysAvailable: boolean\n}\n\nexport interface PasskeyChallenge {\n challengeId: string\n publicKey: unknown\n}\n\nexport type MfaProof = { code: string } | { backupCode: string }\n\nexport interface TotpEnrollment {\n secret: string\n otpauthUrl: string\n}\n\nexport interface MfaSetupResult {\n token: string\n backupCodes: string[]\n}\n\nexport interface AuthPort {\n authConfig(): Observable<AuthConfig>\n\n login(username: string, password: string): Observable<LoginResponse>\n\n register(username: string, email: string, password: string): Observable<LoginResponse>\n\n activate(token: string, password: string): Observable<void>\n\n verifyMfa(mfaToken: string, proof: MfaProof): Observable<void>\n\n startPasskeyChallenge(mfaToken: string): Observable<PasskeyChallenge>\n\n finishPasskeyChallenge(\n mfaToken: string,\n challengeId: string,\n credential: unknown,\n ): Observable<void>\n\n enrollTotp(mfaToken: string): Observable<TotpEnrollment>\n\n confirmTotp(mfaToken: string, code: string): Observable<MfaSetupResult>\n\n startPasskeySetup(mfaToken: string): Observable<PasskeyChallenge>\n\n finishPasskeySetup(\n mfaToken: string,\n challengeId: string,\n credential: unknown,\n name: string,\n ): Observable<MfaSetupResult>\n\n setToken(token: string): void\n}\n\nexport const AUTH_PORT = new InjectionToken<AuthPort>('AUTH_PORT')\n","import { InjectionToken } from '@angular/core'\nimport type { Observable } from 'rxjs'\nimport type { PasskeyChallenge, TotpEnrollment } from './auth.port'\n\nexport interface Passkey {\n id: string\n name: string\n createdAt: string\n lastUsedAt: string | null\n}\n\nexport interface MfaStatus {\n totpEnabled: boolean\n backupCodesRemaining: number\n passkeys: Passkey[]\n}\n\nexport interface BackupCodesResult {\n backupCodes: string[]\n}\n\nexport interface MfaPort {\n status(): Observable<MfaStatus>\n\n enroll(currentPassword: string): Observable<TotpEnrollment>\n\n confirm(code: string): Observable<BackupCodesResult>\n\n regenerate(currentPassword: string): Observable<BackupCodesResult>\n\n disable(currentPassword: string): Observable<void>\n\n startPasskeyRegistration(currentPassword: string): Observable<PasskeyChallenge>\n\n finishPasskeyRegistration(\n challengeId: string,\n credential: unknown,\n name: string,\n ): Observable<Passkey>\n\n deletePasskey(id: string, currentPassword: string): Observable<void>\n}\n\nexport const MFA_PORT = new InjectionToken<MfaPort>('MFA_PORT')\n","export type PasskeyFailure = 'cancelled' | 'already-registered' | 'unsupported' | 'failed'\n\nexport function bufferToBase64Url(buffer: ArrayBuffer): string {\n let binary = ''\n for (const byte of new Uint8Array(buffer)) {\n binary += String.fromCharCode(byte)\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nexport function base64UrlToBuffer(base64Url: string): ArrayBuffer {\n const unpadded = base64Url.replace(/=+$/, '')\n const base64 = (unpadded + '='.repeat((4 - (unpadded.length % 4)) % 4))\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n const binary = atob(base64)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes.buffer\n}\n\nexport function passkeysSupported(): boolean {\n return (\n typeof PublicKeyCredential !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n !!navigator.credentials &&\n typeof navigator.credentials.create === 'function' &&\n typeof navigator.credentials.get === 'function'\n )\n}\n\nexport function classifyPasskeyError(e: unknown): PasskeyFailure {\n const name =\n typeof e === 'object' && e !== null && 'name' in e ? (e as { name: unknown }).name : null\n switch (name) {\n case 'NotAllowedError':\n case 'AbortError':\n return 'cancelled'\n case 'InvalidStateError':\n return 'already-registered'\n case 'NotSupportedError':\n return 'unsupported'\n default:\n return 'failed'\n }\n}\n\ninterface CredentialDescriptorJson {\n id: string\n [key: string]: unknown\n}\n\nfunction ceremonyError(\n message: string,\n name: 'NotSupportedError' | 'NotAllowedError' | 'DataError',\n): DOMException {\n return new DOMException(message, name)\n}\n\nfunction decodeDescriptors(list: unknown): PublicKeyCredentialDescriptor[] {\n if (list === undefined || list === null) {\n return []\n }\n return (list as CredentialDescriptorJson[]).map(\n (descriptor) =>\n ({ ...descriptor, id: base64UrlToBuffer(descriptor.id) }) as PublicKeyCredentialDescriptor,\n )\n}\n\nfunction asOptions(options: unknown): Record<string, unknown> {\n if (typeof options !== 'object' || options === null) {\n throw ceremonyError('The passkey options are not an object', 'DataError')\n }\n return options as Record<string, unknown>\n}\n\nexport async function createPasskeyCredential(publicKey: unknown): Promise<unknown> {\n if (!passkeysSupported()) {\n throw ceremonyError('WebAuthn is not available in this browser', 'NotSupportedError')\n }\n const options = asOptions(publicKey)\n const user = options['user'] as { id: string } | null | undefined\n if (typeof options['challenge'] !== 'string' || typeof user?.id !== 'string') {\n throw ceremonyError('The passkey options are incomplete', 'DataError')\n }\n const decoded = {\n ...options,\n challenge: base64UrlToBuffer(options['challenge']),\n user: { ...user, id: base64UrlToBuffer(user.id) },\n excludeCredentials: decodeDescriptors(options['excludeCredentials']),\n } as unknown as PublicKeyCredentialCreationOptions\n\n const credential = (await navigator.credentials.create({\n publicKey: decoded,\n })) as PublicKeyCredential | null\n if (!credential) {\n throw ceremonyError('No credential was created', 'NotAllowedError')\n }\n const response = credential.response as AuthenticatorAttestationResponse\n return {\n id: credential.id,\n rawId: bufferToBase64Url(credential.rawId),\n type: credential.type,\n response: {\n attestationObject: bufferToBase64Url(response.attestationObject),\n clientDataJSON: bufferToBase64Url(response.clientDataJSON),\n },\n }\n}\n\nexport async function getPasskeyAssertion(publicKey: unknown): Promise<unknown> {\n if (!passkeysSupported()) {\n throw ceremonyError('WebAuthn is not available in this browser', 'NotSupportedError')\n }\n const options = asOptions(publicKey)\n if (typeof options['challenge'] !== 'string') {\n throw ceremonyError('The passkey options are incomplete', 'DataError')\n }\n const decoded = {\n ...options,\n challenge: base64UrlToBuffer(options['challenge']),\n allowCredentials: decodeDescriptors(options['allowCredentials']),\n } as unknown as PublicKeyCredentialRequestOptions\n\n const credential = (await navigator.credentials.get({\n publicKey: decoded,\n })) as PublicKeyCredential | null\n if (!credential) {\n throw ceremonyError('No credential was returned', 'NotAllowedError')\n }\n const response = credential.response as AuthenticatorAssertionResponse\n return {\n id: credential.id,\n rawId: bufferToBase64Url(credential.rawId),\n type: credential.type,\n response: {\n authenticatorData: bufferToBase64Url(response.authenticatorData),\n clientDataJSON: bufferToBase64Url(response.clientDataJSON),\n signature: bufferToBase64Url(response.signature),\n userHandle: response.userHandle ? bufferToBase64Url(response.userHandle) : null,\n },\n }\n}\n","import { InjectionToken, type Provider, computed, inject, type Signal } from '@angular/core'\n\nexport type EnrolledFactor = 'totp' | 'passkey'\n\nexport interface TotpQrLabels {\n fallback: string\n imageAlt: string\n secretLabel: string\n fallbackSecretLabel: string\n copyLabel: string\n copied: string\n copyFailed: string\n}\n\nexport const DEFAULT_TOTP_QR_LABELS: Readonly<TotpQrLabels> = Object.freeze<TotpQrLabels>({\n fallback: 'The QR code could not be displayed: enter the key below in your app.',\n imageAlt: 'QR code to scan with your authenticator app',\n secretLabel: 'Or enter this key in your app',\n fallbackSecretLabel: 'Setup key',\n copyLabel: 'Copy the setup key',\n copied: 'Copied',\n copyFailed: 'Copy failed, key selected',\n})\n\nexport interface BackupCodesLabels {\n listLabel: string\n copy: string\n copied: string\n copyFailed: string\n download: string\n acknowledge: string\n fileName: string\n fileTitle: string\n fileNotice: string\n}\n\nexport const DEFAULT_BACKUP_CODES_LABELS: Readonly<BackupCodesLabels> =\n Object.freeze<BackupCodesLabels>({\n listLabel: 'Backup codes',\n copy: 'Copy codes',\n copied: 'Codes copied',\n copyFailed: 'Copy failed, codes selected',\n download: 'Download',\n acknowledge: 'I have saved my backup codes',\n fileName: 'backup-codes.txt',\n fileTitle: 'Backup codes',\n fileNotice: 'Each code can only be used once. Keep them somewhere safe.',\n })\n\ninterface CommonFailureLabels {\n tooManyAttempts: string\n}\n\nexport interface MfaEnrollmentLabels extends CommonFailureLabels {\n step: (current: number, total: number) => string\n choiceHeading: string\n scanHeading: string\n passkeyHeading: string\n codesHeading: string\n mandatory: string\n choiceLead: string\n passkeyOption: string\n recommended: string\n passkeyOptionText: string\n usePasskey: string\n appOption: string\n appOptionText: string\n useApp: string\n preparing: string\n back: string\n todoInstall: string\n todoScan: string\n todoKeep: string\n begin: string\n scanLead: string\n codeLabel: string\n activate: string\n verifying: string\n passkeyLead: string\n passkeyNameLabel: string\n defaultPasskeyName: string\n createPasskey: string\n creating: string\n promptOpen: string\n codesLead: (factor: EnrolledFactor) => string\n continue: string\n enterCode: string\n wrongCode: string\n startFailed: string\n activationFailed: string\n passkeyFailed: string\n alreadyRegistered: string\n cancelled: string\n browserUnsupported: string\n passkeysUnavailable: string\n loginExpired: string\n alreadySetUp: string\n nameTooLong: (max: number) => string\n nameControlCharacters: string\n}\n\nexport const DEFAULT_MFA_ENROLLMENT_LABELS: Readonly<MfaEnrollmentLabels> =\n Object.freeze<MfaEnrollmentLabels>({\n step: (current, total) => `Step ${current} of ${total}`,\n choiceHeading: 'Protect your account',\n scanHeading: 'Set up your app',\n passkeyHeading: 'Create your passkey',\n codesHeading: 'Save your backup codes',\n mandatory: 'Two-factor authentication is required to secure your account.',\n choiceLead: 'Choose how you will confirm your identity each time you sign in.',\n passkeyOption: 'Passkey',\n recommended: 'Recommended',\n passkeyOptionText:\n 'Touch ID, Windows Hello, a PIN or a security key: nothing to type, and impossible to phish.',\n usePasskey: 'Use a passkey',\n appOption: 'Authenticator app',\n appOptionText:\n 'Google Authenticator, Authy, 1Password…: a 6-digit code to type each time you sign in.',\n useApp: 'Use an app',\n preparing: 'Preparing',\n back: 'Back',\n todoInstall: 'Install an authenticator app (Google Authenticator, Authy, 1Password…).',\n todoScan: 'Scan the QR code shown at the next step and enter the 6-digit code.',\n todoKeep: 'Keep your backup codes: they will get you in if you lose your phone.',\n begin: 'Get started',\n scanLead:\n 'Scan this QR code with your authenticator app, then enter the 6-digit code it shows.',\n codeLabel: '6-digit code',\n activate: 'Activate',\n verifying: 'Verifying',\n passkeyLead:\n 'Give this key a name to recognise it later, then confirm with your device: Touch ID, Windows Hello, PIN or security key.',\n passkeyNameLabel: 'Key name (optional)',\n defaultPasskeyName: 'Passkey',\n createPasskey: 'Create the passkey',\n creating: 'Creating',\n promptOpen: 'Confirm on your device to create the key.',\n codesLead: (factor) =>\n `Two-factor authentication is on. These codes will not be shown again: they let you sign in if you lose access to ${factor === 'passkey' ? 'your passkey' : 'your app'}, and each one works only once.`,\n continue: 'Continue',\n enterCode: 'Enter the 6-digit code from your app',\n wrongCode: 'Incorrect code',\n startFailed: 'The setup could not start, try again.',\n activationFailed: 'Activation failed, try again.',\n passkeyFailed: 'The passkey could not be created, try again.',\n alreadyRegistered: 'This key is already registered',\n cancelled: 'Operation cancelled',\n browserUnsupported: 'This browser does not support passkeys.',\n passkeysUnavailable: 'Passkeys are not available on this server.',\n loginExpired: 'Your sign-in has expired, sign in again.',\n alreadySetUp: 'Two-factor authentication is already set up, sign in again.',\n tooManyAttempts: 'Too many attempts, try again in a few minutes',\n nameTooLong: (max) => `The name must not be longer than ${max} characters`,\n nameControlCharacters: 'The name cannot contain control characters',\n })\n\nexport interface LoginLabels extends CommonFailureLabels {\n heading: string\n intro: string\n challengeHeading: string\n enrollmentHeading: string\n username: string\n password: string\n showPassword: string\n hidePassword: string\n submit: string\n submitting: string\n registerPrompt: string\n wrongCredentials: string\n loginFailed: string\n introBackupCode: string\n introPasskeyOrCode: string\n introPasskey: string\n introCode: string\n blockedByServer: string\n blockedByBrowser: string\n backToPasskeyOrApp: string\n backToPasskey: string\n backToApp: string\n useBackupCode: string\n back: string\n backupCodeLabel: string\n codeLabel: string\n verify: string\n verifying: string\n usePasskey: string\n passkeyValidating: string\n or: string\n passkeyPrompt: string\n enterBackupCode: string\n enterCode: string\n wrongCode: string\n verifyFailed: string\n cancelled: string\n browserUnsupported: string\n passkeyRefused: string\n passkeysUnavailable: string\n loginExpired: string\n}\n\nexport const DEFAULT_LOGIN_LABELS: Readonly<LoginLabels> = Object.freeze<LoginLabels>({\n heading: 'Sign in',\n intro: 'Sign in to pick up where you left off.',\n challengeHeading: 'Two-step verification',\n enrollmentHeading: 'Two-factor authentication',\n username: 'Username',\n password: 'Password',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n submit: 'Sign in',\n submitting: 'Signing in',\n registerPrompt: 'No account yet?',\n wrongCredentials: 'Incorrect username or password',\n loginFailed: 'Sign-in failed, try again.',\n introBackupCode: 'Enter one of your backup codes. Each code works only once.',\n introPasskeyOrCode: 'Use your passkey, or enter the 6-digit code from your app.',\n introPasskey:\n 'Confirm it is really you with your passkey: fingerprint, face, device PIN or security key.',\n introCode: 'Enter the 6-digit code shown by your authenticator app.',\n blockedByServer: 'Passkeys are not available on this server. Use a backup code.',\n blockedByBrowser: 'This browser does not support passkeys. Use a backup code.',\n backToPasskeyOrApp: 'Use my passkey or my app',\n backToPasskey: 'Use my passkey',\n backToApp: 'Use the code from my app',\n useBackupCode: 'Use a backup code',\n back: 'Back',\n backupCodeLabel: 'Backup code',\n codeLabel: '6-digit code',\n verify: 'Verify',\n verifying: 'Verifying',\n usePasskey: 'Use a passkey',\n passkeyValidating: 'Waiting for your device',\n or: 'or',\n passkeyPrompt: 'Confirm on your device to sign in.',\n enterBackupCode: 'Enter a backup code',\n enterCode: 'Enter the 6-digit code from your app',\n wrongCode: 'Incorrect code',\n verifyFailed: 'Verification failed, try again.',\n cancelled: 'Operation cancelled',\n browserUnsupported: 'This browser does not support passkeys.',\n passkeyRefused: 'Passkey refused',\n passkeysUnavailable: 'Passkeys are not available on this server.',\n loginExpired: 'Your sign-in has expired, sign in again.',\n tooManyAttempts: 'Too many attempts, try again in a few minutes',\n})\n\nexport interface RegisterLabels extends CommonFailureLabels {\n heading: string\n intro: string\n enrollmentHeading: string\n loading: string\n closedHeading: string\n closedMessage: string\n signIn: string\n createdHeading: string\n createdMessage: string\n enrollmentExpired: string\n createdName: string\n username: string\n usernameHint: string\n email: string\n password: string\n passwordHint: (minLength: number) => string\n showPassword: string\n hidePassword: string\n submit: string\n submitting: string\n signInPrompt: string\n usernameEmpty: string\n usernameInvalid: string\n emailEmpty: string\n emailInvalid: string\n passwordEmpty: string\n passwordTooShort: (minLength: number) => string\n invalid: string\n reserved: string\n taken: string\n failed: string\n}\n\nexport const DEFAULT_REGISTER_LABELS: Readonly<RegisterLabels> = Object.freeze<RegisterLabels>({\n heading: 'Create an account',\n intro: 'Create your account to get started.',\n enrollmentHeading: 'Two-factor authentication',\n loading: 'Loading',\n closedHeading: 'Registration is closed',\n closedMessage:\n 'This instance does not accept open registration. Ask an administrator for an invitation: you will receive a link by email to activate your account.',\n signIn: 'Sign in',\n createdHeading: 'Your account has been created',\n createdMessage:\n 'Sign in with your password to finish setting up two-factor authentication, required before you start.',\n enrollmentExpired: 'The setup has expired. ',\n createdName: 'Your username:',\n username: 'Username',\n usernameHint: '3 to 32 characters: letters, digits, - and _. Saved in lower case.',\n email: 'Email address',\n password: 'Password',\n passwordHint: (minLength) => `At least ${minLength} characters.`,\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n submit: 'Create my account',\n submitting: 'Creating the account',\n signInPrompt: 'Already have an account?',\n usernameEmpty: 'Enter a username',\n usernameInvalid: 'Start with a letter; 3 to 32 characters: letters, digits, - and _',\n emailEmpty: 'Enter your email address',\n emailInvalid: 'Enter a valid email address, for example name@example.com',\n passwordEmpty: 'Enter a password',\n passwordTooShort: (minLength) => `At least ${minLength} characters`,\n invalid: 'Check the fields',\n reserved: 'This username is not available',\n taken: 'This username or email address is already in use',\n failed: 'The account could not be created, try again.',\n tooManyAttempts: 'Too many attempts, try again in a few minutes',\n})\n\nexport interface ActivateLabels extends CommonFailureLabels {\n heading: string\n intro: string\n password: string\n passwordHint: (minLength: number) => string\n confirmation: string\n showPassword: string\n hidePassword: string\n submit: string\n submitting: string\n signInPrompt: string\n successHeading: string\n successMessage: string\n invalidHeading: string\n invalidMessage: string\n signIn: string\n passwordEmpty: string\n passwordTooShort: (minLength: number) => string\n confirmationEmpty: string\n mismatch: string\n weakPassword: (minLength: number) => string\n failed: string\n}\n\nexport const DEFAULT_ACTIVATE_LABELS: Readonly<ActivateLabels> = Object.freeze<ActivateLabels>({\n heading: 'Activate your account',\n intro:\n 'Choose the password of your account. Two-factor authentication will be set up the first time you sign in.',\n password: 'New password',\n passwordHint: (minLength) => `At least ${minLength} characters.`,\n confirmation: 'Confirm the password',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n submit: 'Activate my account',\n submitting: 'Activating',\n signInPrompt: 'Is your account already active?',\n successHeading: 'Your account is activated',\n successMessage:\n 'You can now sign in. We will then guide you through protecting your account with two-factor authentication.',\n invalidHeading: 'This link does not work',\n invalidMessage:\n 'This invitation link is invalid or has expired. Ask an administrator to send you a new one.',\n signIn: 'Sign in',\n passwordEmpty: 'Enter a password',\n passwordTooShort: (minLength) => `At least ${minLength} characters`,\n confirmationEmpty: 'Confirm your password',\n mismatch: 'The passwords do not match',\n weakPassword: (minLength) => `The password must be at least ${minLength} characters long`,\n failed: 'Activation failed, try again.',\n tooManyAttempts: 'Too many attempts, try again in a few minutes',\n})\n\nexport interface MfaSettingsLabels extends CommonFailureLabels {\n heading: string\n enrollingHeading: string\n codesHeading: string\n help: string\n codesHelp: string\n loading: string\n loadFailed: string\n retry: string\n enrollLead: string\n enrollSubmit: string\n enrollBusy: string\n enrollFailed: string\n regenerateLead: string\n regenerateSubmit: string\n regenerateBusy: string\n regenerateFailed: string\n disableSubmit: string\n disableCheckBusy: string\n disableFailed: string\n removeTitle: string\n removeHelp: string\n removeAction: string\n removeDialogHeading: string\n removeDialogMessage: string\n removePromptLead: string\n removeBusy: string\n resetTitle: string\n resetHelp: string\n resetAction: string\n resetDialogHeading: string\n resetDialogMessage: string\n resetPromptLead: string\n resetBusy: string\n codesLeft: (count: number) => string\n lowCodes: string\n scanLead: string\n codeLabel: string\n activate: string\n verifying: string\n cancel: string\n close: string\n codesLeadEnrolled: string\n codesLeadRegenerated: string\n dontLeave: string\n done: string\n appConfigured: string\n enabled: string\n appHelpWithPasskey: string\n appHelp: string\n noApp: string\n optional: string\n noAppHelp: string\n addApp: string\n backupCodesTitle: string\n backupCodesHelp: string\n regenerateCodes: string\n noFactorWarning: string\n setUpNow: string\n currentPassword: string\n showPassword: string\n hidePassword: string\n enterPassword: string\n wrongPassword: string\n enterCode: string\n wrongCode: string\n activationFailed: string\n signedOut: string\n}\n\nexport const DEFAULT_MFA_SETTINGS_LABELS: Readonly<MfaSettingsLabels> =\n Object.freeze<MfaSettingsLabels>({\n heading: 'Authenticator app',\n enrollingHeading: 'Set up the authenticator app',\n codesHeading: 'Backup codes',\n help: 'Google Authenticator, Authy, 1Password…: any TOTP app works.',\n codesHelp: 'Keep them: they are shown only once.',\n loading: 'Loading two-factor authentication…',\n loadFailed: 'Two-factor authentication could not be loaded.',\n retry: 'Retry',\n enrollLead: 'Confirm your password to start the setup.',\n enrollSubmit: 'Continue',\n enrollBusy: 'Preparing',\n enrollFailed: 'The setup could not start, try again.',\n regenerateLead:\n 'Confirm your password to generate 10 new codes. The old ones stop working right away.',\n regenerateSubmit: 'Regenerate',\n regenerateBusy: 'Regenerating',\n regenerateFailed: 'The backup codes could not be regenerated, try again.',\n disableSubmit: 'Continue',\n disableCheckBusy: 'Checking',\n disableFailed: 'Two-factor authentication could not be reset, try again.',\n removeTitle: 'Remove the authenticator app',\n removeHelp:\n 'Removes your current app. You will be signed out of all your devices and will sign in again with your passkey.',\n removeAction: 'Remove',\n removeDialogHeading: 'Remove the authenticator app?',\n removeDialogMessage:\n 'You will be signed out of all your devices. You will sign in again with your passkey, without an app.',\n removePromptLead: 'Confirm your password to remove your authenticator app.',\n removeBusy: 'Removing',\n resetTitle: 'Reset two-factor authentication',\n resetHelp:\n 'Removes your current app. You will be signed out of all your devices and will have to set up a new one the next time you sign in.',\n resetAction: 'Reset',\n resetDialogHeading: 'Reset two-factor authentication?',\n resetDialogMessage:\n 'You will be signed out and will have to set up a new authenticator app the next time you sign in.',\n resetPromptLead: 'Confirm your password to reset two-factor authentication.',\n resetBusy: 'Resetting',\n codesLeft: (count) =>\n count === 0\n ? 'No backup codes left'\n : count === 1\n ? '1 backup code left'\n : `${count} backup codes left`,\n lowCodes: 'Regenerate some so that you do not lose access to your account.',\n scanLead:\n 'Scan this QR code with your authenticator app, then enter the 6-digit code it shows.',\n codeLabel: '6-digit code',\n activate: 'Activate',\n verifying: 'Verifying',\n cancel: 'Cancel',\n close: 'Close',\n codesLeadEnrolled:\n 'Two-factor authentication is on. These codes will not be shown again: they let you sign in if you lose access to your app, and each one works only once.',\n codesLeadRegenerated:\n 'Here are your new backup codes. The old codes no longer work. These codes will not be shown again, and each one works only once.',\n dontLeave: 'Do not leave this page before you have saved them.',\n done: 'Done',\n appConfigured: 'App configured',\n enabled: 'On',\n appHelpWithPasskey:\n 'A 6-digit code, generated by your app, can replace your passkey after your password.',\n appHelp: 'A 6-digit code, generated by your app, is asked after your password.',\n noApp: 'No app configured',\n optional: 'Optional',\n noAppHelp:\n 'Your passkey is enough to sign in. Add an app for a second way in: it generates a 6-digit code.',\n addApp: 'Add an app',\n backupCodesTitle: 'Backup codes',\n backupCodesHelp:\n 'Each code works only once. Generating new ones invalidates the previous ones.',\n regenerateCodes: 'Regenerate backup codes',\n noFactorWarning:\n 'Two-factor authentication is required: you will have to set it up the next time you sign in.',\n setUpNow: 'Set up now',\n currentPassword: 'Current password',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n enterPassword: 'Enter your password',\n wrongPassword: 'Incorrect password',\n enterCode: 'Enter the 6-digit code from your app',\n wrongCode: 'Incorrect code',\n activationFailed: 'Activation failed, try again.',\n tooManyAttempts: 'Too many attempts, try again in a few minutes',\n signedOut: 'You have been signed out. Sign in again to continue.',\n })\n\nexport interface PasskeySettingsLabels extends CommonFailureLabels {\n heading: string\n description: string\n loading: string\n loadFailed: string\n retry: string\n browserBlocked: string\n serverBlocked: string\n emptyHeading: string\n emptyMessage: string\n listLabel: string\n added: (absolute: boolean) => string\n lastUsed: (absolute: boolean) => string\n neverUsed: string\n delete: string\n deleteKey: (name: string) => string\n passkeyAdded: (name: string) => string\n passkeyGone: (name: string) => string\n addPasskey: string\n finishAppFirst: string\n deleteDialogHeading: string\n deleteDialogMessage: (name: string, lastFactor: boolean) => string\n deleteConfirm: string\n cancel: string\n close: string\n deleting: string\n addLead: string\n promptOpen: string\n nameLabel: string\n defaultPasskeyName: string\n currentPassword: string\n showPassword: string\n hidePassword: string\n create: string\n creating: string\n deleteLead: (name: string) => string\n lastFactorWarning: string\n continue: string\n checking: string\n nameTooLong: (max: number) => string\n nameControlCharacters: string\n enterPassword: string\n wrongPassword: string\n tooManyPasskeys: string\n alreadyRegistered: string\n passkeysUnavailable: string\n addFailed: string\n cancelled: string\n browserUnsupported: string\n deleteFailed: string\n signedOut: string\n}\n\nconst LAST_FACTOR =\n 'This is your last factor: you will have to set up a new one the next time you sign in.'\n\nexport const DEFAULT_PASSKEY_SETTINGS_LABELS: Readonly<PasskeySettingsLabels> =\n Object.freeze<PasskeySettingsLabels>({\n heading: 'Passkeys',\n description:\n 'Confirm your sign-in with your fingerprint, your face or the PIN of your device, or with a security key.',\n loading: 'Loading passkeys…',\n loadFailed: 'Passkeys could not be loaded.',\n retry: 'Retry',\n browserBlocked:\n 'This browser does not support passkeys: you cannot add one here, but you can delete the ones you already have.',\n serverBlocked:\n 'Passkeys are not available on this server. You cannot add one, but you can delete the ones you already have.',\n emptyHeading: 'No passkeys',\n emptyMessage: 'Add one to confirm your sign-in with a gesture, without a code to copy.',\n listLabel: 'Registered passkeys',\n added: (absolute) => (absolute ? 'Added on' : 'Added'),\n lastUsed: (absolute) => (absolute ? 'Last used on' : 'Last used'),\n neverUsed: 'Never used',\n delete: 'Delete',\n deleteKey: (name) => `Delete the key ${name}`,\n passkeyAdded: (name) => `Passkey “${name}” added.`,\n passkeyGone: (name) => `The passkey “${name}” no longer exists.`,\n addPasskey: 'Add a passkey',\n finishAppFirst: 'Finish setting up the authenticator app first.',\n deleteDialogHeading: 'Delete this passkey?',\n deleteDialogMessage: (name, lastFactor) =>\n `“${name}” will no longer let you sign in. You will be signed out of all your devices and will have to sign in again.` +\n (lastFactor ? ` ${LAST_FACTOR}` : ''),\n deleteConfirm: 'Delete',\n cancel: 'Cancel',\n close: 'Close',\n deleting: 'Deleting',\n addLead: 'Name this key and confirm your password: your device will then ask you to confirm.',\n promptOpen: 'Confirm on your device to create the key.',\n nameLabel: 'Key name (optional)',\n defaultPasskeyName: 'Passkey',\n currentPassword: 'Current password',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n create: 'Create the passkey',\n creating: 'Creating',\n deleteLead: (name) => `Confirm your password to delete “${name}”.`,\n lastFactorWarning: LAST_FACTOR,\n continue: 'Continue',\n checking: 'Checking',\n nameTooLong: (max) => `The name must not be longer than ${max} characters`,\n nameControlCharacters: 'The name cannot contain control characters',\n enterPassword: 'Enter your password',\n wrongPassword: 'Incorrect password',\n tooManyPasskeys:\n 'You have reached the maximum number of passkeys: delete one before adding another.',\n alreadyRegistered: 'This key is already registered',\n passkeysUnavailable: 'Passkeys are not available on this server.',\n addFailed: 'The passkey could not be created, try again.',\n cancelled: 'Operation cancelled',\n browserUnsupported: 'This browser does not support passkeys.',\n deleteFailed: 'The passkey could not be deleted, try again.',\n tooManyAttempts: 'Too many attempts, try again in a few minutes',\n signedOut: 'You have been signed out. Sign in again to continue.',\n })\n\nexport interface AuthLabels {\n totpQr?: Partial<TotpQrLabels>\n backupCodes?: Partial<BackupCodesLabels>\n mfaEnrollment?: Partial<MfaEnrollmentLabels>\n login?: Partial<LoginLabels>\n register?: Partial<RegisterLabels>\n activate?: Partial<ActivateLabels>\n mfaSettings?: Partial<MfaSettingsLabels>\n passkeySettings?: Partial<PasskeySettingsLabels>\n}\n\nexport const AUTH_LABELS = new InjectionToken<AuthLabels>('AUTH_LABELS')\n\nexport function provideAuthLabels(labels: AuthLabels): Provider {\n return { provide: AUTH_LABELS, useValue: labels }\n}\n\nexport function authLabels<K extends keyof AuthLabels, T extends object>(\n part: K,\n defaults: T,\n own: Signal<Partial<T>>,\n): Signal<T> {\n const provided = inject(AUTH_LABELS, { optional: true })?.[part] as Partial<T> | undefined\n return computed(() => ({ ...defaults, ...defined(provided), ...defined(own()) }))\n}\n\nfunction defined<T extends object>(partial: Partial<T> | undefined): Partial<T> {\n if (!partial) {\n return {}\n }\n return Object.fromEntries(\n Object.entries(partial).filter(([, value]) => value !== undefined),\n ) as Partial<T>\n}\n","export interface AuthPortError {\n status: number\n error?: unknown\n}\n\nexport const AUTH_PORT_ERROR_BODIES = {\n invalidToken: 'invalid or expired token',\n invalidCode: 'invalid code',\n alreadySetUp: 'MFA is already set up',\n wrongPassword: 'current password is incorrect',\n tooManyPasskeys: 'too many passkeys',\n registrationDisabled: 'registration is disabled',\n usernameReserved: 'username is reserved',\n emailTaken: 'email already in use',\n invalidEmail: 'email is not a valid address',\n weakPasswordPrefix: 'password must be at least',\n usernamePrefix: 'username ',\n} as const\n\nexport function isAuthPortError(err: unknown): err is AuthPortError {\n return (\n typeof err === 'object' &&\n err !== null &&\n typeof (err as { status?: unknown }).status === 'number'\n )\n}\n\nexport function portErrorMessage(err: AuthPortError): string | null {\n const body = err.error\n if (\n typeof body === 'object' &&\n body !== null &&\n 'error' in body &&\n typeof (body as { error: unknown }).error === 'string'\n ) {\n return (body as { error: string }).error\n }\n return null\n}\n","import { AUTH_PORT_ERROR_BODIES, isAuthPortError, portErrorMessage } from './port-error'\n\nexport type MfaFailure =\n 'wrong-code' | 'expired' | 'rate-limited' | 'unavailable' | 'already-set-up' | 'other'\n\nexport function classifyMfaFailure(err: unknown): MfaFailure {\n if (!isAuthPortError(err)) {\n return 'other'\n }\n const message = portErrorMessage(err)\n switch (err.status) {\n case 429:\n return 'rate-limited'\n case 503:\n return 'unavailable'\n case 401:\n return message === AUTH_PORT_ERROR_BODIES.invalidToken ? 'expired' : 'wrong-code'\n case 400:\n if (message === AUTH_PORT_ERROR_BODIES.invalidCode) {\n return 'wrong-code'\n }\n return message === AUTH_PORT_ERROR_BODIES.alreadySetUp ? 'already-set-up' : 'other'\n default:\n return 'other'\n }\n}\n\nexport type PasswordGatedFailure = 'wrong-password' | 'rate-limited' | 'other'\n\nexport function classifyPasswordFailure(err: unknown): PasswordGatedFailure {\n if (!isAuthPortError(err)) {\n return 'other'\n }\n if (err.status === 429) {\n return 'rate-limited'\n }\n if (err.status === 400) {\n return portErrorMessage(err) === AUTH_PORT_ERROR_BODIES.wrongPassword\n ? 'wrong-password'\n : 'other'\n }\n return 'other'\n}\n\nexport function isTooManyPasskeys(err: unknown): boolean {\n return (\n isAuthPortError(err) &&\n err.status === 400 &&\n portErrorMessage(err) === AUTH_PORT_ERROR_BODIES.tooManyPasskeys\n )\n}\n","import { AUTH_PORT_ERROR_BODIES, isAuthPortError, portErrorMessage } from './port-error'\n\nexport type RegisterFailure =\n | 'disabled'\n | 'invalid'\n | 'username-invalid'\n | 'email-invalid'\n | 'password-weak'\n | 'username-reserved'\n | 'username-taken'\n | 'email-taken'\n | 'rate-limited'\n | 'other'\n\nexport type ActivateFailure = 'invalid-link' | 'weak-password' | 'rate-limited' | 'other'\n\nexport function classifyRegisterFailure(err: unknown): RegisterFailure {\n if (!isAuthPortError(err)) {\n return 'other'\n }\n const message = portErrorMessage(err)\n switch (err.status) {\n case 400:\n if (message === AUTH_PORT_ERROR_BODIES.registrationDisabled) {\n return 'disabled'\n }\n if (message === AUTH_PORT_ERROR_BODIES.usernameReserved) {\n return 'username-reserved'\n }\n if (message === AUTH_PORT_ERROR_BODIES.invalidEmail) {\n return 'email-invalid'\n }\n if (message?.startsWith(AUTH_PORT_ERROR_BODIES.weakPasswordPrefix)) {\n return 'password-weak'\n }\n return message?.startsWith(AUTH_PORT_ERROR_BODIES.usernamePrefix)\n ? 'username-invalid'\n : 'invalid'\n case 409:\n return message === AUTH_PORT_ERROR_BODIES.emailTaken ? 'email-taken' : 'username-taken'\n case 429:\n return 'rate-limited'\n default:\n return 'other'\n }\n}\n\nexport function classifyActivateFailure(err: unknown): ActivateFailure {\n if (!isAuthPortError(err)) {\n return 'other'\n }\n switch (err.status) {\n case 400:\n return portErrorMessage(err)?.startsWith(AUTH_PORT_ERROR_BODIES.weakPasswordPrefix)\n ? 'weak-password'\n : 'invalid-link'\n case 429:\n return 'rate-limited'\n default:\n return 'other'\n }\n}\n","export const MIN_PASSWORD_LENGTH = 8\n\nexport const USERNAME_PATTERN = /^[A-Za-z][A-Za-z0-9_-]{2,31}$/\n\nconst MAX_EMAIL_LENGTH = 254\n\nexport type UsernameProblem = 'empty' | 'invalid'\nexport type EmailProblem = 'empty' | 'invalid'\nexport type PasswordProblem = 'empty' | 'too-short'\n\nexport function usernameProblem(\n raw: string,\n pattern: RegExp = USERNAME_PATTERN,\n): UsernameProblem | null {\n const username = raw.trim()\n if (username === '') {\n return 'empty'\n }\n return pattern.test(username) ? null : 'invalid'\n}\n\nexport function emailProblem(raw: string): EmailProblem | null {\n const email = raw.trim()\n if (email === '') {\n return 'empty'\n }\n const parts = email.split('@')\n const [local, domain] = parts\n const valid =\n email.length <= MAX_EMAIL_LENGTH &&\n !/\\s/.test(email) &&\n parts.length === 2 &&\n local.length > 0 &&\n domain.includes('.') &&\n !domain.startsWith('.') &&\n !domain.endsWith('.')\n return valid ? null : 'invalid'\n}\n\nexport function passwordProblem(\n password: string,\n minLength: number = MIN_PASSWORD_LENGTH,\n): PasswordProblem | null {\n if (password === '') {\n return 'empty'\n }\n return password.length >= minLength ? null : 'too-short'\n}\n\nexport function accountName(raw: string): string {\n return raw.trim().toLowerCase()\n}\n","export const ACTIVATION_TOKEN_SHAPE = /^[0-9a-f]{64}$/i\n\nexport function activationToken(\n fragment: string | null,\n query: string | null,\n shape: RegExp = ACTIVATION_TOKEN_SHAPE,\n): string | null {\n const fromFragment = new URLSearchParams((fragment ?? '').replace(/^#/, '')).get('token')\n const raw = fromFragment ?? query\n return raw !== null && shape.test(raw) ? raw : null\n}\n","export const PASSKEY_NAME_MAX = 40\n\nexport type PasskeyNameProblem = 'too-long' | 'control-characters'\n\nexport function passkeyNameProblem(\n name: string,\n maxLength: number = PASSKEY_NAME_MAX,\n): PasskeyNameProblem | null {\n if (Array.from(name).length > maxLength) {\n return 'too-long'\n }\n // eslint-disable-next-line no-control-regex\n return /[\\u0000-\\u001f\\u007f-\\u009f]/.test(name) ? 'control-characters' : null\n}\n","import { Injectable, signal } from '@angular/core'\nimport type { MfaStatus } from '../ports/mfa.port'\n\nexport type MfaFormOwner = 'passkeys' | 'app'\n\n@Injectable({ providedIn: 'root' })\nexport class MfaSettingsState {\n private readonly passkeys = signal<number | null>(null)\n private readonly totp = signal<boolean | null>(null)\n private readonly owner = signal<MfaFormOwner | null>(null)\n private readonly appFlow = signal(false)\n\n readonly passkeyCount = this.passkeys.asReadonly()\n\n readonly totpEnabled = this.totp.asReadonly()\n\n readonly formOwner = this.owner.asReadonly()\n\n readonly appFlowActive = this.appFlow.asReadonly()\n\n claimForm(owner: MfaFormOwner): void {\n this.owner.set(owner)\n }\n\n setAppFlowActive(active: boolean): void {\n this.appFlow.set(active)\n }\n\n statusLoaded(status: MfaStatus): void {\n this.passkeys.set(status.passkeys.length)\n this.totp.set(status.totpEnabled)\n }\n\n totpConfirmed(): void {\n this.totp.set(true)\n }\n\n passkeyAdded(): void {\n this.passkeys.update((count) => (count === null ? count : count + 1))\n }\n\n passkeyGone(): void {\n this.passkeys.update((count) => (count === null ? count : Math.max(0, count - 1)))\n }\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-auth-panel',\n standalone: true,\n templateUrl: './auth-panel.html',\n styleUrl: './auth-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthPanel {\n heading = input('')\n intro = input('')\n wide = input(false, { transform: booleanAttribute })\n}\n","<main class=\"gbt-auth-panel\">\n <div class=\"gbt-auth-panel__panel\" [class.gbt-auth-panel__panel--wide]=\"wide()\">\n <div class=\"gbt-auth-panel__logo\"><ng-content select=\"[auth-logo]\" /></div>\n\n @if (heading()) {\n <h1\n class=\"gbt-auth-panel__heading\"\n [class.gbt-auth-panel__heading--alone]=\"!intro()\"\n tabindex=\"-1\"\n >\n {{ heading() }}\n </h1>\n @if (intro()) {\n <p class=\"gbt-auth-panel__intro\">{{ intro() }}</p>\n }\n }\n\n <ng-content />\n </div>\n</main>\n","import { ChangeDetectionStrategy, Component, Directive, input } from '@angular/core'\nimport { Button } from '../../components/atoms/button/button'\n\n@Directive({\n selector: '[gbtAuthFooterLink]',\n standalone: true,\n host: { class: 'gbt-auth-footer__link' },\n})\nexport class AuthFooterLink {}\n\n@Component({\n selector: 'gbt-auth-footer',\n standalone: true,\n imports: [Button],\n templateUrl: './auth-footer.html',\n styleUrl: './auth-footer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthFooter {\n text = input.required<string>()\n href = input<string | null>(null)\n linkText = input('')\n}\n","<p class=\"gbt-auth-footer\">\n <span>{{ text() }}</span>\n @if (href(); as url) {\n <a gbtButton class=\"gbt-auth-footer__link\" variant=\"link\" [href]=\"url\">{{ linkText() }}</a>\n }\n <ng-content />\n</p>\n","import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { CopyField } from '../../components/molecules/copy-field/copy-field'\nimport { DEFAULT_TOTP_QR_LABELS, type TotpQrLabels, authLabels } from '../auth-labels'\n\nexport interface TotpQrRenderOptions {\n width: number\n margin: number\n errorCorrectionLevel: 'L' | 'M' | 'Q' | 'H'\n}\n\nexport type TotpQrRenderer = (text: string, options: TotpQrRenderOptions) => Promise<string>\n\nexport const TOTP_QR_RENDERER = new InjectionToken<TotpQrRenderer>('TOTP_QR_RENDERER')\n\nconst RENDER_OPTIONS: TotpQrRenderOptions = { errorCorrectionLevel: 'M', margin: 1, width: 448 }\n\n@Component({\n selector: 'gbt-totp-qr',\n standalone: true,\n imports: [CopyField],\n templateUrl: './totp-qr.html',\n styleUrl: './totp-qr.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TotpQr {\n otpauthUrl = input.required<string>()\n secret = input.required<string>()\n labels = input<Partial<TotpQrLabels>>({})\n\n protected readonly text = authLabels('totpQr', DEFAULT_TOTP_QR_LABELS, this.labels)\n protected dataUrl = signal<string | null>(null)\n protected failed = signal(false)\n\n private readonly render = inject(TOTP_QR_RENDERER, { optional: true })\n private generation = 0\n\n constructor() {\n effect(() => {\n const url = this.otpauthUrl()\n const current = ++this.generation\n this.dataUrl.set(null)\n this.failed.set(false)\n const render = this.render\n if (!render) {\n this.failed.set(true)\n return\n }\n Promise.resolve()\n .then(() => render(url, RENDER_OPTIONS))\n .then((dataUrl) => {\n if (current === this.generation) {\n this.dataUrl.set(dataUrl)\n }\n })\n .catch(() => {\n if (current === this.generation) {\n this.failed.set(true)\n }\n })\n })\n }\n}\n","<div class=\"gbt-totp-qr\">\n @if (failed()) {\n <p class=\"gbt-totp-qr__fallback\" role=\"status\">{{ text().fallback }}</p>\n } @else {\n <div class=\"gbt-totp-qr__frame\" [attr.aria-busy]=\"dataUrl() === null ? 'true' : null\">\n @if (dataUrl(); as src) {\n <img [src]=\"src\" [alt]=\"text().imageAlt\" width=\"224\" height=\"224\" />\n }\n </div>\n }\n\n <div class=\"gbt-totp-qr__secret\">\n <p class=\"gbt-totp-qr__label\">\n {{ failed() ? text().fallbackSecretLabel : text().secretLabel }}\n </p>\n <gbt-copy-field\n [value]=\"secret()\"\n [copyLabel]=\"text().copyLabel\"\n [copiedText]=\"text().copied\"\n [failedText]=\"text().copyFailed\"\n />\n </div>\n</div>\n","import { DOCUMENT } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n untracked,\n} from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { Button } from '../../components/atoms/button/button'\nimport { Checkbox } from '../../components/atoms/checkbox/checkbox'\nimport { CopyButton } from '../../components/atoms/copy-button/copy-button'\nimport { type BackupCodesLabels, DEFAULT_BACKUP_CODES_LABELS, authLabels } from '../auth-labels'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-backup-codes',\n standalone: true,\n imports: [FormsModule, Button, Checkbox, CopyButton],\n templateUrl: './backup-codes.html',\n styleUrl: './backup-codes.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BackupCodes {\n codes = input.required<string[]>()\n acknowledged = model(false)\n labels = input<Partial<BackupCodesLabels>>({})\n\n protected readonly text = authLabels('backupCodes', DEFAULT_BACKUP_CODES_LABELS, this.labels)\n protected readonly id = `gbt-backup-codes-${nextId++}`\n private readonly document = inject(DOCUMENT)\n\n protected readonly display = computed(() =>\n this.codes().map((code) =>\n (code.match(/.{1,16}/g) ?? []).map((line) => line.replace(/(.{8})(?=.)/g, '$1 ')),\n ),\n )\n\n constructor() {\n let shown: string[] | undefined\n effect(() => {\n const codes = this.codes()\n if (shown !== undefined && codes !== shown) {\n untracked(() => this.acknowledged.set(false))\n }\n shown = codes\n })\n }\n\n protected readonly codesText = computed(() => this.codes().join('\\n'))\n\n protected download(): void {\n const text = this.text()\n const content = [text.fileTitle, text.fileNotice, '', ...this.codes(), ''].join('\\n')\n const url = URL.createObjectURL(new Blob([content], { type: 'text/plain;charset=utf-8' }))\n const link = this.document.createElement('a')\n link.href = url\n link.download = text.fileName\n link.click()\n URL.revokeObjectURL(url)\n }\n}\n","<div class=\"gbt-backup-codes\">\n <ol #grid class=\"gbt-backup-codes__grid\" [attr.aria-label]=\"text().listLabel\">\n @for (lines of display(); track $index) {\n <li class=\"gbt-backup-codes__code\">\n @for (line of lines; track $index) {\n <span class=\"gbt-backup-codes__line\">{{ line }}</span>\n }\n </li>\n }\n </ol>\n\n <div class=\"gbt-backup-codes__actions\">\n <gbt-copy-button\n variant=\"secondary\"\n size=\"small\"\n feedback=\"inline\"\n [text]=\"text().copy\"\n [copiedText]=\"text().copied\"\n [failedText]=\"text().copyFailed\"\n [value]=\"codesText()\"\n [selectTarget]=\"grid\"\n />\n <gbt-button\n variant=\"secondary\"\n size=\"small\"\n iconName=\"download\"\n [text]=\"text().download\"\n (clicked)=\"download()\"\n />\n </div>\n\n <div class=\"gbt-backup-codes__ack\">\n <gbt-checkbox\n [id]=\"id + '-ack'\"\n [label]=\"text().acknowledge\"\n [ngModel]=\"acknowledged()\"\n (ngModelChange)=\"acknowledged.set($event)\"\n />\n </div>\n</div>\n","import { ElementRef, Injector, afterNextRender } from '@angular/core'\n\nexport interface FocusOptions {\n nestedFallback?: string\n}\n\nexport function focusNow(\n host: ElementRef<HTMLElement>,\n selector: string,\n options?: FocusOptions,\n): void {\n const target = host.nativeElement.querySelector<HTMLElement>(selector)\n const element =\n options?.nestedFallback && !target?.matches('input, button')\n ? target?.querySelector<HTMLElement>(options.nestedFallback)\n : target\n element?.focus()\n}\n\n/** `selector` may be a thunk to defer evaluation until after render (e.g. a signal input not yet settled at construction time). */\nexport function focusAfterRender(\n host: ElementRef<HTMLElement>,\n injector: Injector,\n selector: string | (() => string),\n options?: FocusOptions,\n): void {\n afterNextRender(\n () => focusNow(host, typeof selector === 'function' ? selector() : selector, options),\n {\n injector,\n },\n )\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { EMPTY, from, switchMap } from 'rxjs'\nimport { Badge } from '../../components/atoms/badge/badge'\nimport { Button } from '../../components/atoms/button/button'\nimport { GbtInput } from '../../components/atoms/input/input'\nimport { Alert } from '../../components/molecules/alert/alert'\nimport { Card } from '../../components/molecules/card/card'\nimport { DEFAULT_MFA_ENROLLMENT_LABELS, type MfaEnrollmentLabels, authLabels } from '../auth-labels'\nimport { BackupCodes } from '../backup-codes/backup-codes'\nimport { AUTH_PORT } from '../ports/auth.port'\nimport { focusAfterRender } from '../shared/focus-after-render'\nimport { classifyMfaFailure } from '../shared/mfa-errors'\nimport { PASSKEY_NAME_MAX, passkeyNameProblem } from '../shared/passkey-name'\nimport { isAuthPortError } from '../shared/port-error'\nimport { TotpQr } from '../totp-qr/totp-qr'\nimport { classifyPasskeyError, createPasskeyCredential, passkeysSupported } from '../webauthn'\n\ntype Step = 'choice' | 'scan' | 'passkey' | 'codes'\ntype Factor = 'totp' | 'passkey'\n\nconst STEP_NUMBER: Record<Step, number> = { choice: 1, scan: 2, passkey: 2, codes: 3 }\nconst STEP_COUNT = 3\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-mfa-enrollment',\n standalone: true,\n imports: [FormsModule, Badge, Button, Card, GbtInput, Alert, TotpQr, BackupCodes],\n templateUrl: './mfa-enrollment.html',\n styleUrl: './mfa-enrollment.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MfaEnrollment {\n private readonly auth = inject(AUTH_PORT)\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly injector = inject(Injector)\n\n mfaToken = input.required<string>()\n passkeysAvailable = input(false, { transform: booleanAttribute })\n labels = input<Partial<MfaEnrollmentLabels>>({})\n completed = output<string>()\n cancelled = output<void>()\n expired = output<void>()\n\n protected readonly text = authLabels('mfaEnrollment', DEFAULT_MFA_ENROLLMENT_LABELS, this.labels)\n protected readonly stepCount = STEP_COUNT\n protected readonly id = `gbt-mfa-enrollment-${nextId++}`\n protected step = signal<Step>('choice')\n protected factor = signal<Factor>('totp')\n protected passkeyOffered = computed(() => this.passkeysAvailable() && this.browserHasPasskeys)\n protected passkeyName = signal('')\n protected errorVariant = signal<'error' | 'info'>('error')\n protected promptOpen = signal(false)\n protected stepNumber = computed(() => STEP_NUMBER[this.step()])\n protected secret = signal('')\n protected otpauthUrl = signal('')\n protected code = signal('')\n protected backupCodes = signal<string[]>([])\n protected acknowledged = signal(false)\n protected error = signal('')\n protected submitting = signal(false)\n\n private sessionToken: string | null = null\n private readonly browserHasPasskeys = passkeysSupported()\n private ceremony = 0\n\n constructor() {\n this.focus('heading')\n effect((onCleanup) => {\n if (this.step() === 'codes' && !this.acknowledged()) {\n const view = this.host.nativeElement.ownerDocument.defaultView\n const warn = (event: BeforeUnloadEvent) => {\n event.preventDefault()\n event.returnValue = ''\n }\n view?.addEventListener('beforeunload', warn)\n onCleanup(() => view?.removeEventListener('beforeunload', warn))\n }\n })\n }\n\n begin(): void {\n if (this.submitting()) {\n return\n }\n this.clearError()\n this.submitting.set(true)\n this.auth.enrollTotp(this.mfaToken()).subscribe({\n next: ({ secret, otpauthUrl }) => {\n this.submitting.set(false)\n this.factor.set('totp')\n this.secret.set(secret)\n this.otpauthUrl.set(otpauthUrl)\n this.goTo('scan')\n },\n error: (err: unknown) => {\n this.submitting.set(false)\n this.error.set(this.messageFor(err, this.text().startFailed))\n this.focus('begin')\n },\n })\n }\n\n confirm(): void {\n if (this.submitting()) {\n return\n }\n const code = this.code().replace(/\\s+/g, '')\n if (code === '') {\n this.error.set(this.text().enterCode)\n this.focus('field')\n return\n }\n this.clearError()\n this.submitting.set(true)\n this.auth.confirmTotp(this.mfaToken(), code).subscribe({\n next: ({ token, backupCodes }) => {\n this.submitting.set(false)\n this.sessionToken = token\n this.backupCodes.set(backupCodes)\n this.secret.set('')\n this.otpauthUrl.set('')\n this.code.set('')\n this.goTo('codes')\n },\n error: (err: unknown) => {\n this.submitting.set(false)\n this.error.set(this.messageFor(err, this.text().activationFailed, this.text().wrongCode))\n if (classifyMfaFailure(err) === 'wrong-code') {\n this.code.set('')\n }\n this.focus('field')\n },\n })\n }\n\n choosePasskey(): void {\n this.clearError()\n this.factor.set('passkey')\n this.goTo('passkey')\n }\n\n createPasskey(): void {\n if (this.submitting()) {\n return\n }\n const name = this.passkeyName().trim() || this.text().defaultPasskeyName\n const problem = passkeyNameProblem(name)\n if (problem) {\n this.fail(\n problem === 'too-long'\n ? this.text().nameTooLong(PASSKEY_NAME_MAX)\n : this.text().nameControlCharacters,\n 'field',\n )\n return\n }\n const mfaToken = this.mfaToken()\n this.clearError()\n this.submitting.set(true)\n const run = ++this.ceremony\n this.auth\n .startPasskeySetup(mfaToken)\n .pipe(\n switchMap(({ challengeId, publicKey }) => {\n if (run !== this.ceremony) {\n return EMPTY\n }\n this.promptOpen.set(true)\n return from(createPasskeyCredential(publicKey)).pipe(\n switchMap((credential) =>\n run === this.ceremony\n ? this.auth.finishPasskeySetup(mfaToken, challengeId, credential, name)\n : EMPTY,\n ),\n )\n }),\n )\n .subscribe({\n next: ({ token, backupCodes }) => {\n this.submitting.set(false)\n this.promptOpen.set(false)\n this.sessionToken = token\n this.backupCodes.set(backupCodes)\n this.passkeyName.set('')\n this.goTo('codes')\n },\n error: (err: unknown) => {\n if (run !== this.ceremony) {\n return\n }\n this.submitting.set(false)\n this.promptOpen.set(false)\n this.passkeyFailed(err)\n },\n })\n }\n\n protected back(): void {\n this.ceremony++\n this.submitting.set(false)\n this.promptOpen.set(false)\n if (this.step() !== 'choice' && this.passkeyOffered()) {\n this.clearError()\n this.secret.set('')\n this.otpauthUrl.set('')\n this.code.set('')\n this.goTo('choice')\n return\n }\n this.cancelled.emit()\n }\n\n finish(): void {\n if (!this.acknowledged() || this.sessionToken === null) {\n return\n }\n this.completed.emit(this.sessionToken)\n }\n\n private goTo(step: Step): void {\n this.step.set(step)\n this.focus('heading')\n }\n\n private passkeyFailed(err: unknown): void {\n const text = this.text()\n if (isAuthPortError(err)) {\n if (err.status === 409) {\n this.fail(text.alreadyRegistered, 'button')\n return\n }\n switch (classifyMfaFailure(err)) {\n case 'expired':\n this.expired.emit()\n this.fail(text.loginExpired, 'button')\n return\n case 'already-set-up':\n this.expired.emit()\n this.fail(text.alreadySetUp, 'button')\n return\n case 'rate-limited':\n this.fail(text.tooManyAttempts, 'button')\n return\n case 'unavailable':\n this.fail(text.passkeysUnavailable, 'button')\n return\n default:\n this.fail(text.passkeyFailed, 'button')\n return\n }\n }\n switch (classifyPasskeyError(err)) {\n case 'cancelled':\n this.fail(text.cancelled, 'button', 'info')\n return\n case 'already-registered':\n this.fail(text.alreadyRegistered, 'button')\n return\n case 'unsupported':\n this.fail(text.browserUnsupported, 'button')\n return\n default:\n this.fail(text.passkeyFailed, 'button')\n }\n }\n\n private clearError(): void {\n this.error.set('')\n this.errorVariant.set('error')\n }\n\n private fail(\n message: string,\n target: 'field' | 'button',\n variant: 'error' | 'info' = 'error',\n ): void {\n this.errorVariant.set(variant)\n this.error.set(message)\n this.focus(target)\n }\n\n private messageFor(err: unknown, generic: string, wrongCode?: string): string {\n const text = this.text()\n switch (classifyMfaFailure(err)) {\n case 'rate-limited':\n return text.tooManyAttempts\n case 'expired':\n this.expired.emit()\n return text.loginExpired\n case 'already-set-up':\n this.expired.emit()\n return text.alreadySetUp\n case 'wrong-code':\n return wrongCode ?? generic\n default:\n return generic\n }\n }\n\n private focus(target: 'heading' | 'field' | 'button' | 'begin'): void {\n focusAfterRender(this.host, this.injector, () => {\n const field = this.step() === 'passkey' ? `#${this.id}-passkey-name` : `#${this.id}-code`\n return {\n heading: 'h2',\n field,\n button: '.gbt-mfa-enrollment__primary button',\n begin: '.gbt-mfa-enrollment__begin button',\n }[target]\n })\n }\n}\n","<section class=\"gbt-mfa-enrollment\">\n <header class=\"gbt-mfa-enrollment__header\">\n <p class=\"gbt-mfa-enrollment__step\">{{ text().step(stepNumber(), stepCount) }}</p>\n @switch (step()) {\n @case ('choice') {\n <h2 class=\"gbt-mfa-enrollment__title\" tabindex=\"-1\">{{ text().choiceHeading }}</h2>\n }\n @case ('scan') {\n <h2 class=\"gbt-mfa-enrollment__title\" tabindex=\"-1\">{{ text().scanHeading }}</h2>\n }\n @case ('passkey') {\n <h2 class=\"gbt-mfa-enrollment__title\" tabindex=\"-1\">{{ text().passkeyHeading }}</h2>\n }\n @case ('codes') {\n <h2 class=\"gbt-mfa-enrollment__title\" tabindex=\"-1\">{{ text().codesHeading }}</h2>\n }\n }\n </header>\n\n @switch (step()) {\n @case ('choice') {\n <gbt-alert variant=\"info\" appearance=\"subtle\" iconAlign=\"start\" live=\"off\">{{\n text().mandatory\n }}</gbt-alert>\n\n @if (passkeyOffered()) {\n <p class=\"gbt-mfa-enrollment__lead\">{{ text().choiceLead }}</p>\n\n @if (error()) {\n <gbt-alert [variant]=\"errorVariant()\" appearance=\"subtle\" iconAlign=\"start\">{{\n error()\n }}</gbt-alert>\n }\n\n <div class=\"gbt-mfa-enrollment__options\">\n <gbt-card\n class=\"gbt-mfa-enrollment__option gbt-mfa-enrollment__option--recommended\"\n icon=\"key\"\n [heading]=\"text().passkeyOption\"\n [headingLevel]=\"3\"\n >\n <gbt-badge card-header-actions variant=\"info\">{{ text().recommended }}</gbt-badge>\n <p class=\"gbt-mfa-enrollment__option-text\">{{ text().passkeyOptionText }}</p>\n <gbt-button\n class=\"gbt-mfa-enrollment__primary\"\n block\n size=\"large\"\n [text]=\"text().usePasskey\"\n [disabled]=\"submitting()\"\n (clicked)=\"choosePasskey()\"\n />\n </gbt-card>\n\n <gbt-card\n class=\"gbt-mfa-enrollment__option\"\n icon=\"smartphone\"\n [heading]=\"text().appOption\"\n [headingLevel]=\"3\"\n >\n <p class=\"gbt-mfa-enrollment__option-text\">{{ text().appOptionText }}</p>\n <gbt-button\n class=\"gbt-mfa-enrollment__begin\"\n block\n variant=\"secondary\"\n size=\"large\"\n [text]=\"text().useApp\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().preparing\"\n (clicked)=\"begin()\"\n />\n </gbt-card>\n </div>\n\n <div class=\"gbt-mfa-enrollment__actions\">\n <gbt-button\n block\n size=\"large\"\n variant=\"secondary\"\n [text]=\"text().back\"\n [disabled]=\"submitting()\"\n (clicked)=\"back()\"\n />\n </div>\n } @else {\n <ol class=\"gbt-mfa-enrollment__todo\">\n <li>{{ text().todoInstall }}</li>\n <li>{{ text().todoScan }}</li>\n <li>{{ text().todoKeep }}</li>\n </ol>\n\n @if (error()) {\n <gbt-alert variant=\"error\" appearance=\"subtle\" iconAlign=\"start\">{{ error() }}</gbt-alert>\n }\n\n <div class=\"gbt-mfa-enrollment__actions\">\n <gbt-button\n class=\"gbt-mfa-enrollment__primary gbt-mfa-enrollment__begin\"\n block\n size=\"large\"\n [text]=\"text().begin\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().preparing\"\n (clicked)=\"begin()\"\n />\n <gbt-button\n block\n size=\"large\"\n variant=\"secondary\"\n [text]=\"text().back\"\n [disabled]=\"submitting()\"\n (clicked)=\"back()\"\n />\n </div>\n }\n }\n\n @case ('scan') {\n <p class=\"gbt-mfa-enrollment__lead\">{{ text().scanLead }}</p>\n\n <form class=\"gbt-mfa-enrollment__form\" (ngSubmit)=\"confirm()\">\n <gbt-totp-qr [otpauthUrl]=\"otpauthUrl()\" [secret]=\"secret()\" />\n\n @if (error()) {\n <gbt-alert variant=\"error\" appearance=\"subtle\" iconAlign=\"start\">{{ error() }}</gbt-alert>\n }\n\n <gbt-input\n [id]=\"id + '-code'\"\n inputmode=\"numeric\"\n [spellcheck]=\"false\"\n autocapitalize=\"off\"\n enterkeyhint=\"go\"\n name=\"code\"\n autocomplete=\"one-time-code\"\n [label]=\"text().codeLabel\"\n [ngModel]=\"code()\"\n (ngModelChange)=\"code.set($event)\"\n />\n\n <div class=\"gbt-mfa-enrollment__actions\">\n <gbt-button\n class=\"gbt-mfa-enrollment__primary\"\n block\n type=\"submit\"\n size=\"large\"\n [text]=\"text().activate\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().verifying\"\n />\n <gbt-button\n block\n size=\"large\"\n variant=\"secondary\"\n [text]=\"text().back\"\n [disabled]=\"submitting()\"\n (clicked)=\"back()\"\n />\n </div>\n </form>\n }\n\n @case ('passkey') {\n <p class=\"gbt-mfa-enrollment__lead\">{{ text().passkeyLead }}</p>\n\n <form class=\"gbt-mfa-enrollment__form\" (ngSubmit)=\"createPasskey()\">\n @if (error()) {\n <gbt-alert [variant]=\"errorVariant()\" appearance=\"subtle\" iconAlign=\"start\">{{\n error()\n }}</gbt-alert>\n }\n @if (promptOpen()) {\n <gbt-alert variant=\"info\" appearance=\"subtle\" iconAlign=\"start\" live=\"polite\">{{\n text().promptOpen\n }}</gbt-alert>\n }\n\n <gbt-input\n [id]=\"id + '-passkey-name'\"\n name=\"passkeyName\"\n autocomplete=\"off\"\n [label]=\"text().passkeyNameLabel\"\n [placeholder]=\"text().defaultPasskeyName\"\n [ngModel]=\"passkeyName()\"\n (ngModelChange)=\"passkeyName.set($event)\"\n />\n\n <div class=\"gbt-mfa-enrollment__actions\">\n <gbt-button\n class=\"gbt-mfa-enrollment__primary\"\n block\n type=\"submit\"\n size=\"large\"\n [text]=\"text().createPasskey\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().creating\"\n />\n <gbt-button\n block\n size=\"large\"\n variant=\"secondary\"\n [text]=\"text().back\"\n (clicked)=\"back()\"\n />\n </div>\n </form>\n }\n\n @case ('codes') {\n <p class=\"gbt-mfa-enrollment__lead\">{{ text().codesLead(factor()) }}</p>\n\n <gbt-backup-codes [codes]=\"backupCodes()\" [(acknowledged)]=\"acknowledged\" />\n\n <div class=\"gbt-mfa-enrollment__actions\">\n <gbt-button\n class=\"gbt-mfa-enrollment__primary\"\n block\n size=\"large\"\n [text]=\"text().continue\"\n [disabled]=\"!acknowledged()\"\n (clicked)=\"finish()\"\n />\n </div>\n }\n }\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n computed,\n contentChild,\n inject,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { FormsModule } from '@angular/forms'\nimport { EMPTY, from, switchMap } from 'rxjs'\nimport { Button } from '../../components/atoms/button/button'\nimport { Divider } from '../../components/atoms/divider/divider'\nimport { GbtInput } from '../../components/atoms/input/input'\nimport { Alert } from '../../components/molecules/alert/alert'\nimport { DEFAULT_LOGIN_LABELS, type LoginLabels, authLabels } from '../auth-labels'\nimport { AuthFooter, AuthFooterLink } from '../auth-footer/auth-footer'\nimport { AuthPanel } from '../auth-panel/auth-panel'\nimport { MfaEnrollment } from '../mfa-enrollment/mfa-enrollment'\nimport { AUTH_PORT, type MfaProof } from '../ports/auth.port'\nimport { focusAfterRender } from '../shared/focus-after-render'\nimport { classifyMfaFailure } from '../shared/mfa-errors'\nimport { isAuthPortError } from '../shared/port-error'\nimport { classifyPasskeyError, getPasskeyAssertion, passkeysSupported } from '../webauthn'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-auth-login',\n standalone: true,\n imports: [FormsModule, Button, Divider, GbtInput, Alert, AuthFooter, AuthPanel, MfaEnrollment],\n templateUrl: './login.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthLogin {\n private readonly auth = inject(AUTH_PORT)\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly injector = inject(Injector)\n\n labels = input<Partial<LoginLabels>>({})\n loggedIn = output<void>()\n\n protected readonly text = authLabels('login', DEFAULT_LOGIN_LABELS, this.labels)\n protected readonly registerLink = contentChild(AuthFooterLink)\n protected readonly id = `gbt-login-${nextId++}`\n\n username = signal('')\n protected password = signal('')\n error = signal('')\n submitting = signal(false)\n\n protected mfaToken = signal<string | null>(null)\n mfaSetupRequired = signal(false)\n mfaHasTotp = signal(false)\n mfaHasPasskey = signal(false)\n useBackupCode = signal(false)\n protected code = signal('')\n protected backupCode = signal('')\n\n protected registrationEnabled = signal(false)\n protected passkeysAvailable = signal<boolean | null>(null)\n private browserHasPasskeys = signal(false)\n protected passkeyInFlight = signal(false)\n private ceremony = 0\n protected errorVariant = signal<'error' | 'info'>('error')\n\n protected enrolling = computed(() => this.mfaToken() !== null && this.mfaSetupRequired())\n protected challenging = computed(() => this.mfaToken() !== null && !this.mfaSetupRequired())\n\n protected canUsePasskey = computed(\n () => this.mfaHasPasskey() && this.browserHasPasskeys() && this.passkeysAvailable() !== false,\n )\n protected hasTotp = computed(() => this.mfaHasTotp() || !this.mfaHasPasskey())\n protected passkeyBlocked = computed(\n () => this.challenging() && this.mfaHasPasskey() && !this.hasTotp() && !this.canUsePasskey(),\n )\n protected showBackupCode = computed(() => this.useBackupCode() || this.passkeyBlocked())\n protected blockedReason = computed(() =>\n this.browserHasPasskeys() ? this.text().blockedByServer : this.text().blockedByBrowser,\n )\n protected backFromBackupLabel = computed(() => {\n const text = this.text()\n if (this.canUsePasskey()) {\n return this.hasTotp() ? text.backToPasskeyOrApp : text.backToPasskey\n }\n return text.backToApp\n })\n\n protected heading = computed(() => {\n if (this.enrolling()) {\n return this.text().enrollmentHeading\n }\n return this.challenging() ? this.text().challengeHeading : this.text().heading\n })\n protected intro = computed(() => {\n const text = this.text()\n if (this.enrolling()) {\n return ''\n }\n if (!this.challenging()) {\n return text.intro\n }\n if (this.showBackupCode()) {\n return text.introBackupCode\n }\n if (this.canUsePasskey()) {\n return this.hasTotp() ? text.introPasskeyOrCode : text.introPasskey\n }\n return text.introCode\n })\n\n constructor() {\n this.focusField('username')\n this.auth\n .authConfig()\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (config) => {\n this.registrationEnabled.set(config.registrationEnabled === true)\n this.passkeysAvailable.set(config.passkeysAvailable === true)\n },\n error: () => this.registrationEnabled.set(false),\n })\n }\n\n submit(): void {\n if (this.submitting()) {\n return\n }\n this.error.set('')\n this.submitting.set(true)\n this.auth.login(this.username(), this.password()).subscribe({\n next: (res) => {\n this.password.set('')\n this.submitting.set(false)\n if (res.token) {\n this.loggedIn.emit()\n } else if (res.mfaToken) {\n this.mfaSetupRequired.set(res.mfaSetupRequired === true)\n this.mfaHasTotp.set(res.mfaHasTotp === true)\n this.mfaHasPasskey.set(res.mfaHasPasskey === true)\n this.browserHasPasskeys.set(passkeysSupported())\n this.mfaToken.set(res.mfaToken)\n if (!this.mfaSetupRequired()) {\n this.focusField(this.firstChallengeTarget())\n }\n } else {\n this.fail(this.text().loginFailed, 'password')\n }\n },\n error: (err: unknown) => {\n this.submitting.set(false)\n this.fail(this.loginFailureMessage(err), 'password')\n },\n })\n }\n\n private loginFailureMessage(err: unknown): string {\n const status = isAuthPortError(err) ? err.status : null\n if (status === 401) {\n return this.text().wrongCredentials\n }\n if (status === 429) {\n return this.text().tooManyAttempts\n }\n return this.text().loginFailed\n }\n\n verify(): void {\n if (this.submitting()) {\n return\n }\n const mfaToken = this.mfaToken()\n const backup = this.showBackupCode()\n const value = (backup ? this.backupCode() : this.code()).replace(/\\s+/g, '')\n const field = backup ? 'mfa-backup-code' : 'mfa-code'\n if (mfaToken === null) {\n return\n }\n if (value === '') {\n this.fail(backup ? this.text().enterBackupCode : this.text().enterCode, field)\n return\n }\n this.error.set('')\n this.submitting.set(true)\n const proof: MfaProof = backup ? { backupCode: value } : { code: value }\n this.auth.verifyMfa(mfaToken, proof).subscribe({\n next: () => {\n this.submitting.set(false)\n this.resetMfa()\n this.loggedIn.emit()\n },\n error: (err: unknown) => {\n this.submitting.set(false)\n const failure = classifyMfaFailure(err)\n if (failure === 'expired') {\n this.sessionExpired()\n return\n }\n if (failure === 'wrong-code') {\n this.code.set('')\n this.backupCode.set('')\n }\n const text = this.text()\n this.fail(\n failure === 'rate-limited'\n ? text.tooManyAttempts\n : failure === 'wrong-code'\n ? text.wrongCode\n : text.verifyFailed,\n field,\n )\n },\n })\n }\n\n usePasskey(): void {\n const mfaToken = this.mfaToken()\n if (this.submitting() || mfaToken === null) {\n return\n }\n this.error.set('')\n this.submitting.set(true)\n this.passkeyInFlight.set(true)\n const run = ++this.ceremony\n this.auth\n .startPasskeyChallenge(mfaToken)\n .pipe(\n switchMap(({ challengeId, publicKey }) =>\n run !== this.ceremony\n ? EMPTY\n : from(getPasskeyAssertion(publicKey)).pipe(\n switchMap((credential) =>\n run === this.ceremony\n ? this.auth.finishPasskeyChallenge(mfaToken, challengeId, credential)\n : EMPTY,\n ),\n ),\n ),\n )\n .subscribe({\n next: () => {\n this.submitting.set(false)\n this.passkeyInFlight.set(false)\n this.resetMfa()\n this.loggedIn.emit()\n },\n error: (err: unknown) => {\n if (run !== this.ceremony) {\n return\n }\n this.submitting.set(false)\n this.passkeyInFlight.set(false)\n this.passkeyFailed(err)\n },\n })\n }\n\n private passkeyFailed(err: unknown): void {\n const text = this.text()\n if (!isAuthPortError(err)) {\n switch (classifyPasskeyError(err)) {\n case 'cancelled':\n this.fail(text.cancelled, 'mfa-passkey', 'info')\n return\n case 'unsupported':\n this.fail(text.browserUnsupported, 'mfa-passkey')\n return\n default:\n this.fail(text.verifyFailed, 'mfa-passkey')\n return\n }\n }\n switch (classifyMfaFailure(err)) {\n case 'expired':\n this.sessionExpired()\n return\n case 'wrong-code':\n this.fail(text.passkeyRefused, 'mfa-passkey')\n return\n case 'rate-limited':\n this.fail(text.tooManyAttempts, 'mfa-passkey')\n return\n case 'unavailable':\n this.fail(text.passkeysUnavailable, 'mfa-passkey')\n return\n default:\n this.fail(text.verifyFailed, 'mfa-passkey')\n }\n }\n\n toggleBackupCode(): void {\n this.error.set('')\n this.useBackupCode.update((backup) => !backup)\n this.focusField(this.useBackupCode() ? 'mfa-backup-code' : this.firstChallengeTarget())\n }\n\n private firstChallengeTarget(): string {\n if (this.showBackupCode()) {\n return 'mfa-backup-code'\n }\n return this.canUsePasskey() ? 'mfa-passkey' : 'mfa-code'\n }\n\n backToCredentials(): void {\n this.resetMfa()\n this.error.set('')\n this.focusField('password')\n }\n\n sessionExpired(): void {\n this.resetMfa()\n this.fail(this.text().loginExpired, 'password')\n }\n\n enrolled(token: string): void {\n this.auth.setToken(token)\n this.resetMfa()\n this.loggedIn.emit()\n }\n\n private resetMfa(): void {\n this.ceremony++\n this.submitting.set(false)\n this.passkeyInFlight.set(false)\n this.mfaToken.set(null)\n this.mfaSetupRequired.set(false)\n this.mfaHasTotp.set(false)\n this.mfaHasPasskey.set(false)\n this.useBackupCode.set(false)\n this.code.set('')\n this.backupCode.set('')\n }\n\n private fail(message: string, focusSuffix: string, variant: 'error' | 'info' = 'error'): void {\n this.errorVariant.set(variant)\n this.error.set(message)\n this.focusField(focusSuffix)\n }\n\n private focusField(suffix: string): void {\n focusAfterRender(this.host, this.injector, `#${this.id}-${suffix}`, {\n nestedFallback: 'button',\n })\n }\n}\n","<gbt-auth-panel [heading]=\"heading()\" [intro]=\"intro()\" [wide]=\"enrolling()\">\n <ng-container ngProjectAs=\"[auth-logo]\"><ng-content select=\"[auth-logo]\" /></ng-container>\n\n @if (mfaToken() === null) {\n <form class=\"gbt-auth-panel__form\" (ngSubmit)=\"submit()\">\n @if (error()) {\n <gbt-alert variant=\"error\" appearance=\"subtle\" iconAlign=\"start\">{{ error() }}</gbt-alert>\n }\n\n <gbt-input\n [id]=\"id + '-username'\"\n name=\"username\"\n autocomplete=\"username\"\n [label]=\"text().username\"\n [ngModel]=\"username()\"\n (ngModelChange)=\"username.set($event)\"\n />\n <gbt-input\n [id]=\"id + '-password'\"\n type=\"password\"\n name=\"password\"\n autocomplete=\"current-password\"\n [label]=\"text().password\"\n [showPasswordLabel]=\"text().showPassword\"\n [hidePasswordLabel]=\"text().hidePassword\"\n [ngModel]=\"password()\"\n (ngModelChange)=\"password.set($event)\"\n />\n\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n type=\"submit\"\n size=\"large\"\n [text]=\"text().submit\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().submitting\"\n />\n </form>\n\n @if (registrationEnabled() && registerLink()) {\n <gbt-auth-footer [text]=\"text().registerPrompt\"\n ><ng-content select=\"[gbtAuthFooterLink]\"\n /></gbt-auth-footer>\n }\n } @else if (enrolling()) {\n <gbt-mfa-enrollment\n [mfaToken]=\"mfaToken()!\"\n [passkeysAvailable]=\"passkeysAvailable() === true\"\n (completed)=\"enrolled($event)\"\n (cancelled)=\"backToCredentials()\"\n (expired)=\"sessionExpired()\"\n />\n } @else {\n <form class=\"gbt-auth-panel__form\" (ngSubmit)=\"verify()\">\n @if (passkeyBlocked()) {\n <gbt-alert variant=\"warning\" appearance=\"subtle\" iconAlign=\"start\" live=\"off\">{{\n blockedReason()\n }}</gbt-alert>\n }\n @if (error()) {\n <gbt-alert [variant]=\"errorVariant()\" appearance=\"subtle\" iconAlign=\"start\">{{\n error()\n }}</gbt-alert>\n }\n @if (passkeyInFlight()) {\n <gbt-alert variant=\"info\" appearance=\"subtle\" iconAlign=\"start\" live=\"polite\">{{\n text().passkeyPrompt\n }}</gbt-alert>\n }\n\n @if (showBackupCode()) {\n <gbt-input\n [id]=\"id + '-mfa-backup-code'\"\n inputmode=\"text\"\n [spellcheck]=\"false\"\n autocapitalize=\"off\"\n enterkeyhint=\"go\"\n name=\"backupCode\"\n autocomplete=\"off\"\n [label]=\"text().backupCodeLabel\"\n [ngModel]=\"backupCode()\"\n (ngModelChange)=\"backupCode.set($event)\"\n />\n\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n type=\"submit\"\n size=\"large\"\n [text]=\"text().verify\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().verifying\"\n />\n } @else {\n @if (canUsePasskey()) {\n <gbt-button\n [attr.id]=\"id + '-mfa-passkey'\"\n class=\"gbt-auth-panel__submit\"\n block\n size=\"large\"\n iconName=\"key\"\n [text]=\"text().usePasskey\"\n [loading]=\"passkeyInFlight()\"\n [disabled]=\"submitting() && !passkeyInFlight()\"\n [loadingLabel]=\"text().passkeyValidating\"\n (clicked)=\"usePasskey()\"\n />\n }\n\n @if (canUsePasskey() && hasTotp()) {\n <gbt-divider [label]=\"text().or\" />\n }\n\n @if (hasTotp()) {\n <gbt-input\n [id]=\"id + '-mfa-code'\"\n inputmode=\"numeric\"\n [spellcheck]=\"false\"\n autocapitalize=\"off\"\n enterkeyhint=\"go\"\n name=\"code\"\n autocomplete=\"one-time-code\"\n [label]=\"text().codeLabel\"\n [ngModel]=\"code()\"\n (ngModelChange)=\"code.set($event)\"\n />\n\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n type=\"submit\"\n size=\"large\"\n [text]=\"text().verify\"\n [variant]=\"canUsePasskey() ? 'secondary' : 'primary'\"\n [loading]=\"submitting() && !passkeyInFlight()\"\n [disabled]=\"passkeyInFlight()\"\n [loadingLabel]=\"text().verifying\"\n />\n }\n }\n\n <div class=\"gbt-auth-panel__links\">\n @if (!passkeyBlocked()) {\n <gbt-button\n variant=\"link\"\n [text]=\"showBackupCode() ? backFromBackupLabel() : text().useBackupCode\"\n (clicked)=\"toggleBackupCode()\"\n />\n }\n <gbt-button variant=\"link\" [text]=\"text().back\" (clicked)=\"backToCredentials()\" />\n </div>\n </form>\n }\n</gbt-auth-panel>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n computed,\n contentChild,\n inject,\n input,\n output,\n signal,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { FormsModule } from '@angular/forms'\nimport { Button } from '../../components/atoms/button/button'\nimport { GbtInput } from '../../components/atoms/input/input'\nimport { Skeleton } from '../../components/atoms/skeleton/skeleton'\nimport { Alert } from '../../components/molecules/alert/alert'\nimport { EmptyState } from '../../components/molecules/empty-state/empty-state'\nimport { DEFAULT_REGISTER_LABELS, type RegisterLabels, authLabels } from '../auth-labels'\nimport { AuthFooter, AuthFooterLink } from '../auth-footer/auth-footer'\nimport { AuthPanel } from '../auth-panel/auth-panel'\nimport { MfaEnrollment } from '../mfa-enrollment/mfa-enrollment'\nimport { AUTH_PORT } from '../ports/auth.port'\nimport { type RegisterFailure, classifyRegisterFailure } from '../shared/account-errors'\nimport {\n MIN_PASSWORD_LENGTH,\n USERNAME_PATTERN,\n accountName,\n emailProblem,\n passwordProblem,\n usernameProblem,\n} from '../shared/account-rules'\nimport { focusAfterRender, focusNow } from '../shared/focus-after-render'\n\ntype Registration = 'loading' | 'open' | 'closed' | 'created'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-auth-register',\n standalone: true,\n imports: [\n FormsModule,\n Button,\n GbtInput,\n Skeleton,\n Alert,\n AuthFooter,\n AuthPanel,\n EmptyState,\n MfaEnrollment,\n ],\n templateUrl: './register.html',\n styleUrl: './register.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthRegister {\n private readonly auth = inject(AUTH_PORT)\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly injector = inject(Injector)\n\n labels = input<Partial<RegisterLabels>>({})\n minPasswordLength = input(MIN_PASSWORD_LENGTH)\n usernamePattern = input<RegExp>(USERNAME_PATTERN)\n registered = output<void>()\n signIn = output<void>()\n\n protected readonly text = authLabels('register', DEFAULT_REGISTER_LABELS, this.labels)\n protected readonly signInLink = contentChild(AuthFooterLink)\n protected readonly id = `gbt-register-${nextId++}`\n protected readonly passwordHint = computed(() =>\n this.text().passwordHint(this.minPasswordLength()),\n )\n protected readonly skeletonFields = [\n { name: 'username', hint: true },\n { name: 'email', hint: false },\n { name: 'password', hint: true },\n ]\n\n registration = signal<Registration>('loading')\n username = signal('')\n email = signal('')\n protected password = signal('')\n error = signal('')\n submitting = signal(false)\n private attempted = signal(false)\n\n protected mfaToken = signal<string | null>(null)\n protected passkeysAvailable = signal(false)\n\n protected heading = computed(() => {\n if (this.mfaToken() !== null) {\n return this.text().enrollmentHeading\n }\n return this.registration() === 'open' ? this.text().heading : ''\n })\n protected intro = computed(() =>\n this.mfaToken() === null && this.registration() === 'open' ? this.text().intro : '',\n )\n protected createdName = computed(() => accountName(this.username()))\n private enrollmentExpired = signal(false)\n protected createdMessage = computed(\n () =>\n (this.enrollmentExpired() ? this.text().enrollmentExpired : '') + this.text().createdMessage,\n )\n\n protected usernameFieldError = computed(() => {\n if (!this.attempted()) {\n return null\n }\n const problem = usernameProblem(this.username(), this.usernamePattern())\n return problem === 'empty'\n ? this.text().usernameEmpty\n : problem === 'invalid'\n ? this.text().usernameInvalid\n : null\n })\n protected emailFieldError = computed(() => {\n if (!this.attempted()) {\n return null\n }\n const problem = emailProblem(this.email())\n return problem === 'empty'\n ? this.text().emailEmpty\n : problem === 'invalid'\n ? this.text().emailInvalid\n : null\n })\n protected passwordFieldError = computed(() => {\n if (!this.attempted()) {\n return null\n }\n const min = this.minPasswordLength()\n const problem = passwordProblem(this.password(), min)\n return problem === 'empty'\n ? this.text().passwordEmpty\n : problem === 'too-short'\n ? this.text().passwordTooShort(min)\n : null\n })\n\n constructor() {\n this.auth\n .authConfig()\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (config) => {\n this.passkeysAvailable.set(config.passkeysAvailable === true)\n this.opened(config.registrationEnabled === true)\n },\n error: () => this.opened(true),\n })\n }\n\n submit(): void {\n if (this.submitting()) {\n return\n }\n this.error.set('')\n this.attempted.set(true)\n const username = this.username().trim()\n const email = this.email().trim()\n const firstWrong = usernameProblem(username, this.usernamePattern())\n ? 'username'\n : emailProblem(email)\n ? 'email'\n : passwordProblem(this.password(), this.minPasswordLength())\n ? 'password'\n : null\n if (firstWrong) {\n focusNow(this.host, `#${this.id}-${firstWrong}`)\n return\n }\n this.submitting.set(true)\n this.auth.register(username, email, this.password()).subscribe({\n next: (res) => {\n this.password.set('')\n this.submitting.set(false)\n if (res.token) {\n this.registered.emit()\n } else if (res.mfaToken) {\n this.mfaToken.set(res.mfaToken)\n } else {\n this.fail(this.text().failed, 'password')\n }\n },\n error: (err: unknown) => {\n this.submitting.set(false)\n this.failed(classifyRegisterFailure(err))\n },\n })\n }\n\n enrolled(token: string): void {\n this.auth.setToken(token)\n this.mfaToken.set(null)\n this.registered.emit()\n }\n\n enrollmentInterrupted(expired: boolean): void {\n this.mfaToken.set(null)\n this.enrollmentExpired.set(expired)\n this.registration.set('created')\n focusAfterRender(this.host, this.injector, 'h1')\n }\n\n private opened(open: boolean): void {\n this.registration.set(open ? 'open' : 'closed')\n focusAfterRender(this.host, this.injector, open ? `#${this.id}-username` : 'h1')\n }\n\n private failed(failure: RegisterFailure): void {\n const text = this.text()\n switch (failure) {\n case 'disabled':\n this.password.set('')\n this.opened(false)\n return\n case 'username-invalid':\n this.fail(text.invalid, 'username')\n return\n case 'email-invalid':\n this.fail(text.invalid, 'email')\n return\n case 'password-weak':\n this.fail(text.invalid, 'password')\n return\n case 'invalid':\n this.fail(text.invalid, 'alert')\n return\n case 'username-reserved':\n this.fail(text.reserved, 'username')\n return\n case 'username-taken':\n this.fail(text.taken, 'username')\n return\n case 'email-taken':\n this.fail(text.taken, 'email')\n return\n case 'rate-limited':\n this.fail(text.tooManyAttempts, 'password')\n return\n default:\n this.fail(text.failed, 'password')\n }\n }\n\n private fail(message: string, focusSuffix: string): void {\n this.error.set(message)\n focusAfterRender(this.host, this.injector, `#${this.id}-${focusSuffix}`)\n }\n}\n","<gbt-auth-panel [heading]=\"heading()\" [intro]=\"intro()\" [wide]=\"mfaToken() !== null\">\n <ng-container ngProjectAs=\"[auth-logo]\"><ng-content select=\"[auth-logo]\" /></ng-container>\n\n @if (mfaToken() !== null) {\n <gbt-mfa-enrollment\n [mfaToken]=\"mfaToken()!\"\n [passkeysAvailable]=\"passkeysAvailable()\"\n (completed)=\"enrolled($event)\"\n (cancelled)=\"enrollmentInterrupted(false)\"\n (expired)=\"enrollmentInterrupted(true)\"\n />\n } @else if (registration() === 'loading') {\n <span class=\"sr-only\" role=\"status\">{{ text().loading }}</span>\n <div class=\"gbt-auth-register__loading\" aria-busy=\"true\" aria-hidden=\"true\">\n <div class=\"gbt-auth-register__loading-title\">\n <gbt-skeleton width=\"9rem\" height=\"1.5rem\" />\n </div>\n <div class=\"gbt-auth-register__loading-intro\">\n <gbt-skeleton width=\"85%\" height=\"0.875rem\" />\n <gbt-skeleton width=\"60%\" height=\"0.875rem\" />\n </div>\n <div class=\"gbt-auth-register__loading-form\">\n @for (field of skeletonFields; track field.name) {\n <div class=\"gbt-auth-register__loading-field\">\n <div class=\"gbt-auth-register__loading-label\">\n <gbt-skeleton width=\"6rem\" height=\"0.75rem\" />\n </div>\n <gbt-skeleton\n class=\"gbt-auth-register__loading-input\"\n width=\"100%\"\n height=\"var(--gbt-control-height-md)\"\n />\n @if (field.hint) {\n <div class=\"gbt-auth-register__loading-hint\">\n <gbt-skeleton width=\"55%\" height=\"0.625rem\" />\n </div>\n }\n </div>\n }\n <gbt-skeleton class=\"gbt-auth-register__loading-submit\" width=\"100%\" height=\"2.75rem\" />\n </div>\n <div class=\"gbt-auth-register__loading-footer\">\n <gbt-skeleton width=\"12rem\" height=\"0.875rem\" />\n </div>\n </div>\n } @else if (registration() === 'closed') {\n <gbt-empty-state\n class=\"gbt-auth-panel__status\"\n icon=\"lock\"\n [headingLevel]=\"1\"\n headingFocusable\n [heading]=\"text().closedHeading\"\n [message]=\"text().closedMessage\"\n >\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n size=\"large\"\n [text]=\"text().signIn\"\n (clicked)=\"signIn.emit()\"\n />\n </gbt-empty-state>\n } @else if (registration() === 'created') {\n <gbt-empty-state\n class=\"gbt-auth-panel__status gbt-auth-panel__status--success\"\n icon=\"circle-check\"\n [headingLevel]=\"1\"\n headingFocusable\n [heading]=\"text().createdHeading\"\n [message]=\"createdMessage()\"\n >\n @if (createdName()) {\n <p class=\"gbt-auth-register__created-name\">\n {{ text().createdName }} <strong>{{ createdName() }}</strong>\n </p>\n }\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n size=\"large\"\n [text]=\"text().signIn\"\n (clicked)=\"signIn.emit()\"\n />\n </gbt-empty-state>\n } @else {\n <form class=\"gbt-auth-panel__form\" (ngSubmit)=\"submit()\" novalidate>\n @if (error()) {\n <gbt-alert\n [attr.id]=\"id + '-alert'\"\n tabindex=\"-1\"\n variant=\"error\"\n appearance=\"subtle\"\n iconAlign=\"start\"\n >{{ error() }}</gbt-alert\n >\n }\n\n <gbt-input\n [id]=\"id + '-username'\"\n name=\"username\"\n autocomplete=\"username\"\n [label]=\"text().username\"\n [hint]=\"text().usernameHint\"\n [errorMessage]=\"usernameFieldError()\"\n [ngModel]=\"username()\"\n (ngModelChange)=\"username.set($event)\"\n />\n\n <gbt-input\n [id]=\"id + '-email'\"\n type=\"email\"\n name=\"email\"\n autocomplete=\"email\"\n [label]=\"text().email\"\n [errorMessage]=\"emailFieldError()\"\n [ngModel]=\"email()\"\n (ngModelChange)=\"email.set($event)\"\n />\n\n <gbt-input\n [id]=\"id + '-password'\"\n type=\"password\"\n name=\"password\"\n autocomplete=\"new-password\"\n [label]=\"text().password\"\n [showPasswordLabel]=\"text().showPassword\"\n [hidePasswordLabel]=\"text().hidePassword\"\n [hint]=\"passwordHint()\"\n [errorMessage]=\"passwordFieldError()\"\n [ngModel]=\"password()\"\n (ngModelChange)=\"password.set($event)\"\n />\n\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n type=\"submit\"\n size=\"large\"\n [text]=\"text().submit\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().submitting\"\n />\n </form>\n\n @if (signInLink()) {\n <gbt-auth-footer [text]=\"text().signInPrompt\"\n ><ng-content select=\"[gbtAuthFooterLink]\"\n /></gbt-auth-footer>\n }\n }\n</gbt-auth-panel>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n computed,\n contentChild,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { Button } from '../../components/atoms/button/button'\nimport { GbtInput } from '../../components/atoms/input/input'\nimport { Alert } from '../../components/molecules/alert/alert'\nimport { EmptyState } from '../../components/molecules/empty-state/empty-state'\nimport { type ActivateLabels, DEFAULT_ACTIVATE_LABELS, authLabels } from '../auth-labels'\nimport { AuthFooter, AuthFooterLink } from '../auth-footer/auth-footer'\nimport { AuthPanel } from '../auth-panel/auth-panel'\nimport { AUTH_PORT } from '../ports/auth.port'\nimport { classifyActivateFailure } from '../shared/account-errors'\nimport { MIN_PASSWORD_LENGTH, passwordProblem } from '../shared/account-rules'\nimport { focusAfterRender, focusNow } from '../shared/focus-after-render'\n\ntype View = 'form' | 'success' | 'invalid'\n\nlet nextId = 0\n\n@Component({\n selector: 'gbt-auth-activate',\n standalone: true,\n imports: [FormsModule, Button, GbtInput, Alert, AuthFooter, AuthPanel, EmptyState],\n templateUrl: './activate.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthActivate {\n private readonly auth = inject(AUTH_PORT)\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly injector = inject(Injector)\n\n token = input<string | null>(null)\n labels = input<Partial<ActivateLabels>>({})\n minPasswordLength = input(MIN_PASSWORD_LENGTH)\n activated = output<void>()\n signIn = output<void>()\n\n protected readonly text = authLabels('activate', DEFAULT_ACTIVATE_LABELS, this.labels)\n protected readonly id = `gbt-activate-${nextId++}`\n protected readonly signInLink = contentChild(AuthFooterLink)\n protected readonly passwordHint = computed(() =>\n this.text().passwordHint(this.minPasswordLength()),\n )\n\n private readonly spent = linkedSignal({ source: this.token, computation: () => false })\n view = linkedSignal<View>(() => (this.token() ? 'form' : 'invalid'))\n protected password = signal('')\n protected confirmation = signal('')\n error = signal('')\n submitting = signal(false)\n private attempted = signal(false)\n\n protected passwordFieldError = computed(() => {\n if (!this.attempted()) {\n return null\n }\n const min = this.minPasswordLength()\n const problem = passwordProblem(this.password(), min)\n return problem === 'empty'\n ? this.text().passwordEmpty\n : problem === 'too-short'\n ? this.text().passwordTooShort(min)\n : null\n })\n protected confirmationFieldError = computed(() =>\n this.attempted() ? this.confirmationProblem() : null,\n )\n\n constructor() {\n focusAfterRender(this.host, this.injector, () =>\n this.view() === 'form' ? `#${this.id}-password` : 'h1',\n )\n }\n\n submit(): void {\n const token = this.spent() ? null : this.token()\n if (this.submitting() || this.view() !== 'form' || !token) {\n return\n }\n this.error.set('')\n this.attempted.set(true)\n if (passwordProblem(this.password(), this.minPasswordLength())) {\n focusNow(this.host, `#${this.id}-password`)\n return\n }\n if (this.confirmationProblem()) {\n focusNow(this.host, `#${this.id}-confirmation`)\n return\n }\n this.submitting.set(true)\n this.auth.activate(token, this.password()).subscribe({\n next: () => {\n this.submitting.set(false)\n this.spent.set(true)\n this.clearPasswords()\n this.show('success')\n this.activated.emit()\n },\n error: (err: unknown) => {\n this.submitting.set(false)\n const failure = classifyActivateFailure(err)\n if (failure === 'invalid-link') {\n this.spent.set(true)\n this.clearPasswords()\n this.show('invalid')\n return\n }\n const text = this.text()\n this.fail(\n failure === 'weak-password'\n ? text.weakPassword(this.minPasswordLength())\n : failure === 'rate-limited'\n ? text.tooManyAttempts\n : text.failed,\n )\n },\n })\n }\n\n private confirmationProblem(): string | null {\n if (this.confirmation() === '') {\n return this.text().confirmationEmpty\n }\n return this.confirmation() === this.password() ? null : this.text().mismatch\n }\n\n private clearPasswords(): void {\n this.password.set('')\n this.confirmation.set('')\n this.attempted.set(false)\n }\n\n private show(view: View): void {\n this.view.set(view)\n focusAfterRender(this.host, this.injector, 'h1')\n }\n\n private fail(message: string): void {\n this.error.set(message)\n focusAfterRender(this.host, this.injector, `#${this.id}-password`)\n }\n}\n","<gbt-auth-panel\n [heading]=\"view() === 'form' ? text().heading : ''\"\n [intro]=\"view() === 'form' ? text().intro : ''\"\n>\n <ng-container ngProjectAs=\"[auth-logo]\"><ng-content select=\"[auth-logo]\" /></ng-container>\n\n @switch (view()) {\n @case ('form') {\n <form class=\"gbt-auth-panel__form\" (ngSubmit)=\"submit()\" novalidate>\n @if (error()) {\n <gbt-alert variant=\"error\" appearance=\"subtle\" iconAlign=\"start\">{{ error() }}</gbt-alert>\n }\n\n <gbt-input\n [id]=\"id + '-password'\"\n type=\"password\"\n name=\"password\"\n autocomplete=\"new-password\"\n [label]=\"text().password\"\n [showPasswordLabel]=\"text().showPassword\"\n [hidePasswordLabel]=\"text().hidePassword\"\n [hint]=\"passwordHint()\"\n [errorMessage]=\"passwordFieldError()\"\n [ngModel]=\"password()\"\n (ngModelChange)=\"password.set($event)\"\n />\n\n <gbt-input\n [id]=\"id + '-confirmation'\"\n type=\"password\"\n name=\"confirmation\"\n autocomplete=\"new-password\"\n [label]=\"text().confirmation\"\n [showPasswordLabel]=\"text().showPassword\"\n [hidePasswordLabel]=\"text().hidePassword\"\n [errorMessage]=\"confirmationFieldError()\"\n [ngModel]=\"confirmation()\"\n (ngModelChange)=\"confirmation.set($event)\"\n />\n\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n type=\"submit\"\n size=\"large\"\n [text]=\"text().submit\"\n [loading]=\"submitting()\"\n [loadingLabel]=\"text().submitting\"\n />\n </form>\n\n @if (signInLink()) {\n <gbt-auth-footer [text]=\"text().signInPrompt\"\n ><ng-content select=\"[gbtAuthFooterLink]\"\n /></gbt-auth-footer>\n }\n }\n @case ('success') {\n <gbt-empty-state\n class=\"gbt-auth-panel__status gbt-auth-panel__status--success\"\n icon=\"circle-check\"\n [headingLevel]=\"1\"\n headingFocusable\n [heading]=\"text().successHeading\"\n [message]=\"text().successMessage\"\n >\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n size=\"large\"\n [text]=\"text().signIn\"\n (clicked)=\"signIn.emit()\"\n />\n </gbt-empty-state>\n }\n @case ('invalid') {\n <gbt-empty-state\n class=\"gbt-auth-panel__status\"\n tone=\"error\"\n icon=\"shield-alert\"\n [headingLevel]=\"1\"\n headingFocusable\n [heading]=\"text().invalidHeading\"\n [message]=\"text().invalidMessage\"\n >\n <gbt-button\n class=\"gbt-auth-panel__submit\"\n block\n size=\"large\"\n [text]=\"text().signIn\"\n (clicked)=\"signIn.emit()\"\n />\n </gbt-empty-state>\n }\n }\n</gbt-auth-panel>\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { Badge } from '../../components/atoms/badge/badge'\nimport { Button } from '../../components/atoms/button/button'\nimport { Icon } from '../../components/atoms/icon/icon'\nimport { GbtInput } from '../../components/atoms/input/input'\nimport { Skeleton } from '../../components/atoms/skeleton/skeleton'\nimport { Alert } from '../../components/molecules/alert/alert'\nimport { Card } from '../../components/molecules/card/card'\nimport { ConfirmDangerModal } from '../../components/organisms/confirm-danger-modal/confirm-danger-modal'\nimport { DEFAULT_MFA_SETTINGS_LABELS, type MfaSettingsLabels, authLabels } from '../auth-labels'\nimport { BackupCodes } from '../backup-codes/backup-codes'\nimport { MFA_PORT, type MfaStatus } from '../ports/mfa.port'\nimport { focusAfterRender } from '../shared/focus-after-render'\nimport { classifyMfaFailure, classifyPasswordFailure } from '../shared/mfa-errors'\nimport { MfaSettingsState } from '../shared/mfa-settings-state'\nimport { TotpQr } from '../totp-qr/totp-qr'\n\ntype View = 'loading' | 'failed' | 'ready' | 'enrolling' | 'codes' | 'revoked'\ntype Prompt = 'enroll' | 'regenerate' | 'disable'\ntype CodesOrigin = 'enrolled' | 'regenerated'\n\nlet nextId = 0\n\ninterface PromptCopy {\n lead: string\n submit: string\n busy: string\n variant: 'primary' | 'secondary'\n failed: string\n}\n\ninterface RemovalCopy {\n title: string\n help: string\n action: string\n dialogHeading: string\n dialogMessage: string\n promptLead: string\n busy: string\n}\n\n@Component({\n selector: 'gbt-mfa-settings',\n standalone: true,\n imports: [\n FormsModule,\n NgTemplateOutlet,\n Badge,\n Button,\n GbtInput,\n Icon,\n Skeleton,\n Alert,\n BackupCodes,\n TotpQr,\n ConfirmDangerModal,\n Card,\n ],\n templateUrl: './mfa-settings.html',\n styleUrl: './mfa-settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MfaSettings {\n private readonly mfa = inject(MFA_PORT)\n private readonly state = inject(MfaSettingsState)\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly injector = inject(Injector)\n\n labels = input<Partial<MfaSettingsLabels>>({})\n lowCodesThreshold = input(3)\n sessionRevoked = output<void>()\n\n protected readonly text = authLabels('mfaSettings', DEFAULT_MFA_SETTINGS_LABELS, this.labels)\n protected readonly id = `gbt-mfa-settings-${nextId++}`\n protected view = signal<View>('loading')\n protected status = signal<MfaStatus>({\n totpEnabled: false,\n backupCodesRemaining: 0,\n passkeys: [],\n })\n protected prompt = signal<Prompt | null>(null)\n protected password = signal('')\n protected passwordError = signal<string | null>(null)\n protected notice = signal('')\n protected secret = signal('')\n protected otpauthUrl = signal('')\n protected code = signal('')\n protected codeError = signal<string | null>(null)\n protected backupCodes = signal<string[]>([])\n protected codesOrigin = signal<CodesOrigin>('enrolled')\n protected acknowledged = signal(false)\n protected busy = signal(false)\n protected confirmingDisable = signal(false)\n\n protected hasPasskey = computed(\n () => (this.state.passkeyCount() ?? this.status().passkeys.length) > 0,\n )\n protected hasFactor = computed(() => this.status().totpEnabled || this.hasPasskey())\n protected removal = computed<RemovalCopy>(() => {\n const text = this.text()\n return this.hasPasskey()\n ? {\n title: text.removeTitle,\n help: text.removeHelp,\n action: text.removeAction,\n dialogHeading: text.removeDialogHeading,\n dialogMessage: text.removeDialogMessage,\n promptLead: text.removePromptLead,\n busy: text.removeBusy,\n }\n : {\n title: text.resetTitle,\n help: text.resetHelp,\n action: text.resetAction,\n dialogHeading: text.resetDialogHeading,\n dialogMessage: text.resetDialogMessage,\n promptLead: text.resetPromptLead,\n busy: text.resetBusy,\n }\n })\n protected lowCodes = computed(\n () => this.status().backupCodesRemaining <= this.lowCodesThreshold(),\n )\n protected codesLeft = computed(() => this.text().codesLeft(this.status().backupCodesRemaining))\n protected promptCopy = computed<PromptCopy>(() => this.copyOf(this.prompt() ?? 'enroll'))\n protected heading = computed(() => {\n switch (this.view()) {\n case 'enrolling':\n return this.text().enrollingHeading\n case 'codes':\n return this.text().codesHeading\n default:\n return this.text().heading\n }\n })\n protected help = computed(() =>\n this.view() === 'codes' ? this.text().codesHelp : this.text().help,\n )\n\n constructor() {\n this.load()\n effect(() => {\n if (this.state.formOwner() === 'passkeys') {\n untracked(() => {\n if (this.prompt() !== null) {\n this.resetPrompt()\n this.prompt.set(null)\n this.confirmingDisable.set(false)\n }\n })\n }\n })\n effect(() =>\n this.state.setAppFlowActive(this.view() === 'enrolling' || this.view() === 'codes'),\n )\n effect((onCleanup) => {\n if (this.view() === 'codes' && !this.acknowledged()) {\n const view = this.host.nativeElement.ownerDocument.defaultView\n const warn = (event: BeforeUnloadEvent) => {\n event.preventDefault()\n event.returnValue = ''\n }\n view?.addEventListener('beforeunload', warn)\n onCleanup(() => view?.removeEventListener('beforeunload', warn))\n }\n })\n inject(DestroyRef).onDestroy(() => {\n this.state.setAppFlowActive(false)\n this.password.set('')\n this.code.set('')\n this.secret.set('')\n this.otpauthUrl.set('')\n this.backupCodes.set([])\n })\n }\n\n protected load(): void {\n this.view.set('loading')\n this.mfa.status().subscribe({\n next: (status) => {\n this.state.statusLoaded(status)\n this.status.set(status)\n this.view.set('ready')\n },\n error: () => this.view.set('failed'),\n })\n }\n\n private copyOf(prompt: Prompt): PromptCopy {\n const text = this.text()\n switch (prompt) {\n case 'enroll':\n return {\n lead: text.enrollLead,\n submit: text.enrollSubmit,\n busy: text.enrollBusy,\n variant: 'primary',\n failed: text.enrollFailed,\n }\n case 'regenerate':\n return {\n lead: text.regenerateLead,\n submit: text.regenerateSubmit,\n busy: text.regenerateBusy,\n variant: 'primary',\n failed: text.regenerateFailed,\n }\n case 'disable':\n return {\n lead: this.removal().promptLead,\n submit: text.disableSubmit,\n busy: text.disableCheckBusy,\n variant: 'secondary',\n failed: text.disableFailed,\n }\n }\n }\n\n protected openPrompt(prompt: Prompt): void {\n this.state.claimForm('app')\n this.resetPrompt()\n this.prompt.set(prompt)\n this.focus(`#${this.id}-password`)\n }\n\n protected cancelPrompt(): void {\n const prompt = this.prompt()\n this.resetPrompt()\n this.prompt.set(null)\n if (prompt) {\n this.focus(`[data-opener=\"${prompt}\"] button`)\n }\n }\n\n protected setPassword(value: string): void {\n this.password.set(value)\n this.passwordError.set(null)\n this.notice.set('')\n }\n\n protected submitPrompt(): void {\n const prompt = this.prompt()\n if (this.busy() || !prompt) {\n return\n }\n if (this.password() === '') {\n this.passwordError.set(this.text().enterPassword)\n this.focus(`#${this.id}-password`)\n return\n }\n this.passwordError.set(null)\n this.notice.set('')\n switch (prompt) {\n case 'enroll':\n return this.enroll()\n case 'regenerate':\n return this.regenerate()\n case 'disable':\n this.confirmingDisable.set(true)\n return\n }\n }\n\n private enroll(): void {\n this.busy.set(true)\n this.mfa.enroll(this.password()).subscribe({\n next: ({ secret, otpauthUrl }) => {\n this.busy.set(false)\n this.resetPrompt()\n this.prompt.set(null)\n this.secret.set(secret)\n this.otpauthUrl.set(otpauthUrl)\n this.view.set('enrolling')\n this.focus('[data-mfa-anchor]')\n },\n error: (err: unknown) => this.promptFailed(err),\n })\n }\n\n private regenerate(): void {\n this.busy.set(true)\n this.mfa.regenerate(this.password()).subscribe({\n next: ({ backupCodes }) => {\n this.busy.set(false)\n this.resetPrompt()\n this.prompt.set(null)\n this.showCodes(backupCodes, 'regenerated')\n },\n error: (err: unknown) => this.promptFailed(err),\n })\n }\n\n protected disable(): void {\n if (this.busy()) {\n return\n }\n this.busy.set(true)\n this.mfa.disable(this.password()).subscribe({\n next: () => {\n this.busy.set(false)\n this.confirmingDisable.set(false)\n this.resetPrompt()\n this.prompt.set(null)\n this.status.update((status) => ({ ...status, totpEnabled: false }))\n this.view.set('revoked')\n this.focus('[data-mfa-anchor]')\n this.sessionRevoked.emit()\n },\n error: (err: unknown) => {\n this.confirmingDisable.set(false)\n this.promptFailed(err)\n },\n })\n }\n\n protected closeDisableDialog(): void {\n if (!this.busy()) {\n this.confirmingDisable.set(false)\n this.focus(`#${this.id}-password`)\n }\n }\n\n private promptFailed(err: unknown): void {\n this.busy.set(false)\n switch (classifyPasswordFailure(err)) {\n case 'wrong-password':\n this.passwordError.set(this.text().wrongPassword)\n break\n case 'rate-limited':\n this.notice.set(this.text().tooManyAttempts)\n break\n default:\n this.notice.set(this.copyOf(this.prompt() ?? 'enroll').failed)\n }\n this.focus(`#${this.id}-password`)\n }\n\n private resetPrompt(): void {\n this.password.set('')\n this.passwordError.set(null)\n this.notice.set('')\n }\n\n protected activate(): void {\n if (this.busy()) {\n return\n }\n const code = this.code().replace(/\\s+/g, '')\n if (code === '') {\n this.codeError.set(this.text().enterCode)\n this.focus(`#${this.id}-code`)\n return\n }\n this.codeError.set(null)\n this.notice.set('')\n this.busy.set(true)\n this.mfa.confirm(code).subscribe({\n next: ({ backupCodes }) => {\n this.busy.set(false)\n this.state.totpConfirmed()\n this.secret.set('')\n this.otpauthUrl.set('')\n this.code.set('')\n this.showCodes(backupCodes, 'enrolled')\n },\n error: (err: unknown) => {\n this.busy.set(false)\n switch (classifyMfaFailure(err)) {\n case 'wrong-code':\n this.codeError.set(this.text().wrongCode)\n this.code.set('')\n break\n case 'rate-limited':\n this.notice.set(this.text().tooManyAttempts)\n break\n default:\n this.notice.set(this.text().activationFailed)\n }\n this.focus(`#${this.id}-code`)\n },\n })\n }\n\n protected setCode(value: string): void {\n this.code.set(value)\n this.codeError.set(null)\n this.notice.set('')\n }\n\n protected cancelEnrollment(): void {\n this.secret.set('')\n this.otpauthUrl.set('')\n this.code.set('')\n this.codeError.set(null)\n this.notice.set('')\n this.view.set('ready')\n this.focus('[data-opener=\"enroll\"] button')\n }\n\n private showCodes(codes: string[], origin: CodesOrigin): void {\n this.backupCodes.set(codes)\n this.codesOrigin.set(origin)\n this.acknowledged.set(false)\n this.view.set('codes')\n this.focus('[data-mfa-anchor]')\n }\n\n protected finishCodes(): void {\n if (!this.acknowledged()) {\n return\n }\n this.status.update((status) => ({\n ...status,\n totpEnabled: status.totpEnabled || this.codesOrigin() === 'enrolled',\n backupCodesRemaining: this.backupCodes().length,\n }))\n this.backupCodes.set([])\n this.acknowledged.set(false)\n this.view.set('ready')\n this.focus('[data-mfa-anchor]')\n }\n\n private focus(selector: string): void {\n focusAfterRender(this.host, this.injector, selector)\n }\n}\n","<gbt-card\n variant=\"outlined\"\n [icon]=\"view() === 'ready' && !hasFactor() ? 'shield-alert' : 'shield-check'\"\n [heading]=\"heading()\"\n [description]=\"help()\"\n>\n @switch (view()) {\n @case ('loading') {\n <span class=\"sr-only\" role=\"status\">{{ text().loading }}</span>\n <div class=\"gbt-mfa-settings__loading\" aria-busy=\"true\">\n <div class=\"gbt-mfa-settings__skeleton-row\" aria-hidden=\"true\">\n <div class=\"gbt-mfa-settings__skeleton-lines\">\n <gbt-skeleton width=\"9rem\" height=\"0.875rem\" />\n <gbt-skeleton width=\"min(20rem, 100%)\" height=\"0.75rem\" />\n </div>\n <gbt-skeleton width=\"4.5rem\" height=\"1.375rem\" variant=\"rect\" />\n </div>\n <div class=\"gbt-mfa-settings__skeleton-row\" aria-hidden=\"true\">\n <div class=\"gbt-mfa-settings__skeleton-lines\">\n <gbt-skeleton width=\"7rem\" height=\"0.875rem\" />\n <gbt-skeleton width=\"min(16rem, 100%)\" height=\"0.75rem\" />\n </div>\n <gbt-skeleton width=\"11rem\" height=\"2.25rem\" variant=\"rect\" />\n </div>\n </div>\n }\n\n @case ('failed') {\n <gbt-alert variant=\"error\" appearance=\"subtle\">\n {{ text().loadFailed }}\n <gbt-button\n alert-actions\n variant=\"secondary\"\n size=\"small\"\n [text]=\"text().retry\"\n (clicked)=\"load()\"\n />\n </gbt-alert>\n }\n\n @case ('revoked') {\n <div class=\"gbt-mfa-settings__anchor\" data-mfa-anchor tabindex=\"-1\">\n <gbt-alert variant=\"info\" appearance=\"subtle\" iconAlign=\"start\" live=\"off\">{{\n text().signedOut\n }}</gbt-alert>\n </div>\n }\n\n @case ('enrolling') {\n <form ngNoForm class=\"gbt-mfa-settings__scan\" (submit)=\"$event.preventDefault(); activate()\">\n <p class=\"gbt-mfa-settings__lead\" data-mfa-anchor tabindex=\"-1\">{{ text().scanLead }}</p>\n\n <div class=\"gbt-mfa-settings__scan-grid\">\n <gbt-totp-qr\n class=\"gbt-mfa-settings__qr\"\n [otpauthUrl]=\"otpauthUrl()\"\n [secret]=\"secret()\"\n />\n\n <div class=\"gbt-mfa-settings__scan-side\">\n @if (notice()) {\n <gbt-alert variant=\"error\" appearance=\"subtle\" iconAlign=\"start\">{{\n notice()\n }}</gbt-alert>\n }\n\n <gbt-input\n [id]=\"id + '-code'\"\n inputmode=\"numeric\"\n [spellcheck]=\"false\"\n autocapitalize=\"off\"\n enterkeyhint=\"go\"\n name=\"code\"\n autocomplete=\"one-time-code\"\n [label]=\"text().codeLabel\"\n [errorMessage]=\"codeError()\"\n [ngModel]=\"code()\"\n (ngModelChange)=\"setCode($event)\"\n />\n\n <div class=\"gbt-mfa-settings__actions\">\n <gbt-button\n type=\"submit\"\n [text]=\"text().activate\"\n [loading]=\"busy()\"\n [loadingLabel]=\"text().verifying\"\n />\n <gbt-button\n variant=\"secondary\"\n [text]=\"text().cancel\"\n [disabled]=\"busy()\"\n (clicked)=\"cancelEnrollment()\"\n />\n </div>\n </div>\n </div>\n </form>\n }\n\n @case ('codes') {\n <div class=\"gbt-mfa-settings__stack\">\n <p class=\"gbt-mfa-settings__lead\" data-mfa-anchor tabindex=\"-1\">\n {{\n codesOrigin() === 'enrolled' ? text().codesLeadEnrolled : text().codesLeadRegenerated\n }}\n </p>\n @if (!acknowledged()) {\n <gbt-alert variant=\"warning\" appearance=\"subtle\" iconAlign=\"start\" live=\"off\">{{\n text().dontLeave\n }}</gbt-alert>\n }\n <div class=\"gbt-mfa-settings__codes\">\n <gbt-backup-codes [codes]=\"backupCodes()\" [(acknowledged)]=\"acknowledged\" />\n </div>\n <div class=\"gbt-mfa-settings__actions\">\n <gbt-button [text]=\"text().done\" [disabled]=\"!acknowledged()\" (clicked)=\"finishCodes()\" />\n </div>\n </div>\n }\n\n @default {\n @if (hasFactor()) {\n <div class=\"gbt-mfa-settings__rows\">\n <div class=\"gbt-mfa-settings__row\">\n <div class=\"gbt-mfa-settings__row-head\" data-mfa-anchor tabindex=\"-1\">\n @if (status().totpEnabled) {\n <div class=\"gbt-mfa-settings__row-text\">\n <div class=\"gbt-mfa-settings__title-line\">\n <p class=\"gbt-mfa-settings__row-title\">{{ text().appConfigured }}</p>\n <gbt-badge\n class=\"gbt-mfa-settings__badge\"\n variant=\"success\"\n icon=\"check-circle\"\n >{{ text().enabled }}</gbt-badge\n >\n </div>\n <p class=\"gbt-mfa-settings__row-help\">\n {{ hasPasskey() ? text().appHelpWithPasskey : text().appHelp }}\n </p>\n </div>\n } @else {\n <div class=\"gbt-mfa-settings__row-text\">\n <div class=\"gbt-mfa-settings__title-line\">\n <p class=\"gbt-mfa-settings__row-title\">{{ text().noApp }}</p>\n <gbt-badge class=\"gbt-mfa-settings__badge\" variant=\"neutral\">{{\n text().optional\n }}</gbt-badge>\n </div>\n <p class=\"gbt-mfa-settings__row-help\">{{ text().noAppHelp }}</p>\n </div>\n @if (prompt() !== 'enroll') {\n <gbt-button\n class=\"gbt-mfa-settings__row-action\"\n data-opener=\"enroll\"\n variant=\"secondary\"\n iconName=\"plus\"\n [text]=\"text().addApp\"\n (clicked)=\"openPrompt('enroll')\"\n />\n }\n }\n </div>\n @if (!status().totpEnabled && prompt() === 'enroll') {\n <ng-container [ngTemplateOutlet]=\"passwordPrompt\" />\n }\n </div>\n\n <div class=\"gbt-mfa-settings__row\">\n <div class=\"gbt-mfa-settings__row-head\">\n <div class=\"gbt-mfa-settings__row-text\">\n <p class=\"gbt-mfa-settings__row-title\">{{ text().backupCodesTitle }}</p>\n <p\n class=\"gbt-mfa-settings__codes-left\"\n [attr.data-tone]=\"lowCodes() ? 'warning' : null\"\n >\n @if (lowCodes()) {\n <gbt-icon name=\"alert-triangle\" aria-hidden=\"true\" />\n }\n <span>{{ codesLeft() }}.</span>\n @if (lowCodes()) {\n <span>{{ text().lowCodes }}</span>\n }\n </p>\n <p class=\"gbt-mfa-settings__row-help\">{{ text().backupCodesHelp }}</p>\n </div>\n @if (prompt() !== 'regenerate') {\n <gbt-button\n class=\"gbt-mfa-settings__row-action\"\n data-opener=\"regenerate\"\n variant=\"secondary\"\n iconName=\"refresh-cw\"\n [text]=\"text().regenerateCodes\"\n (clicked)=\"openPrompt('regenerate')\"\n />\n }\n </div>\n @if (prompt() === 'regenerate') {\n <ng-container [ngTemplateOutlet]=\"passwordPrompt\" />\n }\n </div>\n\n @if (status().totpEnabled) {\n <div class=\"gbt-mfa-settings__row\">\n <div class=\"gbt-mfa-settings__row-head\">\n <div class=\"gbt-mfa-settings__row-text\">\n <p class=\"gbt-mfa-settings__row-title\">{{ removal().title }}</p>\n <p class=\"gbt-mfa-settings__row-help\">{{ removal().help }}</p>\n </div>\n @if (prompt() !== 'disable') {\n <gbt-button\n class=\"gbt-mfa-settings__row-action gbt-mfa-settings__row-action--remove\"\n data-opener=\"disable\"\n variant=\"secondary\"\n [text]=\"removal().action\"\n (clicked)=\"openPrompt('disable')\"\n />\n }\n </div>\n @if (prompt() === 'disable') {\n <ng-container [ngTemplateOutlet]=\"passwordPrompt\" />\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"gbt-mfa-settings__stack\">\n <div class=\"gbt-mfa-settings__anchor\" data-mfa-anchor tabindex=\"-1\">\n <gbt-alert variant=\"warning\" appearance=\"subtle\" iconAlign=\"start\" live=\"off\">{{\n text().noFactorWarning\n }}</gbt-alert>\n </div>\n @if (prompt() === 'enroll') {\n <ng-container [ngTemplateOutlet]=\"passwordPrompt\" />\n } @else {\n <div class=\"gbt-mfa-settings__actions\">\n <gbt-button\n data-opener=\"enroll\"\n iconName=\"shield-check\"\n [text]=\"text().setUpNow\"\n (clicked)=\"openPrompt('enroll')\"\n />\n </div>\n }\n </div>\n }\n }\n }\n</gbt-card>\n\n@if (confirmingDisable()) {\n <gbt-confirm-danger-modal\n [isOpen]=\"true\"\n [heading]=\"removal().dialogHeading\"\n [message]=\"removal().dialogMessage\"\n [confirmLabel]=\"removal().action\"\n confirmIcon=\"trash-2\"\n [cancelLabel]=\"text().cancel\"\n [closeLabel]=\"text().close\"\n [busyLabel]=\"removal().busy\"\n [busy]=\"busy()\"\n (confirmed)=\"disable()\"\n (closed)=\"closeDisableDialog()\"\n />\n}\n\n<ng-template #passwordPrompt>\n <form\n ngNoForm\n class=\"gbt-mfa-settings__prompt\"\n (submit)=\"$event.preventDefault(); submitPrompt()\"\n >\n <p class=\"gbt-mfa-settings__prompt-lead\">{{ promptCopy().lead }}</p>\n\n @if (notice()) {\n <gbt-alert variant=\"error\" appearance=\"subtle\" iconAlign=\"start\">{{ notice() }}</gbt-alert>\n }\n\n <div class=\"gbt-mfa-settings__field\">\n <gbt-input\n [id]=\"id + '-password'\"\n name=\"currentPassword\"\n type=\"password\"\n autocomplete=\"current-password\"\n [label]=\"text().currentPassword\"\n [showPasswordLabel]=\"text().showPassword\"\n [hidePasswordLabel]=\"text().hidePassword\"\n [errorMessage]=\"passwordError()\"\n [ngModel]=\"password()\"\n (ngModelChange)=\"setPassword($event)\"\n />\n </div>\n\n <div class=\"gbt-mfa-settings__actions\">\n <gbt-button\n type=\"submit\"\n [variant]=\"promptCopy().variant\"\n [text]=\"promptCopy().submit\"\n [loading]=\"busy()\"\n [loadingLabel]=\"promptCopy().busy\"\n />\n <gbt-button\n variant=\"secondary\"\n [text]=\"text().cancel\"\n [disabled]=\"busy()\"\n (clicked)=\"cancelPrompt()\"\n />\n </div>\n </form>\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { EMPTY, catchError, forkJoin, from, of, switchMap } from 'rxjs'\nimport { Button } from '../../components/atoms/button/button'\nimport { IconMarker } from '../../components/atoms/icon-marker/icon-marker'\nimport { GbtInput } from '../../components/atoms/input/input'\nimport { SaveStatus } from '../../components/atoms/save-status/save-status'\nimport { Alert } from '../../components/molecules/alert/alert'\nimport { Card } from '../../components/molecules/card/card'\nimport { EmptyState } from '../../components/molecules/empty-state/empty-state'\nimport { SkeletonList } from '../../components/molecules/skeleton-list/skeleton-list'\nimport { ConfirmDangerModal } from '../../components/organisms/confirm-danger-modal/confirm-danger-modal'\nimport { GbtDateTimePipe, GbtRelativeTimePipe } from '../../pipes/format.pipes'\nimport {\n DEFAULT_PASSKEY_SETTINGS_LABELS,\n type PasskeySettingsLabels,\n authLabels,\n} from '../auth-labels'\nimport { AUTH_PORT } from '../ports/auth.port'\nimport { MFA_PORT, type Passkey } from '../ports/mfa.port'\nimport { focusAfterRender } from '../shared/focus-after-render'\nimport {\n classifyMfaFailure,\n classifyPasswordFailure,\n isTooManyPasskeys,\n} from '../shared/mfa-errors'\nimport { MfaSettingsState } from '../shared/mfa-settings-state'\nimport { PASSKEY_NAME_MAX, passkeyNameProblem } from '../shared/passkey-name'\nimport { isAuthPortError } from '../shared/port-error'\nimport { classifyPasskeyError, createPasskeyCredential, passkeysSupported } from '../webauthn'\n\ntype View = 'loading' | 'failed' | 'ready' | 'revoked'\n\nlet nextId = 0\n\nconst ABSOLUTE_AFTER_DAYS = 30\nconst DAY = 86_400_000\n\n@Component({\n selector: 'gbt-passkey-settings',\n standalone: true,\n imports: [\n FormsModule,\n NgTemplateOutlet,\n Alert,\n EmptyState,\n Button,\n GbtInput,\n IconMarker,\n SaveStatus,\n SkeletonList,\n ConfirmDangerModal,\n Card,\n GbtRelativeTimePipe,\n GbtDateTimePipe,\n ],\n templateUrl: './passkey-settings.html',\n styleUrl: './passkey-settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PasskeySettings {\n private readonly mfa = inject(MFA_PORT)\n private readonly auth = inject(AUTH_PORT, { optional: true })\n private readonly state = inject(MfaSettingsState)\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly injector = inject(Injector)\n\n labels = input<Partial<PasskeySettingsLabels>>({})\n locale = input<string | null>(null)\n sessionRevoked = output<void>()\n\n protected readonly text = authLabels(\n 'passkeySettings',\n DEFAULT_PASSKEY_SETTINGS_LABELS,\n this.labels,\n )\n protected readonly id = `gbt-passkey-settings-${nextId++}`\n protected readonly relativeOptions = computed(() => ({\n style: 'short' as const,\n maxUnit: 'day' as const,\n absoluteAfterDays: ABSOLUTE_AFTER_DAYS,\n locale: this.locale() ?? undefined,\n }))\n protected readonly dateOptions = computed(() => ({\n day: '2-digit' as const,\n month: '2-digit' as const,\n year: 'numeric' as const,\n hour: '2-digit' as const,\n minute: '2-digit' as const,\n locale: this.locale() ?? undefined,\n }))\n protected readonly absolute = (iso: string): boolean =>\n Math.abs(Date.now() - Date.parse(iso)) >= ABSOLUTE_AFTER_DAYS * DAY\n\n protected view = signal<View>('loading')\n protected passkeys = signal<Passkey[]>([])\n protected totpEnabled = signal(false)\n private serverAvailable = signal<boolean | null>(null)\n private readonly browserSupported = passkeysSupported()\n\n protected blockedReason = computed(() => {\n if (!this.browserSupported) {\n return this.text().browserBlocked\n }\n return this.serverAvailable() === false ? this.text().serverBlocked : null\n })\n\n protected result = signal<string | null>(null)\n\n protected adding = signal(false)\n protected name = signal('')\n protected nameError = signal<string | null>(null)\n protected password = signal('')\n protected passwordError = signal<string | null>(null)\n protected notice = signal('')\n protected noticeVariant = signal<'error' | 'info'>('error')\n protected busy = signal(false)\n protected promptOpen = signal(false)\n private ceremony = 0\n\n protected deleting = signal<Passkey | null>(null)\n protected deletePassword = signal('')\n protected deletePasswordError = signal<string | null>(null)\n protected deleteNotice = signal('')\n protected confirmingDelete = signal(false)\n protected deleteBusy = signal(false)\n\n protected count = computed(() =>\n this.view() === 'ready' && this.passkeys().length > 0 ? this.passkeys().length : null,\n )\n protected appBusy = this.state.appFlowActive\n protected lastFactor = computed(\n () => this.passkeys().length === 1 && !(this.state.totpEnabled() ?? this.totpEnabled()),\n )\n protected deleteMessage = computed(() =>\n this.text().deleteDialogMessage(this.deleting()?.name ?? '', this.lastFactor()),\n )\n\n constructor() {\n this.load()\n effect(() => {\n if (this.state.formOwner() === 'app') {\n untracked(() => {\n this.cancelAddQuietly()\n this.closeDelete()\n })\n }\n })\n inject(DestroyRef).onDestroy(() => {\n this.ceremony++\n this.password.set('')\n this.deletePassword.set('')\n })\n }\n\n protected load(): void {\n this.view.set('loading')\n const config = this.auth ? this.auth.authConfig().pipe(catchError(() => of(null))) : of(null)\n forkJoin([this.mfa.status(), config]).subscribe({\n next: ([status, config]) => {\n this.state.statusLoaded(status)\n this.passkeys.set(status.passkeys)\n this.totpEnabled.set(status.totpEnabled)\n this.serverAvailable.set(config ? config.passkeysAvailable === true : null)\n this.view.set('ready')\n },\n error: () => this.view.set('failed'),\n })\n }\n\n protected openAdd(): void {\n if (this.blockedReason() || this.appBusy()) {\n return\n }\n this.state.claimForm('passkeys')\n this.closeDelete()\n this.resetAdd()\n this.result.set(null)\n this.adding.set(true)\n this.focus(`#${this.id}-name`)\n }\n\n protected cancelAdd(): void {\n this.resetAdd()\n this.adding.set(false)\n this.focus('[data-opener=\"add\"] button')\n }\n\n protected setName(value: string): void {\n this.name.set(value)\n this.nameError.set(null)\n this.clearNotice()\n }\n\n protected setPassword(value: string): void {\n this.password.set(value)\n this.passwordError.set(null)\n this.clearNotice()\n }\n\n protected submitAdd(): void {\n if (this.busy()) {\n return\n }\n const text = this.text()\n const name = this.name().trim() || text.defaultPasskeyName\n const nameProblem = passkeyNameProblem(name)\n if (nameProblem) {\n this.nameError.set(\n nameProblem === 'too-long'\n ? text.nameTooLong(PASSKEY_NAME_MAX)\n : text.nameControlCharacters,\n )\n this.focus(`#${this.id}-name`)\n return\n }\n if (this.password() === '') {\n this.passwordError.set(text.enterPassword)\n this.focus(`#${this.id}-password`)\n return\n }\n this.clearNotice()\n this.busy.set(true)\n const attempt = ++this.ceremony\n this.mfa\n .startPasskeyRegistration(this.password())\n .pipe(\n switchMap((challenge) => {\n if (attempt !== this.ceremony) {\n return EMPTY\n }\n this.promptOpen.set(true)\n return from(createPasskeyCredential(challenge.publicKey)).pipe(\n switchMap((credential) =>\n attempt === this.ceremony\n ? this.mfa.finishPasskeyRegistration(challenge.challengeId, credential, name)\n : EMPTY,\n ),\n )\n }),\n )\n .subscribe({\n next: (passkey) => {\n this.state.passkeyAdded()\n if (attempt !== this.ceremony) {\n return\n }\n this.busy.set(false)\n this.promptOpen.set(false)\n this.resetAdd()\n this.adding.set(false)\n this.passkeys.update((list) => [...list, passkey])\n this.result.set(this.text().passkeyAdded(passkey.name))\n this.focus(`[data-passkey-id=\"${CSS.escape(passkey.id)}\"]`)\n },\n error: (err: unknown) => {\n if (attempt === this.ceremony) {\n this.addFailed(err)\n }\n },\n })\n }\n\n private addFailed(err: unknown): void {\n const text = this.text()\n this.busy.set(false)\n this.promptOpen.set(false)\n if (isAuthPortError(err)) {\n if (isTooManyPasskeys(err)) {\n return this.fail(text.tooManyPasskeys)\n }\n if (err.status === 409) {\n return this.fail(text.alreadyRegistered)\n }\n if (classifyMfaFailure(err) === 'unavailable') {\n return this.fail(text.passkeysUnavailable)\n }\n switch (classifyPasswordFailure(err)) {\n case 'wrong-password':\n this.passwordError.set(text.wrongPassword)\n this.focus(`#${this.id}-password`)\n return\n case 'rate-limited':\n return this.fail(text.tooManyAttempts)\n default:\n return this.fail(text.addFailed)\n }\n }\n switch (classifyPasskeyError(err)) {\n case 'cancelled':\n return this.fail(text.cancelled, 'info')\n case 'already-registered':\n return this.fail(text.alreadyRegistered)\n case 'unsupported':\n return this.fail(text.browserUnsupported)\n default:\n return this.fail(text.addFailed)\n }\n }\n\n private fail(message: string, variant: 'error' | 'info' = 'error'): void {\n this.noticeVariant.set(variant)\n this.notice.set(message)\n this.focus('.gbt-passkey-settings__submit button')\n }\n\n private clearNotice(): void {\n this.notice.set('')\n this.noticeVariant.set('error')\n }\n\n private resetAdd(): void {\n this.ceremony++\n this.name.set('')\n this.nameError.set(null)\n this.password.set('')\n this.passwordError.set(null)\n this.clearNotice()\n this.busy.set(false)\n this.promptOpen.set(false)\n }\n\n protected openDelete(passkey: Passkey): void {\n this.state.claimForm('passkeys')\n if (this.adding()) {\n this.cancelAddQuietly()\n }\n this.resetDelete()\n this.result.set(null)\n this.deleting.set(passkey)\n this.focus(`#${this.id}-delete-password`)\n }\n\n protected cancelDelete(): void {\n const target = this.deleting()\n this.closeDelete()\n if (target) {\n this.focus(`[data-passkey-id=\"${CSS.escape(target.id)}\"] [data-opener=\"delete\"] button`)\n }\n }\n\n protected setDeletePassword(value: string): void {\n this.deletePassword.set(value)\n this.deletePasswordError.set(null)\n this.deleteNotice.set('')\n }\n\n protected submitDelete(): void {\n if (this.deleteBusy() || !this.deleting()) {\n return\n }\n if (this.deletePassword() === '') {\n this.deletePasswordError.set(this.text().enterPassword)\n this.focus(`#${this.id}-delete-password`)\n return\n }\n this.deletePasswordError.set(null)\n this.deleteNotice.set('')\n this.confirmingDelete.set(true)\n }\n\n protected closeDeleteDialog(): void {\n if (!this.deleteBusy()) {\n this.confirmingDelete.set(false)\n this.focus(`#${this.id}-delete-password`)\n }\n }\n\n protected delete(): void {\n const target = this.deleting()\n if (this.deleteBusy() || !target) {\n return\n }\n this.deleteBusy.set(true)\n this.mfa.deletePasskey(target.id, this.deletePassword()).subscribe({\n next: () => {\n this.state.passkeyGone()\n this.deleteBusy.set(false)\n this.confirmingDelete.set(false)\n this.closeDelete()\n this.passkeys.update((list) => list.filter((passkey) => passkey.id !== target.id))\n this.result.set(null)\n this.view.set('revoked')\n this.focus('[data-passkeys-anchor]')\n this.sessionRevoked.emit()\n },\n error: (err: unknown) => this.deleteFailed(err, target),\n })\n }\n\n private deleteFailed(err: unknown, target: Passkey): void {\n this.deleteBusy.set(false)\n this.confirmingDelete.set(false)\n if (isAuthPortError(err) && err.status === 404) {\n this.closeDelete()\n this.passkeys.update((list) => list.filter((passkey) => passkey.id !== target.id))\n this.state.passkeyGone()\n this.result.set(this.text().passkeyGone(target.name))\n this.focus('[data-passkeys-anchor]')\n return\n }\n switch (classifyPasswordFailure(err)) {\n case 'wrong-password':\n this.deletePasswordError.set(this.text().wrongPassword)\n break\n case 'rate-limited':\n this.deleteNotice.set(this.text().tooManyAttempts)\n break\n default:\n this.deleteNotice.set(this.text().deleteFailed)\n }\n this.focus(`#${this.id}-delete-password`)\n }\n\n private closeDelete(): void {\n this.resetDelete()\n this.deleting.set(null)\n }\n\n private resetDelete(): void {\n this.deletePassword.set('')\n this.deletePasswordError.set(null)\n this.deleteNotice.set('')\n this.confirmingDelete.set(false)\n }\n\n private cancelAddQuietly(): void {\n this.resetAdd()\n this.adding.set(false)\n }\n\n private focus(selector: string): void {\n focusAfterRender(this.host, this.injector, selector)\n }\n}\n","<gbt-card\n variant=\"outlined\"\n icon=\"key\"\n [heading]=\"text().heading\"\n [description]=\"text().description\"\n [count]=\"count()\"\n>\n @switch (view()) {\n @case ('loading') {\n <gbt-skeleton-list\n [rows]=\"2\"\n leading=\"square\"\n leadingSize=\"2rem\"\n [padded]=\"false\"\n [loadingLabel]=\"text().loading\"\n />\n }\n\n @case ('failed') {\n <gbt-alert variant=\"error\" appearance=\"subtle\">\n {{ text().loadFailed }}\n <gbt-button\n alert-actions\n variant=\"secondary\"\n size=\"small\"\n [text]=\"text().retry\"\n (clicked)=\"load()\"\n />\n </gbt-alert>\n }\n\n @case ('revoked') {\n <div class=\"gbt-passkey-settings__anchor\" data-passkeys-anchor tabindex=\"-1\">\n <gbt-alert variant=\"info\" appearance=\"subtle\" iconAlign=\"start\" live=\"off\">{{\n text().signedOut\n }}</gbt-alert>\n </div>\n }\n\n @default {\n <div class=\"gbt-passkey-settings__stack\">\n @if (blockedReason(); as reason) {\n <gbt-alert variant=\"info\" appearance=\"subtle\" iconAlign=\"start\" live=\"off\">{{\n reason\n }}</gbt-alert>\n }\n\n <div class=\"gbt-passkey-settings__anchor\" data-passkeys-anchor tabindex=\"-1\">\n @if (passkeys().length === 0) {\n <gbt-empty-state\n size=\"compact\"\n icon=\"key\"\n [heading]=\"text().emptyHeading\"\n [message]=\"text().emptyMessage\"\n />\n } @else {\n <ul class=\"gbt-passkey-settings__rows\" [attr.aria-label]=\"text().listLabel\">\n @for (passkey of passkeys(); track passkey.id) {\n <li\n class=\"gbt-passkey-settings__row\"\n [attr.data-passkey-id]=\"passkey.id\"\n tabindex=\"-1\"\n >\n <div class=\"gbt-passkey-settings__row-head\">\n <gbt-icon-marker shape=\"tile\" icon=\"key\" />\n <div class=\"gbt-passkey-settings__row-text\">\n <p class=\"gbt-passkey-settings__name\" [title]=\"passkey.name\">\n {{ passkey.name }}\n </p>\n <p class=\"gbt-passkey-settings__meta\">\n <span\n >{{ text().added(absolute(passkey.createdAt)) }}\n <time\n [attr.datetime]=\"passkey.createdAt\"\n [title]=\"passkey.createdAt | gbtDateTime: dateOptions()\"\n >{{ passkey.createdAt | gbtRelativeTime: relativeOptions() }}</time\n ></span\n >\n <span\n class=\"gbt-passkey-settings__last-used\"\n [class.gbt-passkey-settings__last-used--never]=\"!passkey.lastUsedAt\"\n >\n @if (passkey.lastUsedAt; as lastUsed) {\n {{ text().lastUsed(absolute(lastUsed)) }}\n <time\n [attr.datetime]=\"lastUsed\"\n [title]=\"lastUsed | gbtDateTime: dateOptions()\"\n >{{ lastUsed | gbtRelativeTime: relativeOptions() }}</time\n >\n } @else {\n {{ text().neverUsed }}\n }\n </span>\n </p>\n </div>\n @if (deleting()?.id !== passkey.id) {\n <gbt-button\n class=\"gbt-passkey-settings__row-action\"\n data-opener=\"delete\"\n variant=\"secondary\"\n size=\"small\"\n iconName=\"trash-2\"\n [text]=\"text().delete\"\n [ariaLabel]=\"text().deleteKey(passkey.name)\"\n (clicked)=\"openDelete(passkey)\"\n />\n }\n </div>\n @if (deleting()?.id === passkey.id) {\n <ng-container [ngTemplateOutlet]=\"deletePrompt\" />\n }\n </li>\n }\n </ul>\n }\n </div>\n\n <gbt-save-status\n class=\"gbt-passkey-settings__result\"\n [class.sr-only]=\"!result()\"\n [state]=\"result() ? 'saved' : 'idle'\"\n [message]=\"result()\"\n />\n\n @if (adding()) {\n <ng-container [ngTemplateOutlet]=\"addForm\" />\n } @else {\n <div\n class=\"gbt-passkey-settings__actions\"\n [class.gbt-passkey-settings__actions--divided]=\"passkeys().length > 0\"\n [class.gbt-passkey-settings__actions--centered]=\"passkeys().length === 0\"\n >\n <gbt-button\n data-opener=\"add\"\n variant=\"secondary\"\n iconName=\"plus\"\n [text]=\"text().addPasskey\"\n [disabled]=\"!!blockedReason() || appBusy()\"\n (clicked)=\"openAdd()\"\n />\n @if (appBusy()) {\n <p class=\"gbt-passkey-settings__hint\">{{ text().finishAppFirst }}</p>\n }\n </div>\n }\n </div>\n }\n }\n</gbt-card>\n\n@if (confirmingDelete()) {\n <gbt-confirm-danger-modal\n [isOpen]=\"true\"\n [heading]=\"text().deleteDialogHeading\"\n [message]=\"deleteMessage()\"\n [confirmLabel]=\"text().deleteConfirm\"\n confirmIcon=\"trash-2\"\n [cancelLabel]=\"text().cancel\"\n [closeLabel]=\"text().close\"\n [busyLabel]=\"text().deleting\"\n [busy]=\"deleteBusy()\"\n (confirmed)=\"delete()\"\n (closed)=\"closeDeleteDialog()\"\n />\n}\n\n<ng-template #addForm>\n <form ngNoForm class=\"gbt-passkey-settings__form\" (submit)=\"$event.preventDefault(); submitAdd()\">\n <p class=\"gbt-passkey-settings__form-lead\">{{ text().addLead }}</p>\n\n @if (notice()) {\n <gbt-alert [variant]=\"noticeVariant()\" appearance=\"subtle\" iconAlign=\"start\">{{\n notice()\n }}</gbt-alert>\n }\n @if (promptOpen()) {\n <gbt-alert variant=\"info\" appearance=\"subtle\" iconAlign=\"start\" live=\"polite\">{{\n text().promptOpen\n }}</gbt-alert>\n }\n\n <div class=\"gbt-passkey-settings__fields\">\n <div class=\"gbt-passkey-settings__field\">\n <gbt-input\n [id]=\"id + '-name'\"\n name=\"passkeyName\"\n autocomplete=\"off\"\n [label]=\"text().nameLabel\"\n [placeholder]=\"text().defaultPasskeyName\"\n [errorMessage]=\"nameError()\"\n [ngModel]=\"name()\"\n (ngModelChange)=\"setName($event)\"\n />\n </div>\n <div class=\"gbt-passkey-settings__field\">\n <gbt-input\n [id]=\"id + '-password'\"\n name=\"currentPassword\"\n type=\"password\"\n autocomplete=\"current-password\"\n [label]=\"text().currentPassword\"\n [showPasswordLabel]=\"text().showPassword\"\n [hidePasswordLabel]=\"text().hidePassword\"\n [errorMessage]=\"passwordError()\"\n [ngModel]=\"password()\"\n (ngModelChange)=\"setPassword($event)\"\n />\n </div>\n </div>\n\n <div class=\"gbt-passkey-settings__buttons\">\n <gbt-button\n class=\"gbt-passkey-settings__submit\"\n type=\"submit\"\n iconName=\"key\"\n [text]=\"text().create\"\n [loading]=\"busy()\"\n [loadingLabel]=\"text().creating\"\n />\n <gbt-button variant=\"secondary\" [text]=\"text().cancel\" (clicked)=\"cancelAdd()\" />\n </div>\n </form>\n</ng-template>\n\n<ng-template #deletePrompt>\n <form\n ngNoForm\n class=\"gbt-passkey-settings__form\"\n (submit)=\"$event.preventDefault(); submitDelete()\"\n >\n <p class=\"gbt-passkey-settings__form-lead\">{{ text().deleteLead(deleting()?.name ?? '') }}</p>\n\n @if (lastFactor()) {\n <gbt-alert variant=\"warning\" appearance=\"subtle\" iconAlign=\"start\">{{\n text().lastFactorWarning\n }}</gbt-alert>\n }\n\n @if (deleteNotice()) {\n <gbt-alert variant=\"error\" appearance=\"subtle\" iconAlign=\"start\">{{\n deleteNotice()\n }}</gbt-alert>\n }\n\n <div class=\"gbt-passkey-settings__fields\">\n <div class=\"gbt-passkey-settings__field\">\n <gbt-input\n [id]=\"id + '-delete-password'\"\n name=\"currentPassword\"\n type=\"password\"\n autocomplete=\"current-password\"\n [label]=\"text().currentPassword\"\n [showPasswordLabel]=\"text().showPassword\"\n [hidePasswordLabel]=\"text().hidePassword\"\n [errorMessage]=\"deletePasswordError()\"\n [ngModel]=\"deletePassword()\"\n (ngModelChange)=\"setDeletePassword($event)\"\n />\n </div>\n </div>\n\n <div class=\"gbt-passkey-settings__buttons\">\n <gbt-button\n type=\"submit\"\n variant=\"secondary\"\n [text]=\"text().continue\"\n [loading]=\"deleteBusy()\"\n [loadingLabel]=\"text().checking\"\n />\n <gbt-button\n variant=\"secondary\"\n [text]=\"text().cancel\"\n [disabled]=\"deleteBusy()\"\n (clicked)=\"cancelDelete()\"\n />\n </div>\n </form>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","SECOND","MINUTE","HOUR","DAY","round","ASSERTIVE_VARIANTS","VARIANT_ICONS","DASH_ARRAYS","computeWeekdayLabels","CURRENT_YEAR"],"mappings":"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"}