{"version":3,"file":"tooltip.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/tooltip/tooltip.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/tooltip/tooltip.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/tooltip/tooltip-wrapper.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/tooltip/tooltip-wrapper.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/tooltip/tooltip.module.ts"],"sourcesContent":["import {\n  AriaDescriber,\n  ConfigurableFocusTrapFactory,\n  FocusMonitor,\n  FocusOrigin,\n  FocusTrap,\n} from '@angular/cdk/a11y';\nimport {\n  BooleanInput,\n  coerceBooleanProperty,\n  coerceNumberProperty,\n  coerceStringArray,\n  NumberInput,\n} from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\nimport {\n  ConnectedPosition,\n  ConnectionPositionPair,\n  createRepositionScrollStrategy,\n  FlexibleConnectedPositionStrategy,\n  Overlay,\n  OverlayRef,\n  ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {\n  normalizePassiveListenerOptions,\n  Platform,\n  _getFocusedElementPierceShadowDom,\n} from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { AsyncPipe, DOCUMENT, NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  afterNextRender,\n  AfterViewInit,\n  ANIMATION_MODULE_TYPE,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  NgZone,\n  OnDestroy,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Breakpoints } from '@sbb-esta/angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\n/** Possible positions for a tooltip. */\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below';\n\n/**\n * Options for how the tooltip trigger should handle touch gestures.\n * See `SbbTooltip.touchGestures` for more information.\n */\nexport type TooltipTouchGestures = 'auto' | 'on' | 'off';\n\n/** Possible visibility states of a tooltip. */\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\n\n/** Time in ms to throttle repositioning after scroll events. */\nexport const SCROLL_THROTTLE_MS = 20;\n\nconst PANEL_CLASS = 'tooltip-panel';\n\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });\n\n/**\n * Time between the user putting the pointer on a tooltip\n * trigger and the long press event being fired.\n */\nconst LONGPRESS_DELAY = 500;\n\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nexport function getSbbTooltipInvalidPositionError(position: string) {\n  return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nexport const SBB_TOOLTIP_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'sbb-tooltip-scroll-strategy',\n  {\n    providedIn: 'root',\n    factory: () => {\n      const injector = inject(Injector);\n      return () => createRepositionScrollStrategy(injector, { scrollThrottle: SCROLL_THROTTLE_MS });\n    },\n  },\n);\n\n/**\n * @docs-private\n * @deprecated Will be removed in 22.0.0.\n * @breaking-change 22.0.0\n */\nexport function SBB_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS });\n}\n\n/**\n * @docs-private\n * @deprecated Will be removed in 22.0.0.\n * @breaking-change 22.0.0\n */\nexport const SBB_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: SBB_TOOLTIP_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: SBB_TOOLTIP_SCROLL_STRATEGY_FACTORY,\n};\n\n/** Default `sbbTooltip` options that can be overridden. */\nexport interface SbbTooltipDefaultOptions {\n  /** Default delay when the tooltip is shown. */\n  showDelay: number;\n\n  /** Default delay when the tooltip is hidden. */\n  hideDelay: number;\n\n  /** Default delay when hiding the tooltip on a touch device. */\n  touchendHideDelay: number;\n\n  /** Default touch gesture handling for tooltips. */\n  touchGestures?: TooltipTouchGestures;\n\n  /** Whether the tooltip should focus the first focusable element on open. */\n  autoFocus?: boolean;\n\n  /**\n   * Whether the tooltip should restore focus to the\n   * previously-focused element, after it's closed.\n   */\n  restoreFocus?: boolean;\n\n  /** Default position for tooltips. */\n  position?: TooltipPosition;\n\n  /** Disables the ability for the user to interact with the tooltip element. */\n  disableTooltipInteractivity?: boolean;\n}\n\n/** Injection token to be used to override the default options for `sbbTooltip`. */\nexport const SBB_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken<SbbTooltipDefaultOptions>(\n  'sbb-tooltip-default-options',\n  {\n    providedIn: 'root',\n    factory: SBB_TOOLTIP_DEFAULT_OPTIONS_FACTORY,\n  },\n);\n\n/** @docs-private */\nexport function SBB_TOOLTIP_DEFAULT_OPTIONS_FACTORY(): SbbTooltipDefaultOptions {\n  return {\n    showDelay: 0,\n    hideDelay: 0,\n    touchendHideDelay: 1500,\n    autoFocus: true,\n    restoreFocus: true,\n  };\n}\n\n/** Tooltip event, which is emitted for certain events. */\nexport class SbbTooltipChangeEvent {\n  constructor(\n    /** Instance of tooltip component. */\n    public instance: SbbTooltip,\n  ) {}\n}\n\n/**\n * Directive that attaches a sbb design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n */\n@Directive({\n  selector: '[sbbTooltip]',\n  exportAs: 'sbbTooltip',\n  host: {\n    '[class.sbb-tooltip-trigger]': 'trigger === \"click\"',\n    '[attr.aria-expanded]': 'trigger === \"click\" ? _isTooltipVisible() : null',\n  },\n})\nexport class SbbTooltip implements OnDestroy, AfterViewInit {\n  private _overlay = inject(Overlay);\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _scrollDispatcher = inject(ScrollDispatcher);\n  private _injector = inject(Injector);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _ngZone = inject(NgZone);\n  private _platform = inject(Platform);\n  private _ariaDescriber = inject(AriaDescriber);\n  private _focusMonitor = inject(FocusMonitor);\n  private _defaultOptions = inject<SbbTooltipDefaultOptions>(SBB_TOOLTIP_DEFAULT_OPTIONS, {\n    optional: true,\n  })!;\n\n  _overlayRef: OverlayRef | null;\n  _tooltipInstance: TooltipComponent | null;\n\n  private _portal: ComponentPortal<TooltipComponent>;\n  private _position: TooltipPosition = 'below';\n  private _disabled: boolean = false;\n  private _tooltipClass: string | string[] | Set<string> | { [key: string]: any };\n  private _scrollStrategy = inject(SBB_TOOLTIP_SCROLL_STRATEGY);\n  private _viewInitialized = false;\n  private _pointerExitEventsInitialized = false;\n  private readonly _tooltipComponent = TooltipComponent;\n  private _viewportMargin = 8;\n  private _currentPosition: TooltipPosition;\n  private readonly _cssClassPrefix: string = 'sbb';\n  private _ariaDescriptionPending: boolean;\n\n  /** Allows the user to define the position of the tooltip relative to the parent element */\n  @Input('sbbTooltipPosition')\n  get position(): TooltipPosition {\n    return this._position;\n  }\n\n  set position(value: TooltipPosition) {\n    if (value !== this._position) {\n      this._position = value;\n\n      if (this._overlayRef) {\n        this._updatePosition(this._overlayRef);\n        this._tooltipInstance?.show(0);\n        this._overlayRef.updatePosition();\n      }\n    }\n  }\n\n  /**\n   * The trigger event, on which the tooltip opens.\n   * This is primarily used for sbb-tooltip and should be used with care.\n   */\n  @Input('sbbTooltipTrigger') trigger: 'click' | 'hover' = 'hover';\n\n  /** Disables the display of the tooltip. */\n  @Input('sbbTooltipDisabled')\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: BooleanInput) {\n    const isDisabled = coerceBooleanProperty(value);\n\n    if (this._disabled !== isDisabled) {\n      this._disabled = isDisabled;\n\n      // If tooltip is disabled, hide immediately.\n      if (isDisabled) {\n        this.hide(0);\n      } else {\n        this._setupPointerEnterEventsIfNeeded();\n      }\n\n      if (typeof this.message === 'string') {\n        this._syncAriaDescription(this.message);\n      }\n    }\n  }\n\n  /** The default delay in ms before showing the tooltip after show is called */\n  @Input('sbbTooltipShowDelay')\n  get showDelay(): number {\n    return this._showDelay;\n  }\n  set showDelay(value: NumberInput) {\n    this._showDelay = coerceNumberProperty(value);\n  }\n  private _showDelay: number;\n\n  /** The default delay in ms before hiding the tooltip after hide is called */\n  @Input('sbbTooltipHideDelay')\n  get hideDelay(): number {\n    return this._hideDelay;\n  }\n  set hideDelay(value: NumberInput) {\n    this._hideDelay = coerceNumberProperty(value);\n\n    if (this._tooltipInstance) {\n      this._tooltipInstance._mouseLeaveHideDelay = this._hideDelay;\n    }\n  }\n  private _hideDelay: number;\n\n  /**\n   * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n   * uses a long press gesture to show and hide, however it can conflict with the native browser\n   * gestures. To work around the conflict, sbb-angular disables native gestures on the\n   * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n   * elements). The different values for this option configure the touch event handling as follows:\n   * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n   *   browser gestures on particular elements. In particular, it allows text selection on inputs\n   *   and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n   * - `on` - Enables touch gestures for all elements and disables native\n   *   browser gestures with no exceptions.\n   * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n   *   showing on touch devices.\n   */\n  @Input('sbbTooltipTouchGestures') touchGestures: TooltipTouchGestures = 'auto';\n\n  /** The message to be displayed in the tooltip */\n  @Input('sbbTooltip')\n  get message() {\n    return this._message;\n  }\n  set message(value: string | TemplateRef<any>) {\n    const oldMessage = this.message;\n\n    // If the message is not a string (e.g. number), convert it to a string and trim it.\n    // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\n    // away the string-conversion: https://github.com/angular/components/issues/20684\n    this._message =\n      value instanceof TemplateRef ? value : value != null ? String(value).trim() : '';\n\n    if (!this._message && this._isTooltipVisible()) {\n      this.hide(0);\n    } else {\n      this._setupPointerEnterEventsIfNeeded();\n      this._updateTooltipMessage();\n    }\n\n    if (typeof oldMessage === 'string') {\n      this._syncAriaDescription(oldMessage);\n    }\n  }\n  private _message: string | TemplateRef<any> = '';\n\n  /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n  @Input('sbbTooltipClass')\n  get tooltipClass() {\n    return this._tooltipClass;\n  }\n  set tooltipClass(value: string | string[] | Set<string> | { [key: string]: any }) {\n    this._tooltipClass = value;\n    if (this._tooltipInstance) {\n      this._setTooltipClass(this._tooltipClass);\n    }\n  }\n\n  /** Classes to be passed to the tooltip panel. Supports the same syntax as `ngClass`. */\n  @Input('sbbTooltipPanelClass')\n  tooltipPanelClass: string | string[] | Set<string> | { [key: string]: any } = '';\n\n  /** Manually-bound passive event listeners. */\n  private readonly _passiveListeners: (readonly [string, EventListenerOrEventListenerObject])[] =\n    [];\n\n  /** Reference to the current document. */\n  private _document = inject(DOCUMENT);\n\n  /** Timer started at the last `touchstart` event. */\n  private _touchstartTimeout: null | ReturnType<typeof setTimeout> = null;\n\n  /** Emits when the component is destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  /** Whether ngOnDestroyed has been called. */\n  private _isDestroyed = false;\n\n  /** Predefined tooltip positions. */\n  private readonly _tooltipPositions: Record<TooltipPosition, ConnectedPosition[]> = {\n    above: [\n      {\n        originX: 'center',\n        originY: 'top',\n        overlayX: 'center',\n        overlayY: 'bottom',\n        offsetY: -2,\n      },\n      {\n        originX: 'end',\n        originY: 'top',\n        overlayX: 'end',\n        overlayY: 'bottom',\n        offsetX: 5,\n        offsetY: -2,\n        panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}-start`,\n      },\n      {\n        originX: 'start',\n        originY: 'top',\n        overlayX: 'start',\n        overlayY: 'bottom',\n        offsetX: -5,\n        offsetY: -2,\n        panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}-end`,\n      },\n    ],\n    below: [\n      {\n        originX: 'center',\n        originY: 'bottom',\n        overlayX: 'center',\n        overlayY: 'top',\n        offsetY: 2,\n      },\n      {\n        originX: 'end',\n        originY: 'bottom',\n        overlayX: 'end',\n        overlayY: 'top',\n        offsetX: 5,\n        offsetY: 2,\n        panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}-start`,\n      },\n      {\n        originX: 'start',\n        originY: 'bottom',\n        overlayX: 'start',\n        overlayY: 'top',\n        offsetX: -5,\n        offsetY: 2,\n        panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}-end`,\n      },\n    ],\n    left: [\n      {\n        originX: 'start',\n        originY: 'center',\n        overlayX: 'end',\n        overlayY: 'center',\n        offsetX: 2,\n        panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}-left`,\n      },\n    ],\n    right: [\n      {\n        originX: 'end',\n        originY: 'center',\n        overlayX: 'start',\n        overlayY: 'center',\n        offsetX: -2,\n        panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}-right`,\n      },\n    ],\n  };\n\n  /** Event emitted when the tooltip is opened. */\n  @Output() readonly opened: EventEmitter<SbbTooltipChangeEvent> =\n    new EventEmitter<SbbTooltipChangeEvent>();\n\n  /** Event emitted when the tooltip is closed. */\n  @Output() readonly dismissed: EventEmitter<SbbTooltipChangeEvent> =\n    new EventEmitter<SbbTooltipChangeEvent>();\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const _defaultOptions = this._defaultOptions;\n\n    if (_defaultOptions) {\n      this._showDelay = _defaultOptions.showDelay;\n      this._hideDelay = _defaultOptions.hideDelay;\n\n      if (_defaultOptions?.position) {\n        this.position = _defaultOptions.position;\n      }\n      if (_defaultOptions?.touchGestures) {\n        this.touchGestures = _defaultOptions.touchGestures;\n      }\n    }\n  }\n\n  @HostListener('click', ['$event'])\n  _preventClickBubbling(event: Event) {\n    if (!this.disabled && this.trigger === 'click') {\n      // Only prevent event bubbling on click trigger and when enabled.\n      // For hover the click event should allow bubbling, which allows\n      // consumers to react to it.\n      event.stopPropagation();\n    }\n  }\n\n  ngAfterViewInit() {\n    // This needs to happen after view init so the initial values for all inputs have been set.\n    this._viewInitialized = true;\n    this._setupPointerEnterEventsIfNeeded();\n\n    this._focusMonitor\n      .monitor(this._elementRef)\n      .pipe(\n        filter(() => this.trigger === 'hover'),\n        takeUntil(this._destroyed),\n      )\n      .subscribe((origin) => {\n        // Note that the focus monitor runs outside the Angular zone.\n        if (!origin) {\n          this._ngZone.run(() => this.hide(0));\n        } else if (origin === 'keyboard') {\n          this._ngZone.run(() => this.show());\n        }\n      });\n  }\n\n  /**\n   * Dispose the tooltip when destroyed.\n   */\n  ngOnDestroy() {\n    const nativeElement = this._elementRef.nativeElement;\n\n    // Optimization: Do not call clearTimeout unless there is an active timer.\n    if (this._touchstartTimeout) {\n      clearTimeout(this._touchstartTimeout);\n    }\n\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._tooltipInstance = null;\n    }\n\n    // Clean up the event listeners set in the constructor\n    this._passiveListeners.forEach(([event, listener]) => {\n      nativeElement.removeEventListener(event, listener, passiveListenerOptions);\n    });\n    this._passiveListeners.length = 0;\n\n    this._destroyed.next();\n    this._destroyed.complete();\n\n    this._isDestroyed = true;\n\n    if (typeof this._message === 'string') {\n      this._ariaDescriber.removeDescription(nativeElement, this._message, 'tooltip');\n    }\n    this._focusMonitor.stopMonitoring(nativeElement);\n  }\n\n  /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n  show(delay: number = this.showDelay): void {\n    if (this.disabled || !this.message || this._isTooltipVisible()) {\n      this._tooltipInstance?._cancelPendingAnimations();\n      return;\n    }\n\n    const overlayRef = this._createOverlay();\n    this._detach();\n    this._portal =\n      this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n    this._tooltipInstance = overlayRef.attach(this._portal).instance;\n    this._tooltipInstance._triggerElement = this._elementRef.nativeElement;\n    this._tooltipInstance._mouseLeaveHideDelay = this._hideDelay;\n\n    if (this.message instanceof TemplateRef) {\n      this._ariaDescriber.describe(\n        this._elementRef.nativeElement,\n        this._tooltipInstance._elementRef.nativeElement,\n      );\n    }\n    this._tooltipInstance\n      .afterShown()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this.opened.emit(new SbbTooltipChangeEvent(this)));\n    this._tooltipInstance\n      .afterHidden()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => {\n        this.dismissed.emit(new SbbTooltipChangeEvent(this));\n        this._detach();\n      });\n    this._setTooltipClass(this._tooltipClass);\n    this._updateTooltipMessage();\n    if (this.trigger === 'click') {\n      // If the tooltip has a click trigger, it behaves similar to a dialog and should capture\n      // the focus and trap it inside the tooltip\n      this._tooltipInstance._config = {\n        autoFocus: this._defaultOptions.autoFocus ?? true,\n        restoreFocus: this._defaultOptions.restoreFocus ?? true,\n      };\n      this._tooltipInstance._initializeWithAttachedContent();\n      this._tooltipInstance._triggeredByClick = true;\n    } else {\n      this._tooltipInstance._config = undefined;\n      this._tooltipInstance._triggeredByClick = false;\n    }\n    this._tooltipInstance!.show(delay);\n  }\n\n  /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n  hide(delay: number = this.hideDelay): void {\n    const instance = this._tooltipInstance;\n\n    if (instance) {\n      if (instance.isVisible()) {\n        instance.hide(delay);\n      } else {\n        instance._cancelPendingAnimations();\n        this._detach();\n      }\n    }\n  }\n\n  /** Shows/hides the tooltip */\n  toggle(): void {\n    this._isTooltipVisible() ? this.hide() : this.show();\n  }\n\n  /** Returns true if the tooltip is currently visible to the user */\n  _isTooltipVisible(): boolean {\n    return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n  }\n\n  /** Create the overlay config and position strategy */\n  private _createOverlay(): OverlayRef {\n    if (this._overlayRef) {\n      return this._overlayRef;\n    }\n\n    const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(\n      this._elementRef,\n    );\n\n    // Create connected position strategy that listens for scroll events to reposition.\n    const strategy = this._overlay\n      .position()\n      .flexibleConnectedTo(this._elementRef)\n      .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n      .withFlexibleDimensions(false)\n      .withViewportMargin(this._viewportMargin)\n      .withScrollableContainers(scrollableAncestors);\n\n    strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe((change) => {\n      this._updateCurrentPositionClass(change.connectionPair);\n\n      if (\n        this._tooltipInstance &&\n        change.scrollableViewProperties.isOriginOutsideView &&\n        this._tooltipInstance.isVisible()\n      ) {\n        // After position changes occur and the origin is outside the view then close the tooltip.\n        this._ngZone.run(() => this.hide(0));\n      }\n    });\n\n    this._overlayRef = this._overlay.create({\n      positionStrategy: strategy,\n      panelClass: coerceStringArray(this.tooltipPanelClass).concat(\n        `${this._cssClassPrefix}-${PANEL_CLASS}`,\n      ),\n      scrollStrategy: this._scrollStrategy(),\n    });\n\n    this._updatePosition(this._overlayRef);\n\n    this._overlayRef\n      .detachments()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._detach());\n\n    this._overlayRef\n      .keydownEvents()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe((event) => {\n        if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {\n          event.preventDefault();\n          event.stopPropagation();\n          this._ngZone.run(() => this.hide(0));\n        }\n      });\n\n    this._overlayRef\n      .outsidePointerEvents()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n\n    if (this._defaultOptions?.disableTooltipInteractivity) {\n      this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`);\n    }\n\n    return this._overlayRef;\n  }\n\n  /** Detaches the currently-attached tooltip. */\n  private _detach() {\n    if (this._overlayRef && this._overlayRef.hasAttached()) {\n      if (this.message instanceof TemplateRef && this._tooltipInstance) {\n        this._ariaDescriber.removeDescription(\n          this._elementRef.nativeElement,\n          this._tooltipInstance._elementRef.nativeElement,\n        );\n      }\n      this._overlayRef.detach();\n    }\n\n    this._tooltipInstance = null;\n  }\n\n  /** Updates the position of the current tooltip. */\n  private _updatePosition(overlayRef: OverlayRef) {\n    const position = overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n    const overlayPositions = this._getOverlayPositions();\n    position.withPositions([...overlayPositions]);\n  }\n\n  /** Returns the overlay position and all fallback positions based on the user's preference. */\n  _getOverlayPositions(): ConnectedPosition[] {\n    const position = this.position;\n    let overlayPositions: ConnectedPosition[] = [];\n\n    if (position === 'above') {\n      overlayPositions = [...this._tooltipPositions.above, ...this._tooltipPositions.below];\n    } else if (position === 'below') {\n      overlayPositions = [...this._tooltipPositions.below, ...this._tooltipPositions.above];\n    } else if (position === 'left') {\n      overlayPositions = [...this._tooltipPositions.left, ...this._tooltipPositions.right];\n    } else if (position === 'right') {\n      overlayPositions = [...this._tooltipPositions.right, ...this._tooltipPositions.left];\n    } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      throw getSbbTooltipInvalidPositionError(position);\n    }\n\n    return overlayPositions;\n  }\n\n  /** Updates the tooltip message and repositions the overlay according to the new message length */\n  private _updateTooltipMessage() {\n    // Must wait for the message to be painted to the tooltip so that the overlay can properly\n    // calculate the correct positioning based on the size of the text.\n    if (this._tooltipInstance) {\n      this._tooltipInstance.message = this.message;\n      this._tooltipInstance._markForCheck();\n\n      afterNextRender(\n        () => {\n          if (this._tooltipInstance) {\n            this._overlayRef!.updatePosition();\n          }\n        },\n        {\n          injector: this._injector,\n        },\n      );\n    }\n  }\n\n  /** Updates the tooltip class */\n  private _setTooltipClass(tooltipClass: string | string[] | Set<string> | { [key: string]: any }) {\n    if (this._tooltipInstance) {\n      this._tooltipInstance.tooltipClass = tooltipClass;\n      this._tooltipInstance._markForCheck();\n    }\n  }\n\n  /** Updates the class on the overlay panel based on the current position of the tooltip. */\n  private _updateCurrentPositionClass(connectionPair: ConnectionPositionPair): void {\n    const { overlayY, originX, originY } = connectionPair;\n    let newPosition: TooltipPosition;\n\n    // If the overlay is in the middle along the Y axis,\n    // it means that it's either before or after.\n    if (overlayY === 'center') {\n      // Note that since this information is used for styling, we want to\n      // resolve `start` and `end` to their real values, otherwise consumers\n      // would have to remember to do it themselves on each consumption.\n      newPosition = originX === 'start' ? 'left' : 'right';\n    } else {\n      newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n    }\n\n    if (newPosition !== this._currentPosition) {\n      const overlayRef = this._overlayRef;\n\n      if (overlayRef) {\n        const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;\n        overlayRef.removePanelClass(classPrefix + this._currentPosition);\n        overlayRef.addPanelClass(classPrefix + newPosition);\n      }\n\n      this._currentPosition = newPosition;\n    }\n  }\n\n  /** Binds the pointer events to the tooltip trigger. */\n  private _setupPointerEnterEventsIfNeeded() {\n    // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n    if (\n      this._disabled ||\n      !this.message ||\n      !this._viewInitialized ||\n      this._passiveListeners.length\n    ) {\n      return;\n    }\n\n    if (this.trigger === 'click') {\n      this._passiveListeners.push(['click', () => this.show(0)]);\n    }\n    // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n    // first tap from firing its click event or can cause the tooltip to open for clicks.\n    else if (this._platformSupportsMouseEvents()) {\n      this._passiveListeners.push([\n        'mouseenter',\n        () => {\n          this._setupPointerExitEventsIfNeeded();\n          this.show();\n        },\n      ]);\n    } else if (this.touchGestures !== 'off') {\n      this._disableNativeGesturesIfNecessary();\n\n      this._passiveListeners.push([\n        'touchstart',\n        () => {\n          // Note that it's important that we don't `preventDefault` here,\n          // because it can prevent click events from firing on the element.\n          this._setupPointerExitEventsIfNeeded();\n          if (this._touchstartTimeout) {\n            clearTimeout(this._touchstartTimeout);\n          }\n          this._touchstartTimeout = setTimeout(() => {\n            this._touchstartTimeout = null;\n            this.show();\n          }, LONGPRESS_DELAY);\n        },\n      ]);\n    }\n\n    this._addListeners(this._passiveListeners);\n  }\n\n  private _setupPointerExitEventsIfNeeded() {\n    if (this._pointerExitEventsInitialized) {\n      return;\n    }\n    this._pointerExitEventsInitialized = true;\n\n    const exitListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\n    if (this._platformSupportsMouseEvents()) {\n      exitListeners.push(\n        [\n          'mouseleave',\n          (event) => {\n            const newTarget = (event as MouseEvent).relatedTarget as Node | null;\n            if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n              this.hide();\n            }\n          },\n        ],\n        ['wheel', (event) => this._wheelListener(event as WheelEvent)],\n      );\n    } else if (this.touchGestures !== 'off') {\n      this._disableNativeGesturesIfNecessary();\n      const touchendListener = () => {\n        if (this._touchstartTimeout) {\n          clearTimeout(this._touchstartTimeout);\n        }\n        this.hide(this._defaultOptions.touchendHideDelay);\n      };\n\n      exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);\n    }\n\n    this._addListeners(exitListeners);\n    this._passiveListeners.push(...exitListeners);\n  }\n\n  private _addListeners(listeners: (readonly [string, EventListenerOrEventListenerObject])[]) {\n    listeners.forEach(([event, listener]) => {\n      this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n    });\n  }\n\n  private _platformSupportsMouseEvents() {\n    return !this._platform.IOS && !this._platform.ANDROID;\n  }\n\n  /** Listener for the `wheel` event on the element. */\n  private _wheelListener(event: WheelEvent) {\n    if (this._isTooltipVisible()) {\n      const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n      const element = this._elementRef.nativeElement;\n\n      // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n      // won't fire if the user scrolls away using the wheel without moving their cursor. We\n      // work around it by finding the element under the user's cursor and closing the tooltip\n      // if it's not the trigger.\n      if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n        this.hide();\n      }\n    }\n  }\n\n  /** Disables the native browser gestures, based on how the tooltip has been configured. */\n  private _disableNativeGesturesIfNecessary() {\n    const gestures = this.touchGestures;\n\n    if (gestures !== 'off') {\n      const element = this._elementRef.nativeElement;\n      const style = element.style;\n\n      // If gestures are set to `auto`, we don't disable text selection on inputs and\n      // textareas, because it prevents the user from typing into them on iOS Safari.\n      if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n        style.userSelect =\n          (style as any).msUserSelect =\n          style.webkitUserSelect =\n          (style as any).MozUserSelect =\n            'none';\n      }\n\n      // If we have `auto` gestures and the element uses native HTML dragging,\n      // we don't set `-webkit-user-drag` because it prevents the native behavior.\n      if (gestures === 'on' || !element.draggable) {\n        (style as any).webkitUserDrag = 'none';\n      }\n\n      style.touchAction = 'none';\n      (style as any).webkitTapHighlightColor = 'transparent';\n    }\n  }\n\n  /** Updates the tooltip's ARIA description based on it current state. */\n  private _syncAriaDescription(oldMessage: string): void {\n    if (this._ariaDescriptionPending) {\n      return;\n    }\n\n    this._ariaDescriptionPending = true;\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, oldMessage, 'tooltip');\n\n    // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n    // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n    // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n    // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n    if (!this._isDestroyed) {\n      afterNextRender(\n        {\n          write: () => {\n            this._ariaDescriptionPending = false;\n\n            if (this.message && !this.disabled) {\n              this._ariaDescriber.describe(\n                this._elementRef.nativeElement,\n                this.message as string,\n                'tooltip',\n              );\n            }\n          },\n        },\n        { injector: this._injector },\n      );\n    }\n  }\n}\n\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\n@Component({\n  selector: 'sbb-tooltip-component',\n  templateUrl: 'tooltip.html',\n  styleUrls: ['tooltip.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'sbb-tooltip-component',\n    '(mouseleave)': '_handleMouseLeave($event)',\n    'aria-hidden': 'true',\n  },\n  imports: [NgClass, NgTemplateOutlet, SbbIcon, AsyncPipe],\n})\nexport class TooltipComponent implements OnDestroy {\n  _elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected _focusTrapFactory: ConfigurableFocusTrapFactory = inject(ConfigurableFocusTrapFactory);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _focusMonitor = inject(FocusMonitor);\n  private _breakpointObserver = inject(BreakpointObserver);\n\n  /** Stream that emits whether the user has a handset-sized display.  */\n  _isHandset: Observable<BreakpointState>;\n\n  /** Message to display in the tooltip */\n  message: string | TemplateRef<any>;\n\n  /** Classes to be added to the tooltip. Supports the same syntax as `ngClass`. */\n  tooltipClass: string | string[] | Set<string> | { [key: string]: any };\n\n  /** The timeout ID of any current timer set to show the tooltip */\n  _showTimeoutId: any;\n\n  /** The timeout ID of any current timer set to hide the tooltip */\n  _hideTimeoutId: any;\n\n  /** Element that caused the tooltip to open. */\n  _triggerElement: HTMLElement;\n\n  /** Amount of milliseconds to delay the closing sequence. */\n  _mouseLeaveHideDelay: number;\n\n  /** Reference to the internal tooltip element. */\n  @ViewChild('tooltip', {\n    // Use a static query here since we interact directly with\n    // the DOM which can happen before `ngAfterViewInit`.\n    static: true,\n  })\n  _tooltip: ElementRef<HTMLElement>;\n\n  get _templateRef(): TemplateRef<any> | null {\n    return this.message instanceof TemplateRef ? this.message : null;\n  }\n\n  /**\n   * Type of interaction that led to the tooltip being closed. This is used to determine\n   * whether the focus style will be applied when returning focus to its original location\n   * after the dialog is closed.\n   */\n  _closeInteractionType: FocusOrigin | null = null;\n\n  _config?: Pick<SbbTooltipDefaultOptions, 'autoFocus' | 'restoreFocus'> = {};\n\n  protected _document: Document = inject(DOCUMENT);\n\n  /** Whether animations are currently disabled. */\n  private _animationsDisabled: boolean;\n\n  /** Whether interactions on the page should close the tooltip */\n  private _closeOnInteraction = false;\n\n  /** The class that traps and manages focus within the tooltip. */\n  private _focusTrap: FocusTrap;\n\n  /** Element that was focused before the tooltip was opened. Save this to restore upon close. */\n  private _elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n  /** Whether the tooltip is currently visible. */\n  private _isVisible = false;\n\n  /** Subject for notifying that the tooltip has been shown in the view */\n  private readonly _onShow: Subject<void> = new Subject<void>();\n\n  /** Subject for notifying that the tooltip has been hidden from the view */\n  private readonly _onHide: Subject<void> = new Subject<void>();\n\n  /** Whether the tooltip component was triggered by click */\n  _triggeredByClick: boolean = false;\n\n  /** Name of the show animation and the class that toggles it. */\n  private readonly _showAnimation: string = 'sbb-tooltip-container-show';\n\n  /** Name of the hide animation and the class that toggles it. */\n  private readonly _hideAnimation: string = 'sbb-tooltip-container-hide';\n\n  constructor(...args: unknown[]);\n\n  constructor() {\n    const animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n    this._animationsDisabled = animationMode === 'NoopAnimations';\n    this._isHandset = this._breakpointObserver.observe(Breakpoints.MobileDevice);\n  }\n\n  /**\n   * Shows the tooltip with an animation originating from the provided origin\n   * @param delay Amount of milliseconds to the delay showing the tooltip.\n   */\n  show(delay: number): void {\n    // Cancel the delayed hide if it is scheduled\n    clearTimeout(this._hideTimeoutId);\n\n    // Body interactions should cancel the tooltip if there is a delay in showing.\n    this._closeOnInteraction = true;\n    this._showTimeoutId = setTimeout(() => {\n      this._showTimeoutId = undefined;\n      this._toggleVisibility(true);\n    }, delay);\n  }\n\n  /**\n   * Begins the animation to hide the tooltip after the provided delay in ms.\n   * @param delay Amount of milliseconds to delay showing the tooltip.\n   */\n  hide(delay: number): void {\n    // Cancel the delayed show if it is scheduled\n    clearTimeout(this._showTimeoutId);\n\n    this._hideTimeoutId = setTimeout(() => {\n      this._toggleVisibility(false);\n      this._hideTimeoutId = undefined;\n\n      // Mark for check so if any parent component has set the\n      // ChangeDetectionStrategy to OnPush it will be checked anyways\n      this._markForCheck();\n    }, delay);\n  }\n\n  /** Returns an observable that notifies when the tooltip has been shown in the view. */\n  afterShown(): Observable<void> {\n    return this._onShow;\n  }\n\n  /** Returns an observable that notifies when the tooltip has been hidden from view. */\n  afterHidden(): Observable<void> {\n    return this._onHide;\n  }\n\n  /** Whether the tooltip is being displayed. */\n  isVisible(): boolean {\n    return this._isVisible;\n  }\n\n  ngOnDestroy() {\n    this._cancelPendingAnimations();\n    this._onShow.complete();\n    this._onHide.complete();\n    this._triggerElement = null!;\n  }\n\n  /**\n   * Interactions on the HTML body should close the tooltip immediately.\n   */\n  _handleBodyInteraction(): void {\n    if (this._closeOnInteraction) {\n      this.hide(0);\n    }\n  }\n\n  /** Initializes the dialog container with the attached content. */\n  _initializeWithAttachedContent() {\n    this._setupFocusTrap();\n    // Save the previously focused element. This element will be re-focused\n    // when the dialog closes.\n    this._capturePreviouslyFocusedElement();\n    // Move focus onto the dialog immediately in order to prevent the user\n    // from accidentally opening multiple dialogs at the same time.\n    this._focusDialogContainer();\n  }\n\n  /**\n   * Marks that the tooltip needs to be checked in the next change detection run.\n   * Mainly used for rendering the initial text before positioning a tooltip, which\n   * can be problematic in components with OnPush change detection.\n   */\n  _markForCheck(): void {\n    this._changeDetectorRef.markForCheck();\n  }\n\n  _handleMouseLeave({ relatedTarget }: MouseEvent) {\n    if (\n      !this._triggeredByClick &&\n      (!relatedTarget || !this._triggerElement.contains(relatedTarget as Node))\n    ) {\n      this.hide(this._mouseLeaveHideDelay);\n    }\n  }\n\n  /** Event listener dispatched when an animation on the tooltip finishes. */\n  _handleAnimationEnd({ animationName }: AnimationEvent) {\n    if (animationName === this._showAnimation || animationName === this._hideAnimation) {\n      this._finalizeAnimation(animationName === this._showAnimation);\n    }\n  }\n\n  /** Cancels any pending hiding sequences. */\n  _cancelPendingAnimations() {\n    clearTimeout(this._showTimeoutId);\n    clearTimeout(this._hideTimeoutId);\n    this._showTimeoutId = this._hideTimeoutId = undefined;\n  }\n\n  /** Handles the cleanup after an animation has finished. */\n  private _finalizeAnimation(toVisible: boolean) {\n    if (toVisible) {\n      this._closeOnInteraction = true;\n    } else if (!this.isVisible()) {\n      this._onHide.next();\n    }\n\n    if (toVisible && this.isVisible() && this._config) {\n      this._trapFocus();\n    }\n\n    if (!toVisible && !this.isVisible()) {\n      this._restoreFocus();\n    }\n  }\n\n  /** Toggles the visibility of the tooltip element. */\n  private _toggleVisibility(isVisible: boolean) {\n    // We set the classes directly here ourselves so that toggling the tooltip state\n    // isn't bound by change detection. This allows us to hide it even if the\n    // view ref has been detached from the CD tree.\n    const tooltip = this._tooltip.nativeElement;\n    const showClass = this._showAnimation;\n    const hideClass = this._hideAnimation;\n    tooltip.classList.remove(isVisible ? hideClass : showClass);\n    tooltip.classList.add(isVisible ? showClass : hideClass);\n    if (this._isVisible !== isVisible) {\n      this._isVisible = isVisible;\n      this._changeDetectorRef.markForCheck();\n    }\n\n    // It's common for internal apps to disable animations using `* { animation: none !important }`\n    // which can break the opening sequence. Try to detect such cases and work around them.\n    if (isVisible && !this._animationsDisabled && typeof getComputedStyle === 'function') {\n      const styles = getComputedStyle(tooltip);\n\n      // Use `getPropertyValue` to avoid issues with property renaming.\n      if (\n        styles.getPropertyValue('animation-duration') === '0s' ||\n        styles.getPropertyValue('animation-name') === 'none'\n      ) {\n        this._animationsDisabled = true;\n      }\n    }\n\n    if (isVisible) {\n      this._onShow.next();\n    }\n\n    if (this._animationsDisabled) {\n      tooltip.classList.add('_sbb-animation-noopable');\n      this._finalizeAnimation(isVisible);\n    }\n  }\n\n  /** Moves the focus inside the focus trap. */\n  protected _trapFocus() {\n    // If we were to attempt to focus immediately, then the content of the dialog would not yet be\n    // ready in instances where change detection has to run first. To deal with this, we simply\n    // wait for the microtask queue to be empty.\n    if (this._config?.autoFocus) {\n      this._focusTrap.focusInitialElementWhenReady();\n    } else if (!this._containsFocus()) {\n      // Otherwise ensure that focus is on the dialog container. It's possible that a different\n      // component tried to move focus while the open animation was running. See:\n      // https://github.com/angular/components/issues/16215. Note that we only want to do this\n      // if the focus isn't inside the dialog already, because it's possible that the consumer\n      // turned off `autoFocus` in order to move focus themselves.\n      this._elementRef.nativeElement.focus();\n    }\n  }\n\n  /** Restores focus to the element that was focused before the dialog opened. */\n  protected _restoreFocus() {\n    const previousElement = this._elementFocusedBeforeDialogWasOpened;\n\n    // We need the extra check, because IE can set the `activeElement` to null in some cases.\n    if (\n      this._config?.restoreFocus &&\n      previousElement &&\n      typeof previousElement.focus === 'function'\n    ) {\n      const activeElement = _getFocusedElementPierceShadowDom();\n      const element = this._elementRef.nativeElement;\n\n      // Make sure that focus is still inside the dialog or is on the body (usually because a\n      // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n      // the consumer moved it themselves before the animation was done, in which case we shouldn't\n      // do anything.\n      if (\n        !activeElement ||\n        activeElement === this._document.body ||\n        activeElement === element ||\n        element.contains(activeElement)\n      ) {\n        this._focusMonitor.focusVia(previousElement, this._closeInteractionType);\n        this._closeInteractionType = null;\n      }\n    }\n\n    if (this._focusTrap) {\n      this._focusTrap.destroy();\n    }\n  }\n\n  /** Sets up the focus trap. */\n  private _setupFocusTrap() {\n    this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n  }\n\n  /** Captures the element that was focused before the dialog was opened. */\n  private _capturePreviouslyFocusedElement() {\n    if (this._document) {\n      this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n    }\n  }\n\n  /** Focuses the dialog container. */\n  private _focusDialogContainer() {\n    // Note that there is no focus method when rendering on the server.\n    if (this._elementRef.nativeElement.focus) {\n      this._elementRef.nativeElement.focus();\n    }\n  }\n\n  /** Returns whether focus is inside the dialog. */\n  private _containsFocus() {\n    const element = this._elementRef.nativeElement;\n    const activeElement = _getFocusedElementPierceShadowDom();\n    return element === activeElement || element.contains(activeElement);\n  }\n}\n","<div\n  #tooltip\n  class=\"sbb-tooltip-container\"\n  (animationend)=\"_handleAnimationEnd($event)\"\n  [class.sbb-tooltip-handset]=\"(_isHandset | async)?.matches\"\n>\n  <div\n    class=\"sbb-tooltip\"\n    [ngClass]=\"tooltipClass\"\n    [class.sbb-tooltip-has-close-button]=\"_triggeredByClick\"\n  >\n    <div class=\"sbb-tooltip-content\">\n      @if (_templateRef; as templateRef) {\n        <ng-container *ngTemplateOutlet=\"templateRef\"></ng-container>\n      } @else {\n        {{ message }}\n      }\n    </div>\n    @if (_triggeredByClick) {\n      <button\n        type=\"button\"\n        class=\"sbb-tooltip-icon sbb-tooltip-close-button sbb-icon-fit sbb-button-reset-frameless\"\n        (click)=\"hide(0)\"\n      >\n        <sbb-icon svgIcon=\"cross-small\"></sbb-icon>\n      </button>\n    }\n  </div>\n</div>\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { mixinVariant } from '@sbb-esta/angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\n\nimport { SbbTooltip, SbbTooltipChangeEvent, TooltipPosition } from './tooltip';\n\n// Boilerplate for applying mixins to SbbTooltipWrapper.\nconst _SbbTooltipWrapperMixinBase = mixinVariant(class {});\n\n@Component({\n  selector: 'sbb-tooltip',\n  templateUrl: './tooltip-wrapper.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'sbb-tooltip-wrapper',\n    '[attr.id]': 'this.id',\n    '[attr.aria-expanded]': '_tooltip._isTooltipVisible()',\n  },\n  imports: [SbbTooltip, SbbIcon, AsyncPipe],\n})\nexport class SbbTooltipWrapper\n  extends _SbbTooltipWrapperMixinBase\n  implements OnInit, OnChanges, OnDestroy\n{\n  /** Identifier of tooltip. */\n  @Input() id: string = inject(_IdGenerator).getId('sbb-tooltip-id-');\n\n  /** The trigger event, on which the tooltip opens. */\n  @Input() trigger: 'click' | 'hover' = 'click';\n\n  /** Customizations for show delay */\n  @Input({ transform: numberAttribute }) hoverShowDelay: number;\n\n  /** Customizations for hide delay */\n  @Input({ transform: numberAttribute }) hoverHideDelay: number;\n\n  @Input() position: TooltipPosition = 'below';\n\n  private _destroyed = new Subject<void>();\n\n  /**\n   * The indicator icon, which will be shown as the tooltip indicator.\n   * Must be a valid svgIcon input for sbb-icon.\n   *\n   * e.g. svgIcon=\"circle-question-mark-small\"\n   */\n  @Input() svgIcon: string;\n\n  /** Whether the tooltip is disabled. */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /** Subject for the current icon. */\n  private _svgIconSubject = new BehaviorSubject<string | null>(null);\n\n  /** An observable of the current icon. */\n  _svgIcon: Observable<string> = combineLatest([this.variant, this._svgIconSubject]).pipe(\n    map(([variant, icon]) => {\n      if (icon) {\n        return icon;\n      } else {\n        return variant === 'standard' ? 'circle-question-mark-small' : 'circle-information-small';\n      }\n    }),\n  );\n\n  /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n  @Input() sbbTooltipClass: string | string[] | Set<string> | { [key: string]: any };\n\n  /** Classes to be passed to the tooltip panel. Supports the same syntax as `ngClass`. */\n  @Input() sbbTooltipPanelClass: string | string[] | Set<string> | { [key: string]: any };\n\n  @ViewChild(SbbTooltip, { static: true }) _tooltip!: SbbTooltip;\n\n  /** Event emitted when the tooltip is opened. */\n  @Output() readonly opened: EventEmitter<SbbTooltipChangeEvent> =\n    new EventEmitter<SbbTooltipChangeEvent>();\n\n  /** Event emitted when the tooltip is closed. */\n  @Output() readonly dismissed: EventEmitter<SbbTooltipChangeEvent> =\n    new EventEmitter<SbbTooltipChangeEvent>();\n\n  ngOnInit(): void {\n    this._tooltip.opened.pipe(takeUntil(this._destroyed)).subscribe((e) => this.opened.emit(e));\n    this._tooltip.dismissed\n      .pipe(takeUntil(this._destroyed))\n      .subscribe((e) => this.dismissed.emit(e));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      changes['svgIcon'] &&\n      changes['svgIcon'].currentValue !== changes['svgIcon'].previousValue\n    ) {\n      this._svgIconSubject.next(this.svgIcon);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /** Shows the tooltip. */\n  show() {\n    this._tooltip.show(0);\n  }\n\n  /** Hides the tooltip. */\n  hide() {\n    this._tooltip.hide(0);\n  }\n}\n","<button\n  class=\"sbb-tooltip-icon sbb-tooltip-trigger sbb-icon-scaled sbb-button-reset-frameless\"\n  [class.sbb-tooltip-trigger-active]=\"tooltip._isTooltipVisible()\"\n  [sbbTooltipDisabled]=\"disabled\"\n  [class.sbb-disabled]=\"disabled\"\n  [disabled]=\"disabled\"\n  type=\"button\"\n  [sbbTooltipPosition]=\"position\"\n  [sbbTooltip]=\"tooltipTemplate\"\n  [sbbTooltipTrigger]=\"trigger\"\n  [sbbTooltipShowDelay]=\"hoverShowDelay\"\n  [sbbTooltipHideDelay]=\"hoverHideDelay\"\n  [sbbTooltipClass]=\"sbbTooltipClass\"\n  [sbbTooltipPanelClass]=\"sbbTooltipPanelClass\"\n  #tooltip=\"sbbTooltip\"\n  (click)=\"tooltip.show(0)\"\n>\n  <sbb-icon [svgIcon]=\"(_svgIcon | async)!\"></sbb-icon>\n</button>\n<ng-template #tooltipTemplate>\n  <ng-content></ng-content>\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { 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 {\n  SbbTooltip,\n  SBB_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n  TooltipComponent,\n} from './tooltip';\nimport { SbbTooltipWrapper } from './tooltip-wrapper';\n\n@NgModule({\n  imports: [\n    A11yModule,\n    OverlayModule,\n    PortalModule,\n    SbbCommonModule,\n    SbbIconModule,\n    SbbTooltip,\n    TooltipComponent,\n    SbbTooltipWrapper,\n  ],\n  exports: [SbbTooltip, TooltipComponent, SbbTooltipWrapper, CdkScrollableModule],\n  providers: [SBB_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER],\n})\nexport class SbbTooltipModule {}\n"],"names":["SCROLL_THROTTLE_MS","PANEL_CLASS","passiveListenerOptions","normalizePassiveListenerOptions","passive","LONGPRESS_DELAY","getSbbTooltipInvalidPositionError","position","Error","SBB_TOOLTIP_SCROLL_STRATEGY","InjectionToken","providedIn","factory","injector","inject","Injector","createRepositionScrollStrategy","scrollThrottle","SBB_TOOLTIP_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","SBB_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","provide","deps","Overlay","useFactory","SBB_TOOLTIP_DEFAULT_OPTIONS","SBB_TOOLTIP_DEFAULT_OPTIONS_FACTORY","showDelay","hideDelay","touchendHideDelay","autoFocus","restoreFocus","SbbTooltipChangeEvent","instance","constructor","SbbTooltip","_overlay","_elementRef","ElementRef","_scrollDispatcher","ScrollDispatcher","_injector","_viewContainerRef","ViewContainerRef","_ngZone","NgZone","_platform","Platform","_ariaDescriber","AriaDescriber","_focusMonitor","FocusMonitor","_defaultOptions","optional","_overlayRef","_tooltipInstance","_portal","_position","_disabled","_tooltipClass","_scrollStrategy","_viewInitialized","_pointerExitEventsInitialized","_tooltipComponent","TooltipComponent","_viewportMargin","_currentPosition","_cssClassPrefix","_ariaDescriptionPending","value","_updatePosition","show","updatePosition","trigger","disabled","isDisabled","coerceBooleanProperty","hide","_setupPointerEnterEventsIfNeeded","message","_syncAriaDescription","_showDelay","coerceNumberProperty","_hideDelay","_mouseLeaveHideDelay","touchGestures","_message","oldMessage","TemplateRef","String","trim","_isTooltipVisible","_updateTooltipMessage","tooltipClass","_setTooltipClass","tooltipPanelClass","_passiveListeners","_document","DOCUMENT","_touchstartTimeout","_destroyed","Subject","_isDestroyed","_tooltipPositions","above","originX","originY","overlayX","overlayY","offsetY","offsetX","panelClass","below","left","right","opened","EventEmitter","dismissed","_preventClickBubbling","event","stopPropagation","ngAfterViewInit","monitor","pipe","filter","takeUntil","subscribe","origin","run","ngOnDestroy","nativeElement","clearTimeout","dispose","forEach","listener","removeEventListener","length","next","complete","removeDescription","stopMonitoring","delay","_cancelPendingAnimations","overlayRef","_createOverlay","_detach","ComponentPortal","attach","_triggerElement","describe","afterShown","emit","afterHidden","_config","_initializeWithAttachedContent","_triggeredByClick","undefined","isVisible","toggle","scrollableAncestors","getAncestorScrollContainers","strategy","flexibleConnectedTo","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withScrollableContainers","positionChanges","change","_updateCurrentPositionClass","connectionPair","scrollableViewProperties","isOriginOutsideView","create","positionStrategy","coerceStringArray","concat","scrollStrategy","detachments","keydownEvents","keyCode","ESCAPE","hasModifierKey","preventDefault","outsidePointerEvents","_handleBodyInteraction","disableTooltipInteractivity","addPanelClass","hasAttached","detach","getConfig","overlayPositions","_getOverlayPositions","withPositions","ngDevMode","_markForCheck","afterNextRender","newPosition","classPrefix","removePanelClass","push","_platformSupportsMouseEvents","_setupPointerExitEventsIfNeeded","_disableNativeGesturesIfNecessary","setTimeout","_addListeners","exitListeners","newTarget","relatedTarget","overlayElement","contains","_wheelListener","touchendListener","listeners","addEventListener","IOS","ANDROID","elementUnderPointer","elementFromPoint","clientX","clientY","element","gestures","style","nodeName","userSelect","msUserSelect","webkitUserSelect","MozUserSelect","draggable","webkitUserDrag","touchAction","webkitTapHighlightColor","write","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","inputs","outputs","host","properties","exportAs","ngImport","decorators","args","Input","Output","HostListener","_focusTrapFactory","ConfigurableFocusTrapFactory","_changeDetectorRef","ChangeDetectorRef","_breakpointObserver","BreakpointObserver","_isHandset","_showTimeoutId","_hideTimeoutId","_tooltip","_templateRef","_closeInteractionType","_animationsDisabled","_closeOnInteraction","_focusTrap","_elementFocusedBeforeDialogWasOpened","_isVisible","_onShow","_onHide","_showAnimation","_hideAnimation","animationMode","ANIMATION_MODULE_TYPE","observe","Breakpoints","MobileDevice","_toggleVisibility","_setupFocusTrap","_capturePreviouslyFocusedElement","_focusDialogContainer","markForCheck","_handleMouseLeave","_handleAnimationEnd","animationName","_finalizeAnimation","toVisible","_trapFocus","_restoreFocus","tooltip","showClass","hideClass","classList","remove","add","getComputedStyle","styles","getPropertyValue","focusInitialElementWhenReady","_containsFocus","focus","previousElement","activeElement","_getFocusedElementPierceShadowDom","body","focusVia","destroy","Component","attributes","classAttribute","viewQueries","propertyName","first","predicate","descendants","static","template","dependencies","kind","type","NgClass","NgTemplateOutlet","SbbIcon","AsyncPipe","name","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","class","imports","ViewChild","_SbbTooltipWrapperMixinBase","mixinVariant","SbbTooltipWrapper","id","_IdGenerator","getId","hoverShowDelay","hoverHideDelay","svgIcon","_svgIconSubject","BehaviorSubject","_svgIcon","combineLatest","variant","map","icon","sbbTooltipClass","sbbTooltipPanelClass","ngOnInit","e","ngOnChanges","changes","currentValue","previousValue","ɵcmp","ɵɵngDeclareComponent","minVersion","version","numberAttribute","booleanAttribute","usesInheritance","usesOnChanges","transform","SbbTooltipModule","NgModule","ɵmod","ɵɵngDeclareNgModule","A11yModule","OverlayModule","PortalModule","SbbCommonModule","SbbIconModule","CdkScrollableModule","ɵinj","ɵɵngDeclareInjector","providers","exports"],"mappings":"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"}