UNPKG

@ngx-performance-ui/ui

Version:
248 lines 19.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { ApplicationRef, ComponentFactoryResolver, Directive, ElementRef, Injector, Input, ReflectiveInjector, Renderer2, ViewContainerRef, } from '@angular/core'; import { Select, Store, Actions, ofActionDispatched } from '@ngxs/store'; import { Observable, Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; import { TooltipComponent } from '../components'; import { createProjectableNode } from '../utils'; import { EventListenerRemove, EventListenerAdd, EventListenerScrollVertical, takeUntilDestroy, takeUntilNotNull, EventListenerState, } from '@ngx-performance-ui/core'; var TooltipDirective = /** @class */ (function () { function TooltipDirective(actions, appRef, elRef, injector, renderer, resolver, vcRef, store) { this.actions = actions; this.appRef = appRef; this.elRef = elRef; this.injector = injector; this.renderer = renderer; this.resolver = resolver; this.vcRef = vcRef; this.store = store; this.context = {}; this.placement = 'top'; this.trigger = 'mousemove'; this.destroy$ = new Subject(); } Object.defineProperty(TooltipDirective.prototype, "containerRect", { get: /** * @return {?} */ function () { return ((/** @type {?} */ (((/** @type {?} */ (this.tooltip.location.nativeElement))).childNodes[0]))).getBoundingClientRect(); }, enumerable: true, configurable: true }); /** * @return {?} */ TooltipDirective.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; (this.trigger === 'mousemove' ? this.mousemove$ : this.click$) .pipe(takeUntilDestroy(this), filter((/** * @param {?} event * @return {?} */ function (event) { return !!event; }))) .subscribe((/** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var onMouseContainerOver = false; if (_this.tooltip) { _this.tooltip.hostView.detectChanges(); var _a = _this.containerRect, top_1 = _a.top, bottom = _a.bottom, left = _a.left, right = _a.right; var x = event.x, y = event.y; onMouseContainerOver = top_1 < y && bottom > y && left < x && right > x; } if (!_this.tooltip && _this.elRef.nativeElement.contains(event.target)) { _this.show(); } else if (_this.tooltip && !_this.elRef.nativeElement.contains(event.target) && !onMouseContainerOver) { _this.hide(); } })); }; /** * @return {?} */ TooltipDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.hide(); }; /** * @return {?} */ TooltipDirective.prototype.show = /** * @return {?} */ function () { /** @type {?} */ var element = (/** @type {?} */ (this.elRef.nativeElement)); /** @type {?} */ var injector = ReflectiveInjector.resolveAndCreate([ { provide: 'TOOLTIP_PROVIDER', useValue: (/** @type {?} */ ({ element: element, placement: this.placement })) }, ]); /** @type {?} */ var projectableNode = createProjectableNode.call(this, this.content); this.tooltip = this.resolver.resolveComponentFactory(TooltipComponent).create(injector, [projectableNode]); this.appRef.attachView(this.tooltip.hostView); this.renderer.appendChild(this.renderer.selectRootElement('p-root', true), ((/** @type {?} */ (this.tooltip.hostView))).rootNodes[0]); this.subscribeTo(); }; /** * @return {?} */ TooltipDirective.prototype.hide = /** * @return {?} */ function () { if (this.tooltip) { this.tooltip.destroy(); this.tooltip = null; } this.destroy$.next(); this.store.dispatch(new EventListenerRemove('resize')); }; /** * @return {?} */ TooltipDirective.prototype.subscribeTo = /** * @return {?} */ function () { var _this = this; this.store.dispatch(new EventListenerAdd('resize')); this.resize$ .pipe(filter((/** * @param {?} event * @return {?} */ function (event) { return !!event; })), takeUntilNotNull(this.destroy$)) .subscribe((/** * @param {?} _ * @return {?} */ function (_) { return _this.hide(); })); this.actions .pipe(ofActionDispatched(EventListenerScrollVertical), takeUntilNotNull(this.destroy$)) .subscribe((/** * @param {?} _ * @return {?} */ function (_) { return _this.hide(); })); }; TooltipDirective.decorators = [ { type: Directive, args: [{ selector: '[pTooltip]', exportAs: 'pTooltip', },] } ]; /** @nocollapse */ TooltipDirective.ctorParameters = function () { return [ { type: Actions }, { type: ApplicationRef }, { type: ElementRef }, { type: Injector }, { type: Renderer2 }, { type: ComponentFactoryResolver }, { type: ViewContainerRef }, { type: Store } ]; }; TooltipDirective.propDecorators = { content: [{ type: Input, args: ['pTooltip',] }], context: [{ type: Input, args: ['pTooltipContext',] }], placement: [{ type: Input, args: ['pTooltipPlacement',] }], trigger: [{ type: Input, args: ['pTooltipTrigger',] }] }; tslib_1.__decorate([ Select(EventListenerState.getOne('mousemove')), tslib_1.__metadata("design:type", Observable) ], TooltipDirective.prototype, "mousemove$", void 0); tslib_1.__decorate([ Select(EventListenerState.getOne('click')), tslib_1.__metadata("design:type", Observable) ], TooltipDirective.prototype, "click$", void 0); tslib_1.__decorate([ Select(EventListenerState.getOne('resize')), tslib_1.__metadata("design:type", Observable) ], TooltipDirective.prototype, "resize$", void 0); return TooltipDirective; }()); export { TooltipDirective }; if (false) { /** @type {?} */ TooltipDirective.prototype.content; /** @type {?} */ TooltipDirective.prototype.context; /** @type {?} */ TooltipDirective.prototype.placement; /** @type {?} */ TooltipDirective.prototype.trigger; /** @type {?} */ TooltipDirective.prototype.mousemove$; /** @type {?} */ TooltipDirective.prototype.click$; /** @type {?} */ TooltipDirective.prototype.resize$; /** * @type {?} * @private */ TooltipDirective.prototype.tooltip; /** * @type {?} * @private */ TooltipDirective.prototype.destroy$; /** * @type {?} * @private */ TooltipDirective.prototype.actions; /** * @type {?} * @private */ TooltipDirective.prototype.appRef; /** * @type {?} * @private */ TooltipDirective.prototype.elRef; /** * @type {?} * @private */ TooltipDirective.prototype.injector; /** * @type {?} * @private */ TooltipDirective.prototype.renderer; /** * @type {?} * @private */ TooltipDirective.prototype.resolver; /** * @type {?} * @private */ TooltipDirective.prototype.vcRef; /** * @type {?} * @private */ TooltipDirective.prototype.store; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXBlcmZvcm1hbmNlLXVpL3VpLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvdG9vbHRpcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUV4QixTQUFTLEVBQ1QsVUFBVSxFQUVWLFFBQVEsRUFDUixLQUFLLEVBR0wsa0JBQWtCLEVBQ2xCLFNBQVMsRUFHVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDO0lBa0NFLDBCQUNVLE9BQWdCLEVBQ2hCLE1BQXNCLEVBQ3RCLEtBQWlCLEVBQ2pCLFFBQWtCLEVBQ2xCLFFBQW1CLEVBQ25CLFFBQWtDLEVBQ2xDLEtBQXVCLEVBQ3ZCLEtBQVk7UUFQWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25C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Qzs7Ozs7SUFDMUMsaUNBQStCOzs7OztJQUMvQixpQ0FBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZWZsZWN0aXZlSW5qZWN0b3IsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VsZWN0LCBTdG9yZSwgQWN0aW9ucywgb2ZBY3Rpb25EaXNwYXRjaGVkIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBjcmVhdGVQcm9qZWN0YWJsZU5vZGUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBFdmVudExpc3RlbmVyUmVtb3ZlLFxuICBFdmVudExpc3RlbmVyQWRkLFxuICBFdmVudExpc3RlbmVyU2Nyb2xsVmVydGljYWwsXG4gIHRha2VVbnRpbERlc3Ryb3ksXG4gIHRha2VVbnRpbE5vdE51bGwsXG4gIEV2ZW50TGlzdGVuZXJTdGF0ZSxcbn0gZnJvbSAnQG5neC1wZXJmb3JtYW5jZS11aS9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3BUb29sdGlwXScsXG4gIGV4cG9ydEFzOiAncFRvb2x0aXAnLFxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ3BUb29sdGlwJylcbiAgY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB8IFR5cGU8YW55PjtcblxuICBASW5wdXQoJ3BUb29sdGlwQ29udGV4dCcpXG4gIGNvbnRleHQ6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgncFRvb2x0aXBQbGFjZW1lbnQnKVxuICBwbGFjZW1lbnQ6ICd0b3AnIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nID0gJ3RvcCc7XG5cbiAgQElucHV0KCdwVG9vbHRpcFRyaWdnZXInKVxuICB0cmlnZ2VyOiAnbW91c2Vtb3ZlJyB8ICdjbGljaycgPSAnbW91c2Vtb3ZlJztcblxuICBAU2VsZWN0KEV2ZW50TGlzdGVuZXJTdGF0ZS5nZXRPbmUoJ21vdXNlbW92ZScpKVxuICBtb3VzZW1vdmUkOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIEBTZWxlY3QoRXZlbnRMaXN0ZW5lclN0YXRlLmdldE9uZSgnY2xpY2snKSlcbiAgY2xpY2skOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIEBTZWxlY3QoRXZlbnRMaXN0ZW5lclN0YXRlLmdldE9uZSgncmVzaXplJykpXG4gIHJlc2l6ZSQ6IE9ic2VydmFibGU8TW91c2VFdmVudD47XG5cbiAgcHJpdmF0ZSB0b29sdGlwOiBDb21wb25lbnRSZWY8VG9vbHRpcENvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0IGNvbnRhaW5lclJlY3QoKTogQ2xpZW50UmVjdCB7XG4gICAgcmV0dXJuICgodGhpcy50b29sdGlwLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNoaWxkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY3Rpb25zOiBBY3Rpb25zLFxuICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSB2Y1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgICh0aGlzLnRyaWdnZXIgPT09ICdtb3VzZW1vdmUnID8gdGhpcy5tb3VzZW1vdmUkIDogdGhpcy5jbGljayQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveSh0aGlzKSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+ICEhZXZlbnQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGxldCBvbk1vdXNlQ29udGFpbmVyT3ZlciA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy50b29sdGlwKSB7XG4gICAgICAgICAgdGhpcy50b29sdGlwLmhvc3RWaWV3LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICBjb25zdCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9ID0gdGhpcy5jb250YWluZXJSZWN0O1xuICAgICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gZXZlbnQ7XG4gICAgICAgICAgb25Nb3VzZUNvbnRhaW5lck92ZXIgPSB0b3AgPCB5ICYmIGJvdHRvbSA+IHkgJiYgbGVmdCA8IHggJiYgcmlnaHQgPiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRvb2x0aXAgJiYgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvb2x0aXAgJiYgIXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmICFvbk1vdXNlQ29udGFpbmVyT3Zlcikge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgc2hvdygpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGluamVjdG9yID0gUmVmbGVjdGl2ZUluamVjdG9yLnJlc29sdmVBbmRDcmVhdGUoW1xuICAgICAgeyBwcm92aWRlOiAnVE9PTFRJUF9QUk9WSURFUicsIHVzZVZhbHVlOiB7IGVsZW1lbnQsIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQgfSBhcyBUb29sdGlwLkNvbmZpZyB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHByb2plY3RhYmxlTm9kZSA9IGNyZWF0ZVByb2plY3RhYmxlTm9kZS5jYWxsKHRoaXMsIHRoaXMuY29udGVudCk7XG5cbiAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvb2x0aXBDb21wb25lbnQpLmNyZWF0ZShpbmplY3RvciwgW3Byb2plY3RhYmxlTm9kZV0pO1xuXG4gICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLnRvb2x0aXAuaG9zdFZpZXcpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KCdwLXJvb3QnLCB0cnVlKSxcbiAgICAgICh0aGlzLnRvb2x0aXAuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSxcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaWJlVG8oKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMudG9vbHRpcCkge1xuICAgICAgdGhpcy50b29sdGlwLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEV2ZW50TGlzdGVuZXJSZW1vdmUoJ3Jlc2l6ZScpKTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvKCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEV2ZW50TGlzdGVuZXJBZGQoJ3Jlc2l6ZScpKTtcblxuICAgIHRoaXMucmVzaXplJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihldmVudCA9PiAhIWV2ZW50KSxcbiAgICAgICAgdGFrZVVudGlsTm90TnVsbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB0aGlzLmhpZGUoKSk7XG5cbiAgICB0aGlzLmFjdGlvbnNcbiAgICAgIC5waXBlKFxuICAgICAgICBvZkFjdGlvbkRpc3BhdGNoZWQoRXZlbnRMaXN0ZW5lclNjcm9sbFZlcnRpY2FsKSxcbiAgICAgICAgdGFrZVVudGlsTm90TnVsbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB0aGlzLmhpZGUoKSk7XG4gIH1cbn1cbiJdfQ==