UNPKG

@ng-doc/ui-kit

Version:

<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>

1 lines 12.7 kB
{"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":";;;;;;;;;;;;;;;MAkCa,qBAAqB,CAAA;AAoEhC,IAAA,WAAA,GAAA;AAnEiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACxD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC5C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAG9D,IAAA,CAAA,OAAO,GAAiB,EAAE;QAG1B,IAAA,CAAA,KAAK,GAAW,GAAG;AASnB,QAAA,IAAA,CAAA,SAAS,GAAkD;YACzD,YAAY;YACZ,eAAe;YACf,cAAc;YACd,aAAa;SACd;QAGD,IAAA,CAAA,OAAO,GAAY,IAAI;QAGvB,IAAA,CAAA,UAAU,GAAsB,EAAE;QAGlC,IAAA,CAAA,SAAS,GAAoB,EAAE;QAG/B,IAAA,CAAA,SAAS,GAAoB,EAAE;QAG/B,IAAA,CAAA,MAAM,GAAoB,EAAE;QAG5B,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAG9B,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAG9B,IAAA,CAAA,KAAK,GAAoB,EAAE;AAG3B,QAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,YAAY,EAAQ;AAGzD,QAAA,IAAA,CAAA,SAAS,GAAuB,IAAI,YAAY,EAAQ;AAGxD,QAAA,IAAA,CAAA,WAAW,GAAuB,IAAI,YAAY,EAAQ;AAG1D,QAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,YAAY,EAAQ;QAEzD,IAAA,CAAA,UAAU,GAA2B,IAAI;AAExB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEjC;IAEf,eAAe,GAAA;;AAEb,QAAA,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY;aAC9C,IAAI,CACH,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5C,SAAS,CAAC,MACR,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC,CACtF,EACD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAC9B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;;QAG/B,KAAK,CACH,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,EAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,SAAS,CAAC,MACR,SAAS,CAAC,IAAI,CAAC,UAAU;AACvB,cAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,YAAY;AACnE,cAAE,KAAK,CACV,CACF;AAEA,aAAA,IAAI,CACH,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAC3B,SAAS,CAAC,MACR,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACZ,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,EAC7D,SAAS,CACP,SAAS,CAAC,IAAI,CAAC,UAAU;AACvB,cAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,YAAY;AACnE,cAAE,KAAK,CACV,CACF,CACF,EACD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAC9B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvD,MAAM,EAAE,IAAI,CAAC,oBAAoB;AACjC,gBAAA,gBAAgB,EAAE,8BAA8B;AAChD,gBAAA,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAC7D,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAClC;gBACD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,aAAa,EAAE,IAAI;gBACnB,UAAU,EAAE,CAAC,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3D,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,cAAc,EAAE,IAAI,CAAC,cAAc;AACnC,gBAAA,wBAAwB,EAAE,IAAI;AAC9B,gBAAA,aAAa,EAAE,oBAAoB;AACnC,gBAAA,cAAc,EAAE,qBAAqB;AACtC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAEtB,YAAA,IAAI,CAAC;AACH,kBAAE,SAAS;AACV,iBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;iBACjC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAEzC,YAAA,IAAI,CAAC;AACH,kBAAE,WAAW;AACZ,iBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;iBACjC,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAE3C,YAAA,IAAI,CAAC;AACH,kBAAE,UAAU;AACX,iBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;iBACjC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAE1C,YAAA,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAE3D,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACvC;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACvC;IACF;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU;IAC1B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE;QACtC;IACF;AAEA,IAAA,IAAY,oBAAoB,GAAA;AAC9B,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,aAAa;AACjC,cAAE,SAAS,CAAC,IAAI,CAAC,aAAa;AAC9B,cAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;IAChC;AAEA,IAAA,IAAY,oBAAoB,GAAA;AAC9B,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,aAAa;AACjC,cAAE,SAAS,CAAC,IAAI,CAAC,aAAa;AAC9B,cAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;IAChC;AAEQ,IAAA,YAAY,CAClB,SAAwD,EAAA;AAExD,QAAA,OAAO,iBAAiB,CAAC,oBAAoB,CAC3C,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,cAAE;AACF,cAAE,CAAC,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,EAClE,IAAI,CAAC,oBAAoB,EACzB,CAAC,EACD,IAAI,CACL;IACH;8GAxMW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,SAAA,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBASE,KAAK;uBAAC,cAAc;;sBAGpB;;sBAGA;;sBAGA;;sBAGA;;sBAQA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;AC/FH;;AAEG;;;;"}