{"version":3,"file":"menu.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-dynamic-trigger.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-content.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-errors.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-panel.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-item.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-item.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-trigger.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/contextmenu-trigger.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu.module.ts"],"sourcesContent":["import { Directive, inject, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: `[sbbMenuDynamicTrigger]`,\n  exportAs: 'sbbMenuDynamicTrigger',\n})\nexport class SbbMenuDynamicTrigger {\n  readonly _templateRef = inject<TemplateRef<any>>(TemplateRef);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const _templateRef = this._templateRef;\n    const viewContainerRef = inject(ViewContainerRef);\n\n    viewContainerRef.createEmbeddedView(_templateRef);\n  }\n}\n","import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  ApplicationRef,\n  ChangeDetectorRef,\n  Directive,\n  inject,\n  InjectionToken,\n  Injector,\n  OnDestroy,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/**\n * Injection token that can be used to reference instances of `SbbMenuContent`. It serves\n * as alternative token to the actual `SbbMenuContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const SBB_MENU_CONTENT = new InjectionToken<SbbMenuContent>('SbbMenuContent');\n\n/**\n * Menu content that will be rendered lazily once the menu is opened.\n */\n@Directive({\n  selector: 'ng-template[sbbMenuContent]',\n  providers: [{ provide: SBB_MENU_CONTENT, useExisting: SbbMenuContent }],\n})\nexport class SbbMenuContent implements OnDestroy {\n  private _template = inject<TemplateRef<any>>(TemplateRef);\n  private _appRef = inject(ApplicationRef);\n  private _injector = inject(Injector);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _document = inject(DOCUMENT);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n\n  private _portal: TemplatePortal | undefined;\n  private _outlet: DomPortalOutlet | undefined;\n\n  /** Emits when the menu content has been attached. */\n  readonly _attached: Subject<void> = new Subject<void>();\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  /**\n   * Attaches the content with a particular context.\n   * @docs-private\n   */\n  attach(context: any = {}) {\n    if (!this._portal) {\n      this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n    }\n\n    this.detach();\n\n    if (!this._outlet) {\n      this._outlet = new DomPortalOutlet(\n        this._document.createElement('div'),\n        this._appRef,\n        this._injector,\n      );\n    }\n\n    const element: HTMLElement = this._template.elementRef.nativeElement;\n\n    // Because we support opening the same menu from different triggers (which in turn have their\n    // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n    // risk it staying attached to a pane that's no longer in the DOM.\n    element.parentNode!.insertBefore(this._outlet.outletElement, element);\n\n    // When `SbbMenuContent` is used in an `OnPush` component, the insertion of the menu\n    // content via `createEmbeddedView` does not cause the content to be seen as \"dirty\"\n    // by Angular. This causes the `@ContentChildren` for menu items within the menu to\n    // not be updated by Angular. By explicitly marking for check here, we tell Angular that\n    // it needs to check for new menu items and update the `@ContentChild` in `SbbMenu`.\n    this._changeDetectorRef.markForCheck();\n\n    this._portal.attach(this._outlet, context);\n    this._attached.next();\n  }\n\n  /**\n   * Detaches the content.\n   * @docs-private\n   */\n  detach() {\n    if (this._portal?.isAttached) {\n      this._portal.detach();\n    }\n  }\n\n  ngOnDestroy() {\n    this.detach();\n    this._outlet?.dispose();\n  }\n}\n","/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nexport function throwSbbMenuInvalidPositionX() {\n  throw Error(`xPosition value must be either 'before' or after'.\n      Example: <sbb-menu xPosition=\"before\" #menu=\"sbbMenu\"></sbb-menu>`);\n}\n\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nexport function throwSbbMenuInvalidPositionY() {\n  throw Error(`yPosition value must be either 'above' or below'.\n      Example: <sbb-menu yPosition=\"above\" #menu=\"sbbMenu\"></sbb-menu>`);\n}\n\n/**\n * Throws an exception for the case when a menu is assigned\n * to a trigger that is placed inside the same menu.\n * @docs-private\n */\nexport function throwSbbMenuRecursiveError() {\n  throw Error(\n    `sbbMenuTriggerFor: menu cannot contain its own trigger. Assign a menu that is ` +\n      `not a parent of the trigger or move the trigger outside of the menu.`,\n  );\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { EventEmitter, InjectionToken, TemplateRef } from '@angular/core';\n\nimport { SbbMenuContent } from './menu-content';\nimport { SbbMenuPositionX, SbbMenuPositionY } from './menu-positions';\nimport type { SbbMenuTriggerContext } from './menu-trigger';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nexport const SBB_MENU_PANEL = new InjectionToken<SbbMenuPanel>('SBB_MENU_PANEL');\n\n/**\n * Interface for a custom menu panel that can be used with `sbbMenuTriggerFor`.\n * @docs-private\n */\nexport interface SbbMenuPanel<T = any> {\n  triggerContext: SbbMenuTriggerContext;\n  xPosition: SbbMenuPositionX;\n  yPosition: SbbMenuPositionY;\n  overlapTrigger: boolean;\n  templateRef: TemplateRef<any>;\n  readonly closed: EventEmitter<void | 'click' | 'keydown' | 'tab'>;\n  parentMenu?: SbbMenuPanel | undefined;\n  focusFirstItem: (origin?: FocusOrigin) => void;\n  resetActiveItem: () => void;\n  setPositionClasses?: (x: SbbMenuPositionX, y: SbbMenuPositionY) => void;\n  setElevation?(depth: number): void;\n  lazyContent?: SbbMenuContent;\n  backdropClass?: string;\n  overlayPanelClass?: string | string[];\n  hasBackdrop?: boolean;\n  readonly panelId?: string;\n}\n","import { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  inject,\n  Input,\n  OnDestroy,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\nimport { Subject } from 'rxjs';\n\nimport { SbbMenuPanel, SBB_MENU_PANEL } from './menu-panel';\n\n/**\n * Single item inside a `sbb-menu`. Provides the menu item styling and accessibility treatment.\n */\n@Component({\n  selector: '[sbb-menu-item]',\n  exportAs: 'sbbMenuItem',\n  host: {\n    '[attr.role]': 'role',\n    '[class.sbb-active]': '_highlighted',\n    '[class.sbb-menu-item-submenu-trigger]': '_triggersSubmenu',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[attr.disabled]': 'disabled || null',\n    class: 'sbb-menu-item sbb-link-reset sbb-icon-fit',\n    '(click)': '_checkDisabled($event)',\n    '(mouseenter)': '_handleMouseEnter()',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  templateUrl: 'menu-item.html',\n  imports: [SbbIcon],\n})\nexport class SbbMenuItem implements FocusableOption, AfterViewInit, OnDestroy {\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _document = inject(DOCUMENT);\n  private _focusMonitor = inject(FocusMonitor);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  _parentMenu?: SbbMenuPanel<SbbMenuItem> | null | undefined = inject<SbbMenuPanel<SbbMenuItem>>(\n    SBB_MENU_PANEL,\n    { optional: true },\n  );\n\n  /** Whether the menu item is disabled. */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /** ARIA role for the menu item. */\n  @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' = 'menuitem';\n\n  /** Stream that emits when the menu item is hovered. */\n  readonly _hovered: Subject<SbbMenuItem> = new Subject<SbbMenuItem>();\n\n  /** Stream that emits when the menu item is focused. */\n  readonly _focused: Subject<SbbMenuItem> = new Subject<SbbMenuItem>();\n\n  /** Whether the menu item is highlighted. */\n  _highlighted: boolean = false;\n\n  /** Whether the menu item acts as a trigger for a sub-menu. */\n  _triggersSubmenu: boolean = false;\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  /** Focuses the menu item. */\n  focus(origin?: FocusOrigin, options?: FocusOptions): void {\n    if (origin) {\n      this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n    } else {\n      this._getHostElement().focus(options);\n    }\n\n    this._focused.next(this);\n  }\n\n  ngAfterViewInit() {\n    // Start monitoring the element so it gets the appropriate focused classes. We want\n    // to show the focus style for menu items only when the focus was not caused by a\n    // mouse or touch interaction.\n    this._focusMonitor.monitor(this._elementRef, false);\n  }\n\n  ngOnDestroy() {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n\n    this._hovered.complete();\n    this._focused.complete();\n  }\n\n  /** Used to set the `tabindex`. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Returns the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._elementRef.nativeElement;\n  }\n\n  /** Prevents the default element actions if it is disabled. */\n  _checkDisabled(event: Event): void {\n    if (this.disabled) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }\n\n  /** Emits to the hover stream. */\n  _handleMouseEnter() {\n    this._hovered.next(this);\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    const clone = this._elementRef.nativeElement.cloneNode(true) as HTMLElement;\n    const icons = clone.querySelectorAll('sbb-icon');\n\n    // Strip away icons so they don't show up in the text.\n    for (let i = 0; i < icons.length; i++) {\n      icons[i].remove();\n    }\n\n    return clone.textContent?.trim() || '';\n  }\n\n  _setHighlighted(isHighlighted: boolean) {\n    // We need to mark this for check for the case where the content is coming from a\n    // `sbbMenuContent` whose change detection tree is at the declaration position,\n    // not the insertion position. See #23175.\n    this._highlighted = isHighlighted;\n    this._changeDetectorRef.markForCheck();\n  }\n\n  _hasFocus(): boolean {\n    return this._document.activeElement === this._getHostElement();\n  }\n}\n","<ng-content></ng-content>\n@if (_triggersSubmenu) {\n  <sbb-icon\n    svgIcon=\"chevron-small-right-small\"\n    class=\"sbb-menu-item-submenu-trigger-icon\"\n  ></sbb-icon>\n}\n","import { FocusKeyManager, FocusOrigin, _IdGenerator } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, ESCAPE, hasModifierKey, LEFT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterContentInit,\n  afterNextRender,\n  AfterRenderRef,\n  ANIMATION_MODULE_TYPE,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  signal,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n  WritableSignal,\n} from '@angular/core';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { startWith, switchMap } from 'rxjs/operators';\n\nimport { SbbMenuContent, SBB_MENU_CONTENT } from './menu-content';\nimport { throwSbbMenuInvalidPositionX, throwSbbMenuInvalidPositionY } from './menu-errors';\nimport { SbbMenuItem } from './menu-item';\nimport { SbbMenuPanel, SBB_MENU_PANEL } from './menu-panel';\nimport { SbbMenuPositionX, SbbMenuPositionY } from './menu-positions';\nimport type { SbbMenuTriggerContext } from './menu-trigger';\n\n/** Default `sbb-menu` options that can be overridden. */\nexport interface SbbMenuDefaultOptions {\n  /** The x-axis position of the menu. */\n  xPosition?: SbbMenuPositionX;\n\n  /** The y-axis position of the menu. */\n  yPosition?: SbbMenuPositionY;\n\n  /** Whether the menu should overlap the menu trigger. */\n  overlapTrigger: boolean;\n\n  /** Class to be applied to the menu's backdrop. */\n  backdropClass: string;\n\n  /** Class or list of classes to be applied to the menu's overlay panel. */\n  overlayPanelClass?: string | string[];\n\n  /** Whether the menu has a backdrop. */\n  hasBackdrop?: boolean;\n}\n\n/** Injection token to be used to override the default options for `sbb-menu`. */\nexport const SBB_MENU_DEFAULT_OPTIONS = new InjectionToken<SbbMenuDefaultOptions>(\n  'sbb-menu-default-options',\n  {\n    providedIn: 'root',\n    factory: SBB_MENU_DEFAULT_OPTIONS_FACTORY,\n  },\n);\n\n/** @docs-private */\nexport function SBB_MENU_DEFAULT_OPTIONS_FACTORY(): SbbMenuDefaultOptions {\n  return {\n    overlapTrigger: false,\n    xPosition: 'after',\n    yPosition: 'below',\n    backdropClass: 'cdk-overlay-transparent-backdrop',\n  };\n}\n\nexport type SbbMenuPlainAnimationState = 'enter' | 'void' | 'enter-usermenu';\n\nexport interface SbbMenuAnimationStateWithParams {\n  value: SbbMenuPlainAnimationState;\n  params?: { [key: string]: string };\n}\n\nexport type SbbMenuAnimationState = SbbMenuPlainAnimationState | SbbMenuAnimationStateWithParams;\n\n/** Reason why the menu was closed. */\nexport type SbbMenuCloseReason = void | 'click' | 'keydown' | 'tab';\n\n/** Name of the enter animation `@keyframes`. */\nconst ENTER_ANIMATION = '_sbb-menu-enter';\n\n/** Name of the exit animation `@keyframes`. */\nconst EXIT_ANIMATION = '_sbb-menu-exit';\n\n@Component({\n  selector: 'sbb-menu',\n  templateUrl: 'menu.html',\n  styleUrls: ['menu.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  exportAs: 'sbbMenu',\n  host: {\n    '[attr.aria-label]': 'null',\n    '[attr.aria-labelledby]': 'null',\n    '[attr.aria-describedby]': 'null',\n  },\n  providers: [{ provide: SBB_MENU_PANEL, useExisting: SbbMenu }],\n  imports: [NgTemplateOutlet],\n})\nexport class SbbMenu implements AfterContentInit, SbbMenuPanel<SbbMenuItem>, OnInit, OnDestroy {\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _defaultOptions = inject<SbbMenuDefaultOptions>(SBB_MENU_DEFAULT_OPTIONS);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _injector = inject(Injector);\n\n  private _keyManager: FocusKeyManager<SbbMenuItem>;\n  private _xPosition: SbbMenuPositionX = this._defaultOptions.xPosition;\n  private _yPosition: SbbMenuPositionY = this._defaultOptions.yPosition;\n  private _firstItemFocusRef?: AfterRenderRef;\n  private _exitFallbackTimeout: ReturnType<typeof setTimeout> | undefined;\n  private _previousElevation: string;\n  private _elevationPrefix: string = 'sbb-elevation-z';\n  private _baseElevation: number = 4;\n\n  /** All items inside the menu. Includes items nested inside another menu. */\n  @ContentChildren(SbbMenuItem, { descendants: true }) _allItems: QueryList<SbbMenuItem>;\n\n  /** Only the direct descendant menu items. */\n  _directDescendantItems: QueryList<SbbMenuItem> = new QueryList<SbbMenuItem>();\n\n  /** Classes to be applied to the menu panel. */\n  _classList: { [key: string]: boolean } = {};\n\n  /** Current state of the panel animation. */\n  _panelAnimationState: SbbMenuAnimationState = 'void';\n\n  /** Emits whenever an animation on the menu completes. */\n  readonly _animationDone = new Subject<'void' | 'enter'>();\n\n  /** Whether the menu is animating. */\n  _isAnimating: WritableSignal<boolean> = signal(false);\n\n  /** Parent menu of the current menu panel. */\n  parentMenu: SbbMenuPanel | undefined;\n\n  /** Class or list of classes to be added to the overlay panel. */\n  overlayPanelClass: string | string[] = this._defaultOptions.overlayPanelClass || '';\n\n  /** Class to be added to the backdrop element. */\n  @Input() backdropClass: string = this._defaultOptions.backdropClass;\n\n  /** aria-label for the menu panel. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** aria-labelledby for the menu panel. */\n  @Input('aria-labelledby') ariaLabelledby: string;\n\n  /** aria-describedby for the menu panel. */\n  @Input('aria-describedby') ariaDescribedby: string;\n\n  /** Position of the menu in the X axis. */\n  @Input()\n  get xPosition(): SbbMenuPositionX {\n    return this._xPosition;\n  }\n  set xPosition(value: SbbMenuPositionX) {\n    if (\n      value !== 'before' &&\n      value !== 'after' &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)\n    ) {\n      throwSbbMenuInvalidPositionX();\n    }\n    this._xPosition = value;\n    this.setPositionClasses();\n  }\n\n  /** Position of the menu in the Y axis. */\n  @Input()\n  get yPosition(): SbbMenuPositionY {\n    return this._yPosition;\n  }\n  set yPosition(value: SbbMenuPositionY) {\n    if (value !== 'above' && value !== 'below' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwSbbMenuInvalidPositionY();\n    }\n    this._yPosition = value;\n    this.setPositionClasses();\n  }\n\n  /** @docs-private */\n  @ViewChild(TemplateRef) templateRef: TemplateRef<any>;\n\n  /**\n   * Menu content that will be rendered lazily.\n   * @docs-private\n   */\n  @ContentChild(SBB_MENU_CONTENT) lazyContent: SbbMenuContent;\n\n  /** Whether the menu should overlap its trigger. */\n  @Input({ transform: booleanAttribute })\n  overlapTrigger: boolean = this._defaultOptions.overlapTrigger;\n\n  /** Whether the menu has a backdrop. */\n  @Input({ transform: booleanAttribute })\n  hasBackdrop: boolean | undefined = this._defaultOptions.hasBackdrop;\n\n  /**\n   * This method takes classes set on the host sbb-menu element and applies them on the\n   * menu template that displays in the overlay container. Otherwise, it's difficult\n   * to style the containing menu from outside the component.\n   * @param classes list of class names\n   */\n  @Input('class')\n  set panelClass(classes: string) {\n    const previousPanelClass = this._previousPanelClass;\n    const newClassList = { ...this._classList };\n\n    if (previousPanelClass && previousPanelClass.length) {\n      previousPanelClass.split(' ').forEach((className: string) => {\n        newClassList[className] = false;\n      });\n    }\n\n    this._previousPanelClass = classes;\n\n    if (classes && classes.length) {\n      classes.split(' ').forEach((className: string) => {\n        newClassList[className] = true;\n      });\n\n      this._elementRef.nativeElement.className = '';\n    }\n\n    this._classList = newClassList;\n  }\n  private _previousPanelClass: string;\n\n  get triggerContext() {\n    return this._triggerContext;\n  }\n  set triggerContext(value: SbbMenuTriggerContext) {\n    if (this._triggerContext && this._triggerContext.type !== value.type) {\n      this._classList[`sbb-menu-panel-type-${this._triggerContext.type}`] = false;\n    }\n    this._classList[`sbb-menu-panel-type-${value.type}`] = true;\n    this._triggerContext = value;\n  }\n  private _triggerContext: SbbMenuTriggerContext;\n\n  /** Event emitted when the menu is closed. */\n  @Output()\n  readonly closed: EventEmitter<SbbMenuCloseReason> = new EventEmitter<SbbMenuCloseReason>();\n\n  readonly panelId = inject(_IdGenerator).getId('sbb-menu-panel-');\n\n  /** Whether animations are currently disabled. */\n  protected _animationsDisabled: boolean =\n    inject(ANIMATION_MODULE_TYPE, { optional: true }) === 'NoopAnimations';\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit() {\n    this.setPositionClasses();\n  }\n\n  ngAfterContentInit() {\n    this._updateDirectDescendants();\n    this._keyManager = new FocusKeyManager(this._directDescendantItems)\n      .withWrap()\n      .withTypeAhead()\n      .withHomeAndEnd();\n    this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'));\n\n    // If a user manually (programmatically) focuses a menu item, we need to reflect that focus\n    // change back to the key manager. Note that we don't need to unsubscribe here because _focused\n    // is internal and we know that it gets completed on destroy.\n    this._directDescendantItems.changes\n      .pipe(\n        startWith(this._directDescendantItems),\n        switchMap((items) => merge(...items.map((item: SbbMenuItem) => item._focused))),\n      )\n      .subscribe((focusedItem) => this._keyManager.updateActiveItem(focusedItem as SbbMenuItem));\n\n    this._directDescendantItems.changes.subscribe((itemsList: QueryList<SbbMenuItem>) => {\n      // Move focus to another item, if the active item is removed from the list.\n      // We need to debounce the callback, because multiple items might be removed\n      // in quick succession.\n      const manager = this._keyManager;\n\n      if (this._panelAnimationState === 'enter' && manager.activeItem?._hasFocus()) {\n        const items = itemsList.toArray();\n        const index = Math.max(0, Math.min(items.length - 1, manager.activeItemIndex || 0));\n\n        if (items[index] && !items[index].disabled) {\n          manager.setActiveItem(index);\n        } else {\n          manager.setNextItemActive();\n        }\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._keyManager?.destroy();\n    this._directDescendantItems.destroy();\n    this.closed.complete();\n    this._firstItemFocusRef?.destroy();\n    clearTimeout(this._exitFallbackTimeout);\n  }\n\n  /** Stream that emits whenever the hovered menu item changes. */\n  _hovered(): Observable<SbbMenuItem> {\n    // Coerce the `changes` property because Angular types it as `Observable<any>`\n    const itemChanges = this._directDescendantItems.changes as Observable<QueryList<SbbMenuItem>>;\n    return itemChanges.pipe(\n      startWith(this._directDescendantItems),\n      switchMap((items) => merge(...items.map((item: SbbMenuItem) => item._hovered))),\n    ) as Observable<SbbMenuItem>;\n  }\n\n  /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n  _handleKeydown(event: KeyboardEvent) {\n    const keyCode = event.keyCode;\n    const manager = this._keyManager;\n\n    switch (keyCode) {\n      case ESCAPE:\n        if (!hasModifierKey(event)) {\n          event.preventDefault();\n          this.closed.emit('keydown');\n        }\n        break;\n      case LEFT_ARROW:\n        if (this.parentMenu) {\n          this.closed.emit('keydown');\n        }\n        break;\n      default:\n        if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n          manager.setFocusOrigin('keyboard');\n        }\n\n        manager.onKeydown(event);\n        return;\n    }\n  }\n\n  /** Whether to display the menu header which mirrors the trigger content. */\n  _hasHeader() {\n    return !this.parentMenu && this.triggerContext && this.triggerContext.type !== 'headless';\n  }\n\n  /**\n   * Focus the first item in the menu.\n   * @param origin Action from which the focus originated. Used to set the correct styling.\n   */\n  focusFirstItem(origin: FocusOrigin = 'program'): void {\n    // Wait for `afterNextRender` to ensure iOS VoiceOver screen reader focuses the first item (#24735).\n    this._firstItemFocusRef?.destroy();\n    this._firstItemFocusRef = afterNextRender(\n      () => {\n        const menuPanel = this._resolvePanel();\n\n        // If an item in the menuPanel is already focused, avoid overriding the focus.\n        if (!menuPanel || !menuPanel.contains(document.activeElement)) {\n          const manager = this._keyManager;\n          manager.setFocusOrigin(origin).setFirstItemActive();\n\n          // If there's no active item at this point, it means that all the items are disabled.\n          // Move focus to the menu panel so keyboard events like Escape still work. Also this will\n          // give _some_ feedback to screen readers.\n          if (!manager.activeItem && menuPanel) {\n            menuPanel.focus();\n          }\n        }\n      },\n      { injector: this._injector },\n    );\n  }\n\n  /**\n   * Resets the active item in the menu. This is used when the menu is opened, allowing\n   * the user to start from the first option when pressing the down arrow.\n   */\n  resetActiveItem() {\n    this._keyManager.setActiveItem(-1);\n  }\n\n  /**\n   * Sets the menu panel elevation.\n   * @param depth Number of parent menus that come before the menu.\n   */\n  setElevation(depth: number): void {\n    // The elevation starts at the base and increases by one for each level.\n    const elevation = this._baseElevation + depth;\n    const newElevation = `${this._elevationPrefix}${elevation}`;\n    const customElevation = Object.keys(this._classList).find((className) =>\n      className.startsWith(this._elevationPrefix),\n    );\n\n    if (!customElevation || customElevation === this._previousElevation) {\n      const newClassList = { ...this._classList };\n      if (this._previousElevation) {\n        newClassList[this._previousElevation] = false;\n      }\n\n      newClassList[newElevation] = true;\n      this._previousElevation = newElevation;\n      this._classList = newClassList;\n    }\n  }\n\n  /**\n   * Adds classes to the menu panel based on its position. Can be used by\n   * consumers to add specific styling based on the position.\n   * @param posX Position of the menu along the x axis.\n   * @param posY Position of the menu along the y axis.\n   * @docs-private\n   */\n  setPositionClasses(\n    posX: SbbMenuPositionX = this.xPosition,\n    posY: SbbMenuPositionY = this.yPosition,\n  ) {\n    this._classList = {\n      ...this._classList,\n      ['sbb-menu-panel-before']: posX === 'before',\n      ['sbb-menu-panel-after']: posX === 'after',\n      ['sbb-menu-panel-above']: posY === 'above',\n      ['sbb-menu-panel-below']: posY === 'below',\n    };\n\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Callback that is invoked when the panel animation completes. */\n  protected _onAnimationDone(state: string) {\n    const isExit = state === EXIT_ANIMATION;\n\n    if (isExit || state === ENTER_ANIMATION) {\n      if (isExit) {\n        clearTimeout(this._exitFallbackTimeout);\n        this._exitFallbackTimeout = undefined;\n      }\n      this._animationDone.next(isExit ? 'void' : 'enter');\n      this._isAnimating.set(false);\n    }\n  }\n\n  protected _onAnimationStart(state: string) {\n    if (state === ENTER_ANIMATION || state === EXIT_ANIMATION) {\n      this._isAnimating.set(true);\n    }\n  }\n\n  _setIsOpen(isOpen: boolean) {\n    this._panelAnimationState = isOpen ? 'enter' : 'void';\n\n    if (isOpen) {\n      if (this._keyManager.activeItemIndex === 0) {\n        // Scroll the content element to the top as soon as the animation starts. This is necessary,\n        // because we move focus to the first item while it's still being animated, which can throw\n        // the browser off when it determines the scroll position. Alternatively we can move focus\n        // when the animation is done, however moving focus asynchronously will interrupt screen\n        // readers which are in the process of reading out the menu already. We take the `element`\n        // from the `event` since we can't use a `ViewChild` to access the pane.\n        const menuPanel = this._resolvePanel();\n\n        if (menuPanel) {\n          menuPanel.scrollTop = 0;\n        }\n      }\n    } else if (!this._animationsDisabled) {\n      // Some apps do `* { animation: none !important; }` in tests which will prevent the\n      // `animationend` event from firing. Since the exit animation is loading-bearing for\n      // removing the content from the DOM, add a fallback timer.\n      this._exitFallbackTimeout = setTimeout(() => this._onAnimationDone(EXIT_ANIMATION), 200);\n    }\n\n    // Animation events won't fire when animations are disabled so we simulate them.\n    if (this._animationsDisabled) {\n      setTimeout(() => {\n        this._onAnimationDone(isOpen ? ENTER_ANIMATION : EXIT_ANIMATION);\n      });\n    }\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Gets the menu panel DOM node. */\n  private _resolvePanel(): HTMLElement | null {\n    let menuPanel: HTMLElement | null = null;\n\n    if (this._directDescendantItems.length) {\n      // Because the `mat-menuPanel` is at the DOM insertion point, not inside the overlay, we don't\n      // have a nice way of getting a hold of the menuPanel panel. We can't use a `ViewChild` either\n      // because the panel is inside an `ng-template`. We work around it by starting from one of\n      // the items and walking up the DOM.\n      menuPanel = this._directDescendantItems.first!._getHostElement().closest('[role=\"menu\"]');\n    }\n    return menuPanel;\n  }\n\n  /**\n   * Sets up a stream that will keep track of any newly-added menu items and will update the list\n   * of direct descendants. We collect the descendants this way, because `_allItems` can include\n   * items that are part of child menus, and using a custom way of registering items is unreliable\n   * when it comes to maintaining the item order.\n   */\n  private _updateDirectDescendants() {\n    this._allItems.changes\n      .pipe(startWith(this._allItems))\n      .subscribe((items: QueryList<SbbMenuItem>) => {\n        this._directDescendantItems.reset(items.filter((item) => item._parentMenu === this));\n        this._directDescendantItems.notifyOnChanges();\n      });\n  }\n}\n","<ng-template>\n  <div\n    class=\"sbb-menu-panel-wrapper\"\n    [id]=\"panelId\"\n    [class]=\"_classList\"\n    (click)=\"closed.emit('click')\"\n    [class.sbb-menu-panel-animations-disabled]=\"_animationsDisabled\"\n    [class.sbb-menu-panel-exit-animation]=\"_panelAnimationState === 'void'\"\n    [class.sbb-menu-panel-animating]=\"_isAnimating()\"\n    [style.--sbb-menu-trigger-width.px]=\"triggerContext ? triggerContext.width : 0\"\n    [style.--sbb-menu-trigger-height.px]=\"triggerContext ? triggerContext.height : 0\"\n    tabindex=\"-1\"\n    role=\"menu\"\n    (animationstart)=\"_onAnimationStart($event.animationName)\"\n    (animationend)=\"_onAnimationDone($event.animationName)\"\n    (animationcancel)=\"_onAnimationDone($event.animationName)\"\n    [attr.aria-label]=\"ariaLabel || null\"\n    [attr.aria-labelledby]=\"ariaLabelledby || null\"\n    [attr.aria-describedby]=\"ariaDescribedby || null\"\n  >\n    @if (_hasHeader()) {\n      @if (!triggerContext.templateContent) {\n        <button\n          type=\"button\"\n          class=\"sbb-menu-panel-trigger\"\n          [innerHTML]=\"triggerContext.elementContent\"\n          aria-hidden=\"true\"\n        ></button>\n      }\n      @if (triggerContext.templateContent) {\n        <button type=\"button\" class=\"sbb-menu-panel-trigger\" aria-hidden=\"true\">\n          <ng-template [ngTemplateOutlet]=\"triggerContext.templateContent\"></ng-template>\n        </button>\n      }\n    }\n    <div\n      class=\"sbb-panel sbb-panel-padded sbb-menu-panel sbb-menu-content sbb-scrollbar\"\n      [class.sbb-menu-panel-root]=\"!parentMenu\"\n    >\n      <div class=\"sbb-menu-panel-content\">\n        <ng-content></ng-content>\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import {\n  FocusMonitor,\n  FocusOrigin,\n  isFakeMousedownFromScreenReader,\n  isFakeTouchstartFromScreenReader,\n} from '@angular/cdk/a11y';\nimport { ENTER, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\nimport {\n  FlexibleConnectedPositionStrategy,\n  HorizontalConnectionPos,\n  Overlay,\n  OverlayConfig,\n  OverlayRef,\n  ScrollStrategy,\n  VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n  AfterContentInit,\n  ChangeDetectorRef,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport {\n  Breakpoints,\n  mixinVariant,\n  SCALING_FACTOR_4K,\n  SCALING_FACTOR_5K,\n} from '@sbb-esta/angular/core';\nimport { merge, Observable, of as observableOf, Subscription } from 'rxjs';\nimport { filter, take, takeUntil } from 'rxjs/operators';\n\nimport { SbbMenu, SbbMenuAnimationState, SbbMenuCloseReason } from './menu';\nimport { SbbMenuDynamicTrigger } from './menu-dynamic-trigger';\nimport { throwSbbMenuRecursiveError } from './menu-errors';\nimport { SbbMenuItem } from './menu-item';\nimport { SbbMenuPanel, SBB_MENU_PANEL } from './menu-panel';\nimport { SbbMenuPositionX, SbbMenuPositionY } from './menu-positions';\n\nexport type SbbMenuTriggerType = 'default' | 'headless' | 'breadcrumb' | 'usermenu' | 'contextmenu';\n\nexport interface SbbMenuTriggerContext extends SbbMenuInheritedTriggerContext {\n  width?: number;\n  height?: number;\n  scalingFactor?: number;\n  templateContent?: TemplateRef<any>;\n  elementContent?: SafeHtml;\n}\n\nexport interface SbbMenuInheritedTriggerContext {\n  type: SbbMenuTriggerType;\n  xPosition?: SbbMenuPositionX;\n  yPosition?: SbbMenuPositionY;\n  xOffset?: number;\n  yOffset?: number;\n  panelWidth?: number;\n  animationStartStateResolver?: (context: SbbMenuTriggerContext) => SbbMenuAnimationState;\n}\n\n/** Injection token for SbbMenuInheritedTriggerContext */\nexport const SBB_MENU_INHERITED_TRIGGER_CONTEXT =\n  new InjectionToken<SbbMenuInheritedTriggerContext>('sbb-menu-inherited-trigger-context');\n\n/** Injection token that determines the scroll handling while the menu is open. */\nexport const SBB_MENU_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'sbb-menu-scroll-strategy',\n  {\n    providedIn: 'root',\n    factory: () => {\n      const overlay = inject(Overlay);\n      return () => overlay.scrollStrategies.reposition();\n    },\n  },\n);\n\n/** Default left overlapping of the submenu panel. */\nconst SUBMENU_PANEL_LEFT_OVERLAP = 3;\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n\n// Boilerplate for applying mixins to SbbMenu.\nconst _SbbMenuTriggerMixinBase = mixinVariant(class {});\n\n/** Mapping between menu panels and the last trigger that opened them. */\nconst PANELS_TO_TRIGGERS = new WeakMap<SbbMenuPanel, SbbMenuTrigger>();\n\n/** Directive applied to an element that should trigger a `sbb-menu`. */\n@Directive({\n  selector: `[sbbMenuTriggerFor], [sbbMenuHeadlessTriggerFor]`,\n  host: {\n    class: 'sbb-menu-trigger sbb-icon-fit',\n    '[attr.aria-haspopup]': 'menu ? \"menu\" : null',\n    '[attr.aria-expanded]': 'menuOpen',\n    '[attr.aria-controls]': 'menuOpen ? menu?.panelId : null',\n    '[class.sbb-menu-trigger-root]': '!_parentSbbMenu',\n    '[class.sbb-menu-trigger-menu-open]': 'menuOpen',\n    '(click)': '_handleClick($event)',\n    '(mousedown)': '_handleMousedown($event)',\n    '(keydown)': '_handleKeydown($event)',\n  },\n  exportAs: 'sbbMenuTrigger',\n})\nexport class SbbMenuTrigger\n  extends _SbbMenuTriggerMixinBase\n  implements OnInit, AfterContentInit, OnDestroy\n{\n  private _overlay = inject(Overlay);\n  private _element = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _inheritedTriggerContext = inject<SbbMenuInheritedTriggerContext>(\n    SBB_MENU_INHERITED_TRIGGER_CONTEXT,\n    { optional: true },\n  )!;\n  private _menuItemInstance = inject(SbbMenuItem, { optional: true, self: true })!;\n  private _focusMonitor = inject(FocusMonitor);\n  private _sanitizer = inject(DomSanitizer);\n  private _breakpointObserver = inject(BreakpointObserver);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _ngZone = inject(NgZone);\n\n  private _portal: TemplatePortal;\n  private _overlayRef: OverlayRef | null = null;\n  private _menuOpen: boolean = false;\n  private _breakpointSubscription = Subscription.EMPTY;\n  private _closingActionsSubscription = Subscription.EMPTY;\n  private _hoverSubscription = Subscription.EMPTY;\n  private _menuCloseSubscription = Subscription.EMPTY;\n  private _scrollStrategy = inject(SBB_MENU_SCROLL_STRATEGY);\n  private _pendingRemoval: Subscription | undefined;\n\n  /**\n   * We're specifically looking for a `SbbMenu` here since the generic `SbbMenuPanel`\n   * interface lacks some functionality around nested menus and animations.\n   */\n  _parentSbbMenu: SbbMenu | undefined;\n\n  /**\n   * Handles touch start events on the trigger.\n   * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n   */\n  private _handleTouchStart = (event: TouchEvent) => {\n    if (!isFakeTouchstartFromScreenReader(event)) {\n      this._openedBy = 'touch';\n    }\n  };\n\n  // Tracking input type is necessary so it's possible to only auto-focus\n  // the first item of the list when the menu is opened via the keyboard\n  _openedBy: Exclude<FocusOrigin, 'program' | null> | undefined = undefined;\n\n  /** Variant of which trigger is used. */\n  _type: SbbMenuTriggerType = this._inheritedTriggerContext?.type || 'default';\n\n  /** References the menu instance that the headless trigger is associated with. */\n  @Input('sbbMenuHeadlessTriggerFor')\n  set sbbMenuHeadlessTriggerFor(menu: SbbMenuPanel | null) {\n    this._type = 'headless';\n    this._setMenu(menu);\n  }\n\n  /** References the menu instance that the trigger is associated with. */\n  @Input('sbbMenuTriggerFor')\n  get menu(): SbbMenuPanel | null {\n    return this._menu;\n  }\n  set menu(menu: SbbMenuPanel | null) {\n    this._setMenu(menu);\n    if (menu) {\n      menu.overlapTrigger = true;\n    }\n  }\n  private _menu: SbbMenuPanel | null;\n\n  /** Inits the menu for the different trigger types. Method is intentionally placed after corresponding inputs. */\n  private _setMenu(menu: SbbMenuPanel | null) {\n    if (menu === this._menu) {\n      return;\n    }\n\n    this._menu = menu;\n    this._menuCloseSubscription.unsubscribe();\n\n    if (menu) {\n      if (menu === this._parentSbbMenu && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throwSbbMenuRecursiveError();\n      }\n\n      this._menuCloseSubscription = menu.closed.subscribe((reason: SbbMenuCloseReason) => {\n        this._destroyMenu(reason);\n\n        // If a click closed the menu, we should close the entire chain of nested menus.\n        if ((reason === 'click' || reason === 'tab') && this._parentSbbMenu) {\n          this._parentSbbMenu.closed.emit(reason);\n        }\n      });\n    }\n  }\n\n  /** Data to be passed along to any lazily-rendered content. */\n  @Input('sbbMenuTriggerData') menuData: any;\n\n  /**\n   * Whether focus should be restored when the menu is closed.\n   * Note that disabling this option can have accessibility implications\n   * and it's up to you to manage focus, if you decide to turn it off.\n   */\n  @Input('sbbMenuTriggerRestoreFocus') restoreFocus: boolean = true;\n\n  /** Event emitted when the associated menu is opened. */\n  @Output() readonly menuOpened: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Event emitted when the associated menu is closed. */\n  @Output() readonly menuClosed: EventEmitter<void> = new EventEmitter<void>();\n\n  @ContentChild(SbbMenuDynamicTrigger, { read: TemplateRef })\n  _triggerContent: TemplateRef<any>;\n\n  private _scalingFactor: number = 1;\n\n  constructor(...args: unknown[]);\n\n  constructor() {\n    const parentMenu = inject<SbbMenuPanel>(SBB_MENU_PANEL, { optional: true })!;\n\n    super();\n    const _element = this._element;\n    const _menuItemInstance = this._menuItemInstance;\n\n    this._parentSbbMenu = parentMenu instanceof SbbMenu ? parentMenu : undefined;\n\n    _element.nativeElement.addEventListener(\n      'touchstart',\n      this._handleTouchStart,\n      passiveEventListenerOptions,\n    );\n\n    if (_menuItemInstance) {\n      _menuItemInstance._triggersSubmenu = this.triggersSubmenu();\n    }\n\n    this._breakpointSubscription = this._breakpointObserver\n      .observe([Breakpoints.Desktop4k, Breakpoints.Desktop5k])\n      .subscribe((result: BreakpointState) => {\n        this._scalingFactor = 1;\n\n        if (result.matches) {\n          if (result.breakpoints[Breakpoints.Desktop4k]) {\n            this._scalingFactor = SCALING_FACTOR_4K;\n          }\n          if (result.breakpoints[Breakpoints.Desktop5k]) {\n            this._scalingFactor = SCALING_FACTOR_5K;\n          }\n        }\n      });\n  }\n\n  ngOnInit(): void {\n    this._element.nativeElement.classList.add(`sbb-menu-trigger-${this._type}`);\n  }\n\n  ngAfterContentInit() {\n    this._handleHover();\n  }\n\n  ngOnDestroy() {\n    if (this.menu && this._ownsMenu(this.menu)) {\n      PANELS_TO_TRIGGERS.delete(this.menu);\n    }\n\n    this._element.nativeElement.removeEventListener(\n      'touchstart',\n      this._handleTouchStart,\n      passiveEventListenerOptions,\n    );\n\n    this._menuCloseSubscription.unsubscribe();\n    this._closingActionsSubscription.unsubscribe();\n    this._hoverSubscription.unsubscribe();\n    this._breakpointSubscription.unsubscribe();\n    this._pendingRemoval?.unsubscribe();\n\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._overlayRef = null;\n    }\n  }\n\n  /** Whether the menu is open. */\n  get menuOpen(): boolean {\n    return this._menuOpen;\n  }\n\n  /** Whether the menu triggers a sub-menu or a top-level one. */\n  triggersSubmenu(): boolean {\n    return !!(this._menuItemInstance && this._parentSbbMenu);\n  }\n\n  /** Toggles the menu between the open and closed states. */\n  toggleMenu(): void {\n    return this._menuOpen ? this.closeMenu() : this.openMenu();\n  }\n\n  /** Opens the menu. */\n  openMenu(): void {\n    // Auto focus by default\n    this._openMenu(true);\n  }\n\n  /** Internal method to open menu providing option to auto focus on first item. */\n  private _openMenu(autoFocus: boolean): void {\n    const menu = this.menu;\n\n    if (this._menuOpen || !menu) {\n      return;\n    }\n\n    this._pendingRemoval?.unsubscribe();\n    const previousTrigger = PANELS_TO_TRIGGERS.get(menu);\n    PANELS_TO_TRIGGERS.set(menu, this);\n\n    // If the same menu is currently attached to another trigger,\n    // we need to close it so it doesn't end up in a broken state.\n    if (previousTrigger && previousTrigger !== this) {\n      previousTrigger.closeMenu();\n    }\n\n    const triggerContext: SbbMenuTriggerContext =\n      this._type === 'headless' || this.triggersSubmenu()\n        ? { type: this._type }\n        : {\n            width: this._element.nativeElement.clientWidth,\n            height: this._element.nativeElement.clientHeight,\n            templateContent: this._triggerContent,\n            elementContent: this._triggerContent\n              ? undefined\n              : this._element.nativeElement.childElementCount === 0\n                ? this._element.nativeElement.innerText\n                : this._sanitizer.bypassSecurityTrustHtml(this._element.nativeElement.innerHTML),\n            type: this._type,\n            scalingFactor: this._scalingFactor,\n          };\n\n    menu.triggerContext = { ...triggerContext, ...this._inheritedTriggerContext };\n\n    const overlayRef = this._createOverlay(menu);\n    const overlayConfig = overlayRef.getConfig();\n    const positionStrategy = overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy;\n\n    this._setPosition(menu, positionStrategy);\n    overlayConfig.hasBackdrop =\n      menu.hasBackdrop == null ? !this.triggersSubmenu() : menu.hasBackdrop;\n\n    // We need the `hasAttached` check for the case where the user kicked off a removal animation,\n    // but re-entered the menu. Re-attaching the same portal will trigger an error otherwise.\n    if (!overlayRef.hasAttached()) {\n      overlayRef.attach(this._getPortal(menu));\n      menu.lazyContent?.attach(this.menuData);\n    }\n\n    this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());\n    menu.parentMenu = this.triggersSubmenu() ? this._parentSbbMenu : undefined;\n    if (autoFocus) {\n      menu.focusFirstItem(this._openedBy || 'program');\n    }\n    this._setMenuElevation(menu);\n    this._setIsMenuOpen(true);\n\n    if (menu instanceof SbbMenu) {\n      menu._setIsOpen(true);\n      menu._directDescendantItems.changes.pipe(takeUntil(menu.closed)).subscribe(() => {\n        // Re-adjust the position without locking when the amount of items\n        // changes so that the overlay is allowed to pick a new optimal position.\n        positionStrategy.withLockedPosition(false).reapplyLastPosition();\n        positionStrategy.withLockedPosition(true);\n      });\n    }\n  }\n\n  /** Closes the menu. */\n  closeMenu(): void {\n    this.menu?.closed.emit();\n  }\n\n  /**\n   * Focuses the menu trigger.\n   * @param origin Source of the menu trigger's focus.\n   */\n  focus(origin?: FocusOrigin, options?: FocusOptions) {\n    if (origin) {\n      this._focusMonitor.focusVia(this._element, origin, options);\n    } else {\n      this._element.nativeElement.focus(options);\n    }\n  }\n\n  /**\n   * Updates the position of the menu to ensure that it fits all options within the viewport.\n   */\n  updatePosition(): void {\n    this._overlayRef?.updatePosition();\n  }\n\n  /** Closes the menu and does the necessary cleanup. */\n  private _destroyMenu(reason: SbbMenuCloseReason) {\n    const overlayRef = this._overlayRef;\n    const menu = this._menu;\n\n    if (!overlayRef || !this.menuOpen) {\n      return;\n    }\n\n    this._closingActionsSubscription.unsubscribe();\n    this._pendingRemoval?.unsubscribe();\n\n    // Note that we don't wait for the animation to finish if another trigger took\n    // over the menu, because the panel will end up empty which looks glitchy.\n    if (menu instanceof SbbMenu && this._ownsMenu(menu)) {\n      this._pendingRemoval = menu._animationDone.pipe(take(1)).subscribe(() => {\n        overlayRef.detach();\n        menu.lazyContent?.detach();\n      });\n      menu._setIsOpen(false);\n    } else {\n      overlayRef.detach();\n      menu?.lazyContent?.detach();\n    }\n\n    if (menu && this._ownsMenu(menu)) {\n      PANELS_TO_TRIGGERS.delete(menu);\n    }\n\n    // Always restore focus if the user is navigating using the keyboard or the menu was opened\n    // programmatically. We don't restore for non-root triggers, because it can prevent focus\n    // from making it back to the root trigger when closing a long chain of menus by clicking\n    // on the backdrop.\n    if (this.restoreFocus && (reason === 'keydown' || !this._openedBy || !this.triggersSubmenu())) {\n      this.focus(this._openedBy);\n    }\n\n    this._openedBy = undefined;\n    this._setIsMenuOpen(false);\n  }\n\n  /** Updates the menu elevation based on the amount of parent menus that it has. */\n  private _setMenuElevation(menu: SbbMenuPanel): void {\n    if (menu.setElevation) {\n      let depth = 0;\n      let parentMenu = menu.parentMenu;\n\n      while (parentMenu) {\n        depth++;\n        parentMenu = parentMenu.parentMenu;\n      }\n\n      menu.setElevation(depth);\n    }\n  }\n\n  // Set state rather than toggle to support triggers sharing a menu\n  private _setIsMenuOpen(isOpen: boolean): void {\n    if (isOpen !== this._menuOpen) {\n      this._menuOpen = isOpen;\n      this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();\n\n      if (this.triggersSubmenu()) {\n        this._menuItemInstance._setHighlighted(isOpen);\n      }\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method creates the overlay from the provided menu's template and saves its\n   * OverlayRef so that it can be attached to the DOM when openMenu is called.\n   */\n  private _createOverlay(menu: SbbMenuPanel): OverlayRef {\n    if (!this._overlayRef) {\n      const config = this._getOverlayConfig(menu);\n      this._subscribeToPositions(\n        menu,\n        config.positionStrategy as FlexibleConnectedPositionStrategy,\n      );\n      this._overlayRef = this._overlay.create(config);\n\n      this._overlayRef.keydownEvents().subscribe((event) => {\n        if (this.menu instanceof SbbMenu) {\n          this.menu._handleKeydown(event);\n        }\n      });\n    }\n\n    return this._overlayRef;\n  }\n\n  /**\n   * This method builds the configuration object needed to create the overlay, the OverlayState.\n   * @returns OverlayConfig\n   */\n  private _getOverlayConfig(menu: SbbMenuPanel): OverlayConfig {\n    return new OverlayConfig({\n      positionStrategy: this._overlay\n        .position()\n        .flexibleConnectedTo(this._element)\n        .withLockedPosition()\n        .withGrowAfterOpen()\n        .withTransformOriginOn('.sbb-menu-panel-wrapper')\n        .withPush(false),\n      backdropClass: menu.backdropClass || 'cdk-overlay-transparent-backdrop',\n      panelClass: menu.overlayPanelClass,\n      scrollStrategy: this._scrollStrategy(),\n    });\n  }\n\n  /**\n   * Listens to changes in the position of the overlay and sets the correct classes\n   * on the menu based on the new position. This ensures the animation origin is always\n   * correct, even if a fallback position is used for the overlay.\n   */\n  private _subscribeToPositions(menu: SbbMenuPanel, position: FlexibleConnectedPositionStrategy) {\n    if (menu.setPositionClasses) {\n      position.positionChanges.subscribe((change) => {\n        const posX: SbbMenuPositionX =\n          change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n        const posY: SbbMenuPositionY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-after');\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-before');\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-below');\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-above');\n        this._element.nativeElement.classList.add(`sbb-menu-trigger-${posX}`);\n        this._element.nativeElement.classList.add(`sbb-menu-trigger-${posY}`);\n\n        this._ngZone.run(() => menu.setPositionClasses!(posX, posY));\n      });\n    }\n  }\n\n  /**\n   * Sets the appropriate positions on a position strategy\n   * so the overlay connects with the trigger correctly.\n   * @param positionStrategy Strategy whose position to update.\n   */\n  private _setPosition(menu: SbbMenuPanel, positionStrategy: FlexibleConnectedPositionStrategy) {\n    let [originX, originFallbackX]: HorizontalConnectionPos[] =\n      menu.xPosition === 'before' || this._inheritedTriggerContext?.xPosition === 'before'\n        ? ['end', 'start']\n        : ['start', 'end'];\n\n    const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n      (!menu.yPosition && !this._inheritedTriggerContext?.yPosition) ||\n      menu.yPosition === 'below' ||\n      this._inheritedTriggerContext?.yPosition === 'below'\n        ? ['top', 'bottom']\n        : ['bottom', 'top'];\n\n    let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n    let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n\n    let offsetX = this._inheritedTriggerContext?.xOffset || 0;\n    let offsetY = this._inheritedTriggerContext?.yOffset || 0;\n\n    if (this.triggersSubmenu()) {\n      // When the menu is a sub-menu, it should always align itself\n      // to the edges of the trigger, instead of overlapping it.\n      overlayFallbackX = originX = menu.xPosition === 'before' ? 'start' : 'end';\n      originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n      offsetX = -SUBMENU_PANEL_LEFT_OVERLAP;\n    } else if (!menu.overlapTrigger) {\n      originY = overlayY === 'top' ? 'bottom' : 'top';\n      originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n    }\n\n    // Set sign whether panel is above, below, before or after\n    offsetX = offsetX * (overlayX === 'end' ? -1 : 1);\n    offsetY = offsetY * (overlayY === 'bottom' ? -1 : 1);\n\n    // Apply scaling factor if variant is standard\n    if (this.variantSnapshot === 'standard') {\n      offsetX = offsetX * this._scalingFactor;\n      offsetY = offsetY * this._scalingFactor;\n    }\n\n    positionStrategy.withPositions([\n      {\n        originX,\n        originY,\n        overlayX,\n        overlayY,\n        offsetY,\n        offsetX,\n      },\n      {\n        originX: originFallbackX,\n        originY,\n        overlayX: overlayFallbackX,\n        overlayY,\n        offsetY,\n        offsetX: -offsetX,\n      },\n      {\n        originX,\n        originY: originFallbackY,\n        overlayX,\n        overlayY: overlayFallbackY,\n        offsetY: -offsetY,\n        offsetX: offsetX,\n      },\n      {\n        originX: originFallbackX,\n        originY: originFallbackY,\n        overlayX: overlayFallbackX,\n        overlayY: overlayFallbackY,\n        offsetY: -offsetY,\n        offsetX: -offsetX,\n      },\n    ]);\n  }\n\n  /** Returns a stream that emits whenever an action that should close the menu occurs. */\n  private _menuClosingActions() {\n    const backdrop = this._overlayRef!.backdropClick();\n    const detachments = this._overlayRef!.detachments();\n    const parentClose = this._parentSbbMenu ? this._parentSbbMenu.closed : observableOf();\n    const hover = this._parentSbbMenu\n      ? this._parentSbbMenu\n          ._hovered()\n          .pipe(filter((active) => this._menuOpen && active !== this._menuItemInstance))\n      : observableOf();\n\n    return merge(backdrop, parentClose as Observable<SbbMenuCloseReason>, hover, detachments);\n  }\n\n  /** Handles mouse presses on the trigger. */\n  _handleMousedown(event: MouseEvent): void {\n    if (!isFakeMousedownFromScreenReader(event)) {\n      // Since right or middle button clicks won't trigger the `click` event,\n      // we shouldn't consider the menu as opened by mouse in those cases.\n      this._openedBy = event.button === 0 ? 'mouse' : undefined;\n\n      // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n      // we should prevent focus from moving onto it via click to avoid the\n      // highlight from lingering on the menu item.\n      if (this.triggersSubmenu()) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  /** Handles key presses on the trigger. */\n  _handleKeydown(event: KeyboardEvent): void {\n    const keyCode = event.keyCode;\n\n    // Pressing enter on the trigger will trigger the click handler later.\n    if (keyCode === ENTER || keyCode === SPACE) {\n      this._openedBy = 'keyboard';\n    }\n\n    if (this.triggersSubmenu() && keyCode === RIGHT_ARROW) {\n      this._openedBy = 'keyboard';\n      this.openMenu();\n    }\n  }\n\n  /** Handles click events on the trigger. */\n  _handleClick(event: MouseEvent): void {\n    if (this.triggersSubmenu()) {\n      // Stop event propagation to avoid closing the parent menu.\n      event.stopPropagation();\n      this.openMenu();\n    } else {\n      this.toggleMenu();\n    }\n  }\n\n  /** Handles the cases where the user hovers over the trigger. */\n  private _handleHover() {\n    // Subscribe to changes in the hovered item in order to toggle the panel.\n    if (this.triggersSubmenu() && this._parentSbbMenu) {\n      this._hoverSubscription = this._parentSbbMenu._hovered().subscribe((active) => {\n        if (\n          active === this._menuItemInstance &&\n          !active.disabled &&\n          // Ignore hover events if the parent menu is in the process of being closed (see #31956).\n          this._parentSbbMenu?._panelAnimationState !== 'void'\n        ) {\n          this._openedBy = 'mouse';\n\n          // Open the menu, but do NOT auto-focus on first item when just hovering.\n          // When VoiceOver is enabled, this is particularly confusing as the focus will\n          // cause another hover event, and continue opening sub-menus without interaction.\n          this._openMenu(false);\n        }\n      });\n    }\n  }\n\n  /** Gets the portal that should be attached to the overlay. */\n  private _getPortal(menu: SbbMenuPanel): TemplatePortal {\n    // Note that we can avoid this check by keeping the portal on the menu panel.\n    // While it would be cleaner, we'd have to introduce another required method on\n    // `SbbMenuPanel`, making it harder to consume.\n    if (!this._portal || this._portal.templateRef !== menu.templateRef) {\n      this._portal = new TemplatePortal(menu.templateRef, this._viewContainerRef);\n    }\n\n    return this._portal;\n  }\n\n  /**\n   * Determines whether the trigger owns a specific menu panel, at the current point in time.\n   * This allows us to distinguish the case where the same panel is passed into multiple triggers\n   * and multiple are open at a time.\n   */\n  private _ownsMenu(menu: SbbMenuPanel): boolean {\n    return PANELS_TO_TRIGGERS.get(menu) === this;\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\n\nimport { SbbMenuDynamicTrigger } from './menu-dynamic-trigger';\nimport {\n  SbbMenuInheritedTriggerContext,\n  SbbMenuTrigger,\n  SBB_MENU_INHERITED_TRIGGER_CONTEXT,\n} from './menu-trigger';\n\nexport const _sbbContextmenuInheritedTriggerContext: SbbMenuInheritedTriggerContext = {\n  type: 'contextmenu',\n  xPosition: 'before',\n};\n\n/** Directive applied to an element that should trigger a `sbb-menu`. */\n@Component({\n  template: '<sbb-icon *sbbMenuDynamicTrigger [svgIcon]=\"svgIcon\"></sbb-icon>',\n  selector: `button[sbbContextmenuTriggerFor]`,\n  inputs: ['menu: sbbContextmenuTriggerFor'],\n  exportAs: 'sbbContextmenuTrigger',\n  providers: [\n    {\n      provide: SBB_MENU_INHERITED_TRIGGER_CONTEXT,\n      useValue: _sbbContextmenuInheritedTriggerContext,\n    },\n    {\n      provide: SbbMenuTrigger,\n      useExisting: SbbContextmenuTrigger,\n    },\n  ],\n  imports: [SbbMenuDynamicTrigger, SbbIcon],\n})\nexport class SbbContextmenuTrigger extends SbbMenuTrigger {\n  /**\n   * Custom trigger icon.\n   * Must be a valid svgIcon input for sbb-icon.\n   *\n   * e.g. svgIcon=\"plus-small\"\n   */\n  @Input() svgIcon: string = 'context-menu-small';\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { NgModule } from '@angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport { SbbContextmenuTrigger } from './contextmenu-trigger';\nimport { SbbMenu } from './menu';\nimport { SbbMenuContent } from './menu-content';\nimport { SbbMenuDynamicTrigger } from './menu-dynamic-trigger';\nimport { SbbMenuItem } from './menu-item';\nimport { SbbMenuTrigger } from './menu-trigger';\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    PortalModule,\n    SbbCommonModule,\n    SbbIconModule,\n    SbbMenu,\n    SbbMenuItem,\n    SbbMenuTrigger,\n    SbbContextmenuTrigger,\n    SbbMenuDynamicTrigger,\n    SbbMenuContent,\n  ],\n  exports: [\n    CdkScrollableModule,\n    SbbMenu,\n    SbbMenuItem,\n    SbbMenuTrigger,\n    SbbContextmenuTrigger,\n    SbbMenuDynamicTrigger,\n    SbbMenuContent,\n  ],\n})\nexport class SbbMenuModule {}\n"],"names":["SbbMenuDynamicTrigger","_templateRef","inject","TemplateRef","constructor","viewContainerRef","ViewContainerRef","createEmbeddedView","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","exportAs","ngImport","decorators","args","SBB_MENU_CONTENT","InjectionToken","SbbMenuContent","_template","_appRef","ApplicationRef","_injector","Injector","_viewContainerRef","_document","DOCUMENT","_changeDetectorRef","ChangeDetectorRef","_portal","_outlet","_attached","Subject","attach","context","TemplatePortal","detach","DomPortalOutlet","createElement","element","elementRef","nativeElement","parentNode","insertBefore","outletElement","markForCheck","next","isAttached","ngOnDestroy","dispose","providers","provide","useExisting","throwSbbMenuInvalidPositionX","Error","throwSbbMenuInvalidPositionY","throwSbbMenuRecursiveError","SBB_MENU_PANEL","SbbMenuItem","_elementRef","ElementRef","_focusMonitor","FocusMonitor","_parentMenu","optional","disabled","role","_hovered","_focused","_highlighted","_triggersSubmenu","focus","origin","options","focusVia","_getHostElement","ngAfterViewInit","monitor","stopMonitoring","complete","_getTabIndex","_checkDisabled","event","preventDefault","stopPropagation","_handleMouseEnter","getLabel","clone","cloneNode","icons","querySelectorAll","i","length","remove","textContent","trim","_setHighlighted","isHighlighted","_hasFocus","activeElement","Component","ɵcmp","ɵɵngDeclareComponent","minVersion","version","type","inputs","booleanAttribute","host","listeners","properties","classAttribute","template","SbbIcon","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","class","imports","Input","transform","SBB_MENU_DEFAULT_OPTIONS","providedIn","factory","SBB_MENU_DEFAULT_OPTIONS_FACTORY","overlapTrigger","xPosition","yPosition","backdropClass","ENTER_ANIMATION","EXIT_ANIMATION","SbbMenu","_defaultOptions","_keyManager","_xPosition","_yPosition","_firstItemFocusRef","_exitFallbackTimeout","_previousElevation","_elevationPrefix","_baseElevation","_allItems","_directDescendantItems","QueryList","_classList","_panelAnimationState","_animationDone","_isAnimating","signal","parentMenu","overlayPanelClass","ariaLabel","ariaLabelledby","ariaDescribedby","value","ngDevMode","setPositionClasses","templateRef","lazyContent","hasBackdrop","panelClass","classes","previousPanelClass","_previousPanelClass","newClassList","split","forEach","className","triggerContext","_triggerContext","closed","EventEmitter","panelId","_IdGenerator","getId","_animationsDisabled","ANIMATION_MODULE_TYPE","ngOnInit","ngAfterContentInit","_updateDirectDescendants","FocusKeyManager","withWrap","withTypeAhead","withHomeAndEnd","tabOut","subscribe","emit","changes","pipe","startWith","switchMap","items","merge","map","item","focusedItem","updateActiveItem","itemsList","manager","activeItem","toArray","index","Math","max","min","activeItemIndex","setActiveItem","setNextItemActive","destroy","clearTimeout","itemChanges","_handleKeydown","keyCode","ESCAPE","hasModifierKey","LEFT_ARROW","UP_ARROW","DOWN_ARROW","setFocusOrigin","onKeydown","_hasHeader","focusFirstItem","afterNextRender","menuPanel","_resolvePanel","contains","document","setFirstItemActive","injector","resetActiveItem","setElevation","depth","elevation","newElevation","customElevation","Object","keys","find","startsWith","posX","posY","_onAnimationDone","state","isExit","undefined","set","_onAnimationStart","_setIsOpen","isOpen","scrollTop","setTimeout","first","closest","reset","filter","notifyOnChanges","outputs","queries","propertyName","predicate","descendants","viewQueries","styles","dependencies","kind","NgTemplateOutlet","ContentChildren","ViewChild","ContentChild","Output","SBB_MENU_INHERITED_TRIGGER_CONTEXT","SBB_MENU_SCROLL_STRATEGY","overlay","Overlay","scrollStrategies","reposition","SUBMENU_PANEL_LEFT_OVERLAP","passiveEventListenerOptions","normalizePassiveListenerOptions","passive","_SbbMenuTriggerMixinBase","mixinVariant","PANELS_TO_TRIGGERS","WeakMap","SbbMenuTrigger","_overlay","_element","_inheritedTriggerContext","_menuItemInstance","self","_sanitizer","DomSanitizer","_breakpointObserver","BreakpointObserver","_ngZone","NgZone","_overlayRef","_menuOpen","_breakpointSubscription","Subscription","EMPTY","_closingActionsSubscription","_hoverSubscription","_menuCloseSubscription","_scrollStrategy","_pendingRemoval","_parentSbbMenu","_handleTouchStart","isFakeTouchstartFromScreenReader","_openedBy","_type","sbbMenuHeadlessTriggerFor","menu","_setMenu","_menu","unsubscribe","reason","_destroyMenu","menuData","restoreFocus","menuOpened","menuClosed","_triggerContent","_scalingFactor","addEventListener","triggersSubmenu","observe","Breakpoints","Desktop4k","Desktop5k","result","matches","breakpoints","SCALING_FACTOR_4K","SCALING_FACTOR_5K","classList","add","_handleHover","_ownsMenu","delete","removeEventListener","menuOpen","toggleMenu","closeMenu","openMenu","_openMenu","autoFocus","previousTrigger","get","width","clientWidth","height","clientHeight","templateContent","elementContent","childElementCount","innerText","bypassSecurityTrustHtml","innerHTML","scalingFactor","overlayRef","_createOverlay","overlayConfig","getConfig","positionStrategy","_setPosition","hasAttached","_getPortal","_menuClosingActions","_setMenuElevation","_setIsMenuOpen","takeUntil","withLockedPosition","reapplyLastPosition","updatePosition","take","config","_getOverlayConfig","_subscribeToPositions","create","keydownEvents","OverlayConfig","position","flexibleConnectedTo","withGrowAfterOpen","withTransformOriginOn","withPush","scrollStrategy","positionChanges","change","connectionPair","overlayX","overlayY","run","originX","originFallbackX","overlayFallbackY","originY","originFallbackY","overlayFallbackX","offsetX","xOffset","offsetY","yOffset","variantSnapshot","withPositions","backdrop","backdropClick","detachments","parentClose","observableOf","hover","active","_handleMousedown","isFakeMousedownFromScreenReader","button","ENTER","SPACE","RIGHT_ARROW","_handleClick","read","usesInheritance","_sbbContextmenuInheritedTriggerContext","SbbContextmenuTrigger","svgIcon","useValue","isInline","SbbMenuModule","NgModule","ɵmod","ɵɵngDeclareNgModule","OverlayModule","PortalModule","SbbCommonModule","SbbIconModule","CdkScrollableModule","ɵinj","ɵɵngDeclareInjector","exports"],"mappings":"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"}