UNPKG

@taiga-ui/kit

Version:
70 lines 9.29 kB
import { __decorate, __param } from "tslib"; import { Directive, ElementRef, HostListener, Inject, OnDestroy, Output, } from '@angular/core'; import { USER_AGENT } from '@ng-web-apis/common'; import { isCurrentTarget, isFirefox, TuiDirectiveStylesService } from '@taiga-ui/cdk'; import { Subject } from 'rxjs'; import { distinctUntilChanged, skip, startWith } from 'rxjs/operators'; var STYLE = "\n@keyframes tuiPresent {\n from {\n content: '1';\n }\n\n to {\n content: '2';\n }\n}\n\n.tui-present {\n animation: tuiPresent 1000s infinite;\n}"; var TuiPresentDirective = /** @class */ (function () { function TuiPresentDirective(_a, directiveStyles, userAgent) { var _this = this; var nativeElement = _a.nativeElement; this.visibility$ = new Subject(); directiveStyles.addStyle(STYLE, 'TuiPresentDirective'); this.tuiPresentChange = this.visibility$.pipe(startWith(false), distinctUntilChanged(), skip(1)); if (isFirefox(userAgent)) { return; } this.observer = new MutationObserver(function () { if (!nativeElement.offsetParent && nativeElement.offsetWidth === 0 && nativeElement.offsetHeight === 0) { _this.visibility$.next(false); } }); this.observer.observe(nativeElement, { attributes: true, attributeFilter: ['style', 'class'], }); } /** * Someday animationcancel would work and mutation observer would not be needed: * https://drafts.csswg.org/css-animations/#eventdef-animationevent-animationcancel * It would also trigger on CSS like display: none on parent nodes which is awesome * but currently only works in Firefox */ TuiPresentDirective.prototype.onAnimation = function (event, visibility) { if (isCurrentTarget(event)) { this.visibility$.next(visibility); } }; TuiPresentDirective.prototype.ngOnDestroy = function () { this.visibility$.next(false); }; TuiPresentDirective.ctorParameters = function () { return [ { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }, { type: TuiDirectiveStylesService, decorators: [{ type: Inject, args: [TuiDirectiveStylesService,] }] }, { type: String, decorators: [{ type: Inject, args: [USER_AGENT,] }] } ]; }; __decorate([ Output() ], TuiPresentDirective.prototype, "tuiPresentChange", void 0); __decorate([ HostListener('animationcancel', ['$event', 'false']), HostListener('animationstart', ['$event', 'true']) ], TuiPresentDirective.prototype, "onAnimation", null); TuiPresentDirective = __decorate([ Directive({ selector: '[tuiPresentChange]', host: { class: 'tui-present', }, }), __param(0, Inject(ElementRef)), __param(1, Inject(TuiDirectiveStylesService)), __param(2, Inject(USER_AGENT)) ], TuiPresentDirective); return TuiPresentDirective; }()); export { TuiPresentDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkva2l0L2RpcmVjdGl2ZXMvcHJlc2VudC8iLCJzb3VyY2VzIjpbInByZXNlbnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLG9CQUFvQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRSxJQUFNLEtBQUssR0FBRyxrTEFhWixDQUFDO0FBUUg7SUFRSSw2QkFDd0IsRUFBd0MsRUFDekIsZUFBMEMsRUFDekQsU0FBaUI7UUFIekMsaUJBK0JDO1lBOUJ3QixnQ0FBYTtRQUxyQixnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFTbEQsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3pDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFDaEIsb0JBQW9CLEVBQUUsRUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNWLENBQUM7UUFFRixJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDakMsSUFDSSxDQUFDLGFBQWEsQ0FBQyxZQUFZO2dCQUMzQixhQUFhLENBQUMsV0FBVyxLQUFLLENBQUM7Z0JBQy9CLGFBQWEsQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUNsQztnQkFDRSxLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQ2pDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7U0FDdEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBR0gseUNBQVcsR0FBWCxVQUFZLEtBQVksRUFBRSxVQUFtQjtRQUN6QyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRCx5Q0FBVyxHQUFYO1FBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7Z0JBaER3QyxVQUFVLHVCQUE5QyxNQUFNLFNBQUMsVUFBVTtnQkFDa0MseUJBQXlCLHVCQUE1RSxNQUFNLFNBQUMseUJBQXlCOzZDQUNoQyxNQUFNLFNBQUMsVUFBVTs7SUFUdEI7UUFEQyxNQUFNLEVBQUU7aUVBQ3NDO0lBK0MvQztRQUZDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7MERBS2xEO0lBckRRLG1CQUFtQjtRQU4vQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsb0JBQW9CO1lBQzlCLElBQUksRUFBRTtnQkFDRixLQUFLLEVBQUUsYUFBYTthQUN2QjtTQUNKLENBQUM7UUFVTyxXQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsQixXQUFBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQ2pDLFdBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO09BWGQsbUJBQW1CLENBMEQvQjtJQUFELDBCQUFDO0NBQUEsQUExREQsSUEwREM7U0ExRFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVU0VSX0FHRU5UfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7aXNDdXJyZW50VGFyZ2V0LCBpc0ZpcmVmb3gsIFR1aURpcmVjdGl2ZVN0eWxlc1NlcnZpY2V9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIHNraXAsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBTVFlMRSA9IGBcbkBrZXlmcmFtZXMgdHVpUHJlc2VudCB7XG4gICAgZnJvbSB7XG4gICAgICAgIGNvbnRlbnQ6ICcxJztcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICAgIGNvbnRlbnQ6ICcyJztcbiAgICB9XG59XG5cbi50dWktcHJlc2VudCB7XG4gICAgYW5pbWF0aW9uOiB0dWlQcmVzZW50IDEwMDBzIGluZmluaXRlO1xufWA7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3R1aVByZXNlbnRDaGFuZ2VdJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndHVpLXByZXNlbnQnLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVByZXNlbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHR1aVByZXNlbnRDaGFuZ2U6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpc2liaWxpdHkkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRWxlbWVudFJlZikge25hdGl2ZUVsZW1lbnR9OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgQEluamVjdChUdWlEaXJlY3RpdmVTdHlsZXNTZXJ2aWNlKSBkaXJlY3RpdmVTdHlsZXM6IFR1aURpcmVjdGl2ZVN0eWxlc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoVVNFUl9BR0VOVCkgdXNlckFnZW50OiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIGRpcmVjdGl2ZVN0eWxlcy5hZGRTdHlsZShTVFlMRSwgJ1R1aVByZXNlbnREaXJlY3RpdmUnKTtcblxuICAgICAgICB0aGlzLnR1aVByZXNlbnRDaGFuZ2UgPSB0aGlzLnZpc2liaWxpdHkkLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzRmlyZWZveCh1c2VyQWdlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFuYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudCAmJlxuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5JC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKG5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnc3R5bGUnLCAnY2xhc3MnXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU29tZWRheSBhbmltYXRpb25jYW5jZWwgd291bGQgd29yayBhbmQgbXV0YXRpb24gb2JzZXJ2ZXIgd291bGQgbm90IGJlIG5lZWRlZDpcbiAgICAgKiBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWFuaW1hdGlvbnMvI2V2ZW50ZGVmLWFuaW1hdGlvbmV2ZW50LWFuaW1hdGlvbmNhbmNlbFxuICAgICAqIEl0IHdvdWxkIGFsc28gdHJpZ2dlciBvbiBDU1MgbGlrZSBkaXNwbGF5OiBub25lIG9uIHBhcmVudCBub2RlcyB3aGljaCBpcyBhd2Vzb21lXG4gICAgICogYnV0IGN1cnJlbnRseSBvbmx5IHdvcmtzIGluIEZpcmVmb3hcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdhbmltYXRpb25jYW5jZWwnLCBbJyRldmVudCcsICdmYWxzZSddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2FuaW1hdGlvbnN0YXJ0JywgWyckZXZlbnQnLCAndHJ1ZSddKVxuICAgIG9uQW5pbWF0aW9uKGV2ZW50OiBFdmVudCwgdmlzaWJpbGl0eTogYm9vbGVhbikge1xuICAgICAgICBpZiAoaXNDdXJyZW50VGFyZ2V0KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5JC5uZXh0KHZpc2liaWxpdHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eSQubmV4dChmYWxzZSk7XG4gICAgfVxufVxuIl19