{"version":3,"file":"ngwr-select.mjs","sources":["../../../projects/lib/select/tokens/select.token.ts","../../../projects/lib/select/option.ts","../../../projects/lib/select/select.ts","../../../projects/lib/select/select.html","../../../projects/lib/select/option-group.ts","../../../projects/lib/select/option-group.html","../../../projects/lib/select/ngwr-select.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { InjectionToken, type Signal } from '@angular/core';\n\n/** Per-option registration metadata. @internal */\nexport interface WrSelectOptionRegistration {\n  readonly id: string;\n  readonly value: unknown;\n  readonly disabled: boolean;\n  /**\n   * Lazy label reader. Options render text via `<ng-content>`, so we\n   * read it at call time once Angular has settled the projected content.\n   */\n  readonly getLabel: () => string;\n}\n\n/**\n * Contract a `<wr-option>` uses to talk to its parent `<wr-select>`.\n *\n * @internal\n */\nexport interface WrSelectContext {\n  /**\n   * Currently selected value. Single mode: `T | null`. Multi mode:\n   * `readonly T[]`. Options consult {@link isSelected} instead of\n   * reading this directly so the same option code works in both modes.\n   */\n  readonly value: Signal<unknown>;\n  /** Whether the select is in multi-selection mode. */\n  readonly multi: Signal<boolean>;\n  /** Whether the select is disabled. */\n  readonly isDisabled: Signal<boolean>;\n  /** Id of the option currently highlighted by keyboard navigation. */\n  readonly activeOptionId: Signal<string | null>;\n  /**\n   * Active search query (search mode only). Empty string when there is\n   * no filter applied — options treat that as \"show me\".\n   */\n  readonly searchQuery: Signal<string>;\n  /** True only when `mode=\"search\"`. Options gate filtering on this. */\n  readonly isSearch: Signal<boolean>;\n  /** Is the given option value currently selected? Handles both single and multi. */\n  isSelected(value: unknown): boolean;\n  /**\n   * Called when a child option is clicked. The label is read lazily\n   * via {@link WrSelectOptionRegistration.getLabel}, so callers don't\n   * need to thread it through.\n   */\n  selectOption(value: unknown): void;\n  /** Register an option; returns an unregister function. */\n  registerOption(reg: WrSelectOptionRegistration): () => void;\n}\n\n/**\n * Token a `<wr-option>` injects to register itself with and notify its\n * parent `<wr-select>`.\n *\n * @internal\n */\nexport const WR_SELECT = new InjectionToken<WrSelectContext>('WR_SELECT');\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, DestroyRef, ElementRef, ViewEncapsulation, computed, effect, inject, input } from '@angular/core';\n\nimport { WR_SELECT } from './tokens';\n\nlet uid = 0;\n\n/**\n * Single option inside a `<wr-select>`.\n *\n * The option's display label is taken from its projected text content;\n * the form value is its `value` input.\n *\n * @example\n * ```html\n * <wr-option value=\"sm\">Small</wr-option>\n * <wr-option [value]=\"42\">Forty-two</wr-option>\n * ```\n */\n@Component({\n  selector: 'wr-option',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    role: 'option',\n    '[attr.id]': 'id',\n    '[class]': 'classes()',\n    '[attr.aria-selected]': 'selected()',\n    '[attr.aria-disabled]': 'disabled() ? true : null',\n    '(click)': 'onClick()',\n  },\n})\nexport class WrOption {\n  /** The value contributed when this option is chosen. Required. */\n  readonly value = input.required<unknown>();\n\n  /** Disable this option. @default false */\n  readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n  /** Stable id used for `aria-activedescendant`. */\n  readonly id = `wr-option-${++uid}`;\n\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly parent = inject(WR_SELECT, { optional: true });\n\n  /**\n   * @internal — true when this option is currently selected. Works for\n   * both single and multi-select parents via `WrSelectContext.isSelected`.\n   */\n  protected readonly selected = computed(() => {\n    const parent = this.parent;\n    if (!parent) return false;\n    // Re-read parent's value signal so the computed recomputes on change.\n    parent.value();\n    return parent.isSelected(this.value());\n  });\n\n  /** @internal — true when this option is the keyboard cursor target. */\n  protected readonly active = computed(() => this.parent?.activeOptionId() === this.id);\n\n  /**\n   * @internal — search mode only. True when the parent has a query that\n   * the option's text content does not match (case-insensitive substring).\n   * Hidden options stay in the DOM so registration order survives but\n   * collapse via CSS.\n   */\n  protected readonly hidden = computed(() => {\n    const parent = this.parent;\n    if (!parent?.isSearch()) return false;\n    const q = parent.searchQuery().trim().toLowerCase();\n    if (!q) return false;\n    const label = (this.host.nativeElement.textContent ?? '').trim().toLowerCase();\n    return !label.includes(q);\n  });\n\n  protected readonly classes = computed(() => {\n    const parts = ['wr-option'];\n    if (this.selected()) parts.push('wr-option--selected');\n    if (this.active()) parts.push('wr-option--active');\n    if (this.disabled()) parts.push('wr-option--disabled');\n    if (this.hidden()) parts.push('wr-option--hidden');\n    return parts.join(' ');\n  });\n\n  constructor() {\n    if (this.parent) {\n      const parent = this.parent;\n      // Re-register when disabled or value changes so the parent has fresh metadata.\n      effect(onCleanup => {\n        const unreg = parent.registerOption({\n          id: this.id,\n          value: this.value(),\n          disabled: this.disabled(),\n          getLabel: () => this.host.nativeElement.textContent?.trim() ?? '',\n        });\n        onCleanup(() => unreg());\n      });\n      inject(DestroyRef);\n    }\n  }\n\n  protected onClick(): void {\n    if (this.disabled() || !this.parent) return;\n    this.parent.selectOption(this.value());\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { type BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { type OverlayRef, ScrollStrategyOptions } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n  Component,\n  DestroyRef,\n  ElementRef,\n  TemplateRef,\n  ViewContainerRef,\n  ViewEncapsulation,\n  computed,\n  effect,\n  forwardRef,\n  inject,\n  input,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { type Observable, debounceTime, finalize, from, isObservable, of, switchMap } from 'rxjs';\n\nimport { useI18nFormatter, useI18nText } from 'ngwr/i18n';\nimport { WR_OVERLAY, WR_RESPONSIVE_OVERLAYS, wrPresentAsSheet } from 'ngwr/overlay';\nimport { noop } from 'ngwr/utils';\n\nimport type { WrSelectMode, WrSelectSearchLoader, WrSelectTagValidator, WrSelectSize } from './interfaces';\nimport { WrOption } from './option';\nimport { WR_SELECT, type WrSelectContext, type WrSelectOptionRegistration } from './tokens';\n\nlet listboxUid = 0;\n\ninterface SelectedChip {\n  readonly value: unknown;\n  readonly label: string;\n}\n\n/**\n * Combobox primitive. Renders a button that opens a CDK overlay\n * containing the projected `<wr-option>` (and optionally\n * `<wr-option-group>`) children. Every shape is the same component\n * with a different `[mode]`:\n *\n * - `'single'` (default) — one value, no input. Classic dropdown.\n * - `'multi'` — array value, chips on the trigger; clicking an option\n *   toggles instead of closing, Backspace removes the last chip.\n * - `'search'` — type-ahead with sync `[options]` filter or async\n *   `[loader]`. Replaces the standalone `<wr-autocomplete>`.\n * - `'tag'` — free-text + chips with `[separators]` / `[validate]` /\n *   `[allowDuplicates]`. Replaces `<wr-chips-input>`.\n *\n * Implements `ControlValueAccessor` — usable with `[(ngModel)]`,\n * `formControl`, or `formControlName`.\n *\n * @example\n * ```html\n * <!-- Single -->\n * <wr-select placeholder=\"Pick a size\" [(ngModel)]=\"size\">\n *   <wr-option value=\"sm\">Small</wr-option>\n *   <wr-option value=\"md\">Medium</wr-option>\n *   <wr-option value=\"lg\">Large</wr-option>\n * </wr-select>\n *\n * <!-- Multi -->\n * <wr-select mode=\"multi\" placeholder=\"Pick tags\" [(ngModel)]=\"tags\">\n *   <wr-option value=\"ts\">TypeScript</wr-option>\n *   <wr-option value=\"ng\">Angular</wr-option>\n * </wr-select>\n * ```\n *\n * The legacy `[multi]=\"true\"` boolean is still accepted but is now an\n * alias for `[mode]=\"'multi'\"` — prefer the explicit mode.\n *\n * @see https://ngwr.dev/components/select\n */\n@Component({\n  selector: 'wr-select',\n  templateUrl: './select.html',\n  encapsulation: ViewEncapsulation.None,\n  host: { '[class]': 'classes()' },\n  imports: [WrOption],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      // eslint-disable-next-line @angular-eslint/no-forward-ref\n      useExisting: forwardRef(() => WrSelect),\n      multi: true,\n    },\n    {\n      provide: WR_SELECT,\n      // eslint-disable-next-line @angular-eslint/no-forward-ref\n      useExisting: forwardRef(() => WrSelect),\n    },\n  ],\n})\nexport class WrSelect implements ControlValueAccessor, WrSelectContext {\n  /** Placeholder shown when no option is selected. Falls back to `select.placeholder`. */\n  readonly placeholder = input<string | null>(null);\n\n  /** Clear-selection (×) button aria-label. Falls back to `select.clearSelection`. */\n  readonly clearLabel = input<string | null>(null);\n\n  protected readonly resolvedPlaceholder = useI18nText(this.placeholder, 'select.placeholder', '');\n  protected readonly resolvedClear = useI18nText(this.clearLabel, 'select.clearSelection', 'Clear selection');\n\n  /** Per-chip ARIA label — interpolates `{{label}}`. @internal */\n  protected readonly chipRemoveLabel = useI18nFormatter('select.removeItem', 'Remove {{label}}');\n\n  /** Disable the select. Also set by Angular forms via `setDisabledState`. */\n  readonly disabled = input(false, { transform: coerceBooleanProperty });\n\n  /** Pill-shaped corners on the trigger. @default false */\n  readonly rounded = input(false, { transform: coerceBooleanProperty });\n\n  /** Control size — shares the `--wr-control-*` contract. @default 'md' */\n  readonly size = input<WrSelectSize>('md');\n\n  /**\n   * Present the option panel as a full-width bottom-sheet on small\n   * viewports instead of an anchored dropdown. `undefined` follows the\n   * app-wide `provideWrResponsiveOverlays()` setting; `true`/`false`\n   * overrides it. @default undefined\n   */\n  readonly responsive = input<boolean | undefined, BooleanInput>(undefined, {\n    transform: (v: BooleanInput): boolean | undefined => (v == null ? undefined : coerceBooleanProperty(v)),\n  });\n\n  /**\n   * Behavior mode. `<wr-select>` is the unified combobox primitive —\n   * pick the shape via `[mode]`:\n   *\n   * - `'single'` (default) — one value, no input. Classic dropdown.\n   * - `'multi'` — array value, chips on the trigger.\n   * - `'search'` *(planned)* — type-ahead with sync filter or async loader.\n   * - `'tag'` *(planned)* — free-text + chips with optional `allowCreate`.\n   *\n   */\n  readonly mode = input<WrSelectMode | null>(null);\n\n  /** Resolved mode — `'single'` unless `[mode]` says otherwise. */\n  protected readonly effectiveMode = computed<WrSelectMode>(() => this.mode() ?? 'single');\n\n  /** Convenience — `effectiveMode() === 'multi'`. */\n  protected readonly isMulti = computed(() => this.effectiveMode() === 'multi');\n\n  /** Convenience — `effectiveMode() === 'tag'`. */\n  protected readonly isTag = computed(() => this.effectiveMode() === 'tag');\n\n  /** Convenience — `effectiveMode() === 'search'`. Exposed via context for options. */\n  readonly isSearch = computed(() => this.effectiveMode() === 'search');\n\n  /** WrSelectContext — resolved multi-selection flag for child options. */\n  readonly multi = computed(() => this.effectiveMode() === 'multi' || this.effectiveMode() === 'tag');\n\n  /** Both multi and tag render chips on the trigger. */\n  protected readonly hasChips = computed(() => {\n    const m = this.effectiveMode();\n    return m === 'multi' || m === 'tag';\n  });\n\n  /**\n   * Search-mode query. Empty string = no filter. Exposed via context so\n   * each `<wr-option>` can self-hide non-matching rows.\n   */\n  readonly searchQuery = signal('');\n\n  // Search-mode-only inputs (ignored in other modes)\n\n  /**\n   * Search mode: dynamic option array. Each item is rendered as a\n   * `<wr-option>` whose label comes from `[displayWith]`. Works\n   * alongside projected `<wr-option>` children — both lists are\n   * filtered by the search query.\n   */\n  readonly options = input<readonly unknown[]>([]);\n\n  /** Search mode: map a dynamic option item to its display label. @default String */\n  readonly displayWith = input<(item: unknown) => string>((item: unknown) => String(item));\n\n  /**\n   * Search mode: async loader. When set, the loader is called on every\n   * (debounced) keystroke and its result replaces `[options]`. Supports\n   * Observables, Promises, and plain arrays.\n   */\n  readonly loader = input<WrSelectSearchLoader<unknown> | null>(null);\n\n  /** Search mode: debounce (ms) applied to the loader. @default 250 */\n  readonly debounceMs = input(250, { transform: (v: unknown): number => Math.max(0, Number(v) || 0) });\n\n  /** Search mode: minimum query length before the panel opens / loader fires. @default 0 */\n  readonly minChars = input(0, { transform: (v: unknown): number => Math.max(0, Number(v) || 0) });\n\n  /**\n   * Search mode: allow values not in the options list. Enter on an\n   * unmatched query commits the raw text as the form value. @default false\n   */\n  readonly freeText = input(false, { transform: coerceBooleanProperty });\n\n  /** Search mode: text shown when the filter / loader returns nothing. Falls back to `select.noResults`. */\n  readonly noResultsText = input<string | null>(null);\n\n  /** Search mode: text shown while the async loader is in flight. Falls back to `select.loading`. */\n  readonly loadingText = input<string | null>(null);\n\n  protected readonly resolvedNoResults = useI18nText(this.noResultsText, 'select.noResults', 'No results');\n  protected readonly resolvedLoading = useI18nText(this.loadingText, 'select.loading', 'Loading…');\n\n  /** Search mode: results returned by the async loader. @internal */\n  protected readonly loadedOptions = signal<readonly unknown[]>([]);\n\n  /** Search mode: true while the loader is in flight. @internal */\n  protected readonly loading = signal(false);\n\n  // Tag-mode-only inputs (ignored in other modes)\n\n  /**\n   * Tag mode: keys / characters that commit the current draft into a chip.\n   * `'Enter'` is the key name; everything else is a literal character watched\n   * in keypresses and pastes. @default ['Enter', ',']\n   */\n  readonly separators = input<readonly string[]>(['Enter', ',']);\n\n  /** Tag mode: allow the same value to appear more than once. @default false */\n  readonly allowDuplicates = input(false, { transform: coerceBooleanProperty });\n\n  /**\n   * Tag mode: custom validator — return `true` to accept the value, `false`\n   * to silently reject. Receives the trimmed draft + the existing chips.\n   */\n  readonly validate = input<WrSelectTagValidator | null>(null);\n\n  /** Tag-mode draft (text currently typed in the inline input). @internal */\n  protected readonly draft = signal('');\n\n  /**\n   * Show a clear-all (×) button at the end of the chip row when at\n   * least one option is selected (multi mode only). @default true\n   */\n  readonly clearable = input(true, { transform: coerceBooleanProperty });\n\n  /**\n   * Cap on selected items (multi mode). `0` = unlimited. Once reached,\n   * additional clicks on unselected options are ignored. @default 0\n   */\n  readonly maxItems = input(0, {\n    transform: (v: unknown): number => Math.max(0, Number(v) || 0),\n  });\n\n  /**\n   * Maximum number of chips rendered before collapsing the rest into a\n   * `+N more` indicator. `0` = render every chip. @default 0\n   */\n  readonly maxTagCount = input(0, {\n    transform: (v: unknown): number => Math.max(0, Number(v) || 0),\n  });\n\n  /**\n   * Unified value signal. Single mode holds `T | null`; multi mode\n   * holds `readonly T[]`. Internal — consumers go through `[(ngModel)]`\n   * or `[formControl]` via CVA.\n   * @internal\n   */\n  readonly value = signal<unknown>(null);\n\n  /** Listbox id used by the trigger's `aria-controls`. */\n  protected readonly listboxId = `wr-select-listbox-${++listboxUid}`;\n\n  /** Registered options (insertion order). Internal — distinct from the public `[options]` input. */\n  private readonly registry = signal<readonly WrSelectOptionRegistration[]>([]);\n\n  /** Keyboard cursor index into `options`. -1 = none. */\n  private readonly activeIndex = signal(-1);\n\n  /** Id of the active option (for `aria-activedescendant`). */\n  readonly activeOptionId = computed<string | null>(() => {\n    const idx = this.activeIndex();\n    const list = this.registry();\n    return idx >= 0 && idx < list.length ? list[idx].id : null;\n  });\n\n  protected readonly open = signal(false);\n  protected readonly selectedLabel = signal<string | null>(null);\n\n  /**\n   * Selected chips (multi + tag modes). Multi reads labels from the\n   * registered `<wr-option>` children; tag uses each raw string as\n   * both value and label.\n   */\n  protected readonly selectedChips = computed<readonly SelectedChip[]>(() => {\n    if (!this.hasChips()) return [];\n    const arr = this.asArray(this.value());\n    if (this.isTag()) {\n      return arr.map<SelectedChip>(v => ({ value: v, label: String(v) }));\n    }\n    const list = this.registry();\n    return arr.map<SelectedChip>(v => {\n      const found = list.find(o => o.value === v);\n      return { value: v, label: found?.getLabel() ?? String(v) };\n    });\n  });\n\n  protected readonly visibleChips = computed<readonly SelectedChip[]>(() => {\n    const cap = this.maxTagCount();\n    const chips = this.selectedChips();\n    return cap > 0 && chips.length > cap ? chips.slice(0, cap) : chips;\n  });\n\n  protected readonly hiddenChipCount = computed(() => {\n    const cap = this.maxTagCount();\n    const total = this.selectedChips().length;\n    return cap > 0 && total > cap ? total - cap : 0;\n  });\n\n  protected readonly hasSelection = computed(() => {\n    if (this.hasChips()) return this.selectedChips().length > 0;\n    return this.value() != null;\n  });\n\n  private readonly disabledFromCva = signal(false);\n\n  /** Effective disabled state — input wins, CVA second. */\n  readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n  protected readonly classes = computed(() => {\n    const parts = ['wr-select'];\n    if (this.open()) parts.push('wr-select--open');\n    if (this.rounded()) parts.push('wr-select--rounded');\n    const size = this.size();\n    if (size !== 'md') parts.push(`wr-select--${size}`);\n    if (this.isMulti()) parts.push('wr-select--multi');\n    if (this.isTag()) parts.push('wr-select--tag');\n    if (this.isSearch()) parts.push('wr-select--search');\n    if (this.isDisabled()) parts.push('wr-select--disabled');\n    return parts.join(' ');\n  });\n\n  /**\n   * Search-mode dynamic options. Loader results win when the loader is\n   * set; otherwise the static `[options]` array. Each item is rendered\n   * as an internal `<wr-option>` in the panel.\n   */\n  protected readonly dynamicOptions = computed<readonly unknown[]>(() =>\n    this.loader() ? this.loadedOptions() : this.options()\n  );\n\n  /**\n   * Count of registered options that pass the current search filter.\n   * Hides the noResults state when the panel has at least one visible row.\n   */\n  protected readonly visibleCount = computed(() => {\n    const list = this.registry();\n    if (!this.isSearch()) return list.length;\n    const q = this.searchQuery().trim().toLowerCase();\n    if (!q) return list.length;\n    let count = 0;\n    for (const o of list) {\n      if (o.getLabel().toLowerCase().includes(q)) count++;\n    }\n    return count;\n  });\n\n  /** Search mode: show \"no results\" when the panel has nothing to offer. */\n  protected readonly hasNoResults = computed(() => {\n    if (!this.isSearch() || !this.open() || this.loading()) return false;\n    if (this.searchQuery().trim().length < this.minChars()) return false;\n    return this.visibleCount() === 0;\n  });\n\n  /** Search mode: is this option hidden by the current query? @internal */\n  private isOptionHidden(label: string): boolean {\n    if (!this.isSearch()) return false;\n    const q = this.searchQuery().trim().toLowerCase();\n    if (!q) return false;\n    return !label.toLowerCase().includes(q);\n  }\n\n  protected readonly panelTpl = viewChild.required('panelTpl', { read: TemplateRef });\n\n  /** Tag-mode inline input. Present only when `mode=\"tag\"`. @internal */\n  protected readonly tagInputEl = viewChild<ElementRef<HTMLInputElement>>('tagInput');\n\n  /** Search-mode inline input. Present only when `mode=\"search\"`. @internal */\n  protected readonly searchInputEl = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n  protected focusTagInput(): void {\n    this.tagInputEl()?.nativeElement.focus();\n  }\n\n  protected focusSearchInput(): void {\n    this.searchInputEl()?.nativeElement.focus();\n  }\n\n  // Search-mode handlers\n\n  protected onSearchInput(event: Event): void {\n    if (this.isDisabled()) return;\n    const value = (event.target as HTMLInputElement).value;\n    this.searchQuery.set(value);\n    if (!this.open()) this.open.set(true);\n  }\n\n  protected onSearchFocus(): void {\n    if (this.isDisabled()) return;\n    if (!this.open()) {\n      this.seedActiveIndex();\n      this.open.set(true);\n    }\n  }\n\n  protected onSearchKey(event: KeyboardEvent): void {\n    // freeText: Enter on an unmatched query commits the typed string\n    // as the value. Skips when an active option is highlighted (the\n    // normal Enter-selects behaviour wins).\n    if (event.key === 'Enter' && this.freeText() && this.open()) {\n      const q = this.searchQuery().trim();\n      const idx = this.activeIndex();\n      const list = this.registry();\n      const hasActive =\n        idx >= 0 && idx < list.length && !list[idx].disabled && !this.isOptionHidden(list[idx].getLabel());\n      if (!hasActive && q) {\n        event.preventDefault();\n        this.value.set(q);\n        this.onChange(q);\n        this.onTouched();\n        this.open.set(false);\n        return;\n      }\n    }\n    // Otherwise route through the same keyboard plumbing as the button trigger.\n    this.onTriggerKey(event);\n  }\n\n  /**\n   * Display text for the search input. Shows the selected option's\n   * label when collapsed, or the live query while typing / panel open.\n   * @internal\n   */\n  protected readonly searchDisplay = computed(() => {\n    if (this.open()) return this.searchQuery();\n    return this.selectedLabel() ?? '';\n  });\n\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly overlay = inject(WR_OVERLAY);\n  private readonly responsiveConfig = inject(WR_RESPONSIVE_OVERLAYS);\n  private readonly vcr = inject(ViewContainerRef);\n  private readonly scrollStrategies = inject(ScrollStrategyOptions);\n  private readonly destroyRef = inject(DestroyRef);\n  private overlayRef: OverlayRef | null = null;\n\n  private onChange: (value: unknown) => void = noop;\n  protected onTouched: () => void = noop;\n\n  constructor() {\n    effect(() => {\n      if (this.open()) {\n        this.openOverlay();\n      } else {\n        this.closeOverlay();\n        // Reset the search query when the panel closes so a re-open\n        // doesn't carry a stale filter.\n        if (this.isSearch()) this.searchQuery.set('');\n      }\n    });\n\n    // Async loader pipeline (search mode only). `switchMap` cancels\n    // in-flight requests when a new keystroke arrives.\n    toObservable(this.searchQuery)\n      .pipe(\n        debounceTime(this.debounceMs()),\n        switchMap(query => {\n          const loader = this.loader();\n          if (!loader || !this.isSearch() || query.length < this.minChars()) {\n            this.loading.set(false);\n            return of<readonly unknown[]>([]);\n          }\n          this.loading.set(true);\n          const result = loader(query);\n          const source: Observable<readonly unknown[]> = isObservable(result) ? result : from(Promise.resolve(result));\n          return source.pipe(finalize(() => this.loading.set(false)));\n        }),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(items => this.loadedOptions.set(items));\n\n    // Resolve the single-mode trigger label whenever the value or\n    // options change. Multi mode reads `selectedChips` instead and\n    // doesn't need this.\n    effect(() => {\n      const v = this.value();\n      const list = this.registry();\n      if (this.isMulti()) {\n        this.selectedLabel.set(null);\n        return;\n      }\n      const match = list.find(o => o.value === v);\n      this.selectedLabel.set(match ? match.getLabel() : null);\n    });\n  }\n\n  // WrSelectContext\n\n  isSelected(value: unknown): boolean {\n    if (this.isMulti()) return this.asArray(this.value()).includes(value);\n    return this.value() === value;\n  }\n\n  selectOption(value: unknown): void {\n    if (this.isMulti()) {\n      const current = this.asArray(this.value());\n      const idx = current.indexOf(value);\n      let next: readonly unknown[];\n      if (idx >= 0) {\n        next = [...current.slice(0, idx), ...current.slice(idx + 1)];\n      } else {\n        const cap = this.maxItems();\n        if (cap > 0 && current.length >= cap) return;\n        next = [...current, value];\n      }\n      this.value.set(next);\n      this.onChange(next);\n      this.onTouched();\n      // Keep the panel open in multi mode so the user can keep picking.\n      return;\n    }\n    this.value.set(value);\n    this.onChange(value);\n    this.onTouched();\n    this.open.set(false);\n  }\n\n  registerOption(reg: WrSelectOptionRegistration): () => void {\n    this.registry.update(list => [...list, reg]);\n    return () => this.registry.update(list => list.filter(o => o.id !== reg.id));\n  }\n\n  // Chip handlers (multi + tag)\n\n  /** Remove one selection (chip × button). Works for multi and tag modes. */\n  protected removeChip(value: unknown, event: Event): void {\n    event.stopPropagation();\n    if (this.isDisabled() || !this.hasChips()) return;\n    const next = this.asArray(this.value()).filter(v => v !== value);\n    this.value.set(next);\n    this.onChange(next);\n    this.onTouched();\n  }\n\n  /** Clear every selection (× button). Multi/tag → empty array; search → null. */\n  protected clearAll(event: Event): void {\n    event.stopPropagation();\n    if (this.isDisabled()) return;\n    if (this.hasChips()) {\n      this.value.set([]);\n      this.onChange([]);\n    } else if (this.isSearch()) {\n      this.value.set(null);\n      this.onChange(null);\n      this.searchQuery.set('');\n    } else {\n      return;\n    }\n    this.onTouched();\n  }\n\n  // Tag-mode draft handlers\n\n  /** Capacity check used by tag mode to refuse the next add. */\n  protected readonly atCapacity = computed(() => {\n    const cap = this.maxItems();\n    return cap > 0 && this.asArray(this.value()).length >= cap;\n  });\n\n  protected onTagInput(event: Event): void {\n    if (this.isDisabled()) return;\n    this.draft.set((event.target as HTMLInputElement).value);\n  }\n\n  protected onTagKeydown(event: KeyboardEvent): void {\n    if (this.isDisabled()) return;\n    const seps = this.separators();\n\n    if (seps.includes(event.key)) {\n      event.preventDefault();\n      this.commitDraft();\n      return;\n    }\n\n    if (event.key === 'Backspace' && this.draft() === '') {\n      const chips = this.selectedChips();\n      if (chips.length > 0) {\n        event.preventDefault();\n        this.removeChip(chips[chips.length - 1].value, event);\n      }\n    }\n  }\n\n  protected onTagPaste(event: ClipboardEvent): void {\n    if (this.isDisabled()) return;\n    const text = event.clipboardData?.getData('text') ?? '';\n    if (!text) return;\n\n    const seps = this.separators().filter(s => s !== 'Enter');\n    if (seps.length === 0) return;\n\n    event.preventDefault();\n    const escaped = seps.map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n    const splitRegex = new RegExp(`[${escaped}\\\\n]+`);\n    for (const part of text.split(splitRegex)) this.tryAddTag(part);\n  }\n\n  protected onTagBlur(): void {\n    if (this.draft().trim()) this.commitDraft();\n    this.onTouched();\n  }\n\n  private commitDraft(): void {\n    const v = this.draft().trim();\n    this.draft.set('');\n    if (v) this.tryAddTag(v);\n  }\n\n  private tryAddTag(raw: string): void {\n    if (!this.isTag() || this.atCapacity()) return;\n    const value = raw.trim();\n    if (!value) return;\n\n    const existing = this.asArray(this.value()).map(String);\n    if (!this.allowDuplicates() && existing.includes(value)) return;\n\n    const validator = this.validate();\n    if (validator && !validator(value, existing)) return;\n\n    const next = [...existing, value];\n    this.value.set(next);\n    this.onChange(next);\n    this.onTouched();\n  }\n\n  // ControlValueAccessor\n\n  writeValue(value: unknown): void {\n    if (this.hasChips()) {\n      this.value.set(Array.isArray(value) ? (value as readonly unknown[]) : []);\n    } else {\n      this.value.set(value);\n    }\n  }\n\n  registerOnChange(fn: (value: unknown) => 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.disabledFromCva.set(coerceBooleanProperty(isDisabled));\n    if (isDisabled) this.open.set(false);\n  }\n\n  // Template handlers\n\n  protected onTriggerClick(): void {\n    if (this.isDisabled()) return;\n    // Tag mode has no panel — clicks should land on the inline input,\n    // not toggle an overlay that's never created.\n    if (this.isTag()) return;\n    this.open.update(v => !v);\n  }\n\n  protected onTriggerKey(event: KeyboardEvent): void {\n    if (this.isDisabled()) return;\n\n    if (!this.open()) {\n      if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n        event.preventDefault();\n        this.seedActiveIndex();\n        this.open.set(true);\n        return;\n      }\n      // Multi mode: Backspace on closed trigger removes last chip. Tag\n      // mode has its own input handler — never reaches this branch.\n      if (event.key === 'Backspace' && this.isMulti() && this.hasSelection()) {\n        event.preventDefault();\n        const chips = this.selectedChips();\n        const last = chips[chips.length - 1];\n        if (last) this.removeChip(last.value, event);\n      }\n      return;\n    }\n\n    // Open — navigation/selection.\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        this.moveActive(1);\n        break;\n      case 'ArrowUp':\n        event.preventDefault();\n        this.moveActive(-1);\n        break;\n      case 'Home':\n        event.preventDefault();\n        this.activeIndex.set(this.firstEnabled());\n        break;\n      case 'End':\n        event.preventDefault();\n        this.activeIndex.set(this.lastEnabled());\n        break;\n      case 'Enter':\n      case ' ': {\n        event.preventDefault();\n        const idx = this.activeIndex();\n        const list = this.registry();\n        if (idx >= 0 && idx < list.length && !list[idx].disabled) {\n          const id = list[idx].id;\n          const el = this.overlayRef?.overlayElement.querySelector<HTMLElement>(`#${CSS.escape(id)}`);\n          el?.click();\n        }\n        break;\n      }\n      default:\n        break;\n    }\n  }\n\n  private seedActiveIndex(): void {\n    const list = this.registry();\n    let selectedIdx = -1;\n    if (this.isMulti()) {\n      const arr = this.asArray(this.value());\n      if (arr.length > 0) selectedIdx = list.findIndex(o => o.value === arr[0]);\n    } else {\n      selectedIdx = list.findIndex(o => o.value === this.value());\n    }\n    this.activeIndex.set(selectedIdx >= 0 ? selectedIdx : this.firstEnabled());\n  }\n\n  private moveActive(delta: number): void {\n    const list = this.registry();\n    if (list.length === 0) return;\n    let i = this.activeIndex();\n    let attempts = list.length;\n    while (attempts-- > 0) {\n      i = (i + delta + list.length) % list.length;\n      const o = list[i];\n      if (!o.disabled && !this.isOptionHidden(o.getLabel())) {\n        this.activeIndex.set(i);\n        return;\n      }\n    }\n  }\n\n  private firstEnabled(): number {\n    return this.registry().findIndex(o => !o.disabled && !this.isOptionHidden(o.getLabel()));\n  }\n\n  private lastEnabled(): number {\n    const list = this.registry();\n    let found = -1;\n    list.forEach((o, i) => {\n      if (!o.disabled && !this.isOptionHidden(o.getLabel())) found = i;\n    });\n    return found;\n  }\n\n  /** Coerce the multi-mode value signal into an array (handles writeValue from non-array). */\n  private asArray(value: unknown): readonly unknown[] {\n    if (Array.isArray(value)) return value as readonly unknown[];\n    if (value == null) return [];\n    return [value];\n  }\n\n  // Overlay\n\n  private openOverlay(): void {\n    if (this.overlayRef) return;\n\n    // On small viewports (when opted in) detach from the trigger and present\n    // the panel as a full-width slide-up sheet pinned to the bottom edge.\n    const asSheet = wrPresentAsSheet(this.responsive(), this.responsiveConfig);\n\n    const positionStrategy = asSheet\n      ? this.overlay.position().global().centerHorizontally().bottom('0')\n      : this.overlay\n          .position()\n          .flexibleConnectedTo(this.host)\n          .withPositions([\n            { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n            { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n          ])\n          .withPush(true);\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: asSheet ? this.scrollStrategies.block() : this.scrollStrategies.reposition(),\n      // Floor the panel at the trigger width (it can still grow for long\n      // options) instead of pinning it. The panel fills this via `width: 100%`,\n      // so the flex overlay pane has no transparent gutter beside a\n      // content-narrow panel — that gutter would otherwise sit \"inside\" the\n      // overlay and swallow outside-clicks, leaving the panel open. Mirrors how\n      // mat-select sizes its overlay.\n      width: asSheet ? '100%' : undefined,\n      minWidth: asSheet ? undefined : this.host.nativeElement.getBoundingClientRect().width,\n      hasBackdrop: asSheet,\n      backdropClass: asSheet ? 'wr-select-backdrop' : undefined,\n      panelClass: asSheet ? ['wr-select-overlay', 'wr-overlay-sheet'] : 'wr-select-overlay',\n    });\n\n    const portal = new TemplatePortal(this.panelTpl(), this.vcr);\n    this.overlayRef.attach(portal);\n\n    if (asSheet) {\n      this.overlayRef\n        .backdropClick()\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe(() => this.open.set(false));\n    }\n\n    this.overlayRef\n      .outsidePointerEvents()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(event => {\n        if (this.host.nativeElement.contains(event.target as Node)) return;\n        this.open.set(false);\n      });\n\n    this.overlayRef\n      .keydownEvents()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(event => {\n        if (event.key === 'Escape') {\n          event.preventDefault();\n          this.open.set(false);\n        }\n      });\n  }\n\n  private closeOverlay(): void {\n    if (!this.overlayRef) return;\n    this.overlayRef.dispose();\n    this.overlayRef = null;\n  }\n}\n","@if (isSearch()) {\n  <!-- Search mode: a real text input drives a filtered overlay panel.\n       The wrapper isn't itself focusable — the input is the tabstop. -->\n  <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n  <div class=\"wr-select__trigger wr-select__trigger--search\" (click)=\"focusSearchInput()\">\n    <input\n      #searchInput\n      type=\"text\"\n      role=\"combobox\"\n      class=\"wr-select__search-input\"\n      autocomplete=\"off\"\n      spellcheck=\"false\"\n      [disabled]=\"isDisabled()\"\n      [attr.aria-haspopup]=\"'listbox'\"\n      [attr.aria-expanded]=\"open()\"\n      [attr.aria-controls]=\"listboxId\"\n      [attr.aria-activedescendant]=\"open() ? activeOptionId() || null : null\"\n      [placeholder]=\"resolvedPlaceholder()\"\n      [value]=\"searchDisplay()\"\n      (input)=\"onSearchInput($event)\"\n      (focus)=\"onSearchFocus()\"\n      (keydown)=\"onSearchKey($event)\"\n      (blur)=\"onTouched()\"\n    />\n    @if (clearable() && hasSelection() && !isDisabled()) {\n      <span\n        class=\"wr-select__clear\"\n        role=\"button\"\n        [attr.aria-label]=\"resolvedClear()\"\n        tabindex=\"-1\"\n        (click)=\"clearAll($event)\"\n        (keydown.enter)=\"clearAll($event)\"\n        (keydown.space)=\"clearAll($event)\"\n      >\n        <svg\n          class=\"wr-icon__svg\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          aria-hidden=\"true\"\n        >\n          <path d=\"M18 6 6 18\" />\n          <path d=\"m6 6 12 12\" />\n        </svg>\n      </span>\n    }\n    <svg\n      class=\"wr-icon__svg wr-select__chevron\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n    >\n      <path d=\"m6 9 6 6 6-6\" />\n    </svg>\n  </div>\n} @else if (isTag()) {\n  <!-- Tag mode: a focusable input lives inside, so the wrapper itself\n       only exists to host chips and forward whitespace clicks to the\n       input. Keyboard users tab straight into the input — no need for a\n       separate role. The click handler is a mouse-only convenience. -->\n  <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n  <div\n    class=\"wr-select__trigger wr-select__trigger--tag\"\n    [attr.aria-disabled]=\"isDisabled() || null\"\n    (click)=\"focusTagInput()\"\n  >\n    <span class=\"wr-select__chips\">\n      @for (chip of visibleChips(); track $index) {\n        <span class=\"wr-select__chip\">\n          <span class=\"wr-select__chip-label\">{{ chip.label }}</span>\n          <span\n            class=\"wr-select__chip-remove\"\n            role=\"button\"\n            [attr.aria-label]=\"chipRemoveLabel({ label: chip.label })\"\n            tabindex=\"-1\"\n            (click)=\"removeChip(chip.value, $event)\"\n            (keydown.enter)=\"removeChip(chip.value, $event)\"\n            (keydown.space)=\"removeChip(chip.value, $event)\"\n          >\n            <svg\n              class=\"wr-icon__svg\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n              aria-hidden=\"true\"\n            >\n              <path d=\"M18 6 6 18\" />\n              <path d=\"m6 6 12 12\" />\n            </svg>\n          </span>\n        </span>\n      }\n      @if (hiddenChipCount(); as extra) {\n        <span class=\"wr-select__chip wr-select__chip--more\">+{{ extra }} more</span>\n      }\n      <input\n        #tagInput\n        type=\"text\"\n        class=\"wr-select__tag-input\"\n        [value]=\"draft()\"\n        [disabled]=\"isDisabled() || atCapacity()\"\n        [placeholder]=\"hasSelection() ? '' : resolvedPlaceholder()\"\n        (input)=\"onTagInput($event)\"\n        (keydown)=\"onTagKeydown($event)\"\n        (paste)=\"onTagPaste($event)\"\n        (blur)=\"onTagBlur()\"\n      />\n    </span>\n\n    @if (clearable() && hasSelection() && !isDisabled()) {\n      <span\n        class=\"wr-select__clear\"\n        role=\"button\"\n        [attr.aria-label]=\"resolvedClear()\"\n        tabindex=\"-1\"\n        (click)=\"clearAll($event)\"\n        (keydown.enter)=\"clearAll($event)\"\n        (keydown.space)=\"clearAll($event)\"\n      >\n        <svg\n          class=\"wr-icon__svg\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          aria-hidden=\"true\"\n        >\n          <path d=\"M18 6 6 18\" />\n          <path d=\"m6 6 12 12\" />\n        </svg>\n      </span>\n    }\n  </div>\n} @else {\n  <button\n    type=\"button\"\n    class=\"wr-select__trigger\"\n    role=\"combobox\"\n    [disabled]=\"isDisabled()\"\n    [attr.aria-haspopup]=\"'listbox'\"\n    [attr.aria-expanded]=\"open()\"\n    [attr.aria-controls]=\"listboxId\"\n    [attr.aria-multiselectable]=\"isMulti() ? 'true' : null\"\n    [attr.aria-activedescendant]=\"open() ? activeOptionId() || null : null\"\n    (click)=\"onTriggerClick()\"\n    (keydown)=\"onTriggerKey($event)\"\n    (blur)=\"onTouched()\"\n  >\n    @if (isMulti()) {\n      @if (hasSelection()) {\n        <span class=\"wr-select__chips\">\n          @for (chip of visibleChips(); track $index) {\n            <span class=\"wr-select__chip\">\n              <span class=\"wr-select__chip-label\">{{ chip.label }}</span>\n              <span\n                class=\"wr-select__chip-remove\"\n                role=\"button\"\n                [attr.aria-label]=\"chipRemoveLabel({ label: chip.label })\"\n                tabindex=\"-1\"\n                (click)=\"removeChip(chip.value, $event)\"\n                (keydown.enter)=\"removeChip(chip.value, $event)\"\n                (keydown.space)=\"removeChip(chip.value, $event)\"\n              >\n                <svg\n                  class=\"wr-icon__svg\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  stroke-width=\"2\"\n                  stroke-linecap=\"round\"\n                  stroke-linejoin=\"round\"\n                  aria-hidden=\"true\"\n                >\n                  <path d=\"M18 6 6 18\" />\n                  <path d=\"m6 6 12 12\" />\n                </svg>\n              </span>\n            </span>\n          }\n          @if (hiddenChipCount(); as extra) {\n            <span class=\"wr-select__chip wr-select__chip--more\">+{{ extra }} more</span>\n          }\n        </span>\n      } @else {\n        <span class=\"wr-select__placeholder\">{{ resolvedPlaceholder() }}</span>\n      }\n    } @else {\n      @if (selectedLabel(); as label) {\n        <span class=\"wr-select__value\">{{ label }}</span>\n      } @else {\n        <span class=\"wr-select__placeholder\">{{ resolvedPlaceholder() }}</span>\n      }\n    }\n\n    @if (isMulti() && clearable() && hasSelection() && !isDisabled()) {\n      <span\n        class=\"wr-select__clear\"\n        role=\"button\"\n        [attr.aria-label]=\"resolvedClear()\"\n        tabindex=\"-1\"\n        (click)=\"clearAll($event)\"\n        (keydown.enter)=\"clearAll($event)\"\n        (keydown.space)=\"clearAll($event)\"\n      >\n        <svg\n          class=\"wr-icon__svg\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          aria-hidden=\"true\"\n        >\n          <path d=\"M18 6 6 18\" />\n          <path d=\"m6 6 12 12\" />\n        </svg>\n      </span>\n    }\n\n    <svg\n      class=\"wr-icon__svg wr-select__chevron\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n    >\n      <path d=\"m6 9 6 6 6-6\" />\n    </svg>\n  </button>\n}\n\n<ng-template #panelTpl>\n  <div\n    class=\"wr-select-panel\"\n    [class.wr-select-panel--sm]=\"size() === 'sm'\"\n    [class.wr-select-panel--lg]=\"size() === 'lg'\"\n    role=\"listbox\"\n    [attr.id]=\"listboxId\"\n    [attr.aria-multiselectable]=\"isMulti() ? 'true' : null\"\n  >\n    @if (loading()) {\n      <div class=\"wr-select-panel__loading\" aria-busy=\"true\">{{ resolvedLoading() }}</div>\n    }\n\n    <!-- Dynamic options from [options] or async [loader] (search mode).\n         Rendered as wr-option so the standard registration / filter\n         pipeline applies uniformly. -->\n    @for (item of dynamicOptions(); track $index) {\n      <wr-option [value]=\"item\">{{ displayWith()(item) }}</wr-option>\n    }\n\n    <!-- Projected static options. -->\n    <ng-content />\n\n    @if (hasNoResults()) {\n      <div class=\"wr-select-panel__empty\">{{ resolvedNoResults() }}</div>\n    }\n  </div>\n</ng-template>\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation, input } from '@angular/core';\n\n/**\n * Visually groups options under a label inside a `<wr-select>`.\n *\n * @example\n * ```html\n * <wr-option-group label=\"Sizes\">\n *   <wr-option value=\"sm\">Small</wr-option>\n *   <wr-option value=\"md\">Medium</wr-option>\n * </wr-option-group>\n * ```\n */\n@Component({\n  selector: 'wr-option-group',\n  templateUrl: './option-group.html',\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'wr-option-group', role: 'group' },\n})\nexport class WrOptionGroup {\n  /** Section heading shown above the options. */\n  readonly label = input.required<string>();\n}\n","<div class=\"wr-option-group__label\">{{ label() }}</div>\n<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}