@taiga-ui/kit
Version:
Taiga UI Angular main components kit
92 lines • 13.4 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { Directive, inject, Input, Renderer2 } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { WaResizeObserverService } from '@ng-web-apis/resize-observer';
import { svgNodeFilter } from '@taiga-ui/cdk/constants';
import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
import { tuiPx } from '@taiga-ui/cdk/utils/miscellaneous';
import * as i0 from "@angular/core";
export const [TUI_HIGHLIGHT_OPTIONS, tuiHighlightOptionsProvider] = tuiCreateOptions({
highlightColor: 'var(--tui-service-selection-background)',
});
class TuiHighlight {
constructor() {
this.el = tuiInjectElement();
this.renderer = inject(Renderer2);
this.doc = inject(DOCUMENT);
this.highlight = this.setUpHighlight();
this.treeWalker = this.doc.createTreeWalker(this.el, NodeFilter.SHOW_TEXT, svgNodeFilter);
this.tuiHighlight = '';
this.tuiHighlightColor = inject(TUI_HIGHLIGHT_OPTIONS).highlightColor;
inject(WaResizeObserverService, { self: true })
.pipe(takeUntilDestroyed())
.subscribe(() => this.updateStyles());
}
ngOnChanges() {
this.updateStyles();
}
get match() {
return this.indexOf(this.el.textContent) !== -1;
}
updateStyles() {
this.highlight.style.display = 'none';
if (!this.match) {
return;
}
this.treeWalker.currentNode = this.el;
do {
const index = this.indexOf(this.treeWalker.currentNode.nodeValue);
if (index === -1) {
continue;
}
const range = this.doc.createRange();
range.setStart(this.treeWalker.currentNode, index);
range.setEnd(this.treeWalker.currentNode, index + this.tuiHighlight.length);
const hostRect = this.el.getBoundingClientRect();
const { left, top, width, height } = range.getBoundingClientRect();
const { style } = this.highlight;
style.background = this.tuiHighlightColor;
style.left = tuiPx(left - hostRect.left);
style.top = tuiPx(top - hostRect.top);
style.width = tuiPx(width);
style.height = tuiPx(height);
style.display = 'block';
return;
} while (this.treeWalker.nextNode());
}
indexOf(source) {
return !source || !this.tuiHighlight
? -1
: source.toLowerCase().indexOf(this.tuiHighlight.toLowerCase());
}
setUpHighlight() {
const highlight = this.renderer.createElement('div');
const { style } = highlight;
style.background = this.tuiHighlightColor;
style.zIndex = '-1';
style.position = 'absolute';
this.renderer.appendChild(this.el, highlight);
return highlight;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiHighlight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiHighlight, isStandalone: true, selector: "[tuiHighlight]", inputs: { tuiHighlight: "tuiHighlight", tuiHighlightColor: "tuiHighlightColor" }, host: { properties: { "style.position": "\"relative\"", "style.zIndex": "0" } }, providers: [WaResizeObserverService], usesOnChanges: true, ngImport: i0 }); }
}
export { TuiHighlight };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiHighlight, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[tuiHighlight]',
providers: [WaResizeObserverService],
host: {
'[style.position]': '"relative"',
'[style.zIndex]': '0',
},
}]
}], ctorParameters: function () { return []; }, propDecorators: { tuiHighlight: [{
type: Input
}], tuiHighlightColor: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9kaXJlY3RpdmVzL2hpZ2hsaWdodC9oaWdobGlnaHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLG1DQUFtQyxDQUFDOztBQUV4RCxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDJCQUEyQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7SUFDakYsY0FBYyxFQUFFLHlDQUF5QztDQUM1RCxDQUFDLENBQUM7QUFFSCxNQVNhLFlBQVk7SUFrQnJCO1FBakJpQixPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFFBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkIsY0FBUyxHQUFnQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0MsZUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQ25ELElBQUksQ0FBQyxFQUFF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QVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsU0FBUyxDQUFDO1FBRTFCLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUMsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzsrR0FwRlEsWUFBWTttR0FBWixZQUFZLGdPQU5WLENBQUMsdUJBQXVCLENBQUM7O1NBTTNCLFlBQVk7NEZBQVosWUFBWTtrQkFUeEIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3BDLElBQUksRUFBRTt3QkFDRixrQkFBa0IsRUFBRSxZQUFZO3dCQUNoQyxnQkFBZ0IsRUFBRSxHQUFHO3FCQUN4QjtpQkFDSjswRUFjVSxZQUFZO3NCQURsQixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgdHlwZSBPbkNoYW5nZXMsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtXYVJlc2l6ZU9ic2VydmVyU2VydmljZX0gZnJvbSAnQG5nLXdlYi1hcGlzL3Jlc2l6ZS1vYnNlcnZlcic7XG5pbXBvcnQge3N2Z05vZGVGaWx0ZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7dHVpQ3JlYXRlT3B0aW9uc30gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kaSc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpUHh9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5cbmV4cG9ydCBjb25zdCBbVFVJX0hJR0hMSUdIVF9PUFRJT05TLCB0dWlIaWdobGlnaHRPcHRpb25zUHJvdmlkZXJdID0gdHVpQ3JlYXRlT3B0aW9ucyh7XG4gICAgaGlnaGxpZ2h0Q29sb3I6ICd2YXIoLS10dWktc2VydmljZS1zZWxlY3Rpb24tYmFja2dyb3VuZCknLFxufSk7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbdHVpSGlnaGxpZ2h0XScsXG4gICAgcHJvdmlkZXJzOiBbV2FSZXNpemVPYnNlcnZlclNlcnZpY2VdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tzdHlsZS5wb3NpdGlvbl0nOiAnXCJyZWxhdGl2ZVwiJyxcbiAgICAgICAgJ1tzdHlsZS56SW5kZXhdJzogJzAnLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUhpZ2hsaWdodCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2MgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHQ6IEhUTUxFbGVtZW50ID0gdGhpcy5zZXRVcEhpZ2hsaWdodCgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVdhbGtlciA9IHRoaXMuZG9jLmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgIHRoaXMuZWwsXG4gICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhULFxuICAgICAgICBzdmdOb2RlRmlsdGVyLFxuICAgICk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0dWlIaWdobGlnaHQgPSAnJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHR1aUhpZ2hsaWdodENvbG9yID0gaW5qZWN0KFRVSV9ISUdITElHSFRfT1BUSU9OUykuaGlnaGxpZ2h0Q29sb3I7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaW5qZWN0KFdhUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLCB7c2VsZjogdHJ1ZX0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTdHlsZXMoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgbWF0Y2goKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4T2YodGhpcy5lbC50ZXh0Q29udGVudCkgIT09IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU3R5bGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIGlmICghdGhpcy5tYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmVlV2Fsa2VyLmN1cnJlbnROb2RlID0gdGhpcy5lbDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhPZih0aGlzLnRyZWVXYWxrZXIuY3VycmVudE5vZGUubm9kZVZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZG9jLmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMudHJlZVdhbGtlci5jdXJyZW50Tm9kZSwgaW5kZXgpO1xuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMudHJlZVdhbGtlci5jdXJyZW50Tm9kZSwgaW5kZXggKyB0aGlzLnR1aUhpZ2hsaWdodC5sZW5ndGgpO1xuXG4gICAgICAgICAgICBjb25zdCBob3N0UmVjdCA9IHRoaXMuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCB7bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0fSA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3Qge3N0eWxlfSA9IHRoaXMuaGlnaGxpZ2h0O1xuXG4gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy50dWlIaWdobGlnaHRDb2xvcjtcbiAgICAgICAgICAgIHN0eWxlLmxlZnQgPSB0dWlQeChsZWZ0IC0gaG9zdFJlY3QubGVmdCk7XG4gICAgICAgICAgICBzdHlsZS50b3AgPSB0dWlQeCh0b3AgLSBob3N0UmVjdC50b3ApO1xuICAgICAgICAgICAgc3R5bGUud2lkdGggPSB0dWlQeCh3aWR0aCk7XG4gICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSB0dWlQeChoZWlnaHQpO1xuICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSB3aGlsZSAodGhpcy50cmVlV2Fsa2VyLm5leHROb2RlKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5kZXhPZihzb3VyY2U6IHN0cmluZyB8IG51bGwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gIXNvdXJjZSB8fCAhdGhpcy50dWlIaWdobGlnaHRcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogc291cmNlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnR1aUhpZ2hsaWdodC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFVwSGlnaGxpZ2h0KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29uc3Qge3N0eWxlfSA9IGhpZ2hsaWdodDtcblxuICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy50dWlIaWdobGlnaHRDb2xvcjtcbiAgICAgICAgc3R5bGUuekluZGV4ID0gJy0xJztcbiAgICAgICAgc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWwsIGhpZ2hsaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodDtcbiAgICB9XG59XG4iXX0=