{"version":3,"file":"lazycuh-angular-tooltip.mjs","sources":["../../../projects/angular-tooltip/src/lib/tooltip.component.ts","../../../projects/angular-tooltip/src/lib/tooltip.component.html","../../../projects/angular-tooltip/src/lib/tooltip-ref.ts","../../../projects/angular-tooltip/src/lib/tooltip.service.ts","../../../projects/angular-tooltip/src/lib/utils/is-mobile.ts","../../../projects/angular-tooltip/src/lib/utils/watch-for-long-press.ts","../../../projects/angular-tooltip/src/lib/tooltip.directive.ts","../../../projects/angular-tooltip/src/lazycuh-angular-tooltip.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  inject,\n  signal,\n  ViewEncapsulation\n} from '@angular/core';\n\nimport { Placement } from './placement';\nimport { Theme } from './theme';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'lc-tooltip-container'\n  },\n  selector: 'lc-tooltip',\n  styleUrls: ['./tooltip.component.scss'],\n  templateUrl: './tooltip.component.html'\n})\nexport class TooltipComponent {\n  protected readonly _content = signal('');\n  protected readonly _idForAriaDescribedBy = signal(\n    `__${btoa(String(Math.random() + Math.random()))\n      .substring(5, 15)\n      .toLowerCase()}__`\n  );\n\n  /**\n   * Optional class to add to this component\n   */\n  protected readonly _className = signal<string | undefined>(undefined);\n\n  /**\n   * The current theme for this tooltip.\n   */\n  protected readonly _theme = signal<Theme>('light');\n\n  private readonly _host = inject<ElementRef<HTMLElement>>(ElementRef, { host: true });\n\n  private _placement: Placement = 'vertical';\n\n  /**\n   * The DOM element representing this tooltip\n   */\n  private _tooltip!: HTMLDivElement;\n\n  /**\n   * The callback to run after this tooltip is closed\n   */\n  private _afterClosedListener?: () => void;\n\n  private _isVisible = false;\n\n  constructor() {\n    const destroyRef = inject(DestroyRef);\n    destroyRef.onDestroy(() => {\n      this._afterClosedListener = undefined;\n    });\n  }\n\n  hide() {\n    this._isVisible = false;\n    this._tooltip.classList.remove('is-entering');\n    this._tooltip.classList.add('is-leaving');\n  }\n\n  setClassName(className: string) {\n    this._className.set(className);\n  }\n\n  setTheme(theme: Theme) {\n    this._theme.set(theme);\n  }\n\n  setAfterClosedListener(listener: () => void) {\n    this._afterClosedListener = listener;\n  }\n\n  setPlacement(placement: Placement) {\n    this._placement = placement;\n  }\n\n  /**\n   * Show a tooltip anchored at `anchor` with the provided content.\n   *\n   * @param anchor The target at which to place this tooltip.\n   * @param content The tooltip content to show.\n   */\n  show(anchor: Element, content: Node) {\n    if (document.body.contains(anchor)) {\n      anchor.setAttribute('aria-describedby', this._idForAriaDescribedBy());\n      this._showTooltip(anchor.getBoundingClientRect(), content);\n    }\n  }\n\n  private _showTooltip(anchorBoundingBox: Omit<DOMRect, 'toJSON'>, content: Node) {\n    this._tooltip = this._host.nativeElement.firstElementChild as HTMLDivElement;\n    this._tooltip.style.visibility = 'hidden';\n    document.body.appendChild(this._host.nativeElement);\n    this._tooltip.querySelector('.lc-tooltip__content')?.appendChild(content);\n\n    this._isVisible = true;\n\n    switch (this._placement) {\n      case 'vertical':\n        this._showBottom(anchorBoundingBox);\n        break;\n      case 'horizontal':\n        this._showRight(anchorBoundingBox);\n        break;\n\n      default:\n        throw new Error(`Invalid placement: ${String(this._placement)}`);\n    }\n  }\n\n  private _showBottom(anchorBoundingBox: Omit<DOMRect, 'toJSON'>) {\n    this._tooltip.classList.add('bottom-anchored');\n\n    setTimeout(() => {\n      const tooltipBoundingBox = this._tooltip.getBoundingClientRect();\n      const arrowHeight = 15;\n      const spaceBetweenArrowAndAnchor = 10;\n      // The tooltip will be placed centered horizontally with the anchor.\n      const tooltipLeft = anchorBoundingBox.left + (anchorBoundingBox.width - tooltipBoundingBox.width) / 2;\n      let tooltipTop = anchorBoundingBox.bottom + spaceBetweenArrowAndAnchor;\n      const isOverflowingBottomEdgeOfViewport =\n        tooltipTop + arrowHeight + tooltipBoundingBox.height + spaceBetweenArrowAndAnchor >= window.innerHeight;\n\n      /**\n       * If the tooltip overflows the bottom of the viewport, we want to shift the tooltip to the top of the anchor,\n       * but if this shifting causes the tooltip to overflow the top of the viewport which is when `tooltipTop`\n       * is negative, then we want to limit the height of the tooltip to the distance between the anchor's top\n       * position and the viewport's top edge minus some spacing.\n       */\n      if (isOverflowingBottomEdgeOfViewport) {\n        tooltipTop = anchorBoundingBox.top - tooltipBoundingBox.height - spaceBetweenArrowAndAnchor;\n\n        if (tooltipTop < 0) {\n          const newTooltipHeight = anchorBoundingBox.top - spaceBetweenArrowAndAnchor * 1.5;\n\n          this._tooltip.style.height = `${newTooltipHeight}px`;\n          tooltipTop = spaceBetweenArrowAndAnchor / 2;\n        }\n\n        this._tooltip.classList.remove('bottom-anchored');\n        this._tooltip.classList.add('top-anchored');\n      }\n\n      const horizontalDifference =\n        this._calculateRightEdgeOverflowingDistance(tooltipLeft, tooltipBoundingBox.width) ||\n        this._calculateLeftEdgeOverflowingDistance(tooltipLeft);\n      this._tooltip.style.left = `${tooltipLeft - horizontalDifference}px`;\n      this._tooltip.style.top = `${tooltipTop}px`;\n\n      this._tooltip.classList.add('is-entering');\n    }, 64);\n  }\n\n  /**\n   * Returns a value greater than 0 for the overflowing distance\n   * if tooltip box overflows the right edge of the screen, 0 otherwise\n   */\n  private _calculateRightEdgeOverflowingDistance(left: number, width: number) {\n    const spacing = 5;\n    const difference = left + width - window.innerWidth + spacing;\n\n    if (difference > spacing) {\n      this._tooltip.querySelector<HTMLElement>('.lc-tooltip__arrow')!.style.left = `calc(50% + ${difference}px)`;\n\n      return difference;\n    }\n\n    return 0;\n  }\n\n  /**\n   * Returns a value greater than 0 for the overflowing distance\n   * if tooltip box overflows the left edge of the screen, 0 otherwise\n   */\n  private _calculateLeftEdgeOverflowingDistance(left: number) {\n    if (left < 0) {\n      const spacing = 5;\n      const newLeft = `calc(50% - ${Math.abs(left) + spacing}px)`;\n\n      this._tooltip.querySelector<HTMLElement>('.lc-tooltip__arrow')!.style.left = newLeft;\n\n      return left - spacing;\n    }\n\n    return 0;\n  }\n\n  private _showRight(anchorBoundingBox: Omit<DOMRect, 'toJSON'>) {\n    this._tooltip.classList.add('right-anchored');\n\n    setTimeout(() => {\n      const tooltipBoundingBox = this._tooltip.getBoundingClientRect();\n      const spaceBetweenArrowAndAnchor = 10;\n      const arrowWidth = 15;\n      // The tooltip will be placed centered vertically with the anchor.\n      const tooltipTop = anchorBoundingBox.top + (anchorBoundingBox.height - tooltipBoundingBox.height) / 2;\n      let tooltipLeft = anchorBoundingBox.right + 10;\n\n      const isOverflowingRightEdgeOfViewport =\n        anchorBoundingBox.right + arrowWidth + tooltipBoundingBox.width + spaceBetweenArrowAndAnchor >=\n        window.innerWidth;\n\n      /**\n       * If the tooltip overflows the right edge of the viewport, we want to shift the tooltip to the left\n       * of the anchor, but if this shifting causes the tooltip to overflow the left edge of the viewport\n       * which is when `tooltipLeft` is negative, then we want to limit the width of the tooltip to\n       * the distance between the anchor's left position and the viewport's left edge minus some spacing.\n       */\n      if (isOverflowingRightEdgeOfViewport) {\n        tooltipLeft = anchorBoundingBox.left - tooltipBoundingBox.width - spaceBetweenArrowAndAnchor;\n\n        if (tooltipLeft < 0) {\n          const newTooltipWidth = anchorBoundingBox.left - spaceBetweenArrowAndAnchor * 1.5;\n\n          this._tooltip.style.width = `${newTooltipWidth}px`;\n          tooltipLeft = spaceBetweenArrowAndAnchor / 2;\n        }\n\n        this._tooltip.classList.remove('right-anchored');\n        this._tooltip.classList.add('left-anchored');\n      } else {\n        /**\n         * If the tooltip overflows the right edge of viewport, we want to shrink\n         * its width by the amount of overflowing distance and some spacing.\n         */\n        const effectiveTooltipRight = tooltipLeft + tooltipBoundingBox.width;\n        const differenceBetweenTooltipRightAndViewportRight = effectiveTooltipRight - window.innerWidth;\n\n        if (differenceBetweenTooltipRightAndViewportRight > 0) {\n          const newTooltipWidth =\n            tooltipBoundingBox.width - differenceBetweenTooltipRightAndViewportRight - spaceBetweenArrowAndAnchor / 2;\n          this._tooltip.style.width = `${newTooltipWidth}px`;\n        }\n      }\n\n      const horizontalDifference =\n        this._calculateRightEdgeOverflowingDistance(tooltipLeft, tooltipBoundingBox.width) ||\n        this._calculateLeftEdgeOverflowingDistance(tooltipLeft);\n      this._tooltip.style.left = `${tooltipLeft - horizontalDifference}px`;\n      this._tooltip.style.top = `${tooltipTop}px`;\n\n      this._isVisible = true;\n\n      this._tooltip.classList.add('is-entering');\n    }, 250);\n  }\n\n  /**\n   * Show a tooltip at the specified x/y location.\n   */\n  showAt(x: number, y: number, content: Node) {\n    const anchorBoundingBox: Omit<DOMRect, 'toJSON'> = {\n      bottom: y + 1,\n      height: 1,\n      left: x,\n      right: x + 1,\n      top: y,\n      width: 1,\n      x,\n      y\n    };\n\n    this._showTooltip(anchorBoundingBox, content);\n  }\n\n  protected _onPreventClickBubbling(event: MouseEvent) {\n    event.stopPropagation();\n  }\n\n  /**\n   * @private To be used by template\n   */\n  protected _onAnimationDone() {\n    if (!this._isVisible && this._afterClosedListener) {\n      this._afterClosedListener();\n    }\n  }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<div\n    class=\"lc-tooltip {{ _theme() }}-theme{{ _className() ? ' ' + _className() : '' }}\"\n    (animationend)=\"_onAnimationDone()\"\n    (click)=\"_onPreventClickBubbling($event)\">\n    <div class=\"lc-tooltip__arrow\"></div>\n    <div\n        class=\"lc-tooltip__content\"\n        role=\"tooltip\"\n        [id]=\"_idForAriaDescribedBy()\"\n        [innerHTML]=\"_content()\"></div>\n</div>\n","import { TooltipComponent } from './tooltip.component';\n\nexport class TooltipRef {\n  constructor(private readonly _tooltipInstance: TooltipComponent) {}\n\n  hide() {\n    this._tooltipInstance.hide();\n  }\n}\n","import {\n  ApplicationRef,\n  ComponentRef,\n  createComponent,\n  EmbeddedViewRef,\n  inject,\n  Injectable,\n  TemplateRef\n} from '@angular/core';\n\nimport { Theme } from './theme';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipConfiguration } from './tooltip-configuration';\nimport { TooltipRef } from './tooltip-ref';\n\n/**\n * This class allows to programmatically show a tooltip anchored at an element.\n * See {@see TooltipConfiguration} for the different options to configure the tooltip.\n * Please note that even though this class can create as many tooltips as desired,\n * it cannot selectively close a tooltip, it can only close all currently opened tooltips.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class TooltipService {\n  private static _defaultTheme: Theme = 'light';\n\n  private readonly _openedTooltips = new Set<TooltipRef>();\n  private readonly _applicationRef = inject(ApplicationRef);\n\n  /**\n   * Set the default theme that will be used for all tooltips created in the future.\n   *\n   * @param theme The new theme to be used as the default.\n   */\n  static setDefaultTheme(theme: Theme) {\n    TooltipService._defaultTheme = theme;\n  }\n\n  /**\n   * Show a tooltip anchored at `anchor` with a configuration object specified by `configuration`.\n   * Ensure that the last opened tooltip has been closed before calling this method.\n   *\n   * @param anchor The target at which to place the tooltip.\n   * @param configuration The configuration object for this tooltip instance.\n   */\n  show(anchor: Element, configuration: TooltipConfiguration) {\n    const result = this._prepareTooltip(configuration);\n\n    result.tooltipComponentRef.instance.show(anchor, result.content.content);\n\n    const tooltipRef = new TooltipRef(result.tooltipComponentRef.instance);\n    this._openedTooltips.add(tooltipRef);\n\n    return tooltipRef;\n  }\n\n  private _prepareTooltip(configuration: TooltipConfiguration) {\n    const tooltipComponentRef = createComponent(TooltipComponent, {\n      environmentInjector: this._applicationRef.injector\n    });\n\n    const createdContent = this._createContent(configuration);\n\n    if (configuration.className) {\n      tooltipComponentRef.instance.setClassName(configuration.className);\n    }\n\n    if (configuration.placement) {\n      tooltipComponentRef.instance.setPlacement(configuration.placement);\n    }\n\n    tooltipComponentRef.instance.setTheme(configuration.theme ?? TooltipService._defaultTheme);\n\n    tooltipComponentRef.instance.setAfterClosedListener(() => {\n      document.body.removeChild(tooltipComponentRef.location.nativeElement);\n      this._applicationRef.detachView(tooltipComponentRef.hostView);\n      tooltipComponentRef.destroy();\n      createdContent.ref?.destroy();\n    });\n\n    this._applicationRef.attachView(tooltipComponentRef.hostView);\n\n    tooltipComponentRef.changeDetectorRef.detectChanges();\n\n    return {\n      content: createdContent,\n      tooltipComponentRef\n    };\n  }\n\n  private _createContent(configuration: TooltipConfiguration): {\n    content: Node;\n    ref: null | ComponentRef<unknown> | EmbeddedViewRef<unknown>;\n  } {\n    if (typeof configuration.content === 'string') {\n      return {\n        content: document.createTextNode(configuration.content),\n        ref: null\n      };\n    }\n\n    if (configuration.content instanceof TemplateRef) {\n      const embeddedView = configuration.content.createEmbeddedView(configuration.context ?? {});\n\n      this._applicationRef.attachView(embeddedView);\n\n      embeddedView.detectChanges();\n\n      return {\n        /**\n         * If the markups inside the provided template ref aren't being wrapped inside\n         * a containing DOM element, then there will be multiple root nodes, in this case,\n         * we want to add them all as the content by appending them to a document fragment\n         */\n        content: (embeddedView.rootNodes as Element[]).reduce((contentRoot, next) => {\n          contentRoot.appendChild(next);\n\n          return contentRoot;\n        }, document.createDocumentFragment()),\n\n        ref: embeddedView\n      };\n    }\n\n    const componentRef = createComponent(configuration.content, { environmentInjector: this._applicationRef.injector });\n\n    this._applicationRef.attachView(componentRef.hostView);\n\n    return {\n      content: componentRef.location.nativeElement as Element,\n      ref: componentRef\n    };\n  }\n\n  /**\n   * Show a tooltip anchored at the provided x/y coordinates with a configuration object specified by `configuration`.\n   * Ensure that the last opened tooltip has been closed before calling this method.\n   *\n   * @param x The x coordinate to place the tooltip.\n   * @param y The y coordinate to place the tooltip.\n   * @param configuration The configuration object for this tooltip instance.\n   */\n  showAt(x: number, y: number, configuration: TooltipConfiguration) {\n    const result = this._prepareTooltip(configuration);\n\n    result.tooltipComponentRef.instance.showAt(x, y, result.content.content);\n\n    const tooltipRef = new TooltipRef(result.tooltipComponentRef.instance);\n    this._openedTooltips.add(tooltipRef);\n\n    return tooltipRef;\n  }\n\n  /**\n   * Hide all opened tooltips.\n   */\n  hideAll() {\n    for (const openedTooltip of this._openedTooltips) {\n      openedTooltip.hide();\n    }\n\n    this._openedTooltips.clear();\n  }\n}\n","export function isMobile() {\n  return /iPhone|iPad|iPod|Android|SamsungBrowser|Mobile/i.test(navigator.userAgent);\n}\n","import { Subject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\n\nexport function watchForLongPress(target: HTMLElement) {\n  let timeoutId: number;\n  const notifier = new Subject<PointerEvent>();\n\n  const pointerdown = (event: PointerEvent) => {\n    timeoutId = window.setTimeout(() => {\n      notifier.next(event);\n    }, 500);\n  };\n\n  const pointerup = () => {\n    window.clearTimeout(timeoutId);\n  };\n\n  target.addEventListener('pointerdown', pointerdown, false);\n  window.addEventListener('pointerup', pointerup, false);\n\n  target.oncontextmenu = event => {\n    event.preventDefault();\n  };\n\n  return notifier.pipe(\n    finalize(() => {\n      target.removeEventListener('pointerdown', pointerdown, false);\n      window.removeEventListener('pointerup', pointerup, false);\n    })\n  );\n}\n","import { afterNextRender, DestroyRef, Directive, ElementRef, HostListener, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { TooltipService } from './tooltip.service';\nimport { TooltipConfiguration } from './tooltip-configuration';\nimport { TooltipRef } from './tooltip-ref';\nimport { isMobile, watchForLongPress } from './utils';\n\n@Directive({\n  selector: '[lcTooltip]'\n})\nexport class TooltipDirective {\n  readonly content = input.required<TooltipConfiguration['content']>({ alias: 'lcTooltip' });\n\n  readonly placement = input<TooltipConfiguration['placement']>('vertical', { alias: 'lcTooltipPlacement' });\n  readonly theme = input<TooltipConfiguration['theme']>(undefined, { alias: 'lcTooltipTheme' });\n  readonly shouldShowWhenDisabled = input(false, { alias: 'lcTooltipShowWhenDisabled' });\n\n  private readonly _hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef, { host: true });\n  private readonly _tooltipService = inject(TooltipService);\n\n  private _isLongPressing = false;\n  private _tooltipRef?: TooltipRef;\n\n  constructor() {\n    const destroyRef = inject(DestroyRef);\n\n    afterNextRender({\n      write: () => {\n        destroyRef.onDestroy(() => {\n          this._tooltipService.hideAll();\n        });\n\n        if (isMobile()) {\n          watchForLongPress(this._hostElementRef.nativeElement)\n            .pipe(takeUntilDestroyed(destroyRef))\n            .subscribe({\n              next: event => {\n                this._isLongPressing = true;\n                this._showTooltip(event);\n              }\n            });\n        }\n      }\n    });\n  }\n\n  private _showTooltip(event: MouseEvent | KeyboardEvent | PointerEvent) {\n    event.stopPropagation();\n\n    const tooltipAnchor = event.target as Element;\n\n    // Only show the tooltip if the content is present and the anchor is not disabled\n    // or if the tooltip should be shown when disabled\n    if (\n      this.content() &&\n      (!('disabled' in tooltipAnchor) || !tooltipAnchor.disabled || this.shouldShowWhenDisabled())\n    ) {\n      this._tooltipRef = this._tooltipService.show(tooltipAnchor, {\n        content: this.content(),\n        placement: this.placement(),\n        theme: this.theme()\n      });\n    }\n  }\n\n  private _hideTooltip(event: MouseEvent | KeyboardEvent) {\n    event.stopPropagation();\n\n    this._tooltipRef?.hide();\n  }\n\n  /**\n   * Tooltip is only shown on pointerover events iff we are not on a mobile device\n   */\n  @HostListener('pointerover', ['$event'])\n  protected _onShowTooltipOnHover(event: MouseEvent) {\n    if (!isMobile()) {\n      this._showTooltip(event);\n    }\n  }\n\n  @HostListener('keyup', ['$event'])\n  protected _onShowTooltipOnFocus(event: KeyboardEvent) {\n    if (document.activeElement === this._hostElementRef.nativeElement) {\n      this._showTooltip(event);\n    }\n  }\n\n  @HostListener('pointerout', ['$event'])\n  @HostListener('blur', ['$event'])\n  @HostListener('click', ['$event'])\n  protected _onHideTooltip(event: MouseEvent | KeyboardEvent) {\n    if (!this._isLongPressing) {\n      this._hideTooltip(event);\n    }\n  }\n\n  @HostListener('window:pointerup', ['$event'])\n  protected _onHideTooltipOnWindowPointerUp(event: PointerEvent) {\n    if (this._isLongPressing && event.target !== this._hostElementRef.nativeElement) {\n      this._hideTooltip(event);\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}