{"version":3,"file":"ng-doc-ui-kit-directives-tooltip.mjs","sources":["../../../../libs/ui-kit/directives/tooltip/tooltip.directive.ts","../../../../libs/ui-kit/directives/tooltip/ng-doc-ui-kit-directives-tooltip.ts"],"sourcesContent":["import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  Output,\n  ViewContainerRef,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { asArray } from '@ng-doc/core/helpers/as-array';\nimport { isPresent } from '@ng-doc/core/helpers/is-present';\nimport { tooltipCloseAnimation, tooltipOpenAnimation } from '@ng-doc/ui-kit/animations';\nimport { NgDocOverlayRef } from '@ng-doc/ui-kit/classes/overlay-ref';\nimport { NgDocOverlayContainerComponent } from '@ng-doc/ui-kit/components/overlay-container';\nimport { toElement } from '@ng-doc/ui-kit/helpers';\nimport { ngDocZoneDetach, ngDocZoneOptimize } from '@ng-doc/ui-kit/observables';\nimport { NgDocOverlayService } from '@ng-doc/ui-kit/services';\nimport { NgDocOverlayStrategy } from '@ng-doc/ui-kit/services/overlay-strategy';\nimport { BaseElement, NgDocContent, NgDocOverlayPosition } from '@ng-doc/ui-kit/types';\nimport { NgDocOverlayUtils } from '@ng-doc/ui-kit/utils';\nimport { EMPTY, fromEvent, merge, timer } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\n\n@Directive({\n  selector: '[ngDocTooltip]',\n  exportAs: 'ngDocTooltip',\n  standalone: true,\n})\nexport class NgDocTooltipDirective implements AfterViewInit, OnDestroy {\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly changeDetectorRef = inject(ChangeDetectorRef);\n  private readonly viewContainerRef = inject(ViewContainerRef);\n  private readonly overlayService = inject(NgDocOverlayService);\n  private readonly ngZone = inject(NgZone);\n  private readonly scrollStrategy = inject(NgDocOverlayStrategy);\n\n  @Input('ngDocTooltip')\n  content: NgDocContent = '';\n\n  @Input()\n  delay: number = 500;\n\n  @Input()\n  displayOrigin?: BaseElement<HTMLElement>;\n\n  @Input()\n  pointerOrigin?: BaseElement<HTMLElement>;\n\n  @Input()\n  positions: NgDocOverlayPosition | NgDocOverlayPosition[] = [\n    'top-center',\n    'bottom-center',\n    'right-center',\n    'left-center',\n  ];\n\n  @Input()\n  canOpen: boolean = true;\n\n  @Input()\n  panelClass: string | string[] = '';\n\n  @Input()\n  minHeight: number | string = '';\n\n  @Input()\n  maxHeight: number | string = '';\n\n  @Input()\n  height: number | string = '';\n\n  @Input()\n  minWidth: number | string = '';\n\n  @Input()\n  maxWidth: number | string = '';\n\n  @Input()\n  width: number | string = '';\n\n  @Output()\n  beforeOpen: EventEmitter<void> = new EventEmitter<void>();\n\n  @Output()\n  afterOpen: EventEmitter<void> = new EventEmitter<void>();\n\n  @Output()\n  beforeClose: EventEmitter<void> = new EventEmitter<void>();\n\n  @Output()\n  afterClose: EventEmitter<void> = new EventEmitter<void>();\n\n  overlayRef: NgDocOverlayRef | null = null;\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    // Opens tooltip with delay\n    fromEvent(this.pointerOriginElement, 'mouseenter')\n      .pipe(\n        filter(() => this.canOpen && !this.isOpened),\n        switchMap(() =>\n          timer(this.delay).pipe(takeUntil(fromEvent(this.pointerOriginElement, 'mouseleave'))),\n        ),\n        ngDocZoneOptimize(this.ngZone),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe(() => this.show());\n\n    // Closes tooltip when mouseleave was fired, and cancel closing if mouseenter was happened\n    merge(\n      fromEvent(this.pointerOriginElement, 'mouseleave'),\n      this.beforeOpen.pipe(\n        switchMap(() =>\n          isPresent(this.overlayRef)\n            ? fromEvent(this.overlayRef.overlayRef.overlayElement, 'mouseleave')\n            : EMPTY,\n        ),\n      ),\n    )\n      .pipe(\n        filter(() => this.isOpened),\n        switchMap(() =>\n          timer(50).pipe(\n            takeUntil(fromEvent(this.pointerOriginElement, 'mouseenter')),\n            takeUntil(\n              isPresent(this.overlayRef)\n                ? fromEvent(this.overlayRef.overlayRef.overlayElement, 'mouseenter')\n                : EMPTY,\n            ),\n          ),\n        ),\n        ngDocZoneOptimize(this.ngZone),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe(() => this.hide());\n  }\n\n  show(): void {\n    if (!this.isOpened) {\n      this.overlayRef = this.overlayService.open(this.content, {\n        origin: this.displayOriginElement,\n        overlayContainer: NgDocOverlayContainerComponent,\n        positionStrategy: this.overlayService.connectedPositionStrategy(\n          this.displayOriginElement,\n          this.getPositions(this.positions),\n        ),\n        viewContainerRef: this.viewContainerRef,\n        withPointer: true,\n        contactBorder: true,\n        panelClass: ['ng-doc-tooltip', ...asArray(this.panelClass)],\n        height: this.height,\n        width: this.width,\n        minHeight: this.minHeight,\n        minWidth: this.minWidth,\n        maxHeight: this.maxHeight,\n        maxWidth: this.maxWidth,\n        scrollStrategy: this.scrollStrategy,\n        disposeOnRouteNavigation: true,\n        openAnimation: tooltipOpenAnimation,\n        closeAnimation: tooltipCloseAnimation,\n      });\n      this.beforeOpen.emit();\n\n      this.overlayRef\n        ?.afterOpen()\n        .pipe(ngDocZoneDetach(this.ngZone))\n        .subscribe(() => this.afterOpen.emit());\n\n      this.overlayRef\n        ?.beforeClose()\n        .pipe(ngDocZoneDetach(this.ngZone))\n        .subscribe(() => this.beforeClose.emit());\n\n      this.overlayRef\n        ?.afterClose()\n        .pipe(ngDocZoneDetach(this.ngZone))\n        .subscribe(() => this.afterClose.emit());\n\n      this.overlayRef?.beforeClose().subscribe(() => this.hide());\n\n      this.changeDetectorRef.markForCheck();\n    }\n  }\n\n  hide(): void {\n    if (this.isOpened) {\n      this.overlayRef?.close();\n      this.overlayRef = null;\n      this.changeDetectorRef.markForCheck();\n    }\n  }\n\n  get isOpened(): boolean {\n    return !!this.overlayRef;\n  }\n\n  ngOnDestroy(): void {\n    if (this.overlayRef) {\n      this.overlayRef.overlayRef.dispose();\n    }\n  }\n\n  private get pointerOriginElement(): HTMLElement {\n    return isPresent(this.pointerOrigin)\n      ? toElement(this.pointerOrigin)\n      : toElement(this.elementRef);\n  }\n\n  private get displayOriginElement(): HTMLElement {\n    return isPresent(this.displayOrigin)\n      ? toElement(this.displayOrigin)\n      : toElement(this.elementRef);\n  }\n\n  private getPositions(\n    positions: NgDocOverlayPosition | NgDocOverlayPosition[],\n  ): NgDocOverlayPosition[] {\n    return NgDocOverlayUtils.getConnectedPosition(\n      !!positions && asArray(positions).length\n        ? positions\n        : ['bottom-center', 'top-center', 'right-center', 'left-center'],\n      this.displayOriginElement,\n      0,\n      true,\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}