@ngx-performance-ui/ui
Version:
Ngx Performance UI - UI
248 lines • 19.6 kB
JavaScript
/**
* @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==