UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

1 lines 7.07 kB
{"version":3,"file":"taiga-ui-kit-directives-highlight.mjs","sources":["../../../projects/kit/directives/highlight/highlight.directive.ts","../../../projects/kit/directives/highlight/taiga-ui-kit-directives-highlight.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {Directive, inject, input, type OnChanges} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {WaResizeObserverService} from '@ng-web-apis/resize-observer';\nimport {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiPx} from '@taiga-ui/cdk/utils/miscellaneous';\n\nexport const [TUI_HIGHLIGHT_OPTIONS, tuiHighlightOptionsProvider] = tuiCreateOptions({\n highlightColor: 'var(--tui-service-selection-background)',\n});\n\n@Directive({\n selector: '[tuiHighlight]',\n providers: [WaResizeObserverService],\n host: {\n '[style.position]': '\"relative\"',\n '[style.z-index]': '0',\n },\n})\nexport class TuiHighlight implements OnChanges {\n private readonly el = tuiInjectElement();\n private readonly options = inject(TUI_HIGHLIGHT_OPTIONS);\n private readonly doc = inject(DOCUMENT);\n private readonly highlight = this.setUpHighlight();\n\n private readonly treeWalker = this.doc.createTreeWalker(\n this.el,\n NodeFilter.SHOW_TEXT,\n svgNodeFilter,\n );\n\n public readonly tuiHighlight = input('');\n public readonly tuiHighlightColor = input(this.options.highlightColor);\n\n constructor() {\n inject(WaResizeObserverService, {self: true})\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.updateStyles());\n }\n\n public ngOnChanges(): void {\n this.updateStyles();\n }\n\n protected get match(): boolean {\n return this.indexOf(this.el.textContent) !== -1;\n }\n\n private updateStyles(): void {\n this.highlight.style.display = 'none';\n\n if (!this.match) {\n return;\n }\n\n this.treeWalker.currentNode = this.el;\n\n do {\n const index = this.indexOf(this.treeWalker.currentNode.nodeValue);\n\n if (index === -1) {\n continue;\n }\n\n const range = this.doc.createRange();\n\n range.setStart(this.treeWalker.currentNode, index);\n range.setEnd(this.treeWalker.currentNode, index + this.tuiHighlight().length);\n\n const hostRect = this.el.getBoundingClientRect();\n const {left, top, width, height} = range.getBoundingClientRect();\n const {style} = this.highlight;\n\n style.background = this.tuiHighlightColor();\n style.left = tuiPx(left - hostRect.left);\n style.top = tuiPx(top - hostRect.top);\n style.width = tuiPx(width);\n style.height = tuiPx(height);\n style.display = 'block';\n\n return;\n } while (this.treeWalker.nextNode());\n }\n\n private indexOf(source: string | null): number {\n return !source || !this.tuiHighlight()\n ? -1\n : source.toLowerCase().indexOf(this.tuiHighlight().toLowerCase());\n }\n\n private setUpHighlight(): HTMLElement {\n const highlight = this.doc.createElement('div');\n const {style} = highlight;\n\n style.background = this.options.highlightColor;\n style.zIndex = '-1';\n style.position = 'absolute';\n this.el.appendChild(highlight);\n\n return highlight;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}