{"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/** 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 = null;\n  _tooltipInstance: TooltipComponent | null = 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 = false;\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 { SbbTooltip, TooltipComponent } 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})\nexport class SbbTooltipModule {}\n"],"names":[],"mappings":"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"}