@masmarino/gabarit 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"masmarino-gabarit.mjs","names":[],"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/reset-password/reset-password.ts","../../../projects/gabarit/src/lib/auth/reset-password/reset-password.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"],"sourcesContent":["export const GABARIT_VERSION = '1.2.2'\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 resetPassword(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 ResetPasswordLabels 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_RESET_PASSWORD_LABELS: Readonly<ResetPasswordLabels> =\n Object.freeze<ResetPasswordLabels>({\n heading: 'Choose a new password',\n intro:\n 'An administrator has reset the password of your account. Choose a new one to sign in again.',\n password: 'New password',\n passwordHint: (minLength) => `At least ${minLength} characters.`,\n confirmation: 'Confirm the new password',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n submit: 'Set new password',\n submitting: 'Setting the password',\n signInPrompt: 'Already set your new password?',\n successHeading: 'Your password has been changed',\n successMessage: 'You can now sign in with your new password.',\n invalidHeading: 'This link does not work',\n invalidMessage:\n 'This password reset link is invalid or has expired. Ask an administrator to send you a new one.',\n signIn: 'Sign in',\n passwordEmpty: 'Enter a new password',\n passwordTooShort: (minLength) => `At least ${minLength} characters`,\n confirmationEmpty: 'Confirm your new password',\n mismatch: 'The passwords do not match',\n weakPassword: (minLength) => `The password must be at least ${minLength} characters long`,\n failed: 'The new password could not be set, 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 resetPassword?: Partial<ResetPasswordLabels>\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 {\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 { DEFAULT_RESET_PASSWORD_LABELS, type ResetPasswordLabels, 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'\n// Shared with the activation: same failure taxonomy (generic 400 = dead link, weak password, 429).\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-reset-password',\n standalone: true,\n imports: [FormsModule, Button, GbtInput, Alert, AuthFooter, AuthPanel, EmptyState],\n templateUrl: './reset-password.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthResetPassword {\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<ResetPasswordLabels>>({})\n minPasswordLength = input(MIN_PASSWORD_LENGTH)\n passwordReset = output<void>()\n signIn = output<void>()\n\n protected readonly text = authLabels('resetPassword', DEFAULT_RESET_PASSWORD_LABELS, this.labels)\n protected readonly id = `gbt-reset-password-${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.resetPassword(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.passwordReset.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"],"mappings":"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"}
1
+ {"version":3,"file":"masmarino-gabarit.mjs","names":[],"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/reset-password/reset-password.ts","../../../projects/gabarit/src/lib/auth/reset-password/reset-password.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"],"sourcesContent":["export const GABARIT_VERSION = '1.3.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 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 resetPassword(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 ResetPasswordLabels 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_RESET_PASSWORD_LABELS: Readonly<ResetPasswordLabels> =\n Object.freeze<ResetPasswordLabels>({\n heading: 'Choose a new password',\n intro:\n 'An administrator has reset the password of your account. Choose a new one to sign in again.',\n password: 'New password',\n passwordHint: (minLength) => `At least ${minLength} characters.`,\n confirmation: 'Confirm the new password',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n submit: 'Set new password',\n submitting: 'Setting the password',\n signInPrompt: 'Already set your new password?',\n successHeading: 'Your password has been changed',\n successMessage: 'You can now sign in with your new password.',\n invalidHeading: 'This link does not work',\n invalidMessage:\n 'This password reset link is invalid or has expired. Ask an administrator to send you a new one.',\n signIn: 'Sign in',\n passwordEmpty: 'Enter a new password',\n passwordTooShort: (minLength) => `At least ${minLength} characters`,\n confirmationEmpty: 'Confirm your new password',\n mismatch: 'The passwords do not match',\n weakPassword: (minLength) => `The password must be at least ${minLength} characters long`,\n failed: 'The new password could not be set, 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 resetPassword?: Partial<ResetPasswordLabels>\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 {\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 { DEFAULT_RESET_PASSWORD_LABELS, type ResetPasswordLabels, 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'\n// Shared with the activation: same failure taxonomy (generic 400 = dead link, weak password, 429).\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-reset-password',\n standalone: true,\n imports: [FormsModule, Button, GbtInput, Alert, AuthFooter, AuthPanel, EmptyState],\n templateUrl: './reset-password.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthResetPassword {\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<ResetPasswordLabels>>({})\n minPasswordLength = input(MIN_PASSWORD_LENGTH)\n passwordReset = output<void>()\n signIn = output<void>()\n\n protected readonly text = authLabels('resetPassword', DEFAULT_RESET_PASSWORD_LABELS, this.labels)\n protected readonly id = `gbt-reset-password-${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.resetPassword(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.passwordReset.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"],"mappings":"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"}