@guildofgleks/ui 21.3.2 → 21.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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/dropdown-overlay.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-position.ts","../../../../projects/gleks/ui/src/lib/shared/clearable-state.ts","../../../../projects/gleks/ui/src/lib/shared/error-state.ts","../../../../projects/gleks/ui/src/lib/shared/option-accessor.ts","../../../../projects/gleks/ui/src/lib/shared/float-label-state.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-base.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/autocomplete/autocomplete.component.ts","../../../../projects/gleks/ui/src/lib/components/autocomplete/autocomplete.component.html","../../../../projects/gleks/ui/src/lib/components/badge/badge.directive.ts","../../../../projects/gleks/ui/src/lib/components/button-toggle/button-toggle.component.ts","../../../../projects/gleks/ui/src/lib/components/button-toggle/button-toggle.component.html","../../../../projects/gleks/ui/src/lib/components/tabs/tabs-state.ts","../../../../projects/gleks/ui/src/lib/components/tabs/tab.component.ts","../../../../projects/gleks/ui/src/lib/components/tabs/tab.component.html","../../../../projects/gleks/ui/src/lib/components/tabs/tabs.component.ts","../../../../projects/gleks/ui/src/lib/components/tabs/tabs.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/datepicker/date-utils.ts","../../../../projects/gleks/ui/src/lib/components/datepicker/calendar/calendar.component.ts","../../../../projects/gleks/ui/src/lib/components/datepicker/calendar/calendar.component.html","../../../../projects/gleks/ui/src/lib/components/datepicker/datepicker.component.ts","../../../../projects/gleks/ui/src/lib/components/datepicker/datepicker.component.html","../../../../projects/gleks/ui/src/lib/components/divider/divider.component.ts","../../../../projects/gleks/ui/src/lib/components/divider/divider.component.html","../../../../projects/gleks/ui/src/lib/components/progressbar/progressbar.component.ts","../../../../projects/gleks/ui/src/lib/components/progressbar/progressbar.component.html","../../../../projects/gleks/ui/src/lib/components/toggle/toggle.component.ts","../../../../projects/gleks/ui/src/lib/components/toggle/toggle.component.html","../../../../projects/gleks/ui/src/lib/shared/control-id.ts","../../../../projects/gleks/ui/src/lib/components/radio-group/radio-group.component.ts","../../../../projects/gleks/ui/src/lib/components/radio-group/radio-group.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/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/components/select/select.component.ts","../../../../projects/gleks/ui/src/lib/components/select/select.component.html","../../../../projects/gleks/ui/src/lib/components/tooltip/tooltip-bubble.component.ts","../../../../projects/gleks/ui/src/lib/components/tooltip/tooltip-bubble.component.html","../../../../projects/gleks/ui/src/lib/shared/tooltip-overlay.ts","../../../../projects/gleks/ui/src/lib/shared/tooltip-position.ts","../../../../projects/gleks/ui/src/lib/components/tooltip/tooltip.directive.ts","../../../../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/lib/shared/token-names.ts","../../../../projects/gleks/ui/src/public-api.ts","../../../../projects/gleks/ui/src/guildofgleks-ui.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\r\n\r\nimport {\r\n GogFloatLabelVariant,\r\n GogScrollOverscrollBehavior,\r\n GogScrollSize,\r\n GogSize,\r\n GogTextareaResize,\r\n GogTooltipPosition,\r\n} from './types';\r\n// Type-only, so none of these pull a runtime dependency into this module — `config.ts` is\r\n// imported by nearly every component and must stay free of import cycles.\r\nimport type { GogErrorDisplay } from './error-state';\r\nimport type { GogDropdownDirection } from './dropdown-position';\r\nimport type { GogDropdownFilterPosition } from './types';\r\nimport type { ToastPosition } from '../services/toast-service/toast-service';\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 * Whether the overlay thumb/track ever renders. Scrolling itself is unaffected either way\r\n * — this is purely the visual affordance. Defaults to `true`.\r\n */\r\n showTrack?: boolean;\r\n };\r\n button?: {\r\n debounce?: number;\r\n };\r\n tooltip?: {\r\n showDelay?: number;\r\n hideDelay?: number;\r\n position?: GogTooltipPosition;\r\n };\r\n /** Applies to `gog-inputfield`, `gog-select`, `gog-multiselect` and `gog-textarea`. */\r\n floatLabel?: {\r\n variant?: GogFloatLabelVariant;\r\n /**\r\n * Whether the field's own `placeholder` reappears once its label has floated out of\r\n * the way. Defaults to `false` — the placeholder stays hidden the whole time a float\r\n * label is active, since the resting label already occupies that space.\r\n */\r\n showPlaceholder?: boolean;\r\n };\r\n /**\r\n * Defaults for the interactive form controls — the two settings an app otherwise repeats on\r\n * literally every one of them: a compact app writes `size=\"sm\"` everywhere, and a\r\n * Reactive-Forms app writes `errorDisplay=\"auto\"` on every field.\r\n *\r\n * - `size` applies to `gog-button`, `gog-inputfield`, `gog-textarea`, `gog-select`,\r\n * `gog-multiselect`, `gog-checkbox` and `gog-radio-group`. Deliberately **not** to\r\n * `gog-table`, `gog-accordion` or `gog-paginator` (whose `size` means row/layout density\r\n * and whose defaults differ), nor to `gog-spinner`, `gog-skeleton`, `gog-tag` or\r\n * `gog-chip` (sized to fit whatever they sit next to, not to a form's density).\r\n * - `errorDisplay` applies to every control that renders a validation message:\r\n * `gog-inputfield`, `gog-textarea`, `gog-select`, `gog-multiselect`, `gog-radio-group`\r\n * and `gog-slider`.\r\n *\r\n * A component's own built-in default still applies when this is unset, so setting `size`\r\n * here does not flatten the different defaults those excluded components have.\r\n */\r\n control?: {\r\n size?: GogSize;\r\n errorDisplay?: GogErrorDisplay;\r\n /**\r\n * Whether `gog-inputfield`, `gog-textarea`, `gog-select` and `gog-multiselect` offer a\r\n * clear button. The button only ever appears once the control actually has something to\r\n * clear, so switching this on app-wide adds no permanent chrome.\r\n *\r\n * Component defaults are `false`, except `gog-multiselect`, which had a clear button\r\n * before this input existed and keeps it.\r\n */\r\n clearable?: boolean;\r\n };\r\n /** Applies to `gog-select` and `gog-multiselect`. */\r\n dropdown?: {\r\n /**\r\n * Whether the panel is rendered into `<body>` instead of inline. Worth setting app-wide\r\n * for a layout whose dropdowns generally live inside scrollable or overflow-clipped\r\n * containers, which is the case this exists for.\r\n */\r\n appendToBody?: boolean;\r\n direction?: GogDropdownDirection;\r\n /** Whether the panel shows a search box. Off by default. */\r\n filter?: boolean;\r\n /** Which end of the panel the search box sticks to. `'top'` by default. */\r\n filterPosition?: GogDropdownFilterPosition;\r\n };\r\n /**\r\n * Applies to `gog-datepicker` and `gog-calendar`. Every field here is something an app sets\r\n * once rather than per field — a locale and a date format repeated on every date input is\r\n * exactly the boilerplate this config exists to remove.\r\n */\r\n datepicker?: {\r\n /** BCP-47 tag driving month and weekday names. */\r\n locale?: string;\r\n /** 0 = Sunday … 6 = Saturday. Unset, it comes from the locale. */\r\n firstDayOfWeek?: number;\r\n /** Display and parse pattern (`dd.MM.yyyy`, `yyyy-MM-dd`, …). */\r\n format?: string;\r\n };\r\n /** Applies to `gog-autocomplete`. */\r\n autocomplete?: {\r\n /**\r\n * Milliseconds to wait after the last keystroke before `gogSearch` fires. A whole app\r\n * usually wants one answer here, tuned to its backend rather than to each field.\r\n */\r\n searchDebounce?: number;\r\n /** How many characters before the panel opens at all. */\r\n minLength?: number;\r\n /**\r\n * Whether focusing the field opens the panel immediately, showing the full option list.\r\n * Defaults to `true`.\r\n */\r\n openOnFocus?: boolean;\r\n };\r\n /** Applies to `gog-inputfield`. */\r\n inputfield?: {\r\n /**\r\n * Whether a `type=\"number\"` field shows the library's own spin buttons in place of the\r\n * browser's native ones. Defaults to `true`.\r\n */\r\n showSpinButtons?: boolean;\r\n };\r\n /** Applies to `gog-textarea`. */\r\n textarea?: {\r\n /**\r\n * Which direction(s) the field's own drag handle resizes it in — matches the native CSS\r\n * `resize` value space. Defaults to `'vertical'`.\r\n */\r\n resize?: GogTextareaResize;\r\n };\r\n toast?: {\r\n position?: ToastPosition;\r\n /** How long a non-sticky toast stays up, in ms. */\r\n duration?: number;\r\n };\r\n /**\r\n * Every fixed, user-visible string the library renders — button text and accessible names for\r\n * chrome the consumer never writes markup for.\r\n *\r\n * These are here rather than as one input per string because they are the definition of a\r\n * setting an app states once: a Russian-language app relabels \"Clear\" once, not on all 340\r\n * fields. Where a per-instance input already exists (`clearAriaLabel`, `todayLabel`, …) it\r\n * still wins for that one control — the usual instance → config → default order.\r\n *\r\n * Deliberately excludes anything that is *content* rather than chrome: `gog-checkbox`'s\r\n * `ariaLabel`, `gog-button`'s `ariaLabel`, a field's `label` or `placeholder`. Those differ\r\n * per instance by definition and have no meaningful app-wide value.\r\n */\r\n labels?: {\r\n /** Clear button on `gog-inputfield` / `gog-textarea`. */\r\n clear?: string;\r\n /**\r\n * Clear button on `gog-select` / `gog-multiselect` / `gog-autocomplete`, which clears a\r\n * selection rather than text.\r\n */\r\n clearSelection?: string;\r\n /** Clear button on `gog-datepicker`. */\r\n clearDate?: string;\r\n /** `gog-multiselect`'s select-all / clear-all buttons — visible text, not just a label. */\r\n selectAll?: string;\r\n clearAll?: string;\r\n /** `gog-inputfield`'s number spin buttons. */\r\n increment?: string;\r\n decrement?: string;\r\n /** `gog-inputfield`'s password reveal toggle, in its two states. */\r\n showPassword?: string;\r\n hidePassword?: string;\r\n /** Close buttons on the two service-driven overlays. */\r\n closeDialog?: string;\r\n closeToast?: string;\r\n /** `gog-paginator`'s `<nav>` accessible name and its two step buttons. */\r\n pagination?: string;\r\n previousPage?: string;\r\n nextPage?: string;\r\n /**\r\n * `gog-paginator`'s per-page button names (\"Go to page 4\", \"Page 4, current page\").\r\n *\r\n * A function rather than a string, and the only one in this block: these interpolate the\r\n * page number, and a template string with a `{0}` placeholder would be a second, weaker\r\n * formatting language to learn — one that also can't express languages where the number's\r\n * position or the surrounding grammar depends on its value. The default is\r\n * `` (page, isCurrent) => isCurrent ? `Page ${page}, current page` : `Go to page ${page}` ``.\r\n */\r\n page?: (page: number, isCurrent: boolean) => string;\r\n /** `gog-datepicker`'s button that opens the calendar panel. */\r\n openCalendar?: string;\r\n /** `gog-calendar` navigation and shortcuts. */\r\n today?: string;\r\n thisMonth?: string;\r\n previousMonth?: string;\r\n nextMonth?: string;\r\n previousYear?: string;\r\n nextYear?: string;\r\n /** `gog-calendar`'s time section. */\r\n hours?: string;\r\n minutes?: string;\r\n seconds?: string;\r\n };\r\n /**\r\n * Applies to `ThemeService`. Every field is off/neutral by default, so an app that configures\r\n * nothing keeps the pre-21.3.2 behaviour: adopt whatever `data-theme` is already on `<html>`,\r\n * else `'light'`.\r\n */\r\n theme?: {\r\n /**\r\n * `localStorage` key the chosen theme is written to and read back from. Unset, nothing is\r\n * persisted and the theme resets on every load.\r\n */\r\n storageKey?: string | null;\r\n /** Theme applied when nothing else decides. `'light'` by default. */\r\n defaultTheme?: string;\r\n /**\r\n * Whether to fall back to the OS `prefers-color-scheme` setting — and to keep following it\r\n * until the app calls `setTheme`/`toggleTheme`. Off by default: switching this on changes\r\n * which theme an existing app opens in.\r\n */\r\n followSystem?: boolean;\r\n /** Theme names `toggleTheme()` alternates between, and `followSystem` maps the OS setting to. */\r\n lightTheme?: string;\r\n darkTheme?: string;\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 * Layers `override` onto `base`, one level deep: a component key present in both has its\r\n * fields merged (so `{ tooltip: { showDelay } }` keeps the parent's `tooltip.position`), and a\r\n * key present in only one is taken as-is.\r\n *\r\n * Deliberately not a deep merge — `GogGlobalConfig` is exactly two levels by design, and a\r\n * recursive merge would start doing surprising things to any future field whose value is\r\n * itself an object the consumer means to replace wholesale.\r\n */\r\nfunction mergeGogConfig(base: GogGlobalConfig, override: GogGlobalConfig): GogGlobalConfig {\r\n const merged: Record<string, unknown> = { ...base };\r\n\r\n for (const [key, overrideValue] of Object.entries(override)) {\r\n const baseValue = (base as Record<string, unknown>)[key];\r\n merged[key] =\r\n isPlainObject(baseValue) && isPlainObject(overrideValue)\r\n ? { ...baseValue, ...overrideValue }\r\n : overrideValue;\r\n }\r\n\r\n return merged as GogGlobalConfig;\r\n}\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\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 layers onto the parent's config\r\n * rather than replacing it.** A route that only cares about tooltips can say so, and the\r\n * app-wide `button.debounce` stays in effect inside it:\r\n *\r\n * ```ts\r\n * // a route's providers — button.debounce from app.config.ts still applies here\r\n * provideGogConfig({ tooltip: { showDelay: 0 } })\r\n * ```\r\n *\r\n * Merging is one level deep, per component key: the nearest provider wins field by field, so\r\n * `{ tooltip: { showDelay: 0 } }` overrides only `showDelay` and leaves a parent's\r\n * `tooltip.position` alone. To drop an inherited value rather than change it, set it back to\r\n * the component's own default explicitly — there is no \"unset\" marker.\r\n */\r\nexport function provideGogConfig(config: GogGlobalConfig): Provider {\r\n return {\r\n provide: GOG_CONFIG,\r\n // skipSelf so this reads the *parent* injector's config rather than recursing into the\r\n // provider being defined here; optional because at the root there is no parent providing it.\r\n useFactory: () =>\r\n mergeGogConfig(inject(GOG_CONFIG, { skipSelf: true, optional: true }) ?? {}, config),\r\n };\r\n}\r\n\r\n/**\r\n * The library's precedence rule for a configurable input, in one place: an instance's own\r\n * input wins, then the app-wide `GOG_CONFIG` value, then the component's built-in default.\r\n *\r\n * Every configurable input resolves through this rather than repeating the `??` chain, so the\r\n * order can't drift between components — a component that accidentally checked the config\r\n * first would silently ignore the input on that one control only, which is close to invisible\r\n * in review. Kept a plain function (no `inject`) so it works anywhere: inside a `computed`, in\r\n * a composition class like `GogFloatLabelState`, and in unit tests without an injector.\r\n *\r\n * ```ts\r\n * private readonly globalConfig = inject(GOG_CONFIG);\r\n * protected readonly resolvedDebounce = computed(() =>\r\n * resolveConfigured(this.debounce(), this.globalConfig.button?.debounce, DEFAULT_DEBOUNCE),\r\n * );\r\n * ```\r\n */\r\nexport function resolveConfigured<T>(\r\n instanceValue: T | undefined,\r\n configuredValue: T | undefined,\r\n fallback: T,\r\n): T {\r\n return instanceValue ?? configuredValue ?? fallback;\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, resolveConfigured } from '../../shared/config';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\nconst DEFAULT_DEBOUNCE = 300;\r\n/** Built-in default, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\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 /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n size = input<GogSize | undefined>(undefined);\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 private readonly globalConfig = inject(GOG_CONFIG);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected spinnerSize = computed<GogSize>(\r\n () => ButtonComponent.SPINNER_SIZE_BY_BUTTON_SIZE[this.resolvedSize()],\r\n );\r\n\r\n protected readonly resolvedDebounce = computed(() =>\r\n resolveConfigured(this.debounce(), this.globalConfig.button?.debounce, DEFAULT_DEBOUNCE),\r\n );\r\n\r\n /**\r\n * The single size modifier, replacing one `[class.gog-btn--<size>]` binding per size.\r\n * Always emitted — `gog-btn` has a rule for every size, `md` included.\r\n */\r\n protected readonly sizeClass = computed(() => `gog-btn--${this.resolvedSize()}`);\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\r\n (click)=\"onClick($event)\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [attr.aria-disabled]=\"isDisabled() && !isNativeDisabled() ? 'true' : null\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.disabled]=\"isNativeDisabled() ? true : null\"\r\n [class.gog-btn--ghost]=\"variant() === 'ghost'\"\r\n [class.gog-btn--loading]=\"loading()\"\r\n [class.gog-btn--outline]=\"variant() === 'outline'\"\r\n [class.gog-btn--primary]=\"variant() === 'primary'\"\r\n [class.gog-btn--secondary]=\"variant() === 'secondary'\"\r\n [class.gog-cursor-not-allowed]=\"isDisabled()\"\r\n [class.gog-cursor-pointer]=\"!isDisabled()\"\r\n [class.gog-cursor-wait]=\"loading()\"\r\n [type]=\"type()\"\r\n class=\"gog-btn gog-inline-center gog-contained-layout\"\r\n [class]=\"sizeClass()\"\r\n>\r\n @if (loading()) {\r\n <gog-spinner [size]=\"spinnerSize()\" aria-hidden=\"true\" class=\"gog-btn__spinner\" />\r\n }\r\n\r\n <span [class.gog-btn__content--hidden]=\"loading()\" class=\"gog-btn__content\">\r\n <ng-content></ng-content>\r\n </span>\r\n</button>\r\n","import { GogOrientation } from './types';\n\nconst VERTICAL_ARROWS = ['ArrowDown', 'ArrowUp'] as const;\nconst HORIZONTAL_ARROWS = ['ArrowRight', 'ArrowLeft'] as const;\nconst EDGE_KEYS = ['Home', 'End'] as const;\n\nexport type RovingFocusKey =\n | (typeof VERTICAL_ARROWS)[number]\n | (typeof HORIZONTAL_ARROWS)[number]\n | (typeof EDGE_KEYS)[number];\n\n/** Which arrow pair drives a given orientation. `Home`/`End` apply to both. */\nfunction arrowsFor(orientation: GogOrientation): readonly string[] {\n return orientation === 'horizontal' ? HORIZONTAL_ARROWS : VERTICAL_ARROWS;\n}\n\n/**\n * Whether `key` navigates a roving-tabindex list laid out along `orientation`.\n *\n * The orientation filter is the point: a horizontal tablist must leave `ArrowDown` alone so\n * the page still scrolls, and a vertical listbox must not steal `ArrowRight` from a caret\n * inside a text field. `Home`/`End` are accepted for both.\n */\nexport function isRovingFocusKey(\n key: string,\n orientation: GogOrientation = 'vertical',\n): key is RovingFocusKey {\n return arrowsFor(orientation).includes(key) || (EDGE_KEYS as readonly string[]).includes(key);\n}\n\n/** Whether `key` moves backwards (up / left) rather than forwards. */\nfunction isBackwards(key: RovingFocusKey): boolean {\n return key === 'ArrowUp' || key === 'ArrowLeft';\n}\n\n/**\n * The index `key` moves to from `currentIndex`, wrapping at both ends.\n *\n * `isEnabled` lets a caller keep disabled items in the list — which it must, since they still\n * occupy a position in the DOM — while navigation steps over them. Without it every index is a\n * target, which is the behaviour the dropdowns rely on (they pre-filter their own list).\n * Returns `currentIndex` when nothing else is reachable, so a group of one enabled item cannot\n * spin.\n */\nexport function nextRovingFocusIndex(\n key: RovingFocusKey,\n currentIndex: number,\n count: number,\n isEnabled?: (index: number) => boolean,\n): number {\n if (count === 0) return currentIndex;\n\n const enabled = isEnabled ?? (() => true);\n const lastIndex = count - 1;\n\n // Home/End mean the first/last *reachable* item, not the first/last element.\n if (key === 'Home' || key === 'End') {\n const order =\n key === 'Home'\n ? Array.from({ length: count }, (_, i) => i)\n : Array.from({ length: count }, (_, i) => lastIndex - i);\n return order.find(enabled) ?? currentIndex;\n }\n\n const step = isBackwards(key) ? -1 : 1;\n // At most `count` hops: enough to come back round to where we started, never more.\n for (let hop = 1; hop <= count; hop++) {\n const candidate = (currentIndex + step * hop + count * hop) % count;\n if (enabled(candidate)) return candidate;\n }\n\n return currentIndex;\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 *\n * Defaults to a vertical list with every item reachable — the shape the option lists and the\n * accordion were written against — so existing callers need no options object.\n */\nexport function handleRovingFocusKeydown(\n event: KeyboardEvent,\n items: readonly HTMLElement[],\n options: {\n orientation?: GogOrientation;\n /** Items this returns true for are skipped rather than focused. */\n isDisabled?: (item: HTMLElement, index: number) => boolean;\n } = {},\n): boolean {\n const orientation = options.orientation ?? 'vertical';\n if (!isRovingFocusKey(event.key, orientation) || 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 const { isDisabled } = options;\n const isEnabled = isDisabled\n ? (candidate: number) => !isDisabled(items[candidate], candidate)\n : undefined;\n\n // Swallowed even when there is nowhere else to go: an open listbox or a focused tablist owns\n // its arrow keys, and letting one through would scroll the page out from under the widget.\n event.preventDefault();\n\n const nextIndex = nextRovingFocusIndex(event.key, index, items.length, isEnabled);\n if (nextIndex !== index) {\n items[nextIndex]?.focus();\n }\n return true;\n}\n","export type GogIconName =\r\n | 'check'\r\n | 'close'\r\n | 'chevron-up'\r\n | 'chevron-down'\r\n | 'chevron-left'\r\n | 'chevron-right'\r\n | 'calendar'\r\n | 'clock'\r\n | 'sort'\r\n | 'sort-up'\r\n | 'sort-down'\r\n | 'success'\r\n | 'error'\r\n | 'warning'\r\n | 'info'\r\n | 'checkbox'\r\n | 'checkbox-checked'\r\n | 'eye'\r\n | 'eye-off'\r\n | 'copy';\r\n\r\nexport const ICON_DEFS: Record<GogIconName, string> = {\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\n 'chevron-left': `<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-left-icon lucide-chevron-left\"><path d=\"m15 18-6-6 6-6\"/></svg>`,\r\n\r\n 'chevron-right': `<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-right-icon lucide-chevron-right\"><path d=\"m9 18 6-6-6-6\"/></svg>`,\r\n\r\n calendar: `<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-calendar-icon lucide-calendar\"><path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/></svg>`,\r\n\r\n clock: `<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-clock-icon lucide-clock\"><path d=\"M12 6v6l4 2\"/><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\n copy: `<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-copy-icon lucide-copy\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`,\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 inject,\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { GogIconName, ICON_DEFS } from '../../shared/icons';\r\n\r\nexport type { GogIconName } from '../../shared/icons';\r\n\r\n@Component({\r\n selector: 'gog-icon',\r\n imports: [NgTemplateOutlet],\r\n template: `\r\n @if (template(); as iconTpl) {\r\n <ng-container *ngTemplateOutlet=\"iconTpl\" />\r\n } @else {\r\n <span [innerHTML]=\"iconSvg()\"></span>\r\n }\r\n `,\r\n styleUrl: './icon.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-icon',\r\n '[attr.aria-hidden]': 'ariaHidden() ? \"true\" : null',\r\n '[attr.aria-label]': 'ariaHidden() ? null : ariaLabel()',\r\n },\r\n})\r\nexport class IconComponent {\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n readonly name = input<GogIconName>('close');\r\n readonly template = input<TemplateRef<unknown> | null>(null);\r\n readonly title = input('');\r\n readonly ariaHidden = input(true);\r\n\r\n protected readonly ariaLabel = computed(() =>\r\n this.ariaHidden() ? null : this.title() || this.name(),\r\n );\r\n\r\n protected readonly iconSvg = computed(() =>\r\n this.sanitizer.bypassSecurityTrustHtml(ICON_DEFS[this.name()]),\r\n );\r\n}\r\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\r\n /**\r\n * The single size modifier, replacing one `[class.gog-accordion--<size>]` binding per size.\r\n * Empty for `'lg'`: that is this component's default size, and its tokens are what every\r\n * `--gog-accordion-*` chain bottoms out at, so it has no modifier rule of its own.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.size() === 'lg' ? '' : `gog-accordion--${this.size()}`,\r\n );\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 gog-contained-layout\"\r\n [class]=\"sizeClass()\"\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 {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n} 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 '(focusout)': 'onFocusOut($event)',\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 * Closes the panel once focus leaves both the trigger and the content — e.g. Tabbing past\r\n * the last focusable element inside, or a click landing somewhere else on the page. Off by\r\n * default: plenty of consumers (an FAQ list, a settings section someone reads top to bottom)\r\n * want the panel to stay open regardless of where focus goes next, so this is opt-in rather\r\n * than baked in.\r\n */\r\n readonly collapseOnFocusOut = input(false);\r\n\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\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 protected onFocusOut(event: FocusEvent): void {\r\n if (!this.collapseOnFocusOut() || !this.open()) return;\r\n\r\n // relatedTarget is the element gaining focus — null covers a click landing outside any\r\n // focusable element, or the window losing focus entirely; both count as \"focus left\" here.\r\n const next = event.relatedTarget as Node | null;\r\n if (next && this.elementRef.nativeElement.contains(next)) return;\r\n\r\n this.open.set(false);\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 { ApplicationRef, EmbeddedViewRef, TemplateRef } from '@angular/core';\r\n\r\n/**\r\n * Renders a template into `document.body` while keeping it wired to the declaring\r\n * component: the view is stamped with that component's style encapsulation and reads\r\n * its signals directly.\r\n *\r\n * That is the whole point of doing it this way rather than with a second, portal-only\r\n * component: one `<ng-template>` can serve both the inline and the appended-to-body\r\n * dropdown, so the option markup exists once and cannot drift between the two modes,\r\n * and selection state needs no manual field-syncing to stay in step.\r\n */\r\nexport class GogDropdownOverlay {\r\n private hostEl: HTMLElement | null = null;\r\n private viewRef: EmbeddedViewRef<unknown> | null = null;\r\n\r\n constructor(\r\n private readonly appRef: ApplicationRef,\r\n private readonly document: Document,\r\n ) {}\r\n\r\n /** The `<body>` child holding the rendered panel, or null while detached. */\r\n get hostElement(): HTMLElement | null {\r\n return this.hostEl;\r\n }\r\n\r\n get isAttached(): boolean {\r\n return this.viewRef !== null;\r\n }\r\n\r\n attach(template: TemplateRef<unknown>, themeSource: Element | null = null): void {\r\n this.detach();\r\n\r\n this.hostEl = this.document.createElement('div');\r\n this.hostEl.classList.add('gog-overlay-host');\r\n\r\n // `data-theme` can be scoped to any subtree, not just `:root` (see the themes\r\n // showcase page), so the host has to copy it from wherever the trigger actually\r\n // sits rather than assume the document-wide theme applies.\r\n const themedAncestor = themeSource?.closest('[data-theme]');\r\n const theme = themedAncestor?.getAttribute('data-theme');\r\n if (theme) {\r\n this.hostEl.setAttribute('data-theme', theme);\r\n }\r\n\r\n this.document.body.appendChild(this.hostEl);\r\n\r\n this.viewRef = template.createEmbeddedView({});\r\n // Attached as its own change-detection root so signal reads inside the panel still\r\n // mark it dirty even though its DOM no longer sits under the declaring component.\r\n this.appRef.attachView(this.viewRef);\r\n\r\n for (const node of this.viewRef.rootNodes as Node[]) {\r\n this.hostEl.appendChild(node);\r\n }\r\n\r\n this.viewRef.detectChanges();\r\n }\r\n\r\n detach(): void {\r\n if (this.viewRef) {\r\n this.appRef.detachView(this.viewRef);\r\n this.viewRef.destroy();\r\n this.viewRef = null;\r\n }\r\n\r\n this.hostEl?.remove();\r\n this.hostEl = null;\r\n }\r\n}\r\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 { Signal, computed } from '@angular/core';\r\n\r\nimport { GogGlobalConfig, resolveConfigured } from './config';\r\n\r\n/**\r\n * Shared \"show a clear button\" state for the field-style controls.\r\n *\r\n * A plain composition class, same reasoning as `GogErrorState` and `GogFloatLabelState`: it has\r\n * to serve `gog-inputfield` and `gog-textarea` (no common base class) as well as\r\n * `GogDropdownBase`, which is one.\r\n *\r\n * The two things each control supplies itself are `hasValue` — \"there is something to clear\"\r\n * differs per control (non-empty string / non-null selection / non-empty array) — and the\r\n * actual clearing, since only the control knows its own empty value and how to notify forms.\r\n */\r\nexport class GogClearableState {\r\n /**\r\n * @param clearableInput the control's own `clearable` input (`undefined` when unset)\r\n * @param hasValue whether there is anything to clear\r\n * @param isNotEditable whether the control currently refuses edits — disabled, or (for the\r\n * text controls) read-only. Either way it offers no clear button: the affordance would\r\n * promise a change the control won't accept.\r\n * @param config the injected `GOG_CONFIG`\r\n * @param fallback the control's own default, read lazily — `GogDropdownBase` constructs this\r\n * in a field initializer, before its subclass has assigned `clearableByDefault`. `false`\r\n * everywhere except `gog-multiselect`, which shipped a clear button before this input\r\n * existed and keeps it.\r\n */\r\n constructor(\r\n private readonly clearableInput: Signal<boolean | undefined>,\r\n private readonly hasValue: Signal<boolean>,\r\n private readonly isNotEditable: Signal<boolean>,\r\n private readonly config: GogGlobalConfig,\r\n private readonly fallback: () => boolean,\r\n ) {}\r\n\r\n /** Whether the control is clearable at all — instance input, then config, then the default. */\r\n readonly enabled = computed(() =>\r\n resolveConfigured(this.clearableInput(), this.config.control?.clearable, this.fallback()),\r\n );\r\n\r\n /**\r\n * Whether the clear button should render *right now*. Deliberately value-driven: the control\r\n * shows nothing to clear until there is something to clear, so the affordance appears with the\r\n * content rather than sitting there permanently as dead chrome.\r\n */\r\n readonly isVisible = computed(() => this.enabled() && this.hasValue() && !this.isNotEditable());\r\n}\r\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","/**\r\n * How a collection-driven component reads one field off a consumer's own object.\r\n *\r\n * A `string` is a property name, or a dot-path into a nested one (`'profile.city'`). A function\r\n * is anything else. This is what lets `gog-select` / `gog-multiselect` take a consumer's real\r\n * DTO instead of forcing everything through a `{ id, name }` shape first.\r\n */\r\nexport type GogOptionAccessor<TOption, TResult> = string | ((option: TOption) => TResult);\r\n\r\n/** Resolves `field` against `source`, following dot-paths (e.g. `\"address.city\"`). */\r\nexport function getByPath(source: unknown, field: string): unknown {\r\n if (!field.includes('.')) return (source as Record<string, unknown> | null)?.[field];\r\n\r\n let value: unknown = source;\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\n/** Applies an accessor — a property path or a function — to one option. */\r\nexport function readOption<TOption, TResult>(\r\n option: TOption,\r\n accessor: GogOptionAccessor<TOption, TResult>,\r\n): TResult {\r\n return typeof accessor === 'function'\r\n ? accessor(option)\r\n : (getByPath(option, accessor) as TResult);\r\n}\r\n\r\n/**\r\n * Whether two resolved option values refer to the same option.\r\n *\r\n * Primitives are compared as strings, so a `formControl` holding `'1'` still matches an option\r\n * whose value is the number `1` — the library behaved this way before option values could be\r\n * anything, and forms routinely stringify. Objects are compared by identity instead: coercing\r\n * them would make every plain object equal to every other (`\"[object Object]\"`).\r\n */\r\nexport function isSameOptionValue(a: unknown, b: unknown): boolean {\r\n if (a === b) return true;\r\n if (a == null || b == null) return false;\r\n if (typeof a === 'object' || typeof b === 'object') return false;\r\n return String(a) === String(b);\r\n}\r\n","import { Signal, computed } from '@angular/core';\r\n\r\nimport { GogGlobalConfig, resolveConfigured } from './config';\r\nimport { GogFloatLabelVariant } from './types';\r\n\r\nconst DEFAULT_VARIANT: GogFloatLabelVariant = 'none';\r\nconst DEFAULT_SHOW_PLACEHOLDER = false;\r\n\r\n/**\r\n * Shared float-label state for the library's field-style controls.\r\n *\r\n * A plain class rather than a base class or directive, for the same reason as `GogErrorState`:\r\n * it has to serve `gog-inputfield` and `gog-textarea`, which share no base class, as well as\r\n * `GogDropdownBase`, which is one. Each consumer owns an instance and exposes whichever\r\n * members its template needs.\r\n *\r\n * The one thing each control must supply itself is `hasValue` — \"this field has content\" means\r\n * something different everywhere (a non-empty string, a non-null selection, a non-empty\r\n * selection array), which is exactly why this is composed in rather than implemented as a\r\n * directive sitting outside the component.\r\n */\r\nexport class GogFloatLabelState {\r\n /**\r\n * @param variantInput the control's own `floatLabel` input (`undefined` when unset)\r\n * @param showPlaceholderInput the control's own `floatLabelShowPlaceholder` input\r\n * @param placeholder the control's `placeholder` input\r\n * @param isFocused whether the control currently has focus\r\n * @param hasValue whether the control has a value — see the class note\r\n * @param config the injected `GOG_CONFIG`\r\n */\r\n constructor(\r\n private readonly variantInput: Signal<GogFloatLabelVariant | undefined>,\r\n private readonly showPlaceholderInput: Signal<boolean | undefined>,\r\n private readonly placeholder: Signal<string>,\r\n private readonly isFocused: Signal<boolean>,\r\n private readonly hasValue: Signal<boolean>,\r\n private readonly config: GogGlobalConfig,\r\n ) {}\r\n\r\n /** The resolved variant: instance input, else `GOG_CONFIG.floatLabel.variant`, else `'none'`. */\r\n readonly variant = computed(() =>\r\n resolveConfigured(this.variantInput(), this.config.floatLabel?.variant, DEFAULT_VARIANT),\r\n );\r\n\r\n readonly showPlaceholder = computed(() =>\r\n resolveConfigured(\r\n this.showPlaceholderInput(),\r\n this.config.floatLabel?.showPlaceholder,\r\n DEFAULT_SHOW_PLACEHOLDER,\r\n ),\r\n );\r\n\r\n /** Whether a float label is in effect at all — `false` keeps the static label-above layout. */\r\n readonly isActive = computed(() => this.variant() !== 'none');\r\n\r\n /** Whether the label is at its floated target rather than resting like a placeholder. */\r\n readonly isFloated = computed(() => this.isFocused() || this.hasValue());\r\n\r\n /**\r\n * The placeholder the control should actually render. While a float label is active the\r\n * resting label already occupies that space, so the placeholder stays hidden unless the\r\n * consumer opted into `floatLabelShowPlaceholder` — and even then only once the label has\r\n * floated out of the way.\r\n */\r\n readonly effectivePlaceholder = computed(() => {\r\n if (!this.isActive()) return this.placeholder();\r\n if (!this.showPlaceholder()) return '';\r\n return this.isFloated() ? this.placeholder() : '';\r\n });\r\n}\r\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 contentChild,\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 { GOG_CONFIG, resolveConfigured } from './config';\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 { GogClearableState } from './clearable-state';\r\nimport { GogErrorState, type GogErrorDisplay } from './error-state';\r\nimport { type GogOptionAccessor, isSameOptionValue, readOption } from './option-accessor';\r\nimport { GogFloatLabelState } from './float-label-state';\r\nimport { handleRovingFocusKeydown } from './roving-focus';\r\nimport { GogDropdownFilterPosition, GogFloatLabelVariant, GogSize } from './types';\r\n\r\n/**\r\n * Custom markup for the trigger's chevron, on `gog-select` and `gog-multiselect`:\r\n *\r\n * ```html\r\n * <gog-select [options]=\"opts\">\r\n * <ng-template gogDropdownChevron><gog-icon name=\"sort\" /></ng-template>\r\n * </gog-select>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogDropdownChevron]' })\r\nexport class GogDropdownChevronDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\r\n\r\n/** Context handed to a `gogDropdownOption` template. */\r\nexport interface GogDropdownOptionContext<TOption> {\r\n /** The consumer's own option object, untouched. */\r\n $implicit: TOption;\r\n selected: boolean;\r\n disabled: boolean;\r\n /** The resolved label, so a custom row can decorate it rather than re-derive it. */\r\n label: string;\r\n}\r\n\r\n/**\r\n * Custom markup for one option row, on `gog-select` and `gog-multiselect`:\r\n *\r\n * ```html\r\n * <gog-select [options]=\"users\" optionLabel=\"fullName\" optionValue=\"id\" [(value)]=\"userId\">\r\n * <ng-template gogDropdownOption let-user let-selected=\"selected\">\r\n * <img [src]=\"user.avatar\" alt=\"\" /> {{ user.fullName }}\r\n * </ng-template>\r\n * </gog-select>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogDropdownOption]' })\r\nexport class GogDropdownOptionDirective<TOption = unknown> {\r\n readonly templateRef = inject<TemplateRef<GogDropdownOptionContext<TOption>>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard<TOption>(\r\n _dir: GogDropdownOptionDirective<TOption>,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogDropdownOptionContext<TOption> {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * The shape the listbox controls assume when their accessor inputs are left at their defaults.\r\n *\r\n * It is no longer required: `optionLabel` / `optionValue` / `optionDisabled` accept any property\r\n * path or function, so a consumer can pass their own DTO straight through. This interface just\r\n * describes what the *default* accessors (`'name'` / `'id'` / `'disabled'`) expect to find.\r\n */\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/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nconst DEFAULT_APPEND_TO_BODY = false;\r\nconst DEFAULT_DROPDOWN_DIRECTION: GogDropdownDirection = 'auto';\r\nconst DEFAULT_FILTER = false;\r\nconst DEFAULT_FILTER_POSITION: GogDropdownFilterPosition = 'top';\r\nconst DEFAULT_CLEAR_SELECTION_LABEL = 'Clear selection';\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, TOption = GogDropdownOption>\r\n implements ControlValueAccessor, DoCheck\r\n{\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<TOption[]>([]);\r\n /**\r\n * How to read an option's visible text — a property path (`'name'`, `'profile.title'`) or a\r\n * function. Defaults to `'name'`, matching `GogDropdownOption`.\r\n */\r\n readonly optionLabel = input<GogOptionAccessor<TOption, string>>('name');\r\n /**\r\n * How to read the value this control emits for an option. A property path or a function, or\r\n * `null` to emit **the option object itself** — which is what lets a consumer keep their own\r\n * DTO end to end instead of mapping ids back to objects on every change.\r\n *\r\n * Defaults to `'id'`, matching `GogDropdownOption`, so existing code is unaffected.\r\n */\r\n readonly optionValue = input<GogOptionAccessor<TOption, unknown> | null>('id');\r\n /** How to read whether an option is disabled. Defaults to `'disabled'`. */\r\n readonly optionDisabled = input<GogOptionAccessor<TOption, boolean>>('disabled');\r\n /**\r\n * Whether to offer a clear button once something is selected. Unset, falls back to\r\n * `GOG_CONFIG.control.clearable`, then to the control's own default.\r\n */\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /**\r\n * Accessible name for the clear button. Unset, falls back to\r\n * `GOG_CONFIG.labels.clearSelection`, then to `'Clear selection'`.\r\n */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(\r\n this.clearAriaLabel(),\r\n this.globalConfig.labels?.clearSelection,\r\n DEFAULT_CLEAR_SELECTION_LABEL,\r\n ),\r\n );\r\n /**\r\n * Smallest width the trigger may shrink to, as any CSS length. Only meaningful with\r\n * `[fullWidth]=\"false\"`, where the trigger otherwise sizes to whatever is currently selected\r\n * and can collapse to almost nothing on a short option. Left unset it falls back to the\r\n * `--gog-{select,multiselect}-min-width` token.\r\n */\r\n readonly minWidth = input<string | null>(null);\r\n /**\r\n * Whether the panel shows a search box that narrows the option list. Unset, falls back to\r\n * `GOG_CONFIG.dropdown.filter`, then to `false`.\r\n */\r\n readonly filter = input<boolean | undefined>(undefined);\r\n readonly filterPlaceholder = input('Search...');\r\n /**\r\n * Which end of the panel the search box sticks to. Named to match `gog-multiselect`'s\r\n * `controlsPosition`, which is the same idea for its select-all row. Unset, falls back to\r\n * `GOG_CONFIG.dropdown.filterPosition`, then to `'top'`.\r\n */\r\n readonly filterPosition = input<GogDropdownFilterPosition | undefined>(undefined);\r\n /** Shown in place of the list when the query matches nothing. */\r\n readonly filterEmptyMessage = input('No matches');\r\n /**\r\n * How an option is matched against the query. Left null, the resolved `optionLabel` is\r\n * matched case-insensitively as a substring — pass a function to search other fields, match\r\n * on a prefix, or plug in your own fuzzy matcher.\r\n */\r\n readonly filterMatch = input<((option: TOption, query: string) => boolean) | null>(null);\r\n readonly errorMessage = input('');\r\n /**\r\n * See `GogErrorDisplay`. Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to\r\n * `'manual'` — matching every other control in the library.\r\n */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.dropdown.direction`, then to `'auto'`. */\r\n readonly dropdownDirection = input<GogDropdownDirection | undefined>(undefined);\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 /** Unset, falls back to `GOG_CONFIG.dropdown.appendToBody`, then to `false`. */\r\n readonly appendToBody = input<boolean | undefined>(undefined);\r\n readonly disabled = input(false);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogDropdownChevron>` into\r\n * the control instead. Removed in 21.5.0.\r\n */\r\n readonly chevronTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogDropdownChevron` template; wins over the deprecated `chevronTemplate`. */\r\n protected readonly chevronSlot = contentChild(GogDropdownChevronDirective);\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 /** Unset, falls back to `GOG_CONFIG.floatLabel.variant`, then to `'none'` (off). */\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.showPlaceholder`, then to `false`. */\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\r\n\r\n readonly isOpen = signal(false);\r\n\r\n /** Projected `gogDropdownOption` template, if the consumer supplied one. */\r\n protected readonly optionSlot = contentChild(GogDropdownOptionDirective);\r\n\r\n /** An option's visible text, via `optionLabel`. */\r\n protected labelOf(option: TOption): string {\r\n return readOption(option, this.optionLabel());\r\n }\r\n\r\n /**\r\n * The value this control emits for an option, via `optionValue` — or the option object\r\n * itself when `optionValue` is `null`.\r\n */\r\n protected valueOf(option: TOption): unknown {\r\n const accessor = this.optionValue();\r\n return accessor === null ? option : readOption(option, accessor);\r\n }\r\n\r\n /** Whether an option is disabled, via `optionDisabled`. Anything falsy counts as enabled. */\r\n protected isOptionDisabled(option: TOption): boolean {\r\n return !!readOption(option, this.optionDisabled());\r\n }\r\n\r\n /** Context for a projected `gogDropdownOption` row. */\r\n protected optionContext(option: TOption, selected: boolean): GogDropdownOptionContext<TOption> {\r\n return {\r\n $implicit: option,\r\n selected,\r\n disabled: this.isOptionDisabled(option),\r\n label: this.labelOf(option),\r\n };\r\n }\r\n\r\n /** Shared by both controls to match a resolved option value against the current value. */\r\n protected sameValue(a: unknown, b: unknown): boolean {\r\n return isSameOptionValue(a, b);\r\n }\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 * BEM block that carries the size modifier — `.gog-select` vs `.gog-ms-wrapper`. Separate\r\n * from `triggerClass` because in `gog-multiselect` the two are different elements.\r\n */\r\n protected abstract readonly sizeBlockClass: string;\r\n /** BEM block of the panel, which repeats the size modifier when appended to `<body>`. */\r\n protected abstract readonly panelBlockClass: string;\r\n /** Whether the control currently has a selection — drives the float-label \"filled\" state. */\r\n protected abstract readonly hasFloatValue: Signal<boolean>;\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 /**\r\n * Unique per-instance suffix, so several dropdowns on a page can't collide on DOM ids.\r\n *\r\n * Deliberately a bare number rather than `nextGogControlId()` (which the single-element\r\n * controls use): each subclass derives *several* ids from this one instance — trigger,\r\n * listbox, label, error — so what it needs is the instance number, not one finished id.\r\n */\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 /** `protected` so subclasses can resolve their own inputs against the same config object. */\r\n protected readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly overlay = new GogDropdownOverlay(this.appRef, this.document);\r\n\r\n /** Set from `(focus)`/`(blur)` on the trigger — see `onFocusIn`/`onFocusOut`. */\r\n protected readonly isFocused = signal(false);\r\n\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n protected readonly resolvedAppendToBody = computed(() =>\r\n resolveConfigured(\r\n this.appendToBody(),\r\n this.globalConfig.dropdown?.appendToBody,\r\n DEFAULT_APPEND_TO_BODY,\r\n ),\r\n );\r\n protected readonly resolvedDropdownDirection = computed(() =>\r\n resolveConfigured(\r\n this.dropdownDirection(),\r\n this.globalConfig.dropdown?.direction,\r\n DEFAULT_DROPDOWN_DIRECTION,\r\n ),\r\n );\r\n\r\n /**\r\n * The single size modifier for the wrapper, replacing one `[class.<block>--<size>]` binding\r\n * per size. Empty for `'md'`: that is the default size and has no modifier rule of its own —\r\n * every `--gog-<block>-size-*` chain bottoms out at the `md` tokens.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.resolvedSize() === DEFAULT_SIZE ? '' : `${this.sizeBlockClass}--${this.resolvedSize()}`,\r\n );\r\n /**\r\n * Same modifier repeated on the panel, but only when it is appended to `<body>` — outside\r\n * the component's subtree the panel no longer inherits the wrapper's size tokens, so it has\r\n * to carry them itself. See the `--portal` blocks in the component stylesheets.\r\n */\r\n protected readonly panelSizeClass = computed(() =>\r\n this.resolvedAppendToBody() && this.resolvedSize() !== DEFAULT_SIZE\r\n ? `${this.panelBlockClass}--${this.resolvedSize()}`\r\n : '',\r\n );\r\n\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\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 /**\r\n * Explicit panel width, or null to let it size to its own content.\r\n *\r\n * The panel used to be pinned to the trigger's width, which broke a trigger narrower than its\r\n * options: with `[fullWidth]=\"false\"` the trigger shrinks to the *current* selection, so\r\n * picking a short option cut the longer ones off in the list. It now sizes to its content with\r\n * the trigger width as a floor — see `resolvedPanelMinWidth`.\r\n */\r\n protected readonly resolvedPanelWidth = computed(() => this.dropdownWidth());\r\n\r\n /** The trigger's width, used as the panel's minimum so it never renders narrower than it. */\r\n protected readonly resolvedPanelMinWidth = computed(() => {\r\n const width = this.panelPlacement()?.width;\r\n return 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 /**\r\n * Each control supplies its own default: `gog-multiselect` shipped a clear button before\r\n * `clearable` existed, so it keeps one; `gog-select` opts in.\r\n */\r\n protected abstract readonly clearableByDefault: boolean;\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n computed(() => this.hasFloatValue()),\r\n this.isDisabled,\r\n this.globalConfig,\r\n // read lazily for the same field-initialisation-order reason as hasFloatValue below\r\n () => this.clearableByDefault,\r\n );\r\n\r\n /** Whether to render the clear button right now — see `GogClearableState`. */\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n protected readonly resolvedFilter = computed(() =>\r\n resolveConfigured(this.filter(), this.globalConfig.dropdown?.filter, DEFAULT_FILTER),\r\n );\r\n protected readonly resolvedFilterPosition = computed(() =>\r\n resolveConfigured(\r\n this.filterPosition(),\r\n this.globalConfig.dropdown?.filterPosition,\r\n DEFAULT_FILTER_POSITION,\r\n ),\r\n );\r\n /** Current search text. Cleared whenever the panel closes, so reopening starts fresh. */\r\n protected readonly filterQuery = signal('');\r\n\r\n /**\r\n * The options actually rendered. Everything downstream — the loops, the keyboard navigation\r\n * target list, the panel height estimate, and multiselect's select-all — reads this rather\r\n * than `options()`, so filtering stays consistent instead of only hiding rows visually.\r\n */\r\n protected readonly visibleOptions = computed(() => {\r\n const query = this.filterQuery().trim();\r\n if (!this.resolvedFilter() || query === '') return this.options();\r\n\r\n const match = this.filterMatch();\r\n if (match) return this.options().filter((option) => match(option, query));\r\n\r\n const needle = query.toLowerCase();\r\n return this.options().filter((option) => this.labelOf(option).toLowerCase().includes(needle));\r\n });\r\n\r\n protected onFilterInput(event: Event): void {\r\n this.filterQuery.set((event.target as HTMLInputElement).value);\r\n }\r\n\r\n /** Resets the control to its empty value and notifies any attached form. */\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.commitValue(this.emptyValue);\r\n }\r\n\r\n /**\r\n * `hasFloatValue` is wrapped in a `computed` rather than passed straight through: these\r\n * field initializers run before the *subclass's* do, so `this.hasFloatValue` is still\r\n * undefined right here. The arrow defers the read until the signal is first evaluated, by\r\n * which time the subclass has assigned it.\r\n */\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n computed(() => this.hasFloatValue()),\r\n this.globalConfig,\r\n );\r\n\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\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 /** Bound to `(focus)` on the trigger — only drives the float-label floated state. */\r\n protected onFocusIn(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n /** Bound to `(blur)` on the trigger — only drives the float-label floated state. */\r\n protected onFocusOut(): void {\r\n this.isFocused.set(false);\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.resolvedAppendToBody()) {\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.filterQuery.set('');\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.resolvedAppendToBody() ? 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.visibleOptions().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.resolvedDropdownDirection(),\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 { 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\nconst DEFAULT_SHOW_TRACK = true;\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 * Whether the overlay thumb/track ever renders. Native scrolling — wheel, touch, keyboard,\r\n * focus-into-view, and any programmatic `scrollTo`/`scrollIntoView` — keeps working exactly\r\n * the same either way; this only controls the visual affordance, not `overflow` or scroll\r\n * containment (see `viewportOverflowY`/`X`). Off suits a viewport whose *position* is already\r\n * driven some other way — `gog-tabs`' `scrollActiveIntoView` is the case this exists for,\r\n * where a second, independent scroll indicator next to the active-tab underline reads as two\r\n * conflicting signals for the same thing. Unset, falls back to `GOG_CONFIG.scroll.showTrack`,\r\n * then to `true`.\r\n */\r\n readonly showTrack = input<boolean | 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 protected readonly resolvedShowTrack = computed(\r\n () => this.showTrack() ?? this.globalConfig.scroll?.showTrack ?? DEFAULT_SHOW_TRACK,\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({\r\n scrollTop,\r\n scrollLeft,\r\n scrollHeight,\r\n scrollWidth,\r\n clientHeight,\r\n clientWidth,\r\n });\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 (resolvedShowTrack() && showTrackV()) {\r\n <div\r\n class=\"gog-scroll__track gog-scroll__track--v\"\r\n [class.gog-scroll__track--visible]=\"\r\n !resolvedAutoHide() || interacting() || dragAxis() === 'vertical'\r\n \"\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 (resolvedShowTrack() && showTrackH()) {\r\n <div\r\n class=\"gog-scroll__track gog-scroll__track--h\"\r\n [class.gog-scroll__track--visible]=\"\r\n !resolvedAutoHide() || interacting() || dragAxis() === 'horizontal'\r\n \"\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 (resolvedShowTrack() && axis() === 'both' && showTrackV() && showTrackH()) {\r\n <div class=\"gog-scroll__corner\" aria-hidden=\"true\"></div>\r\n }\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { GogDropdownBase, type GogDropdownOption } from '../../shared/dropdown-base';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SEARCH_DEBOUNCE = 300;\r\nconst DEFAULT_MIN_LENGTH = 1;\r\nconst DEFAULT_OPEN_ON_FOCUS = true;\r\n\r\n/**\r\n * A text field that suggests options as you type.\r\n *\r\n * ```html\r\n * <gog-autocomplete\r\n * [options]=\"users\"\r\n * optionLabel=\"profile.fullName\"\r\n * [optionValue]=\"null\"\r\n * [(value)]=\"user\"\r\n * (gogSearch)=\"load($event)\"\r\n * [loading]=\"loading()\"\r\n * />\r\n * ```\r\n *\r\n * Shares `GogDropdownBase` with `gog-select` — placement, the append-to-body overlay, the\r\n * option accessors, float label, error state and `ControlValueAccessor` all come from there.\r\n * What makes it a separate control rather than a mode of `gog-select` is the trigger: here it\r\n * is a real `<input>`, which changes the ARIA contract completely. The input keeps DOM focus\r\n * the whole time and the highlighted option is pointed at with `aria-activedescendant`, where\r\n * a listbox moves focus onto the option itself.\r\n */\r\n@Component({\r\n selector: 'gog-autocomplete',\r\n imports: [IconComponent, NgTemplateOutlet, ScrollComponent, SpinnerComponent],\r\n templateUrl: './autocomplete.component.html',\r\n styleUrl: './autocomplete.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Only bites when the control has opted out of full width; otherwise the container decides.\r\n '[style.--gog-autocomplete-min-width]': 'minWidth()',\r\n },\r\n})\r\nexport class AutocompleteComponent<\r\n TOption = GogDropdownOption,\r\n TValue = string | number | null,\r\n> extends GogDropdownBase<TValue, TOption> {\r\n readonly inputId = input('');\r\n\r\n /**\r\n * Two-way bindable selected value: `[(value)]=\"signal\"`. Carries whatever `optionValue`\r\n * resolves to — an id by default, or the option object itself when `optionValue` is `null`.\r\n */\r\n readonly value = model<TValue>(null as TValue);\r\n\r\n /**\r\n * Whether to narrow `options` in the browser as the user types.\r\n *\r\n * Leave it on for a list you already hold. Turn it **off** when `gogSearch` fetches an\r\n * already-filtered list from a server: filtering that answer a second time against the same\r\n * query is the classic double-filtering bug, and it silently drops rows whose match the\r\n * server found in a field this component cannot see.\r\n */\r\n readonly filterLocal = input(true);\r\n /** How many characters before the panel opens at all. */\r\n readonly minLength = input<number | undefined>(undefined);\r\n /**\r\n * Whether focusing the field opens the panel immediately, showing the full option list —\r\n * before `minLength` would otherwise have let anything through. Off, the field behaves as\r\n * before: nothing opens until enough has been typed. Unset, falls back to\r\n * `GOG_CONFIG.autocomplete.openOnFocus`, then to `true`.\r\n */\r\n readonly openOnFocus = input<boolean | undefined>(undefined);\r\n /** Milliseconds of quiet before `gogSearch` fires. `0` emits on every keystroke. */\r\n readonly searchDebounce = input<number | undefined>(undefined);\r\n /** Shows a spinner in the trailing slot — for a server-backed source that is still loading. */\r\n readonly loading = input(false);\r\n /** Shown in place of the list when nothing matches. */\r\n readonly emptyMessage = input('No matches');\r\n /**\r\n * Whether free text that matches no option is discarded when the field loses focus.\r\n *\r\n * On (the default) the field always ends up reflecting a real selection: editing is treated\r\n * as transient, so the current `value` survives keystrokes and Escape or blur snaps the text\r\n * back to it.\r\n *\r\n * Off, what the user typed is itself meaningful — a create-as-you-type flow. The text is left\r\n * alone on blur and `value` is dropped as soon as it stops matching, so the two never\r\n * disagree. Read the typed text from `gogSearch` rather than from `value`.\r\n */\r\n readonly forceSelection = input(true);\r\n\r\n /** The current query, debounced. Wire a server-side lookup to this. */\r\n readonly gogSearch = output<string>();\r\n /**\r\n * Fires when the panel is scrolled to the end of the option list — the signal to fetch and\r\n * append another page of a large or server-backed source, rather than handing the whole\r\n * thing over up front. Forwarded from the panel's own `gog-scroll`.\r\n */\r\n readonly gogLoadMore = output<void>();\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n /** A cleared autocomplete is `null`, whatever `TValue` the consumer bound. */\r\n protected readonly emptyValue = null as TValue;\r\n protected readonly optionClass = 'gog-autocomplete__option';\r\n protected readonly triggerClass = 'gog-autocomplete__control';\r\n protected readonly sizeBlockClass = 'gog-autocomplete';\r\n protected readonly panelBlockClass = 'gog-autocomplete__dropdown';\r\n /** Opt-in, matching `gog-select` and `gog-inputfield`. */\r\n protected readonly clearableByDefault = false;\r\n protected override readonly optionGapToken = '--gog-autocomplete-option-gap';\r\n protected override readonly panelMaxHeightToken = '--gog-autocomplete-panel-max-height';\r\n protected override readonly optionHeightToken = '--gog-autocomplete-option-height';\r\n\r\n private readonly config = inject(GOG_CONFIG);\r\n private readonly ownDestroyRef = inject(DestroyRef);\r\n\r\n protected readonly triggerId = computed(() => this.inputId() || `gog-autocomplete-${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 protected optionId(index: number): string {\r\n return `${this.triggerId()}-option-${index}`;\r\n }\r\n\r\n protected readonly resolvedMinLength = computed(() =>\r\n resolveConfigured(this.minLength(), this.config.autocomplete?.minLength, DEFAULT_MIN_LENGTH),\r\n );\r\n private readonly resolvedDebounce = computed(() =>\r\n resolveConfigured(\r\n this.searchDebounce(),\r\n this.config.autocomplete?.searchDebounce,\r\n DEFAULT_SEARCH_DEBOUNCE,\r\n ),\r\n );\r\n protected readonly resolvedOpenOnFocus = computed(() =>\r\n resolveConfigured(\r\n this.openOnFocus(),\r\n this.config.autocomplete?.openOnFocus,\r\n DEFAULT_OPEN_ON_FOCUS,\r\n ),\r\n );\r\n\r\n /** What is actually in the `<input>`. Not the same thing as the committed `value`. */\r\n protected readonly query = signal('');\r\n /**\r\n * True right after `openOnFocus` opens the panel, until the user actually types. The field\r\n * may already be showing a previously-selected label at that point — this keeps the panel's\r\n * list unfiltered by it, so focusing shows every option rather than just the one that\r\n * happens to match the current text. Cleared on the first keystroke, so filtering resumes\r\n * exactly as before.\r\n */\r\n protected readonly browsingAll = signal(false);\r\n /**\r\n * Which option the arrows have highlighted. `-1` means none — Enter then does nothing rather\r\n * than committing whichever row happened to be first, which is what stops a fast typist from\r\n * selecting something they never looked at.\r\n */\r\n protected readonly activeIndex = signal(-1);\r\n\r\n protected readonly selectedOption = computed(\r\n () =>\r\n this.options().find((option) => this.sameValue(this.valueOf(option), this.value())) ?? null,\r\n );\r\n protected readonly selectedLabel = computed(() => {\r\n const option = this.selectedOption();\r\n return option === null ? '' : this.labelOf(option);\r\n });\r\n protected readonly hasFloatValue = computed(() => this.value() != null || this.query() !== '');\r\n\r\n /**\r\n * Local filtering, replacing the base's panel-filter behaviour: here the query comes from the\r\n * trigger, not from a search box inside the panel. Overriding this rather than duplicating a\r\n * second filtered list keeps the keyboard targets, the empty state and the panel height\r\n * estimate all reading the same set.\r\n */\r\n protected override readonly visibleOptions = computed(() => {\r\n const query = this.browsingAll() ? '' : this.query().trim();\r\n if (!this.filterLocal() || query === '') return this.options();\r\n\r\n const match = this.filterMatch();\r\n if (match) return this.options().filter((option) => match(option, query));\r\n\r\n const needle = query.toLowerCase();\r\n return this.options().filter((option) => this.labelOf(option).toLowerCase().includes(needle));\r\n });\r\n\r\n protected readonly activeOptionId = computed(() => {\r\n const index = this.activeIndex();\r\n return index >= 0 && index < this.visibleOptions().length ? this.optionId(index) : null;\r\n });\r\n\r\n private searchTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n constructor() {\r\n super();\r\n this.ownDestroyRef.onDestroy(() => this.cancelPendingSearch());\r\n\r\n // Keep the field showing the selection whenever the user is not mid-edit. Covers a value\r\n // written by a form, a `[(value)]` set from outside, and the options arriving after the\r\n // value did — which is the normal order for a server-backed control.\r\n effect(() => {\r\n const label = this.selectedLabel();\r\n if (!this.isOpen() && label !== '') {\r\n this.query.set(label);\r\n }\r\n });\r\n }\r\n\r\n protected isSelected(option: TOption): boolean {\r\n return this.sameValue(this.valueOf(option), this.value());\r\n }\r\n\r\n protected onInput(event: Event): void {\r\n const text = (event.target as HTMLInputElement).value;\r\n this.browsingAll.set(false);\r\n this.query.set(text);\r\n this.activeIndex.set(-1);\r\n\r\n // Whether editing over a selection drops it depends on which mode this is in.\r\n //\r\n // With `forceSelection` off, free text is itself the answer, so the moment it diverges from\r\n // the selected option the value no longer describes what the field shows and has to go.\r\n //\r\n // With it on, the edit is *transient* — Escape or blur snaps the field back to the\r\n // selection — so the value is kept until one of those resolves it. Dropping it per\r\n // keystroke instead would mean a user who types one character to refine their search and\r\n // then changes their mind has silently lost what they had picked.\r\n if (!this.forceSelection() && this.value() != null && text !== this.selectedLabel()) {\r\n this.commitValue(this.emptyValue);\r\n }\r\n\r\n if (text.trim().length >= this.resolvedMinLength()) {\r\n this.open();\r\n } else {\r\n this.close();\r\n }\r\n\r\n this.scheduleSearch(text);\r\n }\r\n\r\n /**\r\n * The input owns its arrow keys; the base's option-focusing handlers are deliberately not\r\n * wired up here. Moving DOM focus into the list would take the caret out of the field, which\r\n * is exactly what a combobox must not do.\r\n */\r\n protected onInputKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n case 'ArrowUp': {\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.open();\r\n return;\r\n }\r\n this.moveActive(event.key === 'ArrowDown' ? 1 : -1);\r\n return;\r\n }\r\n case 'Home':\r\n case 'End': {\r\n if (!this.isOpen()) return;\r\n // Only claimed while the list is showing — otherwise Home/End belong to the caret.\r\n event.preventDefault();\r\n this.setActive(event.key === 'Home' ? 0 : this.visibleOptions().length - 1);\r\n return;\r\n }\r\n case 'Enter': {\r\n const option = this.visibleOptions()[this.activeIndex()];\r\n if (this.isOpen() && option) {\r\n event.preventDefault();\r\n this.pick(option);\r\n }\r\n return;\r\n }\r\n case 'Escape': {\r\n if (!this.isOpen()) return;\r\n event.preventDefault();\r\n this.close();\r\n this.restoreSelectedText();\r\n return;\r\n }\r\n case 'Tab': {\r\n // Not prevented: the panel closes and the browser's own Tab handling carries on.\r\n this.close();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n protected onOptionClick(option: TOption, event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.pick(option);\r\n }\r\n\r\n /**\r\n * Keeps the caret in the field while an option is clicked. Without it the input blurs first,\r\n * `forceSelection` wipes the text, and the click lands on a list that has already closed.\r\n */\r\n protected onOptionMousedown(event: MouseEvent): void {\r\n event.preventDefault();\r\n }\r\n\r\n protected onInputFocus(): void {\r\n this.onFocusIn();\r\n\r\n if (this.resolvedOpenOnFocus() && !this.isOpen()) {\r\n this.browsingAll.set(true);\r\n this.open();\r\n }\r\n }\r\n\r\n protected onInputBlur(): void {\r\n this.onFocusOut();\r\n this.close();\r\n\r\n if (this.forceSelection()) {\r\n this.restoreSelectedText();\r\n }\r\n }\r\n\r\n protected override close(): void {\r\n super.close();\r\n this.activeIndex.set(-1);\r\n this.browsingAll.set(false);\r\n }\r\n\r\n /** Clearing has to empty the *text* as well; the base only knows about the value. */\r\n protected override clearValue(event: Event): void {\r\n super.clearValue(event);\r\n this.query.set('');\r\n this.cancelPendingSearch();\r\n this.gogSearch.emit('');\r\n }\r\n\r\n private pick(option: TOption): void {\r\n if (this.isOptionDisabled(option)) return;\r\n\r\n this.commitValue(this.valueOf(option) as TValue);\r\n this.query.set(this.labelOf(option));\r\n this.close();\r\n this.cancelPendingSearch();\r\n }\r\n\r\n /** Snaps the field back to whatever `value` holds — the empty string when nothing is picked. */\r\n private restoreSelectedText(): void {\r\n this.query.set(this.selectedLabel());\r\n }\r\n\r\n private moveActive(step: number): void {\r\n const count = this.visibleOptions().length;\r\n if (count === 0) return;\r\n\r\n const current = this.activeIndex();\r\n // From \"nothing highlighted\", ArrowDown starts at the top and ArrowUp at the bottom.\r\n const next = current === -1 ? (step > 0 ? 0 : count - 1) : (current + step + count) % count;\r\n this.setActive(next);\r\n }\r\n\r\n private setActive(index: number): void {\r\n const count = this.visibleOptions().length;\r\n if (count === 0 || index < 0 || index >= count) return;\r\n\r\n this.activeIndex.set(index);\r\n this.scrollActiveIntoView(index);\r\n }\r\n\r\n private scrollActiveIntoView(index: number): void {\r\n if (!this.isBrowser) return;\r\n\r\n // The highlighted row is not focused, so nothing scrolls it into view for us.\r\n queueMicrotask(() => {\r\n const option = document.getElementById(this.optionId(index));\r\n // Feature-detected rather than assumed: this runs in a microtask, so a host without\r\n // `scrollIntoView` (jsdom, for one) would throw where nothing can catch it, and an\r\n // unhandled rejection fails the whole test run rather than just this line.\r\n if (typeof option?.scrollIntoView === 'function') {\r\n option.scrollIntoView({ block: 'nearest' });\r\n }\r\n });\r\n }\r\n\r\n private scheduleSearch(query: string): void {\r\n this.cancelPendingSearch();\r\n\r\n const delay = this.resolvedDebounce();\r\n if (delay <= 0) {\r\n this.gogSearch.emit(query);\r\n return;\r\n }\r\n\r\n this.searchTimer = setTimeout(() => {\r\n this.searchTimer = null;\r\n this.gogSearch.emit(query);\r\n }, delay);\r\n }\r\n\r\n private cancelPendingSearch(): void {\r\n if (this.searchTimer !== null) {\r\n clearTimeout(this.searchTimer);\r\n this.searchTimer = null;\r\n }\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-autocomplete\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-autocomplete--clearable]=\"showClear()\"\r\n [class.gog-autocomplete--disabled]=\"isDisabled()\"\r\n [class.gog-autocomplete--open]=\"isOpen()\"\r\n [class.gog-autocomplete--loading]=\"loading()\"\r\n [class.gog-autocomplete--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-autocomplete--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-autocomplete--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-autocomplete--floated]=\"isFloatLabelFloated()\"\r\n>\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-autocomplete__label\" [for]=\"triggerId()\">{{ label() }}</label>\r\n }\r\n\r\n <div class=\"gog-autocomplete__field\">\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-autocomplete__label gog-autocomplete__label--float\" [for]=\"triggerId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n\r\n <!--\r\n The input *is* the combobox — role, aria-autocomplete and aria-activedescendant all sit\r\n here, and DOM focus never leaves it. That is the difference from gog-select, where the\r\n trigger is a button and focus moves onto the option itself.\r\n -->\r\n <input\r\n type=\"text\"\r\n class=\"gog-autocomplete__control\"\r\n autocomplete=\"off\"\r\n role=\"combobox\"\r\n aria-autocomplete=\"list\"\r\n [id]=\"triggerId()\"\r\n [disabled]=\"isDisabled()\"\r\n [value]=\"query()\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || placeholder() || null\"\r\n [attr.aria-controls]=\"listboxId()\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-activedescendant]=\"activeOptionId()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onInput($event)\"\r\n (keydown)=\"onInputKeydown($event)\"\r\n (focus)=\"onInputFocus()\"\r\n (blur)=\"onInputBlur()\"\r\n />\r\n\r\n <span class=\"gog-autocomplete__actions\">\r\n @if (loading()) {\r\n <gog-spinner class=\"gog-autocomplete__spinner\" size=\"xsm\" ariaLabel=\"Loading\" />\r\n }\r\n\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-autocomplete__clear gog-inline-center\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (mousedown)=\"onOptionMousedown($event)\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n </span>\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\r\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\r\n }\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-autocomplete__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 — inline, or stamped into <body> by the overlay when\r\n `appendToBody` is set, which is why the portal modifier and the resolved coordinates are\r\n applied conditionally.\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; the keyboard contract lives on the combobox input, which keeps focus and drives this list via aria-activedescendant -->\r\n <div\r\n [id]=\"listboxId()\"\r\n class=\"gog-autocomplete__dropdown\"\r\n [class.gog-autocomplete__dropdown--up]=\"\r\n !resolvedAppendToBody() && dropdownDirectionState() === 'up'\r\n \"\r\n [class.gog-autocomplete__dropdown--portal]=\"resolvedAppendToBody()\"\r\n [class]=\"panelSizeClass()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"resolvedAppendToBody() ? resolvedPanelWidth() : null\"\r\n [style.min-width]=\"resolvedAppendToBody() ? resolvedPanelMinWidth() : null\"\r\n [style.max-height]=\"resolvedAppendToBody() ? resolvedPanelMaxHeight() : null\"\r\n [style.z-index]=\"dropdownZIndex() ?? panelZIndex()\"\r\n role=\"listbox\"\r\n [attr.aria-label]=\"label() || ariaLabel() || null\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <gog-scroll\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n class=\"gog-autocomplete__scroll\"\r\n (gogReachEnd)=\"gogLoadMore.emit()\"\r\n >\r\n @if (visibleOptions().length === 0) {\r\n <p class=\"gog-autocomplete__empty\">{{ emptyMessage() }}</p>\r\n }\r\n\r\n @for (option of visibleOptions(); track valueOf(option); let i = $index) {\r\n <!--\r\n A div, not a button: focus stays in the input, so these rows are never focused and a\r\n button would only add tab stops and a second Enter handler. The highlight is pointed\r\n at with aria-activedescendant instead.\r\n\r\n mousedown is prevented so clicking a row doesn't blur the input first — that blur\r\n would close the panel and, under forceSelection, wipe the text before the click lands.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- this is the ARIA combobox pattern: the option is deliberately neither focusable nor a keyboard target, because focus stays in the input and the whole keyboard contract (arrows, Enter, Escape) is handled there and communicated through aria-activedescendant. Making these rows focusable would break the pattern rather than improve it. -->\r\n <div\r\n class=\"gog-autocomplete__option\"\r\n role=\"option\"\r\n [id]=\"optionId(i)\"\r\n [attr.aria-selected]=\"isSelected(option)\"\r\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\r\n [class.gog-autocomplete__option--active]=\"i === activeIndex()\"\r\n [class.gog-autocomplete__option--selected]=\"isSelected(option)\"\r\n [class.gog-autocomplete__option--disabled]=\"isOptionDisabled(option)\"\r\n (mousedown)=\"onOptionMousedown($event)\"\r\n (click)=\"onOptionClick(option, $event)\"\r\n >\r\n @if (optionSlot(); as slot) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"slot.templateRef\"\r\n [ngTemplateOutletContext]=\"optionContext(option, isSelected(option))\"\r\n />\r\n } @else {\r\n <span class=\"gog-autocomplete__option-label\">{{ labelOf(option) }}</span>\r\n }\r\n </div>\r\n }\r\n </gog-scroll>\r\n </div>\r\n</ng-template>\r\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n PLATFORM_ID,\n Renderer2,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\n\nimport { GogBadgePosition, GogTagVariant } from '../../shared/types';\n\n/** Beyond this count the badge renders `N+` rather than growing without limit. */\nconst DEFAULT_MAX = 99;\n\n/**\n * A count or status dot pinned to the corner of another element.\n *\n * ```html\n * <gog-button gogBadge=\"12\" badgeAriaLabel=\"12 непрочитанных\">Входящие</gog-button>\n * <gog-icon name=\"info\" gogBadge badgeDot />\n * ```\n *\n * A **directive, not a component**, because a badge decorates something that already exists —\n * a button, an icon, an avatar. As a component it would have to wrap its host, which changes\n * that host's layout, and it would duplicate `gog-tag` for the sake of one different radius.\n *\n * It renders **nothing at all** when the value is `0`, `null` or empty and `badgeDot` is off:\n * a badge reading \"0\" is the defining bug of this component class, so it is not reachable.\n */\n@Directive({\n selector: '[gogBadge]',\n host: {\n // The badge is absolutely positioned against the host, so the host has to be a containing\n // block. A class rather than an inline style so a consumer can still position it themselves.\n class: 'gog-badge-host',\n },\n})\nexport class GogBadgeDirective {\n /** The badge content. Numbers above `badgeMax` render as `N+`. */\n readonly gogBadge = input<string | number | null>(null);\n readonly badgePosition = input<GogBadgePosition>('top-end');\n /** Reuses the library's semantic colour set — the same four names `gog-tag` takes. */\n readonly badgeVariant = input<GogTagVariant>('danger');\n /** Renders a bare dot with no text: \"something changed here\", with no count to give. */\n readonly badgeDot = input(false, { transform: booleanAttribute });\n readonly badgeMax = input(DEFAULT_MAX);\n /** Keeps the badge out of the DOM without removing the directive. */\n readonly badgeHidden = input(false, { transform: booleanAttribute });\n /**\n * What assistive tech should hear instead of the bare number.\n *\n * Left empty, the badge text is announced inline with the host's own label, which reads as\n * \"Входящие 12\" — acceptable, and what Material does. Set this and the visible badge becomes\n * `aria-hidden` while this wording is announced in its place, so the host reads as\n * \"Входящие, 12 непрочитанных\" instead.\n */\n readonly badgeAriaLabel = input('');\n\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private badgeEl: HTMLElement | null = null;\n private descriptionEl: HTMLElement | null = null;\n\n /** `0` and `''` count as \"nothing to show\" — see the class comment. */\n private readonly hasContent = computed(() => {\n const value = this.gogBadge();\n if (value === null || value === undefined) return false;\n const text = String(value).trim();\n return text !== '' && text !== '0';\n });\n\n protected readonly visible = computed(\n () => !this.badgeHidden() && (this.badgeDot() || this.hasContent()),\n );\n\n protected readonly text = computed(() => {\n if (this.badgeDot()) return '';\n\n const value = this.gogBadge();\n const numeric = typeof value === 'number' ? value : Number(value);\n // Non-numeric content (\"NEW\", \"beta\") passes through untouched — capping only makes sense\n // for a count.\n if (value === null || Number.isNaN(numeric) || String(value).trim() === '') {\n return value === null ? '' : String(value);\n }\n\n const max = this.badgeMax();\n return numeric > max ? `${max}+` : String(value);\n });\n\n private readonly classNames = computed(() =>\n [\n 'gog-badge',\n `gog-badge--${this.badgePosition()}`,\n `gog-badge--${this.badgeVariant()}`,\n this.badgeDot() ? 'gog-badge--dot' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.teardown());\n\n effect(() => {\n // Browser-only on purpose. The badge is a node the server would render but the client's\n // hydration walk knows nothing about, which is an NG0500 node mismatch waiting to happen.\n // It costs one frame after hydration and buys a component that is safe in an SSR app.\n if (!this.isBrowser) return;\n\n if (!this.visible()) {\n this.teardown();\n return;\n }\n\n this.render(this.classNames(), this.text(), this.badgeAriaLabel());\n });\n }\n\n private render(className: string, text: string, ariaLabel: string): void {\n const host = this.hostRef.nativeElement;\n\n this.badgeEl ??= this.renderer.createElement('span') as HTMLElement;\n this.renderer.setAttribute(this.badgeEl, 'class', className);\n this.renderer.setProperty(this.badgeEl, 'textContent', text);\n\n if (ariaLabel) {\n // The wording replaces the number rather than joining it, so nothing is said twice.\n this.renderer.setAttribute(this.badgeEl, 'aria-hidden', 'true');\n this.descriptionEl ??= this.renderer.createElement('span') as HTMLElement;\n this.renderer.setAttribute(this.descriptionEl, 'class', 'gog-visually-hidden');\n this.renderer.setProperty(this.descriptionEl, 'textContent', ariaLabel);\n if (!this.descriptionEl.parentNode) {\n this.renderer.appendChild(host, this.descriptionEl);\n }\n } else {\n this.renderer.removeAttribute(this.badgeEl, 'aria-hidden');\n this.removeDescription();\n }\n\n if (!this.badgeEl.parentNode) {\n this.renderer.appendChild(host, this.badgeEl);\n }\n }\n\n private removeDescription(): void {\n if (this.descriptionEl?.parentNode) {\n this.renderer.removeChild(this.hostRef.nativeElement, this.descriptionEl);\n }\n this.descriptionEl = null;\n }\n\n private teardown(): void {\n if (this.badgeEl?.parentNode) {\n this.renderer.removeChild(this.hostRef.nativeElement, this.badgeEl);\n }\n this.badgeEl = null;\n this.removeDescription();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n TemplateRef,\n computed,\n contentChild,\n inject,\n input,\n model,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\nimport {\n type GogOptionAccessor,\n isSameOptionValue,\n readOption,\n} from '../../shared/option-accessor';\nimport { handleRovingFocusKeydown } from '../../shared/roving-focus';\nimport { GogButtonToggleAppearance, GogOrientation, GogSize } from '../../shared/types';\n\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\nconst DEFAULT_SIZE: GogSize = 'md';\n\n/** Context handed to a `gogButtonToggleOption` template. */\nexport interface GogButtonToggleOptionContext<TOption> {\n /** The consumer's own option object, untouched. */\n $implicit: TOption;\n selected: boolean;\n disabled: boolean;\n /** The resolved label, so custom markup can decorate it rather than re-derive it. */\n label: string;\n}\n\n/**\n * Custom markup for one button in the group:\n *\n * ```html\n * <gog-button-toggle-group [options]=\"views\">\n * <ng-template gogButtonToggleOption let-view let-selected=\"selected\">\n * <gog-icon [name]=\"view.icon\" /> {{ view.title }}\n * </ng-template>\n * </gog-button-toggle-group>\n * ```\n */\n@Directive({ selector: '[gogButtonToggleOption]' })\nexport class GogButtonToggleOptionDirective<TOption = unknown> {\n readonly templateRef = inject<TemplateRef<GogButtonToggleOptionContext<TOption>>>(TemplateRef);\n\n static ngTemplateContextGuard<TOption>(\n _dir: GogButtonToggleOptionDirective<TOption>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\n ctx: unknown,\n ): ctx is GogButtonToggleOptionContext<TOption> {\n return true;\n }\n}\n\n/**\n * A row of buttons where one — or, with `multiple`, several — can be picked.\n *\n * ```html\n * <gog-button-toggle-group [options]=\"alignments\" [(value)]=\"align\" />\n * <gog-button-toggle-group [options]=\"tools\" [multiple]=\"true\" [(value)]=\"active\" />\n * ```\n *\n * Takes the consumer's own objects through `optionLabel` / `optionValue` / `optionDisabled`\n * accessors — the same ones `gog-select` uses — rather than a fixed `{ id, label }` shape.\n *\n * **Single and multiple are different widgets to assistive tech, not a cosmetic switch.**\n * Single mode is a radio group: `role=\"radiogroup\"` / `role=\"radio\"` with `aria-checked`, and\n * the arrow keys move *and* select, because that is what a radio group does. Multiple mode is\n * a toolbar of independent toggles: `role=\"group\"` with `aria-pressed`, arrows only move and\n * Space toggles. Getting this backwards is the usual defect in this component.\n */\n@Component({\n selector: 'gog-button-toggle-group',\n imports: [IconComponent, NgTemplateOutlet],\n templateUrl: './button-toggle.component.html',\n styleUrl: './button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': 'multiple() ? \"group\" : \"radiogroup\"',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n },\n})\nexport class ButtonToggleGroupComponent<\n TOption = unknown,\n TValue = unknown,\n> implements ControlValueAccessor {\n readonly options = input<TOption[]>([]);\n readonly optionLabel = input<GogOptionAccessor<TOption, string>>('name');\n /**\n * How an option turns into the emitted value. `null` emits the **option object itself**,\n * exactly as `gog-select` does, so a consumer's DTO survives the round trip.\n */\n readonly optionValue = input<GogOptionAccessor<TOption, unknown> | null>('id');\n readonly optionDisabled = input<GogOptionAccessor<TOption, boolean>>('disabled');\n /** Optional leading icon per option. Unset means no icons anywhere in the group. */\n readonly optionIcon = input<GogOptionAccessor<TOption, GogIconName | null> | null>(null);\n\n /** Whether more than one option can be active at a time. */\n readonly multiple = input(false);\n readonly appearance = input<GogButtonToggleAppearance>('joined');\n readonly orientation = input<GogOrientation>('horizontal');\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\n readonly size = input<GogSize | undefined>(undefined);\n readonly disabled = input(false);\n readonly fullWidth = input(false);\n readonly ariaLabel = input('');\n\n /**\n * Two-way bindable selection: `[(value)]=\"signal\"`. A single value in single mode, an array\n * in `multiple` mode. Also drivable through `formControl` / `formControlName`.\n */\n readonly value = model<TValue | TValue[] | null>(null);\n\n protected readonly optionSlot = contentChild(GogButtonToggleOptionDirective);\n private readonly buttonRefs = viewChildren<ElementRef<HTMLButtonElement>>('toggleButton');\n\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly cvaDisabled = signal(false);\n private readonly globalConfig = inject(GOG_CONFIG);\n\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\n protected readonly resolvedSize = computed(() =>\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** The current selection as an array, whatever mode the group is in. */\n private readonly selectedValues = computed<unknown[]>(() => {\n const current = this.value();\n if (current === null || current === undefined) return [];\n return Array.isArray(current) ? current : [current];\n });\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-button-toggle',\n `gog-button-toggle--${this.appearance()}`,\n `gog-button-toggle--${this.orientation()}`,\n `gog-button-toggle--${this.resolvedSize()}`,\n this.fullWidth() ? 'gog-host--full-width' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n\n /**\n * A roving tabindex: the group is one tab stop and the arrows move within it. The *selected*\n * option is the one that keeps `tabindex=\"0\"` so Tab returns to where the user left off;\n * with nothing selected, the first enabled option takes it, since a group nobody can Tab\n * into is unreachable by keyboard.\n */\n protected readonly tabStopIndex = computed(() => {\n const options = this.options();\n const selected = options.findIndex(\n (option) => this.isSelected(option) && !this.isOptionDisabled(option),\n );\n if (selected !== -1) return selected;\n const firstEnabled = options.findIndex((option) => !this.isOptionDisabled(option));\n return firstEnabled === -1 ? 0 : firstEnabled;\n });\n\n private onChange: (val: TValue | TValue[] | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n // Registering through NgControl instead of NG_VALUE_ACCESSOR matches the pattern used\n // by every other form control in the library — providing NG_VALUE_ACCESSOR on the\n // component while also injecting NgControl would be a dependency cycle.\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(val: TValue | TValue[] | null): void {\n this.value.set(val ?? null);\n }\n\n registerOnChange(fn: (val: TValue | TValue[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected labelOf(option: TOption): string {\n return String(readOption(option, this.optionLabel()) ?? '');\n }\n\n protected iconOf(option: TOption): GogIconName | null {\n const accessor = this.optionIcon();\n return accessor ? (readOption(option, accessor) ?? null) : null;\n }\n\n protected valueOf(option: TOption): unknown {\n const accessor = this.optionValue();\n return accessor === null ? option : readOption(option, accessor);\n }\n\n protected isOptionDisabled(option: TOption): boolean {\n return this.isDisabled() || !!readOption(option, this.optionDisabled());\n }\n\n protected isSelected(option: TOption): boolean {\n const target = this.valueOf(option);\n return this.selectedValues().some((selected) => isSameOptionValue(selected, target));\n }\n\n protected optionContext(option: TOption): GogButtonToggleOptionContext<TOption> {\n return {\n $implicit: option,\n selected: this.isSelected(option),\n disabled: this.isOptionDisabled(option),\n label: this.labelOf(option),\n };\n }\n\n protected onOptionClick(option: TOption): void {\n if (this.isOptionDisabled(option)) return;\n this.commit(option);\n }\n\n /**\n * Arrow keys. In single mode moving also selects — that is the radio-group contract, and it\n * is why `role=\"radio\"` is only used there. In multiple mode the arrows are pure navigation\n * and Space/Enter (handled natively by the `<button>`) does the toggling.\n */\n protected onKeydown(event: KeyboardEvent): void {\n const buttons = this.buttonRefs().map((ref) => ref.nativeElement);\n const options = this.options();\n const moved = handleRovingFocusKeydown(event, buttons, {\n orientation: this.orientation(),\n isDisabled: (_button, index) => this.isOptionDisabled(options[index]),\n });\n\n if (!moved || this.multiple()) return;\n\n const focusedIndex = buttons.indexOf(document.activeElement as HTMLButtonElement);\n if (focusedIndex !== -1) {\n this.commit(options[focusedIndex]);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private commit(option: TOption): void {\n const target = this.valueOf(option) as TValue;\n\n if (!this.multiple()) {\n this.setValue(target);\n return;\n }\n\n const current = this.selectedValues();\n const next = this.isSelected(option)\n ? (current.filter((selected) => !isSameOptionValue(selected, target)) as TValue[])\n : ([...current, target] as TValue[]);\n this.setValue(next);\n }\n\n private setValue(next: TValue | TValue[]): void {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n}\n","@for (option of options(); track $index) {\n <button\n #toggleButton\n type=\"button\"\n class=\"gog-button-toggle__button\"\n [class.gog-button-toggle__button--selected]=\"isSelected(option)\"\n [attr.role]=\"multiple() ? null : 'radio'\"\n [attr.aria-checked]=\"multiple() ? null : isSelected(option)\"\n [attr.aria-pressed]=\"multiple() ? isSelected(option) : null\"\n [attr.aria-disabled]=\"isOptionDisabled(option) ? 'true' : null\"\n [disabled]=\"isOptionDisabled(option)\"\n [tabindex]=\"$index === tabStopIndex() ? 0 : -1\"\n (click)=\"onOptionClick(option)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n >\n @if (optionSlot(); as slot) {\n <ng-container\n [ngTemplateOutlet]=\"slot.templateRef\"\n [ngTemplateOutletContext]=\"optionContext(option)\"\n />\n } @else {\n @if (iconOf(option); as icon) {\n <gog-icon class=\"gog-button-toggle__icon\" [name]=\"icon\" [ariaHidden]=\"true\" />\n }\n <span class=\"gog-button-toggle__label\">{{ labelOf(option) }}</span>\n }\n </button>\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * What a `gog-tab` needs from the `gog-tabs` it sits in: which tab is currently showing.\n *\n * A token rather than injecting the component directly, purely to keep the import graph\n * acyclic — `tabs.component.ts` has to import `TabComponent` for its `contentChildren`, so the\n * tab cannot import the group back. Both sides depend on this file, which depends on neither.\n */\nexport interface GogTabsState {\n /** The active tab instance, compared by identity. `null` when the group has no tabs. */\n readonly activeTab: Signal<unknown | null>;\n}\n\nexport const GOG_TABS_STATE = new InjectionToken<GogTabsState>('GOG_TABS_STATE');\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n computed,\n contentChild,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport type { GogIconName } from '../icon/icon.component';\nimport { GOG_TABS_STATE } from './tabs-state';\n\n/**\n * Marks a tab's content as **lazy**: it is built the first time the tab is shown, and kept\n * alive afterwards.\n *\n * ```html\n * <gog-tab label=\"Отчёт\">\n * <ng-template gogTabContent><app-expensive-report /></ng-template>\n * </gog-tab>\n * ```\n *\n * Without it, content written directly inside `<gog-tab>` renders immediately and is merely\n * hidden while inactive — which is what you want for cheap content, because it preserves\n * scroll position, un-submitted input and any state the DOM is holding. Which behaviour you\n * get is decided by whether this template is present; there is no `lazy` input to keep in sync.\n */\n@Directive({ selector: '[gogTabContent]' })\nexport class GogTabContentDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * One tab inside a `<gog-tabs>`. Declares its own header text and holds its own content.\n *\n * ```html\n * <gog-tabs>\n * <gog-tab label=\"Профиль\"><app-profile /></gog-tab>\n * <gog-tab label=\"Настройки\" iconName=\"info\" [disabled]=\"!canEdit\">…</gog-tab>\n * </gog-tabs>\n * ```\n */\n@Component({\n selector: 'gog-tab',\n imports: [NgTemplateOutlet],\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-tab',\n role: 'tabpanel',\n '[attr.id]': 'panelId',\n '[attr.aria-labelledby]': 'headerId',\n // `hidden` rather than removing the panel: an inactive tab that keeps its DOM keeps its\n // scroll position and half-filled inputs, which is the behaviour people expect from tabs.\n '[hidden]': '!active()',\n // Reachable by keyboard so someone tabbing out of the tablist lands in the content.\n '[attr.tabindex]': 'active() ? 0 : null',\n },\n})\nexport class TabComponent {\n private static nextUid = 0;\n private readonly uid = `gog-tab-${++TabComponent.nextUid}`;\n\n /** Header text. */\n readonly label = input('');\n /** Optional leading icon in the header. */\n readonly iconName = input<GogIconName | null>(null);\n readonly disabled = input(false);\n\n readonly panelId = `${this.uid}-panel`;\n readonly headerId = `${this.uid}-header`;\n\n private readonly tabsState = inject(GOG_TABS_STATE);\n /** Identity comparison against the group's current tab — no index bookkeeping either side. */\n readonly active = computed(() => this.tabsState.activeTab() === this);\n\n protected readonly lazySlot = contentChild(GogTabContentDirective);\n\n /**\n * Latches on first activation and never resets, so a lazy tab pays its build cost once and\n * then behaves like an eager one — revisiting it does not rebuild the subtree or lose what\n * the user typed into it.\n */\n private readonly everActivated = signal(false);\n protected readonly shouldRenderLazy = computed(() => this.active() || this.everActivated());\n\n constructor() {\n // The latch is set from an effect rather than inside the computed above, which may not\n // write signals. Timing is not a concern: on the activating pass `active()` is already\n // true, so the content renders in the same cycle and the latch only has to survive the\n // *next* deactivation.\n effect(() => {\n if (this.active()) {\n this.everActivated.set(true);\n }\n });\n }\n}\n","<!--\n Eager content is projected straight through and merely hidden while inactive (see the host\n `[hidden]` binding), which is what keeps its scroll position and unsaved input.\n\n A projected `<ng-template gogTabContent>` renders nothing here — templates never do — so the\n two paths coexist without a mode flag: whichever the consumer wrote is the one that shows.\n-->\n<ng-content></ng-content>\n\n@if (lazySlot(); as slot) {\n @if (shouldRenderLazy()) {\n <ng-container [ngTemplateOutlet]=\"slot.templateRef\" />\n }\n}\n","import { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n ElementRef,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n computed,\r\n contentChild,\r\n contentChildren,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChildren,\r\n} from '@angular/core';\r\n\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\nimport { handleRovingFocusKeydown } from '../../shared/roving-focus';\r\nimport { GogOrientation, GogSize, GogTabsAlign } from '../../shared/types';\r\nimport { GOG_TABS_STATE, type GogTabsState } from './tabs-state';\r\nimport { TabComponent } from './tab.component';\r\n\r\n/** Context handed to a `gogTabHeader` template. */\r\nexport interface GogTabHeaderContext {\r\n /** The `gog-tab` this header belongs to. */\r\n $implicit: TabComponent;\r\n active: boolean;\r\n disabled: boolean;\r\n index: number;\r\n}\r\n\r\n/**\r\n * Custom markup for a tab's header button:\r\n *\r\n * ```html\r\n * <gog-tabs>\r\n * <ng-template gogTabHeader let-tab let-active=\"active\">\r\n * {{ tab.label() }} <gog-tag *ngIf=\"active\">•</gog-tag>\r\n * </ng-template>\r\n * <gog-tab label=\"Входящие\">…</gog-tab>\r\n * </gog-tabs>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogTabHeader]' })\r\nexport class GogTabHeaderDirective {\r\n readonly templateRef = inject<TemplateRef<GogTabHeaderContext>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard(\r\n _dir: GogTabHeaderDirective,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogTabHeaderContext {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * A tablist over projected `<gog-tab>` children.\r\n *\r\n * ```html\r\n * <gog-tabs [(activeIndex)]=\"index\" align=\"start\">\r\n * <gog-tab label=\"Профиль\"><app-profile /></gog-tab>\r\n * <gog-tab label=\"Настройки\"><app-settings /></gog-tab>\r\n * </gog-tabs>\r\n * ```\r\n *\r\n * The header row is built from each tab's own `label` / `iconName` / `disabled`, so a tab is\r\n * declared in exactly one place. Overflowing headers scroll inside a `<gog-scroll>` rather than\r\n * a native `overflow-x`, per the library's styling contract — a native scrollbar is the one\r\n * piece of chrome no `--gog-*` token can reach.\r\n */\r\n@Component({\r\n selector: 'gog-tabs',\r\n imports: [IconComponent, NgTemplateOutlet, ScrollComponent],\r\n templateUrl: './tabs.component.html',\r\n styleUrl: './tabs.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n // forwardRef because the class is not yet defined when this decorator is evaluated.\r\n { provide: GOG_TABS_STATE, useExisting: forwardRef(() => TabsComponent) },\r\n ],\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class TabsComponent implements GogTabsState {\r\n readonly tabs = contentChildren(TabComponent);\r\n\r\n /** Two-way bindable index of the visible tab: `[(activeIndex)]=\"signal\"`. */\r\n readonly activeIndex = model(0);\r\n readonly align = input<GogTabsAlign>('start');\r\n readonly orientation = input<GogOrientation>('horizontal');\r\n readonly size = input<GogSize>('md');\r\n readonly fullWidth = input(false);\r\n readonly ariaLabel = input('');\r\n /**\r\n * Whether selecting a tab scrolls the (possibly overflowing) header row so the active tab\r\n * stays in view — centered where there's room, so its neighbours on both sides stay visible\r\n * too, the same \"always show what's around the current position\" idea `gog-paginator` uses\r\n * for pages. Reacts to `activeIndex` however it changes: a click, the arrow keys, or a\r\n * consumer setting it directly. On by default; turn it off for a header that never actually\r\n * overflows, or to own the scroll position yourself.\r\n */\r\n readonly scrollActiveIntoView = input(true);\r\n /**\r\n * Whether the header row shows its own draggable scroll thumb/track. Native scrolling\r\n * (wheel, touch, keyboard) works the same regardless; this is purely the visual affordance.\r\n *\r\n * Unset, it follows `scrollActiveIntoView`: hidden while that's on, since a second scroll\r\n * indicator sitting right next to the active-tab underline reads as two conflicting signals\r\n * for the same thing once selecting a tab already moves the row on its own; shown while it's\r\n * off, since the track is then the only way to reach an off-screen tab without a keyboard.\r\n * Set explicitly to pin it either way regardless of `scrollActiveIntoView`.\r\n */\r\n readonly showScrollTrack = input<boolean | undefined>(undefined);\r\n\r\n /** Emits the newly active index whenever it changes, including via keyboard. */\r\n readonly gogTabChange = output<number>();\r\n\r\n protected readonly headerSlot = contentChild(GogTabHeaderDirective);\r\n private readonly headerRefs = viewChildren<ElementRef<HTMLButtonElement>>('tabHeader');\r\n\r\n /**\r\n * The index actually shown. Clamped, and never a disabled tab: `activeIndex` is a plain\r\n * number a consumer can set to anything, and silently showing nothing would be worse than\r\n * falling back to the nearest usable tab.\r\n */\r\n protected readonly resolvedIndex = computed(() => {\r\n const tabs = this.tabs();\r\n if (tabs.length === 0) return -1;\r\n\r\n const requested = this.activeIndex();\r\n if (requested >= 0 && requested < tabs.length && !tabs[requested].disabled()) {\r\n return requested;\r\n }\r\n\r\n const firstEnabled = tabs.findIndex((tab) => !tab.disabled());\r\n return firstEnabled;\r\n });\r\n\r\n /** Read by each `gog-tab` through `GOG_TABS_STATE`; see `tabs-state.ts`. */\r\n readonly activeTab = computed<TabComponent | null>(() => {\r\n const index = this.resolvedIndex();\r\n return index === -1 ? null : (this.tabs()[index] ?? null);\r\n });\r\n\r\n /** See `showScrollTrack`'s doc for why this defaults off precisely when the other is on. */\r\n protected readonly resolvedShowScrollTrack = computed(\r\n () => this.showScrollTrack() ?? !this.scrollActiveIntoView(),\r\n );\r\n\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n /** Instant for the first scroll (page load shouldn't animate into place), smooth after. */\r\n private hasScrolledOnce = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const index = this.resolvedIndex();\r\n const header = this.headerRefs()[index]?.nativeElement;\r\n if (!this.isBrowser || !this.scrollActiveIntoView() || !header) return;\r\n\r\n // Feature-detected: absent in jsdom (so: in unit tests) and in very old browsers, which\r\n // then simply keep whatever scroll position they already had.\r\n if (typeof header.scrollIntoView !== 'function') return;\r\n\r\n header.scrollIntoView({\r\n inline: 'center',\r\n block: 'nearest',\r\n behavior: this.hasScrolledOnce && !this.prefersReducedMotion() ? 'smooth' : 'auto',\r\n });\r\n this.hasScrolledOnce = true;\r\n });\r\n }\r\n\r\n private prefersReducedMotion(): boolean {\r\n return (\r\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n );\r\n }\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-tabs',\r\n `gog-tabs--${this.orientation()}`,\r\n `gog-tabs--align-${this.align()}`,\r\n `gog-tabs--${this.size()}`,\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 protected selectIndex(index: number): void {\r\n const tab = this.tabs()[index];\r\n if (!tab || tab.disabled() || index === this.resolvedIndex()) return;\r\n\r\n this.activeIndex.set(index);\r\n this.gogTabChange.emit(index);\r\n }\r\n\r\n protected headerContext(tab: TabComponent, index: number): GogTabHeaderContext {\r\n return {\r\n $implicit: tab,\r\n active: index === this.resolvedIndex(),\r\n disabled: tab.disabled(),\r\n index,\r\n };\r\n }\r\n\r\n /**\r\n * Arrows move focus and activate in one step — the \"automatic activation\" variant of the\r\n * ARIA tabs pattern, which suits panels that are already in the DOM. Home/End jump to the\r\n * first/last enabled tab.\r\n */\r\n protected onHeaderKeydown(event: KeyboardEvent): void {\r\n const headers = this.headerRefs().map((ref) => ref.nativeElement);\r\n const tabs = this.tabs();\r\n const moved = handleRovingFocusKeydown(event, headers, {\r\n orientation: this.orientation(),\r\n isDisabled: (_header, index) => tabs[index]?.disabled() ?? true,\r\n });\r\n if (!moved) return;\r\n\r\n const focused = headers.indexOf(document.activeElement as HTMLButtonElement);\r\n if (focused !== -1) {\r\n this.selectIndex(focused);\r\n }\r\n }\r\n}\r\n","<div class=\"gog-tabs__header\">\r\n <!--\r\n gog-scroll rather than a raw overflow-x: a native scrollbar carries no --gog-* tokens and\r\n would be the one un-themeable strip inside an otherwise fully themeable component.\r\n focusable=false because the tablist already owns the keyboard here.\r\n -->\r\n <gog-scroll\r\n class=\"gog-tabs__scroll\"\r\n axis=\"horizontal\"\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n [showTrack]=\"resolvedShowScrollTrack()\"\r\n overscrollBehavior=\"contain\"\r\n >\r\n <div\r\n class=\"gog-tabs__list\"\r\n role=\"tablist\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-orientation]=\"orientation()\"\r\n >\r\n @for (tab of tabs(); track tab; let i = $index) {\r\n <button\r\n #tabHeader\r\n type=\"button\"\r\n role=\"tab\"\r\n class=\"gog-tabs__tab\"\r\n [class.gog-tabs__tab--active]=\"i === resolvedIndex()\"\r\n [id]=\"tab.headerId\"\r\n [attr.aria-selected]=\"i === resolvedIndex()\"\r\n [attr.aria-controls]=\"tab.panelId\"\r\n [attr.aria-disabled]=\"tab.disabled() ? 'true' : null\"\r\n [disabled]=\"tab.disabled()\"\r\n [tabindex]=\"i === resolvedIndex() ? 0 : -1\"\r\n (click)=\"selectIndex(i)\"\r\n (keydown)=\"onHeaderKeydown($event)\"\r\n >\r\n @if (headerSlot(); as slot) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"slot.templateRef\"\r\n [ngTemplateOutletContext]=\"headerContext(tab, i)\"\r\n />\r\n } @else {\r\n @if (tab.iconName(); as icon) {\r\n <gog-icon class=\"gog-tabs__icon\" [name]=\"icon\" [ariaHidden]=\"true\" />\r\n }\r\n <span class=\"gog-tabs__label\">{{ tab.label() }}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </gog-scroll>\r\n</div>\r\n\r\n<div class=\"gog-tabs__panels\">\r\n <ng-content></ng-content>\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 Directive,\r\n TemplateRef,\r\n computed,\r\n contentChild,\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\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GogSize } from '../../shared/types';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\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/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\n\r\n/**\r\n * Custom markup for the checkbox's tick:\r\n *\r\n * ```html\r\n * <ng-template gogCheckboxIcon><my-icon /></ng-template>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogCheckboxIcon]' })\r\nexport class GogCheckboxIconDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\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 /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n readonly indeterminate = input(false);\r\n readonly disabled = input(false);\r\n readonly fullWidth = input(false);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogCheckboxIcon>` into the component instead. Removed in 21.5.0.\r\n */\r\n readonly checkIconTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogCheckboxIcon` template; wins over the deprecated `checkIconTemplate` input. */\r\n protected readonly checkIconSlot = contentChild(GogCheckboxIconDirective);\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 private readonly globalConfig = inject(GOG_CONFIG);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly controlSize = computed(\r\n () => GOG_CHECKABLE_CONTROL_SIZE_MAP[this.resolvedSize()],\r\n );\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\">\r\n <input\r\n (blur)=\"onBlur()\"\r\n (change)=\"onInputChange($event)\"\r\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : null\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"isDisabled()\"\r\n [indeterminate]=\"indeterminate()\"\r\n class=\"gog-checkbox__input\"\r\n type=\"checkbox\"\r\n />\r\n\r\n <span\r\n [class.gog-checkbox__box--checked]=\"checked()\"\r\n [class.gog-checkbox__box--indeterminate]=\"indeterminate()\"\r\n class=\"gog-checkbox__box\"\r\n >\r\n @if (indeterminate()) {\r\n <span class=\"gog-checkbox__dash\" aria-hidden=\"true\"></span>\r\n } @else if (checked()) {\r\n <gog-icon [template]=\"checkIconSlot()?.templateRef ?? checkIconTemplate()\" name=\"check\" />\r\n }\r\n </span>\r\n\r\n @if (label()) {\r\n <span class=\"gog-checkbox__label\">{{ label() }}</span>\r\n }\r\n</label>\r\n","/**\n * Every date calculation `gog-datepicker` and `gog-calendar` do, as pure functions.\n *\n * Kept out of the components so the arithmetic is testable without a fixture, and so a range\n * calculation is written once rather than once per selection mode.\n *\n * **Everything here works in local time.** Nothing round-trips through `toISOString()` or\n * compares `Date` objects directly: an ISO round trip converts to UTC, which moves the date\n * across midnight for anyone east or west of Greenwich, and two `Date`s for \"the same day\"\n * are almost never equal because they carry different times. Comparisons go through\n * `startOfDay` and `isSameDay` instead. This is the single most common defect in a datepicker.\n */\n\n/** A start/end pair. `end` is null while a range is half-picked. */\nexport interface GogDateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/** Midnight local time on the same calendar day. */\nexport function startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/** Whether two dates fall on the same calendar day, ignoring the time of day. */\nexport function isSameDay(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** Whether two dates fall in the same calendar month. */\nexport function isSameMonth(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nexport function addDays(date: Date, days: number): Date {\n const next = new Date(date.getTime());\n next.setDate(next.getDate() + days);\n return next;\n}\n\n/** Days in a given month. `month` is 0-based, as `Date` uses it. */\nexport function daysInMonth(year: number, month: number): number {\n // Day 0 of the next month is the last day of this one.\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Adds whole months, **clamping the day** to the target month's length: 31 January plus one\n * month is 28 February, not 3 March. `Date.setMonth` does the latter, which is why this is\n * not a one-liner.\n */\nexport function addMonths(date: Date, months: number): Date {\n const year = date.getFullYear();\n const month = date.getMonth() + months;\n const targetYear = year + Math.floor(month / 12);\n const targetMonth = ((month % 12) + 12) % 12;\n const day = Math.min(date.getDate(), daysInMonth(targetYear, targetMonth));\n\n return new Date(\n targetYear,\n targetMonth,\n day,\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n );\n}\n\nexport function addYears(date: Date, years: number): Date {\n return addMonths(date, years * 12);\n}\n\n/** Day-granularity comparison: `a` is strictly before `b`'s day. */\nexport function isBeforeDay(a: Date, b: Date): boolean {\n return startOfDay(a).getTime() < startOfDay(b).getTime();\n}\n\n/** Day-granularity comparison: `a` is strictly after `b`'s day. */\nexport function isAfterDay(a: Date, b: Date): boolean {\n return startOfDay(a).getTime() > startOfDay(b).getTime();\n}\n\n/** Whether `date`'s day falls within `[min, max]`, either bound optional. */\nexport function isWithinBounds(date: Date, min: Date | null, max: Date | null): boolean {\n if (min && isBeforeDay(date, min)) return false;\n if (max && isAfterDay(date, max)) return false;\n return true;\n}\n\n/** Whether `date`'s day falls inside a range, inclusive of both ends. */\nexport function isInRange(date: Date, start: Date | null, end: Date | null): boolean {\n if (!start || !end) return false;\n const [from, to] = isAfterDay(start, end) ? [end, start] : [start, end];\n return !isBeforeDay(date, from) && !isAfterDay(date, to);\n}\n\n/** Pulls `date` inside `[min, max]`, keeping its time of day. */\nexport function clampDate(date: Date, min: Date | null, max: Date | null): Date {\n if (min && isBeforeDay(date, min)) return copyTimeOnto(min, date);\n if (max && isAfterDay(date, max)) return copyTimeOnto(max, date);\n return date;\n}\n\n/** A new date on `day`'s calendar day carrying `time`'s clock. */\nexport function copyTimeOnto(day: Date, time: Date): Date {\n return new Date(\n day.getFullYear(),\n day.getMonth(),\n day.getDate(),\n time.getHours(),\n time.getMinutes(),\n time.getSeconds(),\n );\n}\n\n/** A new date on the same day with the clock replaced. */\nexport function withTime(date: Date, hours: number, minutes: number, seconds = 0): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, seconds);\n}\n\n/**\n * The six-week grid a month is drawn on, always 6×7 so the calendar's height never changes as\n * you page through months — a grid that grows and shrinks pushes the rest of the page around\n * and moves the button you were about to click.\n *\n * `firstDayOfWeek` is 0 (Sunday) to 6 (Saturday). Leading and trailing cells come from the\n * neighbouring months, as every calendar does.\n */\nexport function buildMonthGrid(year: number, month: number, firstDayOfWeek: number): Date[][] {\n const first = new Date(year, month, 1);\n const shift = (first.getDay() - firstDayOfWeek + 7) % 7;\n const gridStart = addDays(first, -shift);\n\n const weeks: Date[][] = [];\n for (let week = 0; week < 6; week++) {\n const days: Date[] = [];\n for (let day = 0; day < 7; day++) {\n days.push(addDays(gridStart, week * 7 + day));\n }\n weeks.push(days);\n }\n return weeks;\n}\n\n/** Weekday names in `locale`, rotated so `firstDayOfWeek` comes first. */\nexport function weekdayNames(\n locale: string,\n firstDayOfWeek: number,\n style: 'short' | 'narrow' | 'long' = 'short',\n): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: style });\n // 2024-01-07 was a Sunday, so index 0 lines up with `Date.getDay()` 0.\n const sunday = new Date(2024, 0, 7);\n return Array.from({ length: 7 }, (_, i) =>\n formatter.format(addDays(sunday, (i + firstDayOfWeek) % 7)),\n );\n}\n\n/** Month names in `locale`. */\nexport function monthNames(locale: string, style: 'long' | 'short' = 'long'): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { month: style });\n return Array.from({ length: 12 }, (_, month) => formatter.format(new Date(2024, month, 1)));\n}\n\n/**\n * The first day of the week for a locale, from `Intl.Locale.prototype.getWeekInfo` where the\n * engine has it, falling back to Monday.\n *\n * `getWeekInfo` reports 1–7 with 1 = Monday and 7 = Sunday; `Date.getDay()` uses 0 = Sunday.\n * Converting between the two is exactly the kind of off-by-one that silently shifts a whole\n * calendar by a day, which is why it happens here once.\n */\nexport function localeFirstDayOfWeek(locale: string): number {\n interface WeekInfo {\n firstDay: number;\n }\n type LocaleWithWeekInfo = Intl.Locale & {\n getWeekInfo?: () => WeekInfo;\n weekInfo?: WeekInfo;\n };\n\n try {\n const resolved = new Intl.Locale(locale) as LocaleWithWeekInfo;\n const info = resolved.getWeekInfo?.() ?? resolved.weekInfo;\n if (info && typeof info.firstDay === 'number') {\n return info.firstDay % 7;\n }\n } catch {\n // An invalid locale tag shouldn't take the calendar down with it.\n }\n return 1;\n}\n\nconst PAD2 = (value: number): string => String(value).padStart(2, '0');\n\n/**\n * Formats a date against a token pattern.\n *\n * Supported tokens: `yyyy`, `MM`, `dd`, `HH` (24h), `hh` (12h), `mm`, `ss`, `a` (AM/PM).\n * Anything else is copied through literally.\n *\n * Deliberately **not** `Intl.DateTimeFormat`: this pattern is also what `parseDate` reads, and\n * a formatter whose output cannot be parsed back is how a typed date silently becomes a\n * different one. `Intl` is still used for month and weekday *names*, which are never parsed.\n */\nexport function formatDate(date: Date, pattern: string): string {\n const hours24 = date.getHours();\n const hours12 = hours24 % 12 === 0 ? 12 : hours24 % 12;\n\n const replacements: Record<string, string> = {\n yyyy: String(date.getFullYear()).padStart(4, '0'),\n MM: PAD2(date.getMonth() + 1),\n dd: PAD2(date.getDate()),\n HH: PAD2(hours24),\n hh: PAD2(hours12),\n mm: PAD2(date.getMinutes()),\n ss: PAD2(date.getSeconds()),\n a: hours24 < 12 ? 'AM' : 'PM',\n };\n\n return pattern.replace(/yyyy|MM|dd|HH|hh|mm|ss|a/g, (token) => replacements[token]);\n}\n\n/**\n * Reads a date back out of text written in `pattern`. Returns `null` when the text doesn't\n * match, or matches but isn't a real date (`31.02.2026`).\n *\n * The out-of-range check matters: `new Date(2026, 1, 31)` happily rolls over to 3 March, so a\n * typo would be accepted as a different date rather than rejected.\n */\nexport function parseDate(text: string, pattern: string): Date | null {\n const trimmed = text.trim();\n if (trimmed === '') return null;\n\n const order: string[] = [];\n const source = pattern.replace(/yyyy|MM|dd|HH|hh|mm|ss|a|./g, (token) => {\n switch (token) {\n case 'yyyy':\n order.push(token);\n return '(\\\\d{4})';\n case 'MM':\n case 'dd':\n case 'HH':\n case 'hh':\n case 'mm':\n case 'ss':\n order.push(token);\n return '(\\\\d{1,2})';\n case 'a':\n order.push(token);\n return '([AaPp][Mm])';\n default:\n return token.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n });\n\n const match = new RegExp(`^${source}$`).exec(trimmed);\n if (!match) return null;\n\n const parts: Record<string, number> = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0 };\n let meridiem: 'am' | 'pm' | null = null;\n\n order.forEach((token, index) => {\n const raw = match[index + 1];\n if (token === 'a') {\n meridiem = raw.toLowerCase() as 'am' | 'pm';\n } else {\n parts[token] = Number(raw);\n }\n });\n\n if (order.includes('hh') && meridiem) {\n const base = parts['hh'] % 12;\n parts['HH'] = meridiem === 'pm' ? base + 12 : base;\n } else if (order.includes('hh')) {\n parts['HH'] = parts['hh'];\n }\n\n const year = parts['yyyy'];\n const month = parts['MM'] - 1;\n const day = parts['dd'];\n\n if (month < 0 || month > 11) return null;\n if (day < 1 || day > daysInMonth(year, month)) return null;\n if (parts['HH'] > 23 || parts['mm'] > 59 || parts['ss'] > 59) return null;\n\n return new Date(year, month, day, parts['HH'], parts['mm'], parts['ss']);\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\n\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../../shared/config';\r\nimport { GogDateSelectionMode, GogHourFormat, GogSize } from '../../../shared/types';\r\nimport {\r\n type GogDateRange,\r\n addDays,\r\n addMonths,\r\n addYears,\r\n buildMonthGrid,\r\n clampDate,\r\n copyTimeOnto,\r\n isAfterDay,\r\n isBeforeDay,\r\n isInRange,\r\n isSameDay,\r\n isSameMonth,\r\n isWithinBounds,\r\n localeFirstDayOfWeek,\r\n monthNames,\r\n startOfDay,\r\n weekdayNames,\r\n withTime,\r\n} from '../date-utils';\r\n\r\n/** What `gog-calendar` and `gog-datepicker` carry, depending on `selectionMode`. */\r\nexport type GogDatepickerValue = Date | GogDateRange | null;\r\n\r\n/** One rendered day cell. Precomputed so the template stays free of logic. */\r\nexport interface GogCalendarDay {\r\n date: Date;\r\n label: string;\r\n outside: boolean;\r\n today: boolean;\r\n disabled: boolean;\r\n selected: boolean;\r\n rangeStart: boolean;\r\n rangeEnd: boolean;\r\n inRange: boolean;\r\n}\r\n\r\nconst DEFAULT_LOCALE = 'en-US';\r\n\r\n/**\r\n * Built-in defaults for every fixed string the grid renders, used when neither the matching\r\n * input nor `GOG_CONFIG.labels` supplies one. Kept as one object so `resolvedLabels` stays a\r\n * single `computed` instead of nine, and so the set is obvious at a glance.\r\n */\r\nconst DEFAULT_LABELS = {\r\n today: 'Today',\r\n thisMonth: 'This month',\r\n previousMonth: 'Previous month',\r\n nextMonth: 'Next month',\r\n previousYear: 'Previous year',\r\n nextYear: 'Next year',\r\n hours: 'Hours',\r\n minutes: 'Minutes',\r\n seconds: 'Seconds',\r\n} as const;\r\n\r\n/**\r\n * The month grid behind `gog-datepicker`, usable on its own for an always-visible calendar.\r\n *\r\n * ```html\r\n * <gog-calendar [(value)]=\"date\" [min]=\"today\" />\r\n * <gog-calendar selectionMode=\"range\" [(value)]=\"range\" [numberOfMonths]=\"2\" />\r\n * ```\r\n *\r\n * Split out from the field deliberately: `gog-datepicker` is three widgets (a date, a range\r\n * and a time) behind one selector, and keeping the grid separate is what stops either half\r\n * from becoming unreadable. It is also exactly what `inline` mode renders.\r\n */\r\n@Component({\r\n selector: 'gog-calendar',\r\n imports: [IconComponent],\r\n templateUrl: './calendar.component.html',\r\n styleUrl: './calendar.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class CalendarComponent {\r\n /** Two-way bindable selection: a `Date` in `'single'` mode, a `GogDateRange` in `'range'`. */\r\n readonly value = model<GogDatepickerValue>(null);\r\n readonly selectionMode = input<GogDateSelectionMode>('single');\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n /**\r\n * Extra exclusions, as a predicate rather than a list: an array cannot express \"weekends\"\r\n * or \"public holidays\" without the consumer materialising every date in range first.\r\n */\r\n readonly disabledDates = input<((date: Date) => boolean) | null>(null);\r\n /**\r\n * BCP-47 tag driving the month and weekday names. Unset, falls back to\r\n * `GOG_CONFIG.datepicker.locale`, then to `'en-US'`.\r\n */\r\n readonly locale = input<string | undefined>(undefined);\r\n /**\r\n * 0 = Sunday … 6 = Saturday. Unset, falls back to `GOG_CONFIG.datepicker.firstDayOfWeek`,\r\n * then to the locale's own first day.\r\n */\r\n readonly firstDayOfWeek = input<number | null | undefined>(undefined);\r\n /** Which month to open on when there is no selection yet. */\r\n readonly defaultMonth = input<Date | null>(null);\r\n /** How many months to show side by side. Two is what makes a range picker usable. */\r\n readonly numberOfMonths = input(1);\r\n readonly showTime = input(false);\r\n readonly hourFormat = input<GogHourFormat>('24');\r\n readonly minuteStep = input(1);\r\n readonly showSeconds = input(false);\r\n /**\r\n * The \"Today\" button, which **selects** today's date — the view follows, because the\r\n * selection is what the calendar opens on.\r\n *\r\n * Kept separate from `showThisMonthButton` on purpose: one button that both selected and\r\n * navigated read as \"jump to today\" to anyone who pressed it after paging away, and there is\r\n * no wording that makes a single control unambiguous about which of the two it does.\r\n */\r\n readonly showTodayButton = input(true);\r\n /**\r\n * The \"This month\" button, which only moves the *view* back to the current month and leaves\r\n * the selection alone. Off by default — it is for browsing far from today without committing\r\n * to anything, which is the rarer of the two needs.\r\n */\r\n readonly showThisMonthButton = input(false);\r\n readonly size = input<GogSize>('md');\r\n /**\r\n * Navigation, shortcut and time-section labels. Each falls back to the matching\r\n * `GOG_CONFIG.labels` field when unset, then to the built-in English default — an app\r\n * translating the calendar sets them once rather than on every field.\r\n */\r\n readonly todayLabel = input<string | undefined>(undefined);\r\n readonly thisMonthLabel = input<string | undefined>(undefined);\r\n readonly previousMonthLabel = input<string | undefined>(undefined);\r\n readonly nextMonthLabel = input<string | undefined>(undefined);\r\n readonly previousYearLabel = input<string | undefined>(undefined);\r\n readonly nextYearLabel = input<string | undefined>(undefined);\r\n readonly hoursLabel = input<string | undefined>(undefined);\r\n readonly minutesLabel = input<string | undefined>(undefined);\r\n readonly secondsLabel = input<string | undefined>(undefined);\r\n\r\n /** Emitted when a selection is *complete* — a day in single mode, both ends of a range. */\r\n readonly gogDateSelect = output<GogDatepickerValue>();\r\n\r\n private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n /**\r\n * Every rendered string, resolved instance input → `GOG_CONFIG.labels` → built-in default.\r\n * `gog-datepicker` forwards its own `todayLabel`/`thisMonthLabel` as `undefined` when unset\r\n * precisely so this resolution happens here, once, rather than being pre-empted upstream.\r\n */\r\n protected readonly resolvedLabels = computed(() => {\r\n const configured = this.globalConfig.labels ?? {};\r\n return {\r\n today: resolveConfigured(this.todayLabel(), configured.today, DEFAULT_LABELS.today),\r\n thisMonth: resolveConfigured(\r\n this.thisMonthLabel(),\r\n configured.thisMonth,\r\n DEFAULT_LABELS.thisMonth,\r\n ),\r\n previousMonth: resolveConfigured(\r\n this.previousMonthLabel(),\r\n configured.previousMonth,\r\n DEFAULT_LABELS.previousMonth,\r\n ),\r\n nextMonth: resolveConfigured(\r\n this.nextMonthLabel(),\r\n configured.nextMonth,\r\n DEFAULT_LABELS.nextMonth,\r\n ),\r\n previousYear: resolveConfigured(\r\n this.previousYearLabel(),\r\n configured.previousYear,\r\n DEFAULT_LABELS.previousYear,\r\n ),\r\n nextYear: resolveConfigured(\r\n this.nextYearLabel(),\r\n configured.nextYear,\r\n DEFAULT_LABELS.nextYear,\r\n ),\r\n hours: resolveConfigured(this.hoursLabel(), configured.hours, DEFAULT_LABELS.hours),\r\n minutes: resolveConfigured(this.minutesLabel(), configured.minutes, DEFAULT_LABELS.minutes),\r\n seconds: resolveConfigured(this.secondsLabel(), configured.seconds, DEFAULT_LABELS.seconds),\r\n };\r\n });\r\n\r\n /** First of the leftmost visible month. */\r\n private readonly viewMonth = signal<Date>(startOfDay(new Date()));\r\n /** The cell the keyboard is on, and the only one carrying `tabindex=\"0\"`. */\r\n protected readonly focusedDate = signal<Date>(startOfDay(new Date()));\r\n /** Drives the range preview while the second end is still being chosen. */\r\n protected readonly hoverDate = signal<Date | null>(null);\r\n /** Whether a focus move should also pull the DOM focus over — only after a keypress. */\r\n private pendingFocus = false;\r\n\r\n /**\r\n * Instance input → `GOG_CONFIG.datepicker` → the built-in default.\r\n *\r\n * `gog-calendar` resolves these itself rather than relying on `gog-datepicker` to pass them\r\n * down: it is exported and usable standalone, and `GOG_CONFIG.datepicker` has always been\r\n * documented as applying to both. When it *is* rendered by `gog-datepicker`, that component\r\n * passes its own already-resolved values, which win here — and resolve to the same thing,\r\n * since both read the same config.\r\n */\r\n protected readonly resolvedLocale = computed(() =>\r\n resolveConfigured(this.locale(), this.globalConfig.datepicker?.locale, DEFAULT_LOCALE),\r\n );\r\n protected readonly resolvedFirstDayOfWeek = computed(\r\n () =>\r\n this.firstDayOfWeek() ??\r\n this.globalConfig.datepicker?.firstDayOfWeek ??\r\n localeFirstDayOfWeek(this.resolvedLocale()),\r\n );\r\n protected readonly weekdays = computed(() =>\r\n weekdayNames(this.resolvedLocale(), this.resolvedFirstDayOfWeek()),\r\n );\r\n private readonly months = computed(() => monthNames(this.resolvedLocale()));\r\n\r\n private readonly range = computed<GogDateRange>(() => {\r\n const current = this.value();\r\n if (this.selectionMode() !== 'range' || current === null || current instanceof Date) {\r\n return { start: null, end: null };\r\n }\r\n return current;\r\n });\r\n private readonly singleDate = computed<Date | null>(() => {\r\n const current = this.value();\r\n return current instanceof Date ? current : null;\r\n });\r\n\r\n /** Start/end as currently *displayed*, including the end the pointer is hovering over. */\r\n private readonly previewRange = computed<GogDateRange>(() => {\r\n const { start, end } = this.range();\r\n if (start && !end && this.hoverDate()) {\r\n return { start, end: this.hoverDate() };\r\n }\r\n return { start, end };\r\n });\r\n\r\n /** One entry per visible month; each is a 6×7 grid. */\r\n protected readonly monthViews = computed(() => {\r\n const count = Math.max(1, this.numberOfMonths());\r\n return Array.from({ length: count }, (_, offset) => {\r\n const month = addMonths(this.viewMonth(), offset);\r\n return {\r\n label: `${this.months()[month.getMonth()]} ${month.getFullYear()}`,\r\n weeks: this.buildWeeks(month),\r\n };\r\n });\r\n });\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-calendar',\r\n `gog-calendar--${this.size()}`,\r\n this.selectionMode() === 'range' ? 'gog-calendar--range' : null,\r\n this.numberOfMonths() > 1 ? 'gog-calendar--multi' : null,\r\n ]\r\n .filter((className): className is string => className !== null)\r\n .join(' '),\r\n );\r\n\r\n /**\r\n * Whether today can actually be picked — `min`, `max` or `disabledDates` may rule it out, and\r\n * a \"Today\" button that silently does nothing is worse than one that is visibly unavailable.\r\n * The signal reads inside `isDayDisabled` are what make this follow those inputs.\r\n */\r\n protected readonly isTodaySelectable = computed(\r\n () => !this.isDayDisabled(startOfDay(new Date())),\r\n );\r\n\r\n // ── Time section ──────────────────────────────────────────────────────────────\r\n protected readonly timeSource = computed<Date | null>(() =>\r\n this.selectionMode() === 'range' ? this.range().start : this.singleDate(),\r\n );\r\n protected readonly hours = computed(() => {\r\n const date = this.timeSource();\r\n const raw = date ? date.getHours() : 0;\r\n if (this.hourFormat() === '24') return raw;\r\n return raw % 12 === 0 ? 12 : raw % 12;\r\n });\r\n protected readonly minutes = computed(() => this.timeSource()?.getMinutes() ?? 0);\r\n protected readonly seconds = computed(() => this.timeSource()?.getSeconds() ?? 0);\r\n protected readonly isPm = computed(() => (this.timeSource()?.getHours() ?? 0) >= 12);\r\n protected readonly maxHour = computed(() => (this.hourFormat() === '24' ? 23 : 12));\r\n protected readonly minHour = computed(() => (this.hourFormat() === '24' ? 0 : 1));\r\n\r\n constructor() {\r\n // Open on the selection when there is one, otherwise on `defaultMonth`.\r\n //\r\n // `viewMonth` is read **untracked**, and that is the whole point: tracking it would make\r\n // this effect re-run on every page, see that the month no longer matches the anchor, and\r\n // snap straight back — the next/previous buttons and PageUp/PageDown would all appear to\r\n // do nothing. It must react to the anchor changing, never to the view changing.\r\n effect(() => {\r\n const anchor = this.selectionAnchor() ?? this.defaultMonth();\r\n if (!anchor) return;\r\n\r\n untracked(() => {\r\n const day = startOfDay(anchor);\r\n this.focusedDate.set(day);\r\n if (!isSameMonth(day, this.viewMonth())) {\r\n this.viewMonth.set(day);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /** Steps the view by whole months or years. */\r\n protected shiftView(months: number): void {\r\n this.viewMonth.set(addMonths(this.viewMonth(), months));\r\n }\r\n\r\n protected shiftViewYears(years: number): void {\r\n this.viewMonth.set(addYears(this.viewMonth(), years));\r\n }\r\n\r\n protected onDayClick(day: GogCalendarDay): void {\r\n if (day.disabled) return;\r\n this.select(day.date);\r\n }\r\n\r\n protected onDayHover(day: GogCalendarDay): void {\r\n if (this.selectionMode() !== 'range') return;\r\n this.hoverDate.set(day.disabled ? null : day.date);\r\n }\r\n\r\n protected onGridLeave(): void {\r\n this.hoverDate.set(null);\r\n }\r\n\r\n /**\r\n * Selects today. The view needs no separate nudge: the selection is the anchor the calendar\r\n * opens on, so moving it there moves the month too.\r\n */\r\n protected selectToday(): void {\r\n const today = startOfDay(new Date());\r\n if (this.isDayDisabled(today)) return;\r\n\r\n this.select(today);\r\n this.focusedDate.set(today);\r\n }\r\n\r\n /** Moves the view back to the current month, leaving the selection untouched. */\r\n protected goToThisMonth(): void {\r\n const today = startOfDay(new Date());\r\n this.viewMonth.set(today);\r\n this.focusedDate.set(today);\r\n this.pendingFocus = true;\r\n this.applyPendingFocus();\r\n }\r\n\r\n /**\r\n * The ARIA grid pattern's keyboard contract: arrows by day, PageUp/PageDown by month,\r\n * Shift + those by year, Home/End to the ends of the week. Movement is clamped into\r\n * `[min, max]` so the caret cannot wander into a region nothing can be picked from.\r\n */\r\n protected onGridKeydown(event: KeyboardEvent): void {\r\n const current = this.focusedDate();\r\n // Assigned by every branch that does not return, so no initializer is needed.\r\n let next: Date;\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n next = addDays(current, -1);\r\n break;\r\n case 'ArrowRight':\r\n next = addDays(current, 1);\r\n break;\r\n case 'ArrowUp':\r\n next = addDays(current, -7);\r\n break;\r\n case 'ArrowDown':\r\n next = addDays(current, 7);\r\n break;\r\n case 'Home':\r\n next = addDays(current, -weekdayOffset(current, this.resolvedFirstDayOfWeek()));\r\n break;\r\n case 'End':\r\n next = addDays(current, 6 - weekdayOffset(current, this.resolvedFirstDayOfWeek()));\r\n break;\r\n case 'PageUp':\r\n next = event.shiftKey ? addYears(current, -1) : addMonths(current, -1);\r\n break;\r\n case 'PageDown':\r\n next = event.shiftKey ? addYears(current, 1) : addMonths(current, 1);\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (!this.isDayDisabled(current)) this.select(current);\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const clamped = clampDate(next, this.min(), this.max());\r\n this.focusedDate.set(clamped);\r\n if (!isSameMonth(clamped, this.viewMonth())) {\r\n this.viewMonth.set(startOfDay(clamped));\r\n }\r\n this.pendingFocus = true;\r\n this.applyPendingFocus();\r\n }\r\n\r\n // ── Time controls ─────────────────────────────────────────────────────────────\r\n\r\n protected onHourInput(event: Event): void {\r\n const raw = Number((event.target as HTMLInputElement).value);\r\n if (!Number.isFinite(raw)) return;\r\n\r\n const hours24 =\r\n this.hourFormat() === '24' ? raw : ((raw % 12) + (this.isPm() ? 12 : 0) + 24) % 24;\r\n this.applyTime(hours24, this.minutes(), this.seconds());\r\n }\r\n\r\n protected onMinuteInput(event: Event): void {\r\n const raw = Number((event.target as HTMLInputElement).value);\r\n if (!Number.isFinite(raw)) return;\r\n this.applyTime(this.timeSource()?.getHours() ?? 0, raw, this.seconds());\r\n }\r\n\r\n protected onSecondInput(event: Event): void {\r\n const raw = Number((event.target as HTMLInputElement).value);\r\n if (!Number.isFinite(raw)) return;\r\n this.applyTime(this.timeSource()?.getHours() ?? 0, this.minutes(), raw);\r\n }\r\n\r\n protected toggleMeridiem(): void {\r\n const hours = this.timeSource()?.getHours() ?? 0;\r\n this.applyTime((hours + 12) % 24, this.minutes(), this.seconds());\r\n }\r\n\r\n // ── Internals ─────────────────────────────────────────────────────────────────\r\n\r\n private selectionAnchor(): Date | null {\r\n return this.selectionMode() === 'range' ? this.range().start : this.singleDate();\r\n }\r\n\r\n private isDayDisabled(date: Date): boolean {\r\n if (!isWithinBounds(date, this.min(), this.max())) return true;\r\n return this.disabledDates()?.(date) ?? false;\r\n }\r\n\r\n private buildWeeks(month: Date): GogCalendarDay[][] {\r\n const today = new Date();\r\n const { start, end } = this.previewRange();\r\n const selected = this.singleDate();\r\n const isRange = this.selectionMode() === 'range';\r\n\r\n return buildMonthGrid(month.getFullYear(), month.getMonth(), this.resolvedFirstDayOfWeek()).map(\r\n (week) =>\r\n week.map((date) => ({\r\n date,\r\n label: String(date.getDate()),\r\n outside: !isSameMonth(date, month),\r\n today: isSameDay(date, today),\r\n disabled: this.isDayDisabled(date),\r\n selected: isRange\r\n ? isSameDay(date, start) || isSameDay(date, end)\r\n : isSameDay(date, selected),\r\n rangeStart: isRange && isSameDay(date, orderedStart(start, end)),\r\n rangeEnd: isRange && isSameDay(date, orderedEnd(start, end)),\r\n inRange: isRange && isInRange(date, start, end),\r\n })),\r\n );\r\n }\r\n\r\n private select(date: Date): void {\r\n if (this.selectionMode() === 'single') {\r\n const time = this.singleDate();\r\n // Picking a different day must not reset a time the user already set.\r\n const next = time ? copyTimeOnto(date, time) : date;\r\n this.commit(next);\r\n return;\r\n }\r\n\r\n const { start, end } = this.range();\r\n // A fresh pair whenever there is no open range: either nothing is picked yet, or the\r\n // previous range is complete and this click starts a new one.\r\n if (!start || end) {\r\n this.commit({ start: date, end: null }, false);\r\n return;\r\n }\r\n\r\n // Second click before the first: treat it as the new start rather than an invalid range.\r\n const ordered = isBeforeDay(date, start) ? { start: date, end: start } : { start, end: date };\r\n this.hoverDate.set(null);\r\n this.commit(ordered);\r\n }\r\n\r\n private commit(next: GogDatepickerValue, complete = true): void {\r\n this.value.set(next);\r\n if (complete) {\r\n this.gogDateSelect.emit(next);\r\n }\r\n }\r\n\r\n private applyTime(hours: number, minutes: number, seconds: number): void {\r\n const base = this.timeSource() ?? startOfDay(new Date());\r\n const updated = withTime(\r\n base,\r\n clampNumber(hours, 0, 23),\r\n clampNumber(minutes, 0, 59),\r\n clampNumber(seconds, 0, 59),\r\n );\r\n\r\n if (this.selectionMode() === 'single') {\r\n this.commit(updated);\r\n return;\r\n }\r\n\r\n const { start, end } = this.range();\r\n this.commit({ start: start ? updated : null, end }, false);\r\n }\r\n\r\n /**\r\n * Moves the DOM focus onto the newly focused cell, but only after a key or button press —\r\n * never in response to the selection changing, which would steal focus from whatever the\r\n * consumer is doing elsewhere on the page.\r\n */\r\n private applyPendingFocus(): void {\r\n if (!this.pendingFocus) return;\r\n this.pendingFocus = false;\r\n\r\n queueMicrotask(() => {\r\n this.elRef.nativeElement\r\n .querySelector<HTMLElement>('.gog-calendar__day[tabindex=\"0\"]')\r\n ?.focus();\r\n });\r\n }\r\n\r\n protected isFocusedDay(date: Date): boolean {\r\n return isSameDay(date, this.focusedDate());\r\n }\r\n}\r\n\r\n/** How far into the week `date` sits, given which weekday the week starts on. */\r\nfunction weekdayOffset(date: Date, firstDayOfWeek: number): number {\r\n return (date.getDay() - firstDayOfWeek + 7) % 7;\r\n}\r\n\r\nfunction orderedStart(start: Date | null, end: Date | null): Date | null {\r\n if (!start || !end) return start;\r\n return isAfterDay(start, end) ? end : start;\r\n}\r\n\r\nfunction orderedEnd(start: Date | null, end: Date | null): Date | null {\r\n if (!start || !end) return end;\r\n return isAfterDay(start, end) ? start : end;\r\n}\r\n\r\nfunction clampNumber(value: number, min: number, max: number): number {\r\n return Math.min(max, Math.max(min, Math.round(value)));\r\n}\r\n","<div class=\"gog-calendar__header\">\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().previousYear\"\r\n (click)=\"shiftViewYears(-1)\"\r\n >\r\n <gog-icon name=\"chevron-left\" />\r\n <gog-icon name=\"chevron-left\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().previousMonth\"\r\n (click)=\"shiftView(-1)\"\r\n >\r\n <gog-icon name=\"chevron-left\" />\r\n </button>\r\n\r\n <div class=\"gog-calendar__titles\">\r\n @for (month of monthViews(); track $index) {\r\n <span class=\"gog-calendar__title\">{{ month.label }}</span>\r\n }\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().nextMonth\"\r\n (click)=\"shiftView(1)\"\r\n >\r\n <gog-icon name=\"chevron-right\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().nextYear\"\r\n (click)=\"shiftViewYears(1)\"\r\n >\r\n <gog-icon name=\"chevron-right\" />\r\n <gog-icon name=\"chevron-right\" />\r\n </button>\r\n</div>\r\n\r\n<div class=\"gog-calendar__months\" (mouseleave)=\"onGridLeave()\">\r\n @for (month of monthViews(); track $index) {\r\n <!--\r\n role=\"grid\" rather than a list of buttons: a month is two-dimensional, and the arrow\r\n keys have to mean \"next day\" and \"next week\" — which is what the grid role tells\r\n assistive tech to expect. One keydown handler on the grid serves all 42 cells.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- the keydown handler is delegated here so 42 cells don't each carry one; the real keyboard targets are the day buttons inside, which are focusable and carry the roving tabindex. The grid itself must not be a tab stop. -->\r\n <table\r\n class=\"gog-calendar__grid\"\r\n role=\"grid\"\r\n [attr.aria-label]=\"month.label\"\r\n (keydown)=\"onGridKeydown($event)\"\r\n >\r\n <thead>\r\n <tr class=\"gog-calendar__weekdays\">\r\n @for (weekday of weekdays(); track $index) {\r\n <th class=\"gog-calendar__weekday\" scope=\"col\" [attr.abbr]=\"weekday\">{{ weekday }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of month.weeks; track $index) {\r\n <tr class=\"gog-calendar__week\">\r\n @for (day of week; track day.date.getTime()) {\r\n <td class=\"gog-calendar__cell\" role=\"gridcell\" [attr.aria-selected]=\"day.selected\">\r\n <!--\r\n A roving tabindex across 42 cells: exactly one is tabbable, and the arrows\r\n move it. Tabbing through every day of the month instead would put 42 stops\r\n between the field and whatever follows it.\r\n -->\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__day\"\r\n [class.gog-calendar__day--outside]=\"day.outside\"\r\n [class.gog-calendar__day--today]=\"day.today\"\r\n [class.gog-calendar__day--selected]=\"day.selected\"\r\n [class.gog-calendar__day--range-start]=\"day.rangeStart\"\r\n [class.gog-calendar__day--range-end]=\"day.rangeEnd\"\r\n [class.gog-calendar__day--in-range]=\"day.inRange\"\r\n [disabled]=\"day.disabled\"\r\n [attr.aria-disabled]=\"day.disabled\"\r\n [attr.aria-current]=\"day.today ? 'date' : null\"\r\n [tabindex]=\"isFocusedDay(day.date) ? 0 : -1\"\r\n (click)=\"onDayClick(day)\"\r\n (mouseenter)=\"onDayHover(day)\"\r\n >\r\n {{ day.label }}\r\n </button>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n</div>\r\n\r\n@if (showTime()) {\r\n <div class=\"gog-calendar__time\">\r\n <gog-icon class=\"gog-calendar__time-icon\" name=\"clock\" [ariaHidden]=\"true\" />\r\n\r\n <input\r\n type=\"number\"\r\n class=\"gog-calendar__time-input\"\r\n [min]=\"minHour()\"\r\n [max]=\"maxHour()\"\r\n [value]=\"hours()\"\r\n [attr.aria-label]=\"resolvedLabels().hours\"\r\n (input)=\"onHourInput($event)\"\r\n />\r\n <span class=\"gog-calendar__time-sep\" aria-hidden=\"true\">:</span>\r\n <input\r\n type=\"number\"\r\n class=\"gog-calendar__time-input\"\r\n min=\"0\"\r\n max=\"59\"\r\n [step]=\"minuteStep()\"\r\n [value]=\"minutes()\"\r\n [attr.aria-label]=\"resolvedLabels().minutes\"\r\n (input)=\"onMinuteInput($event)\"\r\n />\r\n\r\n @if (showSeconds()) {\r\n <span class=\"gog-calendar__time-sep\" aria-hidden=\"true\">:</span>\r\n <input\r\n type=\"number\"\r\n class=\"gog-calendar__time-input\"\r\n min=\"0\"\r\n max=\"59\"\r\n [value]=\"seconds()\"\r\n [attr.aria-label]=\"resolvedLabels().seconds\"\r\n (input)=\"onSecondInput($event)\"\r\n />\r\n }\r\n\r\n @if (hourFormat() === '12') {\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__meridiem\"\r\n [attr.aria-pressed]=\"isPm()\"\r\n (click)=\"toggleMeridiem()\"\r\n >\r\n {{ isPm() ? 'PM' : 'AM' }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n\r\n@if (showTodayButton() || showThisMonthButton()) {\r\n <!--\r\n Two distinct actions, never one: \"Today\" picks a date, \"This month\" only moves the view.\r\n Collapsing them into a single button is what made the control ambiguous — after paging\r\n away, the same label reads as \"take me back\" to one person and \"set it to today\" to another.\r\n -->\r\n <div class=\"gog-calendar__footer\">\r\n @if (showThisMonthButton()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__action gog-calendar__action--this-month\"\r\n (click)=\"goToThisMonth()\"\r\n >\r\n {{ resolvedLabels().thisMonth }}\r\n </button>\r\n }\r\n\r\n @if (showTodayButton()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__action gog-calendar__today\"\r\n [disabled]=\"!isTodaySelectable()\"\r\n (click)=\"selectToday()\"\r\n >\r\n {{ resolvedLabels().today }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n DoCheck,\r\n ElementRef,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\nimport { CalendarComponent, type GogDatepickerValue } from './calendar/calendar.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { GogClearableState } from '../../shared/clearable-state';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogFloatLabelState } from '../../shared/float-label-state';\r\nimport { GogDropdownOverlay } from '../../shared/dropdown-overlay';\r\nimport {\r\n type GogDropdownDirection,\r\n type GogDropdownPlacement,\r\n resolveDropdownPlacement,\r\n} from '../../shared/dropdown-position';\r\nimport {\r\n GogDateSelectionMode,\r\n GogFloatLabelVariant,\r\n GogHourFormat,\r\n GogSize,\r\n} from '../../shared/types';\r\nimport { type GogDateRange, formatDate, parseDate } from './date-utils';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nconst DEFAULT_APPEND_TO_BODY = false;\r\nconst DEFAULT_DIRECTION: GogDropdownDirection = 'auto';\r\nconst DEFAULT_LOCALE = 'en-US';\r\nconst DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\r\nconst DEFAULT_TIME_FORMAT = 'HH:mm';\r\nconst DEFAULT_CLEAR_DATE_LABEL = 'Clear date';\r\nconst DEFAULT_OPEN_CALENDAR_LABEL = 'Open calendar';\r\n/** Rough panel height fed into the up/down placement math before it is on screen. */\r\nconst ESTIMATED_PANEL_HEIGHT = 330;\r\n\r\nexport type { GogDateRange, GogDatepickerValue };\r\n\r\n/**\r\n * A date field with a calendar panel.\r\n *\r\n * ```html\r\n * <gog-datepicker [(value)]=\"date\" label=\"Дата рождения\" [max]=\"today\" />\r\n * <gog-datepicker selectionMode=\"range\" [(value)]=\"range\" [numberOfMonths]=\"2\" />\r\n * <gog-datepicker [showTime]=\"true\" hourFormat=\"24\" [(value)]=\"when\" />\r\n * ```\r\n *\r\n * Native `Date`, no date library and no adapter abstraction: this package has zero runtime\r\n * dependencies, and pulling one in for a single component would be the largest dependency\r\n * decision it has ever made. `Intl` covers month and weekday names; the display/parse format is\r\n * a token pattern (`dd.MM.yyyy`) so what is written can always be read back — see\r\n * `date-utils.ts`, which also explains why nothing here goes near `toISOString()`.\r\n *\r\n * The calendar itself is `gog-calendar`, exported separately and usable on its own. `inline`\r\n * mode is literally that component rendered without this field.\r\n */\r\n@Component({\r\n selector: 'gog-datepicker',\r\n imports: [CalendarComponent, IconComponent, NgTemplateOutlet],\r\n templateUrl: './datepicker.component.html',\r\n styleUrl: './datepicker.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class DatepickerComponent implements ControlValueAccessor, DoCheck {\r\n private static nextUid = 0;\r\n protected readonly uid = ++DatepickerComponent.nextUid;\r\n\r\n readonly inputId = input('');\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n readonly placeholder = input('');\r\n readonly selectionMode = input<GogDateSelectionMode>('single');\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n readonly disabledDates = input<((date: Date) => boolean) | null>(null);\r\n readonly defaultMonth = input<Date | null>(null);\r\n readonly numberOfMonths = input(1);\r\n readonly showTime = input(false);\r\n readonly hourFormat = input<GogHourFormat>('24');\r\n readonly minuteStep = input(1);\r\n readonly showSeconds = input(false);\r\n /** The \"Today\" button in the panel's footer, which **selects** today's date. */\r\n readonly showTodayButton = input(true);\r\n /**\r\n * A second footer button that only moves the *view* back to the current month, leaving the\r\n * selection alone. Off by default; see `gog-calendar` for why the two are separate controls.\r\n */\r\n readonly showThisMonthButton = input(false);\r\n /**\r\n * Forwarded to `gog-calendar`. Left unset they stay `undefined` all the way down, so the\r\n * calendar resolves them against `GOG_CONFIG.labels` itself rather than receiving an English\r\n * default from here that would shadow the app's own.\r\n */\r\n readonly todayLabel = input<string | undefined>(undefined);\r\n readonly thisMonthLabel = input<string | undefined>(undefined);\r\n /**\r\n * Display and parse pattern (`dd.MM.yyyy`, `yyyy-MM-dd`, …). Left unset it is derived from\r\n * `showTime`, so switching the time section on does not also require restating the format.\r\n */\r\n readonly format = input<string | null>(null);\r\n /** Unset, falls back to `GOG_CONFIG.datepicker.locale`, then to `'en-US'`. */\r\n readonly locale = input<string | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.datepicker.firstDayOfWeek`, then to the locale's own. */\r\n readonly firstDayOfWeek = input<number | undefined>(undefined);\r\n /**\r\n * Whether the date can be typed as well as picked. Typed text is parsed against `format`;\r\n * text that isn't a real date leaves the value untouched and is reverted on blur, rather\r\n * than silently resetting the field.\r\n */\r\n readonly allowTextInput = input(true);\r\n /** Renders the calendar directly, with no field and no panel. */\r\n readonly inline = input(false);\r\n readonly disabled = input(false);\r\n readonly fullWidth = input(true);\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.labels.clearDate`, then to `'Clear date'`. */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n readonly errorMessage = input('');\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly size = input<GogSize | undefined>(undefined);\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\r\n readonly appendToBody = input<boolean | undefined>(undefined);\r\n readonly dropdownDirection = input<GogDropdownDirection | undefined>(undefined);\r\n readonly dropdownZIndex = input<number | null>(null);\r\n /** Unset, falls back to `GOG_CONFIG.labels.openCalendar`, then to `'Open calendar'`. */\r\n readonly openCalendarLabel = input<string | undefined>(undefined);\r\n\r\n /** Two-way bindable value: a `Date` in `'single'` mode, a `GogDateRange` in `'range'`. */\r\n readonly value = model<GogDatepickerValue>(null);\r\n\r\n readonly isOpen = signal(false);\r\n\r\n private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly overlay = new GogDropdownOverlay(inject(ApplicationRef), this.document);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n\r\n private readonly cvaDisabled = signal(false);\r\n protected readonly isFocused = signal(false);\r\n protected readonly panelPlacement = signal<GogDropdownPlacement | null>(null);\r\n protected readonly directionState = signal<'up' | 'down'>('down');\r\n /** What is in the `<input>`; diverges from `value` only while the user is typing. */\r\n protected readonly text = signal('');\r\n /**\r\n * Whether the user is part-way through typing a date.\r\n *\r\n * Deliberately **not** the same thing as \"the field has focus\": picking a date from the\r\n * calendar hands focus back to the field, and keying the guard on focus meant the text was\r\n * then refused — you would pick a date and watch the field stay empty.\r\n */\r\n private readonly isEditing = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(\r\n this.clearAriaLabel(),\r\n this.globalConfig.labels?.clearDate,\r\n DEFAULT_CLEAR_DATE_LABEL,\r\n ),\r\n );\r\n protected readonly resolvedOpenCalendarLabel = computed(() =>\r\n resolveConfigured(\r\n this.openCalendarLabel(),\r\n this.globalConfig.labels?.openCalendar,\r\n DEFAULT_OPEN_CALENDAR_LABEL,\r\n ),\r\n );\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n protected readonly resolvedAppendToBody = computed(() =>\r\n resolveConfigured(\r\n this.appendToBody(),\r\n this.globalConfig.dropdown?.appendToBody,\r\n DEFAULT_APPEND_TO_BODY,\r\n ),\r\n );\r\n protected readonly resolvedDirection = computed(() =>\r\n resolveConfigured(\r\n this.dropdownDirection(),\r\n this.globalConfig.dropdown?.direction,\r\n DEFAULT_DIRECTION,\r\n ),\r\n );\r\n protected readonly resolvedLocale = computed(() =>\r\n resolveConfigured(this.locale(), this.globalConfig.datepicker?.locale, DEFAULT_LOCALE),\r\n );\r\n protected readonly resolvedFirstDayOfWeek = computed(\r\n () => this.firstDayOfWeek() ?? this.globalConfig.datepicker?.firstDayOfWeek ?? null,\r\n );\r\n /** Derived from `showTime` so turning the clock on doesn't also require a new format. */\r\n protected readonly resolvedFormat = computed(() => {\r\n const explicit = this.format() ?? this.globalConfig.datepicker?.format;\r\n if (explicit) return explicit;\r\n return this.showTime() ? `${DEFAULT_DATE_FORMAT} ${DEFAULT_TIME_FORMAT}` : DEFAULT_DATE_FORMAT;\r\n });\r\n\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n\r\n protected readonly hasValue = computed(() => {\r\n const current = this.value();\r\n if (current === null) return false;\r\n if (current instanceof Date) return true;\r\n return current.start !== null || current.end !== null;\r\n });\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n this.hasValue,\r\n this.isDisabled,\r\n this.globalConfig,\r\n () => false,\r\n );\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n this.hasValue,\r\n this.globalConfig,\r\n );\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\r\n\r\n protected readonly triggerId = computed(() => this.inputId() || `gog-datepicker-${this.uid}`);\r\n protected readonly panelId = computed(() => `${this.triggerId()}-panel`);\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 sizeClass = computed(() =>\r\n this.resolvedSize() === DEFAULT_SIZE ? '' : `gog-datepicker--${this.resolvedSize()}`,\r\n );\r\n\r\n /** How `value` reads in the field. A half-picked range shows only its start. */\r\n protected readonly displayText = computed(() => {\r\n const current = this.value();\r\n const pattern = this.resolvedFormat();\r\n if (current === null) return '';\r\n if (current instanceof Date) return formatDate(current, pattern);\r\n\r\n const start = current.start ? formatDate(current.start, pattern) : '';\r\n const end = current.end ? formatDate(current.end, pattern) : '';\r\n if (!start) return '';\r\n return end ? `${start} — ${end}` : start;\r\n });\r\n\r\n private onChangeFn: (val: GogDatepickerValue) => void = () => {};\r\n private onTouchedFn: () => void = () => {};\r\n private repositionFrame: number | null = null;\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 while also injecting NgControl\r\n // 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\r\n // The field follows the value except while it is being typed into.\r\n effect(() => {\r\n const formatted = this.displayText();\r\n if (!this.isEditing()) {\r\n this.text.set(formatted);\r\n }\r\n });\r\n\r\n this.bindWhileOpen();\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: GogDatepickerValue): void {\r\n this.value.set(val ?? null);\r\n }\r\n\r\n registerOnChange(fn: (val: GogDatepickerValue) => 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) this.close();\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() || this.inline()) return;\r\n\r\n this.isOpen.set(true);\r\n this.updatePlacement();\r\n\r\n if (this.resolvedAppendToBody() && this.isBrowser) {\r\n const template = this.panelTemplate();\r\n if (template) this.overlay.attach(template, this.elRef.nativeElement);\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 this.onTouchedFn();\r\n }\r\n\r\n /** A completed selection closes the panel; a half-picked range leaves it open. */\r\n protected onCalendarSelect(next: GogDatepickerValue): void {\r\n this.isEditing.set(false);\r\n this.commit(next);\r\n if (!this.showTime()) {\r\n this.close();\r\n this.focusTrigger();\r\n }\r\n }\r\n\r\n /** Every calendar change, including the half-picked ones, has to reach the form. */\r\n protected onCalendarValue(next: GogDatepickerValue): void {\r\n this.isEditing.set(false);\r\n this.commit(next);\r\n }\r\n\r\n protected onTextInput(event: Event): void {\r\n const raw = (event.target as HTMLInputElement).value;\r\n this.isEditing.set(true);\r\n this.text.set(raw);\r\n\r\n if (!this.allowTextInput() || this.selectionMode() === 'range') return;\r\n\r\n if (raw.trim() === '') {\r\n this.commit(null);\r\n return;\r\n }\r\n\r\n const parsed = parseDate(raw, this.resolvedFormat());\r\n // An unparseable draft leaves the value alone rather than clearing it: the user is\r\n // mid-way through typing a date almost every keystroke, and wiping the value each time\r\n // would fire a stream of nulls at an attached form.\r\n if (parsed) {\r\n this.commit(parsed);\r\n }\r\n }\r\n\r\n protected onFocus(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n protected onBlur(): void {\r\n this.isFocused.set(false);\r\n this.isEditing.set(false);\r\n // Snap back to whatever the value actually is, discarding an unfinished draft.\r\n this.text.set(this.displayText());\r\n this.onTouchedFn();\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this.isOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if ((event.key === 'ArrowDown' || event.key === 'Enter') && !this.isOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n }\r\n }\r\n\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isEditing.set(false);\r\n this.commit(null);\r\n this.text.set('');\r\n }\r\n\r\n protected focusTrigger(): void {\r\n this.elRef.nativeElement.querySelector<HTMLElement>('.gog-datepicker__control')?.focus();\r\n }\r\n\r\n private commit(next: GogDatepickerValue): void {\r\n this.value.set(next);\r\n this.onChangeFn(next);\r\n }\r\n\r\n /**\r\n * Binds click-outside and reposition listeners only while the panel is open — bound\r\n * permanently, every datepicker on the page would run a handler on every document click and\r\n * every scroll frame whether or not it is showing 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 miss\r\n // scrolling inside a nested container — the case appendToBody exists for.\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 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 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 if (!inside) this.close();\r\n }\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()) this.updatePlacement();\r\n });\r\n }\r\n\r\n private updatePlacement(): void {\r\n if (!this.isBrowser) return;\r\n\r\n const trigger = this.elRef.nativeElement.querySelector<HTMLElement>('.gog-datepicker__field');\r\n if (!trigger) return;\r\n\r\n const rect = trigger.getBoundingClientRect();\r\n const placement = resolveDropdownPlacement(\r\n this.resolvedDirection(),\r\n { top: rect.top, bottom: rect.bottom, left: rect.left, width: rect.width },\r\n ESTIMATED_PANEL_HEIGHT,\r\n window.innerHeight,\r\n );\r\n\r\n this.panelPlacement.set(placement);\r\n this.directionState.set(placement.direction);\r\n }\r\n}\r\n","@if (inline()) {\r\n <!--\r\n Inline mode is literally `gog-calendar` with no field and no panel around it — which is why\r\n the calendar is its own component rather than markup buried in this one.\r\n -->\r\n <gog-calendar\r\n class=\"gog-datepicker__inline\"\r\n [value]=\"value()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [disabledDates]=\"disabledDates()\"\r\n [locale]=\"resolvedLocale()\"\r\n [firstDayOfWeek]=\"resolvedFirstDayOfWeek()\"\r\n [defaultMonth]=\"defaultMonth()\"\r\n [numberOfMonths]=\"numberOfMonths()\"\r\n [showTime]=\"showTime()\"\r\n [hourFormat]=\"hourFormat()\"\r\n [minuteStep]=\"minuteStep()\"\r\n [showSeconds]=\"showSeconds()\"\r\n [showTodayButton]=\"showTodayButton()\"\r\n [showThisMonthButton]=\"showThisMonthButton()\"\r\n [todayLabel]=\"todayLabel()\"\r\n [thisMonthLabel]=\"thisMonthLabel()\"\r\n [size]=\"resolvedSize()\"\r\n (valueChange)=\"onCalendarValue($event)\"\r\n (gogDateSelect)=\"onCalendarSelect($event)\"\r\n />\r\n} @else {\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.\r\n -->\r\n <div\r\n class=\"gog-datepicker\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-datepicker--clearable]=\"showClear()\"\r\n [class.gog-datepicker--disabled]=\"isDisabled()\"\r\n [class.gog-datepicker--open]=\"isOpen()\"\r\n [class.gog-datepicker--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-datepicker--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-datepicker--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-datepicker--floated]=\"isFloatLabelFloated()\"\r\n >\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-datepicker__label\" [for]=\"triggerId()\">{{ label() }}</label>\r\n }\r\n\r\n <div class=\"gog-datepicker__field\">\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-datepicker__label gog-datepicker__label--float\" [for]=\"triggerId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n\r\n <input\r\n type=\"text\"\r\n class=\"gog-datepicker__control\"\r\n autocomplete=\"off\"\r\n [id]=\"triggerId()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"!allowTextInput() || selectionMode() === 'range'\"\r\n [value]=\"text()\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\r\n [attr.aria-haspopup]=\"'dialog'\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-controls]=\"panelId()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onTextInput($event)\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n\r\n <span class=\"gog-datepicker__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"gog-datepicker__toggle gog-inline-center\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"resolvedOpenCalendarLabel()\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-controls]=\"panelId()\"\r\n (click)=\"toggle()\"\r\n >\r\n <gog-icon name=\"calendar\" />\r\n </button>\r\n\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-datepicker__clear gog-inline-center\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n </span>\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\r\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\r\n }\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-datepicker__error\" [attr.id]=\"errorId()\" role=\"alert\">\r\n {{ visibleError() }}\r\n </span>\r\n }\r\n </div>\r\n}\r\n\r\n<!--\r\n One template for both render modes — inline under the field, or stamped into <body> by the\r\n overlay when `appendToBody` is set, which also copies any scoped `data-theme` across.\r\n-->\r\n<ng-template #panelTpl>\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -- (click) here is housekeeping stopPropagation, not an interactive handler; the focusable, keyboard-operable elements are the calendar's own grid and buttons -->\r\n <div\r\n [id]=\"panelId()\"\r\n class=\"gog-datepicker__panel\"\r\n role=\"dialog\"\r\n [attr.aria-label]=\"label() || ariaLabel() || resolvedOpenCalendarLabel()\"\r\n [class.gog-datepicker__panel--up]=\"!resolvedAppendToBody() && directionState() === 'up'\"\r\n [class.gog-datepicker__panel--portal]=\"resolvedAppendToBody()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.z-index]=\"dropdownZIndex()\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <gog-calendar\r\n [value]=\"value()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [disabledDates]=\"disabledDates()\"\r\n [locale]=\"resolvedLocale()\"\r\n [firstDayOfWeek]=\"resolvedFirstDayOfWeek()\"\r\n [defaultMonth]=\"defaultMonth()\"\r\n [numberOfMonths]=\"numberOfMonths()\"\r\n [showTime]=\"showTime()\"\r\n [hourFormat]=\"hourFormat()\"\r\n [minuteStep]=\"minuteStep()\"\r\n [showSeconds]=\"showSeconds()\"\r\n [showTodayButton]=\"showTodayButton()\"\r\n [showThisMonthButton]=\"showThisMonthButton()\"\r\n [todayLabel]=\"todayLabel()\"\r\n [thisMonthLabel]=\"thisMonthLabel()\"\r\n [size]=\"resolvedSize()\"\r\n (valueChange)=\"onCalendarValue($event)\"\r\n (gogDateSelect)=\"onCalendarSelect($event)\"\r\n />\r\n </div>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport { GogDividerVariant, GogOrientation } from '../../shared/types';\n\n/**\n * A rule separating two regions, optionally with a label running through it.\n *\n * ```html\n * <gog-divider />\n * <gog-divider orientation=\"vertical\" />\n * <gog-divider>ИЛИ</gog-divider>\n * ```\n *\n * The label is projected content rather than a `label` input: it is markup, so a consumer can\n * put an icon or a `<gog-tag>` in it without the component growing an input per case. There is\n * no `hasLabel` input either — the stylesheet keys off whether anything was actually projected,\n * so the two forms above are the whole API.\n */\n@Component({\n selector: 'gog-divider',\n imports: [],\n templateUrl: './divider.component.html',\n styleUrl: './divider.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n },\n})\nexport class DividerComponent {\n readonly orientation = input<GogOrientation>('horizontal');\n readonly variant = input<GogDividerVariant>('solid');\n /**\n * Indents the rule from the leading edge so it lines up with the *text* of a list whose rows\n * start with an icon or avatar, instead of cutting across the whole row.\n */\n readonly inset = input(false);\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-divider',\n `gog-divider--${this.orientation()}`,\n `gog-divider--${this.variant()}`,\n this.inset() ? 'gog-divider--inset' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n}\n","<!--\n Three parts always rendered; the stylesheet collapses the label and the trailing rule to a\n single continuous line when nothing was projected (`:has(.gog-divider__label:empty)`).\n Written this way so `<gog-divider />` and `<gog-divider>ИЛИ</gog-divider>` need no extra input\n to tell them apart.\n-->\n<span class=\"gog-divider__rule gog-divider__rule--start\" aria-hidden=\"true\"></span>\n<span class=\"gog-divider__label\"><ng-content></ng-content></span>\n<span class=\"gog-divider__rule gog-divider__rule--end\" aria-hidden=\"true\"></span>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport { GogProgressbarMode, GogProgressbarVariant, GogSize } from '../../shared/types';\n\nconst MIN = 0;\nconst MAX = 100;\n\nfunction clamp(value: number): number {\n if (!Number.isFinite(value)) return MIN;\n return Math.min(MAX, Math.max(MIN, value));\n}\n\n/**\n * A horizontal progress indicator.\n *\n * ```html\n * <gog-progressbar [value]=\"42\" />\n * <gog-progressbar mode=\"indeterminate\" ariaLabel=\"Загрузка\" />\n * <gog-progressbar mode=\"buffer\" [value]=\"42\" [buffer]=\"70\" />\n * ```\n *\n * `value` and `buffer` are percentages and are clamped to 0–100 rather than trusted: a bar\n * driven straight from `loaded / total` overshoots on the last chunk often enough that\n * clamping here is worth more than letting the caller find out from a broken layout.\n */\n@Component({\n selector: 'gog-progressbar',\n imports: [],\n templateUrl: './progressbar.component.html',\n styleUrl: './progressbar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'progressbar',\n '[attr.aria-valuemin]': 'MIN',\n '[attr.aria-valuemax]': 'MAX',\n // Absent in indeterminate mode — that omission is precisely what tells assistive tech the\n // work has no known length. Reporting 0 instead would announce \"0 percent\" forever.\n '[attr.aria-valuenow]': 'isIndeterminate() ? null : clampedValue()',\n '[attr.aria-valuetext]': 'isIndeterminate() ? null : displayValue()',\n '[attr.aria-label]': 'ariaLabel() || null',\n },\n})\nexport class ProgressbarComponent {\n protected readonly MIN = MIN;\n protected readonly MAX = MAX;\n\n /** Percentage complete, 0–100. Ignored in `'indeterminate'` mode. */\n readonly value = input(0);\n /** Secondary level shown behind `value` in `'buffer'` mode — preloaded but not yet played. */\n readonly buffer = input(0);\n readonly mode = input<GogProgressbarMode>('determinate');\n readonly variant = input<GogProgressbarVariant>('accent');\n readonly size = input<GogSize>('md');\n /** Renders the percentage next to the bar. Off by default — most bars sit under a label. */\n readonly showValue = input(false);\n readonly ariaLabel = input('');\n\n protected readonly isIndeterminate = computed(() => this.mode() === 'indeterminate');\n protected readonly clampedValue = computed(() => clamp(this.value()));\n protected readonly clampedBuffer = computed(() => clamp(this.buffer()));\n protected readonly displayValue = computed(() => `${Math.round(this.clampedValue())}%`);\n /** The fill is driven to 100% in indeterminate mode; the animation moves it, not the width. */\n protected readonly fillPercent = computed(() =>\n this.isIndeterminate() ? MAX : this.clampedValue(),\n );\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-progressbar',\n `gog-progressbar--${this.mode()}`,\n `gog-progressbar--${this.variant()}`,\n `gog-progressbar--${this.size()}`,\n this.showValue() ? 'gog-progressbar--with-value' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n}\n","<div class=\"gog-progressbar__track\" aria-hidden=\"true\">\n @if (mode() === 'buffer') {\n <div class=\"gog-progressbar__buffer\" [style.width.%]=\"clampedBuffer()\"></div>\n }\n\n <div class=\"gog-progressbar__fill\" [style.width.%]=\"fillPercent()\"></div>\n</div>\n\n@if (showValue() && !isIndeterminate()) {\n <span class=\"gog-progressbar__value\">{{ displayValue() }}</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\nimport { GogSize } from '../../shared/types';\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\n\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\nconst DEFAULT_SIZE: GogSize = 'md';\n\n/**\n * An on/off switch.\n *\n * ```html\n * <gog-toggle label=\"Уведомления\" [(checked)]=\"on\" />\n * <gog-toggle formControlName=\"darkMode\" onLabel=\"ВКЛ\" offLabel=\"ВЫКЛ\" />\n * ```\n *\n * Next to `gog-checkbox` rather than a variant of it, because the two answer different\n * questions. A checkbox is \"is this one of the things you selected\"; a switch is \"is this\n * setting on\", takes effect immediately, and announces as **\"switch, on\"** rather than\n * \"checkbox, checked\". That announcement comes from `role=\"switch\"` on a native\n * `<input type=\"checkbox\">`, so keyboard, forms and assistive tech all still come from the\n * platform — only the painting differs.\n */\n@Component({\n selector: 'gog-toggle',\n imports: [],\n templateUrl: './toggle.component.html',\n styleUrl: './toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ToggleComponent implements ControlValueAccessor {\n readonly label = input('');\n readonly ariaLabel = input('');\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\n readonly size = input<GogSize | undefined>(undefined);\n readonly disabled = input(false);\n readonly fullWidth = input(false);\n /** Which side of the switch the label sits on. */\n readonly labelPosition = input<'start' | 'end'>('end');\n /**\n * Text rendered *inside* the track — the one thing a checkbox genuinely cannot do, and what\n * makes a switch readable at a glance in a dense settings list. Both must be short; the\n * track sizes to the wider of the two.\n */\n readonly onLabel = input('');\n readonly offLabel = input('');\n\n /**\n * Two-way bindable on/off state: `[(checked)]=\"signal\"`.\n * This is the same state Angular Forms drives via `writeValue`/`registerOnChange`\n * when the component is used with `formControlName`/`[formControl]`.\n * Don't wire both a form directive AND `[(checked)]` to the same instance —\n * pick one, otherwise you end up with two competing sources of truth.\n */\n readonly checked = model<boolean>(false);\n\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly cvaDisabled = signal(false);\n private readonly globalConfig = inject(GOG_CONFIG);\n\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\n protected readonly resolvedSize = computed(() =>\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly hasTrackLabels = computed(() => !!this.onLabel() || !!this.offLabel());\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-toggle-host',\n `gog-toggle-host--${this.resolvedSize()}`,\n `gog-toggle-host--label-${this.labelPosition()}`,\n this.hasTrackLabels() ? 'gog-toggle-host--track-labels' : null,\n this.fullWidth() ? 'gog-host--full-width' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n\n constructor() {\n // Registering through NgControl instead of NG_VALUE_ACCESSOR matches the pattern used\n // by every other form control in the library — providing NG_VALUE_ACCESSOR on the\n // component while also injecting NgControl would be a dependency cycle.\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(val: boolean): void {\n this.checked.set(val ?? false);\n }\n\n registerOnChange(fn: (val: boolean) => void): void {\n this.onCheckedChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInputChange(event: Event): void {\n if (this.isDisabled()) return;\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onCheckedChange(next);\n this.onTouched();\n }\n\n protected onBlur(): void {\n if (this.isDisabled()) return;\n this.onTouched();\n }\n\n private onCheckedChange: (val: boolean) => void = () => {};\n\n private onTouched: () => void = () => {};\n}\n","<label [class.gog-toggle--disabled]=\"isDisabled()\" class=\"gog-toggle gog-contained-layout\">\n <!--\n A real checkbox with role=\"switch\": the role changes only how it is announced, so the\n space key, form registration and the :checked selector all keep working natively.\n -->\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInputChange($event)\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n class=\"gog-toggle__input\"\n role=\"switch\"\n type=\"checkbox\"\n />\n\n <span [class.gog-toggle__track--on]=\"checked()\" class=\"gog-toggle__track\">\n @if (hasTrackLabels()) {\n <!--\n Both labels are always in the DOM so the track's width is the wider of the two and\n cannot jump as the switch flips; the inactive one is faded out, not removed.\n -->\n <span\n [class.gog-toggle__state--active]=\"checked()\"\n class=\"gog-toggle__state gog-toggle__state--on\"\n aria-hidden=\"true\"\n >\n {{ onLabel() }}\n </span>\n <span\n [class.gog-toggle__state--active]=\"!checked()\"\n class=\"gog-toggle__state gog-toggle__state--off\"\n aria-hidden=\"true\"\n >\n {{ offLabel() }}\n </span>\n }\n\n <span class=\"gog-toggle__thumb\" aria-hidden=\"true\"></span>\n </span>\n\n @if (label()) {\n <span class=\"gog-toggle__label\">{{ label() }}</span>\n }\n</label>\n","/**\r\n * Per-prefix counter behind every auto-generated DOM id in the library.\r\n *\r\n * A form control needs a real `id` whether or not the consumer supplied one: without it a\r\n * `<label for>` cannot point at the field (so clicking the label does not focus it, and\r\n * assistive tech gets no accessible name), and `aria-describedby` cannot point at the error\r\n * message. Making the consumer pass `inputId` for that is a trap — the field looks fine and is\r\n * quietly inaccessible.\r\n *\r\n * Counters are keyed by prefix rather than shared, so ids stay stable per component type\r\n * (`gog-input-1`, `gog-slider-1`) instead of depending on how many *other* controls happened to\r\n * be constructed first. That also keeps them predictable in tests and diffs.\r\n *\r\n * SSR/hydration-safe by construction: the server and the client walk the same component tree in\r\n * the same order, so both arrive at the same ids. Do not seed this with randomness for that\r\n * reason.\r\n */\r\nconst counters = new Map<string, number>();\r\n\r\n/** Returns the next id for `prefix`, e.g. `nextGogControlId('gog-input')` → `'gog-input-3'`. */\r\nexport function nextGogControlId(prefix: string): string {\r\n const next = (counters.get(prefix) ?? 0) + 1;\r\n counters.set(prefix, next);\r\n return `${prefix}-${next}`;\r\n}\r\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} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogOrientation, GogSize } from '../../shared/types';\r\nimport { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\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/** A single choice in a `gog-radio-group`. */\r\nexport interface GogRadioOption {\r\n id: string | number;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'gog-radio-group',\r\n imports: [],\r\n templateUrl: './radio-group.component.html',\r\n styleUrl: './radio-group.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.--gog-radio-box-size]': 'boxSize()',\r\n '[style.--gog-radio-label-size]': 'labelSize()',\r\n '[style.--gog-radio-padding]': 'radioPadding',\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. Same convention as gog-checkbox.\r\n '[class.gog-host--full-width]': 'fullWidth()',\r\n },\r\n})\r\nexport class RadioGroupComponent implements ControlValueAccessor {\r\n protected readonly uid = nextGogControlId('gog-radio-group');\r\n\r\n readonly options = input<GogRadioOption[]>([]);\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n /** Shared `name` for the underlying native radios. Auto-generated per instance if unset. */\r\n readonly name = input('');\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n readonly disabled = input(false);\r\n readonly orientation = input<GogOrientation>('vertical');\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n /** Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to `'manual'`. */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly fullWidth = input(false);\r\n\r\n /** Two-way bindable selected option id: `[(value)]=\"signal\"`. */\r\n readonly value = model<string | number | null>(null);\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly controlSize = computed(\r\n () => GOG_CHECKABLE_CONTROL_SIZE_MAP[this.resolvedSize()],\r\n );\r\n protected readonly boxSize = computed(() => this.controlSize().boxSize);\r\n protected readonly labelSize = computed(() => this.controlSize().labelSize);\r\n protected readonly radioPadding = GOG_CHECKABLE_CONTROL_PADDING;\r\n protected readonly groupName = computed(() => this.name() || this.uid);\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.uid}-error` : null));\r\n protected readonly labelId = computed(() => (this.label() ? `${this.uid}-label` : null));\r\n\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 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: string | number | null): void {\r\n this.value.set(val ?? null);\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 isOptionDisabled(option: GogRadioOption): boolean {\r\n return this.isDisabled() || !!option.disabled;\r\n }\r\n\r\n protected isSelected(option: GogRadioOption): boolean {\r\n return this.value() === option.id;\r\n }\r\n\r\n protected onOptionChange(event: Event, option: GogRadioOption): void {\r\n if (this.isOptionDisabled(option)) return;\r\n const input = event.target as HTMLInputElement;\r\n if (!input.checked) return;\r\n\r\n this.value.set(option.id);\r\n this.onChange(option.id);\r\n }\r\n\r\n protected onBlur(): void {\r\n this.onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-radio-group gog-contained-layout\"\r\n role=\"radiogroup\"\r\n [class.gog-radio-group--horizontal]=\"orientation() === 'horizontal'\"\r\n [class.gog-radio-group--disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"labelId()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n>\r\n @if (label()) {\r\n <span class=\"gog-radio-group__label\" [id]=\"labelId()\">{{ label() }}</span>\r\n }\r\n\r\n <div class=\"gog-radio-group__options\">\r\n @for (option of options(); track option.id) {\r\n <label class=\"gog-radio\" [class.gog-radio--disabled]=\"isOptionDisabled(option)\">\r\n <input\r\n class=\"gog-radio__input\"\r\n type=\"radio\"\r\n [name]=\"groupName()\"\r\n [value]=\"option.id\"\r\n [checked]=\"isSelected(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n (change)=\"onOptionChange($event, option)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span class=\"gog-radio__box\" [class.gog-radio__box--checked]=\"isSelected(option)\">\r\n @if (isSelected(option)) {\r\n <span class=\"gog-radio__dot\"></span>\r\n }\r\n </span>\r\n <span class=\"gog-radio__label\">{{ option.label }}</span>\r\n </label>\r\n }\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-radio-group__error\" [id]=\"errorId()\" role=\"alert\">{{ visibleError() }}</span>\r\n }\r\n</div>\r\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';\r\nimport { Injectable, TemplateRef, inject, signal, Type } from '@angular/core';\r\nimport { GogIconName } from '../../components/icon/icon.component';\r\n\r\nexport interface DialogConfig {\r\n title?: string;\r\n component: Type<unknown>;\r\n data?: unknown;\r\n modal?: boolean;\r\n closable?: boolean;\r\n draggable?: boolean;\r\n closeIconName?: GogIconName;\r\n closeIconTemplate?: TemplateRef<unknown> | null;\r\n width?: string;\r\n maxWidth?: string;\r\n /** ARIA role for the dialog panel. Use 'alertdialog' for confirmation prompts. Default: 'dialog' */\r\n role?: 'dialog' | 'alertdialog';\r\n /**\r\n * Accessible name for the close button. Unset, falls back to `GOG_CONFIG.labels.closeDialog`,\r\n * then to `'Close dialog'`.\r\n */\r\n closeAriaLabel?: string;\r\n /** z-index of the dialog backdrop. Dropdowns inside get zIndex+10. Default: 1000 */\r\n zIndex?: number;\r\n}\r\n\r\nexport interface DialogHandle<TResult = unknown> {\r\n close(result?: TResult): void;\r\n readonly afterClosed: Promise<TResult | undefined>;\r\n}\r\n\r\nexport interface OpenDialog {\r\n id: number;\r\n zIndex: number;\r\n offsetX: number;\r\n offsetY: number;\r\n config: DialogConfig;\r\n resolve: (result: unknown) => void;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DialogService {\r\n private readonly document = inject(DOCUMENT);\r\n readonly dialogs = signal<OpenDialog[]>([]);\r\n private nextId = 0;\r\n private nextZIndex = 1000;\r\n private modalDialogCount = 0;\r\n private bodyOverflowBeforeLock: string | null = null;\r\n private focusedBeforeOpen: HTMLElement | null = null;\r\n\r\n open<TResult = unknown>(config: DialogConfig): DialogHandle<TResult> {\r\n const id = ++this.nextId;\r\n const zIndex = config.zIndex ?? this.nextZIndex++;\r\n this.nextZIndex = Math.max(this.nextZIndex, zIndex + 1);\r\n\r\n let resolveAfterClosed!: (result: TResult | undefined) => void;\r\n\r\n const afterClosed = new Promise<TResult | undefined>((resolve) => {\r\n resolveAfterClosed = resolve;\r\n });\r\n\r\n const dialog: OpenDialog = {\r\n id,\r\n zIndex,\r\n offsetX: 0,\r\n offsetY: 0,\r\n config,\r\n resolve: (result) => resolveAfterClosed(result as TResult | undefined),\r\n };\r\n\r\n if (config.modal !== false && this.modalDialogCount === 0) {\r\n this.focusedBeforeOpen =\r\n this.document.activeElement instanceof HTMLElement ? this.document.activeElement : null;\r\n this.lockBodyScroll();\r\n }\r\n\r\n if (config.modal !== false) {\r\n this.modalDialogCount += 1;\r\n }\r\n\r\n this.dialogs.update((list) => [...list, dialog]);\r\n\r\n return {\r\n close: (result?: TResult) => this.close(dialog, result),\r\n afterClosed,\r\n };\r\n }\r\n\r\n close(dialog: OpenDialog, result?: unknown): void {\r\n if (!this.dialogs().some((entry) => entry.id === dialog.id)) return;\r\n\r\n dialog.resolve(result);\r\n this.dialogs.update((list) => list.filter((entry) => entry.id !== dialog.id));\r\n\r\n if (dialog.config.modal !== false) {\r\n this.modalDialogCount = Math.max(0, this.modalDialogCount - 1);\r\n }\r\n\r\n if (this.modalDialogCount === 0) {\r\n this.unlockBodyScroll();\r\n }\r\n\r\n if (this.dialogs().length === 0) {\r\n this.restoreFocus();\r\n }\r\n }\r\n\r\n closeAll(result?: unknown): void {\r\n const dialogs = this.dialogs();\r\n dialogs.forEach((dialog) => dialog.resolve(result));\r\n this.dialogs.set([]);\r\n this.modalDialogCount = 0;\r\n this.unlockBodyScroll();\r\n this.restoreFocus();\r\n }\r\n\r\n updatePosition(dialogId: number, offsetX: number, offsetY: number): void {\r\n this.dialogs.update((list) =>\r\n list.map((dialog) => (dialog.id === dialogId ? { ...dialog, offsetX, offsetY } : dialog)),\r\n );\r\n }\r\n\r\n private lockBodyScroll(): void {\r\n if (this.bodyOverflowBeforeLock !== null) return;\r\n this.bodyOverflowBeforeLock = this.document.body.style.overflow;\r\n this.document.body.style.overflow = 'hidden';\r\n }\r\n\r\n private unlockBodyScroll(): void {\r\n if (this.bodyOverflowBeforeLock === null) return;\r\n this.document.body.style.overflow = this.bodyOverflowBeforeLock;\r\n this.bodyOverflowBeforeLock = null;\r\n }\r\n\r\n private restoreFocus(): void {\r\n const element = this.focusedBeforeOpen;\r\n this.focusedBeforeOpen = null;\r\n if (!element || !this.document.contains(element)) return;\r\n element.focus({ preventScroll: true });\r\n }\r\n}\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 { GOG_CONFIG, resolveConfigured } from '../../shared/config';\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/** Built-in default, used when neither `DialogConfig` nor `GOG_CONFIG.labels` supplies one. */\r\nconst DEFAULT_CLOSE_LABEL = 'Close dialog';\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 globalConfig = inject(GOG_CONFIG);\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 /** Per-dialog config → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected closeLabel(dialog: OpenDialog): string {\r\n return resolveConfigured(\r\n dialog.config.closeAriaLabel,\r\n this.globalConfig.labels?.closeDialog,\r\n DEFAULT_CLOSE_LABEL,\r\n );\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-tooltip-z]=\"panelZ(dialog) + 20\"\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 [attr.aria-label]=\"closeLabel(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\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n class=\"gog-dialog__scroll\"\r\n >\r\n <ng-container\r\n *ngComponentOutlet=\"dialog.config.component; injector: getInjector(dialog)\"\r\n />\r\n </gog-scroll>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","import {\r\n afterNextRender,\r\n inject,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n input,\r\n OnDestroy,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { Toast, ToastAction } from '../../services/toast-service/toast-service';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\n\r\n/** Built-in default, used when `GOG_CONFIG.labels.closeToast` is unset. */\r\nconst DEFAULT_CLOSE_LABEL = 'Close toast';\r\n\r\n@Component({\r\n selector: 'gog-toast',\r\n imports: [ButtonComponent, IconComponent],\r\n templateUrl: './toast.component.html',\r\n styleUrl: './toast.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n /*\r\n * Deliberately carries no `role`/`aria-live` of its own. A live region has to be in the DOM\r\n * *before* the content it announces lands inside it; this element is created together with\r\n * its own text, which screen readers routinely skip. `gog-toast-container` owns two\r\n * permanently-mounted regions instead (see `announcements` there), so what reaches assistive\r\n * tech does not depend on the timing of a node insertion. Keeping a role here as well would\r\n * announce every toast twice, once per region.\r\n */\r\n})\r\nexport class ToastComponent implements OnDestroy {\r\n readonly toast = input.required<Toast>();\r\n /** Whether this toast is the active, front-of-queue toast — only the front toast counts down. */\r\n readonly isFront = input<boolean>(true);\r\n readonly dismissed = output<string>();\r\n\r\n readonly visible = signal(false);\r\n readonly isPaused = signal(false);\r\n private autoDismissTimer: ReturnType<typeof setTimeout> | null = null;\r\n private startedAt = 0;\r\n private remainingMs = 0;\r\n private isClosing = signal(false);\r\n\r\n private readonly progressEl = viewChild<ElementRef<HTMLElement>>('progress');\r\n\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n /**\r\n * `GOG_CONFIG.labels` → the built-in English default. No per-instance input: a toast is\r\n * created through `ToastService`, and its close button says the same thing every time.\r\n */\r\n protected readonly closeLabel = resolveConfigured(\r\n undefined,\r\n this.globalConfig.labels?.closeToast,\r\n DEFAULT_CLOSE_LABEL,\r\n );\r\n\r\n protected readonly hasActions = computed(() => this.toast().actions.length > 0);\r\n\r\n constructor() {\r\n afterNextRender(() => this.visible.set(true));\r\n effect((onCleanup) => {\r\n const toast = this.toast();\r\n const isFront = this.isFront();\r\n this.isPaused.set(false);\r\n this.isClosing.set(false);\r\n this.clearAutoDismissTimer();\r\n this.remainingMs = toast.duration;\r\n\r\n // Toasts queued behind the front one keep a full, frozen progress bar and don't count\r\n // down — they only start ticking once they become the front toast.\r\n if (!toast.isSticky && isFront) {\r\n this.restartProgressAnimation();\r\n this.startAutoDismiss(this.remainingMs);\r\n }\r\n\r\n onCleanup(() => this.clearAutoDismissTimer());\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearAutoDismissTimer();\r\n }\r\n\r\n close(): void {\r\n if (!this.visible() || this.isClosing()) return;\r\n this.clearAutoDismissTimer();\r\n this.isPaused.set(false);\r\n this.isClosing.set(true);\r\n this.visible.set(false);\r\n const id = this.toast().id;\r\n\r\n if (this.prefersReducedMotion()) {\r\n this.isClosing.set(false);\r\n queueMicrotask(() => this.dismissed.emit(id));\r\n }\r\n }\r\n\r\n protected pauseAutoDismiss(): void {\r\n const toast = this.toast();\r\n if (toast.isSticky || !this.isFront() || this.isPaused() || this.isClosing()) return;\r\n if (this.autoDismissTimer === null) return;\r\n\r\n const elapsed = Date.now() - this.startedAt;\r\n this.remainingMs = Math.max(0, this.remainingMs - elapsed);\r\n this.clearAutoDismissTimer();\r\n this.isPaused.set(true);\r\n }\r\n\r\n protected resumeAutoDismiss(): void {\r\n const toast = this.toast();\r\n if (toast.isSticky || !this.isFront() || !this.isPaused() || this.isClosing()) return;\r\n\r\n this.isPaused.set(false);\r\n if (this.remainingMs <= 0) {\r\n this.close();\r\n return;\r\n }\r\n\r\n this.startAutoDismiss(this.remainingMs);\r\n }\r\n\r\n protected onTransitionEnd(event: TransitionEvent): void {\r\n if (!this.isClosing() || event.target !== event.currentTarget) return;\r\n if (event.propertyName !== 'opacity' && event.propertyName !== 'transform') return;\r\n\r\n this.isClosing.set(false);\r\n this.dismissed.emit(this.toast().id);\r\n }\r\n\r\n protected runAction(action: ToastAction): void {\r\n action.onClick(this.toast());\r\n }\r\n\r\n private startAutoDismiss(duration: number): void {\r\n this.clearAutoDismissTimer();\r\n this.remainingMs = duration;\r\n this.startedAt = Date.now();\r\n this.autoDismissTimer = setTimeout(() => {\r\n this.autoDismissTimer = null;\r\n this.remainingMs = 0;\r\n this.close();\r\n }, duration);\r\n }\r\n\r\n /**\r\n * Forces the CSS progress-bar animation to restart from full width. Simply updating the\r\n * `--toast-duration` custom property doesn't retrigger a running `animation`, so the element\r\n * is briefly detached from the animation and reflowed before being reattached.\r\n */\r\n private restartProgressAnimation(): void {\r\n const el = this.progressEl()?.nativeElement;\r\n if (!el) return;\r\n\r\n el.style.animation = 'none';\r\n void el.offsetWidth;\r\n el.style.animation = '';\r\n }\r\n\r\n private clearAutoDismissTimer(): void {\r\n if (this.autoDismissTimer !== null) {\r\n clearTimeout(this.autoDismissTimer);\r\n this.autoDismissTimer = null;\r\n }\r\n }\r\n\r\n private prefersReducedMotion(): boolean {\r\n return (\r\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n );\r\n }\r\n}\r\n","<div\r\n class=\"gog-toast\"\r\n [class.gog-toast--paused]=\"isPaused()\"\r\n [class.gog-toast--queued]=\"!isFront()\"\r\n [class.gog-toast--success]=\"toast().type === 'success'\"\r\n [class.gog-toast--error]=\"toast().type === 'error'\"\r\n [class.gog-toast--warning]=\"toast().type === 'warning'\"\r\n [class.gog-toast--info]=\"toast().type === 'info'\"\r\n [class.gog-toast--visible]=\"visible()\"\r\n [style.--toast-duration]=\"toast().duration + 'ms'\"\r\n (mouseenter)=\"pauseAutoDismiss()\"\r\n (mouseleave)=\"resumeAutoDismiss()\"\r\n (transitionend)=\"onTransitionEnd($event)\"\r\n>\r\n <div class=\"gog-toast__content\">\r\n <span class=\"gog-toast__icon\" aria-hidden=\"true\">\r\n <gog-icon [template]=\"toast().iconTemplate ?? null\" [name]=\"toast().iconName\" />\r\n </span>\r\n <div class=\"gog-toast__main\">\r\n <span class=\"gog-toast__message\">{{ toast().message }}</span>\r\n @if (hasActions()) {\r\n <div class=\"gog-toast__actions\">\r\n @for (action of toast().actions; track action.label) {\r\n <gog-button\r\n class=\"gog-toast__action\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n (gogClick)=\"runAction(action)\"\r\n >\r\n @if (action.iconName || action.iconTemplate) {\r\n <gog-icon\r\n [template]=\"action.iconTemplate ?? null\"\r\n [name]=\"action.iconName ?? 'check'\"\r\n />\r\n }\r\n {{ action.label }}\r\n </gog-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <gog-button\r\n class=\"gog-toast__close\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n [ariaLabel]=\"closeLabel\"\r\n (gogClick)=\"close()\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </gog-button>\r\n </div>\r\n @if (!toast().isSticky) {\r\n <span #progress class=\"gog-toast__progress\" aria-hidden=\"true\"></span>\r\n }\r\n</div>\r\n","import { Injectable, TemplateRef, inject, signal } from '@angular/core';\r\n\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { GogIconName } from '../../components/icon/icon.component';\r\n\r\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\r\nexport type ToastPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\r\n\r\nexport interface Toast {\r\n id: string;\r\n message: string;\r\n type: ToastType;\r\n iconName: GogIconName;\r\n iconTemplate?: TemplateRef<unknown> | null;\r\n actions: ToastAction[];\r\n isSticky: boolean;\r\n duration: number;\r\n position: ToastPosition;\r\n dedupeKey: string;\r\n revision: number;\r\n}\r\n\r\nexport interface ToastAction {\r\n label: string;\r\n onClick: (toast: Toast) => void;\r\n iconName?: GogIconName;\r\n iconTemplate?: TemplateRef<unknown> | null;\r\n}\r\n\r\nexport interface ToastConfig {\r\n message: string;\r\n type?: ToastType;\r\n iconName?: GogIconName;\r\n iconTemplate?: TemplateRef<unknown> | null;\r\n actions?: ToastAction[];\r\n dedupeKey?: string;\r\n isSticky?: boolean;\r\n duration?: number;\r\n position?: ToastPosition;\r\n}\r\n\r\nconst DEFAULT_DURATION = 4000;\r\nconst DEFAULT_POSITION: ToastPosition = 'bottom-right';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ToastService {\r\n readonly toasts = signal<Toast[]>([]);\r\n\r\n /**\r\n * Read once at construction rather than per `show()` call: this is a root-provided singleton,\r\n * so the config it resolves against cannot change over its lifetime anyway.\r\n */\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n private generateId(): string {\r\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n return crypto.randomUUID();\r\n }\r\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\r\n }\r\n\r\n show(config: ToastConfig): string {\r\n const type = config.type ?? 'info';\r\n const position = resolveConfigured(\r\n config.position,\r\n this.globalConfig.toast?.position,\r\n DEFAULT_POSITION,\r\n );\r\n const duration = resolveConfigured(\r\n config.duration,\r\n this.globalConfig.toast?.duration,\r\n DEFAULT_DURATION,\r\n );\r\n const iconName = config.iconName ?? this.defaultIconName(type);\r\n const actions = config.actions ?? [];\r\n const dedupeKey =\r\n config.dedupeKey ??\r\n this.buildDedupeKey(\r\n config.message,\r\n type,\r\n iconName,\r\n position,\r\n actions,\r\n config.iconTemplate ?? null,\r\n );\r\n\r\n let createdId = this.generateId();\r\n\r\n this.toasts.update((list) => {\r\n let existingIndex = -1;\r\n if (dedupeKey) {\r\n for (let index = list.length - 1; index >= 0; index -= 1) {\r\n if (list[index].dedupeKey === dedupeKey) {\r\n existingIndex = index;\r\n break;\r\n }\r\n }\r\n }\r\n const nextToast: Toast = {\r\n id: existingIndex >= 0 ? list[existingIndex].id : createdId,\r\n message: config.message,\r\n type,\r\n iconName,\r\n iconTemplate: config.iconTemplate ?? null,\r\n actions,\r\n isSticky: config.isSticky ?? false,\r\n duration,\r\n position,\r\n dedupeKey,\r\n revision: existingIndex >= 0 ? list[existingIndex].revision + 1 : 0,\r\n };\r\n\r\n if (existingIndex >= 0) {\r\n const next = [...list];\r\n next[existingIndex] = nextToast;\r\n createdId = nextToast.id;\r\n return next;\r\n }\r\n\r\n createdId = nextToast.id;\r\n return [...list, nextToast];\r\n });\r\n\r\n return createdId;\r\n }\r\n\r\n dismiss(id: string): void {\r\n this.toasts.update((list) => list.filter((t) => t.id !== id));\r\n }\r\n\r\n dismissAll(): void {\r\n this.toasts.set([]);\r\n }\r\n\r\n success(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'success' });\r\n }\r\n\r\n error(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'error' });\r\n }\r\n\r\n warning(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'warning' });\r\n }\r\n\r\n info(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'info' });\r\n }\r\n\r\n private defaultIconName(type: ToastType): GogIconName {\r\n switch (type) {\r\n case 'success':\r\n return 'success';\r\n case 'error':\r\n return 'error';\r\n case 'warning':\r\n return 'warning';\r\n default:\r\n return 'info';\r\n }\r\n }\r\n\r\n private buildDedupeKey(\r\n message: string,\r\n type: ToastType,\r\n iconName: GogIconName,\r\n position: ToastPosition,\r\n actions: ToastAction[],\r\n iconTemplate: TemplateRef<unknown> | null,\r\n ): string {\r\n // Actions carry closures that can't be compared by value, so only their\r\n // label/icon \"shape\" is used — this lets repeated calls with equivalent\r\n // actions (e.g. a fresh \"Undo\" callback each time) still dedupe correctly.\r\n const actionsSignature = actions\r\n .map((action) => `${action.label}:${action.iconName ?? ''}`)\r\n .join(',');\r\n return [\r\n message,\r\n type,\r\n iconName,\r\n position,\r\n iconTemplate ? 'template' : 'default',\r\n actionsSignature,\r\n ].join('|');\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\r\nimport { ToastComponent } from '../toast.component';\r\nimport { Toast, ToastPosition, ToastService } from '../../../services/toast-service/toast-service';\r\n\r\nconst POSITIONS: ToastPosition[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\r\n\r\n/** The two types urgent enough to interrupt whatever the screen reader is currently saying. */\r\nconst ASSERTIVE_TYPES = ['error', 'warning'];\r\n\r\n/** One line of a live region — see `announcements`. */\r\ninterface ToastAnnouncement {\r\n /** `id` alone is not enough: a deduped toast is re-shown under the same id, and re-announcing\r\n * it is the point of `revision`. */\r\n key: string;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n selector: 'gog-toast-container',\r\n imports: [ToastComponent],\r\n templateUrl: './toast-container.component.html',\r\n styleUrl: './toast-container.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ToastContainerComponent {\r\n private readonly toastService = inject(ToastService);\r\n readonly maxVisiblePerPosition = input(5);\r\n\r\n readonly groups = computed(() =>\r\n POSITIONS.map((position) => ({\r\n position,\r\n // Keep the oldest toasts first: they're at the front of the queue (actively ticking),\r\n // while newer arrivals wait their turn at the back of the visible stack.\r\n toasts: this.toastService\r\n .toasts()\r\n .filter((toast) => toast.position === position)\r\n .slice(0, Math.max(0, this.maxVisiblePerPosition())),\r\n })).filter((group) => group.toasts.length > 0),\r\n );\r\n\r\n /**\r\n * What the two permanently-mounted live regions in the template say right now, split by\r\n * urgency. The regions themselves are always in the DOM — that is the whole point of putting\r\n * them here rather than on `gog-toast`, whose host element only exists from the moment its\r\n * text does, which is exactly the case screen readers miss.\r\n *\r\n * Derived from `groups()` rather than from the raw service state so that what is announced\r\n * matches what is on screen: a toast queued beyond `maxVisiblePerPosition` is not visible yet\r\n * and must not be read out yet either.\r\n */\r\n protected readonly announcements = computed(() => {\r\n const visible = this.groups().flatMap((group) => group.toasts);\r\n return {\r\n polite: visible.filter((toast) => !ASSERTIVE_TYPES.includes(toast.type)).map(toAnnouncement),\r\n assertive: visible\r\n .filter((toast) => ASSERTIVE_TYPES.includes(toast.type))\r\n .map(toAnnouncement),\r\n };\r\n });\r\n\r\n protected trackGroup(_: number, group: { position: ToastPosition }): ToastPosition {\r\n return group.position;\r\n }\r\n\r\n protected isLeft(position: ToastPosition): boolean {\r\n return position.includes('left');\r\n }\r\n\r\n protected trackToast(_: number, toast: { id: string }): string {\r\n return toast.id;\r\n }\r\n\r\n protected trackAnnouncement(_: number, announcement: ToastAnnouncement): string {\r\n return announcement.key;\r\n }\r\n\r\n protected dismiss(id: string): void {\r\n this.toastService.dismiss(id);\r\n }\r\n}\r\n\r\nfunction toAnnouncement(toast: Toast): ToastAnnouncement {\r\n return { key: `${toast.id}:${toast.revision}`, message: toast.message };\r\n}\r\n","<!--\r\n Both regions stay mounted for the lifetime of the container, empty or not, so a screen reader\r\n has already picked them up by the time a message lands inside one. `aria-atomic=\"false\"` so\r\n only the newly added line is read, not the whole open stack again on every arrival.\r\n-->\r\n<div class=\"gog-visually-hidden\" aria-live=\"polite\" aria-atomic=\"false\">\r\n @for (announcement of announcements().polite; track trackAnnouncement($index, announcement)) {\r\n <p>{{ announcement.message }}</p>\r\n }\r\n</div>\r\n<div class=\"gog-visually-hidden\" aria-live=\"assertive\" aria-atomic=\"false\">\r\n @for (announcement of announcements().assertive; track trackAnnouncement($index, announcement)) {\r\n <p>{{ announcement.message }}</p>\r\n }\r\n</div>\r\n\r\n@for (group of groups(); track trackGroup($index, group)) {\r\n <div class=\"gog-toast-container gog-toast-container--{{ group.position }}\">\r\n @for (toast of group.toasts; track trackToast($index, toast); let toastIndex = $index) {\r\n <gog-toast\r\n [toast]=\"toast\"\r\n [isFront]=\"toastIndex === 0\"\r\n [class.slide-left]=\"isLeft(group.position)\"\r\n [style.--toast-stack-index]=\"toastIndex\"\r\n (dismissed)=\"dismiss($event)\"\r\n />\r\n }\r\n </div>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n contentChild,\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 { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogClearableState } from '../../shared/clearable-state';\r\nimport { GogFloatLabelState } from '../../shared/float-label-state';\r\nimport { GogFloatLabelVariant, GogInputMode, GogInputType, GogSize } from '../../shared/types';\r\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nconst DEFAULT_SHOW_SPIN_BUTTONS = true;\r\nconst DEFAULT_LABELS = {\r\n clear: 'Clear',\r\n increment: 'Increment',\r\n decrement: 'Decrement',\r\n showPassword: 'Show password',\r\n hidePassword: 'Hide password',\r\n} as const;\r\n/** Native `stepUp()`/`stepDown()` default when `step` is left unset. */\r\nconst DEFAULT_STEP = 1;\r\n\r\n/** Rounds to `step`'s own decimal precision, so e.g. repeated `0.1` steps don't drift to\r\n * `0.30000000000000004`. */\r\nfunction roundToStep(value: number, step: number): number {\r\n const decimals = (String(step).split('.')[1] ?? '').length;\r\n return decimals === 0 ? Math.round(value) : Number(value.toFixed(decimals));\r\n}\r\n\r\n/**\r\n * Arbitrary markup in the field's leading slot — an icon, a button, a prefix label:\r\n *\r\n * ```html\r\n * <gog-inputfield label=\"Amount\">\r\n * <span gogInputAddonStart>€</span>\r\n * </gog-inputfield>\r\n *\r\n * <gog-inputfield label=\"Search\">\r\n * <button gogInputAddonStart type=\"button\" aria-label=\"Search\" (click)=\"run()\">\r\n * <gog-icon name=\"check\" />\r\n * </button>\r\n * </gog-inputfield>\r\n * ```\r\n *\r\n * Unlike the deprecated `iconStartTemplate` / `iconStartFn` / `iconStartLabel` trio this\r\n * replaces, the projected element is a normal DOM element: it carries its own `aria-label`,\r\n * its own click handler, and its own disabled state, so the component needs no input per\r\n * capability. `iconStart` — a bare icon name — stays, since that really is the common case.\r\n */\r\n@Directive({ selector: '[gogInputAddonStart]' })\r\nexport class GogInputAddonStartDirective {}\r\n\r\n/**\r\n * Arbitrary markup in the field's trailing slot — see `GogInputAddonStartDirective`.\r\n *\r\n * On `type=\"password\"` the built-in show/hide toggle owns this slot and a projected end addon\r\n * is ignored, so the reveal control can never be accidentally replaced by a decorative one.\r\n */\r\n@Directive({ selector: '[gogInputAddonEnd]' })\r\nexport class GogInputAddonEndDirective {}\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 /** See `GogInputType` for why this is a subset of the native `type` list. */\r\n readonly type = input<GogInputType>('text');\r\n /** Defaults to 'current-password' for password fields, 'off' otherwise */\r\n readonly autocomplete = input('');\r\n /**\r\n * Native `readonly`: the value is still selectable, focusable and submitted with the form, but\r\n * cannot be edited. Distinct from `disabled`, which also takes the field out of the tab order,\r\n * greys it out and drops it from form submission.\r\n *\r\n * Suppresses the clear button and the number field's spin buttons for as long as it is on —\r\n * both promise an edit the field would refuse.\r\n */\r\n readonly readonly = input(false);\r\n /** Native `maxlength`. Unset (`null`), no limit is applied. */\r\n readonly maxlength = input<number | null>(null);\r\n /** Native `minlength`. Unset (`null`), no minimum is applied. */\r\n readonly minlength = input<number | null>(null);\r\n /** Native `pattern`, as a regular-expression source string. Unset (`''`), nothing is applied. */\r\n readonly pattern = input('');\r\n /**\r\n * Native `inputmode` — see `GogInputMode`. Unset, the browser infers a keyboard from `type`.\r\n */\r\n readonly inputMode = input<GogInputMode | null>(null);\r\n /**\r\n * Native `spellcheck`. Unset (`null`), the browser's own default applies; set `false` on\r\n * fields holding names, codes or identifiers, where the red underline is noise.\r\n */\r\n readonly spellcheck = input<boolean | null>(null);\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 /**\r\n * Whether a `type=\"number\"` field shows the library's own increment/decrement buttons in\r\n * place of the browser's native (and inconsistently-styled across platforms) spin glyphs.\r\n * The native glyphs are always hidden on a number field regardless of this — off just means\r\n * no stepper UI at all, not a fallback to the native one. Arrow-key stepping on the focused\r\n * field keeps working either way; that's native `<input type=\"number\">` behaviour, unrelated\r\n * to which glyphs are visible. Unset, falls back to `GOG_CONFIG.inputfield.showSpinButtons`,\r\n * then to `true`.\r\n */\r\n readonly showSpinButtons = input<boolean | undefined>(undefined);\r\n /** aria-label for the number field's increment button. Unset, falls back to `GOG_CONFIG.labels.increment`. */\r\n readonly incrementLabel = input<string | undefined>(undefined);\r\n /** aria-label for the number field's decrement button. Unset, falls back to `GOG_CONFIG.labels.decrement`. */\r\n readonly decrementLabel = input<string | undefined>(undefined);\r\n readonly errorMessage = input('');\r\n /**\r\n * See `GogErrorDisplay`. Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to\r\n * `'manual'` — matching every other control in the library.\r\n */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly name = input('');\r\n /**\r\n * The `<input>`'s `id`. Left unset, the field generates one — the label's `for` and the error\r\n * message's `aria-describedby` both need a real id, and a field that is silently unlabelled\r\n * without one is the wrong default. Set this only when something outside the component has to\r\n * reference the input by a known id.\r\n */\r\n readonly inputId = input('');\r\n readonly disabled = input(false);\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\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 /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<span gogInputAddonStart>` element instead. Removed in 21.5.0.\r\n */\r\n readonly iconStartTemplate = input<TemplateRef<unknown> | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<span gogInputAddonEnd>` element instead. Removed in 21.5.0.\r\n */\r\n readonly iconEndTemplate = input<TemplateRef<unknown> | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonStart>` element instead. Removed in 21.5.0. A projected button carries its own\r\n * `(click)` handler, so no input is needed for it.\r\n */\r\n readonly iconStartFn = input<(() => void) | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonEnd>` element instead. Removed in 21.5.0. A projected button carries its own\r\n * `(click)` handler, so no input is needed for it.\r\n */\r\n readonly iconEndFn = input<(() => void) | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonStart>` element instead. Removed in 21.5.0. Put `aria-label` on that button.\r\n */\r\n readonly iconStartLabel = input('');\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonEnd>` element instead. Removed in 21.5.0. Put `aria-label` on that button.\r\n */\r\n readonly iconEndLabel = input('');\r\n /** aria-label for the reveal-password button, shown when `type` is `'password'`. Unset, falls back to `GOG_CONFIG.labels.showPassword`. */\r\n readonly showPasswordLabel = input<string | undefined>(undefined);\r\n /** aria-label for the hide-password button, shown once the password is revealed. Unset, falls back to `GOG_CONFIG.labels.hidePassword`. */\r\n readonly hidePasswordLabel = input<string | undefined>(undefined);\r\n /**\r\n * Whether to offer a clear button once the field has text. Unset, falls back to\r\n * `GOG_CONFIG.control.clearable`, then to `false`.\r\n */\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /** Accessible name for the clear button. Unset, falls back to `GOG_CONFIG.labels.clear`. */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.variant`, then to `'none'` (off). */\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.showPlaceholder`, then to `false`. */\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\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 globalConfig = inject(GOG_CONFIG);\r\n private readonly cvaDisabled = signal(false);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n private readonly passwordVisible = signal(false);\r\n /** Set from `(focus)`/`(blur)` on the `<input>` — see `onFocus`/`onBlur`. */\r\n protected readonly isFocused = signal(false);\r\n\r\n /**\r\n * The single size modifier, replacing one `[class.gog-input-wrapper--<size>]` binding per size.\r\n * Empty for `'md'`: that is this component's default size and has no modifier rule of its own — every `gog-input-wrapper--*` chain bottoms out at it.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.resolvedSize() === 'md' ? '' : `gog-input-wrapper--${this.resolvedSize()}`,\r\n );\r\n\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(this.clearAriaLabel(), this.globalConfig.labels?.clear, DEFAULT_LABELS.clear),\r\n );\r\n protected readonly resolvedIncrementLabel = computed(() =>\r\n resolveConfigured(\r\n this.incrementLabel(),\r\n this.globalConfig.labels?.increment,\r\n DEFAULT_LABELS.increment,\r\n ),\r\n );\r\n protected readonly resolvedDecrementLabel = computed(() =>\r\n resolveConfigured(\r\n this.decrementLabel(),\r\n this.globalConfig.labels?.decrement,\r\n DEFAULT_LABELS.decrement,\r\n ),\r\n );\r\n\r\n protected readonly resolvedShowSpinButtons = computed(() =>\r\n resolveConfigured(\r\n this.showSpinButtons(),\r\n this.globalConfig.inputfield?.showSpinButtons,\r\n DEFAULT_SHOW_SPIN_BUTTONS,\r\n ),\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /** Disabled and read-only both refuse edits; the affordances that offer one key off this. */\r\n protected readonly isNotEditable = computed(() => this.isDisabled() || this.readonly());\r\n protected readonly isPasswordField = computed(() => this.type() === 'password');\r\n protected readonly isNumberField = computed(() => this.type() === 'number');\r\n protected readonly hasSpinButtons = computed(\r\n () => this.isNumberField() && this.resolvedShowSpinButtons() && !this.readonly(),\r\n );\r\n /** Current field value as a number, or `null` while empty. */\r\n private readonly numericValue = computed(() =>\r\n this.value() === '' ? null : Number(this.value()),\r\n );\r\n protected readonly isAtMin = computed(() => {\r\n const min = this.min();\r\n const current = this.numericValue();\r\n return min !== null && current !== null && current <= min;\r\n });\r\n protected readonly isAtMax = computed(() => {\r\n const max = this.max();\r\n const current = this.numericValue();\r\n return max !== null && current !== null && current >= max;\r\n });\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\r\n /** Fallback id, generated once per instance — see `resolvedInputId`. */\r\n private readonly autoId = nextGogControlId('gog-input');\r\n /** The consumer's `inputId` when given, otherwise the generated one. Never empty. */\r\n protected readonly resolvedInputId = computed(() => this.inputId() || this.autoId);\r\n /**\r\n * Only non-null while the error element is actually rendered — the template renders it on\r\n * `visibleError()`, and an `aria-describedby` pointing at an id that isn't in the DOM is worse\r\n * than none at all.\r\n */\r\n protected readonly errorId = computed(() =>\r\n this.visibleError() ? `${this.resolvedInputId()}-error` : null,\r\n );\r\n\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n // \"Has content\" for a text field is simply a non-empty value.\r\n computed(() => this.value() !== ''),\r\n this.globalConfig,\r\n );\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n computed(() => this.value() !== ''),\r\n this.isNotEditable,\r\n this.globalConfig,\r\n () => false,\r\n );\r\n /** Whether to render the clear button right now — see `GogClearableState`. */\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n /**\r\n * Both the stepper and the clear button are on screen — only possible on a `clearable`\r\n * number field with a value. Drives `.gog-input-wrapper--spin-clear`, which widens the end\r\n * gutter and shifts the clear button clear of the stepper; without it the two overlap.\r\n */\r\n protected readonly hasSpinAndClear = computed(\r\n () => this.hasSpinButtons() && this.showClear() && !this.isPasswordField(),\r\n );\r\n\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\r\n\r\n /** Projected `gogInputAddonStart` element, if any. */\r\n protected readonly addonStart = contentChild(GogInputAddonStartDirective);\r\n /** Projected `gogInputAddonEnd` element, if any. */\r\n protected readonly addonEnd = contentChild(GogInputAddonEndDirective);\r\n\r\n /**\r\n * Drives the wrapper's `--icon-start` class, which widens the field's leading gutter. Counts\r\n * a projected addon as well as the legacy icon inputs, or the addon would overlap the text.\r\n */\r\n protected readonly hasIconStart = computed(\r\n () => !!this.addonStart() || !!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 if (!this.isPasswordField()) return this.iconEndLabel();\r\n return this.passwordVisible()\r\n ? resolveConfigured(\r\n this.hidePasswordLabel(),\r\n this.globalConfig.labels?.hidePassword,\r\n DEFAULT_LABELS.hidePassword,\r\n )\r\n : resolveConfigured(\r\n this.showPasswordLabel(),\r\n this.globalConfig.labels?.showPassword,\r\n DEFAULT_LABELS.showPassword,\r\n );\r\n });\r\n protected readonly hasIconEnd = computed(\r\n () =>\r\n this.showClear() ||\r\n !!this.addonEnd() ||\r\n !!this.iconEndTemplate() ||\r\n !!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 /** Increments (`direction: 1`) or decrements (`direction: -1`) by `step`, clamped to min/max. */\r\n protected stepValue(direction: 1 | -1): void {\r\n if (this.isNotEditable()) return;\r\n\r\n const step = this.step() ?? DEFAULT_STEP;\r\n const current = this.numericValue() ?? this.min() ?? 0;\r\n let next = roundToStep(current + direction * step, step);\r\n\r\n const min = this.min();\r\n const max = this.max();\r\n if (min !== null) next = Math.max(next, min);\r\n if (max !== null) next = Math.min(next, max);\r\n\r\n this.value.set(String(next));\r\n this._onChange(next);\r\n }\r\n\r\n /**\r\n * Clears the field and notifies any attached form.\r\n *\r\n * The value written to the form control has to match what `onInput` writes when the user\r\n * empties the field by hand — `null` for a number field, `''` otherwise. Emitting `''` for a\r\n * number field put a string into a control typed `number | null`, which then failed\r\n * `Validators.min`-style checks and round-tripped the wrong type to the server.\r\n */\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.value.set('');\r\n this._onChange(this.isNumberField() ? null : '');\r\n this._onTouched();\r\n }\r\n\r\n onFocus(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n onBlur(): void {\r\n this.isFocused.set(false);\r\n this._onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-input-wrapper gog-contained-layout\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-input-wrapper--icon-start]=\"hasIconStart()\"\r\n [class.gog-input-wrapper--icon-end]=\"hasIconEnd() || hasSpinButtons()\"\r\n [class.gog-input-wrapper--spin-clear]=\"hasSpinAndClear()\"\r\n [class.gog-input-wrapper--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-input-wrapper--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-input-wrapper--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-input-wrapper--floated]=\"isFloatLabelFloated()\"\r\n>\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-input__label\" [attr.for]=\"resolvedInputId()\">{{ label() }}</label>\r\n }\r\n <div class=\"gog-input__field-container\">\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-input__label gog-input__label--float\" [attr.for]=\"resolvedInputId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n @if (addonStart()) {\r\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--start gog-input__addon\">\r\n <ng-content select=\"[gogInputAddonStart]\" />\r\n </span>\r\n } @else 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 [class.gog-input__field--spin-hidden]=\"isNumberField()\"\r\n [attr.id]=\"resolvedInputId()\"\r\n [type]=\"effectiveType()\"\r\n [attr.name]=\"name() || null\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [value]=\"value()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"readonly()\"\r\n [autocomplete]=\"effectiveAutocomplete()\"\r\n [attr.min]=\"min()\"\r\n [attr.max]=\"max()\"\r\n [attr.step]=\"step()\"\r\n [attr.maxlength]=\"maxlength()\"\r\n [attr.minlength]=\"minlength()\"\r\n [attr.pattern]=\"pattern() || null\"\r\n [attr.inputmode]=\"inputMode()\"\r\n [attr.spellcheck]=\"spellcheck()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <!--\r\n A password field's built-in show/hide toggle owns the end slot: it is the only control\r\n that reveals the value, so a projected addon must not be able to displace it.\r\n -->\r\n @if (hasSpinButtons()) {\r\n <span class=\"gog-input__spin\">\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__spin-btn gog-input__spin-btn--up\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"resolvedIncrementLabel()\"\r\n [disabled]=\"isDisabled() || isAtMax()\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"stepValue(1)\"\r\n >\r\n <gog-icon name=\"chevron-up\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__spin-btn gog-input__spin-btn--down\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"resolvedDecrementLabel()\"\r\n [disabled]=\"isDisabled() || isAtMin()\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"stepValue(-1)\"\r\n >\r\n <gog-icon name=\"chevron-down\" />\r\n </button>\r\n </span>\r\n }\r\n <!--\r\n The clear button sits outside the stepper's `@if` rather than in an `@else` branch: on a\r\n number field the two have to coexist, and the stepper owns the field's right edge while\r\n the clear button shifts left of it (`--spin-clear` on the wrapper widens the gutter). It\r\n still outranks a projected addon or a decorative end icon — those share one slot with it\r\n and only get it when there is nothing to clear.\r\n -->\r\n @if (showClear() && !isPasswordField()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__icon gog-inline-center gog-input__icon--end gog-input__icon--action gog-input__clear\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n } @else if (!hasSpinButtons()) {\r\n @if (addonEnd() && !isPasswordField()) {\r\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--end gog-input__addon\">\r\n <ng-content select=\"[gogInputAddonEnd]\" />\r\n </span>\r\n } @else 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 }\r\n </div>\r\n @if (visibleError()) {\r\n <span class=\"gog-input__error\" [attr.id]=\"errorId()\" role=\"alert\">{{ visibleError() }}</span>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n computed,\r\n DoCheck,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogClearableState } from '../../shared/clearable-state';\r\nimport { GogFloatLabelState } from '../../shared/float-label-state';\r\nimport { GogFloatLabelVariant, GogSize, GogTextareaResize } from '../../shared/types';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\n/** Matches the native `<textarea>`'s own out-of-the-box behaviour. */\r\nconst DEFAULT_RESIZE: GogTextareaResize = 'vertical';\r\nconst DEFAULT_CLEAR_LABEL = 'Clear';\r\n\r\n@Component({\r\n selector: 'gog-textarea',\r\n imports: [IconComponent],\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 /**\r\n * See `GogErrorDisplay`. Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to\r\n * `'manual'` — matching every other control in the library.\r\n */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly name = input('');\r\n /**\r\n * The `<textarea>`'s `id`. Left unset, the field generates one — see\r\n * `gog-inputfield`'s own `inputId` for why that is the default rather than an opt-in.\r\n */\r\n readonly inputId = input('');\r\n readonly disabled = input(false);\r\n /**\r\n * Native `readonly` — see `gog-inputfield`'s own `readonly` for how it differs from\r\n * `disabled`. Suppresses the clear button while on.\r\n */\r\n readonly readonly = input(false);\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n /** Native `rows` attribute, controlling the field's initial height. */\r\n readonly rows = input(4);\r\n /** Native `maxlength`. Unset (`null`), no limit is applied. */\r\n readonly maxlength = input<number | null>(null);\r\n /** Native `minlength`. Unset (`null`), no minimum is applied. */\r\n readonly minlength = input<number | null>(null);\r\n /** Native `spellcheck`. Unset (`null`), the browser's own default applies. */\r\n readonly spellcheck = input<boolean | null>(null);\r\n /**\r\n * Which direction(s) the field's own drag handle resizes it in — matches the native CSS\r\n * `resize` value space (`'vertical'`, `'horizontal'`, `'both'`, `'none'`). Unset, falls back\r\n * to `GOG_CONFIG.textarea.resize`, then to `'vertical'`, matching a plain `<textarea>`. The\r\n * handle itself is restyled to be more visible than the browser's default glyph; `'none'`\r\n * removes it entirely.\r\n */\r\n readonly resize = input<GogTextareaResize | undefined>(undefined);\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 * Whether to offer a clear button once the field has text. Unset, falls back to\r\n * `GOG_CONFIG.control.clearable`, then to `false`.\r\n */\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /** Accessible name for the clear button. Unset, falls back to `GOG_CONFIG.labels.clear`. */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.variant`, then to `'none'` (off). */\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.showPlaceholder`, then to `false`. */\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\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 globalConfig = inject(GOG_CONFIG);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly cvaDisabled = signal(false);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly resolvedResize = computed(() =>\r\n resolveConfigured(this.resize(), this.globalConfig.textarea?.resize, DEFAULT_RESIZE),\r\n );\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n /** Set from `(focus)`/`(blur)` on the `<textarea>` — see `onFocus`/`onBlur`. */\r\n protected readonly isFocused = signal(false);\r\n\r\n private readonly fieldRef = viewChild.required<ElementRef<HTMLTextAreaElement>>('field');\r\n /**\r\n * Width of the textarea's own scrollbar, published so the clear button can clear it.\r\n *\r\n * It has to be measured: the width is platform- and settings-dependent (0 on overlay\r\n * scrollbars, ~15-19px on classic ones), and it only exists once the content overflows. The\r\n * pure-CSS alternative, `scrollbar-gutter: stable`, reserves the gutter even when the field\r\n * isn't scrolling, which shifts the resting layout of every textarea.\r\n */\r\n protected readonly scrollbarWidth = signal(0);\r\n /**\r\n * How far the field's own right/bottom edge currently sits from its container's — 0 unless\r\n * the user has dragged the resize handle to make the field narrower/shorter than its\r\n * container. The resize grip is anchored to the container (a `<textarea>` can't reliably\r\n * host `::after`), so without this it stays put at the container's original corner instead\r\n * of following the field's own as it's resized.\r\n */\r\n protected readonly resizeInsetRight = signal(0);\r\n protected readonly resizeInsetBottom = signal(0);\r\n\r\n /**\r\n * The single size modifier, replacing one `[class.gog-input-wrapper--<size>]` binding per size.\r\n * Empty for `'md'`: that is this component's default size and has no modifier rule of its own — every `gog-input-wrapper--*` chain bottoms out at it.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.resolvedSize() === 'md' ? '' : `gog-input-wrapper--${this.resolvedSize()}`,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /** Disabled and read-only both refuse edits — see `gog-inputfield`. */\r\n protected readonly isNotEditable = computed(() => this.isDisabled() || this.readonly());\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(this.clearAriaLabel(), this.globalConfig.labels?.clear, DEFAULT_CLEAR_LABEL),\r\n );\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n\r\n /** Fallback id, generated once per instance — see `resolvedInputId`. */\r\n private readonly autoId = nextGogControlId('gog-textarea');\r\n /** The consumer's `inputId` when given, otherwise the generated one. Never empty. */\r\n protected readonly resolvedInputId = computed(() => this.inputId() || this.autoId);\r\n /** Non-null only while the error element is actually rendered — see `gog-inputfield`. */\r\n protected readonly errorId = computed(() =>\r\n this.visibleError() ? `${this.resolvedInputId()}-error` : null,\r\n );\r\n\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n // \"Has content\" for a textarea is simply a non-empty value.\r\n computed(() => this.value() !== ''),\r\n this.globalConfig,\r\n );\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n computed(() => this.value() !== ''),\r\n this.isNotEditable,\r\n this.globalConfig,\r\n () => false,\r\n );\r\n /** Whether to render the clear button right now — see `GogClearableState`. */\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\r\n\r\n private _onChange: (val: string) => void = () => {};\r\n private _onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n // Re-measured after every render: the scrollbar appears and disappears as the content grows\r\n // past the visible rows, and `rows`/`size` can change it too.\r\n afterRenderEffect(() => {\r\n const el = this.fieldRef().nativeElement;\r\n // touch the value so this re-runs as the content changes\r\n this.value();\r\n this.scrollbarWidth.set(el.offsetWidth - el.clientWidth);\r\n });\r\n\r\n // Tracks manual drags of the resize handle — see `resizeInsetRight`/`resizeInsetBottom`.\r\n // A plain `afterRenderEffect` can't see this: dragging the handle doesn't touch any\r\n // Angular-owned state, so nothing would ever re-run it; a `ResizeObserver` is the only\r\n // thing that actually notices the field's own box changing size.\r\n afterNextRender(() => {\r\n const el = this.fieldRef().nativeElement;\r\n const container = el.parentElement as HTMLElement;\r\n // Not implemented by jsdom (so: absent in unit tests) and by very old browsers, which\r\n // then simply keep the field glued to the container's own corner, as before this input.\r\n if (typeof ResizeObserver === 'undefined') return;\r\n\r\n const measure = () => {\r\n this.resizeInsetRight.set(Math.max(0, container.clientWidth - el.offsetWidth));\r\n this.resizeInsetBottom.set(Math.max(0, container.clientHeight - el.offsetHeight));\r\n };\r\n const observer = new ResizeObserver(measure);\r\n observer.observe(el);\r\n this.destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n\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 /** Clears the field and notifies any attached form, then returns focus to the input. */\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.value.set('');\r\n this._onChange('');\r\n this._onTouched();\r\n }\r\n\r\n onFocus(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n onBlur(): void {\r\n this.isFocused.set(false);\r\n this._onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-input-wrapper gog-contained-layout\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-input-wrapper--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-input-wrapper--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-input-wrapper--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-input-wrapper--floated]=\"isFloatLabelFloated()\"\r\n>\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-input__label\" [attr.for]=\"resolvedInputId()\">{{ label() }}</label>\r\n }\r\n <div\r\n class=\"gog-input__field-container\"\r\n [class.gog-input__field-container--resizable]=\"resolvedResize() !== 'none' && !isDisabled()\"\r\n [style.--gog-textarea-resize-inset-right.px]=\"resizeInsetRight()\"\r\n [style.--gog-textarea-resize-inset-bottom.px]=\"resizeInsetBottom()\"\r\n >\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-input__label gog-input__label--float\" [attr.for]=\"resolvedInputId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n <textarea\r\n #field\r\n class=\"gog-input__field gog-textarea__field\"\r\n [class.gog-input__field--error]=\"hasError()\"\r\n [class.gog-textarea__field--resize-vertical]=\"resolvedResize() === 'vertical'\"\r\n [class.gog-textarea__field--resize-horizontal]=\"resolvedResize() === 'horizontal'\"\r\n [class.gog-textarea__field--resize-both]=\"resolvedResize() === 'both'\"\r\n [class.gog-textarea__field--resize-none]=\"resolvedResize() === 'none'\"\r\n [attr.id]=\"resolvedInputId()\"\r\n [attr.name]=\"name() || null\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [rows]=\"rows()\"\r\n [value]=\"value()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"readonly()\"\r\n [attr.maxlength]=\"maxlength()\"\r\n [attr.minlength]=\"minlength()\"\r\n [attr.spellcheck]=\"spellcheck()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n ></textarea>\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__clear gog-textarea__clear gog-inline-center\"\r\n [style.--gog-textarea-scrollbar-width.px]=\"scrollbarWidth()\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n </div>\r\n @if (visibleError()) {\r\n <span class=\"gog-input__error\" [attr.id]=\"errorId()\" role=\"alert\">{{ visibleError() }}</span>\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 {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n TemplateRef,\r\n computed,\r\n contentChild,\r\n inject,\r\n input,\r\n} 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/**\r\n * Custom markup for the tag's leading icon:\r\n *\r\n * ```html\r\n * <ng-template gogTagIcon><my-icon /></ng-template>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogTagIcon]' })\r\nexport class GogTagIconDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\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 /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogTagIcon>` into the component instead. Removed in 21.5.0.\r\n */\r\n readonly iconTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogTagIcon` template; wins over the deprecated `iconTemplate` input. */\r\n protected readonly iconSlot = contentChild(GogTagIconDirective);\r\n readonly fullWidth = input(false);\r\n\r\n protected readonly hasIcon = computed(\r\n () => !!this.iconSlot() || 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()) {\r\n <gog-icon\r\n class=\"gog-tag__icon\"\r\n [ariaHidden]=\"true\"\r\n [name]=\"iconName() ?? 'info'\"\r\n [template]=\"iconSlot()?.templateRef ?? iconTemplate()\"\r\n />\r\n}\r\n\r\n<span class=\"gog-tag__content\">\r\n <ng-content></ng-content>\r\n</span>\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/**\r\n * @deprecated since 21.2.2 (2026-07-30) — use `GogDropdownOption` instead. Removed in 21.4.0.\r\n */\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 host: {\r\n // Only bites when the control has opted out of full width; otherwise the container decides.\r\n '[style.--gog-select-min-width]': 'minWidth()',\r\n },\r\n})\r\nexport class SelectComponent<\r\n TOption = GogDropdownOption,\r\n TValue = string | number | null,\r\n> extends GogDropdownBase<TValue, TOption> {\r\n readonly inputId = input('');\r\n\r\n /**\r\n * Two-way bindable selected value: `[(value)]=\"signal\"`.\r\n *\r\n * Carries whatever `optionValue` resolves to — an id by default, or the option object itself\r\n * when `optionValue` is `null`. `TValue` is inferred from the signal you bind, so a\r\n * `WritableSignal<string | null>` keeps typing exactly as before.\r\n */\r\n readonly value = model<TValue>(null as TValue);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n /** A cleared select is `null`, whatever `TValue` the consumer bound. */\r\n protected readonly emptyValue = null as TValue;\r\n protected readonly optionClass = 'gog-select__option';\r\n protected readonly triggerClass = 'gog-select__control';\r\n /** Opt-in: a select had no clear affordance before 21.3.0. */\r\n protected readonly clearableByDefault = false;\r\n protected readonly sizeBlockClass = 'gog-select';\r\n protected readonly panelBlockClass = 'gog-select__dropdown';\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 () =>\r\n this.options().find((option) => this.sameValue(this.valueOf(option), this.value())) ?? null,\r\n );\r\n protected readonly selectedLabel = computed(() => {\r\n const option = this.selectedOption();\r\n return option === null ? '' : this.labelOf(option);\r\n });\r\n protected readonly hasFloatValue = computed(() => this.value() != null);\r\n\r\n protected isSelected(option: TOption): boolean {\r\n return this.sameValue(this.valueOf(option), this.value());\r\n }\r\n\r\n protected selectOption(option: TOption, event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.isOptionDisabled(option)) return;\r\n\r\n this.commitValue(this.valueOf(option) as TValue);\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--clearable]=\"showClear()\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-select--disabled]=\"isDisabled()\"\r\n [class.gog-select--open]=\"isOpen()\"\r\n [class.gog-select--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-select--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-select--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-select--floated]=\"isFloatLabelFloated()\"\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() && resolvedFloatLabel() === 'none') {\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 @if (label() && isFloatLabelActive()) {\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 gog-select__label--float\" [id]=\"labelId()\">{{\r\n label()\r\n }}</label>\r\n }\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 (focus)=\"onFocusIn()\"\r\n (blur)=\"onFocusOut()\"\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 {{ selectedLabel() || effectivePlaceholder() }}\r\n </span>\r\n\r\n <span class=\"gog-select__chevron\" aria-hidden=\"true\">\r\n <gog-icon\r\n [template]=\"chevronSlot()?.templateRef ?? chevronTemplate()\"\r\n name=\"chevron-down\"\r\n />\r\n </span>\r\n </button>\r\n\r\n <!--\r\n A sibling of the trigger, not a child: `.gog-select__control` is a <button>, and nesting\r\n one button inside another is invalid HTML. It is positioned over the trigger's right edge\r\n by the stylesheet, which also reserves room for it so it never covers the value text.\r\n -->\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-select__clear gog-inline-center\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\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]=\"!resolvedAppendToBody() && dropdownDirectionState() === 'up'\"\r\n [class.gog-select__dropdown--portal]=\"resolvedAppendToBody()\"\r\n [class]=\"panelSizeClass()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"resolvedAppendToBody() ? resolvedPanelWidth() : null\"\r\n [style.min-width]=\"resolvedAppendToBody() ? resolvedPanelMinWidth() : null\"\r\n [style.max-height]=\"resolvedAppendToBody() ? 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 @if (resolvedFilter() && resolvedFilterPosition() === 'top') {\r\n <div class=\"gog-select__filter gog-select__filter--top\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-select__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\r\n }\r\n <gog-scroll\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n class=\"gog-select__scroll\"\r\n >\r\n @if (visibleOptions().length === 0) {\r\n <p class=\"gog-select__empty\">{{ filterEmptyMessage() }}</p>\r\n }\r\n @for (option of visibleOptions(); track valueOf(option)) {\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)\"\r\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\r\n [class.gog-select__option--selected]=\"isSelected(option)\"\r\n [class.gog-select__option--disabled]=\"isOptionDisabled(option)\"\r\n (click)=\"selectOption(option, $event)\"\r\n (keydown)=\"onOptionKeydown($event)\"\r\n >\r\n @if (optionSlot(); as slot) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n slot.templateRef;\r\n context: optionContext(option, isSelected(option))\r\n \"\r\n />\r\n } @else {\r\n <span class=\"gog-select__option-mark\" aria-hidden=\"true\">\r\n @if (isSelected(option)) {\r\n <gog-icon name=\"check\" />\r\n }\r\n </span>\r\n <span class=\"gog-select__option-label\">{{ labelOf(option) }}</span>\r\n }\r\n </button>\r\n }\r\n </gog-scroll>\r\n @if (resolvedFilter() && resolvedFilterPosition() === 'bottom') {\r\n <div class=\"gog-select__filter gog-select__filter--bottom\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-select__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, TemplateRef, computed, input } from '@angular/core';\r\n\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\nimport { GogTooltipSide } from '../../shared/tooltip-position';\r\n\r\n/**\r\n * The visible bubble, created on demand by `GogTooltipOverlay` and moved into `document.body`.\r\n * Not exported from `public-api.ts` — `[gogTooltip]` is the only public surface; this is an\r\n * implementation detail of how it renders, same relationship as `gog-select`'s panel template\r\n * to `GogDropdownOverlay`.\r\n *\r\n * Content always renders inside `gog-scroll` (capped at `--gog-tooltip-max-height`), the same\r\n * pattern `gog-dialog`'s body and `gog-select`'s panel already use — see\r\n * `styling.instructions.md`'s \"Scrollable content\" for why every internal scroll region in\r\n * this library goes through it instead of a raw `overflow: auto`. Content shorter than the\r\n * cap is unaffected: `gog-scroll` only ever shows a track once its content actually overflows.\r\n */\r\n@Component({\r\n selector: 'gog-tooltip-bubble',\r\n imports: [NgTemplateOutlet, ScrollComponent],\r\n templateUrl: './tooltip-bubble.component.html',\r\n styleUrl: './tooltip-bubble.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-tooltip',\r\n role: 'tooltip',\r\n '[attr.id]': 'bubbleId()',\r\n '[class.gog-tooltip--top]': \"side() === 'top'\",\r\n '[class.gog-tooltip--bottom]': \"side() === 'bottom'\",\r\n '[class.gog-tooltip--left]': \"side() === 'left'\",\r\n '[class.gog-tooltip--right]': \"side() === 'right'\",\r\n '[class.gog-tooltip--visible]': 'visible()',\r\n '[class]': 'extraClass()',\r\n '[style.top.px]': 'top()',\r\n '[style.left.px]': 'left()',\r\n '[style.z-index]': 'zIndex()',\r\n },\r\n})\r\nexport class GogTooltipBubbleComponent {\r\n readonly bubbleId = input<string>('');\r\n readonly content = input<string | TemplateRef<unknown> | null>(null);\r\n readonly side = input<GogTooltipSide>('top');\r\n readonly top = input(0);\r\n readonly left = input(0);\r\n /** Toggled a frame after insertion so the enter transition has a 0 -> 1 opacity to run. */\r\n readonly visible = input(false);\r\n /**\r\n * Explicit stacking order resolved by the directive from the trigger's inherited\r\n * `--gog-tooltip-z` (see `resolveTooltipZIndex`), or null to leave it to the stylesheet's\r\n * `var(--gog-tooltip-z)`. Needed only because the bubble is moved to `document.body` and\r\n * so no longer inherits a `--gog-tooltip-z` a dialog panel raised on itself — same reason\r\n * `gog-select`'s appended panel resolves its own `z-index` instead of trusting the cascade.\r\n */\r\n readonly zIndex = input<number | null>(null);\r\n /**\r\n * Extra class(es) from the directive's `gogTooltipClass`, applied straight to the bubble.\r\n * The bubble sits in `document.body`, outside any scoped ancestor a consumer might set a\r\n * `--gog-tooltip-*` override on, so a class targeting the bubble directly is the only way\r\n * to restyle one specific tooltip instance — see `styling.instructions.md`'s \"Panels\r\n * rendered outside the component subtree\".\r\n */\r\n readonly extraClass = input('');\r\n\r\n protected readonly templateContent = computed(() => {\r\n const value = this.content();\r\n return value instanceof TemplateRef ? value : null;\r\n });\r\n protected readonly textContent = computed(() => {\r\n const value = this.content();\r\n return typeof value === 'string' ? value : '';\r\n });\r\n}\r\n","<gog-scroll\r\n class=\"gog-tooltip__scroll\"\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n>\r\n @if (templateContent(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\r\n } @else {\r\n {{ textContent() }}\r\n }\r\n</gog-scroll>\r\n<span class=\"gog-tooltip__arrow\" aria-hidden=\"true\"></span>\r\n","import { ComponentRef, ViewContainerRef } from '@angular/core';\r\n\r\nimport { GogTooltipBubbleComponent } from '../components/tooltip/tooltip-bubble.component';\r\n\r\n/**\r\n * Creates the tooltip bubble on demand and moves it into `document.body`, same reasoning\r\n * as `GogDropdownOverlay`: a `position: fixed` bubble needs to sit outside whatever\r\n * `overflow: hidden`/`transform` ancestors the trigger has, or it could get clipped or\r\n * mispositioned. Built on `ViewContainerRef.createComponent` + relocating the resulting\r\n * node rather than `GogDropdownOverlay`'s `ApplicationRef` + `TemplateRef` approach,\r\n * because the bubble's content is dynamic per-directive-instance data (a string or\r\n * `TemplateRef` set at open time), not a `<ng-template>` declared in some component's own\r\n * markup — moving the node after `createComponent` is the same portal technique, it just\r\n * starts from a component type instead of a template.\r\n */\r\nexport class GogTooltipOverlay {\r\n private componentRef: ComponentRef<GogTooltipBubbleComponent> | null = null;\r\n\r\n constructor(\r\n private readonly viewContainerRef: ViewContainerRef,\r\n private readonly document: Document,\r\n ) {}\r\n\r\n get isAttached(): boolean {\r\n return this.componentRef !== null;\r\n }\r\n\r\n get bubbleElement(): HTMLElement | null {\r\n return (this.componentRef?.location.nativeElement as HTMLElement | undefined) ?? null;\r\n }\r\n\r\n attach(themeSource: Element | null): ComponentRef<GogTooltipBubbleComponent> {\r\n this.detach();\r\n\r\n this.componentRef = this.viewContainerRef.createComponent(GogTooltipBubbleComponent);\r\n const el = this.componentRef.location.nativeElement as HTMLElement;\r\n\r\n // See GogDropdownOverlay.attach — data-theme can be scoped to any subtree, not just\r\n // :root, so it has to be copied from the trigger's nearest themed ancestor rather than\r\n // assumed from the document.\r\n const themedAncestor = themeSource?.closest('[data-theme]');\r\n const theme = themedAncestor?.getAttribute('data-theme');\r\n if (theme) {\r\n el.setAttribute('data-theme', theme);\r\n }\r\n\r\n this.document.body.appendChild(el);\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n\r\n return this.componentRef;\r\n }\r\n\r\n detach(): void {\r\n this.componentRef?.destroy();\r\n this.componentRef = null;\r\n }\r\n}\r\n","import { GogTooltipPosition } from './types';\r\n\r\nexport type GogTooltipSide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\nexport interface GogTooltipTargetRect {\r\n top: number;\r\n bottom: number;\r\n left: number;\r\n right: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface GogTooltipSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface GogTooltipViewport {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface GogTooltipPlacement {\r\n side: GogTooltipSide;\r\n top: number;\r\n left: number;\r\n}\r\n\r\nconst DEFAULT_GAP = 8;\r\nconst DEFAULT_VIEWPORT_PADDING = 8;\r\n\r\nfunction spaceFor(\r\n side: GogTooltipSide,\r\n target: GogTooltipTargetRect,\r\n viewport: GogTooltipViewport,\r\n): number {\r\n switch (side) {\r\n case 'top':\r\n return target.top;\r\n case 'bottom':\r\n return viewport.height - target.bottom;\r\n case 'left':\r\n return target.left;\r\n case 'right':\r\n return viewport.width - target.right;\r\n }\r\n}\r\n\r\nfunction fits(\r\n side: GogTooltipSide,\r\n target: GogTooltipTargetRect,\r\n bubble: GogTooltipSize,\r\n viewport: GogTooltipViewport,\r\n gap: number,\r\n viewportPadding: number,\r\n): boolean {\r\n const needed =\r\n (side === 'top' || side === 'bottom' ? bubble.height : bubble.width) + gap + viewportPadding;\r\n return spaceFor(side, target, viewport) >= needed;\r\n}\r\n\r\nconst OPPOSITE: Record<GogTooltipSide, GogTooltipSide> = {\r\n top: 'bottom',\r\n bottom: 'top',\r\n left: 'right',\r\n right: 'left',\r\n};\r\n\r\n/**\r\n * Picks which side the bubble renders on. `'auto'` tries top, bottom, right, left in that\r\n * order — top-first matches the conventional tooltip default — and falls back to whichever\r\n * side has the most room if the bubble doesn't fully fit anywhere. An explicit side flips to\r\n * its opposite when it has no room but the opposite does, same as `resolveDropdownDirection`\r\n * does for up/down; unlike that helper, a request for a specific side is honoured as-is\r\n * (no flip) whenever it fits, since the caller asked for that side deliberately.\r\n */\r\nexport function resolveTooltipSide(\r\n position: GogTooltipPosition,\r\n target: GogTooltipTargetRect,\r\n bubble: GogTooltipSize,\r\n viewport: GogTooltipViewport,\r\n gap = DEFAULT_GAP,\r\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\r\n): GogTooltipSide {\r\n if (position !== 'auto') {\r\n if (fits(position, target, bubble, viewport, gap, viewportPadding)) return position;\r\n const opposite = OPPOSITE[position];\r\n return fits(opposite, target, bubble, viewport, gap, viewportPadding) ? opposite : position;\r\n }\r\n\r\n const preferenceOrder: GogTooltipSide[] = ['top', 'bottom', 'right', 'left'];\r\n const fitting = preferenceOrder.find((side) =>\r\n fits(side, target, bubble, viewport, gap, viewportPadding),\r\n );\r\n if (fitting) return fitting;\r\n\r\n return preferenceOrder.reduce((best, side) =>\r\n spaceFor(side, target, viewport) > spaceFor(best, target, viewport) ? side : best,\r\n );\r\n}\r\n\r\n/**\r\n * Resolves the bubble's side and its `position: fixed` top/left, centered on the target's\r\n * midpoint along the cross axis and clamped so it never renders past the viewport edge —\r\n * the centering can push it there for a target near a corner.\r\n */\r\nexport function resolveTooltipPlacement(\r\n position: GogTooltipPosition,\r\n target: GogTooltipTargetRect,\r\n bubble: GogTooltipSize,\r\n viewport: GogTooltipViewport,\r\n gap = DEFAULT_GAP,\r\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\r\n): GogTooltipPlacement {\r\n const side = resolveTooltipSide(position, target, bubble, viewport, gap, viewportPadding);\r\n\r\n const centerX = target.left + target.width / 2;\r\n const centerY = target.top + target.height / 2;\r\n\r\n let top: number;\r\n let left: number;\r\n\r\n switch (side) {\r\n case 'top':\r\n top = target.top - gap - bubble.height;\r\n left = centerX - bubble.width / 2;\r\n break;\r\n case 'bottom':\r\n top = target.bottom + gap;\r\n left = centerX - bubble.width / 2;\r\n break;\r\n case 'left':\r\n top = centerY - bubble.height / 2;\r\n left = target.left - gap - bubble.width;\r\n break;\r\n case 'right':\r\n top = centerY - bubble.height / 2;\r\n left = target.right + gap;\r\n break;\r\n }\r\n\r\n const maxLeft = Math.max(viewportPadding, viewport.width - bubble.width - viewportPadding);\r\n const maxTop = Math.max(viewportPadding, viewport.height - bubble.height - viewportPadding);\r\n left = Math.min(Math.max(left, viewportPadding), maxLeft);\r\n top = Math.min(Math.max(top, viewportPadding), maxTop);\r\n\r\n return { side, top, left };\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ComponentRef,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n ViewContainerRef,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { GOG_CONFIG } from '../../shared/config';\r\nimport { GogTooltipOverlay } from '../../shared/tooltip-overlay';\r\nimport {\r\n GogTooltipTargetRect,\r\n GogTooltipViewport,\r\n resolveTooltipPlacement,\r\n} from '../../shared/tooltip-position';\r\nimport { GogTooltipPosition } from '../../shared/types';\r\nimport { GogTooltipBubbleComponent } from './tooltip-bubble.component';\r\n\r\nconst DEFAULT_SHOW_DELAY = 300;\r\nconst DEFAULT_HIDE_DELAY = 100;\r\nconst DEFAULT_POSITION: GogTooltipPosition = 'auto';\r\nconst DEFAULT_GAP = 8;\r\nconst DEFAULT_Z_INDEX = 400;\r\nconst VIEWPORT_PADDING = 8;\r\n\r\nlet nextUid = 0;\r\n\r\n/**\r\n * Adds a hover/focus tooltip to any element — a `gog-*` component's host tag or a plain\r\n * native one — without that element needing to know anything about it:\r\n * `<button gogTooltip=\"Save changes\">` or `<gog-chip [gogTooltip]=\"hint\">` both just work,\r\n * since this only ever reads the host `ElementRef` and never assumes what created it.\r\n *\r\n * The bubble itself is a separate component (`GogTooltipBubbleComponent`) created on demand\r\n * and moved into `document.body` via `GogTooltipOverlay` — see that file for why a portal is\r\n * necessary here (clipping/position ancestors) and why it isn't built on `GogDropdownOverlay`.\r\n */\r\n@Directive({\r\n selector: '[gogTooltip]',\r\n host: {\r\n '[attr.aria-describedby]': 'describedById()',\r\n '(mouseenter)': 'onPointerEnter()',\r\n '(mouseleave)': 'onPointerLeave()',\r\n '(focusin)': 'onFocusIn()',\r\n '(focusout)': 'onFocusOut()',\r\n '(keydown.escape)': 'onEscape()',\r\n },\r\n})\r\nexport class GogTooltipDirective {\r\n /** The hint text, or a `TemplateRef` for richer content. Empty/null shows nothing. */\r\n readonly gogTooltip = input<string | TemplateRef<unknown> | null>(null);\r\n /** Unset, falls back to `GOG_CONFIG.tooltip.position`, then to `'auto'`. */\r\n readonly gogTooltipPosition = input<GogTooltipPosition | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.tooltip.showDelay`, then to `300` (ms). */\r\n readonly gogTooltipShowDelay = input<number | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.tooltip.hideDelay`, then to `100` (ms). */\r\n readonly gogTooltipHideDelay = input<number | undefined>(undefined);\r\n readonly gogTooltipDisabled = input(false);\r\n /**\r\n * Extra class(es) applied to the bubble itself, for restyling one specific tooltip\r\n * instance. The bubble is appended to `document.body`, so a `--gog-tooltip-*` override\r\n * scoped to an ancestor (anything short of `:root`) never reaches it — a class targeting\r\n * the bubble directly, e.g. `.my-tooltip { --gog-tooltip-bg: gold; }`, is what does.\r\n */\r\n readonly gogTooltipClass = input('');\r\n\r\n private readonly elRef = inject(ElementRef<HTMLElement>);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private readonly uid = `gog-tooltip-${++nextUid}`;\r\n private readonly overlay = new GogTooltipOverlay(this.viewContainerRef, this.document);\r\n\r\n private readonly isVisible = signal(false);\r\n protected readonly describedById = computed(() => (this.isVisible() ? this.uid : null));\r\n\r\n private readonly resolvedPosition = computed(\r\n () => this.gogTooltipPosition() ?? this.globalConfig.tooltip?.position ?? DEFAULT_POSITION,\r\n );\r\n private readonly resolvedShowDelay = computed(\r\n () => this.gogTooltipShowDelay() ?? this.globalConfig.tooltip?.showDelay ?? DEFAULT_SHOW_DELAY,\r\n );\r\n private readonly resolvedHideDelay = computed(\r\n () => this.gogTooltipHideDelay() ?? this.globalConfig.tooltip?.hideDelay ?? DEFAULT_HIDE_DELAY,\r\n );\r\n\r\n private activeRef: ComponentRef<GogTooltipBubbleComponent> | null = null;\r\n private showTimer: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\r\n private repositionFrame: number | null = null;\r\n private readonly onReflow = () => this.scheduleReposition();\r\n /**\r\n * Bound to the bubble itself (see `show()`) so moving the pointer off the trigger and\r\n * onto the bubble — to read more of it, or to scroll one tall enough to need it — cancels\r\n * the pending hide instead of racing it; leaving the bubble then re-queues the same hide\r\n * delay leaving the trigger would. WCAG 2.1 SC 1.4.13 \"hoverable\" requires exactly this:\r\n * hover-triggered content has to stay visible while the pointer is over the content, not\r\n * just the trigger.\r\n */\r\n private readonly onBubbleMouseEnter = () => this.cancelTimers();\r\n private readonly onBubbleMouseLeave = () => this.queueHide();\r\n\r\n constructor() {\r\n this.destroyRef.onDestroy(() => this.cleanup());\r\n }\r\n\r\n protected onPointerEnter(): void {\r\n this.queueShow();\r\n }\r\n\r\n protected onPointerLeave(): void {\r\n this.queueHide();\r\n }\r\n\r\n protected onFocusIn(): void {\r\n this.queueShow();\r\n }\r\n\r\n protected onFocusOut(): void {\r\n this.queueHide();\r\n }\r\n\r\n protected onEscape(): void {\r\n if (!this.isVisible()) return;\r\n this.cancelTimers();\r\n this.hide();\r\n }\r\n\r\n private queueShow(): void {\r\n if (!this.isBrowser || this.gogTooltipDisabled() || !this.gogTooltip() || this.isVisible()) {\r\n return;\r\n }\r\n this.cancelTimers();\r\n this.showTimer = setTimeout(() => {\r\n this.showTimer = null;\r\n this.show();\r\n }, this.resolvedShowDelay());\r\n }\r\n\r\n private queueHide(): void {\r\n this.cancelTimers();\r\n if (!this.isVisible()) return;\r\n this.hideTimer = setTimeout(() => {\r\n this.hideTimer = null;\r\n this.hide();\r\n }, this.resolvedHideDelay());\r\n }\r\n\r\n private cancelTimers(): void {\r\n if (this.showTimer !== null) {\r\n clearTimeout(this.showTimer);\r\n this.showTimer = null;\r\n }\r\n if (this.hideTimer !== null) {\r\n clearTimeout(this.hideTimer);\r\n this.hideTimer = null;\r\n }\r\n }\r\n\r\n private show(): void {\r\n const content = this.gogTooltip();\r\n if (!this.isBrowser || !content || this.isVisible()) return;\r\n\r\n const hostEl = this.elRef.nativeElement;\r\n const ref = this.overlay.attach(hostEl);\r\n this.activeRef = ref;\r\n this.isVisible.set(true);\r\n\r\n const bubbleEl = this.overlay.bubbleElement;\r\n bubbleEl?.addEventListener('mouseenter', this.onBubbleMouseEnter);\r\n bubbleEl?.addEventListener('mouseleave', this.onBubbleMouseLeave);\r\n\r\n ref.setInput('bubbleId', this.uid);\r\n ref.setInput('content', content);\r\n ref.setInput('zIndex', this.resolveZIndex(hostEl));\r\n ref.setInput('extraClass', this.gogTooltipClass());\r\n // setInput alone doesn't flush to the DOM (that happens on the next change-detection\r\n // pass) — without this, applyPlacement below would measure the bubble before its real\r\n // content ever rendered, i.e. an empty box a few px wide/tall instead of its actual\r\n // size, which is exactly what put the bubble in the wrong place.\r\n ref.changeDetectorRef.detectChanges();\r\n this.applyPlacement(ref, hostEl);\r\n\r\n // Set on a later frame so the initial (opacity: 0, scale: 0.96) state the stylesheet\r\n // starts from actually paints before flipping to --visible — flipping both in the same\r\n // tick would let the browser coalesce them into one style recalc with no transition.\r\n requestAnimationFrame(() => {\r\n if (this.activeRef === ref) {\r\n ref.setInput('visible', true);\r\n }\r\n });\r\n\r\n window.addEventListener('scroll', this.onReflow, { passive: true, capture: true });\r\n window.addEventListener('resize', this.onReflow, { passive: true });\r\n }\r\n\r\n private hide(): void {\r\n if (!this.isVisible()) return;\r\n\r\n this.isVisible.set(false);\r\n this.activeRef = null;\r\n this.overlay.detach();\r\n\r\n window.removeEventListener('scroll', this.onReflow, { capture: true });\r\n window.removeEventListener('resize', this.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 private scheduleReposition(): void {\r\n if (this.repositionFrame !== null || !this.activeRef) return;\r\n\r\n this.repositionFrame = requestAnimationFrame(() => {\r\n this.repositionFrame = null;\r\n if (this.activeRef) {\r\n this.applyPlacement(this.activeRef, this.elRef.nativeElement);\r\n }\r\n });\r\n }\r\n\r\n private applyPlacement(ref: ComponentRef<GogTooltipBubbleComponent>, hostEl: HTMLElement): void {\r\n const bubbleEl = this.overlay.bubbleElement;\r\n if (!bubbleEl) return;\r\n\r\n const targetRect: GogTooltipTargetRect = hostEl.getBoundingClientRect();\r\n // offsetWidth/Height, not getBoundingClientRect: the bubble's enter transition scales\r\n // it down to 0.96 until `visible` flips, and a transform changes the *painted* rect\r\n // measured by getBoundingClientRect without changing layout — offset* reads the\r\n // untransformed layout box, which is the size to position against.\r\n const bubbleSize = { width: bubbleEl.offsetWidth, height: bubbleEl.offsetHeight };\r\n const viewport: GogTooltipViewport = { width: window.innerWidth, height: window.innerHeight };\r\n const gap = readPxToken(hostEl, '--gog-tooltip-gap', DEFAULT_GAP);\r\n\r\n const placement = resolveTooltipPlacement(\r\n this.resolvedPosition(),\r\n targetRect,\r\n bubbleSize,\r\n viewport,\r\n gap,\r\n VIEWPORT_PADDING,\r\n );\r\n\r\n ref.setInput('side', placement.side);\r\n ref.setInput('top', placement.top);\r\n ref.setInput('left', placement.left);\r\n ref.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /**\r\n * A tooltip appended to `document.body` loses whatever `--gog-tooltip-z` an ancestor\r\n * (e.g. a `gog-dialog` panel, which raises it so nested overlays stack above the dialog)\r\n * declared, since `body` isn't part of that subtree anymore — same problem\r\n * `GogDropdownBase.resolvePanelZIndex` solves for dropdown panels, resolved here from the\r\n * trigger while it's still in its real position in the tree, before the bubble moves out.\r\n */\r\n private resolveZIndex(hostEl: HTMLElement): number {\r\n const inherited = getComputedStyle(hostEl).getPropertyValue('--gog-tooltip-z').trim();\r\n if (inherited) return readNumber(inherited, DEFAULT_Z_INDEX);\r\n\r\n for (let node: HTMLElement | null = hostEl; node; node = node.parentElement) {\r\n const declared = node.style.getPropertyValue('--gog-tooltip-z').trim();\r\n if (declared) return readNumber(declared, DEFAULT_Z_INDEX);\r\n }\r\n\r\n return DEFAULT_Z_INDEX;\r\n }\r\n\r\n private cleanup(): void {\r\n this.cancelTimers();\r\n this.hide();\r\n }\r\n}\r\n\r\nfunction readNumber(raw: string, fallback: number): number {\r\n const parsed = Number.parseFloat(raw);\r\n return Number.isFinite(parsed) ? parsed : fallback;\r\n}\r\n\r\nfunction readPxToken(el: HTMLElement, token: string, fallback: number): number {\r\n return readNumber(getComputedStyle(el).getPropertyValue(token), fallback);\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n TemplateRef,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n contentChild,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { resolveConfigured } from '../../shared/config';\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\nimport { GogTooltipDirective } from '../tooltip/tooltip.directive';\r\n\r\n/**\r\n * @deprecated since 21.2.2 (2026-07-30) — use `GogDropdownOption` instead. Removed in 21.4.0.\r\n */\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/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG.labels` supplies one. */\r\nconst DEFAULT_SELECT_ALL_LABEL = 'Select all';\r\nconst DEFAULT_CLEAR_ALL_LABEL = 'Clear';\r\n\r\n/**\r\n * Custom markup for the multiselect's clear button:\r\n *\r\n * ```html\r\n * <ng-template gogMultiselectClearIcon><my-icon /></ng-template>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogMultiselectClearIcon]' })\r\nexport class GogMultiselectClearIconDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\r\n\r\n@Component({\r\n selector: 'gog-multiselect',\r\n imports: [ButtonComponent, IconComponent, NgTemplateOutlet, ScrollComponent, GogTooltipDirective],\r\n templateUrl: './multiselect.component.html',\r\n styleUrl: './multiselect.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Only bites when the control has opted out of full width; otherwise the container decides.\r\n '[style.--gog-multiselect-min-width]': 'minWidth()',\r\n },\r\n})\r\nexport class MultiselectComponent<\r\n TOption = GogDropdownOption,\r\n TValue = string | number,\r\n> extends GogDropdownBase<TValue[], TOption> {\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 /**\r\n * Visible text of the select-all button. Unset, falls back to `GOG_CONFIG.labels.selectAll`,\r\n * then to `'Select all'`.\r\n */\r\n readonly selectAllLabel = input<string | undefined>(undefined);\r\n /**\r\n * Visible text of the clear-all button — the one inside the panel, next to select-all. The\r\n * trigger's own clear icon is `clearAriaLabel`. Unset, falls back to\r\n * `GOG_CONFIG.labels.clearAll`, then to `'Clear'`.\r\n */\r\n readonly clearAllLabel = input<string | undefined>(undefined);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogMultiselectClearIcon>` into the component instead. Removed in 21.5.0.\r\n */\r\n readonly clearIconTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogMultiselectClearIcon` template; wins over the deprecated `clearIconTemplate` input. */\r\n protected readonly clearIconSlot = contentChild(GogMultiselectClearIconDirective);\r\n\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedSelectAllLabel = computed(() =>\r\n resolveConfigured(\r\n this.selectAllLabel(),\r\n this.globalConfig.labels?.selectAll,\r\n DEFAULT_SELECT_ALL_LABEL,\r\n ),\r\n );\r\n protected readonly resolvedClearAllLabel = computed(() =>\r\n resolveConfigured(\r\n this.clearAllLabel(),\r\n this.globalConfig.labels?.clearAll,\r\n DEFAULT_CLEAR_ALL_LABEL,\r\n ),\r\n );\r\n\r\n /**\r\n * Two-way bindable selection: `[(value)]=\"signal\"`.\r\n *\r\n * Each entry is whatever `optionValue` resolves to — an id by default, or the option objects\r\n * themselves when `optionValue` is `null`.\r\n */\r\n readonly value = model<TValue[]>([]);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n protected readonly emptyValue: TValue[] = [];\r\n protected readonly optionClass = 'gog-ms__option';\r\n protected readonly triggerClass = 'gog-ms';\r\n /**\r\n * On by default: this control shipped a clear button before `clearable` existed, so the\r\n * default preserves it. Set `[clearable]=\"false\"` to drop it.\r\n */\r\n protected readonly clearableByDefault = true;\r\n protected readonly sizeBlockClass = 'gog-ms-wrapper';\r\n protected readonly panelBlockClass = 'gog-ms__dropdown';\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 /** Labels of the current selection, driven off the selected *options* so it works whatever\r\n * `optionValue` resolves to. */\r\n readonly selectedLabels = computed(() =>\r\n this.options()\r\n .filter((option) => this.isSelected(option))\r\n .map((option) => this.labelOf(option)),\r\n );\r\n\r\n /** Comma-joined selection — the full text, before any overflow trimming. */\r\n readonly selectedNames = computed(() => this.selectedLabels().join(', '));\r\n\r\n private readonly valueRef = viewChild<ElementRef<HTMLElement>>('valueEl');\r\n private readonly resizeDestroyRef = inject(DestroyRef);\r\n /** Width available to the summary text, tracked so the split recomputes as the field resizes. */\r\n private readonly valueWidth = signal(0);\r\n private readonly valueFont = signal('');\r\n\r\n /**\r\n * Splits the selection into what fits on one line and a `+N` remainder.\r\n *\r\n * Measured with `canvas.measureText` rather than by rendering candidates and reading back\r\n * layout: the greedy fit is O(n) over the labels and costs no reflow, where a DOM-based probe\r\n * would thrash layout on every keystroke-sized change.\r\n */\r\n protected readonly summary = computed<{ text: string; hidden: number }>(() => {\r\n const labels = this.selectedLabels();\r\n const width = this.valueWidth();\r\n const font = this.valueFont();\r\n if (labels.length === 0) return { text: '', hidden: 0 };\r\n if (!this.isBrowser || width === 0 || font === '') {\r\n return { text: labels.join(', '), hidden: 0 };\r\n }\r\n\r\n const measure = measureWith(font);\r\n // Room the \"+N\" badge will need; reserved up front so adding it can't cause a second overflow.\r\n const reserve = labels.length > 1 ? measure(` +${labels.length}`) : 0;\r\n let text = '';\r\n let fitted = 0;\r\n for (const label of labels) {\r\n const next = fitted === 0 ? label : `${text}, ${label}`;\r\n const budget = fitted === labels.length - 1 ? width : width - reserve;\r\n if (fitted > 0 && measure(next) > budget) break;\r\n text = next;\r\n fitted += 1;\r\n }\r\n\r\n // Always show at least one label, even if it has to be ellipsised by CSS.\r\n if (fitted === 0) return { text: labels[0], hidden: labels.length - 1 };\r\n return { text, hidden: labels.length - fitted };\r\n });\r\n protected readonly hasFloatValue = computed(() => this.value().length > 0);\r\n\r\n protected isSelected(option: TOption): boolean {\r\n const target = this.valueOf(option);\r\n return this.value().some((selected) => this.sameValue(selected, target));\r\n }\r\n\r\n protected toggleOption(option: TOption, event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (this.isOptionDisabled(option)) return;\r\n\r\n const target = this.valueOf(option);\r\n const current = this.value();\r\n this.commitValue(\r\n this.isSelected(option)\r\n ? current.filter((selected) => !this.sameValue(selected, target))\r\n : [...current, target as TValue],\r\n );\r\n }\r\n\r\n /** Acts on the *visible* options, so \"select all\" under an active filter means what it says. */\r\n protected selectAll(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.commitValue(\r\n this.visibleOptions()\r\n .filter((option) => !this.isOptionDisabled(option))\r\n .map((option) => this.valueOf(option) as TValue),\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 constructor() {\r\n super();\r\n // Measured entirely from a ResizeObserver rather than an after-render hook: the field is\r\n // usually full width, so the space available to the summary changes when the *container*\r\n // resizes — something Angular never renders for. `observe()` also fires once immediately,\r\n // which covers the initial measurement, so one mechanism handles both.\r\n afterNextRender(() => {\r\n const el = this.valueRef()?.nativeElement;\r\n if (!el || typeof ResizeObserver === 'undefined') return;\r\n\r\n const read = () => {\r\n this.valueWidth.set(el.clientWidth);\r\n this.valueFont.set(getComputedStyle(el).font);\r\n };\r\n const observer = new ResizeObserver(read);\r\n observer.observe(el);\r\n read();\r\n this.resizeDestroyRef.onDestroy(() => observer.disconnect());\r\n });\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/** One shared 2D context; creating a canvas per measurement is what makes this approach slow. */\r\nlet measureContext: CanvasRenderingContext2D | null = null;\r\n\r\nfunction measureWith(font: string): (text: string) => number {\r\n measureContext ??= document.createElement('canvas').getContext('2d');\r\n const ctx = measureContext;\r\n if (!ctx) return () => 0;\r\n ctx.font = font;\r\n return (text: string) => ctx.measureText(text).width;\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]=\"sizeClass()\"\r\n [class.gog-ms-wrapper--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-ms-wrapper--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-ms-wrapper--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-ms-wrapper--floated]=\"isFloatLabelFloated()\"\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() && resolvedFloatLabel() === 'none') {\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 [gogTooltip]=\"summary().hidden > 0 ? selectedListTpl : null\"\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 (focus)=\"onFocusIn()\"\r\n (blur)=\"onFocusOut()\"\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 @if (label() && isFloatLabelActive()) {\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 gog-ms__label--float\" [id]=\"labelId()\">{{ label() }}</label>\r\n }\r\n <span #valueEl class=\"gog-ms__value\" [class.gog-ms__value--placeholder]=\"!selectedNames()\">\r\n {{ summary().text || effectivePlaceholder() }}\r\n </span>\r\n <!--\r\n Only what fits is shown; the rest is collapsed into a count. The tooltip is the way to read\r\n the whole selection back, so it is bound only while something is actually hidden.\r\n -->\r\n @if (summary().hidden > 0) {\r\n <span class=\"gog-ms__overflow\" aria-hidden=\"true\">+{{ summary().hidden }}</span>\r\n }\r\n\r\n <span class=\"gog-ms__actions\">\r\n <span class=\"gog-ms__arrow\" [class.gog-ms__arrow--up]=\"isOpen()\" aria-hidden=\"true\">\r\n <gog-icon\r\n [template]=\"chevronSlot()?.templateRef ?? chevronTemplate()\"\r\n [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\"\r\n />\r\n </span>\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-ms__clear gog-inline-center\"\r\n (click)=\"clearValue($event)\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n >\r\n <gog-icon [template]=\"clearIconSlot()?.templateRef ?? clearIconTemplate()\" name=\"close\" />\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\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]=\"!resolvedAppendToBody() && dropdownDirectionState() === 'up'\"\r\n [class.gog-ms__dropdown--portal]=\"resolvedAppendToBody()\"\r\n [class]=\"panelSizeClass()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"resolvedAppendToBody() ? resolvedPanelWidth() : null\"\r\n [style.min-width]=\"resolvedAppendToBody() ? resolvedPanelMinWidth() : null\"\r\n [style.max-height]=\"resolvedAppendToBody() ? 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 @if (resolvedFilter() && resolvedFilterPosition() === 'top') {\r\n <div class=\"gog-ms__filter gog-ms__filter--top\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-ms__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\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 @if (visibleOptions().length === 0) {\r\n <p class=\"gog-ms__empty\">{{ filterEmptyMessage() }}</p>\r\n }\r\n @for (option of visibleOptions(); track valueOf(option)) {\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)\"\r\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\r\n [class.gog-ms__option--selected]=\"isSelected(option)\"\r\n [class.gog-ms__option--disabled]=\"isOptionDisabled(option)\"\r\n (click)=\"toggleOption(option, $event)\"\r\n (keydown)=\"onOptionKeydown($event)\"\r\n >\r\n @if (optionSlot(); as slot) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n slot.templateRef;\r\n context: optionContext(option, isSelected(option))\r\n \"\r\n />\r\n } @else {\r\n <span class=\"gog-ms__option-mark\" aria-hidden=\"true\">\r\n <gog-icon [name]=\"isSelected(option) ? 'checkbox-checked' : 'checkbox'\" />\r\n </span>\r\n {{ labelOf(option) }}\r\n }\r\n </button>\r\n }\r\n </div>\r\n </gog-scroll>\r\n @if (resolvedFilter() && resolvedFilterPosition() === 'bottom') {\r\n <div class=\"gog-ms__filter gog-ms__filter--bottom\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-ms__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\r\n }\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)\">{{\r\n resolvedSelectAllLabel()\r\n }}</gog-button>\r\n <gog-button variant=\"ghost\" size=\"sm\" (click)=\"clearAll($event)\">{{\r\n resolvedClearAllLabel()\r\n }}</gog-button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Full selection, shown as a tooltip when the trigger can only fit part of it. -->\r\n<ng-template #selectedListTpl>\r\n <ul class=\"gog-ms__tooltip-list\">\r\n @for (label of selectedLabels(); track label) {\r\n <li>{{ label }}</li>\r\n }\r\n </ul>\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 { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\n\r\n/** Built-in default, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nimport { GogSliderOrientation, GogSliderRange } from '../../shared/types';\r\n\r\n/** How many digits after the decimal point `step` prints, e.g. `0.25` → `2`, `5` → `0`. */\r\nfunction decimalPlaces(step: number): number {\r\n const str = String(step);\r\n const dot = str.indexOf('.');\r\n return dot === -1 ? 0 : str.length - dot - 1;\r\n}\r\n\r\n/**\r\n * Character count of `value` formatted with `decimals` fraction digits — the widest a\r\n * number in `[min, max]` at this `step` can ever print, since digit count only grows moving\r\n * away from zero (see `valueDisplayChars` below for why `min`/`max` alone are enough to\r\n * bound every value in between).\r\n */\r\nfunction digitLength(value: number, decimals: number): number {\r\n const sign = value < 0 ? 1 : 0;\r\n const intLen = String(Math.trunc(Math.abs(value))).length;\r\n const fraction = decimals > 0 ? decimals + 1 : 0; // +1 for the decimal point itself\r\n return sign + intLen + fraction;\r\n}\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 '[style.--range-start-pos]': 'rangeStartPos()',\r\n '[style.--range-end-pos]': 'rangeEndPos()',\r\n '[style.--value-chars]': 'valueDisplayChars()',\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 protected readonly inputId = nextGogControlId('gog-slider');\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 /** Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to `'manual'`. */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\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 * Ignored when `orientation` is `'vertical'`: a vertical slider's own width is its\r\n * thickness, not its length, so it always sizes to fit its content. Its length instead\r\n * comes from `--gog-slider-vertical-length` (default `160px`), same idea as\r\n * `--gog-slider-auto-width` for the horizontal auto-width case.\r\n */\r\n readonly fullWidth = input(true);\r\n /**\r\n * `'horizontal'` (default) or `'vertical'`. The developer picks per instance — there is\r\n * no global default for this, since it's a layout decision tied to where the slider sits,\r\n * not a house style. Backed by a native `<input type=\"range\">` rotated via `writing-mode`,\r\n * so dragging, touch and keyboard (Up/Down as well as Left/Right) all keep working exactly\r\n * as they do horizontally.\r\n */\r\n readonly orientation = input<GogSliderOrientation>('horizontal');\r\n\r\n /**\r\n * Switches the slider to two-thumb mode for picking a *range* of values instead of a\r\n * single one. When on, use `[(rangeValue)]` instead of `[(value)]` — the two are mutually\r\n * exclusive; `value`/`writeValue` are ignored while this is `true`, and vice versa.\r\n */\r\n readonly range = input(false);\r\n /**\r\n * Accessible name for the start (lower) thumb in `range` mode. Falls back to `'Minimum'`,\r\n * prefixed with `label()` when one is set (e.g. `'Price Minimum'`) — a shared `<label>`\r\n * can't be associated with two inputs via `for`, so each thumb needs its own name.\r\n */\r\n readonly startAriaLabel = input('');\r\n /** Accessible name for the end (upper) thumb in `range` mode. Falls back to `'Maximum'`. */\r\n readonly endAriaLabel = input('');\r\n /**\r\n * Disables only the start (lower) thumb in `range` mode — e.g. to pin a range's floor\r\n * while letting the consumer still raise or lower its ceiling. ORed with `disabled`\r\n * (either one disables it), never overrides it: `disabled` still means \"both thumbs off\".\r\n * Ignored outside `range` mode, where there's only one thumb and `disabled` already covers\r\n * it. Unlike `disabled`, this never applies the whole-control `.gog-slider--disabled`\r\n * dimming/`pointer-events: none` — only the one thumb goes inert, both visually (its own\r\n * dot dims) and functionally (the native input's own `disabled` attribute takes it out of\r\n * the tab order), so the other thumb stays fully usable.\r\n */\r\n readonly startDisabled = input(false);\r\n /** Disables only the end (upper) thumb in `range` mode. Mirrors `startDisabled`. */\r\n readonly endDisabled = input(false);\r\n\r\n /** Two-way bindable value: `[(value)]=\"signal\"`. Ignored when `range` is `true`. */\r\n readonly value = model<number>(0);\r\n /** Two-way bindable `{ start, end }` pair: `[(rangeValue)]=\"signal\"`. Used only when `range` is `true`. */\r\n readonly rangeValue = model<GogSliderRange>({ start: 0, end: 100 });\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /**\r\n * `isDisabled()` also covers `cvaDisabled()` — a `[formControl]`'s own `.disable()`, which\r\n * (being one FormControl backing one `rangeValue`) always speaks for both thumbs at once\r\n * and has no way to target just one. `startDisabled`/`endDisabled` are the only route to a\r\n * one-sided disable, and only make sense in `range` mode.\r\n */\r\n protected readonly isStartDisabled = computed(() => this.isDisabled() || this.startDisabled());\r\n protected readonly isEndDisabled = computed(() => this.isDisabled() || this.endDisabled());\r\n /**\r\n * Drives the whole-control `.gog-slider--disabled` class (dimming + `pointer-events: none`\r\n * over the whole track). Applying that class off a one-sided `isStartDisabled()`/\r\n * `isEndDisabled()` would also block pointer/touch input to the *other*, still-enabled\r\n * thumb — `pointer-events: none` on an ancestor cuts off every descendant, not just the\r\n * disabled one — so in `range` mode this only fires once *both* sides are disabled. A\r\n * still-disabled single thumb stays inert on its own regardless (its native `disabled`\r\n * attribute already takes it out of the tab order and stops it from firing events).\r\n */\r\n protected readonly isFullyDisabled = computed(() =>\r\n this.range() ? this.isStartDisabled() && this.isEndDisabled() : this.isDisabled(),\r\n );\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 * `rangeValue()` clamped to `[min, max]`, swapping the pair back in order if a consumer\r\n * writes `start > end` directly (e.g. via `writeValue`/a FormControl) — dragging or\r\n * keyboard-nudging a thumb past the other can never produce that, since\r\n * onRangeStartInput/onRangeEndInput already clamp against each other there.\r\n */\r\n protected readonly clampedRange = computed(() => this.clampRange(this.rangeValue()));\r\n\r\n private percentFor(value: number): number {\r\n const span = this.max() - this.min();\r\n if (span === 0) return 0;\r\n return ((value - this.min()) / span) * 100;\r\n }\r\n\r\n private clampRange(value: GogSliderRange): GogSliderRange {\r\n const lo = this.min();\r\n const hi = this.max();\r\n const start = Math.min(hi, Math.max(lo, value.start));\r\n const end = Math.min(hi, Math.max(lo, value.end));\r\n return start <= end ? { start, end } : { start: end, end: start };\r\n }\r\n\r\n protected readonly fillPercent = computed(() => this.percentFor(this.clampedValue()));\r\n protected readonly rangeStartPercent = computed(() => this.percentFor(this.clampedRange().start));\r\n protected readonly rangeEndPercent = computed(() => this.percentFor(this.clampedRange().end));\r\n\r\n protected readonly thumbPos = computed(() => `${this.fillPercent()}%`);\r\n protected readonly fillScale = computed(() => this.fillPercent() / 100);\r\n protected readonly rangeStartPos = computed(() => `${this.rangeStartPercent()}%`);\r\n protected readonly rangeEndPos = computed(() => `${this.rangeEndPercent()}%`);\r\n protected readonly rangeDisplayValue = computed(() => {\r\n const { start, end } = this.clampedRange();\r\n return `${start} – ${end}`;\r\n });\r\n /**\r\n * Reserved width for `.gog-slider__value`, in `ch`. Without this the span sizes to\r\n * whatever the *current* value happens to print as, so it visibly resizes on every drag —\r\n * harmless when `fullWidth` absorbs the wiggle (the default for horizontal), but a vertical\r\n * slider is only ever as wide as its content (see the `fit-content` comment in the\r\n * stylesheet), so there the whole control jitters in width as you drag, and the header row\r\n * being what's regrowing/shrinking tugs the min/max labels below along with it even though\r\n * their own text never changes. Sized from `min()`/`max()` rather than the live value:\r\n * digit count only grows moving away from zero, so whichever endpoint prints the most\r\n * characters is already the worst case for every value in between.\r\n */\r\n protected readonly valueDisplayChars = computed(() => {\r\n const decimals = decimalPlaces(this.step());\r\n const chars = Math.max(digitLength(this.min(), decimals), digitLength(this.max(), decimals));\r\n return this.range() ? chars * 2 + 3 : chars; // +3 for the \" – \" separator\r\n });\r\n protected readonly startInputAriaLabel = computed(() => {\r\n const base = this.startAriaLabel() || 'Minimum';\r\n return this.label() ? `${this.label()} ${base}` : base;\r\n });\r\n protected readonly endInputAriaLabel = computed(() => {\r\n const base = this.endAriaLabel() || 'Maximum';\r\n return this.label() ? `${this.label()} ${base}` : base;\r\n });\r\n protected readonly isVertical = computed(() => this.orientation() === 'vertical');\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 /** Fires with a plain `number` normally, or a `GogSliderRange` while `range()` is `true`. */\r\n private onChange: (val: number | GogSliderRange) => 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 | GogSliderRange): void {\r\n if (this.range()) {\r\n const next = (val as GogSliderRange | null) ?? { start: this.min(), end: this.max() };\r\n this.rangeValue.set(this.clampRange(next));\r\n } else {\r\n const next = (val as number | null) ?? this.min();\r\n this.value.set(Math.min(this.max(), Math.max(this.min(), next)));\r\n }\r\n }\r\n\r\n registerOnChange(fn: (val: number | GogSliderRange) => 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 /**\r\n * Start (lower) thumb in `range` mode. Both native inputs keep the slider's global\r\n * `min()`/`max()` (see the template's comment on why), so crossing prevention happens\r\n * entirely here via `Math.min(current.end, ...)` rather than through a narrowed native\r\n * `max` attribute — which also means the browser will happily keep dragging this input's\r\n * own raw `.value` past `current.end` even once we've clamped the logical value. Writing\r\n * the clamped result back to `input.value` directly (rather than trusting the `[value]`\r\n * binding to do it) matters because that binding no-ops once the *next* clamped result\r\n * matches what Angular itself last wrote — it has no way to know the raw DOM value has\r\n * since drifted out from under it via native dragging.\r\n */\r\n onRangeStartInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const raw = Number(input.value);\r\n const current = this.clampedRange();\r\n const start = Math.min(current.end, Math.max(this.min(), raw));\r\n const next: GogSliderRange = { start, end: current.end };\r\n\r\n input.value = String(start);\r\n this.rangeValue.set(next);\r\n this.onChange(next);\r\n }\r\n\r\n /** End (upper) thumb in `range` mode. Mirrors `onRangeStartInput`. */\r\n onRangeEndInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const raw = Number(input.value);\r\n const current = this.clampedRange();\r\n const end = Math.max(current.start, Math.min(this.max(), raw));\r\n const next: GogSliderRange = { start: current.start, end };\r\n\r\n input.value = String(end);\r\n\r\n this.rangeValue.set(next);\r\n this.onChange(next);\r\n }\r\n}\r\n","<div\r\n class=\"gog-slider gog-contained-layout\"\r\n [class.gog-slider--disabled]=\"isFullyDisabled()\"\r\n [class.gog-slider--thumb-hidden]=\"!showThumb()\"\r\n [class.gog-slider--vertical]=\"isVertical()\"\r\n [class.gog-slider--range]=\"range()\"\r\n>\r\n <div class=\"gog-slider__header\">\r\n @if (label()) {\r\n <label [attr.for]=\"range() ? null : inputId\" class=\"gog-slider__label\">{{ label() }}</label>\r\n }\r\n\r\n @if (showValue()) {\r\n <span class=\"gog-slider__value\">{{ range() ? rangeDisplayValue() : clampedValue() }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"gog-slider__track-container\">\r\n <div class=\"gog-slider__track\">\r\n <div class=\"gog-slider__fill\"></div>\r\n </div>\r\n\r\n @if (showThumb()) {\r\n @if (range()) {\r\n <div\r\n class=\"gog-slider__thumb gog-slider__thumb--start\"\r\n [class.gog-slider__thumb--disabled]=\"isStartDisabled()\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n <div\r\n class=\"gog-slider__thumb gog-slider__thumb--end\"\r\n [class.gog-slider__thumb--disabled]=\"isEndDisabled()\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n } @else {\r\n <div class=\"gog-slider__thumb\" aria-hidden=\"true\"></div>\r\n }\r\n }\r\n\r\n @if (range()) {\r\n <!--\r\n Both inputs' `min`/`max` stay pinned to the slider's own global min()/max(), even\r\n though each thumb can't actually reach past the other one (enforced in\r\n onRangeStart/EndInput instead). Narrowing a native input's own `min`/`max` attribute\r\n to the other thumb's value would seem like free crossing-prevention, but it also\r\n shifts where the browser positions that input's own (invisible) native thumb inside\r\n its box — off of the box's own start()/end() percentage that --range-start-pos /\r\n --range-end-pos and this file's custom thumb divs use, so the two would drift apart\r\n and the real, clickable native thumb would stop lining up with what's drawn on\r\n screen. `aria-valuemin`/`aria-valuemax` below are fine to narrow dynamically —\r\n they're just announced text, not something the browser positions anything from.\r\n -->\r\n <input\r\n [id]=\"inputId\"\r\n class=\"gog-slider__input gog-slider__input--start\"\r\n type=\"range\"\r\n [attr.aria-label]=\"startInputAriaLabel()\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"clampedRange().end\"\r\n [attr.aria-valuenow]=\"clampedRange().start\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n [attr.aria-orientation]=\"isVertical() ? 'vertical' : null\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"clampedRange().start\"\r\n [disabled]=\"isStartDisabled()\"\r\n (input)=\"onRangeStartInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <input\r\n class=\"gog-slider__input gog-slider__input--end\"\r\n type=\"range\"\r\n [attr.aria-label]=\"endInputAriaLabel()\"\r\n [attr.aria-valuemin]=\"clampedRange().start\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuenow]=\"clampedRange().end\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n [attr.aria-orientation]=\"isVertical() ? 'vertical' : null\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"clampedRange().end\"\r\n [disabled]=\"isEndDisabled()\"\r\n (input)=\"onRangeEndInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"inputId\"\r\n class=\"gog-slider__input\"\r\n type=\"range\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || 'Slider'\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuenow]=\"clampedValue()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n [attr.aria-orientation]=\"isVertical() ? 'vertical' : null\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"clampedValue()\"\r\n [disabled]=\"isDisabled()\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"gog-slider__range-labels\">\r\n <span>{{ min() }}</span>\r\n <span>{{ max() }}</span>\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-slider__error\" [attr.id]=\"errorId()\" role=\"alert\">\r\n {{ visibleError() }}\r\n </span>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n} from '@angular/core';\r\n\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { GogPaginatorRangeMode, GogSize } from '../../shared/types';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG.labels` supplies one. */\r\nconst DEFAULT_LABELS = {\r\n pagination: 'Pagination',\r\n previousPage: 'Previous page',\r\n nextPage: 'Next page',\r\n page: (page: number, isCurrent: boolean) =>\r\n isCurrent ? `Page ${page}, current page` : `Go to page ${page}`,\r\n};\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]': 'resolvedAriaLabel()',\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 /**\r\n * Accessible name of the `<nav>`. Unset, falls back to `GOG_CONFIG.labels.pagination`, then\r\n * to `'Pagination'`.\r\n */\r\n readonly ariaLabel = input<string | undefined>(undefined);\r\n\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedAriaLabel = computed(() =>\r\n resolveConfigured(\r\n this.ariaLabel(),\r\n this.globalConfig.labels?.pagination,\r\n DEFAULT_LABELS.pagination,\r\n ),\r\n );\r\n /**\r\n * The two step buttons. Config-only: unlike the `<nav>` name, these say the same thing on\r\n * every paginator in an app, so a per-instance input would be dead weight.\r\n */\r\n protected readonly resolvedPreviousLabel = computed(() =>\r\n resolveConfigured(\r\n undefined,\r\n this.globalConfig.labels?.previousPage,\r\n DEFAULT_LABELS.previousPage,\r\n ),\r\n );\r\n protected readonly resolvedNextLabel = computed(() =>\r\n resolveConfigured(undefined, this.globalConfig.labels?.nextPage, DEFAULT_LABELS.nextPage),\r\n );\r\n /**\r\n * Names one page button. A method rather than a `computed`, since it takes the page number —\r\n * the formatter itself is resolved once and only re-read when the config object changes.\r\n */\r\n protected pageLabel(page: number): string {\r\n const format = this.globalConfig.labels?.page ?? DEFAULT_LABELS.page;\r\n return format(page, page === this.page());\r\n }\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\r\n variant=\"ghost\"\r\n [size]=\"size()\"\r\n [disabled]=\"disabled() || page() === 1\"\r\n [ariaLabel]=\"resolvedPreviousLabel()\"\r\n (gogClick)=\"prev()\"\r\n >‹</gog-button\r\n>\r\n\r\n@for (item of pageNumbers(); track $index) {\r\n @if (isNumber(item)) {\r\n <gog-button\r\n [size]=\"size()\"\r\n [variant]=\"item === page() ? 'primary' : 'ghost'\"\r\n [disabled]=\"disabled()\"\r\n [ariaLabel]=\"pageLabel(item)\"\r\n (gogClick)=\"goTo(item)\"\r\n >{{ item }}</gog-button\r\n >\r\n } @else {\r\n <span class=\"gog-paginator__ellipsis\">…</span>\r\n }\r\n}\r\n\r\n<gog-button\r\n variant=\"ghost\"\r\n [size]=\"size()\"\r\n [disabled]=\"disabled() || page() === totalPages()\"\r\n [ariaLabel]=\"resolvedNextLabel()\"\r\n (gogClick)=\"next()\"\r\n >›</gog-button\r\n>\r\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, TemplateRef, contentChild, inject, input } from '@angular/core';\r\n\r\n/** Case-insensitive, numeric-aware (`\"item2\" < \"item10\"`) — the sensible default for text. */\r\nconst defaultCollator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\r\n\r\n/** Default comparator: locale-aware for strings via `Intl.Collator`, `<`/`>` otherwise. */\r\nexport function defaultCompare(a: unknown, b: unknown): number {\r\n if (typeof a === 'string' && typeof b === 'string') {\r\n return defaultCollator.compare(a, b);\r\n }\r\n if (a === b) return 0;\r\n return (a as number | string) < (b as number | string) ? -1 : 1;\r\n}\r\n\r\n/** Context handed to a `gogColumnBody` template. */\r\nexport interface GogColumnBodyContext<T> {\r\n /** The row object. */\r\n $implicit: T;\r\n /** Alias for `$implicit`, for templates that prefer naming it. */\r\n row: T;\r\n /** Index within the currently rendered page, not the whole data set. */\r\n index: number;\r\n /** The already-resolved cell value for this column's `field`. */\r\n value: unknown;\r\n}\r\n\r\n/** Context handed to a `gogColumnHeader` template. */\r\nexport interface GogColumnHeaderContext {\r\n /** The column's own `header` text, so a custom header can decorate rather than replace it. */\r\n $implicit: string;\r\n field: string;\r\n}\r\n\r\n/**\r\n * Custom cell markup for one column:\r\n *\r\n * ```html\r\n * <gog-column field=\"status\" header=\"Status\">\r\n * <ng-template gogColumnBody let-row let-value=\"value\">\r\n * <gog-tag [variant]=\"row.ok ? 'success' : 'danger'\">{{ value }}</gog-tag>\r\n * </ng-template>\r\n * </gog-column>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogColumnBody]' })\r\nexport class GogColumnBodyDirective<T = unknown> {\r\n readonly templateRef = inject<TemplateRef<GogColumnBodyContext<T>>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard<T>(\r\n _dir: GogColumnBodyDirective<T>,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogColumnBodyContext<T> {\r\n return true;\r\n }\r\n}\r\n\r\n/** Custom header markup for one column — see `GogColumnBodyDirective` for the shape. */\r\n@Directive({ selector: '[gogColumnHeader]' })\r\nexport class GogColumnHeaderDirective {\r\n readonly templateRef = inject<TemplateRef<GogColumnHeaderContext>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard(\r\n _dir: GogColumnHeaderDirective,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogColumnHeaderContext {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * One column of `gog-table`. Cell and header markup are projected as `gogColumnBody` /\r\n * `gogColumnHeader` templates inside the column itself, so the column owning them is\r\n * structural rather than looked up by a matching string.\r\n */\r\n@Directive({\r\n // Deliberately element selectors, not attributes: a column is a structural child of the\r\n // table, and `<gog-column field=\"x\">` reads as markup rather than as a decorated element.\r\n // `column` is the pre-21.3.0 name, kept working for one migration window.\r\n // @deprecated since 21.3.0 (2026-08-07) — use `gog-column` instead. Removed in 21.5.0.\r\n // eslint-disable-next-line @angular-eslint/directive-selector -- see above\r\n selector: 'gog-column, column',\r\n})\r\nexport class GogColumn {\r\n /** Field name, or a dot-path into a nested property (e.g. `\"address.city\"`). */\r\n readonly field = input.required<string>();\r\n readonly header = input<string>('');\r\n readonly sortable = input<boolean>(false);\r\n /** Fixed width, e.g. \"120px\" or \"20%\" */\r\n readonly width = input<string>('');\r\n /** Min width, e.g. \"80px\" */\r\n readonly minWidth = input<string>('');\r\n /** Max width, e.g. \"300px\" */\r\n readonly maxWidth = input<string>('');\r\n /** Custom sort comparator for this column. Defaults to `defaultCompare`. */\r\n readonly comparator = input<((a: unknown, b: unknown) => number) | null>(null);\r\n\r\n readonly bodyTemplate = contentChild(GogColumnBodyDirective);\r\n readonly headerTemplate = contentChild(GogColumnHeaderDirective);\r\n}\r\n\r\n/**\r\n * @deprecated since 21.3.0 (2026-08-07) — use `GogColumn` instead. Removed in 21.5.0.\r\n * The same class under its old, unprefixed name.\r\n */\r\nexport const Column = GogColumn;\r\n/**\r\n * @deprecated since 21.3.0 (2026-08-07) — use `GogColumn` instead. Removed in 21.5.0.\r\n */\r\nexport type Column = GogColumn;\r\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\r\n\r\nexport interface GogTableBodyContext<T> {\r\n $implicit: T;\r\n index: number;\r\n}\r\n\r\nexport interface GogTableHeaderContext {\r\n $implicit: never;\r\n}\r\n\r\n/**\r\n * Marks a `<ng-template>` inside `<gog-table>` with a field name and optional type:\r\n *\r\n * ```html\r\n * <ng-template template=\"status\" type=\"body\" let-row>…</ng-template>\r\n * ```\r\n *\r\n * @deprecated since 21.3.0 (2026-08-07) — declare the template inside its own column with\r\n * `gogColumnBody` / `gogColumnHeader` instead. Removed in 21.5.0.\r\n *\r\n * The field name here is a string the compiler cannot check, so a typo silently renders the\r\n * default cell rather than failing; the column-scoped directives bind structurally and carry a\r\n * typed context. Migration:\r\n *\r\n * ```html\r\n * <!-- before -->\r\n * <gog-column field=\"status\" />\r\n * <ng-template template=\"status\" type=\"body\" let-row>…</ng-template>\r\n *\r\n * <!-- after -->\r\n * <gog-column field=\"status\">\r\n * <ng-template gogColumnBody let-row>…</ng-template>\r\n * </gog-column>\r\n * ```\r\n */\r\n@Directive({\r\n // eslint-disable-next-line @angular-eslint/directive-selector -- deprecated legacy selector, see above\r\n selector: '[template]',\r\n})\r\nexport class TemplateDirective {\r\n readonly template = input.required<string>();\r\n readonly type = input<'body' | 'header'>('body');\r\n\r\n readonly templateRef = inject(TemplateRef<unknown>);\r\n\r\n static ngTemplateContextGuard<T>(\r\n _dir: TemplateDirective,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogTableBodyContext<T> | GogTableHeaderContext {\r\n return true;\r\n }\r\n}\r\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 { getByPath } from '../../shared/option-accessor';\r\nimport {\r\n GogColumn,\r\n type GogColumnBodyContext,\r\n type GogColumnHeaderContext,\r\n defaultCompare,\r\n} from './column';\r\nimport { TemplateDirective } from './template.directive';\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 /**\r\n * The single size modifier, replacing one `[class.gog-table--<size>]` binding per size.\r\n * Empty for `'lg'`: that is this component's default size and has no modifier rule of its own — every `gog-table--*` chain bottoms out at it.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.size() === 'lg' ? '' : `gog-table--${this.size()}`,\r\n );\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(GogColumn);\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 /**\r\n * A `gogColumnBody` template declared inside the column wins; the string-keyed\r\n * `<ng-template template=\"field\" type=\"body\">` is the deprecated fallback.\r\n */\r\n getBodyTemplate(col: GogColumn): TemplateRef<unknown> | null {\r\n return (\r\n (col.bodyTemplate()?.templateRef as TemplateRef<unknown> | undefined) ??\r\n this.bodyTemplateMap().get(col.field()) ??\r\n null\r\n );\r\n }\r\n\r\n getHeaderTemplate(col: GogColumn): TemplateRef<unknown> | null {\r\n return (\r\n (col.headerTemplate()?.templateRef as TemplateRef<unknown> | undefined) ??\r\n this.headerTemplateMap().get(col.field()) ??\r\n null\r\n );\r\n }\r\n\r\n /** Context for a `gogColumnBody` template — see `GogColumnBodyContext`. */\r\n bodyContext(row: T, col: GogColumn, index: number): GogColumnBodyContext<T> {\r\n return { $implicit: row, row, index, value: this.getCellValue(row, col.field()) };\r\n }\r\n\r\n /** Context for a `gogColumnHeader` template — see `GogColumnHeaderContext`. */\r\n headerContext(col: GogColumn): GogColumnHeaderContext {\r\n return { $implicit: col.header(), field: col.field() };\r\n }\r\n\r\n toggleSort(col: GogColumn): 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: GogColumn): 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]=\"sizeClass()\"\r\n [class.gog-table--col-borders]=\"showColumnBorders()\"\r\n [class.gog-table--loading]=\"loading()\"\r\n [class.gog-table--sticky-header]=\"stickyHeader()\"\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); as headerTpl) {\r\n <ng-container *ngTemplateOutlet=\"headerTpl; context: headerContext(col)\" />\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); as bodyTpl) {\r\n <ng-container *ngTemplateOutlet=\"bodyTpl; context: bodyContext(row, col, i)\" />\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, isPlatformBrowser } from '@angular/common';\r\nimport { DestroyRef, Injectable, PLATFORM_ID, Signal, inject, signal } from '@angular/core';\r\n\r\nimport { GOG_CONFIG } from '../../shared/config';\r\n\r\n/** Built-in defaults, used when `GOG_CONFIG.theme` doesn't supply one. */\r\nconst DEFAULT_THEME = 'light';\r\nconst DEFAULT_LIGHT_THEME = 'light';\r\nconst DEFAULT_DARK_THEME = 'dark';\r\n\r\n/**\r\n * Owns the `data-theme` attribute on `<html>`, which is what every `--gog-*` palette block in\r\n * `theme.css` keys off.\r\n *\r\n * Zero-config behaviour is unchanged from 21.3.1: it adopts whatever `data-theme` is already on\r\n * the document, or `'light'` if there is none. Persistence and following the OS setting are\r\n * both **opt-in** through `GOG_CONFIG.theme`, so an app that never configures anything cannot\r\n * have its theme changed out from under it by an upgrade.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ThemeService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly root = this.document.documentElement;\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly config = inject(GOG_CONFIG).theme ?? {};\r\n\r\n private readonly state = signal(DEFAULT_THEME);\r\n\r\n /**\r\n * The active theme name. Read-only on purpose: writing it directly would move the signal\r\n * without touching the DOM attribute the styles actually read, leaving the two silently out\r\n * of sync. Go through `setTheme`/`toggleTheme`.\r\n */\r\n readonly theme: Signal<string> = this.state.asReadonly();\r\n\r\n /**\r\n * Set once the app (or the user) has chosen a theme explicitly, which stops\r\n * `followSystem` from overriding that choice on the next OS-level change.\r\n */\r\n private hasExplicitChoice = false;\r\n\r\n constructor() {\r\n this.state.set(this.resolveInitialTheme());\r\n this.applyTheme(this.state());\r\n this.watchSystemPreference();\r\n }\r\n\r\n setTheme(theme: string): void {\r\n this.hasExplicitChoice = true;\r\n this.state.set(theme);\r\n this.applyTheme(theme);\r\n this.persist(theme);\r\n }\r\n\r\n /**\r\n * Flips between the configured light and dark theme names (`'light'`/`'dark'` by default).\r\n * From a third, custom theme this lands on the dark one, since that is the only reading of\r\n * \"toggle\" that terminates.\r\n */\r\n toggleTheme(): void {\r\n const light = this.config.lightTheme ?? DEFAULT_LIGHT_THEME;\r\n const dark = this.config.darkTheme ?? DEFAULT_DARK_THEME;\r\n this.setTheme(this.state() === dark ? light : dark);\r\n }\r\n\r\n /**\r\n * In precedence order:\r\n *\r\n * 1. a `data-theme` already on `<html>` — server-rendered or set by an inline script before\r\n * Angular booted, and either way a decision that has already been painted;\r\n * 2. the persisted choice, when `storageKey` is configured;\r\n * 3. the OS setting, when `followSystem` is on;\r\n * 4. `defaultTheme`, then `'light'`.\r\n */\r\n private resolveInitialTheme(): string {\r\n const fromDocument = this.root.getAttribute('data-theme');\r\n if (fromDocument) return fromDocument;\r\n\r\n const stored = this.readStored();\r\n if (stored) return stored;\r\n\r\n if (this.config.followSystem && this.prefersDark()) {\r\n return this.config.darkTheme ?? DEFAULT_DARK_THEME;\r\n }\r\n\r\n return this.config.defaultTheme ?? DEFAULT_THEME;\r\n }\r\n\r\n /**\r\n * Keeps the theme in step with the OS while the app has no explicit choice of its own. Only\r\n * wired up when `followSystem` is on, so the default configuration adds no listener at all.\r\n */\r\n private watchSystemPreference(): void {\r\n if (!this.isBrowser || !this.config.followSystem) return;\r\n\r\n const query = window.matchMedia('(prefers-color-scheme: dark)');\r\n const onChange = (event: MediaQueryListEvent) => {\r\n if (this.hasExplicitChoice) return;\r\n const next = event.matches\r\n ? (this.config.darkTheme ?? DEFAULT_DARK_THEME)\r\n : (this.config.lightTheme ?? DEFAULT_LIGHT_THEME);\r\n this.state.set(next);\r\n this.applyTheme(next);\r\n };\r\n\r\n query.addEventListener('change', onChange);\r\n this.destroyRef.onDestroy(() => query.removeEventListener('change', onChange));\r\n }\r\n\r\n private prefersDark(): boolean {\r\n return this.isBrowser && window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n }\r\n\r\n /**\r\n * Storage access is wrapped because it throws rather than degrades in two ordinary cases:\r\n * Safari's private mode, and a browser configured to block site data. A theme preference is\r\n * not worth taking the app down for.\r\n */\r\n private readStored(): string | null {\r\n const key = this.config.storageKey;\r\n if (!key || !this.isBrowser) return null;\r\n try {\r\n return window.localStorage.getItem(key);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private persist(theme: string): void {\r\n const key = this.config.storageKey;\r\n if (!key || !this.isBrowser) return;\r\n try {\r\n window.localStorage.setItem(key, theme);\r\n } catch {\r\n // See readStored.\r\n }\r\n }\r\n\r\n private applyTheme(theme: string): void {\r\n this.root.setAttribute('data-theme', theme);\r\n }\r\n}\r\n","// GENERATED FILE — do not edit by hand.\r\n// Run `npm run generate:tokens` after changing src/styles/theme.css.\r\n// See scripts/generate-tokens.mjs for why theme.css is the source and this is the output.\r\n\r\n/** Every `--gog-*` custom property the library declares or documents as an override point. */\r\nexport type GogTokenName =\r\n | '--gog-accent-bright'\r\n | '--gog-accent-color'\r\n | '--gog-accent-dim'\r\n | '--gog-accent-pale'\r\n | '--gog-accent-text-color'\r\n | '--gog-accordion-accent-color'\r\n | '--gog-accordion-body-bg'\r\n | '--gog-accordion-body-color'\r\n | '--gog-accordion-body-font-family'\r\n | '--gog-accordion-body-font-size'\r\n | '--gog-accordion-body-lift'\r\n | '--gog-accordion-body-line-height'\r\n | '--gog-accordion-body-padding-bottom'\r\n | '--gog-accordion-body-padding-top'\r\n | '--gog-accordion-body-radius'\r\n | '--gog-accordion-body-transition-duration'\r\n | '--gog-accordion-border-color'\r\n | '--gog-accordion-border-style'\r\n | '--gog-accordion-border-width'\r\n | '--gog-accordion-chevron-font-size'\r\n | '--gog-accordion-chevron-size'\r\n | '--gog-accordion-chevron-transition-duration'\r\n | '--gog-accordion-content-gap'\r\n | '--gog-accordion-disabled-opacity'\r\n | '--gog-accordion-focus-ring-width'\r\n | '--gog-accordion-font-family'\r\n | '--gog-accordion-font-size'\r\n | '--gog-accordion-header-bg'\r\n | '--gog-accordion-header-gap'\r\n | '--gog-accordion-header-text-transform'\r\n | '--gog-accordion-hover-bg'\r\n | '--gog-accordion-hover-ring'\r\n | '--gog-accordion-letter-spacing'\r\n | '--gog-accordion-lg-body-font-size'\r\n | '--gog-accordion-lg-body-line-height'\r\n | '--gog-accordion-lg-body-padding-bottom'\r\n | '--gog-accordion-lg-body-padding-top'\r\n | '--gog-accordion-lg-chevron-font-size'\r\n | '--gog-accordion-lg-chevron-size'\r\n | '--gog-accordion-lg-content-gap'\r\n | '--gog-accordion-lg-font-size'\r\n | '--gog-accordion-lg-letter-spacing'\r\n | '--gog-accordion-lg-padding-x'\r\n | '--gog-accordion-lg-padding-y'\r\n | '--gog-accordion-md-body-font-size'\r\n | '--gog-accordion-md-body-line-height'\r\n | '--gog-accordion-md-body-padding-bottom'\r\n | '--gog-accordion-md-body-padding-top'\r\n | '--gog-accordion-md-chevron-font-size'\r\n | '--gog-accordion-md-chevron-size'\r\n | '--gog-accordion-md-content-gap'\r\n | '--gog-accordion-md-font-size'\r\n | '--gog-accordion-md-letter-spacing'\r\n | '--gog-accordion-md-padding-x'\r\n | '--gog-accordion-md-padding-y'\r\n | '--gog-accordion-padding-x'\r\n | '--gog-accordion-padding-y'\r\n | '--gog-accordion-radius'\r\n | '--gog-accordion-slg-body-font-size'\r\n | '--gog-accordion-slg-body-line-height'\r\n | '--gog-accordion-slg-body-padding-bottom'\r\n | '--gog-accordion-slg-body-padding-top'\r\n | '--gog-accordion-slg-chevron-font-size'\r\n | '--gog-accordion-slg-chevron-size'\r\n | '--gog-accordion-slg-content-gap'\r\n | '--gog-accordion-slg-font-size'\r\n | '--gog-accordion-slg-letter-spacing'\r\n | '--gog-accordion-slg-padding-x'\r\n | '--gog-accordion-slg-padding-y'\r\n | '--gog-accordion-sm-body-font-size'\r\n | '--gog-accordion-sm-body-line-height'\r\n | '--gog-accordion-sm-body-padding-bottom'\r\n | '--gog-accordion-sm-body-padding-top'\r\n | '--gog-accordion-sm-chevron-font-size'\r\n | '--gog-accordion-sm-chevron-size'\r\n | '--gog-accordion-sm-content-gap'\r\n | '--gog-accordion-sm-font-size'\r\n | '--gog-accordion-sm-letter-spacing'\r\n | '--gog-accordion-sm-padding-x'\r\n | '--gog-accordion-sm-padding-y'\r\n | '--gog-accordion-text-color'\r\n | '--gog-accordion-transition-duration'\r\n | '--gog-accordion-xsm-body-font-size'\r\n | '--gog-accordion-xsm-body-line-height'\r\n | '--gog-accordion-xsm-body-padding-bottom'\r\n | '--gog-accordion-xsm-body-padding-top'\r\n | '--gog-accordion-xsm-chevron-font-size'\r\n | '--gog-accordion-xsm-chevron-size'\r\n | '--gog-accordion-xsm-content-gap'\r\n | '--gog-accordion-xsm-font-size'\r\n | '--gog-accordion-xsm-letter-spacing'\r\n | '--gog-accordion-xsm-padding-x'\r\n | '--gog-accordion-xsm-padding-y'\r\n | '--gog-autocomplete-actions-gap'\r\n | '--gog-autocomplete-actions-inset'\r\n | '--gog-autocomplete-actions-reserve'\r\n | '--gog-autocomplete-bg'\r\n | '--gog-autocomplete-border-color'\r\n | '--gog-autocomplete-border-style'\r\n | '--gog-autocomplete-border-width'\r\n | '--gog-autocomplete-clear-color'\r\n | '--gog-autocomplete-clear-hover-color'\r\n | '--gog-autocomplete-clear-icon-ratio'\r\n | '--gog-autocomplete-color'\r\n | '--gog-autocomplete-disabled-opacity'\r\n | '--gog-autocomplete-empty-color'\r\n | '--gog-autocomplete-empty-font-size'\r\n | '--gog-autocomplete-error-border-color'\r\n | '--gog-autocomplete-error-color'\r\n | '--gog-autocomplete-error-font-family'\r\n | '--gog-autocomplete-error-font-size'\r\n | '--gog-autocomplete-field-bg'\r\n | '--gog-autocomplete-float-label-in-top'\r\n | '--gog-autocomplete-float-label-on-bg'\r\n | '--gog-autocomplete-float-label-over-gap'\r\n | '--gog-autocomplete-float-label-over-reserve'\r\n | '--gog-autocomplete-float-label-reserve'\r\n | '--gog-autocomplete-focus-ring-color'\r\n | '--gog-autocomplete-focus-ring-offset'\r\n | '--gog-autocomplete-focus-ring-width'\r\n | '--gog-autocomplete-font-family'\r\n | '--gog-autocomplete-font-size'\r\n | '--gog-autocomplete-gap'\r\n | '--gog-autocomplete-hover-border-color'\r\n | '--gog-autocomplete-label-color'\r\n | '--gog-autocomplete-label-font-family'\r\n | '--gog-autocomplete-label-font-size'\r\n | '--gog-autocomplete-label-font-weight'\r\n | '--gog-autocomplete-label-letter-spacing'\r\n | '--gog-autocomplete-label-text-transform'\r\n | '--gog-autocomplete-line-height'\r\n | '--gog-autocomplete-min-width'\r\n | '--gog-autocomplete-option-color'\r\n | '--gog-autocomplete-option-gap'\r\n | '--gog-autocomplete-option-height'\r\n | '--gog-autocomplete-option-hover-bg'\r\n | '--gog-autocomplete-option-hover-color'\r\n | '--gog-autocomplete-option-padding'\r\n | '--gog-autocomplete-option-radius'\r\n | '--gog-autocomplete-option-selected-bg'\r\n | '--gog-autocomplete-option-selected-color'\r\n | '--gog-autocomplete-options-padding'\r\n | '--gog-autocomplete-padding-x'\r\n | '--gog-autocomplete-padding-y'\r\n | '--gog-autocomplete-panel-bg'\r\n | '--gog-autocomplete-panel-border-color'\r\n | '--gog-autocomplete-panel-border-style'\r\n | '--gog-autocomplete-panel-border-width'\r\n | '--gog-autocomplete-panel-gap'\r\n | '--gog-autocomplete-panel-max-height'\r\n | '--gog-autocomplete-panel-max-width'\r\n | '--gog-autocomplete-panel-radius'\r\n | '--gog-autocomplete-panel-shadow'\r\n | '--gog-autocomplete-placeholder-color'\r\n | '--gog-autocomplete-radius'\r\n | '--gog-autocomplete-spinner-size'\r\n | '--gog-autocomplete-text-color'\r\n | '--gog-autocomplete-transition-duration'\r\n | '--gog-background-color'\r\n | '--gog-badge-bg'\r\n | '--gog-badge-border-color'\r\n | '--gog-badge-border-style'\r\n | '--gog-badge-border-width'\r\n | '--gog-badge-color'\r\n | '--gog-badge-danger-bg'\r\n | '--gog-badge-danger-color'\r\n | '--gog-badge-dot-size'\r\n | '--gog-badge-font-family'\r\n | '--gog-badge-font-size'\r\n | '--gog-badge-font-weight'\r\n | '--gog-badge-info-bg'\r\n | '--gog-badge-info-color'\r\n | '--gog-badge-line-height'\r\n | '--gog-badge-offset'\r\n | '--gog-badge-padding-inline'\r\n | '--gog-badge-radius'\r\n | '--gog-badge-size'\r\n | '--gog-badge-success-bg'\r\n | '--gog-badge-success-color'\r\n | '--gog-badge-warning-bg'\r\n | '--gog-badge-warning-color'\r\n | '--gog-badge-z'\r\n | '--gog-border-color'\r\n | '--gog-btn-active-scale'\r\n | '--gog-btn-bg'\r\n | '--gog-btn-border'\r\n | '--gog-btn-border-style'\r\n | '--gog-btn-border-width'\r\n | '--gog-btn-color'\r\n | '--gog-btn-disabled-opacity'\r\n | '--gog-btn-focus-ring-offset'\r\n | '--gog-btn-focus-ring-width'\r\n | '--gog-btn-font-family'\r\n | '--gog-btn-font-weight'\r\n | '--gog-btn-gap'\r\n | '--gog-btn-ghost-bg'\r\n | '--gog-btn-ghost-border'\r\n | '--gog-btn-ghost-color'\r\n | '--gog-btn-ghost-hover-bg'\r\n | '--gog-btn-ghost-hover-color'\r\n | '--gog-btn-ghost-hover-shadow'\r\n | '--gog-btn-ghost-shadow'\r\n | '--gog-btn-ghost-spinner-color'\r\n | '--gog-btn-hover-bg'\r\n | '--gog-btn-hover-color'\r\n | '--gog-btn-hover-shadow'\r\n | '--gog-btn-letter-spacing'\r\n | '--gog-btn-lg-font-size'\r\n | '--gog-btn-lg-padding'\r\n | '--gog-btn-line-height'\r\n | '--gog-btn-loading-opacity'\r\n | '--gog-btn-md-font-size'\r\n | '--gog-btn-md-padding'\r\n | '--gog-btn-outline-bg'\r\n | '--gog-btn-outline-border'\r\n | '--gog-btn-outline-color'\r\n | '--gog-btn-outline-hover-bg'\r\n | '--gog-btn-outline-hover-color'\r\n | '--gog-btn-outline-hover-shadow'\r\n | '--gog-btn-outline-shadow'\r\n | '--gog-btn-outline-spinner-color'\r\n | '--gog-btn-primary-bg'\r\n | '--gog-btn-primary-border'\r\n | '--gog-btn-primary-color'\r\n | '--gog-btn-primary-hover-bg'\r\n | '--gog-btn-primary-hover-color'\r\n | '--gog-btn-primary-hover-shadow'\r\n | '--gog-btn-primary-shadow'\r\n | '--gog-btn-primary-spinner-color'\r\n | '--gog-btn-radius'\r\n | '--gog-btn-secondary-bg'\r\n | '--gog-btn-secondary-border'\r\n | '--gog-btn-secondary-color'\r\n | '--gog-btn-secondary-hover-bg'\r\n | '--gog-btn-secondary-hover-color'\r\n | '--gog-btn-secondary-hover-shadow'\r\n | '--gog-btn-secondary-shadow'\r\n | '--gog-btn-secondary-spinner-color'\r\n | '--gog-btn-shadow'\r\n | '--gog-btn-slg-font-size'\r\n | '--gog-btn-slg-padding'\r\n | '--gog-btn-sm-font-size'\r\n | '--gog-btn-sm-padding'\r\n | '--gog-btn-spinner-color'\r\n | '--gog-btn-spinner-max-size'\r\n | '--gog-btn-text-transform'\r\n | '--gog-btn-transition-duration'\r\n | '--gog-btn-xsm-font-size'\r\n | '--gog-btn-xsm-padding'\r\n | '--gog-button-toggle-bg'\r\n | '--gog-button-toggle-border-color'\r\n | '--gog-button-toggle-border-style'\r\n | '--gog-button-toggle-border-width'\r\n | '--gog-button-toggle-color'\r\n | '--gog-button-toggle-disabled-opacity'\r\n | '--gog-button-toggle-focus-ring-color'\r\n | '--gog-button-toggle-focus-ring-offset'\r\n | '--gog-button-toggle-focus-ring-width'\r\n | '--gog-button-toggle-font-family'\r\n | '--gog-button-toggle-font-size'\r\n | '--gog-button-toggle-font-weight'\r\n | '--gog-button-toggle-gap'\r\n | '--gog-button-toggle-hover-bg'\r\n | '--gog-button-toggle-hover-color'\r\n | '--gog-button-toggle-icon-size'\r\n | '--gog-button-toggle-letter-spacing'\r\n | '--gog-button-toggle-line-height'\r\n | '--gog-button-toggle-padding'\r\n | '--gog-button-toggle-radius'\r\n | '--gog-button-toggle-rest-bg'\r\n | '--gog-button-toggle-rest-color'\r\n | '--gog-button-toggle-selected-bg'\r\n | '--gog-button-toggle-selected-border-color'\r\n | '--gog-button-toggle-selected-color'\r\n | '--gog-button-toggle-separated-gap'\r\n | '--gog-button-toggle-text-transform'\r\n | '--gog-button-toggle-transition-duration'\r\n | '--gog-calendar-action-padding'\r\n | '--gog-calendar-color'\r\n | '--gog-calendar-day-bg'\r\n | '--gog-calendar-day-border-style'\r\n | '--gog-calendar-day-border-width'\r\n | '--gog-calendar-day-color'\r\n | '--gog-calendar-day-hover-bg'\r\n | '--gog-calendar-day-outside-color'\r\n | '--gog-calendar-day-radius'\r\n | '--gog-calendar-day-rest-bg'\r\n | '--gog-calendar-day-rest-color'\r\n | '--gog-calendar-day-size'\r\n | '--gog-calendar-disabled-opacity'\r\n | '--gog-calendar-divider-color'\r\n | '--gog-calendar-divider-style'\r\n | '--gog-calendar-divider-width'\r\n | '--gog-calendar-focus-ring-color'\r\n | '--gog-calendar-focus-ring-offset'\r\n | '--gog-calendar-focus-ring-width'\r\n | '--gog-calendar-font-family'\r\n | '--gog-calendar-footer-gap'\r\n | '--gog-calendar-header-gap'\r\n | '--gog-calendar-header-margin'\r\n | '--gog-calendar-lg-day-size'\r\n | '--gog-calendar-lg-font-size'\r\n | '--gog-calendar-md-day-size'\r\n | '--gog-calendar-md-font-size'\r\n | '--gog-calendar-months-gap'\r\n | '--gog-calendar-nav-bg'\r\n | '--gog-calendar-nav-color'\r\n | '--gog-calendar-nav-hover-bg'\r\n | '--gog-calendar-nav-hover-color'\r\n | '--gog-calendar-nav-icon-overlap'\r\n | '--gog-calendar-nav-icon-size'\r\n | '--gog-calendar-nav-radius'\r\n | '--gog-calendar-nav-size'\r\n | '--gog-calendar-padding'\r\n | '--gog-calendar-range-bg'\r\n | '--gog-calendar-range-color'\r\n | '--gog-calendar-selected-bg'\r\n | '--gog-calendar-selected-color'\r\n | '--gog-calendar-selected-font-weight'\r\n | '--gog-calendar-slg-day-size'\r\n | '--gog-calendar-slg-font-size'\r\n | '--gog-calendar-sm-day-size'\r\n | '--gog-calendar-sm-font-size'\r\n | '--gog-calendar-time-gap'\r\n | '--gog-calendar-time-input-bg'\r\n | '--gog-calendar-time-input-padding'\r\n | '--gog-calendar-time-input-width'\r\n | '--gog-calendar-time-margin'\r\n | '--gog-calendar-title-color'\r\n | '--gog-calendar-title-font-weight'\r\n | '--gog-calendar-today-border-color'\r\n | '--gog-calendar-today-font-weight'\r\n | '--gog-calendar-transition-duration'\r\n | '--gog-calendar-weekday-color'\r\n | '--gog-calendar-weekday-font-size'\r\n | '--gog-calendar-weekday-font-weight'\r\n | '--gog-calendar-weekday-padding'\r\n | '--gog-calendar-weekday-text-transform'\r\n | '--gog-calendar-xsm-day-size'\r\n | '--gog-calendar-xsm-font-size'\r\n | '--gog-checkbox-bg'\r\n | '--gog-checkbox-border-color'\r\n | '--gog-checkbox-border-style'\r\n | '--gog-checkbox-border-width'\r\n | '--gog-checkbox-box-size'\r\n | '--gog-checkbox-checked-bg'\r\n | '--gog-checkbox-checked-border'\r\n | '--gog-checkbox-dash-height'\r\n | '--gog-checkbox-dash-radius'\r\n | '--gog-checkbox-dash-width-ratio'\r\n | '--gog-checkbox-disabled-opacity'\r\n | '--gog-checkbox-focus-ring'\r\n | '--gog-checkbox-focus-ring-offset'\r\n | '--gog-checkbox-focus-ring-width'\r\n | '--gog-checkbox-font-family'\r\n | '--gog-checkbox-gap'\r\n | '--gog-checkbox-icon-color'\r\n | '--gog-checkbox-icon-size'\r\n | '--gog-checkbox-label-color'\r\n | '--gog-checkbox-label-line-height'\r\n | '--gog-checkbox-label-size'\r\n | '--gog-checkbox-padding'\r\n | '--gog-checkbox-radius'\r\n | '--gog-checkbox-transition-duration'\r\n | '--gog-chip-avatar-inset-ratio'\r\n | '--gog-chip-avatar-size'\r\n | '--gog-chip-bg'\r\n | '--gog-chip-border'\r\n | '--gog-chip-border-style'\r\n | '--gog-chip-border-width'\r\n | '--gog-chip-color'\r\n | '--gog-chip-disabled-opacity'\r\n | '--gog-chip-focus-ring-offset'\r\n | '--gog-chip-focus-ring-width'\r\n | '--gog-chip-font-family'\r\n | '--gog-chip-font-size'\r\n | '--gog-chip-font-weight'\r\n | '--gog-chip-gap'\r\n | '--gog-chip-hover-bg'\r\n | '--gog-chip-icon-size'\r\n | '--gog-chip-lg-avatar-size'\r\n | '--gog-chip-lg-font-size'\r\n | '--gog-chip-lg-gap'\r\n | '--gog-chip-lg-icon-size'\r\n | '--gog-chip-lg-padding-block'\r\n | '--gog-chip-lg-padding-inline'\r\n | '--gog-chip-lg-remove-size'\r\n | '--gog-chip-line-height'\r\n | '--gog-chip-md-avatar-size'\r\n | '--gog-chip-md-font-size'\r\n | '--gog-chip-md-gap'\r\n | '--gog-chip-md-icon-size'\r\n | '--gog-chip-md-padding-block'\r\n | '--gog-chip-md-padding-inline'\r\n | '--gog-chip-md-remove-size'\r\n | '--gog-chip-padding-block'\r\n | '--gog-chip-padding-inline'\r\n | '--gog-chip-pill-radius'\r\n | '--gog-chip-radius'\r\n | '--gog-chip-remove-color'\r\n | '--gog-chip-remove-hover-color'\r\n | '--gog-chip-remove-inset-ratio'\r\n | '--gog-chip-remove-scale'\r\n | '--gog-chip-remove-size'\r\n | '--gog-chip-slg-avatar-size'\r\n | '--gog-chip-slg-font-size'\r\n | '--gog-chip-slg-gap'\r\n | '--gog-chip-slg-icon-size'\r\n | '--gog-chip-slg-padding-block'\r\n | '--gog-chip-slg-padding-inline'\r\n | '--gog-chip-slg-remove-size'\r\n | '--gog-chip-sm-avatar-size'\r\n | '--gog-chip-sm-font-size'\r\n | '--gog-chip-sm-gap'\r\n | '--gog-chip-sm-icon-size'\r\n | '--gog-chip-sm-padding-block'\r\n | '--gog-chip-sm-padding-inline'\r\n | '--gog-chip-sm-remove-size'\r\n | '--gog-chip-xsm-avatar-size'\r\n | '--gog-chip-xsm-font-size'\r\n | '--gog-chip-xsm-gap'\r\n | '--gog-chip-xsm-icon-size'\r\n | '--gog-chip-xsm-padding-block'\r\n | '--gog-chip-xsm-padding-inline'\r\n | '--gog-chip-xsm-remove-size'\r\n | '--gog-collapsible-disabled-opacity'\r\n | '--gog-collapsible-max-height'\r\n | '--gog-collapsible-transition-duration'\r\n | '--gog-confirm-actions-gap'\r\n | '--gog-confirm-actions-offset'\r\n | '--gog-confirm-color'\r\n | '--gog-confirm-description-color'\r\n | '--gog-confirm-gap'\r\n | '--gog-confirm-max-width'\r\n | '--gog-confirm-min-width'\r\n | '--gog-control-border-style'\r\n | '--gog-control-border-width'\r\n | '--gog-control-checkbox-box-size-lg'\r\n | '--gog-control-checkbox-box-size-md'\r\n | '--gog-control-checkbox-box-size-slg'\r\n | '--gog-control-checkbox-box-size-sm'\r\n | '--gog-control-checkbox-box-size-xsm'\r\n | '--gog-control-checkbox-icon-size-lg'\r\n | '--gog-control-checkbox-icon-size-md'\r\n | '--gog-control-checkbox-icon-size-slg'\r\n | '--gog-control-checkbox-icon-size-sm'\r\n | '--gog-control-checkbox-icon-size-xsm'\r\n | '--gog-control-checkbox-label-size-lg'\r\n | '--gog-control-checkbox-label-size-md'\r\n | '--gog-control-checkbox-label-size-slg'\r\n | '--gog-control-checkbox-label-size-sm'\r\n | '--gog-control-checkbox-label-size-xsm'\r\n | '--gog-control-checkbox-padding'\r\n | '--gog-control-icon-offset'\r\n | '--gog-control-padding-x'\r\n | '--gog-control-padding-y'\r\n | '--gog-danger-color'\r\n | '--gog-datepicker-actions-gap'\r\n | '--gog-datepicker-actions-inset'\r\n | '--gog-datepicker-actions-reserve'\r\n | '--gog-datepicker-bg'\r\n | '--gog-datepicker-border-color'\r\n | '--gog-datepicker-border-style'\r\n | '--gog-datepicker-border-width'\r\n | '--gog-datepicker-clear-color'\r\n | '--gog-datepicker-clear-icon-ratio'\r\n | '--gog-datepicker-color'\r\n | '--gog-datepicker-disabled-opacity'\r\n | '--gog-datepicker-error-border-color'\r\n | '--gog-datepicker-error-color'\r\n | '--gog-datepicker-error-font-family'\r\n | '--gog-datepicker-error-font-size'\r\n | '--gog-datepicker-field-bg'\r\n | '--gog-datepicker-float-label-in-top'\r\n | '--gog-datepicker-float-label-on-bg'\r\n | '--gog-datepicker-float-label-over-gap'\r\n | '--gog-datepicker-float-label-over-reserve'\r\n | '--gog-datepicker-float-label-reserve'\r\n | '--gog-datepicker-focus-ring-color'\r\n | '--gog-datepicker-focus-ring-offset'\r\n | '--gog-datepicker-focus-ring-width'\r\n | '--gog-datepicker-font-family'\r\n | '--gog-datepicker-font-size'\r\n | '--gog-datepicker-gap'\r\n | '--gog-datepicker-hover-border-color'\r\n | '--gog-datepicker-icon-color'\r\n | '--gog-datepicker-icon-hover-color'\r\n | '--gog-datepicker-label-color'\r\n | '--gog-datepicker-label-font-family'\r\n | '--gog-datepicker-label-font-size'\r\n | '--gog-datepicker-label-letter-spacing'\r\n | '--gog-datepicker-label-text-transform'\r\n | '--gog-datepicker-line-height'\r\n | '--gog-datepicker-min-width'\r\n | '--gog-datepicker-padding-x'\r\n | '--gog-datepicker-padding-y'\r\n | '--gog-datepicker-panel-bg'\r\n | '--gog-datepicker-panel-border-color'\r\n | '--gog-datepicker-panel-border-style'\r\n | '--gog-datepicker-panel-border-width'\r\n | '--gog-datepicker-panel-gap'\r\n | '--gog-datepicker-panel-radius'\r\n | '--gog-datepicker-panel-shadow'\r\n | '--gog-datepicker-placeholder-color'\r\n | '--gog-datepicker-radius'\r\n | '--gog-datepicker-text-color'\r\n | '--gog-datepicker-toggle-icon-size'\r\n | '--gog-datepicker-transition-duration'\r\n | '--gog-dialog-backdrop-bg'\r\n | '--gog-dialog-backdrop-blur'\r\n | '--gog-dialog-backdrop-fade-duration'\r\n | '--gog-dialog-backdrop-padding'\r\n | '--gog-dialog-bg'\r\n | '--gog-dialog-body-max-height'\r\n | '--gog-dialog-body-padding'\r\n | '--gog-dialog-border'\r\n | '--gog-dialog-border-style'\r\n | '--gog-dialog-border-width'\r\n | '--gog-dialog-close-color'\r\n | '--gog-dialog-close-focus-ring'\r\n | '--gog-dialog-close-focus-ring-offset'\r\n | '--gog-dialog-close-focus-ring-width'\r\n | '--gog-dialog-close-font-size'\r\n | '--gog-dialog-close-hover-bg'\r\n | '--gog-dialog-close-hover-border'\r\n | '--gog-dialog-close-hover-color'\r\n | '--gog-dialog-close-size'\r\n | '--gog-dialog-color'\r\n | '--gog-dialog-enter-distance'\r\n | '--gog-dialog-enter-duration'\r\n | '--gog-dialog-font-family'\r\n | '--gog-dialog-header-border-color'\r\n | '--gog-dialog-header-gap'\r\n | '--gog-dialog-header-padding'\r\n | '--gog-dialog-max-height'\r\n | '--gog-dialog-min-width'\r\n | '--gog-dialog-offset-x'\r\n | '--gog-dialog-offset-y'\r\n | '--gog-dialog-radius'\r\n | '--gog-dialog-shadow'\r\n | '--gog-disabled-opacity'\r\n | '--gog-divider-block-spacing'\r\n | '--gog-divider-color'\r\n | '--gog-divider-dashed-style'\r\n | '--gog-divider-dotted-style'\r\n | '--gog-divider-inline-spacing'\r\n | '--gog-divider-inset-size'\r\n | '--gog-divider-label-color'\r\n | '--gog-divider-label-font-family'\r\n | '--gog-divider-label-font-size'\r\n | '--gog-divider-label-font-weight'\r\n | '--gog-divider-label-gap'\r\n | '--gog-divider-label-line-height'\r\n | '--gog-divider-line-color'\r\n | '--gog-divider-line-thickness'\r\n | '--gog-divider-solid-style'\r\n | '--gog-divider-spacing'\r\n | '--gog-divider-thickness'\r\n | '--gog-divider-vertical-length'\r\n | '--gog-dropdown-z'\r\n | '--gog-duration-base'\r\n | '--gog-duration-fast'\r\n | '--gog-duration-slow'\r\n | '--gog-easing'\r\n | '--gog-field-float-label-in-top'\r\n | '--gog-field-float-label-over-gap'\r\n | '--gog-field-float-label-over-reserve'\r\n | '--gog-field-float-label-reserve'\r\n | '--gog-field-lg-font-size'\r\n | '--gog-field-lg-icon-inset'\r\n | '--gog-field-lg-icon-offset'\r\n | '--gog-field-lg-padding-x'\r\n | '--gog-field-lg-padding-y'\r\n | '--gog-field-md-font-size'\r\n | '--gog-field-md-icon-inset'\r\n | '--gog-field-md-icon-offset'\r\n | '--gog-field-md-padding-x'\r\n | '--gog-field-md-padding-y'\r\n | '--gog-field-slg-font-size'\r\n | '--gog-field-slg-icon-inset'\r\n | '--gog-field-slg-icon-offset'\r\n | '--gog-field-slg-padding-x'\r\n | '--gog-field-slg-padding-y'\r\n | '--gog-field-sm-font-size'\r\n | '--gog-field-sm-icon-inset'\r\n | '--gog-field-sm-icon-offset'\r\n | '--gog-field-sm-padding-x'\r\n | '--gog-field-sm-padding-y'\r\n | '--gog-field-xsm-font-size'\r\n | '--gog-field-xsm-icon-inset'\r\n | '--gog-field-xsm-icon-offset'\r\n | '--gog-field-xsm-padding-x'\r\n | '--gog-field-xsm-padding-y'\r\n | '--gog-focus-ring-offset'\r\n | '--gog-focus-ring-width'\r\n | '--gog-font-body'\r\n | '--gog-font-heading'\r\n | '--gog-font-mono'\r\n | '--gog-hover-color'\r\n | '--gog-icon-fallback-size'\r\n | '--gog-icon-size'\r\n | '--gog-icon-stroke-width'\r\n | '--gog-info-color'\r\n | '--gog-input-clear-icon-ratio'\r\n | '--gog-input-clear-inset'\r\n | '--gog-input-clear-radius'\r\n | '--gog-input-disabled-opacity'\r\n | '--gog-input-error-color'\r\n | '--gog-input-error-font-size'\r\n | '--gog-input-error-offset'\r\n | '--gog-input-field-bg'\r\n | '--gog-input-field-border'\r\n | '--gog-input-field-border-style'\r\n | '--gog-input-field-border-width'\r\n | '--gog-input-field-color'\r\n | '--gog-input-float-label-in-top'\r\n | '--gog-input-float-label-on-bg'\r\n | '--gog-input-float-label-over-gap'\r\n | '--gog-input-float-label-over-reserve'\r\n | '--gog-input-float-label-reserve'\r\n | '--gog-input-focus-border'\r\n | '--gog-input-focus-glow'\r\n | '--gog-input-focus-ring'\r\n | '--gog-input-focus-ring-offset'\r\n | '--gog-input-focus-ring-width'\r\n | '--gog-input-font'\r\n | '--gog-input-font-family'\r\n | '--gog-input-gap'\r\n | '--gog-input-icon-action-radius'\r\n | '--gog-input-icon-color'\r\n | '--gog-input-icon-focus-ring-width'\r\n | '--gog-input-icon-hover-color'\r\n | '--gog-input-label-color'\r\n | '--gog-input-label-font-family'\r\n | '--gog-input-label-font-size'\r\n | '--gog-input-label-letter-spacing'\r\n | '--gog-input-label-text-transform'\r\n | '--gog-input-padding-x'\r\n | '--gog-input-padding-y'\r\n | '--gog-input-placeholder-color'\r\n | '--gog-input-radius'\r\n | '--gog-input-spin-hover-bg'\r\n | '--gog-input-spin-width'\r\n | '--gog-input-transition-duration'\r\n | '--gog-ms-actions-gap'\r\n | '--gog-ms-actions-inset'\r\n | '--gog-ms-arrow-icon-ratio'\r\n | '--gog-ms-arrow-transition-duration'\r\n | '--gog-ms-border-color'\r\n | '--gog-ms-checkbox-bg'\r\n | '--gog-ms-checkbox-border'\r\n | '--gog-ms-checkbox-checked-bg'\r\n | '--gog-ms-checkbox-checked-color'\r\n | '--gog-ms-clear-icon-ratio'\r\n | '--gog-ms-clear-radius'\r\n | '--gog-ms-controls-gap'\r\n | '--gog-ms-controls-padding'\r\n | '--gog-ms-disabled-opacity'\r\n | '--gog-ms-error-color'\r\n | '--gog-ms-error-font-size'\r\n | '--gog-ms-error-offset'\r\n | '--gog-ms-field-bg'\r\n | '--gog-ms-field-border'\r\n | '--gog-ms-field-border-style'\r\n | '--gog-ms-field-border-width'\r\n | '--gog-ms-field-color'\r\n | '--gog-ms-filter-border-color'\r\n | '--gog-ms-filter-border-style'\r\n | '--gog-ms-filter-border-width'\r\n | '--gog-ms-filter-empty-color'\r\n | '--gog-ms-filter-empty-padding'\r\n | '--gog-ms-filter-input-bg'\r\n | '--gog-ms-filter-input-border'\r\n | '--gog-ms-filter-input-color'\r\n | '--gog-ms-filter-input-padding-x'\r\n | '--gog-ms-filter-input-padding-y'\r\n | '--gog-ms-filter-input-radius'\r\n | '--gog-ms-filter-padding'\r\n | '--gog-ms-float-label-in-top'\r\n | '--gog-ms-float-label-over-gap'\r\n | '--gog-ms-float-label-over-reserve'\r\n | '--gog-ms-float-label-reserve'\r\n | '--gog-ms-focus-border'\r\n | '--gog-ms-focus-glow'\r\n | '--gog-ms-focus-ring'\r\n | '--gog-ms-focus-ring-offset'\r\n | '--gog-ms-focus-ring-width'\r\n | '--gog-ms-font-family'\r\n | '--gog-ms-gap'\r\n | '--gog-ms-label-color'\r\n | '--gog-ms-label-font-family'\r\n | '--gog-ms-label-font-size'\r\n | '--gog-ms-label-letter-spacing'\r\n | '--gog-ms-label-text-transform'\r\n | '--gog-ms-mark-icon-ratio'\r\n | '--gog-ms-mark-size-ratio'\r\n | '--gog-ms-min-width'\r\n | '--gog-ms-option-color'\r\n | '--gog-ms-option-disabled-opacity'\r\n | '--gog-ms-option-gap'\r\n | '--gog-ms-option-gap-inline'\r\n | '--gog-ms-option-height'\r\n | '--gog-ms-option-hover-bg'\r\n | '--gog-ms-option-radius'\r\n | '--gog-ms-option-transition-duration'\r\n | '--gog-ms-options-padding'\r\n | '--gog-ms-overflow-color'\r\n | '--gog-ms-overflow-font-size'\r\n | '--gog-ms-overflow-gap'\r\n | '--gog-ms-panel-bg'\r\n | '--gog-ms-panel-border'\r\n | '--gog-ms-panel-max-height'\r\n | '--gog-ms-panel-max-width'\r\n | '--gog-ms-panel-offset'\r\n | '--gog-ms-panel-shadow'\r\n | '--gog-ms-placeholder-color'\r\n | '--gog-ms-radius'\r\n | '--gog-ms-transition-duration'\r\n | '--gog-ms-value-color'\r\n | '--gog-multiselect-actions-gap'\r\n | '--gog-multiselect-actions-inset'\r\n | '--gog-multiselect-arrow-icon-ratio'\r\n | '--gog-multiselect-arrow-transition-duration'\r\n | '--gog-multiselect-border-color'\r\n | '--gog-multiselect-checkbox-bg'\r\n | '--gog-multiselect-checkbox-border'\r\n | '--gog-multiselect-checkbox-checked-bg'\r\n | '--gog-multiselect-checkbox-checked-color'\r\n | '--gog-multiselect-clear-icon-ratio'\r\n | '--gog-multiselect-clear-radius'\r\n | '--gog-multiselect-controls-gap'\r\n | '--gog-multiselect-controls-padding'\r\n | '--gog-multiselect-disabled-opacity'\r\n | '--gog-multiselect-error-color'\r\n | '--gog-multiselect-error-font-size'\r\n | '--gog-multiselect-error-offset'\r\n | '--gog-multiselect-field-bg'\r\n | '--gog-multiselect-field-border'\r\n | '--gog-multiselect-field-border-style'\r\n | '--gog-multiselect-field-border-width'\r\n | '--gog-multiselect-field-color'\r\n | '--gog-multiselect-filter-border-color'\r\n | '--gog-multiselect-filter-border-style'\r\n | '--gog-multiselect-filter-border-width'\r\n | '--gog-multiselect-filter-empty-color'\r\n | '--gog-multiselect-filter-empty-padding'\r\n | '--gog-multiselect-filter-input-bg'\r\n | '--gog-multiselect-filter-input-border'\r\n | '--gog-multiselect-filter-input-color'\r\n | '--gog-multiselect-filter-input-padding-x'\r\n | '--gog-multiselect-filter-input-padding-y'\r\n | '--gog-multiselect-filter-input-radius'\r\n | '--gog-multiselect-filter-padding'\r\n | '--gog-multiselect-float-label-in-top'\r\n | '--gog-multiselect-float-label-on-bg'\r\n | '--gog-multiselect-float-label-over-gap'\r\n | '--gog-multiselect-float-label-over-reserve'\r\n | '--gog-multiselect-float-label-reserve'\r\n | '--gog-multiselect-focus-border'\r\n | '--gog-multiselect-focus-glow'\r\n | '--gog-multiselect-focus-ring'\r\n | '--gog-multiselect-focus-ring-offset'\r\n | '--gog-multiselect-focus-ring-width'\r\n | '--gog-multiselect-font-family'\r\n | '--gog-multiselect-font-size'\r\n | '--gog-multiselect-gap'\r\n | '--gog-multiselect-label-color'\r\n | '--gog-multiselect-label-font-family'\r\n | '--gog-multiselect-label-font-size'\r\n | '--gog-multiselect-label-letter-spacing'\r\n | '--gog-multiselect-label-text-transform'\r\n | '--gog-multiselect-mark-icon-ratio'\r\n | '--gog-multiselect-mark-size-ratio'\r\n | '--gog-multiselect-min-width'\r\n | '--gog-multiselect-option-color'\r\n | '--gog-multiselect-option-disabled-opacity'\r\n | '--gog-multiselect-option-gap'\r\n | '--gog-multiselect-option-gap-inline'\r\n | '--gog-multiselect-option-height'\r\n | '--gog-multiselect-option-hover-bg'\r\n | '--gog-multiselect-option-radius'\r\n | '--gog-multiselect-option-transition-duration'\r\n | '--gog-multiselect-options-padding'\r\n | '--gog-multiselect-overflow-color'\r\n | '--gog-multiselect-overflow-font-size'\r\n | '--gog-multiselect-overflow-gap'\r\n | '--gog-multiselect-padding-x'\r\n | '--gog-multiselect-padding-y'\r\n | '--gog-multiselect-panel-bg'\r\n | '--gog-multiselect-panel-border'\r\n | '--gog-multiselect-panel-max-height'\r\n | '--gog-multiselect-panel-max-width'\r\n | '--gog-multiselect-panel-offset'\r\n | '--gog-multiselect-panel-shadow'\r\n | '--gog-multiselect-placeholder-color'\r\n | '--gog-multiselect-radius'\r\n | '--gog-multiselect-transition-duration'\r\n | '--gog-multiselect-value-color'\r\n | '--gog-muted-text-color'\r\n | '--gog-paginator-ellipsis-color'\r\n | '--gog-paginator-ellipsis-font-family'\r\n | '--gog-paginator-ellipsis-font-size'\r\n | '--gog-paginator-ellipsis-min-width'\r\n | '--gog-paginator-gap'\r\n | '--gog-panel-border-style'\r\n | '--gog-panel-border-width'\r\n | '--gog-panel-radius'\r\n | '--gog-panel-shadow'\r\n | '--gog-primary-color'\r\n | '--gog-progressbar-accent-bg'\r\n | '--gog-progressbar-accent-buffer-bg'\r\n | '--gog-progressbar-buffer-bg'\r\n | '--gog-progressbar-danger-bg'\r\n | '--gog-progressbar-danger-buffer-bg'\r\n | '--gog-progressbar-fill-bg'\r\n | '--gog-progressbar-height'\r\n | '--gog-progressbar-indeterminate-duration'\r\n | '--gog-progressbar-indeterminate-easing'\r\n | '--gog-progressbar-info-bg'\r\n | '--gog-progressbar-info-buffer-bg'\r\n | '--gog-progressbar-lg-height'\r\n | '--gog-progressbar-md-height'\r\n | '--gog-progressbar-radius'\r\n | '--gog-progressbar-slg-height'\r\n | '--gog-progressbar-sm-height'\r\n | '--gog-progressbar-stripe-color'\r\n | '--gog-progressbar-stripe-size'\r\n | '--gog-progressbar-success-bg'\r\n | '--gog-progressbar-success-buffer-bg'\r\n | '--gog-progressbar-track-base-bg'\r\n | '--gog-progressbar-track-bg'\r\n | '--gog-progressbar-transition-duration'\r\n | '--gog-progressbar-value-color'\r\n | '--gog-progressbar-value-font-family'\r\n | '--gog-progressbar-value-font-size'\r\n | '--gog-progressbar-value-gap'\r\n | '--gog-progressbar-value-min-width'\r\n | '--gog-progressbar-warning-bg'\r\n | '--gog-progressbar-warning-buffer-bg'\r\n | '--gog-progressbar-xsm-height'\r\n | '--gog-radio-bg'\r\n | '--gog-radio-border-color'\r\n | '--gog-radio-border-style'\r\n | '--gog-radio-border-width'\r\n | '--gog-radio-box-size'\r\n | '--gog-radio-checked-bg'\r\n | '--gog-radio-checked-border'\r\n | '--gog-radio-disabled-opacity'\r\n | '--gog-radio-dot-color'\r\n | '--gog-radio-dot-size-ratio'\r\n | '--gog-radio-error-color'\r\n | '--gog-radio-error-font-size'\r\n | '--gog-radio-focus-ring'\r\n | '--gog-radio-focus-ring-offset'\r\n | '--gog-radio-focus-ring-width'\r\n | '--gog-radio-font-family'\r\n | '--gog-radio-gap'\r\n | '--gog-radio-group-gap'\r\n | '--gog-radio-group-label-color'\r\n | '--gog-radio-group-label-size'\r\n | '--gog-radio-group-option-gap'\r\n | '--gog-radio-group-option-gap-horizontal'\r\n | '--gog-radio-label-color'\r\n | '--gog-radio-label-line-height'\r\n | '--gog-radio-label-size'\r\n | '--gog-radio-padding'\r\n | '--gog-radio-transition-duration'\r\n | '--gog-radius'\r\n | '--gog-scroll-corner-bg'\r\n | '--gog-scroll-fade-duration'\r\n | '--gog-scroll-focus-ring'\r\n | '--gog-scroll-focus-ring-width'\r\n | '--gog-scroll-normal-thumb-hit-padding'\r\n | '--gog-scroll-normal-thumb-min-size'\r\n | '--gog-scroll-normal-track-width'\r\n | '--gog-scroll-thin-thumb-hit-padding'\r\n | '--gog-scroll-thin-thumb-min-size'\r\n | '--gog-scroll-thin-track-width'\r\n | '--gog-scroll-thumb-active-bg'\r\n | '--gog-scroll-thumb-bg'\r\n | '--gog-scroll-thumb-hover-bg'\r\n | '--gog-scroll-thumb-inset'\r\n | '--gog-scroll-thumb-radius'\r\n | '--gog-scroll-track-bg'\r\n | '--gog-scroll-track-radius'\r\n | '--gog-secondary-color'\r\n | '--gog-select-chevron-color'\r\n | '--gog-select-chevron-icon-ratio'\r\n | '--gog-select-chevron-inset'\r\n | '--gog-select-clear-color'\r\n | '--gog-select-clear-gap'\r\n | '--gog-select-clear-hover-color'\r\n | '--gog-select-clear-icon-ratio'\r\n | '--gog-select-clear-radius'\r\n | '--gog-select-control-font'\r\n | '--gog-select-control-gap'\r\n | '--gog-select-control-padding-x'\r\n | '--gog-select-control-padding-y'\r\n | '--gog-select-disabled-opacity'\r\n | '--gog-select-error-color'\r\n | '--gog-select-error-font-size'\r\n | '--gog-select-field-bg'\r\n | '--gog-select-field-border'\r\n | '--gog-select-field-border-style'\r\n | '--gog-select-field-border-width'\r\n | '--gog-select-field-color'\r\n | '--gog-select-filter-border-color'\r\n | '--gog-select-filter-border-style'\r\n | '--gog-select-filter-border-width'\r\n | '--gog-select-filter-empty-color'\r\n | '--gog-select-filter-empty-padding'\r\n | '--gog-select-filter-input-bg'\r\n | '--gog-select-filter-input-border'\r\n | '--gog-select-filter-input-color'\r\n | '--gog-select-filter-input-padding-x'\r\n | '--gog-select-filter-input-padding-y'\r\n | '--gog-select-filter-input-radius'\r\n | '--gog-select-filter-padding'\r\n | '--gog-select-float-label-in-top'\r\n | '--gog-select-float-label-on-bg'\r\n | '--gog-select-float-label-over-gap'\r\n | '--gog-select-float-label-over-reserve'\r\n | '--gog-select-float-label-reserve'\r\n | '--gog-select-focus-border'\r\n | '--gog-select-focus-glow'\r\n | '--gog-select-focus-ring'\r\n | '--gog-select-focus-ring-offset'\r\n | '--gog-select-focus-ring-width'\r\n | '--gog-select-font-family'\r\n | '--gog-select-gap'\r\n | '--gog-select-label-color'\r\n | '--gog-select-label-font-family'\r\n | '--gog-select-label-font-size'\r\n | '--gog-select-label-letter-spacing'\r\n | '--gog-select-label-text-transform'\r\n | '--gog-select-mark-icon-ratio'\r\n | '--gog-select-mark-size-ratio'\r\n | '--gog-select-min-width'\r\n | '--gog-select-option-color'\r\n | '--gog-select-option-disabled-opacity'\r\n | '--gog-select-option-gap'\r\n | '--gog-select-option-height'\r\n | '--gog-select-option-hover-bg'\r\n | '--gog-select-option-selected-color'\r\n | '--gog-select-option-transition-duration'\r\n | '--gog-select-panel-bg'\r\n | '--gog-select-panel-max-height'\r\n | '--gog-select-panel-max-width'\r\n | '--gog-select-panel-offset'\r\n | '--gog-select-panel-shadow'\r\n | '--gog-select-placeholder-color'\r\n | '--gog-select-radius'\r\n | '--gog-select-transition-duration'\r\n | '--gog-skeleton-base'\r\n | '--gog-skeleton-circle-size-lg'\r\n | '--gog-skeleton-circle-size-md'\r\n | '--gog-skeleton-circle-size-slg'\r\n | '--gog-skeleton-circle-size-sm'\r\n | '--gog-skeleton-circle-size-xsm'\r\n | '--gog-skeleton-line-gap'\r\n | '--gog-skeleton-line-height-lg'\r\n | '--gog-skeleton-line-height-md'\r\n | '--gog-skeleton-line-height-slg'\r\n | '--gog-skeleton-line-height-sm'\r\n | '--gog-skeleton-line-height-xsm'\r\n | '--gog-skeleton-line-radius'\r\n | '--gog-skeleton-pulse-duration'\r\n | '--gog-skeleton-pulse-min-opacity'\r\n | '--gog-skeleton-radius'\r\n | '--gog-skeleton-rect-height-lg'\r\n | '--gog-skeleton-rect-height-md'\r\n | '--gog-skeleton-rect-height-slg'\r\n | '--gog-skeleton-rect-height-sm'\r\n | '--gog-skeleton-rect-height-xsm'\r\n | '--gog-skeleton-shine'\r\n | '--gog-skeleton-short-line-width'\r\n | '--gog-skeleton-square-radius'\r\n | '--gog-skeleton-wave-duration'\r\n | '--gog-slider-auto-width'\r\n | '--gog-slider-disabled-opacity'\r\n | '--gog-slider-error-color'\r\n | '--gog-slider-error-font-family'\r\n | '--gog-slider-error-font-size'\r\n | '--gog-slider-fill-bg'\r\n | '--gog-slider-focus-ring'\r\n | '--gog-slider-focus-ring-width'\r\n | '--gog-slider-gap'\r\n | '--gog-slider-label-color'\r\n | '--gog-slider-label-font-family'\r\n | '--gog-slider-label-font-size'\r\n | '--gog-slider-label-letter-spacing'\r\n | '--gog-slider-label-text-transform'\r\n | '--gog-slider-range-color'\r\n | '--gog-slider-range-font-size'\r\n | '--gog-slider-thumb-bg'\r\n | '--gog-slider-thumb-border'\r\n | '--gog-slider-thumb-border-width'\r\n | '--gog-slider-thumb-glow-size'\r\n | '--gog-slider-thumb-radius'\r\n | '--gog-slider-thumb-shadow'\r\n | '--gog-slider-thumb-size'\r\n | '--gog-slider-track-area-height'\r\n | '--gog-slider-track-bg'\r\n | '--gog-slider-track-border-color'\r\n | '--gog-slider-track-border-style'\r\n | '--gog-slider-track-border-width'\r\n | '--gog-slider-track-height'\r\n | '--gog-slider-track-radius'\r\n | '--gog-slider-value-color'\r\n | '--gog-slider-value-font-family'\r\n | '--gog-slider-value-font-size'\r\n | '--gog-slider-value-min-width'\r\n | '--gog-slider-vertical-length'\r\n | '--gog-space-2xl'\r\n | '--gog-space-lg'\r\n | '--gog-space-md'\r\n | '--gog-space-sm'\r\n | '--gog-space-xs'\r\n | '--gog-spinner-arc-inner-color'\r\n | '--gog-spinner-arc-inner-dash'\r\n | '--gog-spinner-arc-inner-glow'\r\n | '--gog-spinner-arc-inner-opacity'\r\n | '--gog-spinner-arc-inner-pulse-opacity'\r\n | '--gog-spinner-arc-inner-stroke-compact'\r\n | '--gog-spinner-arc-outer-color'\r\n | '--gog-spinner-arc-outer-dash'\r\n | '--gog-spinner-arc-outer-glow'\r\n | '--gog-spinner-arc-outer-pulse-opacity'\r\n | '--gog-spinner-diamond-color'\r\n | '--gog-spinner-diamond-glow'\r\n | '--gog-spinner-diamond-opacity'\r\n | '--gog-spinner-glow-color'\r\n | '--gog-spinner-overlay-bg'\r\n | '--gog-spinner-overlay-blur'\r\n | '--gog-spinner-overlay-fade-duration'\r\n | '--gog-spinner-overlay-z'\r\n | '--gog-spinner-pulse-duration'\r\n | '--gog-spinner-ring-duration'\r\n | '--gog-spinner-ring-glow'\r\n | '--gog-spinner-ring-padding'\r\n | '--gog-spinner-rune-color'\r\n | '--gog-spinner-rune-font-family'\r\n | '--gog-spinner-rune-glow'\r\n | '--gog-spinner-rune-pulse-opacity'\r\n | '--gog-spinner-rune-size'\r\n | '--gog-spinner-size-lg'\r\n | '--gog-spinner-size-md'\r\n | '--gog-spinner-size-slg'\r\n | '--gog-spinner-size-sm'\r\n | '--gog-spinner-size-xsm'\r\n | '--gog-spinner-spin-duration'\r\n | '--gog-spinner-spin-slow-duration'\r\n | '--gog-spinner-ticks-duration'\r\n | '--gog-spinner-track-color'\r\n | '--gog-spinner-track-opacity'\r\n | '--gog-success-color'\r\n | '--gog-surface-color'\r\n | '--gog-table-accent-bright'\r\n | '--gog-table-accent-color'\r\n | '--gog-table-border-color'\r\n | '--gog-table-border-style'\r\n | '--gog-table-border-width'\r\n | '--gog-table-empty-font-size'\r\n | '--gog-table-empty-padding'\r\n | '--gog-table-focus-ring'\r\n | '--gog-table-focus-ring-width'\r\n | '--gog-table-font-family'\r\n | '--gog-table-footer-gap'\r\n | '--gog-table-footer-min-height'\r\n | '--gog-table-gap'\r\n | '--gog-table-header-font-family'\r\n | '--gog-table-header-letter-spacing'\r\n | '--gog-table-header-text-transform'\r\n | '--gog-table-hover-bg'\r\n | '--gog-table-lg-padding-v'\r\n | '--gog-table-lg-td-font-size'\r\n | '--gog-table-lg-th-font-size'\r\n | '--gog-table-loading-opacity'\r\n | '--gog-table-loading-padding'\r\n | '--gog-table-md-padding-v'\r\n | '--gog-table-md-td-font-size'\r\n | '--gog-table-md-th-font-size'\r\n | '--gog-table-muted-color'\r\n | '--gog-table-num-col-width'\r\n | '--gog-table-num-font-size'\r\n | '--gog-table-numeric-font-family'\r\n | '--gog-table-padding-h'\r\n | '--gog-table-row-border-width'\r\n | '--gog-table-row-transition-duration'\r\n | '--gog-table-slg-padding-v'\r\n | '--gog-table-slg-td-font-size'\r\n | '--gog-table-slg-th-font-size'\r\n | '--gog-table-sm-padding-v'\r\n | '--gog-table-sm-td-font-size'\r\n | '--gog-table-sm-th-font-size'\r\n | '--gog-table-sort-icon-opacity'\r\n | '--gog-table-sort-icon-size'\r\n | '--gog-table-sort-icon-width'\r\n | '--gog-table-surface'\r\n | '--gog-table-td-font-size'\r\n | '--gog-table-td-padding-v'\r\n | '--gog-table-text-color'\r\n | '--gog-table-th-font-size'\r\n | '--gog-table-th-inner-gap'\r\n | '--gog-table-th-padding-v'\r\n | '--gog-table-total-font-size'\r\n | '--gog-table-total-letter-spacing'\r\n | '--gog-table-total-text-transform'\r\n | '--gog-table-xsm-padding-v'\r\n | '--gog-table-xsm-td-font-size'\r\n | '--gog-table-xsm-th-font-size'\r\n | '--gog-tabs-active-color'\r\n | '--gog-tabs-disabled-opacity'\r\n | '--gog-tabs-focus-ring-color'\r\n | '--gog-tabs-focus-ring-offset'\r\n | '--gog-tabs-focus-ring-width'\r\n | '--gog-tabs-font-family'\r\n | '--gog-tabs-font-weight'\r\n | '--gog-tabs-gap'\r\n | '--gog-tabs-header-border-color'\r\n | '--gog-tabs-header-border-style'\r\n | '--gog-tabs-header-border-width'\r\n | '--gog-tabs-hover-color'\r\n | '--gog-tabs-icon-size'\r\n | '--gog-tabs-indicator-color'\r\n | '--gog-tabs-indicator-radius'\r\n | '--gog-tabs-indicator-thickness'\r\n | '--gog-tabs-letter-spacing'\r\n | '--gog-tabs-lg-font-size'\r\n | '--gog-tabs-lg-padding'\r\n | '--gog-tabs-line-height'\r\n | '--gog-tabs-md-font-size'\r\n | '--gog-tabs-md-padding'\r\n | '--gog-tabs-panel-color'\r\n | '--gog-tabs-panel-padding'\r\n | '--gog-tabs-rest-bg'\r\n | '--gog-tabs-rest-color'\r\n | '--gog-tabs-slg-font-size'\r\n | '--gog-tabs-slg-padding'\r\n | '--gog-tabs-sm-font-size'\r\n | '--gog-tabs-sm-padding'\r\n | '--gog-tabs-tab-bg'\r\n | '--gog-tabs-tab-color'\r\n | '--gog-tabs-tab-font-size'\r\n | '--gog-tabs-tab-gap'\r\n | '--gog-tabs-tab-padding'\r\n | '--gog-tabs-text-transform'\r\n | '--gog-tabs-transition-duration'\r\n | '--gog-tabs-xsm-font-size'\r\n | '--gog-tabs-xsm-padding'\r\n | '--gog-tag-accent'\r\n | '--gog-tag-bg'\r\n | '--gog-tag-bg-base'\r\n | '--gog-tag-bg-mix'\r\n | '--gog-tag-border'\r\n | '--gog-tag-border-style'\r\n | '--gog-tag-border-width'\r\n | '--gog-tag-color'\r\n | '--gog-tag-color-base'\r\n | '--gog-tag-color-mix'\r\n | '--gog-tag-danger-color'\r\n | '--gog-tag-default-color'\r\n | '--gog-tag-font-family'\r\n | '--gog-tag-font-size'\r\n | '--gog-tag-font-weight'\r\n | '--gog-tag-gap'\r\n | '--gog-tag-icon-size'\r\n | '--gog-tag-info-color'\r\n | '--gog-tag-inner-border-width'\r\n | '--gog-tag-lg-font-size'\r\n | '--gog-tag-lg-gap'\r\n | '--gog-tag-lg-icon-size'\r\n | '--gog-tag-lg-padding-block'\r\n | '--gog-tag-lg-padding-inline'\r\n | '--gog-tag-line-height'\r\n | '--gog-tag-md-font-size'\r\n | '--gog-tag-md-gap'\r\n | '--gog-tag-md-icon-size'\r\n | '--gog-tag-md-padding-block'\r\n | '--gog-tag-md-padding-inline'\r\n | '--gog-tag-padding-block'\r\n | '--gog-tag-padding-inline'\r\n | '--gog-tag-pill-radius'\r\n | '--gog-tag-radius'\r\n | '--gog-tag-slg-font-size'\r\n | '--gog-tag-slg-gap'\r\n | '--gog-tag-slg-icon-size'\r\n | '--gog-tag-slg-padding-block'\r\n | '--gog-tag-slg-padding-inline'\r\n | '--gog-tag-sm-font-size'\r\n | '--gog-tag-sm-gap'\r\n | '--gog-tag-sm-icon-size'\r\n | '--gog-tag-sm-padding-block'\r\n | '--gog-tag-sm-padding-inline'\r\n | '--gog-tag-success-color'\r\n | '--gog-tag-warning-color'\r\n | '--gog-tag-xsm-font-size'\r\n | '--gog-tag-xsm-gap'\r\n | '--gog-tag-xsm-icon-size'\r\n | '--gog-tag-xsm-padding-block'\r\n | '--gog-tag-xsm-padding-inline'\r\n | '--gog-text-2xl'\r\n | '--gog-text-3xl'\r\n | '--gog-text-color'\r\n | '--gog-text-lg'\r\n | '--gog-text-md'\r\n | '--gog-text-sm'\r\n | '--gog-text-xl'\r\n | '--gog-text-xs'\r\n | '--gog-textarea-clear-icon-ratio'\r\n | '--gog-textarea-resize-grip-color'\r\n | '--gog-textarea-resize-grip-offset'\r\n | '--gog-textarea-resize-grip-opacity'\r\n | '--gog-textarea-resize-grip-size'\r\n | '--gog-textarea-resize-grip-stripe-gap'\r\n | '--gog-textarea-resize-grip-stripe-width'\r\n | '--gog-textarea-resize-inset-bottom'\r\n | '--gog-textarea-resize-inset-right'\r\n | '--gog-textarea-scrollbar-width'\r\n | '--gog-toast-accent-width'\r\n | '--gog-toast-action-font-size'\r\n | '--gog-toast-action-padding'\r\n | '--gog-toast-actions-gap'\r\n | '--gog-toast-base-z'\r\n | '--gog-toast-bg'\r\n | '--gog-toast-border'\r\n | '--gog-toast-close-font-size'\r\n | '--gog-toast-close-padding'\r\n | '--gog-toast-color'\r\n | '--gog-toast-content-gap'\r\n | '--gog-toast-enter-distance'\r\n | '--gog-toast-error-color'\r\n | '--gog-toast-font-family'\r\n | '--gog-toast-gap'\r\n | '--gog-toast-icon-color'\r\n | '--gog-toast-icon-line-height'\r\n | '--gog-toast-icon-size'\r\n | '--gog-toast-info-color'\r\n | '--gog-toast-main-gap'\r\n | '--gog-toast-max-width'\r\n | '--gog-toast-message-font-size'\r\n | '--gog-toast-message-line-height'\r\n | '--gog-toast-min-width'\r\n | '--gog-toast-padding'\r\n | '--gog-toast-progress-height'\r\n | '--gog-toast-progress-opacity'\r\n | '--gog-toast-radius'\r\n | '--gog-toast-shadow'\r\n | '--gog-toast-stack-expanded-gap'\r\n | '--gog-toast-stack-max-depth'\r\n | '--gog-toast-stack-min-opacity'\r\n | '--gog-toast-stack-opacity-step'\r\n | '--gog-toast-stack-padding'\r\n | '--gog-toast-stack-peek'\r\n | '--gog-toast-stack-scale-step'\r\n | '--gog-toast-success-color'\r\n | '--gog-toast-transition-duration'\r\n | '--gog-toast-warning-color'\r\n | '--gog-toast-z-index'\r\n | '--gog-toggle-border-color'\r\n | '--gog-toggle-border-style'\r\n | '--gog-toggle-border-width'\r\n | '--gog-toggle-disabled-opacity'\r\n | '--gog-toggle-focus-ring-color'\r\n | '--gog-toggle-focus-ring-offset'\r\n | '--gog-toggle-focus-ring-width'\r\n | '--gog-toggle-font-family'\r\n | '--gog-toggle-gap'\r\n | '--gog-toggle-label-color'\r\n | '--gog-toggle-label-line-height'\r\n | '--gog-toggle-lg-label-size'\r\n | '--gog-toggle-lg-state-font-size'\r\n | '--gog-toggle-lg-thumb-size'\r\n | '--gog-toggle-lg-track-height'\r\n | '--gog-toggle-lg-track-width'\r\n | '--gog-toggle-md-label-size'\r\n | '--gog-toggle-md-state-font-size'\r\n | '--gog-toggle-md-thumb-size'\r\n | '--gog-toggle-md-track-height'\r\n | '--gog-toggle-md-track-width'\r\n | '--gog-toggle-on-border-color'\r\n | '--gog-toggle-padding'\r\n | '--gog-toggle-radius'\r\n | '--gog-toggle-slg-label-size'\r\n | '--gog-toggle-slg-state-font-size'\r\n | '--gog-toggle-slg-thumb-size'\r\n | '--gog-toggle-slg-track-height'\r\n | '--gog-toggle-slg-track-width'\r\n | '--gog-toggle-sm-label-size'\r\n | '--gog-toggle-sm-state-font-size'\r\n | '--gog-toggle-sm-thumb-size'\r\n | '--gog-toggle-sm-track-height'\r\n | '--gog-toggle-sm-track-width'\r\n | '--gog-toggle-state-color'\r\n | '--gog-toggle-state-font-weight'\r\n | '--gog-toggle-state-letter-spacing'\r\n | '--gog-toggle-state-offset'\r\n | '--gog-toggle-state-padding-inline'\r\n | '--gog-toggle-state-thumb-gap'\r\n | '--gog-toggle-thumb-bg'\r\n | '--gog-toggle-thumb-inset'\r\n | '--gog-toggle-thumb-off-bg'\r\n | '--gog-toggle-thumb-on-bg'\r\n | '--gog-toggle-thumb-shadow'\r\n | '--gog-toggle-track-bg'\r\n | '--gog-toggle-track-off-bg'\r\n | '--gog-toggle-track-on-bg'\r\n | '--gog-toggle-transition-duration'\r\n | '--gog-toggle-xsm-label-size'\r\n | '--gog-toggle-xsm-state-font-size'\r\n | '--gog-toggle-xsm-thumb-size'\r\n | '--gog-toggle-xsm-track-height'\r\n | '--gog-toggle-xsm-track-width'\r\n | '--gog-tooltip-arrow-size'\r\n | '--gog-tooltip-bg'\r\n | '--gog-tooltip-border-color'\r\n | '--gog-tooltip-border-style'\r\n | '--gog-tooltip-border-width'\r\n | '--gog-tooltip-color'\r\n | '--gog-tooltip-font-family'\r\n | '--gog-tooltip-font-size'\r\n | '--gog-tooltip-gap'\r\n | '--gog-tooltip-line-height'\r\n | '--gog-tooltip-max-height'\r\n | '--gog-tooltip-max-width'\r\n | '--gog-tooltip-padding'\r\n | '--gog-tooltip-radius'\r\n | '--gog-tooltip-shadow'\r\n | '--gog-tooltip-transition-duration'\r\n | '--gog-tooltip-z'\r\n | '--gog-warning-color';\r\n\r\n/** Which of the three layers a token belongs to — see the README's theming section. */\r\nexport type GogTokenLayer = 'foundation' | 'component' | 'instance';\r\n\r\nexport interface GogTokenGroup {\r\n /** The `── Section ──` heading the token sits under in theme.css. */\r\n readonly section: string;\r\n readonly layer: GogTokenLayer;\r\n readonly tokens: readonly GogTokenName[];\r\n}\r\n\r\n/**\r\n * The token catalogue, grouped as theme.css groups it. Exported so a theme editor or docs page\r\n * can enumerate the real tokens instead of keeping a hand-copied list that drifts.\r\n */\r\nexport const GOG_TOKEN_GROUPS: readonly GogTokenGroup[] = [\r\n {\r\n section: 'Typography',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-font-body',\r\n '--gog-font-heading',\r\n '--gog-font-mono',\r\n '--gog-text-2xl',\r\n '--gog-text-3xl',\r\n '--gog-text-lg',\r\n '--gog-text-md',\r\n '--gog-text-sm',\r\n '--gog-text-xl',\r\n '--gog-text-xs',\r\n ],\r\n },\r\n {\r\n section: 'Spacing & geometry',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-panel-border-style',\r\n '--gog-panel-border-width',\r\n '--gog-radius',\r\n '--gog-space-2xl',\r\n '--gog-space-lg',\r\n '--gog-space-md',\r\n '--gog-space-sm',\r\n '--gog-space-xs',\r\n ],\r\n },\r\n {\r\n section: 'Motion',\r\n layer: 'foundation',\r\n tokens: ['--gog-duration-base', '--gog-duration-fast', '--gog-duration-slow', '--gog-easing'],\r\n },\r\n {\r\n section: 'Focus & disabled',\r\n layer: 'foundation',\r\n tokens: ['--gog-disabled-opacity', '--gog-focus-ring-offset', '--gog-focus-ring-width'],\r\n },\r\n {\r\n section: 'Control metrics',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-control-border-style',\r\n '--gog-control-border-width',\r\n '--gog-control-checkbox-box-size-lg',\r\n '--gog-control-checkbox-box-size-md',\r\n '--gog-control-checkbox-box-size-slg',\r\n '--gog-control-checkbox-box-size-sm',\r\n '--gog-control-checkbox-box-size-xsm',\r\n '--gog-control-checkbox-icon-size-lg',\r\n '--gog-control-checkbox-icon-size-md',\r\n '--gog-control-checkbox-icon-size-slg',\r\n '--gog-control-checkbox-icon-size-sm',\r\n '--gog-control-checkbox-icon-size-xsm',\r\n '--gog-control-checkbox-label-size-lg',\r\n '--gog-control-checkbox-label-size-md',\r\n '--gog-control-checkbox-label-size-slg',\r\n '--gog-control-checkbox-label-size-sm',\r\n '--gog-control-checkbox-label-size-xsm',\r\n '--gog-control-checkbox-padding',\r\n '--gog-control-icon-offset',\r\n '--gog-control-padding-x',\r\n '--gog-control-padding-y',\r\n ],\r\n },\r\n {\r\n section: 'Button sizing',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-btn-lg-font-size',\r\n '--gog-btn-lg-padding',\r\n '--gog-btn-md-font-size',\r\n '--gog-btn-md-padding',\r\n '--gog-btn-slg-font-size',\r\n '--gog-btn-slg-padding',\r\n '--gog-btn-sm-font-size',\r\n '--gog-btn-sm-padding',\r\n '--gog-btn-xsm-font-size',\r\n '--gog-btn-xsm-padding',\r\n ],\r\n },\r\n {\r\n section: 'Field sizing (input / select / multiselect share one scale)',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-field-lg-icon-inset',\r\n '--gog-field-lg-icon-offset',\r\n '--gog-field-lg-padding-x',\r\n '--gog-field-lg-padding-y',\r\n '--gog-field-md-icon-inset',\r\n '--gog-field-slg-font-size',\r\n '--gog-field-slg-icon-inset',\r\n '--gog-field-slg-icon-offset',\r\n '--gog-field-slg-padding-x',\r\n '--gog-field-slg-padding-y',\r\n '--gog-field-sm-icon-inset',\r\n '--gog-field-sm-icon-offset',\r\n '--gog-field-sm-padding-x',\r\n '--gog-field-sm-padding-y',\r\n '--gog-field-xsm-icon-inset',\r\n '--gog-field-xsm-icon-offset',\r\n '--gog-field-xsm-padding-x',\r\n '--gog-field-xsm-padding-y',\r\n ],\r\n },\r\n {\r\n section: 'Float label geometry (input / textarea / select / multiselect)',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-field-float-label-in-top',\r\n '--gog-field-float-label-over-gap',\r\n '--gog-field-float-label-over-reserve',\r\n '--gog-field-float-label-reserve',\r\n ],\r\n },\r\n {\r\n section: 'Icon & spinner',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-icon-size',\r\n '--gog-icon-stroke-width',\r\n '--gog-spinner-rune-size',\r\n '--gog-spinner-size-lg',\r\n '--gog-spinner-size-md',\r\n '--gog-spinner-size-slg',\r\n '--gog-spinner-size-sm',\r\n '--gog-spinner-size-xsm',\r\n ],\r\n },\r\n {\r\n section: 'Toast stack',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-toast-enter-distance',\r\n '--gog-toast-gap',\r\n '--gog-toast-max-width',\r\n '--gog-toast-min-width',\r\n '--gog-toast-shadow',\r\n '--gog-toast-stack-padding',\r\n '--gog-toast-z-index',\r\n ],\r\n },\r\n {\r\n section: 'Overlay stacking',\r\n layer: 'foundation',\r\n tokens: ['--gog-dropdown-z', '--gog-spinner-overlay-z'],\r\n },\r\n {\r\n section: 'Light palette (also the no-data-theme default)',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-accent-bright',\r\n '--gog-accent-color',\r\n '--gog-accent-dim',\r\n '--gog-accent-pale',\r\n '--gog-accent-text-color',\r\n '--gog-background-color',\r\n '--gog-border-color',\r\n '--gog-danger-color',\r\n '--gog-hover-color',\r\n '--gog-info-color',\r\n '--gog-muted-text-color',\r\n '--gog-panel-shadow',\r\n '--gog-primary-color',\r\n '--gog-secondary-color',\r\n '--gog-spinner-overlay-bg',\r\n '--gog-success-color',\r\n '--gog-surface-color',\r\n '--gog-text-color',\r\n '--gog-warning-color',\r\n ],\r\n },\r\n {\r\n section: 'Derived foundation tokens',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-field-lg-font-size',\r\n '--gog-field-md-font-size',\r\n '--gog-field-md-icon-offset',\r\n '--gog-field-md-padding-x',\r\n '--gog-field-md-padding-y',\r\n '--gog-field-sm-font-size',\r\n '--gog-field-xsm-font-size',\r\n '--gog-panel-radius',\r\n ],\r\n },\r\n {\r\n section: 'Accordion',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-accordion-accent-color',\r\n '--gog-accordion-body-bg',\r\n '--gog-accordion-body-color',\r\n '--gog-accordion-body-font-family',\r\n '--gog-accordion-body-lift',\r\n '--gog-accordion-body-line-height',\r\n '--gog-accordion-body-radius',\r\n '--gog-accordion-body-transition-duration',\r\n '--gog-accordion-border-color',\r\n '--gog-accordion-border-style',\r\n '--gog-accordion-border-width',\r\n '--gog-accordion-chevron-transition-duration',\r\n '--gog-accordion-disabled-opacity',\r\n '--gog-accordion-focus-ring-width',\r\n '--gog-accordion-font-family',\r\n '--gog-accordion-header-bg',\r\n '--gog-accordion-header-gap',\r\n '--gog-accordion-header-text-transform',\r\n '--gog-accordion-hover-bg',\r\n '--gog-accordion-hover-ring',\r\n '--gog-accordion-lg-body-font-size',\r\n '--gog-accordion-lg-body-line-height',\r\n '--gog-accordion-lg-body-padding-bottom',\r\n '--gog-accordion-lg-body-padding-top',\r\n '--gog-accordion-lg-chevron-font-size',\r\n '--gog-accordion-lg-chevron-size',\r\n '--gog-accordion-lg-content-gap',\r\n '--gog-accordion-lg-font-size',\r\n '--gog-accordion-lg-letter-spacing',\r\n '--gog-accordion-lg-padding-x',\r\n '--gog-accordion-lg-padding-y',\r\n '--gog-accordion-md-body-font-size',\r\n '--gog-accordion-md-body-line-height',\r\n '--gog-accordion-md-body-padding-bottom',\r\n '--gog-accordion-md-body-padding-top',\r\n '--gog-accordion-md-chevron-font-size',\r\n '--gog-accordion-md-chevron-size',\r\n '--gog-accordion-md-content-gap',\r\n '--gog-accordion-md-font-size',\r\n '--gog-accordion-md-letter-spacing',\r\n '--gog-accordion-md-padding-x',\r\n '--gog-accordion-md-padding-y',\r\n '--gog-accordion-radius',\r\n '--gog-accordion-slg-body-font-size',\r\n '--gog-accordion-slg-body-line-height',\r\n '--gog-accordion-slg-body-padding-bottom',\r\n '--gog-accordion-slg-body-padding-top',\r\n '--gog-accordion-slg-chevron-font-size',\r\n '--gog-accordion-slg-chevron-size',\r\n '--gog-accordion-slg-content-gap',\r\n '--gog-accordion-slg-font-size',\r\n '--gog-accordion-slg-letter-spacing',\r\n '--gog-accordion-slg-padding-x',\r\n '--gog-accordion-slg-padding-y',\r\n '--gog-accordion-sm-body-font-size',\r\n '--gog-accordion-sm-body-line-height',\r\n '--gog-accordion-sm-body-padding-bottom',\r\n '--gog-accordion-sm-body-padding-top',\r\n '--gog-accordion-sm-chevron-font-size',\r\n '--gog-accordion-sm-chevron-size',\r\n '--gog-accordion-sm-content-gap',\r\n '--gog-accordion-sm-font-size',\r\n '--gog-accordion-sm-letter-spacing',\r\n '--gog-accordion-sm-padding-x',\r\n '--gog-accordion-sm-padding-y',\r\n '--gog-accordion-text-color',\r\n '--gog-accordion-transition-duration',\r\n '--gog-accordion-xsm-body-font-size',\r\n '--gog-accordion-xsm-body-line-height',\r\n '--gog-accordion-xsm-body-padding-bottom',\r\n '--gog-accordion-xsm-body-padding-top',\r\n '--gog-accordion-xsm-chevron-font-size',\r\n '--gog-accordion-xsm-chevron-size',\r\n '--gog-accordion-xsm-content-gap',\r\n '--gog-accordion-xsm-font-size',\r\n '--gog-accordion-xsm-letter-spacing',\r\n '--gog-accordion-xsm-padding-x',\r\n '--gog-accordion-xsm-padding-y',\r\n ],\r\n },\r\n {\r\n section: 'Collapsible',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-collapsible-disabled-opacity',\r\n '--gog-collapsible-max-height',\r\n '--gog-collapsible-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Button',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-btn-active-scale',\r\n '--gog-btn-border-style',\r\n '--gog-btn-border-width',\r\n '--gog-btn-disabled-opacity',\r\n '--gog-btn-focus-ring-offset',\r\n '--gog-btn-focus-ring-width',\r\n '--gog-btn-font-family',\r\n '--gog-btn-font-weight',\r\n '--gog-btn-gap',\r\n '--gog-btn-ghost-bg',\r\n '--gog-btn-ghost-border',\r\n '--gog-btn-ghost-color',\r\n '--gog-btn-ghost-hover-bg',\r\n '--gog-btn-ghost-hover-color',\r\n '--gog-btn-ghost-hover-shadow',\r\n '--gog-btn-ghost-shadow',\r\n '--gog-btn-ghost-spinner-color',\r\n '--gog-btn-letter-spacing',\r\n '--gog-btn-line-height',\r\n '--gog-btn-loading-opacity',\r\n '--gog-btn-outline-bg',\r\n '--gog-btn-outline-border',\r\n '--gog-btn-outline-color',\r\n '--gog-btn-outline-hover-bg',\r\n '--gog-btn-outline-hover-color',\r\n '--gog-btn-outline-hover-shadow',\r\n '--gog-btn-outline-shadow',\r\n '--gog-btn-outline-spinner-color',\r\n '--gog-btn-primary-bg',\r\n '--gog-btn-primary-border',\r\n '--gog-btn-primary-color',\r\n '--gog-btn-primary-hover-bg',\r\n '--gog-btn-primary-hover-color',\r\n '--gog-btn-primary-hover-shadow',\r\n '--gog-btn-primary-shadow',\r\n '--gog-btn-primary-spinner-color',\r\n '--gog-btn-radius',\r\n '--gog-btn-secondary-bg',\r\n '--gog-btn-secondary-border',\r\n '--gog-btn-secondary-color',\r\n '--gog-btn-secondary-hover-bg',\r\n '--gog-btn-secondary-hover-color',\r\n '--gog-btn-secondary-hover-shadow',\r\n '--gog-btn-secondary-shadow',\r\n '--gog-btn-secondary-spinner-color',\r\n '--gog-btn-spinner-max-size',\r\n '--gog-btn-text-transform',\r\n '--gog-btn-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Button toggle group',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-button-toggle-border-color',\r\n '--gog-button-toggle-border-style',\r\n '--gog-button-toggle-border-width',\r\n '--gog-button-toggle-disabled-opacity',\r\n '--gog-button-toggle-focus-ring-color',\r\n '--gog-button-toggle-focus-ring-offset',\r\n '--gog-button-toggle-focus-ring-width',\r\n '--gog-button-toggle-font-family',\r\n '--gog-button-toggle-font-weight',\r\n '--gog-button-toggle-gap',\r\n '--gog-button-toggle-hover-bg',\r\n '--gog-button-toggle-hover-color',\r\n '--gog-button-toggle-icon-size',\r\n '--gog-button-toggle-letter-spacing',\r\n '--gog-button-toggle-line-height',\r\n '--gog-button-toggle-radius',\r\n '--gog-button-toggle-rest-bg',\r\n '--gog-button-toggle-rest-color',\r\n '--gog-button-toggle-selected-bg',\r\n '--gog-button-toggle-selected-border-color',\r\n '--gog-button-toggle-selected-color',\r\n '--gog-button-toggle-separated-gap',\r\n '--gog-button-toggle-text-transform',\r\n '--gog-button-toggle-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Calendar (the month grid inside gog-datepicker, and gog-calendar on its own)',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-calendar-action-padding',\r\n '--gog-calendar-color',\r\n '--gog-calendar-day-border-style',\r\n '--gog-calendar-day-border-width',\r\n '--gog-calendar-day-hover-bg',\r\n '--gog-calendar-day-outside-color',\r\n '--gog-calendar-day-radius',\r\n '--gog-calendar-day-rest-bg',\r\n '--gog-calendar-day-rest-color',\r\n '--gog-calendar-disabled-opacity',\r\n '--gog-calendar-divider-color',\r\n '--gog-calendar-divider-style',\r\n '--gog-calendar-divider-width',\r\n '--gog-calendar-focus-ring-color',\r\n '--gog-calendar-focus-ring-offset',\r\n '--gog-calendar-focus-ring-width',\r\n '--gog-calendar-font-family',\r\n '--gog-calendar-footer-gap',\r\n '--gog-calendar-header-gap',\r\n '--gog-calendar-header-margin',\r\n '--gog-calendar-lg-day-size',\r\n '--gog-calendar-lg-font-size',\r\n '--gog-calendar-md-day-size',\r\n '--gog-calendar-md-font-size',\r\n '--gog-calendar-months-gap',\r\n '--gog-calendar-nav-bg',\r\n '--gog-calendar-nav-color',\r\n '--gog-calendar-nav-hover-bg',\r\n '--gog-calendar-nav-hover-color',\r\n '--gog-calendar-nav-icon-overlap',\r\n '--gog-calendar-nav-icon-size',\r\n '--gog-calendar-nav-radius',\r\n '--gog-calendar-nav-size',\r\n '--gog-calendar-padding',\r\n '--gog-calendar-range-bg',\r\n '--gog-calendar-range-color',\r\n '--gog-calendar-selected-bg',\r\n '--gog-calendar-selected-color',\r\n '--gog-calendar-selected-font-weight',\r\n '--gog-calendar-slg-day-size',\r\n '--gog-calendar-slg-font-size',\r\n '--gog-calendar-sm-day-size',\r\n '--gog-calendar-sm-font-size',\r\n '--gog-calendar-time-gap',\r\n '--gog-calendar-time-input-bg',\r\n '--gog-calendar-time-input-padding',\r\n '--gog-calendar-time-input-width',\r\n '--gog-calendar-time-margin',\r\n '--gog-calendar-title-color',\r\n '--gog-calendar-title-font-weight',\r\n '--gog-calendar-today-border-color',\r\n '--gog-calendar-today-font-weight',\r\n '--gog-calendar-transition-duration',\r\n '--gog-calendar-weekday-color',\r\n '--gog-calendar-weekday-font-size',\r\n '--gog-calendar-weekday-font-weight',\r\n '--gog-calendar-weekday-padding',\r\n '--gog-calendar-weekday-text-transform',\r\n '--gog-calendar-xsm-day-size',\r\n '--gog-calendar-xsm-font-size',\r\n ],\r\n },\r\n {\r\n section: 'Checkbox',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-checkbox-bg',\r\n '--gog-checkbox-border-color',\r\n '--gog-checkbox-border-style',\r\n '--gog-checkbox-border-width',\r\n '--gog-checkbox-checked-bg',\r\n '--gog-checkbox-checked-border',\r\n '--gog-checkbox-dash-height',\r\n '--gog-checkbox-dash-radius',\r\n '--gog-checkbox-dash-width-ratio',\r\n '--gog-checkbox-disabled-opacity',\r\n '--gog-checkbox-focus-ring',\r\n '--gog-checkbox-focus-ring-offset',\r\n '--gog-checkbox-focus-ring-width',\r\n '--gog-checkbox-font-family',\r\n '--gog-checkbox-gap',\r\n '--gog-checkbox-icon-color',\r\n '--gog-checkbox-label-color',\r\n '--gog-checkbox-label-line-height',\r\n '--gog-checkbox-radius',\r\n '--gog-checkbox-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Radio group',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-radio-bg',\r\n '--gog-radio-border-color',\r\n '--gog-radio-border-style',\r\n '--gog-radio-border-width',\r\n '--gog-radio-checked-bg',\r\n '--gog-radio-checked-border',\r\n '--gog-radio-disabled-opacity',\r\n '--gog-radio-dot-color',\r\n '--gog-radio-dot-size-ratio',\r\n '--gog-radio-error-color',\r\n '--gog-radio-error-font-size',\r\n '--gog-radio-focus-ring',\r\n '--gog-radio-focus-ring-offset',\r\n '--gog-radio-focus-ring-width',\r\n '--gog-radio-font-family',\r\n '--gog-radio-gap',\r\n '--gog-radio-group-gap',\r\n '--gog-radio-group-label-color',\r\n '--gog-radio-group-label-size',\r\n '--gog-radio-group-option-gap',\r\n '--gog-radio-group-option-gap-horizontal',\r\n '--gog-radio-label-color',\r\n '--gog-radio-label-line-height',\r\n '--gog-radio-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Chip',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-chip-avatar-inset-ratio',\r\n '--gog-chip-bg',\r\n '--gog-chip-border',\r\n '--gog-chip-border-style',\r\n '--gog-chip-border-width',\r\n '--gog-chip-color',\r\n '--gog-chip-disabled-opacity',\r\n '--gog-chip-focus-ring-offset',\r\n '--gog-chip-focus-ring-width',\r\n '--gog-chip-font-family',\r\n '--gog-chip-font-weight',\r\n '--gog-chip-hover-bg',\r\n '--gog-chip-lg-avatar-size',\r\n '--gog-chip-lg-font-size',\r\n '--gog-chip-lg-gap',\r\n '--gog-chip-lg-icon-size',\r\n '--gog-chip-lg-padding-block',\r\n '--gog-chip-lg-padding-inline',\r\n '--gog-chip-lg-remove-size',\r\n '--gog-chip-line-height',\r\n '--gog-chip-md-avatar-size',\r\n '--gog-chip-md-font-size',\r\n '--gog-chip-md-gap',\r\n '--gog-chip-md-icon-size',\r\n '--gog-chip-md-padding-block',\r\n '--gog-chip-md-padding-inline',\r\n '--gog-chip-md-remove-size',\r\n '--gog-chip-pill-radius',\r\n '--gog-chip-radius',\r\n '--gog-chip-remove-color',\r\n '--gog-chip-remove-hover-color',\r\n '--gog-chip-remove-inset-ratio',\r\n '--gog-chip-remove-scale',\r\n '--gog-chip-slg-avatar-size',\r\n '--gog-chip-slg-font-size',\r\n '--gog-chip-slg-gap',\r\n '--gog-chip-slg-icon-size',\r\n '--gog-chip-slg-padding-block',\r\n '--gog-chip-slg-padding-inline',\r\n '--gog-chip-slg-remove-size',\r\n '--gog-chip-sm-avatar-size',\r\n '--gog-chip-sm-font-size',\r\n '--gog-chip-sm-gap',\r\n '--gog-chip-sm-icon-size',\r\n '--gog-chip-sm-padding-block',\r\n '--gog-chip-sm-padding-inline',\r\n '--gog-chip-sm-remove-size',\r\n '--gog-chip-xsm-avatar-size',\r\n '--gog-chip-xsm-font-size',\r\n '--gog-chip-xsm-gap',\r\n '--gog-chip-xsm-icon-size',\r\n '--gog-chip-xsm-padding-block',\r\n '--gog-chip-xsm-padding-inline',\r\n '--gog-chip-xsm-remove-size',\r\n ],\r\n },\r\n {\r\n section: 'Dialog',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-confirm-actions-gap',\r\n '--gog-confirm-actions-offset',\r\n '--gog-confirm-color',\r\n '--gog-confirm-description-color',\r\n '--gog-confirm-gap',\r\n '--gog-confirm-max-width',\r\n '--gog-confirm-min-width',\r\n '--gog-dialog-backdrop-bg',\r\n '--gog-dialog-backdrop-blur',\r\n '--gog-dialog-backdrop-fade-duration',\r\n '--gog-dialog-backdrop-padding',\r\n '--gog-dialog-bg',\r\n '--gog-dialog-body-max-height',\r\n '--gog-dialog-body-padding',\r\n '--gog-dialog-border',\r\n '--gog-dialog-border-style',\r\n '--gog-dialog-border-width',\r\n '--gog-dialog-close-color',\r\n '--gog-dialog-close-focus-ring',\r\n '--gog-dialog-close-focus-ring-offset',\r\n '--gog-dialog-close-focus-ring-width',\r\n '--gog-dialog-close-font-size',\r\n '--gog-dialog-close-hover-bg',\r\n '--gog-dialog-close-hover-border',\r\n '--gog-dialog-close-hover-color',\r\n '--gog-dialog-close-size',\r\n '--gog-dialog-color',\r\n '--gog-dialog-enter-distance',\r\n '--gog-dialog-enter-duration',\r\n '--gog-dialog-font-family',\r\n '--gog-dialog-header-border-color',\r\n '--gog-dialog-header-gap',\r\n '--gog-dialog-header-padding',\r\n '--gog-dialog-max-height',\r\n '--gog-dialog-min-width',\r\n '--gog-dialog-radius',\r\n '--gog-dialog-shadow',\r\n ],\r\n },\r\n {\r\n section: 'Autocomplete',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-autocomplete-actions-gap',\r\n '--gog-autocomplete-actions-inset',\r\n '--gog-autocomplete-actions-reserve',\r\n '--gog-autocomplete-border-color',\r\n '--gog-autocomplete-border-style',\r\n '--gog-autocomplete-border-width',\r\n '--gog-autocomplete-clear-color',\r\n '--gog-autocomplete-clear-hover-color',\r\n '--gog-autocomplete-clear-icon-ratio',\r\n '--gog-autocomplete-disabled-opacity',\r\n '--gog-autocomplete-empty-color',\r\n '--gog-autocomplete-empty-font-size',\r\n '--gog-autocomplete-error-border-color',\r\n '--gog-autocomplete-error-color',\r\n '--gog-autocomplete-error-font-family',\r\n '--gog-autocomplete-error-font-size',\r\n '--gog-autocomplete-field-bg',\r\n '--gog-autocomplete-float-label-in-top',\r\n '--gog-autocomplete-float-label-over-gap',\r\n '--gog-autocomplete-float-label-over-reserve',\r\n '--gog-autocomplete-float-label-reserve',\r\n '--gog-autocomplete-focus-ring-color',\r\n '--gog-autocomplete-focus-ring-offset',\r\n '--gog-autocomplete-focus-ring-width',\r\n '--gog-autocomplete-font-family',\r\n '--gog-autocomplete-gap',\r\n '--gog-autocomplete-hover-border-color',\r\n '--gog-autocomplete-label-color',\r\n '--gog-autocomplete-label-font-family',\r\n '--gog-autocomplete-label-font-size',\r\n '--gog-autocomplete-label-font-weight',\r\n '--gog-autocomplete-label-letter-spacing',\r\n '--gog-autocomplete-label-text-transform',\r\n '--gog-autocomplete-line-height',\r\n '--gog-autocomplete-min-width',\r\n '--gog-autocomplete-option-color',\r\n '--gog-autocomplete-option-gap',\r\n '--gog-autocomplete-option-height',\r\n '--gog-autocomplete-option-hover-bg',\r\n '--gog-autocomplete-option-hover-color',\r\n '--gog-autocomplete-option-padding',\r\n '--gog-autocomplete-option-radius',\r\n '--gog-autocomplete-option-selected-bg',\r\n '--gog-autocomplete-option-selected-color',\r\n '--gog-autocomplete-options-padding',\r\n '--gog-autocomplete-panel-bg',\r\n '--gog-autocomplete-panel-border-color',\r\n '--gog-autocomplete-panel-border-style',\r\n '--gog-autocomplete-panel-border-width',\r\n '--gog-autocomplete-panel-gap',\r\n '--gog-autocomplete-panel-max-height',\r\n '--gog-autocomplete-panel-max-width',\r\n '--gog-autocomplete-panel-radius',\r\n '--gog-autocomplete-panel-shadow',\r\n '--gog-autocomplete-placeholder-color',\r\n '--gog-autocomplete-radius',\r\n '--gog-autocomplete-spinner-size',\r\n '--gog-autocomplete-text-color',\r\n '--gog-autocomplete-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Badge (the `gogBadge` directive; its classes live in utilities.css)',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-badge-border-color',\r\n '--gog-badge-border-style',\r\n '--gog-badge-border-width',\r\n '--gog-badge-danger-bg',\r\n '--gog-badge-danger-color',\r\n '--gog-badge-dot-size',\r\n '--gog-badge-font-family',\r\n '--gog-badge-font-size',\r\n '--gog-badge-font-weight',\r\n '--gog-badge-info-bg',\r\n '--gog-badge-info-color',\r\n '--gog-badge-line-height',\r\n '--gog-badge-offset',\r\n '--gog-badge-padding-inline',\r\n '--gog-badge-radius',\r\n '--gog-badge-size',\r\n '--gog-badge-success-bg',\r\n '--gog-badge-success-color',\r\n '--gog-badge-warning-bg',\r\n '--gog-badge-warning-color',\r\n '--gog-badge-z',\r\n ],\r\n },\r\n {\r\n section: 'Datepicker (the field; the grid inside it is themed by --gog-calendar-*)',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-datepicker-actions-gap',\r\n '--gog-datepicker-actions-inset',\r\n '--gog-datepicker-actions-reserve',\r\n '--gog-datepicker-border-color',\r\n '--gog-datepicker-border-style',\r\n '--gog-datepicker-border-width',\r\n '--gog-datepicker-clear-color',\r\n '--gog-datepicker-clear-icon-ratio',\r\n '--gog-datepicker-disabled-opacity',\r\n '--gog-datepicker-error-border-color',\r\n '--gog-datepicker-error-color',\r\n '--gog-datepicker-error-font-family',\r\n '--gog-datepicker-error-font-size',\r\n '--gog-datepicker-field-bg',\r\n '--gog-datepicker-float-label-in-top',\r\n '--gog-datepicker-float-label-over-gap',\r\n '--gog-datepicker-float-label-over-reserve',\r\n '--gog-datepicker-float-label-reserve',\r\n '--gog-datepicker-focus-ring-color',\r\n '--gog-datepicker-focus-ring-offset',\r\n '--gog-datepicker-focus-ring-width',\r\n '--gog-datepicker-font-family',\r\n '--gog-datepicker-gap',\r\n '--gog-datepicker-hover-border-color',\r\n '--gog-datepicker-icon-color',\r\n '--gog-datepicker-icon-hover-color',\r\n '--gog-datepicker-label-color',\r\n '--gog-datepicker-label-font-family',\r\n '--gog-datepicker-label-font-size',\r\n '--gog-datepicker-label-letter-spacing',\r\n '--gog-datepicker-label-text-transform',\r\n '--gog-datepicker-line-height',\r\n '--gog-datepicker-min-width',\r\n '--gog-datepicker-panel-bg',\r\n '--gog-datepicker-panel-border-color',\r\n '--gog-datepicker-panel-border-style',\r\n '--gog-datepicker-panel-border-width',\r\n '--gog-datepicker-panel-gap',\r\n '--gog-datepicker-panel-radius',\r\n '--gog-datepicker-panel-shadow',\r\n '--gog-datepicker-placeholder-color',\r\n '--gog-datepicker-radius',\r\n '--gog-datepicker-text-color',\r\n '--gog-datepicker-toggle-icon-size',\r\n '--gog-datepicker-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Divider',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-divider-block-spacing',\r\n '--gog-divider-dashed-style',\r\n '--gog-divider-dotted-style',\r\n '--gog-divider-inline-spacing',\r\n '--gog-divider-inset-size',\r\n '--gog-divider-label-color',\r\n '--gog-divider-label-font-family',\r\n '--gog-divider-label-font-size',\r\n '--gog-divider-label-font-weight',\r\n '--gog-divider-label-gap',\r\n '--gog-divider-label-line-height',\r\n '--gog-divider-line-color',\r\n '--gog-divider-line-thickness',\r\n '--gog-divider-solid-style',\r\n '--gog-divider-vertical-length',\r\n ],\r\n },\r\n {\r\n section: 'Icon',\r\n layer: 'component',\r\n tokens: ['--gog-icon-fallback-size'],\r\n },\r\n {\r\n section: 'Input field',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-input-clear-icon-ratio',\r\n '--gog-input-clear-inset',\r\n '--gog-input-clear-radius',\r\n '--gog-input-disabled-opacity',\r\n '--gog-input-error-color',\r\n '--gog-input-error-font-size',\r\n '--gog-input-error-offset',\r\n '--gog-input-field-bg',\r\n '--gog-input-field-border',\r\n '--gog-input-field-border-style',\r\n '--gog-input-field-border-width',\r\n '--gog-input-field-color',\r\n '--gog-input-float-label-in-top',\r\n '--gog-input-float-label-over-gap',\r\n '--gog-input-float-label-over-reserve',\r\n '--gog-input-float-label-reserve',\r\n '--gog-input-focus-border',\r\n '--gog-input-focus-glow',\r\n '--gog-input-focus-ring',\r\n '--gog-input-focus-ring-offset',\r\n '--gog-input-focus-ring-width',\r\n '--gog-input-font-family',\r\n '--gog-input-gap',\r\n '--gog-input-icon-action-radius',\r\n '--gog-input-icon-color',\r\n '--gog-input-icon-focus-ring-width',\r\n '--gog-input-icon-hover-color',\r\n '--gog-input-label-color',\r\n '--gog-input-label-font-family',\r\n '--gog-input-label-font-size',\r\n '--gog-input-label-letter-spacing',\r\n '--gog-input-label-text-transform',\r\n '--gog-input-placeholder-color',\r\n '--gog-input-radius',\r\n '--gog-input-spin-hover-bg',\r\n '--gog-input-spin-width',\r\n '--gog-input-transition-duration',\r\n '--gog-textarea-clear-icon-ratio',\r\n '--gog-textarea-resize-grip-color',\r\n '--gog-textarea-resize-grip-offset',\r\n '--gog-textarea-resize-grip-opacity',\r\n '--gog-textarea-resize-grip-size',\r\n '--gog-textarea-resize-grip-stripe-gap',\r\n '--gog-textarea-resize-grip-stripe-width',\r\n '--gog-textarea-resize-inset-bottom',\r\n '--gog-textarea-resize-inset-right',\r\n ],\r\n },\r\n {\r\n section: 'Multiselect',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-ms-actions-gap',\r\n '--gog-ms-actions-inset',\r\n '--gog-ms-arrow-icon-ratio',\r\n '--gog-ms-arrow-transition-duration',\r\n '--gog-ms-border-color',\r\n '--gog-ms-checkbox-bg',\r\n '--gog-ms-checkbox-border',\r\n '--gog-ms-checkbox-checked-bg',\r\n '--gog-ms-checkbox-checked-color',\r\n '--gog-ms-clear-icon-ratio',\r\n '--gog-ms-clear-radius',\r\n '--gog-ms-controls-gap',\r\n '--gog-ms-controls-padding',\r\n '--gog-ms-disabled-opacity',\r\n '--gog-ms-error-color',\r\n '--gog-ms-error-font-size',\r\n '--gog-ms-error-offset',\r\n '--gog-ms-field-bg',\r\n '--gog-ms-field-border',\r\n '--gog-ms-field-border-style',\r\n '--gog-ms-field-border-width',\r\n '--gog-ms-field-color',\r\n '--gog-ms-filter-border-color',\r\n '--gog-ms-filter-border-style',\r\n '--gog-ms-filter-border-width',\r\n '--gog-ms-filter-empty-color',\r\n '--gog-ms-filter-empty-padding',\r\n '--gog-ms-filter-input-bg',\r\n '--gog-ms-filter-input-border',\r\n '--gog-ms-filter-input-color',\r\n '--gog-ms-filter-input-padding-x',\r\n '--gog-ms-filter-input-padding-y',\r\n '--gog-ms-filter-input-radius',\r\n '--gog-ms-filter-padding',\r\n '--gog-ms-float-label-in-top',\r\n '--gog-ms-float-label-over-gap',\r\n '--gog-ms-float-label-over-reserve',\r\n '--gog-ms-float-label-reserve',\r\n '--gog-ms-focus-border',\r\n '--gog-ms-focus-glow',\r\n '--gog-ms-focus-ring',\r\n '--gog-ms-focus-ring-offset',\r\n '--gog-ms-focus-ring-width',\r\n '--gog-ms-font-family',\r\n '--gog-ms-gap',\r\n '--gog-ms-label-color',\r\n '--gog-ms-label-font-family',\r\n '--gog-ms-label-font-size',\r\n '--gog-ms-label-letter-spacing',\r\n '--gog-ms-label-text-transform',\r\n '--gog-ms-mark-icon-ratio',\r\n '--gog-ms-mark-size-ratio',\r\n '--gog-ms-min-width',\r\n '--gog-ms-option-color',\r\n '--gog-ms-option-disabled-opacity',\r\n '--gog-ms-option-gap',\r\n '--gog-ms-option-gap-inline',\r\n '--gog-ms-option-height',\r\n '--gog-ms-option-hover-bg',\r\n '--gog-ms-option-radius',\r\n '--gog-ms-option-transition-duration',\r\n '--gog-ms-options-padding',\r\n '--gog-ms-overflow-color',\r\n '--gog-ms-overflow-font-size',\r\n '--gog-ms-overflow-gap',\r\n '--gog-ms-panel-bg',\r\n '--gog-ms-panel-border',\r\n '--gog-ms-panel-max-height',\r\n '--gog-ms-panel-max-width',\r\n '--gog-ms-panel-offset',\r\n '--gog-ms-panel-shadow',\r\n '--gog-ms-placeholder-color',\r\n '--gog-ms-radius',\r\n '--gog-ms-transition-duration',\r\n '--gog-ms-value-color',\r\n '--gog-multiselect-actions-gap',\r\n '--gog-multiselect-actions-inset',\r\n '--gog-multiselect-arrow-icon-ratio',\r\n '--gog-multiselect-arrow-transition-duration',\r\n '--gog-multiselect-border-color',\r\n '--gog-multiselect-checkbox-bg',\r\n '--gog-multiselect-checkbox-border',\r\n '--gog-multiselect-checkbox-checked-bg',\r\n '--gog-multiselect-checkbox-checked-color',\r\n '--gog-multiselect-clear-icon-ratio',\r\n '--gog-multiselect-clear-radius',\r\n '--gog-multiselect-controls-gap',\r\n '--gog-multiselect-controls-padding',\r\n '--gog-multiselect-disabled-opacity',\r\n '--gog-multiselect-error-color',\r\n '--gog-multiselect-error-font-size',\r\n '--gog-multiselect-error-offset',\r\n '--gog-multiselect-field-bg',\r\n '--gog-multiselect-field-border',\r\n '--gog-multiselect-field-border-style',\r\n '--gog-multiselect-field-border-width',\r\n '--gog-multiselect-field-color',\r\n '--gog-multiselect-filter-border-color',\r\n '--gog-multiselect-filter-border-style',\r\n '--gog-multiselect-filter-border-width',\r\n '--gog-multiselect-filter-empty-color',\r\n '--gog-multiselect-filter-empty-padding',\r\n '--gog-multiselect-filter-input-bg',\r\n '--gog-multiselect-filter-input-border',\r\n '--gog-multiselect-filter-input-color',\r\n '--gog-multiselect-filter-input-padding-x',\r\n '--gog-multiselect-filter-input-padding-y',\r\n '--gog-multiselect-filter-input-radius',\r\n '--gog-multiselect-filter-padding',\r\n '--gog-multiselect-float-label-in-top',\r\n '--gog-multiselect-float-label-over-gap',\r\n '--gog-multiselect-float-label-over-reserve',\r\n '--gog-multiselect-float-label-reserve',\r\n '--gog-multiselect-focus-border',\r\n '--gog-multiselect-focus-glow',\r\n '--gog-multiselect-focus-ring',\r\n '--gog-multiselect-focus-ring-offset',\r\n '--gog-multiselect-focus-ring-width',\r\n '--gog-multiselect-font-family',\r\n '--gog-multiselect-gap',\r\n '--gog-multiselect-label-color',\r\n '--gog-multiselect-label-font-family',\r\n '--gog-multiselect-label-font-size',\r\n '--gog-multiselect-label-letter-spacing',\r\n '--gog-multiselect-label-text-transform',\r\n '--gog-multiselect-mark-icon-ratio',\r\n '--gog-multiselect-mark-size-ratio',\r\n '--gog-multiselect-min-width',\r\n '--gog-multiselect-option-color',\r\n '--gog-multiselect-option-disabled-opacity',\r\n '--gog-multiselect-option-gap',\r\n '--gog-multiselect-option-gap-inline',\r\n '--gog-multiselect-option-height',\r\n '--gog-multiselect-option-hover-bg',\r\n '--gog-multiselect-option-radius',\r\n '--gog-multiselect-option-transition-duration',\r\n '--gog-multiselect-options-padding',\r\n '--gog-multiselect-overflow-color',\r\n '--gog-multiselect-overflow-font-size',\r\n '--gog-multiselect-overflow-gap',\r\n '--gog-multiselect-panel-bg',\r\n '--gog-multiselect-panel-border',\r\n '--gog-multiselect-panel-max-height',\r\n '--gog-multiselect-panel-max-width',\r\n '--gog-multiselect-panel-offset',\r\n '--gog-multiselect-panel-shadow',\r\n '--gog-multiselect-placeholder-color',\r\n '--gog-multiselect-radius',\r\n '--gog-multiselect-transition-duration',\r\n '--gog-multiselect-value-color',\r\n ],\r\n },\r\n {\r\n section: 'Paginator',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-paginator-ellipsis-color',\r\n '--gog-paginator-ellipsis-font-family',\r\n '--gog-paginator-ellipsis-font-size',\r\n '--gog-paginator-ellipsis-min-width',\r\n '--gog-paginator-gap',\r\n ],\r\n },\r\n {\r\n section: 'Progressbar',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-progressbar-accent-bg',\r\n '--gog-progressbar-accent-buffer-bg',\r\n '--gog-progressbar-danger-bg',\r\n '--gog-progressbar-danger-buffer-bg',\r\n '--gog-progressbar-indeterminate-duration',\r\n '--gog-progressbar-indeterminate-easing',\r\n '--gog-progressbar-info-bg',\r\n '--gog-progressbar-info-buffer-bg',\r\n '--gog-progressbar-lg-height',\r\n '--gog-progressbar-md-height',\r\n '--gog-progressbar-radius',\r\n '--gog-progressbar-slg-height',\r\n '--gog-progressbar-sm-height',\r\n '--gog-progressbar-stripe-color',\r\n '--gog-progressbar-stripe-size',\r\n '--gog-progressbar-success-bg',\r\n '--gog-progressbar-success-buffer-bg',\r\n '--gog-progressbar-track-base-bg',\r\n '--gog-progressbar-transition-duration',\r\n '--gog-progressbar-value-color',\r\n '--gog-progressbar-value-font-family',\r\n '--gog-progressbar-value-font-size',\r\n '--gog-progressbar-value-gap',\r\n '--gog-progressbar-value-min-width',\r\n '--gog-progressbar-warning-bg',\r\n '--gog-progressbar-warning-buffer-bg',\r\n '--gog-progressbar-xsm-height',\r\n ],\r\n },\r\n {\r\n section: 'Scroll',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-scroll-corner-bg',\r\n '--gog-scroll-fade-duration',\r\n '--gog-scroll-focus-ring',\r\n '--gog-scroll-focus-ring-width',\r\n '--gog-scroll-normal-thumb-hit-padding',\r\n '--gog-scroll-normal-thumb-min-size',\r\n '--gog-scroll-normal-track-width',\r\n '--gog-scroll-thin-thumb-hit-padding',\r\n '--gog-scroll-thin-thumb-min-size',\r\n '--gog-scroll-thin-track-width',\r\n '--gog-scroll-thumb-active-bg',\r\n '--gog-scroll-thumb-bg',\r\n '--gog-scroll-thumb-hover-bg',\r\n '--gog-scroll-thumb-inset',\r\n '--gog-scroll-thumb-radius',\r\n '--gog-scroll-track-bg',\r\n '--gog-scroll-track-radius',\r\n ],\r\n },\r\n {\r\n section: 'Select',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-select-chevron-color',\r\n '--gog-select-chevron-icon-ratio',\r\n '--gog-select-chevron-inset',\r\n '--gog-select-clear-color',\r\n '--gog-select-clear-gap',\r\n '--gog-select-clear-hover-color',\r\n '--gog-select-clear-icon-ratio',\r\n '--gog-select-clear-radius',\r\n '--gog-select-control-gap',\r\n '--gog-select-disabled-opacity',\r\n '--gog-select-error-color',\r\n '--gog-select-error-font-size',\r\n '--gog-select-field-bg',\r\n '--gog-select-field-border',\r\n '--gog-select-field-border-style',\r\n '--gog-select-field-border-width',\r\n '--gog-select-field-color',\r\n '--gog-select-filter-border-color',\r\n '--gog-select-filter-border-style',\r\n '--gog-select-filter-border-width',\r\n '--gog-select-filter-empty-color',\r\n '--gog-select-filter-empty-padding',\r\n '--gog-select-filter-input-bg',\r\n '--gog-select-filter-input-border',\r\n '--gog-select-filter-input-color',\r\n '--gog-select-filter-input-padding-x',\r\n '--gog-select-filter-input-padding-y',\r\n '--gog-select-filter-input-radius',\r\n '--gog-select-filter-padding',\r\n '--gog-select-float-label-in-top',\r\n '--gog-select-float-label-over-gap',\r\n '--gog-select-float-label-over-reserve',\r\n '--gog-select-float-label-reserve',\r\n '--gog-select-focus-border',\r\n '--gog-select-focus-glow',\r\n '--gog-select-focus-ring',\r\n '--gog-select-focus-ring-offset',\r\n '--gog-select-focus-ring-width',\r\n '--gog-select-font-family',\r\n '--gog-select-gap',\r\n '--gog-select-label-color',\r\n '--gog-select-label-font-family',\r\n '--gog-select-label-font-size',\r\n '--gog-select-label-letter-spacing',\r\n '--gog-select-label-text-transform',\r\n '--gog-select-mark-icon-ratio',\r\n '--gog-select-mark-size-ratio',\r\n '--gog-select-min-width',\r\n '--gog-select-option-color',\r\n '--gog-select-option-disabled-opacity',\r\n '--gog-select-option-gap',\r\n '--gog-select-option-height',\r\n '--gog-select-option-hover-bg',\r\n '--gog-select-option-selected-color',\r\n '--gog-select-option-transition-duration',\r\n '--gog-select-panel-bg',\r\n '--gog-select-panel-max-height',\r\n '--gog-select-panel-max-width',\r\n '--gog-select-panel-offset',\r\n '--gog-select-panel-shadow',\r\n '--gog-select-placeholder-color',\r\n '--gog-select-radius',\r\n '--gog-select-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Skeleton',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-skeleton-base',\r\n '--gog-skeleton-circle-size-lg',\r\n '--gog-skeleton-circle-size-md',\r\n '--gog-skeleton-circle-size-slg',\r\n '--gog-skeleton-circle-size-sm',\r\n '--gog-skeleton-circle-size-xsm',\r\n '--gog-skeleton-line-gap',\r\n '--gog-skeleton-line-height-lg',\r\n '--gog-skeleton-line-height-md',\r\n '--gog-skeleton-line-height-slg',\r\n '--gog-skeleton-line-height-sm',\r\n '--gog-skeleton-line-height-xsm',\r\n '--gog-skeleton-line-radius',\r\n '--gog-skeleton-pulse-duration',\r\n '--gog-skeleton-pulse-min-opacity',\r\n '--gog-skeleton-radius',\r\n '--gog-skeleton-rect-height-lg',\r\n '--gog-skeleton-rect-height-md',\r\n '--gog-skeleton-rect-height-slg',\r\n '--gog-skeleton-rect-height-sm',\r\n '--gog-skeleton-rect-height-xsm',\r\n '--gog-skeleton-shine',\r\n '--gog-skeleton-short-line-width',\r\n '--gog-skeleton-square-radius',\r\n '--gog-skeleton-wave-duration',\r\n ],\r\n },\r\n {\r\n section: 'Slider',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-slider-auto-width',\r\n '--gog-slider-disabled-opacity',\r\n '--gog-slider-error-color',\r\n '--gog-slider-error-font-family',\r\n '--gog-slider-error-font-size',\r\n '--gog-slider-fill-bg',\r\n '--gog-slider-focus-ring',\r\n '--gog-slider-focus-ring-width',\r\n '--gog-slider-gap',\r\n '--gog-slider-label-color',\r\n '--gog-slider-label-font-family',\r\n '--gog-slider-label-font-size',\r\n '--gog-slider-label-letter-spacing',\r\n '--gog-slider-label-text-transform',\r\n '--gog-slider-range-color',\r\n '--gog-slider-range-font-size',\r\n '--gog-slider-thumb-bg',\r\n '--gog-slider-thumb-border',\r\n '--gog-slider-thumb-border-width',\r\n '--gog-slider-thumb-glow-size',\r\n '--gog-slider-thumb-radius',\r\n '--gog-slider-thumb-shadow',\r\n '--gog-slider-thumb-size',\r\n '--gog-slider-track-area-height',\r\n '--gog-slider-track-bg',\r\n '--gog-slider-track-border-color',\r\n '--gog-slider-track-border-style',\r\n '--gog-slider-track-border-width',\r\n '--gog-slider-track-height',\r\n '--gog-slider-track-radius',\r\n '--gog-slider-value-color',\r\n '--gog-slider-value-font-family',\r\n '--gog-slider-value-font-size',\r\n '--gog-slider-value-min-width',\r\n '--gog-slider-vertical-length',\r\n ],\r\n },\r\n {\r\n section: 'Spinner',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-spinner-arc-inner-color',\r\n '--gog-spinner-arc-inner-dash',\r\n '--gog-spinner-arc-inner-glow',\r\n '--gog-spinner-arc-inner-opacity',\r\n '--gog-spinner-arc-inner-pulse-opacity',\r\n '--gog-spinner-arc-inner-stroke-compact',\r\n '--gog-spinner-arc-outer-color',\r\n '--gog-spinner-arc-outer-dash',\r\n '--gog-spinner-arc-outer-glow',\r\n '--gog-spinner-arc-outer-pulse-opacity',\r\n '--gog-spinner-diamond-color',\r\n '--gog-spinner-diamond-glow',\r\n '--gog-spinner-diamond-opacity',\r\n '--gog-spinner-glow-color',\r\n '--gog-spinner-overlay-blur',\r\n '--gog-spinner-overlay-fade-duration',\r\n '--gog-spinner-pulse-duration',\r\n '--gog-spinner-ring-duration',\r\n '--gog-spinner-ring-glow',\r\n '--gog-spinner-ring-padding',\r\n '--gog-spinner-rune-color',\r\n '--gog-spinner-rune-font-family',\r\n '--gog-spinner-rune-glow',\r\n '--gog-spinner-rune-pulse-opacity',\r\n '--gog-spinner-spin-duration',\r\n '--gog-spinner-spin-slow-duration',\r\n '--gog-spinner-ticks-duration',\r\n '--gog-spinner-track-color',\r\n '--gog-spinner-track-opacity',\r\n ],\r\n },\r\n {\r\n section: 'Table',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-table-accent-bright',\r\n '--gog-table-accent-color',\r\n '--gog-table-border-color',\r\n '--gog-table-border-style',\r\n '--gog-table-border-width',\r\n '--gog-table-empty-font-size',\r\n '--gog-table-empty-padding',\r\n '--gog-table-focus-ring',\r\n '--gog-table-focus-ring-width',\r\n '--gog-table-font-family',\r\n '--gog-table-footer-gap',\r\n '--gog-table-footer-min-height',\r\n '--gog-table-gap',\r\n '--gog-table-header-font-family',\r\n '--gog-table-header-letter-spacing',\r\n '--gog-table-header-text-transform',\r\n '--gog-table-hover-bg',\r\n '--gog-table-lg-padding-v',\r\n '--gog-table-lg-td-font-size',\r\n '--gog-table-lg-th-font-size',\r\n '--gog-table-loading-opacity',\r\n '--gog-table-loading-padding',\r\n '--gog-table-md-padding-v',\r\n '--gog-table-md-td-font-size',\r\n '--gog-table-md-th-font-size',\r\n '--gog-table-muted-color',\r\n '--gog-table-num-col-width',\r\n '--gog-table-num-font-size',\r\n '--gog-table-numeric-font-family',\r\n '--gog-table-padding-h',\r\n '--gog-table-row-border-width',\r\n '--gog-table-row-transition-duration',\r\n '--gog-table-slg-padding-v',\r\n '--gog-table-slg-td-font-size',\r\n '--gog-table-slg-th-font-size',\r\n '--gog-table-sm-padding-v',\r\n '--gog-table-sm-td-font-size',\r\n '--gog-table-sm-th-font-size',\r\n '--gog-table-sort-icon-opacity',\r\n '--gog-table-sort-icon-size',\r\n '--gog-table-sort-icon-width',\r\n '--gog-table-surface',\r\n '--gog-table-text-color',\r\n '--gog-table-th-inner-gap',\r\n '--gog-table-total-font-size',\r\n '--gog-table-total-letter-spacing',\r\n '--gog-table-total-text-transform',\r\n '--gog-table-xsm-padding-v',\r\n '--gog-table-xsm-td-font-size',\r\n '--gog-table-xsm-th-font-size',\r\n ],\r\n },\r\n {\r\n section: 'Tabs',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-tabs-active-color',\r\n '--gog-tabs-disabled-opacity',\r\n '--gog-tabs-focus-ring-color',\r\n '--gog-tabs-focus-ring-offset',\r\n '--gog-tabs-focus-ring-width',\r\n '--gog-tabs-font-family',\r\n '--gog-tabs-font-weight',\r\n '--gog-tabs-gap',\r\n '--gog-tabs-header-border-color',\r\n '--gog-tabs-header-border-style',\r\n '--gog-tabs-header-border-width',\r\n '--gog-tabs-hover-color',\r\n '--gog-tabs-icon-size',\r\n '--gog-tabs-indicator-color',\r\n '--gog-tabs-indicator-radius',\r\n '--gog-tabs-indicator-thickness',\r\n '--gog-tabs-letter-spacing',\r\n '--gog-tabs-lg-font-size',\r\n '--gog-tabs-lg-padding',\r\n '--gog-tabs-line-height',\r\n '--gog-tabs-md-font-size',\r\n '--gog-tabs-md-padding',\r\n '--gog-tabs-panel-color',\r\n '--gog-tabs-panel-padding',\r\n '--gog-tabs-rest-bg',\r\n '--gog-tabs-rest-color',\r\n '--gog-tabs-slg-font-size',\r\n '--gog-tabs-slg-padding',\r\n '--gog-tabs-sm-font-size',\r\n '--gog-tabs-sm-padding',\r\n '--gog-tabs-tab-gap',\r\n '--gog-tabs-text-transform',\r\n '--gog-tabs-transition-duration',\r\n '--gog-tabs-xsm-font-size',\r\n '--gog-tabs-xsm-padding',\r\n ],\r\n },\r\n {\r\n section: 'Tag',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-tag-bg-base',\r\n '--gog-tag-bg-mix',\r\n '--gog-tag-border-style',\r\n '--gog-tag-border-width',\r\n '--gog-tag-color-base',\r\n '--gog-tag-color-mix',\r\n '--gog-tag-danger-color',\r\n '--gog-tag-default-color',\r\n '--gog-tag-font-family',\r\n '--gog-tag-font-weight',\r\n '--gog-tag-info-color',\r\n '--gog-tag-inner-border-width',\r\n '--gog-tag-lg-font-size',\r\n '--gog-tag-lg-gap',\r\n '--gog-tag-lg-icon-size',\r\n '--gog-tag-lg-padding-block',\r\n '--gog-tag-lg-padding-inline',\r\n '--gog-tag-line-height',\r\n '--gog-tag-md-font-size',\r\n '--gog-tag-md-gap',\r\n '--gog-tag-md-icon-size',\r\n '--gog-tag-md-padding-block',\r\n '--gog-tag-md-padding-inline',\r\n '--gog-tag-pill-radius',\r\n '--gog-tag-radius',\r\n '--gog-tag-slg-font-size',\r\n '--gog-tag-slg-gap',\r\n '--gog-tag-slg-icon-size',\r\n '--gog-tag-slg-padding-block',\r\n '--gog-tag-slg-padding-inline',\r\n '--gog-tag-sm-font-size',\r\n '--gog-tag-sm-gap',\r\n '--gog-tag-sm-icon-size',\r\n '--gog-tag-sm-padding-block',\r\n '--gog-tag-sm-padding-inline',\r\n '--gog-tag-success-color',\r\n '--gog-tag-warning-color',\r\n '--gog-tag-xsm-font-size',\r\n '--gog-tag-xsm-gap',\r\n '--gog-tag-xsm-icon-size',\r\n '--gog-tag-xsm-padding-block',\r\n '--gog-tag-xsm-padding-inline',\r\n ],\r\n },\r\n {\r\n section: 'Toast',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-toast-accent-width',\r\n '--gog-toast-action-font-size',\r\n '--gog-toast-action-padding',\r\n '--gog-toast-actions-gap',\r\n '--gog-toast-base-z',\r\n '--gog-toast-bg',\r\n '--gog-toast-border',\r\n '--gog-toast-close-font-size',\r\n '--gog-toast-close-padding',\r\n '--gog-toast-color',\r\n '--gog-toast-content-gap',\r\n '--gog-toast-error-color',\r\n '--gog-toast-font-family',\r\n '--gog-toast-icon-color',\r\n '--gog-toast-icon-line-height',\r\n '--gog-toast-icon-size',\r\n '--gog-toast-info-color',\r\n '--gog-toast-main-gap',\r\n '--gog-toast-message-font-size',\r\n '--gog-toast-message-line-height',\r\n '--gog-toast-padding',\r\n '--gog-toast-progress-height',\r\n '--gog-toast-progress-opacity',\r\n '--gog-toast-radius',\r\n '--gog-toast-stack-expanded-gap',\r\n '--gog-toast-stack-max-depth',\r\n '--gog-toast-stack-min-opacity',\r\n '--gog-toast-stack-opacity-step',\r\n '--gog-toast-stack-peek',\r\n '--gog-toast-stack-scale-step',\r\n '--gog-toast-success-color',\r\n '--gog-toast-transition-duration',\r\n '--gog-toast-warning-color',\r\n ],\r\n },\r\n {\r\n section: 'Toggle',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-toggle-border-color',\r\n '--gog-toggle-border-style',\r\n '--gog-toggle-border-width',\r\n '--gog-toggle-disabled-opacity',\r\n '--gog-toggle-focus-ring-color',\r\n '--gog-toggle-focus-ring-offset',\r\n '--gog-toggle-focus-ring-width',\r\n '--gog-toggle-font-family',\r\n '--gog-toggle-gap',\r\n '--gog-toggle-label-color',\r\n '--gog-toggle-label-line-height',\r\n '--gog-toggle-lg-label-size',\r\n '--gog-toggle-lg-state-font-size',\r\n '--gog-toggle-lg-thumb-size',\r\n '--gog-toggle-lg-track-height',\r\n '--gog-toggle-lg-track-width',\r\n '--gog-toggle-md-label-size',\r\n '--gog-toggle-md-state-font-size',\r\n '--gog-toggle-md-thumb-size',\r\n '--gog-toggle-md-track-height',\r\n '--gog-toggle-md-track-width',\r\n '--gog-toggle-on-border-color',\r\n '--gog-toggle-radius',\r\n '--gog-toggle-slg-label-size',\r\n '--gog-toggle-slg-state-font-size',\r\n '--gog-toggle-slg-thumb-size',\r\n '--gog-toggle-slg-track-height',\r\n '--gog-toggle-slg-track-width',\r\n '--gog-toggle-sm-label-size',\r\n '--gog-toggle-sm-state-font-size',\r\n '--gog-toggle-sm-thumb-size',\r\n '--gog-toggle-sm-track-height',\r\n '--gog-toggle-sm-track-width',\r\n '--gog-toggle-state-color',\r\n '--gog-toggle-state-font-weight',\r\n '--gog-toggle-state-letter-spacing',\r\n '--gog-toggle-state-offset',\r\n '--gog-toggle-state-padding-inline',\r\n '--gog-toggle-state-thumb-gap',\r\n '--gog-toggle-thumb-inset',\r\n '--gog-toggle-thumb-off-bg',\r\n '--gog-toggle-thumb-on-bg',\r\n '--gog-toggle-thumb-shadow',\r\n '--gog-toggle-track-off-bg',\r\n '--gog-toggle-track-on-bg',\r\n '--gog-toggle-transition-duration',\r\n '--gog-toggle-xsm-label-size',\r\n '--gog-toggle-xsm-state-font-size',\r\n '--gog-toggle-xsm-thumb-size',\r\n '--gog-toggle-xsm-track-height',\r\n '--gog-toggle-xsm-track-width',\r\n ],\r\n },\r\n {\r\n section: 'Tooltip',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-tooltip-arrow-size',\r\n '--gog-tooltip-bg',\r\n '--gog-tooltip-border-color',\r\n '--gog-tooltip-border-style',\r\n '--gog-tooltip-border-width',\r\n '--gog-tooltip-color',\r\n '--gog-tooltip-font-family',\r\n '--gog-tooltip-font-size',\r\n '--gog-tooltip-gap',\r\n '--gog-tooltip-line-height',\r\n '--gog-tooltip-max-height',\r\n '--gog-tooltip-max-width',\r\n '--gog-tooltip-padding',\r\n '--gog-tooltip-radius',\r\n '--gog-tooltip-shadow',\r\n '--gog-tooltip-transition-duration',\r\n '--gog-tooltip-z',\r\n ],\r\n },\r\n {\r\n section: 'Instance (deliberately undeclared)',\r\n layer: 'instance',\r\n tokens: [\r\n '--gog-accordion-body-font-size',\r\n '--gog-accordion-body-padding-bottom',\r\n '--gog-accordion-body-padding-top',\r\n '--gog-accordion-chevron-font-size',\r\n '--gog-accordion-chevron-size',\r\n '--gog-accordion-content-gap',\r\n '--gog-accordion-font-size',\r\n '--gog-accordion-letter-spacing',\r\n '--gog-accordion-padding-x',\r\n '--gog-accordion-padding-y',\r\n '--gog-autocomplete-bg',\r\n '--gog-autocomplete-color',\r\n '--gog-autocomplete-float-label-on-bg',\r\n '--gog-autocomplete-font-size',\r\n '--gog-autocomplete-padding-x',\r\n '--gog-autocomplete-padding-y',\r\n '--gog-badge-bg',\r\n '--gog-badge-color',\r\n '--gog-btn-bg',\r\n '--gog-btn-border',\r\n '--gog-btn-color',\r\n '--gog-btn-hover-bg',\r\n '--gog-btn-hover-color',\r\n '--gog-btn-hover-shadow',\r\n '--gog-btn-shadow',\r\n '--gog-btn-spinner-color',\r\n '--gog-button-toggle-bg',\r\n '--gog-button-toggle-color',\r\n '--gog-button-toggle-font-size',\r\n '--gog-button-toggle-padding',\r\n '--gog-calendar-day-bg',\r\n '--gog-calendar-day-color',\r\n '--gog-calendar-day-size',\r\n '--gog-checkbox-box-size',\r\n '--gog-checkbox-icon-size',\r\n '--gog-checkbox-label-size',\r\n '--gog-checkbox-padding',\r\n '--gog-chip-avatar-size',\r\n '--gog-chip-font-size',\r\n '--gog-chip-gap',\r\n '--gog-chip-icon-size',\r\n '--gog-chip-padding-block',\r\n '--gog-chip-padding-inline',\r\n '--gog-chip-remove-size',\r\n '--gog-datepicker-bg',\r\n '--gog-datepicker-color',\r\n '--gog-datepicker-float-label-on-bg',\r\n '--gog-datepicker-font-size',\r\n '--gog-datepicker-padding-x',\r\n '--gog-datepicker-padding-y',\r\n '--gog-dialog-offset-x',\r\n '--gog-dialog-offset-y',\r\n '--gog-divider-color',\r\n '--gog-divider-spacing',\r\n '--gog-divider-thickness',\r\n '--gog-input-float-label-on-bg',\r\n '--gog-input-font',\r\n '--gog-input-padding-x',\r\n '--gog-input-padding-y',\r\n '--gog-multiselect-float-label-on-bg',\r\n '--gog-multiselect-font-size',\r\n '--gog-multiselect-padding-x',\r\n '--gog-multiselect-padding-y',\r\n '--gog-progressbar-buffer-bg',\r\n '--gog-progressbar-fill-bg',\r\n '--gog-progressbar-height',\r\n '--gog-progressbar-track-bg',\r\n '--gog-radio-box-size',\r\n '--gog-radio-label-size',\r\n '--gog-radio-padding',\r\n '--gog-select-control-font',\r\n '--gog-select-control-padding-x',\r\n '--gog-select-control-padding-y',\r\n '--gog-select-float-label-on-bg',\r\n '--gog-table-td-font-size',\r\n '--gog-table-td-padding-v',\r\n '--gog-table-th-font-size',\r\n '--gog-table-th-padding-v',\r\n '--gog-tabs-tab-bg',\r\n '--gog-tabs-tab-color',\r\n '--gog-tabs-tab-font-size',\r\n '--gog-tabs-tab-padding',\r\n '--gog-tag-accent',\r\n '--gog-tag-bg',\r\n '--gog-tag-border',\r\n '--gog-tag-color',\r\n '--gog-tag-font-size',\r\n '--gog-tag-gap',\r\n '--gog-tag-icon-size',\r\n '--gog-tag-padding-block',\r\n '--gog-tag-padding-inline',\r\n '--gog-textarea-scrollbar-width',\r\n '--gog-toggle-padding',\r\n '--gog-toggle-thumb-bg',\r\n '--gog-toggle-track-bg',\r\n ],\r\n },\r\n];\r\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/autocomplete/autocomplete.component';\r\nexport * from './lib/components/badge/badge.directive';\r\nexport * from './lib/components/button-toggle/button-toggle.component';\r\nexport * from './lib/components/tabs/tab.component';\r\nexport * from './lib/components/tabs/tabs.component';\r\nexport * from './lib/components/tabs/tabs-state';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/datepicker/calendar/calendar.component';\r\nexport * from './lib/components/datepicker/datepicker.component';\r\nexport * from './lib/components/datepicker/date-utils';\r\nexport * from './lib/components/divider/divider.component';\r\nexport * from './lib/components/progressbar/progressbar.component';\r\nexport * from './lib/components/toggle/toggle.component';\r\nexport * from './lib/components/radio-group/radio-group.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/components/tooltip/tooltip.directive';\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 * from './lib/shared/float-label-state';\r\nexport * from './lib/shared/option-accessor';\r\nexport * from './lib/shared/token-names';\r\nexport type { GogDropdownDirection } from './lib/shared/dropdown-position';\r\nexport type { GogTooltipSide } from './lib/shared/tooltip-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":["DEFAULT_SIZE","DEFAULT_GAP","DEFAULT_VIEWPORT_PADDING","VIEWPORT_PADDING","DEFAULT_ERROR_DISPLAY","DEFAULT_APPEND_TO_BODY","readPx","DEFAULT_HIDE_DELAY","clamp","DEFAULT_LOCALE","DEFAULT_LABELS","DEFAULT_CLOSE_LABEL","DEFAULT_POSITION"],"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/components/button/button.directive.ts","../../../../projects/gleks/ui/src/lib/shared/roving-focus.ts","../../../../projects/gleks/ui/src/lib/shared/icons.ts","../../../../projects/gleks/ui/src/lib/shared/icon-registry.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/overlay-theme.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-overlay.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-position.ts","../../../../projects/gleks/ui/src/lib/shared/clearable-state.ts","../../../../projects/gleks/ui/src/lib/shared/error-state.ts","../../../../projects/gleks/ui/src/lib/shared/option-accessor.ts","../../../../projects/gleks/ui/src/lib/shared/float-label-state.ts","../../../../projects/gleks/ui/src/lib/shared/dropdown-base.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/autocomplete/autocomplete.component.ts","../../../../projects/gleks/ui/src/lib/components/autocomplete/autocomplete.component.html","../../../../projects/gleks/ui/src/lib/components/badge/badge.directive.ts","../../../../projects/gleks/ui/src/lib/components/button-toggle/button-toggle.component.ts","../../../../projects/gleks/ui/src/lib/components/button-toggle/button-toggle.component.html","../../../../projects/gleks/ui/src/lib/components/tabs/tabs-state.ts","../../../../projects/gleks/ui/src/lib/components/tabs/tab.component.ts","../../../../projects/gleks/ui/src/lib/components/tabs/tab.component.html","../../../../projects/gleks/ui/src/lib/components/tabs/tabs.component.ts","../../../../projects/gleks/ui/src/lib/components/tabs/tabs.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/datepicker/date-utils.ts","../../../../projects/gleks/ui/src/lib/components/datepicker/calendar/calendar.component.ts","../../../../projects/gleks/ui/src/lib/components/datepicker/calendar/calendar.component.html","../../../../projects/gleks/ui/src/lib/components/datepicker/datepicker.component.ts","../../../../projects/gleks/ui/src/lib/components/datepicker/datepicker.component.html","../../../../projects/gleks/ui/src/lib/components/divider/divider.component.ts","../../../../projects/gleks/ui/src/lib/components/divider/divider.component.html","../../../../projects/gleks/ui/src/lib/components/progressbar/progressbar.component.ts","../../../../projects/gleks/ui/src/lib/components/progressbar/progressbar.component.html","../../../../projects/gleks/ui/src/lib/components/toggle/toggle.component.ts","../../../../projects/gleks/ui/src/lib/components/toggle/toggle.component.html","../../../../projects/gleks/ui/src/lib/shared/control-id.ts","../../../../projects/gleks/ui/src/lib/components/radio-group/radio-group.component.ts","../../../../projects/gleks/ui/src/lib/components/radio-group/radio-group.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/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/components/select/select.component.ts","../../../../projects/gleks/ui/src/lib/components/select/select.component.html","../../../../projects/gleks/ui/src/lib/components/tooltip/tooltip-bubble.component.ts","../../../../projects/gleks/ui/src/lib/components/tooltip/tooltip-bubble.component.html","../../../../projects/gleks/ui/src/lib/shared/tooltip-overlay.ts","../../../../projects/gleks/ui/src/lib/shared/tooltip-position.ts","../../../../projects/gleks/ui/src/lib/components/tooltip/tooltip.directive.ts","../../../../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/lib/shared/token-names.ts","../../../../projects/gleks/ui/src/public-api.ts","../../../../projects/gleks/ui/src/guildofgleks-ui.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\r\n\r\nimport {\r\n GogFloatLabelVariant,\r\n GogScrollOverscrollBehavior,\r\n GogScrollSize,\r\n GogSize,\r\n GogTextareaResize,\r\n GogTooltipPosition,\r\n} from './types';\r\n// Type-only, so none of these pull a runtime dependency into this module — `config.ts` is\r\n// imported by nearly every component and must stay free of import cycles.\r\nimport type { GogErrorDisplay } from './error-state';\r\nimport type { GogDropdownDirection } from './dropdown-position';\r\nimport type { GogDropdownFilterPosition } from './types';\r\nimport type { ToastPosition } from '../services/toast-service/toast-service';\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 * Whether the overlay thumb/track ever renders. Scrolling itself is unaffected either way\r\n * — this is purely the visual affordance. Defaults to `true`.\r\n */\r\n showTrack?: boolean;\r\n };\r\n button?: {\r\n debounce?: number;\r\n };\r\n tooltip?: {\r\n showDelay?: number;\r\n hideDelay?: number;\r\n position?: GogTooltipPosition;\r\n };\r\n /** Applies to `gog-inputfield`, `gog-select`, `gog-multiselect` and `gog-textarea`. */\r\n floatLabel?: {\r\n variant?: GogFloatLabelVariant;\r\n /**\r\n * Whether the field's own `placeholder` reappears once its label has floated out of\r\n * the way. Defaults to `false` — the placeholder stays hidden the whole time a float\r\n * label is active, since the resting label already occupies that space.\r\n */\r\n showPlaceholder?: boolean;\r\n };\r\n /**\r\n * Defaults for the interactive form controls — the two settings an app otherwise repeats on\r\n * literally every one of them: a compact app writes `size=\"sm\"` everywhere, and a\r\n * Reactive-Forms app writes `errorDisplay=\"auto\"` on every field.\r\n *\r\n * - `size` applies to `gog-button`, `gog-inputfield`, `gog-textarea`, `gog-select`,\r\n * `gog-multiselect`, `gog-checkbox` and `gog-radio-group`. Deliberately **not** to\r\n * `gog-table`, `gog-accordion` or `gog-paginator` (whose `size` means row/layout density\r\n * and whose defaults differ), nor to `gog-spinner`, `gog-skeleton`, `gog-tag` or\r\n * `gog-chip` (sized to fit whatever they sit next to, not to a form's density).\r\n * - `errorDisplay` applies to every control that renders a validation message:\r\n * `gog-inputfield`, `gog-textarea`, `gog-select`, `gog-multiselect`, `gog-radio-group`\r\n * and `gog-slider`.\r\n *\r\n * A component's own built-in default still applies when this is unset, so setting `size`\r\n * here does not flatten the different defaults those excluded components have.\r\n */\r\n control?: {\r\n size?: GogSize;\r\n errorDisplay?: GogErrorDisplay;\r\n /**\r\n * Whether `gog-inputfield`, `gog-textarea`, `gog-select` and `gog-multiselect` offer a\r\n * clear button. The button only ever appears once the control actually has something to\r\n * clear, so switching this on app-wide adds no permanent chrome.\r\n *\r\n * Component defaults are `false`, except `gog-multiselect`, which had a clear button\r\n * before this input existed and keeps it.\r\n */\r\n clearable?: boolean;\r\n };\r\n /** Applies to `gog-select` and `gog-multiselect`. */\r\n dropdown?: {\r\n /**\r\n * Whether the panel is rendered into `<body>` instead of inline. Worth setting app-wide\r\n * for a layout whose dropdowns generally live inside scrollable or overflow-clipped\r\n * containers, which is the case this exists for.\r\n */\r\n appendToBody?: boolean;\r\n direction?: GogDropdownDirection;\r\n /** Whether the panel shows a search box. Off by default. */\r\n filter?: boolean;\r\n /** Which end of the panel the search box sticks to. `'top'` by default. */\r\n filterPosition?: GogDropdownFilterPosition;\r\n };\r\n /**\r\n * Applies to `gog-datepicker` and `gog-calendar`. Every field here is something an app sets\r\n * once rather than per field — a locale and a date format repeated on every date input is\r\n * exactly the boilerplate this config exists to remove.\r\n */\r\n datepicker?: {\r\n /** BCP-47 tag driving month and weekday names. */\r\n locale?: string;\r\n /** 0 = Sunday … 6 = Saturday. Unset, it comes from the locale. */\r\n firstDayOfWeek?: number;\r\n /** Display and parse pattern (`dd.MM.yyyy`, `yyyy-MM-dd`, …). */\r\n format?: string;\r\n };\r\n /**\r\n * Applies to `gog-paginator`, and through it to `gog-table`'s built-in pagination.\r\n *\r\n * The page-size select is the one piece of paginator chrome an app decides once — either its\r\n * tables offer the choice or they don't, and the option list is a house style. Both are still\r\n * overridable per instance, for the page whose table genuinely needs `5, 10, 20` while the rest\r\n * of the app uses `20, 50, 100`.\r\n */\r\n paginator?: {\r\n /** Whether the rows-per-page select renders at all. **Off by default.** */\r\n showPageSizeSelect?: boolean;\r\n /** The choices it offers. Defaults to `[10, 20, 30, 40, 50]`. */\r\n pageSizeOptions?: number[];\r\n };\r\n /** Applies to `gog-autocomplete`. */\r\n autocomplete?: {\r\n /**\r\n * Milliseconds to wait after the last keystroke before `gogSearch` fires. A whole app\r\n * usually wants one answer here, tuned to its backend rather than to each field.\r\n */\r\n searchDebounce?: number;\r\n /** How many characters before the panel opens at all. */\r\n minLength?: number;\r\n /**\r\n * Whether focusing the field opens the panel immediately, showing the full option list.\r\n * Defaults to `true`.\r\n */\r\n openOnFocus?: boolean;\r\n };\r\n /** Applies to `gog-inputfield`. */\r\n inputfield?: {\r\n /**\r\n * Whether a `type=\"number\"` field shows the library's own spin buttons in place of the\r\n * browser's native ones. Defaults to `true`.\r\n */\r\n showSpinButtons?: boolean;\r\n };\r\n /** Applies to `gog-textarea`. */\r\n textarea?: {\r\n /**\r\n * Which direction(s) the field's own drag handle resizes it in — matches the native CSS\r\n * `resize` value space. Defaults to `'vertical'`.\r\n */\r\n resize?: GogTextareaResize;\r\n };\r\n toast?: {\r\n position?: ToastPosition;\r\n /** How long a non-sticky toast stays up, in ms. */\r\n duration?: number;\r\n };\r\n /**\r\n * Every fixed, user-visible string the library renders — button text and accessible names for\r\n * chrome the consumer never writes markup for.\r\n *\r\n * These are here rather than as one input per string because they are the definition of a\r\n * setting an app states once: a Russian-language app relabels \"Clear\" once, not on all 340\r\n * fields. Where a per-instance input already exists (`clearAriaLabel`, `todayLabel`, …) it\r\n * still wins for that one control — the usual instance → config → default order.\r\n *\r\n * Deliberately excludes anything that is *content* rather than chrome: `gog-checkbox`'s\r\n * `ariaLabel`, `gog-button`'s `ariaLabel`, a field's `label` or `placeholder`. Those differ\r\n * per instance by definition and have no meaningful app-wide value.\r\n */\r\n labels?: {\r\n /** Clear button on `gog-inputfield` / `gog-textarea`. */\r\n clear?: string;\r\n /**\r\n * Clear button on `gog-select` / `gog-multiselect` / `gog-autocomplete`, which clears a\r\n * selection rather than text.\r\n */\r\n clearSelection?: string;\r\n /** Clear button on `gog-datepicker`. */\r\n clearDate?: string;\r\n /** `gog-multiselect`'s select-all / clear-all buttons — visible text, not just a label. */\r\n selectAll?: string;\r\n clearAll?: string;\r\n /** `gog-inputfield`'s number spin buttons. */\r\n increment?: string;\r\n decrement?: string;\r\n /** `gog-inputfield`'s password reveal toggle, in its two states. */\r\n showPassword?: string;\r\n hidePassword?: string;\r\n /** Close buttons on the two service-driven overlays. */\r\n closeDialog?: string;\r\n closeToast?: string;\r\n /** `gog-paginator`'s `<nav>` accessible name and its two step buttons. */\r\n pagination?: string;\r\n previousPage?: string;\r\n nextPage?: string;\r\n /**\r\n * `gog-paginator`'s per-page button names (\"Go to page 4\", \"Page 4, current page\").\r\n *\r\n * A function rather than a string, and the only one in this block: these interpolate the\r\n * page number, and a template string with a `{0}` placeholder would be a second, weaker\r\n * formatting language to learn — one that also can't express languages where the number's\r\n * position or the surrounding grammar depends on its value. The default is\r\n * `` (page, isCurrent) => isCurrent ? `Page ${page}, current page` : `Go to page ${page}` ``.\r\n */\r\n page?: (page: number, isCurrent: boolean) => string;\r\n /** `gog-datepicker`'s button that opens the calendar panel. */\r\n openCalendar?: string;\r\n /** `gog-paginator`'s rows-per-page select. */\r\n rowsPerPage?: string;\r\n /** `gog-table`: the row-count label, its paginator, and the selection checkboxes. */\r\n total?: string;\r\n tablePagination?: string;\r\n selectRow?: string;\r\n selectAllRows?: string;\r\n /** `gog-calendar` navigation and shortcuts. */\r\n today?: string;\r\n thisMonth?: string;\r\n previousMonth?: string;\r\n nextMonth?: string;\r\n previousYear?: string;\r\n nextYear?: string;\r\n /** `gog-calendar`'s time section. */\r\n hours?: string;\r\n minutes?: string;\r\n seconds?: string;\r\n };\r\n /**\r\n * Applies to `ThemeService`. Every field is off/neutral by default, so an app that configures\r\n * nothing keeps the pre-21.3.2 behaviour: adopt whatever `data-theme` is already on `<html>`,\r\n * else `'light'`.\r\n */\r\n theme?: {\r\n /**\r\n * `localStorage` key the chosen theme is written to and read back from. Unset, nothing is\r\n * persisted and the theme resets on every load.\r\n */\r\n storageKey?: string | null;\r\n /** Theme applied when nothing else decides. `'light'` by default. */\r\n defaultTheme?: string;\r\n /**\r\n * Whether to fall back to the OS `prefers-color-scheme` setting — and to keep following it\r\n * until the app calls `setTheme`/`toggleTheme`. Off by default: switching this on changes\r\n * which theme an existing app opens in.\r\n */\r\n followSystem?: boolean;\r\n /** Theme names `toggleTheme()` alternates between, and `followSystem` maps the OS setting to. */\r\n lightTheme?: string;\r\n darkTheme?: string;\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 * Layers `override` onto `base`, one level deep: a component key present in both has its\r\n * fields merged (so `{ tooltip: { showDelay } }` keeps the parent's `tooltip.position`), and a\r\n * key present in only one is taken as-is.\r\n *\r\n * Deliberately not a deep merge — `GogGlobalConfig` is exactly two levels by design, and a\r\n * recursive merge would start doing surprising things to any future field whose value is\r\n * itself an object the consumer means to replace wholesale.\r\n */\r\nfunction mergeGogConfig(base: GogGlobalConfig, override: GogGlobalConfig): GogGlobalConfig {\r\n const merged: Record<string, unknown> = { ...base };\r\n\r\n for (const [key, overrideValue] of Object.entries(override)) {\r\n const baseValue = (base as Record<string, unknown>)[key];\r\n merged[key] =\r\n isPlainObject(baseValue) && isPlainObject(overrideValue)\r\n ? { ...baseValue, ...overrideValue }\r\n : overrideValue;\r\n }\r\n\r\n return merged as GogGlobalConfig;\r\n}\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\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 layers onto the parent's config\r\n * rather than replacing it.** A route that only cares about tooltips can say so, and the\r\n * app-wide `button.debounce` stays in effect inside it:\r\n *\r\n * ```ts\r\n * // a route's providers — button.debounce from app.config.ts still applies here\r\n * provideGogConfig({ tooltip: { showDelay: 0 } })\r\n * ```\r\n *\r\n * Merging is one level deep, per component key: the nearest provider wins field by field, so\r\n * `{ tooltip: { showDelay: 0 } }` overrides only `showDelay` and leaves a parent's\r\n * `tooltip.position` alone. To drop an inherited value rather than change it, set it back to\r\n * the component's own default explicitly — there is no \"unset\" marker.\r\n */\r\nexport function provideGogConfig(config: GogGlobalConfig): Provider {\r\n return {\r\n provide: GOG_CONFIG,\r\n // skipSelf so this reads the *parent* injector's config rather than recursing into the\r\n // provider being defined here; optional because at the root there is no parent providing it.\r\n useFactory: () =>\r\n mergeGogConfig(inject(GOG_CONFIG, { skipSelf: true, optional: true }) ?? {}, config),\r\n };\r\n}\r\n\r\n/**\r\n * The library's precedence rule for a configurable input, in one place: an instance's own\r\n * input wins, then the app-wide `GOG_CONFIG` value, then the component's built-in default.\r\n *\r\n * Every configurable input resolves through this rather than repeating the `??` chain, so the\r\n * order can't drift between components — a component that accidentally checked the config\r\n * first would silently ignore the input on that one control only, which is close to invisible\r\n * in review. Kept a plain function (no `inject`) so it works anywhere: inside a `computed`, in\r\n * a composition class like `GogFloatLabelState`, and in unit tests without an injector.\r\n *\r\n * ```ts\r\n * private readonly globalConfig = inject(GOG_CONFIG);\r\n * protected readonly resolvedDebounce = computed(() =>\r\n * resolveConfigured(this.debounce(), this.globalConfig.button?.debounce, DEFAULT_DEBOUNCE),\r\n * );\r\n * ```\r\n */\r\nexport function resolveConfigured<T>(\r\n instanceValue: T | undefined,\r\n configuredValue: T | undefined,\r\n fallback: T,\r\n): T {\r\n return instanceValue ?? configuredValue ?? fallback;\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, resolveConfigured } from '../../shared/config';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\nconst DEFAULT_DEBOUNCE = 300;\r\n/** Built-in default, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\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 /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n size = input<GogSize | undefined>(undefined);\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 private readonly globalConfig = inject(GOG_CONFIG);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected spinnerSize = computed<GogSize>(\r\n () => ButtonComponent.SPINNER_SIZE_BY_BUTTON_SIZE[this.resolvedSize()],\r\n );\r\n\r\n protected readonly resolvedDebounce = computed(() =>\r\n resolveConfigured(this.debounce(), this.globalConfig.button?.debounce, DEFAULT_DEBOUNCE),\r\n );\r\n\r\n /**\r\n * The single size modifier, replacing one `[class.gog-btn--<size>]` binding per size.\r\n * Always emitted — `gog-btn` has a rule for every size, `md` included.\r\n */\r\n protected readonly sizeClass = computed(() => `gog-btn--${this.resolvedSize()}`);\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\r\n (click)=\"onClick($event)\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [attr.aria-disabled]=\"isDisabled() && !isNativeDisabled() ? 'true' : null\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.disabled]=\"isNativeDisabled() ? true : null\"\r\n [class.gog-btn--ghost]=\"variant() === 'ghost'\"\r\n [class.gog-btn--loading]=\"loading()\"\r\n [class.gog-btn--outline]=\"variant() === 'outline'\"\r\n [class.gog-btn--primary]=\"variant() === 'primary'\"\r\n [class.gog-btn--secondary]=\"variant() === 'secondary'\"\r\n [class.gog-cursor-not-allowed]=\"isDisabled()\"\r\n [class.gog-cursor-pointer]=\"!isDisabled()\"\r\n [class.gog-cursor-wait]=\"loading()\"\r\n [type]=\"type()\"\r\n class=\"gog-btn gog-inline-center gog-contained-layout\"\r\n [class]=\"sizeClass()\"\r\n>\r\n @if (loading()) {\r\n <gog-spinner [size]=\"spinnerSize()\" aria-hidden=\"true\" class=\"gog-btn__spinner\" />\r\n }\r\n\r\n <span [class.gog-btn__content--hidden]=\"loading()\" class=\"gog-btn__content\">\r\n <ng-content></ng-content>\r\n </span>\r\n</button>\r\n","import { Directive, booleanAttribute, computed, inject, input } from '@angular/core';\r\n\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { GogSize, GogVariant } from '../../shared/types';\r\n\r\n/** Built-in default, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\n\r\n/**\r\n * Makes a consumer's own `<a>` or `<button>` look like a `gog-button`.\r\n *\r\n * ```html\r\n * <a gogButton routerLink=\"/pricing\">See pricing</a>\r\n * <a gogButton variant=\"ghost\" href=\"https://example.com\" target=\"_blank\" rel=\"noreferrer\">Docs</a>\r\n * <button gogButton variant=\"outline\" size=\"sm\" type=\"submit\">Save</button>\r\n * ```\r\n *\r\n * ## Why this exists next to `gog-button`\r\n *\r\n * `gog-button` renders its own `<button>`, so it can never *be* a link — and making it one would\r\n * mean brokering the router's entire input surface (`routerLink`, `routerLinkActive`,\r\n * `queryParams`, `fragment`, `state`, …) through a component that would then have to depend on\r\n * `@angular/router`. This package has four peer dependencies and no router, and a navigation\r\n * button is not worth a fifth.\r\n *\r\n * Inverting it costs nothing: the consumer keeps their own element, so `routerLink`, `href`,\r\n * `target`, `download`, `type=\"submit\"`, `disabled` and every future directive keep working\r\n * because they were never taken away. This is the \"headless primitive\" axis of\r\n * `api-design.instructions.md` — expose the behaviour, not another input.\r\n *\r\n * ## Which to use\r\n *\r\n * Use `gog-button` for a button that *does* something in the page — it adds `loading` with a\r\n * centred spinner, `debounce` click throttling and the `gogClick` output, none of which a bare\r\n * element can provide. Use `[gogButton]` when the element must be a link, or when you need to\r\n * keep directives of your own on it.\r\n *\r\n * ## Accessibility\r\n *\r\n * The element stays yours, so its semantics stay correct by construction: a link is a link and a\r\n * button is a button. Two things this deliberately does **not** do:\r\n *\r\n * - It does not add `disabled` handling to an `<a>`. There is no such thing — a disabled link is\r\n * just a link. Remove the `href` or render a real `<button>`.\r\n * - It does not fake a loading state. `gog-button`'s spinner is a projected child; a directive\r\n * cannot add one without taking over the element's content.\r\n */\r\n@Directive({\r\n // Restricted to `a` and `button` rather than a bare `[gogButton]`: on a `<div>` or `<span>` the\r\n // result looks like a button and is invisible to the keyboard and to assistive tech, and that\r\n // is exactly the mistake this directive would otherwise make easy.\r\n selector: 'a[gogButton], button[gogButton]',\r\n host: {\r\n class: 'gog-btn gog-inline-center gog-contained-layout',\r\n '[class]': 'variantClass() + \" \" + sizeClass()',\r\n '[class.gog-btn--full-width]': 'fullWidth()',\r\n },\r\n})\r\nexport class GogButtonDirective {\r\n readonly variant = input<GogVariant>('primary');\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'` — as on `gog-button`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n /**\r\n * Stretches the element to its container's width. A bare attribute is enough:\r\n * `<a gogButton fullWidth>`.\r\n */\r\n readonly fullWidth = input(false, { transform: booleanAttribute });\r\n\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n private readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n\r\n protected readonly variantClass = computed(() => `gog-btn--${this.variant()}`);\r\n /**\r\n * Unlike `gog-button`, this emits a class for `'md'` too. The component can leave the default\r\n * size unclassed because its own stylesheet bottoms out at `--gog-btn-md-*`; here the class is\r\n * also what a consumer reads in devtools to see which size is applied, and a silently absent\r\n * one reads as \"no size resolved\".\r\n */\r\n protected readonly sizeClass = computed(() => `gog-btn--${this.resolvedSize()}`);\r\n}\r\n","import { GogOrientation } from './types';\n\nconst VERTICAL_ARROWS = ['ArrowDown', 'ArrowUp'] as const;\nconst HORIZONTAL_ARROWS = ['ArrowRight', 'ArrowLeft'] as const;\nconst EDGE_KEYS = ['Home', 'End'] as const;\n\nexport type RovingFocusKey =\n | (typeof VERTICAL_ARROWS)[number]\n | (typeof HORIZONTAL_ARROWS)[number]\n | (typeof EDGE_KEYS)[number];\n\n/** Which arrow pair drives a given orientation. `Home`/`End` apply to both. */\nfunction arrowsFor(orientation: GogOrientation): readonly string[] {\n return orientation === 'horizontal' ? HORIZONTAL_ARROWS : VERTICAL_ARROWS;\n}\n\n/**\n * Whether `key` navigates a roving-tabindex list laid out along `orientation`.\n *\n * The orientation filter is the point: a horizontal tablist must leave `ArrowDown` alone so\n * the page still scrolls, and a vertical listbox must not steal `ArrowRight` from a caret\n * inside a text field. `Home`/`End` are accepted for both.\n */\nexport function isRovingFocusKey(\n key: string,\n orientation: GogOrientation = 'vertical',\n): key is RovingFocusKey {\n return arrowsFor(orientation).includes(key) || (EDGE_KEYS as readonly string[]).includes(key);\n}\n\n/** Whether `key` moves backwards (up / left) rather than forwards. */\nfunction isBackwards(key: RovingFocusKey): boolean {\n return key === 'ArrowUp' || key === 'ArrowLeft';\n}\n\n/**\n * The index `key` moves to from `currentIndex`, wrapping at both ends.\n *\n * `isEnabled` lets a caller keep disabled items in the list — which it must, since they still\n * occupy a position in the DOM — while navigation steps over them. Without it every index is a\n * target, which is the behaviour the dropdowns rely on (they pre-filter their own list).\n * Returns `currentIndex` when nothing else is reachable, so a group of one enabled item cannot\n * spin.\n */\nexport function nextRovingFocusIndex(\n key: RovingFocusKey,\n currentIndex: number,\n count: number,\n isEnabled?: (index: number) => boolean,\n): number {\n if (count === 0) return currentIndex;\n\n const enabled = isEnabled ?? (() => true);\n const lastIndex = count - 1;\n\n // Home/End mean the first/last *reachable* item, not the first/last element.\n if (key === 'Home' || key === 'End') {\n const order =\n key === 'Home'\n ? Array.from({ length: count }, (_, i) => i)\n : Array.from({ length: count }, (_, i) => lastIndex - i);\n return order.find(enabled) ?? currentIndex;\n }\n\n const step = isBackwards(key) ? -1 : 1;\n // At most `count` hops: enough to come back round to where we started, never more.\n for (let hop = 1; hop <= count; hop++) {\n const candidate = (currentIndex + step * hop + count * hop) % count;\n if (enabled(candidate)) return candidate;\n }\n\n return currentIndex;\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 *\n * Defaults to a vertical list with every item reachable — the shape the option lists and the\n * accordion were written against — so existing callers need no options object.\n */\nexport function handleRovingFocusKeydown(\n event: KeyboardEvent,\n items: readonly HTMLElement[],\n options: {\n orientation?: GogOrientation;\n /** Items this returns true for are skipped rather than focused. */\n isDisabled?: (item: HTMLElement, index: number) => boolean;\n } = {},\n): boolean {\n const orientation = options.orientation ?? 'vertical';\n if (!isRovingFocusKey(event.key, orientation) || 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 const { isDisabled } = options;\n const isEnabled = isDisabled\n ? (candidate: number) => !isDisabled(items[candidate], candidate)\n : undefined;\n\n // Swallowed even when there is nowhere else to go: an open listbox or a focused tablist owns\n // its arrow keys, and letting one through would scroll the page out from under the widget.\n event.preventDefault();\n\n const nextIndex = nextRovingFocusIndex(event.key, index, items.length, isEnabled);\n if (nextIndex !== index) {\n items[nextIndex]?.focus();\n }\n return true;\n}\n","/*\r\n * The glyphs are from **Lucide** (https://lucide.dev), ISC licensed:\r\n *\r\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather\r\n * (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022.\r\n *\r\n * Permission to use, copy, modify, and/or distribute this software for any purpose with or\r\n * without fee is hereby granted, provided that the above copyright notice and this permission\r\n * notice appear in all copies.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO\r\n * THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT\r\n * SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR\r\n * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF\r\n * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE\r\n * OR PERFORMANCE OF THIS SOFTWARE.\r\n *\r\n * They are inlined rather than pulled from `lucide` so the package keeps zero runtime\r\n * dependencies. Anything added here must be a Lucide glyph too: a 24×24 grid, `stroke-width`\r\n * 2, round caps and joins. Mixing in a set drawn for a different weight (Heroicons is drawn for\r\n * 1.5) shows up immediately as uneven visual mass in a row of icons.\r\n *\r\n * An app that wants a different set does not need a fork — `provideGogIcons` overrides any of\r\n * these by name.\r\n */\r\n\r\n/**\r\n * The glyphs the package ships. Kept as a closed union so they still autocomplete and so\r\n * `ICON_DEFS` below stays exhaustive — a `Record` over the open `GogIconName` would collapse\r\n * into an index signature and stop catching a missing definition.\r\n */\r\nexport type GogBuiltinIconName =\r\n | 'check'\r\n | 'close'\r\n | 'chevron-up'\r\n | 'chevron-down'\r\n | 'chevron-left'\r\n | 'chevron-right'\r\n | 'calendar'\r\n | 'clock'\r\n | 'sort'\r\n | 'sort-up'\r\n | 'sort-down'\r\n | 'success'\r\n | 'error'\r\n | 'warning'\r\n | 'info'\r\n | 'checkbox'\r\n | 'checkbox-checked'\r\n | 'eye'\r\n | 'eye-off'\r\n | 'copy'\r\n // Actions\r\n | 'search'\r\n | 'plus'\r\n | 'minus'\r\n | 'trash'\r\n | 'pencil'\r\n | 'download'\r\n | 'upload'\r\n | 'refresh'\r\n | 'filter'\r\n | 'external-link'\r\n // Navigation & chrome\r\n | 'menu'\r\n | 'more-horizontal'\r\n | 'more-vertical'\r\n | 'arrow-left'\r\n | 'arrow-right'\r\n // Objects & state\r\n | 'user'\r\n | 'settings'\r\n | 'lock'\r\n | 'mail'\r\n | 'star'\r\n | 'star-filled';\r\n\r\n/**\r\n * Any icon `gog-icon` can render: one of the built-ins, or a name registered through\r\n * `provideGogIcons(...)`. The `(string & {})` half keeps the built-in names in autocomplete\r\n * while letting a registered name through — an open union is the point, since the set of icons\r\n * an app uses is the app's business, not the library's.\r\n */\r\nexport type GogIconName = GogBuiltinIconName | (string & {});\r\n\r\nexport const ICON_DEFS: Record<GogBuiltinIconName, string> = {\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\n 'chevron-left': `<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-left-icon lucide-chevron-left\"><path d=\"m15 18-6-6 6-6\"/></svg>`,\r\n\r\n 'chevron-right': `<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-right-icon lucide-chevron-right\"><path d=\"m9 18 6-6-6-6\"/></svg>`,\r\n\r\n calendar: `<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-calendar-icon lucide-calendar\"><path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/></svg>`,\r\n\r\n clock: `<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-clock-icon lucide-clock\"><path d=\"M12 6v6l4 2\"/><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\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>`,\r\n\r\n copy: `<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-copy-icon lucide-copy\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`,\r\n\r\n /* ── Actions ─────────────────────────────────────────────────────────────── */\r\n\r\n search: `<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-search\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/></svg>`,\r\n\r\n plus: `<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-plus\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>`,\r\n\r\n minus: `<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-minus\"><path d=\"M5 12h14\"/></svg>`,\r\n\r\n trash: `<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-trash-2\"><path d=\"M3 6h18\"/><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"/><path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"/><line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\"/><line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\"/></svg>`,\r\n\r\n pencil: `<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-pencil\"><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/></svg>`,\r\n\r\n download: `<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-download\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\"/></svg>`,\r\n\r\n upload: `<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-upload\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"17 8 12 3 7 8\"/><line x1=\"12\" x2=\"12\" y1=\"3\" y2=\"15\"/></svg>`,\r\n\r\n refresh: `<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-refresh-cw\"><path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M8 16H3v5\"/></svg>`,\r\n\r\n filter: `<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-filter\"><polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/></svg>`,\r\n\r\n 'external-link': `<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-external-link\"><path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/></svg>`,\r\n\r\n /* ── Navigation & chrome ─────────────────────────────────────────────────── */\r\n\r\n menu: `<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-menu\"><line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/></svg>`,\r\n\r\n 'more-horizontal': `<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-ellipsis\"><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"19\" cy=\"12\" r=\"1\"/><circle cx=\"5\" cy=\"12\" r=\"1\"/></svg>`,\r\n\r\n 'more-vertical': `<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-ellipsis-vertical\"><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"12\" cy=\"5\" r=\"1\"/><circle cx=\"12\" cy=\"19\" r=\"1\"/></svg>`,\r\n\r\n 'arrow-left': `<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-left\"><path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/></svg>`,\r\n\r\n 'arrow-right': `<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-right\"><path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/></svg>`,\r\n\r\n /* ── Objects & state ─────────────────────────────────────────────────────── */\r\n\r\n user: `<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-user\"><path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/></svg>`,\r\n\r\n settings: `<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-settings\"><path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>`,\r\n\r\n lock: `<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-lock\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>`,\r\n\r\n mail: `<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-mail\"><rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"/><path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\"/></svg>`,\r\n\r\n star: `<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-star\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/></svg>`,\r\n\r\n 'star-filled': `<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-star\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" fill=\"currentColor\"/></svg>`,\r\n};\r\n","import { InjectionToken, Provider, inject } from '@angular/core';\r\n\r\n/**\r\n * Icons an app has registered, keyed by the name `gog-icon` will be asked for. Resolves to `{}`\r\n * — only the built-ins are available — until a `provideGogIcons(...)` call fills it in.\r\n *\r\n * Values are raw `<svg>` markup, injected with `bypassSecurityTrustHtml` exactly like the\r\n * built-ins. See `provideGogIcons` for what that means for you.\r\n */\r\nexport const GOG_ICONS = new InjectionToken<Readonly<Record<string, string>>>('GOG_ICONS', {\r\n providedIn: 'root',\r\n factory: () => ({}),\r\n});\r\n\r\n/**\r\n * Registers icons by name, so `<gog-icon name=\"cart\" />` works for glyphs the library does not\r\n * ship. This is the supported way to use your own icon set: the alternative — a `TemplateRef`\r\n * per instance through the `template` input — costs a `<ng-template>` at every use site and is\r\n * meant for one-offs, not for an icon set.\r\n *\r\n * ```ts\r\n * // app.config.ts\r\n * providers: [\r\n * provideGogIcons({\r\n * cart: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">…</svg>',\r\n * user: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">…</svg>',\r\n * }),\r\n * ]\r\n * ```\r\n *\r\n * **A registered name overrides a built-in of the same name**, which is how you swap the\r\n * library's checkmark or chevron for your own without touching every component that renders one.\r\n *\r\n * **Providing this again further down the injector tree layers onto the parent's set** rather\r\n * than replacing it, matching `provideGogConfig`: a lazy feature can register the three icons\r\n * only it uses, and the app-wide set stays available inside it.\r\n *\r\n * ## What to put in the SVG\r\n *\r\n * Use `stroke=\"currentColor\"` (or `fill=\"currentColor\"`) and a `viewBox`, and leave the sizing\r\n * alone — `gog-icon`'s stylesheet drives width, height and stroke width from the\r\n * `--gog-icon-*` tokens, so an icon inherits size and colour from wherever it is used, the same\r\n * as a built-in.\r\n *\r\n * ## Security\r\n *\r\n * The markup is inserted with `DomSanitizer.bypassSecurityTrustHtml`, because Angular's HTML\r\n * sanitizer strips SVG and would leave you with nothing. That is safe for what this is for —\r\n * static icon markup you wrote or imported at build time — and unsafe for anything derived from\r\n * user input or fetched at runtime. **Never build a registered icon string from data you did\r\n * not author.** If you need remote icons, fetch them yourself, sanitize them with a real SVG\r\n * sanitizer, and register the result.\r\n */\r\nexport function provideGogIcons(icons: Readonly<Record<string, string>>): Provider {\r\n return {\r\n provide: GOG_ICONS,\r\n // skipSelf so this reads the *parent* injector's set rather than recursing into the provider\r\n // being defined here; optional because at the root there is no parent providing it.\r\n useFactory: () => ({\r\n ...(inject(GOG_ICONS, { skipSelf: true, optional: true }) ?? {}),\r\n ...icons,\r\n }),\r\n };\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 inject,\r\n isDevMode,\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { GogIconName, ICON_DEFS } from '../../shared/icons';\r\nimport { GOG_ICONS } from '../../shared/icon-registry';\r\n\r\nexport type { GogIconName, GogBuiltinIconName } from '../../shared/icons';\r\n\r\n/**\r\n * Names already warned about, so a missing icon rendered in a `@for` logs once rather than once\r\n * per row. Module-level because the point is one message per name per page, not per component.\r\n */\r\nconst warnedNames = new Set<string>();\r\n\r\n@Component({\r\n selector: 'gog-icon',\r\n imports: [NgTemplateOutlet],\r\n template: `\r\n @if (template(); as iconTpl) {\r\n <ng-container *ngTemplateOutlet=\"iconTpl\" />\r\n } @else if (iconSvg(); as svg) {\r\n <span [innerHTML]=\"svg\"></span>\r\n }\r\n `,\r\n styleUrl: './icon.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-icon',\r\n '[attr.aria-hidden]': 'ariaHidden() ? \"true\" : null',\r\n '[attr.aria-label]': 'ariaHidden() ? null : ariaLabel()',\r\n },\r\n})\r\nexport class IconComponent {\r\n private readonly sanitizer = inject(DomSanitizer);\r\n /** App-registered icons; overrides a built-in of the same name. See `provideGogIcons`. */\r\n private readonly registered = inject(GOG_ICONS);\r\n\r\n /** A built-in name, or one registered through `provideGogIcons(...)`. */\r\n readonly name = input<GogIconName>('close');\r\n readonly template = input<TemplateRef<unknown> | null>(null);\r\n readonly title = input('');\r\n readonly ariaHidden = input(true);\r\n\r\n protected readonly ariaLabel = computed(() =>\r\n this.ariaHidden() ? null : this.title() || this.name(),\r\n );\r\n\r\n /**\r\n * The markup to render, or `null` when the name resolves to nothing.\r\n *\r\n * An unknown name renders **nothing** and warns in dev mode — it never throws. An icon is\r\n * decoration: taking an app down mid-render over a typo in a glyph name would be a far worse\r\n * failure than the missing glyph, and the warning is what gets the typo fixed.\r\n */\r\n protected readonly iconSvg = computed(() => {\r\n const name = this.name();\r\n const markup = this.registered[name] ?? ICON_DEFS[name as keyof typeof ICON_DEFS];\r\n\r\n if (!markup) {\r\n if (isDevMode() && !warnedNames.has(name)) {\r\n warnedNames.add(name);\r\n console.warn(\r\n `[gog-icon] No icon named \"${name}\". Register it with provideGogIcons({ '${name}': '<svg…>' }), or use one of the built-ins.`,\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n return this.sanitizer.bypassSecurityTrustHtml(markup);\r\n });\r\n}\r\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\r\n /**\r\n * The single size modifier, replacing one `[class.gog-accordion--<size>]` binding per size.\r\n * Empty for `'lg'`: that is this component's default size, and its tokens are what every\r\n * `--gog-accordion-*` chain bottoms out at, so it has no modifier rule of its own.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.size() === 'lg' ? '' : `gog-accordion--${this.size()}`,\r\n );\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 gog-contained-layout\"\r\n [class]=\"sizeClass()\"\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 {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n} 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 '(focusout)': 'onFocusOut($event)',\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 * Closes the panel once focus leaves both the trigger and the content — e.g. Tabbing past\r\n * the last focusable element inside, or a click landing somewhere else on the page. Off by\r\n * default: plenty of consumers (an FAQ list, a settings section someone reads top to bottom)\r\n * want the panel to stay open regardless of where focus goes next, so this is opt-in rather\r\n * than baked in.\r\n */\r\n readonly collapseOnFocusOut = input(false);\r\n\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\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 protected onFocusOut(event: FocusEvent): void {\r\n if (!this.collapseOnFocusOut() || !this.open()) return;\r\n\r\n // relatedTarget is the element gaining focus — null covers a click landing outside any\r\n // focusable element, or the window losing focus entirely; both count as \"focus left\" here.\r\n const next = event.relatedTarget as Node | null;\r\n if (next && this.elementRef.nativeElement.contains(next)) return;\r\n\r\n this.open.set(false);\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","/**\r\n * Which `data-theme` an overlay rendered into `<body>` has to carry, if any.\r\n *\r\n * A panel or tooltip bubble is appended to `<body>`, which puts it outside whatever subtree it\r\n * was opened from. `data-theme` can be scoped to any subtree — several themes rendering side by\r\n * side is a documented use — so an overlay opened inside one of those has to be told which theme\r\n * it belongs to, or it silently picks up the document's instead.\r\n *\r\n * **But only when the theme really is scoped.** When the nearest themed ancestor is the document\r\n * element, copying the attribute is not merely redundant, it is actively wrong: the overlay\r\n * already inherits everything from `<html>` through `<body>`, and re-stating `data-theme` on it\r\n * makes it match `theme.css`'s derived layer (`:root, [data-theme]`) *locally*. That re-declares\r\n * every component token on the overlay itself, resolved against the plain preset palette — which\r\n * discards anything set on `<html>` that is not part of that preset. Custom properties written\r\n * inline on `:root` are the case that bites: a live theme editor sets them there, the page\r\n * follows, and every portal keeps rendering the un-edited theme.\r\n *\r\n * So: return the theme only for a genuinely scoped ancestor, and let inheritance do the work\r\n * otherwise.\r\n *\r\n * Known limitation, currently unreachable: a *scoped* theme that is itself being edited through\r\n * inline custom properties would still lose those on the overlay, since only the attribute is\r\n * carried across. Copying resolved values instead would mean reading ~1200 properties on every\r\n * open, which is not worth it for a case nothing does yet.\r\n */\r\nexport function scopedOverlayTheme(\r\n themeSource: Element | null,\r\n documentElement: Element,\r\n): string | null {\r\n const themedAncestor = themeSource?.closest('[data-theme]');\r\n if (!themedAncestor || themedAncestor === documentElement) return null;\r\n\r\n return themedAncestor.getAttribute('data-theme');\r\n}\r\n","import { ApplicationRef, EmbeddedViewRef, TemplateRef } from '@angular/core';\r\n\r\nimport { scopedOverlayTheme } from './overlay-theme';\r\n\r\n/**\r\n * Renders a template into `document.body` while keeping it wired to the declaring\r\n * component: the view is stamped with that component's style encapsulation and reads\r\n * its signals directly.\r\n *\r\n * That is the whole point of doing it this way rather than with a second, portal-only\r\n * component: one `<ng-template>` can serve both the inline and the appended-to-body\r\n * dropdown, so the option markup exists once and cannot drift between the two modes,\r\n * and selection state needs no manual field-syncing to stay in step.\r\n */\r\nexport class GogDropdownOverlay {\r\n private hostEl: HTMLElement | null = null;\r\n private viewRef: EmbeddedViewRef<unknown> | null = null;\r\n\r\n constructor(\r\n private readonly appRef: ApplicationRef,\r\n private readonly document: Document,\r\n ) {}\r\n\r\n /** The `<body>` child holding the rendered panel, or null while detached. */\r\n get hostElement(): HTMLElement | null {\r\n return this.hostEl;\r\n }\r\n\r\n get isAttached(): boolean {\r\n return this.viewRef !== null;\r\n }\r\n\r\n attach(template: TemplateRef<unknown>, themeSource: Element | null = null): void {\r\n this.detach();\r\n\r\n this.hostEl = this.document.createElement('div');\r\n this.hostEl.classList.add('gog-overlay-host');\r\n\r\n // Only for a genuinely scoped theme — see `scopedOverlayTheme` for why copying it when the\r\n // theme sits on `<html>` breaks live-edited themes.\r\n const theme = scopedOverlayTheme(themeSource, this.document.documentElement);\r\n if (theme) {\r\n this.hostEl.setAttribute('data-theme', theme);\r\n }\r\n\r\n this.document.body.appendChild(this.hostEl);\r\n\r\n this.viewRef = template.createEmbeddedView({});\r\n // Attached as its own change-detection root so signal reads inside the panel still\r\n // mark it dirty even though its DOM no longer sits under the declaring component.\r\n this.appRef.attachView(this.viewRef);\r\n\r\n for (const node of this.viewRef.rootNodes as Node[]) {\r\n this.hostEl.appendChild(node);\r\n }\r\n\r\n this.viewRef.detectChanges();\r\n }\r\n\r\n detach(): void {\r\n if (this.viewRef) {\r\n this.appRef.detachView(this.viewRef);\r\n this.viewRef.destroy();\r\n this.viewRef = null;\r\n }\r\n\r\n this.hostEl?.remove();\r\n this.hostEl = null;\r\n }\r\n}\r\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 { Signal, computed } from '@angular/core';\r\n\r\nimport { GogGlobalConfig, resolveConfigured } from './config';\r\n\r\n/**\r\n * Shared \"show a clear button\" state for the field-style controls.\r\n *\r\n * A plain composition class, same reasoning as `GogErrorState` and `GogFloatLabelState`: it has\r\n * to serve `gog-inputfield` and `gog-textarea` (no common base class) as well as\r\n * `GogDropdownBase`, which is one.\r\n *\r\n * The two things each control supplies itself are `hasValue` — \"there is something to clear\"\r\n * differs per control (non-empty string / non-null selection / non-empty array) — and the\r\n * actual clearing, since only the control knows its own empty value and how to notify forms.\r\n */\r\nexport class GogClearableState {\r\n /**\r\n * @param clearableInput the control's own `clearable` input (`undefined` when unset)\r\n * @param hasValue whether there is anything to clear\r\n * @param isNotEditable whether the control currently refuses edits — disabled, or (for the\r\n * text controls) read-only. Either way it offers no clear button: the affordance would\r\n * promise a change the control won't accept.\r\n * @param config the injected `GOG_CONFIG`\r\n * @param fallback the control's own default, read lazily — `GogDropdownBase` constructs this\r\n * in a field initializer, before its subclass has assigned `clearableByDefault`. `false`\r\n * everywhere except `gog-multiselect`, which shipped a clear button before this input\r\n * existed and keeps it.\r\n */\r\n constructor(\r\n private readonly clearableInput: Signal<boolean | undefined>,\r\n private readonly hasValue: Signal<boolean>,\r\n private readonly isNotEditable: Signal<boolean>,\r\n private readonly config: GogGlobalConfig,\r\n private readonly fallback: () => boolean,\r\n ) {}\r\n\r\n /** Whether the control is clearable at all — instance input, then config, then the default. */\r\n readonly enabled = computed(() =>\r\n resolveConfigured(this.clearableInput(), this.config.control?.clearable, this.fallback()),\r\n );\r\n\r\n /**\r\n * Whether the clear button should render *right now*. Deliberately value-driven: the control\r\n * shows nothing to clear until there is something to clear, so the affordance appears with the\r\n * content rather than sitting there permanently as dead chrome.\r\n */\r\n readonly isVisible = computed(() => this.enabled() && this.hasValue() && !this.isNotEditable());\r\n}\r\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","/**\r\n * How a collection-driven component reads one field off a consumer's own object.\r\n *\r\n * A `string` is a property name, or a dot-path into a nested one (`'profile.city'`). A function\r\n * is anything else. This is what lets `gog-select` / `gog-multiselect` take a consumer's real\r\n * DTO instead of forcing everything through a `{ id, name }` shape first.\r\n */\r\nexport type GogOptionAccessor<TOption, TResult> = string | ((option: TOption) => TResult);\r\n\r\n/** Resolves `field` against `source`, following dot-paths (e.g. `\"address.city\"`). */\r\nexport function getByPath(source: unknown, field: string): unknown {\r\n if (!field.includes('.')) return (source as Record<string, unknown> | null)?.[field];\r\n\r\n let value: unknown = source;\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\n/** Applies an accessor — a property path or a function — to one option. */\r\nexport function readOption<TOption, TResult>(\r\n option: TOption,\r\n accessor: GogOptionAccessor<TOption, TResult>,\r\n): TResult {\r\n return typeof accessor === 'function'\r\n ? accessor(option)\r\n : (getByPath(option, accessor) as TResult);\r\n}\r\n\r\n/**\r\n * Whether two resolved option values refer to the same option.\r\n *\r\n * Primitives are compared as strings, so a `formControl` holding `'1'` still matches an option\r\n * whose value is the number `1` — the library behaved this way before option values could be\r\n * anything, and forms routinely stringify. Objects are compared by identity instead: coercing\r\n * them would make every plain object equal to every other (`\"[object Object]\"`).\r\n */\r\nexport function isSameOptionValue(a: unknown, b: unknown): boolean {\r\n if (a === b) return true;\r\n if (a == null || b == null) return false;\r\n if (typeof a === 'object' || typeof b === 'object') return false;\r\n return String(a) === String(b);\r\n}\r\n","import { Signal, computed } from '@angular/core';\r\n\r\nimport { GogGlobalConfig, resolveConfigured } from './config';\r\nimport { GogFloatLabelVariant } from './types';\r\n\r\nconst DEFAULT_VARIANT: GogFloatLabelVariant = 'none';\r\nconst DEFAULT_SHOW_PLACEHOLDER = false;\r\n\r\n/**\r\n * Shared float-label state for the library's field-style controls.\r\n *\r\n * A plain class rather than a base class or directive, for the same reason as `GogErrorState`:\r\n * it has to serve `gog-inputfield` and `gog-textarea`, which share no base class, as well as\r\n * `GogDropdownBase`, which is one. Each consumer owns an instance and exposes whichever\r\n * members its template needs.\r\n *\r\n * The one thing each control must supply itself is `hasValue` — \"this field has content\" means\r\n * something different everywhere (a non-empty string, a non-null selection, a non-empty\r\n * selection array), which is exactly why this is composed in rather than implemented as a\r\n * directive sitting outside the component.\r\n */\r\nexport class GogFloatLabelState {\r\n /**\r\n * @param variantInput the control's own `floatLabel` input (`undefined` when unset)\r\n * @param showPlaceholderInput the control's own `floatLabelShowPlaceholder` input\r\n * @param placeholder the control's `placeholder` input\r\n * @param isFocused whether the control currently has focus\r\n * @param hasValue whether the control has a value — see the class note\r\n * @param config the injected `GOG_CONFIG`\r\n */\r\n constructor(\r\n private readonly variantInput: Signal<GogFloatLabelVariant | undefined>,\r\n private readonly showPlaceholderInput: Signal<boolean | undefined>,\r\n private readonly placeholder: Signal<string>,\r\n private readonly isFocused: Signal<boolean>,\r\n private readonly hasValue: Signal<boolean>,\r\n private readonly config: GogGlobalConfig,\r\n ) {}\r\n\r\n /** The resolved variant: instance input, else `GOG_CONFIG.floatLabel.variant`, else `'none'`. */\r\n readonly variant = computed(() =>\r\n resolveConfigured(this.variantInput(), this.config.floatLabel?.variant, DEFAULT_VARIANT),\r\n );\r\n\r\n readonly showPlaceholder = computed(() =>\r\n resolveConfigured(\r\n this.showPlaceholderInput(),\r\n this.config.floatLabel?.showPlaceholder,\r\n DEFAULT_SHOW_PLACEHOLDER,\r\n ),\r\n );\r\n\r\n /** Whether a float label is in effect at all — `false` keeps the static label-above layout. */\r\n readonly isActive = computed(() => this.variant() !== 'none');\r\n\r\n /** Whether the label is at its floated target rather than resting like a placeholder. */\r\n readonly isFloated = computed(() => this.isFocused() || this.hasValue());\r\n\r\n /**\r\n * The placeholder the control should actually render. While a float label is active the\r\n * resting label already occupies that space, so the placeholder stays hidden unless the\r\n * consumer opted into `floatLabelShowPlaceholder` — and even then only once the label has\r\n * floated out of the way.\r\n */\r\n readonly effectivePlaceholder = computed(() => {\r\n if (!this.isActive()) return this.placeholder();\r\n if (!this.showPlaceholder()) return '';\r\n return this.isFloated() ? this.placeholder() : '';\r\n });\r\n}\r\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 contentChild,\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 { GOG_CONFIG, resolveConfigured } from './config';\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 { GogClearableState } from './clearable-state';\r\nimport { GogErrorState, type GogErrorDisplay } from './error-state';\r\nimport { type GogOptionAccessor, isSameOptionValue, readOption } from './option-accessor';\r\nimport { GogFloatLabelState } from './float-label-state';\r\nimport { handleRovingFocusKeydown } from './roving-focus';\r\nimport { GogDropdownFilterPosition, GogFloatLabelVariant, GogSize } from './types';\r\n\r\n/**\r\n * Custom markup for the trigger's chevron, on `gog-select` and `gog-multiselect`:\r\n *\r\n * ```html\r\n * <gog-select [options]=\"opts\">\r\n * <ng-template gogDropdownChevron><gog-icon name=\"sort\" /></ng-template>\r\n * </gog-select>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogDropdownChevron]' })\r\nexport class GogDropdownChevronDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\r\n\r\n/** Context handed to a `gogDropdownOption` template. */\r\nexport interface GogDropdownOptionContext<TOption> {\r\n /** The consumer's own option object, untouched. */\r\n $implicit: TOption;\r\n selected: boolean;\r\n disabled: boolean;\r\n /** The resolved label, so a custom row can decorate it rather than re-derive it. */\r\n label: string;\r\n}\r\n\r\n/**\r\n * Custom markup for one option row, on `gog-select` and `gog-multiselect`:\r\n *\r\n * ```html\r\n * <gog-select [options]=\"users\" optionLabel=\"fullName\" optionValue=\"id\" [(value)]=\"userId\">\r\n * <ng-template gogDropdownOption let-user let-selected=\"selected\">\r\n * <img [src]=\"user.avatar\" alt=\"\" /> {{ user.fullName }}\r\n * </ng-template>\r\n * </gog-select>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogDropdownOption]' })\r\nexport class GogDropdownOptionDirective<TOption = unknown> {\r\n readonly templateRef = inject<TemplateRef<GogDropdownOptionContext<TOption>>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard<TOption>(\r\n _dir: GogDropdownOptionDirective<TOption>,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogDropdownOptionContext<TOption> {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * The shape the listbox controls assume when their accessor inputs are left at their defaults.\r\n *\r\n * It is no longer required: `optionLabel` / `optionValue` / `optionDisabled` accept any property\r\n * path or function, so a consumer can pass their own DTO straight through. This interface just\r\n * describes what the *default* accessors (`'name'` / `'id'` / `'disabled'`) expect to find.\r\n */\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/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nconst DEFAULT_APPEND_TO_BODY = false;\r\nconst DEFAULT_DROPDOWN_DIRECTION: GogDropdownDirection = 'auto';\r\nconst DEFAULT_FILTER = false;\r\nconst DEFAULT_FILTER_POSITION: GogDropdownFilterPosition = 'top';\r\nconst DEFAULT_CLEAR_SELECTION_LABEL = 'Clear selection';\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, TOption = GogDropdownOption>\r\n implements ControlValueAccessor, DoCheck\r\n{\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<TOption[]>([]);\r\n /**\r\n * How to read an option's visible text — a property path (`'name'`, `'profile.title'`) or a\r\n * function. Defaults to `'name'`, matching `GogDropdownOption`.\r\n */\r\n readonly optionLabel = input<GogOptionAccessor<TOption, string>>('name');\r\n /**\r\n * How to read the value this control emits for an option. A property path or a function, or\r\n * `null` to emit **the option object itself** — which is what lets a consumer keep their own\r\n * DTO end to end instead of mapping ids back to objects on every change.\r\n *\r\n * Defaults to `'id'`, matching `GogDropdownOption`, so existing code is unaffected.\r\n */\r\n readonly optionValue = input<GogOptionAccessor<TOption, unknown> | null>('id');\r\n /** How to read whether an option is disabled. Defaults to `'disabled'`. */\r\n readonly optionDisabled = input<GogOptionAccessor<TOption, boolean>>('disabled');\r\n /**\r\n * Whether to offer a clear button once something is selected. Unset, falls back to\r\n * `GOG_CONFIG.control.clearable`, then to the control's own default.\r\n */\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /**\r\n * Accessible name for the clear button. Unset, falls back to\r\n * `GOG_CONFIG.labels.clearSelection`, then to `'Clear selection'`.\r\n */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(\r\n this.clearAriaLabel(),\r\n this.globalConfig.labels?.clearSelection,\r\n DEFAULT_CLEAR_SELECTION_LABEL,\r\n ),\r\n );\r\n /**\r\n * Smallest width the trigger may shrink to, as any CSS length. Only meaningful with\r\n * `[fullWidth]=\"false\"`, where the trigger otherwise sizes to whatever is currently selected\r\n * and can collapse to almost nothing on a short option. Left unset it falls back to the\r\n * `--gog-{select,multiselect}-min-width` token.\r\n */\r\n readonly minWidth = input<string | null>(null);\r\n /**\r\n * Whether the panel shows a search box that narrows the option list. Unset, falls back to\r\n * `GOG_CONFIG.dropdown.filter`, then to `false`.\r\n */\r\n readonly filter = input<boolean | undefined>(undefined);\r\n readonly filterPlaceholder = input('Search...');\r\n /**\r\n * Which end of the panel the search box sticks to. Named to match `gog-multiselect`'s\r\n * `controlsPosition`, which is the same idea for its select-all row. Unset, falls back to\r\n * `GOG_CONFIG.dropdown.filterPosition`, then to `'top'`.\r\n */\r\n readonly filterPosition = input<GogDropdownFilterPosition | undefined>(undefined);\r\n /** Shown in place of the list when the query matches nothing. */\r\n readonly filterEmptyMessage = input('No matches');\r\n /**\r\n * How an option is matched against the query. Left null, the resolved `optionLabel` is\r\n * matched case-insensitively as a substring — pass a function to search other fields, match\r\n * on a prefix, or plug in your own fuzzy matcher.\r\n */\r\n readonly filterMatch = input<((option: TOption, query: string) => boolean) | null>(null);\r\n readonly errorMessage = input('');\r\n /**\r\n * See `GogErrorDisplay`. Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to\r\n * `'manual'` — matching every other control in the library.\r\n */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.dropdown.direction`, then to `'auto'`. */\r\n readonly dropdownDirection = input<GogDropdownDirection | undefined>(undefined);\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 /** Unset, falls back to `GOG_CONFIG.dropdown.appendToBody`, then to `false`. */\r\n readonly appendToBody = input<boolean | undefined>(undefined);\r\n readonly disabled = input(false);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogDropdownChevron>` into\r\n * the control instead. Removed in 21.5.0.\r\n */\r\n readonly chevronTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogDropdownChevron` template; wins over the deprecated `chevronTemplate`. */\r\n protected readonly chevronSlot = contentChild(GogDropdownChevronDirective);\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 /** Unset, falls back to `GOG_CONFIG.floatLabel.variant`, then to `'none'` (off). */\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.showPlaceholder`, then to `false`. */\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\r\n\r\n readonly isOpen = signal(false);\r\n\r\n /** Projected `gogDropdownOption` template, if the consumer supplied one. */\r\n protected readonly optionSlot = contentChild(GogDropdownOptionDirective);\r\n\r\n /** An option's visible text, via `optionLabel`. */\r\n protected labelOf(option: TOption): string {\r\n return readOption(option, this.optionLabel());\r\n }\r\n\r\n /**\r\n * The value this control emits for an option, via `optionValue` — or the option object\r\n * itself when `optionValue` is `null`.\r\n */\r\n protected valueOf(option: TOption): unknown {\r\n const accessor = this.optionValue();\r\n return accessor === null ? option : readOption(option, accessor);\r\n }\r\n\r\n /** Whether an option is disabled, via `optionDisabled`. Anything falsy counts as enabled. */\r\n protected isOptionDisabled(option: TOption): boolean {\r\n return !!readOption(option, this.optionDisabled());\r\n }\r\n\r\n /** Context for a projected `gogDropdownOption` row. */\r\n protected optionContext(option: TOption, selected: boolean): GogDropdownOptionContext<TOption> {\r\n return {\r\n $implicit: option,\r\n selected,\r\n disabled: this.isOptionDisabled(option),\r\n label: this.labelOf(option),\r\n };\r\n }\r\n\r\n /** Shared by both controls to match a resolved option value against the current value. */\r\n protected sameValue(a: unknown, b: unknown): boolean {\r\n return isSameOptionValue(a, b);\r\n }\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 * BEM block that carries the size modifier — `.gog-select` vs `.gog-ms-wrapper`. Separate\r\n * from `triggerClass` because in `gog-multiselect` the two are different elements.\r\n */\r\n protected abstract readonly sizeBlockClass: string;\r\n /** BEM block of the panel, which repeats the size modifier when appended to `<body>`. */\r\n protected abstract readonly panelBlockClass: string;\r\n /** Whether the control currently has a selection — drives the float-label \"filled\" state. */\r\n protected abstract readonly hasFloatValue: Signal<boolean>;\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 /**\r\n * Unique per-instance suffix, so several dropdowns on a page can't collide on DOM ids.\r\n *\r\n * Deliberately a bare number rather than `nextGogControlId()` (which the single-element\r\n * controls use): each subclass derives *several* ids from this one instance — trigger,\r\n * listbox, label, error — so what it needs is the instance number, not one finished id.\r\n */\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 /** `protected` so subclasses can resolve their own inputs against the same config object. */\r\n protected readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly overlay = new GogDropdownOverlay(this.appRef, this.document);\r\n\r\n /** Set from `(focus)`/`(blur)` on the trigger — see `onFocusIn`/`onFocusOut`. */\r\n protected readonly isFocused = signal(false);\r\n\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n protected readonly resolvedAppendToBody = computed(() =>\r\n resolveConfigured(\r\n this.appendToBody(),\r\n this.globalConfig.dropdown?.appendToBody,\r\n DEFAULT_APPEND_TO_BODY,\r\n ),\r\n );\r\n protected readonly resolvedDropdownDirection = computed(() =>\r\n resolveConfigured(\r\n this.dropdownDirection(),\r\n this.globalConfig.dropdown?.direction,\r\n DEFAULT_DROPDOWN_DIRECTION,\r\n ),\r\n );\r\n\r\n /**\r\n * The single size modifier for the wrapper, replacing one `[class.<block>--<size>]` binding\r\n * per size. Empty for `'md'`: that is the default size and has no modifier rule of its own —\r\n * every `--gog-<block>-size-*` chain bottoms out at the `md` tokens.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.resolvedSize() === DEFAULT_SIZE ? '' : `${this.sizeBlockClass}--${this.resolvedSize()}`,\r\n );\r\n /**\r\n * Same modifier repeated on the panel, but only when it is appended to `<body>` — outside\r\n * the component's subtree the panel no longer inherits the wrapper's size tokens, so it has\r\n * to carry them itself. See the `--portal` blocks in the component stylesheets.\r\n */\r\n protected readonly panelSizeClass = computed(() =>\r\n this.resolvedAppendToBody() && this.resolvedSize() !== DEFAULT_SIZE\r\n ? `${this.panelBlockClass}--${this.resolvedSize()}`\r\n : '',\r\n );\r\n\r\n private readonly cvaDisabled = signal(false);\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\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 /**\r\n * Explicit panel width, or null to let it size to its own content.\r\n *\r\n * The panel used to be pinned to the trigger's width, which broke a trigger narrower than its\r\n * options: with `[fullWidth]=\"false\"` the trigger shrinks to the *current* selection, so\r\n * picking a short option cut the longer ones off in the list. It now sizes to its content with\r\n * the trigger width as a floor — see `resolvedPanelMinWidth`.\r\n */\r\n protected readonly resolvedPanelWidth = computed(() => this.dropdownWidth());\r\n\r\n /** The trigger's width, used as the panel's minimum so it never renders narrower than it. */\r\n protected readonly resolvedPanelMinWidth = computed(() => {\r\n const width = this.panelPlacement()?.width;\r\n return 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 /**\r\n * Each control supplies its own default: `gog-multiselect` shipped a clear button before\r\n * `clearable` existed, so it keeps one; `gog-select` opts in.\r\n */\r\n protected abstract readonly clearableByDefault: boolean;\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n computed(() => this.hasFloatValue()),\r\n this.isDisabled,\r\n this.globalConfig,\r\n // read lazily for the same field-initialisation-order reason as hasFloatValue below\r\n () => this.clearableByDefault,\r\n );\r\n\r\n /** Whether to render the clear button right now — see `GogClearableState`. */\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n protected readonly resolvedFilter = computed(() =>\r\n resolveConfigured(this.filter(), this.globalConfig.dropdown?.filter, DEFAULT_FILTER),\r\n );\r\n protected readonly resolvedFilterPosition = computed(() =>\r\n resolveConfigured(\r\n this.filterPosition(),\r\n this.globalConfig.dropdown?.filterPosition,\r\n DEFAULT_FILTER_POSITION,\r\n ),\r\n );\r\n /** Current search text. Cleared whenever the panel closes, so reopening starts fresh. */\r\n protected readonly filterQuery = signal('');\r\n\r\n /**\r\n * The options actually rendered. Everything downstream — the loops, the keyboard navigation\r\n * target list, the panel height estimate, and multiselect's select-all — reads this rather\r\n * than `options()`, so filtering stays consistent instead of only hiding rows visually.\r\n */\r\n protected readonly visibleOptions = computed(() => {\r\n const query = this.filterQuery().trim();\r\n if (!this.resolvedFilter() || query === '') return this.options();\r\n\r\n const match = this.filterMatch();\r\n if (match) return this.options().filter((option) => match(option, query));\r\n\r\n const needle = query.toLowerCase();\r\n return this.options().filter((option) => this.labelOf(option).toLowerCase().includes(needle));\r\n });\r\n\r\n protected onFilterInput(event: Event): void {\r\n this.filterQuery.set((event.target as HTMLInputElement).value);\r\n }\r\n\r\n /** Resets the control to its empty value and notifies any attached form. */\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.commitValue(this.emptyValue);\r\n }\r\n\r\n /**\r\n * `hasFloatValue` is wrapped in a `computed` rather than passed straight through: these\r\n * field initializers run before the *subclass's* do, so `this.hasFloatValue` is still\r\n * undefined right here. The arrow defers the read until the signal is first evaluated, by\r\n * which time the subclass has assigned it.\r\n */\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n computed(() => this.hasFloatValue()),\r\n this.globalConfig,\r\n );\r\n\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\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 /** Bound to `(focus)` on the trigger — only drives the float-label floated state. */\r\n protected onFocusIn(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n /** Bound to `(blur)` on the trigger — only drives the float-label floated state. */\r\n protected onFocusOut(): void {\r\n this.isFocused.set(false);\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.resolvedAppendToBody()) {\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.filterQuery.set('');\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.resolvedAppendToBody() ? 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.visibleOptions().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.resolvedDropdownDirection(),\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 { 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\nconst DEFAULT_SHOW_TRACK = true;\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 * Whether the overlay thumb/track ever renders. Native scrolling — wheel, touch, keyboard,\r\n * focus-into-view, and any programmatic `scrollTo`/`scrollIntoView` — keeps working exactly\r\n * the same either way; this only controls the visual affordance, not `overflow` or scroll\r\n * containment (see `viewportOverflowY`/`X`). Off suits a viewport whose *position* is already\r\n * driven some other way — `gog-tabs`' `scrollActiveIntoView` is the case this exists for,\r\n * where a second, independent scroll indicator next to the active-tab underline reads as two\r\n * conflicting signals for the same thing. Unset, falls back to `GOG_CONFIG.scroll.showTrack`,\r\n * then to `true`.\r\n */\r\n readonly showTrack = input<boolean | 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 protected readonly resolvedShowTrack = computed(\r\n () => this.showTrack() ?? this.globalConfig.scroll?.showTrack ?? DEFAULT_SHOW_TRACK,\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({\r\n scrollTop,\r\n scrollLeft,\r\n scrollHeight,\r\n scrollWidth,\r\n clientHeight,\r\n clientWidth,\r\n });\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 (resolvedShowTrack() && showTrackV()) {\r\n <div\r\n class=\"gog-scroll__track gog-scroll__track--v\"\r\n [class.gog-scroll__track--visible]=\"\r\n !resolvedAutoHide() || interacting() || dragAxis() === 'vertical'\r\n \"\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 (resolvedShowTrack() && showTrackH()) {\r\n <div\r\n class=\"gog-scroll__track gog-scroll__track--h\"\r\n [class.gog-scroll__track--visible]=\"\r\n !resolvedAutoHide() || interacting() || dragAxis() === 'horizontal'\r\n \"\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 (resolvedShowTrack() && axis() === 'both' && showTrackV() && showTrackH()) {\r\n <div class=\"gog-scroll__corner\" aria-hidden=\"true\"></div>\r\n }\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { GogDropdownBase, type GogDropdownOption } from '../../shared/dropdown-base';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SEARCH_DEBOUNCE = 300;\r\nconst DEFAULT_MIN_LENGTH = 1;\r\nconst DEFAULT_OPEN_ON_FOCUS = true;\r\n\r\n/**\r\n * A text field that suggests options as you type.\r\n *\r\n * ```html\r\n * <gog-autocomplete\r\n * [options]=\"users\"\r\n * optionLabel=\"profile.fullName\"\r\n * [optionValue]=\"null\"\r\n * [(value)]=\"user\"\r\n * (gogSearch)=\"load($event)\"\r\n * [loading]=\"loading()\"\r\n * />\r\n * ```\r\n *\r\n * Shares `GogDropdownBase` with `gog-select` — placement, the append-to-body overlay, the\r\n * option accessors, float label, error state and `ControlValueAccessor` all come from there.\r\n * What makes it a separate control rather than a mode of `gog-select` is the trigger: here it\r\n * is a real `<input>`, which changes the ARIA contract completely. The input keeps DOM focus\r\n * the whole time and the highlighted option is pointed at with `aria-activedescendant`, where\r\n * a listbox moves focus onto the option itself.\r\n */\r\n@Component({\r\n selector: 'gog-autocomplete',\r\n imports: [IconComponent, NgTemplateOutlet, ScrollComponent, SpinnerComponent],\r\n templateUrl: './autocomplete.component.html',\r\n styleUrl: './autocomplete.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Only bites when the control has opted out of full width; otherwise the container decides.\r\n '[style.--gog-autocomplete-min-width]': 'minWidth()',\r\n },\r\n})\r\nexport class AutocompleteComponent<\r\n TOption = GogDropdownOption,\r\n TValue = string | number | null,\r\n> extends GogDropdownBase<TValue, TOption> {\r\n readonly inputId = input('');\r\n\r\n /**\r\n * Two-way bindable selected value: `[(value)]=\"signal\"`. Carries whatever `optionValue`\r\n * resolves to — an id by default, or the option object itself when `optionValue` is `null`.\r\n */\r\n readonly value = model<TValue>(null as TValue);\r\n\r\n /**\r\n * Whether to narrow `options` in the browser as the user types.\r\n *\r\n * Leave it on for a list you already hold. Turn it **off** when `gogSearch` fetches an\r\n * already-filtered list from a server: filtering that answer a second time against the same\r\n * query is the classic double-filtering bug, and it silently drops rows whose match the\r\n * server found in a field this component cannot see.\r\n */\r\n readonly filterLocal = input(true);\r\n /** How many characters before the panel opens at all. */\r\n readonly minLength = input<number | undefined>(undefined);\r\n /**\r\n * Whether focusing the field opens the panel immediately, showing the full option list —\r\n * before `minLength` would otherwise have let anything through. Off, the field behaves as\r\n * before: nothing opens until enough has been typed. Unset, falls back to\r\n * `GOG_CONFIG.autocomplete.openOnFocus`, then to `true`.\r\n */\r\n readonly openOnFocus = input<boolean | undefined>(undefined);\r\n /** Milliseconds of quiet before `gogSearch` fires. `0` emits on every keystroke. */\r\n readonly searchDebounce = input<number | undefined>(undefined);\r\n /** Shows a spinner in the trailing slot — for a server-backed source that is still loading. */\r\n readonly loading = input(false);\r\n /** Shown in place of the list when nothing matches. */\r\n readonly emptyMessage = input('No matches');\r\n /**\r\n * Whether free text that matches no option is discarded when the field loses focus.\r\n *\r\n * On (the default) the field always ends up reflecting a real selection: editing is treated\r\n * as transient, so the current `value` survives keystrokes and Escape or blur snaps the text\r\n * back to it.\r\n *\r\n * Off, what the user typed is itself meaningful — a create-as-you-type flow. The text is left\r\n * alone on blur and `value` is dropped as soon as it stops matching, so the two never\r\n * disagree. Read the typed text from `gogSearch` rather than from `value`.\r\n */\r\n readonly forceSelection = input(true);\r\n\r\n /** The current query, debounced. Wire a server-side lookup to this. */\r\n readonly gogSearch = output<string>();\r\n /**\r\n * Fires when the panel is scrolled to the end of the option list — the signal to fetch and\r\n * append another page of a large or server-backed source, rather than handing the whole\r\n * thing over up front. Forwarded from the panel's own `gog-scroll`.\r\n */\r\n readonly gogLoadMore = output<void>();\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n /** A cleared autocomplete is `null`, whatever `TValue` the consumer bound. */\r\n protected readonly emptyValue = null as TValue;\r\n protected readonly optionClass = 'gog-autocomplete__option';\r\n protected readonly triggerClass = 'gog-autocomplete__control';\r\n protected readonly sizeBlockClass = 'gog-autocomplete';\r\n protected readonly panelBlockClass = 'gog-autocomplete__dropdown';\r\n /** Opt-in, matching `gog-select` and `gog-inputfield`. */\r\n protected readonly clearableByDefault = false;\r\n protected override readonly optionGapToken = '--gog-autocomplete-option-gap';\r\n protected override readonly panelMaxHeightToken = '--gog-autocomplete-panel-max-height';\r\n protected override readonly optionHeightToken = '--gog-autocomplete-option-height';\r\n\r\n private readonly config = inject(GOG_CONFIG);\r\n private readonly ownDestroyRef = inject(DestroyRef);\r\n\r\n protected readonly triggerId = computed(() => this.inputId() || `gog-autocomplete-${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 protected optionId(index: number): string {\r\n return `${this.triggerId()}-option-${index}`;\r\n }\r\n\r\n protected readonly resolvedMinLength = computed(() =>\r\n resolveConfigured(this.minLength(), this.config.autocomplete?.minLength, DEFAULT_MIN_LENGTH),\r\n );\r\n private readonly resolvedDebounce = computed(() =>\r\n resolveConfigured(\r\n this.searchDebounce(),\r\n this.config.autocomplete?.searchDebounce,\r\n DEFAULT_SEARCH_DEBOUNCE,\r\n ),\r\n );\r\n protected readonly resolvedOpenOnFocus = computed(() =>\r\n resolveConfigured(\r\n this.openOnFocus(),\r\n this.config.autocomplete?.openOnFocus,\r\n DEFAULT_OPEN_ON_FOCUS,\r\n ),\r\n );\r\n\r\n /** What is actually in the `<input>`. Not the same thing as the committed `value`. */\r\n protected readonly query = signal('');\r\n /**\r\n * True right after `openOnFocus` opens the panel, until the user actually types. The field\r\n * may already be showing a previously-selected label at that point — this keeps the panel's\r\n * list unfiltered by it, so focusing shows every option rather than just the one that\r\n * happens to match the current text. Cleared on the first keystroke, so filtering resumes\r\n * exactly as before.\r\n */\r\n protected readonly browsingAll = signal(false);\r\n /**\r\n * Which option the arrows have highlighted. `-1` means none — Enter then does nothing rather\r\n * than committing whichever row happened to be first, which is what stops a fast typist from\r\n * selecting something they never looked at.\r\n */\r\n protected readonly activeIndex = signal(-1);\r\n\r\n protected readonly selectedOption = computed(\r\n () =>\r\n this.options().find((option) => this.sameValue(this.valueOf(option), this.value())) ?? null,\r\n );\r\n protected readonly selectedLabel = computed(() => {\r\n const option = this.selectedOption();\r\n return option === null ? '' : this.labelOf(option);\r\n });\r\n protected readonly hasFloatValue = computed(() => this.value() != null || this.query() !== '');\r\n\r\n /**\r\n * Local filtering, replacing the base's panel-filter behaviour: here the query comes from the\r\n * trigger, not from a search box inside the panel. Overriding this rather than duplicating a\r\n * second filtered list keeps the keyboard targets, the empty state and the panel height\r\n * estimate all reading the same set.\r\n */\r\n protected override readonly visibleOptions = computed(() => {\r\n const query = this.browsingAll() ? '' : this.query().trim();\r\n if (!this.filterLocal() || query === '') return this.options();\r\n\r\n const match = this.filterMatch();\r\n if (match) return this.options().filter((option) => match(option, query));\r\n\r\n const needle = query.toLowerCase();\r\n return this.options().filter((option) => this.labelOf(option).toLowerCase().includes(needle));\r\n });\r\n\r\n protected readonly activeOptionId = computed(() => {\r\n const index = this.activeIndex();\r\n return index >= 0 && index < this.visibleOptions().length ? this.optionId(index) : null;\r\n });\r\n\r\n private searchTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n constructor() {\r\n super();\r\n this.ownDestroyRef.onDestroy(() => this.cancelPendingSearch());\r\n\r\n // Keep the field showing the selection whenever the user is not mid-edit. Covers a value\r\n // written by a form, a `[(value)]` set from outside, and the options arriving after the\r\n // value did — which is the normal order for a server-backed control.\r\n effect(() => {\r\n const label = this.selectedLabel();\r\n if (!this.isOpen() && label !== '') {\r\n this.query.set(label);\r\n }\r\n });\r\n }\r\n\r\n protected isSelected(option: TOption): boolean {\r\n return this.sameValue(this.valueOf(option), this.value());\r\n }\r\n\r\n protected onInput(event: Event): void {\r\n const text = (event.target as HTMLInputElement).value;\r\n this.browsingAll.set(false);\r\n this.query.set(text);\r\n this.activeIndex.set(-1);\r\n\r\n // Whether editing over a selection drops it depends on which mode this is in.\r\n //\r\n // With `forceSelection` off, free text is itself the answer, so the moment it diverges from\r\n // the selected option the value no longer describes what the field shows and has to go.\r\n //\r\n // With it on, the edit is *transient* — Escape or blur snaps the field back to the\r\n // selection — so the value is kept until one of those resolves it. Dropping it per\r\n // keystroke instead would mean a user who types one character to refine their search and\r\n // then changes their mind has silently lost what they had picked.\r\n if (!this.forceSelection() && this.value() != null && text !== this.selectedLabel()) {\r\n this.commitValue(this.emptyValue);\r\n }\r\n\r\n if (text.trim().length >= this.resolvedMinLength()) {\r\n this.open();\r\n } else {\r\n this.close();\r\n }\r\n\r\n this.scheduleSearch(text);\r\n }\r\n\r\n /**\r\n * The input owns its arrow keys; the base's option-focusing handlers are deliberately not\r\n * wired up here. Moving DOM focus into the list would take the caret out of the field, which\r\n * is exactly what a combobox must not do.\r\n */\r\n protected onInputKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n case 'ArrowUp': {\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.open();\r\n return;\r\n }\r\n this.moveActive(event.key === 'ArrowDown' ? 1 : -1);\r\n return;\r\n }\r\n case 'Home':\r\n case 'End': {\r\n if (!this.isOpen()) return;\r\n // Only claimed while the list is showing — otherwise Home/End belong to the caret.\r\n event.preventDefault();\r\n this.setActive(event.key === 'Home' ? 0 : this.visibleOptions().length - 1);\r\n return;\r\n }\r\n case 'Enter': {\r\n const option = this.visibleOptions()[this.activeIndex()];\r\n if (this.isOpen() && option) {\r\n event.preventDefault();\r\n this.pick(option);\r\n }\r\n return;\r\n }\r\n case 'Escape': {\r\n if (!this.isOpen()) return;\r\n event.preventDefault();\r\n this.close();\r\n this.restoreSelectedText();\r\n return;\r\n }\r\n case 'Tab': {\r\n // Not prevented: the panel closes and the browser's own Tab handling carries on.\r\n this.close();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n protected onOptionClick(option: TOption, event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.pick(option);\r\n }\r\n\r\n /**\r\n * Keeps the caret in the field while an option is clicked. Without it the input blurs first,\r\n * `forceSelection` wipes the text, and the click lands on a list that has already closed.\r\n */\r\n protected onOptionMousedown(event: MouseEvent): void {\r\n event.preventDefault();\r\n }\r\n\r\n protected onInputFocus(): void {\r\n this.onFocusIn();\r\n\r\n if (this.resolvedOpenOnFocus() && !this.isOpen()) {\r\n this.browsingAll.set(true);\r\n this.open();\r\n }\r\n }\r\n\r\n protected onInputBlur(): void {\r\n this.onFocusOut();\r\n this.close();\r\n\r\n if (this.forceSelection()) {\r\n this.restoreSelectedText();\r\n }\r\n }\r\n\r\n protected override close(): void {\r\n super.close();\r\n this.activeIndex.set(-1);\r\n this.browsingAll.set(false);\r\n }\r\n\r\n /** Clearing has to empty the *text* as well; the base only knows about the value. */\r\n protected override clearValue(event: Event): void {\r\n super.clearValue(event);\r\n this.query.set('');\r\n this.cancelPendingSearch();\r\n this.gogSearch.emit('');\r\n }\r\n\r\n private pick(option: TOption): void {\r\n if (this.isOptionDisabled(option)) return;\r\n\r\n this.commitValue(this.valueOf(option) as TValue);\r\n this.query.set(this.labelOf(option));\r\n this.close();\r\n this.cancelPendingSearch();\r\n }\r\n\r\n /** Snaps the field back to whatever `value` holds — the empty string when nothing is picked. */\r\n private restoreSelectedText(): void {\r\n this.query.set(this.selectedLabel());\r\n }\r\n\r\n private moveActive(step: number): void {\r\n const count = this.visibleOptions().length;\r\n if (count === 0) return;\r\n\r\n const current = this.activeIndex();\r\n // From \"nothing highlighted\", ArrowDown starts at the top and ArrowUp at the bottom.\r\n const next = current === -1 ? (step > 0 ? 0 : count - 1) : (current + step + count) % count;\r\n this.setActive(next);\r\n }\r\n\r\n private setActive(index: number): void {\r\n const count = this.visibleOptions().length;\r\n if (count === 0 || index < 0 || index >= count) return;\r\n\r\n this.activeIndex.set(index);\r\n this.scrollActiveIntoView(index);\r\n }\r\n\r\n private scrollActiveIntoView(index: number): void {\r\n if (!this.isBrowser) return;\r\n\r\n // The highlighted row is not focused, so nothing scrolls it into view for us.\r\n queueMicrotask(() => {\r\n const option = document.getElementById(this.optionId(index));\r\n // Feature-detected rather than assumed: this runs in a microtask, so a host without\r\n // `scrollIntoView` (jsdom, for one) would throw where nothing can catch it, and an\r\n // unhandled rejection fails the whole test run rather than just this line.\r\n if (typeof option?.scrollIntoView === 'function') {\r\n option.scrollIntoView({ block: 'nearest' });\r\n }\r\n });\r\n }\r\n\r\n private scheduleSearch(query: string): void {\r\n this.cancelPendingSearch();\r\n\r\n const delay = this.resolvedDebounce();\r\n if (delay <= 0) {\r\n this.gogSearch.emit(query);\r\n return;\r\n }\r\n\r\n this.searchTimer = setTimeout(() => {\r\n this.searchTimer = null;\r\n this.gogSearch.emit(query);\r\n }, delay);\r\n }\r\n\r\n private cancelPendingSearch(): void {\r\n if (this.searchTimer !== null) {\r\n clearTimeout(this.searchTimer);\r\n this.searchTimer = null;\r\n }\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-autocomplete\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-autocomplete--clearable]=\"showClear()\"\r\n [class.gog-autocomplete--disabled]=\"isDisabled()\"\r\n [class.gog-autocomplete--open]=\"isOpen()\"\r\n [class.gog-autocomplete--loading]=\"loading()\"\r\n [class.gog-autocomplete--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-autocomplete--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-autocomplete--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-autocomplete--floated]=\"isFloatLabelFloated()\"\r\n>\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-autocomplete__label\" [for]=\"triggerId()\">{{ label() }}</label>\r\n }\r\n\r\n <div class=\"gog-autocomplete__field\">\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-autocomplete__label gog-autocomplete__label--float\" [for]=\"triggerId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n\r\n <!--\r\n The input *is* the combobox — role, aria-autocomplete and aria-activedescendant all sit\r\n here, and DOM focus never leaves it. That is the difference from gog-select, where the\r\n trigger is a button and focus moves onto the option itself.\r\n -->\r\n <input\r\n type=\"text\"\r\n class=\"gog-autocomplete__control\"\r\n autocomplete=\"off\"\r\n role=\"combobox\"\r\n aria-autocomplete=\"list\"\r\n [id]=\"triggerId()\"\r\n [disabled]=\"isDisabled()\"\r\n [value]=\"query()\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || placeholder() || null\"\r\n [attr.aria-controls]=\"listboxId()\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-activedescendant]=\"activeOptionId()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onInput($event)\"\r\n (keydown)=\"onInputKeydown($event)\"\r\n (focus)=\"onInputFocus()\"\r\n (blur)=\"onInputBlur()\"\r\n />\r\n\r\n <span class=\"gog-autocomplete__actions\">\r\n @if (loading()) {\r\n <gog-spinner class=\"gog-autocomplete__spinner\" size=\"xsm\" ariaLabel=\"Loading\" />\r\n }\r\n\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-autocomplete__clear gog-inline-center\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (mousedown)=\"onOptionMousedown($event)\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n </span>\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\r\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\r\n }\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-autocomplete__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 — inline, or stamped into <body> by the overlay when\r\n `appendToBody` is set, which is why the portal modifier and the resolved coordinates are\r\n applied conditionally.\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; the keyboard contract lives on the combobox input, which keeps focus and drives this list via aria-activedescendant -->\r\n <div\r\n [id]=\"listboxId()\"\r\n class=\"gog-autocomplete__dropdown\"\r\n [class.gog-autocomplete__dropdown--up]=\"\r\n !resolvedAppendToBody() && dropdownDirectionState() === 'up'\r\n \"\r\n [class.gog-autocomplete__dropdown--portal]=\"resolvedAppendToBody()\"\r\n [class]=\"panelSizeClass()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"resolvedAppendToBody() ? resolvedPanelWidth() : null\"\r\n [style.min-width]=\"resolvedAppendToBody() ? resolvedPanelMinWidth() : null\"\r\n [style.max-height]=\"resolvedAppendToBody() ? resolvedPanelMaxHeight() : null\"\r\n [style.z-index]=\"dropdownZIndex() ?? panelZIndex()\"\r\n role=\"listbox\"\r\n [attr.aria-label]=\"label() || ariaLabel() || null\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <gog-scroll\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n class=\"gog-autocomplete__scroll\"\r\n (gogReachEnd)=\"gogLoadMore.emit()\"\r\n >\r\n @if (visibleOptions().length === 0) {\r\n <p class=\"gog-autocomplete__empty\">{{ emptyMessage() }}</p>\r\n }\r\n\r\n @for (option of visibleOptions(); track valueOf(option); let i = $index) {\r\n <!--\r\n A div, not a button: focus stays in the input, so these rows are never focused and a\r\n button would only add tab stops and a second Enter handler. The highlight is pointed\r\n at with aria-activedescendant instead.\r\n\r\n mousedown is prevented so clicking a row doesn't blur the input first — that blur\r\n would close the panel and, under forceSelection, wipe the text before the click lands.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- this is the ARIA combobox pattern: the option is deliberately neither focusable nor a keyboard target, because focus stays in the input and the whole keyboard contract (arrows, Enter, Escape) is handled there and communicated through aria-activedescendant. Making these rows focusable would break the pattern rather than improve it. -->\r\n <div\r\n class=\"gog-autocomplete__option\"\r\n role=\"option\"\r\n [id]=\"optionId(i)\"\r\n [attr.aria-selected]=\"isSelected(option)\"\r\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\r\n [class.gog-autocomplete__option--active]=\"i === activeIndex()\"\r\n [class.gog-autocomplete__option--selected]=\"isSelected(option)\"\r\n [class.gog-autocomplete__option--disabled]=\"isOptionDisabled(option)\"\r\n (mousedown)=\"onOptionMousedown($event)\"\r\n (click)=\"onOptionClick(option, $event)\"\r\n >\r\n @if (optionSlot(); as slot) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"slot.templateRef\"\r\n [ngTemplateOutletContext]=\"optionContext(option, isSelected(option))\"\r\n />\r\n } @else {\r\n <span class=\"gog-autocomplete__option-label\">{{ labelOf(option) }}</span>\r\n }\r\n </div>\r\n }\r\n </gog-scroll>\r\n </div>\r\n</ng-template>\r\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n PLATFORM_ID,\n Renderer2,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\n\nimport { GogBadgePosition, GogTagVariant } from '../../shared/types';\n\n/** Beyond this count the badge renders `N+` rather than growing without limit. */\nconst DEFAULT_MAX = 99;\n\n/**\n * A count or status dot pinned to the corner of another element.\n *\n * ```html\n * <gog-button gogBadge=\"12\" badgeAriaLabel=\"12 непрочитанных\">Входящие</gog-button>\n * <gog-icon name=\"info\" gogBadge badgeDot />\n * ```\n *\n * A **directive, not a component**, because a badge decorates something that already exists —\n * a button, an icon, an avatar. As a component it would have to wrap its host, which changes\n * that host's layout, and it would duplicate `gog-tag` for the sake of one different radius.\n *\n * It renders **nothing at all** when the value is `0`, `null` or empty and `badgeDot` is off:\n * a badge reading \"0\" is the defining bug of this component class, so it is not reachable.\n */\n@Directive({\n selector: '[gogBadge]',\n host: {\n // The badge is absolutely positioned against the host, so the host has to be a containing\n // block. A class rather than an inline style so a consumer can still position it themselves.\n class: 'gog-badge-host',\n },\n})\nexport class GogBadgeDirective {\n /** The badge content. Numbers above `badgeMax` render as `N+`. */\n readonly gogBadge = input<string | number | null>(null);\n readonly badgePosition = input<GogBadgePosition>('top-end');\n /** Reuses the library's semantic colour set — the same four names `gog-tag` takes. */\n readonly badgeVariant = input<GogTagVariant>('danger');\n /** Renders a bare dot with no text: \"something changed here\", with no count to give. */\n readonly badgeDot = input(false, { transform: booleanAttribute });\n readonly badgeMax = input(DEFAULT_MAX);\n /** Keeps the badge out of the DOM without removing the directive. */\n readonly badgeHidden = input(false, { transform: booleanAttribute });\n /**\n * What assistive tech should hear instead of the bare number.\n *\n * Left empty, the badge text is announced inline with the host's own label, which reads as\n * \"Входящие 12\" — acceptable, and what Material does. Set this and the visible badge becomes\n * `aria-hidden` while this wording is announced in its place, so the host reads as\n * \"Входящие, 12 непрочитанных\" instead.\n */\n readonly badgeAriaLabel = input('');\n\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private badgeEl: HTMLElement | null = null;\n private descriptionEl: HTMLElement | null = null;\n\n /** `0` and `''` count as \"nothing to show\" — see the class comment. */\n private readonly hasContent = computed(() => {\n const value = this.gogBadge();\n if (value === null || value === undefined) return false;\n const text = String(value).trim();\n return text !== '' && text !== '0';\n });\n\n protected readonly visible = computed(\n () => !this.badgeHidden() && (this.badgeDot() || this.hasContent()),\n );\n\n protected readonly text = computed(() => {\n if (this.badgeDot()) return '';\n\n const value = this.gogBadge();\n const numeric = typeof value === 'number' ? value : Number(value);\n // Non-numeric content (\"NEW\", \"beta\") passes through untouched — capping only makes sense\n // for a count.\n if (value === null || Number.isNaN(numeric) || String(value).trim() === '') {\n return value === null ? '' : String(value);\n }\n\n const max = this.badgeMax();\n return numeric > max ? `${max}+` : String(value);\n });\n\n private readonly classNames = computed(() =>\n [\n 'gog-badge',\n `gog-badge--${this.badgePosition()}`,\n `gog-badge--${this.badgeVariant()}`,\n this.badgeDot() ? 'gog-badge--dot' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.teardown());\n\n effect(() => {\n // Browser-only on purpose. The badge is a node the server would render but the client's\n // hydration walk knows nothing about, which is an NG0500 node mismatch waiting to happen.\n // It costs one frame after hydration and buys a component that is safe in an SSR app.\n if (!this.isBrowser) return;\n\n if (!this.visible()) {\n this.teardown();\n return;\n }\n\n this.render(this.classNames(), this.text(), this.badgeAriaLabel());\n });\n }\n\n private render(className: string, text: string, ariaLabel: string): void {\n const host = this.hostRef.nativeElement;\n\n this.badgeEl ??= this.renderer.createElement('span') as HTMLElement;\n this.renderer.setAttribute(this.badgeEl, 'class', className);\n this.renderer.setProperty(this.badgeEl, 'textContent', text);\n\n if (ariaLabel) {\n // The wording replaces the number rather than joining it, so nothing is said twice.\n this.renderer.setAttribute(this.badgeEl, 'aria-hidden', 'true');\n this.descriptionEl ??= this.renderer.createElement('span') as HTMLElement;\n this.renderer.setAttribute(this.descriptionEl, 'class', 'gog-visually-hidden');\n this.renderer.setProperty(this.descriptionEl, 'textContent', ariaLabel);\n if (!this.descriptionEl.parentNode) {\n this.renderer.appendChild(host, this.descriptionEl);\n }\n } else {\n this.renderer.removeAttribute(this.badgeEl, 'aria-hidden');\n this.removeDescription();\n }\n\n if (!this.badgeEl.parentNode) {\n this.renderer.appendChild(host, this.badgeEl);\n }\n }\n\n private removeDescription(): void {\n if (this.descriptionEl?.parentNode) {\n this.renderer.removeChild(this.hostRef.nativeElement, this.descriptionEl);\n }\n this.descriptionEl = null;\n }\n\n private teardown(): void {\n if (this.badgeEl?.parentNode) {\n this.renderer.removeChild(this.hostRef.nativeElement, this.badgeEl);\n }\n this.badgeEl = null;\n this.removeDescription();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n TemplateRef,\n computed,\n contentChild,\n inject,\n input,\n model,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\nimport {\n type GogOptionAccessor,\n isSameOptionValue,\n readOption,\n} from '../../shared/option-accessor';\nimport { handleRovingFocusKeydown } from '../../shared/roving-focus';\nimport { GogButtonToggleAppearance, GogOrientation, GogSize } from '../../shared/types';\n\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\nconst DEFAULT_SIZE: GogSize = 'md';\n\n/** Context handed to a `gogButtonToggleOption` template. */\nexport interface GogButtonToggleOptionContext<TOption> {\n /** The consumer's own option object, untouched. */\n $implicit: TOption;\n selected: boolean;\n disabled: boolean;\n /** The resolved label, so custom markup can decorate it rather than re-derive it. */\n label: string;\n}\n\n/**\n * Custom markup for one button in the group:\n *\n * ```html\n * <gog-button-toggle-group [options]=\"views\">\n * <ng-template gogButtonToggleOption let-view let-selected=\"selected\">\n * <gog-icon [name]=\"view.icon\" /> {{ view.title }}\n * </ng-template>\n * </gog-button-toggle-group>\n * ```\n */\n@Directive({ selector: '[gogButtonToggleOption]' })\nexport class GogButtonToggleOptionDirective<TOption = unknown> {\n readonly templateRef = inject<TemplateRef<GogButtonToggleOptionContext<TOption>>>(TemplateRef);\n\n static ngTemplateContextGuard<TOption>(\n _dir: GogButtonToggleOptionDirective<TOption>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\n ctx: unknown,\n ): ctx is GogButtonToggleOptionContext<TOption> {\n return true;\n }\n}\n\n/**\n * A row of buttons where one — or, with `multiple`, several — can be picked.\n *\n * ```html\n * <gog-button-toggle-group [options]=\"alignments\" [(value)]=\"align\" />\n * <gog-button-toggle-group [options]=\"tools\" [multiple]=\"true\" [(value)]=\"active\" />\n * ```\n *\n * Takes the consumer's own objects through `optionLabel` / `optionValue` / `optionDisabled`\n * accessors — the same ones `gog-select` uses — rather than a fixed `{ id, label }` shape.\n *\n * **Single and multiple are different widgets to assistive tech, not a cosmetic switch.**\n * Single mode is a radio group: `role=\"radiogroup\"` / `role=\"radio\"` with `aria-checked`, and\n * the arrow keys move *and* select, because that is what a radio group does. Multiple mode is\n * a toolbar of independent toggles: `role=\"group\"` with `aria-pressed`, arrows only move and\n * Space toggles. Getting this backwards is the usual defect in this component.\n */\n@Component({\n selector: 'gog-button-toggle-group',\n imports: [IconComponent, NgTemplateOutlet],\n templateUrl: './button-toggle.component.html',\n styleUrl: './button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': 'multiple() ? \"group\" : \"radiogroup\"',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n },\n})\nexport class ButtonToggleGroupComponent<\n TOption = unknown,\n TValue = unknown,\n> implements ControlValueAccessor {\n readonly options = input<TOption[]>([]);\n readonly optionLabel = input<GogOptionAccessor<TOption, string>>('name');\n /**\n * How an option turns into the emitted value. `null` emits the **option object itself**,\n * exactly as `gog-select` does, so a consumer's DTO survives the round trip.\n */\n readonly optionValue = input<GogOptionAccessor<TOption, unknown> | null>('id');\n readonly optionDisabled = input<GogOptionAccessor<TOption, boolean>>('disabled');\n /** Optional leading icon per option. Unset means no icons anywhere in the group. */\n readonly optionIcon = input<GogOptionAccessor<TOption, GogIconName | null> | null>(null);\n\n /** Whether more than one option can be active at a time. */\n readonly multiple = input(false);\n readonly appearance = input<GogButtonToggleAppearance>('joined');\n readonly orientation = input<GogOrientation>('horizontal');\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\n readonly size = input<GogSize | undefined>(undefined);\n readonly disabled = input(false);\n readonly fullWidth = input(false);\n readonly ariaLabel = input('');\n\n /**\n * Two-way bindable selection: `[(value)]=\"signal\"`. A single value in single mode, an array\n * in `multiple` mode. Also drivable through `formControl` / `formControlName`.\n */\n readonly value = model<TValue | TValue[] | null>(null);\n\n protected readonly optionSlot = contentChild(GogButtonToggleOptionDirective);\n private readonly buttonRefs = viewChildren<ElementRef<HTMLButtonElement>>('toggleButton');\n\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly cvaDisabled = signal(false);\n private readonly globalConfig = inject(GOG_CONFIG);\n\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\n protected readonly resolvedSize = computed(() =>\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** The current selection as an array, whatever mode the group is in. */\n private readonly selectedValues = computed<unknown[]>(() => {\n const current = this.value();\n if (current === null || current === undefined) return [];\n return Array.isArray(current) ? current : [current];\n });\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-button-toggle',\n `gog-button-toggle--${this.appearance()}`,\n `gog-button-toggle--${this.orientation()}`,\n `gog-button-toggle--${this.resolvedSize()}`,\n this.fullWidth() ? 'gog-host--full-width' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n\n /**\n * A roving tabindex: the group is one tab stop and the arrows move within it. The *selected*\n * option is the one that keeps `tabindex=\"0\"` so Tab returns to where the user left off;\n * with nothing selected, the first enabled option takes it, since a group nobody can Tab\n * into is unreachable by keyboard.\n */\n protected readonly tabStopIndex = computed(() => {\n const options = this.options();\n const selected = options.findIndex(\n (option) => this.isSelected(option) && !this.isOptionDisabled(option),\n );\n if (selected !== -1) return selected;\n const firstEnabled = options.findIndex((option) => !this.isOptionDisabled(option));\n return firstEnabled === -1 ? 0 : firstEnabled;\n });\n\n private onChange: (val: TValue | TValue[] | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n // Registering through NgControl instead of NG_VALUE_ACCESSOR matches the pattern used\n // by every other form control in the library — providing NG_VALUE_ACCESSOR on the\n // component while also injecting NgControl would be a dependency cycle.\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(val: TValue | TValue[] | null): void {\n this.value.set(val ?? null);\n }\n\n registerOnChange(fn: (val: TValue | TValue[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected labelOf(option: TOption): string {\n return String(readOption(option, this.optionLabel()) ?? '');\n }\n\n protected iconOf(option: TOption): GogIconName | null {\n const accessor = this.optionIcon();\n return accessor ? (readOption(option, accessor) ?? null) : null;\n }\n\n protected valueOf(option: TOption): unknown {\n const accessor = this.optionValue();\n return accessor === null ? option : readOption(option, accessor);\n }\n\n protected isOptionDisabled(option: TOption): boolean {\n return this.isDisabled() || !!readOption(option, this.optionDisabled());\n }\n\n protected isSelected(option: TOption): boolean {\n const target = this.valueOf(option);\n return this.selectedValues().some((selected) => isSameOptionValue(selected, target));\n }\n\n protected optionContext(option: TOption): GogButtonToggleOptionContext<TOption> {\n return {\n $implicit: option,\n selected: this.isSelected(option),\n disabled: this.isOptionDisabled(option),\n label: this.labelOf(option),\n };\n }\n\n protected onOptionClick(option: TOption): void {\n if (this.isOptionDisabled(option)) return;\n this.commit(option);\n }\n\n /**\n * Arrow keys. In single mode moving also selects — that is the radio-group contract, and it\n * is why `role=\"radio\"` is only used there. In multiple mode the arrows are pure navigation\n * and Space/Enter (handled natively by the `<button>`) does the toggling.\n */\n protected onKeydown(event: KeyboardEvent): void {\n const buttons = this.buttonRefs().map((ref) => ref.nativeElement);\n const options = this.options();\n const moved = handleRovingFocusKeydown(event, buttons, {\n orientation: this.orientation(),\n isDisabled: (_button, index) => this.isOptionDisabled(options[index]),\n });\n\n if (!moved || this.multiple()) return;\n\n const focusedIndex = buttons.indexOf(document.activeElement as HTMLButtonElement);\n if (focusedIndex !== -1) {\n this.commit(options[focusedIndex]);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private commit(option: TOption): void {\n const target = this.valueOf(option) as TValue;\n\n if (!this.multiple()) {\n this.setValue(target);\n return;\n }\n\n const current = this.selectedValues();\n const next = this.isSelected(option)\n ? (current.filter((selected) => !isSameOptionValue(selected, target)) as TValue[])\n : ([...current, target] as TValue[]);\n this.setValue(next);\n }\n\n private setValue(next: TValue | TValue[]): void {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n}\n","@for (option of options(); track $index) {\n <button\n #toggleButton\n type=\"button\"\n class=\"gog-button-toggle__button\"\n [class.gog-button-toggle__button--selected]=\"isSelected(option)\"\n [attr.role]=\"multiple() ? null : 'radio'\"\n [attr.aria-checked]=\"multiple() ? null : isSelected(option)\"\n [attr.aria-pressed]=\"multiple() ? isSelected(option) : null\"\n [attr.aria-disabled]=\"isOptionDisabled(option) ? 'true' : null\"\n [disabled]=\"isOptionDisabled(option)\"\n [tabindex]=\"$index === tabStopIndex() ? 0 : -1\"\n (click)=\"onOptionClick(option)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n >\n @if (optionSlot(); as slot) {\n <ng-container\n [ngTemplateOutlet]=\"slot.templateRef\"\n [ngTemplateOutletContext]=\"optionContext(option)\"\n />\n } @else {\n @if (iconOf(option); as icon) {\n <gog-icon class=\"gog-button-toggle__icon\" [name]=\"icon\" [ariaHidden]=\"true\" />\n }\n <span class=\"gog-button-toggle__label\">{{ labelOf(option) }}</span>\n }\n </button>\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * What a `gog-tab` needs from the `gog-tabs` it sits in: which tab is currently showing.\n *\n * A token rather than injecting the component directly, purely to keep the import graph\n * acyclic — `tabs.component.ts` has to import `TabComponent` for its `contentChildren`, so the\n * tab cannot import the group back. Both sides depend on this file, which depends on neither.\n */\nexport interface GogTabsState {\n /** The active tab instance, compared by identity. `null` when the group has no tabs. */\n readonly activeTab: Signal<unknown | null>;\n}\n\nexport const GOG_TABS_STATE = new InjectionToken<GogTabsState>('GOG_TABS_STATE');\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n computed,\n contentChild,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport type { GogIconName } from '../icon/icon.component';\nimport { GOG_TABS_STATE } from './tabs-state';\n\n/**\n * Marks a tab's content as **lazy**: it is built the first time the tab is shown, and kept\n * alive afterwards.\n *\n * ```html\n * <gog-tab label=\"Отчёт\">\n * <ng-template gogTabContent><app-expensive-report /></ng-template>\n * </gog-tab>\n * ```\n *\n * Without it, content written directly inside `<gog-tab>` renders immediately and is merely\n * hidden while inactive — which is what you want for cheap content, because it preserves\n * scroll position, un-submitted input and any state the DOM is holding. Which behaviour you\n * get is decided by whether this template is present; there is no `lazy` input to keep in sync.\n */\n@Directive({ selector: '[gogTabContent]' })\nexport class GogTabContentDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * One tab inside a `<gog-tabs>`. Declares its own header text and holds its own content.\n *\n * ```html\n * <gog-tabs>\n * <gog-tab label=\"Профиль\"><app-profile /></gog-tab>\n * <gog-tab label=\"Настройки\" iconName=\"info\" [disabled]=\"!canEdit\">…</gog-tab>\n * </gog-tabs>\n * ```\n */\n@Component({\n selector: 'gog-tab',\n imports: [NgTemplateOutlet],\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'gog-tab',\n role: 'tabpanel',\n '[attr.id]': 'panelId',\n '[attr.aria-labelledby]': 'headerId',\n // `hidden` rather than removing the panel: an inactive tab that keeps its DOM keeps its\n // scroll position and half-filled inputs, which is the behaviour people expect from tabs.\n '[hidden]': '!active()',\n // Reachable by keyboard so someone tabbing out of the tablist lands in the content.\n '[attr.tabindex]': 'active() ? 0 : null',\n },\n})\nexport class TabComponent {\n private static nextUid = 0;\n private readonly uid = `gog-tab-${++TabComponent.nextUid}`;\n\n /** Header text. */\n readonly label = input('');\n /** Optional leading icon in the header. */\n readonly iconName = input<GogIconName | null>(null);\n readonly disabled = input(false);\n\n readonly panelId = `${this.uid}-panel`;\n readonly headerId = `${this.uid}-header`;\n\n private readonly tabsState = inject(GOG_TABS_STATE);\n /** Identity comparison against the group's current tab — no index bookkeeping either side. */\n readonly active = computed(() => this.tabsState.activeTab() === this);\n\n protected readonly lazySlot = contentChild(GogTabContentDirective);\n\n /**\n * Latches on first activation and never resets, so a lazy tab pays its build cost once and\n * then behaves like an eager one — revisiting it does not rebuild the subtree or lose what\n * the user typed into it.\n */\n private readonly everActivated = signal(false);\n protected readonly shouldRenderLazy = computed(() => this.active() || this.everActivated());\n\n constructor() {\n // The latch is set from an effect rather than inside the computed above, which may not\n // write signals. Timing is not a concern: on the activating pass `active()` is already\n // true, so the content renders in the same cycle and the latch only has to survive the\n // *next* deactivation.\n effect(() => {\n if (this.active()) {\n this.everActivated.set(true);\n }\n });\n }\n}\n","<!--\n Eager content is projected straight through and merely hidden while inactive (see the host\n `[hidden]` binding), which is what keeps its scroll position and unsaved input.\n\n A projected `<ng-template gogTabContent>` renders nothing here — templates never do — so the\n two paths coexist without a mode flag: whichever the consumer wrote is the one that shows.\n-->\n<ng-content></ng-content>\n\n@if (lazySlot(); as slot) {\n @if (shouldRenderLazy()) {\n <ng-container [ngTemplateOutlet]=\"slot.templateRef\" />\n }\n}\n","import { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n ElementRef,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n computed,\r\n contentChild,\r\n contentChildren,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChildren,\r\n} from '@angular/core';\r\n\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\nimport { handleRovingFocusKeydown } from '../../shared/roving-focus';\r\nimport { GogOrientation, GogSize, GogTabsAlign } from '../../shared/types';\r\nimport { GOG_TABS_STATE, type GogTabsState } from './tabs-state';\r\nimport { TabComponent } from './tab.component';\r\n\r\n/** Context handed to a `gogTabHeader` template. */\r\nexport interface GogTabHeaderContext {\r\n /** The `gog-tab` this header belongs to. */\r\n $implicit: TabComponent;\r\n active: boolean;\r\n disabled: boolean;\r\n index: number;\r\n}\r\n\r\n/**\r\n * Custom markup for a tab's header button:\r\n *\r\n * ```html\r\n * <gog-tabs>\r\n * <ng-template gogTabHeader let-tab let-active=\"active\">\r\n * {{ tab.label() }} <gog-tag *ngIf=\"active\">•</gog-tag>\r\n * </ng-template>\r\n * <gog-tab label=\"Входящие\">…</gog-tab>\r\n * </gog-tabs>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogTabHeader]' })\r\nexport class GogTabHeaderDirective {\r\n readonly templateRef = inject<TemplateRef<GogTabHeaderContext>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard(\r\n _dir: GogTabHeaderDirective,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogTabHeaderContext {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * A tablist over projected `<gog-tab>` children.\r\n *\r\n * ```html\r\n * <gog-tabs [(activeIndex)]=\"index\" align=\"start\">\r\n * <gog-tab label=\"Профиль\"><app-profile /></gog-tab>\r\n * <gog-tab label=\"Настройки\"><app-settings /></gog-tab>\r\n * </gog-tabs>\r\n * ```\r\n *\r\n * The header row is built from each tab's own `label` / `iconName` / `disabled`, so a tab is\r\n * declared in exactly one place. Overflowing headers scroll inside a `<gog-scroll>` rather than\r\n * a native `overflow-x`, per the library's styling contract — a native scrollbar is the one\r\n * piece of chrome no `--gog-*` token can reach.\r\n */\r\n@Component({\r\n selector: 'gog-tabs',\r\n imports: [IconComponent, NgTemplateOutlet, ScrollComponent],\r\n templateUrl: './tabs.component.html',\r\n styleUrl: './tabs.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n // forwardRef because the class is not yet defined when this decorator is evaluated.\r\n { provide: GOG_TABS_STATE, useExisting: forwardRef(() => TabsComponent) },\r\n ],\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class TabsComponent implements GogTabsState {\r\n readonly tabs = contentChildren(TabComponent);\r\n\r\n /** Two-way bindable index of the visible tab: `[(activeIndex)]=\"signal\"`. */\r\n readonly activeIndex = model(0);\r\n readonly align = input<GogTabsAlign>('start');\r\n readonly orientation = input<GogOrientation>('horizontal');\r\n readonly size = input<GogSize>('md');\r\n readonly fullWidth = input(false);\r\n readonly ariaLabel = input('');\r\n /**\r\n * Whether selecting a tab scrolls the (possibly overflowing) header row so the active tab\r\n * stays in view — centered where there's room, so its neighbours on both sides stay visible\r\n * too, the same \"always show what's around the current position\" idea `gog-paginator` uses\r\n * for pages. Reacts to `activeIndex` however it changes: a click, the arrow keys, or a\r\n * consumer setting it directly. On by default; turn it off for a header that never actually\r\n * overflows, or to own the scroll position yourself.\r\n */\r\n readonly scrollActiveIntoView = input(true);\r\n /**\r\n * Whether the header row shows its own draggable scroll thumb/track. Native scrolling\r\n * (wheel, touch, keyboard) works the same regardless; this is purely the visual affordance.\r\n *\r\n * Unset, it follows `scrollActiveIntoView`: hidden while that's on, since a second scroll\r\n * indicator sitting right next to the active-tab underline reads as two conflicting signals\r\n * for the same thing once selecting a tab already moves the row on its own; shown while it's\r\n * off, since the track is then the only way to reach an off-screen tab without a keyboard.\r\n * Set explicitly to pin it either way regardless of `scrollActiveIntoView`.\r\n */\r\n readonly showScrollTrack = input<boolean | undefined>(undefined);\r\n\r\n /** Emits the newly active index whenever it changes, including via keyboard. */\r\n readonly gogTabChange = output<number>();\r\n\r\n protected readonly headerSlot = contentChild(GogTabHeaderDirective);\r\n private readonly headerRefs = viewChildren<ElementRef<HTMLButtonElement>>('tabHeader');\r\n\r\n /**\r\n * The index actually shown. Clamped, and never a disabled tab: `activeIndex` is a plain\r\n * number a consumer can set to anything, and silently showing nothing would be worse than\r\n * falling back to the nearest usable tab.\r\n */\r\n protected readonly resolvedIndex = computed(() => {\r\n const tabs = this.tabs();\r\n if (tabs.length === 0) return -1;\r\n\r\n const requested = this.activeIndex();\r\n if (requested >= 0 && requested < tabs.length && !tabs[requested].disabled()) {\r\n return requested;\r\n }\r\n\r\n const firstEnabled = tabs.findIndex((tab) => !tab.disabled());\r\n return firstEnabled;\r\n });\r\n\r\n /** Read by each `gog-tab` through `GOG_TABS_STATE`; see `tabs-state.ts`. */\r\n readonly activeTab = computed<TabComponent | null>(() => {\r\n const index = this.resolvedIndex();\r\n return index === -1 ? null : (this.tabs()[index] ?? null);\r\n });\r\n\r\n /** See `showScrollTrack`'s doc for why this defaults off precisely when the other is on. */\r\n protected readonly resolvedShowScrollTrack = computed(\r\n () => this.showScrollTrack() ?? !this.scrollActiveIntoView(),\r\n );\r\n\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n /** Instant for the first scroll (page load shouldn't animate into place), smooth after. */\r\n private hasScrolledOnce = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const index = this.resolvedIndex();\r\n const header = this.headerRefs()[index]?.nativeElement;\r\n if (!this.isBrowser || !this.scrollActiveIntoView() || !header) return;\r\n\r\n // Feature-detected: absent in jsdom (so: in unit tests) and in very old browsers, which\r\n // then simply keep whatever scroll position they already had.\r\n if (typeof header.scrollIntoView !== 'function') return;\r\n\r\n header.scrollIntoView({\r\n inline: 'center',\r\n block: 'nearest',\r\n behavior: this.hasScrolledOnce && !this.prefersReducedMotion() ? 'smooth' : 'auto',\r\n });\r\n this.hasScrolledOnce = true;\r\n });\r\n }\r\n\r\n private prefersReducedMotion(): boolean {\r\n return (\r\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n );\r\n }\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-tabs',\r\n `gog-tabs--${this.orientation()}`,\r\n `gog-tabs--align-${this.align()}`,\r\n `gog-tabs--${this.size()}`,\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 protected selectIndex(index: number): void {\r\n const tab = this.tabs()[index];\r\n if (!tab || tab.disabled() || index === this.resolvedIndex()) return;\r\n\r\n this.activeIndex.set(index);\r\n this.gogTabChange.emit(index);\r\n }\r\n\r\n protected headerContext(tab: TabComponent, index: number): GogTabHeaderContext {\r\n return {\r\n $implicit: tab,\r\n active: index === this.resolvedIndex(),\r\n disabled: tab.disabled(),\r\n index,\r\n };\r\n }\r\n\r\n /**\r\n * Arrows move focus and activate in one step — the \"automatic activation\" variant of the\r\n * ARIA tabs pattern, which suits panels that are already in the DOM. Home/End jump to the\r\n * first/last enabled tab.\r\n */\r\n protected onHeaderKeydown(event: KeyboardEvent): void {\r\n const headers = this.headerRefs().map((ref) => ref.nativeElement);\r\n const tabs = this.tabs();\r\n const moved = handleRovingFocusKeydown(event, headers, {\r\n orientation: this.orientation(),\r\n isDisabled: (_header, index) => tabs[index]?.disabled() ?? true,\r\n });\r\n if (!moved) return;\r\n\r\n const focused = headers.indexOf(document.activeElement as HTMLButtonElement);\r\n if (focused !== -1) {\r\n this.selectIndex(focused);\r\n }\r\n }\r\n}\r\n","<div class=\"gog-tabs__header\">\r\n <!--\r\n gog-scroll rather than a raw overflow-x: a native scrollbar carries no --gog-* tokens and\r\n would be the one un-themeable strip inside an otherwise fully themeable component.\r\n focusable=false because the tablist already owns the keyboard here.\r\n -->\r\n <gog-scroll\r\n class=\"gog-tabs__scroll\"\r\n axis=\"horizontal\"\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n [showTrack]=\"resolvedShowScrollTrack()\"\r\n overscrollBehavior=\"contain\"\r\n >\r\n <div\r\n class=\"gog-tabs__list\"\r\n role=\"tablist\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-orientation]=\"orientation()\"\r\n >\r\n @for (tab of tabs(); track tab; let i = $index) {\r\n <button\r\n #tabHeader\r\n type=\"button\"\r\n role=\"tab\"\r\n class=\"gog-tabs__tab\"\r\n [class.gog-tabs__tab--active]=\"i === resolvedIndex()\"\r\n [id]=\"tab.headerId\"\r\n [attr.aria-selected]=\"i === resolvedIndex()\"\r\n [attr.aria-controls]=\"tab.panelId\"\r\n [attr.aria-disabled]=\"tab.disabled() ? 'true' : null\"\r\n [disabled]=\"tab.disabled()\"\r\n [tabindex]=\"i === resolvedIndex() ? 0 : -1\"\r\n (click)=\"selectIndex(i)\"\r\n (keydown)=\"onHeaderKeydown($event)\"\r\n >\r\n @if (headerSlot(); as slot) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"slot.templateRef\"\r\n [ngTemplateOutletContext]=\"headerContext(tab, i)\"\r\n />\r\n } @else {\r\n @if (tab.iconName(); as icon) {\r\n <gog-icon class=\"gog-tabs__icon\" [name]=\"icon\" [ariaHidden]=\"true\" />\r\n }\r\n <span class=\"gog-tabs__label\">{{ tab.label() }}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </gog-scroll>\r\n</div>\r\n\r\n<div class=\"gog-tabs__panels\">\r\n <ng-content></ng-content>\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 Directive,\r\n TemplateRef,\r\n computed,\r\n contentChild,\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\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GogSize } from '../../shared/types';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\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/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\n\r\n/**\r\n * Custom markup for the checkbox's tick:\r\n *\r\n * ```html\r\n * <ng-template gogCheckboxIcon><my-icon /></ng-template>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogCheckboxIcon]' })\r\nexport class GogCheckboxIconDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\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 /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n readonly indeterminate = input(false);\r\n readonly disabled = input(false);\r\n readonly fullWidth = input(false);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogCheckboxIcon>` into the component instead. Removed in 21.5.0.\r\n */\r\n readonly checkIconTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogCheckboxIcon` template; wins over the deprecated `checkIconTemplate` input. */\r\n protected readonly checkIconSlot = contentChild(GogCheckboxIconDirective);\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 private readonly globalConfig = inject(GOG_CONFIG);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly controlSize = computed(\r\n () => GOG_CHECKABLE_CONTROL_SIZE_MAP[this.resolvedSize()],\r\n );\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\">\r\n <input\r\n (blur)=\"onBlur()\"\r\n (change)=\"onInputChange($event)\"\r\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : null\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"isDisabled()\"\r\n [indeterminate]=\"indeterminate()\"\r\n class=\"gog-checkbox__input\"\r\n type=\"checkbox\"\r\n />\r\n\r\n <span\r\n [class.gog-checkbox__box--checked]=\"checked()\"\r\n [class.gog-checkbox__box--indeterminate]=\"indeterminate()\"\r\n class=\"gog-checkbox__box\"\r\n >\r\n @if (indeterminate()) {\r\n <span class=\"gog-checkbox__dash\" aria-hidden=\"true\"></span>\r\n } @else if (checked()) {\r\n <gog-icon [template]=\"checkIconSlot()?.templateRef ?? checkIconTemplate()\" name=\"check\" />\r\n }\r\n </span>\r\n\r\n @if (label()) {\r\n <span class=\"gog-checkbox__label\">{{ label() }}</span>\r\n }\r\n</label>\r\n","/**\n * Every date calculation `gog-datepicker` and `gog-calendar` do, as pure functions.\n *\n * Kept out of the components so the arithmetic is testable without a fixture, and so a range\n * calculation is written once rather than once per selection mode.\n *\n * **Everything here works in local time.** Nothing round-trips through `toISOString()` or\n * compares `Date` objects directly: an ISO round trip converts to UTC, which moves the date\n * across midnight for anyone east or west of Greenwich, and two `Date`s for \"the same day\"\n * are almost never equal because they carry different times. Comparisons go through\n * `startOfDay` and `isSameDay` instead. This is the single most common defect in a datepicker.\n */\n\n/** A start/end pair. `end` is null while a range is half-picked. */\nexport interface GogDateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/** Midnight local time on the same calendar day. */\nexport function startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/** Whether two dates fall on the same calendar day, ignoring the time of day. */\nexport function isSameDay(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** Whether two dates fall in the same calendar month. */\nexport function isSameMonth(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nexport function addDays(date: Date, days: number): Date {\n const next = new Date(date.getTime());\n next.setDate(next.getDate() + days);\n return next;\n}\n\n/** Days in a given month. `month` is 0-based, as `Date` uses it. */\nexport function daysInMonth(year: number, month: number): number {\n // Day 0 of the next month is the last day of this one.\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Adds whole months, **clamping the day** to the target month's length: 31 January plus one\n * month is 28 February, not 3 March. `Date.setMonth` does the latter, which is why this is\n * not a one-liner.\n */\nexport function addMonths(date: Date, months: number): Date {\n const year = date.getFullYear();\n const month = date.getMonth() + months;\n const targetYear = year + Math.floor(month / 12);\n const targetMonth = ((month % 12) + 12) % 12;\n const day = Math.min(date.getDate(), daysInMonth(targetYear, targetMonth));\n\n return new Date(\n targetYear,\n targetMonth,\n day,\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n );\n}\n\nexport function addYears(date: Date, years: number): Date {\n return addMonths(date, years * 12);\n}\n\n/** Day-granularity comparison: `a` is strictly before `b`'s day. */\nexport function isBeforeDay(a: Date, b: Date): boolean {\n return startOfDay(a).getTime() < startOfDay(b).getTime();\n}\n\n/** Day-granularity comparison: `a` is strictly after `b`'s day. */\nexport function isAfterDay(a: Date, b: Date): boolean {\n return startOfDay(a).getTime() > startOfDay(b).getTime();\n}\n\n/** Whether `date`'s day falls within `[min, max]`, either bound optional. */\nexport function isWithinBounds(date: Date, min: Date | null, max: Date | null): boolean {\n if (min && isBeforeDay(date, min)) return false;\n if (max && isAfterDay(date, max)) return false;\n return true;\n}\n\n/** Whether `date`'s day falls inside a range, inclusive of both ends. */\nexport function isInRange(date: Date, start: Date | null, end: Date | null): boolean {\n if (!start || !end) return false;\n const [from, to] = isAfterDay(start, end) ? [end, start] : [start, end];\n return !isBeforeDay(date, from) && !isAfterDay(date, to);\n}\n\n/** Pulls `date` inside `[min, max]`, keeping its time of day. */\nexport function clampDate(date: Date, min: Date | null, max: Date | null): Date {\n if (min && isBeforeDay(date, min)) return copyTimeOnto(min, date);\n if (max && isAfterDay(date, max)) return copyTimeOnto(max, date);\n return date;\n}\n\n/** A new date on `day`'s calendar day carrying `time`'s clock. */\nexport function copyTimeOnto(day: Date, time: Date): Date {\n return new Date(\n day.getFullYear(),\n day.getMonth(),\n day.getDate(),\n time.getHours(),\n time.getMinutes(),\n time.getSeconds(),\n );\n}\n\n/** A new date on the same day with the clock replaced. */\nexport function withTime(date: Date, hours: number, minutes: number, seconds = 0): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, seconds);\n}\n\n/**\n * The six-week grid a month is drawn on, always 6×7 so the calendar's height never changes as\n * you page through months — a grid that grows and shrinks pushes the rest of the page around\n * and moves the button you were about to click.\n *\n * `firstDayOfWeek` is 0 (Sunday) to 6 (Saturday). Leading and trailing cells come from the\n * neighbouring months, as every calendar does.\n */\nexport function buildMonthGrid(year: number, month: number, firstDayOfWeek: number): Date[][] {\n const first = new Date(year, month, 1);\n const shift = (first.getDay() - firstDayOfWeek + 7) % 7;\n const gridStart = addDays(first, -shift);\n\n const weeks: Date[][] = [];\n for (let week = 0; week < 6; week++) {\n const days: Date[] = [];\n for (let day = 0; day < 7; day++) {\n days.push(addDays(gridStart, week * 7 + day));\n }\n weeks.push(days);\n }\n return weeks;\n}\n\n/** Weekday names in `locale`, rotated so `firstDayOfWeek` comes first. */\nexport function weekdayNames(\n locale: string,\n firstDayOfWeek: number,\n style: 'short' | 'narrow' | 'long' = 'short',\n): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: style });\n // 2024-01-07 was a Sunday, so index 0 lines up with `Date.getDay()` 0.\n const sunday = new Date(2024, 0, 7);\n return Array.from({ length: 7 }, (_, i) =>\n formatter.format(addDays(sunday, (i + firstDayOfWeek) % 7)),\n );\n}\n\n/** Month names in `locale`. */\nexport function monthNames(locale: string, style: 'long' | 'short' = 'long'): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { month: style });\n return Array.from({ length: 12 }, (_, month) => formatter.format(new Date(2024, month, 1)));\n}\n\n/**\n * The first day of the week for a locale, from `Intl.Locale.prototype.getWeekInfo` where the\n * engine has it, falling back to Monday.\n *\n * `getWeekInfo` reports 1–7 with 1 = Monday and 7 = Sunday; `Date.getDay()` uses 0 = Sunday.\n * Converting between the two is exactly the kind of off-by-one that silently shifts a whole\n * calendar by a day, which is why it happens here once.\n */\nexport function localeFirstDayOfWeek(locale: string): number {\n interface WeekInfo {\n firstDay: number;\n }\n type LocaleWithWeekInfo = Intl.Locale & {\n getWeekInfo?: () => WeekInfo;\n weekInfo?: WeekInfo;\n };\n\n try {\n const resolved = new Intl.Locale(locale) as LocaleWithWeekInfo;\n const info = resolved.getWeekInfo?.() ?? resolved.weekInfo;\n if (info && typeof info.firstDay === 'number') {\n return info.firstDay % 7;\n }\n } catch {\n // An invalid locale tag shouldn't take the calendar down with it.\n }\n return 1;\n}\n\nconst PAD2 = (value: number): string => String(value).padStart(2, '0');\n\n/**\n * Formats a date against a token pattern.\n *\n * Supported tokens: `yyyy`, `MM`, `dd`, `HH` (24h), `hh` (12h), `mm`, `ss`, `a` (AM/PM).\n * Anything else is copied through literally.\n *\n * Deliberately **not** `Intl.DateTimeFormat`: this pattern is also what `parseDate` reads, and\n * a formatter whose output cannot be parsed back is how a typed date silently becomes a\n * different one. `Intl` is still used for month and weekday *names*, which are never parsed.\n */\nexport function formatDate(date: Date, pattern: string): string {\n const hours24 = date.getHours();\n const hours12 = hours24 % 12 === 0 ? 12 : hours24 % 12;\n\n const replacements: Record<string, string> = {\n yyyy: String(date.getFullYear()).padStart(4, '0'),\n MM: PAD2(date.getMonth() + 1),\n dd: PAD2(date.getDate()),\n HH: PAD2(hours24),\n hh: PAD2(hours12),\n mm: PAD2(date.getMinutes()),\n ss: PAD2(date.getSeconds()),\n a: hours24 < 12 ? 'AM' : 'PM',\n };\n\n return pattern.replace(/yyyy|MM|dd|HH|hh|mm|ss|a/g, (token) => replacements[token]);\n}\n\n/**\n * Reads a date back out of text written in `pattern`. Returns `null` when the text doesn't\n * match, or matches but isn't a real date (`31.02.2026`).\n *\n * The out-of-range check matters: `new Date(2026, 1, 31)` happily rolls over to 3 March, so a\n * typo would be accepted as a different date rather than rejected.\n */\nexport function parseDate(text: string, pattern: string): Date | null {\n const trimmed = text.trim();\n if (trimmed === '') return null;\n\n const order: string[] = [];\n const source = pattern.replace(/yyyy|MM|dd|HH|hh|mm|ss|a|./g, (token) => {\n switch (token) {\n case 'yyyy':\n order.push(token);\n return '(\\\\d{4})';\n case 'MM':\n case 'dd':\n case 'HH':\n case 'hh':\n case 'mm':\n case 'ss':\n order.push(token);\n return '(\\\\d{1,2})';\n case 'a':\n order.push(token);\n return '([AaPp][Mm])';\n default:\n return token.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n });\n\n const match = new RegExp(`^${source}$`).exec(trimmed);\n if (!match) return null;\n\n const parts: Record<string, number> = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0 };\n let meridiem: 'am' | 'pm' | null = null;\n\n order.forEach((token, index) => {\n const raw = match[index + 1];\n if (token === 'a') {\n meridiem = raw.toLowerCase() as 'am' | 'pm';\n } else {\n parts[token] = Number(raw);\n }\n });\n\n if (order.includes('hh') && meridiem) {\n const base = parts['hh'] % 12;\n parts['HH'] = meridiem === 'pm' ? base + 12 : base;\n } else if (order.includes('hh')) {\n parts['HH'] = parts['hh'];\n }\n\n const year = parts['yyyy'];\n const month = parts['MM'] - 1;\n const day = parts['dd'];\n\n if (month < 0 || month > 11) return null;\n if (day < 1 || day > daysInMonth(year, month)) return null;\n if (parts['HH'] > 23 || parts['mm'] > 59 || parts['ss'] > 59) return null;\n\n return new Date(year, month, day, parts['HH'], parts['mm'], parts['ss']);\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\n\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../../shared/config';\r\nimport { GogDateSelectionMode, GogHourFormat, GogSize } from '../../../shared/types';\r\nimport {\r\n type GogDateRange,\r\n addDays,\r\n addMonths,\r\n addYears,\r\n buildMonthGrid,\r\n clampDate,\r\n copyTimeOnto,\r\n isAfterDay,\r\n isBeforeDay,\r\n isInRange,\r\n isSameDay,\r\n isSameMonth,\r\n isWithinBounds,\r\n localeFirstDayOfWeek,\r\n monthNames,\r\n startOfDay,\r\n weekdayNames,\r\n withTime,\r\n} from '../date-utils';\r\n\r\n/** What `gog-calendar` and `gog-datepicker` carry, depending on `selectionMode`. */\r\nexport type GogDatepickerValue = Date | GogDateRange | null;\r\n\r\n/** One rendered day cell. Precomputed so the template stays free of logic. */\r\nexport interface GogCalendarDay {\r\n date: Date;\r\n label: string;\r\n outside: boolean;\r\n today: boolean;\r\n disabled: boolean;\r\n selected: boolean;\r\n rangeStart: boolean;\r\n rangeEnd: boolean;\r\n inRange: boolean;\r\n}\r\n\r\nconst DEFAULT_LOCALE = 'en-US';\r\n\r\n/**\r\n * Built-in defaults for every fixed string the grid renders, used when neither the matching\r\n * input nor `GOG_CONFIG.labels` supplies one. Kept as one object so `resolvedLabels` stays a\r\n * single `computed` instead of nine, and so the set is obvious at a glance.\r\n */\r\nconst DEFAULT_LABELS = {\r\n today: 'Today',\r\n thisMonth: 'This month',\r\n previousMonth: 'Previous month',\r\n nextMonth: 'Next month',\r\n previousYear: 'Previous year',\r\n nextYear: 'Next year',\r\n hours: 'Hours',\r\n minutes: 'Minutes',\r\n seconds: 'Seconds',\r\n} as const;\r\n\r\n/**\r\n * The month grid behind `gog-datepicker`, usable on its own for an always-visible calendar.\r\n *\r\n * ```html\r\n * <gog-calendar [(value)]=\"date\" [min]=\"today\" />\r\n * <gog-calendar selectionMode=\"range\" [(value)]=\"range\" [numberOfMonths]=\"2\" />\r\n * ```\r\n *\r\n * Split out from the field deliberately: `gog-datepicker` is three widgets (a date, a range\r\n * and a time) behind one selector, and keeping the grid separate is what stops either half\r\n * from becoming unreadable. It is also exactly what `inline` mode renders.\r\n */\r\n@Component({\r\n selector: 'gog-calendar',\r\n imports: [IconComponent],\r\n templateUrl: './calendar.component.html',\r\n styleUrl: './calendar.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n },\r\n})\r\nexport class CalendarComponent {\r\n /** Two-way bindable selection: a `Date` in `'single'` mode, a `GogDateRange` in `'range'`. */\r\n readonly value = model<GogDatepickerValue>(null);\r\n readonly selectionMode = input<GogDateSelectionMode>('single');\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n /**\r\n * Extra exclusions, as a predicate rather than a list: an array cannot express \"weekends\"\r\n * or \"public holidays\" without the consumer materialising every date in range first.\r\n */\r\n readonly disabledDates = input<((date: Date) => boolean) | null>(null);\r\n /**\r\n * BCP-47 tag driving the month and weekday names. Unset, falls back to\r\n * `GOG_CONFIG.datepicker.locale`, then to `'en-US'`.\r\n */\r\n readonly locale = input<string | undefined>(undefined);\r\n /**\r\n * 0 = Sunday … 6 = Saturday. Unset, falls back to `GOG_CONFIG.datepicker.firstDayOfWeek`,\r\n * then to the locale's own first day.\r\n */\r\n readonly firstDayOfWeek = input<number | null | undefined>(undefined);\r\n /** Which month to open on when there is no selection yet. */\r\n readonly defaultMonth = input<Date | null>(null);\r\n /** How many months to show side by side. Two is what makes a range picker usable. */\r\n readonly numberOfMonths = input(1);\r\n readonly showTime = input(false);\r\n readonly hourFormat = input<GogHourFormat>('24');\r\n readonly minuteStep = input(1);\r\n readonly showSeconds = input(false);\r\n /**\r\n * The \"Today\" button, which **selects** today's date — the view follows, because the\r\n * selection is what the calendar opens on.\r\n *\r\n * Kept separate from `showThisMonthButton` on purpose: one button that both selected and\r\n * navigated read as \"jump to today\" to anyone who pressed it after paging away, and there is\r\n * no wording that makes a single control unambiguous about which of the two it does.\r\n */\r\n readonly showTodayButton = input(true);\r\n /**\r\n * The \"This month\" button, which only moves the *view* back to the current month and leaves\r\n * the selection alone. Off by default — it is for browsing far from today without committing\r\n * to anything, which is the rarer of the two needs.\r\n */\r\n readonly showThisMonthButton = input(false);\r\n readonly size = input<GogSize>('md');\r\n /**\r\n * Navigation, shortcut and time-section labels. Each falls back to the matching\r\n * `GOG_CONFIG.labels` field when unset, then to the built-in English default — an app\r\n * translating the calendar sets them once rather than on every field.\r\n */\r\n readonly todayLabel = input<string | undefined>(undefined);\r\n readonly thisMonthLabel = input<string | undefined>(undefined);\r\n readonly previousMonthLabel = input<string | undefined>(undefined);\r\n readonly nextMonthLabel = input<string | undefined>(undefined);\r\n readonly previousYearLabel = input<string | undefined>(undefined);\r\n readonly nextYearLabel = input<string | undefined>(undefined);\r\n readonly hoursLabel = input<string | undefined>(undefined);\r\n readonly minutesLabel = input<string | undefined>(undefined);\r\n readonly secondsLabel = input<string | undefined>(undefined);\r\n\r\n /** Emitted when a selection is *complete* — a day in single mode, both ends of a range. */\r\n readonly gogDateSelect = output<GogDatepickerValue>();\r\n\r\n private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n /**\r\n * Every rendered string, resolved instance input → `GOG_CONFIG.labels` → built-in default.\r\n * `gog-datepicker` forwards its own `todayLabel`/`thisMonthLabel` as `undefined` when unset\r\n * precisely so this resolution happens here, once, rather than being pre-empted upstream.\r\n */\r\n protected readonly resolvedLabels = computed(() => {\r\n const configured = this.globalConfig.labels ?? {};\r\n return {\r\n today: resolveConfigured(this.todayLabel(), configured.today, DEFAULT_LABELS.today),\r\n thisMonth: resolveConfigured(\r\n this.thisMonthLabel(),\r\n configured.thisMonth,\r\n DEFAULT_LABELS.thisMonth,\r\n ),\r\n previousMonth: resolveConfigured(\r\n this.previousMonthLabel(),\r\n configured.previousMonth,\r\n DEFAULT_LABELS.previousMonth,\r\n ),\r\n nextMonth: resolveConfigured(\r\n this.nextMonthLabel(),\r\n configured.nextMonth,\r\n DEFAULT_LABELS.nextMonth,\r\n ),\r\n previousYear: resolveConfigured(\r\n this.previousYearLabel(),\r\n configured.previousYear,\r\n DEFAULT_LABELS.previousYear,\r\n ),\r\n nextYear: resolveConfigured(\r\n this.nextYearLabel(),\r\n configured.nextYear,\r\n DEFAULT_LABELS.nextYear,\r\n ),\r\n hours: resolveConfigured(this.hoursLabel(), configured.hours, DEFAULT_LABELS.hours),\r\n minutes: resolveConfigured(this.minutesLabel(), configured.minutes, DEFAULT_LABELS.minutes),\r\n seconds: resolveConfigured(this.secondsLabel(), configured.seconds, DEFAULT_LABELS.seconds),\r\n };\r\n });\r\n\r\n /** First of the leftmost visible month. */\r\n private readonly viewMonth = signal<Date>(startOfDay(new Date()));\r\n /** The cell the keyboard is on, and the only one carrying `tabindex=\"0\"`. */\r\n protected readonly focusedDate = signal<Date>(startOfDay(new Date()));\r\n /** Drives the range preview while the second end is still being chosen. */\r\n protected readonly hoverDate = signal<Date | null>(null);\r\n /** Whether a focus move should also pull the DOM focus over — only after a keypress. */\r\n private pendingFocus = false;\r\n\r\n /**\r\n * Instance input → `GOG_CONFIG.datepicker` → the built-in default.\r\n *\r\n * `gog-calendar` resolves these itself rather than relying on `gog-datepicker` to pass them\r\n * down: it is exported and usable standalone, and `GOG_CONFIG.datepicker` has always been\r\n * documented as applying to both. When it *is* rendered by `gog-datepicker`, that component\r\n * passes its own already-resolved values, which win here — and resolve to the same thing,\r\n * since both read the same config.\r\n */\r\n protected readonly resolvedLocale = computed(() =>\r\n resolveConfigured(this.locale(), this.globalConfig.datepicker?.locale, DEFAULT_LOCALE),\r\n );\r\n protected readonly resolvedFirstDayOfWeek = computed(\r\n () =>\r\n this.firstDayOfWeek() ??\r\n this.globalConfig.datepicker?.firstDayOfWeek ??\r\n localeFirstDayOfWeek(this.resolvedLocale()),\r\n );\r\n protected readonly weekdays = computed(() =>\r\n weekdayNames(this.resolvedLocale(), this.resolvedFirstDayOfWeek()),\r\n );\r\n private readonly months = computed(() => monthNames(this.resolvedLocale()));\r\n\r\n private readonly range = computed<GogDateRange>(() => {\r\n const current = this.value();\r\n if (this.selectionMode() !== 'range' || current === null || current instanceof Date) {\r\n return { start: null, end: null };\r\n }\r\n return current;\r\n });\r\n private readonly singleDate = computed<Date | null>(() => {\r\n const current = this.value();\r\n return current instanceof Date ? current : null;\r\n });\r\n\r\n /** Start/end as currently *displayed*, including the end the pointer is hovering over. */\r\n private readonly previewRange = computed<GogDateRange>(() => {\r\n const { start, end } = this.range();\r\n if (start && !end && this.hoverDate()) {\r\n return { start, end: this.hoverDate() };\r\n }\r\n return { start, end };\r\n });\r\n\r\n /** One entry per visible month; each is a 6×7 grid. */\r\n protected readonly monthViews = computed(() => {\r\n const count = Math.max(1, this.numberOfMonths());\r\n return Array.from({ length: count }, (_, offset) => {\r\n const month = addMonths(this.viewMonth(), offset);\r\n return {\r\n label: `${this.months()[month.getMonth()]} ${month.getFullYear()}`,\r\n weeks: this.buildWeeks(month),\r\n };\r\n });\r\n });\r\n\r\n protected readonly hostClasses = computed(() =>\r\n [\r\n 'gog-calendar',\r\n `gog-calendar--${this.size()}`,\r\n this.selectionMode() === 'range' ? 'gog-calendar--range' : null,\r\n this.numberOfMonths() > 1 ? 'gog-calendar--multi' : null,\r\n ]\r\n .filter((className): className is string => className !== null)\r\n .join(' '),\r\n );\r\n\r\n /**\r\n * Whether today can actually be picked — `min`, `max` or `disabledDates` may rule it out, and\r\n * a \"Today\" button that silently does nothing is worse than one that is visibly unavailable.\r\n * The signal reads inside `isDayDisabled` are what make this follow those inputs.\r\n */\r\n protected readonly isTodaySelectable = computed(\r\n () => !this.isDayDisabled(startOfDay(new Date())),\r\n );\r\n\r\n // ── Time section ──────────────────────────────────────────────────────────────\r\n protected readonly timeSource = computed<Date | null>(() =>\r\n this.selectionMode() === 'range' ? this.range().start : this.singleDate(),\r\n );\r\n protected readonly hours = computed(() => {\r\n const date = this.timeSource();\r\n const raw = date ? date.getHours() : 0;\r\n if (this.hourFormat() === '24') return raw;\r\n return raw % 12 === 0 ? 12 : raw % 12;\r\n });\r\n protected readonly minutes = computed(() => this.timeSource()?.getMinutes() ?? 0);\r\n protected readonly seconds = computed(() => this.timeSource()?.getSeconds() ?? 0);\r\n protected readonly isPm = computed(() => (this.timeSource()?.getHours() ?? 0) >= 12);\r\n protected readonly maxHour = computed(() => (this.hourFormat() === '24' ? 23 : 12));\r\n protected readonly minHour = computed(() => (this.hourFormat() === '24' ? 0 : 1));\r\n\r\n constructor() {\r\n // Open on the selection when there is one, otherwise on `defaultMonth`.\r\n //\r\n // `viewMonth` is read **untracked**, and that is the whole point: tracking it would make\r\n // this effect re-run on every page, see that the month no longer matches the anchor, and\r\n // snap straight back — the next/previous buttons and PageUp/PageDown would all appear to\r\n // do nothing. It must react to the anchor changing, never to the view changing.\r\n effect(() => {\r\n const anchor = this.selectionAnchor() ?? this.defaultMonth();\r\n if (!anchor) return;\r\n\r\n untracked(() => {\r\n const day = startOfDay(anchor);\r\n this.focusedDate.set(day);\r\n if (!isSameMonth(day, this.viewMonth())) {\r\n this.viewMonth.set(day);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /** Steps the view by whole months or years. */\r\n protected shiftView(months: number): void {\r\n this.viewMonth.set(addMonths(this.viewMonth(), months));\r\n }\r\n\r\n protected shiftViewYears(years: number): void {\r\n this.viewMonth.set(addYears(this.viewMonth(), years));\r\n }\r\n\r\n protected onDayClick(day: GogCalendarDay): void {\r\n if (day.disabled) return;\r\n this.select(day.date);\r\n }\r\n\r\n protected onDayHover(day: GogCalendarDay): void {\r\n if (this.selectionMode() !== 'range') return;\r\n this.hoverDate.set(day.disabled ? null : day.date);\r\n }\r\n\r\n protected onGridLeave(): void {\r\n this.hoverDate.set(null);\r\n }\r\n\r\n /**\r\n * Selects today. The view needs no separate nudge: the selection is the anchor the calendar\r\n * opens on, so moving it there moves the month too.\r\n */\r\n protected selectToday(): void {\r\n const today = startOfDay(new Date());\r\n if (this.isDayDisabled(today)) return;\r\n\r\n this.select(today);\r\n this.focusedDate.set(today);\r\n }\r\n\r\n /** Moves the view back to the current month, leaving the selection untouched. */\r\n protected goToThisMonth(): void {\r\n const today = startOfDay(new Date());\r\n this.viewMonth.set(today);\r\n this.focusedDate.set(today);\r\n this.pendingFocus = true;\r\n this.applyPendingFocus();\r\n }\r\n\r\n /**\r\n * The ARIA grid pattern's keyboard contract: arrows by day, PageUp/PageDown by month,\r\n * Shift + those by year, Home/End to the ends of the week. Movement is clamped into\r\n * `[min, max]` so the caret cannot wander into a region nothing can be picked from.\r\n */\r\n protected onGridKeydown(event: KeyboardEvent): void {\r\n const current = this.focusedDate();\r\n // Assigned by every branch that does not return, so no initializer is needed.\r\n let next: Date;\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n next = addDays(current, -1);\r\n break;\r\n case 'ArrowRight':\r\n next = addDays(current, 1);\r\n break;\r\n case 'ArrowUp':\r\n next = addDays(current, -7);\r\n break;\r\n case 'ArrowDown':\r\n next = addDays(current, 7);\r\n break;\r\n case 'Home':\r\n next = addDays(current, -weekdayOffset(current, this.resolvedFirstDayOfWeek()));\r\n break;\r\n case 'End':\r\n next = addDays(current, 6 - weekdayOffset(current, this.resolvedFirstDayOfWeek()));\r\n break;\r\n case 'PageUp':\r\n next = event.shiftKey ? addYears(current, -1) : addMonths(current, -1);\r\n break;\r\n case 'PageDown':\r\n next = event.shiftKey ? addYears(current, 1) : addMonths(current, 1);\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (!this.isDayDisabled(current)) this.select(current);\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const clamped = clampDate(next, this.min(), this.max());\r\n this.focusedDate.set(clamped);\r\n if (!isSameMonth(clamped, this.viewMonth())) {\r\n this.viewMonth.set(startOfDay(clamped));\r\n }\r\n this.pendingFocus = true;\r\n this.applyPendingFocus();\r\n }\r\n\r\n // ── Time controls ─────────────────────────────────────────────────────────────\r\n\r\n protected onHourInput(event: Event): void {\r\n const raw = Number((event.target as HTMLInputElement).value);\r\n if (!Number.isFinite(raw)) return;\r\n\r\n const hours24 =\r\n this.hourFormat() === '24' ? raw : ((raw % 12) + (this.isPm() ? 12 : 0) + 24) % 24;\r\n this.applyTime(hours24, this.minutes(), this.seconds());\r\n }\r\n\r\n protected onMinuteInput(event: Event): void {\r\n const raw = Number((event.target as HTMLInputElement).value);\r\n if (!Number.isFinite(raw)) return;\r\n this.applyTime(this.timeSource()?.getHours() ?? 0, raw, this.seconds());\r\n }\r\n\r\n protected onSecondInput(event: Event): void {\r\n const raw = Number((event.target as HTMLInputElement).value);\r\n if (!Number.isFinite(raw)) return;\r\n this.applyTime(this.timeSource()?.getHours() ?? 0, this.minutes(), raw);\r\n }\r\n\r\n protected toggleMeridiem(): void {\r\n const hours = this.timeSource()?.getHours() ?? 0;\r\n this.applyTime((hours + 12) % 24, this.minutes(), this.seconds());\r\n }\r\n\r\n // ── Internals ─────────────────────────────────────────────────────────────────\r\n\r\n private selectionAnchor(): Date | null {\r\n return this.selectionMode() === 'range' ? this.range().start : this.singleDate();\r\n }\r\n\r\n private isDayDisabled(date: Date): boolean {\r\n if (!isWithinBounds(date, this.min(), this.max())) return true;\r\n return this.disabledDates()?.(date) ?? false;\r\n }\r\n\r\n private buildWeeks(month: Date): GogCalendarDay[][] {\r\n const today = new Date();\r\n const { start, end } = this.previewRange();\r\n const selected = this.singleDate();\r\n const isRange = this.selectionMode() === 'range';\r\n\r\n return buildMonthGrid(month.getFullYear(), month.getMonth(), this.resolvedFirstDayOfWeek()).map(\r\n (week) =>\r\n week.map((date) => ({\r\n date,\r\n label: String(date.getDate()),\r\n outside: !isSameMonth(date, month),\r\n today: isSameDay(date, today),\r\n disabled: this.isDayDisabled(date),\r\n selected: isRange\r\n ? isSameDay(date, start) || isSameDay(date, end)\r\n : isSameDay(date, selected),\r\n rangeStart: isRange && isSameDay(date, orderedStart(start, end)),\r\n rangeEnd: isRange && isSameDay(date, orderedEnd(start, end)),\r\n inRange: isRange && isInRange(date, start, end),\r\n })),\r\n );\r\n }\r\n\r\n private select(date: Date): void {\r\n if (this.selectionMode() === 'single') {\r\n const time = this.singleDate();\r\n // Picking a different day must not reset a time the user already set.\r\n const next = time ? copyTimeOnto(date, time) : date;\r\n this.commit(next);\r\n return;\r\n }\r\n\r\n const { start, end } = this.range();\r\n // A fresh pair whenever there is no open range: either nothing is picked yet, or the\r\n // previous range is complete and this click starts a new one.\r\n if (!start || end) {\r\n this.commit({ start: date, end: null }, false);\r\n return;\r\n }\r\n\r\n // Second click before the first: treat it as the new start rather than an invalid range.\r\n const ordered = isBeforeDay(date, start) ? { start: date, end: start } : { start, end: date };\r\n this.hoverDate.set(null);\r\n this.commit(ordered);\r\n }\r\n\r\n private commit(next: GogDatepickerValue, complete = true): void {\r\n this.value.set(next);\r\n if (complete) {\r\n this.gogDateSelect.emit(next);\r\n }\r\n }\r\n\r\n private applyTime(hours: number, minutes: number, seconds: number): void {\r\n const base = this.timeSource() ?? startOfDay(new Date());\r\n const updated = withTime(\r\n base,\r\n clampNumber(hours, 0, 23),\r\n clampNumber(minutes, 0, 59),\r\n clampNumber(seconds, 0, 59),\r\n );\r\n\r\n if (this.selectionMode() === 'single') {\r\n this.commit(updated);\r\n return;\r\n }\r\n\r\n const { start, end } = this.range();\r\n this.commit({ start: start ? updated : null, end }, false);\r\n }\r\n\r\n /**\r\n * Moves the DOM focus onto the newly focused cell, but only after a key or button press —\r\n * never in response to the selection changing, which would steal focus from whatever the\r\n * consumer is doing elsewhere on the page.\r\n */\r\n private applyPendingFocus(): void {\r\n if (!this.pendingFocus) return;\r\n this.pendingFocus = false;\r\n\r\n queueMicrotask(() => {\r\n this.elRef.nativeElement\r\n .querySelector<HTMLElement>('.gog-calendar__day[tabindex=\"0\"]')\r\n ?.focus();\r\n });\r\n }\r\n\r\n protected isFocusedDay(date: Date): boolean {\r\n return isSameDay(date, this.focusedDate());\r\n }\r\n}\r\n\r\n/** How far into the week `date` sits, given which weekday the week starts on. */\r\nfunction weekdayOffset(date: Date, firstDayOfWeek: number): number {\r\n return (date.getDay() - firstDayOfWeek + 7) % 7;\r\n}\r\n\r\nfunction orderedStart(start: Date | null, end: Date | null): Date | null {\r\n if (!start || !end) return start;\r\n return isAfterDay(start, end) ? end : start;\r\n}\r\n\r\nfunction orderedEnd(start: Date | null, end: Date | null): Date | null {\r\n if (!start || !end) return end;\r\n return isAfterDay(start, end) ? start : end;\r\n}\r\n\r\nfunction clampNumber(value: number, min: number, max: number): number {\r\n return Math.min(max, Math.max(min, Math.round(value)));\r\n}\r\n","<div class=\"gog-calendar__header\">\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().previousYear\"\r\n (click)=\"shiftViewYears(-1)\"\r\n >\r\n <gog-icon name=\"chevron-left\" />\r\n <gog-icon name=\"chevron-left\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().previousMonth\"\r\n (click)=\"shiftView(-1)\"\r\n >\r\n <gog-icon name=\"chevron-left\" />\r\n </button>\r\n\r\n <div class=\"gog-calendar__titles\">\r\n @for (month of monthViews(); track $index) {\r\n <span class=\"gog-calendar__title\">{{ month.label }}</span>\r\n }\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().nextMonth\"\r\n (click)=\"shiftView(1)\"\r\n >\r\n <gog-icon name=\"chevron-right\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__nav gog-inline-center\"\r\n [attr.aria-label]=\"resolvedLabels().nextYear\"\r\n (click)=\"shiftViewYears(1)\"\r\n >\r\n <gog-icon name=\"chevron-right\" />\r\n <gog-icon name=\"chevron-right\" />\r\n </button>\r\n</div>\r\n\r\n<div class=\"gog-calendar__months\" (mouseleave)=\"onGridLeave()\">\r\n @for (month of monthViews(); track $index) {\r\n <!--\r\n role=\"grid\" rather than a list of buttons: a month is two-dimensional, and the arrow\r\n keys have to mean \"next day\" and \"next week\" — which is what the grid role tells\r\n assistive tech to expect. One keydown handler on the grid serves all 42 cells.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- the keydown handler is delegated here so 42 cells don't each carry one; the real keyboard targets are the day buttons inside, which are focusable and carry the roving tabindex. The grid itself must not be a tab stop. -->\r\n <table\r\n class=\"gog-calendar__grid\"\r\n role=\"grid\"\r\n [attr.aria-label]=\"month.label\"\r\n (keydown)=\"onGridKeydown($event)\"\r\n >\r\n <thead>\r\n <tr class=\"gog-calendar__weekdays\">\r\n @for (weekday of weekdays(); track $index) {\r\n <th class=\"gog-calendar__weekday\" scope=\"col\" [attr.abbr]=\"weekday\">{{ weekday }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of month.weeks; track $index) {\r\n <tr class=\"gog-calendar__week\">\r\n @for (day of week; track day.date.getTime()) {\r\n <td class=\"gog-calendar__cell\" role=\"gridcell\" [attr.aria-selected]=\"day.selected\">\r\n <!--\r\n A roving tabindex across 42 cells: exactly one is tabbable, and the arrows\r\n move it. Tabbing through every day of the month instead would put 42 stops\r\n between the field and whatever follows it.\r\n -->\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__day\"\r\n [class.gog-calendar__day--outside]=\"day.outside\"\r\n [class.gog-calendar__day--today]=\"day.today\"\r\n [class.gog-calendar__day--selected]=\"day.selected\"\r\n [class.gog-calendar__day--range-start]=\"day.rangeStart\"\r\n [class.gog-calendar__day--range-end]=\"day.rangeEnd\"\r\n [class.gog-calendar__day--in-range]=\"day.inRange\"\r\n [disabled]=\"day.disabled\"\r\n [attr.aria-disabled]=\"day.disabled\"\r\n [attr.aria-current]=\"day.today ? 'date' : null\"\r\n [tabindex]=\"isFocusedDay(day.date) ? 0 : -1\"\r\n (click)=\"onDayClick(day)\"\r\n (mouseenter)=\"onDayHover(day)\"\r\n >\r\n {{ day.label }}\r\n </button>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n</div>\r\n\r\n@if (showTime()) {\r\n <div class=\"gog-calendar__time\">\r\n <gog-icon class=\"gog-calendar__time-icon\" name=\"clock\" [ariaHidden]=\"true\" />\r\n\r\n <input\r\n type=\"number\"\r\n class=\"gog-calendar__time-input\"\r\n [min]=\"minHour()\"\r\n [max]=\"maxHour()\"\r\n [value]=\"hours()\"\r\n [attr.aria-label]=\"resolvedLabels().hours\"\r\n (input)=\"onHourInput($event)\"\r\n />\r\n <span class=\"gog-calendar__time-sep\" aria-hidden=\"true\">:</span>\r\n <input\r\n type=\"number\"\r\n class=\"gog-calendar__time-input\"\r\n min=\"0\"\r\n max=\"59\"\r\n [step]=\"minuteStep()\"\r\n [value]=\"minutes()\"\r\n [attr.aria-label]=\"resolvedLabels().minutes\"\r\n (input)=\"onMinuteInput($event)\"\r\n />\r\n\r\n @if (showSeconds()) {\r\n <span class=\"gog-calendar__time-sep\" aria-hidden=\"true\">:</span>\r\n <input\r\n type=\"number\"\r\n class=\"gog-calendar__time-input\"\r\n min=\"0\"\r\n max=\"59\"\r\n [value]=\"seconds()\"\r\n [attr.aria-label]=\"resolvedLabels().seconds\"\r\n (input)=\"onSecondInput($event)\"\r\n />\r\n }\r\n\r\n @if (hourFormat() === '12') {\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__meridiem\"\r\n [attr.aria-pressed]=\"isPm()\"\r\n (click)=\"toggleMeridiem()\"\r\n >\r\n {{ isPm() ? 'PM' : 'AM' }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n\r\n@if (showTodayButton() || showThisMonthButton()) {\r\n <!--\r\n Two distinct actions, never one: \"Today\" picks a date, \"This month\" only moves the view.\r\n Collapsing them into a single button is what made the control ambiguous — after paging\r\n away, the same label reads as \"take me back\" to one person and \"set it to today\" to another.\r\n -->\r\n <div class=\"gog-calendar__footer\">\r\n @if (showThisMonthButton()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__action gog-calendar__action--this-month\"\r\n (click)=\"goToThisMonth()\"\r\n >\r\n {{ resolvedLabels().thisMonth }}\r\n </button>\r\n }\r\n\r\n @if (showTodayButton()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-calendar__action gog-calendar__today\"\r\n [disabled]=\"!isTodaySelectable()\"\r\n (click)=\"selectToday()\"\r\n >\r\n {{ resolvedLabels().today }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n DoCheck,\r\n ElementRef,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\nimport { CalendarComponent, type GogDatepickerValue } from './calendar/calendar.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { GogClearableState } from '../../shared/clearable-state';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogFloatLabelState } from '../../shared/float-label-state';\r\nimport { GogDropdownOverlay } from '../../shared/dropdown-overlay';\r\nimport {\r\n type GogDropdownDirection,\r\n type GogDropdownPlacement,\r\n resolveDropdownPlacement,\r\n} from '../../shared/dropdown-position';\r\nimport {\r\n GogDateSelectionMode,\r\n GogFloatLabelVariant,\r\n GogHourFormat,\r\n GogSize,\r\n} from '../../shared/types';\r\nimport { type GogDateRange, formatDate, parseDate } from './date-utils';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nconst DEFAULT_APPEND_TO_BODY = false;\r\nconst DEFAULT_DIRECTION: GogDropdownDirection = 'auto';\r\nconst DEFAULT_LOCALE = 'en-US';\r\nconst DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\r\nconst DEFAULT_TIME_FORMAT = 'HH:mm';\r\nconst DEFAULT_CLEAR_DATE_LABEL = 'Clear date';\r\nconst DEFAULT_OPEN_CALENDAR_LABEL = 'Open calendar';\r\n/** Rough panel height fed into the up/down placement math before it is on screen. */\r\nconst ESTIMATED_PANEL_HEIGHT = 330;\r\n\r\nexport type { GogDateRange, GogDatepickerValue };\r\n\r\n/**\r\n * A date field with a calendar panel.\r\n *\r\n * ```html\r\n * <gog-datepicker [(value)]=\"date\" label=\"Дата рождения\" [max]=\"today\" />\r\n * <gog-datepicker selectionMode=\"range\" [(value)]=\"range\" [numberOfMonths]=\"2\" />\r\n * <gog-datepicker [showTime]=\"true\" hourFormat=\"24\" [(value)]=\"when\" />\r\n * ```\r\n *\r\n * Native `Date`, no date library and no adapter abstraction: this package has zero runtime\r\n * dependencies, and pulling one in for a single component would be the largest dependency\r\n * decision it has ever made. `Intl` covers month and weekday names; the display/parse format is\r\n * a token pattern (`dd.MM.yyyy`) so what is written can always be read back — see\r\n * `date-utils.ts`, which also explains why nothing here goes near `toISOString()`.\r\n *\r\n * The calendar itself is `gog-calendar`, exported separately and usable on its own. `inline`\r\n * mode is literally that component rendered without this field.\r\n */\r\n@Component({\r\n selector: 'gog-datepicker',\r\n imports: [CalendarComponent, IconComponent, NgTemplateOutlet],\r\n templateUrl: './datepicker.component.html',\r\n styleUrl: './datepicker.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.gog-host--auto-width]': '!fullWidth()',\r\n },\r\n})\r\nexport class DatepickerComponent implements ControlValueAccessor, DoCheck {\r\n private static nextUid = 0;\r\n protected readonly uid = ++DatepickerComponent.nextUid;\r\n\r\n readonly inputId = input('');\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n readonly placeholder = input('');\r\n readonly selectionMode = input<GogDateSelectionMode>('single');\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n readonly disabledDates = input<((date: Date) => boolean) | null>(null);\r\n readonly defaultMonth = input<Date | null>(null);\r\n readonly numberOfMonths = input(1);\r\n readonly showTime = input(false);\r\n readonly hourFormat = input<GogHourFormat>('24');\r\n readonly minuteStep = input(1);\r\n readonly showSeconds = input(false);\r\n /** The \"Today\" button in the panel's footer, which **selects** today's date. */\r\n readonly showTodayButton = input(true);\r\n /**\r\n * A second footer button that only moves the *view* back to the current month, leaving the\r\n * selection alone. Off by default; see `gog-calendar` for why the two are separate controls.\r\n */\r\n readonly showThisMonthButton = input(false);\r\n /**\r\n * Forwarded to `gog-calendar`. Left unset they stay `undefined` all the way down, so the\r\n * calendar resolves them against `GOG_CONFIG.labels` itself rather than receiving an English\r\n * default from here that would shadow the app's own.\r\n */\r\n readonly todayLabel = input<string | undefined>(undefined);\r\n readonly thisMonthLabel = input<string | undefined>(undefined);\r\n /**\r\n * Display and parse pattern (`dd.MM.yyyy`, `yyyy-MM-dd`, …). Left unset it is derived from\r\n * `showTime`, so switching the time section on does not also require restating the format.\r\n */\r\n readonly format = input<string | null>(null);\r\n /** Unset, falls back to `GOG_CONFIG.datepicker.locale`, then to `'en-US'`. */\r\n readonly locale = input<string | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.datepicker.firstDayOfWeek`, then to the locale's own. */\r\n readonly firstDayOfWeek = input<number | undefined>(undefined);\r\n /**\r\n * Whether the date can be typed as well as picked. Typed text is parsed against `format`;\r\n * text that isn't a real date leaves the value untouched and is reverted on blur, rather\r\n * than silently resetting the field.\r\n */\r\n readonly allowTextInput = input(true);\r\n /** Renders the calendar directly, with no field and no panel. */\r\n readonly inline = input(false);\r\n readonly disabled = input(false);\r\n readonly fullWidth = input(true);\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.labels.clearDate`, then to `'Clear date'`. */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n readonly errorMessage = input('');\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly size = input<GogSize | undefined>(undefined);\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\r\n readonly appendToBody = input<boolean | undefined>(undefined);\r\n readonly dropdownDirection = input<GogDropdownDirection | undefined>(undefined);\r\n readonly dropdownZIndex = input<number | null>(null);\r\n /** Unset, falls back to `GOG_CONFIG.labels.openCalendar`, then to `'Open calendar'`. */\r\n readonly openCalendarLabel = input<string | undefined>(undefined);\r\n\r\n /** Two-way bindable value: a `Date` in `'single'` mode, a `GogDateRange` in `'range'`. */\r\n readonly value = model<GogDatepickerValue>(null);\r\n\r\n readonly isOpen = signal(false);\r\n\r\n private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly overlay = new GogDropdownOverlay(inject(ApplicationRef), this.document);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n\r\n private readonly cvaDisabled = signal(false);\r\n protected readonly isFocused = signal(false);\r\n protected readonly panelPlacement = signal<GogDropdownPlacement | null>(null);\r\n protected readonly directionState = signal<'up' | 'down'>('down');\r\n /** What is in the `<input>`; diverges from `value` only while the user is typing. */\r\n protected readonly text = signal('');\r\n /**\r\n * Whether the user is part-way through typing a date.\r\n *\r\n * Deliberately **not** the same thing as \"the field has focus\": picking a date from the\r\n * calendar hands focus back to the field, and keying the guard on focus meant the text was\r\n * then refused — you would pick a date and watch the field stay empty.\r\n */\r\n private readonly isEditing = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(\r\n this.clearAriaLabel(),\r\n this.globalConfig.labels?.clearDate,\r\n DEFAULT_CLEAR_DATE_LABEL,\r\n ),\r\n );\r\n protected readonly resolvedOpenCalendarLabel = computed(() =>\r\n resolveConfigured(\r\n this.openCalendarLabel(),\r\n this.globalConfig.labels?.openCalendar,\r\n DEFAULT_OPEN_CALENDAR_LABEL,\r\n ),\r\n );\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n protected readonly resolvedAppendToBody = computed(() =>\r\n resolveConfigured(\r\n this.appendToBody(),\r\n this.globalConfig.dropdown?.appendToBody,\r\n DEFAULT_APPEND_TO_BODY,\r\n ),\r\n );\r\n protected readonly resolvedDirection = computed(() =>\r\n resolveConfigured(\r\n this.dropdownDirection(),\r\n this.globalConfig.dropdown?.direction,\r\n DEFAULT_DIRECTION,\r\n ),\r\n );\r\n protected readonly resolvedLocale = computed(() =>\r\n resolveConfigured(this.locale(), this.globalConfig.datepicker?.locale, DEFAULT_LOCALE),\r\n );\r\n protected readonly resolvedFirstDayOfWeek = computed(\r\n () => this.firstDayOfWeek() ?? this.globalConfig.datepicker?.firstDayOfWeek ?? null,\r\n );\r\n /** Derived from `showTime` so turning the clock on doesn't also require a new format. */\r\n protected readonly resolvedFormat = computed(() => {\r\n const explicit = this.format() ?? this.globalConfig.datepicker?.format;\r\n if (explicit) return explicit;\r\n return this.showTime() ? `${DEFAULT_DATE_FORMAT} ${DEFAULT_TIME_FORMAT}` : DEFAULT_DATE_FORMAT;\r\n });\r\n\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n\r\n protected readonly hasValue = computed(() => {\r\n const current = this.value();\r\n if (current === null) return false;\r\n if (current instanceof Date) return true;\r\n return current.start !== null || current.end !== null;\r\n });\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n this.hasValue,\r\n this.isDisabled,\r\n this.globalConfig,\r\n () => false,\r\n );\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n this.hasValue,\r\n this.globalConfig,\r\n );\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\r\n\r\n protected readonly triggerId = computed(() => this.inputId() || `gog-datepicker-${this.uid}`);\r\n protected readonly panelId = computed(() => `${this.triggerId()}-panel`);\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 sizeClass = computed(() =>\r\n this.resolvedSize() === DEFAULT_SIZE ? '' : `gog-datepicker--${this.resolvedSize()}`,\r\n );\r\n\r\n /** How `value` reads in the field. A half-picked range shows only its start. */\r\n protected readonly displayText = computed(() => {\r\n const current = this.value();\r\n const pattern = this.resolvedFormat();\r\n if (current === null) return '';\r\n if (current instanceof Date) return formatDate(current, pattern);\r\n\r\n const start = current.start ? formatDate(current.start, pattern) : '';\r\n const end = current.end ? formatDate(current.end, pattern) : '';\r\n if (!start) return '';\r\n return end ? `${start} — ${end}` : start;\r\n });\r\n\r\n private onChangeFn: (val: GogDatepickerValue) => void = () => {};\r\n private onTouchedFn: () => void = () => {};\r\n private repositionFrame: number | null = null;\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 while also injecting NgControl\r\n // 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\r\n // The field follows the value except while it is being typed into.\r\n effect(() => {\r\n const formatted = this.displayText();\r\n if (!this.isEditing()) {\r\n this.text.set(formatted);\r\n }\r\n });\r\n\r\n this.bindWhileOpen();\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.errorState.check();\r\n }\r\n\r\n writeValue(val: GogDatepickerValue): void {\r\n this.value.set(val ?? null);\r\n }\r\n\r\n registerOnChange(fn: (val: GogDatepickerValue) => 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) this.close();\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() || this.inline()) return;\r\n\r\n this.isOpen.set(true);\r\n this.updatePlacement();\r\n\r\n if (this.resolvedAppendToBody() && this.isBrowser) {\r\n const template = this.panelTemplate();\r\n if (template) this.overlay.attach(template, this.elRef.nativeElement);\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 this.onTouchedFn();\r\n }\r\n\r\n /** A completed selection closes the panel; a half-picked range leaves it open. */\r\n protected onCalendarSelect(next: GogDatepickerValue): void {\r\n this.isEditing.set(false);\r\n this.commit(next);\r\n if (!this.showTime()) {\r\n this.close();\r\n this.focusTrigger();\r\n }\r\n }\r\n\r\n /** Every calendar change, including the half-picked ones, has to reach the form. */\r\n protected onCalendarValue(next: GogDatepickerValue): void {\r\n this.isEditing.set(false);\r\n this.commit(next);\r\n }\r\n\r\n protected onTextInput(event: Event): void {\r\n const raw = (event.target as HTMLInputElement).value;\r\n this.isEditing.set(true);\r\n this.text.set(raw);\r\n\r\n if (!this.allowTextInput() || this.selectionMode() === 'range') return;\r\n\r\n if (raw.trim() === '') {\r\n this.commit(null);\r\n return;\r\n }\r\n\r\n const parsed = parseDate(raw, this.resolvedFormat());\r\n // An unparseable draft leaves the value alone rather than clearing it: the user is\r\n // mid-way through typing a date almost every keystroke, and wiping the value each time\r\n // would fire a stream of nulls at an attached form.\r\n if (parsed) {\r\n this.commit(parsed);\r\n }\r\n }\r\n\r\n protected onFocus(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n protected onBlur(): void {\r\n this.isFocused.set(false);\r\n this.isEditing.set(false);\r\n // Snap back to whatever the value actually is, discarding an unfinished draft.\r\n this.text.set(this.displayText());\r\n this.onTouchedFn();\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this.isOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if ((event.key === 'ArrowDown' || event.key === 'Enter') && !this.isOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n }\r\n }\r\n\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isEditing.set(false);\r\n this.commit(null);\r\n this.text.set('');\r\n }\r\n\r\n protected focusTrigger(): void {\r\n this.elRef.nativeElement.querySelector<HTMLElement>('.gog-datepicker__control')?.focus();\r\n }\r\n\r\n private commit(next: GogDatepickerValue): void {\r\n this.value.set(next);\r\n this.onChangeFn(next);\r\n }\r\n\r\n /**\r\n * Binds click-outside and reposition listeners only while the panel is open — bound\r\n * permanently, every datepicker on the page would run a handler on every document click and\r\n * every scroll frame whether or not it is showing 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 miss\r\n // scrolling inside a nested container — the case appendToBody exists for.\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 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 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 if (!inside) this.close();\r\n }\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()) this.updatePlacement();\r\n });\r\n }\r\n\r\n private updatePlacement(): void {\r\n if (!this.isBrowser) return;\r\n\r\n const trigger = this.elRef.nativeElement.querySelector<HTMLElement>('.gog-datepicker__field');\r\n if (!trigger) return;\r\n\r\n const rect = trigger.getBoundingClientRect();\r\n const placement = resolveDropdownPlacement(\r\n this.resolvedDirection(),\r\n { top: rect.top, bottom: rect.bottom, left: rect.left, width: rect.width },\r\n ESTIMATED_PANEL_HEIGHT,\r\n window.innerHeight,\r\n );\r\n\r\n this.panelPlacement.set(placement);\r\n this.directionState.set(placement.direction);\r\n }\r\n}\r\n","@if (inline()) {\r\n <!--\r\n Inline mode is literally `gog-calendar` with no field and no panel around it — which is why\r\n the calendar is its own component rather than markup buried in this one.\r\n -->\r\n <gog-calendar\r\n class=\"gog-datepicker__inline\"\r\n [value]=\"value()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [disabledDates]=\"disabledDates()\"\r\n [locale]=\"resolvedLocale()\"\r\n [firstDayOfWeek]=\"resolvedFirstDayOfWeek()\"\r\n [defaultMonth]=\"defaultMonth()\"\r\n [numberOfMonths]=\"numberOfMonths()\"\r\n [showTime]=\"showTime()\"\r\n [hourFormat]=\"hourFormat()\"\r\n [minuteStep]=\"minuteStep()\"\r\n [showSeconds]=\"showSeconds()\"\r\n [showTodayButton]=\"showTodayButton()\"\r\n [showThisMonthButton]=\"showThisMonthButton()\"\r\n [todayLabel]=\"todayLabel()\"\r\n [thisMonthLabel]=\"thisMonthLabel()\"\r\n [size]=\"resolvedSize()\"\r\n (valueChange)=\"onCalendarValue($event)\"\r\n (gogDateSelect)=\"onCalendarSelect($event)\"\r\n />\r\n} @else {\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.\r\n -->\r\n <div\r\n class=\"gog-datepicker\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-datepicker--clearable]=\"showClear()\"\r\n [class.gog-datepicker--disabled]=\"isDisabled()\"\r\n [class.gog-datepicker--open]=\"isOpen()\"\r\n [class.gog-datepicker--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-datepicker--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-datepicker--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-datepicker--floated]=\"isFloatLabelFloated()\"\r\n >\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-datepicker__label\" [for]=\"triggerId()\">{{ label() }}</label>\r\n }\r\n\r\n <div class=\"gog-datepicker__field\">\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-datepicker__label gog-datepicker__label--float\" [for]=\"triggerId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n\r\n <input\r\n type=\"text\"\r\n class=\"gog-datepicker__control\"\r\n autocomplete=\"off\"\r\n [id]=\"triggerId()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"!allowTextInput() || selectionMode() === 'range'\"\r\n [value]=\"text()\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\r\n [attr.aria-haspopup]=\"'dialog'\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-controls]=\"panelId()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onTextInput($event)\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n\r\n <span class=\"gog-datepicker__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"gog-datepicker__toggle gog-inline-center\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"resolvedOpenCalendarLabel()\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-controls]=\"panelId()\"\r\n (click)=\"toggle()\"\r\n >\r\n <gog-icon name=\"calendar\" />\r\n </button>\r\n\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-datepicker__clear gog-inline-center\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n </span>\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\r\n <ng-container [ngTemplateOutlet]=\"panelTpl\" />\r\n }\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-datepicker__error\" [attr.id]=\"errorId()\" role=\"alert\">\r\n {{ visibleError() }}\r\n </span>\r\n }\r\n </div>\r\n}\r\n\r\n<!--\r\n One template for both render modes — inline under the field, or stamped into <body> by the\r\n overlay when `appendToBody` is set, which also copies any scoped `data-theme` across.\r\n-->\r\n<ng-template #panelTpl>\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -- (click) here is housekeeping stopPropagation, not an interactive handler; the focusable, keyboard-operable elements are the calendar's own grid and buttons -->\r\n <div\r\n [id]=\"panelId()\"\r\n class=\"gog-datepicker__panel\"\r\n role=\"dialog\"\r\n [attr.aria-label]=\"label() || ariaLabel() || resolvedOpenCalendarLabel()\"\r\n [class.gog-datepicker__panel--up]=\"!resolvedAppendToBody() && directionState() === 'up'\"\r\n [class.gog-datepicker__panel--portal]=\"resolvedAppendToBody()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.z-index]=\"dropdownZIndex()\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <gog-calendar\r\n [value]=\"value()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [disabledDates]=\"disabledDates()\"\r\n [locale]=\"resolvedLocale()\"\r\n [firstDayOfWeek]=\"resolvedFirstDayOfWeek()\"\r\n [defaultMonth]=\"defaultMonth()\"\r\n [numberOfMonths]=\"numberOfMonths()\"\r\n [showTime]=\"showTime()\"\r\n [hourFormat]=\"hourFormat()\"\r\n [minuteStep]=\"minuteStep()\"\r\n [showSeconds]=\"showSeconds()\"\r\n [showTodayButton]=\"showTodayButton()\"\r\n [showThisMonthButton]=\"showThisMonthButton()\"\r\n [todayLabel]=\"todayLabel()\"\r\n [thisMonthLabel]=\"thisMonthLabel()\"\r\n [size]=\"resolvedSize()\"\r\n (valueChange)=\"onCalendarValue($event)\"\r\n (gogDateSelect)=\"onCalendarSelect($event)\"\r\n />\r\n </div>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport { GogDividerVariant, GogOrientation } from '../../shared/types';\n\n/**\n * A rule separating two regions, optionally with a label running through it.\n *\n * ```html\n * <gog-divider />\n * <gog-divider orientation=\"vertical\" />\n * <gog-divider>ИЛИ</gog-divider>\n * ```\n *\n * The label is projected content rather than a `label` input: it is markup, so a consumer can\n * put an icon or a `<gog-tag>` in it without the component growing an input per case. There is\n * no `hasLabel` input either — the stylesheet keys off whether anything was actually projected,\n * so the two forms above are the whole API.\n */\n@Component({\n selector: 'gog-divider',\n imports: [],\n templateUrl: './divider.component.html',\n styleUrl: './divider.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n },\n})\nexport class DividerComponent {\n readonly orientation = input<GogOrientation>('horizontal');\n readonly variant = input<GogDividerVariant>('solid');\n /**\n * Indents the rule from the leading edge so it lines up with the *text* of a list whose rows\n * start with an icon or avatar, instead of cutting across the whole row.\n */\n readonly inset = input(false);\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-divider',\n `gog-divider--${this.orientation()}`,\n `gog-divider--${this.variant()}`,\n this.inset() ? 'gog-divider--inset' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n}\n","<!--\n Three parts always rendered; the stylesheet collapses the label and the trailing rule to a\n single continuous line when nothing was projected (`:has(.gog-divider__label:empty)`).\n Written this way so `<gog-divider />` and `<gog-divider>ИЛИ</gog-divider>` need no extra input\n to tell them apart.\n-->\n<span class=\"gog-divider__rule gog-divider__rule--start\" aria-hidden=\"true\"></span>\n<span class=\"gog-divider__label\"><ng-content></ng-content></span>\n<span class=\"gog-divider__rule gog-divider__rule--end\" aria-hidden=\"true\"></span>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport { GogProgressbarMode, GogProgressbarVariant, GogSize } from '../../shared/types';\n\nconst MIN = 0;\nconst MAX = 100;\n\nfunction clamp(value: number): number {\n if (!Number.isFinite(value)) return MIN;\n return Math.min(MAX, Math.max(MIN, value));\n}\n\n/**\n * A horizontal progress indicator.\n *\n * ```html\n * <gog-progressbar [value]=\"42\" />\n * <gog-progressbar mode=\"indeterminate\" ariaLabel=\"Загрузка\" />\n * <gog-progressbar mode=\"buffer\" [value]=\"42\" [buffer]=\"70\" />\n * ```\n *\n * `value` and `buffer` are percentages and are clamped to 0–100 rather than trusted: a bar\n * driven straight from `loaded / total` overshoots on the last chunk often enough that\n * clamping here is worth more than letting the caller find out from a broken layout.\n */\n@Component({\n selector: 'gog-progressbar',\n imports: [],\n templateUrl: './progressbar.component.html',\n styleUrl: './progressbar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n role: 'progressbar',\n '[attr.aria-valuemin]': 'MIN',\n '[attr.aria-valuemax]': 'MAX',\n // Absent in indeterminate mode — that omission is precisely what tells assistive tech the\n // work has no known length. Reporting 0 instead would announce \"0 percent\" forever.\n '[attr.aria-valuenow]': 'isIndeterminate() ? null : clampedValue()',\n '[attr.aria-valuetext]': 'isIndeterminate() ? null : displayValue()',\n '[attr.aria-label]': 'ariaLabel() || null',\n },\n})\nexport class ProgressbarComponent {\n protected readonly MIN = MIN;\n protected readonly MAX = MAX;\n\n /** Percentage complete, 0–100. Ignored in `'indeterminate'` mode. */\n readonly value = input(0);\n /** Secondary level shown behind `value` in `'buffer'` mode — preloaded but not yet played. */\n readonly buffer = input(0);\n readonly mode = input<GogProgressbarMode>('determinate');\n readonly variant = input<GogProgressbarVariant>('accent');\n readonly size = input<GogSize>('md');\n /** Renders the percentage next to the bar. Off by default — most bars sit under a label. */\n readonly showValue = input(false);\n readonly ariaLabel = input('');\n\n protected readonly isIndeterminate = computed(() => this.mode() === 'indeterminate');\n protected readonly clampedValue = computed(() => clamp(this.value()));\n protected readonly clampedBuffer = computed(() => clamp(this.buffer()));\n protected readonly displayValue = computed(() => `${Math.round(this.clampedValue())}%`);\n /** The fill is driven to 100% in indeterminate mode; the animation moves it, not the width. */\n protected readonly fillPercent = computed(() =>\n this.isIndeterminate() ? MAX : this.clampedValue(),\n );\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-progressbar',\n `gog-progressbar--${this.mode()}`,\n `gog-progressbar--${this.variant()}`,\n `gog-progressbar--${this.size()}`,\n this.showValue() ? 'gog-progressbar--with-value' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n}\n","<div class=\"gog-progressbar__track\" aria-hidden=\"true\">\n @if (mode() === 'buffer') {\n <div class=\"gog-progressbar__buffer\" [style.width.%]=\"clampedBuffer()\"></div>\n }\n\n <div class=\"gog-progressbar__fill\" [style.width.%]=\"fillPercent()\"></div>\n</div>\n\n@if (showValue() && !isIndeterminate()) {\n <span class=\"gog-progressbar__value\">{{ displayValue() }}</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\nimport { GogSize } from '../../shared/types';\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\n\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\nconst DEFAULT_SIZE: GogSize = 'md';\n\n/**\n * An on/off switch.\n *\n * ```html\n * <gog-toggle label=\"Уведомления\" [(checked)]=\"on\" />\n * <gog-toggle formControlName=\"darkMode\" onLabel=\"ВКЛ\" offLabel=\"ВЫКЛ\" />\n * ```\n *\n * Next to `gog-checkbox` rather than a variant of it, because the two answer different\n * questions. A checkbox is \"is this one of the things you selected\"; a switch is \"is this\n * setting on\", takes effect immediately, and announces as **\"switch, on\"** rather than\n * \"checkbox, checked\". That announcement comes from `role=\"switch\"` on a native\n * `<input type=\"checkbox\">`, so keyboard, forms and assistive tech all still come from the\n * platform — only the painting differs.\n */\n@Component({\n selector: 'gog-toggle',\n imports: [],\n templateUrl: './toggle.component.html',\n styleUrl: './toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ToggleComponent implements ControlValueAccessor {\n readonly label = input('');\n readonly ariaLabel = input('');\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\n readonly size = input<GogSize | undefined>(undefined);\n readonly disabled = input(false);\n readonly fullWidth = input(false);\n /** Which side of the switch the label sits on. */\n readonly labelPosition = input<'start' | 'end'>('end');\n /**\n * Text rendered *inside* the track — the one thing a checkbox genuinely cannot do, and what\n * makes a switch readable at a glance in a dense settings list. Both must be short; the\n * track sizes to the wider of the two.\n */\n readonly onLabel = input('');\n readonly offLabel = input('');\n\n /**\n * Two-way bindable on/off state: `[(checked)]=\"signal\"`.\n * This is the same state Angular Forms drives via `writeValue`/`registerOnChange`\n * when the component is used with `formControlName`/`[formControl]`.\n * Don't wire both a form directive AND `[(checked)]` to the same instance —\n * pick one, otherwise you end up with two competing sources of truth.\n */\n readonly checked = model<boolean>(false);\n\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly cvaDisabled = signal(false);\n private readonly globalConfig = inject(GOG_CONFIG);\n\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\n protected readonly resolvedSize = computed(() =>\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly hasTrackLabels = computed(() => !!this.onLabel() || !!this.offLabel());\n\n protected readonly hostClasses = computed(() =>\n [\n 'gog-toggle-host',\n `gog-toggle-host--${this.resolvedSize()}`,\n `gog-toggle-host--label-${this.labelPosition()}`,\n this.hasTrackLabels() ? 'gog-toggle-host--track-labels' : null,\n this.fullWidth() ? 'gog-host--full-width' : null,\n ]\n .filter((className): className is string => className !== null)\n .join(' '),\n );\n\n constructor() {\n // Registering through NgControl instead of NG_VALUE_ACCESSOR matches the pattern used\n // by every other form control in the library — providing NG_VALUE_ACCESSOR on the\n // component while also injecting NgControl would be a dependency cycle.\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(val: boolean): void {\n this.checked.set(val ?? false);\n }\n\n registerOnChange(fn: (val: boolean) => void): void {\n this.onCheckedChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n protected onInputChange(event: Event): void {\n if (this.isDisabled()) return;\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onCheckedChange(next);\n this.onTouched();\n }\n\n protected onBlur(): void {\n if (this.isDisabled()) return;\n this.onTouched();\n }\n\n private onCheckedChange: (val: boolean) => void = () => {};\n\n private onTouched: () => void = () => {};\n}\n","<label [class.gog-toggle--disabled]=\"isDisabled()\" class=\"gog-toggle gog-contained-layout\">\n <!--\n A real checkbox with role=\"switch\": the role changes only how it is announced, so the\n space key, form registration and the :checked selector all keep working natively.\n -->\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInputChange($event)\"\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n class=\"gog-toggle__input\"\n role=\"switch\"\n type=\"checkbox\"\n />\n\n <span [class.gog-toggle__track--on]=\"checked()\" class=\"gog-toggle__track\">\n @if (hasTrackLabels()) {\n <!--\n Both labels are always in the DOM so the track's width is the wider of the two and\n cannot jump as the switch flips; the inactive one is faded out, not removed.\n -->\n <span\n [class.gog-toggle__state--active]=\"checked()\"\n class=\"gog-toggle__state gog-toggle__state--on\"\n aria-hidden=\"true\"\n >\n {{ onLabel() }}\n </span>\n <span\n [class.gog-toggle__state--active]=\"!checked()\"\n class=\"gog-toggle__state gog-toggle__state--off\"\n aria-hidden=\"true\"\n >\n {{ offLabel() }}\n </span>\n }\n\n <span class=\"gog-toggle__thumb\" aria-hidden=\"true\"></span>\n </span>\n\n @if (label()) {\n <span class=\"gog-toggle__label\">{{ label() }}</span>\n }\n</label>\n","/**\r\n * Per-prefix counter behind every auto-generated DOM id in the library.\r\n *\r\n * A form control needs a real `id` whether or not the consumer supplied one: without it a\r\n * `<label for>` cannot point at the field (so clicking the label does not focus it, and\r\n * assistive tech gets no accessible name), and `aria-describedby` cannot point at the error\r\n * message. Making the consumer pass `inputId` for that is a trap — the field looks fine and is\r\n * quietly inaccessible.\r\n *\r\n * Counters are keyed by prefix rather than shared, so ids stay stable per component type\r\n * (`gog-input-1`, `gog-slider-1`) instead of depending on how many *other* controls happened to\r\n * be constructed first. That also keeps them predictable in tests and diffs.\r\n *\r\n * SSR/hydration-safe by construction: the server and the client walk the same component tree in\r\n * the same order, so both arrive at the same ids. Do not seed this with randomness for that\r\n * reason.\r\n */\r\nconst counters = new Map<string, number>();\r\n\r\n/** Returns the next id for `prefix`, e.g. `nextGogControlId('gog-input')` → `'gog-input-3'`. */\r\nexport function nextGogControlId(prefix: string): string {\r\n const next = (counters.get(prefix) ?? 0) + 1;\r\n counters.set(prefix, next);\r\n return `${prefix}-${next}`;\r\n}\r\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} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GogOrientation, GogSize } from '../../shared/types';\r\nimport { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\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/** A single choice in a `gog-radio-group`. */\r\nexport interface GogRadioOption {\r\n id: string | number;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'gog-radio-group',\r\n imports: [],\r\n templateUrl: './radio-group.component.html',\r\n styleUrl: './radio-group.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.--gog-radio-box-size]': 'boxSize()',\r\n '[style.--gog-radio-label-size]': 'labelSize()',\r\n '[style.--gog-radio-padding]': 'radioPadding',\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. Same convention as gog-checkbox.\r\n '[class.gog-host--full-width]': 'fullWidth()',\r\n },\r\n})\r\nexport class RadioGroupComponent implements ControlValueAccessor {\r\n protected readonly uid = nextGogControlId('gog-radio-group');\r\n\r\n readonly options = input<GogRadioOption[]>([]);\r\n readonly label = input('');\r\n readonly ariaLabel = input('');\r\n /** Shared `name` for the underlying native radios. Auto-generated per instance if unset. */\r\n readonly name = input('');\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n readonly disabled = input(false);\r\n readonly orientation = input<GogOrientation>('vertical');\r\n readonly errorMessage = input('');\r\n /** See `GogErrorDisplay`. Defaults to `'manual'`, matching every other control in the library. */\r\n /** Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to `'manual'`. */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly fullWidth = input(false);\r\n\r\n /** Two-way bindable selected option id: `[(value)]=\"signal\"`. */\r\n readonly value = model<string | number | null>(null);\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n protected readonly controlSize = computed(\r\n () => GOG_CHECKABLE_CONTROL_SIZE_MAP[this.resolvedSize()],\r\n );\r\n protected readonly boxSize = computed(() => this.controlSize().boxSize);\r\n protected readonly labelSize = computed(() => this.controlSize().labelSize);\r\n protected readonly radioPadding = GOG_CHECKABLE_CONTROL_PADDING;\r\n protected readonly groupName = computed(() => this.name() || this.uid);\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.uid}-error` : null));\r\n protected readonly labelId = computed(() => (this.label() ? `${this.uid}-label` : null));\r\n\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 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: string | number | null): void {\r\n this.value.set(val ?? null);\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 isOptionDisabled(option: GogRadioOption): boolean {\r\n return this.isDisabled() || !!option.disabled;\r\n }\r\n\r\n protected isSelected(option: GogRadioOption): boolean {\r\n return this.value() === option.id;\r\n }\r\n\r\n protected onOptionChange(event: Event, option: GogRadioOption): void {\r\n if (this.isOptionDisabled(option)) return;\r\n const input = event.target as HTMLInputElement;\r\n if (!input.checked) return;\r\n\r\n this.value.set(option.id);\r\n this.onChange(option.id);\r\n }\r\n\r\n protected onBlur(): void {\r\n this.onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-radio-group gog-contained-layout\"\r\n role=\"radiogroup\"\r\n [class.gog-radio-group--horizontal]=\"orientation() === 'horizontal'\"\r\n [class.gog-radio-group--disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"labelId()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n>\r\n @if (label()) {\r\n <span class=\"gog-radio-group__label\" [id]=\"labelId()\">{{ label() }}</span>\r\n }\r\n\r\n <div class=\"gog-radio-group__options\">\r\n @for (option of options(); track option.id) {\r\n <label class=\"gog-radio\" [class.gog-radio--disabled]=\"isOptionDisabled(option)\">\r\n <input\r\n class=\"gog-radio__input\"\r\n type=\"radio\"\r\n [name]=\"groupName()\"\r\n [value]=\"option.id\"\r\n [checked]=\"isSelected(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n (change)=\"onOptionChange($event, option)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span class=\"gog-radio__box\" [class.gog-radio__box--checked]=\"isSelected(option)\">\r\n @if (isSelected(option)) {\r\n <span class=\"gog-radio__dot\"></span>\r\n }\r\n </span>\r\n <span class=\"gog-radio__label\">{{ option.label }}</span>\r\n </label>\r\n }\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-radio-group__error\" [id]=\"errorId()\" role=\"alert\">{{ visibleError() }}</span>\r\n }\r\n</div>\r\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';\r\nimport { Injectable, TemplateRef, inject, signal, Type } from '@angular/core';\r\nimport { GogIconName } from '../../components/icon/icon.component';\r\n\r\nexport interface DialogConfig {\r\n title?: string;\r\n component: Type<unknown>;\r\n data?: unknown;\r\n modal?: boolean;\r\n closable?: boolean;\r\n draggable?: boolean;\r\n closeIconName?: GogIconName;\r\n closeIconTemplate?: TemplateRef<unknown> | null;\r\n width?: string;\r\n maxWidth?: string;\r\n /** ARIA role for the dialog panel. Use 'alertdialog' for confirmation prompts. Default: 'dialog' */\r\n role?: 'dialog' | 'alertdialog';\r\n /**\r\n * Accessible name for the close button. Unset, falls back to `GOG_CONFIG.labels.closeDialog`,\r\n * then to `'Close dialog'`.\r\n */\r\n closeAriaLabel?: string;\r\n /** z-index of the dialog backdrop. Dropdowns inside get zIndex+10. Default: 1000 */\r\n zIndex?: number;\r\n}\r\n\r\nexport interface DialogHandle<TResult = unknown> {\r\n close(result?: TResult): void;\r\n readonly afterClosed: Promise<TResult | undefined>;\r\n}\r\n\r\nexport interface OpenDialog {\r\n id: number;\r\n zIndex: number;\r\n offsetX: number;\r\n offsetY: number;\r\n config: DialogConfig;\r\n resolve: (result: unknown) => void;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DialogService {\r\n private readonly document = inject(DOCUMENT);\r\n readonly dialogs = signal<OpenDialog[]>([]);\r\n private nextId = 0;\r\n private nextZIndex = 1000;\r\n private modalDialogCount = 0;\r\n private bodyOverflowBeforeLock: string | null = null;\r\n private focusedBeforeOpen: HTMLElement | null = null;\r\n\r\n open<TResult = unknown>(config: DialogConfig): DialogHandle<TResult> {\r\n const id = ++this.nextId;\r\n const zIndex = config.zIndex ?? this.nextZIndex++;\r\n this.nextZIndex = Math.max(this.nextZIndex, zIndex + 1);\r\n\r\n let resolveAfterClosed!: (result: TResult | undefined) => void;\r\n\r\n const afterClosed = new Promise<TResult | undefined>((resolve) => {\r\n resolveAfterClosed = resolve;\r\n });\r\n\r\n const dialog: OpenDialog = {\r\n id,\r\n zIndex,\r\n offsetX: 0,\r\n offsetY: 0,\r\n config,\r\n resolve: (result) => resolveAfterClosed(result as TResult | undefined),\r\n };\r\n\r\n if (config.modal !== false && this.modalDialogCount === 0) {\r\n this.focusedBeforeOpen =\r\n this.document.activeElement instanceof HTMLElement ? this.document.activeElement : null;\r\n this.lockBodyScroll();\r\n }\r\n\r\n if (config.modal !== false) {\r\n this.modalDialogCount += 1;\r\n }\r\n\r\n this.dialogs.update((list) => [...list, dialog]);\r\n\r\n return {\r\n close: (result?: TResult) => this.close(dialog, result),\r\n afterClosed,\r\n };\r\n }\r\n\r\n close(dialog: OpenDialog, result?: unknown): void {\r\n if (!this.dialogs().some((entry) => entry.id === dialog.id)) return;\r\n\r\n dialog.resolve(result);\r\n this.dialogs.update((list) => list.filter((entry) => entry.id !== dialog.id));\r\n\r\n if (dialog.config.modal !== false) {\r\n this.modalDialogCount = Math.max(0, this.modalDialogCount - 1);\r\n }\r\n\r\n if (this.modalDialogCount === 0) {\r\n this.unlockBodyScroll();\r\n }\r\n\r\n if (this.dialogs().length === 0) {\r\n this.restoreFocus();\r\n }\r\n }\r\n\r\n closeAll(result?: unknown): void {\r\n const dialogs = this.dialogs();\r\n dialogs.forEach((dialog) => dialog.resolve(result));\r\n this.dialogs.set([]);\r\n this.modalDialogCount = 0;\r\n this.unlockBodyScroll();\r\n this.restoreFocus();\r\n }\r\n\r\n updatePosition(dialogId: number, offsetX: number, offsetY: number): void {\r\n this.dialogs.update((list) =>\r\n list.map((dialog) => (dialog.id === dialogId ? { ...dialog, offsetX, offsetY } : dialog)),\r\n );\r\n }\r\n\r\n private lockBodyScroll(): void {\r\n if (this.bodyOverflowBeforeLock !== null) return;\r\n this.bodyOverflowBeforeLock = this.document.body.style.overflow;\r\n this.document.body.style.overflow = 'hidden';\r\n }\r\n\r\n private unlockBodyScroll(): void {\r\n if (this.bodyOverflowBeforeLock === null) return;\r\n this.document.body.style.overflow = this.bodyOverflowBeforeLock;\r\n this.bodyOverflowBeforeLock = null;\r\n }\r\n\r\n private restoreFocus(): void {\r\n const element = this.focusedBeforeOpen;\r\n this.focusedBeforeOpen = null;\r\n if (!element || !this.document.contains(element)) return;\r\n element.focus({ preventScroll: true });\r\n }\r\n}\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 { GOG_CONFIG, resolveConfigured } from '../../shared/config';\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/** Built-in default, used when neither `DialogConfig` nor `GOG_CONFIG.labels` supplies one. */\r\nconst DEFAULT_CLOSE_LABEL = 'Close dialog';\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 globalConfig = inject(GOG_CONFIG);\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 /** Per-dialog config → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected closeLabel(dialog: OpenDialog): string {\r\n return resolveConfigured(\r\n dialog.config.closeAriaLabel,\r\n this.globalConfig.labels?.closeDialog,\r\n DEFAULT_CLOSE_LABEL,\r\n );\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-tooltip-z]=\"panelZ(dialog) + 20\"\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 [attr.aria-label]=\"closeLabel(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\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n class=\"gog-dialog__scroll\"\r\n >\r\n <ng-container\r\n *ngComponentOutlet=\"dialog.config.component; injector: getInjector(dialog)\"\r\n />\r\n </gog-scroll>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","import {\r\n afterNextRender,\r\n inject,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n input,\r\n OnDestroy,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { Toast, ToastAction } from '../../services/toast-service/toast-service';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\n\r\n/** Built-in default, used when `GOG_CONFIG.labels.closeToast` is unset. */\r\nconst DEFAULT_CLOSE_LABEL = 'Close toast';\r\n\r\n@Component({\r\n selector: 'gog-toast',\r\n imports: [ButtonComponent, IconComponent],\r\n templateUrl: './toast.component.html',\r\n styleUrl: './toast.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n /*\r\n * Deliberately carries no `role`/`aria-live` of its own. A live region has to be in the DOM\r\n * *before* the content it announces lands inside it; this element is created together with\r\n * its own text, which screen readers routinely skip. `gog-toast-container` owns two\r\n * permanently-mounted regions instead (see `announcements` there), so what reaches assistive\r\n * tech does not depend on the timing of a node insertion. Keeping a role here as well would\r\n * announce every toast twice, once per region.\r\n */\r\n})\r\nexport class ToastComponent implements OnDestroy {\r\n readonly toast = input.required<Toast>();\r\n /** Whether this toast is the active, front-of-queue toast — only the front toast counts down. */\r\n readonly isFront = input<boolean>(true);\r\n readonly dismissed = output<string>();\r\n\r\n readonly visible = signal(false);\r\n readonly isPaused = signal(false);\r\n private autoDismissTimer: ReturnType<typeof setTimeout> | null = null;\r\n private startedAt = 0;\r\n private remainingMs = 0;\r\n private isClosing = signal(false);\r\n\r\n private readonly progressEl = viewChild<ElementRef<HTMLElement>>('progress');\r\n\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n /**\r\n * `GOG_CONFIG.labels` → the built-in English default. No per-instance input: a toast is\r\n * created through `ToastService`, and its close button says the same thing every time.\r\n */\r\n protected readonly closeLabel = resolveConfigured(\r\n undefined,\r\n this.globalConfig.labels?.closeToast,\r\n DEFAULT_CLOSE_LABEL,\r\n );\r\n\r\n protected readonly hasActions = computed(() => this.toast().actions.length > 0);\r\n\r\n constructor() {\r\n afterNextRender(() => this.visible.set(true));\r\n effect((onCleanup) => {\r\n const toast = this.toast();\r\n const isFront = this.isFront();\r\n this.isPaused.set(false);\r\n this.isClosing.set(false);\r\n this.clearAutoDismissTimer();\r\n this.remainingMs = toast.duration;\r\n\r\n // Toasts queued behind the front one keep a full, frozen progress bar and don't count\r\n // down — they only start ticking once they become the front toast.\r\n if (!toast.isSticky && isFront) {\r\n this.restartProgressAnimation();\r\n this.startAutoDismiss(this.remainingMs);\r\n }\r\n\r\n onCleanup(() => this.clearAutoDismissTimer());\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearAutoDismissTimer();\r\n }\r\n\r\n close(): void {\r\n if (!this.visible() || this.isClosing()) return;\r\n this.clearAutoDismissTimer();\r\n this.isPaused.set(false);\r\n this.isClosing.set(true);\r\n this.visible.set(false);\r\n const id = this.toast().id;\r\n\r\n if (this.prefersReducedMotion()) {\r\n this.isClosing.set(false);\r\n queueMicrotask(() => this.dismissed.emit(id));\r\n }\r\n }\r\n\r\n protected pauseAutoDismiss(): void {\r\n const toast = this.toast();\r\n if (toast.isSticky || !this.isFront() || this.isPaused() || this.isClosing()) return;\r\n if (this.autoDismissTimer === null) return;\r\n\r\n const elapsed = Date.now() - this.startedAt;\r\n this.remainingMs = Math.max(0, this.remainingMs - elapsed);\r\n this.clearAutoDismissTimer();\r\n this.isPaused.set(true);\r\n }\r\n\r\n protected resumeAutoDismiss(): void {\r\n const toast = this.toast();\r\n if (toast.isSticky || !this.isFront() || !this.isPaused() || this.isClosing()) return;\r\n\r\n this.isPaused.set(false);\r\n if (this.remainingMs <= 0) {\r\n this.close();\r\n return;\r\n }\r\n\r\n this.startAutoDismiss(this.remainingMs);\r\n }\r\n\r\n protected onTransitionEnd(event: TransitionEvent): void {\r\n if (!this.isClosing() || event.target !== event.currentTarget) return;\r\n if (event.propertyName !== 'opacity' && event.propertyName !== 'transform') return;\r\n\r\n this.isClosing.set(false);\r\n this.dismissed.emit(this.toast().id);\r\n }\r\n\r\n protected runAction(action: ToastAction): void {\r\n action.onClick(this.toast());\r\n }\r\n\r\n private startAutoDismiss(duration: number): void {\r\n this.clearAutoDismissTimer();\r\n this.remainingMs = duration;\r\n this.startedAt = Date.now();\r\n this.autoDismissTimer = setTimeout(() => {\r\n this.autoDismissTimer = null;\r\n this.remainingMs = 0;\r\n this.close();\r\n }, duration);\r\n }\r\n\r\n /**\r\n * Forces the CSS progress-bar animation to restart from full width. Simply updating the\r\n * `--toast-duration` custom property doesn't retrigger a running `animation`, so the element\r\n * is briefly detached from the animation and reflowed before being reattached.\r\n */\r\n private restartProgressAnimation(): void {\r\n const el = this.progressEl()?.nativeElement;\r\n if (!el) return;\r\n\r\n el.style.animation = 'none';\r\n void el.offsetWidth;\r\n el.style.animation = '';\r\n }\r\n\r\n private clearAutoDismissTimer(): void {\r\n if (this.autoDismissTimer !== null) {\r\n clearTimeout(this.autoDismissTimer);\r\n this.autoDismissTimer = null;\r\n }\r\n }\r\n\r\n private prefersReducedMotion(): boolean {\r\n return (\r\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n );\r\n }\r\n}\r\n","<div\r\n class=\"gog-toast\"\r\n [class.gog-toast--paused]=\"isPaused()\"\r\n [class.gog-toast--queued]=\"!isFront()\"\r\n [class.gog-toast--success]=\"toast().type === 'success'\"\r\n [class.gog-toast--error]=\"toast().type === 'error'\"\r\n [class.gog-toast--warning]=\"toast().type === 'warning'\"\r\n [class.gog-toast--info]=\"toast().type === 'info'\"\r\n [class.gog-toast--visible]=\"visible()\"\r\n [style.--toast-duration]=\"toast().duration + 'ms'\"\r\n (mouseenter)=\"pauseAutoDismiss()\"\r\n (mouseleave)=\"resumeAutoDismiss()\"\r\n (transitionend)=\"onTransitionEnd($event)\"\r\n>\r\n <div class=\"gog-toast__content\">\r\n <span class=\"gog-toast__icon\" aria-hidden=\"true\">\r\n <gog-icon [template]=\"toast().iconTemplate ?? null\" [name]=\"toast().iconName\" />\r\n </span>\r\n <div class=\"gog-toast__main\">\r\n <span class=\"gog-toast__message\">{{ toast().message }}</span>\r\n @if (hasActions()) {\r\n <div class=\"gog-toast__actions\">\r\n @for (action of toast().actions; track action.label) {\r\n <gog-button\r\n class=\"gog-toast__action\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n (gogClick)=\"runAction(action)\"\r\n >\r\n @if (action.iconName || action.iconTemplate) {\r\n <gog-icon\r\n [template]=\"action.iconTemplate ?? null\"\r\n [name]=\"action.iconName ?? 'check'\"\r\n />\r\n }\r\n {{ action.label }}\r\n </gog-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <gog-button\r\n class=\"gog-toast__close\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n [ariaLabel]=\"closeLabel\"\r\n (gogClick)=\"close()\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </gog-button>\r\n </div>\r\n @if (!toast().isSticky) {\r\n <span #progress class=\"gog-toast__progress\" aria-hidden=\"true\"></span>\r\n }\r\n</div>\r\n","import { Injectable, TemplateRef, inject, signal } from '@angular/core';\r\n\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { GogIconName } from '../../components/icon/icon.component';\r\n\r\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\r\nexport type ToastPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\r\n\r\nexport interface Toast {\r\n id: string;\r\n message: string;\r\n type: ToastType;\r\n iconName: GogIconName;\r\n iconTemplate?: TemplateRef<unknown> | null;\r\n actions: ToastAction[];\r\n isSticky: boolean;\r\n duration: number;\r\n position: ToastPosition;\r\n dedupeKey: string;\r\n revision: number;\r\n}\r\n\r\nexport interface ToastAction {\r\n label: string;\r\n onClick: (toast: Toast) => void;\r\n iconName?: GogIconName;\r\n iconTemplate?: TemplateRef<unknown> | null;\r\n}\r\n\r\nexport interface ToastConfig {\r\n message: string;\r\n type?: ToastType;\r\n iconName?: GogIconName;\r\n iconTemplate?: TemplateRef<unknown> | null;\r\n actions?: ToastAction[];\r\n dedupeKey?: string;\r\n isSticky?: boolean;\r\n duration?: number;\r\n position?: ToastPosition;\r\n}\r\n\r\nconst DEFAULT_DURATION = 4000;\r\nconst DEFAULT_POSITION: ToastPosition = 'bottom-right';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ToastService {\r\n readonly toasts = signal<Toast[]>([]);\r\n\r\n /**\r\n * Read once at construction rather than per `show()` call: this is a root-provided singleton,\r\n * so the config it resolves against cannot change over its lifetime anyway.\r\n */\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n private generateId(): string {\r\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n return crypto.randomUUID();\r\n }\r\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\r\n }\r\n\r\n show(config: ToastConfig): string {\r\n const type = config.type ?? 'info';\r\n const position = resolveConfigured(\r\n config.position,\r\n this.globalConfig.toast?.position,\r\n DEFAULT_POSITION,\r\n );\r\n const duration = resolveConfigured(\r\n config.duration,\r\n this.globalConfig.toast?.duration,\r\n DEFAULT_DURATION,\r\n );\r\n const iconName = config.iconName ?? this.defaultIconName(type);\r\n const actions = config.actions ?? [];\r\n const dedupeKey =\r\n config.dedupeKey ??\r\n this.buildDedupeKey(\r\n config.message,\r\n type,\r\n iconName,\r\n position,\r\n actions,\r\n config.iconTemplate ?? null,\r\n );\r\n\r\n let createdId = this.generateId();\r\n\r\n this.toasts.update((list) => {\r\n let existingIndex = -1;\r\n if (dedupeKey) {\r\n for (let index = list.length - 1; index >= 0; index -= 1) {\r\n if (list[index].dedupeKey === dedupeKey) {\r\n existingIndex = index;\r\n break;\r\n }\r\n }\r\n }\r\n const nextToast: Toast = {\r\n id: existingIndex >= 0 ? list[existingIndex].id : createdId,\r\n message: config.message,\r\n type,\r\n iconName,\r\n iconTemplate: config.iconTemplate ?? null,\r\n actions,\r\n isSticky: config.isSticky ?? false,\r\n duration,\r\n position,\r\n dedupeKey,\r\n revision: existingIndex >= 0 ? list[existingIndex].revision + 1 : 0,\r\n };\r\n\r\n if (existingIndex >= 0) {\r\n const next = [...list];\r\n next[existingIndex] = nextToast;\r\n createdId = nextToast.id;\r\n return next;\r\n }\r\n\r\n createdId = nextToast.id;\r\n return [...list, nextToast];\r\n });\r\n\r\n return createdId;\r\n }\r\n\r\n dismiss(id: string): void {\r\n this.toasts.update((list) => list.filter((t) => t.id !== id));\r\n }\r\n\r\n dismissAll(): void {\r\n this.toasts.set([]);\r\n }\r\n\r\n success(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'success' });\r\n }\r\n\r\n error(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'error' });\r\n }\r\n\r\n warning(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'warning' });\r\n }\r\n\r\n info(message: string, config?: Partial<ToastConfig>): string {\r\n return this.show({ ...config, message, type: 'info' });\r\n }\r\n\r\n private defaultIconName(type: ToastType): GogIconName {\r\n switch (type) {\r\n case 'success':\r\n return 'success';\r\n case 'error':\r\n return 'error';\r\n case 'warning':\r\n return 'warning';\r\n default:\r\n return 'info';\r\n }\r\n }\r\n\r\n private buildDedupeKey(\r\n message: string,\r\n type: ToastType,\r\n iconName: GogIconName,\r\n position: ToastPosition,\r\n actions: ToastAction[],\r\n iconTemplate: TemplateRef<unknown> | null,\r\n ): string {\r\n // Actions carry closures that can't be compared by value, so only their\r\n // label/icon \"shape\" is used — this lets repeated calls with equivalent\r\n // actions (e.g. a fresh \"Undo\" callback each time) still dedupe correctly.\r\n const actionsSignature = actions\r\n .map((action) => `${action.label}:${action.iconName ?? ''}`)\r\n .join(',');\r\n return [\r\n message,\r\n type,\r\n iconName,\r\n position,\r\n iconTemplate ? 'template' : 'default',\r\n actionsSignature,\r\n ].join('|');\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\r\nimport { ToastComponent } from '../toast.component';\r\nimport { Toast, ToastPosition, ToastService } from '../../../services/toast-service/toast-service';\r\n\r\nconst POSITIONS: ToastPosition[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\r\n\r\n/** The two types urgent enough to interrupt whatever the screen reader is currently saying. */\r\nconst ASSERTIVE_TYPES = ['error', 'warning'];\r\n\r\n/** One line of a live region — see `announcements`. */\r\ninterface ToastAnnouncement {\r\n /** `id` alone is not enough: a deduped toast is re-shown under the same id, and re-announcing\r\n * it is the point of `revision`. */\r\n key: string;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n selector: 'gog-toast-container',\r\n imports: [ToastComponent],\r\n templateUrl: './toast-container.component.html',\r\n styleUrl: './toast-container.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ToastContainerComponent {\r\n private readonly toastService = inject(ToastService);\r\n readonly maxVisiblePerPosition = input(5);\r\n\r\n readonly groups = computed(() =>\r\n POSITIONS.map((position) => ({\r\n position,\r\n // Keep the oldest toasts first: they're at the front of the queue (actively ticking),\r\n // while newer arrivals wait their turn at the back of the visible stack.\r\n toasts: this.toastService\r\n .toasts()\r\n .filter((toast) => toast.position === position)\r\n .slice(0, Math.max(0, this.maxVisiblePerPosition())),\r\n })).filter((group) => group.toasts.length > 0),\r\n );\r\n\r\n /**\r\n * What the two permanently-mounted live regions in the template say right now, split by\r\n * urgency. The regions themselves are always in the DOM — that is the whole point of putting\r\n * them here rather than on `gog-toast`, whose host element only exists from the moment its\r\n * text does, which is exactly the case screen readers miss.\r\n *\r\n * Derived from `groups()` rather than from the raw service state so that what is announced\r\n * matches what is on screen: a toast queued beyond `maxVisiblePerPosition` is not visible yet\r\n * and must not be read out yet either.\r\n */\r\n protected readonly announcements = computed(() => {\r\n const visible = this.groups().flatMap((group) => group.toasts);\r\n return {\r\n polite: visible.filter((toast) => !ASSERTIVE_TYPES.includes(toast.type)).map(toAnnouncement),\r\n assertive: visible\r\n .filter((toast) => ASSERTIVE_TYPES.includes(toast.type))\r\n .map(toAnnouncement),\r\n };\r\n });\r\n\r\n protected trackGroup(_: number, group: { position: ToastPosition }): ToastPosition {\r\n return group.position;\r\n }\r\n\r\n protected isLeft(position: ToastPosition): boolean {\r\n return position.includes('left');\r\n }\r\n\r\n protected trackToast(_: number, toast: { id: string }): string {\r\n return toast.id;\r\n }\r\n\r\n protected trackAnnouncement(_: number, announcement: ToastAnnouncement): string {\r\n return announcement.key;\r\n }\r\n\r\n protected dismiss(id: string): void {\r\n this.toastService.dismiss(id);\r\n }\r\n}\r\n\r\nfunction toAnnouncement(toast: Toast): ToastAnnouncement {\r\n return { key: `${toast.id}:${toast.revision}`, message: toast.message };\r\n}\r\n","<!--\r\n Both regions stay mounted for the lifetime of the container, empty or not, so a screen reader\r\n has already picked them up by the time a message lands inside one. `aria-atomic=\"false\"` so\r\n only the newly added line is read, not the whole open stack again on every arrival.\r\n-->\r\n<div class=\"gog-visually-hidden\" aria-live=\"polite\" aria-atomic=\"false\">\r\n @for (announcement of announcements().polite; track trackAnnouncement($index, announcement)) {\r\n <p>{{ announcement.message }}</p>\r\n }\r\n</div>\r\n<div class=\"gog-visually-hidden\" aria-live=\"assertive\" aria-atomic=\"false\">\r\n @for (announcement of announcements().assertive; track trackAnnouncement($index, announcement)) {\r\n <p>{{ announcement.message }}</p>\r\n }\r\n</div>\r\n\r\n@for (group of groups(); track trackGroup($index, group)) {\r\n <div class=\"gog-toast-container gog-toast-container--{{ group.position }}\">\r\n @for (toast of group.toasts; track trackToast($index, toast); let toastIndex = $index) {\r\n <gog-toast\r\n [toast]=\"toast\"\r\n [isFront]=\"toastIndex === 0\"\r\n [class.slide-left]=\"isLeft(group.position)\"\r\n [style.--toast-stack-index]=\"toastIndex\"\r\n (dismissed)=\"dismiss($event)\"\r\n />\r\n }\r\n </div>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n contentChild,\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 { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogClearableState } from '../../shared/clearable-state';\r\nimport { GogFloatLabelState } from '../../shared/float-label-state';\r\nimport { GogFloatLabelVariant, GogInputMode, GogInputType, GogSize } from '../../shared/types';\r\nimport { IconComponent, type GogIconName } from '../icon/icon.component';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nconst DEFAULT_SHOW_SPIN_BUTTONS = true;\r\nconst DEFAULT_LABELS = {\r\n clear: 'Clear',\r\n increment: 'Increment',\r\n decrement: 'Decrement',\r\n showPassword: 'Show password',\r\n hidePassword: 'Hide password',\r\n} as const;\r\n/** Native `stepUp()`/`stepDown()` default when `step` is left unset. */\r\nconst DEFAULT_STEP = 1;\r\n\r\n/** Rounds to `step`'s own decimal precision, so e.g. repeated `0.1` steps don't drift to\r\n * `0.30000000000000004`. */\r\nfunction roundToStep(value: number, step: number): number {\r\n const decimals = (String(step).split('.')[1] ?? '').length;\r\n return decimals === 0 ? Math.round(value) : Number(value.toFixed(decimals));\r\n}\r\n\r\n/**\r\n * Arbitrary markup in the field's leading slot — an icon, a button, a prefix label:\r\n *\r\n * ```html\r\n * <gog-inputfield label=\"Amount\">\r\n * <span gogInputAddonStart>€</span>\r\n * </gog-inputfield>\r\n *\r\n * <gog-inputfield label=\"Search\">\r\n * <button gogInputAddonStart type=\"button\" aria-label=\"Search\" (click)=\"run()\">\r\n * <gog-icon name=\"check\" />\r\n * </button>\r\n * </gog-inputfield>\r\n * ```\r\n *\r\n * Unlike the deprecated `iconStartTemplate` / `iconStartFn` / `iconStartLabel` trio this\r\n * replaces, the projected element is a normal DOM element: it carries its own `aria-label`,\r\n * its own click handler, and its own disabled state, so the component needs no input per\r\n * capability. `iconStart` — a bare icon name — stays, since that really is the common case.\r\n */\r\n@Directive({ selector: '[gogInputAddonStart]' })\r\nexport class GogInputAddonStartDirective {}\r\n\r\n/**\r\n * Arbitrary markup in the field's trailing slot — see `GogInputAddonStartDirective`.\r\n *\r\n * On `type=\"password\"` the built-in show/hide toggle owns this slot and a projected end addon\r\n * is ignored, so the reveal control can never be accidentally replaced by a decorative one.\r\n */\r\n@Directive({ selector: '[gogInputAddonEnd]' })\r\nexport class GogInputAddonEndDirective {}\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 /** See `GogInputType` for why this is a subset of the native `type` list. */\r\n readonly type = input<GogInputType>('text');\r\n /** Defaults to 'current-password' for password fields, 'off' otherwise */\r\n readonly autocomplete = input('');\r\n /**\r\n * Native `readonly`: the value is still selectable, focusable and submitted with the form, but\r\n * cannot be edited. Distinct from `disabled`, which also takes the field out of the tab order,\r\n * greys it out and drops it from form submission.\r\n *\r\n * Suppresses the clear button and the number field's spin buttons for as long as it is on —\r\n * both promise an edit the field would refuse.\r\n */\r\n readonly readonly = input(false);\r\n /** Native `maxlength`. Unset (`null`), no limit is applied. */\r\n readonly maxlength = input<number | null>(null);\r\n /** Native `minlength`. Unset (`null`), no minimum is applied. */\r\n readonly minlength = input<number | null>(null);\r\n /** Native `pattern`, as a regular-expression source string. Unset (`''`), nothing is applied. */\r\n readonly pattern = input('');\r\n /**\r\n * Native `inputmode` — see `GogInputMode`. Unset, the browser infers a keyboard from `type`.\r\n */\r\n readonly inputMode = input<GogInputMode | null>(null);\r\n /**\r\n * Native `spellcheck`. Unset (`null`), the browser's own default applies; set `false` on\r\n * fields holding names, codes or identifiers, where the red underline is noise.\r\n */\r\n readonly spellcheck = input<boolean | null>(null);\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 /**\r\n * Whether a `type=\"number\"` field shows the library's own increment/decrement buttons in\r\n * place of the browser's native (and inconsistently-styled across platforms) spin glyphs.\r\n * The native glyphs are always hidden on a number field regardless of this — off just means\r\n * no stepper UI at all, not a fallback to the native one. Arrow-key stepping on the focused\r\n * field keeps working either way; that's native `<input type=\"number\">` behaviour, unrelated\r\n * to which glyphs are visible. Unset, falls back to `GOG_CONFIG.inputfield.showSpinButtons`,\r\n * then to `true`.\r\n */\r\n readonly showSpinButtons = input<boolean | undefined>(undefined);\r\n /** aria-label for the number field's increment button. Unset, falls back to `GOG_CONFIG.labels.increment`. */\r\n readonly incrementLabel = input<string | undefined>(undefined);\r\n /** aria-label for the number field's decrement button. Unset, falls back to `GOG_CONFIG.labels.decrement`. */\r\n readonly decrementLabel = input<string | undefined>(undefined);\r\n readonly errorMessage = input('');\r\n /**\r\n * See `GogErrorDisplay`. Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to\r\n * `'manual'` — matching every other control in the library.\r\n */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly name = input('');\r\n /**\r\n * The `<input>`'s `id`. Left unset, the field generates one — the label's `for` and the error\r\n * message's `aria-describedby` both need a real id, and a field that is silently unlabelled\r\n * without one is the wrong default. Set this only when something outside the component has to\r\n * reference the input by a known id.\r\n */\r\n readonly inputId = input('');\r\n readonly disabled = input(false);\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\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 /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<span gogInputAddonStart>` element instead. Removed in 21.5.0.\r\n */\r\n readonly iconStartTemplate = input<TemplateRef<unknown> | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<span gogInputAddonEnd>` element instead. Removed in 21.5.0.\r\n */\r\n readonly iconEndTemplate = input<TemplateRef<unknown> | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonStart>` element instead. Removed in 21.5.0. A projected button carries its own\r\n * `(click)` handler, so no input is needed for it.\r\n */\r\n readonly iconStartFn = input<(() => void) | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonEnd>` element instead. Removed in 21.5.0. A projected button carries its own\r\n * `(click)` handler, so no input is needed for it.\r\n */\r\n readonly iconEndFn = input<(() => void) | null>(null);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonStart>` element instead. Removed in 21.5.0. Put `aria-label` on that button.\r\n */\r\n readonly iconStartLabel = input('');\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project a `<button gogInputAddonEnd>` element instead. Removed in 21.5.0. Put `aria-label` on that button.\r\n */\r\n readonly iconEndLabel = input('');\r\n /** aria-label for the reveal-password button, shown when `type` is `'password'`. Unset, falls back to `GOG_CONFIG.labels.showPassword`. */\r\n readonly showPasswordLabel = input<string | undefined>(undefined);\r\n /** aria-label for the hide-password button, shown once the password is revealed. Unset, falls back to `GOG_CONFIG.labels.hidePassword`. */\r\n readonly hidePasswordLabel = input<string | undefined>(undefined);\r\n /**\r\n * Whether to offer a clear button once the field has text. Unset, falls back to\r\n * `GOG_CONFIG.control.clearable`, then to `false`.\r\n */\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /** Accessible name for the clear button. Unset, falls back to `GOG_CONFIG.labels.clear`. */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.variant`, then to `'none'` (off). */\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.showPlaceholder`, then to `false`. */\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\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 globalConfig = inject(GOG_CONFIG);\r\n private readonly cvaDisabled = signal(false);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n private readonly passwordVisible = signal(false);\r\n /** Set from `(focus)`/`(blur)` on the `<input>` — see `onFocus`/`onBlur`. */\r\n protected readonly isFocused = signal(false);\r\n\r\n /**\r\n * The single size modifier, replacing one `[class.gog-input-wrapper--<size>]` binding per size.\r\n * Empty for `'md'`: that is this component's default size and has no modifier rule of its own — every `gog-input-wrapper--*` chain bottoms out at it.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.resolvedSize() === 'md' ? '' : `gog-input-wrapper--${this.resolvedSize()}`,\r\n );\r\n\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(this.clearAriaLabel(), this.globalConfig.labels?.clear, DEFAULT_LABELS.clear),\r\n );\r\n protected readonly resolvedIncrementLabel = computed(() =>\r\n resolveConfigured(\r\n this.incrementLabel(),\r\n this.globalConfig.labels?.increment,\r\n DEFAULT_LABELS.increment,\r\n ),\r\n );\r\n protected readonly resolvedDecrementLabel = computed(() =>\r\n resolveConfigured(\r\n this.decrementLabel(),\r\n this.globalConfig.labels?.decrement,\r\n DEFAULT_LABELS.decrement,\r\n ),\r\n );\r\n\r\n protected readonly resolvedShowSpinButtons = computed(() =>\r\n resolveConfigured(\r\n this.showSpinButtons(),\r\n this.globalConfig.inputfield?.showSpinButtons,\r\n DEFAULT_SHOW_SPIN_BUTTONS,\r\n ),\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /** Disabled and read-only both refuse edits; the affordances that offer one key off this. */\r\n protected readonly isNotEditable = computed(() => this.isDisabled() || this.readonly());\r\n protected readonly isPasswordField = computed(() => this.type() === 'password');\r\n protected readonly isNumberField = computed(() => this.type() === 'number');\r\n protected readonly hasSpinButtons = computed(\r\n () => this.isNumberField() && this.resolvedShowSpinButtons() && !this.readonly(),\r\n );\r\n /** Current field value as a number, or `null` while empty. */\r\n private readonly numericValue = computed(() =>\r\n this.value() === '' ? null : Number(this.value()),\r\n );\r\n protected readonly isAtMin = computed(() => {\r\n const min = this.min();\r\n const current = this.numericValue();\r\n return min !== null && current !== null && current <= min;\r\n });\r\n protected readonly isAtMax = computed(() => {\r\n const max = this.max();\r\n const current = this.numericValue();\r\n return max !== null && current !== null && current >= max;\r\n });\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\r\n /** Fallback id, generated once per instance — see `resolvedInputId`. */\r\n private readonly autoId = nextGogControlId('gog-input');\r\n /** The consumer's `inputId` when given, otherwise the generated one. Never empty. */\r\n protected readonly resolvedInputId = computed(() => this.inputId() || this.autoId);\r\n /**\r\n * Only non-null while the error element is actually rendered — the template renders it on\r\n * `visibleError()`, and an `aria-describedby` pointing at an id that isn't in the DOM is worse\r\n * than none at all.\r\n */\r\n protected readonly errorId = computed(() =>\r\n this.visibleError() ? `${this.resolvedInputId()}-error` : null,\r\n );\r\n\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n // \"Has content\" for a text field is simply a non-empty value.\r\n computed(() => this.value() !== ''),\r\n this.globalConfig,\r\n );\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n computed(() => this.value() !== ''),\r\n this.isNotEditable,\r\n this.globalConfig,\r\n () => false,\r\n );\r\n /** Whether to render the clear button right now — see `GogClearableState`. */\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n /**\r\n * Both the stepper and the clear button are on screen — only possible on a `clearable`\r\n * number field with a value. Drives `.gog-input-wrapper--spin-clear`, which widens the end\r\n * gutter and shifts the clear button clear of the stepper; without it the two overlap.\r\n */\r\n protected readonly hasSpinAndClear = computed(\r\n () => this.hasSpinButtons() && this.showClear() && !this.isPasswordField(),\r\n );\r\n\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\r\n\r\n /** Projected `gogInputAddonStart` element, if any. */\r\n protected readonly addonStart = contentChild(GogInputAddonStartDirective);\r\n /** Projected `gogInputAddonEnd` element, if any. */\r\n protected readonly addonEnd = contentChild(GogInputAddonEndDirective);\r\n\r\n /**\r\n * Drives the wrapper's `--icon-start` class, which widens the field's leading gutter. Counts\r\n * a projected addon as well as the legacy icon inputs, or the addon would overlap the text.\r\n */\r\n protected readonly hasIconStart = computed(\r\n () => !!this.addonStart() || !!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 if (!this.isPasswordField()) return this.iconEndLabel();\r\n return this.passwordVisible()\r\n ? resolveConfigured(\r\n this.hidePasswordLabel(),\r\n this.globalConfig.labels?.hidePassword,\r\n DEFAULT_LABELS.hidePassword,\r\n )\r\n : resolveConfigured(\r\n this.showPasswordLabel(),\r\n this.globalConfig.labels?.showPassword,\r\n DEFAULT_LABELS.showPassword,\r\n );\r\n });\r\n protected readonly hasIconEnd = computed(\r\n () =>\r\n this.showClear() ||\r\n !!this.addonEnd() ||\r\n !!this.iconEndTemplate() ||\r\n !!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 /** Increments (`direction: 1`) or decrements (`direction: -1`) by `step`, clamped to min/max. */\r\n protected stepValue(direction: 1 | -1): void {\r\n if (this.isNotEditable()) return;\r\n\r\n const step = this.step() ?? DEFAULT_STEP;\r\n const current = this.numericValue() ?? this.min() ?? 0;\r\n let next = roundToStep(current + direction * step, step);\r\n\r\n const min = this.min();\r\n const max = this.max();\r\n if (min !== null) next = Math.max(next, min);\r\n if (max !== null) next = Math.min(next, max);\r\n\r\n this.value.set(String(next));\r\n this._onChange(next);\r\n }\r\n\r\n /**\r\n * Clears the field and notifies any attached form.\r\n *\r\n * The value written to the form control has to match what `onInput` writes when the user\r\n * empties the field by hand — `null` for a number field, `''` otherwise. Emitting `''` for a\r\n * number field put a string into a control typed `number | null`, which then failed\r\n * `Validators.min`-style checks and round-tripped the wrong type to the server.\r\n */\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.value.set('');\r\n this._onChange(this.isNumberField() ? null : '');\r\n this._onTouched();\r\n }\r\n\r\n onFocus(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n onBlur(): void {\r\n this.isFocused.set(false);\r\n this._onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-input-wrapper gog-contained-layout\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-input-wrapper--icon-start]=\"hasIconStart()\"\r\n [class.gog-input-wrapper--icon-end]=\"hasIconEnd() || hasSpinButtons()\"\r\n [class.gog-input-wrapper--spin-clear]=\"hasSpinAndClear()\"\r\n [class.gog-input-wrapper--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-input-wrapper--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-input-wrapper--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-input-wrapper--floated]=\"isFloatLabelFloated()\"\r\n>\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-input__label\" [attr.for]=\"resolvedInputId()\">{{ label() }}</label>\r\n }\r\n <div class=\"gog-input__field-container\">\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-input__label gog-input__label--float\" [attr.for]=\"resolvedInputId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n @if (addonStart()) {\r\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--start gog-input__addon\">\r\n <ng-content select=\"[gogInputAddonStart]\" />\r\n </span>\r\n } @else 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 [class.gog-input__field--spin-hidden]=\"isNumberField()\"\r\n [attr.id]=\"resolvedInputId()\"\r\n [type]=\"effectiveType()\"\r\n [attr.name]=\"name() || null\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [value]=\"value()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"readonly()\"\r\n [autocomplete]=\"effectiveAutocomplete()\"\r\n [attr.min]=\"min()\"\r\n [attr.max]=\"max()\"\r\n [attr.step]=\"step()\"\r\n [attr.maxlength]=\"maxlength()\"\r\n [attr.minlength]=\"minlength()\"\r\n [attr.pattern]=\"pattern() || null\"\r\n [attr.inputmode]=\"inputMode()\"\r\n [attr.spellcheck]=\"spellcheck()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <!--\r\n A password field's built-in show/hide toggle owns the end slot: it is the only control\r\n that reveals the value, so a projected addon must not be able to displace it.\r\n -->\r\n @if (hasSpinButtons()) {\r\n <span class=\"gog-input__spin\">\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__spin-btn gog-input__spin-btn--up\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"resolvedIncrementLabel()\"\r\n [disabled]=\"isDisabled() || isAtMax()\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"stepValue(1)\"\r\n >\r\n <gog-icon name=\"chevron-up\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__spin-btn gog-input__spin-btn--down\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"resolvedDecrementLabel()\"\r\n [disabled]=\"isDisabled() || isAtMin()\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"stepValue(-1)\"\r\n >\r\n <gog-icon name=\"chevron-down\" />\r\n </button>\r\n </span>\r\n }\r\n <!--\r\n The clear button sits outside the stepper's `@if` rather than in an `@else` branch: on a\r\n number field the two have to coexist, and the stepper owns the field's right edge while\r\n the clear button shifts left of it (`--spin-clear` on the wrapper widens the gutter). It\r\n still outranks a projected addon or a decorative end icon — those share one slot with it\r\n and only get it when there is nothing to clear.\r\n -->\r\n @if (showClear() && !isPasswordField()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__icon gog-inline-center gog-input__icon--end gog-input__icon--action gog-input__clear\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n } @else if (!hasSpinButtons()) {\r\n @if (addonEnd() && !isPasswordField()) {\r\n <span class=\"gog-input__icon gog-inline-center gog-input__icon--end gog-input__addon\">\r\n <ng-content select=\"[gogInputAddonEnd]\" />\r\n </span>\r\n } @else 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 }\r\n </div>\r\n @if (visibleError()) {\r\n <span class=\"gog-input__error\" [attr.id]=\"errorId()\" role=\"alert\">{{ visibleError() }}</span>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n computed,\r\n DoCheck,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GogClearableState } from '../../shared/clearable-state';\r\nimport { GogFloatLabelState } from '../../shared/float-label-state';\r\nimport { GogFloatLabelVariant, GogSize, GogTextareaResize } from '../../shared/types';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_SIZE: GogSize = 'md';\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\n/** Matches the native `<textarea>`'s own out-of-the-box behaviour. */\r\nconst DEFAULT_RESIZE: GogTextareaResize = 'vertical';\r\nconst DEFAULT_CLEAR_LABEL = 'Clear';\r\n\r\n@Component({\r\n selector: 'gog-textarea',\r\n imports: [IconComponent],\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 /**\r\n * See `GogErrorDisplay`. Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to\r\n * `'manual'` — matching every other control in the library.\r\n */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\r\n readonly name = input('');\r\n /**\r\n * The `<textarea>`'s `id`. Left unset, the field generates one — see\r\n * `gog-inputfield`'s own `inputId` for why that is the default rather than an opt-in.\r\n */\r\n readonly inputId = input('');\r\n readonly disabled = input(false);\r\n /**\r\n * Native `readonly` — see `gog-inputfield`'s own `readonly` for how it differs from\r\n * `disabled`. Suppresses the clear button while on.\r\n */\r\n readonly readonly = input(false);\r\n /** Unset, falls back to `GOG_CONFIG.control.size`, then to `'md'`. */\r\n readonly size = input<GogSize | undefined>(undefined);\r\n /** Native `rows` attribute, controlling the field's initial height. */\r\n readonly rows = input(4);\r\n /** Native `maxlength`. Unset (`null`), no limit is applied. */\r\n readonly maxlength = input<number | null>(null);\r\n /** Native `minlength`. Unset (`null`), no minimum is applied. */\r\n readonly minlength = input<number | null>(null);\r\n /** Native `spellcheck`. Unset (`null`), the browser's own default applies. */\r\n readonly spellcheck = input<boolean | null>(null);\r\n /**\r\n * Which direction(s) the field's own drag handle resizes it in — matches the native CSS\r\n * `resize` value space (`'vertical'`, `'horizontal'`, `'both'`, `'none'`). Unset, falls back\r\n * to `GOG_CONFIG.textarea.resize`, then to `'vertical'`, matching a plain `<textarea>`. The\r\n * handle itself is restyled to be more visible than the browser's default glyph; `'none'`\r\n * removes it entirely.\r\n */\r\n readonly resize = input<GogTextareaResize | undefined>(undefined);\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 * Whether to offer a clear button once the field has text. Unset, falls back to\r\n * `GOG_CONFIG.control.clearable`, then to `false`.\r\n */\r\n readonly clearable = input<boolean | undefined>(undefined);\r\n /** Accessible name for the clear button. Unset, falls back to `GOG_CONFIG.labels.clear`. */\r\n readonly clearAriaLabel = input<string | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.variant`, then to `'none'` (off). */\r\n readonly floatLabel = input<GogFloatLabelVariant | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.floatLabel.showPlaceholder`, then to `false`. */\r\n readonly floatLabelShowPlaceholder = input<boolean | undefined>(undefined);\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 globalConfig = inject(GOG_CONFIG);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly cvaDisabled = signal(false);\r\n /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */\r\n protected readonly resolvedSize = computed(() =>\r\n resolveConfigured(this.size(), this.globalConfig.control?.size, DEFAULT_SIZE),\r\n );\r\n protected readonly resolvedResize = computed(() =>\r\n resolveConfigured(this.resize(), this.globalConfig.textarea?.resize, DEFAULT_RESIZE),\r\n );\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n /** Set from `(focus)`/`(blur)` on the `<textarea>` — see `onFocus`/`onBlur`. */\r\n protected readonly isFocused = signal(false);\r\n\r\n private readonly fieldRef = viewChild.required<ElementRef<HTMLTextAreaElement>>('field');\r\n /**\r\n * Width of the textarea's own scrollbar, published so the clear button can clear it.\r\n *\r\n * It has to be measured: the width is platform- and settings-dependent (0 on overlay\r\n * scrollbars, ~15-19px on classic ones), and it only exists once the content overflows. The\r\n * pure-CSS alternative, `scrollbar-gutter: stable`, reserves the gutter even when the field\r\n * isn't scrolling, which shifts the resting layout of every textarea.\r\n */\r\n protected readonly scrollbarWidth = signal(0);\r\n /**\r\n * How far the field's own right/bottom edge currently sits from its container's — 0 unless\r\n * the user has dragged the resize handle to make the field narrower/shorter than its\r\n * container. The resize grip is anchored to the container (a `<textarea>` can't reliably\r\n * host `::after`), so without this it stays put at the container's original corner instead\r\n * of following the field's own as it's resized.\r\n */\r\n protected readonly resizeInsetRight = signal(0);\r\n protected readonly resizeInsetBottom = signal(0);\r\n\r\n /**\r\n * The single size modifier, replacing one `[class.gog-input-wrapper--<size>]` binding per size.\r\n * Empty for `'md'`: that is this component's default size and has no modifier rule of its own — every `gog-input-wrapper--*` chain bottoms out at it.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.resolvedSize() === 'md' ? '' : `gog-input-wrapper--${this.resolvedSize()}`,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /** Disabled and read-only both refuse edits — see `gog-inputfield`. */\r\n protected readonly isNotEditable = computed(() => this.isDisabled() || this.readonly());\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedClearLabel = computed(() =>\r\n resolveConfigured(this.clearAriaLabel(), this.globalConfig.labels?.clear, DEFAULT_CLEAR_LABEL),\r\n );\r\n protected readonly hasError = this.errorState.hasError;\r\n protected readonly visibleError = this.errorState.visibleError;\r\n\r\n /** Fallback id, generated once per instance — see `resolvedInputId`. */\r\n private readonly autoId = nextGogControlId('gog-textarea');\r\n /** The consumer's `inputId` when given, otherwise the generated one. Never empty. */\r\n protected readonly resolvedInputId = computed(() => this.inputId() || this.autoId);\r\n /** Non-null only while the error element is actually rendered — see `gog-inputfield`. */\r\n protected readonly errorId = computed(() =>\r\n this.visibleError() ? `${this.resolvedInputId()}-error` : null,\r\n );\r\n\r\n private readonly floatLabelState = new GogFloatLabelState(\r\n this.floatLabel,\r\n this.floatLabelShowPlaceholder,\r\n this.placeholder,\r\n this.isFocused,\r\n // \"Has content\" for a textarea is simply a non-empty value.\r\n computed(() => this.value() !== ''),\r\n this.globalConfig,\r\n );\r\n\r\n private readonly clearableState = new GogClearableState(\r\n this.clearable,\r\n computed(() => this.value() !== ''),\r\n this.isNotEditable,\r\n this.globalConfig,\r\n () => false,\r\n );\r\n /** Whether to render the clear button right now — see `GogClearableState`. */\r\n protected readonly showClear = this.clearableState.isVisible;\r\n\r\n protected readonly resolvedFloatLabel = this.floatLabelState.variant;\r\n protected readonly isFloatLabelActive = this.floatLabelState.isActive;\r\n protected readonly isFloatLabelFloated = this.floatLabelState.isFloated;\r\n protected readonly effectivePlaceholder = this.floatLabelState.effectivePlaceholder;\r\n\r\n private _onChange: (val: string) => void = () => {};\r\n private _onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n // Re-measured after every render: the scrollbar appears and disappears as the content grows\r\n // past the visible rows, and `rows`/`size` can change it too.\r\n afterRenderEffect(() => {\r\n const el = this.fieldRef().nativeElement;\r\n // touch the value so this re-runs as the content changes\r\n this.value();\r\n this.scrollbarWidth.set(el.offsetWidth - el.clientWidth);\r\n });\r\n\r\n // Tracks manual drags of the resize handle — see `resizeInsetRight`/`resizeInsetBottom`.\r\n // A plain `afterRenderEffect` can't see this: dragging the handle doesn't touch any\r\n // Angular-owned state, so nothing would ever re-run it; a `ResizeObserver` is the only\r\n // thing that actually notices the field's own box changing size.\r\n afterNextRender(() => {\r\n const el = this.fieldRef().nativeElement;\r\n const container = el.parentElement as HTMLElement;\r\n // Not implemented by jsdom (so: absent in unit tests) and by very old browsers, which\r\n // then simply keep the field glued to the container's own corner, as before this input.\r\n if (typeof ResizeObserver === 'undefined') return;\r\n\r\n const measure = () => {\r\n this.resizeInsetRight.set(Math.max(0, container.clientWidth - el.offsetWidth));\r\n this.resizeInsetBottom.set(Math.max(0, container.clientHeight - el.offsetHeight));\r\n };\r\n const observer = new ResizeObserver(measure);\r\n observer.observe(el);\r\n this.destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n\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 /** Clears the field and notifies any attached form, then returns focus to the input. */\r\n protected clearValue(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.value.set('');\r\n this._onChange('');\r\n this._onTouched();\r\n }\r\n\r\n onFocus(): void {\r\n this.isFocused.set(true);\r\n }\r\n\r\n onBlur(): void {\r\n this.isFocused.set(false);\r\n this._onTouched();\r\n }\r\n}\r\n","<div\r\n class=\"gog-input-wrapper gog-contained-layout\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-input-wrapper--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-input-wrapper--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-input-wrapper--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-input-wrapper--floated]=\"isFloatLabelFloated()\"\r\n>\r\n @if (label() && resolvedFloatLabel() === 'none') {\r\n <label class=\"gog-input__label\" [attr.for]=\"resolvedInputId()\">{{ label() }}</label>\r\n }\r\n <div\r\n class=\"gog-input__field-container\"\r\n [class.gog-input__field-container--resizable]=\"resolvedResize() !== 'none' && !isDisabled()\"\r\n [style.--gog-textarea-resize-inset-right.px]=\"resizeInsetRight()\"\r\n [style.--gog-textarea-resize-inset-bottom.px]=\"resizeInsetBottom()\"\r\n >\r\n @if (label() && isFloatLabelActive()) {\r\n <label class=\"gog-input__label gog-input__label--float\" [attr.for]=\"resolvedInputId()\">{{\r\n label()\r\n }}</label>\r\n }\r\n <textarea\r\n #field\r\n class=\"gog-input__field gog-textarea__field\"\r\n [class.gog-input__field--error]=\"hasError()\"\r\n [class.gog-textarea__field--resize-vertical]=\"resolvedResize() === 'vertical'\"\r\n [class.gog-textarea__field--resize-horizontal]=\"resolvedResize() === 'horizontal'\"\r\n [class.gog-textarea__field--resize-both]=\"resolvedResize() === 'both'\"\r\n [class.gog-textarea__field--resize-none]=\"resolvedResize() === 'none'\"\r\n [attr.id]=\"resolvedInputId()\"\r\n [attr.name]=\"name() || null\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [rows]=\"rows()\"\r\n [value]=\"value()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"readonly()\"\r\n [attr.maxlength]=\"maxlength()\"\r\n [attr.minlength]=\"minlength()\"\r\n [attr.spellcheck]=\"spellcheck()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n ></textarea>\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-input__clear gog-textarea__clear gog-inline-center\"\r\n [style.--gog-textarea-scrollbar-width.px]=\"scrollbarWidth()\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n </div>\r\n @if (visibleError()) {\r\n <span class=\"gog-input__error\" [attr.id]=\"errorId()\" role=\"alert\">{{ visibleError() }}</span>\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 {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n TemplateRef,\r\n computed,\r\n contentChild,\r\n inject,\r\n input,\r\n} 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/**\r\n * Custom markup for the tag's leading icon:\r\n *\r\n * ```html\r\n * <ng-template gogTagIcon><my-icon /></ng-template>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogTagIcon]' })\r\nexport class GogTagIconDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\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 /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogTagIcon>` into the component instead. Removed in 21.5.0.\r\n */\r\n readonly iconTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogTagIcon` template; wins over the deprecated `iconTemplate` input. */\r\n protected readonly iconSlot = contentChild(GogTagIconDirective);\r\n readonly fullWidth = input(false);\r\n\r\n protected readonly hasIcon = computed(\r\n () => !!this.iconSlot() || 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()) {\r\n <gog-icon\r\n class=\"gog-tag__icon\"\r\n [ariaHidden]=\"true\"\r\n [name]=\"iconName() ?? 'info'\"\r\n [template]=\"iconSlot()?.templateRef ?? iconTemplate()\"\r\n />\r\n}\r\n\r\n<span class=\"gog-tag__content\">\r\n <ng-content></ng-content>\r\n</span>\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/**\r\n * @deprecated since 21.2.2 (2026-07-30) — use `GogDropdownOption` instead. Removed in 21.4.0.\r\n */\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 host: {\r\n // Only bites when the control has opted out of full width; otherwise the container decides.\r\n '[style.--gog-select-min-width]': 'minWidth()',\r\n },\r\n})\r\nexport class SelectComponent<\r\n TOption = GogDropdownOption,\r\n TValue = string | number | null,\r\n> extends GogDropdownBase<TValue, TOption> {\r\n readonly inputId = input('');\r\n\r\n /**\r\n * Two-way bindable selected value: `[(value)]=\"signal\"`.\r\n *\r\n * Carries whatever `optionValue` resolves to — an id by default, or the option object itself\r\n * when `optionValue` is `null`. `TValue` is inferred from the signal you bind, so a\r\n * `WritableSignal<string | null>` keeps typing exactly as before.\r\n */\r\n readonly value = model<TValue>(null as TValue);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n /** A cleared select is `null`, whatever `TValue` the consumer bound. */\r\n protected readonly emptyValue = null as TValue;\r\n protected readonly optionClass = 'gog-select__option';\r\n protected readonly triggerClass = 'gog-select__control';\r\n /** Opt-in: a select had no clear affordance before 21.3.0. */\r\n protected readonly clearableByDefault = false;\r\n protected readonly sizeBlockClass = 'gog-select';\r\n protected readonly panelBlockClass = 'gog-select__dropdown';\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 () =>\r\n this.options().find((option) => this.sameValue(this.valueOf(option), this.value())) ?? null,\r\n );\r\n protected readonly selectedLabel = computed(() => {\r\n const option = this.selectedOption();\r\n return option === null ? '' : this.labelOf(option);\r\n });\r\n protected readonly hasFloatValue = computed(() => this.value() != null);\r\n\r\n protected isSelected(option: TOption): boolean {\r\n return this.sameValue(this.valueOf(option), this.value());\r\n }\r\n\r\n protected selectOption(option: TOption, event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.isOptionDisabled(option)) return;\r\n\r\n this.commitValue(this.valueOf(option) as TValue);\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--clearable]=\"showClear()\"\r\n [class]=\"sizeClass()\"\r\n [class.gog-select--disabled]=\"isDisabled()\"\r\n [class.gog-select--open]=\"isOpen()\"\r\n [class.gog-select--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-select--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-select--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-select--floated]=\"isFloatLabelFloated()\"\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() && resolvedFloatLabel() === 'none') {\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 @if (label() && isFloatLabelActive()) {\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 gog-select__label--float\" [id]=\"labelId()\">{{\r\n label()\r\n }}</label>\r\n }\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 (focus)=\"onFocusIn()\"\r\n (blur)=\"onFocusOut()\"\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 {{ selectedLabel() || effectivePlaceholder() }}\r\n </span>\r\n\r\n <span class=\"gog-select__chevron\" aria-hidden=\"true\">\r\n <gog-icon\r\n [template]=\"chevronSlot()?.templateRef ?? chevronTemplate()\"\r\n name=\"chevron-down\"\r\n />\r\n </span>\r\n </button>\r\n\r\n <!--\r\n A sibling of the trigger, not a child: `.gog-select__control` is a <button>, and nesting\r\n one button inside another is invalid HTML. It is positioned over the trigger's right edge\r\n by the stylesheet, which also reserves room for it so it never covers the value text.\r\n -->\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-select__clear gog-inline-center\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <gog-icon name=\"close\" />\r\n </button>\r\n }\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\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]=\"!resolvedAppendToBody() && dropdownDirectionState() === 'up'\"\r\n [class.gog-select__dropdown--portal]=\"resolvedAppendToBody()\"\r\n [class]=\"panelSizeClass()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"resolvedAppendToBody() ? resolvedPanelWidth() : null\"\r\n [style.min-width]=\"resolvedAppendToBody() ? resolvedPanelMinWidth() : null\"\r\n [style.max-height]=\"resolvedAppendToBody() ? 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 @if (resolvedFilter() && resolvedFilterPosition() === 'top') {\r\n <div class=\"gog-select__filter gog-select__filter--top\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-select__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\r\n }\r\n <gog-scroll\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n class=\"gog-select__scroll\"\r\n >\r\n @if (visibleOptions().length === 0) {\r\n <p class=\"gog-select__empty\">{{ filterEmptyMessage() }}</p>\r\n }\r\n @for (option of visibleOptions(); track valueOf(option)) {\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)\"\r\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\r\n [class.gog-select__option--selected]=\"isSelected(option)\"\r\n [class.gog-select__option--disabled]=\"isOptionDisabled(option)\"\r\n (click)=\"selectOption(option, $event)\"\r\n (keydown)=\"onOptionKeydown($event)\"\r\n >\r\n @if (optionSlot(); as slot) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n slot.templateRef;\r\n context: optionContext(option, isSelected(option))\r\n \"\r\n />\r\n } @else {\r\n <span class=\"gog-select__option-mark\" aria-hidden=\"true\">\r\n @if (isSelected(option)) {\r\n <gog-icon name=\"check\" />\r\n }\r\n </span>\r\n <span class=\"gog-select__option-label\">{{ labelOf(option) }}</span>\r\n }\r\n </button>\r\n }\r\n </gog-scroll>\r\n @if (resolvedFilter() && resolvedFilterPosition() === 'bottom') {\r\n <div class=\"gog-select__filter gog-select__filter--bottom\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-select__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, TemplateRef, computed, input } from '@angular/core';\r\n\r\nimport { ScrollComponent } from '../scroll/scroll.component';\r\nimport { GogTooltipSide } from '../../shared/tooltip-position';\r\n\r\n/**\r\n * The visible bubble, created on demand by `GogTooltipOverlay` and moved into `document.body`.\r\n * Not exported from `public-api.ts` — `[gogTooltip]` is the only public surface; this is an\r\n * implementation detail of how it renders, same relationship as `gog-select`'s panel template\r\n * to `GogDropdownOverlay`.\r\n *\r\n * Content always renders inside `gog-scroll` (capped at `--gog-tooltip-max-height`), the same\r\n * pattern `gog-dialog`'s body and `gog-select`'s panel already use — see\r\n * `styling.instructions.md`'s \"Scrollable content\" for why every internal scroll region in\r\n * this library goes through it instead of a raw `overflow: auto`. Content shorter than the\r\n * cap is unaffected: `gog-scroll` only ever shows a track once its content actually overflows.\r\n */\r\n@Component({\r\n selector: 'gog-tooltip-bubble',\r\n imports: [NgTemplateOutlet, ScrollComponent],\r\n templateUrl: './tooltip-bubble.component.html',\r\n styleUrl: './tooltip-bubble.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'gog-tooltip',\r\n role: 'tooltip',\r\n '[attr.id]': 'bubbleId()',\r\n '[class.gog-tooltip--top]': \"side() === 'top'\",\r\n '[class.gog-tooltip--bottom]': \"side() === 'bottom'\",\r\n '[class.gog-tooltip--left]': \"side() === 'left'\",\r\n '[class.gog-tooltip--right]': \"side() === 'right'\",\r\n '[class.gog-tooltip--visible]': 'visible()',\r\n '[class]': 'extraClass()',\r\n '[style.top.px]': 'top()',\r\n '[style.left.px]': 'left()',\r\n '[style.z-index]': 'zIndex()',\r\n },\r\n})\r\nexport class GogTooltipBubbleComponent {\r\n readonly bubbleId = input<string>('');\r\n readonly content = input<string | TemplateRef<unknown> | null>(null);\r\n readonly side = input<GogTooltipSide>('top');\r\n readonly top = input(0);\r\n readonly left = input(0);\r\n /** Toggled a frame after insertion so the enter transition has a 0 -> 1 opacity to run. */\r\n readonly visible = input(false);\r\n /**\r\n * Explicit stacking order resolved by the directive from the trigger's inherited\r\n * `--gog-tooltip-z` (see `resolveTooltipZIndex`), or null to leave it to the stylesheet's\r\n * `var(--gog-tooltip-z)`. Needed only because the bubble is moved to `document.body` and\r\n * so no longer inherits a `--gog-tooltip-z` a dialog panel raised on itself — same reason\r\n * `gog-select`'s appended panel resolves its own `z-index` instead of trusting the cascade.\r\n */\r\n readonly zIndex = input<number | null>(null);\r\n /**\r\n * Extra class(es) from the directive's `gogTooltipClass`, applied straight to the bubble.\r\n * The bubble sits in `document.body`, outside any scoped ancestor a consumer might set a\r\n * `--gog-tooltip-*` override on, so a class targeting the bubble directly is the only way\r\n * to restyle one specific tooltip instance — see `styling.instructions.md`'s \"Panels\r\n * rendered outside the component subtree\".\r\n */\r\n readonly extraClass = input('');\r\n\r\n protected readonly templateContent = computed(() => {\r\n const value = this.content();\r\n return value instanceof TemplateRef ? value : null;\r\n });\r\n protected readonly textContent = computed(() => {\r\n const value = this.content();\r\n return typeof value === 'string' ? value : '';\r\n });\r\n}\r\n","<gog-scroll\r\n class=\"gog-tooltip__scroll\"\r\n size=\"thin\"\r\n [focusable]=\"false\"\r\n overscrollBehavior=\"contain\"\r\n>\r\n @if (templateContent(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\r\n } @else {\r\n {{ textContent() }}\r\n }\r\n</gog-scroll>\r\n<span class=\"gog-tooltip__arrow\" aria-hidden=\"true\"></span>\r\n","import { ComponentRef, ViewContainerRef } from '@angular/core';\r\nimport { scopedOverlayTheme } from './overlay-theme';\r\n\r\nimport { GogTooltipBubbleComponent } from '../components/tooltip/tooltip-bubble.component';\r\n\r\n/**\r\n * Creates the tooltip bubble on demand and moves it into `document.body`, same reasoning\r\n * as `GogDropdownOverlay`: a `position: fixed` bubble needs to sit outside whatever\r\n * `overflow: hidden`/`transform` ancestors the trigger has, or it could get clipped or\r\n * mispositioned. Built on `ViewContainerRef.createComponent` + relocating the resulting\r\n * node rather than `GogDropdownOverlay`'s `ApplicationRef` + `TemplateRef` approach,\r\n * because the bubble's content is dynamic per-directive-instance data (a string or\r\n * `TemplateRef` set at open time), not a `<ng-template>` declared in some component's own\r\n * markup — moving the node after `createComponent` is the same portal technique, it just\r\n * starts from a component type instead of a template.\r\n */\r\nexport class GogTooltipOverlay {\r\n private componentRef: ComponentRef<GogTooltipBubbleComponent> | null = null;\r\n\r\n constructor(\r\n private readonly viewContainerRef: ViewContainerRef,\r\n private readonly document: Document,\r\n ) {}\r\n\r\n get isAttached(): boolean {\r\n return this.componentRef !== null;\r\n }\r\n\r\n get bubbleElement(): HTMLElement | null {\r\n return (this.componentRef?.location.nativeElement as HTMLElement | undefined) ?? null;\r\n }\r\n\r\n attach(themeSource: Element | null): ComponentRef<GogTooltipBubbleComponent> {\r\n this.detach();\r\n\r\n this.componentRef = this.viewContainerRef.createComponent(GogTooltipBubbleComponent);\r\n const el = this.componentRef.location.nativeElement as HTMLElement;\r\n\r\n // Only for a genuinely scoped theme — see `scopedOverlayTheme`.\r\n const theme = scopedOverlayTheme(themeSource, this.document.documentElement);\r\n if (theme) {\r\n el.setAttribute('data-theme', theme);\r\n }\r\n\r\n this.document.body.appendChild(el);\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n\r\n return this.componentRef;\r\n }\r\n\r\n detach(): void {\r\n this.componentRef?.destroy();\r\n this.componentRef = null;\r\n }\r\n}\r\n","import { GogTooltipPosition } from './types';\r\n\r\nexport type GogTooltipSide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\nexport interface GogTooltipTargetRect {\r\n top: number;\r\n bottom: number;\r\n left: number;\r\n right: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface GogTooltipSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface GogTooltipViewport {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface GogTooltipPlacement {\r\n side: GogTooltipSide;\r\n top: number;\r\n left: number;\r\n}\r\n\r\nconst DEFAULT_GAP = 8;\r\nconst DEFAULT_VIEWPORT_PADDING = 8;\r\n\r\nfunction spaceFor(\r\n side: GogTooltipSide,\r\n target: GogTooltipTargetRect,\r\n viewport: GogTooltipViewport,\r\n): number {\r\n switch (side) {\r\n case 'top':\r\n return target.top;\r\n case 'bottom':\r\n return viewport.height - target.bottom;\r\n case 'left':\r\n return target.left;\r\n case 'right':\r\n return viewport.width - target.right;\r\n }\r\n}\r\n\r\nfunction fits(\r\n side: GogTooltipSide,\r\n target: GogTooltipTargetRect,\r\n bubble: GogTooltipSize,\r\n viewport: GogTooltipViewport,\r\n gap: number,\r\n viewportPadding: number,\r\n): boolean {\r\n const needed =\r\n (side === 'top' || side === 'bottom' ? bubble.height : bubble.width) + gap + viewportPadding;\r\n return spaceFor(side, target, viewport) >= needed;\r\n}\r\n\r\nconst OPPOSITE: Record<GogTooltipSide, GogTooltipSide> = {\r\n top: 'bottom',\r\n bottom: 'top',\r\n left: 'right',\r\n right: 'left',\r\n};\r\n\r\n/**\r\n * Picks which side the bubble renders on. `'auto'` tries top, bottom, right, left in that\r\n * order — top-first matches the conventional tooltip default — and falls back to whichever\r\n * side has the most room if the bubble doesn't fully fit anywhere. An explicit side flips to\r\n * its opposite when it has no room but the opposite does, same as `resolveDropdownDirection`\r\n * does for up/down; unlike that helper, a request for a specific side is honoured as-is\r\n * (no flip) whenever it fits, since the caller asked for that side deliberately.\r\n */\r\nexport function resolveTooltipSide(\r\n position: GogTooltipPosition,\r\n target: GogTooltipTargetRect,\r\n bubble: GogTooltipSize,\r\n viewport: GogTooltipViewport,\r\n gap = DEFAULT_GAP,\r\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\r\n): GogTooltipSide {\r\n if (position !== 'auto') {\r\n if (fits(position, target, bubble, viewport, gap, viewportPadding)) return position;\r\n const opposite = OPPOSITE[position];\r\n return fits(opposite, target, bubble, viewport, gap, viewportPadding) ? opposite : position;\r\n }\r\n\r\n const preferenceOrder: GogTooltipSide[] = ['top', 'bottom', 'right', 'left'];\r\n const fitting = preferenceOrder.find((side) =>\r\n fits(side, target, bubble, viewport, gap, viewportPadding),\r\n );\r\n if (fitting) return fitting;\r\n\r\n return preferenceOrder.reduce((best, side) =>\r\n spaceFor(side, target, viewport) > spaceFor(best, target, viewport) ? side : best,\r\n );\r\n}\r\n\r\n/**\r\n * Resolves the bubble's side and its `position: fixed` top/left, centered on the target's\r\n * midpoint along the cross axis and clamped so it never renders past the viewport edge —\r\n * the centering can push it there for a target near a corner.\r\n */\r\nexport function resolveTooltipPlacement(\r\n position: GogTooltipPosition,\r\n target: GogTooltipTargetRect,\r\n bubble: GogTooltipSize,\r\n viewport: GogTooltipViewport,\r\n gap = DEFAULT_GAP,\r\n viewportPadding = DEFAULT_VIEWPORT_PADDING,\r\n): GogTooltipPlacement {\r\n const side = resolveTooltipSide(position, target, bubble, viewport, gap, viewportPadding);\r\n\r\n const centerX = target.left + target.width / 2;\r\n const centerY = target.top + target.height / 2;\r\n\r\n let top: number;\r\n let left: number;\r\n\r\n switch (side) {\r\n case 'top':\r\n top = target.top - gap - bubble.height;\r\n left = centerX - bubble.width / 2;\r\n break;\r\n case 'bottom':\r\n top = target.bottom + gap;\r\n left = centerX - bubble.width / 2;\r\n break;\r\n case 'left':\r\n top = centerY - bubble.height / 2;\r\n left = target.left - gap - bubble.width;\r\n break;\r\n case 'right':\r\n top = centerY - bubble.height / 2;\r\n left = target.right + gap;\r\n break;\r\n }\r\n\r\n const maxLeft = Math.max(viewportPadding, viewport.width - bubble.width - viewportPadding);\r\n const maxTop = Math.max(viewportPadding, viewport.height - bubble.height - viewportPadding);\r\n left = Math.min(Math.max(left, viewportPadding), maxLeft);\r\n top = Math.min(Math.max(top, viewportPadding), maxTop);\r\n\r\n return { side, top, left };\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ComponentRef,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n ViewContainerRef,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { GOG_CONFIG } from '../../shared/config';\r\nimport { GogTooltipOverlay } from '../../shared/tooltip-overlay';\r\nimport {\r\n GogTooltipTargetRect,\r\n GogTooltipViewport,\r\n resolveTooltipPlacement,\r\n} from '../../shared/tooltip-position';\r\nimport { GogTooltipPosition } from '../../shared/types';\r\nimport { GogTooltipBubbleComponent } from './tooltip-bubble.component';\r\n\r\nconst DEFAULT_SHOW_DELAY = 300;\r\nconst DEFAULT_HIDE_DELAY = 100;\r\nconst DEFAULT_POSITION: GogTooltipPosition = 'auto';\r\nconst DEFAULT_GAP = 8;\r\nconst DEFAULT_Z_INDEX = 400;\r\nconst VIEWPORT_PADDING = 8;\r\n\r\nlet nextUid = 0;\r\n\r\n/**\r\n * Adds a hover/focus tooltip to any element — a `gog-*` component's host tag or a plain\r\n * native one — without that element needing to know anything about it:\r\n * `<button gogTooltip=\"Save changes\">` or `<gog-chip [gogTooltip]=\"hint\">` both just work,\r\n * since this only ever reads the host `ElementRef` and never assumes what created it.\r\n *\r\n * The bubble itself is a separate component (`GogTooltipBubbleComponent`) created on demand\r\n * and moved into `document.body` via `GogTooltipOverlay` — see that file for why a portal is\r\n * necessary here (clipping/position ancestors) and why it isn't built on `GogDropdownOverlay`.\r\n */\r\n@Directive({\r\n selector: '[gogTooltip]',\r\n host: {\r\n '[attr.aria-describedby]': 'describedById()',\r\n '(mouseenter)': 'onPointerEnter()',\r\n '(mouseleave)': 'onPointerLeave()',\r\n '(focusin)': 'onFocusIn()',\r\n '(focusout)': 'onFocusOut()',\r\n '(keydown.escape)': 'onEscape()',\r\n },\r\n})\r\nexport class GogTooltipDirective {\r\n /** The hint text, or a `TemplateRef` for richer content. Empty/null shows nothing. */\r\n readonly gogTooltip = input<string | TemplateRef<unknown> | null>(null);\r\n /** Unset, falls back to `GOG_CONFIG.tooltip.position`, then to `'auto'`. */\r\n readonly gogTooltipPosition = input<GogTooltipPosition | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.tooltip.showDelay`, then to `300` (ms). */\r\n readonly gogTooltipShowDelay = input<number | undefined>(undefined);\r\n /** Unset, falls back to `GOG_CONFIG.tooltip.hideDelay`, then to `100` (ms). */\r\n readonly gogTooltipHideDelay = input<number | undefined>(undefined);\r\n readonly gogTooltipDisabled = input(false);\r\n /**\r\n * Extra class(es) applied to the bubble itself, for restyling one specific tooltip\r\n * instance. The bubble is appended to `document.body`, so a `--gog-tooltip-*` override\r\n * scoped to an ancestor (anything short of `:root`) never reaches it — a class targeting\r\n * the bubble directly, e.g. `.my-tooltip { --gog-tooltip-bg: gold; }`, is what does.\r\n */\r\n readonly gogTooltipClass = input('');\r\n\r\n private readonly elRef = inject(ElementRef<HTMLElement>);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private readonly uid = `gog-tooltip-${++nextUid}`;\r\n private readonly overlay = new GogTooltipOverlay(this.viewContainerRef, this.document);\r\n\r\n private readonly isVisible = signal(false);\r\n protected readonly describedById = computed(() => (this.isVisible() ? this.uid : null));\r\n\r\n private readonly resolvedPosition = computed(\r\n () => this.gogTooltipPosition() ?? this.globalConfig.tooltip?.position ?? DEFAULT_POSITION,\r\n );\r\n private readonly resolvedShowDelay = computed(\r\n () => this.gogTooltipShowDelay() ?? this.globalConfig.tooltip?.showDelay ?? DEFAULT_SHOW_DELAY,\r\n );\r\n private readonly resolvedHideDelay = computed(\r\n () => this.gogTooltipHideDelay() ?? this.globalConfig.tooltip?.hideDelay ?? DEFAULT_HIDE_DELAY,\r\n );\r\n\r\n private activeRef: ComponentRef<GogTooltipBubbleComponent> | null = null;\r\n private showTimer: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\r\n private repositionFrame: number | null = null;\r\n private readonly onReflow = () => this.scheduleReposition();\r\n /**\r\n * Bound to the bubble itself (see `show()`) so moving the pointer off the trigger and\r\n * onto the bubble — to read more of it, or to scroll one tall enough to need it — cancels\r\n * the pending hide instead of racing it; leaving the bubble then re-queues the same hide\r\n * delay leaving the trigger would. WCAG 2.1 SC 1.4.13 \"hoverable\" requires exactly this:\r\n * hover-triggered content has to stay visible while the pointer is over the content, not\r\n * just the trigger.\r\n */\r\n private readonly onBubbleMouseEnter = () => this.cancelTimers();\r\n private readonly onBubbleMouseLeave = () => this.queueHide();\r\n\r\n constructor() {\r\n this.destroyRef.onDestroy(() => this.cleanup());\r\n }\r\n\r\n protected onPointerEnter(): void {\r\n this.queueShow();\r\n }\r\n\r\n protected onPointerLeave(): void {\r\n this.queueHide();\r\n }\r\n\r\n protected onFocusIn(): void {\r\n this.queueShow();\r\n }\r\n\r\n protected onFocusOut(): void {\r\n this.queueHide();\r\n }\r\n\r\n protected onEscape(): void {\r\n if (!this.isVisible()) return;\r\n this.cancelTimers();\r\n this.hide();\r\n }\r\n\r\n private queueShow(): void {\r\n if (!this.isBrowser || this.gogTooltipDisabled() || !this.gogTooltip() || this.isVisible()) {\r\n return;\r\n }\r\n this.cancelTimers();\r\n this.showTimer = setTimeout(() => {\r\n this.showTimer = null;\r\n this.show();\r\n }, this.resolvedShowDelay());\r\n }\r\n\r\n private queueHide(): void {\r\n this.cancelTimers();\r\n if (!this.isVisible()) return;\r\n this.hideTimer = setTimeout(() => {\r\n this.hideTimer = null;\r\n this.hide();\r\n }, this.resolvedHideDelay());\r\n }\r\n\r\n private cancelTimers(): void {\r\n if (this.showTimer !== null) {\r\n clearTimeout(this.showTimer);\r\n this.showTimer = null;\r\n }\r\n if (this.hideTimer !== null) {\r\n clearTimeout(this.hideTimer);\r\n this.hideTimer = null;\r\n }\r\n }\r\n\r\n private show(): void {\r\n const content = this.gogTooltip();\r\n if (!this.isBrowser || !content || this.isVisible()) return;\r\n\r\n const hostEl = this.elRef.nativeElement;\r\n const ref = this.overlay.attach(hostEl);\r\n this.activeRef = ref;\r\n this.isVisible.set(true);\r\n\r\n const bubbleEl = this.overlay.bubbleElement;\r\n bubbleEl?.addEventListener('mouseenter', this.onBubbleMouseEnter);\r\n bubbleEl?.addEventListener('mouseleave', this.onBubbleMouseLeave);\r\n\r\n ref.setInput('bubbleId', this.uid);\r\n ref.setInput('content', content);\r\n ref.setInput('zIndex', this.resolveZIndex(hostEl));\r\n ref.setInput('extraClass', this.gogTooltipClass());\r\n // setInput alone doesn't flush to the DOM (that happens on the next change-detection\r\n // pass) — without this, applyPlacement below would measure the bubble before its real\r\n // content ever rendered, i.e. an empty box a few px wide/tall instead of its actual\r\n // size, which is exactly what put the bubble in the wrong place.\r\n ref.changeDetectorRef.detectChanges();\r\n this.applyPlacement(ref, hostEl);\r\n\r\n // Set on a later frame so the initial (opacity: 0, scale: 0.96) state the stylesheet\r\n // starts from actually paints before flipping to --visible — flipping both in the same\r\n // tick would let the browser coalesce them into one style recalc with no transition.\r\n requestAnimationFrame(() => {\r\n if (this.activeRef === ref) {\r\n ref.setInput('visible', true);\r\n }\r\n });\r\n\r\n window.addEventListener('scroll', this.onReflow, { passive: true, capture: true });\r\n window.addEventListener('resize', this.onReflow, { passive: true });\r\n }\r\n\r\n private hide(): void {\r\n if (!this.isVisible()) return;\r\n\r\n this.isVisible.set(false);\r\n this.activeRef = null;\r\n this.overlay.detach();\r\n\r\n window.removeEventListener('scroll', this.onReflow, { capture: true });\r\n window.removeEventListener('resize', this.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 private scheduleReposition(): void {\r\n if (this.repositionFrame !== null || !this.activeRef) return;\r\n\r\n this.repositionFrame = requestAnimationFrame(() => {\r\n this.repositionFrame = null;\r\n if (this.activeRef) {\r\n this.applyPlacement(this.activeRef, this.elRef.nativeElement);\r\n }\r\n });\r\n }\r\n\r\n private applyPlacement(ref: ComponentRef<GogTooltipBubbleComponent>, hostEl: HTMLElement): void {\r\n const bubbleEl = this.overlay.bubbleElement;\r\n if (!bubbleEl) return;\r\n\r\n const targetRect: GogTooltipTargetRect = hostEl.getBoundingClientRect();\r\n // offsetWidth/Height, not getBoundingClientRect: the bubble's enter transition scales\r\n // it down to 0.96 until `visible` flips, and a transform changes the *painted* rect\r\n // measured by getBoundingClientRect without changing layout — offset* reads the\r\n // untransformed layout box, which is the size to position against.\r\n const bubbleSize = { width: bubbleEl.offsetWidth, height: bubbleEl.offsetHeight };\r\n const viewport: GogTooltipViewport = { width: window.innerWidth, height: window.innerHeight };\r\n const gap = readPxToken(hostEl, '--gog-tooltip-gap', DEFAULT_GAP);\r\n\r\n const placement = resolveTooltipPlacement(\r\n this.resolvedPosition(),\r\n targetRect,\r\n bubbleSize,\r\n viewport,\r\n gap,\r\n VIEWPORT_PADDING,\r\n );\r\n\r\n ref.setInput('side', placement.side);\r\n ref.setInput('top', placement.top);\r\n ref.setInput('left', placement.left);\r\n ref.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /**\r\n * A tooltip appended to `document.body` loses whatever `--gog-tooltip-z` an ancestor\r\n * (e.g. a `gog-dialog` panel, which raises it so nested overlays stack above the dialog)\r\n * declared, since `body` isn't part of that subtree anymore — same problem\r\n * `GogDropdownBase.resolvePanelZIndex` solves for dropdown panels, resolved here from the\r\n * trigger while it's still in its real position in the tree, before the bubble moves out.\r\n */\r\n private resolveZIndex(hostEl: HTMLElement): number {\r\n const inherited = getComputedStyle(hostEl).getPropertyValue('--gog-tooltip-z').trim();\r\n if (inherited) return readNumber(inherited, DEFAULT_Z_INDEX);\r\n\r\n for (let node: HTMLElement | null = hostEl; node; node = node.parentElement) {\r\n const declared = node.style.getPropertyValue('--gog-tooltip-z').trim();\r\n if (declared) return readNumber(declared, DEFAULT_Z_INDEX);\r\n }\r\n\r\n return DEFAULT_Z_INDEX;\r\n }\r\n\r\n private cleanup(): void {\r\n this.cancelTimers();\r\n this.hide();\r\n }\r\n}\r\n\r\nfunction readNumber(raw: string, fallback: number): number {\r\n const parsed = Number.parseFloat(raw);\r\n return Number.isFinite(parsed) ? parsed : fallback;\r\n}\r\n\r\nfunction readPxToken(el: HTMLElement, token: string, fallback: number): number {\r\n return readNumber(getComputedStyle(el).getPropertyValue(token), fallback);\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n TemplateRef,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n contentChild,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { resolveConfigured } from '../../shared/config';\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\nimport { GogTooltipDirective } from '../tooltip/tooltip.directive';\r\n\r\n/**\r\n * @deprecated since 21.2.2 (2026-07-30) — use `GogDropdownOption` instead. Removed in 21.4.0.\r\n */\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/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG.labels` supplies one. */\r\nconst DEFAULT_SELECT_ALL_LABEL = 'Select all';\r\nconst DEFAULT_CLEAR_ALL_LABEL = 'Clear';\r\n\r\n/**\r\n * Custom markup for the multiselect's clear button:\r\n *\r\n * ```html\r\n * <ng-template gogMultiselectClearIcon><my-icon /></ng-template>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogMultiselectClearIcon]' })\r\nexport class GogMultiselectClearIconDirective {\r\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\r\n\r\n@Component({\r\n selector: 'gog-multiselect',\r\n imports: [ButtonComponent, IconComponent, NgTemplateOutlet, ScrollComponent, GogTooltipDirective],\r\n templateUrl: './multiselect.component.html',\r\n styleUrl: './multiselect.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // Only bites when the control has opted out of full width; otherwise the container decides.\r\n '[style.--gog-multiselect-min-width]': 'minWidth()',\r\n },\r\n})\r\nexport class MultiselectComponent<\r\n TOption = GogDropdownOption,\r\n TValue = string | number,\r\n> extends GogDropdownBase<TValue[], TOption> {\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 /**\r\n * Visible text of the select-all button. Unset, falls back to `GOG_CONFIG.labels.selectAll`,\r\n * then to `'Select all'`.\r\n */\r\n readonly selectAllLabel = input<string | undefined>(undefined);\r\n /**\r\n * Visible text of the clear-all button — the one inside the panel, next to select-all. The\r\n * trigger's own clear icon is `clearAriaLabel`. Unset, falls back to\r\n * `GOG_CONFIG.labels.clearAll`, then to `'Clear'`.\r\n */\r\n readonly clearAllLabel = input<string | undefined>(undefined);\r\n /**\r\n * @deprecated since 21.3.0 (2026-08-07) — project an `<ng-template gogMultiselectClearIcon>` into the component instead. Removed in 21.5.0.\r\n */\r\n readonly clearIconTemplate = input<TemplateRef<unknown> | null>(null);\r\n /** Projected `gogMultiselectClearIcon` template; wins over the deprecated `clearIconTemplate` input. */\r\n protected readonly clearIconSlot = contentChild(GogMultiselectClearIconDirective);\r\n\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedSelectAllLabel = computed(() =>\r\n resolveConfigured(\r\n this.selectAllLabel(),\r\n this.globalConfig.labels?.selectAll,\r\n DEFAULT_SELECT_ALL_LABEL,\r\n ),\r\n );\r\n protected readonly resolvedClearAllLabel = computed(() =>\r\n resolveConfigured(\r\n this.clearAllLabel(),\r\n this.globalConfig.labels?.clearAll,\r\n DEFAULT_CLEAR_ALL_LABEL,\r\n ),\r\n );\r\n\r\n /**\r\n * Two-way bindable selection: `[(value)]=\"signal\"`.\r\n *\r\n * Each entry is whatever `optionValue` resolves to — an id by default, or the option objects\r\n * themselves when `optionValue` is `null`.\r\n */\r\n readonly value = model<TValue[]>([]);\r\n\r\n protected readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTpl');\r\n protected readonly emptyValue: TValue[] = [];\r\n protected readonly optionClass = 'gog-ms__option';\r\n protected readonly triggerClass = 'gog-ms';\r\n /**\r\n * On by default: this control shipped a clear button before `clearable` existed, so the\r\n * default preserves it. Set `[clearable]=\"false\"` to drop it.\r\n */\r\n protected readonly clearableByDefault = true;\r\n protected readonly sizeBlockClass = 'gog-ms-wrapper';\r\n protected readonly panelBlockClass = 'gog-ms__dropdown';\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 /** Labels of the current selection, driven off the selected *options* so it works whatever\r\n * `optionValue` resolves to. */\r\n readonly selectedLabels = computed(() =>\r\n this.options()\r\n .filter((option) => this.isSelected(option))\r\n .map((option) => this.labelOf(option)),\r\n );\r\n\r\n /** Comma-joined selection — the full text, before any overflow trimming. */\r\n readonly selectedNames = computed(() => this.selectedLabels().join(', '));\r\n\r\n private readonly valueRef = viewChild<ElementRef<HTMLElement>>('valueEl');\r\n private readonly resizeDestroyRef = inject(DestroyRef);\r\n /** Width available to the summary text, tracked so the split recomputes as the field resizes. */\r\n private readonly valueWidth = signal(0);\r\n private readonly valueFont = signal('');\r\n\r\n /**\r\n * Splits the selection into what fits on one line and a `+N` remainder.\r\n *\r\n * Measured with `canvas.measureText` rather than by rendering candidates and reading back\r\n * layout: the greedy fit is O(n) over the labels and costs no reflow, where a DOM-based probe\r\n * would thrash layout on every keystroke-sized change.\r\n */\r\n protected readonly summary = computed<{ text: string; hidden: number }>(() => {\r\n const labels = this.selectedLabels();\r\n const width = this.valueWidth();\r\n const font = this.valueFont();\r\n if (labels.length === 0) return { text: '', hidden: 0 };\r\n if (!this.isBrowser || width === 0 || font === '') {\r\n return { text: labels.join(', '), hidden: 0 };\r\n }\r\n\r\n const measure = measureWith(font);\r\n // Room the \"+N\" badge will need; reserved up front so adding it can't cause a second overflow.\r\n const reserve = labels.length > 1 ? measure(` +${labels.length}`) : 0;\r\n let text = '';\r\n let fitted = 0;\r\n for (const label of labels) {\r\n const next = fitted === 0 ? label : `${text}, ${label}`;\r\n const budget = fitted === labels.length - 1 ? width : width - reserve;\r\n if (fitted > 0 && measure(next) > budget) break;\r\n text = next;\r\n fitted += 1;\r\n }\r\n\r\n // Always show at least one label, even if it has to be ellipsised by CSS.\r\n if (fitted === 0) return { text: labels[0], hidden: labels.length - 1 };\r\n return { text, hidden: labels.length - fitted };\r\n });\r\n protected readonly hasFloatValue = computed(() => this.value().length > 0);\r\n\r\n protected isSelected(option: TOption): boolean {\r\n const target = this.valueOf(option);\r\n return this.value().some((selected) => this.sameValue(selected, target));\r\n }\r\n\r\n protected toggleOption(option: TOption, event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (this.isOptionDisabled(option)) return;\r\n\r\n const target = this.valueOf(option);\r\n const current = this.value();\r\n this.commitValue(\r\n this.isSelected(option)\r\n ? current.filter((selected) => !this.sameValue(selected, target))\r\n : [...current, target as TValue],\r\n );\r\n }\r\n\r\n /** Acts on the *visible* options, so \"select all\" under an active filter means what it says. */\r\n protected selectAll(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.commitValue(\r\n this.visibleOptions()\r\n .filter((option) => !this.isOptionDisabled(option))\r\n .map((option) => this.valueOf(option) as TValue),\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 constructor() {\r\n super();\r\n // Measured entirely from a ResizeObserver rather than an after-render hook: the field is\r\n // usually full width, so the space available to the summary changes when the *container*\r\n // resizes — something Angular never renders for. `observe()` also fires once immediately,\r\n // which covers the initial measurement, so one mechanism handles both.\r\n afterNextRender(() => {\r\n const el = this.valueRef()?.nativeElement;\r\n if (!el || typeof ResizeObserver === 'undefined') return;\r\n\r\n const read = () => {\r\n this.valueWidth.set(el.clientWidth);\r\n this.valueFont.set(getComputedStyle(el).font);\r\n };\r\n const observer = new ResizeObserver(read);\r\n observer.observe(el);\r\n read();\r\n this.resizeDestroyRef.onDestroy(() => observer.disconnect());\r\n });\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/** One shared 2D context; creating a canvas per measurement is what makes this approach slow. */\r\nlet measureContext: CanvasRenderingContext2D | null = null;\r\n\r\nfunction measureWith(font: string): (text: string) => number {\r\n measureContext ??= document.createElement('canvas').getContext('2d');\r\n const ctx = measureContext;\r\n if (!ctx) return () => 0;\r\n ctx.font = font;\r\n return (text: string) => ctx.measureText(text).width;\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]=\"sizeClass()\"\r\n [class.gog-ms-wrapper--float-in]=\"resolvedFloatLabel() === 'in'\"\r\n [class.gog-ms-wrapper--float-on]=\"resolvedFloatLabel() === 'on'\"\r\n [class.gog-ms-wrapper--float-over]=\"resolvedFloatLabel() === 'over'\"\r\n [class.gog-ms-wrapper--floated]=\"isFloatLabelFloated()\"\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() && resolvedFloatLabel() === 'none') {\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 [gogTooltip]=\"summary().hidden > 0 ? selectedListTpl : null\"\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 (focus)=\"onFocusIn()\"\r\n (blur)=\"onFocusOut()\"\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 @if (label() && isFloatLabelActive()) {\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 gog-ms__label--float\" [id]=\"labelId()\">{{ label() }}</label>\r\n }\r\n <span #valueEl class=\"gog-ms__value\" [class.gog-ms__value--placeholder]=\"!selectedNames()\">\r\n {{ summary().text || effectivePlaceholder() }}\r\n </span>\r\n <!--\r\n Only what fits is shown; the rest is collapsed into a count. The tooltip is the way to read\r\n the whole selection back, so it is bound only while something is actually hidden.\r\n -->\r\n @if (summary().hidden > 0) {\r\n <span class=\"gog-ms__overflow\" aria-hidden=\"true\">+{{ summary().hidden }}</span>\r\n }\r\n\r\n <span class=\"gog-ms__actions\">\r\n <span class=\"gog-ms__arrow\" [class.gog-ms__arrow--up]=\"isOpen()\" aria-hidden=\"true\">\r\n <gog-icon\r\n [template]=\"chevronSlot()?.templateRef ?? chevronTemplate()\"\r\n [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\"\r\n />\r\n </span>\r\n @if (showClear()) {\r\n <button\r\n type=\"button\"\r\n class=\"gog-ms__clear gog-inline-center\"\r\n (click)=\"clearValue($event)\"\r\n [attr.aria-label]=\"resolvedClearLabel()\"\r\n >\r\n <gog-icon [template]=\"clearIconSlot()?.templateRef ?? clearIconTemplate()\" name=\"close\" />\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n\r\n @if (isOpen() && !resolvedAppendToBody()) {\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]=\"!resolvedAppendToBody() && dropdownDirectionState() === 'up'\"\r\n [class.gog-ms__dropdown--portal]=\"resolvedAppendToBody()\"\r\n [class]=\"panelSizeClass()\"\r\n [style.top.px]=\"resolvedAppendToBody() ? panelPlacement()?.top : null\"\r\n [style.left.px]=\"resolvedAppendToBody() ? panelPlacement()?.left : null\"\r\n [style.width]=\"resolvedAppendToBody() ? resolvedPanelWidth() : null\"\r\n [style.min-width]=\"resolvedAppendToBody() ? resolvedPanelMinWidth() : null\"\r\n [style.max-height]=\"resolvedAppendToBody() ? 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 @if (resolvedFilter() && resolvedFilterPosition() === 'top') {\r\n <div class=\"gog-ms__filter gog-ms__filter--top\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-ms__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\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 @if (visibleOptions().length === 0) {\r\n <p class=\"gog-ms__empty\">{{ filterEmptyMessage() }}</p>\r\n }\r\n @for (option of visibleOptions(); track valueOf(option)) {\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)\"\r\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\r\n [class.gog-ms__option--selected]=\"isSelected(option)\"\r\n [class.gog-ms__option--disabled]=\"isOptionDisabled(option)\"\r\n (click)=\"toggleOption(option, $event)\"\r\n (keydown)=\"onOptionKeydown($event)\"\r\n >\r\n @if (optionSlot(); as slot) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n slot.templateRef;\r\n context: optionContext(option, isSelected(option))\r\n \"\r\n />\r\n } @else {\r\n <span class=\"gog-ms__option-mark\" aria-hidden=\"true\">\r\n <gog-icon [name]=\"isSelected(option) ? 'checkbox-checked' : 'checkbox'\" />\r\n </span>\r\n {{ labelOf(option) }}\r\n }\r\n </button>\r\n }\r\n </div>\r\n </gog-scroll>\r\n @if (resolvedFilter() && resolvedFilterPosition() === 'bottom') {\r\n <div class=\"gog-ms__filter gog-ms__filter--bottom\">\r\n <input\r\n type=\"text\"\r\n class=\"gog-ms__filter-input\"\r\n [placeholder]=\"filterPlaceholder()\"\r\n [value]=\"filterQuery()\"\r\n (input)=\"onFilterInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.escape)=\"close(); focusTrigger()\"\r\n />\r\n </div>\r\n }\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)\">{{\r\n resolvedSelectAllLabel()\r\n }}</gog-button>\r\n <gog-button variant=\"ghost\" size=\"sm\" (click)=\"clearAll($event)\">{{\r\n resolvedClearAllLabel()\r\n }}</gog-button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Full selection, shown as a tooltip when the trigger can only fit part of it. -->\r\n<ng-template #selectedListTpl>\r\n <ul class=\"gog-ms__tooltip-list\">\r\n @for (label of selectedLabels(); track label) {\r\n <li>{{ label }}</li>\r\n }\r\n </ul>\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 { nextGogControlId } from '../../shared/control-id';\r\nimport { GogErrorState, type GogErrorDisplay } from '../../shared/error-state';\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\n\r\n/** Built-in default, used when neither the instance input nor `GOG_CONFIG` supplies one. */\r\nconst DEFAULT_ERROR_DISPLAY: GogErrorDisplay = 'manual';\r\nimport { GogSliderOrientation, GogSliderRange } from '../../shared/types';\r\n\r\n/** How many digits after the decimal point `step` prints, e.g. `0.25` → `2`, `5` → `0`. */\r\nfunction decimalPlaces(step: number): number {\r\n const str = String(step);\r\n const dot = str.indexOf('.');\r\n return dot === -1 ? 0 : str.length - dot - 1;\r\n}\r\n\r\n/**\r\n * Character count of `value` formatted with `decimals` fraction digits — the widest a\r\n * number in `[min, max]` at this `step` can ever print, since digit count only grows moving\r\n * away from zero (see `valueDisplayChars` below for why `min`/`max` alone are enough to\r\n * bound every value in between).\r\n */\r\nfunction digitLength(value: number, decimals: number): number {\r\n const sign = value < 0 ? 1 : 0;\r\n const intLen = String(Math.trunc(Math.abs(value))).length;\r\n const fraction = decimals > 0 ? decimals + 1 : 0; // +1 for the decimal point itself\r\n return sign + intLen + fraction;\r\n}\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 '[style.--range-start-pos]': 'rangeStartPos()',\r\n '[style.--range-end-pos]': 'rangeEndPos()',\r\n '[style.--value-chars]': 'valueDisplayChars()',\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 protected readonly inputId = nextGogControlId('gog-slider');\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 /** Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to `'manual'`. */\r\n readonly errorDisplay = input<GogErrorDisplay | undefined>(undefined);\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 * Ignored when `orientation` is `'vertical'`: a vertical slider's own width is its\r\n * thickness, not its length, so it always sizes to fit its content. Its length instead\r\n * comes from `--gog-slider-vertical-length` (default `160px`), same idea as\r\n * `--gog-slider-auto-width` for the horizontal auto-width case.\r\n */\r\n readonly fullWidth = input(true);\r\n /**\r\n * `'horizontal'` (default) or `'vertical'`. The developer picks per instance — there is\r\n * no global default for this, since it's a layout decision tied to where the slider sits,\r\n * not a house style. Backed by a native `<input type=\"range\">` rotated via `writing-mode`,\r\n * so dragging, touch and keyboard (Up/Down as well as Left/Right) all keep working exactly\r\n * as they do horizontally.\r\n */\r\n readonly orientation = input<GogSliderOrientation>('horizontal');\r\n\r\n /**\r\n * Switches the slider to two-thumb mode for picking a *range* of values instead of a\r\n * single one. When on, use `[(rangeValue)]` instead of `[(value)]` — the two are mutually\r\n * exclusive; `value`/`writeValue` are ignored while this is `true`, and vice versa.\r\n */\r\n readonly range = input(false);\r\n /**\r\n * Accessible name for the start (lower) thumb in `range` mode. Falls back to `'Minimum'`,\r\n * prefixed with `label()` when one is set (e.g. `'Price Minimum'`) — a shared `<label>`\r\n * can't be associated with two inputs via `for`, so each thumb needs its own name.\r\n */\r\n readonly startAriaLabel = input('');\r\n /** Accessible name for the end (upper) thumb in `range` mode. Falls back to `'Maximum'`. */\r\n readonly endAriaLabel = input('');\r\n /**\r\n * Disables only the start (lower) thumb in `range` mode — e.g. to pin a range's floor\r\n * while letting the consumer still raise or lower its ceiling. ORed with `disabled`\r\n * (either one disables it), never overrides it: `disabled` still means \"both thumbs off\".\r\n * Ignored outside `range` mode, where there's only one thumb and `disabled` already covers\r\n * it. Unlike `disabled`, this never applies the whole-control `.gog-slider--disabled`\r\n * dimming/`pointer-events: none` — only the one thumb goes inert, both visually (its own\r\n * dot dims) and functionally (the native input's own `disabled` attribute takes it out of\r\n * the tab order), so the other thumb stays fully usable.\r\n */\r\n readonly startDisabled = input(false);\r\n /** Disables only the end (upper) thumb in `range` mode. Mirrors `startDisabled`. */\r\n readonly endDisabled = input(false);\r\n\r\n /** Two-way bindable value: `[(value)]=\"signal\"`. Ignored when `range` is `true`. */\r\n readonly value = model<number>(0);\r\n /** Two-way bindable `{ start, end }` pair: `[(rangeValue)]=\"signal\"`. Used only when `range` is `true`. */\r\n readonly rangeValue = model<GogSliderRange>({ start: 0, end: 100 });\r\n\r\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\r\n private readonly cvaDisabled = signal(false);\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n private readonly resolvedErrorDisplay = computed(() =>\r\n resolveConfigured(\r\n this.errorDisplay(),\r\n this.globalConfig.control?.errorDisplay,\r\n DEFAULT_ERROR_DISPLAY,\r\n ),\r\n );\r\n private readonly errorState = new GogErrorState(\r\n this.errorMessage,\r\n this.resolvedErrorDisplay,\r\n this.ngControl,\r\n );\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\r\n /**\r\n * `isDisabled()` also covers `cvaDisabled()` — a `[formControl]`'s own `.disable()`, which\r\n * (being one FormControl backing one `rangeValue`) always speaks for both thumbs at once\r\n * and has no way to target just one. `startDisabled`/`endDisabled` are the only route to a\r\n * one-sided disable, and only make sense in `range` mode.\r\n */\r\n protected readonly isStartDisabled = computed(() => this.isDisabled() || this.startDisabled());\r\n protected readonly isEndDisabled = computed(() => this.isDisabled() || this.endDisabled());\r\n /**\r\n * Drives the whole-control `.gog-slider--disabled` class (dimming + `pointer-events: none`\r\n * over the whole track). Applying that class off a one-sided `isStartDisabled()`/\r\n * `isEndDisabled()` would also block pointer/touch input to the *other*, still-enabled\r\n * thumb — `pointer-events: none` on an ancestor cuts off every descendant, not just the\r\n * disabled one — so in `range` mode this only fires once *both* sides are disabled. A\r\n * still-disabled single thumb stays inert on its own regardless (its native `disabled`\r\n * attribute already takes it out of the tab order and stops it from firing events).\r\n */\r\n protected readonly isFullyDisabled = computed(() =>\r\n this.range() ? this.isStartDisabled() && this.isEndDisabled() : this.isDisabled(),\r\n );\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 * `rangeValue()` clamped to `[min, max]`, swapping the pair back in order if a consumer\r\n * writes `start > end` directly (e.g. via `writeValue`/a FormControl) — dragging or\r\n * keyboard-nudging a thumb past the other can never produce that, since\r\n * onRangeStartInput/onRangeEndInput already clamp against each other there.\r\n */\r\n protected readonly clampedRange = computed(() => this.clampRange(this.rangeValue()));\r\n\r\n private percentFor(value: number): number {\r\n const span = this.max() - this.min();\r\n if (span === 0) return 0;\r\n return ((value - this.min()) / span) * 100;\r\n }\r\n\r\n private clampRange(value: GogSliderRange): GogSliderRange {\r\n const lo = this.min();\r\n const hi = this.max();\r\n const start = Math.min(hi, Math.max(lo, value.start));\r\n const end = Math.min(hi, Math.max(lo, value.end));\r\n return start <= end ? { start, end } : { start: end, end: start };\r\n }\r\n\r\n protected readonly fillPercent = computed(() => this.percentFor(this.clampedValue()));\r\n protected readonly rangeStartPercent = computed(() => this.percentFor(this.clampedRange().start));\r\n protected readonly rangeEndPercent = computed(() => this.percentFor(this.clampedRange().end));\r\n\r\n protected readonly thumbPos = computed(() => `${this.fillPercent()}%`);\r\n protected readonly fillScale = computed(() => this.fillPercent() / 100);\r\n protected readonly rangeStartPos = computed(() => `${this.rangeStartPercent()}%`);\r\n protected readonly rangeEndPos = computed(() => `${this.rangeEndPercent()}%`);\r\n protected readonly rangeDisplayValue = computed(() => {\r\n const { start, end } = this.clampedRange();\r\n return `${start} – ${end}`;\r\n });\r\n /**\r\n * Reserved width for `.gog-slider__value`, in `ch`. Without this the span sizes to\r\n * whatever the *current* value happens to print as, so it visibly resizes on every drag —\r\n * harmless when `fullWidth` absorbs the wiggle (the default for horizontal), but a vertical\r\n * slider is only ever as wide as its content (see the `fit-content` comment in the\r\n * stylesheet), so there the whole control jitters in width as you drag, and the header row\r\n * being what's regrowing/shrinking tugs the min/max labels below along with it even though\r\n * their own text never changes. Sized from `min()`/`max()` rather than the live value:\r\n * digit count only grows moving away from zero, so whichever endpoint prints the most\r\n * characters is already the worst case for every value in between.\r\n */\r\n protected readonly valueDisplayChars = computed(() => {\r\n const decimals = decimalPlaces(this.step());\r\n const chars = Math.max(digitLength(this.min(), decimals), digitLength(this.max(), decimals));\r\n return this.range() ? chars * 2 + 3 : chars; // +3 for the \" – \" separator\r\n });\r\n protected readonly startInputAriaLabel = computed(() => {\r\n const base = this.startAriaLabel() || 'Minimum';\r\n return this.label() ? `${this.label()} ${base}` : base;\r\n });\r\n protected readonly endInputAriaLabel = computed(() => {\r\n const base = this.endAriaLabel() || 'Maximum';\r\n return this.label() ? `${this.label()} ${base}` : base;\r\n });\r\n protected readonly isVertical = computed(() => this.orientation() === 'vertical');\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 /** Fires with a plain `number` normally, or a `GogSliderRange` while `range()` is `true`. */\r\n private onChange: (val: number | GogSliderRange) => 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 | GogSliderRange): void {\r\n if (this.range()) {\r\n const next = (val as GogSliderRange | null) ?? { start: this.min(), end: this.max() };\r\n this.rangeValue.set(this.clampRange(next));\r\n } else {\r\n const next = (val as number | null) ?? this.min();\r\n this.value.set(Math.min(this.max(), Math.max(this.min(), next)));\r\n }\r\n }\r\n\r\n registerOnChange(fn: (val: number | GogSliderRange) => 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 /**\r\n * Start (lower) thumb in `range` mode. Both native inputs keep the slider's global\r\n * `min()`/`max()` (see the template's comment on why), so crossing prevention happens\r\n * entirely here via `Math.min(current.end, ...)` rather than through a narrowed native\r\n * `max` attribute — which also means the browser will happily keep dragging this input's\r\n * own raw `.value` past `current.end` even once we've clamped the logical value. Writing\r\n * the clamped result back to `input.value` directly (rather than trusting the `[value]`\r\n * binding to do it) matters because that binding no-ops once the *next* clamped result\r\n * matches what Angular itself last wrote — it has no way to know the raw DOM value has\r\n * since drifted out from under it via native dragging.\r\n */\r\n onRangeStartInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const raw = Number(input.value);\r\n const current = this.clampedRange();\r\n const start = Math.min(current.end, Math.max(this.min(), raw));\r\n const next: GogSliderRange = { start, end: current.end };\r\n\r\n input.value = String(start);\r\n this.rangeValue.set(next);\r\n this.onChange(next);\r\n }\r\n\r\n /** End (upper) thumb in `range` mode. Mirrors `onRangeStartInput`. */\r\n onRangeEndInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const raw = Number(input.value);\r\n const current = this.clampedRange();\r\n const end = Math.max(current.start, Math.min(this.max(), raw));\r\n const next: GogSliderRange = { start: current.start, end };\r\n\r\n input.value = String(end);\r\n\r\n this.rangeValue.set(next);\r\n this.onChange(next);\r\n }\r\n}\r\n","<div\r\n class=\"gog-slider gog-contained-layout\"\r\n [class.gog-slider--disabled]=\"isFullyDisabled()\"\r\n [class.gog-slider--thumb-hidden]=\"!showThumb()\"\r\n [class.gog-slider--vertical]=\"isVertical()\"\r\n [class.gog-slider--range]=\"range()\"\r\n>\r\n <div class=\"gog-slider__header\">\r\n @if (label()) {\r\n <label [attr.for]=\"range() ? null : inputId\" class=\"gog-slider__label\">{{ label() }}</label>\r\n }\r\n\r\n @if (showValue()) {\r\n <span class=\"gog-slider__value\">{{ range() ? rangeDisplayValue() : clampedValue() }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"gog-slider__track-container\">\r\n <div class=\"gog-slider__track\">\r\n <div class=\"gog-slider__fill\"></div>\r\n </div>\r\n\r\n @if (showThumb()) {\r\n @if (range()) {\r\n <div\r\n class=\"gog-slider__thumb gog-slider__thumb--start\"\r\n [class.gog-slider__thumb--disabled]=\"isStartDisabled()\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n <div\r\n class=\"gog-slider__thumb gog-slider__thumb--end\"\r\n [class.gog-slider__thumb--disabled]=\"isEndDisabled()\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n } @else {\r\n <div class=\"gog-slider__thumb\" aria-hidden=\"true\"></div>\r\n }\r\n }\r\n\r\n @if (range()) {\r\n <!--\r\n Both inputs' `min`/`max` stay pinned to the slider's own global min()/max(), even\r\n though each thumb can't actually reach past the other one (enforced in\r\n onRangeStart/EndInput instead). Narrowing a native input's own `min`/`max` attribute\r\n to the other thumb's value would seem like free crossing-prevention, but it also\r\n shifts where the browser positions that input's own (invisible) native thumb inside\r\n its box — off of the box's own start()/end() percentage that --range-start-pos /\r\n --range-end-pos and this file's custom thumb divs use, so the two would drift apart\r\n and the real, clickable native thumb would stop lining up with what's drawn on\r\n screen. `aria-valuemin`/`aria-valuemax` below are fine to narrow dynamically —\r\n they're just announced text, not something the browser positions anything from.\r\n -->\r\n <input\r\n [id]=\"inputId\"\r\n class=\"gog-slider__input gog-slider__input--start\"\r\n type=\"range\"\r\n [attr.aria-label]=\"startInputAriaLabel()\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"clampedRange().end\"\r\n [attr.aria-valuenow]=\"clampedRange().start\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n [attr.aria-orientation]=\"isVertical() ? 'vertical' : null\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"clampedRange().start\"\r\n [disabled]=\"isStartDisabled()\"\r\n (input)=\"onRangeStartInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <input\r\n class=\"gog-slider__input gog-slider__input--end\"\r\n type=\"range\"\r\n [attr.aria-label]=\"endInputAriaLabel()\"\r\n [attr.aria-valuemin]=\"clampedRange().start\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuenow]=\"clampedRange().end\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n [attr.aria-orientation]=\"isVertical() ? 'vertical' : null\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"clampedRange().end\"\r\n [disabled]=\"isEndDisabled()\"\r\n (input)=\"onRangeEndInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"inputId\"\r\n class=\"gog-slider__input\"\r\n type=\"range\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || 'Slider'\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuenow]=\"clampedValue()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-describedby]=\"errorId()\"\r\n [attr.aria-orientation]=\"isVertical() ? 'vertical' : null\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"clampedValue()\"\r\n [disabled]=\"isDisabled()\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"gog-slider__range-labels\">\r\n <span>{{ min() }}</span>\r\n <span>{{ max() }}</span>\r\n </div>\r\n\r\n @if (hasError()) {\r\n <span class=\"gog-slider__error\" [attr.id]=\"errorId()\" role=\"alert\">\r\n {{ visibleError() }}\r\n </span>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n untracked,\r\n} from '@angular/core';\r\n\r\nimport { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { SelectComponent } from '../select/select.component';\r\nimport { GogPaginatorRangeMode, GogSize } from '../../shared/types';\r\n\r\n/** Built-in defaults, used when neither the instance input nor `GOG_CONFIG.labels` supplies one. */\r\nconst DEFAULT_PAGE_SIZE = 10;\r\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 30, 40, 50];\r\n/** Off by default: a paginator that silently grew a control would change every existing layout. */\r\nconst DEFAULT_SHOW_PAGE_SIZE_SELECT = false;\r\n\r\nconst DEFAULT_LABELS = {\r\n pagination: 'Pagination',\r\n previousPage: 'Previous page',\r\n nextPage: 'Next page',\r\n rowsPerPage: 'Rows per page',\r\n page: (page: number, isCurrent: boolean) =>\r\n isCurrent ? `Page ${page}, current page` : `Go to page ${page}`,\r\n};\r\n\r\n@Component({\r\n selector: 'gog-paginator',\r\n imports: [ButtonComponent, SelectComponent],\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]': 'resolvedAriaLabel()',\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 /**\r\n * How many pages there are. Ignored when `totalRecords` is given — see there.\r\n */\r\n readonly totalPages = input(1);\r\n /**\r\n * How many rows exist in total. Given this, the paginator computes the page count itself from\r\n * `pageSize`, which is what removes the `computed(() => Math.ceil(total / size))` a consumer\r\n * would otherwise have to write and keep in sync with the select below.\r\n *\r\n * `null` (the default) keeps the old contract: you tell it `totalPages` directly.\r\n */\r\n readonly totalRecords = input<number | null>(null);\r\n /**\r\n * Rows per page. Two-way bindable — `[(pageSize)]=\"size\"` — which is the whole point once\r\n * `showPageSizeSelect` is on: the select writes back through this, and nothing has to be\r\n * ferried between components by hand. `gog-table` binds its own `pageSize` model straight to\r\n * this one.\r\n */\r\n readonly pageSize = model(DEFAULT_PAGE_SIZE);\r\n /**\r\n * Whether to offer the rows-per-page select. Unset, falls back to\r\n * `GOG_CONFIG.paginator.showPageSizeSelect`, then to `false`.\r\n */\r\n readonly showPageSizeSelect = input<boolean | undefined>(undefined);\r\n /**\r\n * The choices the select offers. Unset, falls back to\r\n * `GOG_CONFIG.paginator.pageSizeOptions`, then to `[10, 20, 30, 40, 50]`.\r\n */\r\n readonly pageSizeOptions = input<number[] | undefined>(undefined);\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 /**\r\n * Accessible name of the `<nav>`. Unset, falls back to `GOG_CONFIG.labels.pagination`, then\r\n * to `'Pagination'`.\r\n */\r\n readonly ariaLabel = input<string | undefined>(undefined);\r\n\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n /** Instance input → `GOG_CONFIG.labels` → the built-in English default. */\r\n protected readonly resolvedAriaLabel = computed(() =>\r\n resolveConfigured(\r\n this.ariaLabel(),\r\n this.globalConfig.labels?.pagination,\r\n DEFAULT_LABELS.pagination,\r\n ),\r\n );\r\n /**\r\n * The two step buttons. Config-only: unlike the `<nav>` name, these say the same thing on\r\n * every paginator in an app, so a per-instance input would be dead weight.\r\n */\r\n protected readonly resolvedPreviousLabel = computed(() =>\r\n resolveConfigured(\r\n undefined,\r\n this.globalConfig.labels?.previousPage,\r\n DEFAULT_LABELS.previousPage,\r\n ),\r\n );\r\n protected readonly resolvedNextLabel = computed(() =>\r\n resolveConfigured(undefined, this.globalConfig.labels?.nextPage, DEFAULT_LABELS.nextPage),\r\n );\r\n /**\r\n * Names one page button. A method rather than a `computed`, since it takes the page number —\r\n * the formatter itself is resolved once and only re-read when the config object changes.\r\n */\r\n protected pageLabel(page: number): string {\r\n const format = this.globalConfig.labels?.page ?? DEFAULT_LABELS.page;\r\n return format(page, page === this.page());\r\n }\r\n\r\n protected readonly resolvedShowPageSizeSelect = computed(() =>\r\n resolveConfigured(\r\n this.showPageSizeSelect(),\r\n this.globalConfig.paginator?.showPageSizeSelect,\r\n DEFAULT_SHOW_PAGE_SIZE_SELECT,\r\n ),\r\n );\r\n protected readonly resolvedRowsPerPageLabel = computed(() =>\r\n resolveConfigured(undefined, this.globalConfig.labels?.rowsPerPage, DEFAULT_LABELS.rowsPerPage),\r\n );\r\n /**\r\n * The select takes `{ id, name }` objects because that is `GogDropdownOption`'s default shape —\r\n * `optionLabel`/`optionValue` accessors for a list of plain numbers would be more API than the\r\n * mapping saves. The current `pageSize` is included even when it is not one of the offered\r\n * options, so a programmatic `[pageSize]=\"15\"` shows 15 rather than an empty trigger.\r\n */\r\n protected readonly resolvedPageSizeOptions = computed(() => {\r\n const options = resolveConfigured(\r\n this.pageSizeOptions(),\r\n this.globalConfig.paginator?.pageSizeOptions,\r\n DEFAULT_PAGE_SIZE_OPTIONS,\r\n );\r\n const current = this.pageSize();\r\n const all = options.includes(current) ? options : [...options, current].sort((a, b) => a - b);\r\n return all.map((size) => ({ id: size, name: String(size) }));\r\n });\r\n\r\n /**\r\n * `totalRecords` when supplied, `totalPages` otherwise — every internal read goes through this\r\n * so the two inputs cannot disagree anywhere.\r\n */\r\n protected readonly resolvedTotalPages = computed(() => {\r\n const records = this.totalRecords();\r\n if (records === null) return Math.max(1, this.totalPages());\r\n return Math.max(1, Math.ceil(Math.max(0, records) / Math.max(1, this.pageSize())));\r\n });\r\n\r\n protected readonly pageNumbers = computed(() => {\r\n const total = this.resolvedTotalPages();\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 the page count 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 = this.resolvedTotalPages();\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 * A new page size invalidates the current page: \"page 5\" of 10-row pages is not \"page 5\" of\r\n * 50-row ones, and clamping alone would leave the user somewhere they did not ask to be.\r\n * Back to page 1, which is the only position that means the same thing at every size.\r\n * `untracked` so this reacts to the size and not to its own write.\r\n */\r\n let previousSize: number | null = null;\r\n effect(() => {\r\n const size = this.pageSize();\r\n // Guarded on an actual change, not on the effect running: the first run must leave an\r\n // initial `[page]=\"3\"` alone, and re-running for an unrelated dependency must not snap the\r\n // user back to page 1.\r\n if (previousSize !== null && previousSize !== size) {\r\n untracked(() => {\r\n if (this.page() !== 1) this.page.set(1);\r\n });\r\n }\r\n previousSize = size;\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.resolvedTotalPages()) 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 protected onPageSizeChange(size: number | null): void {\r\n if (size !== null) this.pageSize.set(size);\r\n }\r\n}\r\n","<gog-button\r\n variant=\"ghost\"\r\n [size]=\"size()\"\r\n [disabled]=\"disabled() || page() === 1\"\r\n [ariaLabel]=\"resolvedPreviousLabel()\"\r\n (gogClick)=\"prev()\"\r\n >‹</gog-button\r\n>\r\n\r\n@for (item of pageNumbers(); track $index) {\r\n @if (isNumber(item)) {\r\n <gog-button\r\n [size]=\"size()\"\r\n [variant]=\"item === page() ? 'primary' : 'ghost'\"\r\n [disabled]=\"disabled()\"\r\n [ariaLabel]=\"pageLabel(item)\"\r\n (gogClick)=\"goTo(item)\"\r\n >{{ item }}</gog-button\r\n >\r\n } @else {\r\n <span class=\"gog-paginator__ellipsis\">…</span>\r\n }\r\n}\r\n\r\n<gog-button\r\n variant=\"ghost\"\r\n [size]=\"size()\"\r\n [disabled]=\"disabled() || page() === resolvedTotalPages()\"\r\n [ariaLabel]=\"resolvedNextLabel()\"\r\n (gogClick)=\"next()\"\r\n >›</gog-button\r\n>\r\n\r\n@if (resolvedShowPageSizeSelect()) {\r\n <!--\r\n Bound with `[(pageSize)]`'s writable half, so choosing a size writes straight back through the\r\n model the consumer bound — there is no intermediate state to keep in sync. `fullWidth` off so\r\n the select sizes to its content instead of stretching the paginator row.\r\n\r\n A plain `@if`, not `@defer`, and that was measured rather than assumed: `@defer` does move\r\n `SelectComponent` out of this component's static `dependencies` and into\r\n `deferBlockDependencies`, but ng-packagr flattens the whole library into one FESM, so the\r\n deferred reference compiles to `Promise.resolve().then(() => select_component)` — a binding in\r\n the *same module*, not a dynamic `import()`. With no import boundary there is nothing for a\r\n bundler to split on and nothing it may drop, so the consumer ships exactly the same bytes,\r\n minus a placeholder and an SSR pop-in. Making this genuinely lazy needs secondary entry\r\n points (`@guildofgleks/ui/select`), which is a packaging decision, not a template one.\r\n -->\r\n <gog-select\r\n class=\"gog-paginator__page-size\"\r\n [options]=\"resolvedPageSizeOptions()\"\r\n [value]=\"pageSize()\"\r\n [disabled]=\"disabled()\"\r\n [fullWidth]=\"false\"\r\n [size]=\"size()\"\r\n [ariaLabel]=\"resolvedRowsPerPageLabel()\"\r\n (valueChange)=\"onPageSizeChange($event)\"\r\n />\r\n}\r\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, TemplateRef, contentChild, inject, input } from '@angular/core';\r\n\r\n/** Case-insensitive, numeric-aware (`\"item2\" < \"item10\"`) — the sensible default for text. */\r\nconst defaultCollator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\r\n\r\n/** Default comparator: locale-aware for strings via `Intl.Collator`, `<`/`>` otherwise. */\r\nexport function defaultCompare(a: unknown, b: unknown): number {\r\n if (typeof a === 'string' && typeof b === 'string') {\r\n return defaultCollator.compare(a, b);\r\n }\r\n if (a === b) return 0;\r\n return (a as number | string) < (b as number | string) ? -1 : 1;\r\n}\r\n\r\n/** Context handed to a `gogColumnBody` template. */\r\nexport interface GogColumnBodyContext<T> {\r\n /** The row object. */\r\n $implicit: T;\r\n /** Alias for `$implicit`, for templates that prefer naming it. */\r\n row: T;\r\n /** Index within the currently rendered page, not the whole data set. */\r\n index: number;\r\n /** The already-resolved cell value for this column's `field`. */\r\n value: unknown;\r\n}\r\n\r\n/** Context handed to a `gogColumnHeader` template. */\r\nexport interface GogColumnHeaderContext {\r\n /** The column's own `header` text, so a custom header can decorate rather than replace it. */\r\n $implicit: string;\r\n field: string;\r\n}\r\n\r\n/**\r\n * Custom cell markup for one column:\r\n *\r\n * ```html\r\n * <gog-column field=\"status\" header=\"Status\">\r\n * <ng-template gogColumnBody let-row let-value=\"value\">\r\n * <gog-tag [variant]=\"row.ok ? 'success' : 'danger'\">{{ value }}</gog-tag>\r\n * </ng-template>\r\n * </gog-column>\r\n * ```\r\n */\r\n@Directive({ selector: '[gogColumnBody]' })\r\nexport class GogColumnBodyDirective<T = unknown> {\r\n readonly templateRef = inject<TemplateRef<GogColumnBodyContext<T>>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard<T>(\r\n _dir: GogColumnBodyDirective<T>,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogColumnBodyContext<T> {\r\n return true;\r\n }\r\n}\r\n\r\n/** Custom header markup for one column — see `GogColumnBodyDirective` for the shape. */\r\n@Directive({ selector: '[gogColumnHeader]' })\r\nexport class GogColumnHeaderDirective {\r\n readonly templateRef = inject<TemplateRef<GogColumnHeaderContext>>(TemplateRef);\r\n\r\n static ngTemplateContextGuard(\r\n _dir: GogColumnHeaderDirective,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogColumnHeaderContext {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * One column of `gog-table`. Cell and header markup are projected as `gogColumnBody` /\r\n * `gogColumnHeader` templates inside the column itself, so the column owning them is\r\n * structural rather than looked up by a matching string.\r\n */\r\n@Directive({\r\n // Deliberately element selectors, not attributes: a column is a structural child of the\r\n // table, and `<gog-column field=\"x\">` reads as markup rather than as a decorated element.\r\n // `column` is the pre-21.3.0 name, kept working for one migration window.\r\n // @deprecated since 21.3.0 (2026-08-07) — use `gog-column` instead. Removed in 21.5.0.\r\n // eslint-disable-next-line @angular-eslint/directive-selector -- see above\r\n selector: 'gog-column, column',\r\n})\r\nexport class GogColumn {\r\n /** Field name, or a dot-path into a nested property (e.g. `\"address.city\"`). */\r\n readonly field = input.required<string>();\r\n readonly header = input<string>('');\r\n readonly sortable = input<boolean>(false);\r\n /** Fixed width, e.g. \"120px\" or \"20%\" */\r\n readonly width = input<string>('');\r\n /** Min width, e.g. \"80px\" */\r\n readonly minWidth = input<string>('');\r\n /** Max width, e.g. \"300px\" */\r\n readonly maxWidth = input<string>('');\r\n /** Custom sort comparator for this column. Defaults to `defaultCompare`. */\r\n readonly comparator = input<((a: unknown, b: unknown) => number) | null>(null);\r\n\r\n readonly bodyTemplate = contentChild(GogColumnBodyDirective);\r\n readonly headerTemplate = contentChild(GogColumnHeaderDirective);\r\n}\r\n\r\n/**\r\n * @deprecated since 21.3.0 (2026-08-07) — use `GogColumn` instead. Removed in 21.5.0.\r\n * The same class under its old, unprefixed name.\r\n */\r\nexport const Column = GogColumn;\r\n/**\r\n * @deprecated since 21.3.0 (2026-08-07) — use `GogColumn` instead. Removed in 21.5.0.\r\n */\r\nexport type Column = GogColumn;\r\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\r\n\r\nexport interface GogTableBodyContext<T> {\r\n $implicit: T;\r\n index: number;\r\n}\r\n\r\nexport interface GogTableHeaderContext {\r\n $implicit: never;\r\n}\r\n\r\n/**\r\n * Marks a `<ng-template>` inside `<gog-table>` with a field name and optional type:\r\n *\r\n * ```html\r\n * <ng-template template=\"status\" type=\"body\" let-row>…</ng-template>\r\n * ```\r\n *\r\n * @deprecated since 21.3.0 (2026-08-07) — declare the template inside its own column with\r\n * `gogColumnBody` / `gogColumnHeader` instead. Removed in 21.5.0.\r\n *\r\n * The field name here is a string the compiler cannot check, so a typo silently renders the\r\n * default cell rather than failing; the column-scoped directives bind structurally and carry a\r\n * typed context. Migration:\r\n *\r\n * ```html\r\n * <!-- before -->\r\n * <gog-column field=\"status\" />\r\n * <ng-template template=\"status\" type=\"body\" let-row>…</ng-template>\r\n *\r\n * <!-- after -->\r\n * <gog-column field=\"status\">\r\n * <ng-template gogColumnBody let-row>…</ng-template>\r\n * </gog-column>\r\n * ```\r\n */\r\n@Directive({\r\n // eslint-disable-next-line @angular-eslint/directive-selector -- deprecated legacy selector, see above\r\n selector: '[template]',\r\n})\r\nexport class TemplateDirective {\r\n readonly template = input.required<string>();\r\n readonly type = input<'body' | 'header'>('body');\r\n\r\n readonly templateRef = inject(TemplateRef<unknown>);\r\n\r\n static ngTemplateContextGuard<T>(\r\n _dir: TemplateDirective,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- only used as a type guard\r\n ctx: unknown,\r\n ): ctx is GogTableBodyContext<T> | GogTableHeaderContext {\r\n return true;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n isDevMode,\r\n linkedSignal,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\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 { GOG_CONFIG, resolveConfigured } from '../../shared/config';\r\nimport { GogSize } from '../../shared/types';\r\nimport { getByPath } from '../../shared/option-accessor';\r\nimport {\r\n GogColumn,\r\n type GogColumnBodyContext,\r\n type GogColumnHeaderContext,\r\n defaultCompare,\r\n} from './column';\r\nimport { TemplateDirective } from './template.directive';\r\n\r\nexport type SortDirection = 'asc' | 'desc' | null;\r\n\r\n/**\r\n * The table's sort state. `field` is `''` and `direction` `null` when nothing is sorted — the\r\n * third state of the header's asc → desc → none cycle.\r\n */\r\nexport interface GogTableSortEvent {\r\n field: string;\r\n direction: SortDirection;\r\n}\r\n\r\n/** Kept as the internal alias it has always been; `GogTableSortEvent` is the exported shape. */\r\ntype SortState = GogTableSortEvent;\r\n\r\nexport type GogTableSelectionMode = 'none' | 'single' | 'multiple';\r\n\r\n/** Built-in defaults, used when `GOG_CONFIG.labels` doesn't supply one. */\r\nconst DEFAULT_LABELS = {\r\n total: 'Total',\r\n pagination: 'Table pagination',\r\n selectRow: 'Select row',\r\n selectAllRows: 'Select all rows on this page',\r\n} as const;\r\n\r\n/** Emitted by `gogRowClick`. */\r\nexport interface GogTableRowClickEvent<T> {\r\n row: T;\r\n /**\r\n * Index within the currently rendered page, not the whole data set — the same convention as\r\n * `GogColumnBodyContext.index`. `gog-table` cannot know the absolute index in `lazy` mode.\r\n */\r\n index: number;\r\n /**\r\n * The click (or the `keydown` for a keyboard activation), so a handler can tell a click on the\r\n * row from one on a button inside a cell — `event.target` is the element actually hit.\r\n */\r\n originalEvent: MouseEvent | KeyboardEvent;\r\n}\r\n\r\n@Component({\r\n selector: 'gog-table',\r\n imports: [\r\n SpinnerComponent,\r\n PaginatorComponent,\r\n NgTemplateOutlet,\r\n IconComponent,\r\n ScrollComponent,\r\n CheckboxComponent,\r\n ],\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 /**\r\n * The single size modifier, replacing one `[class.gog-table--<size>]` binding per size.\r\n * Empty for `'lg'`: that is this component's default size and has no modifier rule of its own — every `gog-table--*` chain bottoms out at it.\r\n */\r\n protected readonly sizeClass = computed(() =>\r\n this.size() === 'lg' ? '' : `gog-table--${this.size()}`,\r\n );\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 /**\r\n * Rows per page; `0` (the default) means no pagination at all.\r\n *\r\n * A **`model`**, not an input, so `[pageSize]=\"20\"` still works exactly as before *and*\r\n * `[(pageSize)]=\"size\"` becomes possible. That is what lets `showPageSizeSelect` work without\r\n * any wiring: the table binds this model straight to its own paginator's `pageSize`, the\r\n * select writes back through it, and a consumer who wants to observe or persist the choice\r\n * binds two-way. Nothing is ferried between the two components by hand.\r\n *\r\n * In `lazy` mode a change here is a refetch signal, same as `gogPageChange` — bind\r\n * `[(pageSize)]` and reload from it. Changing the size always returns to page 1.\r\n */\r\n readonly pageSize = model<number>(0);\r\n /**\r\n * Whether the paginator offers a rows-per-page select. Forwarded straight to `gog-paginator`;\r\n * unset, it falls back to `GOG_CONFIG.paginator.showPageSizeSelect`, then to `false`.\r\n */\r\n readonly showPageSizeSelect = input<boolean | undefined>(undefined);\r\n /**\r\n * The sizes that select offers. Forwarded to `gog-paginator`; unset, falls back to\r\n * `GOG_CONFIG.paginator.pageSizeOptions`, then to `[10, 20, 30, 40, 50]`.\r\n */\r\n readonly pageSizeOptions = input<number[] | undefined>(undefined);\r\n /**\r\n * Hands sorting and paging to the server.\r\n *\r\n * Off (the default), the table owns the whole data set: it sorts and slices `value` itself, and\r\n * `totalPages` comes from `value.length`. On, `value` is **the current page, already sorted** —\r\n * the table renders it as given and never re-orders or re-slices it. Supply `totalRecords` so\r\n * the paginator knows how many pages exist, and refetch in response to `gogSortChange` /\r\n * `gogPageChange`.\r\n *\r\n * ```html\r\n * <gog-table\r\n * [value]=\"page()\"\r\n * [lazy]=\"true\"\r\n * [totalRecords]=\"total()\"\r\n * [pageSize]=\"20\"\r\n * [loading]=\"loading()\"\r\n * (gogSortChange)=\"sort.set($event); reload()\"\r\n * (gogPageChange)=\"page$.set($event); reload()\"\r\n * />\r\n * ```\r\n */\r\n readonly lazy = input(false);\r\n /**\r\n * How many rows exist on the server, across all pages. `lazy` only — without it the table\r\n * cannot know how many pages to offer, and pagination is disabled. Ignored when `lazy` is off,\r\n * where `value.length` is the truth.\r\n */\r\n readonly totalRecords = input<number | null>(null);\r\n /**\r\n * Makes rows focusable and styles them as clickable, for a table whose rows navigate or open\r\n * something. `gogRowClick` fires on a plain click regardless; this is what makes that\r\n * affordance **discoverable and reachable by keyboard** (Enter and Space activate the focused\r\n * row), which a bare `(gogRowClick)` on a `<tr>` is not.\r\n *\r\n * If the row's action is better expressed as a control — a link to a detail page, a delete\r\n * button — put that in a cell instead. This is for the whole-row-is-the-target case.\r\n */\r\n readonly interactiveRows = input(false);\r\n /**\r\n * Turns on row selection. `'single'` keeps at most one row selected, `'multiple'` any number.\r\n *\r\n * The selection itself is always a `T[]` (`[(selection)]`), including in `'single'` mode where\r\n * it holds zero or one row — one shape rather than a `T | T[] | null` union the consumer has to\r\n * narrow on every read.\r\n */\r\n readonly selectionMode = input<GogTableSelectionMode>('none');\r\n /**\r\n * Two-way bindable selected rows: `[(selection)]=\"selected\"`.\r\n *\r\n * Rows are matched by `dataKey` when one is set, and by object identity otherwise — so with no\r\n * `dataKey`, a refetch that produces new objects drops the selection. In `lazy` mode that is\r\n * almost always the wrong behaviour: set `dataKey`.\r\n */\r\n readonly selection = model<T[]>([]);\r\n /**\r\n * Field name (or dot-path) uniquely identifying a row — `'id'` in most data sets.\r\n *\r\n * Used for selection identity and, when set, as the `@for` track key, which is what lets the\r\n * DOM survive a re-fetch of the same page instead of being torn down and rebuilt.\r\n */\r\n readonly dataKey = input('');\r\n /**\r\n * Whether the checkbox column renders. On by default once `selectionMode` is set; turn it off\r\n * for a table that selects by clicking the row itself, and pair it with `interactiveRows` so\r\n * that stays reachable by keyboard.\r\n */\r\n readonly showSelectionColumn = input(true);\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 /**\r\n * Fires when a header cell changes the sort — including the third click that clears it, which\r\n * emits `{ field: '', direction: null }`. In `lazy` mode this is the refetch signal; the table\r\n * has already reset to page 1 by the time it fires.\r\n */\r\n readonly gogSortChange = output<GogTableSortEvent>();\r\n /**\r\n * Fires when the page changes, with the new 1-based page. Only ever fires for a *user* action\r\n * or a clamp — not for the initial render.\r\n */\r\n readonly gogPageChange = output<number>();\r\n /** Fires when a row is clicked, or activated with Enter/Space when `interactiveRows` is on. */\r\n readonly gogRowClick = output<GogTableRowClickEvent<T>>();\r\n\r\n readonly columns = contentChildren(GogColumn);\r\n readonly templates = contentChildren(TemplateDirective);\r\n\r\n readonly sortState = signal<SortState>({ field: '', direction: null });\r\n\r\n /**\r\n * In `lazy` mode `value` is the server's answer — already sorted, already the right page — so\r\n * both this and `visibleRows` become pass-throughs. Re-sorting it locally would reorder one\r\n * page against a global ordering, which looks like corruption rather than a bug.\r\n */\r\n readonly sortedData = computed(() => {\r\n if (this.lazy()) return this.value();\r\n\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 /**\r\n * How many rows the paginator is dividing. `value.length` normally; `totalRecords` in `lazy`\r\n * mode, where `value` is only the current page. Also what `showTotal` reports.\r\n */\r\n readonly rowCount = computed(() =>\r\n this.lazy() ? Math.max(0, this.totalRecords() ?? 0) : this.value().length,\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.rowCount() / 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<\r\n { total: number; sortState: SortState; pageSize: number },\r\n number\r\n >({\r\n source: () => ({\r\n total: this.totalPages(),\r\n sortState: this.sortState(),\r\n pageSize: this.pageSize(),\r\n }),\r\n computation: (src, previous) => {\r\n if (!previous) return 1;\r\n // A new sort re-orders everything, and a new page size redraws the boundaries — in both\r\n // cases the page the user was on no longer denotes the same rows.\r\n if (previous.source.sortState !== src.sortState) return 1;\r\n if (previous.source.pageSize !== src.pageSize) return 1;\r\n return Math.min(Math.max(1, previous.value), src.total);\r\n },\r\n });\r\n\r\n /** In `lazy` mode the server already sliced the page — see `sortedData`. */\r\n readonly visibleRows = computed(() => {\r\n const size = this.pageSize();\r\n if (this.lazy() || !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 /**\r\n * Resolved the same way `gog-paginator` resolves it, because the footer's own visibility\r\n * depends on it — see `hasPagination`.\r\n */\r\n protected readonly showsPageSizeSelect = computed(() =>\r\n resolveConfigured(\r\n this.showPageSizeSelect(),\r\n this.globalConfig.paginator?.showPageSizeSelect,\r\n false,\r\n ),\r\n );\r\n\r\n /**\r\n * Normally the paginator only earns its space once there is more than one page — but the\r\n * rows-per-page select lives inside it, and hiding the whole thing at one page would strand the\r\n * user on whatever size produced that single page with no way back to a smaller one.\r\n */\r\n readonly hasPagination = computed(\r\n () =>\r\n !this.loading() &&\r\n this.pageSize() > 0 &&\r\n (this.totalPages() > 1 || this.showsPageSizeSelect()),\r\n );\r\n\r\n private readonly globalConfig = inject(GOG_CONFIG);\r\n\r\n /** `GOG_CONFIG.labels` → the built-in English defaults. No per-instance inputs: these name\r\n * table chrome, and an app that relabels them does so once. */\r\n protected readonly resolvedLabels = computed(() => {\r\n const configured = this.globalConfig.labels ?? {};\r\n return {\r\n total: resolveConfigured(undefined, configured.total, DEFAULT_LABELS.total),\r\n pagination: resolveConfigured(\r\n undefined,\r\n configured.tablePagination,\r\n DEFAULT_LABELS.pagination,\r\n ),\r\n selectRow: resolveConfigured(undefined, configured.selectRow, DEFAULT_LABELS.selectRow),\r\n selectAllRows: resolveConfigured(\r\n undefined,\r\n configured.selectAllRows,\r\n DEFAULT_LABELS.selectAllRows,\r\n ),\r\n };\r\n });\r\n\r\n protected readonly hasSelection = computed(() => this.selectionMode() !== 'none');\r\n protected readonly hasSelectionColumn = computed(\r\n () => this.hasSelection() && this.showSelectionColumn(),\r\n );\r\n\r\n readonly emptyColspan = computed(\r\n () =>\r\n this.columns().length + (this.showRowNumbers() ? 1 : 0) + (this.hasSelectionColumn() ? 1 : 0),\r\n );\r\n\r\n /**\r\n * Identity for selection and `@for` tracking. `dataKey`'s value when set, the row object\r\n * otherwise — the object works for a static data set and breaks the moment rows are re-fetched,\r\n * which is exactly what `dataKey` is for.\r\n */\r\n protected rowKey(row: T): unknown {\r\n const key = this.dataKey();\r\n return key ? getByPath(row, key) : row;\r\n }\r\n\r\n protected isSelected(row: T): boolean {\r\n const key = this.rowKey(row);\r\n return this.selection().some((selected) => this.rowKey(selected) === key);\r\n }\r\n\r\n /** All rows on the current page are selected — drives the header checkbox. */\r\n protected readonly allPageRowsSelected = computed(() => {\r\n const rows = this.visibleRows();\r\n return rows.length > 0 && rows.every((row) => this.isSelected(row));\r\n });\r\n\r\n /** Some but not all — the header checkbox's indeterminate state. */\r\n protected readonly somePageRowsSelected = computed(() => {\r\n const rows = this.visibleRows();\r\n return rows.some((row) => this.isSelected(row)) && !this.allPageRowsSelected();\r\n });\r\n\r\n protected toggleRowSelection(row: T, selected: boolean): void {\r\n if (this.selectionMode() === 'single') {\r\n this.selection.set(selected ? [row] : []);\r\n return;\r\n }\r\n\r\n const key = this.rowKey(row);\r\n const without = this.selection().filter((entry) => this.rowKey(entry) !== key);\r\n this.selection.set(selected ? [...without, row] : without);\r\n }\r\n\r\n /**\r\n * Header checkbox: selects or clears **the current page**, not the whole data set. Anything\r\n * else would be a lie in `lazy` mode, where the table has never seen the other pages — and\r\n * inconsistent between the two modes, which is worse than either behaviour alone.\r\n */\r\n protected toggleAllOnPage(selected: boolean): void {\r\n const rows = this.visibleRows();\r\n const pageKeys = new Set(rows.map((row) => this.rowKey(row)));\r\n const offPage = this.selection().filter((entry) => !pageKeys.has(this.rowKey(entry)));\r\n\r\n this.selection.set(selected ? [...offPage, ...rows] : offPage);\r\n }\r\n\r\n constructor() {\r\n /*\r\n * `gogPageChange` for user navigation and clamps, but *not* for the reset that follows a new\r\n * sort: `currentPage` snapping back to 1 there is part of the sort, and a lazy consumer\r\n * refetching from both events would fire two requests for one user action. Detected by the\r\n * sort having changed in the same computation, and skipped.\r\n */\r\n let previous: { page: number; sort: SortState; size: number } | null = null;\r\n effect(() => {\r\n const page = this.currentPage();\r\n const sort = this.sortState();\r\n const size = this.pageSize();\r\n const causedByOther = previous && (previous.sort !== sort || previous.size !== size);\r\n if (previous && previous.page !== page && !causedByOther) {\r\n this.gogPageChange.emit(page);\r\n }\r\n previous = { page, sort, size };\r\n });\r\n\r\n effect(() => {\r\n if (!isDevMode() || !this.lazy() || this.pageSize() <= 0) return;\r\n if (this.totalRecords() === null) {\r\n console.warn(\r\n \"[gog-table] `lazy` with a `pageSize` but no `totalRecords`: the table cannot know how many pages exist, so pagination stays hidden. Pass the server's total row count.\",\r\n );\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * A `gogColumnBody` template declared inside the column wins; the string-keyed\r\n * `<ng-template template=\"field\" type=\"body\">` is the deprecated fallback.\r\n */\r\n getBodyTemplate(col: GogColumn): TemplateRef<unknown> | null {\r\n return (\r\n (col.bodyTemplate()?.templateRef as TemplateRef<unknown> | undefined) ??\r\n this.bodyTemplateMap().get(col.field()) ??\r\n null\r\n );\r\n }\r\n\r\n getHeaderTemplate(col: GogColumn): TemplateRef<unknown> | null {\r\n return (\r\n (col.headerTemplate()?.templateRef as TemplateRef<unknown> | undefined) ??\r\n this.headerTemplateMap().get(col.field()) ??\r\n null\r\n );\r\n }\r\n\r\n /** Context for a `gogColumnBody` template — see `GogColumnBodyContext`. */\r\n bodyContext(row: T, col: GogColumn, index: number): GogColumnBodyContext<T> {\r\n return { $implicit: row, row, index, value: this.getCellValue(row, col.field()) };\r\n }\r\n\r\n /** Context for a `gogColumnHeader` template — see `GogColumnHeaderContext`. */\r\n headerContext(col: GogColumn): GogColumnHeaderContext {\r\n return { $implicit: col.header(), field: col.field() };\r\n }\r\n\r\n /**\r\n * Cycles the clicked column asc → desc → unsorted, and emits the result. The emit is last, so\r\n * a `lazy` consumer refetching from it already sees `currentPage` reset to 1.\r\n */\r\n toggleSort(col: GogColumn): 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 this.gogSortChange.emit(this.sortState());\r\n }\r\n\r\n /** Click, or Enter/Space on a focused row when `interactiveRows` is on. */\r\n protected emitRowClick(row: T, index: number, originalEvent: MouseEvent | KeyboardEvent): void {\r\n this.gogRowClick.emit({ row, index, originalEvent });\r\n }\r\n\r\n /** Enter and Space activate the focused row; Space must not also scroll the page. */\r\n protected onRowKeydown(row: T, index: number, event: KeyboardEvent): void {\r\n if (!this.interactiveRows()) return;\r\n if (event.key !== 'Enter' && event.key !== ' ') return;\r\n event.preventDefault();\r\n this.emitRowClick(row, index, event);\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: GogColumn): 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]=\"sizeClass()\"\r\n [class.gog-table--col-borders]=\"showColumnBorders()\"\r\n [class.gog-table--loading]=\"loading()\"\r\n [class.gog-table--sticky-header]=\"stickyHeader()\"\r\n [style.width]=\"fullWidth() ? '100%' : 'fit-content'\"\r\n >\r\n <colgroup>\r\n @if (hasSelectionColumn()) {\r\n <col class=\"gog-table__col--select\" />\r\n }\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 (hasSelectionColumn()) {\r\n <th class=\"gog-table__th gog-table__th--select\" scope=\"col\">\r\n <!--\r\n Only `multiple` gets a select-all: in `single` mode there is nothing to select\r\n all of, and a checkbox that can only ever check one row is a lie.\r\n -->\r\n @if (selectionMode() === 'multiple') {\r\n <gog-checkbox\r\n [checked]=\"allPageRowsSelected()\"\r\n [indeterminate]=\"somePageRowsSelected()\"\r\n [disabled]=\"loading() || visibleRows().length === 0\"\r\n [ariaLabel]=\"resolvedLabels().selectAllRows\"\r\n (checkedChange)=\"toggleAllOnPage($event)\"\r\n />\r\n }\r\n </th>\r\n }\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); as headerTpl) {\r\n <ng-container *ngTemplateOutlet=\"headerTpl; context: headerContext(col)\" />\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 rowKey(row); let i = $index) {\r\n <tr\r\n class=\"gog-table__row\"\r\n [class.gog-table__row--interactive]=\"interactiveRows()\"\r\n [class.gog-table__row--selected]=\"isSelected(row)\"\r\n [attr.tabindex]=\"interactiveRows() ? 0 : null\"\r\n [attr.aria-selected]=\"hasSelection() ? isSelected(row) : null\"\r\n (click)=\"emitRowClick(row, i, $event)\"\r\n (keydown)=\"onRowKeydown(row, i, $event)\"\r\n >\r\n @if (hasSelectionColumn()) {\r\n <td class=\"gog-table__td gog-table__td--select\">\r\n <!--\r\n `$event.stopPropagation()` so ticking the box does not also count as a row\r\n click: with `interactiveRows` those are two different intents, and firing both\r\n from one gesture is how a \"select\" ends up navigating away.\r\n -->\r\n <gog-checkbox\r\n [checked]=\"isSelected(row)\"\r\n [ariaLabel]=\"resolvedLabels().selectRow\"\r\n (click)=\"$event.stopPropagation()\"\r\n (checkedChange)=\"toggleRowSelection(row, $event)\"\r\n />\r\n </td>\r\n }\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); as bodyTpl) {\r\n <ng-container *ngTemplateOutlet=\"bodyTpl; context: bodyContext(row, col, i)\" />\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 {{ resolvedLabels().total }}: {{ rowCount() }}\r\n </span>\r\n }\r\n\r\n @if (hasPagination()) {\r\n <!--\r\n `[(pageSize)]` straight through to the table's own model: the rows-per-page select\r\n writes back here, and a consumer binding `[(pageSize)]` on the table sees it. No\r\n intermediate signal, in either direction.\r\n -->\r\n <gog-paginator\r\n class=\"gog-table__pagination\"\r\n [style.grid-area]=\"paginatorGridArea()\"\r\n [(page)]=\"currentPage\"\r\n [(pageSize)]=\"pageSize\"\r\n [totalPages]=\"totalPages()\"\r\n [showPageSizeSelect]=\"showPageSizeSelect()\"\r\n [pageSizeOptions]=\"pageSizeOptions()\"\r\n rangeMode=\"ellipsis\"\r\n size=\"sm\"\r\n [ariaLabel]=\"resolvedLabels().pagination\"\r\n />\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { DestroyRef, Injectable, PLATFORM_ID, Signal, inject, signal } from '@angular/core';\r\n\r\nimport { GOG_CONFIG } from '../../shared/config';\r\n\r\n/** Built-in defaults, used when `GOG_CONFIG.theme` doesn't supply one. */\r\nconst DEFAULT_THEME = 'light';\r\nconst DEFAULT_LIGHT_THEME = 'light';\r\nconst DEFAULT_DARK_THEME = 'dark';\r\n\r\n/**\r\n * Owns the `data-theme` attribute on `<html>`, which is what every `--gog-*` palette block in\r\n * `theme.css` keys off.\r\n *\r\n * Zero-config behaviour is unchanged from 21.3.1: it adopts whatever `data-theme` is already on\r\n * the document, or `'light'` if there is none. Persistence and following the OS setting are\r\n * both **opt-in** through `GOG_CONFIG.theme`, so an app that never configures anything cannot\r\n * have its theme changed out from under it by an upgrade.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ThemeService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly root = this.document.documentElement;\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly config = inject(GOG_CONFIG).theme ?? {};\r\n\r\n private readonly state = signal(DEFAULT_THEME);\r\n\r\n /**\r\n * The active theme name. Read-only on purpose: writing it directly would move the signal\r\n * without touching the DOM attribute the styles actually read, leaving the two silently out\r\n * of sync. Go through `setTheme`/`toggleTheme`.\r\n */\r\n readonly theme: Signal<string> = this.state.asReadonly();\r\n\r\n /**\r\n * Set once the app (or the user) has chosen a theme explicitly, which stops\r\n * `followSystem` from overriding that choice on the next OS-level change.\r\n */\r\n private hasExplicitChoice = false;\r\n\r\n constructor() {\r\n this.state.set(this.resolveInitialTheme());\r\n this.applyTheme(this.state());\r\n this.watchSystemPreference();\r\n }\r\n\r\n setTheme(theme: string): void {\r\n this.hasExplicitChoice = true;\r\n this.state.set(theme);\r\n this.applyTheme(theme);\r\n this.persist(theme);\r\n }\r\n\r\n /**\r\n * Flips between the configured light and dark theme names (`'light'`/`'dark'` by default).\r\n * From a third, custom theme this lands on the dark one, since that is the only reading of\r\n * \"toggle\" that terminates.\r\n */\r\n toggleTheme(): void {\r\n const light = this.config.lightTheme ?? DEFAULT_LIGHT_THEME;\r\n const dark = this.config.darkTheme ?? DEFAULT_DARK_THEME;\r\n this.setTheme(this.state() === dark ? light : dark);\r\n }\r\n\r\n /**\r\n * In precedence order:\r\n *\r\n * 1. a `data-theme` already on `<html>` — server-rendered or set by an inline script before\r\n * Angular booted, and either way a decision that has already been painted;\r\n * 2. the persisted choice, when `storageKey` is configured;\r\n * 3. the OS setting, when `followSystem` is on;\r\n * 4. `defaultTheme`, then `'light'`.\r\n */\r\n private resolveInitialTheme(): string {\r\n const fromDocument = this.root.getAttribute('data-theme');\r\n if (fromDocument) return fromDocument;\r\n\r\n const stored = this.readStored();\r\n if (stored) return stored;\r\n\r\n if (this.config.followSystem && this.prefersDark()) {\r\n return this.config.darkTheme ?? DEFAULT_DARK_THEME;\r\n }\r\n\r\n return this.config.defaultTheme ?? DEFAULT_THEME;\r\n }\r\n\r\n /**\r\n * Keeps the theme in step with the OS while the app has no explicit choice of its own. Only\r\n * wired up when `followSystem` is on, so the default configuration adds no listener at all.\r\n */\r\n private watchSystemPreference(): void {\r\n if (!this.isBrowser || !this.config.followSystem) return;\r\n\r\n const query = window.matchMedia('(prefers-color-scheme: dark)');\r\n const onChange = (event: MediaQueryListEvent) => {\r\n if (this.hasExplicitChoice) return;\r\n const next = event.matches\r\n ? (this.config.darkTheme ?? DEFAULT_DARK_THEME)\r\n : (this.config.lightTheme ?? DEFAULT_LIGHT_THEME);\r\n this.state.set(next);\r\n this.applyTheme(next);\r\n };\r\n\r\n query.addEventListener('change', onChange);\r\n this.destroyRef.onDestroy(() => query.removeEventListener('change', onChange));\r\n }\r\n\r\n private prefersDark(): boolean {\r\n return this.isBrowser && window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n }\r\n\r\n /**\r\n * Storage access is wrapped because it throws rather than degrades in two ordinary cases:\r\n * Safari's private mode, and a browser configured to block site data. A theme preference is\r\n * not worth taking the app down for.\r\n */\r\n private readStored(): string | null {\r\n const key = this.config.storageKey;\r\n if (!key || !this.isBrowser) return null;\r\n try {\r\n return window.localStorage.getItem(key);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private persist(theme: string): void {\r\n const key = this.config.storageKey;\r\n if (!key || !this.isBrowser) return;\r\n try {\r\n window.localStorage.setItem(key, theme);\r\n } catch {\r\n // See readStored.\r\n }\r\n }\r\n\r\n private applyTheme(theme: string): void {\r\n this.root.setAttribute('data-theme', theme);\r\n }\r\n}\r\n","// GENERATED FILE — do not edit by hand.\r\n// Run `npm run generate:tokens` after changing src/styles/theme.css.\r\n// See scripts/generate-tokens.mjs for why theme.css is the source and this is the output.\r\n\r\n/** Every `--gog-*` custom property the library declares or documents as an override point. */\r\nexport type GogTokenName =\r\n | '--gog-accent-bright'\r\n | '--gog-accent-color'\r\n | '--gog-accent-dim'\r\n | '--gog-accent-pale'\r\n | '--gog-accent-text-color'\r\n | '--gog-accordion-accent-color'\r\n | '--gog-accordion-body-bg'\r\n | '--gog-accordion-body-color'\r\n | '--gog-accordion-body-font-family'\r\n | '--gog-accordion-body-font-size'\r\n | '--gog-accordion-body-lift'\r\n | '--gog-accordion-body-line-height'\r\n | '--gog-accordion-body-padding-bottom'\r\n | '--gog-accordion-body-padding-top'\r\n | '--gog-accordion-body-radius'\r\n | '--gog-accordion-body-transition-duration'\r\n | '--gog-accordion-border-color'\r\n | '--gog-accordion-border-style'\r\n | '--gog-accordion-border-width'\r\n | '--gog-accordion-chevron-font-size'\r\n | '--gog-accordion-chevron-size'\r\n | '--gog-accordion-chevron-transition-duration'\r\n | '--gog-accordion-content-gap'\r\n | '--gog-accordion-disabled-opacity'\r\n | '--gog-accordion-focus-ring-width'\r\n | '--gog-accordion-font-family'\r\n | '--gog-accordion-font-size'\r\n | '--gog-accordion-header-bg'\r\n | '--gog-accordion-header-gap'\r\n | '--gog-accordion-header-text-transform'\r\n | '--gog-accordion-hover-bg'\r\n | '--gog-accordion-hover-ring'\r\n | '--gog-accordion-letter-spacing'\r\n | '--gog-accordion-lg-body-font-size'\r\n | '--gog-accordion-lg-body-line-height'\r\n | '--gog-accordion-lg-body-padding-bottom'\r\n | '--gog-accordion-lg-body-padding-top'\r\n | '--gog-accordion-lg-chevron-font-size'\r\n | '--gog-accordion-lg-chevron-size'\r\n | '--gog-accordion-lg-content-gap'\r\n | '--gog-accordion-lg-font-size'\r\n | '--gog-accordion-lg-letter-spacing'\r\n | '--gog-accordion-lg-padding-x'\r\n | '--gog-accordion-lg-padding-y'\r\n | '--gog-accordion-md-body-font-size'\r\n | '--gog-accordion-md-body-line-height'\r\n | '--gog-accordion-md-body-padding-bottom'\r\n | '--gog-accordion-md-body-padding-top'\r\n | '--gog-accordion-md-chevron-font-size'\r\n | '--gog-accordion-md-chevron-size'\r\n | '--gog-accordion-md-content-gap'\r\n | '--gog-accordion-md-font-size'\r\n | '--gog-accordion-md-letter-spacing'\r\n | '--gog-accordion-md-padding-x'\r\n | '--gog-accordion-md-padding-y'\r\n | '--gog-accordion-padding-x'\r\n | '--gog-accordion-padding-y'\r\n | '--gog-accordion-radius'\r\n | '--gog-accordion-slg-body-font-size'\r\n | '--gog-accordion-slg-body-line-height'\r\n | '--gog-accordion-slg-body-padding-bottom'\r\n | '--gog-accordion-slg-body-padding-top'\r\n | '--gog-accordion-slg-chevron-font-size'\r\n | '--gog-accordion-slg-chevron-size'\r\n | '--gog-accordion-slg-content-gap'\r\n | '--gog-accordion-slg-font-size'\r\n | '--gog-accordion-slg-letter-spacing'\r\n | '--gog-accordion-slg-padding-x'\r\n | '--gog-accordion-slg-padding-y'\r\n | '--gog-accordion-sm-body-font-size'\r\n | '--gog-accordion-sm-body-line-height'\r\n | '--gog-accordion-sm-body-padding-bottom'\r\n | '--gog-accordion-sm-body-padding-top'\r\n | '--gog-accordion-sm-chevron-font-size'\r\n | '--gog-accordion-sm-chevron-size'\r\n | '--gog-accordion-sm-content-gap'\r\n | '--gog-accordion-sm-font-size'\r\n | '--gog-accordion-sm-letter-spacing'\r\n | '--gog-accordion-sm-padding-x'\r\n | '--gog-accordion-sm-padding-y'\r\n | '--gog-accordion-text-color'\r\n | '--gog-accordion-transition-duration'\r\n | '--gog-accordion-xsm-body-font-size'\r\n | '--gog-accordion-xsm-body-line-height'\r\n | '--gog-accordion-xsm-body-padding-bottom'\r\n | '--gog-accordion-xsm-body-padding-top'\r\n | '--gog-accordion-xsm-chevron-font-size'\r\n | '--gog-accordion-xsm-chevron-size'\r\n | '--gog-accordion-xsm-content-gap'\r\n | '--gog-accordion-xsm-font-size'\r\n | '--gog-accordion-xsm-letter-spacing'\r\n | '--gog-accordion-xsm-padding-x'\r\n | '--gog-accordion-xsm-padding-y'\r\n | '--gog-autocomplete-actions-gap'\r\n | '--gog-autocomplete-actions-inset'\r\n | '--gog-autocomplete-actions-reserve'\r\n | '--gog-autocomplete-bg'\r\n | '--gog-autocomplete-border-color'\r\n | '--gog-autocomplete-border-style'\r\n | '--gog-autocomplete-border-width'\r\n | '--gog-autocomplete-clear-color'\r\n | '--gog-autocomplete-clear-hover-color'\r\n | '--gog-autocomplete-clear-icon-ratio'\r\n | '--gog-autocomplete-color'\r\n | '--gog-autocomplete-disabled-opacity'\r\n | '--gog-autocomplete-empty-color'\r\n | '--gog-autocomplete-empty-font-size'\r\n | '--gog-autocomplete-error-border-color'\r\n | '--gog-autocomplete-error-color'\r\n | '--gog-autocomplete-error-font-family'\r\n | '--gog-autocomplete-error-font-size'\r\n | '--gog-autocomplete-field-bg'\r\n | '--gog-autocomplete-float-label-in-top'\r\n | '--gog-autocomplete-float-label-on-bg'\r\n | '--gog-autocomplete-float-label-over-gap'\r\n | '--gog-autocomplete-float-label-over-reserve'\r\n | '--gog-autocomplete-float-label-reserve'\r\n | '--gog-autocomplete-focus-ring-color'\r\n | '--gog-autocomplete-focus-ring-offset'\r\n | '--gog-autocomplete-focus-ring-width'\r\n | '--gog-autocomplete-font-family'\r\n | '--gog-autocomplete-font-size'\r\n | '--gog-autocomplete-gap'\r\n | '--gog-autocomplete-hover-border-color'\r\n | '--gog-autocomplete-label-color'\r\n | '--gog-autocomplete-label-font-family'\r\n | '--gog-autocomplete-label-font-size'\r\n | '--gog-autocomplete-label-font-weight'\r\n | '--gog-autocomplete-label-letter-spacing'\r\n | '--gog-autocomplete-label-text-transform'\r\n | '--gog-autocomplete-line-height'\r\n | '--gog-autocomplete-min-width'\r\n | '--gog-autocomplete-option-color'\r\n | '--gog-autocomplete-option-gap'\r\n | '--gog-autocomplete-option-height'\r\n | '--gog-autocomplete-option-hover-bg'\r\n | '--gog-autocomplete-option-hover-color'\r\n | '--gog-autocomplete-option-padding'\r\n | '--gog-autocomplete-option-radius'\r\n | '--gog-autocomplete-option-selected-bg'\r\n | '--gog-autocomplete-option-selected-color'\r\n | '--gog-autocomplete-options-padding'\r\n | '--gog-autocomplete-padding-x'\r\n | '--gog-autocomplete-padding-y'\r\n | '--gog-autocomplete-panel-bg'\r\n | '--gog-autocomplete-panel-border-color'\r\n | '--gog-autocomplete-panel-border-style'\r\n | '--gog-autocomplete-panel-border-width'\r\n | '--gog-autocomplete-panel-gap'\r\n | '--gog-autocomplete-panel-max-height'\r\n | '--gog-autocomplete-panel-max-width'\r\n | '--gog-autocomplete-panel-radius'\r\n | '--gog-autocomplete-panel-shadow'\r\n | '--gog-autocomplete-placeholder-color'\r\n | '--gog-autocomplete-radius'\r\n | '--gog-autocomplete-spinner-size'\r\n | '--gog-autocomplete-text-color'\r\n | '--gog-autocomplete-transition-duration'\r\n | '--gog-background-color'\r\n | '--gog-badge-bg'\r\n | '--gog-badge-border-color'\r\n | '--gog-badge-border-style'\r\n | '--gog-badge-border-width'\r\n | '--gog-badge-color'\r\n | '--gog-badge-danger-bg'\r\n | '--gog-badge-danger-color'\r\n | '--gog-badge-dot-size'\r\n | '--gog-badge-font-family'\r\n | '--gog-badge-font-size'\r\n | '--gog-badge-font-weight'\r\n | '--gog-badge-info-bg'\r\n | '--gog-badge-info-color'\r\n | '--gog-badge-line-height'\r\n | '--gog-badge-offset'\r\n | '--gog-badge-padding-inline'\r\n | '--gog-badge-radius'\r\n | '--gog-badge-size'\r\n | '--gog-badge-success-bg'\r\n | '--gog-badge-success-color'\r\n | '--gog-badge-warning-bg'\r\n | '--gog-badge-warning-color'\r\n | '--gog-badge-z'\r\n | '--gog-border-color'\r\n | '--gog-btn-active-scale'\r\n | '--gog-btn-bg'\r\n | '--gog-btn-border'\r\n | '--gog-btn-border-style'\r\n | '--gog-btn-border-width'\r\n | '--gog-btn-color'\r\n | '--gog-btn-disabled-opacity'\r\n | '--gog-btn-focus-ring-offset'\r\n | '--gog-btn-focus-ring-width'\r\n | '--gog-btn-font-family'\r\n | '--gog-btn-font-weight'\r\n | '--gog-btn-gap'\r\n | '--gog-btn-ghost-bg'\r\n | '--gog-btn-ghost-border'\r\n | '--gog-btn-ghost-color'\r\n | '--gog-btn-ghost-hover-bg'\r\n | '--gog-btn-ghost-hover-color'\r\n | '--gog-btn-ghost-hover-shadow'\r\n | '--gog-btn-ghost-shadow'\r\n | '--gog-btn-ghost-spinner-color'\r\n | '--gog-btn-hover-bg'\r\n | '--gog-btn-hover-color'\r\n | '--gog-btn-hover-shadow'\r\n | '--gog-btn-letter-spacing'\r\n | '--gog-btn-lg-font-size'\r\n | '--gog-btn-lg-padding'\r\n | '--gog-btn-line-height'\r\n | '--gog-btn-loading-opacity'\r\n | '--gog-btn-md-font-size'\r\n | '--gog-btn-md-padding'\r\n | '--gog-btn-outline-bg'\r\n | '--gog-btn-outline-border'\r\n | '--gog-btn-outline-color'\r\n | '--gog-btn-outline-hover-bg'\r\n | '--gog-btn-outline-hover-color'\r\n | '--gog-btn-outline-hover-shadow'\r\n | '--gog-btn-outline-shadow'\r\n | '--gog-btn-outline-spinner-color'\r\n | '--gog-btn-primary-bg'\r\n | '--gog-btn-primary-border'\r\n | '--gog-btn-primary-color'\r\n | '--gog-btn-primary-hover-bg'\r\n | '--gog-btn-primary-hover-color'\r\n | '--gog-btn-primary-hover-shadow'\r\n | '--gog-btn-primary-shadow'\r\n | '--gog-btn-primary-spinner-color'\r\n | '--gog-btn-radius'\r\n | '--gog-btn-secondary-bg'\r\n | '--gog-btn-secondary-border'\r\n | '--gog-btn-secondary-color'\r\n | '--gog-btn-secondary-hover-bg'\r\n | '--gog-btn-secondary-hover-color'\r\n | '--gog-btn-secondary-hover-shadow'\r\n | '--gog-btn-secondary-shadow'\r\n | '--gog-btn-secondary-spinner-color'\r\n | '--gog-btn-shadow'\r\n | '--gog-btn-slg-font-size'\r\n | '--gog-btn-slg-padding'\r\n | '--gog-btn-sm-font-size'\r\n | '--gog-btn-sm-padding'\r\n | '--gog-btn-spinner-color'\r\n | '--gog-btn-spinner-max-size'\r\n | '--gog-btn-text-transform'\r\n | '--gog-btn-transition-duration'\r\n | '--gog-btn-xsm-font-size'\r\n | '--gog-btn-xsm-padding'\r\n | '--gog-button-toggle-bg'\r\n | '--gog-button-toggle-border-color'\r\n | '--gog-button-toggle-border-style'\r\n | '--gog-button-toggle-border-width'\r\n | '--gog-button-toggle-color'\r\n | '--gog-button-toggle-disabled-opacity'\r\n | '--gog-button-toggle-focus-ring-color'\r\n | '--gog-button-toggle-focus-ring-offset'\r\n | '--gog-button-toggle-focus-ring-width'\r\n | '--gog-button-toggle-font-family'\r\n | '--gog-button-toggle-font-size'\r\n | '--gog-button-toggle-font-weight'\r\n | '--gog-button-toggle-gap'\r\n | '--gog-button-toggle-hover-bg'\r\n | '--gog-button-toggle-hover-color'\r\n | '--gog-button-toggle-icon-size'\r\n | '--gog-button-toggle-letter-spacing'\r\n | '--gog-button-toggle-line-height'\r\n | '--gog-button-toggle-padding'\r\n | '--gog-button-toggle-radius'\r\n | '--gog-button-toggle-rest-bg'\r\n | '--gog-button-toggle-rest-color'\r\n | '--gog-button-toggle-selected-bg'\r\n | '--gog-button-toggle-selected-border-color'\r\n | '--gog-button-toggle-selected-color'\r\n | '--gog-button-toggle-separated-gap'\r\n | '--gog-button-toggle-text-transform'\r\n | '--gog-button-toggle-transition-duration'\r\n | '--gog-calendar-action-padding'\r\n | '--gog-calendar-color'\r\n | '--gog-calendar-day-bg'\r\n | '--gog-calendar-day-border-style'\r\n | '--gog-calendar-day-border-width'\r\n | '--gog-calendar-day-color'\r\n | '--gog-calendar-day-hover-bg'\r\n | '--gog-calendar-day-outside-color'\r\n | '--gog-calendar-day-radius'\r\n | '--gog-calendar-day-rest-bg'\r\n | '--gog-calendar-day-rest-color'\r\n | '--gog-calendar-day-size'\r\n | '--gog-calendar-disabled-opacity'\r\n | '--gog-calendar-divider-color'\r\n | '--gog-calendar-divider-style'\r\n | '--gog-calendar-divider-width'\r\n | '--gog-calendar-focus-ring-color'\r\n | '--gog-calendar-focus-ring-offset'\r\n | '--gog-calendar-focus-ring-width'\r\n | '--gog-calendar-font-family'\r\n | '--gog-calendar-footer-gap'\r\n | '--gog-calendar-header-gap'\r\n | '--gog-calendar-header-margin'\r\n | '--gog-calendar-lg-day-size'\r\n | '--gog-calendar-lg-font-size'\r\n | '--gog-calendar-md-day-size'\r\n | '--gog-calendar-md-font-size'\r\n | '--gog-calendar-months-gap'\r\n | '--gog-calendar-nav-bg'\r\n | '--gog-calendar-nav-color'\r\n | '--gog-calendar-nav-hover-bg'\r\n | '--gog-calendar-nav-hover-color'\r\n | '--gog-calendar-nav-icon-overlap'\r\n | '--gog-calendar-nav-icon-size'\r\n | '--gog-calendar-nav-radius'\r\n | '--gog-calendar-nav-size'\r\n | '--gog-calendar-padding'\r\n | '--gog-calendar-range-bg'\r\n | '--gog-calendar-range-color'\r\n | '--gog-calendar-selected-bg'\r\n | '--gog-calendar-selected-color'\r\n | '--gog-calendar-selected-font-weight'\r\n | '--gog-calendar-slg-day-size'\r\n | '--gog-calendar-slg-font-size'\r\n | '--gog-calendar-sm-day-size'\r\n | '--gog-calendar-sm-font-size'\r\n | '--gog-calendar-time-gap'\r\n | '--gog-calendar-time-input-bg'\r\n | '--gog-calendar-time-input-padding'\r\n | '--gog-calendar-time-input-width'\r\n | '--gog-calendar-time-margin'\r\n | '--gog-calendar-title-color'\r\n | '--gog-calendar-title-font-weight'\r\n | '--gog-calendar-today-border-color'\r\n | '--gog-calendar-today-font-weight'\r\n | '--gog-calendar-transition-duration'\r\n | '--gog-calendar-weekday-color'\r\n | '--gog-calendar-weekday-font-size'\r\n | '--gog-calendar-weekday-font-weight'\r\n | '--gog-calendar-weekday-padding'\r\n | '--gog-calendar-weekday-text-transform'\r\n | '--gog-calendar-xsm-day-size'\r\n | '--gog-calendar-xsm-font-size'\r\n | '--gog-checkbox-bg'\r\n | '--gog-checkbox-border-color'\r\n | '--gog-checkbox-border-style'\r\n | '--gog-checkbox-border-width'\r\n | '--gog-checkbox-box-size'\r\n | '--gog-checkbox-checked-bg'\r\n | '--gog-checkbox-checked-border'\r\n | '--gog-checkbox-dash-height'\r\n | '--gog-checkbox-dash-radius'\r\n | '--gog-checkbox-dash-width-ratio'\r\n | '--gog-checkbox-disabled-opacity'\r\n | '--gog-checkbox-focus-ring'\r\n | '--gog-checkbox-focus-ring-offset'\r\n | '--gog-checkbox-focus-ring-width'\r\n | '--gog-checkbox-font-family'\r\n | '--gog-checkbox-gap'\r\n | '--gog-checkbox-icon-color'\r\n | '--gog-checkbox-icon-size'\r\n | '--gog-checkbox-label-color'\r\n | '--gog-checkbox-label-line-height'\r\n | '--gog-checkbox-label-size'\r\n | '--gog-checkbox-padding'\r\n | '--gog-checkbox-radius'\r\n | '--gog-checkbox-transition-duration'\r\n | '--gog-chip-avatar-inset-ratio'\r\n | '--gog-chip-avatar-size'\r\n | '--gog-chip-bg'\r\n | '--gog-chip-border'\r\n | '--gog-chip-border-style'\r\n | '--gog-chip-border-width'\r\n | '--gog-chip-color'\r\n | '--gog-chip-disabled-opacity'\r\n | '--gog-chip-focus-ring-offset'\r\n | '--gog-chip-focus-ring-width'\r\n | '--gog-chip-font-family'\r\n | '--gog-chip-font-size'\r\n | '--gog-chip-font-weight'\r\n | '--gog-chip-gap'\r\n | '--gog-chip-hover-bg'\r\n | '--gog-chip-icon-size'\r\n | '--gog-chip-lg-avatar-size'\r\n | '--gog-chip-lg-font-size'\r\n | '--gog-chip-lg-gap'\r\n | '--gog-chip-lg-icon-size'\r\n | '--gog-chip-lg-padding-block'\r\n | '--gog-chip-lg-padding-inline'\r\n | '--gog-chip-lg-remove-size'\r\n | '--gog-chip-line-height'\r\n | '--gog-chip-md-avatar-size'\r\n | '--gog-chip-md-font-size'\r\n | '--gog-chip-md-gap'\r\n | '--gog-chip-md-icon-size'\r\n | '--gog-chip-md-padding-block'\r\n | '--gog-chip-md-padding-inline'\r\n | '--gog-chip-md-remove-size'\r\n | '--gog-chip-padding-block'\r\n | '--gog-chip-padding-inline'\r\n | '--gog-chip-pill-radius'\r\n | '--gog-chip-radius'\r\n | '--gog-chip-remove-color'\r\n | '--gog-chip-remove-hover-color'\r\n | '--gog-chip-remove-inset-ratio'\r\n | '--gog-chip-remove-scale'\r\n | '--gog-chip-remove-size'\r\n | '--gog-chip-slg-avatar-size'\r\n | '--gog-chip-slg-font-size'\r\n | '--gog-chip-slg-gap'\r\n | '--gog-chip-slg-icon-size'\r\n | '--gog-chip-slg-padding-block'\r\n | '--gog-chip-slg-padding-inline'\r\n | '--gog-chip-slg-remove-size'\r\n | '--gog-chip-sm-avatar-size'\r\n | '--gog-chip-sm-font-size'\r\n | '--gog-chip-sm-gap'\r\n | '--gog-chip-sm-icon-size'\r\n | '--gog-chip-sm-padding-block'\r\n | '--gog-chip-sm-padding-inline'\r\n | '--gog-chip-sm-remove-size'\r\n | '--gog-chip-xsm-avatar-size'\r\n | '--gog-chip-xsm-font-size'\r\n | '--gog-chip-xsm-gap'\r\n | '--gog-chip-xsm-icon-size'\r\n | '--gog-chip-xsm-padding-block'\r\n | '--gog-chip-xsm-padding-inline'\r\n | '--gog-chip-xsm-remove-size'\r\n | '--gog-collapsible-disabled-opacity'\r\n | '--gog-collapsible-max-height'\r\n | '--gog-collapsible-transition-duration'\r\n | '--gog-confirm-actions-gap'\r\n | '--gog-confirm-actions-offset'\r\n | '--gog-confirm-color'\r\n | '--gog-confirm-description-color'\r\n | '--gog-confirm-gap'\r\n | '--gog-confirm-max-width'\r\n | '--gog-confirm-min-width'\r\n | '--gog-control-border-style'\r\n | '--gog-control-border-width'\r\n | '--gog-control-checkbox-box-size-lg'\r\n | '--gog-control-checkbox-box-size-md'\r\n | '--gog-control-checkbox-box-size-slg'\r\n | '--gog-control-checkbox-box-size-sm'\r\n | '--gog-control-checkbox-box-size-xsm'\r\n | '--gog-control-checkbox-icon-size-lg'\r\n | '--gog-control-checkbox-icon-size-md'\r\n | '--gog-control-checkbox-icon-size-slg'\r\n | '--gog-control-checkbox-icon-size-sm'\r\n | '--gog-control-checkbox-icon-size-xsm'\r\n | '--gog-control-checkbox-label-size-lg'\r\n | '--gog-control-checkbox-label-size-md'\r\n | '--gog-control-checkbox-label-size-slg'\r\n | '--gog-control-checkbox-label-size-sm'\r\n | '--gog-control-checkbox-label-size-xsm'\r\n | '--gog-control-checkbox-padding'\r\n | '--gog-control-icon-offset'\r\n | '--gog-control-padding-x'\r\n | '--gog-control-padding-y'\r\n | '--gog-danger-color'\r\n | '--gog-datepicker-actions-gap'\r\n | '--gog-datepicker-actions-inset'\r\n | '--gog-datepicker-actions-reserve'\r\n | '--gog-datepicker-bg'\r\n | '--gog-datepicker-border-color'\r\n | '--gog-datepicker-border-style'\r\n | '--gog-datepicker-border-width'\r\n | '--gog-datepicker-clear-color'\r\n | '--gog-datepicker-clear-icon-ratio'\r\n | '--gog-datepicker-color'\r\n | '--gog-datepicker-disabled-opacity'\r\n | '--gog-datepicker-error-border-color'\r\n | '--gog-datepicker-error-color'\r\n | '--gog-datepicker-error-font-family'\r\n | '--gog-datepicker-error-font-size'\r\n | '--gog-datepicker-field-bg'\r\n | '--gog-datepicker-float-label-in-top'\r\n | '--gog-datepicker-float-label-on-bg'\r\n | '--gog-datepicker-float-label-over-gap'\r\n | '--gog-datepicker-float-label-over-reserve'\r\n | '--gog-datepicker-float-label-reserve'\r\n | '--gog-datepicker-focus-ring-color'\r\n | '--gog-datepicker-focus-ring-offset'\r\n | '--gog-datepicker-focus-ring-width'\r\n | '--gog-datepicker-font-family'\r\n | '--gog-datepicker-font-size'\r\n | '--gog-datepicker-gap'\r\n | '--gog-datepicker-hover-border-color'\r\n | '--gog-datepicker-icon-color'\r\n | '--gog-datepicker-icon-hover-color'\r\n | '--gog-datepicker-label-color'\r\n | '--gog-datepicker-label-font-family'\r\n | '--gog-datepicker-label-font-size'\r\n | '--gog-datepicker-label-letter-spacing'\r\n | '--gog-datepicker-label-text-transform'\r\n | '--gog-datepicker-line-height'\r\n | '--gog-datepicker-min-width'\r\n | '--gog-datepicker-padding-x'\r\n | '--gog-datepicker-padding-y'\r\n | '--gog-datepicker-panel-bg'\r\n | '--gog-datepicker-panel-border-color'\r\n | '--gog-datepicker-panel-border-style'\r\n | '--gog-datepicker-panel-border-width'\r\n | '--gog-datepicker-panel-gap'\r\n | '--gog-datepicker-panel-radius'\r\n | '--gog-datepicker-panel-shadow'\r\n | '--gog-datepicker-placeholder-color'\r\n | '--gog-datepicker-radius'\r\n | '--gog-datepicker-text-color'\r\n | '--gog-datepicker-toggle-icon-size'\r\n | '--gog-datepicker-transition-duration'\r\n | '--gog-dialog-backdrop-bg'\r\n | '--gog-dialog-backdrop-blur'\r\n | '--gog-dialog-backdrop-fade-duration'\r\n | '--gog-dialog-backdrop-padding'\r\n | '--gog-dialog-bg'\r\n | '--gog-dialog-body-max-height'\r\n | '--gog-dialog-body-padding'\r\n | '--gog-dialog-border'\r\n | '--gog-dialog-border-style'\r\n | '--gog-dialog-border-width'\r\n | '--gog-dialog-close-color'\r\n | '--gog-dialog-close-focus-ring'\r\n | '--gog-dialog-close-focus-ring-offset'\r\n | '--gog-dialog-close-focus-ring-width'\r\n | '--gog-dialog-close-font-size'\r\n | '--gog-dialog-close-hover-bg'\r\n | '--gog-dialog-close-hover-border'\r\n | '--gog-dialog-close-hover-color'\r\n | '--gog-dialog-close-size'\r\n | '--gog-dialog-color'\r\n | '--gog-dialog-enter-distance'\r\n | '--gog-dialog-enter-duration'\r\n | '--gog-dialog-font-family'\r\n | '--gog-dialog-header-border-color'\r\n | '--gog-dialog-header-gap'\r\n | '--gog-dialog-header-padding'\r\n | '--gog-dialog-max-height'\r\n | '--gog-dialog-min-width'\r\n | '--gog-dialog-offset-x'\r\n | '--gog-dialog-offset-y'\r\n | '--gog-dialog-radius'\r\n | '--gog-dialog-shadow'\r\n | '--gog-disabled-opacity'\r\n | '--gog-divider-block-spacing'\r\n | '--gog-divider-color'\r\n | '--gog-divider-dashed-style'\r\n | '--gog-divider-dotted-style'\r\n | '--gog-divider-inline-spacing'\r\n | '--gog-divider-inset-size'\r\n | '--gog-divider-label-color'\r\n | '--gog-divider-label-font-family'\r\n | '--gog-divider-label-font-size'\r\n | '--gog-divider-label-font-weight'\r\n | '--gog-divider-label-gap'\r\n | '--gog-divider-label-line-height'\r\n | '--gog-divider-line-color'\r\n | '--gog-divider-line-thickness'\r\n | '--gog-divider-solid-style'\r\n | '--gog-divider-spacing'\r\n | '--gog-divider-thickness'\r\n | '--gog-divider-vertical-length'\r\n | '--gog-dropdown-z'\r\n | '--gog-duration-base'\r\n | '--gog-duration-fast'\r\n | '--gog-duration-slow'\r\n | '--gog-easing'\r\n | '--gog-field-float-label-in-top'\r\n | '--gog-field-float-label-over-gap'\r\n | '--gog-field-float-label-over-reserve'\r\n | '--gog-field-float-label-reserve'\r\n | '--gog-field-lg-font-size'\r\n | '--gog-field-lg-icon-inset'\r\n | '--gog-field-lg-icon-offset'\r\n | '--gog-field-lg-padding-x'\r\n | '--gog-field-lg-padding-y'\r\n | '--gog-field-md-font-size'\r\n | '--gog-field-md-icon-inset'\r\n | '--gog-field-md-icon-offset'\r\n | '--gog-field-md-padding-x'\r\n | '--gog-field-md-padding-y'\r\n | '--gog-field-slg-font-size'\r\n | '--gog-field-slg-icon-inset'\r\n | '--gog-field-slg-icon-offset'\r\n | '--gog-field-slg-padding-x'\r\n | '--gog-field-slg-padding-y'\r\n | '--gog-field-sm-font-size'\r\n | '--gog-field-sm-icon-inset'\r\n | '--gog-field-sm-icon-offset'\r\n | '--gog-field-sm-padding-x'\r\n | '--gog-field-sm-padding-y'\r\n | '--gog-field-xsm-font-size'\r\n | '--gog-field-xsm-icon-inset'\r\n | '--gog-field-xsm-icon-offset'\r\n | '--gog-field-xsm-padding-x'\r\n | '--gog-field-xsm-padding-y'\r\n | '--gog-focus-ring-offset'\r\n | '--gog-focus-ring-width'\r\n | '--gog-font-body'\r\n | '--gog-font-heading'\r\n | '--gog-font-mono'\r\n | '--gog-hover-color'\r\n | '--gog-icon-fallback-size'\r\n | '--gog-icon-size'\r\n | '--gog-icon-stroke-width'\r\n | '--gog-info-color'\r\n | '--gog-input-clear-icon-ratio'\r\n | '--gog-input-clear-inset'\r\n | '--gog-input-clear-radius'\r\n | '--gog-input-disabled-opacity'\r\n | '--gog-input-error-color'\r\n | '--gog-input-error-font-size'\r\n | '--gog-input-error-offset'\r\n | '--gog-input-field-bg'\r\n | '--gog-input-field-border'\r\n | '--gog-input-field-border-style'\r\n | '--gog-input-field-border-width'\r\n | '--gog-input-field-color'\r\n | '--gog-input-float-label-in-top'\r\n | '--gog-input-float-label-on-bg'\r\n | '--gog-input-float-label-over-gap'\r\n | '--gog-input-float-label-over-reserve'\r\n | '--gog-input-float-label-reserve'\r\n | '--gog-input-focus-border'\r\n | '--gog-input-focus-glow'\r\n | '--gog-input-focus-ring'\r\n | '--gog-input-focus-ring-offset'\r\n | '--gog-input-focus-ring-width'\r\n | '--gog-input-font'\r\n | '--gog-input-font-family'\r\n | '--gog-input-gap'\r\n | '--gog-input-icon-action-radius'\r\n | '--gog-input-icon-color'\r\n | '--gog-input-icon-focus-ring-width'\r\n | '--gog-input-icon-hover-color'\r\n | '--gog-input-label-color'\r\n | '--gog-input-label-font-family'\r\n | '--gog-input-label-font-size'\r\n | '--gog-input-label-letter-spacing'\r\n | '--gog-input-label-text-transform'\r\n | '--gog-input-padding-x'\r\n | '--gog-input-padding-y'\r\n | '--gog-input-placeholder-color'\r\n | '--gog-input-radius'\r\n | '--gog-input-spin-hover-bg'\r\n | '--gog-input-spin-width'\r\n | '--gog-input-transition-duration'\r\n | '--gog-ms-actions-gap'\r\n | '--gog-ms-actions-inset'\r\n | '--gog-ms-arrow-icon-ratio'\r\n | '--gog-ms-arrow-transition-duration'\r\n | '--gog-ms-border-color'\r\n | '--gog-ms-checkbox-bg'\r\n | '--gog-ms-checkbox-border'\r\n | '--gog-ms-checkbox-checked-bg'\r\n | '--gog-ms-checkbox-checked-color'\r\n | '--gog-ms-clear-icon-ratio'\r\n | '--gog-ms-clear-radius'\r\n | '--gog-ms-controls-gap'\r\n | '--gog-ms-controls-padding'\r\n | '--gog-ms-disabled-opacity'\r\n | '--gog-ms-error-color'\r\n | '--gog-ms-error-font-size'\r\n | '--gog-ms-error-offset'\r\n | '--gog-ms-field-bg'\r\n | '--gog-ms-field-border'\r\n | '--gog-ms-field-border-style'\r\n | '--gog-ms-field-border-width'\r\n | '--gog-ms-field-color'\r\n | '--gog-ms-filter-border-color'\r\n | '--gog-ms-filter-border-style'\r\n | '--gog-ms-filter-border-width'\r\n | '--gog-ms-filter-empty-color'\r\n | '--gog-ms-filter-empty-padding'\r\n | '--gog-ms-filter-input-bg'\r\n | '--gog-ms-filter-input-border'\r\n | '--gog-ms-filter-input-color'\r\n | '--gog-ms-filter-input-padding-x'\r\n | '--gog-ms-filter-input-padding-y'\r\n | '--gog-ms-filter-input-radius'\r\n | '--gog-ms-filter-padding'\r\n | '--gog-ms-float-label-in-top'\r\n | '--gog-ms-float-label-over-gap'\r\n | '--gog-ms-float-label-over-reserve'\r\n | '--gog-ms-float-label-reserve'\r\n | '--gog-ms-focus-border'\r\n | '--gog-ms-focus-glow'\r\n | '--gog-ms-focus-ring'\r\n | '--gog-ms-focus-ring-offset'\r\n | '--gog-ms-focus-ring-width'\r\n | '--gog-ms-font-family'\r\n | '--gog-ms-gap'\r\n | '--gog-ms-label-color'\r\n | '--gog-ms-label-font-family'\r\n | '--gog-ms-label-font-size'\r\n | '--gog-ms-label-letter-spacing'\r\n | '--gog-ms-label-text-transform'\r\n | '--gog-ms-mark-icon-ratio'\r\n | '--gog-ms-mark-size-ratio'\r\n | '--gog-ms-min-width'\r\n | '--gog-ms-option-color'\r\n | '--gog-ms-option-disabled-opacity'\r\n | '--gog-ms-option-gap'\r\n | '--gog-ms-option-gap-inline'\r\n | '--gog-ms-option-height'\r\n | '--gog-ms-option-hover-bg'\r\n | '--gog-ms-option-radius'\r\n | '--gog-ms-option-transition-duration'\r\n | '--gog-ms-options-padding'\r\n | '--gog-ms-overflow-color'\r\n | '--gog-ms-overflow-font-size'\r\n | '--gog-ms-overflow-gap'\r\n | '--gog-ms-panel-bg'\r\n | '--gog-ms-panel-border'\r\n | '--gog-ms-panel-max-height'\r\n | '--gog-ms-panel-max-width'\r\n | '--gog-ms-panel-offset'\r\n | '--gog-ms-panel-shadow'\r\n | '--gog-ms-placeholder-color'\r\n | '--gog-ms-radius'\r\n | '--gog-ms-transition-duration'\r\n | '--gog-ms-value-color'\r\n | '--gog-multiselect-actions-gap'\r\n | '--gog-multiselect-actions-inset'\r\n | '--gog-multiselect-arrow-icon-ratio'\r\n | '--gog-multiselect-arrow-transition-duration'\r\n | '--gog-multiselect-border-color'\r\n | '--gog-multiselect-checkbox-bg'\r\n | '--gog-multiselect-checkbox-border'\r\n | '--gog-multiselect-checkbox-checked-bg'\r\n | '--gog-multiselect-checkbox-checked-color'\r\n | '--gog-multiselect-clear-icon-ratio'\r\n | '--gog-multiselect-clear-radius'\r\n | '--gog-multiselect-controls-gap'\r\n | '--gog-multiselect-controls-padding'\r\n | '--gog-multiselect-disabled-opacity'\r\n | '--gog-multiselect-error-color'\r\n | '--gog-multiselect-error-font-size'\r\n | '--gog-multiselect-error-offset'\r\n | '--gog-multiselect-field-bg'\r\n | '--gog-multiselect-field-border'\r\n | '--gog-multiselect-field-border-style'\r\n | '--gog-multiselect-field-border-width'\r\n | '--gog-multiselect-field-color'\r\n | '--gog-multiselect-filter-border-color'\r\n | '--gog-multiselect-filter-border-style'\r\n | '--gog-multiselect-filter-border-width'\r\n | '--gog-multiselect-filter-empty-color'\r\n | '--gog-multiselect-filter-empty-padding'\r\n | '--gog-multiselect-filter-input-bg'\r\n | '--gog-multiselect-filter-input-border'\r\n | '--gog-multiselect-filter-input-color'\r\n | '--gog-multiselect-filter-input-padding-x'\r\n | '--gog-multiselect-filter-input-padding-y'\r\n | '--gog-multiselect-filter-input-radius'\r\n | '--gog-multiselect-filter-padding'\r\n | '--gog-multiselect-float-label-in-top'\r\n | '--gog-multiselect-float-label-on-bg'\r\n | '--gog-multiselect-float-label-over-gap'\r\n | '--gog-multiselect-float-label-over-reserve'\r\n | '--gog-multiselect-float-label-reserve'\r\n | '--gog-multiselect-focus-border'\r\n | '--gog-multiselect-focus-glow'\r\n | '--gog-multiselect-focus-ring'\r\n | '--gog-multiselect-focus-ring-offset'\r\n | '--gog-multiselect-focus-ring-width'\r\n | '--gog-multiselect-font-family'\r\n | '--gog-multiselect-font-size'\r\n | '--gog-multiselect-gap'\r\n | '--gog-multiselect-label-color'\r\n | '--gog-multiselect-label-font-family'\r\n | '--gog-multiselect-label-font-size'\r\n | '--gog-multiselect-label-letter-spacing'\r\n | '--gog-multiselect-label-text-transform'\r\n | '--gog-multiselect-mark-icon-ratio'\r\n | '--gog-multiselect-mark-size-ratio'\r\n | '--gog-multiselect-min-width'\r\n | '--gog-multiselect-option-color'\r\n | '--gog-multiselect-option-disabled-opacity'\r\n | '--gog-multiselect-option-gap'\r\n | '--gog-multiselect-option-gap-inline'\r\n | '--gog-multiselect-option-height'\r\n | '--gog-multiselect-option-hover-bg'\r\n | '--gog-multiselect-option-radius'\r\n | '--gog-multiselect-option-transition-duration'\r\n | '--gog-multiselect-options-padding'\r\n | '--gog-multiselect-overflow-color'\r\n | '--gog-multiselect-overflow-font-size'\r\n | '--gog-multiselect-overflow-gap'\r\n | '--gog-multiselect-padding-x'\r\n | '--gog-multiselect-padding-y'\r\n | '--gog-multiselect-panel-bg'\r\n | '--gog-multiselect-panel-border'\r\n | '--gog-multiselect-panel-max-height'\r\n | '--gog-multiselect-panel-max-width'\r\n | '--gog-multiselect-panel-offset'\r\n | '--gog-multiselect-panel-shadow'\r\n | '--gog-multiselect-placeholder-color'\r\n | '--gog-multiselect-radius'\r\n | '--gog-multiselect-transition-duration'\r\n | '--gog-multiselect-value-color'\r\n | '--gog-muted-text-color'\r\n | '--gog-paginator-ellipsis-color'\r\n | '--gog-paginator-ellipsis-font-family'\r\n | '--gog-paginator-ellipsis-font-size'\r\n | '--gog-paginator-ellipsis-min-width'\r\n | '--gog-paginator-gap'\r\n | '--gog-paginator-page-size-min-width'\r\n | '--gog-panel-border-style'\r\n | '--gog-panel-border-width'\r\n | '--gog-panel-radius'\r\n | '--gog-panel-shadow'\r\n | '--gog-primary-color'\r\n | '--gog-progressbar-accent-bg'\r\n | '--gog-progressbar-accent-buffer-bg'\r\n | '--gog-progressbar-buffer-bg'\r\n | '--gog-progressbar-danger-bg'\r\n | '--gog-progressbar-danger-buffer-bg'\r\n | '--gog-progressbar-fill-bg'\r\n | '--gog-progressbar-height'\r\n | '--gog-progressbar-indeterminate-duration'\r\n | '--gog-progressbar-indeterminate-easing'\r\n | '--gog-progressbar-info-bg'\r\n | '--gog-progressbar-info-buffer-bg'\r\n | '--gog-progressbar-lg-height'\r\n | '--gog-progressbar-md-height'\r\n | '--gog-progressbar-radius'\r\n | '--gog-progressbar-slg-height'\r\n | '--gog-progressbar-sm-height'\r\n | '--gog-progressbar-stripe-color'\r\n | '--gog-progressbar-stripe-size'\r\n | '--gog-progressbar-success-bg'\r\n | '--gog-progressbar-success-buffer-bg'\r\n | '--gog-progressbar-track-base-bg'\r\n | '--gog-progressbar-track-bg'\r\n | '--gog-progressbar-transition-duration'\r\n | '--gog-progressbar-value-color'\r\n | '--gog-progressbar-value-font-family'\r\n | '--gog-progressbar-value-font-size'\r\n | '--gog-progressbar-value-gap'\r\n | '--gog-progressbar-value-min-width'\r\n | '--gog-progressbar-warning-bg'\r\n | '--gog-progressbar-warning-buffer-bg'\r\n | '--gog-progressbar-xsm-height'\r\n | '--gog-radio-bg'\r\n | '--gog-radio-border-color'\r\n | '--gog-radio-border-style'\r\n | '--gog-radio-border-width'\r\n | '--gog-radio-box-size'\r\n | '--gog-radio-checked-bg'\r\n | '--gog-radio-checked-border'\r\n | '--gog-radio-disabled-opacity'\r\n | '--gog-radio-dot-color'\r\n | '--gog-radio-dot-size-ratio'\r\n | '--gog-radio-error-color'\r\n | '--gog-radio-error-font-size'\r\n | '--gog-radio-focus-ring'\r\n | '--gog-radio-focus-ring-offset'\r\n | '--gog-radio-focus-ring-width'\r\n | '--gog-radio-font-family'\r\n | '--gog-radio-gap'\r\n | '--gog-radio-group-gap'\r\n | '--gog-radio-group-label-color'\r\n | '--gog-radio-group-label-size'\r\n | '--gog-radio-group-option-gap'\r\n | '--gog-radio-group-option-gap-horizontal'\r\n | '--gog-radio-label-color'\r\n | '--gog-radio-label-line-height'\r\n | '--gog-radio-label-size'\r\n | '--gog-radio-padding'\r\n | '--gog-radio-transition-duration'\r\n | '--gog-radius'\r\n | '--gog-scroll-corner-bg'\r\n | '--gog-scroll-fade-duration'\r\n | '--gog-scroll-focus-ring'\r\n | '--gog-scroll-focus-ring-width'\r\n | '--gog-scroll-normal-thumb-hit-padding'\r\n | '--gog-scroll-normal-thumb-min-size'\r\n | '--gog-scroll-normal-track-width'\r\n | '--gog-scroll-thin-thumb-hit-padding'\r\n | '--gog-scroll-thin-thumb-min-size'\r\n | '--gog-scroll-thin-track-width'\r\n | '--gog-scroll-thumb-active-bg'\r\n | '--gog-scroll-thumb-bg'\r\n | '--gog-scroll-thumb-hover-bg'\r\n | '--gog-scroll-thumb-inset'\r\n | '--gog-scroll-thumb-radius'\r\n | '--gog-scroll-track-bg'\r\n | '--gog-scroll-track-radius'\r\n | '--gog-secondary-color'\r\n | '--gog-select-chevron-color'\r\n | '--gog-select-chevron-icon-ratio'\r\n | '--gog-select-chevron-inset'\r\n | '--gog-select-clear-color'\r\n | '--gog-select-clear-gap'\r\n | '--gog-select-clear-hover-color'\r\n | '--gog-select-clear-icon-ratio'\r\n | '--gog-select-clear-radius'\r\n | '--gog-select-control-font'\r\n | '--gog-select-control-gap'\r\n | '--gog-select-control-padding-x'\r\n | '--gog-select-control-padding-y'\r\n | '--gog-select-disabled-opacity'\r\n | '--gog-select-error-color'\r\n | '--gog-select-error-font-size'\r\n | '--gog-select-field-bg'\r\n | '--gog-select-field-border'\r\n | '--gog-select-field-border-style'\r\n | '--gog-select-field-border-width'\r\n | '--gog-select-field-color'\r\n | '--gog-select-filter-border-color'\r\n | '--gog-select-filter-border-style'\r\n | '--gog-select-filter-border-width'\r\n | '--gog-select-filter-empty-color'\r\n | '--gog-select-filter-empty-padding'\r\n | '--gog-select-filter-input-bg'\r\n | '--gog-select-filter-input-border'\r\n | '--gog-select-filter-input-color'\r\n | '--gog-select-filter-input-padding-x'\r\n | '--gog-select-filter-input-padding-y'\r\n | '--gog-select-filter-input-radius'\r\n | '--gog-select-filter-padding'\r\n | '--gog-select-float-label-in-top'\r\n | '--gog-select-float-label-on-bg'\r\n | '--gog-select-float-label-over-gap'\r\n | '--gog-select-float-label-over-reserve'\r\n | '--gog-select-float-label-reserve'\r\n | '--gog-select-focus-border'\r\n | '--gog-select-focus-glow'\r\n | '--gog-select-focus-ring'\r\n | '--gog-select-focus-ring-offset'\r\n | '--gog-select-focus-ring-width'\r\n | '--gog-select-font-family'\r\n | '--gog-select-gap'\r\n | '--gog-select-label-color'\r\n | '--gog-select-label-font-family'\r\n | '--gog-select-label-font-size'\r\n | '--gog-select-label-letter-spacing'\r\n | '--gog-select-label-text-transform'\r\n | '--gog-select-mark-icon-ratio'\r\n | '--gog-select-mark-size-ratio'\r\n | '--gog-select-min-width'\r\n | '--gog-select-option-color'\r\n | '--gog-select-option-disabled-opacity'\r\n | '--gog-select-option-gap'\r\n | '--gog-select-option-height'\r\n | '--gog-select-option-hover-bg'\r\n | '--gog-select-option-selected-color'\r\n | '--gog-select-option-transition-duration'\r\n | '--gog-select-panel-bg'\r\n | '--gog-select-panel-max-height'\r\n | '--gog-select-panel-max-width'\r\n | '--gog-select-panel-offset'\r\n | '--gog-select-panel-shadow'\r\n | '--gog-select-placeholder-color'\r\n | '--gog-select-radius'\r\n | '--gog-select-transition-duration'\r\n | '--gog-skeleton-base'\r\n | '--gog-skeleton-circle-size-lg'\r\n | '--gog-skeleton-circle-size-md'\r\n | '--gog-skeleton-circle-size-slg'\r\n | '--gog-skeleton-circle-size-sm'\r\n | '--gog-skeleton-circle-size-xsm'\r\n | '--gog-skeleton-line-gap'\r\n | '--gog-skeleton-line-height-lg'\r\n | '--gog-skeleton-line-height-md'\r\n | '--gog-skeleton-line-height-slg'\r\n | '--gog-skeleton-line-height-sm'\r\n | '--gog-skeleton-line-height-xsm'\r\n | '--gog-skeleton-line-radius'\r\n | '--gog-skeleton-pulse-duration'\r\n | '--gog-skeleton-pulse-min-opacity'\r\n | '--gog-skeleton-radius'\r\n | '--gog-skeleton-rect-height-lg'\r\n | '--gog-skeleton-rect-height-md'\r\n | '--gog-skeleton-rect-height-slg'\r\n | '--gog-skeleton-rect-height-sm'\r\n | '--gog-skeleton-rect-height-xsm'\r\n | '--gog-skeleton-shine'\r\n | '--gog-skeleton-short-line-width'\r\n | '--gog-skeleton-square-radius'\r\n | '--gog-skeleton-wave-duration'\r\n | '--gog-slider-auto-width'\r\n | '--gog-slider-disabled-opacity'\r\n | '--gog-slider-error-color'\r\n | '--gog-slider-error-font-family'\r\n | '--gog-slider-error-font-size'\r\n | '--gog-slider-fill-bg'\r\n | '--gog-slider-focus-ring'\r\n | '--gog-slider-focus-ring-width'\r\n | '--gog-slider-gap'\r\n | '--gog-slider-label-color'\r\n | '--gog-slider-label-font-family'\r\n | '--gog-slider-label-font-size'\r\n | '--gog-slider-label-letter-spacing'\r\n | '--gog-slider-label-text-transform'\r\n | '--gog-slider-range-color'\r\n | '--gog-slider-range-font-size'\r\n | '--gog-slider-thumb-bg'\r\n | '--gog-slider-thumb-border'\r\n | '--gog-slider-thumb-border-width'\r\n | '--gog-slider-thumb-glow-size'\r\n | '--gog-slider-thumb-radius'\r\n | '--gog-slider-thumb-shadow'\r\n | '--gog-slider-thumb-size'\r\n | '--gog-slider-track-area-height'\r\n | '--gog-slider-track-bg'\r\n | '--gog-slider-track-border-color'\r\n | '--gog-slider-track-border-style'\r\n | '--gog-slider-track-border-width'\r\n | '--gog-slider-track-height'\r\n | '--gog-slider-track-radius'\r\n | '--gog-slider-value-color'\r\n | '--gog-slider-value-font-family'\r\n | '--gog-slider-value-font-size'\r\n | '--gog-slider-value-min-width'\r\n | '--gog-slider-vertical-length'\r\n | '--gog-space-2xl'\r\n | '--gog-space-lg'\r\n | '--gog-space-md'\r\n | '--gog-space-sm'\r\n | '--gog-space-xs'\r\n | '--gog-spinner-arc-inner-color'\r\n | '--gog-spinner-arc-inner-dash'\r\n | '--gog-spinner-arc-inner-glow'\r\n | '--gog-spinner-arc-inner-opacity'\r\n | '--gog-spinner-arc-inner-pulse-opacity'\r\n | '--gog-spinner-arc-inner-stroke-compact'\r\n | '--gog-spinner-arc-outer-color'\r\n | '--gog-spinner-arc-outer-dash'\r\n | '--gog-spinner-arc-outer-glow'\r\n | '--gog-spinner-arc-outer-pulse-opacity'\r\n | '--gog-spinner-diamond-color'\r\n | '--gog-spinner-diamond-glow'\r\n | '--gog-spinner-diamond-opacity'\r\n | '--gog-spinner-glow-color'\r\n | '--gog-spinner-overlay-bg'\r\n | '--gog-spinner-overlay-blur'\r\n | '--gog-spinner-overlay-fade-duration'\r\n | '--gog-spinner-overlay-z'\r\n | '--gog-spinner-pulse-duration'\r\n | '--gog-spinner-ring-duration'\r\n | '--gog-spinner-ring-glow'\r\n | '--gog-spinner-ring-padding'\r\n | '--gog-spinner-rune-color'\r\n | '--gog-spinner-rune-font-family'\r\n | '--gog-spinner-rune-glow'\r\n | '--gog-spinner-rune-pulse-opacity'\r\n | '--gog-spinner-rune-size'\r\n | '--gog-spinner-size-lg'\r\n | '--gog-spinner-size-md'\r\n | '--gog-spinner-size-slg'\r\n | '--gog-spinner-size-sm'\r\n | '--gog-spinner-size-xsm'\r\n | '--gog-spinner-spin-duration'\r\n | '--gog-spinner-spin-slow-duration'\r\n | '--gog-spinner-ticks-duration'\r\n | '--gog-spinner-track-color'\r\n | '--gog-spinner-track-opacity'\r\n | '--gog-success-color'\r\n | '--gog-surface-color'\r\n | '--gog-table-accent-bright'\r\n | '--gog-table-accent-color'\r\n | '--gog-table-border-color'\r\n | '--gog-table-border-style'\r\n | '--gog-table-border-width'\r\n | '--gog-table-empty-font-size'\r\n | '--gog-table-empty-padding'\r\n | '--gog-table-focus-ring'\r\n | '--gog-table-focus-ring-width'\r\n | '--gog-table-font-family'\r\n | '--gog-table-footer-gap'\r\n | '--gog-table-footer-min-height'\r\n | '--gog-table-gap'\r\n | '--gog-table-header-font-family'\r\n | '--gog-table-header-letter-spacing'\r\n | '--gog-table-header-text-transform'\r\n | '--gog-table-hover-bg'\r\n | '--gog-table-lg-padding-v'\r\n | '--gog-table-lg-td-font-size'\r\n | '--gog-table-lg-th-font-size'\r\n | '--gog-table-loading-opacity'\r\n | '--gog-table-loading-padding'\r\n | '--gog-table-md-padding-v'\r\n | '--gog-table-md-td-font-size'\r\n | '--gog-table-md-th-font-size'\r\n | '--gog-table-muted-color'\r\n | '--gog-table-num-col-width'\r\n | '--gog-table-num-font-size'\r\n | '--gog-table-numeric-font-family'\r\n | '--gog-table-padding-h'\r\n | '--gog-table-row-border-width'\r\n | '--gog-table-row-transition-duration'\r\n | '--gog-table-select-col-width'\r\n | '--gog-table-selected-bg'\r\n | '--gog-table-slg-padding-v'\r\n | '--gog-table-slg-td-font-size'\r\n | '--gog-table-slg-th-font-size'\r\n | '--gog-table-sm-padding-v'\r\n | '--gog-table-sm-td-font-size'\r\n | '--gog-table-sm-th-font-size'\r\n | '--gog-table-sort-icon-opacity'\r\n | '--gog-table-sort-icon-size'\r\n | '--gog-table-sort-icon-width'\r\n | '--gog-table-surface'\r\n | '--gog-table-td-font-size'\r\n | '--gog-table-td-padding-v'\r\n | '--gog-table-text-color'\r\n | '--gog-table-th-font-size'\r\n | '--gog-table-th-inner-gap'\r\n | '--gog-table-th-padding-v'\r\n | '--gog-table-total-font-size'\r\n | '--gog-table-total-letter-spacing'\r\n | '--gog-table-total-text-transform'\r\n | '--gog-table-xsm-padding-v'\r\n | '--gog-table-xsm-td-font-size'\r\n | '--gog-table-xsm-th-font-size'\r\n | '--gog-tabs-active-color'\r\n | '--gog-tabs-disabled-opacity'\r\n | '--gog-tabs-focus-ring-color'\r\n | '--gog-tabs-focus-ring-offset'\r\n | '--gog-tabs-focus-ring-width'\r\n | '--gog-tabs-font-family'\r\n | '--gog-tabs-font-weight'\r\n | '--gog-tabs-gap'\r\n | '--gog-tabs-header-border-color'\r\n | '--gog-tabs-header-border-style'\r\n | '--gog-tabs-header-border-width'\r\n | '--gog-tabs-hover-color'\r\n | '--gog-tabs-icon-size'\r\n | '--gog-tabs-indicator-color'\r\n | '--gog-tabs-indicator-radius'\r\n | '--gog-tabs-indicator-thickness'\r\n | '--gog-tabs-letter-spacing'\r\n | '--gog-tabs-lg-font-size'\r\n | '--gog-tabs-lg-padding'\r\n | '--gog-tabs-line-height'\r\n | '--gog-tabs-md-font-size'\r\n | '--gog-tabs-md-padding'\r\n | '--gog-tabs-panel-color'\r\n | '--gog-tabs-panel-padding'\r\n | '--gog-tabs-rest-bg'\r\n | '--gog-tabs-rest-color'\r\n | '--gog-tabs-slg-font-size'\r\n | '--gog-tabs-slg-padding'\r\n | '--gog-tabs-sm-font-size'\r\n | '--gog-tabs-sm-padding'\r\n | '--gog-tabs-tab-bg'\r\n | '--gog-tabs-tab-color'\r\n | '--gog-tabs-tab-font-size'\r\n | '--gog-tabs-tab-gap'\r\n | '--gog-tabs-tab-padding'\r\n | '--gog-tabs-text-transform'\r\n | '--gog-tabs-transition-duration'\r\n | '--gog-tabs-xsm-font-size'\r\n | '--gog-tabs-xsm-padding'\r\n | '--gog-tag-accent'\r\n | '--gog-tag-bg'\r\n | '--gog-tag-bg-base'\r\n | '--gog-tag-bg-mix'\r\n | '--gog-tag-border'\r\n | '--gog-tag-border-style'\r\n | '--gog-tag-border-width'\r\n | '--gog-tag-color'\r\n | '--gog-tag-color-base'\r\n | '--gog-tag-color-mix'\r\n | '--gog-tag-danger-color'\r\n | '--gog-tag-default-color'\r\n | '--gog-tag-font-family'\r\n | '--gog-tag-font-size'\r\n | '--gog-tag-font-weight'\r\n | '--gog-tag-gap'\r\n | '--gog-tag-icon-size'\r\n | '--gog-tag-info-color'\r\n | '--gog-tag-inner-border-width'\r\n | '--gog-tag-lg-font-size'\r\n | '--gog-tag-lg-gap'\r\n | '--gog-tag-lg-icon-size'\r\n | '--gog-tag-lg-padding-block'\r\n | '--gog-tag-lg-padding-inline'\r\n | '--gog-tag-line-height'\r\n | '--gog-tag-md-font-size'\r\n | '--gog-tag-md-gap'\r\n | '--gog-tag-md-icon-size'\r\n | '--gog-tag-md-padding-block'\r\n | '--gog-tag-md-padding-inline'\r\n | '--gog-tag-padding-block'\r\n | '--gog-tag-padding-inline'\r\n | '--gog-tag-pill-radius'\r\n | '--gog-tag-radius'\r\n | '--gog-tag-slg-font-size'\r\n | '--gog-tag-slg-gap'\r\n | '--gog-tag-slg-icon-size'\r\n | '--gog-tag-slg-padding-block'\r\n | '--gog-tag-slg-padding-inline'\r\n | '--gog-tag-sm-font-size'\r\n | '--gog-tag-sm-gap'\r\n | '--gog-tag-sm-icon-size'\r\n | '--gog-tag-sm-padding-block'\r\n | '--gog-tag-sm-padding-inline'\r\n | '--gog-tag-success-color'\r\n | '--gog-tag-warning-color'\r\n | '--gog-tag-xsm-font-size'\r\n | '--gog-tag-xsm-gap'\r\n | '--gog-tag-xsm-icon-size'\r\n | '--gog-tag-xsm-padding-block'\r\n | '--gog-tag-xsm-padding-inline'\r\n | '--gog-text-2xl'\r\n | '--gog-text-3xl'\r\n | '--gog-text-color'\r\n | '--gog-text-lg'\r\n | '--gog-text-md'\r\n | '--gog-text-sm'\r\n | '--gog-text-xl'\r\n | '--gog-text-xs'\r\n | '--gog-textarea-clear-icon-ratio'\r\n | '--gog-textarea-resize-grip-color'\r\n | '--gog-textarea-resize-grip-offset'\r\n | '--gog-textarea-resize-grip-opacity'\r\n | '--gog-textarea-resize-grip-size'\r\n | '--gog-textarea-resize-grip-stripe-gap'\r\n | '--gog-textarea-resize-grip-stripe-width'\r\n | '--gog-textarea-resize-inset-bottom'\r\n | '--gog-textarea-resize-inset-right'\r\n | '--gog-textarea-scrollbar-width'\r\n | '--gog-toast-accent-width'\r\n | '--gog-toast-action-font-size'\r\n | '--gog-toast-action-padding'\r\n | '--gog-toast-actions-gap'\r\n | '--gog-toast-base-z'\r\n | '--gog-toast-bg'\r\n | '--gog-toast-border'\r\n | '--gog-toast-close-font-size'\r\n | '--gog-toast-close-padding'\r\n | '--gog-toast-color'\r\n | '--gog-toast-content-gap'\r\n | '--gog-toast-enter-distance'\r\n | '--gog-toast-error-color'\r\n | '--gog-toast-font-family'\r\n | '--gog-toast-gap'\r\n | '--gog-toast-icon-color'\r\n | '--gog-toast-icon-line-height'\r\n | '--gog-toast-icon-size'\r\n | '--gog-toast-info-color'\r\n | '--gog-toast-main-gap'\r\n | '--gog-toast-max-width'\r\n | '--gog-toast-message-font-size'\r\n | '--gog-toast-message-line-height'\r\n | '--gog-toast-min-width'\r\n | '--gog-toast-padding'\r\n | '--gog-toast-progress-height'\r\n | '--gog-toast-progress-opacity'\r\n | '--gog-toast-radius'\r\n | '--gog-toast-shadow'\r\n | '--gog-toast-stack-expanded-gap'\r\n | '--gog-toast-stack-max-depth'\r\n | '--gog-toast-stack-min-opacity'\r\n | '--gog-toast-stack-opacity-step'\r\n | '--gog-toast-stack-padding'\r\n | '--gog-toast-stack-peek'\r\n | '--gog-toast-stack-scale-step'\r\n | '--gog-toast-success-color'\r\n | '--gog-toast-transition-duration'\r\n | '--gog-toast-warning-color'\r\n | '--gog-toast-z-index'\r\n | '--gog-toggle-border-color'\r\n | '--gog-toggle-border-style'\r\n | '--gog-toggle-border-width'\r\n | '--gog-toggle-disabled-opacity'\r\n | '--gog-toggle-focus-ring-color'\r\n | '--gog-toggle-focus-ring-offset'\r\n | '--gog-toggle-focus-ring-width'\r\n | '--gog-toggle-font-family'\r\n | '--gog-toggle-gap'\r\n | '--gog-toggle-label-color'\r\n | '--gog-toggle-label-line-height'\r\n | '--gog-toggle-lg-label-size'\r\n | '--gog-toggle-lg-state-font-size'\r\n | '--gog-toggle-lg-thumb-size'\r\n | '--gog-toggle-lg-track-height'\r\n | '--gog-toggle-lg-track-width'\r\n | '--gog-toggle-md-label-size'\r\n | '--gog-toggle-md-state-font-size'\r\n | '--gog-toggle-md-thumb-size'\r\n | '--gog-toggle-md-track-height'\r\n | '--gog-toggle-md-track-width'\r\n | '--gog-toggle-on-border-color'\r\n | '--gog-toggle-padding'\r\n | '--gog-toggle-radius'\r\n | '--gog-toggle-slg-label-size'\r\n | '--gog-toggle-slg-state-font-size'\r\n | '--gog-toggle-slg-thumb-size'\r\n | '--gog-toggle-slg-track-height'\r\n | '--gog-toggle-slg-track-width'\r\n | '--gog-toggle-sm-label-size'\r\n | '--gog-toggle-sm-state-font-size'\r\n | '--gog-toggle-sm-thumb-size'\r\n | '--gog-toggle-sm-track-height'\r\n | '--gog-toggle-sm-track-width'\r\n | '--gog-toggle-state-color'\r\n | '--gog-toggle-state-font-weight'\r\n | '--gog-toggle-state-letter-spacing'\r\n | '--gog-toggle-state-offset'\r\n | '--gog-toggle-state-padding-inline'\r\n | '--gog-toggle-state-thumb-gap'\r\n | '--gog-toggle-thumb-bg'\r\n | '--gog-toggle-thumb-inset'\r\n | '--gog-toggle-thumb-off-bg'\r\n | '--gog-toggle-thumb-on-bg'\r\n | '--gog-toggle-thumb-shadow'\r\n | '--gog-toggle-track-bg'\r\n | '--gog-toggle-track-off-bg'\r\n | '--gog-toggle-track-on-bg'\r\n | '--gog-toggle-transition-duration'\r\n | '--gog-toggle-xsm-label-size'\r\n | '--gog-toggle-xsm-state-font-size'\r\n | '--gog-toggle-xsm-thumb-size'\r\n | '--gog-toggle-xsm-track-height'\r\n | '--gog-toggle-xsm-track-width'\r\n | '--gog-tooltip-arrow-size'\r\n | '--gog-tooltip-bg'\r\n | '--gog-tooltip-border-color'\r\n | '--gog-tooltip-border-style'\r\n | '--gog-tooltip-border-width'\r\n | '--gog-tooltip-color'\r\n | '--gog-tooltip-font-family'\r\n | '--gog-tooltip-font-size'\r\n | '--gog-tooltip-gap'\r\n | '--gog-tooltip-line-height'\r\n | '--gog-tooltip-max-height'\r\n | '--gog-tooltip-max-width'\r\n | '--gog-tooltip-padding'\r\n | '--gog-tooltip-radius'\r\n | '--gog-tooltip-shadow'\r\n | '--gog-tooltip-transition-duration'\r\n | '--gog-tooltip-z'\r\n | '--gog-warning-color';\r\n\r\n/** Which of the three layers a token belongs to — see the README's theming section. */\r\nexport type GogTokenLayer = 'foundation' | 'component' | 'instance';\r\n\r\nexport interface GogTokenGroup {\r\n /** The `── Section ──` heading the token sits under in theme.css. */\r\n readonly section: string;\r\n readonly layer: GogTokenLayer;\r\n readonly tokens: readonly GogTokenName[];\r\n}\r\n\r\n/**\r\n * The token catalogue, grouped as theme.css groups it. Exported so a theme editor or docs page\r\n * can enumerate the real tokens instead of keeping a hand-copied list that drifts.\r\n */\r\nexport const GOG_TOKEN_GROUPS: readonly GogTokenGroup[] = [\r\n {\r\n section: 'Typography',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-font-body',\r\n '--gog-font-heading',\r\n '--gog-font-mono',\r\n '--gog-text-2xl',\r\n '--gog-text-3xl',\r\n '--gog-text-lg',\r\n '--gog-text-md',\r\n '--gog-text-sm',\r\n '--gog-text-xl',\r\n '--gog-text-xs',\r\n ],\r\n },\r\n {\r\n section: 'Spacing & geometry',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-panel-border-style',\r\n '--gog-panel-border-width',\r\n '--gog-radius',\r\n '--gog-space-2xl',\r\n '--gog-space-lg',\r\n '--gog-space-md',\r\n '--gog-space-sm',\r\n '--gog-space-xs',\r\n ],\r\n },\r\n {\r\n section: 'Motion',\r\n layer: 'foundation',\r\n tokens: ['--gog-duration-base', '--gog-duration-fast', '--gog-duration-slow', '--gog-easing'],\r\n },\r\n {\r\n section: 'Focus & disabled',\r\n layer: 'foundation',\r\n tokens: ['--gog-disabled-opacity', '--gog-focus-ring-offset', '--gog-focus-ring-width'],\r\n },\r\n {\r\n section: 'Control metrics',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-control-border-style',\r\n '--gog-control-border-width',\r\n '--gog-control-checkbox-box-size-lg',\r\n '--gog-control-checkbox-box-size-md',\r\n '--gog-control-checkbox-box-size-slg',\r\n '--gog-control-checkbox-box-size-sm',\r\n '--gog-control-checkbox-box-size-xsm',\r\n '--gog-control-checkbox-icon-size-lg',\r\n '--gog-control-checkbox-icon-size-md',\r\n '--gog-control-checkbox-icon-size-slg',\r\n '--gog-control-checkbox-icon-size-sm',\r\n '--gog-control-checkbox-icon-size-xsm',\r\n '--gog-control-checkbox-label-size-lg',\r\n '--gog-control-checkbox-label-size-md',\r\n '--gog-control-checkbox-label-size-slg',\r\n '--gog-control-checkbox-label-size-sm',\r\n '--gog-control-checkbox-label-size-xsm',\r\n '--gog-control-checkbox-padding',\r\n '--gog-control-icon-offset',\r\n '--gog-control-padding-x',\r\n '--gog-control-padding-y',\r\n ],\r\n },\r\n {\r\n section: 'Button sizing',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-btn-lg-font-size',\r\n '--gog-btn-lg-padding',\r\n '--gog-btn-md-font-size',\r\n '--gog-btn-md-padding',\r\n '--gog-btn-slg-font-size',\r\n '--gog-btn-slg-padding',\r\n '--gog-btn-sm-font-size',\r\n '--gog-btn-sm-padding',\r\n '--gog-btn-xsm-font-size',\r\n '--gog-btn-xsm-padding',\r\n ],\r\n },\r\n {\r\n section: 'Field sizing (input / select / multiselect share one scale)',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-field-lg-icon-inset',\r\n '--gog-field-lg-icon-offset',\r\n '--gog-field-lg-padding-x',\r\n '--gog-field-lg-padding-y',\r\n '--gog-field-md-icon-inset',\r\n '--gog-field-slg-font-size',\r\n '--gog-field-slg-icon-inset',\r\n '--gog-field-slg-icon-offset',\r\n '--gog-field-slg-padding-x',\r\n '--gog-field-slg-padding-y',\r\n '--gog-field-sm-icon-inset',\r\n '--gog-field-sm-icon-offset',\r\n '--gog-field-sm-padding-x',\r\n '--gog-field-sm-padding-y',\r\n '--gog-field-xsm-icon-inset',\r\n '--gog-field-xsm-icon-offset',\r\n '--gog-field-xsm-padding-x',\r\n '--gog-field-xsm-padding-y',\r\n ],\r\n },\r\n {\r\n section: 'Float label geometry (input / textarea / select / multiselect)',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-field-float-label-in-top',\r\n '--gog-field-float-label-over-gap',\r\n '--gog-field-float-label-over-reserve',\r\n '--gog-field-float-label-reserve',\r\n ],\r\n },\r\n {\r\n section: 'Icon & spinner',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-icon-size',\r\n '--gog-icon-stroke-width',\r\n '--gog-spinner-rune-size',\r\n '--gog-spinner-size-lg',\r\n '--gog-spinner-size-md',\r\n '--gog-spinner-size-slg',\r\n '--gog-spinner-size-sm',\r\n '--gog-spinner-size-xsm',\r\n ],\r\n },\r\n {\r\n section: 'Toast stack',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-toast-enter-distance',\r\n '--gog-toast-gap',\r\n '--gog-toast-max-width',\r\n '--gog-toast-min-width',\r\n '--gog-toast-shadow',\r\n '--gog-toast-stack-padding',\r\n '--gog-toast-z-index',\r\n ],\r\n },\r\n {\r\n section: 'Overlay stacking',\r\n layer: 'foundation',\r\n tokens: ['--gog-dropdown-z', '--gog-spinner-overlay-z'],\r\n },\r\n {\r\n section: 'Light palette (also the no-data-theme default)',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-accent-bright',\r\n '--gog-accent-color',\r\n '--gog-accent-dim',\r\n '--gog-accent-pale',\r\n '--gog-accent-text-color',\r\n '--gog-background-color',\r\n '--gog-border-color',\r\n '--gog-danger-color',\r\n '--gog-hover-color',\r\n '--gog-info-color',\r\n '--gog-muted-text-color',\r\n '--gog-panel-shadow',\r\n '--gog-primary-color',\r\n '--gog-secondary-color',\r\n '--gog-spinner-overlay-bg',\r\n '--gog-success-color',\r\n '--gog-surface-color',\r\n '--gog-text-color',\r\n '--gog-warning-color',\r\n ],\r\n },\r\n {\r\n section: 'Derived foundation tokens',\r\n layer: 'foundation',\r\n tokens: [\r\n '--gog-field-lg-font-size',\r\n '--gog-field-md-font-size',\r\n '--gog-field-md-icon-offset',\r\n '--gog-field-md-padding-x',\r\n '--gog-field-md-padding-y',\r\n '--gog-field-sm-font-size',\r\n '--gog-field-xsm-font-size',\r\n '--gog-panel-radius',\r\n ],\r\n },\r\n {\r\n section: 'Accordion',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-accordion-accent-color',\r\n '--gog-accordion-body-bg',\r\n '--gog-accordion-body-color',\r\n '--gog-accordion-body-font-family',\r\n '--gog-accordion-body-lift',\r\n '--gog-accordion-body-line-height',\r\n '--gog-accordion-body-radius',\r\n '--gog-accordion-body-transition-duration',\r\n '--gog-accordion-border-color',\r\n '--gog-accordion-border-style',\r\n '--gog-accordion-border-width',\r\n '--gog-accordion-chevron-transition-duration',\r\n '--gog-accordion-disabled-opacity',\r\n '--gog-accordion-focus-ring-width',\r\n '--gog-accordion-font-family',\r\n '--gog-accordion-header-bg',\r\n '--gog-accordion-header-gap',\r\n '--gog-accordion-header-text-transform',\r\n '--gog-accordion-hover-bg',\r\n '--gog-accordion-hover-ring',\r\n '--gog-accordion-lg-body-font-size',\r\n '--gog-accordion-lg-body-line-height',\r\n '--gog-accordion-lg-body-padding-bottom',\r\n '--gog-accordion-lg-body-padding-top',\r\n '--gog-accordion-lg-chevron-font-size',\r\n '--gog-accordion-lg-chevron-size',\r\n '--gog-accordion-lg-content-gap',\r\n '--gog-accordion-lg-font-size',\r\n '--gog-accordion-lg-letter-spacing',\r\n '--gog-accordion-lg-padding-x',\r\n '--gog-accordion-lg-padding-y',\r\n '--gog-accordion-md-body-font-size',\r\n '--gog-accordion-md-body-line-height',\r\n '--gog-accordion-md-body-padding-bottom',\r\n '--gog-accordion-md-body-padding-top',\r\n '--gog-accordion-md-chevron-font-size',\r\n '--gog-accordion-md-chevron-size',\r\n '--gog-accordion-md-content-gap',\r\n '--gog-accordion-md-font-size',\r\n '--gog-accordion-md-letter-spacing',\r\n '--gog-accordion-md-padding-x',\r\n '--gog-accordion-md-padding-y',\r\n '--gog-accordion-radius',\r\n '--gog-accordion-slg-body-font-size',\r\n '--gog-accordion-slg-body-line-height',\r\n '--gog-accordion-slg-body-padding-bottom',\r\n '--gog-accordion-slg-body-padding-top',\r\n '--gog-accordion-slg-chevron-font-size',\r\n '--gog-accordion-slg-chevron-size',\r\n '--gog-accordion-slg-content-gap',\r\n '--gog-accordion-slg-font-size',\r\n '--gog-accordion-slg-letter-spacing',\r\n '--gog-accordion-slg-padding-x',\r\n '--gog-accordion-slg-padding-y',\r\n '--gog-accordion-sm-body-font-size',\r\n '--gog-accordion-sm-body-line-height',\r\n '--gog-accordion-sm-body-padding-bottom',\r\n '--gog-accordion-sm-body-padding-top',\r\n '--gog-accordion-sm-chevron-font-size',\r\n '--gog-accordion-sm-chevron-size',\r\n '--gog-accordion-sm-content-gap',\r\n '--gog-accordion-sm-font-size',\r\n '--gog-accordion-sm-letter-spacing',\r\n '--gog-accordion-sm-padding-x',\r\n '--gog-accordion-sm-padding-y',\r\n '--gog-accordion-text-color',\r\n '--gog-accordion-transition-duration',\r\n '--gog-accordion-xsm-body-font-size',\r\n '--gog-accordion-xsm-body-line-height',\r\n '--gog-accordion-xsm-body-padding-bottom',\r\n '--gog-accordion-xsm-body-padding-top',\r\n '--gog-accordion-xsm-chevron-font-size',\r\n '--gog-accordion-xsm-chevron-size',\r\n '--gog-accordion-xsm-content-gap',\r\n '--gog-accordion-xsm-font-size',\r\n '--gog-accordion-xsm-letter-spacing',\r\n '--gog-accordion-xsm-padding-x',\r\n '--gog-accordion-xsm-padding-y',\r\n ],\r\n },\r\n {\r\n section: 'Collapsible',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-collapsible-disabled-opacity',\r\n '--gog-collapsible-max-height',\r\n '--gog-collapsible-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Button',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-btn-active-scale',\r\n '--gog-btn-border-style',\r\n '--gog-btn-border-width',\r\n '--gog-btn-disabled-opacity',\r\n '--gog-btn-focus-ring-offset',\r\n '--gog-btn-focus-ring-width',\r\n '--gog-btn-font-family',\r\n '--gog-btn-font-weight',\r\n '--gog-btn-gap',\r\n '--gog-btn-ghost-bg',\r\n '--gog-btn-ghost-border',\r\n '--gog-btn-ghost-color',\r\n '--gog-btn-ghost-hover-bg',\r\n '--gog-btn-ghost-hover-color',\r\n '--gog-btn-ghost-hover-shadow',\r\n '--gog-btn-ghost-shadow',\r\n '--gog-btn-ghost-spinner-color',\r\n '--gog-btn-letter-spacing',\r\n '--gog-btn-line-height',\r\n '--gog-btn-loading-opacity',\r\n '--gog-btn-outline-bg',\r\n '--gog-btn-outline-border',\r\n '--gog-btn-outline-color',\r\n '--gog-btn-outline-hover-bg',\r\n '--gog-btn-outline-hover-color',\r\n '--gog-btn-outline-hover-shadow',\r\n '--gog-btn-outline-shadow',\r\n '--gog-btn-outline-spinner-color',\r\n '--gog-btn-primary-bg',\r\n '--gog-btn-primary-border',\r\n '--gog-btn-primary-color',\r\n '--gog-btn-primary-hover-bg',\r\n '--gog-btn-primary-hover-color',\r\n '--gog-btn-primary-hover-shadow',\r\n '--gog-btn-primary-shadow',\r\n '--gog-btn-primary-spinner-color',\r\n '--gog-btn-radius',\r\n '--gog-btn-secondary-bg',\r\n '--gog-btn-secondary-border',\r\n '--gog-btn-secondary-color',\r\n '--gog-btn-secondary-hover-bg',\r\n '--gog-btn-secondary-hover-color',\r\n '--gog-btn-secondary-hover-shadow',\r\n '--gog-btn-secondary-shadow',\r\n '--gog-btn-secondary-spinner-color',\r\n '--gog-btn-spinner-max-size',\r\n '--gog-btn-text-transform',\r\n '--gog-btn-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Button toggle group',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-button-toggle-border-color',\r\n '--gog-button-toggle-border-style',\r\n '--gog-button-toggle-border-width',\r\n '--gog-button-toggle-disabled-opacity',\r\n '--gog-button-toggle-focus-ring-color',\r\n '--gog-button-toggle-focus-ring-offset',\r\n '--gog-button-toggle-focus-ring-width',\r\n '--gog-button-toggle-font-family',\r\n '--gog-button-toggle-font-weight',\r\n '--gog-button-toggle-gap',\r\n '--gog-button-toggle-hover-bg',\r\n '--gog-button-toggle-hover-color',\r\n '--gog-button-toggle-icon-size',\r\n '--gog-button-toggle-letter-spacing',\r\n '--gog-button-toggle-line-height',\r\n '--gog-button-toggle-radius',\r\n '--gog-button-toggle-rest-bg',\r\n '--gog-button-toggle-rest-color',\r\n '--gog-button-toggle-selected-bg',\r\n '--gog-button-toggle-selected-border-color',\r\n '--gog-button-toggle-selected-color',\r\n '--gog-button-toggle-separated-gap',\r\n '--gog-button-toggle-text-transform',\r\n '--gog-button-toggle-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Calendar (the month grid inside gog-datepicker, and gog-calendar on its own)',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-calendar-action-padding',\r\n '--gog-calendar-color',\r\n '--gog-calendar-day-border-style',\r\n '--gog-calendar-day-border-width',\r\n '--gog-calendar-day-hover-bg',\r\n '--gog-calendar-day-outside-color',\r\n '--gog-calendar-day-radius',\r\n '--gog-calendar-day-rest-bg',\r\n '--gog-calendar-day-rest-color',\r\n '--gog-calendar-disabled-opacity',\r\n '--gog-calendar-divider-color',\r\n '--gog-calendar-divider-style',\r\n '--gog-calendar-divider-width',\r\n '--gog-calendar-focus-ring-color',\r\n '--gog-calendar-focus-ring-offset',\r\n '--gog-calendar-focus-ring-width',\r\n '--gog-calendar-font-family',\r\n '--gog-calendar-footer-gap',\r\n '--gog-calendar-header-gap',\r\n '--gog-calendar-header-margin',\r\n '--gog-calendar-lg-day-size',\r\n '--gog-calendar-lg-font-size',\r\n '--gog-calendar-md-day-size',\r\n '--gog-calendar-md-font-size',\r\n '--gog-calendar-months-gap',\r\n '--gog-calendar-nav-bg',\r\n '--gog-calendar-nav-color',\r\n '--gog-calendar-nav-hover-bg',\r\n '--gog-calendar-nav-hover-color',\r\n '--gog-calendar-nav-icon-overlap',\r\n '--gog-calendar-nav-icon-size',\r\n '--gog-calendar-nav-radius',\r\n '--gog-calendar-nav-size',\r\n '--gog-calendar-padding',\r\n '--gog-calendar-range-bg',\r\n '--gog-calendar-range-color',\r\n '--gog-calendar-selected-bg',\r\n '--gog-calendar-selected-color',\r\n '--gog-calendar-selected-font-weight',\r\n '--gog-calendar-slg-day-size',\r\n '--gog-calendar-slg-font-size',\r\n '--gog-calendar-sm-day-size',\r\n '--gog-calendar-sm-font-size',\r\n '--gog-calendar-time-gap',\r\n '--gog-calendar-time-input-bg',\r\n '--gog-calendar-time-input-padding',\r\n '--gog-calendar-time-input-width',\r\n '--gog-calendar-time-margin',\r\n '--gog-calendar-title-color',\r\n '--gog-calendar-title-font-weight',\r\n '--gog-calendar-today-border-color',\r\n '--gog-calendar-today-font-weight',\r\n '--gog-calendar-transition-duration',\r\n '--gog-calendar-weekday-color',\r\n '--gog-calendar-weekday-font-size',\r\n '--gog-calendar-weekday-font-weight',\r\n '--gog-calendar-weekday-padding',\r\n '--gog-calendar-weekday-text-transform',\r\n '--gog-calendar-xsm-day-size',\r\n '--gog-calendar-xsm-font-size',\r\n ],\r\n },\r\n {\r\n section: 'Checkbox',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-checkbox-bg',\r\n '--gog-checkbox-border-color',\r\n '--gog-checkbox-border-style',\r\n '--gog-checkbox-border-width',\r\n '--gog-checkbox-checked-bg',\r\n '--gog-checkbox-checked-border',\r\n '--gog-checkbox-dash-height',\r\n '--gog-checkbox-dash-radius',\r\n '--gog-checkbox-dash-width-ratio',\r\n '--gog-checkbox-disabled-opacity',\r\n '--gog-checkbox-focus-ring',\r\n '--gog-checkbox-focus-ring-offset',\r\n '--gog-checkbox-focus-ring-width',\r\n '--gog-checkbox-font-family',\r\n '--gog-checkbox-gap',\r\n '--gog-checkbox-icon-color',\r\n '--gog-checkbox-label-color',\r\n '--gog-checkbox-label-line-height',\r\n '--gog-checkbox-radius',\r\n '--gog-checkbox-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Radio group',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-radio-bg',\r\n '--gog-radio-border-color',\r\n '--gog-radio-border-style',\r\n '--gog-radio-border-width',\r\n '--gog-radio-checked-bg',\r\n '--gog-radio-checked-border',\r\n '--gog-radio-disabled-opacity',\r\n '--gog-radio-dot-color',\r\n '--gog-radio-dot-size-ratio',\r\n '--gog-radio-error-color',\r\n '--gog-radio-error-font-size',\r\n '--gog-radio-focus-ring',\r\n '--gog-radio-focus-ring-offset',\r\n '--gog-radio-focus-ring-width',\r\n '--gog-radio-font-family',\r\n '--gog-radio-gap',\r\n '--gog-radio-group-gap',\r\n '--gog-radio-group-label-color',\r\n '--gog-radio-group-label-size',\r\n '--gog-radio-group-option-gap',\r\n '--gog-radio-group-option-gap-horizontal',\r\n '--gog-radio-label-color',\r\n '--gog-radio-label-line-height',\r\n '--gog-radio-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Chip',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-chip-avatar-inset-ratio',\r\n '--gog-chip-bg',\r\n '--gog-chip-border',\r\n '--gog-chip-border-style',\r\n '--gog-chip-border-width',\r\n '--gog-chip-color',\r\n '--gog-chip-disabled-opacity',\r\n '--gog-chip-focus-ring-offset',\r\n '--gog-chip-focus-ring-width',\r\n '--gog-chip-font-family',\r\n '--gog-chip-font-weight',\r\n '--gog-chip-hover-bg',\r\n '--gog-chip-lg-avatar-size',\r\n '--gog-chip-lg-font-size',\r\n '--gog-chip-lg-gap',\r\n '--gog-chip-lg-icon-size',\r\n '--gog-chip-lg-padding-block',\r\n '--gog-chip-lg-padding-inline',\r\n '--gog-chip-lg-remove-size',\r\n '--gog-chip-line-height',\r\n '--gog-chip-md-avatar-size',\r\n '--gog-chip-md-font-size',\r\n '--gog-chip-md-gap',\r\n '--gog-chip-md-icon-size',\r\n '--gog-chip-md-padding-block',\r\n '--gog-chip-md-padding-inline',\r\n '--gog-chip-md-remove-size',\r\n '--gog-chip-pill-radius',\r\n '--gog-chip-radius',\r\n '--gog-chip-remove-color',\r\n '--gog-chip-remove-hover-color',\r\n '--gog-chip-remove-inset-ratio',\r\n '--gog-chip-remove-scale',\r\n '--gog-chip-slg-avatar-size',\r\n '--gog-chip-slg-font-size',\r\n '--gog-chip-slg-gap',\r\n '--gog-chip-slg-icon-size',\r\n '--gog-chip-slg-padding-block',\r\n '--gog-chip-slg-padding-inline',\r\n '--gog-chip-slg-remove-size',\r\n '--gog-chip-sm-avatar-size',\r\n '--gog-chip-sm-font-size',\r\n '--gog-chip-sm-gap',\r\n '--gog-chip-sm-icon-size',\r\n '--gog-chip-sm-padding-block',\r\n '--gog-chip-sm-padding-inline',\r\n '--gog-chip-sm-remove-size',\r\n '--gog-chip-xsm-avatar-size',\r\n '--gog-chip-xsm-font-size',\r\n '--gog-chip-xsm-gap',\r\n '--gog-chip-xsm-icon-size',\r\n '--gog-chip-xsm-padding-block',\r\n '--gog-chip-xsm-padding-inline',\r\n '--gog-chip-xsm-remove-size',\r\n ],\r\n },\r\n {\r\n section: 'Dialog',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-confirm-actions-gap',\r\n '--gog-confirm-actions-offset',\r\n '--gog-confirm-color',\r\n '--gog-confirm-description-color',\r\n '--gog-confirm-gap',\r\n '--gog-confirm-max-width',\r\n '--gog-confirm-min-width',\r\n '--gog-dialog-backdrop-bg',\r\n '--gog-dialog-backdrop-blur',\r\n '--gog-dialog-backdrop-fade-duration',\r\n '--gog-dialog-backdrop-padding',\r\n '--gog-dialog-bg',\r\n '--gog-dialog-body-max-height',\r\n '--gog-dialog-body-padding',\r\n '--gog-dialog-border',\r\n '--gog-dialog-border-style',\r\n '--gog-dialog-border-width',\r\n '--gog-dialog-close-color',\r\n '--gog-dialog-close-focus-ring',\r\n '--gog-dialog-close-focus-ring-offset',\r\n '--gog-dialog-close-focus-ring-width',\r\n '--gog-dialog-close-font-size',\r\n '--gog-dialog-close-hover-bg',\r\n '--gog-dialog-close-hover-border',\r\n '--gog-dialog-close-hover-color',\r\n '--gog-dialog-close-size',\r\n '--gog-dialog-color',\r\n '--gog-dialog-enter-distance',\r\n '--gog-dialog-enter-duration',\r\n '--gog-dialog-font-family',\r\n '--gog-dialog-header-border-color',\r\n '--gog-dialog-header-gap',\r\n '--gog-dialog-header-padding',\r\n '--gog-dialog-max-height',\r\n '--gog-dialog-min-width',\r\n '--gog-dialog-radius',\r\n '--gog-dialog-shadow',\r\n ],\r\n },\r\n {\r\n section: 'Autocomplete',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-autocomplete-actions-gap',\r\n '--gog-autocomplete-actions-inset',\r\n '--gog-autocomplete-actions-reserve',\r\n '--gog-autocomplete-border-color',\r\n '--gog-autocomplete-border-style',\r\n '--gog-autocomplete-border-width',\r\n '--gog-autocomplete-clear-color',\r\n '--gog-autocomplete-clear-hover-color',\r\n '--gog-autocomplete-clear-icon-ratio',\r\n '--gog-autocomplete-disabled-opacity',\r\n '--gog-autocomplete-empty-color',\r\n '--gog-autocomplete-empty-font-size',\r\n '--gog-autocomplete-error-border-color',\r\n '--gog-autocomplete-error-color',\r\n '--gog-autocomplete-error-font-family',\r\n '--gog-autocomplete-error-font-size',\r\n '--gog-autocomplete-field-bg',\r\n '--gog-autocomplete-float-label-in-top',\r\n '--gog-autocomplete-float-label-over-gap',\r\n '--gog-autocomplete-float-label-over-reserve',\r\n '--gog-autocomplete-float-label-reserve',\r\n '--gog-autocomplete-focus-ring-color',\r\n '--gog-autocomplete-focus-ring-offset',\r\n '--gog-autocomplete-focus-ring-width',\r\n '--gog-autocomplete-font-family',\r\n '--gog-autocomplete-gap',\r\n '--gog-autocomplete-hover-border-color',\r\n '--gog-autocomplete-label-color',\r\n '--gog-autocomplete-label-font-family',\r\n '--gog-autocomplete-label-font-size',\r\n '--gog-autocomplete-label-font-weight',\r\n '--gog-autocomplete-label-letter-spacing',\r\n '--gog-autocomplete-label-text-transform',\r\n '--gog-autocomplete-line-height',\r\n '--gog-autocomplete-min-width',\r\n '--gog-autocomplete-option-color',\r\n '--gog-autocomplete-option-gap',\r\n '--gog-autocomplete-option-height',\r\n '--gog-autocomplete-option-hover-bg',\r\n '--gog-autocomplete-option-hover-color',\r\n '--gog-autocomplete-option-padding',\r\n '--gog-autocomplete-option-radius',\r\n '--gog-autocomplete-option-selected-bg',\r\n '--gog-autocomplete-option-selected-color',\r\n '--gog-autocomplete-options-padding',\r\n '--gog-autocomplete-panel-bg',\r\n '--gog-autocomplete-panel-border-color',\r\n '--gog-autocomplete-panel-border-style',\r\n '--gog-autocomplete-panel-border-width',\r\n '--gog-autocomplete-panel-gap',\r\n '--gog-autocomplete-panel-max-height',\r\n '--gog-autocomplete-panel-max-width',\r\n '--gog-autocomplete-panel-radius',\r\n '--gog-autocomplete-panel-shadow',\r\n '--gog-autocomplete-placeholder-color',\r\n '--gog-autocomplete-radius',\r\n '--gog-autocomplete-spinner-size',\r\n '--gog-autocomplete-text-color',\r\n '--gog-autocomplete-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Badge (the `gogBadge` directive; its classes live in utilities.css)',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-badge-border-color',\r\n '--gog-badge-border-style',\r\n '--gog-badge-border-width',\r\n '--gog-badge-danger-bg',\r\n '--gog-badge-danger-color',\r\n '--gog-badge-dot-size',\r\n '--gog-badge-font-family',\r\n '--gog-badge-font-size',\r\n '--gog-badge-font-weight',\r\n '--gog-badge-info-bg',\r\n '--gog-badge-info-color',\r\n '--gog-badge-line-height',\r\n '--gog-badge-offset',\r\n '--gog-badge-padding-inline',\r\n '--gog-badge-radius',\r\n '--gog-badge-size',\r\n '--gog-badge-success-bg',\r\n '--gog-badge-success-color',\r\n '--gog-badge-warning-bg',\r\n '--gog-badge-warning-color',\r\n '--gog-badge-z',\r\n ],\r\n },\r\n {\r\n section: 'Datepicker (the field; the grid inside it is themed by --gog-calendar-*)',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-datepicker-actions-gap',\r\n '--gog-datepicker-actions-inset',\r\n '--gog-datepicker-actions-reserve',\r\n '--gog-datepicker-border-color',\r\n '--gog-datepicker-border-style',\r\n '--gog-datepicker-border-width',\r\n '--gog-datepicker-clear-color',\r\n '--gog-datepicker-clear-icon-ratio',\r\n '--gog-datepicker-disabled-opacity',\r\n '--gog-datepicker-error-border-color',\r\n '--gog-datepicker-error-color',\r\n '--gog-datepicker-error-font-family',\r\n '--gog-datepicker-error-font-size',\r\n '--gog-datepicker-field-bg',\r\n '--gog-datepicker-float-label-in-top',\r\n '--gog-datepicker-float-label-over-gap',\r\n '--gog-datepicker-float-label-over-reserve',\r\n '--gog-datepicker-float-label-reserve',\r\n '--gog-datepicker-focus-ring-color',\r\n '--gog-datepicker-focus-ring-offset',\r\n '--gog-datepicker-focus-ring-width',\r\n '--gog-datepicker-font-family',\r\n '--gog-datepicker-gap',\r\n '--gog-datepicker-hover-border-color',\r\n '--gog-datepicker-icon-color',\r\n '--gog-datepicker-icon-hover-color',\r\n '--gog-datepicker-label-color',\r\n '--gog-datepicker-label-font-family',\r\n '--gog-datepicker-label-font-size',\r\n '--gog-datepicker-label-letter-spacing',\r\n '--gog-datepicker-label-text-transform',\r\n '--gog-datepicker-line-height',\r\n '--gog-datepicker-min-width',\r\n '--gog-datepicker-panel-bg',\r\n '--gog-datepicker-panel-border-color',\r\n '--gog-datepicker-panel-border-style',\r\n '--gog-datepicker-panel-border-width',\r\n '--gog-datepicker-panel-gap',\r\n '--gog-datepicker-panel-radius',\r\n '--gog-datepicker-panel-shadow',\r\n '--gog-datepicker-placeholder-color',\r\n '--gog-datepicker-radius',\r\n '--gog-datepicker-text-color',\r\n '--gog-datepicker-toggle-icon-size',\r\n '--gog-datepicker-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Divider',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-divider-block-spacing',\r\n '--gog-divider-dashed-style',\r\n '--gog-divider-dotted-style',\r\n '--gog-divider-inline-spacing',\r\n '--gog-divider-inset-size',\r\n '--gog-divider-label-color',\r\n '--gog-divider-label-font-family',\r\n '--gog-divider-label-font-size',\r\n '--gog-divider-label-font-weight',\r\n '--gog-divider-label-gap',\r\n '--gog-divider-label-line-height',\r\n '--gog-divider-line-color',\r\n '--gog-divider-line-thickness',\r\n '--gog-divider-solid-style',\r\n '--gog-divider-vertical-length',\r\n ],\r\n },\r\n {\r\n section: 'Icon',\r\n layer: 'component',\r\n tokens: ['--gog-icon-fallback-size'],\r\n },\r\n {\r\n section: 'Input field',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-input-clear-icon-ratio',\r\n '--gog-input-clear-inset',\r\n '--gog-input-clear-radius',\r\n '--gog-input-disabled-opacity',\r\n '--gog-input-error-color',\r\n '--gog-input-error-font-size',\r\n '--gog-input-error-offset',\r\n '--gog-input-field-bg',\r\n '--gog-input-field-border',\r\n '--gog-input-field-border-style',\r\n '--gog-input-field-border-width',\r\n '--gog-input-field-color',\r\n '--gog-input-float-label-in-top',\r\n '--gog-input-float-label-over-gap',\r\n '--gog-input-float-label-over-reserve',\r\n '--gog-input-float-label-reserve',\r\n '--gog-input-focus-border',\r\n '--gog-input-focus-glow',\r\n '--gog-input-focus-ring',\r\n '--gog-input-focus-ring-offset',\r\n '--gog-input-focus-ring-width',\r\n '--gog-input-font-family',\r\n '--gog-input-gap',\r\n '--gog-input-icon-action-radius',\r\n '--gog-input-icon-color',\r\n '--gog-input-icon-focus-ring-width',\r\n '--gog-input-icon-hover-color',\r\n '--gog-input-label-color',\r\n '--gog-input-label-font-family',\r\n '--gog-input-label-font-size',\r\n '--gog-input-label-letter-spacing',\r\n '--gog-input-label-text-transform',\r\n '--gog-input-placeholder-color',\r\n '--gog-input-radius',\r\n '--gog-input-spin-hover-bg',\r\n '--gog-input-spin-width',\r\n '--gog-input-transition-duration',\r\n '--gog-textarea-clear-icon-ratio',\r\n '--gog-textarea-resize-grip-color',\r\n '--gog-textarea-resize-grip-offset',\r\n '--gog-textarea-resize-grip-opacity',\r\n '--gog-textarea-resize-grip-size',\r\n '--gog-textarea-resize-grip-stripe-gap',\r\n '--gog-textarea-resize-grip-stripe-width',\r\n '--gog-textarea-resize-inset-bottom',\r\n '--gog-textarea-resize-inset-right',\r\n ],\r\n },\r\n {\r\n section: 'Multiselect',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-ms-actions-gap',\r\n '--gog-ms-actions-inset',\r\n '--gog-ms-arrow-icon-ratio',\r\n '--gog-ms-arrow-transition-duration',\r\n '--gog-ms-border-color',\r\n '--gog-ms-checkbox-bg',\r\n '--gog-ms-checkbox-border',\r\n '--gog-ms-checkbox-checked-bg',\r\n '--gog-ms-checkbox-checked-color',\r\n '--gog-ms-clear-icon-ratio',\r\n '--gog-ms-clear-radius',\r\n '--gog-ms-controls-gap',\r\n '--gog-ms-controls-padding',\r\n '--gog-ms-disabled-opacity',\r\n '--gog-ms-error-color',\r\n '--gog-ms-error-font-size',\r\n '--gog-ms-error-offset',\r\n '--gog-ms-field-bg',\r\n '--gog-ms-field-border',\r\n '--gog-ms-field-border-style',\r\n '--gog-ms-field-border-width',\r\n '--gog-ms-field-color',\r\n '--gog-ms-filter-border-color',\r\n '--gog-ms-filter-border-style',\r\n '--gog-ms-filter-border-width',\r\n '--gog-ms-filter-empty-color',\r\n '--gog-ms-filter-empty-padding',\r\n '--gog-ms-filter-input-bg',\r\n '--gog-ms-filter-input-border',\r\n '--gog-ms-filter-input-color',\r\n '--gog-ms-filter-input-padding-x',\r\n '--gog-ms-filter-input-padding-y',\r\n '--gog-ms-filter-input-radius',\r\n '--gog-ms-filter-padding',\r\n '--gog-ms-float-label-in-top',\r\n '--gog-ms-float-label-over-gap',\r\n '--gog-ms-float-label-over-reserve',\r\n '--gog-ms-float-label-reserve',\r\n '--gog-ms-focus-border',\r\n '--gog-ms-focus-glow',\r\n '--gog-ms-focus-ring',\r\n '--gog-ms-focus-ring-offset',\r\n '--gog-ms-focus-ring-width',\r\n '--gog-ms-font-family',\r\n '--gog-ms-gap',\r\n '--gog-ms-label-color',\r\n '--gog-ms-label-font-family',\r\n '--gog-ms-label-font-size',\r\n '--gog-ms-label-letter-spacing',\r\n '--gog-ms-label-text-transform',\r\n '--gog-ms-mark-icon-ratio',\r\n '--gog-ms-mark-size-ratio',\r\n '--gog-ms-min-width',\r\n '--gog-ms-option-color',\r\n '--gog-ms-option-disabled-opacity',\r\n '--gog-ms-option-gap',\r\n '--gog-ms-option-gap-inline',\r\n '--gog-ms-option-height',\r\n '--gog-ms-option-hover-bg',\r\n '--gog-ms-option-radius',\r\n '--gog-ms-option-transition-duration',\r\n '--gog-ms-options-padding',\r\n '--gog-ms-overflow-color',\r\n '--gog-ms-overflow-font-size',\r\n '--gog-ms-overflow-gap',\r\n '--gog-ms-panel-bg',\r\n '--gog-ms-panel-border',\r\n '--gog-ms-panel-max-height',\r\n '--gog-ms-panel-max-width',\r\n '--gog-ms-panel-offset',\r\n '--gog-ms-panel-shadow',\r\n '--gog-ms-placeholder-color',\r\n '--gog-ms-radius',\r\n '--gog-ms-transition-duration',\r\n '--gog-ms-value-color',\r\n '--gog-multiselect-actions-gap',\r\n '--gog-multiselect-actions-inset',\r\n '--gog-multiselect-arrow-icon-ratio',\r\n '--gog-multiselect-arrow-transition-duration',\r\n '--gog-multiselect-border-color',\r\n '--gog-multiselect-checkbox-bg',\r\n '--gog-multiselect-checkbox-border',\r\n '--gog-multiselect-checkbox-checked-bg',\r\n '--gog-multiselect-checkbox-checked-color',\r\n '--gog-multiselect-clear-icon-ratio',\r\n '--gog-multiselect-clear-radius',\r\n '--gog-multiselect-controls-gap',\r\n '--gog-multiselect-controls-padding',\r\n '--gog-multiselect-disabled-opacity',\r\n '--gog-multiselect-error-color',\r\n '--gog-multiselect-error-font-size',\r\n '--gog-multiselect-error-offset',\r\n '--gog-multiselect-field-bg',\r\n '--gog-multiselect-field-border',\r\n '--gog-multiselect-field-border-style',\r\n '--gog-multiselect-field-border-width',\r\n '--gog-multiselect-field-color',\r\n '--gog-multiselect-filter-border-color',\r\n '--gog-multiselect-filter-border-style',\r\n '--gog-multiselect-filter-border-width',\r\n '--gog-multiselect-filter-empty-color',\r\n '--gog-multiselect-filter-empty-padding',\r\n '--gog-multiselect-filter-input-bg',\r\n '--gog-multiselect-filter-input-border',\r\n '--gog-multiselect-filter-input-color',\r\n '--gog-multiselect-filter-input-padding-x',\r\n '--gog-multiselect-filter-input-padding-y',\r\n '--gog-multiselect-filter-input-radius',\r\n '--gog-multiselect-filter-padding',\r\n '--gog-multiselect-float-label-in-top',\r\n '--gog-multiselect-float-label-over-gap',\r\n '--gog-multiselect-float-label-over-reserve',\r\n '--gog-multiselect-float-label-reserve',\r\n '--gog-multiselect-focus-border',\r\n '--gog-multiselect-focus-glow',\r\n '--gog-multiselect-focus-ring',\r\n '--gog-multiselect-focus-ring-offset',\r\n '--gog-multiselect-focus-ring-width',\r\n '--gog-multiselect-font-family',\r\n '--gog-multiselect-gap',\r\n '--gog-multiselect-label-color',\r\n '--gog-multiselect-label-font-family',\r\n '--gog-multiselect-label-font-size',\r\n '--gog-multiselect-label-letter-spacing',\r\n '--gog-multiselect-label-text-transform',\r\n '--gog-multiselect-mark-icon-ratio',\r\n '--gog-multiselect-mark-size-ratio',\r\n '--gog-multiselect-min-width',\r\n '--gog-multiselect-option-color',\r\n '--gog-multiselect-option-disabled-opacity',\r\n '--gog-multiselect-option-gap',\r\n '--gog-multiselect-option-gap-inline',\r\n '--gog-multiselect-option-height',\r\n '--gog-multiselect-option-hover-bg',\r\n '--gog-multiselect-option-radius',\r\n '--gog-multiselect-option-transition-duration',\r\n '--gog-multiselect-options-padding',\r\n '--gog-multiselect-overflow-color',\r\n '--gog-multiselect-overflow-font-size',\r\n '--gog-multiselect-overflow-gap',\r\n '--gog-multiselect-panel-bg',\r\n '--gog-multiselect-panel-border',\r\n '--gog-multiselect-panel-max-height',\r\n '--gog-multiselect-panel-max-width',\r\n '--gog-multiselect-panel-offset',\r\n '--gog-multiselect-panel-shadow',\r\n '--gog-multiselect-placeholder-color',\r\n '--gog-multiselect-radius',\r\n '--gog-multiselect-transition-duration',\r\n '--gog-multiselect-value-color',\r\n ],\r\n },\r\n {\r\n section: 'Paginator',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-paginator-ellipsis-color',\r\n '--gog-paginator-ellipsis-font-family',\r\n '--gog-paginator-ellipsis-font-size',\r\n '--gog-paginator-ellipsis-min-width',\r\n '--gog-paginator-gap',\r\n '--gog-paginator-page-size-min-width',\r\n ],\r\n },\r\n {\r\n section: 'Progressbar',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-progressbar-accent-bg',\r\n '--gog-progressbar-accent-buffer-bg',\r\n '--gog-progressbar-danger-bg',\r\n '--gog-progressbar-danger-buffer-bg',\r\n '--gog-progressbar-indeterminate-duration',\r\n '--gog-progressbar-indeterminate-easing',\r\n '--gog-progressbar-info-bg',\r\n '--gog-progressbar-info-buffer-bg',\r\n '--gog-progressbar-lg-height',\r\n '--gog-progressbar-md-height',\r\n '--gog-progressbar-radius',\r\n '--gog-progressbar-slg-height',\r\n '--gog-progressbar-sm-height',\r\n '--gog-progressbar-stripe-color',\r\n '--gog-progressbar-stripe-size',\r\n '--gog-progressbar-success-bg',\r\n '--gog-progressbar-success-buffer-bg',\r\n '--gog-progressbar-track-base-bg',\r\n '--gog-progressbar-transition-duration',\r\n '--gog-progressbar-value-color',\r\n '--gog-progressbar-value-font-family',\r\n '--gog-progressbar-value-font-size',\r\n '--gog-progressbar-value-gap',\r\n '--gog-progressbar-value-min-width',\r\n '--gog-progressbar-warning-bg',\r\n '--gog-progressbar-warning-buffer-bg',\r\n '--gog-progressbar-xsm-height',\r\n ],\r\n },\r\n {\r\n section: 'Scroll',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-scroll-corner-bg',\r\n '--gog-scroll-fade-duration',\r\n '--gog-scroll-focus-ring',\r\n '--gog-scroll-focus-ring-width',\r\n '--gog-scroll-normal-thumb-hit-padding',\r\n '--gog-scroll-normal-thumb-min-size',\r\n '--gog-scroll-normal-track-width',\r\n '--gog-scroll-thin-thumb-hit-padding',\r\n '--gog-scroll-thin-thumb-min-size',\r\n '--gog-scroll-thin-track-width',\r\n '--gog-scroll-thumb-active-bg',\r\n '--gog-scroll-thumb-bg',\r\n '--gog-scroll-thumb-hover-bg',\r\n '--gog-scroll-thumb-inset',\r\n '--gog-scroll-thumb-radius',\r\n '--gog-scroll-track-bg',\r\n '--gog-scroll-track-radius',\r\n ],\r\n },\r\n {\r\n section: 'Select',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-select-chevron-color',\r\n '--gog-select-chevron-icon-ratio',\r\n '--gog-select-chevron-inset',\r\n '--gog-select-clear-color',\r\n '--gog-select-clear-gap',\r\n '--gog-select-clear-hover-color',\r\n '--gog-select-clear-icon-ratio',\r\n '--gog-select-clear-radius',\r\n '--gog-select-control-gap',\r\n '--gog-select-disabled-opacity',\r\n '--gog-select-error-color',\r\n '--gog-select-error-font-size',\r\n '--gog-select-field-bg',\r\n '--gog-select-field-border',\r\n '--gog-select-field-border-style',\r\n '--gog-select-field-border-width',\r\n '--gog-select-field-color',\r\n '--gog-select-filter-border-color',\r\n '--gog-select-filter-border-style',\r\n '--gog-select-filter-border-width',\r\n '--gog-select-filter-empty-color',\r\n '--gog-select-filter-empty-padding',\r\n '--gog-select-filter-input-bg',\r\n '--gog-select-filter-input-border',\r\n '--gog-select-filter-input-color',\r\n '--gog-select-filter-input-padding-x',\r\n '--gog-select-filter-input-padding-y',\r\n '--gog-select-filter-input-radius',\r\n '--gog-select-filter-padding',\r\n '--gog-select-float-label-in-top',\r\n '--gog-select-float-label-over-gap',\r\n '--gog-select-float-label-over-reserve',\r\n '--gog-select-float-label-reserve',\r\n '--gog-select-focus-border',\r\n '--gog-select-focus-glow',\r\n '--gog-select-focus-ring',\r\n '--gog-select-focus-ring-offset',\r\n '--gog-select-focus-ring-width',\r\n '--gog-select-font-family',\r\n '--gog-select-gap',\r\n '--gog-select-label-color',\r\n '--gog-select-label-font-family',\r\n '--gog-select-label-font-size',\r\n '--gog-select-label-letter-spacing',\r\n '--gog-select-label-text-transform',\r\n '--gog-select-mark-icon-ratio',\r\n '--gog-select-mark-size-ratio',\r\n '--gog-select-min-width',\r\n '--gog-select-option-color',\r\n '--gog-select-option-disabled-opacity',\r\n '--gog-select-option-gap',\r\n '--gog-select-option-height',\r\n '--gog-select-option-hover-bg',\r\n '--gog-select-option-selected-color',\r\n '--gog-select-option-transition-duration',\r\n '--gog-select-panel-bg',\r\n '--gog-select-panel-max-height',\r\n '--gog-select-panel-max-width',\r\n '--gog-select-panel-offset',\r\n '--gog-select-panel-shadow',\r\n '--gog-select-placeholder-color',\r\n '--gog-select-radius',\r\n '--gog-select-transition-duration',\r\n ],\r\n },\r\n {\r\n section: 'Skeleton',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-skeleton-base',\r\n '--gog-skeleton-circle-size-lg',\r\n '--gog-skeleton-circle-size-md',\r\n '--gog-skeleton-circle-size-slg',\r\n '--gog-skeleton-circle-size-sm',\r\n '--gog-skeleton-circle-size-xsm',\r\n '--gog-skeleton-line-gap',\r\n '--gog-skeleton-line-height-lg',\r\n '--gog-skeleton-line-height-md',\r\n '--gog-skeleton-line-height-slg',\r\n '--gog-skeleton-line-height-sm',\r\n '--gog-skeleton-line-height-xsm',\r\n '--gog-skeleton-line-radius',\r\n '--gog-skeleton-pulse-duration',\r\n '--gog-skeleton-pulse-min-opacity',\r\n '--gog-skeleton-radius',\r\n '--gog-skeleton-rect-height-lg',\r\n '--gog-skeleton-rect-height-md',\r\n '--gog-skeleton-rect-height-slg',\r\n '--gog-skeleton-rect-height-sm',\r\n '--gog-skeleton-rect-height-xsm',\r\n '--gog-skeleton-shine',\r\n '--gog-skeleton-short-line-width',\r\n '--gog-skeleton-square-radius',\r\n '--gog-skeleton-wave-duration',\r\n ],\r\n },\r\n {\r\n section: 'Slider',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-slider-auto-width',\r\n '--gog-slider-disabled-opacity',\r\n '--gog-slider-error-color',\r\n '--gog-slider-error-font-family',\r\n '--gog-slider-error-font-size',\r\n '--gog-slider-fill-bg',\r\n '--gog-slider-focus-ring',\r\n '--gog-slider-focus-ring-width',\r\n '--gog-slider-gap',\r\n '--gog-slider-label-color',\r\n '--gog-slider-label-font-family',\r\n '--gog-slider-label-font-size',\r\n '--gog-slider-label-letter-spacing',\r\n '--gog-slider-label-text-transform',\r\n '--gog-slider-range-color',\r\n '--gog-slider-range-font-size',\r\n '--gog-slider-thumb-bg',\r\n '--gog-slider-thumb-border',\r\n '--gog-slider-thumb-border-width',\r\n '--gog-slider-thumb-glow-size',\r\n '--gog-slider-thumb-radius',\r\n '--gog-slider-thumb-shadow',\r\n '--gog-slider-thumb-size',\r\n '--gog-slider-track-area-height',\r\n '--gog-slider-track-bg',\r\n '--gog-slider-track-border-color',\r\n '--gog-slider-track-border-style',\r\n '--gog-slider-track-border-width',\r\n '--gog-slider-track-height',\r\n '--gog-slider-track-radius',\r\n '--gog-slider-value-color',\r\n '--gog-slider-value-font-family',\r\n '--gog-slider-value-font-size',\r\n '--gog-slider-value-min-width',\r\n '--gog-slider-vertical-length',\r\n ],\r\n },\r\n {\r\n section: 'Spinner',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-spinner-arc-inner-color',\r\n '--gog-spinner-arc-inner-dash',\r\n '--gog-spinner-arc-inner-glow',\r\n '--gog-spinner-arc-inner-opacity',\r\n '--gog-spinner-arc-inner-pulse-opacity',\r\n '--gog-spinner-arc-inner-stroke-compact',\r\n '--gog-spinner-arc-outer-color',\r\n '--gog-spinner-arc-outer-dash',\r\n '--gog-spinner-arc-outer-glow',\r\n '--gog-spinner-arc-outer-pulse-opacity',\r\n '--gog-spinner-diamond-color',\r\n '--gog-spinner-diamond-glow',\r\n '--gog-spinner-diamond-opacity',\r\n '--gog-spinner-glow-color',\r\n '--gog-spinner-overlay-blur',\r\n '--gog-spinner-overlay-fade-duration',\r\n '--gog-spinner-pulse-duration',\r\n '--gog-spinner-ring-duration',\r\n '--gog-spinner-ring-glow',\r\n '--gog-spinner-ring-padding',\r\n '--gog-spinner-rune-color',\r\n '--gog-spinner-rune-font-family',\r\n '--gog-spinner-rune-glow',\r\n '--gog-spinner-rune-pulse-opacity',\r\n '--gog-spinner-spin-duration',\r\n '--gog-spinner-spin-slow-duration',\r\n '--gog-spinner-ticks-duration',\r\n '--gog-spinner-track-color',\r\n '--gog-spinner-track-opacity',\r\n ],\r\n },\r\n {\r\n section: 'Table',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-table-accent-bright',\r\n '--gog-table-accent-color',\r\n '--gog-table-border-color',\r\n '--gog-table-border-style',\r\n '--gog-table-border-width',\r\n '--gog-table-empty-font-size',\r\n '--gog-table-empty-padding',\r\n '--gog-table-focus-ring',\r\n '--gog-table-focus-ring-width',\r\n '--gog-table-font-family',\r\n '--gog-table-footer-gap',\r\n '--gog-table-footer-min-height',\r\n '--gog-table-gap',\r\n '--gog-table-header-font-family',\r\n '--gog-table-header-letter-spacing',\r\n '--gog-table-header-text-transform',\r\n '--gog-table-hover-bg',\r\n '--gog-table-lg-padding-v',\r\n '--gog-table-lg-td-font-size',\r\n '--gog-table-lg-th-font-size',\r\n '--gog-table-loading-opacity',\r\n '--gog-table-loading-padding',\r\n '--gog-table-md-padding-v',\r\n '--gog-table-md-td-font-size',\r\n '--gog-table-md-th-font-size',\r\n '--gog-table-muted-color',\r\n '--gog-table-num-col-width',\r\n '--gog-table-num-font-size',\r\n '--gog-table-numeric-font-family',\r\n '--gog-table-padding-h',\r\n '--gog-table-row-border-width',\r\n '--gog-table-row-transition-duration',\r\n '--gog-table-select-col-width',\r\n '--gog-table-selected-bg',\r\n '--gog-table-slg-padding-v',\r\n '--gog-table-slg-td-font-size',\r\n '--gog-table-slg-th-font-size',\r\n '--gog-table-sm-padding-v',\r\n '--gog-table-sm-td-font-size',\r\n '--gog-table-sm-th-font-size',\r\n '--gog-table-sort-icon-opacity',\r\n '--gog-table-sort-icon-size',\r\n '--gog-table-sort-icon-width',\r\n '--gog-table-surface',\r\n '--gog-table-text-color',\r\n '--gog-table-th-inner-gap',\r\n '--gog-table-total-font-size',\r\n '--gog-table-total-letter-spacing',\r\n '--gog-table-total-text-transform',\r\n '--gog-table-xsm-padding-v',\r\n '--gog-table-xsm-td-font-size',\r\n '--gog-table-xsm-th-font-size',\r\n ],\r\n },\r\n {\r\n section: 'Tabs',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-tabs-active-color',\r\n '--gog-tabs-disabled-opacity',\r\n '--gog-tabs-focus-ring-color',\r\n '--gog-tabs-focus-ring-offset',\r\n '--gog-tabs-focus-ring-width',\r\n '--gog-tabs-font-family',\r\n '--gog-tabs-font-weight',\r\n '--gog-tabs-gap',\r\n '--gog-tabs-header-border-color',\r\n '--gog-tabs-header-border-style',\r\n '--gog-tabs-header-border-width',\r\n '--gog-tabs-hover-color',\r\n '--gog-tabs-icon-size',\r\n '--gog-tabs-indicator-color',\r\n '--gog-tabs-indicator-radius',\r\n '--gog-tabs-indicator-thickness',\r\n '--gog-tabs-letter-spacing',\r\n '--gog-tabs-lg-font-size',\r\n '--gog-tabs-lg-padding',\r\n '--gog-tabs-line-height',\r\n '--gog-tabs-md-font-size',\r\n '--gog-tabs-md-padding',\r\n '--gog-tabs-panel-color',\r\n '--gog-tabs-panel-padding',\r\n '--gog-tabs-rest-bg',\r\n '--gog-tabs-rest-color',\r\n '--gog-tabs-slg-font-size',\r\n '--gog-tabs-slg-padding',\r\n '--gog-tabs-sm-font-size',\r\n '--gog-tabs-sm-padding',\r\n '--gog-tabs-tab-gap',\r\n '--gog-tabs-text-transform',\r\n '--gog-tabs-transition-duration',\r\n '--gog-tabs-xsm-font-size',\r\n '--gog-tabs-xsm-padding',\r\n ],\r\n },\r\n {\r\n section: 'Tag',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-tag-bg-base',\r\n '--gog-tag-bg-mix',\r\n '--gog-tag-border-style',\r\n '--gog-tag-border-width',\r\n '--gog-tag-color-base',\r\n '--gog-tag-color-mix',\r\n '--gog-tag-danger-color',\r\n '--gog-tag-default-color',\r\n '--gog-tag-font-family',\r\n '--gog-tag-font-weight',\r\n '--gog-tag-info-color',\r\n '--gog-tag-inner-border-width',\r\n '--gog-tag-lg-font-size',\r\n '--gog-tag-lg-gap',\r\n '--gog-tag-lg-icon-size',\r\n '--gog-tag-lg-padding-block',\r\n '--gog-tag-lg-padding-inline',\r\n '--gog-tag-line-height',\r\n '--gog-tag-md-font-size',\r\n '--gog-tag-md-gap',\r\n '--gog-tag-md-icon-size',\r\n '--gog-tag-md-padding-block',\r\n '--gog-tag-md-padding-inline',\r\n '--gog-tag-pill-radius',\r\n '--gog-tag-radius',\r\n '--gog-tag-slg-font-size',\r\n '--gog-tag-slg-gap',\r\n '--gog-tag-slg-icon-size',\r\n '--gog-tag-slg-padding-block',\r\n '--gog-tag-slg-padding-inline',\r\n '--gog-tag-sm-font-size',\r\n '--gog-tag-sm-gap',\r\n '--gog-tag-sm-icon-size',\r\n '--gog-tag-sm-padding-block',\r\n '--gog-tag-sm-padding-inline',\r\n '--gog-tag-success-color',\r\n '--gog-tag-warning-color',\r\n '--gog-tag-xsm-font-size',\r\n '--gog-tag-xsm-gap',\r\n '--gog-tag-xsm-icon-size',\r\n '--gog-tag-xsm-padding-block',\r\n '--gog-tag-xsm-padding-inline',\r\n ],\r\n },\r\n {\r\n section: 'Toast',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-toast-accent-width',\r\n '--gog-toast-action-font-size',\r\n '--gog-toast-action-padding',\r\n '--gog-toast-actions-gap',\r\n '--gog-toast-base-z',\r\n '--gog-toast-bg',\r\n '--gog-toast-border',\r\n '--gog-toast-close-font-size',\r\n '--gog-toast-close-padding',\r\n '--gog-toast-color',\r\n '--gog-toast-content-gap',\r\n '--gog-toast-error-color',\r\n '--gog-toast-font-family',\r\n '--gog-toast-icon-color',\r\n '--gog-toast-icon-line-height',\r\n '--gog-toast-icon-size',\r\n '--gog-toast-info-color',\r\n '--gog-toast-main-gap',\r\n '--gog-toast-message-font-size',\r\n '--gog-toast-message-line-height',\r\n '--gog-toast-padding',\r\n '--gog-toast-progress-height',\r\n '--gog-toast-progress-opacity',\r\n '--gog-toast-radius',\r\n '--gog-toast-stack-expanded-gap',\r\n '--gog-toast-stack-max-depth',\r\n '--gog-toast-stack-min-opacity',\r\n '--gog-toast-stack-opacity-step',\r\n '--gog-toast-stack-peek',\r\n '--gog-toast-stack-scale-step',\r\n '--gog-toast-success-color',\r\n '--gog-toast-transition-duration',\r\n '--gog-toast-warning-color',\r\n ],\r\n },\r\n {\r\n section: 'Toggle',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-toggle-border-color',\r\n '--gog-toggle-border-style',\r\n '--gog-toggle-border-width',\r\n '--gog-toggle-disabled-opacity',\r\n '--gog-toggle-focus-ring-color',\r\n '--gog-toggle-focus-ring-offset',\r\n '--gog-toggle-focus-ring-width',\r\n '--gog-toggle-font-family',\r\n '--gog-toggle-gap',\r\n '--gog-toggle-label-color',\r\n '--gog-toggle-label-line-height',\r\n '--gog-toggle-lg-label-size',\r\n '--gog-toggle-lg-state-font-size',\r\n '--gog-toggle-lg-thumb-size',\r\n '--gog-toggle-lg-track-height',\r\n '--gog-toggle-lg-track-width',\r\n '--gog-toggle-md-label-size',\r\n '--gog-toggle-md-state-font-size',\r\n '--gog-toggle-md-thumb-size',\r\n '--gog-toggle-md-track-height',\r\n '--gog-toggle-md-track-width',\r\n '--gog-toggle-on-border-color',\r\n '--gog-toggle-radius',\r\n '--gog-toggle-slg-label-size',\r\n '--gog-toggle-slg-state-font-size',\r\n '--gog-toggle-slg-thumb-size',\r\n '--gog-toggle-slg-track-height',\r\n '--gog-toggle-slg-track-width',\r\n '--gog-toggle-sm-label-size',\r\n '--gog-toggle-sm-state-font-size',\r\n '--gog-toggle-sm-thumb-size',\r\n '--gog-toggle-sm-track-height',\r\n '--gog-toggle-sm-track-width',\r\n '--gog-toggle-state-color',\r\n '--gog-toggle-state-font-weight',\r\n '--gog-toggle-state-letter-spacing',\r\n '--gog-toggle-state-offset',\r\n '--gog-toggle-state-padding-inline',\r\n '--gog-toggle-state-thumb-gap',\r\n '--gog-toggle-thumb-inset',\r\n '--gog-toggle-thumb-off-bg',\r\n '--gog-toggle-thumb-on-bg',\r\n '--gog-toggle-thumb-shadow',\r\n '--gog-toggle-track-off-bg',\r\n '--gog-toggle-track-on-bg',\r\n '--gog-toggle-transition-duration',\r\n '--gog-toggle-xsm-label-size',\r\n '--gog-toggle-xsm-state-font-size',\r\n '--gog-toggle-xsm-thumb-size',\r\n '--gog-toggle-xsm-track-height',\r\n '--gog-toggle-xsm-track-width',\r\n ],\r\n },\r\n {\r\n section: 'Tooltip',\r\n layer: 'component',\r\n tokens: [\r\n '--gog-tooltip-arrow-size',\r\n '--gog-tooltip-bg',\r\n '--gog-tooltip-border-color',\r\n '--gog-tooltip-border-style',\r\n '--gog-tooltip-border-width',\r\n '--gog-tooltip-color',\r\n '--gog-tooltip-font-family',\r\n '--gog-tooltip-font-size',\r\n '--gog-tooltip-gap',\r\n '--gog-tooltip-line-height',\r\n '--gog-tooltip-max-height',\r\n '--gog-tooltip-max-width',\r\n '--gog-tooltip-padding',\r\n '--gog-tooltip-radius',\r\n '--gog-tooltip-shadow',\r\n '--gog-tooltip-transition-duration',\r\n '--gog-tooltip-z',\r\n ],\r\n },\r\n {\r\n section: 'Instance (deliberately undeclared)',\r\n layer: 'instance',\r\n tokens: [\r\n '--gog-accordion-body-font-size',\r\n '--gog-accordion-body-padding-bottom',\r\n '--gog-accordion-body-padding-top',\r\n '--gog-accordion-chevron-font-size',\r\n '--gog-accordion-chevron-size',\r\n '--gog-accordion-content-gap',\r\n '--gog-accordion-font-size',\r\n '--gog-accordion-letter-spacing',\r\n '--gog-accordion-padding-x',\r\n '--gog-accordion-padding-y',\r\n '--gog-autocomplete-bg',\r\n '--gog-autocomplete-color',\r\n '--gog-autocomplete-float-label-on-bg',\r\n '--gog-autocomplete-font-size',\r\n '--gog-autocomplete-padding-x',\r\n '--gog-autocomplete-padding-y',\r\n '--gog-badge-bg',\r\n '--gog-badge-color',\r\n '--gog-btn-bg',\r\n '--gog-btn-border',\r\n '--gog-btn-color',\r\n '--gog-btn-hover-bg',\r\n '--gog-btn-hover-color',\r\n '--gog-btn-hover-shadow',\r\n '--gog-btn-shadow',\r\n '--gog-btn-spinner-color',\r\n '--gog-button-toggle-bg',\r\n '--gog-button-toggle-color',\r\n '--gog-button-toggle-font-size',\r\n '--gog-button-toggle-padding',\r\n '--gog-calendar-day-bg',\r\n '--gog-calendar-day-color',\r\n '--gog-calendar-day-size',\r\n '--gog-checkbox-box-size',\r\n '--gog-checkbox-icon-size',\r\n '--gog-checkbox-label-size',\r\n '--gog-checkbox-padding',\r\n '--gog-chip-avatar-size',\r\n '--gog-chip-font-size',\r\n '--gog-chip-gap',\r\n '--gog-chip-icon-size',\r\n '--gog-chip-padding-block',\r\n '--gog-chip-padding-inline',\r\n '--gog-chip-remove-size',\r\n '--gog-datepicker-bg',\r\n '--gog-datepicker-color',\r\n '--gog-datepicker-float-label-on-bg',\r\n '--gog-datepicker-font-size',\r\n '--gog-datepicker-padding-x',\r\n '--gog-datepicker-padding-y',\r\n '--gog-dialog-offset-x',\r\n '--gog-dialog-offset-y',\r\n '--gog-divider-color',\r\n '--gog-divider-spacing',\r\n '--gog-divider-thickness',\r\n '--gog-input-float-label-on-bg',\r\n '--gog-input-font',\r\n '--gog-input-padding-x',\r\n '--gog-input-padding-y',\r\n '--gog-multiselect-float-label-on-bg',\r\n '--gog-multiselect-font-size',\r\n '--gog-multiselect-padding-x',\r\n '--gog-multiselect-padding-y',\r\n '--gog-progressbar-buffer-bg',\r\n '--gog-progressbar-fill-bg',\r\n '--gog-progressbar-height',\r\n '--gog-progressbar-track-bg',\r\n '--gog-radio-box-size',\r\n '--gog-radio-label-size',\r\n '--gog-radio-padding',\r\n '--gog-select-control-font',\r\n '--gog-select-control-padding-x',\r\n '--gog-select-control-padding-y',\r\n '--gog-select-float-label-on-bg',\r\n '--gog-table-td-font-size',\r\n '--gog-table-td-padding-v',\r\n '--gog-table-th-font-size',\r\n '--gog-table-th-padding-v',\r\n '--gog-tabs-tab-bg',\r\n '--gog-tabs-tab-color',\r\n '--gog-tabs-tab-font-size',\r\n '--gog-tabs-tab-padding',\r\n '--gog-tag-accent',\r\n '--gog-tag-bg',\r\n '--gog-tag-border',\r\n '--gog-tag-color',\r\n '--gog-tag-font-size',\r\n '--gog-tag-gap',\r\n '--gog-tag-icon-size',\r\n '--gog-tag-padding-block',\r\n '--gog-tag-padding-inline',\r\n '--gog-textarea-scrollbar-width',\r\n '--gog-toggle-padding',\r\n '--gog-toggle-thumb-bg',\r\n '--gog-toggle-track-bg',\r\n ],\r\n },\r\n];\r\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/button/button.directive';\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/autocomplete/autocomplete.component';\r\nexport * from './lib/components/badge/badge.directive';\r\nexport * from './lib/components/button-toggle/button-toggle.component';\r\nexport * from './lib/components/tabs/tab.component';\r\nexport * from './lib/components/tabs/tabs.component';\r\nexport * from './lib/components/tabs/tabs-state';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/datepicker/calendar/calendar.component';\r\nexport * from './lib/components/datepicker/datepicker.component';\r\nexport * from './lib/components/datepicker/date-utils';\r\nexport * from './lib/components/divider/divider.component';\r\nexport * from './lib/components/progressbar/progressbar.component';\r\nexport * from './lib/components/toggle/toggle.component';\r\nexport * from './lib/components/radio-group/radio-group.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/components/tooltip/tooltip.directive';\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 * from './lib/shared/float-label-state';\r\nexport * from './lib/shared/option-accessor';\r\nexport * from './lib/shared/token-names';\r\nexport type { GogDropdownDirection } from './lib/shared/dropdown-position';\r\nexport type { GogTooltipSide } from './lib/shared/tooltip-position';\r\nexport type { GogIconName, GogBuiltinIconName } from './lib/shared/icons';\r\nexport { ICON_DEFS } from './lib/shared/icons';\r\nexport { GOG_ICONS, provideGogIcons } from './lib/shared/icon-registry';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_SIZE","DEFAULT_GAP","DEFAULT_VIEWPORT_PADDING","VIEWPORT_PADDING","DEFAULT_ERROR_DISPLAY","DEFAULT_APPEND_TO_BODY","readPx","DEFAULT_HIDE_DELAY","clamp","DEFAULT_LOCALE","DEFAULT_LABELS","DEFAULT_CLOSE_LABEL","DEFAULT_POSITION"],"mappings":"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"}