@leanix/components 0.3.49 → 0.3.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,12 @@
1
1
  import { Pipe } from '@angular/core';
2
+ import { sanitize } from 'dompurify';
2
3
  import * as i0 from "@angular/core";
3
4
  export class HighlightRangePipe {
4
5
  transform(text, offset = 0, length = 0) {
6
+ const highlightedMarkup = this.doTransform(text, offset, length);
7
+ return sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] });
8
+ }
9
+ doTransform(text, offset, length) {
5
10
  if (!text || offset < 0 || length < 0 || offset >= text?.length || offset + length > text?.length) {
6
11
  return '';
7
12
  }
@@ -18,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
18
23
  type: Pipe,
19
24
  args: [{ name: 'lxHighlightRange' }]
20
25
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXJhbmdlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL3BpcGVzL2hpZ2hsaWdodC1yYW5nZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUdwRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFNBQVMsQ0FBQyxJQUFZLEVBQUUsU0FBaUIsQ0FBQyxFQUFFLFNBQWlCLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2pHLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNySSxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDcEIsT0FBTywrQkFBK0IsSUFBSSxTQUFTLENBQUM7SUFDdEQsQ0FBQzs7K0dBWFUsa0JBQWtCOzZHQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoeyBuYW1lOiAnbHhIaWdobGlnaHRSYW5nZScgfSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRSYW5nZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHRleHQ6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIgPSAwLCBsZW5ndGg6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCB8fCBvZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDAgfHwgb2Zmc2V0ID49IHRleHQ/Lmxlbmd0aCB8fCBvZmZzZXQgKyBsZW5ndGggPiB0ZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRQYXJ0ID0gdGV4dC5zbGljZShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgcmV0dXJuIHRleHQuc2xpY2UoMCwgb2Zmc2V0KSArIChoaWdobGlnaHRlZFBhcnQubGVuZ3RoICE9PSAwID8gdGhpcy5oaWdobGlnaHQoaGlnaGxpZ2h0ZWRQYXJ0KSA6ICcnKSArIHRleHQuc2xpY2Uob2Zmc2V0ICsgbGVuZ3RoKTtcbiAgfVxuXG4gIGhpZ2hsaWdodCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJ0ZXJtSGlnaGxpZ2h0XCI+JHt0ZXh0fTwvc3Bhbj5gO1xuICB9XG59XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXJhbmdlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL3BpcGVzL2hpZ2hsaWdodC1yYW5nZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBR3JDLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsU0FBUyxDQUFDLElBQVksRUFBRSxTQUFpQixDQUFDLEVBQUUsU0FBaUIsQ0FBQztRQUM1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRSxPQUFPLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQW1CLEVBQUUsTUFBYyxFQUFFLE1BQWM7UUFDckUsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2pHLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNySSxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVk7UUFDNUIsT0FBTywrQkFBK0IsSUFBSSxTQUFTLENBQUM7SUFDdEQsQ0FBQzs7K0dBaEJVLGtCQUFrQjs2R0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJ2RvbXB1cmlmeSc7XG5cbkBQaXBlKHsgbmFtZTogJ2x4SGlnaGxpZ2h0UmFuZ2UnIH0pXG5leHBvcnQgY2xhc3MgSGlnaGxpZ2h0UmFuZ2VQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh0ZXh0OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyID0gMCwgbGVuZ3RoOiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZE1hcmt1cCA9IHRoaXMuZG9UcmFuc2Zvcm0odGV4dCwgb2Zmc2V0LCBsZW5ndGgpO1xuICAgIHJldHVybiBzYW5pdGl6ZShoaWdobGlnaHRlZE1hcmt1cCwgeyBBTExPV0VEX1RBR1M6IFsnc3BhbiddLCBBTExPV0VEX0FUVFI6IFsnY2xhc3MnXSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9UcmFuc2Zvcm0odGV4dDogc3RyaW5nIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXRleHQgfHwgb2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwIHx8IG9mZnNldCA+PSB0ZXh0Py5sZW5ndGggfHwgb2Zmc2V0ICsgbGVuZ3RoID4gdGV4dD8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGhpZ2hsaWdodGVkUGFydCA9IHRleHQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgIHJldHVybiB0ZXh0LnNsaWNlKDAsIG9mZnNldCkgKyAoaGlnaGxpZ2h0ZWRQYXJ0Lmxlbmd0aCAhPT0gMCA/IHRoaXMuaGlnaGxpZ2h0KGhpZ2hsaWdodGVkUGFydCkgOiAnJykgKyB0ZXh0LnNsaWNlKG9mZnNldCArIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGhpZ2hsaWdodCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJ0ZXJtSGlnaGxpZ2h0XCI+JHt0ZXh0fTwvc3Bhbj5gO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { Pipe } from '@angular/core';
2
- import { escape } from 'lodash/fp';
2
+ import { sanitize } from 'dompurify';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  * These characters are treated as seperators by
@@ -16,12 +16,21 @@ export class HighlightTermPipe {
16
16
  * @returns The transformed text with highlighted search term.
17
17
  */
18
18
  transform(text, search, options = { exactMatch: false }) {
19
- if (search && text) {
19
+ if (text) {
20
+ const highlightedMarkup = this.doTransform(text, search, options);
21
+ return highlightedMarkup ? sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] }) : undefined;
22
+ }
23
+ else {
24
+ return undefined;
25
+ }
26
+ }
27
+ doTransform(text, search, options) {
28
+ if (search) {
20
29
  let pattern = options.exactMatch ? search.trim() : search.replace(STANDARD_TOKENIZER_SEPERATORS, ' ');
21
30
  // replace special chars for a backslash for RegExp
22
31
  pattern = pattern.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
23
32
  pattern = options.exactMatch
24
- ? escape(pattern)
33
+ ? pattern
25
34
  : pattern
26
35
  .split(' ')
27
36
  .filter((t) => {
@@ -29,7 +38,6 @@ export class HighlightTermPipe {
29
38
  })
30
39
  .join('|');
31
40
  const regex = new RegExp(pattern, 'gi');
32
- text = escape(text);
33
41
  return text.replace(regex, (match) => `<span class="termHighlight">${match}</span>`); // add highlighting to matched regex pattern
34
42
  }
35
43
  else {
@@ -43,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
43
51
  type: Pipe,
44
52
  args: [{ name: 'lxHighlightTerm' }]
45
53
  }] });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRlcm0ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvcGlwZXMvaGlnaGxpZ2h0LXRlcm0ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQVVuQzs7OztHQUlHO0FBQ0gsTUFBTSw2QkFBNkIsR0FBRyxnQkFBZ0IsQ0FBQztBQUd2RCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxJQUFhLEVBQUUsTUFBc0IsRUFBRSxVQUFzQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDMUcsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2xCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUV0RyxtREFBbUQ7WUFDbkQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMscUNBQXFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFekUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVO2dCQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLE9BQU87cUJBQ0osS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDWixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWpCLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4QyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLCtCQUErQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsNENBQTRDO1NBQ25JO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7OEdBOUJVLGlCQUFpQjs0R0FBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBlc2NhcGUgfSBmcm9tICdsb2Rhc2gvZnAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpZ2hsaWdodFRlcm1TZWFyY2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNlYXJjaCB0ZXJtIHNob3VsZCBiZSBleGFjdGx5IG1hdGNoZWQgaW4gdGhlIGdpdmVuIHRleHQuIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBmb2xsb3dpbmdcbiAgICogY2hhcmFjdGVycyBhbmQgc3BhY2VzIGJldHdlZW4gd29yZHMgYXJlIGluY2x1ZGVkIGluIHRoZSBzZWFyY2g6IC0gWyBdIC8geyB9ICggKSAqICsgPyAuIF4gJCB8XG4gICAqL1xuICBleGFjdE1hdGNoOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZXNlIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgYXMgc2VwZXJhdG9ycyBieVxuICogZWxhc3RpY3NlYXJjaCBhbmQgc3BsaXQgdGhlIGlucHV0IGludG8gc2VhcmNoIHRva2Vuc1xuICogd2hpY2ggYXJlIHVzZWQgdG8gZmluZCBtYXRjaGVzLlxuICovXG5jb25zdCBTVEFOREFSRF9UT0tFTklaRVJfU0VQRVJBVE9SUyA9IC9bXmEtekEtWlxcZFxcc10vZztcblxuQFBpcGUoeyBuYW1lOiAnbHhIaWdobGlnaHRUZXJtJyB9KVxuZXhwb3J0IGNsYXNzIEhpZ2hsaWdodFRlcm1QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCB0ZXh0IHdpdGggaGlnaGxpZ2h0ZWQgdGV4dCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHNlYXJjaCB0ZXJtLlxuICAgKiBAcGFyYW0gdGV4dCBUaGUgaW5wdXQgdGV4dC5cbiAgICogQHBhcmFtIHNlYXJjaCBUaGUgc2VhcmNoIHRlcm0gdG8gaGlnaGxpZ2h0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgaGlnaGxpZ2h0IHRlcm0gc2VhcmNoIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCB0ZXh0IHdpdGggaGlnaGxpZ2h0ZWQgc2VhcmNoIHRlcm0uXG4gICAqL1xuICB0cmFuc2Zvcm0odGV4dD86IHN0cmluZywgc2VhcmNoPzogc3RyaW5nIHwgbnVsbCwgb3B0aW9uczogSGlnaGxpZ2h0VGVybVNlYXJjaE9wdGlvbnMgPSB7IGV4YWN0TWF0Y2g6IGZhbHNlIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChzZWFyY2ggJiYgdGV4dCkge1xuICAgICAgbGV0IHBhdHRlcm4gPSBvcHRpb25zLmV4YWN0TWF0Y2ggPyBzZWFyY2gudHJpbSgpIDogc2VhcmNoLnJlcGxhY2UoU1RBTkRBUkRfVE9LRU5JWkVSX1NFUEVSQVRPUlMsICcgJyk7XG5cbiAgICAgIC8vIHJlcGxhY2Ugc3BlY2lhbCBjaGFycyBmb3IgYSBiYWNrc2xhc2ggZm9yIFJlZ0V4cFxuICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csICdcXFxcJCYnKTtcblxuICAgICAgcGF0dGVybiA9IG9wdGlvbnMuZXhhY3RNYXRjaFxuICAgICAgICA/IGVzY2FwZShwYXR0ZXJuKVxuICAgICAgICA6IHBhdHRlcm5cbiAgICAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAgICAuZmlsdGVyKCh0KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJ3wnKTtcblxuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnaScpO1xuICAgICAgdGV4dCA9IGVzY2FwZSh0ZXh0KTtcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmVnZXgsIChtYXRjaCkgPT4gYDxzcGFuIGNsYXNzPVwidGVybUhpZ2hsaWdodFwiPiR7bWF0Y2h9PC9zcGFuPmApOyAvLyBhZGQgaGlnaGxpZ2h0aW5nIHRvIG1hdGNoZWQgcmVnZXggcGF0dGVyblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRlcm0ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvcGlwZXMvaGlnaGxpZ2h0LXRlcm0ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQVVyQzs7OztHQUlHO0FBQ0gsTUFBTSw2QkFBNkIsR0FBRyxnQkFBZ0IsQ0FBQztBQUd2RCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxJQUFhLEVBQUUsTUFBc0IsRUFBRSxVQUFzQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDMUcsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRSxPQUFPLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUN6SDthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVksRUFBRSxNQUFpQyxFQUFFLE9BQW1DO1FBQ3RHLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXRHLG1EQUFtRDtZQUNuRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV6RSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVU7Z0JBQzFCLENBQUMsQ0FBQyxPQUFPO2dCQUNULENBQUMsQ0FBQyxPQUFPO3FCQUNKLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1osT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqQixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsK0JBQStCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyw0Q0FBNEM7U0FDbkk7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzs4R0F0Q1UsaUJBQWlCOzRHQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNhbml0aXplIH0gZnJvbSAnZG9tcHVyaWZ5JztcblxuZXhwb3J0IGludGVyZmFjZSBIaWdobGlnaHRUZXJtU2VhcmNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzZWFyY2ggdGVybSBzaG91bGQgYmUgZXhhY3RseSBtYXRjaGVkIGluIHRoZSBnaXZlbiB0ZXh0LiBXaGVuIHNldCB0byB0cnVlLCB0aGUgZm9sbG93aW5nXG4gICAqIGNoYXJhY3RlcnMgYW5kIHNwYWNlcyBiZXR3ZWVuIHdvcmRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgc2VhcmNoOiAtIFsgXSAvIHsgfSAoICkgKiArID8gLiBeICQgfFxuICAgKi9cbiAgZXhhY3RNYXRjaDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGVzZSBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIHNlcGVyYXRvcnMgYnlcbiAqIGVsYXN0aWNzZWFyY2ggYW5kIHNwbGl0IHRoZSBpbnB1dCBpbnRvIHNlYXJjaCB0b2tlbnNcbiAqIHdoaWNoIGFyZSB1c2VkIHRvIGZpbmQgbWF0Y2hlcy5cbiAqL1xuY29uc3QgU1RBTkRBUkRfVE9LRU5JWkVSX1NFUEVSQVRPUlMgPSAvW15hLXpBLVpcXGRcXHNdL2c7XG5cbkBQaXBlKHsgbmFtZTogJ2x4SGlnaGxpZ2h0VGVybScgfSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRUZXJtUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgdGV4dCB3aXRoIGhpZ2hsaWdodGVkIHRleHQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBzZWFyY2ggdGVybS5cbiAgICogQHBhcmFtIHRleHQgVGhlIGlucHV0IHRleHQuXG4gICAqIEBwYXJhbSBzZWFyY2ggVGhlIHNlYXJjaCB0ZXJtIHRvIGhpZ2hsaWdodC5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGhpZ2hsaWdodCB0ZXJtIHNlYXJjaCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgdGV4dCB3aXRoIGhpZ2hsaWdodGVkIHNlYXJjaCB0ZXJtLlxuICAgKi9cbiAgdHJhbnNmb3JtKHRleHQ/OiBzdHJpbmcsIHNlYXJjaD86IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEhpZ2hsaWdodFRlcm1TZWFyY2hPcHRpb25zID0geyBleGFjdE1hdGNoOiBmYWxzZSB9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0ZWRNYXJrdXAgPSB0aGlzLmRvVHJhbnNmb3JtKHRleHQsIHNlYXJjaCwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gaGlnaGxpZ2h0ZWRNYXJrdXAgPyBzYW5pdGl6ZShoaWdobGlnaHRlZE1hcmt1cCwgeyBBTExPV0VEX1RBR1M6IFsnc3BhbiddLCBBTExPV0VEX0FUVFI6IFsnY2xhc3MnXSB9KSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvVHJhbnNmb3JtKHRleHQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBIaWdobGlnaHRUZXJtU2VhcmNoT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNlYXJjaCkge1xuICAgICAgbGV0IHBhdHRlcm4gPSBvcHRpb25zLmV4YWN0TWF0Y2ggPyBzZWFyY2gudHJpbSgpIDogc2VhcmNoLnJlcGxhY2UoU1RBTkRBUkRfVE9LRU5JWkVSX1NFUEVSQVRPUlMsICcgJyk7XG5cbiAgICAgIC8vIHJlcGxhY2Ugc3BlY2lhbCBjaGFycyBmb3IgYSBiYWNrc2xhc2ggZm9yIFJlZ0V4cFxuICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csICdcXFxcJCYnKTtcblxuICAgICAgcGF0dGVybiA9IG9wdGlvbnMuZXhhY3RNYXRjaFxuICAgICAgICA/IHBhdHRlcm5cbiAgICAgICAgOiBwYXR0ZXJuXG4gICAgICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAgICAgLmZpbHRlcigodCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdC5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG5cbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ2knKTtcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmVnZXgsIChtYXRjaCkgPT4gYDxzcGFuIGNsYXNzPVwidGVybUhpZ2hsaWdodFwiPiR7bWF0Y2h9PC9zcGFuPmApOyAvLyBhZGQgaGlnaGxpZ2h0aW5nIHRvIG1hdGNoZWQgcmVnZXggcGF0dGVyblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -16,6 +16,7 @@ import { TranslatePipe, TranslateModule } from '@ngx-translate/core';
