@guildofgleks/ui 21.2.3 → 21.2.4

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":"guildofgleks-ui.mjs","sources":["../../../../projects/gleks/ui/src/lib/components/spinner/spinner.component.ts","../../../../projects/gleks/ui/src/lib/components/spinner/spinner.component.html","../../../../projects/gleks/ui/src/lib/components/button/button.component.ts","../../../../projects/gleks/ui/src/lib/components/button/button.component.html","../../../../projects/gleks/ui/src/lib/shared/roving-focus.ts","../../../../projects/gleks/ui/src/lib/shared/icons.ts","../../../../projects/gleks/ui/src/lib/components/icon/icon.component.ts","../../../../projects/gleks/ui/src/lib/components/skeleton/skeleton.component.ts","../../../../projects/gleks/ui/src/lib/components/skeleton/skeleton.component.html","../../../../projects/gleks/ui/src/lib/components/accordion/accordion.component.ts","../../../../projects/gleks/ui/src/lib/components/accordion/accordion.component.html","../../../../projects/gleks/ui/src/lib/shared/checkable-control.config.ts","../../../../projects/gleks/ui/src/lib/components/checkbox/checkbox.component.ts","../../../../projects/gleks/ui/src/lib/components/checkbox/checkbox.component.html","../../../../projects/gleks/ui/src/lib/components/dialog/dialog.tokens.ts","../../../../projects/gleks/ui/src/lib/components/dialog/confirmation-dialog/confirmation-dialog.component.ts","../../../../projects/gleks/ui/src/lib/components/dialog/confirmation-dialog/confirmation-dialog.component.html","../../../../projects/gleks/ui/src/lib/services/dialog-service/dialog.service.ts","../../../../projects/gleks/ui/src/lib/components/dialog/dialog.component.ts","../../../../projects/gleks/ui/src/lib/components/dialog/dialog.component.html","../../../../projects/gleks/ui/src/lib/components/toast/toast.component.ts","../../../../projects/gleks/ui/src/lib/components/toast/toast.component.html","../../../../projects/gleks/ui/src/lib/services/toast-service/toast-service.ts","../../../../projects/gleks/ui/src/lib/components/toast/toast-container/toast-container.component.ts","../../../../projects/gleks/ui/src/lib/components/toast/toast-container/toast-container.component.html","../../../../projects/gleks/ui/src/lib/shared/error-state.ts","../../../../projects/gleks/ui/src/lib/components/inputfield/inputfield.component.ts","../../../../projects/gleks/ui/src/lib/components/inputfield/inputfield.component.html","../../../../projects/gleks/ui/src/lib/components/chip/chip.component.ts","../../../../projects/gleks/ui/src/lib/components/chip/chip.component.html","../../../../projects/gleks/ui/src/lib/components/tag/tag.component.ts","../../../../projects/gleks/ui/src/lib/components/tag/tag.component.html","../../../../projects/gleks/ui/src/lib/shared/dropdown-overlay.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-position.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-base.ts","../../../../projects/gleks/ui/src/lib/components/select/select.component.ts","../../../../projects/gleks/ui/src/lib/components/select/select.component.html","../../../../projects/gleks/ui/src/lib/components/multiselect/multiselect.component.ts","../../../../projects/gleks/ui/src/lib/components/multiselect/multiselect.component.html","../../../../projects/gleks/ui/src/lib/components/slider/slider.component.ts","../../../../projects/gleks/ui/src/lib/components/slider/slider.component.html","../../../../projects/gleks/ui/src/lib/components/paginator/paginator.component.ts","../../../../projects/gleks/ui/src/lib/components/paginator/paginator.component.html","../../../../projects/gleks/ui/src/lib/components/spinner/spinner-overlay/spinner-overlay.component.ts","../../../../projects/gleks/ui/src/lib/components/spinner/spinner-overlay/spinner-overlay.component.html","../../../../projects/gleks/ui/src/lib/components/table/column.ts","../../../../projects/gleks/ui/src/lib/components/table/template.directive.ts","../../../../projects/gleks/ui/src/lib/components/table/table.component.ts","../../../../projects/gleks/ui/src/lib/components/table/table.component.html","../../../../projects/gleks/ui/src/lib/services/theme-service/theme.service.ts","../../../../projects/gleks/ui/src/public-api.ts","../../../../projects/gleks/ui/src/guildofgleks-ui.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { GogSize, GogSpinnerVariant } from '../../shared/types';\n\n@Component({\n selector: 'gog-spinner',\n imports: [NgTemplateOutlet],\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-inline-center',\n },\n})\nexport class SpinnerComponent {\n readonly size = input<GogSize>('md');\n readonly overlay = input(false);\n readonly ariaLabel = input('Loading');\n /**\n * `runic` and `ring` are built-in presets. Use `custom` to render your own\n * markup via content projection — it inherits the size wrapper, overlay\n * behaviour, and `--gog-spinner-color` theming, but the visuals are yours.\n */\n readonly variant = input<GogSpinnerVariant>('runic');\n}\n","@if (overlay()) {\n <div class=\"gog-spinner__overlay gog-flex-center\">\n <div class=\"gog-spinner__wrap gog-contained-layout gog-spinner__wrap--{{ size() }}\">\n <ng-container *ngTemplateOutlet=\"spinnerTpl\" />\n </div>\n </div>\n} @else {\n <div class=\"gog-spinner__wrap gog-contained-layout gog-spinner__wrap--{{ size() }}\">\n <ng-container *ngTemplateOutlet=\"spinnerTpl\" />\n </div>\n}\n\n<ng-template #spinnerTpl>\n @switch (variant()) {\n @case ('ring') {\n <span class=\"gog-spinner__ring\" aria-hidden=\"true\"></span>\n }\n @case ('custom') {\n <ng-content />\n }\n @default {\n <svg class=\"gog-spinner__svg\" viewBox=\"0 0 64 64\" fill=\"none\" aria-hidden=\"true\">\n <!-- Static dim track -->\n <circle class=\"gog-spinner__track\" cx=\"32\" cy=\"32\" r=\"26\" stroke-width=\"1.5\" />\n\n <!-- Outer arc — rotates clockwise, long segment -->\n <circle\n class=\"gog-spinner__arc-outer\"\n cx=\"32\"\n cy=\"32\"\n r=\"26\"\n stroke-width=\"2.5\"\n stroke-linecap=\"butt\"\n />\n\n <!-- Inner arc — rotates counter-clockwise, short segment -->\n <circle\n class=\"gog-spinner__arc-inner\"\n cx=\"32\"\n cy=\"32\"\n r=\"18\"\n stroke-width=\"1.5\"\n stroke-linecap=\"butt\"\n />\n\n <!-- Rotating diamond ticks group — single transform on <g> works correctly -->\n <g class=\"gog-spinner__ticks\">\n <polygon points=\"32,3 34,6 32,9 30,6\" class=\"gog-spinner__diamond\" />\n <polygon points=\"32,55 34,58 32,61 30,58\" class=\"gog-spinner__diamond\" />\n <polygon points=\"3,32 6,30 9,32 6,34\" class=\"gog-spinner__diamond\" />\n <polygon points=\"55,32 58,30 61,32 58,34\" class=\"gog-spinner__diamond\" />\n </g>\n\n <!-- Inner rune — glow pulse only, no transform -->\n <text\n class=\"gog-spinner__rune-wrap gog-spinner__rune\"\n x=\"32\"\n y=\"32\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n >\n ✦\n </text>\n </svg>\n }\n }\n</ng-template>\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\n\r\nimport { Subject, timer } from 'rxjs';\r\nimport { throttle } from 'rxjs/operators';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { GogSize, GogVariant } from '../../shared/types';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\n@Component({\r\n selector: 'gog-button',\r\n imports: [SpinnerComponent],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Drives the :host(.gog-host--full-width) rules in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect.\r\n '[class.gog-host--full-width]': 'fullWidth()',\r\n },\r\n})\r\nexport class ButtonComponent {\r\n variant = input<GogVariant>('primary');\r\n size = input<GogSize>('md');\r\n disabled = input<boolean>(false);\r\n fullWidth = input<boolean>(false);\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n loading = input<boolean>(false);\r\n\r\n /**\r\n * Minimum time, in ms, between accepted clicks. This is a spam/double-click\r\n * guard, not a delay before the first click fires: the first click in a\r\n * window is emitted immediately (leading edge), and any further clicks\r\n * within `debounce` ms are silently dropped until the window elapses.\r\n */\r\n debounce = input<number>(300);\r\n\r\n /**\r\n * Accessible name for the button, forwarded to the native <button>.\r\n * Setting `aria-label` directly on <gog-button> in a template does NOT\r\n * work — that attribute lands on the custom element host, not on the\r\n * actual interactive <button> inside it, so assistive tech never sees it.\r\n * Use this input instead, especially for icon-only buttons.\r\n */\r\n ariaLabel = input<string | null>(null);\r\n\r\n gogClick = output<MouseEvent>();\r\n\r\n /** Fully non-interactive: excluded from tab order via the native `disabled` attribute. */\r\n protected isNativeDisabled = computed(() => this.disabled());\r\n /** Logically blocked from activating (disabled OR loading), used to guard click handling. */\r\n protected isDisabled = computed(() => this.disabled() || this.loading());\r\n private static readonly SPINNER_SIZE_BY_BUTTON_SIZE: Record<GogSize, GogSize> = {\r\n xsm: 'sm',\r\n sm: 'sm',\r\n md: 'sm',\r\n lg: 'md',\r\n slg: 'md',\r\n };\r\n protected spinnerSize = computed<GogSize>(\r\n () => ButtonComponent.SPINNER_SIZE_BY_BUTTON_SIZE[this.size()],\r\n );\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly click$ = new Subject<MouseEvent>();\r\n\r\n constructor() {\r\n this.click$\r\n .pipe(\r\n throttle(() => timer(this.debounce()), { leading: true, trailing: false }),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe((event) => this.gogClick.emit(event));\r\n }\r\n\r\n protected onClick(event: MouseEvent): void {\r\n if (this.isDisabled()) return;\r\n this.click$.next(event);\r\n }\r\n}\r\n","<button\n (click)=\"onClick($event)\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() && !isNativeDisabled() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.disabled]=\"isNativeDisabled() ? true : null\"\n [class.gog-btn--ghost]=\"variant() === 'ghost'\"\n [class.gog-btn--xsm]=\"size() === 'xsm'\"\n [class.gog-btn--sm]=\"size() === 'sm'\"\n [class.gog-btn--md]=\"size() === 'md'\"\n [class.gog-btn--lg]=\"size() === 'lg'\"\n [class.gog-btn--slg]=\"size() === 'slg'\"\n [class.gog-btn--loading]=\"loading()\"\n [class.gog-btn--outline]=\"variant() === 'outline'\"\n [class.gog-btn--primary]=\"variant() === 'primary'\"\n [class.gog-btn--secondary]=\"variant() === 'secondary'\"\n [class.gog-cursor-not-allowed]=\"isDisabled()\"\n [class.gog-cursor-pointer]=\"!isDisabled()\"\n [class.gog-cursor-wait]=\"loading()\"\n [type]=\"type()\"\n class=\"gog-btn gog-inline-center gog-contained-layout\"\n>\n @if (loading()) {\n <gog-spinner [size]=\"spinnerSize()\" aria-hidden=\"true\" class=\"gog-btn__spinner\" />\n }\n\n <span [class.gog-btn__content--hidden]=\"loading()\" class=\"gog-btn__content\">\n <ng-content></ng-content>\n </span>\n</button>\n","const ROVING_FOCUS_KEYS = ['ArrowDown', 'ArrowUp', 'Home', 'End'] as const;\n\nexport type RovingFocusKey = (typeof ROVING_FOCUS_KEYS)[number];\n\nexport function isRovingFocusKey(key: string): key is RovingFocusKey {\n return (ROVING_FOCUS_KEYS as readonly string[]).includes(key);\n}\n\nexport function nextRovingFocusIndex(\n key: RovingFocusKey,\n currentIndex: number,\n count: number,\n): number {\n const lastIndex = count - 1;\n switch (key) {\n case 'Home':\n return 0;\n case 'End':\n return lastIndex;\n case 'ArrowDown':\n return (currentIndex + 1) % count;\n case 'ArrowUp':\n return (currentIndex - 1 + count) % count;\n }\n}\n\n/**\n * Arrow/Home/End navigation across a roving-tabindex-style list of focusable elements.\n * `event.currentTarget` must be one of `items`. Returns false (and leaves the event\n * untouched) for any other key, or when `items` doesn't contain the current target,\n * so callers can safely invoke this unconditionally from a keydown handler.\n */\nexport function handleRovingFocusKeydown(\n event: KeyboardEvent,\n items: readonly HTMLElement[],\n): boolean {\n if (!isRovingFocusKey(event.key) || items.length === 0) {\n return false;\n }\n\n const current = event.currentTarget as HTMLElement;\n const index = items.indexOf(current);\n if (index === -1) {\n return false;\n }\n\n event.preventDefault();\n const nextIndex = nextRovingFocusIndex(event.key, index, items.length);\n items[nextIndex]?.focus();\n return true;\n}\n","export type GogIconName =\n | 'check'\n | 'close'\n | 'chevron-up'\n | 'chevron-down'\n | 'sort'\n | 'sort-up'\n | 'sort-down'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'checkbox'\n | 'checkbox-checked'\n | 'eye'\n | 'eye-off';\n\nexport const ICON_DEFS: Record<GogIconName, string> = {\n check: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>`,\n\n close: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-x-icon lucide-x\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>`,\n\n 'chevron-up': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-chevron-up-icon lucide-chevron-up\"><path d=\"m18 15-6-6-6 6\"/></svg>`,\n\n 'chevron-down': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-chevron-down-icon lucide-chevron-down\"><path d=\"m6 9 6 6 6-6\"/></svg>`,\n\n sort: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-up-icon lucide-arrow-down-up\"><path d=\"m3 16 4 4 4-4\"/><path d=\"M7 20V4\"/><path d=\"m21 8-4-4-4 4\"/><path d=\"M17 4v16\"/></svg>`,\n\n 'sort-up': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-up-narrow-wide-icon lucide-arrow-up-narrow-wide\"><path d=\"m3 8 4-4 4 4\"/><path d=\"M7 4v16\"/><path d=\"M11 12h4\"/><path d=\"M11 16h7\"/><path d=\"M11 20h10\"/></svg>`,\n\n 'sort-down': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-wide-narrow-icon lucide-arrow-down-wide-narrow\"><path d=\"m3 16 4 4 4-4\"/><path d=\"M7 20V4\"/><path d=\"M11 4h10\"/><path d=\"M11 8h7\"/><path d=\"M11 12h4\"/></svg>`,\n\n success: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>`,\n\n error: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-bug-icon lucide-bug\"><path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/></svg>`,\n\n warning: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-triangle-alert-icon lucide-triangle-alert\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>`,\n\n info: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-info-icon lucide-info\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>`,\n\n checkbox: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-icon lucide-square\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/></svg>`,\n\n 'checkbox-checked': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>`,\n\n eye: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-eye-icon lucide-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\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>`,\n\n 'eye-off': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-eye-off-icon lucide-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\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><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\"/><path d=\"m2 2 20 20\"/></svg>`,\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n computed,\n input,\n inject,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { GogIconName, ICON_DEFS } from '../../shared/icons';\n\nexport type { GogIconName } from '../../shared/icons';\n\n@Component({\n selector: 'gog-icon',\n imports: [NgTemplateOutlet],\n template: `\n @if (template(); as iconTpl) {\n <ng-container *ngTemplateOutlet=\"iconTpl\" />\n } @else {\n <span [innerHTML]=\"iconSvg()\"></span>\n }\n `,\n styleUrl: './icon.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-icon',\n '[attr.aria-hidden]': 'ariaHidden() ? \"true\" : null',\n '[attr.aria-label]': 'ariaHidden() ? null : ariaLabel()',\n },\n})\nexport class IconComponent {\n private readonly sanitizer = inject(DomSanitizer);\n\n readonly name = input<GogIconName>('close');\n readonly template = input<TemplateRef<unknown> | null>(null);\n readonly title = input('');\n readonly ariaHidden = input(true);\n\n protected readonly ariaLabel = computed(() =>\n this.ariaHidden() ? null : this.title() || this.name(),\n );\n\n protected readonly iconSvg = computed(() =>\n this.sanitizer.bypassSecurityTrustHtml(ICON_DEFS[this.name()]),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport { GogSize, GogSkeletonAnimation, GogSkeletonShape } from '../../shared/types';\n\n@Component({\n selector: 'gog-skeleton',\n templateUrl: './skeleton.component.html',\n styleUrl: './skeleton.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'width()',\n '[style.height]': 'resolvedHeight()',\n // Decorative by default — a page can carry dozens of these while loading, and a\n // role=\"status\" on every single bone would flood assistive tech with announcements.\n // Pass `ariaLabel` on the one instance that should actually speak for the loading state.\n '[attr.role]': 'ariaLabel() ? \"status\" : null',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-hidden]': 'ariaLabel() ? null : \"true\"',\n },\n})\nexport class SkeletonComponent {\n readonly shape = input<GogSkeletonShape>('text');\n readonly size = input<GogSize>('md');\n readonly animation = input<GogSkeletonAnimation>('pulse');\n /** CSS width, e.g. '240px' or '60%'. Falls back to a shape/size default when unset. */\n readonly width = input<string | null>(null);\n /** CSS height override. Ignored for `text`, whose lines size from `size` instead. */\n readonly height = input<string | null>(null);\n /** Number of stacked lines when `shape=\"text\"`. The last line renders shorter. */\n readonly lines = input(1);\n readonly rounded = input(true);\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly lineList = computed(() => {\n const count = Math.max(1, this.lines());\n return Array.from({ length: count }, (_, index) => count > 1 && index === count - 1);\n });\n\n // Keeps a width-only override circular instead of an oval, since `circle` has no\n // independent height concept of its own.\n protected readonly resolvedHeight = computed(() => {\n if (this.shape() === 'text') {\n return null;\n }\n if (this.shape() === 'circle') {\n return this.height() ?? this.width();\n }\n return this.height();\n });\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-skeleton',\n `gog-skeleton--${this.shape()}`,\n `gog-skeleton--${this.size()}`,\n `gog-skeleton--${this.animation()}`,\n this.rounded() ? null : 'gog-skeleton--square',\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n}\n","@switch (shape()) {\n @case ('text') {\n @for (isShort of lineList(); track $index) {\n <span\n class=\"gog-skeleton__bone gog-skeleton__line\"\n [class.gog-skeleton__line--short]=\"isShort\"\n ></span>\n }\n }\n @default {\n <span class=\"gog-skeleton__bone gog-skeleton__shape\"></span>\n }\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { GogSize } from '../../shared/types';\r\nimport { handleRovingFocusKeydown } from '../../shared/roving-focus';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { SkeletonComponent } from '../skeleton/skeleton.component';\r\n\r\nexport interface GogAccordionItem {\r\n id: string | number;\r\n title: string;\r\n /** When true, the item's header is non-interactive and skipped by keyboard navigation. */\r\n disabled?: boolean;\r\n\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface GogAccordionHeaderContext {\r\n $implicit: GogAccordionItem;\r\n open: boolean;\r\n}\r\n\r\nexport interface GogAccordionToggleEvent {\r\n item: GogAccordionItem;\r\n open: boolean;\r\n}\r\n\r\nexport interface GogAccordionChevronContext {\r\n $implicit: GogAccordionItem;\r\n open: boolean;\r\n}\r\n\r\n@Directive({\r\n selector: '[gogAccordionContent]',\r\n})\r\nexport class GogAccordionContentDirective {\r\n readonly templateRef = inject<TemplateRef<{ $implicit: GogAccordionItem }>>(TemplateRef);\r\n}\r\n\r\n@Directive({\r\n selector: '[gogAccordionHeader]',\r\n})\r\nexport class GogAccordionHeaderDirective {\r\n readonly templateRef = inject<TemplateRef<GogAccordionHeaderContext>>(TemplateRef);\r\n}\r\n\r\n@Directive({\r\n selector: '[gogAccordionChevron]',\r\n})\r\nexport class GogAccordionChevronDirective {\r\n readonly templateRef = inject<TemplateRef<GogAccordionChevronContext>>(TemplateRef);\r\n}\r\n\r\n@Component({\r\n selector: 'gog-accordion',\r\n imports: [NgTemplateOutlet, IconComponent, SkeletonComponent],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-accordion-host',\r\n },\r\n})\r\nexport class AccordionComponent {\r\n private static nextUid = 0;\r\n readonly items = input<GogAccordionItem[]>([]);\r\n readonly size = input<GogSize>('lg');\r\n readonly expandFirst = input(false);\r\n readonly multi = input(false);\r\n readonly loading = input(false);\r\n /**\r\n * How many skeleton rows to render while `loading` is true and `items` is still\r\n * empty — the common case of \"the list itself hasn't arrived yet,\" where there's\r\n * no item count to derive a row count from. Ignored once `items` has entries:\r\n * then one skeleton row is rendered per item instead, so the placeholder matches\r\n * the eventual shape.\r\n */\r\n readonly skeletonCount = input(3);\r\n readonly showChevron = input(true);\r\n /**\r\n * When set, wraps each header button in `role=\"heading\"` with this `aria-level`,\r\n * so screen-reader users navigating by headings can find accordion sections.\r\n * Left unset by default since not every accordion instance represents document structure\r\n * (e.g. one nested inside a card).\r\n */\r\n readonly headingLevel = input<2 | 3 | 4 | 5 | 6 | undefined>(undefined);\r\n /**\r\n * Two-way bindable set of currently open item ids. Exposed as a model so consumers\r\n * can drive the accordion externally (e.g. `[(openIds)]=\"mySet\"`) instead of only\r\n * reacting to the `gogToggle` output.\r\n */\r\n readonly openIds = model<ReadonlySet<string | number>>(new Set());\r\n readonly gogToggle = output<GogAccordionToggleEvent>();\r\n readonly headerTpl = contentChild(GogAccordionHeaderDirective);\r\n readonly chevronTpl = contentChild(GogAccordionChevronDirective);\r\n readonly contentTpl = contentChild(GogAccordionContentDirective);\r\n /**\r\n * Unique per-instance id prefix. Prevents duplicate DOM ids (and therefore broken\r\n * aria-controls/aria-labelledby wiring) when several accordions render on the same\r\n * page and their items happen to share `id` values (e.g. ids coming straight from a DB).\r\n */\r\n protected readonly uid = `gog-acc-${AccordionComponent.nextUid++}`;\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n /**\r\n * Tracks whether the expandFirst auto-open has already run, independently of\r\n * `openIds` itself. Reading `openIds().size` directly inside the effect would\r\n * re-subscribe the effect to every future toggle (since `openIds()` gets read\r\n * on every run once `expandFirst` is true), causing pointless re-evaluation\r\n * on each click and re-opening the first item if `items` is later replaced\r\n * with a new array reference after the user closed everything by hand.\r\n */\r\n private readonly autoExpanded = signal(false);\r\n protected readonly skeletonRows = computed(() => {\r\n const count = this.items().length || this.skeletonCount();\r\n return Array.from({ length: count }, (_, index) => index);\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const items = this.items();\r\n\r\n if (!this.expandFirst() || items.length === 0 || untracked(this.autoExpanded)) {\r\n return;\r\n }\r\n\r\n this.openIds.set(new Set([items[0].id]));\r\n this.autoExpanded.set(true);\r\n });\r\n }\r\n\r\n protected isOpen(id: string | number): boolean {\r\n return this.openIds().has(id);\r\n }\r\n\r\n protected toggle(item: GogAccordionItem): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n const id = item.id;\r\n const current = this.openIds();\r\n const next = new Set(current);\r\n\r\n if (next.has(id)) {\r\n next.delete(id);\r\n } else {\r\n if (!this.multi()) next.clear();\r\n next.add(id);\r\n }\r\n\r\n this.openIds.set(next);\r\n this.gogToggle.emit({ item, open: next.has(id) });\r\n }\r\n\r\n protected onHeaderKeydown(event: KeyboardEvent): void {\r\n const host = this.host.nativeElement as HTMLElement;\r\n // Disabled headers are excluded so arrow/Home/End navigation skips over them,\r\n // matching the WAI-ARIA expectation that non-interactive controls aren't focus stops.\r\n const headers = Array.from(\r\n host.querySelectorAll('.gog-accordion__header:not([disabled])'),\r\n ) as HTMLButtonElement[];\r\n\r\n handleRovingFocusKeydown(event, headers);\r\n }\r\n}\r\n","<div\r\n [class.gog-accordion--loading]=\"loading()\"\r\n [class.gog-accordion--slg]=\"size() === 'slg'\"\r\n [class.gog-accordion--md]=\"size() === 'md'\"\r\n [class.gog-accordion--sm]=\"size() === 'sm'\"\r\n [class.gog-accordion--xsm]=\"size() === 'xsm'\"\r\n class=\"gog-accordion gog-contained-layout\"\r\n>\r\n @if (loading()) {\r\n @for (row of skeletonRows(); track row) {\r\n <div class=\"gog-accordion__item gog-accordion__item--skeleton\">\r\n <div class=\"gog-accordion__header gog-accordion__header--skeleton\">\r\n <gog-skeleton shape=\"text\" [size]=\"size()\" width=\"55%\" />\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n @for (item of items(); track item.id) {\r\n <div\r\n class=\"gog-accordion__item\"\r\n [class.gog-accordion__item--open]=\"isOpen(item.id)\"\r\n [class.gog-accordion__item--disabled]=\"item.disabled\"\r\n >\r\n <ng-template #headerButton>\r\n <button\r\n [id]=\"uid + '-btn-' + item.id\"\r\n class=\"gog-accordion__header\"\r\n [class.gog-accordion__header--chevronless]=\"!showChevron()\"\r\n [class.gog-accordion__header--open]=\"isOpen(item.id)\"\r\n [attr.aria-expanded]=\"isOpen(item.id)\"\r\n [attr.aria-controls]=\"uid + '-body-' + item.id\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [disabled]=\"item.disabled || null\"\r\n (click)=\"toggle(item)\"\r\n (keydown)=\"onHeaderKeydown($event)\"\r\n type=\"button\"\r\n >\r\n <span class=\"gog-accordion__header-content\">\r\n @if (headerTpl(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tpl.templateRef;\r\n context: { $implicit: item, open: isOpen(item.id) }\r\n \"\r\n />\r\n } @else {\r\n <span class=\"gog-accordion__title\">{{ item.title }}</span>\r\n }\r\n </span>\r\n @if (showChevron()) {\r\n <span\r\n class=\"gog-accordion__chevron\"\r\n [class.gog-accordion__chevron--auto-rotate]=\"!chevronTpl()\"\r\n aria-hidden=\"true\"\r\n >\r\n @if (chevronTpl(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tpl.templateRef;\r\n context: { $implicit: item, open: isOpen(item.id) }\r\n \"\r\n />\r\n } @else {\r\n <gog-icon name=\"chevron-down\" />\r\n }\r\n </span>\r\n }\r\n </button>\r\n </ng-template>\r\n\r\n @if (headingLevel(); as level) {\r\n <div role=\"heading\" [attr.aria-level]=\"level\" class=\"gog-accordion__heading\">\r\n <ng-container [ngTemplateOutlet]=\"headerButton\" />\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"headerButton\" />\r\n }\r\n\r\n <div\r\n [id]=\"uid + '-body-' + item.id\"\r\n class=\"gog-accordion__body\"\r\n [class.gog-accordion__body--open]=\"isOpen(item.id)\"\r\n role=\"region\"\r\n [attr.aria-labelledby]=\"uid + '-btn-' + item.id\"\r\n [attr.aria-hidden]=\"!isOpen(item.id)\"\r\n [attr.inert]=\"!isOpen(item.id) ? '' : null\"\r\n >\r\n <div class=\"gog-accordion__body-inner\">\r\n @if (contentTpl(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { $implicit: item }\" />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n</div>\r\n","import { GogSize } from './types';\n\nexport interface GogCheckableControlSizeConfig {\n readonly boxSize: string;\n readonly labelSize: string;\n readonly indicatorSize: string;\n}\n\nexport const GOG_CHECKABLE_CONTROL_PADDING = 'var(--gog-control-checkbox-padding, 6px)';\n\nexport const GOG_CHECKABLE_CONTROL_SIZE_MAP = {\n xsm: {\n boxSize: 'var(--gog-control-checkbox-box-size-xsm, 12px)',\n labelSize: 'var(--gog-control-checkbox-label-size-xsm, 0.6875rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-xsm, 10px)',\n },\n sm: {\n boxSize: 'var(--gog-control-checkbox-box-size-sm, 18px)',\n labelSize: 'var(--gog-control-checkbox-label-size-sm, 0.8125rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-sm, 12px)',\n },\n md: {\n boxSize: 'var(--gog-control-checkbox-box-size-md, 24px)',\n labelSize: 'var(--gog-control-checkbox-label-size-md, 0.9375rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-md, 14px)',\n },\n lg: {\n boxSize: 'var(--gog-control-checkbox-box-size-lg, 32px)',\n labelSize: 'var(--gog-control-checkbox-label-size-lg, 1.0625rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-lg, 18px)',\n },\n slg: {\n boxSize: 'var(--gog-control-checkbox-box-size-slg, 40px)',\n labelSize: 'var(--gog-control-checkbox-label-size-slg, 1.1875rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-slg, 22px)',\n },\n} as const satisfies Record<GogSize, GogCheckableControlSizeConfig>;\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n forwardRef,\r\n input,\r\n model,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GogSize } from '../../shared/types';\r\nimport {\r\n GOG_CHECKABLE_CONTROL_PADDING,\r\n GOG_CHECKABLE_CONTROL_SIZE_MAP,\r\n} from '../../shared/checkable-control.config';\r\n\r\n@Component({\r\n selector: 'gog-checkbox',\r\n imports: [IconComponent],\r\n templateUrl: './checkbox.component.html',\r\n styleUrl: './checkbox.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.--gog-checkbox-box-size]': 'boxSize()',\r\n '[style.--gog-checkbox-label-size]': 'labelSize()',\r\n '[style.--gog-checkbox-icon-size]': 'iconSize()',\r\n '[style.--gog-checkbox-padding]': 'checkboxPadding',\r\n // Drives the :host(.gog-host--full-width) rules in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect.\r\n '[class.gog-host--full-width]': 'fullWidth()',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CheckboxComponent implements ControlValueAccessor {\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n readonly size = input<GogSize>('md');\r\n readonly indeterminate = input(false);\r\n readonly disabled = input(false);\r\n readonly fullWidth = input(false);\r\n readonly checkIconTemplate = input<TemplateRef<unknown> | null>(null);\r\n\r\n /**\r\n * Two-way bindable checked state: `[(checked)]=\"signal\"`.\r\n * This is the same state Angular Forms drives via `writeValue`/`registerOnChange`\r\n * when the component is used with `formControlName`/`[formControl]`/`ngModel`.\r\n * Don't wire both a form directive AND `[(checked)]` to the same instance —\r\n * pick one, otherwise you end up with two competing sources of truth.\r\n */\r\n readonly checked = model<boolean>(false);\r\n protected readonly controlSize = computed(() => GOG_CHECKABLE_CONTROL_SIZE_MAP[this.size()]);\r\n protected readonly boxSize = computed(() => this.controlSize().boxSize);\r\n protected readonly checkboxPadding = GOG_CHECKABLE_CONTROL_PADDING;\r\n protected readonly labelSize = computed(() => this.controlSize().labelSize);\r\n protected readonly iconSize = computed(() => this.controlSize().indicatorSize);\r\n private readonly cvaDisabled = signal(false);\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n\r\n writeValue(val: boolean): void {\r\n this.checked.set(val ?? false);\r\n }\r\n\r\n registerOnChange(fn: (val: boolean) => void): void {\r\n this.onCheckedChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n onInputChange(event: Event): void {\r\n if (this.isDisabled()) return;\r\n const input = event.target as HTMLInputElement;\r\n const next = input.checked;\r\n this.checked.set(next);\r\n this.onCheckedChange(next);\r\n this.onTouched();\r\n }\r\n\r\n onBlur(): void {\r\n if (this.isDisabled()) return;\r\n this.onTouched();\r\n }\r\n\r\n private onCheckedChange: (val: boolean) => void = () => {};\r\n\r\n private onTouched: () => void = () => {};\r\n}\r\n","<label [class.gog-checkbox--disabled]=\"isDisabled()\" class=\"gog-checkbox gog-contained-layout\">\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInputChange($event)\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : null\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [indeterminate]=\"indeterminate()\"\n class=\"gog-checkbox__input\"\n type=\"checkbox\"\n />\n\n <span\n [class.gog-checkbox__box--checked]=\"checked()\"\n [class.gog-checkbox__box--indeterminate]=\"indeterminate()\"\n class=\"gog-checkbox__box\"\n >\n @if (indeterminate()) {\n <span class=\"gog-checkbox__dash\" aria-hidden=\"true\"></span>\n } @else if (checked()) {\n <gog-icon [template]=\"checkIconTemplate()\" name=\"check\" />\n }\n </span>\n\n @if (label()) {\n <span class=\"gog-checkbox__label\">{{ label() }}</span>\n }\n</label>\n","import { InjectionToken } from '@angular/core';\n\nexport const DIALOG_DATA = new InjectionToken<unknown>('DIALOG_DATA');\nexport interface DialogRef<TResult = unknown> {\n close(result?: TResult): void;\n}\n\nexport const DIALOG_REF = new InjectionToken<DialogRef<unknown>>('DIALOG_REF');\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ButtonComponent } from '../../button/button.component';\nimport { DIALOG_DATA, DIALOG_REF } from '../dialog.tokens';\n\nexport interface ConfirmDialogData {\n title: string;\n description: string;\n confirmText: string;\n cancelText: string;\n}\n\n@Component({\n selector: 'gog-confirmation-dialog',\n imports: [ButtonComponent],\n templateUrl: './confirmation-dialog.component.html',\n styleUrl: './confirmation-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmationDialogComponent {\n private static count = 0;\n\n protected readonly instanceId = ++ConfirmationDialogComponent.count;\n protected readonly data = inject<ConfirmDialogData>(DIALOG_DATA);\n private readonly ref = inject(DIALOG_REF);\n\n protected confirm(): void {\n this.ref.close(true);\n }\n\n protected cancel(): void {\n this.ref.close(false);\n }\n}\n","<div\n class=\"confirm-dialog\"\n [attr.aria-labelledby]=\"'confirm-title-' + instanceId\"\n [attr.aria-describedby]=\"'confirm-desc-' + instanceId\"\n>\n <h3 [id]=\"'confirm-title-' + instanceId\" class=\"confirm-dialog__title heading-md\">\n {{ data.title }}\n </h3>\n <p [id]=\"'confirm-desc-' + instanceId\" class=\"confirm-dialog__description body-sm\">\n {{ data.description }}\n </p>\n <div class=\"confirm-dialog__actions\">\n <gog-button variant=\"ghost\" type=\"button\" (gogClick)=\"cancel()\">{{\n data.cancelText\n }}</gog-button>\n <gog-button variant=\"primary\" type=\"button\" (gogClick)=\"confirm()\">{{\n data.confirmText\n }}</gog-button>\n </div>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, TemplateRef, inject, signal, Type } from '@angular/core';\nimport { GogIconName } from '../../components/icon/icon.component';\n\nexport interface DialogConfig {\n title?: string;\n component: Type<unknown>;\n data?: unknown;\n modal?: boolean;\n closable?: boolean;\n draggable?: boolean;\n closeIconName?: GogIconName;\n closeIconTemplate?: TemplateRef<unknown> | null;\n width?: string;\n maxWidth?: string;\n /** ARIA role for the dialog panel. Use 'alertdialog' for confirmation prompts. Default: 'dialog' */\n role?: 'dialog' | 'alertdialog';\n /** z-index of the dialog backdrop. Dropdowns inside get zIndex+10. Default: 1000 */\n zIndex?: number;\n}\n\nexport interface DialogHandle<TResult = unknown> {\n close(result?: TResult): void;\n readonly afterClosed: Promise<TResult | undefined>;\n}\n\nexport interface OpenDialog {\n id: number;\n zIndex: number;\n offsetX: number;\n offsetY: number;\n config: DialogConfig;\n resolve: (result: unknown) => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n private readonly document = inject(DOCUMENT);\n readonly dialogs = signal<OpenDialog[]>([]);\n private nextId = 0;\n private nextZIndex = 1000;\n private modalDialogCount = 0;\n private bodyOverflowBeforeLock: string | null = null;\n private focusedBeforeOpen: HTMLElement | null = null;\n\n open<TResult = unknown>(config: DialogConfig): DialogHandle<TResult> {\n const id = ++this.nextId;\n const zIndex = config.zIndex ?? this.nextZIndex++;\n this.nextZIndex = Math.max(this.nextZIndex, zIndex + 1);\n\n let resolveAfterClosed!: (result: TResult | undefined) => void;\n\n const afterClosed = new Promise<TResult | undefined>((resolve) => {\n resolveAfterClosed = resolve;\n });\n\n const dialog: OpenDialog = {\n id,\n zIndex,\n offsetX: 0,\n offsetY: 0,\n config,\n resolve: (result) => resolveAfterClosed(result as TResult | undefined),\n };\n\n if (config.modal !== false && this.modalDialogCount === 0) {\n this.focusedBeforeOpen =\n this.document.activeElement instanceof HTMLElement ? this.document.activeElement : null;\n this.lockBodyScroll();\n }\n\n if (config.modal !== false) {\n this.modalDialogCount += 1;\n }\n\n this.dialogs.update((list) => [...list, dialog]);\n\n return {\n close: (result?: TResult) => this.close(dialog, result),\n afterClosed,\n };\n }\n\n close(dialog: OpenDialog, result?: unknown): void {\n if (!this.dialogs().some((entry) => entry.id === dialog.id)) return;\n\n dialog.resolve(result);\n this.dialogs.update((list) => list.filter((entry) => entry.id !== dialog.id));\n\n if (dialog.config.modal !== false) {\n this.modalDialogCount = Math.max(0, this.modalDialogCount - 1);\n }\n\n if (this.modalDialogCount === 0) {\n this.unlockBodyScroll();\n }\n\n if (this.dialogs().length === 0) {\n this.restoreFocus();\n }\n }\n\n closeAll(result?: unknown): void {\n const dialogs = this.dialogs();\n dialogs.forEach((dialog) => dialog.resolve(result));\n this.dialogs.set([]);\n this.modalDialogCount = 0;\n this.unlockBodyScroll();\n this.restoreFocus();\n }\n\n updatePosition(dialogId: number, offsetX: number, offsetY: number): void {\n this.dialogs.update((list) =>\n list.map((dialog) => (dialog.id === dialogId ? { ...dialog, offsetX, offsetY } : dialog)),\n );\n }\n\n private lockBodyScroll(): void {\n if (this.bodyOverflowBeforeLock !== null) return;\n this.bodyOverflowBeforeLock = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private unlockBodyScroll(): void {\n if (this.bodyOverflowBeforeLock === null) return;\n this.document.body.style.overflow = this.bodyOverflowBeforeLock;\n this.bodyOverflowBeforeLock = null;\n }\n\n private restoreFocus(): void {\n const element = this.focusedBeforeOpen;\n this.focusedBeforeOpen = null;\n if (!element || !this.document.contains(element)) return;\n element.focus({ preventScroll: true });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n inject,\n Injector,\n} from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { DIALOG_DATA, DIALOG_REF } from './dialog.tokens';\nimport { DialogService, OpenDialog } from '../../services/dialog-service/dialog.service';\nimport { IconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'gog-dialog',\n imports: [NgComponentOutlet, IconComponent],\n templateUrl: './dialog.component.html',\n styleUrl: './dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DialogComponent {\n protected readonly dialogService = inject(DialogService);\n private readonly parentInjector = inject(Injector);\n private readonly host = inject(ElementRef<HTMLElement>);\n\n private readonly injectorCache = new WeakMap<OpenDialog, Injector>();\n private readonly backdropPress = new Set<number>();\n private readonly focusableSelector = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable=\"true\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n\n constructor() {\n effect(() => {\n const dialogs = this.dialogService.dialogs();\n const openIds = new Set(dialogs.map((dialog) => dialog.id));\n for (const dialogId of this.backdropPress) {\n if (!openIds.has(dialogId)) {\n this.backdropPress.delete(dialogId);\n }\n }\n if (dialogs.length === 0) return;\n queueMicrotask(() => this.focusTopDialog());\n });\n }\n\n protected getInjector(dialog: OpenDialog): Injector {\n if (!this.injectorCache.has(dialog)) {\n this.injectorCache.set(\n dialog,\n Injector.create({\n parent: this.parentInjector,\n providers: [\n { provide: DIALOG_DATA, useValue: dialog.config.data },\n {\n provide: DIALOG_REF,\n useValue: {\n close: (result?: unknown) => this.dialogService.close(dialog, result),\n },\n },\n ],\n }),\n );\n }\n return this.injectorCache.get(dialog)!;\n }\n\n protected getTitleId(dialog: OpenDialog): string {\n return `gog-dialog-title-${dialog.id}`;\n }\n\n protected close(dialog: OpenDialog): void {\n this.backdropPress.delete(dialog.id);\n this.dialogService.close(dialog, undefined);\n }\n\n protected closeIfClosable(dialog: OpenDialog): void {\n if (dialog.config.closable !== false) this.close(dialog);\n }\n\n protected panelZ(dialog: OpenDialog): number {\n return dialog.zIndex;\n }\n\n protected onBackdropPointerDown(event: PointerEvent, dialog: OpenDialog): void {\n if (dialog.config.closable === false) return;\n if (event.target === event.currentTarget) {\n this.backdropPress.add(dialog.id);\n }\n }\n\n protected onBackdropPointerUp(event: PointerEvent, dialog: OpenDialog): void {\n if (dialog.config.closable === false) return;\n const shouldClose = this.backdropPress.has(dialog.id) && event.target === event.currentTarget;\n this.backdropPress.delete(dialog.id);\n if (shouldClose) {\n this.close(dialog);\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent, dialog: OpenDialog, panel: HTMLElement): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeIfClosable(dialog);\n return;\n }\n\n if (dialog.config.modal === false || event.key !== 'Tab') return;\n\n const focusables = this.getFocusableElements(panel);\n if (focusables.length === 0) {\n event.preventDefault();\n panel.focus({ preventScroll: true });\n return;\n }\n\n const currentIndex = focusables.indexOf(this.dialogDocument.activeElement as HTMLElement);\n const lastIndex = focusables.length - 1;\n const nextIndex = event.shiftKey\n ? currentIndex <= 0\n ? lastIndex\n : currentIndex - 1\n : currentIndex === -1 || currentIndex === lastIndex\n ? 0\n : currentIndex + 1;\n\n event.preventDefault();\n focusables[nextIndex].focus({ preventScroll: true });\n }\n\n protected startDrag(event: PointerEvent, dialog: OpenDialog): void {\n if (dialog.config.draggable === false) return;\n if (event.button !== 0) return;\n if ((event.target as HTMLElement | null)?.closest('button')) return;\n\n const startX = event.clientX;\n const startY = event.clientY;\n const initialX = dialog.offsetX;\n const initialY = dialog.offsetY;\n\n const move = (moveEvent: PointerEvent) => {\n this.dialogService.updatePosition(\n dialog.id,\n initialX + (moveEvent.clientX - startX),\n initialY + (moveEvent.clientY - startY),\n );\n };\n\n const stop = () => {\n this.dialogDocument.removeEventListener('pointermove', move);\n this.dialogDocument.removeEventListener('pointerup', stop);\n this.dialogDocument.removeEventListener('pointercancel', stop);\n };\n\n this.dialogDocument.addEventListener('pointermove', move);\n this.dialogDocument.addEventListener('pointerup', stop);\n this.dialogDocument.addEventListener('pointercancel', stop);\n event.preventDefault();\n }\n\n protected trackDialog(_: number, entry: OpenDialog): number {\n return entry.id;\n }\n\n protected isDraggable(dialog: OpenDialog): boolean {\n return (\n dialog.config.draggable !== false &&\n (dialog.config.title !== undefined || dialog.config.closable !== false)\n );\n }\n\n private get dialogDocument(): Document {\n return this.host.nativeElement.ownerDocument;\n }\n\n private focusTopDialog(): void {\n const dialogs = this.dialogService.dialogs();\n const topDialog = dialogs[dialogs.length - 1];\n if (!topDialog) return;\n\n const panel = (this.host.nativeElement as HTMLElement).querySelector(\n `[data-dialog-id=\"${topDialog.id}\"]`,\n ) as HTMLElement | null;\n if (!panel) return;\n\n const focusables = this.getFocusableElements(panel);\n (focusables[0] ?? panel).focus({ preventScroll: true });\n }\n\n private getFocusableElements(panel: HTMLElement): HTMLElement[] {\n return Array.from(panel.querySelectorAll<HTMLElement>(this.focusableSelector)).filter(\n (element) =>\n !element.hasAttribute('disabled') && element.tabIndex !== -1 && this.isVisible(element),\n );\n }\n\n private isVisible(element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n }\n}\n","@for (dialog of dialogService.dialogs(); track trackDialog($index, dialog)) {\n <div\n class=\"gog-dialog__backdrop\"\n [class.gog-dialog__backdrop--modal]=\"dialog.config.modal !== false\"\n [style.z-index]=\"panelZ(dialog)\"\n (pointerdown)=\"onBackdropPointerDown($event, dialog)\"\n (pointerup)=\"onBackdropPointerUp($event, dialog)\"\n (pointercancel)=\"onBackdropPointerUp($event, dialog)\"\n >\n <div\n #panel\n class=\"gog-dialog__panel\"\n [attr.data-dialog-id]=\"dialog.id\"\n [style.--gog-dropdown-z]=\"panelZ(dialog) + 10\"\n [style.--gog-dialog-offset-x]=\"dialog.offsetX + 'px'\"\n [style.--gog-dialog-offset-y]=\"dialog.offsetY + 'px'\"\n [style.width]=\"dialog.config.width ?? 'auto'\"\n [style.max-width]=\"dialog.config.maxWidth ?? '90vw'\"\n [attr.role]=\"dialog.config.role ?? 'dialog'\"\n [attr.aria-modal]=\"dialog.config.modal === false ? null : 'true'\"\n tabindex=\"-1\"\n [attr.aria-labelledby]=\"dialog.config.title ? getTitleId(dialog) : null\"\n (keydown)=\"onPanelKeydown($event, dialog, panel)\"\n >\n @if (dialog.config.title || dialog.config.closable !== false) {\n <div\n class=\"gog-dialog__header\"\n [class.gog-dialog__header--draggable]=\"isDraggable(dialog)\"\n (pointerdown)=\"startDrag($event, dialog)\"\n >\n @if (dialog.config.title) {\n <h2 [id]=\"getTitleId(dialog)\" class=\"gog-dialog__title\">\n {{ dialog.config.title }}\n </h2>\n }\n @if (dialog.config.closable !== false) {\n <button\n type=\"button\"\n class=\"gog-dialog__close gog-inline-center\"\n aria-label=\"Close dialog\"\n (click)=\"close(dialog)\"\n >\n <gog-icon\n [template]=\"dialog.config.closeIconTemplate ?? null\"\n [name]=\"dialog.config.closeIconName ?? 'close'\"\n />\n </button>\n }\n </div>\n }\n\n <div class=\"gog-dialog__body\">\n <ng-container *ngComponentOutlet=\"dialog.config.component; injector: getInjector(dialog)\" />\n </div>\n </div>\n </div>\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ButtonComponent } from '../button/button.component';\nimport { Toast, ToastAction } from '../../services/toast-service/toast-service';\nimport { IconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'gog-toast',\n imports: [ButtonComponent, IconComponent],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.role]': 'ariaRole()',\n '[attr.aria-live]': 'ariaLive()',\n '[attr.aria-atomic]': 'true',\n },\n})\nexport class ToastComponent implements OnDestroy {\n readonly toast = input.required<Toast>();\n /** Whether this toast is the active, front-of-queue toast — only the front toast counts down. */\n readonly isFront = input<boolean>(true);\n readonly dismissed = output<string>();\n\n readonly visible = signal(false);\n readonly isPaused = signal(false);\n private autoDismissTimer: ReturnType<typeof setTimeout> | null = null;\n private startedAt = 0;\n private remainingMs = 0;\n private isClosing = signal(false);\n\n private readonly progressEl = viewChild<ElementRef<HTMLElement>>('progress');\n\n protected readonly hasActions = computed(() => this.toast().actions.length > 0);\n\n protected readonly ariaRole = computed(() =>\n ['error', 'warning'].includes(this.toast().type) ? 'alert' : 'status',\n );\n\n protected readonly ariaLive = computed(() =>\n ['error', 'warning'].includes(this.toast().type) ? 'assertive' : 'polite',\n );\n\n constructor() {\n afterNextRender(() => this.visible.set(true));\n effect((onCleanup) => {\n const toast = this.toast();\n const isFront = this.isFront();\n this.isPaused.set(false);\n this.isClosing.set(false);\n this.clearAutoDismissTimer();\n this.remainingMs = toast.duration;\n\n // Toasts queued behind the front one keep a full, frozen progress bar and don't count\n // down — they only start ticking once they become the front toast.\n if (!toast.isSticky && isFront) {\n this.restartProgressAnimation();\n this.startAutoDismiss(this.remainingMs);\n }\n\n onCleanup(() => this.clearAutoDismissTimer());\n });\n }\n\n ngOnDestroy(): void {\n this.clearAutoDismissTimer();\n }\n\n close(): void {\n if (!this.visible() || this.isClosing()) return;\n this.clearAutoDismissTimer();\n this.isPaused.set(false);\n this.isClosing.set(true);\n this.visible.set(false);\n const id = this.toast().id;\n\n if (this.prefersReducedMotion()) {\n this.isClosing.set(false);\n queueMicrotask(() => this.dismissed.emit(id));\n }\n }\n\n protected pauseAutoDismiss(): void {\n const toast = this.toast();\n if (toast.isSticky || !this.isFront() || this.isPaused() || this.isClosing()) return;\n if (this.autoDismissTimer === null) return;\n\n const elapsed = Date.now() - this.startedAt;\n this.remainingMs = Math.max(0, this.remainingMs - elapsed);\n this.clearAutoDismissTimer();\n this.isPaused.set(true);\n }\n\n protected resumeAutoDismiss(): void {\n const toast = this.toast();\n if (toast.isSticky || !this.isFront() || !this.isPaused() || this.isClosing()) return;\n\n this.isPaused.set(false);\n if (this.remainingMs <= 0) {\n this.close();\n return;\n }\n\n this.startAutoDismiss(this.remainingMs);\n }\n\n protected onTransitionEnd(event: TransitionEvent): void {\n if (!this.isClosing() || event.target !== event.currentTarget) return;\n if (event.propertyName !== 'opacity' && event.propertyName !== 'transform') return;\n\n this.isClosing.set(false);\n this.dismissed.emit(this.toast().id);\n }\n\n protected runAction(action: ToastAction): void {\n action.onClick(this.toast());\n }\n\n private startAutoDismiss(duration: number): void {\n this.clearAutoDismissTimer();\n this.remainingMs = duration;\n this.startedAt = Date.now();\n this.autoDismissTimer = setTimeout(() => {\n this.autoDismissTimer = null;\n this.remainingMs = 0;\n this.close();\n }, duration);\n }\n\n /**\n * Forces the CSS progress-bar animation to restart from full width. Simply updating the\n * `--toast-duration` custom property doesn't retrigger a running `animation`, so the element\n * is briefly detached from the animation and reflowed before being reattached.\n */\n private restartProgressAnimation(): void {\n const el = this.progressEl()?.nativeElement;\n if (!el) return;\n\n el.style.animation = 'none';\n void el.offsetWidth;\n el.style.animation = '';\n }\n\n private clearAutoDismissTimer(): void {\n if (this.autoDismissTimer !== null) {\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n }\n\n private prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n }\n}\n","<div\n class=\"gog-toast\"\n [class.gog-toast--paused]=\"isPaused()\"\n [class.gog-toast--queued]=\"!isFront()\"\n [class.gog-toast--success]=\"toast().type === 'success'\"\n [class.gog-toast--error]=\"toast().type === 'error'\"\n [class.gog-toast--warning]=\"toast().type === 'warning'\"\n [class.gog-toast--info]=\"toast().type === 'info'\"\n [class.gog-toast--visible]=\"visible()\"\n [style.--toast-duration]=\"toast().duration + 'ms'\"\n (mouseenter)=\"pauseAutoDismiss()\"\n (mouseleave)=\"resumeAutoDismiss()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <div class=\"gog-toast__content\">\n <span class=\"gog-toast__icon\" aria-hidden=\"true\">\n <gog-icon [template]=\"toast().iconTemplate ?? null\" [name]=\"toast().iconName\" />\n </span>\n <div class=\"gog-toast__main\">\n <span class=\"gog-toast__message\">{{ toast().message }}</span>\n @if (hasActions()) {\n <div class=\"gog-toast__actions\">\n @for (action of toast().actions; track action.label) {\n <gog-button\n class=\"gog-toast__action\"\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n (gogClick)=\"runAction(action)\"\n >\n @if (action.iconName || action.iconTemplate) {\n <gog-icon\n [template]=\"action.iconTemplate ?? null\"\n [name]=\"action.iconName ?? 'check'\"\n />\n }\n {{ action.label }}\n </gog-button>\n }\n </div>\n }\n </div>\n <gog-button\n class=\"gog-toast__close\"\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"Close toast\"\n (gogClick)=\"close()\"\n >\n <gog-icon name=\"close\" />\n </gog-button>\n </div>\n @if (!toast().isSticky) {\n <span #progress class=\"gog-toast__progress\" aria-hidden=\"true\"></span>\n }\n</div>\n","import { Injectable, TemplateRef, signal } from '@angular/core';\nimport { GogIconName } from '../../components/icon/icon.component';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport interface Toast {\n id: string;\n message: string;\n type: ToastType;\n iconName: GogIconName;\n iconTemplate?: TemplateRef<unknown> | null;\n actions: ToastAction[];\n isSticky: boolean;\n duration: number;\n position: ToastPosition;\n dedupeKey: string;\n revision: number;\n}\n\nexport interface ToastAction {\n label: string;\n onClick: (toast: Toast) => void;\n iconName?: GogIconName;\n iconTemplate?: TemplateRef<unknown> | null;\n}\n\nexport interface ToastConfig {\n message: string;\n type?: ToastType;\n iconName?: GogIconName;\n iconTemplate?: TemplateRef<unknown> | null;\n actions?: ToastAction[];\n dedupeKey?: string;\n isSticky?: boolean;\n duration?: number;\n position?: ToastPosition;\n}\n\nconst DEFAULT_DURATION = 4000;\nconst DEFAULT_POSITION: ToastPosition = 'bottom-right';\n\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n readonly toasts = signal<Toast[]>([]);\n\n private generateId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\n }\n\n show(config: ToastConfig): string {\n const type = config.type ?? 'info';\n const iconName = config.iconName ?? this.defaultIconName(type);\n const actions = config.actions ?? [];\n const dedupeKey =\n config.dedupeKey ??\n this.buildDedupeKey(\n config.message,\n type,\n iconName,\n config.position ?? DEFAULT_POSITION,\n actions,\n config.iconTemplate ?? null,\n );\n\n let createdId = this.generateId();\n\n this.toasts.update((list) => {\n let existingIndex = -1;\n if (dedupeKey) {\n for (let index = list.length - 1; index >= 0; index -= 1) {\n if (list[index].dedupeKey === dedupeKey) {\n existingIndex = index;\n break;\n }\n }\n }\n const nextToast: Toast = {\n id: existingIndex >= 0 ? list[existingIndex].id : createdId,\n message: config.message,\n type,\n iconName,\n iconTemplate: config.iconTemplate ?? null,\n actions,\n isSticky: config.isSticky ?? false,\n duration: config.duration ?? DEFAULT_DURATION,\n position: config.position ?? DEFAULT_POSITION,\n dedupeKey,\n revision: existingIndex >= 0 ? list[existingIndex].revision + 1 : 0,\n };\n\n if (existingIndex >= 0) {\n const next = [...list];\n next[existingIndex] = nextToast;\n createdId = nextToast.id;\n return next;\n }\n\n createdId = nextToast.id;\n return [...list, nextToast];\n });\n\n return createdId;\n }\n\n dismiss(id: string): void {\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n dismissAll(): void {\n this.toasts.set([]);\n }\n\n success(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'success' });\n }\n\n error(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'error' });\n }\n\n warning(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'warning' });\n }\n\n info(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'info' });\n }\n\n private defaultIconName(type: ToastType): GogIconName {\n switch (type) {\n case 'success':\n return 'success';\n case 'error':\n return 'error';\n case 'warning':\n return 'warning';\n default:\n return 'info';\n }\n }\n\n private buildDedupeKey(\n message: string,\n type: ToastType,\n iconName: GogIconName,\n position: ToastPosition,\n actions: ToastAction[],\n iconTemplate: TemplateRef<unknown> | null,\n ): string {\n // Actions carry closures that can't be compared by value, so only their\n // label/icon \"shape\" is used — this lets repeated calls with equivalent\n // actions (e.g. a fresh \"Undo\" callback each time) still dedupe correctly.\n const actionsSignature = actions\n .map((action) => `${action.label}:${action.iconName ?? ''}`)\n .join(',');\n return [\n message,\n type,\n iconName,\n position,\n iconTemplate ? 'template' : 'default',\n actionsSignature,\n ].join('|');\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ToastComponent } from '../toast.component';\nimport { ToastPosition, ToastService } from '../../../services/toast-service/toast-service';\n\nconst POSITIONS: ToastPosition[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\n\n@Component({\n selector: 'gog-toast-container',\n imports: [ToastComponent],\n templateUrl: './toast-container.component.html',\n styleUrl: './toast-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastContainerComponent {\n private readonly toastService = inject(ToastService);\n readonly maxVisiblePerPosition = input(5);\n\n readonly groups = computed(() =>\n POSITIONS.map((position) => ({\n position,\n // Keep the oldest toasts first: they're at the front of the queue (actively ticking),\n // while newer arrivals wait their turn at the back of the visible stack.\n toasts: this.toastService\n .toasts()\n .filter((toast) => toast.position === position)\n .slice(0, Math.max(0, this.maxVisiblePerPosition())),\n })).filter((group) => group.toasts.length > 0),\n );\n\n protected trackGroup(_: number, group: { position: ToastPosition }): ToastPosition {\n return group.position;\n }\n\n protected isLeft(position: ToastPosition): boolean {\n return position.includes('left');\n }\n\n protected trackToast(_: number, toast: { id: string }): string {\n return toast.id;\n }\n\n protected dismiss(id: string): void {\n this.toastService.dismiss(id);\n }\n}\n","@for (group of groups(); track trackGroup($index, group)) {\n <div class=\"gog-toast-container gog-toast-container--{{ group.position }}\">\n @for (toast of group.toasts; track trackToast($index, toast); let toastIndex = $index) {\n <gog-toast\n [toast]=\"toast\"\n [isFront]=\"toastIndex === 0\"\n [class.slide-left]=\"isLeft(group.position)\"\n [style.--toast-stack-index]=\"toastIndex\"\n (dismissed)=\"dismiss($event)\"\n />\n }\n </div>\n}\n","import { Signal, computed, signal } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n/**\n * `'manual'` (default): the field shows `errorMessage` for as long as it is non-empty — the\n * consumer decides when to clear it, e.g.\n * `errorMessage=\"control.invalid && control.touched ? 'Required' : ''\"`.\n *\n * `'auto'`: shown once the attached form control has been touched and is invalid — the\n * consumer only supplies the message text, not the timing. Requires a\n * `[formControl]` / `formControlName` / `ngModel` on the element; without one this falls\n * back to `'manual'`, since there is no control state to key off.\n */\nexport type GogErrorDisplay = 'auto' | 'manual';\n\n/**\n * Shared error-visibility state for the library's form controls. A plain class rather than\n * a base class or directive so it drops into components that can't share a base class\n * (`gog-inputfield`, `gog-slider`) as well as ones that already do (`GogDropdownBase`).\n * Each consumer owns its own instance and wires `check()` into its own `ngDoCheck`.\n */\nexport class GogErrorState {\n private readonly controlTouched = signal(false);\n private readonly controlInvalid = signal(false);\n\n constructor(\n private readonly errorMessage: Signal<string>,\n private readonly errorDisplay: Signal<GogErrorDisplay>,\n private readonly ngControl: NgControl | null,\n ) {}\n\n readonly hasError = computed(() => {\n if (this.errorDisplay() === 'auto' && this.ngControl) {\n return this.controlTouched() && this.controlInvalid();\n }\n return !!this.errorMessage();\n });\n\n readonly visibleError = computed(() => (this.hasError() ? this.errorMessage() : ''));\n\n /**\n * `NgControl` exposes validity as plain properties, and has no change notification for\n * `touched` at all — `statusChanges` fires only on validity transitions, never on\n * `markAsTouched()` — while its `control` does not exist yet during construction, so\n * subscribing early would miss it regardless. Mirroring on each check sidesteps both;\n * re-setting a signal to its current value notifies nothing, so the common case costs two\n * comparisons.\n */\n check(): void {\n const control = this.ngControl?.control;\n if (!control) return;\n\n this.controlTouched.set(control.touched);\n this.controlInvalid.set(control.invalid);\n }\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DoCheck,\r\n inject,\r\n input,\r\n model,\r\n TemplateRef,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogSize } from '../../shared/types';\r\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'gog-inputfield',\r\n imports: [IconComponent],\r\n templateUrl: './inputfield.component.html',\r\n styleUrl: './inputfield.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Drives the :host(.gog-host--auto-width) rule in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect. Inverted from gog-button's\r\n // full-width class: this field is full width by default, so the class only appears\r\n // once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class InputfieldComponent implements ControlValueAccessor, DoCheck {\r\n readonly label = input('');\r\n readonly placeholder = input('');\r\n readonly type = input<'text' | 'password' | 'email'>('text');\r\n /** Defaults to 'current-password' for password fields, 'off' otherwise */\r\n readonly autocomplete = input('');\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n readonly errorDisplay = input<GogErrorDisplay>('manual');\r\n readonly name = input('');\r\n readonly inputId = input('');\r\n readonly disabled = input(false);\r\n readonly size = input<GogSize>('md');\r\n /**\r\n * Full width of the container by default, matching every other field-style control.\r\n * Set to `false` to shrink the field to fit its content instead.\r\n */\r\n readonly fullWidth = input(true);\r\n /** Default icon name for the leading icon. */\r\n readonly iconStart = input<GogIconName | ''>('');\r\n /** Default icon name for the trailing icon. */\r\n readonly iconEnd = input<GogIconName | ''>('');\r\n /** Custom leading icon template. */\r\n readonly iconStartTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Custom trailing icon template. */\r\n readonly iconEndTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** When provided, the start icon becomes a clickable button invoking this fn */\r\n readonly iconStartFn = input<(() => void) | null>(null);\r\n /** When provided, the end icon becomes a clickable button invoking this fn */\r\n readonly iconEndFn = input<(() => void) | null>(null);\r\n /** aria-label for the start icon button (required when iconStartFn is set) */\r\n readonly iconStartLabel = input('');\r\n /** aria-label for the end icon button (required when iconEndFn is set) */\r\n readonly iconEndLabel = input('');\r\n /** aria-label for the reveal-password button, shown when `type` is `'password'` */\r\n readonly showPasswordLabel = input('Show password');\r\n /** aria-label for the hide-password button, shown once the password is revealed */\r\n readonly hidePasswordLabel = input('Hide password');\r\n\r\n /** Two-way bindable value: `[(value)]=\"signal\"` or `[value]` / `(valueChange)`. */\r\n readonly value = model<string>('');\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.errorDisplay,\r\n this.ngControl,\r\n );\r\n private readonly passwordVisible = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly isPasswordField = computed(() => this.type() === 'password');\r\n protected readonly effectiveType = computed(() =>\r\n this.isPasswordField() && this.passwordVisible() ? 'text' : this.type(),\r\n );\r\n protected readonly effectiveAutocomplete = computed(\r\n () => this.autocomplete() || (this.type() === 'password' ? 'current-password' : 'off'),\r\n );\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n protected readonly hasIconStart = computed(\r\n () => !!this.iconStartTemplate() || !!this.iconStart(),\r\n );\r\n protected readonly hasIconStartAction = computed(() => !!this.iconStartFn());\r\n\r\n /** For password fields the trailing icon is always the built-in show/hide toggle. */\r\n protected readonly effectiveIconEnd = computed<GogIconName | ''>(() =>\r\n this.isPasswordField() ? (this.passwordVisible() ? 'eye-off' : 'eye') : this.iconEnd(),\r\n );\r\n protected readonly effectiveIconEndLabel = computed(() =>\r\n this.isPasswordField()\r\n ? this.passwordVisible()\r\n ? this.hidePasswordLabel()\r\n : this.showPasswordLabel()\r\n : this.iconEndLabel(),\r\n );\r\n protected readonly hasIconEnd = computed(\r\n () => !!this.iconEndTemplate() || !!this.effectiveIconEnd(),\r\n );\r\n protected readonly hasIconEndAction = computed(\r\n () => this.isPasswordField() || !!this.iconEndFn(),\r\n );\r\n\r\n private _onChange: (val: string) => void = () => {};\r\n private _onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR keeps `this.ngControl`\r\n // available for `hasError` — providing NG_VALUE_ACCESSOR on the component while also\r\n // injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: string): void {\r\n this.value.set(val ?? '');\r\n }\r\n\r\n registerOnChange(fn: (val: string) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n protected onIconStartClick(): void {\r\n this.iconStartFn()?.();\r\n }\r\n\r\n protected onIconEndClick(): void {\r\n if (this.isPasswordField()) {\r\n this.passwordVisible.update((visible) => !visible);\r\n return;\r\n }\r\n this.iconEndFn()?.();\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this.value.set(input.value);\r\n this._onChange(input.value);\r\n }\r\n\r\n onBlur(): void {\r\n this._onTouched();\r\n }\r\n}\r\n","<div\n class=\"gog-input-wrapper gog-contained-layout\"\n [class.gog-input-wrapper--xsm]=\"size() === 'xsm'\"\n [class.gog-input-wrapper--sm]=\"size() === 'sm'\"\n [class.gog-input-wrapper--lg]=\"size() === 'lg'\"\n [class.gog-input-wrapper--slg]=\"size() === 'slg'\"\n [class.gog-input-wrapper--icon-start]=\"hasIconStart()\"\n [class.gog-input-wrapper--icon-end]=\"hasIconEnd()\"\n>\n @if (label()) {\n <label class=\"gog-input__label\" [attr.for]=\"inputId() || null\">{{ label() }}</label>\n }\n <div class=\"gog-input__field-container\">\n @if (hasIconStart()) {\n @if (hasIconStartAction()) {\n <button\n type=\"button\"\n class=\"gog-input__icon gog-inline-center gog-input__icon--start gog-input__icon--action\"\n [attr.aria-label]=\"iconStartLabel() || null\"\n (click)=\"onIconStartClick()\"\n >\n <gog-icon [template]=\"iconStartTemplate()\" [name]=\"iconStart() || 'check'\" />\n </button>\n } @else {\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--start\" aria-hidden=\"true\">\n <gog-icon [template]=\"iconStartTemplate()\" [name]=\"iconStart() || 'check'\" />\n </span>\n }\n }\n <input\n class=\"gog-input__field\"\n [class.gog-input__field--error]=\"hasError()\"\n [attr.id]=\"inputId() || null\"\n [type]=\"effectiveType()\"\n [attr.name]=\"name() || null\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [autocomplete]=\"effectiveAutocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"hasError() && inputId() ? inputId() + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (hasIconEnd()) {\n @if (hasIconEndAction()) {\n <button\n type=\"button\"\n class=\"gog-input__icon gog-inline-center gog-input__icon--end gog-input__icon--action\"\n [attr.aria-label]=\"effectiveIconEndLabel() || null\"\n (click)=\"onIconEndClick()\"\n >\n <gog-icon [template]=\"iconEndTemplate()\" [name]=\"effectiveIconEnd() || 'check'\" />\n </button>\n } @else {\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--end\" aria-hidden=\"true\">\n <gog-icon [template]=\"iconEndTemplate()\" [name]=\"effectiveIconEnd() || 'check'\" />\n </span>\n }\n }\n </div>\n @if (visibleError()) {\n <span\n class=\"gog-input__error\"\n [attr.id]=\"inputId() ? inputId() + '-error' : null\"\n role=\"alert\"\n >{{ visibleError() }}</span\n >\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\n\r\nimport { type GogIconName, IconComponent } from '../icon/icon.component';\r\nimport { GogSize, GogTagShape } from '../../shared/types';\r\n\r\n@Component({\r\n selector: 'gog-chip',\r\n imports: [IconComponent],\r\n templateUrl: './chip.component.html',\r\n styleUrl: './chip.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class ChipComponent {\r\n readonly size = input<GogSize>('md');\r\n readonly shape = input<GogTagShape>('rounded');\r\n readonly disabled = input(false);\r\n readonly clickable = input(true);\r\n readonly removable = input(false);\r\n readonly fullWidth = input(false);\r\n readonly ariaLabel = input('');\r\n readonly removeAriaLabel = input('Remove chip');\r\n readonly avatarUrl = input<string | null>(null);\r\n readonly avatarAlt = input('');\r\n readonly iconName = input<GogIconName | null>(null);\r\n\r\n readonly gogClick = output<MouseEvent | KeyboardEvent>();\r\n readonly gogRemove = output<void>();\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-chip',\r\n `gog-chip--${this.size()}`,\r\n `gog-chip--${this.shape()}`,\r\n this.removable() ? 'gog-chip--removable' : null,\r\n this.disabled() ? 'gog-chip--disabled' : 'gog-chip--interactive',\r\n this.clickable() ? 'gog-chip--clickable' : null,\r\n this.avatarUrl() ? 'gog-chip--has-avatar' : null,\r\n this.iconName() ? 'gog-chip--has-icon' : null,\r\n this.fullWidth() ? 'gog-host--full-width' : null,\r\n ]\r\n .filter((className): className is string => className !== null)\r\n .join(' '),\r\n );\r\n protected readonly isInteractive = computed(() => this.clickable() && !this.disabled());\r\n\r\n protected onChipClick(event: MouseEvent): void {\r\n if (this.disabled()) return;\r\n this.gogClick.emit(event);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n if (event.key !== 'Enter' && event.key !== ' ') return;\r\n\r\n event.preventDefault();\r\n this.gogClick.emit(event);\r\n }\r\n\r\n protected onRemoveClick(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.gogRemove.emit();\r\n }\r\n}\r\n","<div\n class=\"gog-chip__surface\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.role]=\"isInteractive() ? 'button' : null\"\n [attr.tabindex]=\"isInteractive() ? 0 : null\"\n [style.cursor]=\"isInteractive() ? 'pointer' : 'default'\"\n (click)=\"onChipClick($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n @if (avatarUrl()) {\n <img class=\"gog-chip__avatar\" [src]=\"avatarUrl()\" [alt]=\"avatarAlt()\" />\n }\n\n @if (iconName()) {\n <gog-icon class=\"gog-chip__icon\" [ariaHidden]=\"true\" [name]=\"iconName() ?? 'check'\" />\n }\n\n <span class=\"gog-chip__content\">\n <ng-content></ng-content>\n </span>\n\n @if (removable() && !disabled()) {\n <button\n class=\"gog-chip__remove\"\n type=\"button\"\n [attr.aria-label]=\"removeAriaLabel()\"\n (click)=\"onRemoveClick($event)\"\n >\n <gog-icon name=\"close\" />\n </button>\n }\n</div>\n","import { TemplateRef, ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\n\r\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\r\nimport { GogSize, GogTagVariant } from '../../shared/types';\r\nimport { GogTagShape } from '../../shared/types';\r\n\r\n@Component({\r\n selector: 'gog-tag',\r\n imports: [IconComponent],\r\n templateUrl: './tag.component.html',\r\n styleUrl: './tag.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class TagComponent {\r\n readonly variant = input<GogTagVariant>('info');\r\n readonly size = input<GogSize>('md');\r\n readonly shape = input<GogTagShape>('rounded');\r\n readonly iconName = input<GogIconName | null>(null);\r\n readonly iconTemplate = input<TemplateRef<unknown> | null>(null);\r\n readonly fullWidth = input(false);\r\n\r\n protected readonly hasIcon = computed(\r\n () => this.iconTemplate() !== null || this.iconName() !== null,\r\n );\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-tag',\r\n `gog-tag--${this.variant()}`,\r\n `gog-tag--${this.size()}`,\r\n `gog-tag--${this.shape()}`,\r\n this.hasIcon() ? 'gog-tag--has-icon' : null,\r\n this.fullWidth() ? 'gog-host--full-width' : null,\r\n ]\r\n .filter((className): className is string => className !== null)\r\n .join(' '),\r\n );\r\n}\r\n","@if (hasIcon()) {\n <gog-icon\n class=\"gog-tag__icon\"\n [ariaHidden]=\"true\"\n [name]=\"iconName() ?? 'info'\"\n [template]=\"iconTemplate()\"\n />\n}\n\n<span class=\"gog-tag__content\">\n <ng-content></ng-content>\n</span>\n","import { ApplicationRef, EmbeddedViewRef, TemplateRef } from '@angular/core';\n\n/**\n * Renders a template into `document.body` while keeping it wired to the declaring\n * component: the view is stamped with that component's style encapsulation and reads\n * its signals directly.\n *\n * That is the whole point of doing it this way rather than with a second, portal-only\n * component: one `<ng-template>` can serve both the inline and the appended-to-body\n * dropdown, so the option markup exists once and cannot drift between the two modes,\n * and selection state needs no manual field-syncing to stay in step.\n */\nexport class GogDropdownOverlay {\n private hostEl: HTMLElement | null = null;\n private viewRef: EmbeddedViewRef<unknown> | null = null;\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly document: Document,\n ) {}\n\n /** The `<body>` child holding the rendered panel, or null while detached. */\n get hostElement(): HTMLElement | null {\n return this.hostEl;\n }\n\n get isAttached(): boolean {\n return this.viewRef !== null;\n }\n\n attach(template: TemplateRef<unknown>, themeSource: Element | null = null): void {\n this.detach();\n\n this.hostEl = this.document.createElement('div');\n this.hostEl.classList.add('gog-overlay-host');\n\n // `data-theme` can be scoped to any subtree, not just `:root` (see the themes\n // showcase page), so the host has to copy it from wherever the trigger actually\n // sits rather than assume the document-wide theme applies.\n const themedAncestor = themeSource?.closest('[data-theme]');\n const theme = themedAncestor?.getAttribute('data-theme');\n if (theme) {\n this.hostEl.setAttribute('data-theme', theme);\n }\n\n this.document.body.appendChild(this.hostEl);\n\n this.viewRef = template.createEmbeddedView({});\n // Attached as its own change-detection root so signal reads inside the panel still\n // mark it dirty even though its DOM no longer sits under the declaring component.\n this.appRef.attachView(this.viewRef);\n\n for (const node of this.viewRef.rootNodes as Node[]) {\n this.hostEl.appendChild(node);\n }\n\n this.viewRef.detectChanges();\n }\n\n detach(): void {\n if (this.viewRef) {\n this.appRef.detachView(this.viewRef);\n this.viewRef.destroy();\n this.viewRef = null;\n }\n\n this.hostEl?.remove();\n this.hostEl = null;\n }\n}\n","export type GogDropdownDirection = 'auto' | 'up' | 'down';\n\nexport interface GogDropdownTriggerRect {\n top: number;\n bottom: number;\n left: number;\n width: number;\n}\n\nexport interface GogDropdownPlacement {\n direction: 'up' | 'down';\n top: number;\n left: number;\n width: number;\n maxHeight: number;\n}\n\nconst DEFAULT_GAP = 8;\nconst DEFAULT_VIEWPORT_PADDING = 8;\n\nexport function resolveDropdownDirection(\n direction: GogDropdownDirection,\n triggerRect: GogDropdownTriggerRect,\n panelHeight: number,\n viewportHeight: number,\n gap = DEFAULT_GAP,\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\n): 'up' | 'down' {\n if (direction !== 'auto') {\n return direction;\n }\n\n const spaceAbove = Math.max(0, triggerRect.top - gap - viewportPadding);\n const spaceBelow = Math.max(0, viewportHeight - triggerRect.bottom - gap - viewportPadding);\n\n if (spaceBelow >= panelHeight && spaceAbove < panelHeight) {\n return 'down';\n }\n\n if (spaceAbove >= panelHeight && spaceBelow < panelHeight) {\n return 'up';\n }\n\n return spaceBelow >= spaceAbove ? 'down' : 'up';\n}\n\nexport function resolveDropdownPlacement(\n direction: GogDropdownDirection,\n triggerRect: GogDropdownTriggerRect,\n panelHeight: number,\n viewportHeight: number,\n gap = DEFAULT_GAP,\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\n): GogDropdownPlacement {\n const resolvedDirection = resolveDropdownDirection(\n direction,\n triggerRect,\n panelHeight,\n viewportHeight,\n gap,\n viewportPadding,\n );\n\n if (resolvedDirection === 'up') {\n const availableSpace = Math.max(0, triggerRect.top - gap - viewportPadding);\n const actualHeight = Math.min(panelHeight, availableSpace || panelHeight);\n return {\n direction: resolvedDirection,\n top: Math.max(viewportPadding, triggerRect.top - gap - actualHeight),\n left: triggerRect.left,\n width: triggerRect.width,\n // Must match actualHeight, not availableSpace: `top` above was computed assuming\n // the panel is actualHeight tall, so this is what goes into the panel's CSS\n // max-height too. Returning the full availableSpace here let real content taller\n // than actualHeight (but still under availableSpace) render past its computed\n // top and cover the trigger it's supposed to sit above.\n maxHeight: actualHeight,\n };\n }\n\n const maxHeight = Math.max(0, viewportHeight - triggerRect.bottom - gap - viewportPadding);\n return {\n direction: resolvedDirection,\n top: triggerRect.bottom + gap,\n left: triggerRect.left,\n width: triggerRect.width,\n maxHeight,\n };\n}\n\n/**\n * Resolves a CSS length to pixels for the placement math. Only `px`, `%` and `vh` can be\n * resolved without laying out the DOM — `%` and `vh` are taken relative to the viewport\n * height, which is exactly what a `position: fixed` panel's height resolves against in CSS.\n * Any other unit (`rem`, `em`, `auto`, a bare number, …) returns null: the caller falls back\n * to its own estimate for the up/down decision, while the original string is still written\n * to the panel's `style.max-height` as-is — only the direction heuristic loses precision.\n */\nexport function resolveCssLengthPx(value: string, viewportHeight: number): number | null {\n const match = /^(-?[\\d.]+)(px|%|vh)$/.exec(value.trim());\n if (!match) return null;\n\n const amount = Number.parseFloat(match[1]);\n if (!Number.isFinite(amount)) return null;\n\n return match[2] === 'px' ? amount : (amount / 100) * viewportHeight;\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n DestroyRef,\r\n Directive,\r\n DoCheck,\r\n ElementRef,\r\n ModelSignal,\r\n PLATFORM_ID,\r\n Signal,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogDropdownOverlay } from './dropdown-overlay';\r\nimport {\r\n type GogDropdownDirection,\r\n type GogDropdownPlacement,\r\n type GogDropdownTriggerRect,\r\n resolveCssLengthPx,\r\n resolveDropdownPlacement,\r\n} from './dropdown-position';\r\nimport { GogErrorState, type GogErrorDisplay } from './error-state';\r\nimport { handleRovingFocusKeydown } from './roving-focus';\r\nimport { GogSize } from './types';\r\n\r\n/** A single choice in any of the listbox-style controls (`gog-select`, `gog-multiselect`). */\r\nexport interface GogDropdownOption {\r\n id: string | number;\r\n name: string;\r\n disabled?: boolean;\r\n}\r\n\r\n/** Gap between the trigger and the panel. */\r\nconst PANEL_GAP = 2;\r\n/** Smallest allowed gap between the panel and the viewport edge. */\r\nconst VIEWPORT_PADDING = 8;\r\n/** Used only if a subclass's `panelMaxHeightToken` isn't declared anywhere in the cascade. */\r\nconst FALLBACK_MAX_PANEL_HEIGHT = 260;\r\n/** Used only if a subclass's `optionHeightToken` isn't declared anywhere in the cascade. */\r\nconst FALLBACK_OPTION_HEIGHT = 40;\r\n/** Must match the `var(--gog-dropdown-z, …)` fallback in the component stylesheets. */\r\nconst DEFAULT_PANEL_Z_INDEX = 300;\r\n\r\n/**\r\n * Shared behaviour for the listbox-style controls: open/close, placement, the\r\n * append-to-body overlay, click-outside, keyboard navigation and `ControlValueAccessor`\r\n * plumbing. Subclasses supply only what actually differs — the value type, the panel\r\n * markup, and the BEM class names used to find the trigger and the options.\r\n *\r\n * Exported because it appears in the public type signatures of the components that\r\n * extend it; it is not meant to be used or subclassed by consumers.\r\n */\r\n@Directive({\r\n host: {\r\n // Drives the :host(.gog-host--auto-width) rules in each subclass's stylesheet —\r\n // without this binding the `fullWidth` input has no visible effect. Inverted from\r\n // gog-button's full-width class: these controls are full width by default, so the\r\n // class only appears once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport abstract class GogDropdownBase<TValue> implements ControlValueAccessor, DoCheck {\r\n private static nextUid = 0;\r\n\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n readonly placeholder = input('Select...');\r\n readonly options = input<GogDropdownOption[]>([]);\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n readonly errorDisplay = input<GogErrorDisplay>('manual');\r\n readonly size = input<GogSize>('md');\r\n readonly dropdownDirection = input<GogDropdownDirection>('auto');\r\n /**\r\n * Explicit stacking order for the panel. Left unset the panel falls back to the\r\n * stylesheet's `--gog-dropdown-z`, so the default lives in CSS where a consumer can\r\n * retheme it, rather than being baked into the component.\r\n */\r\n readonly dropdownZIndex = input<number | null>(null);\r\n /**\r\n * Fixed panel width as any CSS length (`'320px'`, `'40ch'`, `'100%'`, …), applied only\r\n * when `appendToBody` is set. Left unset the panel matches the trigger's width, same as\r\n * the inline panel already does via CSS.\r\n */\r\n readonly dropdownWidth = input<string | null>(null);\r\n /**\r\n * Fixed panel max-height as any CSS length, applied only when `appendToBody` is set.\r\n * `px`, `%` and `vh` also feed the up/down placement math (see `resolveCssLengthPx`); any\r\n * other unit still renders correctly but is invisible to that heuristic, so the panel may\r\n * pick the \"wrong\" side close to a viewport edge. Left unset the panel keeps the existing\r\n * viewport-derived, auto-flipping height.\r\n */\r\n readonly dropdownMaxHeight = input<string | null>(null);\r\n readonly appendToBody = input(false);\r\n readonly disabled = input(false);\r\n readonly chevronTemplate = input<TemplateRef<unknown> | null>(null);\r\n /**\r\n * Full width of the container by default, matching every other field-style control.\r\n * Set to `false` to shrink the trigger to fit its selected label instead.\r\n */\r\n readonly fullWidth = input(true);\r\n\r\n readonly isOpen = signal(false);\r\n\r\n /** The `<ng-template>` holding the panel markup, rendered inline or into `<body>`. */\r\n protected abstract readonly panelTemplate: Signal<TemplateRef<unknown> | undefined>;\r\n /** Declared by the subclass so each control keeps its own value type. */\r\n protected abstract readonly value: ModelSignal<TValue>;\r\n /** Value applied when a form writes `null` / the control is reset. */\r\n protected abstract readonly emptyValue: TValue;\r\n /** BEM class of one option button, used to collect keyboard-navigable elements. */\r\n protected abstract readonly optionClass: string;\r\n /** BEM class of the focusable trigger. */\r\n protected abstract readonly triggerClass: string;\r\n /**\r\n * Spacing tokens feeding the height estimate. Overridable so each control keeps the\r\n * `--gog-<block>-*` names it already exposes to consumers for theming.\r\n */\r\n protected readonly optionGapToken: string = '--gog-dropdown-option-gap';\r\n protected readonly optionsPaddingToken: string = '--gog-dropdown-options-padding';\r\n /** Keep in sync with the real `max-height` on the subclass's `__dropdown` block. */\r\n protected readonly panelMaxHeightToken: string = '--gog-dropdown-panel-max-height';\r\n /** Estimated row height fed into the placement math; not a real layout property. */\r\n protected readonly optionHeightToken: string = '--gog-dropdown-option-height';\r\n\r\n /** Unique per-instance suffix, so several dropdowns on a page can't collide on DOM ids. */\r\n protected readonly uid = ++GogDropdownBase.nextUid;\r\n\r\n protected readonly elRef = inject(ElementRef<HTMLElement>);\r\n protected readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly document = inject(DOCUMENT);\r\n private readonly appRef = inject(ApplicationRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly overlay = new GogDropdownOverlay(this.appRef, this.document);\r\n\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.errorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly dropdownDirectionState = signal<'up' | 'down'>('down');\r\n protected readonly panelPlacement = signal<GogDropdownPlacement | null>(null);\r\n /**\r\n * Stacking order to write onto the panel, or null to leave it to the stylesheet.\r\n *\r\n * Only needed when appending to `<body>`: an inline panel inherits `--gog-dropdown-z` from\r\n * its surroundings — which is how a dropdown inside a dialog ends up above the dialog —\r\n * but an appended one sits outside that subtree and inherits nothing, so the value has\r\n * to be resolved from the trigger and written out explicitly.\r\n */\r\n protected readonly panelZIndex = signal<number | null>(null);\r\n\r\n /** `dropdownWidth`, or the trigger-derived width from `panelPlacement`, as a CSS value. */\r\n protected readonly resolvedPanelWidth = computed(() => {\r\n const width = this.panelPlacement()?.width;\r\n return this.dropdownWidth() ?? (width != null ? `${width}px` : null);\r\n });\r\n /** `dropdownMaxHeight`, or the viewport-derived max-height from `panelPlacement`. */\r\n protected readonly resolvedPanelMaxHeight = computed(() => {\r\n const maxHeight = this.panelPlacement()?.maxHeight;\r\n return this.dropdownMaxHeight() ?? (maxHeight != null ? `${maxHeight}px` : null);\r\n });\r\n\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n\r\n /** Measured once per open rather than per scroll tick — see `refreshPanelMetrics`. */\r\n private optionGap = 0;\r\n private optionsPadding = 0;\r\n private maxPanelHeight = FALLBACK_MAX_PANEL_HEIGHT;\r\n private optionHeight = FALLBACK_OPTION_HEIGHT;\r\n private repositionFrame: number | null = null;\r\n\r\n private onChangeFn: (val: TValue) => void = () => {};\r\n private onTouchedFn: () => void = () => {};\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR keeps `this.ngControl`\r\n // available for `hasError` — providing NG_VALUE_ACCESSOR on the component while also\r\n // injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n this.destroyRef.onDestroy(() => this.overlay.detach());\r\n this.bindWhileOpen();\r\n }\r\n\r\n /**\r\n * Binds the click-outside and reposition listeners only for as long as the panel is\r\n * open. Bound permanently — as host listeners were — every dropdown on the page runs a\r\n * handler on every document click and every scroll frame, whether or not it is showing\r\n * anything.\r\n */\r\n private bindWhileOpen(): void {\r\n effect((onCleanup) => {\r\n if (!this.isOpen() || !this.isBrowser) return;\r\n\r\n const onDocumentClick = (event: MouseEvent) => this.closeIfClickedOutside(event);\r\n const onReflow = () => this.scheduleReposition();\r\n\r\n // Capture phase: scroll does not bubble, so a bubble-phase listener on window would\r\n // miss scrolling inside a nested container — which is exactly the case appendToBody\r\n // exists for. Passive: these handlers never call preventDefault.\r\n this.document.addEventListener('click', onDocumentClick);\r\n window.addEventListener('scroll', onReflow, { passive: true, capture: true });\r\n window.addEventListener('resize', onReflow, { passive: true });\r\n\r\n onCleanup(() => {\r\n this.document.removeEventListener('click', onDocumentClick);\r\n window.removeEventListener('scroll', onReflow, { capture: true });\r\n window.removeEventListener('resize', onReflow);\r\n\r\n if (this.repositionFrame !== null) {\r\n cancelAnimationFrame(this.repositionFrame);\r\n this.repositionFrame = null;\r\n }\r\n });\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: TValue | null): void {\r\n this.value.set(val ?? this.emptyValue);\r\n }\r\n\r\n registerOnChange(fn: (val: TValue) => void): void {\r\n this.onChangeFn = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouchedFn = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n if (isDisabled) {\r\n this.close();\r\n }\r\n }\r\n\r\n protected toggle(): void {\r\n if (this.isDisabled()) return;\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n protected open(): void {\r\n if (this.isDisabled() || this.isOpen()) return;\r\n\r\n this.isOpen.set(true);\r\n this.refreshPanelMetrics();\r\n this.updatePlacement();\r\n\r\n if (this.appendToBody()) {\r\n this.attachOverlay();\r\n }\r\n }\r\n\r\n protected close(): void {\r\n if (!this.isOpen()) return;\r\n\r\n this.isOpen.set(false);\r\n this.overlay.detach();\r\n // Closing is this control's equivalent of a blur, which is when a form control is\r\n // conventionally considered touched.\r\n this.markTouched();\r\n }\r\n\r\n /** Writes a new selection out to both the model and the attached form control. */\r\n protected commitValue(next: TValue): void {\r\n this.value.set(next);\r\n this.onChangeFn(next);\r\n this.markTouched();\r\n }\r\n\r\n protected markTouched(): void {\r\n this.onTouchedFn();\r\n }\r\n\r\n private closeIfClickedOutside(event: MouseEvent): void {\r\n const target = event.target as Node | null;\r\n if (!target) return;\r\n\r\n const inside =\r\n this.elRef.nativeElement.contains(target) ||\r\n (this.overlay.hostElement?.contains(target) ?? false);\r\n\r\n if (!inside) {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Coalesces bursts of scroll/resize events into one reposition per frame. Placement\r\n * reads layout, so running it per event is what makes a scroll janky.\r\n */\r\n private scheduleReposition(): void {\r\n if (this.repositionFrame !== null) return;\r\n\r\n this.repositionFrame = requestAnimationFrame(() => {\r\n this.repositionFrame = null;\r\n if (this.isOpen()) {\r\n this.updatePlacement();\r\n }\r\n });\r\n }\r\n\r\n /** Jumps from the trigger into the option list on ArrowDown/ArrowUp while open. */\r\n protected onTriggerArrowKeydown(event: Event): void {\r\n if (!this.isOpen()) return;\r\n event.preventDefault();\r\n\r\n const options = this.enabledOptionElements();\r\n if (options.length === 0) return;\r\n\r\n const index = (event as KeyboardEvent).key === 'ArrowUp' ? options.length - 1 : 0;\r\n options[index]?.focus();\r\n }\r\n\r\n protected onOptionKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n this.focusTrigger();\r\n return;\r\n }\r\n\r\n if (event.key === 'Tab') {\r\n // Deliberately not prevented: closing and handing focus back to the trigger lets\r\n // the browser's own Tab handling continue from there, so focus lands on whatever\r\n // follows the control. Without this, tabbing out of an appended panel would jump\r\n // to the end of the document, since that is where the panel's DOM lives.\r\n this.close();\r\n this.focusTrigger();\r\n return;\r\n }\r\n\r\n handleRovingFocusKeydown(event, this.enabledOptionElements());\r\n }\r\n\r\n protected focusTrigger(): void {\r\n (this.elRef.nativeElement as HTMLElement)\r\n .querySelector<HTMLElement>(`.${this.triggerClass}`)\r\n ?.focus();\r\n }\r\n\r\n /** Extra chrome stacked above the options (e.g. a select-all row), in px. */\r\n protected extraPanelHeight(): number {\r\n return 0;\r\n }\r\n\r\n private enabledOptionElements(): HTMLButtonElement[] {\r\n const scope = this.overlay.hostElement ?? (this.elRef.nativeElement as HTMLElement);\r\n return Array.from(\r\n scope.querySelectorAll<HTMLButtonElement>(`.${this.optionClass}:not([aria-disabled=\"true\"])`),\r\n );\r\n }\r\n\r\n private attachOverlay(): void {\r\n if (!this.isBrowser) return;\r\n\r\n const template = this.panelTemplate();\r\n if (!template) return;\r\n\r\n this.overlay.attach(template, this.elRef.nativeElement);\r\n }\r\n\r\n /**\r\n * Reads the spacing tokens that feed the height estimate. Done once per open instead of\r\n * on every scroll tick, because `getComputedStyle` forces a style recalculation and the\r\n * tokens cannot change while the panel is on screen.\r\n */\r\n private refreshPanelMetrics(): void {\r\n if (!this.isBrowser) {\r\n this.optionGap = 0;\r\n this.optionsPadding = 0;\r\n this.maxPanelHeight = FALLBACK_MAX_PANEL_HEIGHT;\r\n this.optionHeight = FALLBACK_OPTION_HEIGHT;\r\n this.panelZIndex.set(null);\r\n return;\r\n }\r\n\r\n const styles = getComputedStyle(this.elRef.nativeElement);\r\n this.optionGap = readPx(styles.getPropertyValue(this.optionGapToken), 0);\r\n this.optionsPadding = readPx(styles.getPropertyValue(this.optionsPaddingToken), 0);\r\n this.maxPanelHeight = readPx(\r\n styles.getPropertyValue(this.panelMaxHeightToken),\r\n FALLBACK_MAX_PANEL_HEIGHT,\r\n );\r\n this.optionHeight = readPx(\r\n styles.getPropertyValue(this.optionHeightToken),\r\n FALLBACK_OPTION_HEIGHT,\r\n );\r\n this.panelZIndex.set(this.appendToBody() ? this.resolvePanelZIndex(styles) : null);\r\n }\r\n\r\n /**\r\n * Rough height, used only to choose up/down and to cap `max-height` before the panel\r\n * has been laid out. Deliberately an estimate: measuring would require rendering the\r\n * panel first, which is what we are trying to position. A resolvable `dropdownMaxHeight`\r\n * replaces the row-count guess outright, since it is exact rather than estimated.\r\n */\r\n private estimatePanelHeight(): number {\r\n const custom = this.dropdownMaxHeight();\r\n if (custom) {\r\n const resolved = resolveCssLengthPx(custom, window.innerHeight);\r\n if (resolved !== null) return resolved;\r\n }\r\n\r\n const count = Math.max(this.options().length, 1);\r\n const rows = count * this.optionHeight + Math.max(count - 1, 0) * this.optionGap;\r\n return Math.min(rows + this.optionsPadding * 2 + this.extraPanelHeight(), this.maxPanelHeight);\r\n }\r\n\r\n /**\r\n * The trigger's own rect, not the whole component's — a label above it or an error\r\n * message below it sit in normal document flow and are not part of what the panel needs\r\n * to clear. This also keeps `appendToBody` placement consistent with the inline panel,\r\n * which is already positioned purely relative to the trigger via CSS.\r\n */\r\n private triggerRect(): GogDropdownTriggerRect {\r\n const host = this.elRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector<HTMLElement>(`.${this.triggerClass}`) ?? host;\r\n return trigger.getBoundingClientRect();\r\n }\r\n\r\n /** The stacking order the panel would have had if it were still inside the subtree. */\r\n private resolvePanelZIndex(triggerStyles: CSSStyleDeclaration): number {\r\n const inherited = triggerStyles.getPropertyValue('--gog-dropdown-z').trim();\r\n if (inherited) {\r\n return readPx(inherited, DEFAULT_PANEL_Z_INDEX);\r\n }\r\n\r\n // Not every DOM implementation resolves inherited custom properties through\r\n // getComputedStyle (jsdom does not), so also look for an inline declaration up the\r\n // tree — which is exactly how gog-dialog hands its stacking order to nested dropdowns.\r\n for (let el: HTMLElement | null = this.elRef.nativeElement; el; el = el.parentElement) {\r\n const declared = el.style.getPropertyValue('--gog-dropdown-z').trim();\r\n if (declared) {\r\n return readPx(declared, DEFAULT_PANEL_Z_INDEX);\r\n }\r\n }\r\n\r\n return DEFAULT_PANEL_Z_INDEX;\r\n }\r\n\r\n private updatePlacement(): void {\r\n if (!this.isBrowser) return;\r\n\r\n const placement = resolveDropdownPlacement(\r\n this.dropdownDirection(),\r\n this.triggerRect(),\r\n this.estimatePanelHeight(),\r\n window.innerHeight,\r\n PANEL_GAP,\r\n VIEWPORT_PADDING,\r\n );\r\n\r\n this.dropdownDirectionState.set(placement.direction);\r\n this.panelPlacement.set(placement);\r\n }\r\n}\r\n\r\nfunction readPx(raw: string, fallback: number): number {\r\n const parsed = Number.parseFloat(raw.trim());\r\n return Number.isFinite(parsed) ? parsed : fallback;\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n computed,\n input,\n model,\n viewChild,\n} from '@angular/core';\n\nimport { GogDropdownBase, type GogDropdownOption } from '../../shared/dropdown-base';\nimport { IconComponent } from '../icon/icon.component';\n\n/** @deprecated Prefer `GogDropdownOption`; kept as an alias so existing imports keep working. */\nexport type GogSelectOption = GogDropdownOption;\n\n@Component({\n selector: 'gog-select',\n imports: [IconComponent, NgTemplateOutlet],\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent extends GogDropdownBase<string | number | null> {\n readonly inputId = input('');\n\n /** Two-way bindable selected value: `[(value)]=\"signal\"`. */\n readonly value = model<string | number | null>(null);\n\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\n protected readonly emptyValue = null;\n protected readonly optionClass = 'gog-select__option';\n protected readonly triggerClass = 'gog-select__control';\n protected override readonly optionGapToken = '--gog-select-option-gap';\n protected override readonly panelMaxHeightToken = '--gog-select-panel-max-height';\n protected override readonly optionHeightToken = '--gog-select-option-height';\n\n protected readonly triggerId = computed(() => this.inputId() || `gog-select-${this.uid}`);\n protected readonly listboxId = computed(() => `${this.triggerId()}-listbox`);\n protected readonly labelId = computed(() => `${this.triggerId()}-label`);\n protected readonly errorId = computed(() =>\n this.hasError() ? `${this.triggerId()}-error` : null,\n );\n\n protected readonly selectedOption = computed(\n () => this.options().find((option) => String(option.id) === String(this.value())) ?? null,\n );\n\n protected isSelected(id: string | number): boolean {\n return this.selectedOption()?.id === id;\n }\n\n protected selectOption(option: GogDropdownOption, event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (option.disabled) return;\n\n this.commitValue(option.id);\n this.close();\n }\n}\n","<!--\n Deliberately not `gog-contained-layout`: `contain: layout` makes this element a stacking\n context, which traps the panel's z-index inside it and lets whatever follows on the page\n paint over the open dropdown.\n-->\n<div\n class=\"gog-select\"\n [class.gog-select--disabled]=\"isDisabled()\"\n [class.gog-select--open]=\"isOpen()\"\n [class.gog-select--xsm]=\"size() === 'xsm'\"\n [class.gog-select--sm]=\"size() === 'sm'\"\n [class.gog-select--lg]=\"size() === 'lg'\"\n [class.gog-select--slg]=\"size() === 'slg'\"\n>\n <!--\n Associated with aria-labelledby rather than `for`: the trigger is a <button>, which is\n not a labelable element, so `for` pointing at it is silently ignored by browsers and\n assistive tech alike.\n -->\n @if (label()) {\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -- associated via aria-labelledby above instead, see comment -->\n <label class=\"gog-select__label\" [id]=\"labelId()\">{{ label() }}</label>\n }\n\n <div class=\"gog-select__field\">\n <button\n type=\"button\"\n class=\"gog-select__control\"\n [id]=\"triggerId()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || placeholder() || 'Select'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"errorId()\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle(); $event.preventDefault()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (keydown.escape)=\"close()\"\n (keydown.arrowdown)=\"onTriggerArrowKeydown($event)\"\n (keydown.arrowup)=\"onTriggerArrowKeydown($event)\"\n >\n <span class=\"gog-select__value\" [class.gog-select__value--placeholder]=\"!selectedOption()\">\n {{ selectedOption()?.name || placeholder() }}\n </span>\n\n <span class=\"gog-select__chevron\" aria-hidden=\"true\">\n <gog-icon [template]=\"chevronTemplate()\" name=\"chevron-down\" />\n </span>\n </button>\n\n @if (isOpen() && !appendToBody()) {\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\n }\n </div>\n\n @if (hasError()) {\n <span class=\"gog-select__error\" [attr.id]=\"errorId()\" role=\"alert\">\n {{ visibleError() }}\n </span>\n }\n</div>\n\n<!--\n One template for both render modes. When `appendToBody` is set it is stamped into\n <body> by the overlay, which is why the portal-only modifier and the resolved\n coordinates are applied conditionally: outside the component's subtree the panel can\n no longer inherit the size tokens from the `.gog-select--sm/--lg` wrapper.\n-->\n<ng-template #panelTpl>\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- (click) below is housekeeping stopPropagation, not an interactive handler; the focusable/keyboard-operable elements are the options inside -->\n <div\n [id]=\"listboxId()\"\n class=\"gog-select__dropdown\"\n [class.gog-select__dropdown--up]=\"!appendToBody() && dropdownDirectionState() === 'up'\"\n [class.gog-select__dropdown--portal]=\"appendToBody()\"\n [class.gog-select__dropdown--xsm]=\"appendToBody() && size() === 'xsm'\"\n [class.gog-select__dropdown--sm]=\"appendToBody() && size() === 'sm'\"\n [class.gog-select__dropdown--lg]=\"appendToBody() && size() === 'lg'\"\n [class.gog-select__dropdown--slg]=\"appendToBody() && size() === 'slg'\"\n [style.top.px]=\"appendToBody() ? panelPlacement()?.top : null\"\n [style.left.px]=\"appendToBody() ? panelPlacement()?.left : null\"\n [style.width]=\"appendToBody() ? resolvedPanelWidth() : null\"\n [style.max-height]=\"appendToBody() ? resolvedPanelMaxHeight() : null\"\n [style.z-index]=\"dropdownZIndex() ?? panelZIndex()\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (option of options(); track option.id) {\n <!--\n tabindex=\"-1\" keeps the list to a single tab stop, as the listbox pattern expects:\n focus is moved between options with the arrow keys, not by tabbing through every\n one of them. Programmatic .focus() still works on a negative tabindex.\n -->\n <button\n type=\"button\"\n class=\"gog-select__option\"\n role=\"option\"\n tabindex=\"-1\"\n [attr.aria-selected]=\"isSelected(option.id)\"\n [attr.aria-disabled]=\"option.disabled ?? false\"\n [class.gog-select__option--selected]=\"isSelected(option.id)\"\n [class.gog-select__option--disabled]=\"option.disabled ?? false\"\n (click)=\"selectOption(option, $event)\"\n (keydown)=\"onOptionKeydown($event)\"\n >\n <span class=\"gog-select__option-mark\" aria-hidden=\"true\">\n @if (isSelected(option.id)) {\n <gog-icon name=\"check\" />\n }\n </span>\n <span class=\"gog-select__option-label\">{{ option.name }}</span>\n </button>\n }\n </div>\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n computed,\n input,\n model,\n viewChild,\n} from '@angular/core';\n\nimport { GogDropdownBase, type GogDropdownOption } from '../../shared/dropdown-base';\nimport { ButtonComponent } from '../button/button.component';\nimport { IconComponent } from '../icon/icon.component';\n\n/** @deprecated Prefer `GogDropdownOption`; kept as an alias so existing imports keep working. */\nexport type GogMultiselectOption = GogDropdownOption;\n\n/** Height of the select-all/clear row, included in the panel height estimate. */\nconst CONTROLS_ROW_HEIGHT = 38;\n\n@Component({\n selector: 'gog-multiselect',\n imports: [ButtonComponent, IconComponent, NgTemplateOutlet],\n templateUrl: './multiselect.component.html',\n styleUrl: './multiselect.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultiselectComponent extends GogDropdownBase<(string | number)[]> {\n readonly showControls = input(false);\n /** Where the \"select all\"/\"clear\" row sits relative to the option list. Sticky either way. */\n readonly controlsPosition = input<'top' | 'bottom'>('top');\n readonly clearIconTemplate = input<TemplateRef<unknown> | null>(null);\n\n /** Two-way bindable selected ids: `[(value)]=\"signal\"`. */\n readonly value = model<(string | number)[]>([]);\n\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\n protected readonly emptyValue: (string | number)[] = [];\n protected readonly optionClass = 'gog-ms__option';\n protected readonly triggerClass = 'gog-ms';\n protected override readonly optionGapToken = '--gog-ms-option-gap';\n protected override readonly optionsPaddingToken = '--gog-ms-options-padding';\n protected override readonly panelMaxHeightToken = '--gog-ms-panel-max-height';\n protected override readonly optionHeightToken = '--gog-ms-option-height';\n\n protected readonly listboxId = computed(() => `gog-ms-listbox-${this.uid}`);\n protected readonly labelId = computed(() => `gog-ms-label-${this.uid}`);\n\n readonly selectedNames = computed(() =>\n this.value()\n .map((id) => this.options().find((option) => option.id === id)?.name)\n .filter(Boolean)\n .join(', '),\n );\n\n protected isSelected(id: string | number): boolean {\n return this.value().includes(id);\n }\n\n protected toggleOption(option: GogDropdownOption, event: MouseEvent): void {\n event.stopPropagation();\n if (option.disabled) return;\n\n const current = this.value();\n this.commitValue(\n this.isSelected(option.id)\n ? current.filter((id) => id !== option.id)\n : [...current, option.id],\n );\n }\n\n protected selectAll(event: MouseEvent): void {\n event.stopPropagation();\n this.commitValue(\n this.options()\n .filter((option) => !option.disabled)\n .map((option) => option.id),\n );\n }\n\n protected clearAll(event: Event): void {\n event.stopPropagation();\n this.commitValue([]);\n }\n\n protected override extraPanelHeight(): number {\n return this.showControls() ? CONTROLS_ROW_HEIGHT : 0;\n }\n}\n","<!--\n Deliberately not `gog-contained-layout`: `contain: layout` makes this element a stacking\n context, which traps the panel's z-index inside it and lets whatever follows on the page\n paint over the open dropdown.\n-->\n<div\n class=\"gog-ms-wrapper\"\n [class.gog-ms-wrapper--xsm]=\"size() === 'xsm'\"\n [class.gog-ms-wrapper--sm]=\"size() === 'sm'\"\n [class.gog-ms-wrapper--lg]=\"size() === 'lg'\"\n [class.gog-ms-wrapper--slg]=\"size() === 'slg'\"\n>\n <!--\n Associated with aria-labelledby rather than `for`: the trigger is a div with\n role=\"combobox\", not a labelable element. Without this the trigger had no accessible\n name at all whenever `label` was set, because that also suppresses the aria-label.\n -->\n @if (label()) {\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -- associated via aria-labelledby above instead, see comment -->\n <label class=\"gog-ms__label\" [id]=\"labelId()\">{{ label() }}</label>\n }\n\n <div\n class=\"gog-ms\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || placeholder() || 'Select'\"\n [class.gog-ms--open]=\"isOpen()\"\n [class.gog-ms--disabled]=\"isDisabled()\"\n [class.gog-ms--error]=\"hasError()\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle(); $event.preventDefault()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (keydown.escape)=\"close()\"\n (keydown.arrowdown)=\"onTriggerArrowKeydown($event)\"\n (keydown.arrowup)=\"onTriggerArrowKeydown($event)\"\n >\n <span class=\"gog-ms__value\" [class.gog-ms__value--placeholder]=\"!selectedNames()\">\n {{ selectedNames() || placeholder() }}\n </span>\n\n <span class=\"gog-ms__actions\">\n @if (selectedNames()) {\n <button\n type=\"button\"\n class=\"gog-ms__clear gog-inline-center\"\n (click)=\"clearAll($event)\"\n aria-label=\"Clear selection\"\n >\n <gog-icon [template]=\"clearIconTemplate()\" name=\"close\" />\n </button>\n }\n <span class=\"gog-ms__arrow\" [class.gog-ms__arrow--up]=\"isOpen()\" aria-hidden=\"true\">\n <gog-icon\n [template]=\"chevronTemplate()\"\n [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\"\n />\n </span>\n </span>\n </div>\n\n @if (isOpen() && !appendToBody()) {\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\n }\n\n @if (visibleError()) {\n <span class=\"gog-ms__error\" role=\"alert\">{{ visibleError() }}</span>\n }\n</div>\n\n<!--\n One template for both render modes. When `appendToBody` is set it is stamped into\n <body> by the overlay, which is why the portal-only modifier and the resolved\n coordinates are applied conditionally: outside the component's subtree the panel can\n no longer inherit the size tokens from the `.gog-ms-wrapper--sm/--lg` wrapper.\n-->\n<ng-template #panelTpl>\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- (click) below is housekeeping stopPropagation, not an interactive handler; the focusable/keyboard-operable elements are the options inside -->\n <div\n [id]=\"listboxId()\"\n class=\"gog-ms__dropdown\"\n [class.gog-ms__dropdown--up]=\"!appendToBody() && dropdownDirectionState() === 'up'\"\n [class.gog-ms__dropdown--portal]=\"appendToBody()\"\n [class.gog-ms__dropdown--xsm]=\"appendToBody() && size() === 'xsm'\"\n [class.gog-ms__dropdown--sm]=\"appendToBody() && size() === 'sm'\"\n [class.gog-ms__dropdown--lg]=\"appendToBody() && size() === 'lg'\"\n [class.gog-ms__dropdown--slg]=\"appendToBody() && size() === 'slg'\"\n [style.top.px]=\"appendToBody() ? panelPlacement()?.top : null\"\n [style.left.px]=\"appendToBody() ? panelPlacement()?.left : null\"\n [style.width]=\"appendToBody() ? resolvedPanelWidth() : null\"\n [style.max-height]=\"appendToBody() ? resolvedPanelMaxHeight() : null\"\n [style.z-index]=\"dropdownZIndex() ?? panelZIndex()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (showControls() && controlsPosition() === 'top') {\n <ng-container [ngTemplateOutlet]=\"controlsRowTpl\" />\n }\n <div class=\"gog-ms__options\">\n @for (option of options(); track option.id) {\n <!--\n tabindex=\"-1\" keeps the list to a single tab stop, as the listbox pattern\n expects: focus moves between options with the arrow keys, not by tabbing\n through every one. Programmatic .focus() still works on a negative tabindex.\n -->\n <button\n type=\"button\"\n class=\"gog-ms__option\"\n role=\"option\"\n tabindex=\"-1\"\n [attr.aria-selected]=\"isSelected(option.id)\"\n [attr.aria-disabled]=\"option.disabled ?? false\"\n [class.gog-ms__option--selected]=\"isSelected(option.id)\"\n [class.gog-ms__option--disabled]=\"option.disabled ?? false\"\n (click)=\"toggleOption(option, $event)\"\n (keydown)=\"onOptionKeydown($event)\"\n >\n <span class=\"gog-ms__option-mark\" aria-hidden=\"true\">\n <gog-icon [name]=\"isSelected(option.id) ? 'checkbox-checked' : 'checkbox'\" />\n </span>\n {{ option.name }}\n </button>\n }\n </div>\n @if (showControls() && controlsPosition() === 'bottom') {\n <ng-container [ngTemplateOutlet]=\"controlsRowTpl\" />\n }\n </div>\n</ng-template>\n\n<ng-template #controlsRowTpl>\n <div class=\"gog-ms__controls\" [class.gog-ms__controls--bottom]=\"controlsPosition() === 'bottom'\">\n <gog-button variant=\"ghost\" size=\"sm\" (click)=\"selectAll($event)\">Select all</gog-button>\n <gog-button variant=\"ghost\" size=\"sm\" (click)=\"clearAll($event)\">Clear</gog-button>\n </div>\n</ng-template>\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DoCheck,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\n\r\n@Component({\r\n selector: 'gog-slider',\r\n imports: [],\r\n templateUrl: './slider.component.html',\r\n styleUrl: './slider.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.--thumb-pos]': 'thumbPos()',\r\n '[style.--fill-scale]': 'fillScale()',\r\n // Drives the :host(.gog-host--auto-width) rule in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect. Inverted from gog-button's\r\n // full-width class: this control is full width by default, so the class only\r\n // appears once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class SliderComponent implements ControlValueAccessor, DoCheck {\r\n private static nextId = 0;\r\n protected readonly inputId = `gog-slider-${++SliderComponent.nextId}`;\r\n\r\n readonly label = input('');\r\n readonly min = input(0);\r\n readonly max = input(100);\r\n readonly step = input(1);\r\n readonly showValue = input(true);\r\n readonly showThumb = input(true);\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n readonly errorDisplay = input<GogErrorDisplay>('manual');\r\n readonly ariaLabel = input('');\r\n readonly disabled = input(false);\r\n /**\r\n * Full width of the container by default. Set to `false` to size the track to\r\n * `--gog-slider-auto-width` instead — a slider's track has no content of its own to\r\n * shrink-wrap to, so unlike the other field controls this needs an explicit fallback\r\n * width rather than `fit-content`.\r\n */\r\n readonly fullWidth = input(true);\r\n\r\n /** Two-way bindable value: `[(value)]=\"signal\"`. */\r\n readonly value = model<number>(0);\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.errorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly clampedValue = computed(() => {\r\n const value = this.value();\r\n return Math.min(this.max(), Math.max(this.min(), value));\r\n });\r\n\r\n protected readonly fillPercent = computed(() => {\r\n const range = this.max() - this.min();\r\n if (range === 0) return 0;\r\n return ((this.clampedValue() - this.min()) / range) * 100;\r\n });\r\n\r\n protected readonly thumbPos = computed(() => `${this.fillPercent()}%`);\r\n protected readonly fillScale = computed(() => this.fillPercent() / 100);\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n protected readonly errorId = computed(() => (this.hasError() ? `${this.inputId}-error` : null));\r\n\r\n private onChange: (val: number) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR keeps `this.ngControl`\r\n // available for `hasError` — providing NG_VALUE_ACCESSOR on the component while also\r\n // injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: number): void {\r\n const next = val ?? this.min();\r\n this.value.set(Math.min(this.max(), Math.max(this.min(), next)));\r\n }\r\n\r\n registerOnChange(fn: (val: number) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const next = Number(input.value);\r\n const value = Math.min(this.max(), Math.max(this.min(), next));\r\n\r\n this.value.set(value);\r\n this.onChange(value);\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n}\r\n","<div\n class=\"gog-slider gog-contained-layout\"\n [class.gog-slider--disabled]=\"isDisabled()\"\n [class.gog-slider--thumb-hidden]=\"!showThumb()\"\n>\n <div class=\"gog-slider__header\">\n @if (label()) {\n <label [attr.for]=\"inputId\" class=\"gog-slider__label\">{{ label() }}</label>\n }\n\n @if (showValue()) {\n <span class=\"gog-slider__value\">{{ clampedValue() }}</span>\n }\n </div>\n\n <div class=\"gog-slider__track-container\">\n <div class=\"gog-slider__track\">\n <div class=\"gog-slider__fill\"></div>\n </div>\n\n @if (showThumb()) {\n <div class=\"gog-slider__thumb\" aria-hidden=\"true\"></div>\n }\n\n <input\n [id]=\"inputId\"\n class=\"gog-slider__input\"\n type=\"range\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || 'Slider'\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"clampedValue()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"errorId()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"clampedValue()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n </div>\n\n <div class=\"gog-slider__range-labels\">\n <span>{{ min() }}</span>\n <span>{{ max() }}</span>\n </div>\n\n @if (hasError()) {\n <span class=\"gog-slider__error\" [attr.id]=\"errorId()\" role=\"alert\">\n {{ visibleError() }}\n </span>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, effect, input, model } from '@angular/core';\r\n\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { GogPaginatorRangeMode, GogSize } from '../../shared/types';\r\n\r\n@Component({\r\n selector: 'gog-paginator',\r\n imports: [ButtonComponent],\r\n templateUrl: './paginator.component.html',\r\n styleUrl: './paginator.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-paginator',\r\n role: 'navigation',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n // Drives the :host(.gog-host--auto-width) rule in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect. Inverted from gog-button's\r\n // full-width class: this control is full width by default, so the class only\r\n // appears once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class PaginatorComponent {\r\n /** 1-based current page. Two-way bindable: `[(page)]=\"myPageSignal\"`. */\r\n readonly page = model(1);\r\n /**\r\n * Full width of the container by default. Set to `false` to shrink to fit the page\r\n * buttons instead.\r\n */\r\n readonly fullWidth = input(true);\r\n readonly totalPages = input(1);\r\n /**\r\n * `window` (default): a fixed number of page buttons (`visiblePages`) that slides to keep\r\n * the current page centered, clamped at the edges — no ellipsis, no pinned boundaries\r\n * unless `showFirstPage`/`showLastPage` ask for them.\r\n * `ellipsis`: the original behavior — first and last page are always pinned, and\r\n * `siblingCount` pages are kept around the current one, with a \"…\" filling the gap. Kept\r\n * around as an opt-in for consumers (like `gog-table`) already built around that look.\r\n */\r\n readonly rangeMode = input<GogPaginatorRangeMode>('window');\r\n /** `rangeMode=\"window\"` only: how many page number buttons stay visible at once. */\r\n readonly visiblePages = input(5);\r\n /** `rangeMode=\"window\"` only: always keep page 1 reachable, with a \"…\" if it's not adjacent. */\r\n readonly showFirstPage = input(false);\r\n /** `rangeMode=\"window\"` only: always keep the last page reachable, with a \"…\" if it's not adjacent. */\r\n readonly showLastPage = input(false);\r\n /** `rangeMode=\"ellipsis\"` only: how many page numbers to keep on each side of the current page. */\r\n readonly siblingCount = input(2);\r\n readonly size = input<GogSize>('sm');\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input('Pagination');\r\n\r\n protected readonly pageNumbers = computed(() => {\r\n const total = Math.max(1, this.totalPages());\r\n const current = this.page();\r\n return this.rangeMode() === 'ellipsis'\r\n ? this.ellipsisRange(total, current)\r\n : this.windowRange(total, current);\r\n });\r\n\r\n constructor() {\r\n // Self-clamps whenever `totalPages` shrinks below the current page (or a consumer\r\n // passes an out-of-range value directly), so every consumer gets correct bounds for\r\n // free instead of reimplementing this per usage.\r\n effect(() => {\r\n const total = Math.max(1, this.totalPages());\r\n const current = this.page();\r\n if (current > total) {\r\n this.page.set(total);\r\n } else if (current < 1) {\r\n this.page.set(1);\r\n }\r\n });\r\n }\r\n\r\n private windowRange(total: number, current: number): (number | '...')[] {\r\n const windowSize = Math.min(Math.max(1, this.visiblePages()), total);\r\n const start = Math.max(\r\n 1,\r\n Math.min(current - Math.floor((windowSize - 1) / 2), total - windowSize + 1),\r\n );\r\n const end = start + windowSize - 1;\r\n\r\n const range: (number | '...')[] = [];\r\n if (this.showFirstPage() && start > 1) {\r\n range.push(1);\r\n if (start > 2) range.push('...');\r\n }\r\n for (let i = start; i <= end; i++) range.push(i);\r\n if (this.showLastPage() && end < total) {\r\n if (end < total - 1) range.push('...');\r\n range.push(total);\r\n }\r\n return range;\r\n }\r\n\r\n private ellipsisRange(total: number, current: number): (number | '...')[] {\r\n const delta = Math.max(0, this.siblingCount());\r\n const range: (number | '...')[] = [];\r\n for (let i = 1; i <= total; i++) {\r\n if (i === 1 || i === total || (i >= current - delta && i <= current + delta)) {\r\n range.push(i);\r\n } else if (range[range.length - 1] !== '...') {\r\n range.push('...');\r\n }\r\n }\r\n return range;\r\n }\r\n\r\n protected isNumber(value: number | '...'): value is number {\r\n return typeof value === 'number';\r\n }\r\n\r\n protected goTo(target: number): void {\r\n if (this.disabled() || target < 1 || target > this.totalPages()) return;\r\n this.page.set(target);\r\n }\r\n\r\n protected prev(): void {\r\n this.goTo(this.page() - 1);\r\n }\r\n\r\n protected next(): void {\r\n this.goTo(this.page() + 1);\r\n }\r\n}\r\n","<gog-button\n variant=\"ghost\"\n [size]=\"size()\"\n [disabled]=\"disabled() || page() === 1\"\n ariaLabel=\"Previous page\"\n (gogClick)=\"prev()\"\n >‹</gog-button\n>\n\n@for (item of pageNumbers(); track $index) {\n @if (isNumber(item)) {\n <gog-button\n [size]=\"size()\"\n [variant]=\"item === page() ? 'primary' : 'ghost'\"\n [disabled]=\"disabled()\"\n [ariaLabel]=\"item === page() ? 'Page ' + item + ', current page' : 'Go to page ' + item\"\n (gogClick)=\"goTo(item)\"\n >{{ item }}</gog-button\n >\n } @else {\n <span class=\"gog-paginator__ellipsis\">…</span>\n }\n}\n\n<gog-button\n variant=\"ghost\"\n [size]=\"size()\"\n [disabled]=\"disabled() || page() === totalPages()\"\n ariaLabel=\"Next page\"\n (gogClick)=\"next()\"\n >›</gog-button\n>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport { GogSize, GogSpinnerVariant } from '../../../shared/types';\nimport { SpinnerComponent } from '../spinner.component';\n\n@Component({\n selector: 'gog-spinner-overlay',\n imports: [SpinnerComponent],\n templateUrl: './spinner-overlay.component.html',\n styleUrl: './spinner-overlay.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-spinner-overlay-host',\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\n },\n})\nexport class SpinnerOverlayComponent {\n readonly loading = input(false);\n readonly size = input<GogSize>('md');\n readonly ariaLabel = input('Loading');\n readonly variant = input<GogSpinnerVariant>('runic');\n}\n","<div class=\"gog-spinner-overlay\">\n <div class=\"gog-spinner-overlay__content\">\n <ng-content />\n </div>\n\n @if (loading()) {\n <div class=\"gog-spinner-overlay__scrim\">\n <gog-spinner [size]=\"size()\" [ariaLabel]=\"ariaLabel()\" [variant]=\"variant()\" />\n </div>\n }\n</div>\n","import { Directive, input } from '@angular/core';\n\n/** Case-insensitive, numeric-aware (`\"item2\" < \"item10\"`) — the sensible default for text. */\nconst defaultCollator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n\n/** Default comparator: locale-aware for strings via `Intl.Collator`, `<`/`>` otherwise. */\nexport function defaultCompare(a: unknown, b: unknown): number {\n if (typeof a === 'string' && typeof b === 'string') {\n return defaultCollator.compare(a, b);\n }\n if (a === b) return 0;\n return (a as number | string) < (b as number | string) ? -1 : 1;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'column',\n})\nexport class Column {\n /** Field name, or a dot-path into a nested property (e.g. `\"address.city\"`). */\n readonly field = input.required<string>();\n readonly header = input<string>('');\n readonly sortable = input<boolean>(false);\n /** Fixed width, e.g. \"120px\" or \"20%\" */\n readonly width = input<string>('');\n /** Min width, e.g. \"80px\" */\n readonly minWidth = input<string>('');\n /** Max width, e.g. \"300px\" */\n readonly maxWidth = input<string>('');\n /** Custom sort comparator for this column. Defaults to `defaultCompare`. */\n readonly comparator = input<((a: unknown, b: unknown) => number) | null>(null);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\nexport interface GogTableBodyContext<T> {\n $implicit: T;\n index: number;\n}\n\nexport interface GogTableHeaderContext {\n $implicit: never;\n}\n\n/**\n * Marks a <ng-template> inside <gog-table> with a field name and optional type.\n *\n * Usage:\n * <ng-template template=\"status\" type=\"body\" let-row>...</ng-template>\n * <ng-template template=\"status\" type=\"header\">...</ng-template>\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[template]',\n})\nexport class TemplateDirective {\n readonly template = input.required<string>();\n readonly type = input<'body' | 'header'>('body');\n\n readonly templateRef = inject(TemplateRef<unknown>);\n\n static ngTemplateContextGuard<T>(\n _dir: TemplateDirective,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\n ctx: unknown,\n ): ctx is GogTableBodyContext<T> | GogTableHeaderContext {\n return true;\n }\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n input,\r\n linkedSignal,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { PaginatorComponent } from '../paginator/paginator.component';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\nimport { GogSize } from '../../shared/types';\r\nimport { Column, defaultCompare } from './column';\r\nimport { TemplateDirective } from './template.directive';\r\n\r\n/** Resolves `field` against `row`, following dot-paths (e.g. `\"address.city\"`). */\r\nfunction getByPath(row: unknown, field: string): unknown {\r\n if (!field.includes('.')) return (row as Record<string, unknown> | null)?.[field];\r\n\r\n let value: unknown = row;\r\n for (const key of field.split('.')) {\r\n if (value == null) return undefined;\r\n value = (value as Record<string, unknown>)[key];\r\n }\r\n return value;\r\n}\r\n\r\nexport type SortDirection = 'asc' | 'desc' | null;\r\n\r\ninterface SortState {\r\n field: string;\r\n direction: SortDirection;\r\n}\r\n\r\n@Component({\r\n selector: 'gog-table',\r\n imports: [SpinnerComponent, PaginatorComponent, NgTemplateOutlet, IconComponent],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-table-host',\r\n '[style.display]': '\"block\"',\r\n '[style.width]': 'fullWidth() ? \"100%\" : \"fit-content\"',\r\n },\r\n})\r\nexport class TableComponent<T extends object> {\r\n readonly value = input<T[]>([]);\r\n /**\r\n * Full width of the container by default. Set to `false` to shrink the table to fit\r\n * its columns' content instead.\r\n */\r\n readonly fullWidth = input(true);\r\n /** 0 = no pagination */\r\n readonly pageSize = input<number>(0);\r\n readonly showRowNumbers = input<boolean>(true);\r\n readonly showTotal = input<boolean>(false);\r\n readonly emptyPlaceholder = input<string>('-');\r\n /** Alignment of pagination controls */\r\n readonly paginatorPosition = input<'left' | 'center' | 'right'>('center');\r\n /** Alignment of total count label (only when showTotal=true) */\r\n readonly totalPosition = input<'left' | 'right' | 'opposite'>('opposite');\r\n /** Show loading spinner instead of rows */\r\n readonly loading = input<boolean>(false);\r\n /** Show vertical borders between columns */\r\n readonly showColumnBorders = input<boolean>(false);\r\n /** Stick header row to the top of the viewport while scrolling */\r\n readonly stickyHeader = input<boolean>(false);\r\n /** Row density: lg (default) / md (compact) / sm (dense) */\r\n readonly size = input<GogSize>('lg');\r\n\r\n readonly columns = contentChildren(Column);\r\n readonly templates = contentChildren(TemplateDirective);\r\n\r\n readonly sortState = signal<SortState>({ field: '', direction: null });\r\n\r\n readonly sortedData = computed(() => {\r\n const { field, direction } = this.sortState();\r\n const rows = [...this.value()];\r\n if (!field || !direction) return rows;\r\n\r\n const compare =\r\n this.columns()\r\n .find((col) => col.field() === field)\r\n ?.comparator() ?? defaultCompare;\r\n\r\n return rows.sort((a, b) => {\r\n const av = getByPath(a, field);\r\n const bv = getByPath(b, field);\r\n if (av == null && bv == null) return 0;\r\n if (av == null) return 1;\r\n if (bv == null) return -1;\r\n const cmp = compare(av, bv);\r\n return direction === 'asc' ? cmp : -cmp;\r\n });\r\n });\r\n\r\n readonly totalPages = computed(() => {\r\n const size = this.pageSize();\r\n if (!size) return 1;\r\n return Math.max(1, Math.ceil(this.sortedData().length / size));\r\n });\r\n\r\n /**\r\n * Resets to page 1 whenever the sort changes (a new sort re-orders the whole data set,\r\n * so whatever page the user was on no longer means anything) and clamps down to\r\n * `totalPages` whenever the data set or page size shrinks — but otherwise preserves\r\n * wherever the paginator navigated to. `gog-paginator`'s own `page` model additionally\r\n * self-clamps against `totalPages` on its own, so this only has to handle the reset case.\r\n */\r\n readonly currentPage = linkedSignal<{ total: number; sortState: SortState }, number>({\r\n source: () => ({ total: this.totalPages(), sortState: this.sortState() }),\r\n computation: (src, previous) => {\r\n if (!previous || previous.source.sortState !== src.sortState) return 1;\r\n return Math.min(Math.max(1, previous.value), src.total);\r\n },\r\n });\r\n\r\n readonly visibleRows = computed(() => {\r\n const size = this.pageSize();\r\n if (!size) return this.sortedData();\r\n const page = this.currentPage();\r\n const start = (page - 1) * size;\r\n return this.sortedData().slice(start, start + size);\r\n });\r\n\r\n readonly hasPagination = computed(\r\n () => !this.loading() && this.pageSize() > 0 && this.totalPages() > 1,\r\n );\r\n\r\n readonly emptyColspan = computed(() => this.columns().length + (this.showRowNumbers() ? 1 : 0));\r\n\r\n getBodyTemplate(field: string): TemplateRef<unknown> | null {\r\n return this.bodyTemplateMap().get(field) ?? null;\r\n }\r\n\r\n getHeaderTemplate(field: string): TemplateRef<unknown> | null {\r\n return this.headerTemplateMap().get(field) ?? null;\r\n }\r\n\r\n toggleSort(col: Column): void {\r\n if (!col.sortable()) return;\r\n const cur = this.sortState();\r\n const field = col.field();\r\n if (cur.field !== field) {\r\n this.sortState.set({ field, direction: 'asc' });\r\n } else if (cur.direction === 'asc') {\r\n this.sortState.set({ field, direction: 'desc' });\r\n } else {\r\n this.sortState.set({ field: '', direction: null });\r\n }\r\n }\r\n\r\n getSortDirection(field: string): SortDirection {\r\n const s = this.sortState();\r\n return s.field === field ? s.direction : null;\r\n }\r\n\r\n getAriaSort(field: string): 'ascending' | 'descending' | null {\r\n const direction = this.getSortDirection(field);\r\n if (direction === 'asc') return 'ascending';\r\n if (direction === 'desc') return 'descending';\r\n return null;\r\n }\r\n\r\n handleSortClick(col: Column): void {\r\n if (!this.loading()) this.toggleSort(col);\r\n }\r\n\r\n getCellValue(row: T, field: string): unknown {\r\n return getByPath(row, field);\r\n }\r\n\r\n formatCellValue(row: T, field: string): string {\r\n const value = this.getCellValue(row, field);\r\n return value == null ? this.emptyPlaceholder() : String(value);\r\n }\r\n\r\n globalRowIndex(localIndex: number): number {\r\n const size = this.pageSize();\r\n if (!size) return localIndex + 1;\r\n return (this.currentPage() - 1) * size + localIndex + 1;\r\n }\r\n\r\n /** CSS grid-area for the total label: left slot or right slot */\r\n readonly totalGridArea = computed(() => {\r\n const totalPos = this.totalPosition();\r\n const paginatorPos = this.paginatorPosition();\r\n if (totalPos === 'opposite') return paginatorPos === 'right' ? 'left' : 'right';\r\n return totalPos;\r\n });\r\n\r\n /** CSS grid-area for the pagination block */\r\n readonly paginatorGridArea = computed(() => this.paginatorPosition());\r\n\r\n private readonly bodyTemplateMap = computed(() => {\r\n const map = new Map<string, TemplateRef<unknown>>();\r\n for (const t of this.templates()) {\r\n if (t.type() === 'body') map.set(t.template(), t.templateRef);\r\n }\r\n return map;\r\n });\r\n\r\n private readonly headerTemplateMap = computed(() => {\r\n const map = new Map<string, TemplateRef<unknown>>();\r\n for (const t of this.templates()) {\r\n if (t.type() === 'header') map.set(t.template(), t.templateRef);\r\n }\r\n return map;\r\n });\r\n}\r\n","<div class=\"gog-table-wrapper gog-contained-layout\">\r\n <div class=\"gog-table-scroll\">\r\n <table\r\n class=\"gog-table\"\r\n [class.gog-table--col-borders]=\"showColumnBorders()\"\r\n [class.gog-table--loading]=\"loading()\"\r\n [class.gog-table--slg]=\"size() === 'slg'\"\r\n [class.gog-table--md]=\"size() === 'md'\"\r\n [class.gog-table--sticky-header]=\"stickyHeader()\"\r\n [class.gog-table--sm]=\"size() === 'sm'\"\r\n [class.gog-table--xsm]=\"size() === 'xsm'\"\r\n [style.width]=\"fullWidth() ? '100%' : 'fit-content'\"\r\n >\r\n <colgroup>\r\n @if (showRowNumbers()) {\r\n <col class=\"gog-table__col--num\" />\r\n }\r\n @for (col of columns(); track col.field()) {\r\n <col\r\n [style.width]=\"col.width() || null\"\r\n [style.min-width]=\"col.minWidth() || null\"\r\n [style.max-width]=\"col.maxWidth() || null\"\r\n />\r\n }\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @if (showRowNumbers()) {\r\n <th class=\"gog-table__th gog-table__th--num\" scope=\"col\">#</th>\r\n }\r\n @for (col of columns(); track col.field()) {\r\n <th\r\n class=\"gog-table__th\"\r\n scope=\"col\"\r\n [class.gog-table__th--sortable]=\"col.sortable() && !loading()\"\r\n [class.gog-table__th--sorted]=\"getSortDirection(col.field())\"\r\n [attr.aria-sort]=\"getAriaSort(col.field())\"\r\n [attr.tabindex]=\"col.sortable() && !loading() ? 0 : null\"\r\n (click)=\"handleSortClick(col)\"\r\n (keydown.enter)=\"handleSortClick(col)\"\r\n (keydown.space)=\"handleSortClick(col); $event.preventDefault()\"\r\n >\r\n @if (getHeaderTemplate(col.field()); as headerTpl) {\r\n <ng-container *ngTemplateOutlet=\"headerTpl\" />\r\n } @else {\r\n <span class=\"gog-table__th-inner\">\r\n {{ col.header() || col.field() }}\r\n @if (col.sortable() && !loading()) {\r\n <span class=\"gog-table__sort-icon\" aria-hidden=\"true\">\r\n @if (getSortDirection(col.field()) === 'asc') {\r\n <gog-icon name=\"sort-up\" />\r\n } @else if (getSortDirection(col.field()) === 'desc') {\r\n <gog-icon name=\"sort-down\" />\r\n } @else {\r\n <gog-icon name=\"sort\" />\r\n }\r\n </span>\r\n }\r\n </span>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading()) {\r\n <tr>\r\n <td class=\"gog-table__loading-cell\" [attr.colspan]=\"emptyColspan()\">\r\n <gog-spinner size=\"md\" />\r\n </td>\r\n </tr>\r\n } @else if (visibleRows().length === 0) {\r\n <tr>\r\n <td class=\"gog-table__empty\" [attr.colspan]=\"emptyColspan()\">—</td>\r\n </tr>\r\n } @else {\r\n @for (row of visibleRows(); track $index; let i = $index) {\r\n <tr class=\"gog-table__row\">\r\n @if (showRowNumbers()) {\r\n <td class=\"gog-table__td gog-table__td--num\">{{ globalRowIndex(i) }}</td>\r\n }\r\n @for (col of columns(); track col.field()) {\r\n <td class=\"gog-table__td\">\r\n @if (getBodyTemplate(col.field()); as bodyTpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"bodyTpl; context: { $implicit: row, index: i }\"\r\n />\r\n } @else {\r\n {{ formatCellValue(row, col.field()) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n @if (hasPagination() || showTotal()) {\r\n <div class=\"gog-table__footer\">\r\n @if (showTotal()) {\r\n <span class=\"gog-table__total\" [style.grid-area]=\"totalGridArea()\">\r\n Total: {{ value().length }}\r\n </span>\r\n }\r\n\r\n @if (hasPagination()) {\r\n <gog-paginator\r\n class=\"gog-table__pagination\"\r\n [style.grid-area]=\"paginatorGridArea()\"\r\n [(page)]=\"currentPage\"\r\n [totalPages]=\"totalPages()\"\r\n rangeMode=\"ellipsis\"\r\n size=\"sm\"\r\n ariaLabel=\"Table pagination\"\r\n />\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly root = this.document.documentElement;\n readonly theme = signal(this.readTheme());\n\n constructor() {\n this.applyTheme(this.theme());\n }\n\n setTheme(theme: string): void {\n this.theme.set(theme);\n this.applyTheme(theme);\n }\n\n toggleTheme(): void {\n this.setTheme(this.theme() === 'dark' ? 'light' : 'dark');\n }\n\n private readTheme(): string {\n return this.root.getAttribute('data-theme') ?? 'light';\n }\n\n private applyTheme(theme: string): void {\n this.root.setAttribute('data-theme', theme);\n }\n}\n","/*\n * Public API Surface of ui\n */\n\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/accordion/accordion.component';\nexport * from './lib/components/checkbox/checkbox.component';\nexport * from './lib/components/dialog/confirmation-dialog/confirmation-dialog.component';\nexport * from './lib/components/dialog/dialog.component';\nexport * from './lib/components/dialog/dialog.tokens';\nexport * from './lib/components/icon/icon.component';\nexport * from './lib/components/toast/toast.component';\nexport * from './lib/components/toast/toast-container/toast-container.component';\nexport * from './lib/components/inputfield/inputfield.component';\nexport * from './lib/components/chip/chip.component';\nexport * from './lib/components/tag/tag.component';\nexport * from './lib/components/select/select.component';\nexport * from './lib/components/multiselect/multiselect.component';\nexport * from './lib/components/slider/slider.component';\nexport * from './lib/components/skeleton/skeleton.component';\nexport * from './lib/components/paginator/paginator.component';\nexport * from './lib/components/spinner/spinner-overlay/spinner-overlay.component';\nexport * from './lib/components/table/column';\nexport * from './lib/components/table/table.component';\nexport * from './lib/components/table/template.directive';\nexport * from './lib/components/spinner/spinner.component';\nexport * from './lib/services/dialog-service/dialog.service';\nexport * from './lib/services/toast-service/toast-service';\nexport * from './lib/services/theme-service/theme.service';\nexport * from './lib/shared/types';\nexport * from './lib/shared/dropdown-base';\nexport type { GogDropdownDirection } from './lib/shared/dropdown-position';\nexport type { GogIconName } from './lib/shared/icons';\nexport { ICON_DEFS } from './lib/shared/icons';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guildofgleks-ui.mjs","sources":["../../../../projects/gleks/ui/src/lib/shared/config.ts","../../../../projects/gleks/ui/src/lib/components/spinner/spinner.component.ts","../../../../projects/gleks/ui/src/lib/components/spinner/spinner.component.html","../../../../projects/gleks/ui/src/lib/components/button/button.component.ts","../../../../projects/gleks/ui/src/lib/components/button/button.component.html","../../../../projects/gleks/ui/src/lib/shared/roving-focus.ts","../../../../projects/gleks/ui/src/lib/shared/icons.ts","../../../../projects/gleks/ui/src/lib/components/icon/icon.component.ts","../../../../projects/gleks/ui/src/lib/components/skeleton/skeleton.component.ts","../../../../projects/gleks/ui/src/lib/components/skeleton/skeleton.component.html","../../../../projects/gleks/ui/src/lib/components/accordion/accordion.component.ts","../../../../projects/gleks/ui/src/lib/components/accordion/accordion.component.html","../../../../projects/gleks/ui/src/lib/components/collapsible/collapsible.component.ts","../../../../projects/gleks/ui/src/lib/components/collapsible/collapsible-trigger.directive.ts","../../../../projects/gleks/ui/src/lib/components/collapsible/collapsible-content.directive.ts","../../../../projects/gleks/ui/src/lib/shared/checkable-control.config.ts","../../../../projects/gleks/ui/src/lib/components/checkbox/checkbox.component.ts","../../../../projects/gleks/ui/src/lib/components/checkbox/checkbox.component.html","../../../../projects/gleks/ui/src/lib/components/dialog/dialog.tokens.ts","../../../../projects/gleks/ui/src/lib/components/dialog/confirmation-dialog/confirmation-dialog.component.ts","../../../../projects/gleks/ui/src/lib/components/dialog/confirmation-dialog/confirmation-dialog.component.html","../../../../projects/gleks/ui/src/lib/services/dialog-service/dialog.service.ts","../../../../projects/gleks/ui/src/lib/components/scroll/scroll.component.ts","../../../../projects/gleks/ui/src/lib/components/scroll/scroll.component.html","../../../../projects/gleks/ui/src/lib/components/dialog/dialog.component.ts","../../../../projects/gleks/ui/src/lib/components/dialog/dialog.component.html","../../../../projects/gleks/ui/src/lib/components/toast/toast.component.ts","../../../../projects/gleks/ui/src/lib/components/toast/toast.component.html","../../../../projects/gleks/ui/src/lib/services/toast-service/toast-service.ts","../../../../projects/gleks/ui/src/lib/components/toast/toast-container/toast-container.component.ts","../../../../projects/gleks/ui/src/lib/components/toast/toast-container/toast-container.component.html","../../../../projects/gleks/ui/src/lib/shared/error-state.ts","../../../../projects/gleks/ui/src/lib/components/inputfield/inputfield.component.ts","../../../../projects/gleks/ui/src/lib/components/inputfield/inputfield.component.html","../../../../projects/gleks/ui/src/lib/components/textarea/textarea.component.ts","../../../../projects/gleks/ui/src/lib/components/textarea/textarea.component.html","../../../../projects/gleks/ui/src/lib/components/chip/chip.component.ts","../../../../projects/gleks/ui/src/lib/components/chip/chip.component.html","../../../../projects/gleks/ui/src/lib/components/tag/tag.component.ts","../../../../projects/gleks/ui/src/lib/components/tag/tag.component.html","../../../../projects/gleks/ui/src/lib/shared/dropdown-overlay.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-position.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-base.ts","../../../../projects/gleks/ui/src/lib/components/select/select.component.ts","../../../../projects/gleks/ui/src/lib/components/select/select.component.html","../../../../projects/gleks/ui/src/lib/components/multiselect/multiselect.component.ts","../../../../projects/gleks/ui/src/lib/components/multiselect/multiselect.component.html","../../../../projects/gleks/ui/src/lib/components/slider/slider.component.ts","../../../../projects/gleks/ui/src/lib/components/slider/slider.component.html","../../../../projects/gleks/ui/src/lib/components/paginator/paginator.component.ts","../../../../projects/gleks/ui/src/lib/components/paginator/paginator.component.html","../../../../projects/gleks/ui/src/lib/components/spinner/spinner-overlay/spinner-overlay.component.ts","../../../../projects/gleks/ui/src/lib/components/spinner/spinner-overlay/spinner-overlay.component.html","../../../../projects/gleks/ui/src/lib/components/table/column.ts","../../../../projects/gleks/ui/src/lib/components/table/template.directive.ts","../../../../projects/gleks/ui/src/lib/components/table/table.component.ts","../../../../projects/gleks/ui/src/lib/components/table/table.component.html","../../../../projects/gleks/ui/src/lib/services/theme-service/theme.service.ts","../../../../projects/gleks/ui/src/public-api.ts","../../../../projects/gleks/ui/src/guildofgleks-ui.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core';\r\n\r\nimport { GogScrollOverscrollBehavior, GogScrollSize } from './types';\r\n\r\n/**\r\n * App-wide defaults for the handful of component inputs where that actually makes sense —\r\n * timing/behavior knobs a whole app typically wants to set once (a house style for how long\r\n * scrollbars stay visible, how aggressively buttons debounce clicks), not visual ones.\r\n * Visual defaults (colors, radii, animation *durations expressed in CSS*) already have a\r\n * global mechanism: the `--gog-*` custom properties in `styles/theme.css`. This is only for\r\n * inputs that can't be a CSS token because a component reads them in TypeScript (a\r\n * `setTimeout` delay, an RxJS `timer` duration) — see `styling.instructions.md` and\r\n * `gleks-ui-library.instructions.md`'s \"Global configuration\" section for the line between\r\n * the two and for how to add a new field here when a component needs one.\r\n *\r\n * Every field is optional at every level: set only the ones you want to change from the\r\n * component's own built-in default. An instance's own input, when set, always wins over\r\n * this — this only fills in what the instance didn't specify itself.\r\n */\r\nexport interface GogGlobalConfig {\r\n scroll?: {\r\n autoHide?: boolean;\r\n hideDelay?: number;\r\n size?: GogScrollSize;\r\n overscrollBehavior?: GogScrollOverscrollBehavior;\r\n };\r\n button?: {\r\n debounce?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Resolves to `{}` — every field falls through to its component's own hardcoded default —\r\n * until a `provideGogConfig(...)` call overrides it somewhere in the injector tree.\r\n */\r\nexport const GOG_CONFIG = new InjectionToken<GogGlobalConfig>('GOG_CONFIG', {\r\n providedIn: 'root',\r\n factory: () => ({}),\r\n});\r\n\r\n/**\r\n * Sets app-wide (or subtree-wide, if placed in a route's or component's own `providers`\r\n * instead of the bootstrap config) defaults for every `@guildofgleks/ui` component that\r\n * reads `GOG_CONFIG` — one call instead of a separate injection token per setting:\r\n *\r\n * ```ts\r\n * // app.config.ts\r\n * providers: [\r\n * provideGogConfig({\r\n * scroll: { hideDelay: 1000 },\r\n * button: { debounce: 500 },\r\n * }),\r\n * ]\r\n * ```\r\n *\r\n * Providing this again further down the injector tree (a route, a single component's own\r\n * `providers`) replaces the whole object for that subtree rather than merging with the\r\n * parent's — pass everything you want in effect there, not just the one field you're\r\n * changing.\r\n */\r\nexport function provideGogConfig(config: GogGlobalConfig): Provider {\r\n return { provide: GOG_CONFIG, useValue: config };\r\n}\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { GogSize, GogSpinnerVariant } from '../../shared/types';\n\n@Component({\n selector: 'gog-spinner',\n imports: [NgTemplateOutlet],\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-inline-center',\n },\n})\nexport class SpinnerComponent {\n readonly size = input<GogSize>('md');\n readonly overlay = input(false);\n readonly ariaLabel = input('Loading');\n /**\n * `runic` and `ring` are built-in presets. Use `custom` to render your own\n * markup via content projection — it inherits the size wrapper, overlay\n * behaviour, and `--gog-spinner-color` theming, but the visuals are yours.\n */\n readonly variant = input<GogSpinnerVariant>('runic');\n}\n","@if (overlay()) {\n <div class=\"gog-spinner__overlay gog-flex-center\">\n <div class=\"gog-spinner__wrap gog-contained-layout gog-spinner__wrap--{{ size() }}\">\n <ng-container *ngTemplateOutlet=\"spinnerTpl\" />\n </div>\n </div>\n} @else {\n <div class=\"gog-spinner__wrap gog-contained-layout gog-spinner__wrap--{{ size() }}\">\n <ng-container *ngTemplateOutlet=\"spinnerTpl\" />\n </div>\n}\n\n<ng-template #spinnerTpl>\n @switch (variant()) {\n @case ('ring') {\n <span class=\"gog-spinner__ring\" aria-hidden=\"true\"></span>\n }\n @case ('custom') {\n <ng-content />\n }\n @default {\n <svg class=\"gog-spinner__svg\" viewBox=\"0 0 64 64\" fill=\"none\" aria-hidden=\"true\">\n <!-- Static dim track -->\n <circle class=\"gog-spinner__track\" cx=\"32\" cy=\"32\" r=\"26\" stroke-width=\"1.5\" />\n\n <!-- Outer arc — rotates clockwise, long segment -->\n <circle\n class=\"gog-spinner__arc-outer\"\n cx=\"32\"\n cy=\"32\"\n r=\"26\"\n stroke-width=\"2.5\"\n stroke-linecap=\"butt\"\n />\n\n <!-- Inner arc — rotates counter-clockwise, short segment -->\n <circle\n class=\"gog-spinner__arc-inner\"\n cx=\"32\"\n cy=\"32\"\n r=\"18\"\n stroke-width=\"1.5\"\n stroke-linecap=\"butt\"\n />\n\n <!-- Rotating diamond ticks group — single transform on <g> works correctly -->\n <g class=\"gog-spinner__ticks\">\n <polygon points=\"32,3 34,6 32,9 30,6\" class=\"gog-spinner__diamond\" />\n <polygon points=\"32,55 34,58 32,61 30,58\" class=\"gog-spinner__diamond\" />\n <polygon points=\"3,32 6,30 9,32 6,34\" class=\"gog-spinner__diamond\" />\n <polygon points=\"55,32 58,30 61,32 58,34\" class=\"gog-spinner__diamond\" />\n </g>\n\n <!-- Inner rune — glow pulse only, no transform -->\n <text\n class=\"gog-spinner__rune-wrap gog-spinner__rune\"\n x=\"32\"\n y=\"32\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n >\n ✦\n </text>\n </svg>\n }\n }\n</ng-template>\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\n\r\nimport { Subject, timer } from 'rxjs';\r\nimport { throttle } from 'rxjs/operators';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { GogSize, GogVariant } from '../../shared/types';\r\nimport { GOG_CONFIG } from '../../shared/config';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\nconst DEFAULT_DEBOUNCE = 300;\r\n\r\n@Component({\r\n selector: 'gog-button',\r\n imports: [SpinnerComponent],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Drives the :host(.gog-host--full-width) rules in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect.\r\n '[class.gog-host--full-width]': 'fullWidth()',\r\n },\r\n})\r\nexport class ButtonComponent {\r\n variant = input<GogVariant>('primary');\r\n size = input<GogSize>('md');\r\n disabled = input<boolean>(false);\r\n fullWidth = input<boolean>(false);\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n loading = input<boolean>(false);\r\n\r\n /**\r\n * Minimum time, in ms, between accepted clicks. This is a spam/double-click\r\n * guard, not a delay before the first click fires: the first click in a\r\n * window is emitted immediately (leading edge), and any further clicks\r\n * within `debounce` ms are silently dropped until the window elapses.\r\n * Unset, falls back to `GOG_CONFIG.button.debounce`, then to `300`.\r\n */\r\n debounce = input<number | undefined>(undefined);\r\n\r\n /**\r\n * Accessible name for the button, forwarded to the native <button>.\r\n * Setting `aria-label` directly on <gog-button> in a template does NOT\r\n * work — that attribute lands on the custom element host, not on the\r\n * actual interactive <button> inside it, so assistive tech never sees it.\r\n * Use this input instead, especially for icon-only buttons.\r\n */\r\n ariaLabel = input<string | null>(null);\r\n\r\n gogClick = output<MouseEvent>();\r\n\r\n /** Fully non-interactive: excluded from tab order via the native `disabled` attribute. */\r\n protected isNativeDisabled = computed(() => this.disabled());\r\n /** Logically blocked from activating (disabled OR loading), used to guard click handling. */\r\n protected isDisabled = computed(() => this.disabled() || this.loading());\r\n private static readonly SPINNER_SIZE_BY_BUTTON_SIZE: Record<GogSize, GogSize> = {\r\n xsm: 'sm',\r\n sm: 'sm',\r\n md: 'sm',\r\n lg: 'md',\r\n slg: 'md',\r\n };\r\n protected spinnerSize = computed<GogSize>(\r\n () => ButtonComponent.SPINNER_SIZE_BY_BUTTON_SIZE[this.size()],\r\n );\r\n\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n protected readonly resolvedDebounce = computed(\r\n () => this.debounce() ?? this.globalConfig.button?.debounce ?? DEFAULT_DEBOUNCE,\r\n );\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly click$ = new Subject<MouseEvent>();\r\n\r\n constructor() {\r\n this.click$\r\n .pipe(\r\n throttle(() => timer(this.resolvedDebounce()), { leading: true, trailing: false }),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe((event) => this.gogClick.emit(event));\r\n }\r\n\r\n protected onClick(event: MouseEvent): void {\r\n if (this.isDisabled()) return;\r\n this.click$.next(event);\r\n }\r\n}\r\n","<button\n (click)=\"onClick($event)\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() && !isNativeDisabled() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.disabled]=\"isNativeDisabled() ? true : null\"\n [class.gog-btn--ghost]=\"variant() === 'ghost'\"\n [class.gog-btn--xsm]=\"size() === 'xsm'\"\n [class.gog-btn--sm]=\"size() === 'sm'\"\n [class.gog-btn--md]=\"size() === 'md'\"\n [class.gog-btn--lg]=\"size() === 'lg'\"\n [class.gog-btn--slg]=\"size() === 'slg'\"\n [class.gog-btn--loading]=\"loading()\"\n [class.gog-btn--outline]=\"variant() === 'outline'\"\n [class.gog-btn--primary]=\"variant() === 'primary'\"\n [class.gog-btn--secondary]=\"variant() === 'secondary'\"\n [class.gog-cursor-not-allowed]=\"isDisabled()\"\n [class.gog-cursor-pointer]=\"!isDisabled()\"\n [class.gog-cursor-wait]=\"loading()\"\n [type]=\"type()\"\n class=\"gog-btn gog-inline-center gog-contained-layout\"\n>\n @if (loading()) {\n <gog-spinner [size]=\"spinnerSize()\" aria-hidden=\"true\" class=\"gog-btn__spinner\" />\n }\n\n <span [class.gog-btn__content--hidden]=\"loading()\" class=\"gog-btn__content\">\n <ng-content></ng-content>\n </span>\n</button>\n","const ROVING_FOCUS_KEYS = ['ArrowDown', 'ArrowUp', 'Home', 'End'] as const;\n\nexport type RovingFocusKey = (typeof ROVING_FOCUS_KEYS)[number];\n\nexport function isRovingFocusKey(key: string): key is RovingFocusKey {\n return (ROVING_FOCUS_KEYS as readonly string[]).includes(key);\n}\n\nexport function nextRovingFocusIndex(\n key: RovingFocusKey,\n currentIndex: number,\n count: number,\n): number {\n const lastIndex = count - 1;\n switch (key) {\n case 'Home':\n return 0;\n case 'End':\n return lastIndex;\n case 'ArrowDown':\n return (currentIndex + 1) % count;\n case 'ArrowUp':\n return (currentIndex - 1 + count) % count;\n }\n}\n\n/**\n * Arrow/Home/End navigation across a roving-tabindex-style list of focusable elements.\n * `event.currentTarget` must be one of `items`. Returns false (and leaves the event\n * untouched) for any other key, or when `items` doesn't contain the current target,\n * so callers can safely invoke this unconditionally from a keydown handler.\n */\nexport function handleRovingFocusKeydown(\n event: KeyboardEvent,\n items: readonly HTMLElement[],\n): boolean {\n if (!isRovingFocusKey(event.key) || items.length === 0) {\n return false;\n }\n\n const current = event.currentTarget as HTMLElement;\n const index = items.indexOf(current);\n if (index === -1) {\n return false;\n }\n\n event.preventDefault();\n const nextIndex = nextRovingFocusIndex(event.key, index, items.length);\n items[nextIndex]?.focus();\n return true;\n}\n","export type GogIconName =\n | 'check'\n | 'close'\n | 'chevron-up'\n | 'chevron-down'\n | 'sort'\n | 'sort-up'\n | 'sort-down'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'checkbox'\n | 'checkbox-checked'\n | 'eye'\n | 'eye-off';\n\nexport const ICON_DEFS: Record<GogIconName, string> = {\n check: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>`,\n\n close: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-x-icon lucide-x\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>`,\n\n 'chevron-up': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-chevron-up-icon lucide-chevron-up\"><path d=\"m18 15-6-6-6 6\"/></svg>`,\n\n 'chevron-down': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-chevron-down-icon lucide-chevron-down\"><path d=\"m6 9 6 6 6-6\"/></svg>`,\n\n sort: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-up-icon lucide-arrow-down-up\"><path d=\"m3 16 4 4 4-4\"/><path d=\"M7 20V4\"/><path d=\"m21 8-4-4-4 4\"/><path d=\"M17 4v16\"/></svg>`,\n\n 'sort-up': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-up-narrow-wide-icon lucide-arrow-up-narrow-wide\"><path d=\"m3 8 4-4 4 4\"/><path d=\"M7 4v16\"/><path d=\"M11 12h4\"/><path d=\"M11 16h7\"/><path d=\"M11 20h10\"/></svg>`,\n\n 'sort-down': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-wide-narrow-icon lucide-arrow-down-wide-narrow\"><path d=\"m3 16 4 4 4-4\"/><path d=\"M7 20V4\"/><path d=\"M11 4h10\"/><path d=\"M11 8h7\"/><path d=\"M11 12h4\"/></svg>`,\n\n success: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>`,\n\n error: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-bug-icon lucide-bug\"><path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/></svg>`,\n\n warning: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-triangle-alert-icon lucide-triangle-alert\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>`,\n\n info: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-info-icon lucide-info\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>`,\n\n checkbox: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-icon lucide-square\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/></svg>`,\n\n 'checkbox-checked': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>`,\n\n eye: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-eye-icon lucide-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\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>`,\n\n 'eye-off': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-eye-off-icon lucide-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\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><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\"/><path d=\"m2 2 20 20\"/></svg>`,\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n computed,\n input,\n inject,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { GogIconName, ICON_DEFS } from '../../shared/icons';\n\nexport type { GogIconName } from '../../shared/icons';\n\n@Component({\n selector: 'gog-icon',\n imports: [NgTemplateOutlet],\n template: `\n @if (template(); as iconTpl) {\n <ng-container *ngTemplateOutlet=\"iconTpl\" />\n } @else {\n <span [innerHTML]=\"iconSvg()\"></span>\n }\n `,\n styleUrl: './icon.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-icon',\n '[attr.aria-hidden]': 'ariaHidden() ? \"true\" : null',\n '[attr.aria-label]': 'ariaHidden() ? null : ariaLabel()',\n },\n})\nexport class IconComponent {\n private readonly sanitizer = inject(DomSanitizer);\n\n readonly name = input<GogIconName>('close');\n readonly template = input<TemplateRef<unknown> | null>(null);\n readonly title = input('');\n readonly ariaHidden = input(true);\n\n protected readonly ariaLabel = computed(() =>\n this.ariaHidden() ? null : this.title() || this.name(),\n );\n\n protected readonly iconSvg = computed(() =>\n this.sanitizer.bypassSecurityTrustHtml(ICON_DEFS[this.name()]),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport { GogSize, GogSkeletonAnimation, GogSkeletonShape } from '../../shared/types';\n\n@Component({\n selector: 'gog-skeleton',\n templateUrl: './skeleton.component.html',\n styleUrl: './skeleton.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'width()',\n '[style.height]': 'resolvedHeight()',\n // Decorative by default — a page can carry dozens of these while loading, and a\n // role=\"status\" on every single bone would flood assistive tech with announcements.\n // Pass `ariaLabel` on the one instance that should actually speak for the loading state.\n '[attr.role]': 'ariaLabel() ? \"status\" : null',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-hidden]': 'ariaLabel() ? null : \"true\"',\n },\n})\nexport class SkeletonComponent {\n readonly shape = input<GogSkeletonShape>('text');\n readonly size = input<GogSize>('md');\n readonly animation = input<GogSkeletonAnimation>('pulse');\n /** CSS width, e.g. '240px' or '60%'. Falls back to a shape/size default when unset. */\n readonly width = input<string | null>(null);\n /** CSS height override. Ignored for `text`, whose lines size from `size` instead. */\n readonly height = input<string | null>(null);\n /** Number of stacked lines when `shape=\"text\"`. The last line renders shorter. */\n readonly lines = input(1);\n readonly rounded = input(true);\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly lineList = computed(() => {\n const count = Math.max(1, this.lines());\n return Array.from({ length: count }, (_, index) => count > 1 && index === count - 1);\n });\n\n // Keeps a width-only override circular instead of an oval, since `circle` has no\n // independent height concept of its own.\n protected readonly resolvedHeight = computed(() => {\n if (this.shape() === 'text') {\n return null;\n }\n if (this.shape() === 'circle') {\n return this.height() ?? this.width();\n }\n return this.height();\n });\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-skeleton',\n `gog-skeleton--${this.shape()}`,\n `gog-skeleton--${this.size()}`,\n `gog-skeleton--${this.animation()}`,\n this.rounded() ? null : 'gog-skeleton--square',\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n}\n","@switch (shape()) {\n @case ('text') {\n @for (isShort of lineList(); track $index) {\n <span\n class=\"gog-skeleton__bone gog-skeleton__line\"\n [class.gog-skeleton__line--short]=\"isShort\"\n ></span>\n }\n }\n @default {\n <span class=\"gog-skeleton__bone gog-skeleton__shape\"></span>\n }\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { GogSize } from '../../shared/types';\r\nimport { handleRovingFocusKeydown } from '../../shared/roving-focus';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { SkeletonComponent } from '../skeleton/skeleton.component';\r\n\r\nexport interface GogAccordionItem {\r\n id: string | number;\r\n title: string;\r\n /** When true, the item's header is non-interactive and skipped by keyboard navigation. */\r\n disabled?: boolean;\r\n\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface GogAccordionHeaderContext {\r\n $implicit: GogAccordionItem;\r\n open: boolean;\r\n}\r\n\r\nexport interface GogAccordionToggleEvent {\r\n item: GogAccordionItem;\r\n open: boolean;\r\n}\r\n\r\nexport interface GogAccordionChevronContext {\r\n $implicit: GogAccordionItem;\r\n open: boolean;\r\n}\r\n\r\n@Directive({\r\n selector: '[gogAccordionContent]',\r\n})\r\nexport class GogAccordionContentDirective {\r\n readonly templateRef = inject<TemplateRef<{ $implicit: GogAccordionItem }>>(TemplateRef);\r\n}\r\n\r\n@Directive({\r\n selector: '[gogAccordionHeader]',\r\n})\r\nexport class GogAccordionHeaderDirective {\r\n readonly templateRef = inject<TemplateRef<GogAccordionHeaderContext>>(TemplateRef);\r\n}\r\n\r\n@Directive({\r\n selector: '[gogAccordionChevron]',\r\n})\r\nexport class GogAccordionChevronDirective {\r\n readonly templateRef = inject<TemplateRef<GogAccordionChevronContext>>(TemplateRef);\r\n}\r\n\r\n@Component({\r\n selector: 'gog-accordion',\r\n imports: [NgTemplateOutlet, IconComponent, SkeletonComponent],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-accordion-host',\r\n },\r\n})\r\nexport class AccordionComponent {\r\n private static nextUid = 0;\r\n readonly items = input<GogAccordionItem[]>([]);\r\n readonly size = input<GogSize>('lg');\r\n readonly expandFirst = input(false);\r\n readonly multi = input(false);\r\n readonly loading = input(false);\r\n /**\r\n * How many skeleton rows to render while `loading` is true and `items` is still\r\n * empty — the common case of \"the list itself hasn't arrived yet,\" where there's\r\n * no item count to derive a row count from. Ignored once `items` has entries:\r\n * then one skeleton row is rendered per item instead, so the placeholder matches\r\n * the eventual shape.\r\n */\r\n readonly skeletonCount = input(3);\r\n readonly showChevron = input(true);\r\n /**\r\n * When set, wraps each header button in `role=\"heading\"` with this `aria-level`,\r\n * so screen-reader users navigating by headings can find accordion sections.\r\n * Left unset by default since not every accordion instance represents document structure\r\n * (e.g. one nested inside a card).\r\n */\r\n readonly headingLevel = input<2 | 3 | 4 | 5 | 6 | undefined>(undefined);\r\n /**\r\n * Two-way bindable set of currently open item ids. Exposed as a model so consumers\r\n * can drive the accordion externally (e.g. `[(openIds)]=\"mySet\"`) instead of only\r\n * reacting to the `gogToggle` output.\r\n */\r\n readonly openIds = model<ReadonlySet<string | number>>(new Set());\r\n readonly gogToggle = output<GogAccordionToggleEvent>();\r\n readonly headerTpl = contentChild(GogAccordionHeaderDirective);\r\n readonly chevronTpl = contentChild(GogAccordionChevronDirective);\r\n readonly contentTpl = contentChild(GogAccordionContentDirective);\r\n /**\r\n * Unique per-instance id prefix. Prevents duplicate DOM ids (and therefore broken\r\n * aria-controls/aria-labelledby wiring) when several accordions render on the same\r\n * page and their items happen to share `id` values (e.g. ids coming straight from a DB).\r\n */\r\n protected readonly uid = `gog-acc-${AccordionComponent.nextUid++}`;\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n /**\r\n * Tracks whether the expandFirst auto-open has already run, independently of\r\n * `openIds` itself. Reading `openIds().size` directly inside the effect would\r\n * re-subscribe the effect to every future toggle (since `openIds()` gets read\r\n * on every run once `expandFirst` is true), causing pointless re-evaluation\r\n * on each click and re-opening the first item if `items` is later replaced\r\n * with a new array reference after the user closed everything by hand.\r\n */\r\n private readonly autoExpanded = signal(false);\r\n protected readonly skeletonRows = computed(() => {\r\n const count = this.items().length || this.skeletonCount();\r\n return Array.from({ length: count }, (_, index) => index);\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const items = this.items();\r\n\r\n if (!this.expandFirst() || items.length === 0 || untracked(this.autoExpanded)) {\r\n return;\r\n }\r\n\r\n this.openIds.set(new Set([items[0].id]));\r\n this.autoExpanded.set(true);\r\n });\r\n }\r\n\r\n protected isOpen(id: string | number): boolean {\r\n return this.openIds().has(id);\r\n }\r\n\r\n protected toggle(item: GogAccordionItem): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n const id = item.id;\r\n const current = this.openIds();\r\n const next = new Set(current);\r\n\r\n if (next.has(id)) {\r\n next.delete(id);\r\n } else {\r\n if (!this.multi()) next.clear();\r\n next.add(id);\r\n }\r\n\r\n this.openIds.set(next);\r\n this.gogToggle.emit({ item, open: next.has(id) });\r\n }\r\n\r\n protected onHeaderKeydown(event: KeyboardEvent): void {\r\n const host = this.host.nativeElement as HTMLElement;\r\n // Disabled headers are excluded so arrow/Home/End navigation skips over them,\r\n // matching the WAI-ARIA expectation that non-interactive controls aren't focus stops.\r\n const headers = Array.from(\r\n host.querySelectorAll('.gog-accordion__header:not([disabled])'),\r\n ) as HTMLButtonElement[];\r\n\r\n handleRovingFocusKeydown(event, headers);\r\n }\r\n}\r\n","<div\r\n [class.gog-accordion--loading]=\"loading()\"\r\n [class.gog-accordion--slg]=\"size() === 'slg'\"\r\n [class.gog-accordion--md]=\"size() === 'md'\"\r\n [class.gog-accordion--sm]=\"size() === 'sm'\"\r\n [class.gog-accordion--xsm]=\"size() === 'xsm'\"\r\n class=\"gog-accordion gog-contained-layout\"\r\n>\r\n @if (loading()) {\r\n @for (row of skeletonRows(); track row) {\r\n <div class=\"gog-accordion__item gog-accordion__item--skeleton\">\r\n <div class=\"gog-accordion__header gog-accordion__header--skeleton\">\r\n <gog-skeleton shape=\"text\" [size]=\"size()\" width=\"55%\" />\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n @for (item of items(); track item.id) {\r\n <div\r\n class=\"gog-accordion__item\"\r\n [class.gog-accordion__item--open]=\"isOpen(item.id)\"\r\n [class.gog-accordion__item--disabled]=\"item.disabled\"\r\n >\r\n <ng-template #headerButton>\r\n <button\r\n [id]=\"uid + '-btn-' + item.id\"\r\n class=\"gog-accordion__header\"\r\n [class.gog-accordion__header--chevronless]=\"!showChevron()\"\r\n [class.gog-accordion__header--open]=\"isOpen(item.id)\"\r\n [attr.aria-expanded]=\"isOpen(item.id)\"\r\n [attr.aria-controls]=\"uid + '-body-' + item.id\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [disabled]=\"item.disabled || null\"\r\n (click)=\"toggle(item)\"\r\n (keydown)=\"onHeaderKeydown($event)\"\r\n type=\"button\"\r\n >\r\n <span class=\"gog-accordion__header-content\">\r\n @if (headerTpl(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tpl.templateRef;\r\n context: { $implicit: item, open: isOpen(item.id) }\r\n \"\r\n />\r\n } @else {\r\n <span class=\"gog-accordion__title\">{{ item.title }}</span>\r\n }\r\n </span>\r\n @if (showChevron()) {\r\n <span\r\n class=\"gog-accordion__chevron\"\r\n [class.gog-accordion__chevron--auto-rotate]=\"!chevronTpl()\"\r\n aria-hidden=\"true\"\r\n >\r\n @if (chevronTpl(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tpl.templateRef;\r\n context: { $implicit: item, open: isOpen(item.id) }\r\n \"\r\n />\r\n } @else {\r\n <gog-icon name=\"chevron-down\" />\r\n }\r\n </span>\r\n }\r\n </button>\r\n </ng-template>\r\n\r\n @if (headingLevel(); as level) {\r\n <div role=\"heading\" [attr.aria-level]=\"level\" class=\"gog-accordion__heading\">\r\n <ng-container [ngTemplateOutlet]=\"headerButton\" />\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"headerButton\" />\r\n }\r\n\r\n <div\r\n [id]=\"uid + '-body-' + item.id\"\r\n class=\"gog-accordion__body\"\r\n [class.gog-accordion__body--open]=\"isOpen(item.id)\"\r\n role=\"region\"\r\n [attr.aria-labelledby]=\"uid + '-btn-' + item.id\"\r\n [attr.aria-hidden]=\"!isOpen(item.id)\"\r\n [attr.inert]=\"!isOpen(item.id) ? '' : null\"\r\n >\r\n <div class=\"gog-accordion__body-inner\">\r\n @if (contentTpl(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { $implicit: item }\" />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\r\n\r\n/**\r\n * Headless expand/collapse primitive — a trigger toggles a content region open and\r\n * closed, in place (no portal/overlay, unlike `gog-select`/`gog-multiselect`). Unopinionated\r\n * about markup: project any element as the trigger via `gogCollapsibleTrigger` and any\r\n * element as the content via `gogCollapsibleContent`; this component only holds the shared\r\n * `open` state and generates the id pair linking them for ARIA.\r\n */\r\n@Component({\r\n selector: 'gog-collapsible',\r\n template: `<ng-content />`,\r\n styleUrl: './collapsible.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-collapsible-host',\r\n '[class.gog-collapsible-host--disabled]': 'disabled()',\r\n },\r\n})\r\nexport class CollapsibleComponent {\r\n private static nextUid = 0;\r\n\r\n /** Two-way bindable open state: `[(open)]=\"signal\"`. */\r\n readonly open = model(false);\r\n readonly disabled = input(false);\r\n\r\n private readonly uid = `gog-collapsible-${CollapsibleComponent.nextUid++}`;\r\n readonly contentId = computed(() => `${this.uid}-content`);\r\n\r\n toggle(): void {\r\n if (this.disabled()) return;\r\n this.open.update((value) => !value);\r\n }\r\n}\r\n","import { Directive, inject } from '@angular/core';\r\n\r\nimport { CollapsibleComponent } from './collapsible.component';\r\n\r\n/**\r\n * Marks the element that toggles a `gog-collapsible`. Works on any clickable element\r\n * (`<button>`, `<a>`, ...) — this only wires the click handler and the ARIA attributes\r\n * pointing at the matching `gogCollapsibleContent`; it owns no markup of its own.\r\n */\r\n@Directive({\r\n selector: '[gogCollapsibleTrigger]',\r\n host: {\r\n class: 'gog-collapsible__trigger',\r\n '[class.gog-collapsible__trigger--open]': 'collapsible.open()',\r\n '[attr.aria-expanded]': 'collapsible.open()',\r\n '[attr.aria-controls]': 'collapsible.contentId()',\r\n '[attr.aria-disabled]': 'collapsible.disabled() ? \"true\" : null',\r\n '(click)': 'collapsible.toggle()',\r\n },\r\n})\r\nexport class GogCollapsibleTriggerDirective {\r\n protected readonly collapsible = inject(CollapsibleComponent);\r\n}\r\n","import { Directive, inject } from '@angular/core';\r\n\r\nimport { CollapsibleComponent } from './collapsible.component';\r\n\r\n/**\r\n * Marks the element that a `gog-collapsible` shows and hides. Applies the open/closed\r\n * CSS state and the ARIA wiring (`id`, `aria-hidden`, `inert`) to whatever element this is\r\n * placed on — that element owns its own content and layout.\r\n */\r\n@Directive({\r\n selector: '[gogCollapsibleContent]',\r\n host: {\r\n class: 'gog-collapsible__content',\r\n '[class.gog-collapsible__content--open]': 'collapsible.open()',\r\n '[id]': 'collapsible.contentId()',\r\n '[attr.aria-hidden]': '!collapsible.open()',\r\n '[attr.inert]': '!collapsible.open() ? \"\" : null',\r\n },\r\n})\r\nexport class GogCollapsibleContentDirective {\r\n protected readonly collapsible = inject(CollapsibleComponent);\r\n}\r\n","import { GogSize } from './types';\n\nexport interface GogCheckableControlSizeConfig {\n readonly boxSize: string;\n readonly labelSize: string;\n readonly indicatorSize: string;\n}\n\nexport const GOG_CHECKABLE_CONTROL_PADDING = 'var(--gog-control-checkbox-padding, 6px)';\n\nexport const GOG_CHECKABLE_CONTROL_SIZE_MAP = {\n xsm: {\n boxSize: 'var(--gog-control-checkbox-box-size-xsm, 12px)',\n labelSize: 'var(--gog-control-checkbox-label-size-xsm, 0.6875rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-xsm, 10px)',\n },\n sm: {\n boxSize: 'var(--gog-control-checkbox-box-size-sm, 18px)',\n labelSize: 'var(--gog-control-checkbox-label-size-sm, 0.8125rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-sm, 12px)',\n },\n md: {\n boxSize: 'var(--gog-control-checkbox-box-size-md, 24px)',\n labelSize: 'var(--gog-control-checkbox-label-size-md, 0.9375rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-md, 14px)',\n },\n lg: {\n boxSize: 'var(--gog-control-checkbox-box-size-lg, 32px)',\n labelSize: 'var(--gog-control-checkbox-label-size-lg, 1.0625rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-lg, 18px)',\n },\n slg: {\n boxSize: 'var(--gog-control-checkbox-box-size-slg, 40px)',\n labelSize: 'var(--gog-control-checkbox-label-size-slg, 1.1875rem)',\n indicatorSize: 'var(--gog-control-checkbox-icon-size-slg, 22px)',\n },\n} as const satisfies Record<GogSize, GogCheckableControlSizeConfig>;\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GogSize } from '../../shared/types';\r\nimport {\r\n GOG_CHECKABLE_CONTROL_PADDING,\r\n GOG_CHECKABLE_CONTROL_SIZE_MAP,\r\n} from '../../shared/checkable-control.config';\r\n\r\n@Component({\r\n selector: 'gog-checkbox',\r\n imports: [IconComponent],\r\n templateUrl: './checkbox.component.html',\r\n styleUrl: './checkbox.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.--gog-checkbox-box-size]': 'boxSize()',\r\n '[style.--gog-checkbox-label-size]': 'labelSize()',\r\n '[style.--gog-checkbox-icon-size]': 'iconSize()',\r\n '[style.--gog-checkbox-padding]': 'checkboxPadding',\r\n // Drives the :host(.gog-host--full-width) rules in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect.\r\n '[class.gog-host--full-width]': 'fullWidth()',\r\n },\r\n})\r\nexport class CheckboxComponent implements ControlValueAccessor {\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n readonly size = input<GogSize>('md');\r\n readonly indeterminate = input(false);\r\n readonly disabled = input(false);\r\n readonly fullWidth = input(false);\r\n readonly checkIconTemplate = input<TemplateRef<unknown> | null>(null);\r\n\r\n /**\r\n * Two-way bindable checked state: `[(checked)]=\"signal\"`.\r\n * This is the same state Angular Forms drives via `writeValue`/`registerOnChange`\r\n * when the component is used with `formControlName`/`[formControl]`.\r\n * Don't wire both a form directive AND `[(checked)]` to the same instance —\r\n * pick one, otherwise you end up with two competing sources of truth.\r\n */\r\n readonly checked = model<boolean>(false);\r\n protected readonly controlSize = computed(() => GOG_CHECKABLE_CONTROL_SIZE_MAP[this.size()]);\r\n protected readonly boxSize = computed(() => this.controlSize().boxSize);\r\n protected readonly checkboxPadding = GOG_CHECKABLE_CONTROL_PADDING;\r\n protected readonly labelSize = computed(() => this.controlSize().labelSize);\r\n protected readonly iconSize = computed(() => this.controlSize().indicatorSize);\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR matches the pattern used\r\n // by every other form control in the library — providing NG_VALUE_ACCESSOR on the\r\n // component while also injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(val: boolean): void {\r\n this.checked.set(val ?? false);\r\n }\r\n\r\n registerOnChange(fn: (val: boolean) => void): void {\r\n this.onCheckedChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n onInputChange(event: Event): void {\r\n if (this.isDisabled()) return;\r\n const input = event.target as HTMLInputElement;\r\n const next = input.checked;\r\n this.checked.set(next);\r\n this.onCheckedChange(next);\r\n this.onTouched();\r\n }\r\n\r\n onBlur(): void {\r\n if (this.isDisabled()) return;\r\n this.onTouched();\r\n }\r\n\r\n private onCheckedChange: (val: boolean) => void = () => {};\r\n\r\n private onTouched: () => void = () => {};\r\n}\r\n","<label [class.gog-checkbox--disabled]=\"isDisabled()\" class=\"gog-checkbox gog-contained-layout\">\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInputChange($event)\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : null\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [indeterminate]=\"indeterminate()\"\n class=\"gog-checkbox__input\"\n type=\"checkbox\"\n />\n\n <span\n [class.gog-checkbox__box--checked]=\"checked()\"\n [class.gog-checkbox__box--indeterminate]=\"indeterminate()\"\n class=\"gog-checkbox__box\"\n >\n @if (indeterminate()) {\n <span class=\"gog-checkbox__dash\" aria-hidden=\"true\"></span>\n } @else if (checked()) {\n <gog-icon [template]=\"checkIconTemplate()\" name=\"check\" />\n }\n </span>\n\n @if (label()) {\n <span class=\"gog-checkbox__label\">{{ label() }}</span>\n }\n</label>\n","import { InjectionToken } from '@angular/core';\n\nexport const DIALOG_DATA = new InjectionToken<unknown>('DIALOG_DATA');\nexport interface DialogRef<TResult = unknown> {\n close(result?: TResult): void;\n}\n\nexport const DIALOG_REF = new InjectionToken<DialogRef<unknown>>('DIALOG_REF');\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ButtonComponent } from '../../button/button.component';\nimport { DIALOG_DATA, DIALOG_REF } from '../dialog.tokens';\n\nexport interface ConfirmDialogData {\n title: string;\n description: string;\n confirmText: string;\n cancelText: string;\n}\n\n@Component({\n selector: 'gog-confirmation-dialog',\n imports: [ButtonComponent],\n templateUrl: './confirmation-dialog.component.html',\n styleUrl: './confirmation-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmationDialogComponent {\n private static count = 0;\n\n protected readonly instanceId = ++ConfirmationDialogComponent.count;\n protected readonly data = inject<ConfirmDialogData>(DIALOG_DATA);\n private readonly ref = inject(DIALOG_REF);\n\n protected confirm(): void {\n this.ref.close(true);\n }\n\n protected cancel(): void {\n this.ref.close(false);\n }\n}\n","<div\n class=\"confirm-dialog\"\n [attr.aria-labelledby]=\"'confirm-title-' + instanceId\"\n [attr.aria-describedby]=\"'confirm-desc-' + instanceId\"\n>\n <h3 [id]=\"'confirm-title-' + instanceId\" class=\"confirm-dialog__title heading-md\">\n {{ data.title }}\n </h3>\n <p [id]=\"'confirm-desc-' + instanceId\" class=\"confirm-dialog__description body-sm\">\n {{ data.description }}\n </p>\n <div class=\"confirm-dialog__actions\">\n <gog-button variant=\"ghost\" type=\"button\" (gogClick)=\"cancel()\">{{\n data.cancelText\n }}</gog-button>\n <gog-button variant=\"primary\" type=\"button\" (gogClick)=\"confirm()\">{{\n data.confirmText\n }}</gog-button>\n </div>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, TemplateRef, inject, signal, Type } from '@angular/core';\nimport { GogIconName } from '../../components/icon/icon.component';\n\nexport interface DialogConfig {\n title?: string;\n component: Type<unknown>;\n data?: unknown;\n modal?: boolean;\n closable?: boolean;\n draggable?: boolean;\n closeIconName?: GogIconName;\n closeIconTemplate?: TemplateRef<unknown> | null;\n width?: string;\n maxWidth?: string;\n /** ARIA role for the dialog panel. Use 'alertdialog' for confirmation prompts. Default: 'dialog' */\n role?: 'dialog' | 'alertdialog';\n /** z-index of the dialog backdrop. Dropdowns inside get zIndex+10. Default: 1000 */\n zIndex?: number;\n}\n\nexport interface DialogHandle<TResult = unknown> {\n close(result?: TResult): void;\n readonly afterClosed: Promise<TResult | undefined>;\n}\n\nexport interface OpenDialog {\n id: number;\n zIndex: number;\n offsetX: number;\n offsetY: number;\n config: DialogConfig;\n resolve: (result: unknown) => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n private readonly document = inject(DOCUMENT);\n readonly dialogs = signal<OpenDialog[]>([]);\n private nextId = 0;\n private nextZIndex = 1000;\n private modalDialogCount = 0;\n private bodyOverflowBeforeLock: string | null = null;\n private focusedBeforeOpen: HTMLElement | null = null;\n\n open<TResult = unknown>(config: DialogConfig): DialogHandle<TResult> {\n const id = ++this.nextId;\n const zIndex = config.zIndex ?? this.nextZIndex++;\n this.nextZIndex = Math.max(this.nextZIndex, zIndex + 1);\n\n let resolveAfterClosed!: (result: TResult | undefined) => void;\n\n const afterClosed = new Promise<TResult | undefined>((resolve) => {\n resolveAfterClosed = resolve;\n });\n\n const dialog: OpenDialog = {\n id,\n zIndex,\n offsetX: 0,\n offsetY: 0,\n config,\n resolve: (result) => resolveAfterClosed(result as TResult | undefined),\n };\n\n if (config.modal !== false && this.modalDialogCount === 0) {\n this.focusedBeforeOpen =\n this.document.activeElement instanceof HTMLElement ? this.document.activeElement : null;\n this.lockBodyScroll();\n }\n\n if (config.modal !== false) {\n this.modalDialogCount += 1;\n }\n\n this.dialogs.update((list) => [...list, dialog]);\n\n return {\n close: (result?: TResult) => this.close(dialog, result),\n afterClosed,\n };\n }\n\n close(dialog: OpenDialog, result?: unknown): void {\n if (!this.dialogs().some((entry) => entry.id === dialog.id)) return;\n\n dialog.resolve(result);\n this.dialogs.update((list) => list.filter((entry) => entry.id !== dialog.id));\n\n if (dialog.config.modal !== false) {\n this.modalDialogCount = Math.max(0, this.modalDialogCount - 1);\n }\n\n if (this.modalDialogCount === 0) {\n this.unlockBodyScroll();\n }\n\n if (this.dialogs().length === 0) {\n this.restoreFocus();\n }\n }\n\n closeAll(result?: unknown): void {\n const dialogs = this.dialogs();\n dialogs.forEach((dialog) => dialog.resolve(result));\n this.dialogs.set([]);\n this.modalDialogCount = 0;\n this.unlockBodyScroll();\n this.restoreFocus();\n }\n\n updatePosition(dialogId: number, offsetX: number, offsetY: number): void {\n this.dialogs.update((list) =>\n list.map((dialog) => (dialog.id === dialogId ? { ...dialog, offsetX, offsetY } : dialog)),\n );\n }\n\n private lockBodyScroll(): void {\n if (this.bodyOverflowBeforeLock !== null) return;\n this.bodyOverflowBeforeLock = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private unlockBodyScroll(): void {\n if (this.bodyOverflowBeforeLock === null) return;\n this.document.body.style.overflow = this.bodyOverflowBeforeLock;\n this.bodyOverflowBeforeLock = null;\n }\n\n private restoreFocus(): void {\n const element = this.focusedBeforeOpen;\n this.focusedBeforeOpen = null;\n if (!element || !this.document.contains(element)) return;\n element.focus({ preventScroll: true });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n PLATFORM_ID,\r\n afterNextRender,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { GogScrollAxis, GogScrollOverscrollBehavior, GogScrollSize } from '../../shared/types';\r\nimport { GOG_CONFIG } from '../../shared/config';\r\n\r\n/** Snapshot of the viewport's native scroll geometry, emitted on every scroll/resize. */\r\nexport interface GogScrollMetrics {\r\n scrollTop: number;\r\n scrollLeft: number;\r\n scrollHeight: number;\r\n scrollWidth: number;\r\n clientHeight: number;\r\n clientWidth: number;\r\n}\r\n\r\ntype GogScrollDirection = 'vertical' | 'horizontal';\r\n\r\n/** A sub-pixel overflow reading is rounding noise, not real scrollable content. */\r\nconst OVERFLOW_EPSILON = 1;\r\n/** Portion of the viewport paged per track click, leaving visual continuity with the old view. */\r\nconst TRACK_CLICK_PAGE_RATIO = 0.9;\r\n/** Built-in fallbacks — the bottom of each input's GOG_CONFIG.scroll ?? this chain. */\r\nconst DEFAULT_SIZE: GogScrollSize = 'normal';\r\nconst DEFAULT_AUTO_HIDE = true;\r\nconst DEFAULT_HIDE_DELAY = 800;\r\nconst DEFAULT_OVERSCROLL_BEHAVIOR: GogScrollOverscrollBehavior = 'auto';\r\n\r\nfunction readPx(raw: string, fallback: number): number {\r\n const parsed = Number.parseFloat(raw.trim());\r\n return Number.isFinite(parsed) ? parsed : fallback;\r\n}\r\n\r\nfunction clamp(value: number, min: number, max: number): number {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\n/**\r\n * Drop-in replacement for a native `overflow: auto` region: the content still scrolls\r\n * natively (wheel, touch, keyboard, focus-into-view all keep working unmodified), only the\r\n * browser's own scrollbar chrome is hidden and replaced with a themeable, draggable\r\n * overlay thumb built from plain pointer events + `ResizeObserver` — no CDK involved, to\r\n * stay consistent with the rest of this library's hand-rolled overlay/positioning code.\r\n */\r\n@Component({\r\n selector: 'gog-scroll',\r\n imports: [],\r\n templateUrl: './scroll.component.html',\r\n styleUrl: './scroll.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ScrollComponent {\r\n /** Which axes get an overlay thumb. Native scrolling on the other axis is unaffected. */\r\n readonly axis = input<GogScrollAxis>('vertical');\r\n /** Unset, falls back to `GOG_CONFIG.scroll.size`, then to `'normal'`. */\r\n readonly size = input<GogScrollSize | undefined>(undefined);\r\n /**\r\n * Fades the thumb out after `hideDelay` ms of inactivity; false keeps it always visible.\r\n * Unset, falls back to `GOG_CONFIG.scroll.autoHide`, then to `true`.\r\n */\r\n readonly autoHide = input<boolean | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.scroll.hideDelay`, then to `800`. */\r\n readonly hideDelay = input<number | undefined>(undefined);\r\n /** Pixel distance from an edge that still counts as \"reached\" for gogReachStart/End. */\r\n readonly reachThreshold = input(0);\r\n /**\r\n * Renders the viewport as its own tab stop (`tabindex=\"0\"`, `role=\"region\"`) per the\r\n * WAI-ARIA scrollable-region pattern. Turn off when nesting inside a component that\r\n * already owns focus/keyboard handling (a listbox panel, a dialog body) so this doesn't\r\n * add a redundant stop — the descendants' own focus still auto-scrolls into view either way.\r\n */\r\n readonly focusable = input(true);\r\n /** Accessible name for the viewport when `focusable` is true and there is no visible label. */\r\n readonly ariaLabel = input('');\r\n /**\r\n * What happens when a scroll gesture reaches this instance's edge. Unset, falls back to\r\n * `GOG_CONFIG.scroll.overscrollBehavior`, then to `'auto'`. See `GogScrollOverscrollBehavior`\r\n * for what each value does.\r\n */\r\n readonly overscrollBehavior = input<GogScrollOverscrollBehavior | undefined>(undefined);\r\n\r\n readonly gogScroll = output<GogScrollMetrics>();\r\n readonly gogReachStart = output<GogScrollDirection>();\r\n readonly gogReachEnd = output<GogScrollDirection>();\r\n\r\n protected readonly viewportRef = viewChild.required<ElementRef<HTMLDivElement>>('viewport');\r\n protected readonly contentRef = viewChild.required<ElementRef<HTMLDivElement>>('content');\r\n\r\n protected readonly showTrackV = signal(false);\r\n protected readonly showTrackH = signal(false);\r\n /**\r\n * Flips true once the first real measurement has run. Before that (SSR, or the client\r\n * frame before hydration/afterNextRender fires), an allowed axis defaults to `auto` — the\r\n * same safe, always-clips behavior this component had before viewportOverflowY/X existed —\r\n * rather than guessing `visible` from a `showTrackV`/`H` that just hasn't been measured yet.\r\n */\r\n private readonly measured = signal(false);\r\n /**\r\n * `overflow-y`/`overflow-x` on the viewport, driven by measured overflow rather than a\r\n * static `axis`-only class. Any axis that isn't *currently, actually* scrolling — because\r\n * it's disabled by `axis`, or because it's allowed but the content doesn't overflow it —\r\n * gets `visible`, never `hidden`/`auto`. A non-`visible` overflow value makes the viewport\r\n * a \"scroll container\" per spec regardless of whether it has anything to scroll, which\r\n * becomes the containing block for `position: sticky` descendants (e.g. gog-table's sticky\r\n * header) and a scroll-chaining boundary for wheel input. Left non-visible on a disabled or\r\n * unneeded axis, an instance nested inside another scroller — axis=\"horizontal\" wrapping a\r\n * table that fits, itself inside a taller outer gog-scroll — would silently swallow the\r\n * outer axis's wheel scroll and break its sticky headers, even though this instance itself\r\n * never visibly scrolls that axis. `visible` whenever the axis is inert avoids both.\r\n */\r\n protected readonly viewportOverflowY = computed(() => {\r\n if (this.axis() === 'horizontal') return 'visible';\r\n if (!this.measured()) return 'auto';\r\n return this.showTrackV() ? 'auto' : 'visible';\r\n });\r\n protected readonly viewportOverflowX = computed(() => {\r\n if (this.axis() === 'vertical') return 'visible';\r\n if (!this.measured()) return 'auto';\r\n return this.showTrackH() ? 'auto' : 'visible';\r\n });\r\n /** App/subtree-wide fallbacks for the inputs above that don't set their own value. */\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n protected readonly resolvedSize = computed(\r\n () => this.size() ?? this.globalConfig.scroll?.size ?? DEFAULT_SIZE,\r\n );\r\n protected readonly resolvedAutoHide = computed(\r\n () => this.autoHide() ?? this.globalConfig.scroll?.autoHide ?? DEFAULT_AUTO_HIDE,\r\n );\r\n protected readonly resolvedHideDelay = computed(\r\n () => this.hideDelay() ?? this.globalConfig.scroll?.hideDelay ?? DEFAULT_HIDE_DELAY,\r\n );\r\n protected readonly resolvedOverscrollBehavior = computed(\r\n () =>\r\n this.overscrollBehavior() ??\r\n this.globalConfig.scroll?.overscrollBehavior ??\r\n DEFAULT_OVERSCROLL_BEHAVIOR,\r\n );\r\n /**\r\n * Only applies `resolvedOverscrollBehavior` on an axis that's actually acting as a scroll\r\n * container — on an axis that's `visible` (see viewportOverflowY/X above) there is no\r\n * scroll boundary on it to contain in the first place.\r\n */\r\n protected readonly viewportOverscrollY = computed(() =>\r\n this.showTrackV() ? this.resolvedOverscrollBehavior() : 'auto',\r\n );\r\n protected readonly viewportOverscrollX = computed(() =>\r\n this.showTrackH() ? this.resolvedOverscrollBehavior() : 'auto',\r\n );\r\n protected readonly thumbSizeV = signal(100);\r\n protected readonly thumbPosV = signal(0);\r\n protected readonly thumbSizeH = signal(100);\r\n protected readonly thumbPosH = signal(0);\r\n protected readonly interacting = signal(false);\r\n protected readonly dragAxis = signal<GogScrollDirection | null>(null);\r\n\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private resizeObserver: ResizeObserver | null = null;\r\n private updateFrame: number | null = null;\r\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n /** Read once per token change instead of per drag/scroll tick — see refreshTokens(). */\r\n private thumbMinSizePx = 32;\r\n\r\n private dragStartPointer = 0;\r\n private dragStartScroll = 0;\r\n private dragTrackLength = 0;\r\n private dragThumbSizePct = 100;\r\n\r\n private readonly reachState: Record<GogScrollDirection, { start: boolean; end: boolean }> = {\r\n vertical: { start: true, end: false },\r\n horizontal: { start: true, end: false },\r\n };\r\n\r\n constructor() {\r\n if (!this.isBrowser) return;\r\n\r\n afterNextRender(() => {\r\n const viewportEl = this.viewportRef().nativeElement;\r\n const contentEl = this.contentRef().nativeElement;\r\n\r\n this.refreshTokens();\r\n\r\n // Not implemented by jsdom (so: absent in unit tests) and by very old browsers —\r\n // degrades to a single initial measurement instead of tracking live resizes.\r\n if (typeof ResizeObserver !== 'undefined') {\r\n const observer = new ResizeObserver(() => this.scheduleMeasure());\r\n observer.observe(viewportEl);\r\n observer.observe(contentEl);\r\n this.resizeObserver = observer;\r\n }\r\n\r\n this.scheduleMeasure();\r\n });\r\n\r\n // Re-measures on axis/size changes; guarded because this also fires once before\r\n // afterNextRender has run, when there is nothing yet to measure.\r\n effect(() => {\r\n this.axis();\r\n this.resolvedSize();\r\n if (!this.resizeObserver) return;\r\n this.refreshTokens();\r\n this.scheduleMeasure();\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.resizeObserver?.disconnect();\r\n if (this.updateFrame !== null) cancelAnimationFrame(this.updateFrame);\r\n if (this.hideTimer !== null) clearTimeout(this.hideTimer);\r\n });\r\n }\r\n\r\n /** Scrolls the viewport exactly like `Element.scrollTo` — this simply forwards to it. */\r\n scrollTo(options: ScrollToOptions): void {\r\n this.viewportRef().nativeElement.scrollTo(options);\r\n }\r\n\r\n scrollToTop(behavior: ScrollBehavior = 'smooth'): void {\r\n this.viewportRef().nativeElement.scrollTo({ top: 0, behavior });\r\n }\r\n\r\n scrollToBottom(behavior: ScrollBehavior = 'smooth'): void {\r\n const el = this.viewportRef().nativeElement;\r\n el.scrollTo({ top: el.scrollHeight, behavior });\r\n }\r\n\r\n scrollToLeft(behavior: ScrollBehavior = 'smooth'): void {\r\n this.viewportRef().nativeElement.scrollTo({ left: 0, behavior });\r\n }\r\n\r\n scrollToRight(behavior: ScrollBehavior = 'smooth'): void {\r\n const el = this.viewportRef().nativeElement;\r\n el.scrollTo({ left: el.scrollWidth, behavior });\r\n }\r\n\r\n protected onScroll(): void {\r\n this.interacting.set(true);\r\n this.restartHideTimer();\r\n this.scheduleMeasure();\r\n }\r\n\r\n protected onActivity(): void {\r\n this.interacting.set(true);\r\n this.restartHideTimer();\r\n }\r\n\r\n protected onTrackPointerDown(event: PointerEvent, axis: GogScrollDirection): void {\r\n // Only the empty track background pages the view; a click that landed on the thumb\r\n // itself already got a dedicated handler and stopped propagation before reaching here.\r\n if (event.target !== event.currentTarget) return;\r\n event.preventDefault();\r\n\r\n const track = event.currentTarget as HTMLElement;\r\n const rect = track.getBoundingClientRect();\r\n const viewportEl = this.viewportRef().nativeElement;\r\n\r\n if (axis === 'vertical') {\r\n const clickRatio = (event.clientY - rect.top) / rect.height;\r\n const thumbCenter = this.thumbPosV() / 100 + this.thumbSizeV() / 200;\r\n const direction = clickRatio < thumbCenter ? -1 : 1;\r\n viewportEl.scrollBy({\r\n top: direction * viewportEl.clientHeight * TRACK_CLICK_PAGE_RATIO,\r\n behavior: 'smooth',\r\n });\r\n } else {\r\n const clickRatio = (event.clientX - rect.left) / rect.width;\r\n const thumbCenter = this.thumbPosH() / 100 + this.thumbSizeH() / 200;\r\n const direction = clickRatio < thumbCenter ? -1 : 1;\r\n viewportEl.scrollBy({\r\n left: direction * viewportEl.clientWidth * TRACK_CLICK_PAGE_RATIO,\r\n behavior: 'smooth',\r\n });\r\n }\r\n\r\n this.interacting.set(true);\r\n this.restartHideTimer();\r\n }\r\n\r\n protected onThumbPointerDown(event: PointerEvent, axis: GogScrollDirection): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const thumb = event.currentTarget as HTMLElement;\r\n thumb.setPointerCapture(event.pointerId);\r\n\r\n const track = thumb.parentElement as HTMLElement;\r\n const viewportEl = this.viewportRef().nativeElement;\r\n\r\n this.dragAxis.set(axis);\r\n this.dragStartPointer = axis === 'vertical' ? event.clientY : event.clientX;\r\n this.dragStartScroll = axis === 'vertical' ? viewportEl.scrollTop : viewportEl.scrollLeft;\r\n this.dragTrackLength = axis === 'vertical' ? track.clientHeight : track.clientWidth;\r\n this.dragThumbSizePct = axis === 'vertical' ? this.thumbSizeV() : this.thumbSizeH();\r\n }\r\n\r\n protected onThumbPointerMove(event: PointerEvent, axis: GogScrollDirection): void {\r\n if (this.dragAxis() !== axis) return;\r\n\r\n const viewportEl = this.viewportRef().nativeElement;\r\n const pointer = axis === 'vertical' ? event.clientY : event.clientX;\r\n const delta = pointer - this.dragStartPointer;\r\n // Only the track length left over once the thumb's own size is subtracted actually\r\n // maps to travel distance — a thumb spanning the whole track has nowhere to move.\r\n const freeTrackLength = this.dragTrackLength * (1 - this.dragThumbSizePct / 100);\r\n if (freeTrackLength <= 0) return;\r\n\r\n const scrollable =\r\n axis === 'vertical'\r\n ? viewportEl.scrollHeight - viewportEl.clientHeight\r\n : viewportEl.scrollWidth - viewportEl.clientWidth;\r\n const nextScroll = this.dragStartScroll + (delta / freeTrackLength) * scrollable;\r\n\r\n if (axis === 'vertical') {\r\n viewportEl.scrollTop = nextScroll;\r\n } else {\r\n viewportEl.scrollLeft = nextScroll;\r\n }\r\n }\r\n\r\n protected onThumbPointerUp(event: PointerEvent): void {\r\n const thumb = event.currentTarget as HTMLElement;\r\n if (thumb.hasPointerCapture(event.pointerId)) {\r\n thumb.releasePointerCapture(event.pointerId);\r\n }\r\n this.dragAxis.set(null);\r\n this.restartHideTimer();\r\n }\r\n\r\n private restartHideTimer(): void {\r\n if (this.hideTimer !== null) {\r\n clearTimeout(this.hideTimer);\r\n this.hideTimer = null;\r\n }\r\n if (!this.resolvedAutoHide()) return;\r\n\r\n this.hideTimer = setTimeout(() => {\r\n if (this.dragAxis() === null) this.interacting.set(false);\r\n }, this.resolvedHideDelay());\r\n }\r\n\r\n /** Reads the tokens that feed thumb-size math. Cheap, but still only once per change. */\r\n private refreshTokens(): void {\r\n const styles = getComputedStyle(this.viewportRef().nativeElement);\r\n this.thumbMinSizePx = readPx(styles.getPropertyValue('--gog-scroll-thumb-min-size'), 32);\r\n }\r\n\r\n /** Coalesces scroll/resize bursts into one measurement per frame. */\r\n private scheduleMeasure(): void {\r\n if (this.updateFrame !== null) return;\r\n this.updateFrame = requestAnimationFrame(() => {\r\n this.updateFrame = null;\r\n this.measure();\r\n });\r\n }\r\n\r\n private measure(): void {\r\n const el = this.viewportRef().nativeElement;\r\n const { scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth } = el;\r\n\r\n const axis = this.axis();\r\n const canV = axis !== 'horizontal';\r\n const canH = axis !== 'vertical';\r\n const overflowV = canV && scrollHeight - clientHeight > OVERFLOW_EPSILON;\r\n const overflowH = canH && scrollWidth - clientWidth > OVERFLOW_EPSILON;\r\n\r\n this.showTrackV.set(overflowV);\r\n this.showTrackH.set(overflowH);\r\n this.measured.set(true);\r\n\r\n if (overflowV) {\r\n const minPct = clientHeight > 0 ? (this.thumbMinSizePx / clientHeight) * 100 : 0;\r\n const sizePct = clamp((clientHeight / scrollHeight) * 100, minPct, 100);\r\n const scrollableV = scrollHeight - clientHeight;\r\n const ratioV = scrollableV > 0 ? scrollTop / scrollableV : 0;\r\n this.thumbSizeV.set(sizePct);\r\n this.thumbPosV.set(ratioV * (100 - sizePct));\r\n }\r\n\r\n if (overflowH) {\r\n const minPct = clientWidth > 0 ? (this.thumbMinSizePx / clientWidth) * 100 : 0;\r\n const sizePct = clamp((clientWidth / scrollWidth) * 100, minPct, 100);\r\n const scrollableH = scrollWidth - clientWidth;\r\n const ratioH = scrollableH > 0 ? scrollLeft / scrollableH : 0;\r\n this.thumbSizeH.set(sizePct);\r\n this.thumbPosH.set(ratioH * (100 - sizePct));\r\n }\r\n\r\n this.gogScroll.emit({ scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth });\r\n // Only for axes this instance actually scrolls — otherwise the disabled axis is\r\n // trivially \"at both ends\" on the very first measurement and fires once for free.\r\n if (canV) this.checkReach('vertical', scrollTop, scrollHeight, clientHeight, overflowV);\r\n if (canH) this.checkReach('horizontal', scrollLeft, scrollWidth, clientWidth, overflowH);\r\n }\r\n\r\n private checkReach(\r\n axis: GogScrollDirection,\r\n position: number,\r\n scrollSize: number,\r\n clientSize: number,\r\n overflow: boolean,\r\n ): void {\r\n const threshold = this.reachThreshold();\r\n const atStart = !overflow || position <= threshold;\r\n const atEnd = !overflow || position + clientSize >= scrollSize - threshold;\r\n const state = this.reachState[axis];\r\n\r\n if (atStart && !state.start) this.gogReachStart.emit(axis);\r\n if (atEnd && !state.end) this.gogReachEnd.emit(axis);\r\n state.start = atStart;\r\n state.end = atEnd;\r\n }\r\n}\r\n","<div\r\n class=\"gog-scroll\"\r\n [class.gog-scroll--thin]=\"resolvedSize() === 'thin'\"\r\n [class.gog-scroll--v]=\"axis() !== 'horizontal'\"\r\n [class.gog-scroll--h]=\"axis() !== 'vertical'\"\r\n [class.gog-scroll--both]=\"axis() === 'both'\"\r\n [class.gog-scroll--dragging]=\"dragAxis() !== null\"\r\n>\r\n <div\r\n #viewport\r\n class=\"gog-scroll__viewport\"\r\n [style.overflow-y]=\"viewportOverflowY()\"\r\n [style.overflow-x]=\"viewportOverflowX()\"\r\n [style.overscroll-behavior-y]=\"viewportOverscrollY()\"\r\n [style.overscroll-behavior-x]=\"viewportOverscrollX()\"\r\n [attr.tabindex]=\"focusable() ? 0 : null\"\r\n [attr.role]=\"focusable() ? 'region' : null\"\r\n [attr.aria-label]=\"focusable() && ariaLabel() ? ariaLabel() : null\"\r\n (scroll)=\"onScroll()\"\r\n (pointerenter)=\"onActivity()\"\r\n (pointermove)=\"onActivity()\"\r\n >\r\n <div #content class=\"gog-scroll__content\">\r\n <ng-content />\r\n </div>\r\n </div>\r\n\r\n @if (showTrackV()) {\r\n <div\r\n class=\"gog-scroll__track gog-scroll__track--v\"\r\n [class.gog-scroll__track--visible]=\"!resolvedAutoHide() || interacting() || dragAxis() === 'vertical'\"\r\n (pointerdown)=\"onTrackPointerDown($event, 'vertical')\"\r\n >\r\n <div\r\n class=\"gog-scroll__thumb gog-scroll__thumb--v\"\r\n [class.gog-scroll__thumb--active]=\"dragAxis() === 'vertical'\"\r\n [style.height.%]=\"thumbSizeV()\"\r\n [style.top.%]=\"thumbPosV()\"\r\n (pointerdown)=\"onThumbPointerDown($event, 'vertical')\"\r\n (pointermove)=\"onThumbPointerMove($event, 'vertical')\"\r\n (pointerup)=\"onThumbPointerUp($event)\"\r\n (pointercancel)=\"onThumbPointerUp($event)\"\r\n ></div>\r\n </div>\r\n }\r\n\r\n @if (showTrackH()) {\r\n <div\r\n class=\"gog-scroll__track gog-scroll__track--h\"\r\n [class.gog-scroll__track--visible]=\"!resolvedAutoHide() || interacting() || dragAxis() === 'horizontal'\"\r\n (pointerdown)=\"onTrackPointerDown($event, 'horizontal')\"\r\n >\r\n <div\r\n class=\"gog-scroll__thumb gog-scroll__thumb--h\"\r\n [class.gog-scroll__thumb--active]=\"dragAxis() === 'horizontal'\"\r\n [style.width.%]=\"thumbSizeH()\"\r\n [style.left.%]=\"thumbPosH()\"\r\n (pointerdown)=\"onThumbPointerDown($event, 'horizontal')\"\r\n (pointermove)=\"onThumbPointerMove($event, 'horizontal')\"\r\n (pointerup)=\"onThumbPointerUp($event)\"\r\n (pointercancel)=\"onThumbPointerUp($event)\"\r\n ></div>\r\n </div>\r\n }\r\n\r\n @if (axis() === 'both' && showTrackV() && showTrackH()) {\r\n <div class=\"gog-scroll__corner\" aria-hidden=\"true\"></div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n effect,\r\n inject,\r\n Injector,\r\n} from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { DIALOG_DATA, DIALOG_REF } from './dialog.tokens';\r\nimport { DialogService, OpenDialog } from '../../services/dialog-service/dialog.service';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\n\r\n@Component({\r\n selector: 'gog-dialog',\r\n imports: [NgComponentOutlet, IconComponent, ScrollComponent],\r\n templateUrl: './dialog.component.html',\r\n styleUrl: './dialog.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DialogComponent {\r\n protected readonly dialogService = inject(DialogService);\r\n private readonly parentInjector = inject(Injector);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n private readonly injectorCache = new WeakMap<OpenDialog, Injector>();\r\n private readonly backdropPress = new Set<number>();\r\n private readonly focusableSelector = [\r\n 'a[href]',\r\n 'button:not([disabled])',\r\n 'input:not([disabled]):not([type=\"hidden\"])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[contenteditable=\"true\"]',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n ].join(',');\r\n\r\n constructor() {\r\n effect(() => {\r\n const dialogs = this.dialogService.dialogs();\r\n const openIds = new Set(dialogs.map((dialog) => dialog.id));\r\n for (const dialogId of this.backdropPress) {\r\n if (!openIds.has(dialogId)) {\r\n this.backdropPress.delete(dialogId);\r\n }\r\n }\r\n if (dialogs.length === 0) return;\r\n queueMicrotask(() => this.focusTopDialog());\r\n });\r\n }\r\n\r\n protected getInjector(dialog: OpenDialog): Injector {\r\n if (!this.injectorCache.has(dialog)) {\r\n this.injectorCache.set(\r\n dialog,\r\n Injector.create({\r\n parent: this.parentInjector,\r\n providers: [\r\n { provide: DIALOG_DATA, useValue: dialog.config.data },\r\n {\r\n provide: DIALOG_REF,\r\n useValue: {\r\n close: (result?: unknown) => this.dialogService.close(dialog, result),\r\n },\r\n },\r\n ],\r\n }),\r\n );\r\n }\r\n return this.injectorCache.get(dialog)!;\r\n }\r\n\r\n protected getTitleId(dialog: OpenDialog): string {\r\n return `gog-dialog-title-${dialog.id}`;\r\n }\r\n\r\n protected close(dialog: OpenDialog): void {\r\n this.backdropPress.delete(dialog.id);\r\n this.dialogService.close(dialog, undefined);\r\n }\r\n\r\n protected closeIfClosable(dialog: OpenDialog): void {\r\n if (dialog.config.closable !== false) this.close(dialog);\r\n }\r\n\r\n protected panelZ(dialog: OpenDialog): number {\r\n return dialog.zIndex;\r\n }\r\n\r\n protected onBackdropPointerDown(event: PointerEvent, dialog: OpenDialog): void {\r\n if (dialog.config.closable === false) return;\r\n if (event.target === event.currentTarget) {\r\n this.backdropPress.add(dialog.id);\r\n }\r\n }\r\n\r\n protected onBackdropPointerUp(event: PointerEvent, dialog: OpenDialog): void {\r\n if (dialog.config.closable === false) return;\r\n const shouldClose = this.backdropPress.has(dialog.id) && event.target === event.currentTarget;\r\n this.backdropPress.delete(dialog.id);\r\n if (shouldClose) {\r\n this.close(dialog);\r\n }\r\n }\r\n\r\n protected onPanelKeydown(event: KeyboardEvent, dialog: OpenDialog, panel: HTMLElement): void {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.closeIfClosable(dialog);\r\n return;\r\n }\r\n\r\n if (dialog.config.modal === false || event.key !== 'Tab') return;\r\n\r\n const focusables = this.getFocusableElements(panel);\r\n if (focusables.length === 0) {\r\n event.preventDefault();\r\n panel.focus({ preventScroll: true });\r\n return;\r\n }\r\n\r\n const currentIndex = focusables.indexOf(this.dialogDocument.activeElement as HTMLElement);\r\n const lastIndex = focusables.length - 1;\r\n const nextIndex = event.shiftKey\r\n ? currentIndex <= 0\r\n ? lastIndex\r\n : currentIndex - 1\r\n : currentIndex === -1 || currentIndex === lastIndex\r\n ? 0\r\n : currentIndex + 1;\r\n\r\n event.preventDefault();\r\n focusables[nextIndex].focus({ preventScroll: true });\r\n }\r\n\r\n protected startDrag(event: PointerEvent, dialog: OpenDialog): void {\r\n if (dialog.config.draggable === false) return;\r\n if (event.button !== 0) return;\r\n if ((event.target as HTMLElement | null)?.closest('button')) return;\r\n\r\n const startX = event.clientX;\r\n const startY = event.clientY;\r\n const initialX = dialog.offsetX;\r\n const initialY = dialog.offsetY;\r\n\r\n const move = (moveEvent: PointerEvent) => {\r\n this.dialogService.updatePosition(\r\n dialog.id,\r\n initialX + (moveEvent.clientX - startX),\r\n initialY + (moveEvent.clientY - startY),\r\n );\r\n };\r\n\r\n const stop = () => {\r\n this.dialogDocument.removeEventListener('pointermove', move);\r\n this.dialogDocument.removeEventListener('pointerup', stop);\r\n this.dialogDocument.removeEventListener('pointercancel', stop);\r\n };\r\n\r\n this.dialogDocument.addEventListener('pointermove', move);\r\n this.dialogDocument.addEventListener('pointerup', stop);\r\n this.dialogDocument.addEventListener('pointercancel', stop);\r\n event.preventDefault();\r\n }\r\n\r\n protected trackDialog(_: number, entry: OpenDialog): number {\r\n return entry.id;\r\n }\r\n\r\n protected isDraggable(dialog: OpenDialog): boolean {\r\n return (\r\n dialog.config.draggable !== false &&\r\n (dialog.config.title !== undefined || dialog.config.closable !== false)\r\n );\r\n }\r\n\r\n private get dialogDocument(): Document {\r\n return this.host.nativeElement.ownerDocument;\r\n }\r\n\r\n private focusTopDialog(): void {\r\n const dialogs = this.dialogService.dialogs();\r\n const topDialog = dialogs[dialogs.length - 1];\r\n if (!topDialog) return;\r\n\r\n const panel = (this.host.nativeElement as HTMLElement).querySelector(\r\n `[data-dialog-id=\"${topDialog.id}\"]`,\r\n ) as HTMLElement | null;\r\n if (!panel) return;\r\n\r\n const focusables = this.getFocusableElements(panel);\r\n (focusables[0] ?? panel).focus({ preventScroll: true });\r\n }\r\n\r\n private getFocusableElements(panel: HTMLElement): HTMLElement[] {\r\n return Array.from(panel.querySelectorAll<HTMLElement>(this.focusableSelector)).filter(\r\n (element) =>\r\n !element.hasAttribute('disabled') && element.tabIndex !== -1 && this.isVisible(element),\r\n );\r\n }\r\n\r\n private isVisible(element: HTMLElement): boolean {\r\n const rect = element.getBoundingClientRect();\r\n return rect.width > 0 && rect.height > 0;\r\n }\r\n}\r\n","@for (dialog of dialogService.dialogs(); track trackDialog($index, dialog)) {\r\n <div\r\n class=\"gog-dialog__backdrop\"\r\n [class.gog-dialog__backdrop--modal]=\"dialog.config.modal !== false\"\r\n [style.z-index]=\"panelZ(dialog)\"\r\n (pointerdown)=\"onBackdropPointerDown($event, dialog)\"\r\n (pointerup)=\"onBackdropPointerUp($event, dialog)\"\r\n (pointercancel)=\"onBackdropPointerUp($event, dialog)\"\r\n >\r\n <div\r\n #panel\r\n class=\"gog-dialog__panel\"\r\n [attr.data-dialog-id]=\"dialog.id\"\r\n [style.--gog-dropdown-z]=\"panelZ(dialog) + 10\"\r\n [style.--gog-dialog-offset-x]=\"dialog.offsetX + 'px'\"\r\n [style.--gog-dialog-offset-y]=\"dialog.offsetY + 'px'\"\r\n [style.width]=\"dialog.config.width ?? 'auto'\"\r\n [style.max-width]=\"dialog.config.maxWidth ?? '90vw'\"\r\n [attr.role]=\"dialog.config.role ?? 'dialog'\"\r\n [attr.aria-modal]=\"dialog.config.modal === false ? null : 'true'\"\r\n tabindex=\"-1\"\r\n [attr.aria-labelledby]=\"dialog.config.title ? getTitleId(dialog) : null\"\r\n (keydown)=\"onPanelKeydown($event, dialog, panel)\"\r\n >\r\n @if (dialog.config.title || dialog.config.closable !== false) {\r\n <div\r\n class=\"gog-dialog__header\"\r\n [class.gog-dialog__header--draggable]=\"isDraggable(dialog)\"\r\n (pointerdown)=\"startDrag($event, dialog)\"\r\n >\r\n @if (dialog.config.title) {\r\n <h2 [id]=\"getTitleId(dialog)\" class=\"gog-dialog__title\">\r\n {{ dialog.config.title }}\r\n </h2>\r\n }\r\n @if (dialog.config.closable !== false) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-dialog__close gog-inline-center\"\r\n aria-label=\"Close dialog\"\r\n (click)=\"close(dialog)\"\r\n >\r\n <gog-icon\r\n [template]=\"dialog.config.closeIconTemplate ?? null\"\r\n [name]=\"dialog.config.closeIconName ?? 'close'\"\r\n />\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"gog-dialog__body\">\r\n <!--\r\n Not a tab stop: the panel runs its own focus trap over the projected content\r\n (onPanelKeydown), keyed to a fixed focusable-element selector. Leaving this\r\n focusable would insert an extra stop ahead of that content and change which\r\n element the trap treats as \"first\".\r\n -->\r\n <gog-scroll size=\"thin\" [focusable]=\"false\" overscrollBehavior=\"contain\" class=\"gog-dialog__scroll\">\r\n <ng-container *ngComponentOutlet=\"dialog.config.component; injector: getInjector(dialog)\" />\r\n </gog-scroll>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ButtonComponent } from '../button/button.component';\nimport { Toast, ToastAction } from '../../services/toast-service/toast-service';\nimport { IconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'gog-toast',\n imports: [ButtonComponent, IconComponent],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.role]': 'ariaRole()',\n '[attr.aria-live]': 'ariaLive()',\n '[attr.aria-atomic]': 'true',\n },\n})\nexport class ToastComponent implements OnDestroy {\n readonly toast = input.required<Toast>();\n /** Whether this toast is the active, front-of-queue toast — only the front toast counts down. */\n readonly isFront = input<boolean>(true);\n readonly dismissed = output<string>();\n\n readonly visible = signal(false);\n readonly isPaused = signal(false);\n private autoDismissTimer: ReturnType<typeof setTimeout> | null = null;\n private startedAt = 0;\n private remainingMs = 0;\n private isClosing = signal(false);\n\n private readonly progressEl = viewChild<ElementRef<HTMLElement>>('progress');\n\n protected readonly hasActions = computed(() => this.toast().actions.length > 0);\n\n protected readonly ariaRole = computed(() =>\n ['error', 'warning'].includes(this.toast().type) ? 'alert' : 'status',\n );\n\n protected readonly ariaLive = computed(() =>\n ['error', 'warning'].includes(this.toast().type) ? 'assertive' : 'polite',\n );\n\n constructor() {\n afterNextRender(() => this.visible.set(true));\n effect((onCleanup) => {\n const toast = this.toast();\n const isFront = this.isFront();\n this.isPaused.set(false);\n this.isClosing.set(false);\n this.clearAutoDismissTimer();\n this.remainingMs = toast.duration;\n\n // Toasts queued behind the front one keep a full, frozen progress bar and don't count\n // down — they only start ticking once they become the front toast.\n if (!toast.isSticky && isFront) {\n this.restartProgressAnimation();\n this.startAutoDismiss(this.remainingMs);\n }\n\n onCleanup(() => this.clearAutoDismissTimer());\n });\n }\n\n ngOnDestroy(): void {\n this.clearAutoDismissTimer();\n }\n\n close(): void {\n if (!this.visible() || this.isClosing()) return;\n this.clearAutoDismissTimer();\n this.isPaused.set(false);\n this.isClosing.set(true);\n this.visible.set(false);\n const id = this.toast().id;\n\n if (this.prefersReducedMotion()) {\n this.isClosing.set(false);\n queueMicrotask(() => this.dismissed.emit(id));\n }\n }\n\n protected pauseAutoDismiss(): void {\n const toast = this.toast();\n if (toast.isSticky || !this.isFront() || this.isPaused() || this.isClosing()) return;\n if (this.autoDismissTimer === null) return;\n\n const elapsed = Date.now() - this.startedAt;\n this.remainingMs = Math.max(0, this.remainingMs - elapsed);\n this.clearAutoDismissTimer();\n this.isPaused.set(true);\n }\n\n protected resumeAutoDismiss(): void {\n const toast = this.toast();\n if (toast.isSticky || !this.isFront() || !this.isPaused() || this.isClosing()) return;\n\n this.isPaused.set(false);\n if (this.remainingMs <= 0) {\n this.close();\n return;\n }\n\n this.startAutoDismiss(this.remainingMs);\n }\n\n protected onTransitionEnd(event: TransitionEvent): void {\n if (!this.isClosing() || event.target !== event.currentTarget) return;\n if (event.propertyName !== 'opacity' && event.propertyName !== 'transform') return;\n\n this.isClosing.set(false);\n this.dismissed.emit(this.toast().id);\n }\n\n protected runAction(action: ToastAction): void {\n action.onClick(this.toast());\n }\n\n private startAutoDismiss(duration: number): void {\n this.clearAutoDismissTimer();\n this.remainingMs = duration;\n this.startedAt = Date.now();\n this.autoDismissTimer = setTimeout(() => {\n this.autoDismissTimer = null;\n this.remainingMs = 0;\n this.close();\n }, duration);\n }\n\n /**\n * Forces the CSS progress-bar animation to restart from full width. Simply updating the\n * `--toast-duration` custom property doesn't retrigger a running `animation`, so the element\n * is briefly detached from the animation and reflowed before being reattached.\n */\n private restartProgressAnimation(): void {\n const el = this.progressEl()?.nativeElement;\n if (!el) return;\n\n el.style.animation = 'none';\n void el.offsetWidth;\n el.style.animation = '';\n }\n\n private clearAutoDismissTimer(): void {\n if (this.autoDismissTimer !== null) {\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n }\n\n private prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n }\n}\n","<div\n class=\"gog-toast\"\n [class.gog-toast--paused]=\"isPaused()\"\n [class.gog-toast--queued]=\"!isFront()\"\n [class.gog-toast--success]=\"toast().type === 'success'\"\n [class.gog-toast--error]=\"toast().type === 'error'\"\n [class.gog-toast--warning]=\"toast().type === 'warning'\"\n [class.gog-toast--info]=\"toast().type === 'info'\"\n [class.gog-toast--visible]=\"visible()\"\n [style.--toast-duration]=\"toast().duration + 'ms'\"\n (mouseenter)=\"pauseAutoDismiss()\"\n (mouseleave)=\"resumeAutoDismiss()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <div class=\"gog-toast__content\">\n <span class=\"gog-toast__icon\" aria-hidden=\"true\">\n <gog-icon [template]=\"toast().iconTemplate ?? null\" [name]=\"toast().iconName\" />\n </span>\n <div class=\"gog-toast__main\">\n <span class=\"gog-toast__message\">{{ toast().message }}</span>\n @if (hasActions()) {\n <div class=\"gog-toast__actions\">\n @for (action of toast().actions; track action.label) {\n <gog-button\n class=\"gog-toast__action\"\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n (gogClick)=\"runAction(action)\"\n >\n @if (action.iconName || action.iconTemplate) {\n <gog-icon\n [template]=\"action.iconTemplate ?? null\"\n [name]=\"action.iconName ?? 'check'\"\n />\n }\n {{ action.label }}\n </gog-button>\n }\n </div>\n }\n </div>\n <gog-button\n class=\"gog-toast__close\"\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"Close toast\"\n (gogClick)=\"close()\"\n >\n <gog-icon name=\"close\" />\n </gog-button>\n </div>\n @if (!toast().isSticky) {\n <span #progress class=\"gog-toast__progress\" aria-hidden=\"true\"></span>\n }\n</div>\n","import { Injectable, TemplateRef, signal } from '@angular/core';\nimport { GogIconName } from '../../components/icon/icon.component';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport interface Toast {\n id: string;\n message: string;\n type: ToastType;\n iconName: GogIconName;\n iconTemplate?: TemplateRef<unknown> | null;\n actions: ToastAction[];\n isSticky: boolean;\n duration: number;\n position: ToastPosition;\n dedupeKey: string;\n revision: number;\n}\n\nexport interface ToastAction {\n label: string;\n onClick: (toast: Toast) => void;\n iconName?: GogIconName;\n iconTemplate?: TemplateRef<unknown> | null;\n}\n\nexport interface ToastConfig {\n message: string;\n type?: ToastType;\n iconName?: GogIconName;\n iconTemplate?: TemplateRef<unknown> | null;\n actions?: ToastAction[];\n dedupeKey?: string;\n isSticky?: boolean;\n duration?: number;\n position?: ToastPosition;\n}\n\nconst DEFAULT_DURATION = 4000;\nconst DEFAULT_POSITION: ToastPosition = 'bottom-right';\n\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n readonly toasts = signal<Toast[]>([]);\n\n private generateId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\n }\n\n show(config: ToastConfig): string {\n const type = config.type ?? 'info';\n const iconName = config.iconName ?? this.defaultIconName(type);\n const actions = config.actions ?? [];\n const dedupeKey =\n config.dedupeKey ??\n this.buildDedupeKey(\n config.message,\n type,\n iconName,\n config.position ?? DEFAULT_POSITION,\n actions,\n config.iconTemplate ?? null,\n );\n\n let createdId = this.generateId();\n\n this.toasts.update((list) => {\n let existingIndex = -1;\n if (dedupeKey) {\n for (let index = list.length - 1; index >= 0; index -= 1) {\n if (list[index].dedupeKey === dedupeKey) {\n existingIndex = index;\n break;\n }\n }\n }\n const nextToast: Toast = {\n id: existingIndex >= 0 ? list[existingIndex].id : createdId,\n message: config.message,\n type,\n iconName,\n iconTemplate: config.iconTemplate ?? null,\n actions,\n isSticky: config.isSticky ?? false,\n duration: config.duration ?? DEFAULT_DURATION,\n position: config.position ?? DEFAULT_POSITION,\n dedupeKey,\n revision: existingIndex >= 0 ? list[existingIndex].revision + 1 : 0,\n };\n\n if (existingIndex >= 0) {\n const next = [...list];\n next[existingIndex] = nextToast;\n createdId = nextToast.id;\n return next;\n }\n\n createdId = nextToast.id;\n return [...list, nextToast];\n });\n\n return createdId;\n }\n\n dismiss(id: string): void {\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n dismissAll(): void {\n this.toasts.set([]);\n }\n\n success(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'success' });\n }\n\n error(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'error' });\n }\n\n warning(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'warning' });\n }\n\n info(message: string, config?: Partial<ToastConfig>): string {\n return this.show({ ...config, message, type: 'info' });\n }\n\n private defaultIconName(type: ToastType): GogIconName {\n switch (type) {\n case 'success':\n return 'success';\n case 'error':\n return 'error';\n case 'warning':\n return 'warning';\n default:\n return 'info';\n }\n }\n\n private buildDedupeKey(\n message: string,\n type: ToastType,\n iconName: GogIconName,\n position: ToastPosition,\n actions: ToastAction[],\n iconTemplate: TemplateRef<unknown> | null,\n ): string {\n // Actions carry closures that can't be compared by value, so only their\n // label/icon \"shape\" is used — this lets repeated calls with equivalent\n // actions (e.g. a fresh \"Undo\" callback each time) still dedupe correctly.\n const actionsSignature = actions\n .map((action) => `${action.label}:${action.iconName ?? ''}`)\n .join(',');\n return [\n message,\n type,\n iconName,\n position,\n iconTemplate ? 'template' : 'default',\n actionsSignature,\n ].join('|');\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ToastComponent } from '../toast.component';\nimport { ToastPosition, ToastService } from '../../../services/toast-service/toast-service';\n\nconst POSITIONS: ToastPosition[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\n\n@Component({\n selector: 'gog-toast-container',\n imports: [ToastComponent],\n templateUrl: './toast-container.component.html',\n styleUrl: './toast-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastContainerComponent {\n private readonly toastService = inject(ToastService);\n readonly maxVisiblePerPosition = input(5);\n\n readonly groups = computed(() =>\n POSITIONS.map((position) => ({\n position,\n // Keep the oldest toasts first: they're at the front of the queue (actively ticking),\n // while newer arrivals wait their turn at the back of the visible stack.\n toasts: this.toastService\n .toasts()\n .filter((toast) => toast.position === position)\n .slice(0, Math.max(0, this.maxVisiblePerPosition())),\n })).filter((group) => group.toasts.length > 0),\n );\n\n protected trackGroup(_: number, group: { position: ToastPosition }): ToastPosition {\n return group.position;\n }\n\n protected isLeft(position: ToastPosition): boolean {\n return position.includes('left');\n }\n\n protected trackToast(_: number, toast: { id: string }): string {\n return toast.id;\n }\n\n protected dismiss(id: string): void {\n this.toastService.dismiss(id);\n }\n}\n","@for (group of groups(); track trackGroup($index, group)) {\n <div class=\"gog-toast-container gog-toast-container--{{ group.position }}\">\n @for (toast of group.toasts; track trackToast($index, toast); let toastIndex = $index) {\n <gog-toast\n [toast]=\"toast\"\n [isFront]=\"toastIndex === 0\"\n [class.slide-left]=\"isLeft(group.position)\"\n [style.--toast-stack-index]=\"toastIndex\"\n (dismissed)=\"dismiss($event)\"\n />\n }\n </div>\n}\n","import { Signal, computed, signal } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n/**\r\n * `'manual'` (default): the field shows `errorMessage` for as long as it is non-empty — the\r\n * consumer decides when to clear it, e.g.\r\n * `errorMessage=\"control.invalid && control.touched ? 'Required' : ''\"`.\r\n *\r\n * `'auto'`: shown once the attached form control has been touched and is invalid — the\r\n * consumer only supplies the message text, not the timing. Requires a\r\n * `[formControl]` / `formControlName` on the element; without one this falls back to\r\n * `'manual'`, since there is no control state to key off.\r\n */\r\nexport type GogErrorDisplay = 'auto' | 'manual';\r\n\r\n/**\r\n * Shared error-visibility state for the library's form controls. A plain class rather than\r\n * a base class or directive so it drops into components that can't share a base class\r\n * (`gog-inputfield`, `gog-slider`) as well as ones that already do (`GogDropdownBase`).\r\n * Each consumer owns its own instance and wires `check()` into its own `ngDoCheck`.\r\n */\r\nexport class GogErrorState {\r\n private readonly controlTouched = signal(false);\r\n private readonly controlInvalid = signal(false);\r\n\r\n constructor(\r\n private readonly errorMessage: Signal<string>,\r\n private readonly errorDisplay: Signal<GogErrorDisplay>,\r\n private readonly ngControl: NgControl | null,\r\n ) {}\r\n\r\n readonly hasError = computed(() => {\r\n if (this.errorDisplay() === 'auto' && this.ngControl) {\r\n return this.controlTouched() && this.controlInvalid();\r\n }\r\n return !!this.errorMessage();\r\n });\r\n\r\n readonly visibleError = computed(() => (this.hasError() ? this.errorMessage() : ''));\r\n\r\n /**\r\n * `NgControl` exposes validity as plain properties, and has no change notification for\r\n * `touched` at all — `statusChanges` fires only on validity transitions, never on\r\n * `markAsTouched()` — while its `control` does not exist yet during construction, so\r\n * subscribing early would miss it regardless. Mirroring on each check sidesteps both;\r\n * re-setting a signal to its current value notifies nothing, so the common case costs two\r\n * comparisons.\r\n */\r\n check(): void {\r\n const control = this.ngControl?.control;\r\n if (!control) return;\r\n\r\n this.controlTouched.set(control.touched);\r\n this.controlInvalid.set(control.invalid);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DoCheck,\r\n inject,\r\n input,\r\n model,\r\n TemplateRef,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogSize } from '../../shared/types';\r\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'gog-inputfield',\r\n imports: [IconComponent],\r\n templateUrl: './inputfield.component.html',\r\n styleUrl: './inputfield.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Drives the :host(.gog-host--auto-width) rule in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect. Inverted from gog-button's\r\n // full-width class: this field is full width by default, so the class only appears\r\n // once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class InputfieldComponent implements ControlValueAccessor, DoCheck {\r\n readonly label = input('');\r\n readonly placeholder = input('');\r\n readonly type = input<'text' | 'password' | 'email' | 'number' | 'date'>('text');\r\n /** Defaults to 'current-password' for password fields, 'off' otherwise */\r\n readonly autocomplete = input('');\r\n /** Only applied when `type=\"number\"`. */\r\n readonly min = input<number | null>(null);\r\n /** Only applied when `type=\"number\"`. */\r\n readonly max = input<number | null>(null);\r\n /** Only applied when `type=\"number\"`. */\r\n readonly step = input<number | null>(null);\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n readonly errorDisplay = input<GogErrorDisplay>('manual');\r\n readonly name = input('');\r\n readonly inputId = input('');\r\n readonly disabled = input(false);\r\n readonly size = input<GogSize>('md');\r\n /**\r\n * Full width of the container by default, matching every other field-style control.\r\n * Set to `false` to shrink the field to fit its content instead.\r\n */\r\n readonly fullWidth = input(true);\r\n /** Default icon name for the leading icon. */\r\n readonly iconStart = input<GogIconName | ''>('');\r\n /** Default icon name for the trailing icon. */\r\n readonly iconEnd = input<GogIconName | ''>('');\r\n /** Custom leading icon template. */\r\n readonly iconStartTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Custom trailing icon template. */\r\n readonly iconEndTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** When provided, the start icon becomes a clickable button invoking this fn */\r\n readonly iconStartFn = input<(() => void) | null>(null);\r\n /** When provided, the end icon becomes a clickable button invoking this fn */\r\n readonly iconEndFn = input<(() => void) | null>(null);\r\n /** aria-label for the start icon button (required when iconStartFn is set) */\r\n readonly iconStartLabel = input('');\r\n /** aria-label for the end icon button (required when iconEndFn is set) */\r\n readonly iconEndLabel = input('');\r\n /** aria-label for the reveal-password button, shown when `type` is `'password'` */\r\n readonly showPasswordLabel = input('Show password');\r\n /** aria-label for the hide-password button, shown once the password is revealed */\r\n readonly hidePasswordLabel = input('Hide password');\r\n\r\n /**\r\n * Two-way bindable value: `[(value)]=\"signal\"` or `[value]` / `(valueChange)`.\r\n * Always a string, including for `type=\"number\"` — that field's `formControl`/\r\n * `formControlName` value is a `number` (or `null` when empty); the string here is only\r\n * the raw text shown in the native input.\r\n */\r\n readonly value = model<string>('');\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.errorDisplay,\r\n this.ngControl,\r\n );\r\n private readonly passwordVisible = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly isPasswordField = computed(() => this.type() === 'password');\r\n protected readonly isNumberField = computed(() => this.type() === 'number');\r\n protected readonly effectiveType = computed(() =>\r\n this.isPasswordField() && this.passwordVisible() ? 'text' : this.type(),\r\n );\r\n protected readonly effectiveAutocomplete = computed(\r\n () => this.autocomplete() || (this.type() === 'password' ? 'current-password' : 'off'),\r\n );\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n protected readonly hasIconStart = computed(\r\n () => !!this.iconStartTemplate() || !!this.iconStart(),\r\n );\r\n protected readonly hasIconStartAction = computed(() => !!this.iconStartFn());\r\n\r\n /** For password fields the trailing icon is always the built-in show/hide toggle. */\r\n protected readonly effectiveIconEnd = computed<GogIconName | ''>(() =>\r\n this.isPasswordField() ? (this.passwordVisible() ? 'eye-off' : 'eye') : this.iconEnd(),\r\n );\r\n protected readonly effectiveIconEndLabel = computed(() =>\r\n this.isPasswordField()\r\n ? this.passwordVisible()\r\n ? this.hidePasswordLabel()\r\n : this.showPasswordLabel()\r\n : this.iconEndLabel(),\r\n );\r\n protected readonly hasIconEnd = computed(\r\n () => !!this.iconEndTemplate() || !!this.effectiveIconEnd(),\r\n );\r\n protected readonly hasIconEndAction = computed(\r\n () => this.isPasswordField() || !!this.iconEndFn(),\r\n );\r\n\r\n /** `number` for a `type=\"number\"` field (`null` when empty), `string` otherwise. */\r\n private _onChange: (val: string | number | null) => void = () => {};\r\n private _onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR keeps `this.ngControl`\r\n // available for `hasError` — providing NG_VALUE_ACCESSOR on the component while also\r\n // injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: string | number | null): void {\r\n this.value.set(val === null || val === undefined ? '' : String(val));\r\n }\r\n\r\n registerOnChange(fn: (val: string | number | null) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n protected onIconStartClick(): void {\r\n this.iconStartFn()?.();\r\n }\r\n\r\n protected onIconEndClick(): void {\r\n if (this.isPasswordField()) {\r\n this.passwordVisible.update((visible) => !visible);\r\n return;\r\n }\r\n this.iconEndFn()?.();\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this.value.set(input.value);\r\n\r\n if (this.isNumberField()) {\r\n this._onChange(input.value === '' ? null : input.valueAsNumber);\r\n return;\r\n }\r\n\r\n this._onChange(input.value);\r\n }\r\n\r\n onBlur(): void {\r\n this._onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-input-wrapper gog-contained-layout\"\r\n [class.gog-input-wrapper--xsm]=\"size() === 'xsm'\"\r\n [class.gog-input-wrapper--sm]=\"size() === 'sm'\"\r\n [class.gog-input-wrapper--lg]=\"size() === 'lg'\"\r\n [class.gog-input-wrapper--slg]=\"size() === 'slg'\"\r\n [class.gog-input-wrapper--icon-start]=\"hasIconStart()\"\r\n [class.gog-input-wrapper--icon-end]=\"hasIconEnd()\"\r\n>\r\n @if (label()) {\r\n <label class=\"gog-input__label\" [attr.for]=\"inputId() || null\">{{ label() }}</label>\r\n }\r\n <div class=\"gog-input__field-container\">\r\n @if (hasIconStart()) {\r\n @if (hasIconStartAction()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__icon gog-inline-center gog-input__icon--start gog-input__icon--action\"\r\n [attr.aria-label]=\"iconStartLabel() || null\"\r\n (click)=\"onIconStartClick()\"\r\n >\r\n <gog-icon [template]=\"iconStartTemplate()\" [name]=\"iconStart() || 'check'\" />\r\n </button>\r\n } @else {\r\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--start\" aria-hidden=\"true\">\r\n <gog-icon [template]=\"iconStartTemplate()\" [name]=\"iconStart() || 'check'\" />\r\n </span>\r\n }\r\n }\r\n <input\r\n class=\"gog-input__field\"\r\n [class.gog-input__field--error]=\"hasError()\"\r\n [attr.id]=\"inputId() || null\"\r\n [type]=\"effectiveType()\"\r\n [attr.name]=\"name() || null\"\r\n [placeholder]=\"placeholder()\"\r\n [value]=\"value()\"\r\n [disabled]=\"isDisabled()\"\r\n [autocomplete]=\"effectiveAutocomplete()\"\r\n [attr.min]=\"min()\"\r\n [attr.max]=\"max()\"\r\n [attr.step]=\"step()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"hasError() && inputId() ? inputId() + '-error' : null\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n @if (hasIconEnd()) {\r\n @if (hasIconEndAction()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__icon gog-inline-center gog-input__icon--end gog-input__icon--action\"\r\n [attr.aria-label]=\"effectiveIconEndLabel() || null\"\r\n (click)=\"onIconEndClick()\"\r\n >\r\n <gog-icon [template]=\"iconEndTemplate()\" [name]=\"effectiveIconEnd() || 'check'\" />\r\n </button>\r\n } @else {\r\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--end\" aria-hidden=\"true\">\r\n <gog-icon [template]=\"iconEndTemplate()\" [name]=\"effectiveIconEnd() || 'check'\" />\r\n </span>\r\n }\r\n }\r\n </div>\r\n @if (visibleError()) {\r\n <span\r\n class=\"gog-input__error\"\r\n [attr.id]=\"inputId() ? inputId() + '-error' : null\"\r\n role=\"alert\"\r\n >{{ visibleError() }}</span\r\n >\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DoCheck,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogSize } from '../../shared/types';\r\n\r\n@Component({\r\n selector: 'gog-textarea',\r\n imports: [],\r\n templateUrl: './textarea.component.html',\r\n styleUrl: './textarea.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Drives the :host(.gog-host--auto-width) rule in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect. Inverted from gog-button's\r\n // full-width class: this field is full width by default, so the class only appears\r\n // once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class TextareaComponent implements ControlValueAccessor, DoCheck {\r\n readonly label = input('');\r\n readonly placeholder = input('');\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n readonly errorDisplay = input<GogErrorDisplay>('manual');\r\n readonly name = input('');\r\n readonly inputId = input('');\r\n readonly disabled = input(false);\r\n readonly size = input<GogSize>('md');\r\n /** Native `rows` attribute, controlling the field's initial height. */\r\n readonly rows = input(4);\r\n /**\r\n * Full width of the container by default, matching every other field-style control.\r\n * Set to `false` to shrink the field to fit its content instead.\r\n */\r\n readonly fullWidth = input(true);\r\n\r\n /** Two-way bindable value: `[(value)]=\"signal\"` or `[value]` / `(valueChange)`. */\r\n readonly value = model<string>('');\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.errorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n\r\n private _onChange: (val: string) => void = () => {};\r\n private _onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR keeps `this.ngControl`\r\n // available for `hasError` — providing NG_VALUE_ACCESSOR on the component while also\r\n // injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: string): void {\r\n this.value.set(val ?? '');\r\n }\r\n\r\n registerOnChange(fn: (val: string) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n onInput(event: Event): void {\r\n const textarea = event.target as HTMLTextAreaElement;\r\n this.value.set(textarea.value);\r\n this._onChange(textarea.value);\r\n }\r\n\r\n onBlur(): void {\r\n this._onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-input-wrapper gog-contained-layout\"\r\n [class.gog-input-wrapper--xsm]=\"size() === 'xsm'\"\r\n [class.gog-input-wrapper--sm]=\"size() === 'sm'\"\r\n [class.gog-input-wrapper--lg]=\"size() === 'lg'\"\r\n [class.gog-input-wrapper--slg]=\"size() === 'slg'\"\r\n>\r\n @if (label()) {\r\n <label class=\"gog-input__label\" [attr.for]=\"inputId() || null\">{{ label() }}</label>\r\n }\r\n <textarea\r\n class=\"gog-input__field gog-textarea__field\"\r\n [class.gog-input__field--error]=\"hasError()\"\r\n [attr.id]=\"inputId() || null\"\r\n [attr.name]=\"name() || null\"\r\n [placeholder]=\"placeholder()\"\r\n [rows]=\"rows()\"\r\n [value]=\"value()\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"hasError() && inputId() ? inputId() + '-error' : null\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n ></textarea>\r\n @if (visibleError()) {\r\n <span class=\"gog-input__error\" [attr.id]=\"inputId() ? inputId() + '-error' : null\" role=\"alert\"\r\n >{{ visibleError() }}</span\r\n >\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\n\r\nimport { type GogIconName, IconComponent } from '../icon/icon.component';\r\nimport { GogSize, GogTagShape } from '../../shared/types';\r\n\r\n@Component({\r\n selector: 'gog-chip',\r\n imports: [IconComponent],\r\n templateUrl: './chip.component.html',\r\n styleUrl: './chip.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class ChipComponent {\r\n readonly size = input<GogSize>('md');\r\n readonly shape = input<GogTagShape>('rounded');\r\n readonly disabled = input(false);\r\n readonly clickable = input(true);\r\n readonly removable = input(false);\r\n readonly fullWidth = input(false);\r\n readonly ariaLabel = input('');\r\n readonly removeAriaLabel = input('Remove chip');\r\n readonly avatarUrl = input<string | null>(null);\r\n readonly avatarAlt = input('');\r\n readonly iconName = input<GogIconName | null>(null);\r\n\r\n readonly gogClick = output<MouseEvent | KeyboardEvent>();\r\n readonly gogRemove = output<void>();\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-chip',\r\n `gog-chip--${this.size()}`,\r\n `gog-chip--${this.shape()}`,\r\n this.removable() ? 'gog-chip--removable' : null,\r\n this.disabled() ? 'gog-chip--disabled' : 'gog-chip--interactive',\r\n this.clickable() ? 'gog-chip--clickable' : null,\r\n this.avatarUrl() ? 'gog-chip--has-avatar' : null,\r\n this.iconName() ? 'gog-chip--has-icon' : null,\r\n this.fullWidth() ? 'gog-host--full-width' : null,\r\n ]\r\n .filter((className): className is string => className !== null)\r\n .join(' '),\r\n );\r\n protected readonly isInteractive = computed(() => this.clickable() && !this.disabled());\r\n\r\n protected onChipClick(event: MouseEvent): void {\r\n if (this.disabled()) return;\r\n this.gogClick.emit(event);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n if (event.key !== 'Enter' && event.key !== ' ') return;\r\n\r\n event.preventDefault();\r\n this.gogClick.emit(event);\r\n }\r\n\r\n protected onRemoveClick(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.gogRemove.emit();\r\n }\r\n}\r\n","<div\n class=\"gog-chip__surface\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.role]=\"isInteractive() ? 'button' : null\"\n [attr.tabindex]=\"isInteractive() ? 0 : null\"\n [style.cursor]=\"isInteractive() ? 'pointer' : 'default'\"\n (click)=\"onChipClick($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n @if (avatarUrl()) {\n <img class=\"gog-chip__avatar\" [src]=\"avatarUrl()\" [alt]=\"avatarAlt()\" />\n }\n\n @if (iconName()) {\n <gog-icon class=\"gog-chip__icon\" [ariaHidden]=\"true\" [name]=\"iconName() ?? 'check'\" />\n }\n\n <span class=\"gog-chip__content\">\n <ng-content></ng-content>\n </span>\n\n @if (removable() && !disabled()) {\n <button\n class=\"gog-chip__remove\"\n type=\"button\"\n [attr.aria-label]=\"removeAriaLabel()\"\n (click)=\"onRemoveClick($event)\"\n >\n <gog-icon name=\"close\" />\n </button>\n }\n</div>\n","import { TemplateRef, ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\n\r\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\r\nimport { GogSize, GogTagVariant } from '../../shared/types';\r\nimport { GogTagShape } from '../../shared/types';\r\n\r\n@Component({\r\n selector: 'gog-tag',\r\n imports: [IconComponent],\r\n templateUrl: './tag.component.html',\r\n styleUrl: './tag.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class TagComponent {\r\n readonly variant = input<GogTagVariant>('info');\r\n readonly size = input<GogSize>('md');\r\n readonly shape = input<GogTagShape>('rounded');\r\n readonly iconName = input<GogIconName | null>(null);\r\n readonly iconTemplate = input<TemplateRef<unknown> | null>(null);\r\n readonly fullWidth = input(false);\r\n\r\n protected readonly hasIcon = computed(\r\n () => this.iconTemplate() !== null || this.iconName() !== null,\r\n );\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-tag',\r\n `gog-tag--${this.variant()}`,\r\n `gog-tag--${this.size()}`,\r\n `gog-tag--${this.shape()}`,\r\n this.hasIcon() ? 'gog-tag--has-icon' : null,\r\n this.fullWidth() ? 'gog-host--full-width' : null,\r\n ]\r\n .filter((className): className is string => className !== null)\r\n .join(' '),\r\n );\r\n}\r\n","@if (hasIcon()) {\n <gog-icon\n class=\"gog-tag__icon\"\n [ariaHidden]=\"true\"\n [name]=\"iconName() ?? 'info'\"\n [template]=\"iconTemplate()\"\n />\n}\n\n<span class=\"gog-tag__content\">\n <ng-content></ng-content>\n</span>\n","import { ApplicationRef, EmbeddedViewRef, TemplateRef } from '@angular/core';\n\n/**\n * Renders a template into `document.body` while keeping it wired to the declaring\n * component: the view is stamped with that component's style encapsulation and reads\n * its signals directly.\n *\n * That is the whole point of doing it this way rather than with a second, portal-only\n * component: one `<ng-template>` can serve both the inline and the appended-to-body\n * dropdown, so the option markup exists once and cannot drift between the two modes,\n * and selection state needs no manual field-syncing to stay in step.\n */\nexport class GogDropdownOverlay {\n private hostEl: HTMLElement | null = null;\n private viewRef: EmbeddedViewRef<unknown> | null = null;\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly document: Document,\n ) {}\n\n /** The `<body>` child holding the rendered panel, or null while detached. */\n get hostElement(): HTMLElement | null {\n return this.hostEl;\n }\n\n get isAttached(): boolean {\n return this.viewRef !== null;\n }\n\n attach(template: TemplateRef<unknown>, themeSource: Element | null = null): void {\n this.detach();\n\n this.hostEl = this.document.createElement('div');\n this.hostEl.classList.add('gog-overlay-host');\n\n // `data-theme` can be scoped to any subtree, not just `:root` (see the themes\n // showcase page), so the host has to copy it from wherever the trigger actually\n // sits rather than assume the document-wide theme applies.\n const themedAncestor = themeSource?.closest('[data-theme]');\n const theme = themedAncestor?.getAttribute('data-theme');\n if (theme) {\n this.hostEl.setAttribute('data-theme', theme);\n }\n\n this.document.body.appendChild(this.hostEl);\n\n this.viewRef = template.createEmbeddedView({});\n // Attached as its own change-detection root so signal reads inside the panel still\n // mark it dirty even though its DOM no longer sits under the declaring component.\n this.appRef.attachView(this.viewRef);\n\n for (const node of this.viewRef.rootNodes as Node[]) {\n this.hostEl.appendChild(node);\n }\n\n this.viewRef.detectChanges();\n }\n\n detach(): void {\n if (this.viewRef) {\n this.appRef.detachView(this.viewRef);\n this.viewRef.destroy();\n this.viewRef = null;\n }\n\n this.hostEl?.remove();\n this.hostEl = null;\n }\n}\n","export type GogDropdownDirection = 'auto' | 'up' | 'down';\n\nexport interface GogDropdownTriggerRect {\n top: number;\n bottom: number;\n left: number;\n width: number;\n}\n\nexport interface GogDropdownPlacement {\n direction: 'up' | 'down';\n top: number;\n left: number;\n width: number;\n maxHeight: number;\n}\n\nconst DEFAULT_GAP = 8;\nconst DEFAULT_VIEWPORT_PADDING = 8;\n\nexport function resolveDropdownDirection(\n direction: GogDropdownDirection,\n triggerRect: GogDropdownTriggerRect,\n panelHeight: number,\n viewportHeight: number,\n gap = DEFAULT_GAP,\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\n): 'up' | 'down' {\n if (direction !== 'auto') {\n return direction;\n }\n\n const spaceAbove = Math.max(0, triggerRect.top - gap - viewportPadding);\n const spaceBelow = Math.max(0, viewportHeight - triggerRect.bottom - gap - viewportPadding);\n\n if (spaceBelow >= panelHeight && spaceAbove < panelHeight) {\n return 'down';\n }\n\n if (spaceAbove >= panelHeight && spaceBelow < panelHeight) {\n return 'up';\n }\n\n return spaceBelow >= spaceAbove ? 'down' : 'up';\n}\n\nexport function resolveDropdownPlacement(\n direction: GogDropdownDirection,\n triggerRect: GogDropdownTriggerRect,\n panelHeight: number,\n viewportHeight: number,\n gap = DEFAULT_GAP,\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\n): GogDropdownPlacement {\n const resolvedDirection = resolveDropdownDirection(\n direction,\n triggerRect,\n panelHeight,\n viewportHeight,\n gap,\n viewportPadding,\n );\n\n if (resolvedDirection === 'up') {\n const availableSpace = Math.max(0, triggerRect.top - gap - viewportPadding);\n const actualHeight = Math.min(panelHeight, availableSpace || panelHeight);\n return {\n direction: resolvedDirection,\n top: Math.max(viewportPadding, triggerRect.top - gap - actualHeight),\n left: triggerRect.left,\n width: triggerRect.width,\n // Must match actualHeight, not availableSpace: `top` above was computed assuming\n // the panel is actualHeight tall, so this is what goes into the panel's CSS\n // max-height too. Returning the full availableSpace here let real content taller\n // than actualHeight (but still under availableSpace) render past its computed\n // top and cover the trigger it's supposed to sit above.\n maxHeight: actualHeight,\n };\n }\n\n const maxHeight = Math.max(0, viewportHeight - triggerRect.bottom - gap - viewportPadding);\n return {\n direction: resolvedDirection,\n top: triggerRect.bottom + gap,\n left: triggerRect.left,\n width: triggerRect.width,\n maxHeight,\n };\n}\n\n/**\n * Resolves a CSS length to pixels for the placement math. Only `px`, `%` and `vh` can be\n * resolved without laying out the DOM — `%` and `vh` are taken relative to the viewport\n * height, which is exactly what a `position: fixed` panel's height resolves against in CSS.\n * Any other unit (`rem`, `em`, `auto`, a bare number, …) returns null: the caller falls back\n * to its own estimate for the up/down decision, while the original string is still written\n * to the panel's `style.max-height` as-is — only the direction heuristic loses precision.\n */\nexport function resolveCssLengthPx(value: string, viewportHeight: number): number | null {\n const match = /^(-?[\\d.]+)(px|%|vh)$/.exec(value.trim());\n if (!match) return null;\n\n const amount = Number.parseFloat(match[1]);\n if (!Number.isFinite(amount)) return null;\n\n return match[2] === 'px' ? amount : (amount / 100) * viewportHeight;\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n DestroyRef,\r\n Directive,\r\n DoCheck,\r\n ElementRef,\r\n ModelSignal,\r\n PLATFORM_ID,\r\n Signal,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogDropdownOverlay } from './dropdown-overlay';\r\nimport {\r\n type GogDropdownDirection,\r\n type GogDropdownPlacement,\r\n type GogDropdownTriggerRect,\r\n resolveCssLengthPx,\r\n resolveDropdownPlacement,\r\n} from './dropdown-position';\r\nimport { GogErrorState, type GogErrorDisplay } from './error-state';\r\nimport { handleRovingFocusKeydown } from './roving-focus';\r\nimport { GogSize } from './types';\r\n\r\n/** A single choice in any of the listbox-style controls (`gog-select`, `gog-multiselect`). */\r\nexport interface GogDropdownOption {\r\n id: string | number;\r\n name: string;\r\n disabled?: boolean;\r\n}\r\n\r\n/** Gap between the trigger and the panel. */\r\nconst PANEL_GAP = 2;\r\n/** Smallest allowed gap between the panel and the viewport edge. */\r\nconst VIEWPORT_PADDING = 8;\r\n/** Used only if a subclass's `panelMaxHeightToken` isn't declared anywhere in the cascade. */\r\nconst FALLBACK_MAX_PANEL_HEIGHT = 260;\r\n/** Used only if a subclass's `optionHeightToken` isn't declared anywhere in the cascade. */\r\nconst FALLBACK_OPTION_HEIGHT = 40;\r\n/** Must match the `var(--gog-dropdown-z, …)` fallback in the component stylesheets. */\r\nconst DEFAULT_PANEL_Z_INDEX = 300;\r\n\r\n/**\r\n * Shared behaviour for the listbox-style controls: open/close, placement, the\r\n * append-to-body overlay, click-outside, keyboard navigation and `ControlValueAccessor`\r\n * plumbing. Subclasses supply only what actually differs — the value type, the panel\r\n * markup, and the BEM class names used to find the trigger and the options.\r\n *\r\n * Exported because it appears in the public type signatures of the components that\r\n * extend it; it is not meant to be used or subclassed by consumers.\r\n */\r\n@Directive({\r\n host: {\r\n // Drives the :host(.gog-host--auto-width) rules in each subclass's stylesheet —\r\n // without this binding the `fullWidth` input has no visible effect. Inverted from\r\n // gog-button's full-width class: these controls are full width by default, so the\r\n // class only appears once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport abstract class GogDropdownBase<TValue> implements ControlValueAccessor, DoCheck {\r\n private static nextUid = 0;\r\n\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n readonly placeholder = input('Select...');\r\n readonly options = input<GogDropdownOption[]>([]);\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n readonly errorDisplay = input<GogErrorDisplay>('manual');\r\n readonly size = input<GogSize>('md');\r\n readonly dropdownDirection = input<GogDropdownDirection>('auto');\r\n /**\r\n * Explicit stacking order for the panel. Left unset the panel falls back to the\r\n * stylesheet's `--gog-dropdown-z`, so the default lives in CSS where a consumer can\r\n * retheme it, rather than being baked into the component.\r\n */\r\n readonly dropdownZIndex = input<number | null>(null);\r\n /**\r\n * Fixed panel width as any CSS length (`'320px'`, `'40ch'`, `'100%'`, …), applied only\r\n * when `appendToBody` is set. Left unset the panel matches the trigger's width, same as\r\n * the inline panel already does via CSS.\r\n */\r\n readonly dropdownWidth = input<string | null>(null);\r\n /**\r\n * Fixed panel max-height as any CSS length, applied only when `appendToBody` is set.\r\n * `px`, `%` and `vh` also feed the up/down placement math (see `resolveCssLengthPx`); any\r\n * other unit still renders correctly but is invisible to that heuristic, so the panel may\r\n * pick the \"wrong\" side close to a viewport edge. Left unset the panel keeps the existing\r\n * viewport-derived, auto-flipping height.\r\n */\r\n readonly dropdownMaxHeight = input<string | null>(null);\r\n readonly appendToBody = input(false);\r\n readonly disabled = input(false);\r\n readonly chevronTemplate = input<TemplateRef<unknown> | null>(null);\r\n /**\r\n * Full width of the container by default, matching every other field-style control.\r\n * Set to `false` to shrink the trigger to fit its selected label instead.\r\n */\r\n readonly fullWidth = input(true);\r\n\r\n readonly isOpen = signal(false);\r\n\r\n /** The `<ng-template>` holding the panel markup, rendered inline or into `<body>`. */\r\n protected abstract readonly panelTemplate: Signal<TemplateRef<unknown> | undefined>;\r\n /** Declared by the subclass so each control keeps its own value type. */\r\n protected abstract readonly value: ModelSignal<TValue>;\r\n /** Value applied when a form writes `null` / the control is reset. */\r\n protected abstract readonly emptyValue: TValue;\r\n /** BEM class of one option button, used to collect keyboard-navigable elements. */\r\n protected abstract readonly optionClass: string;\r\n /** BEM class of the focusable trigger. */\r\n protected abstract readonly triggerClass: string;\r\n /**\r\n * Spacing tokens feeding the height estimate. Overridable so each control keeps the\r\n * `--gog-<block>-*` names it already exposes to consumers for theming.\r\n */\r\n protected readonly optionGapToken: string = '--gog-dropdown-option-gap';\r\n protected readonly optionsPaddingToken: string = '--gog-dropdown-options-padding';\r\n /** Keep in sync with the real `max-height` on the subclass's `__dropdown` block. */\r\n protected readonly panelMaxHeightToken: string = '--gog-dropdown-panel-max-height';\r\n /** Estimated row height fed into the placement math; not a real layout property. */\r\n protected readonly optionHeightToken: string = '--gog-dropdown-option-height';\r\n\r\n /** Unique per-instance suffix, so several dropdowns on a page can't collide on DOM ids. */\r\n protected readonly uid = ++GogDropdownBase.nextUid;\r\n\r\n protected readonly elRef = inject(ElementRef<HTMLElement>);\r\n protected readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly document = inject(DOCUMENT);\r\n private readonly appRef = inject(ApplicationRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly overlay = new GogDropdownOverlay(this.appRef, this.document);\r\n\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.errorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly dropdownDirectionState = signal<'up' | 'down'>('down');\r\n protected readonly panelPlacement = signal<GogDropdownPlacement | null>(null);\r\n /**\r\n * Stacking order to write onto the panel, or null to leave it to the stylesheet.\r\n *\r\n * Only needed when appending to `<body>`: an inline panel inherits `--gog-dropdown-z` from\r\n * its surroundings — which is how a dropdown inside a dialog ends up above the dialog —\r\n * but an appended one sits outside that subtree and inherits nothing, so the value has\r\n * to be resolved from the trigger and written out explicitly.\r\n */\r\n protected readonly panelZIndex = signal<number | null>(null);\r\n\r\n /** `dropdownWidth`, or the trigger-derived width from `panelPlacement`, as a CSS value. */\r\n protected readonly resolvedPanelWidth = computed(() => {\r\n const width = this.panelPlacement()?.width;\r\n return this.dropdownWidth() ?? (width != null ? `${width}px` : null);\r\n });\r\n /** `dropdownMaxHeight`, or the viewport-derived max-height from `panelPlacement`. */\r\n protected readonly resolvedPanelMaxHeight = computed(() => {\r\n const maxHeight = this.panelPlacement()?.maxHeight;\r\n return this.dropdownMaxHeight() ?? (maxHeight != null ? `${maxHeight}px` : null);\r\n });\r\n\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n\r\n /** Measured once per open rather than per scroll tick — see `refreshPanelMetrics`. */\r\n private optionGap = 0;\r\n private optionsPadding = 0;\r\n private maxPanelHeight = FALLBACK_MAX_PANEL_HEIGHT;\r\n private optionHeight = FALLBACK_OPTION_HEIGHT;\r\n private repositionFrame: number | null = null;\r\n\r\n private onChangeFn: (val: TValue) => void = () => {};\r\n private onTouchedFn: () => void = () => {};\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR keeps `this.ngControl`\r\n // available for `hasError` — providing NG_VALUE_ACCESSOR on the component while also\r\n // injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n this.destroyRef.onDestroy(() => this.overlay.detach());\r\n this.bindWhileOpen();\r\n }\r\n\r\n /**\r\n * Binds the click-outside and reposition listeners only for as long as the panel is\r\n * open. Bound permanently — as host listeners were — every dropdown on the page runs a\r\n * handler on every document click and every scroll frame, whether or not it is showing\r\n * anything.\r\n */\r\n private bindWhileOpen(): void {\r\n effect((onCleanup) => {\r\n if (!this.isOpen() || !this.isBrowser) return;\r\n\r\n const onDocumentClick = (event: MouseEvent) => this.closeIfClickedOutside(event);\r\n const onReflow = () => this.scheduleReposition();\r\n\r\n // Capture phase: scroll does not bubble, so a bubble-phase listener on window would\r\n // miss scrolling inside a nested container — which is exactly the case appendToBody\r\n // exists for. Passive: these handlers never call preventDefault.\r\n this.document.addEventListener('click', onDocumentClick);\r\n window.addEventListener('scroll', onReflow, { passive: true, capture: true });\r\n window.addEventListener('resize', onReflow, { passive: true });\r\n\r\n onCleanup(() => {\r\n this.document.removeEventListener('click', onDocumentClick);\r\n window.removeEventListener('scroll', onReflow, { capture: true });\r\n window.removeEventListener('resize', onReflow);\r\n\r\n if (this.repositionFrame !== null) {\r\n cancelAnimationFrame(this.repositionFrame);\r\n this.repositionFrame = null;\r\n }\r\n });\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: TValue | null): void {\r\n this.value.set(val ?? this.emptyValue);\r\n }\r\n\r\n registerOnChange(fn: (val: TValue) => void): void {\r\n this.onChangeFn = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouchedFn = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n if (isDisabled) {\r\n this.close();\r\n }\r\n }\r\n\r\n protected toggle(): void {\r\n if (this.isDisabled()) return;\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n protected open(): void {\r\n if (this.isDisabled() || this.isOpen()) return;\r\n\r\n this.isOpen.set(true);\r\n this.refreshPanelMetrics();\r\n this.updatePlacement();\r\n\r\n if (this.appendToBody()) {\r\n this.attachOverlay();\r\n }\r\n }\r\n\r\n protected close(): void {\r\n if (!this.isOpen()) return;\r\n\r\n this.isOpen.set(false);\r\n this.overlay.detach();\r\n // Closing is this control's equivalent of a blur, which is when a form control is\r\n // conventionally considered touched.\r\n this.markTouched();\r\n }\r\n\r\n /** Writes a new selection out to both the model and the attached form control. */\r\n protected commitValue(next: TValue): void {\r\n this.value.set(next);\r\n this.onChangeFn(next);\r\n this.markTouched();\r\n }\r\n\r\n protected markTouched(): void {\r\n this.onTouchedFn();\r\n }\r\n\r\n private closeIfClickedOutside(event: MouseEvent): void {\r\n const target = event.target as Node | null;\r\n if (!target) return;\r\n\r\n const inside =\r\n this.elRef.nativeElement.contains(target) ||\r\n (this.overlay.hostElement?.contains(target) ?? false);\r\n\r\n if (!inside) {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Coalesces bursts of scroll/resize events into one reposition per frame. Placement\r\n * reads layout, so running it per event is what makes a scroll janky.\r\n */\r\n private scheduleReposition(): void {\r\n if (this.repositionFrame !== null) return;\r\n\r\n this.repositionFrame = requestAnimationFrame(() => {\r\n this.repositionFrame = null;\r\n if (this.isOpen()) {\r\n this.updatePlacement();\r\n }\r\n });\r\n }\r\n\r\n /** Jumps from the trigger into the option list on ArrowDown/ArrowUp while open. */\r\n protected onTriggerArrowKeydown(event: Event): void {\r\n if (!this.isOpen()) return;\r\n event.preventDefault();\r\n\r\n const options = this.enabledOptionElements();\r\n if (options.length === 0) return;\r\n\r\n const index = (event as KeyboardEvent).key === 'ArrowUp' ? options.length - 1 : 0;\r\n options[index]?.focus();\r\n }\r\n\r\n protected onOptionKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n this.focusTrigger();\r\n return;\r\n }\r\n\r\n if (event.key === 'Tab') {\r\n // Deliberately not prevented: closing and handing focus back to the trigger lets\r\n // the browser's own Tab handling continue from there, so focus lands on whatever\r\n // follows the control. Without this, tabbing out of an appended panel would jump\r\n // to the end of the document, since that is where the panel's DOM lives.\r\n this.close();\r\n this.focusTrigger();\r\n return;\r\n }\r\n\r\n handleRovingFocusKeydown(event, this.enabledOptionElements());\r\n }\r\n\r\n protected focusTrigger(): void {\r\n (this.elRef.nativeElement as HTMLElement)\r\n .querySelector<HTMLElement>(`.${this.triggerClass}`)\r\n ?.focus();\r\n }\r\n\r\n /** Extra chrome stacked above the options (e.g. a select-all row), in px. */\r\n protected extraPanelHeight(): number {\r\n return 0;\r\n }\r\n\r\n private enabledOptionElements(): HTMLButtonElement[] {\r\n const scope = this.overlay.hostElement ?? (this.elRef.nativeElement as HTMLElement);\r\n return Array.from(\r\n scope.querySelectorAll<HTMLButtonElement>(`.${this.optionClass}:not([aria-disabled=\"true\"])`),\r\n );\r\n }\r\n\r\n private attachOverlay(): void {\r\n if (!this.isBrowser) return;\r\n\r\n const template = this.panelTemplate();\r\n if (!template) return;\r\n\r\n this.overlay.attach(template, this.elRef.nativeElement);\r\n }\r\n\r\n /**\r\n * Reads the spacing tokens that feed the height estimate. Done once per open instead of\r\n * on every scroll tick, because `getComputedStyle` forces a style recalculation and the\r\n * tokens cannot change while the panel is on screen.\r\n */\r\n private refreshPanelMetrics(): void {\r\n if (!this.isBrowser) {\r\n this.optionGap = 0;\r\n this.optionsPadding = 0;\r\n this.maxPanelHeight = FALLBACK_MAX_PANEL_HEIGHT;\r\n this.optionHeight = FALLBACK_OPTION_HEIGHT;\r\n this.panelZIndex.set(null);\r\n return;\r\n }\r\n\r\n const styles = getComputedStyle(this.elRef.nativeElement);\r\n this.optionGap = readPx(styles.getPropertyValue(this.optionGapToken), 0);\r\n this.optionsPadding = readPx(styles.getPropertyValue(this.optionsPaddingToken), 0);\r\n this.maxPanelHeight = readPx(\r\n styles.getPropertyValue(this.panelMaxHeightToken),\r\n FALLBACK_MAX_PANEL_HEIGHT,\r\n );\r\n this.optionHeight = readPx(\r\n styles.getPropertyValue(this.optionHeightToken),\r\n FALLBACK_OPTION_HEIGHT,\r\n );\r\n this.panelZIndex.set(this.appendToBody() ? this.resolvePanelZIndex(styles) : null);\r\n }\r\n\r\n /**\r\n * Rough height, used only to choose up/down and to cap `max-height` before the panel\r\n * has been laid out. Deliberately an estimate: measuring would require rendering the\r\n * panel first, which is what we are trying to position. A resolvable `dropdownMaxHeight`\r\n * replaces the row-count guess outright, since it is exact rather than estimated.\r\n */\r\n private estimatePanelHeight(): number {\r\n const custom = this.dropdownMaxHeight();\r\n if (custom) {\r\n const resolved = resolveCssLengthPx(custom, window.innerHeight);\r\n if (resolved !== null) return resolved;\r\n }\r\n\r\n const count = Math.max(this.options().length, 1);\r\n const rows = count * this.optionHeight + Math.max(count - 1, 0) * this.optionGap;\r\n return Math.min(rows + this.optionsPadding * 2 + this.extraPanelHeight(), this.maxPanelHeight);\r\n }\r\n\r\n /**\r\n * The trigger's own rect, not the whole component's — a label above it or an error\r\n * message below it sit in normal document flow and are not part of what the panel needs\r\n * to clear. This also keeps `appendToBody` placement consistent with the inline panel,\r\n * which is already positioned purely relative to the trigger via CSS.\r\n */\r\n private triggerRect(): GogDropdownTriggerRect {\r\n const host = this.elRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector<HTMLElement>(`.${this.triggerClass}`) ?? host;\r\n return trigger.getBoundingClientRect();\r\n }\r\n\r\n /** The stacking order the panel would have had if it were still inside the subtree. */\r\n private resolvePanelZIndex(triggerStyles: CSSStyleDeclaration): number {\r\n const inherited = triggerStyles.getPropertyValue('--gog-dropdown-z').trim();\r\n if (inherited) {\r\n return readPx(inherited, DEFAULT_PANEL_Z_INDEX);\r\n }\r\n\r\n // Not every DOM implementation resolves inherited custom properties through\r\n // getComputedStyle (jsdom does not), so also look for an inline declaration up the\r\n // tree — which is exactly how gog-dialog hands its stacking order to nested dropdowns.\r\n for (let el: HTMLElement | null = this.elRef.nativeElement; el; el = el.parentElement) {\r\n const declared = el.style.getPropertyValue('--gog-dropdown-z').trim();\r\n if (declared) {\r\n return readPx(declared, DEFAULT_PANEL_Z_INDEX);\r\n }\r\n }\r\n\r\n return DEFAULT_PANEL_Z_INDEX;\r\n }\r\n\r\n private updatePlacement(): void {\r\n if (!this.isBrowser) return;\r\n\r\n const placement = resolveDropdownPlacement(\r\n this.dropdownDirection(),\r\n this.triggerRect(),\r\n this.estimatePanelHeight(),\r\n window.innerHeight,\r\n PANEL_GAP,\r\n VIEWPORT_PADDING,\r\n );\r\n\r\n this.dropdownDirectionState.set(placement.direction);\r\n this.panelPlacement.set(placement);\r\n }\r\n}\r\n\r\nfunction readPx(raw: string, fallback: number): number {\r\n const parsed = Number.parseFloat(raw.trim());\r\n return Number.isFinite(parsed) ? parsed : fallback;\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n TemplateRef,\r\n computed,\r\n input,\r\n model,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { GogDropdownBase, type GogDropdownOption } from '../../shared/dropdown-base';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\n\r\n/** @deprecated Prefer `GogDropdownOption`; kept as an alias so existing imports keep working. */\r\nexport type GogSelectOption = GogDropdownOption;\r\n\r\n@Component({\r\n selector: 'gog-select',\r\n imports: [IconComponent, NgTemplateOutlet, ScrollComponent],\r\n templateUrl: './select.component.html',\r\n styleUrl: './select.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectComponent extends GogDropdownBase<string | number | null> {\r\n readonly inputId = input('');\r\n\r\n /** Two-way bindable selected value: `[(value)]=\"signal\"`. */\r\n readonly value = model<string | number | null>(null);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n protected readonly emptyValue = null;\r\n protected readonly optionClass = 'gog-select__option';\r\n protected readonly triggerClass = 'gog-select__control';\r\n protected override readonly optionGapToken = '--gog-select-option-gap';\r\n protected override readonly panelMaxHeightToken = '--gog-select-panel-max-height';\r\n protected override readonly optionHeightToken = '--gog-select-option-height';\r\n\r\n protected readonly triggerId = computed(() => this.inputId() || `gog-select-${this.uid}`);\r\n protected readonly listboxId = computed(() => `${this.triggerId()}-listbox`);\r\n protected readonly labelId = computed(() => `${this.triggerId()}-label`);\r\n protected readonly errorId = computed(() =>\r\n this.hasError() ? `${this.triggerId()}-error` : null,\r\n );\r\n\r\n protected readonly selectedOption = computed(\r\n () => this.options().find((option) => String(option.id) === String(this.value())) ?? null,\r\n );\r\n\r\n protected isSelected(id: string | number): boolean {\r\n return this.selectedOption()?.id === id;\r\n }\r\n\r\n protected selectOption(option: GogDropdownOption, event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (option.disabled) return;\r\n\r\n this.commitValue(option.id);\r\n this.close();\r\n }\r\n}\r\n","<!--\r\n Deliberately not `gog-contained-layout`: `contain: layout` makes this element a stacking\r\n context, which traps the panel's z-index inside it and lets whatever follows on the page\r\n paint over the open dropdown.\r\n-->\r\n<div\r\n class=\"gog-select\"\r\n [class.gog-select--disabled]=\"isDisabled()\"\r\n [class.gog-select--open]=\"isOpen()\"\r\n [class.gog-select--xsm]=\"size() === 'xsm'\"\r\n [class.gog-select--sm]=\"size() === 'sm'\"\r\n [class.gog-select--lg]=\"size() === 'lg'\"\r\n [class.gog-select--slg]=\"size() === 'slg'\"\r\n>\r\n <!--\r\n Associated with aria-labelledby rather than `for`: the trigger is a <button>, which is\r\n not a labelable element, so `for` pointing at it is silently ignored by browsers and\r\n assistive tech alike.\r\n -->\r\n @if (label()) {\r\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -- associated via aria-labelledby above instead, see comment -->\r\n <label class=\"gog-select__label\" [id]=\"labelId()\">{{ label() }}</label>\r\n }\r\n\r\n <div class=\"gog-select__field\">\r\n <button\r\n type=\"button\"\r\n class=\"gog-select__control\"\r\n [id]=\"triggerId()\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || placeholder() || 'Select'\"\r\n [attr.aria-controls]=\"listboxId()\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (click)=\"toggle()\"\r\n (keydown.enter)=\"toggle(); $event.preventDefault()\"\r\n (keydown.space)=\"toggle(); $event.preventDefault()\"\r\n (keydown.escape)=\"close()\"\r\n (keydown.arrowdown)=\"onTriggerArrowKeydown($event)\"\r\n (keydown.arrowup)=\"onTriggerArrowKeydown($event)\"\r\n >\r\n <span class=\"gog-select__value\" [class.gog-select__value--placeholder]=\"!selectedOption()\">\r\n {{ selectedOption()?.name || placeholder() }}\r\n </span>\r\n\r\n <span class=\"gog-select__chevron\" aria-hidden=\"true\">\r\n <gog-icon [template]=\"chevronTemplate()\" name=\"chevron-down\" />\r\n </span>\r\n </button>\r\n\r\n @if (isOpen() && !appendToBody()) {\r\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\r\n }\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-select__error\" [attr.id]=\"errorId()\" role=\"alert\">\r\n {{ visibleError() }}\r\n </span>\r\n }\r\n</div>\r\n\r\n<!--\r\n One template for both render modes. When `appendToBody` is set it is stamped into\r\n <body> by the overlay, which is why the portal-only modifier and the resolved\r\n coordinates are applied conditionally: outside the component's subtree the panel can\r\n no longer inherit the size tokens from the `.gog-select--sm/--lg` wrapper.\r\n-->\r\n<ng-template #panelTpl>\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- (click) below is housekeeping stopPropagation, not an interactive handler; the focusable/keyboard-operable elements are the options inside -->\r\n <div\r\n [id]=\"listboxId()\"\r\n class=\"gog-select__dropdown\"\r\n [class.gog-select__dropdown--up]=\"!appendToBody() && dropdownDirectionState() === 'up'\"\r\n [class.gog-select__dropdown--portal]=\"appendToBody()\"\r\n [class.gog-select__dropdown--xsm]=\"appendToBody() && size() === 'xsm'\"\r\n [class.gog-select__dropdown--sm]=\"appendToBody() && size() === 'sm'\"\r\n [class.gog-select__dropdown--lg]=\"appendToBody() && size() === 'lg'\"\r\n [class.gog-select__dropdown--slg]=\"appendToBody() && size() === 'slg'\"\r\n [style.top.px]=\"appendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"appendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"appendToBody() ? resolvedPanelWidth() : null\"\r\n [style.max-height]=\"appendToBody() ? resolvedPanelMaxHeight() : null\"\r\n [style.z-index]=\"dropdownZIndex() ?? panelZIndex()\"\r\n role=\"listbox\"\r\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!--\r\n Not a tab stop of its own: the listbox pattern's only stop is the trigger, with\r\n focus moved between options via the arrow keys (roving-focus.ts), which already\r\n scrolls the focused option into view natively — no separate keyboard-scroll target\r\n needed here.\r\n -->\r\n <gog-scroll size=\"thin\" [focusable]=\"false\" overscrollBehavior=\"contain\" class=\"gog-select__scroll\">\r\n @for (option of options(); track option.id) {\r\n <!--\r\n tabindex=\"-1\" keeps the list to a single tab stop, as the listbox pattern expects:\r\n focus is moved between options with the arrow keys, not by tabbing through every\r\n one of them. Programmatic .focus() still works on a negative tabindex.\r\n -->\r\n <button\r\n type=\"button\"\r\n class=\"gog-select__option\"\r\n role=\"option\"\r\n tabindex=\"-1\"\r\n [attr.aria-selected]=\"isSelected(option.id)\"\r\n [attr.aria-disabled]=\"option.disabled ?? false\"\r\n [class.gog-select__option--selected]=\"isSelected(option.id)\"\r\n [class.gog-select__option--disabled]=\"option.disabled ?? false\"\r\n (click)=\"selectOption(option, $event)\"\r\n (keydown)=\"onOptionKeydown($event)\"\r\n >\r\n <span class=\"gog-select__option-mark\" aria-hidden=\"true\">\r\n @if (isSelected(option.id)) {\r\n <gog-icon name=\"check\" />\r\n }\r\n </span>\r\n <span class=\"gog-select__option-label\">{{ option.name }}</span>\r\n </button>\r\n }\r\n </gog-scroll>\r\n </div>\r\n</ng-template>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n TemplateRef,\r\n computed,\r\n input,\r\n model,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { GogDropdownBase, type GogDropdownOption } from '../../shared/dropdown-base';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\n\r\n/** @deprecated Prefer `GogDropdownOption`; kept as an alias so existing imports keep working. */\r\nexport type GogMultiselectOption = GogDropdownOption;\r\n\r\n/** Height of the select-all/clear row, included in the panel height estimate. */\r\nconst CONTROLS_ROW_HEIGHT = 38;\r\n\r\n@Component({\r\n selector: 'gog-multiselect',\r\n imports: [ButtonComponent, IconComponent, NgTemplateOutlet, ScrollComponent],\r\n templateUrl: './multiselect.component.html',\r\n styleUrl: './multiselect.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MultiselectComponent extends GogDropdownBase<(string | number)[]> {\r\n readonly showControls = input(false);\r\n /** Where the \"select all\"/\"clear\" row sits relative to the option list. Sticky either way. */\r\n readonly controlsPosition = input<'top' | 'bottom'>('top');\r\n readonly clearIconTemplate = input<TemplateRef<unknown> | null>(null);\r\n\r\n /** Two-way bindable selected ids: `[(value)]=\"signal\"`. */\r\n readonly value = model<(string | number)[]>([]);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n protected readonly emptyValue: (string | number)[] = [];\r\n protected readonly optionClass = 'gog-ms__option';\r\n protected readonly triggerClass = 'gog-ms';\r\n protected override readonly optionGapToken = '--gog-ms-option-gap';\r\n protected override readonly optionsPaddingToken = '--gog-ms-options-padding';\r\n protected override readonly panelMaxHeightToken = '--gog-ms-panel-max-height';\r\n protected override readonly optionHeightToken = '--gog-ms-option-height';\r\n\r\n protected readonly listboxId = computed(() => `gog-ms-listbox-${this.uid}`);\r\n protected readonly labelId = computed(() => `gog-ms-label-${this.uid}`);\r\n\r\n readonly selectedNames = computed(() =>\r\n this.value()\r\n .map((id) => this.options().find((option) => option.id === id)?.name)\r\n .filter(Boolean)\r\n .join(', '),\r\n );\r\n\r\n protected isSelected(id: string | number): boolean {\r\n return this.value().includes(id);\r\n }\r\n\r\n protected toggleOption(option: GogDropdownOption, event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (option.disabled) return;\r\n\r\n const current = this.value();\r\n this.commitValue(\r\n this.isSelected(option.id)\r\n ? current.filter((id) => id !== option.id)\r\n : [...current, option.id],\r\n );\r\n }\r\n\r\n protected selectAll(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.commitValue(\r\n this.options()\r\n .filter((option) => !option.disabled)\r\n .map((option) => option.id),\r\n );\r\n }\r\n\r\n protected clearAll(event: Event): void {\r\n event.stopPropagation();\r\n this.commitValue([]);\r\n }\r\n\r\n protected override extraPanelHeight(): number {\r\n return this.showControls() ? CONTROLS_ROW_HEIGHT : 0;\r\n }\r\n}\r\n","<!--\r\n Deliberately not `gog-contained-layout`: `contain: layout` makes this element a stacking\r\n context, which traps the panel's z-index inside it and lets whatever follows on the page\r\n paint over the open dropdown.\r\n-->\r\n<div\r\n class=\"gog-ms-wrapper\"\r\n [class.gog-ms-wrapper--xsm]=\"size() === 'xsm'\"\r\n [class.gog-ms-wrapper--sm]=\"size() === 'sm'\"\r\n [class.gog-ms-wrapper--lg]=\"size() === 'lg'\"\r\n [class.gog-ms-wrapper--slg]=\"size() === 'slg'\"\r\n>\r\n <!--\r\n Associated with aria-labelledby rather than `for`: the trigger is a div with\r\n role=\"combobox\", not a labelable element. Without this the trigger had no accessible\r\n name at all whenever `label` was set, because that also suppresses the aria-label.\r\n -->\r\n @if (label()) {\r\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -- associated via aria-labelledby above instead, see comment -->\r\n <label class=\"gog-ms__label\" [id]=\"labelId()\">{{ label() }}</label>\r\n }\r\n\r\n <div\r\n class=\"gog-ms\"\r\n role=\"combobox\"\r\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-controls]=\"listboxId()\"\r\n [attr.aria-disabled]=\"isDisabled()\"\r\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || placeholder() || 'Select'\"\r\n [class.gog-ms--open]=\"isOpen()\"\r\n [class.gog-ms--disabled]=\"isDisabled()\"\r\n [class.gog-ms--error]=\"hasError()\"\r\n (click)=\"toggle()\"\r\n (keydown.enter)=\"toggle(); $event.preventDefault()\"\r\n (keydown.space)=\"toggle(); $event.preventDefault()\"\r\n (keydown.escape)=\"close()\"\r\n (keydown.arrowdown)=\"onTriggerArrowKeydown($event)\"\r\n (keydown.arrowup)=\"onTriggerArrowKeydown($event)\"\r\n >\r\n <span class=\"gog-ms__value\" [class.gog-ms__value--placeholder]=\"!selectedNames()\">\r\n {{ selectedNames() || placeholder() }}\r\n </span>\r\n\r\n <span class=\"gog-ms__actions\">\r\n @if (selectedNames()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-ms__clear gog-inline-center\"\r\n (click)=\"clearAll($event)\"\r\n aria-label=\"Clear selection\"\r\n >\r\n <gog-icon [template]=\"clearIconTemplate()\" name=\"close\" />\r\n </button>\r\n }\r\n <span class=\"gog-ms__arrow\" [class.gog-ms__arrow--up]=\"isOpen()\" aria-hidden=\"true\">\r\n <gog-icon\r\n [template]=\"chevronTemplate()\"\r\n [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\"\r\n />\r\n </span>\r\n </span>\r\n </div>\r\n\r\n @if (isOpen() && !appendToBody()) {\r\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\r\n }\r\n\r\n @if (visibleError()) {\r\n <span class=\"gog-ms__error\" role=\"alert\">{{ visibleError() }}</span>\r\n }\r\n</div>\r\n\r\n<!--\r\n One template for both render modes. When `appendToBody` is set it is stamped into\r\n <body> by the overlay, which is why the portal-only modifier and the resolved\r\n coordinates are applied conditionally: outside the component's subtree the panel can\r\n no longer inherit the size tokens from the `.gog-ms-wrapper--sm/--lg` wrapper.\r\n-->\r\n<ng-template #panelTpl>\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- (click) below is housekeeping stopPropagation, not an interactive handler; the focusable/keyboard-operable elements are the options inside -->\r\n <div\r\n [id]=\"listboxId()\"\r\n class=\"gog-ms__dropdown\"\r\n [class.gog-ms__dropdown--up]=\"!appendToBody() && dropdownDirectionState() === 'up'\"\r\n [class.gog-ms__dropdown--portal]=\"appendToBody()\"\r\n [class.gog-ms__dropdown--xsm]=\"appendToBody() && size() === 'xsm'\"\r\n [class.gog-ms__dropdown--sm]=\"appendToBody() && size() === 'sm'\"\r\n [class.gog-ms__dropdown--lg]=\"appendToBody() && size() === 'lg'\"\r\n [class.gog-ms__dropdown--slg]=\"appendToBody() && size() === 'slg'\"\r\n [style.top.px]=\"appendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"appendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"appendToBody() ? resolvedPanelWidth() : null\"\r\n [style.max-height]=\"appendToBody() ? resolvedPanelMaxHeight() : null\"\r\n [style.z-index]=\"dropdownZIndex() ?? panelZIndex()\"\r\n role=\"listbox\"\r\n aria-multiselectable=\"true\"\r\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (showControls() && controlsPosition() === 'top') {\r\n <ng-container [ngTemplateOutlet]=\"controlsRowTpl\" />\r\n }\r\n <!--\r\n Not a tab stop of its own: the listbox pattern's only stop is the trigger, with\r\n focus moved between options via the arrow keys (roving-focus.ts), which already\r\n scrolls the focused option into view natively — no separate keyboard-scroll target\r\n needed here.\r\n -->\r\n <gog-scroll size=\"thin\" [focusable]=\"false\" overscrollBehavior=\"contain\" class=\"gog-ms__scroll\">\r\n <div class=\"gog-ms__options\">\r\n @for (option of options(); track option.id) {\r\n <!--\r\n tabindex=\"-1\" keeps the list to a single tab stop, as the listbox pattern\r\n expects: focus moves between options with the arrow keys, not by tabbing\r\n through every one. Programmatic .focus() still works on a negative tabindex.\r\n -->\r\n <button\r\n type=\"button\"\r\n class=\"gog-ms__option\"\r\n role=\"option\"\r\n tabindex=\"-1\"\r\n [attr.aria-selected]=\"isSelected(option.id)\"\r\n [attr.aria-disabled]=\"option.disabled ?? false\"\r\n [class.gog-ms__option--selected]=\"isSelected(option.id)\"\r\n [class.gog-ms__option--disabled]=\"option.disabled ?? false\"\r\n (click)=\"toggleOption(option, $event)\"\r\n (keydown)=\"onOptionKeydown($event)\"\r\n >\r\n <span class=\"gog-ms__option-mark\" aria-hidden=\"true\">\r\n <gog-icon [name]=\"isSelected(option.id) ? 'checkbox-checked' : 'checkbox'\" />\r\n </span>\r\n {{ option.name }}\r\n </button>\r\n }\r\n </div>\r\n </gog-scroll>\r\n @if (showControls() && controlsPosition() === 'bottom') {\r\n <ng-container [ngTemplateOutlet]=\"controlsRowTpl\" />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #controlsRowTpl>\r\n <div class=\"gog-ms__controls\" [class.gog-ms__controls--bottom]=\"controlsPosition() === 'bottom'\">\r\n <gog-button variant=\"ghost\" size=\"sm\" (click)=\"selectAll($event)\">Select all</gog-button>\r\n <gog-button variant=\"ghost\" size=\"sm\" (click)=\"clearAll($event)\">Clear</gog-button>\r\n </div>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DoCheck,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\n\r\n@Component({\r\n selector: 'gog-slider',\r\n imports: [],\r\n templateUrl: './slider.component.html',\r\n styleUrl: './slider.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.--thumb-pos]': 'thumbPos()',\r\n '[style.--fill-scale]': 'fillScale()',\r\n // Drives the :host(.gog-host--auto-width) rule in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect. Inverted from gog-button's\r\n // full-width class: this control is full width by default, so the class only\r\n // appears once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class SliderComponent implements ControlValueAccessor, DoCheck {\r\n private static nextId = 0;\r\n protected readonly inputId = `gog-slider-${++SliderComponent.nextId}`;\r\n\r\n readonly label = input('');\r\n readonly min = input(0);\r\n readonly max = input(100);\r\n readonly step = input(1);\r\n readonly showValue = input(true);\r\n readonly showThumb = input(true);\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n readonly errorDisplay = input<GogErrorDisplay>('manual');\r\n readonly ariaLabel = input('');\r\n readonly disabled = input(false);\r\n /**\r\n * Full width of the container by default. Set to `false` to size the track to\r\n * `--gog-slider-auto-width` instead — a slider's track has no content of its own to\r\n * shrink-wrap to, so unlike the other field controls this needs an explicit fallback\r\n * width rather than `fit-content`.\r\n */\r\n readonly fullWidth = input(true);\r\n\r\n /** Two-way bindable value: `[(value)]=\"signal\"`. */\r\n readonly value = model<number>(0);\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.errorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly clampedValue = computed(() => {\r\n const value = this.value();\r\n return Math.min(this.max(), Math.max(this.min(), value));\r\n });\r\n\r\n protected readonly fillPercent = computed(() => {\r\n const range = this.max() - this.min();\r\n if (range === 0) return 0;\r\n return ((this.clampedValue() - this.min()) / range) * 100;\r\n });\r\n\r\n protected readonly thumbPos = computed(() => `${this.fillPercent()}%`);\r\n protected readonly fillScale = computed(() => this.fillPercent() / 100);\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n protected readonly errorId = computed(() => (this.hasError() ? `${this.inputId}-error` : null));\r\n\r\n private onChange: (val: number) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n // Registering through NgControl instead of NG_VALUE_ACCESSOR keeps `this.ngControl`\r\n // available for `hasError` — providing NG_VALUE_ACCESSOR on the component while also\r\n // injecting NgControl would be a dependency cycle.\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: number): void {\r\n const next = val ?? this.min();\r\n this.value.set(Math.min(this.max(), Math.max(this.min(), next)));\r\n }\r\n\r\n registerOnChange(fn: (val: number) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const next = Number(input.value);\r\n const value = Math.min(this.max(), Math.max(this.min(), next));\r\n\r\n this.value.set(value);\r\n this.onChange(value);\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n}\r\n","<div\n class=\"gog-slider gog-contained-layout\"\n [class.gog-slider--disabled]=\"isDisabled()\"\n [class.gog-slider--thumb-hidden]=\"!showThumb()\"\n>\n <div class=\"gog-slider__header\">\n @if (label()) {\n <label [attr.for]=\"inputId\" class=\"gog-slider__label\">{{ label() }}</label>\n }\n\n @if (showValue()) {\n <span class=\"gog-slider__value\">{{ clampedValue() }}</span>\n }\n </div>\n\n <div class=\"gog-slider__track-container\">\n <div class=\"gog-slider__track\">\n <div class=\"gog-slider__fill\"></div>\n </div>\n\n @if (showThumb()) {\n <div class=\"gog-slider__thumb\" aria-hidden=\"true\"></div>\n }\n\n <input\n [id]=\"inputId\"\n class=\"gog-slider__input\"\n type=\"range\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || 'Slider'\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"clampedValue()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"errorId()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"clampedValue()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n </div>\n\n <div class=\"gog-slider__range-labels\">\n <span>{{ min() }}</span>\n <span>{{ max() }}</span>\n </div>\n\n @if (hasError()) {\n <span class=\"gog-slider__error\" [attr.id]=\"errorId()\" role=\"alert\">\n {{ visibleError() }}\n </span>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, effect, input, model } from '@angular/core';\r\n\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { GogPaginatorRangeMode, GogSize } from '../../shared/types';\r\n\r\n@Component({\r\n selector: 'gog-paginator',\r\n imports: [ButtonComponent],\r\n templateUrl: './paginator.component.html',\r\n styleUrl: './paginator.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-paginator',\r\n role: 'navigation',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n // Drives the :host(.gog-host--auto-width) rule in the stylesheet — without this\r\n // binding the `fullWidth` input has no visible effect. Inverted from gog-button's\r\n // full-width class: this control is full width by default, so the class only\r\n // appears once a consumer opts *out* of that.\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class PaginatorComponent {\r\n /** 1-based current page. Two-way bindable: `[(page)]=\"myPageSignal\"`. */\r\n readonly page = model(1);\r\n /**\r\n * Full width of the container by default. Set to `false` to shrink to fit the page\r\n * buttons instead.\r\n */\r\n readonly fullWidth = input(true);\r\n readonly totalPages = input(1);\r\n /**\r\n * `window` (default): a fixed number of page buttons (`visiblePages`) that slides to keep\r\n * the current page centered, clamped at the edges — no ellipsis, no pinned boundaries\r\n * unless `showFirstPage`/`showLastPage` ask for them.\r\n * `ellipsis`: the original behavior — first and last page are always pinned, and\r\n * `siblingCount` pages are kept around the current one, with a \"…\" filling the gap. Kept\r\n * around as an opt-in for consumers (like `gog-table`) already built around that look.\r\n */\r\n readonly rangeMode = input<GogPaginatorRangeMode>('window');\r\n /** `rangeMode=\"window\"` only: how many page number buttons stay visible at once. */\r\n readonly visiblePages = input(5);\r\n /** `rangeMode=\"window\"` only: always keep page 1 reachable, with a \"…\" if it's not adjacent. */\r\n readonly showFirstPage = input(false);\r\n /** `rangeMode=\"window\"` only: always keep the last page reachable, with a \"…\" if it's not adjacent. */\r\n readonly showLastPage = input(false);\r\n /** `rangeMode=\"ellipsis\"` only: how many page numbers to keep on each side of the current page. */\r\n readonly siblingCount = input(2);\r\n readonly size = input<GogSize>('sm');\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input('Pagination');\r\n\r\n protected readonly pageNumbers = computed(() => {\r\n const total = Math.max(1, this.totalPages());\r\n const current = this.page();\r\n return this.rangeMode() === 'ellipsis'\r\n ? this.ellipsisRange(total, current)\r\n : this.windowRange(total, current);\r\n });\r\n\r\n constructor() {\r\n // Self-clamps whenever `totalPages` shrinks below the current page (or a consumer\r\n // passes an out-of-range value directly), so every consumer gets correct bounds for\r\n // free instead of reimplementing this per usage.\r\n effect(() => {\r\n const total = Math.max(1, this.totalPages());\r\n const current = this.page();\r\n if (current > total) {\r\n this.page.set(total);\r\n } else if (current < 1) {\r\n this.page.set(1);\r\n }\r\n });\r\n }\r\n\r\n private windowRange(total: number, current: number): (number | '...')[] {\r\n const windowSize = Math.min(Math.max(1, this.visiblePages()), total);\r\n const start = Math.max(\r\n 1,\r\n Math.min(current - Math.floor((windowSize - 1) / 2), total - windowSize + 1),\r\n );\r\n const end = start + windowSize - 1;\r\n\r\n const range: (number | '...')[] = [];\r\n if (this.showFirstPage() && start > 1) {\r\n range.push(1);\r\n if (start > 2) range.push('...');\r\n }\r\n for (let i = start; i <= end; i++) range.push(i);\r\n if (this.showLastPage() && end < total) {\r\n if (end < total - 1) range.push('...');\r\n range.push(total);\r\n }\r\n return range;\r\n }\r\n\r\n private ellipsisRange(total: number, current: number): (number | '...')[] {\r\n const delta = Math.max(0, this.siblingCount());\r\n const range: (number | '...')[] = [];\r\n for (let i = 1; i <= total; i++) {\r\n if (i === 1 || i === total || (i >= current - delta && i <= current + delta)) {\r\n range.push(i);\r\n } else if (range[range.length - 1] !== '...') {\r\n range.push('...');\r\n }\r\n }\r\n return range;\r\n }\r\n\r\n protected isNumber(value: number | '...'): value is number {\r\n return typeof value === 'number';\r\n }\r\n\r\n protected goTo(target: number): void {\r\n if (this.disabled() || target < 1 || target > this.totalPages()) return;\r\n this.page.set(target);\r\n }\r\n\r\n protected prev(): void {\r\n this.goTo(this.page() - 1);\r\n }\r\n\r\n protected next(): void {\r\n this.goTo(this.page() + 1);\r\n }\r\n}\r\n","<gog-button\n variant=\"ghost\"\n [size]=\"size()\"\n [disabled]=\"disabled() || page() === 1\"\n ariaLabel=\"Previous page\"\n (gogClick)=\"prev()\"\n >‹</gog-button\n>\n\n@for (item of pageNumbers(); track $index) {\n @if (isNumber(item)) {\n <gog-button\n [size]=\"size()\"\n [variant]=\"item === page() ? 'primary' : 'ghost'\"\n [disabled]=\"disabled()\"\n [ariaLabel]=\"item === page() ? 'Page ' + item + ', current page' : 'Go to page ' + item\"\n (gogClick)=\"goTo(item)\"\n >{{ item }}</gog-button\n >\n } @else {\n <span class=\"gog-paginator__ellipsis\">…</span>\n }\n}\n\n<gog-button\n variant=\"ghost\"\n [size]=\"size()\"\n [disabled]=\"disabled() || page() === totalPages()\"\n ariaLabel=\"Next page\"\n (gogClick)=\"next()\"\n >›</gog-button\n>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport { GogSize, GogSpinnerVariant } from '../../../shared/types';\nimport { SpinnerComponent } from '../spinner.component';\n\n@Component({\n selector: 'gog-spinner-overlay',\n imports: [SpinnerComponent],\n templateUrl: './spinner-overlay.component.html',\n styleUrl: './spinner-overlay.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-spinner-overlay-host',\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\n },\n})\nexport class SpinnerOverlayComponent {\n readonly loading = input(false);\n readonly size = input<GogSize>('md');\n readonly ariaLabel = input('Loading');\n readonly variant = input<GogSpinnerVariant>('runic');\n}\n","<div class=\"gog-spinner-overlay\">\n <div class=\"gog-spinner-overlay__content\">\n <ng-content />\n </div>\n\n @if (loading()) {\n <div class=\"gog-spinner-overlay__scrim\">\n <gog-spinner [size]=\"size()\" [ariaLabel]=\"ariaLabel()\" [variant]=\"variant()\" />\n </div>\n }\n</div>\n","import { Directive, input } from '@angular/core';\n\n/** Case-insensitive, numeric-aware (`\"item2\" < \"item10\"`) — the sensible default for text. */\nconst defaultCollator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n\n/** Default comparator: locale-aware for strings via `Intl.Collator`, `<`/`>` otherwise. */\nexport function defaultCompare(a: unknown, b: unknown): number {\n if (typeof a === 'string' && typeof b === 'string') {\n return defaultCollator.compare(a, b);\n }\n if (a === b) return 0;\n return (a as number | string) < (b as number | string) ? -1 : 1;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'column',\n})\nexport class Column {\n /** Field name, or a dot-path into a nested property (e.g. `\"address.city\"`). */\n readonly field = input.required<string>();\n readonly header = input<string>('');\n readonly sortable = input<boolean>(false);\n /** Fixed width, e.g. \"120px\" or \"20%\" */\n readonly width = input<string>('');\n /** Min width, e.g. \"80px\" */\n readonly minWidth = input<string>('');\n /** Max width, e.g. \"300px\" */\n readonly maxWidth = input<string>('');\n /** Custom sort comparator for this column. Defaults to `defaultCompare`. */\n readonly comparator = input<((a: unknown, b: unknown) => number) | null>(null);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\nexport interface GogTableBodyContext<T> {\n $implicit: T;\n index: number;\n}\n\nexport interface GogTableHeaderContext {\n $implicit: never;\n}\n\n/**\n * Marks a <ng-template> inside <gog-table> with a field name and optional type.\n *\n * Usage:\n * <ng-template template=\"status\" type=\"body\" let-row>...</ng-template>\n * <ng-template template=\"status\" type=\"header\">...</ng-template>\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[template]',\n})\nexport class TemplateDirective {\n readonly template = input.required<string>();\n readonly type = input<'body' | 'header'>('body');\n\n readonly templateRef = inject(TemplateRef<unknown>);\n\n static ngTemplateContextGuard<T>(\n _dir: TemplateDirective,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\n ctx: unknown,\n ): ctx is GogTableBodyContext<T> | GogTableHeaderContext {\n return true;\n }\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n input,\r\n linkedSignal,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { PaginatorComponent } from '../paginator/paginator.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\nimport { GogSize } from '../../shared/types';\r\nimport { Column, defaultCompare } from './column';\r\nimport { TemplateDirective } from './template.directive';\r\n\r\n/** Resolves `field` against `row`, following dot-paths (e.g. `\"address.city\"`). */\r\nfunction getByPath(row: unknown, field: string): unknown {\r\n if (!field.includes('.')) return (row as Record<string, unknown> | null)?.[field];\r\n\r\n let value: unknown = row;\r\n for (const key of field.split('.')) {\r\n if (value == null) return undefined;\r\n value = (value as Record<string, unknown>)[key];\r\n }\r\n return value;\r\n}\r\n\r\nexport type SortDirection = 'asc' | 'desc' | null;\r\n\r\ninterface SortState {\r\n field: string;\r\n direction: SortDirection;\r\n}\r\n\r\n@Component({\r\n selector: 'gog-table',\r\n imports: [SpinnerComponent, PaginatorComponent, NgTemplateOutlet, IconComponent, ScrollComponent],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-table-host',\r\n '[style.display]': '\"block\"',\r\n '[style.width]': 'fullWidth() ? \"100%\" : \"fit-content\"',\r\n },\r\n})\r\nexport class TableComponent<T extends object> {\r\n readonly value = input<T[]>([]);\r\n /**\r\n * Full width of the container by default. Set to `false` to shrink the table to fit\r\n * its columns' content instead.\r\n */\r\n readonly fullWidth = input(true);\r\n /** 0 = no pagination */\r\n readonly pageSize = input<number>(0);\r\n readonly showRowNumbers = input<boolean>(true);\r\n readonly showTotal = input<boolean>(false);\r\n readonly emptyPlaceholder = input<string>('-');\r\n /** Alignment of pagination controls */\r\n readonly paginatorPosition = input<'left' | 'center' | 'right'>('center');\r\n /** Alignment of total count label (only when showTotal=true) */\r\n readonly totalPosition = input<'left' | 'right' | 'opposite'>('opposite');\r\n /** Show loading spinner instead of rows */\r\n readonly loading = input<boolean>(false);\r\n /** Show vertical borders between columns */\r\n readonly showColumnBorders = input<boolean>(false);\r\n /** Stick header row to the top of the viewport while scrolling */\r\n readonly stickyHeader = input<boolean>(false);\r\n /** Row density: lg (default) / md (compact) / sm (dense) */\r\n readonly size = input<GogSize>('lg');\r\n\r\n readonly columns = contentChildren(Column);\r\n readonly templates = contentChildren(TemplateDirective);\r\n\r\n readonly sortState = signal<SortState>({ field: '', direction: null });\r\n\r\n readonly sortedData = computed(() => {\r\n const { field, direction } = this.sortState();\r\n const rows = [...this.value()];\r\n if (!field || !direction) return rows;\r\n\r\n const compare =\r\n this.columns()\r\n .find((col) => col.field() === field)\r\n ?.comparator() ?? defaultCompare;\r\n\r\n return rows.sort((a, b) => {\r\n const av = getByPath(a, field);\r\n const bv = getByPath(b, field);\r\n if (av == null && bv == null) return 0;\r\n if (av == null) return 1;\r\n if (bv == null) return -1;\r\n const cmp = compare(av, bv);\r\n return direction === 'asc' ? cmp : -cmp;\r\n });\r\n });\r\n\r\n readonly totalPages = computed(() => {\r\n const size = this.pageSize();\r\n if (!size) return 1;\r\n return Math.max(1, Math.ceil(this.sortedData().length / size));\r\n });\r\n\r\n /**\r\n * Resets to page 1 whenever the sort changes (a new sort re-orders the whole data set,\r\n * so whatever page the user was on no longer means anything) and clamps down to\r\n * `totalPages` whenever the data set or page size shrinks — but otherwise preserves\r\n * wherever the paginator navigated to. `gog-paginator`'s own `page` model additionally\r\n * self-clamps against `totalPages` on its own, so this only has to handle the reset case.\r\n */\r\n readonly currentPage = linkedSignal<{ total: number; sortState: SortState }, number>({\r\n source: () => ({ total: this.totalPages(), sortState: this.sortState() }),\r\n computation: (src, previous) => {\r\n if (!previous || previous.source.sortState !== src.sortState) return 1;\r\n return Math.min(Math.max(1, previous.value), src.total);\r\n },\r\n });\r\n\r\n readonly visibleRows = computed(() => {\r\n const size = this.pageSize();\r\n if (!size) return this.sortedData();\r\n const page = this.currentPage();\r\n const start = (page - 1) * size;\r\n return this.sortedData().slice(start, start + size);\r\n });\r\n\r\n readonly hasPagination = computed(\r\n () => !this.loading() && this.pageSize() > 0 && this.totalPages() > 1,\r\n );\r\n\r\n readonly emptyColspan = computed(() => this.columns().length + (this.showRowNumbers() ? 1 : 0));\r\n\r\n getBodyTemplate(field: string): TemplateRef<unknown> | null {\r\n return this.bodyTemplateMap().get(field) ?? null;\r\n }\r\n\r\n getHeaderTemplate(field: string): TemplateRef<unknown> | null {\r\n return this.headerTemplateMap().get(field) ?? null;\r\n }\r\n\r\n toggleSort(col: Column): void {\r\n if (!col.sortable()) return;\r\n const cur = this.sortState();\r\n const field = col.field();\r\n if (cur.field !== field) {\r\n this.sortState.set({ field, direction: 'asc' });\r\n } else if (cur.direction === 'asc') {\r\n this.sortState.set({ field, direction: 'desc' });\r\n } else {\r\n this.sortState.set({ field: '', direction: null });\r\n }\r\n }\r\n\r\n getSortDirection(field: string): SortDirection {\r\n const s = this.sortState();\r\n return s.field === field ? s.direction : null;\r\n }\r\n\r\n getAriaSort(field: string): 'ascending' | 'descending' | null {\r\n const direction = this.getSortDirection(field);\r\n if (direction === 'asc') return 'ascending';\r\n if (direction === 'desc') return 'descending';\r\n return null;\r\n }\r\n\r\n handleSortClick(col: Column): void {\r\n if (!this.loading()) this.toggleSort(col);\r\n }\r\n\r\n getCellValue(row: T, field: string): unknown {\r\n return getByPath(row, field);\r\n }\r\n\r\n formatCellValue(row: T, field: string): string {\r\n const value = this.getCellValue(row, field);\r\n return value == null ? this.emptyPlaceholder() : String(value);\r\n }\r\n\r\n globalRowIndex(localIndex: number): number {\r\n const size = this.pageSize();\r\n if (!size) return localIndex + 1;\r\n return (this.currentPage() - 1) * size + localIndex + 1;\r\n }\r\n\r\n /** CSS grid-area for the total label: left slot or right slot */\r\n readonly totalGridArea = computed(() => {\r\n const totalPos = this.totalPosition();\r\n const paginatorPos = this.paginatorPosition();\r\n if (totalPos === 'opposite') return paginatorPos === 'right' ? 'left' : 'right';\r\n return totalPos;\r\n });\r\n\r\n /** CSS grid-area for the pagination block */\r\n readonly paginatorGridArea = computed(() => this.paginatorPosition());\r\n\r\n private readonly bodyTemplateMap = computed(() => {\r\n const map = new Map<string, TemplateRef<unknown>>();\r\n for (const t of this.templates()) {\r\n if (t.type() === 'body') map.set(t.template(), t.templateRef);\r\n }\r\n return map;\r\n });\r\n\r\n private readonly headerTemplateMap = computed(() => {\r\n const map = new Map<string, TemplateRef<unknown>>();\r\n for (const t of this.templates()) {\r\n if (t.type() === 'header') map.set(t.template(), t.templateRef);\r\n }\r\n return map;\r\n });\r\n}\r\n","<div class=\"gog-table-wrapper gog-contained-layout\">\r\n <gog-scroll axis=\"horizontal\" class=\"gog-table-scroll\">\r\n <table\r\n class=\"gog-table\"\r\n [class.gog-table--col-borders]=\"showColumnBorders()\"\r\n [class.gog-table--loading]=\"loading()\"\r\n [class.gog-table--slg]=\"size() === 'slg'\"\r\n [class.gog-table--md]=\"size() === 'md'\"\r\n [class.gog-table--sticky-header]=\"stickyHeader()\"\r\n [class.gog-table--sm]=\"size() === 'sm'\"\r\n [class.gog-table--xsm]=\"size() === 'xsm'\"\r\n [style.width]=\"fullWidth() ? '100%' : 'fit-content'\"\r\n >\r\n <colgroup>\r\n @if (showRowNumbers()) {\r\n <col class=\"gog-table__col--num\" />\r\n }\r\n @for (col of columns(); track col.field()) {\r\n <col\r\n [style.width]=\"col.width() || null\"\r\n [style.min-width]=\"col.minWidth() || null\"\r\n [style.max-width]=\"col.maxWidth() || null\"\r\n />\r\n }\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @if (showRowNumbers()) {\r\n <th class=\"gog-table__th gog-table__th--num\" scope=\"col\">#</th>\r\n }\r\n @for (col of columns(); track col.field()) {\r\n <th\r\n class=\"gog-table__th\"\r\n scope=\"col\"\r\n [class.gog-table__th--sortable]=\"col.sortable() && !loading()\"\r\n [class.gog-table__th--sorted]=\"getSortDirection(col.field())\"\r\n [attr.aria-sort]=\"getAriaSort(col.field())\"\r\n [attr.tabindex]=\"col.sortable() && !loading() ? 0 : null\"\r\n (click)=\"handleSortClick(col)\"\r\n (keydown.enter)=\"handleSortClick(col)\"\r\n (keydown.space)=\"handleSortClick(col); $event.preventDefault()\"\r\n >\r\n @if (getHeaderTemplate(col.field()); as headerTpl) {\r\n <ng-container *ngTemplateOutlet=\"headerTpl\" />\r\n } @else {\r\n <span class=\"gog-table__th-inner\">\r\n {{ col.header() || col.field() }}\r\n @if (col.sortable() && !loading()) {\r\n <span class=\"gog-table__sort-icon\" aria-hidden=\"true\">\r\n @if (getSortDirection(col.field()) === 'asc') {\r\n <gog-icon name=\"sort-up\" />\r\n } @else if (getSortDirection(col.field()) === 'desc') {\r\n <gog-icon name=\"sort-down\" />\r\n } @else {\r\n <gog-icon name=\"sort\" />\r\n }\r\n </span>\r\n }\r\n </span>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (loading()) {\r\n <tr>\r\n <td class=\"gog-table__loading-cell\" [attr.colspan]=\"emptyColspan()\">\r\n <gog-spinner size=\"md\" />\r\n </td>\r\n </tr>\r\n } @else if (visibleRows().length === 0) {\r\n <tr>\r\n <td class=\"gog-table__empty\" [attr.colspan]=\"emptyColspan()\">—</td>\r\n </tr>\r\n } @else {\r\n @for (row of visibleRows(); track $index; let i = $index) {\r\n <tr class=\"gog-table__row\">\r\n @if (showRowNumbers()) {\r\n <td class=\"gog-table__td gog-table__td--num\">{{ globalRowIndex(i) }}</td>\r\n }\r\n @for (col of columns(); track col.field()) {\r\n <td class=\"gog-table__td\">\r\n @if (getBodyTemplate(col.field()); as bodyTpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"bodyTpl; context: { $implicit: row, index: i }\"\r\n />\r\n } @else {\r\n {{ formatCellValue(row, col.field()) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </gog-scroll>\r\n\r\n @if (hasPagination() || showTotal()) {\r\n <div class=\"gog-table__footer\">\r\n @if (showTotal()) {\r\n <span class=\"gog-table__total\" [style.grid-area]=\"totalGridArea()\">\r\n Total: {{ value().length }}\r\n </span>\r\n }\r\n\r\n @if (hasPagination()) {\r\n <gog-paginator\r\n class=\"gog-table__pagination\"\r\n [style.grid-area]=\"paginatorGridArea()\"\r\n [(page)]=\"currentPage\"\r\n [totalPages]=\"totalPages()\"\r\n rangeMode=\"ellipsis\"\r\n size=\"sm\"\r\n ariaLabel=\"Table pagination\"\r\n />\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly root = this.document.documentElement;\n readonly theme = signal(this.readTheme());\n\n constructor() {\n this.applyTheme(this.theme());\n }\n\n setTheme(theme: string): void {\n this.theme.set(theme);\n this.applyTheme(theme);\n }\n\n toggleTheme(): void {\n this.setTheme(this.theme() === 'dark' ? 'light' : 'dark');\n }\n\n private readTheme(): string {\n return this.root.getAttribute('data-theme') ?? 'light';\n }\n\n private applyTheme(theme: string): void {\n this.root.setAttribute('data-theme', theme);\n }\n}\n","/*\r\n * Public API Surface of ui\r\n */\r\n\r\nexport * from './lib/components/button/button.component';\r\nexport * from './lib/components/accordion/accordion.component';\r\nexport * from './lib/components/collapsible/collapsible.component';\r\nexport * from './lib/components/collapsible/collapsible-trigger.directive';\r\nexport * from './lib/components/collapsible/collapsible-content.directive';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/dialog/confirmation-dialog/confirmation-dialog.component';\r\nexport * from './lib/components/dialog/dialog.component';\r\nexport * from './lib/components/dialog/dialog.tokens';\r\nexport * from './lib/components/icon/icon.component';\r\nexport * from './lib/components/toast/toast.component';\r\nexport * from './lib/components/toast/toast-container/toast-container.component';\r\nexport * from './lib/components/inputfield/inputfield.component';\r\nexport * from './lib/components/textarea/textarea.component';\r\nexport * from './lib/components/chip/chip.component';\r\nexport * from './lib/components/tag/tag.component';\r\nexport * from './lib/components/select/select.component';\r\nexport * from './lib/components/multiselect/multiselect.component';\r\nexport * from './lib/components/slider/slider.component';\r\nexport * from './lib/components/skeleton/skeleton.component';\r\nexport * from './lib/components/paginator/paginator.component';\r\nexport * from './lib/components/scroll/scroll.component';\r\nexport * from './lib/components/spinner/spinner-overlay/spinner-overlay.component';\r\nexport * from './lib/components/table/column';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/table/template.directive';\r\nexport * from './lib/components/spinner/spinner.component';\r\nexport * from './lib/services/dialog-service/dialog.service';\r\nexport * from './lib/services/toast-service/toast-service';\r\nexport * from './lib/services/theme-service/theme.service';\r\nexport * from './lib/shared/types';\r\nexport * from './lib/shared/config';\r\nexport * from './lib/shared/dropdown-base';\r\nexport type { GogDropdownDirection } from './lib/shared/dropdown-position';\r\nexport type { GogIconName } from './lib/shared/icons';\r\nexport { ICON_DEFS } from './lib/shared/icons';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["readPx"],"mappings":"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"}