UNPKG

@taiga-ui/kit

Version:
96 lines 12.7 kB
import { __decorate, __param } from "tslib"; import { DOCUMENT } from '@angular/common'; import { Directive, ElementRef, Inject, Input, OnChanges, Renderer2 } from '@angular/core'; import { px, svgNodeFilter, tuiDefaultProp, TuiDestroyService, TuiResizeService, } from '@taiga-ui/cdk'; import { Observable } from 'rxjs'; // @dynamic var TuiHighlightDirective = /** @class */ (function () { function TuiHighlightDirective(documentRef, elementRef, renderer, resize$) { var _this = this; this.documentRef = documentRef; this.elementRef = elementRef; this.renderer = renderer; this.tuiHighlight = ''; this.highlight = this.setUpHighlight(); this.treeWalker = this.documentRef.createTreeWalker(this.elementRef.nativeElement, NodeFilter.SHOW_TEXT, svgNodeFilter, false); resize$.subscribe(function () { _this.updateStyles(); }); } Object.defineProperty(TuiHighlightDirective.prototype, "match", { get: function () { return this.indexOf(this.elementRef.nativeElement.textContent) !== -1; }, enumerable: true, configurable: true }); TuiHighlightDirective.prototype.ngOnChanges = function () { this.updateStyles(); }; TuiHighlightDirective.prototype.updateStyles = function () { this.highlight.style.display = 'none'; if (!this.match) { return; } this.treeWalker.currentNode = this.elementRef.nativeElement; do { var index = this.indexOf(this.treeWalker.currentNode.nodeValue); if (index === -1) { continue; } var range = this.documentRef.createRange(); range.setStart(this.treeWalker.currentNode, index); range.setEnd(this.treeWalker.currentNode, index + this.tuiHighlight.length); var hostRect = this.elementRef.nativeElement.getBoundingClientRect(); var _a = range.getBoundingClientRect(), left = _a.left, top_1 = _a.top, width = _a.width, height = _a.height; var style = this.highlight.style; style.left = px(left - hostRect.left); style.top = px(top_1 - hostRect.top); style.width = px(width); style.height = px(height); style.display = 'block'; return; } while (this.treeWalker.nextNode()); }; TuiHighlightDirective.prototype.indexOf = function (source) { return !source || !this.tuiHighlight ? -1 : source.toLowerCase().indexOf(this.tuiHighlight.toLowerCase()); }; TuiHighlightDirective.prototype.setUpHighlight = function () { var highlight = this.renderer.createElement('div'); var style = highlight.style; style.background = 'var(--tui-selection)'; style.zIndex = '-1'; style.position = 'absolute'; this.renderer.appendChild(this.elementRef.nativeElement, highlight); return highlight; }; TuiHighlightDirective.ctorParameters = function () { return [ { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }, { type: Renderer2, decorators: [{ type: Inject, args: [Renderer2,] }] }, { type: Observable, decorators: [{ type: Inject, args: [TuiResizeService,] }] } ]; }; __decorate([ Input(), tuiDefaultProp() ], TuiHighlightDirective.prototype, "tuiHighlight", void 0); TuiHighlightDirective = __decorate([ Directive({ selector: '[tuiHighlight]', host: { '[style.position]': '"relative"', '[style.zIndex]': '0', }, providers: [TuiDestroyService, TuiResizeService], }), __param(0, Inject(DOCUMENT)), __param(1, Inject(ElementRef)), __param(2, Inject(Renderer2)), __param(3, Inject(TuiResizeService)) ], TuiHighlightDirective); return TuiHighlightDirective; }()); export { TuiHighlightDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9raXQvZGlyZWN0aXZlcy9oaWdobGlnaHQvIiwic291cmNlcyI6WyJoaWdobGlnaHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFDSCxFQUFFLEVBQ0YsYUFBYSxFQUNiLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEMsV0FBVztBQVNYO0lBY0ksK0JBQ3VDLFdBQXFCLEVBQ25CLFVBQW1DLEVBQ3BDLFFBQW1CLEVBQzdCLE9BQTRCO1FBSjFELGlCQVNDO1FBUnNDLGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFkM0QsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFRCxjQUFTLEdBQWdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUUvQyxlQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLFVBQVUsQ0FBQyxTQUFTLEVBQ3BCLGFBQWEsRUFDYixLQUFLLENBQ1IsQ0FBQztRQVFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDZCxLQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsc0JBQUksd0NBQUs7YUFBVDtZQUNJLE9BQU8sSUFB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MUQsTUFBTSxTQUFDLFVBQVU7Z0JBQzRCLFNBQVMsdUJBQXRELE1BQU0sU0FBQyxTQUFTO2dCQUNrQixVQUFVLHVCQUE1QyxNQUFNLFNBQUMsZ0JBQWdCOztJQWY1QjtRQUZDLEtBQUssRUFBRTtRQUNQLGNBQWMsRUFBRTsrREFDQztJQUhULHFCQUFxQjtRQVJqQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLElBQUksRUFBRTtnQkFDRixrQkFBa0IsRUFBRSxZQUFZO2dCQUNoQyxnQkFBZ0IsRUFBRSxHQUFHO2FBQ3hCO1lBQ0QsU0FBUyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7U0FDbkQsQ0FBQztRQWdCTyxXQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNoQixXQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsQixXQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNqQixXQUFBLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO09BbEJwQixxQkFBcUIsQ0FxRmpDO0lBQUQsNEJBQUM7Q0FBQSxBQXJGRCxJQXFGQztTQXJGWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgcHgsXG4gICAgc3ZnTm9kZUZpbHRlcixcbiAgICB0dWlEZWZhdWx0UHJvcCxcbiAgICBUdWlEZXN0cm95U2VydmljZSxcbiAgICBUdWlSZXNpemVTZXJ2aWNlLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t0dWlIaWdobGlnaHRdJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUucG9zaXRpb25dJzogJ1wicmVsYXRpdmVcIicsXG4gICAgICAgICdbc3R5bGUuekluZGV4XSc6ICcwJyxcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1R1aURlc3Ryb3lTZXJ2aWNlLCBUdWlSZXNpemVTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpSGlnaGxpZ2h0RGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgdHVpSGlnaGxpZ2h0ID0gJyc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhpZ2hsaWdodDogSFRNTEVsZW1lbnQgPSB0aGlzLnNldFVwSGlnaGxpZ2h0KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyZWVXYWxrZXIgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVCxcbiAgICAgICAgc3ZnTm9kZUZpbHRlcixcbiAgICAgICAgZmFsc2UsXG4gICAgKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50UmVmOiBEb2N1bWVudCxcbiAgICAgICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBASW5qZWN0KFJlbmRlcmVyMikgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KFR1aVJlc2l6ZVNlcnZpY2UpIHJlc2l6ZSQ6IE9ic2VydmFibGU8dW5rbm93bj4sXG4gICAgKSB7XG4gICAgICAgIHJlc2l6ZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBtYXRjaCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkgIT09IC0xO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU3R5bGVzKCkge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIGlmICghdGhpcy5tYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmVlV2Fsa2VyLmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4T2YodGhpcy50cmVlV2Fsa2VyLmN1cnJlbnROb2RlLm5vZGVWYWx1ZSk7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMudHJlZVdhbGtlci5jdXJyZW50Tm9kZSwgaW5kZXgpO1xuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMudHJlZVdhbGtlci5jdXJyZW50Tm9kZSwgaW5kZXggKyB0aGlzLnR1aUhpZ2hsaWdodC5sZW5ndGgpO1xuXG4gICAgICAgICAgICBjb25zdCBob3N0UmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3Qge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH0gPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IHtzdHlsZX0gPSB0aGlzLmhpZ2hsaWdodDtcblxuICAgICAgICAgICAgc3R5bGUubGVmdCA9IHB4KGxlZnQgLSBob3N0UmVjdC5sZWZ0KTtcbiAgICAgICAgICAgIHN0eWxlLnRvcCA9IHB4KHRvcCAtIGhvc3RSZWN0LnRvcCk7XG4gICAgICAgICAgICBzdHlsZS53aWR0aCA9IHB4KHdpZHRoKTtcbiAgICAgICAgICAgIHN0eWxlLmhlaWdodCA9IHB4KGhlaWdodCk7XG4gICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IHdoaWxlICh0aGlzLnRyZWVXYWxrZXIubmV4dE5vZGUoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmRleE9mKHNvdXJjZTogc3RyaW5nIHwgbnVsbCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAhc291cmNlIHx8ICF0aGlzLnR1aUhpZ2hsaWdodFxuICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgOiBzb3VyY2UudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMudHVpSGlnaGxpZ2h0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VXBIaWdobGlnaHQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBoaWdobGlnaHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb25zdCB7c3R5bGV9ID0gaGlnaGxpZ2h0O1xuXG4gICAgICAgIHN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tdHVpLXNlbGVjdGlvbiknO1xuICAgICAgICBzdHlsZS56SW5kZXggPSAnLTEnO1xuICAgICAgICBzdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGhpZ2hsaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodDtcbiAgICB9XG59XG4iXX0=