16
16
  import * as i1$3 from '@angular/platform-browser';
17
17
  import Color from 'color';
18
18
  import { format, distanceInWords, startOfDay } from 'date-fns';
19
+ import { sanitize } from 'dompurify';
19
20
  import _, { curry } from 'lodash';
20
21
  import { Renderer, marked } from 'marked';
21
22
  import * as i2$1 from '@angular/forms';
@@ -1353,6 +1354,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
1353
1354
 
1354
1355
  class HighlightRangePipe {
1355
1356
  transform(text, offset = 0, length = 0) {
1357
+ const highlightedMarkup = this.doTransform(text, offset, length);
1358
+ return sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] });
1359
+ }
1360
+ doTransform(text, offset, length) {
1356
1361
  if (!text || offset < 0 || length < 0 || offset >= (text === null || text === void 0 ? void 0 : text.length) || offset + length > (text === null || text === void 0 ? void 0 : text.length)) {
1357
1362
  return '';
1358
1363
  }
@@ -1385,12 +1390,21 @@ class HighlightTermPipe {
1385
1390
  * @returns The transformed text with highlighted search term.
1386
1391
  */
1387
1392
  transform(text, search, options = { exactMatch: false }) {
1388
- if (search && text) {
1393
+ if (text) {
1394
+ const highlightedMarkup = this.doTransform(text, search, options);
1395
+ return highlightedMarkup ? sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] }) : undefined;
1396
+ }
1397
+ else {
1398
+ return undefined;
1399
+ }
1400
+ }
1401
+ doTransform(text, search, options) {
1402
+ if (search) {
1389
1403
  let pattern = options.exactMatch ? search.trim() : search.replace(STANDARD_TOKENIZER_SEPERATORS, ' ');
1390
1404
  // replace special chars for a backslash for RegExp
1391
1405
  pattern = pattern.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
1392
1406
  pattern = options.exactMatch
1393
- ? escape(pattern)
1407
+ ? pattern
1394
1408
  : pattern
1395
1409
  .split(' ')
1396
1410
  .filter((t) => {
@@ -1398,7 +1412,6 @@ class HighlightTermPipe {
1398
1412
  })
1399
1413
  .join('|');
1400
1414
  const regex = new RegExp(pattern, 'gi');
1401
- text = escape(text);
1402
1415
  return text.replace(regex, (match) => `<span class="termHighlight">${match}</span>`); // add highlighting to matched regex pattern
1403
1416
  }
1404
1417
  else {