@taiga-ui/kit
Version:
Taiga UI Angular main components kit
88 lines • 12.9 kB
JavaScript
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=