UNPKG

@taiga-ui/kit

Version:
88 lines 12.9 kB
import { __decorate, __param } from "tslib"; import { DOCUMENT } from '@angular/common'; import { Directive, ElementRef, Inject, NgZone, Renderer2, ViewContainerRef, } from '@angular/core'; import { ANIMATION_FRAME, CSS } from '@ng-web-apis/common'; import { CHAR_ELLIPSIS, TuiDestroyService, tuiZonefree } from '@taiga-ui/cdk'; import { setRangeOffset } from '@taiga-ui/kit/utils/dom'; import { Observable } from 'rxjs'; import { map, takeUntil } from 'rxjs/operators'; import { TuiLineClampComponent } from './line-clamp.component'; var HIDDEN_LEFT = -200; // @dynamic var TuiLineClampDirective = /** @class */ (function () { function TuiLineClampDirective(component, viewContainerRef, documentRef, renderer, ngZone, _a, destroy$, animationFrame$, /** * TODO: remove "any" in new TS version; https://github.com/ng-web-apis/common/pull/6 */ cssRef) { var nativeElement = _a.nativeElement; if (cssRef.supports('-webkit-line-clamp', '1') || !(nativeElement.parentElement instanceof HTMLElement)) { return; } var range = documentRef.createRange(); var ellipsis = renderer.createElement('div'); var parentElement = nativeElement.parentElement; var style = ellipsis.style; style.position = 'absolute'; style.bottom = '0'; style.left = HIDDEN_LEFT + "px"; ellipsis.textContent = CHAR_ELLIPSIS; viewContainerRef.element.nativeElement.appendChild(ellipsis); animationFrame$ .pipe(map(function () { // 4px buffer for IE/Edge incorrectly rounding scrollHeight if (component.oneLine || nativeElement.scrollHeight - parentElement.clientHeight < 4) { return HIDDEN_LEFT; } var result = 0; var length = nativeElement.textContent ? nativeElement.textContent.length : 0; for (var char = 0; char < length - 2; char++) { setRangeOffset(range, nativeElement, char, 'setStart'); setRangeOffset(range, nativeElement, char + 1, 'setEnd'); var rangeRect = range.getBoundingClientRect(); var clientRect = parentElement.getBoundingClientRect(); if (Math.round(rangeRect.top - clientRect.bottom) >= 0) { break; } result = rangeRect.right - clientRect.left; } return result; }), tuiZonefree(ngZone), takeUntil(destroy$)) .subscribe(function (left) { style.left = left + "px"; }); } TuiLineClampDirective.ctorParameters = function () { return [ { type: TuiLineClampComponent, decorators: [{ type: Inject, args: [TuiLineClampComponent,] }] }, { type: ViewContainerRef, decorators: [{ type: Inject, args: [ViewContainerRef,] }] }, { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: Renderer2, decorators: [{ type: Inject, args: [Renderer2,] }] }, { type: NgZone, decorators: [{ type: Inject, args: [NgZone,] }] }, { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }, { type: TuiDestroyService, decorators: [{ type: Inject, args: [TuiDestroyService,] }] }, { type: Observable, decorators: [{ type: Inject, args: [ANIMATION_FRAME,] }] }, { type: undefined, decorators: [{ type: Inject, args: [CSS,] }] } ]; }; TuiLineClampDirective = __decorate([ Directive({ selector: '[lineClamp]', providers: [TuiDestroyService], }), __param(0, Inject(TuiLineClampComponent)), __param(1, Inject(ViewContainerRef)), __param(2, Inject(DOCUMENT)), __param(3, Inject(Renderer2)), __param(4, Inject(NgZone)), __param(5, Inject(ElementRef)), __param(6, Inject(TuiDestroyService)), __param(7, Inject(ANIMATION_FRAME)), __param(8, Inject(CSS)) ], TuiLineClampDirective); return TuiLineClampDirective; }()); export { TuiLineClampDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jbGFtcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvbGluZS1jbGFtcC8iLCJzb3VyY2VzIjpbImxpbmUtY2xhbXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsR0FBRyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU3RCxJQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUV6QixXQUFXO0FBS1g7SUFDSSwrQkFDbUMsU0FBZ0MsRUFDckMsZ0JBQWtDLEVBQzFDLFdBQXFCLEVBQ3BCLFFBQW1CLEVBQ3RCLE1BQWMsRUFDVixFQUF3QyxFQUNqQyxRQUEyQixFQUM3QixlQUFtQztJQUM1RDs7T0FFRztJQUNVLE1BQVc7WUFOSCxnQ0FBYTtRQVFsQyxJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxhQUFhLENBQUMsYUFBYSxZQUFZLFdBQVcsQ0FBQyxFQUN2RDtZQUNFLE9BQU87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eEIsV0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDaEIsV0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDakIsV0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDZCxXQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsQixXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ3pCLFdBQUEsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBSXZCLFdBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO09BYlAscUJBQXFCLENBeUVqQztJQUFELDRCQUFDO0NBQUEsQUF6RUQsSUF5RUM7U0F6RVkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIE5nWm9uZSxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FOSU1BVElPTl9GUkFNRSwgQ1NTfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7Q0hBUl9FTExJUFNJUywgVHVpRGVzdHJveVNlcnZpY2UsIHR1aVpvbmVmcmVlfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7c2V0UmFuZ2VPZmZzZXR9IGZyb20gJ0B0YWlnYS11aS9raXQvdXRpbHMvZG9tJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VHVpTGluZUNsYW1wQ29tcG9uZW50fSBmcm9tICcuL2xpbmUtY2xhbXAuY29tcG9uZW50JztcblxuY29uc3QgSElEREVOX0xFRlQgPSAtMjAwO1xuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbGluZUNsYW1wXScsXG4gICAgcHJvdmlkZXJzOiBbVHVpRGVzdHJveVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlMaW5lQ2xhbXBEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFR1aUxpbmVDbGFtcENvbXBvbmVudCkgY29tcG9uZW50OiBUdWlMaW5lQ2xhbXBDb21wb25lbnQsXG4gICAgICAgIEBJbmplY3QoVmlld0NvbnRhaW5lclJlZikgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnRSZWY6IERvY3VtZW50LFxuICAgICAgICBASW5qZWN0KFJlbmRlcmVyMikgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChOZ1pvbmUpIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KEVsZW1lbnRSZWYpIHtuYXRpdmVFbGVtZW50fTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoVHVpRGVzdHJveVNlcnZpY2UpIGRlc3Ryb3kkOiBUdWlEZXN0cm95U2VydmljZSxcbiAgICAgICAgQEluamVjdChBTklNQVRJT05fRlJBTUUpIGFuaW1hdGlvbkZyYW1lJDogT2JzZXJ2YWJsZTxudW1iZXI+LFxuICAgICAgICAvKipcbiAgICAgICAgICogVE9ETzogcmVtb3ZlIFwiYW55XCIgaW4gbmV3IFRTIHZlcnNpb247IGh0dHBzOi8vZ2l0aHViLmNvbS9uZy13ZWItYXBpcy9jb21tb24vcHVsbC82XG4gICAgICAgICAqL1xuICAgICAgICBASW5qZWN0KENTUykgY3NzUmVmOiBhbnksXG4gICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNzc1JlZi5zdXBwb3J0cygnLXdlYmtpdC1saW5lLWNsYW1wJywgJzEnKSB8fFxuICAgICAgICAgICAgIShuYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50UmVmLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGVsbGlwc2lzOiBIVE1MRWxlbWVudCA9IHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb25zdCB7cGFyZW50RWxlbWVudH0gPSBuYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB7c3R5bGV9ID0gZWxsaXBzaXM7XG5cbiAgICAgICAgc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBzdHlsZS5ib3R0b20gPSAnMCc7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBgJHtISURERU5fTEVGVH1weGA7XG4gICAgICAgIGVsbGlwc2lzLnRleHRDb250ZW50ID0gQ0hBUl9FTExJUFNJUztcblxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbGxpcHNpcyk7XG5cbiAgICAgICAgYW5pbWF0aW9uRnJhbWUkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyA0cHggYnVmZmVyIGZvciBJRS9FZGdlIGluY29ycmVjdGx5IHJvdW5kaW5nIHNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQub25lTGluZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSBwYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodCA8IDRcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSElEREVOX0xFRlQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gbmF0aXZlRWxlbWVudC50ZXh0Q29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuYXRpdmVFbGVtZW50LnRleHRDb250ZW50Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoYXIgPSAwOyBjaGFyIDwgbGVuZ3RoIC0gMjsgY2hhcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSYW5nZU9mZnNldChyYW5nZSwgbmF0aXZlRWxlbWVudCwgY2hhciwgJ3NldFN0YXJ0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSYW5nZU9mZnNldChyYW5nZSwgbmF0aXZlRWxlbWVudCwgY2hhciArIDEsICdzZXRFbmQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gcGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGgucm91bmQocmFuZ2VSZWN0LnRvcCAtIGNsaWVudFJlY3QuYm90dG9tKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdlUmVjdC5yaWdodCAtIGNsaWVudFJlY3QubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdHVpWm9uZWZyZWUobmdab25lKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwoZGVzdHJveSQpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShsZWZ0ID0+IHtcbiAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=