@agorapulse/ui-components 13.2.1 → 13.2.2

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,12 +1,13 @@
1
- import { Directive, Input } from '@angular/core';
1
+ import { Directive, Input, Output, EventEmitter } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  const PART_START = '<ng-container data-mst="';
4
4
  const PARSE_MIDDLE = '">';
5
5
  const PARSE_END = '</ng-container>';
6
- const CLASS_SEPARATOR = ',';
6
+ const DATA_SEPARATOR = ',';
7
+ const OPTIONAL_EVENTS_SEPARATOR = ';';
7
8
  /**
8
- * This directive aims to parse simple string to extract some specific tags and to turn them into SPAN with styling classes attributes.
9
- * The specific tags must this schema: <ng-container data-mst="STYLING-CLASSES>TEXT</ng-container>.
9
+ * This directive aims to parse simple string to extract some specific tags and to turn them into SPAN with styling classes attributes and optional event listening.
10
+ * The specific tags must this schema: <ng-container data-mst="STYLING-CLASSES">TEXT</ng-container>.
10
11
  * Example: 'Lorem <ng-container data-mst="my-style">ipsum</ng-container> dolor sit amet'.
11
12
  */
12
13
  export class MultiStyleTextDirective {
@@ -14,43 +15,54 @@ export class MultiStyleTextDirective {
14
15
  this.elRef = elRef;
15
16
  this.renderer = renderer;
16
17
  this.childrenCreated = [];
18
+ this.partEvent = new EventEmitter();
17
19
  }
18
20
  set multiStyleText(fullText) {
19
21
  // First remove previously added children (on update).
20
22
  for (const child of this.childrenCreated) {
21
23
  this.renderer.removeChild(this.elRef.nativeElement, child);
22
24
  }
23
- const parts = MultiStyleTextDirective.parse(fullText);
24
- for (const part of parts) {
25
- if (part.clazz) {
25
+ MultiStyleTextDirective.parse(fullText).forEach((part) => {
26
+ if (part.clazz || part.clickName) {
27
+ // Parsed item with styling classes and/or event listening.
26
28
  const span = this.renderer.createElement('span');
27
29
  const text = this.renderer.createText(part.content);
28
30
  this.renderer.appendChild(span, text);
29
- part.clazz.forEach(clazz => this.renderer.addClass(span, clazz));
31
+ if (part.clazz) {
32
+ part.clazz.forEach(clazz => this.renderer.addClass(span, clazz));
33
+ }
34
+ if (part.clickName) {
35
+ this.renderer.listen(span, 'click', () => this.partEvent.emit(part.clickName));
36
+ }
30
37
  this.renderer.appendChild(this.elRef.nativeElement, span);
31
38
  this.childrenCreated.push(span);
32
39
  }
33
40
  else {
41
+ // Specific of part without styling classes (could be used to get event listening only)
34
42
  const text = this.renderer.createText(part.content);
35
43
  this.renderer.appendChild(this.elRef.nativeElement, text);
36
44
  this.childrenCreated.push(text);
37
45
  }
38
- }
46
+ });
39
47
  }
40
48
  static parse(toParse) {
41
49
  const parts = [];
42
50
  let startIndex = toParse.indexOf(PART_START);
43
51
  while (startIndex >= 0) {
44
52
  if (startIndex > 0) {
45
- // Optional start before parser start.
46
- parts.push({ content: toParse.substr(0, startIndex) });
53
+ // Optional text before first parsed part.
54
+ parts.push({ content: toParse.substring(0, startIndex) });
47
55
  }
48
- const elem = this.cutFirstGroup(toParse.substr(startIndex));
56
+ const elem = this.cutFirstGroup(toParse.substring(startIndex));
49
57
  if (elem === 'invalid') {
50
58
  return [];
51
59
  }
52
60
  else if (elem) {
53
- parts.push({ content: elem.content, clazz: elem.classes });
61
+ parts.push({
62
+ content: elem.content,
63
+ clazz: elem.classes,
64
+ clickName: elem.clickName
65
+ });
54
66
  toParse = elem.rest;
55
67
  startIndex = toParse.indexOf(PART_START);
56
68
  }
@@ -66,29 +78,47 @@ export class MultiStyleTextDirective {
66
78
  }
67
79
  static cutFirstGroup(toCut) {
68
80
  if (!toCut.startsWith(PART_START)) {
69
- // String doesnt start with expected parser start.
81
+ // String doesn't start with expected parser start.
70
82
  return null;
71
83
  }
72
- const afterParserStart = toCut.substr(PART_START.length);
84
+ const afterParserStart = toCut.substring(PART_START.length);
73
85
  let index = afterParserStart.indexOf(PARSE_MIDDLE);
74
86
  if (index <= 0) {
75
87
  console.error('Not able to parse invalid string: ' + toCut);
76
88
  return 'invalid';
77
89
  }
78
- const classes = afterParserStart.substr(0, index);
79
- let rest = afterParserStart.substr(index + PARSE_MIDDLE.length);
90
+ const data = afterParserStart.substring(0, index);
91
+ let classes;
92
+ let clickName;
93
+ const eventsPartSeparatorIndex = data.indexOf(OPTIONAL_EVENTS_SEPARATOR);
94
+ if (eventsPartSeparatorIndex > 0) {
95
+ // Case the data contains events part with dedicated separator
96
+ classes = data.substring(0, eventsPartSeparatorIndex);
97
+ clickName = data.substring(eventsPartSeparatorIndex + 1);
98
+ }
99
+ else {
100
+ // Otherwise, only design classes are provided
101
+ classes = data;
102
+ clickName = undefined;
103
+ }
104
+ let rest = afterParserStart.substring(index + PARSE_MIDDLE.length);
80
105
  index = rest.indexOf(PARSE_END);
81
106
  if (index <= 0) {
82
107
  console.error('Not able to parse invalid string: ' + toCut);
83
108
  return 'invalid';
84
109
  }
85
- const content = rest.substr(0, index);
86
- rest = rest.substr(index + PARSE_END.length);
87
- return { content, classes: classes.split(CLASS_SEPARATOR), rest };
110
+ const content = rest.substring(0, index);
111
+ rest = rest.substring(index + PARSE_END.length);
112
+ return {
113
+ content,
114
+ classes: classes.split(DATA_SEPARATOR),
115
+ clickName,
116
+ rest
117
+ };
88
118
  }
89
119
  }
90
120
  /** @nocollapse */ /** @nocollapse */ MultiStyleTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: MultiStyleTextDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
91
- /** @nocollapse */ /** @nocollapse */ MultiStyleTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: MultiStyleTextDirective, selector: "[multiStyleText]", inputs: { multiStyleText: "multiStyleText" }, ngImport: i0 });
121
+ /** @nocollapse */ /** @nocollapse */ MultiStyleTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: MultiStyleTextDirective, selector: "[multiStyleText]", inputs: { multiStyleText: "multiStyleText" }, outputs: { partEvent: "partEvent" }, ngImport: i0 });
92
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: MultiStyleTextDirective, decorators: [{
93
123
  type: Directive,
94
124
  args: [{
@@ -97,5 +127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
97
127
  }]
98
128
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { multiStyleText: [{
99
129
  type: Input
130
+ }], partEvent: [{
131
+ type: Output
100
132
  }] } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc3R5bGUtdGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9kaXJlY3RpdmVzL211bHRpLXN0eWxlLXRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUF3QixNQUFNLGVBQWUsQ0FBQzs7QUFFdEUsTUFBTSxVQUFVLEdBQUcsMEJBQTBCLENBQUM7QUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQzFCLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDO0FBQ3BDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQU81Qjs7OztHQUlHO0FBS0gsTUFBTSxPQUFPLHVCQUF1QjtJQTRCaEMsWUFDWSxLQUFpQixFQUNqQixRQUFtQjtRQURuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVc7UUE1QnZCLG9CQUFlLEdBQVUsRUFBRSxDQUFDO0lBOEJwQyxDQUFDO0lBNUJELElBQWEsY0FBYyxDQUFDLFFBQWdCO1FBQ3hDLHNEQUFzRDtRQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxN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QUMsb0NBQW9DLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksSUFBSSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdDLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDcEUsQ0FBQzs7MEpBcEZRLHVCQUF1Qjs4SUFBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBSm5DLFNBQVM7bUJBQUM7b0JBQ1AsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsa0JBQWtCO2lCQUMvQjt5SEFLZ0IsY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgUmVuZGVyZXIyLCBFbGVtZW50UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgUEFSVF9TVEFSVCA9ICc8bmctY29udGFpbmVyIGRhdGEtbXN0PVwiJztcbmNvbnN0IFBBUlNFX01JRERMRSA9ICdcIj4nO1xuY29uc3QgUEFSU0VfRU5EID0gJzwvbmctY29udGFpbmVyPic7XG5jb25zdCBDTEFTU19TRVBBUkFUT1IgPSAnLCc7XG5cbmludGVyZmFjZSBQYXJ0IHtcbiAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgY2xheno/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGlzIGRpcmVjdGl2ZSBhaW1zIHRvIHBhcnNlIHNpbXBsZSBzdHJpbmcgdG8gZXh0cmFjdCBzb21lIHNwZWNpZmljIHRhZ3MgYW5kIHRvIHR1cm4gdGhlbSBpbnRvIFNQQU4gd2l0aCBzdHlsaW5nIGNsYXNzZXMgYXR0cmlidXRlcy5cbiAqIFRoZSBzcGVjaWZpYyB0YWdzIG11c3QgdGhpcyBzY2hlbWE6IDxuZy1jb250YWluZXIgZGF0YS1tc3Q9XCJTVFlMSU5HLUNMQVNTRVM+VEVYVDwvbmctY29udGFpbmVyPi5cbiAqIEV4YW1wbGU6ICdMb3JlbSA8bmctY29udGFpbmVyIGRhdGEtbXN0PVwibXktc3R5bGVcIj5pcHN1bTwvbmctY29udGFpbmVyPiBkb2xvciBzaXQgYW1ldCcuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1ttdWx0aVN0eWxlVGV4dF0nXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU3R5bGVUZXh0RGlyZWN0aXZlIHtcblxuICAgIHByaXZhdGUgY2hpbGRyZW5DcmVhdGVkOiBhbnlbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgc2V0IG11bHRpU3R5bGVUZXh0KGZ1bGxUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gRmlyc3QgcmVtb3ZlIHByZXZpb3VzbHkgYWRkZWQgY2hpbGRyZW4gKG9uIHVwZGF0ZSkuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbkNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJ0cyA9IE11bHRpU3R5bGVUZXh0RGlyZWN0aXZlLnBhcnNlKGZ1bGxUZXh0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LmNsYXp6KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQocGFydC5jb250ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHNwYW4sIHRleHQpO1xuICAgICAgICAgICAgICAgIHBhcnQuY2xhenouZm9yRWFjaChjbGF6eiA9PiB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHNwYW4sIGNsYXp6KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHNwYW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5DcmVhdGVkLnB1c2goc3Bhbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQocGFydC5jb250ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgdGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNyZWF0ZWQucHVzaCh0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcGFyc2UodG9QYXJzZTogc3RyaW5nKTogUGFydFtdIHtcbiAgICAgICAgY29uc3QgcGFydHM6IFBhcnRbXSA9IFtdO1xuXG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gdG9QYXJzZS5pbmRleE9mKFBBUlRfU1RBUlQpO1xuICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBPcHRpb25hbCBzdGFydCBiZWZvcmUgcGFyc2VyIHN0YXJ0LlxuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goe2NvbnRlbnQ6IHRvUGFyc2Uuc3Vic3RyKDAsIHN0YXJ0SW5kZXgpfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5jdXRGaXJzdEdyb3VwKHRvUGFyc2Uuc3Vic3RyKHN0YXJ0SW5kZXgpKTtcbiAgICAgICAgICAgIGlmIChlbGVtID09PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtjb250ZW50OiBlbGVtLmNvbnRlbnQsIGNsYXp6OiBlbGVtLmNsYXNzZXN9KTtcbiAgICAgICAgICAgICAgICB0b1BhcnNlID0gZWxlbS5yZXN0O1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSB0b1BhcnNlLmluZGV4T2YoUEFSVF9TVEFSVCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goe2NvbnRlbnQ6IHRvUGFyc2V9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBWZXJ5IGVuZFxuICAgICAgICBpZiAodG9QYXJzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKHtjb250ZW50OiB0b1BhcnNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGN1dEZpcnN0R3JvdXAodG9DdXQ6IHN0cmluZyk6IHtjb250ZW50OiBzdHJpbmcsIGNsYXNzZXM6IHN0cmluZ1tdLCByZXN0OiBzdHJpbmd9IHwgJ2ludmFsaWQnIHwgbnVsbCB7XG4gICAgICAgIGlmICghdG9DdXQuc3RhcnRzV2l0aChQQVJUX1NUQVJUKSkge1xuICAgICAgICAgICAgLy8gU3RyaW5nIGRvZXNudCBzdGFydCB3aXRoIGV4cGVjdGVkIHBhcnNlciBzdGFydC5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJQYXJzZXJTdGFydCA9IHRvQ3V0LnN1YnN0cihQQVJUX1NUQVJULmxlbmd0aCk7XG4gICAgICAgIGxldCBpbmRleCA9IGFmdGVyUGFyc2VyU3RhcnQuaW5kZXhPZihQQVJTRV9NSURETEUpO1xuICAgICAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm90IGFibGUgdG8gcGFyc2UgaW52YWxpZCBzdHJpbmc6ICcgKyB0b0N1dCk7XG4gICAgICAgICAgICByZXR1cm4gJ2ludmFsaWQnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBhZnRlclBhcnNlclN0YXJ0LnN1YnN0cigwLCBpbmRleCk7XG4gICAgICAgIGxldCByZXN0ID0gYWZ0ZXJQYXJzZXJTdGFydC5zdWJzdHIoaW5kZXggKyBQQVJTRV9NSURETEUubGVuZ3RoKTtcbiAgICAgICAgaW5kZXggPSByZXN0LmluZGV4T2YoUEFSU0VfRU5EKTtcbiAgICAgICAgaWYgKGluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vdCBhYmxlIHRvIHBhcnNlIGludmFsaWQgc3RyaW5nOiAnICsgdG9DdXQpO1xuICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlkJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzdC5zdWJzdHIoMCwgaW5kZXgpO1xuICAgICAgICByZXN0ID0gcmVzdC5zdWJzdHIoaW5kZXggKyBQQVJTRV9FTkQubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4ge2NvbnRlbnQsIGNsYXNzZXM6IGNsYXNzZXMuc3BsaXQoQ0xBU1NfU0VQQVJBVE9SKSwgcmVzdH07XG4gICAgfVxufVxuIl19
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc3R5bGUtdGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9kaXJlY3RpdmVzL211bHRpLXN0eWxlLXRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUU1RixNQUFNLFVBQVUsR0FBRywwQkFBMEIsQ0FBQztBQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBUXRDOzs7O0dBSUc7QUFLSCxNQUFNLE9BQU8sdUJBQXVCO0lBbUNoQyxZQUNZLEtBQWlCLEVBQ2pCLFFBQW1CO1FBRG5CLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQW5DdkIsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUErQjFCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBTWpELENBQUM7SUFuQ0QsSUFBYSxjQUFjLENBQUMsUUFBZ0I7UUFDeEMsc0RBQXNEO1FBQ3RELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5RDtRQUVELHVCQUF1QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUMzRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxD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QUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELE9BQU87WUFDSCxPQUFPO1lBQ1AsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQ3RDLFNBQVM7WUFDVCxJQUFJO1NBQ1AsQ0FBQztJQUNOLENBQUM7OzBKQS9HUSx1QkFBdUI7OElBQXZCLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNQLDhDQUE4QztvQkFDOUMsUUFBUSxFQUFFLGtCQUFrQjtpQkFDL0I7eUhBS2dCLGNBQWM7c0JBQTFCLEtBQUs7Z0JBNkJJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFJlbmRlcmVyMiwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBQQVJUX1NUQVJUID0gJzxuZy1jb250YWluZXIgZGF0YS1tc3Q9XCInO1xuY29uc3QgUEFSU0VfTUlERExFID0gJ1wiPic7XG5jb25zdCBQQVJTRV9FTkQgPSAnPC9uZy1jb250YWluZXI+JztcbmNvbnN0IERBVEFfU0VQQVJBVE9SID0gJywnO1xuY29uc3QgT1BUSU9OQUxfRVZFTlRTX1NFUEFSQVRPUiA9ICc7JztcblxuaW50ZXJmYWNlIFBhcnQge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBjbGF6ej86IHN0cmluZ1tdOyAvLyBOb3QgZGVmaW5lZCBvbiBzdGVyaWxlIHRleHRcbiAgICBjbGlja05hbWU/OiBzdHJpbmc7IC8vIE5vdCBkZWZpbmVkIG9uIHN0ZXJpbGUgdGV4dFxufVxuXG4vKipcbiAqIFRoaXMgZGlyZWN0aXZlIGFpbXMgdG8gcGFyc2Ugc2ltcGxlIHN0cmluZyB0byBleHRyYWN0IHNvbWUgc3BlY2lmaWMgdGFncyBhbmQgdG8gdHVybiB0aGVtIGludG8gU1BBTiB3aXRoIHN0eWxpbmcgY2xhc3NlcyBhdHRyaWJ1dGVzIGFuZCBvcHRpb25hbCBldmVudCBsaXN0ZW5pbmcuXG4gKiBUaGUgc3BlY2lmaWMgdGFncyBtdXN0IHRoaXMgc2NoZW1hOiA8bmctY29udGFpbmVyIGRhdGEtbXN0PVwiU1RZTElORy1DTEFTU0VTXCI+VEVYVDwvbmctY29udGFpbmVyPi5cbiAqIEV4YW1wbGU6ICdMb3JlbSA8bmctY29udGFpbmVyIGRhdGEtbXN0PVwibXktc3R5bGVcIj5pcHN1bTwvbmctY29udGFpbmVyPiBkb2xvciBzaXQgYW1ldCcuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1ttdWx0aVN0eWxlVGV4dF0nXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU3R5bGVUZXh0RGlyZWN0aXZlIHtcblxuICAgIHByaXZhdGUgY2hpbGRyZW5DcmVhdGVkOiBhbnlbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgc2V0IG11bHRpU3R5bGVUZXh0KGZ1bGxUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gRmlyc3QgcmVtb3ZlIHByZXZpb3VzbHkgYWRkZWQgY2hpbGRyZW4gKG9uIHVwZGF0ZSkuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbkNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBNdWx0aVN0eWxlVGV4dERpcmVjdGl2ZS5wYXJzZShmdWxsVGV4dCkuZm9yRWFjaCgocGFydDogUGFydCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2xhenogfHwgcGFydC5jbGlja05hbWUpIHtcbiAgICAgICAgICAgICAgICAvLyBQYXJzZWQgaXRlbSB3aXRoIHN0eWxpbmcgY2xhc3NlcyBhbmQvb3IgZXZlbnQgbGlzdGVuaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHBhcnQuY29udGVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzcGFuLCB0ZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAocGFydC5jbGF6eikge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0LmNsYXp6LmZvckVhY2goY2xhenogPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzcGFuLCBjbGF6eikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydC5jbGlja05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oc3BhbiwgJ2NsaWNrJywgKCkgPT4gdGhpcy5wYXJ0RXZlbnQuZW1pdChwYXJ0LmNsaWNrTmFtZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgc3Bhbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNyZWF0ZWQucHVzaChzcGFuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU3BlY2lmaWMgb2YgcGFydCB3aXRob3V0IHN0eWxpbmcgY2xhc3NlcyAoY291bGQgYmUgdXNlZCB0byBnZXQgZXZlbnQgbGlzdGVuaW5nIG9ubHkpXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChwYXJ0LmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCB0ZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ3JlYXRlZC5wdXNoKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgcGFydEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHBhcnNlKHRvUGFyc2U6IHN0cmluZyk6IFBhcnRbXSB7XG4gICAgICAgIGNvbnN0IHBhcnRzOiBQYXJ0W10gPSBbXTtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB0b1BhcnNlLmluZGV4T2YoUEFSVF9TVEFSVCk7XG4gICAgICAgIHdoaWxlIChzdGFydEluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGlmIChzdGFydEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIE9wdGlvbmFsIHRleHQgYmVmb3JlIGZpcnN0IHBhcnNlZCBwYXJ0LlxuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goe2NvbnRlbnQ6IHRvUGFyc2Uuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5jdXRGaXJzdEdyb3VwKHRvUGFyc2Uuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpKTtcbiAgICAgICAgICAgIGlmIChlbGVtID09PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogZWxlbS5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBjbGF6ejogZWxlbS5jbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICBjbGlja05hbWU6IGVsZW0uY2xpY2tOYW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdG9QYXJzZSA9IGVsZW0ucmVzdDtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gdG9QYXJzZS5pbmRleE9mKFBBUlRfU1RBUlQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtjb250ZW50OiB0b1BhcnNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmVyeSBlbmRcbiAgICAgICAgaWYgKHRvUGFyc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcGFydHMucHVzaCh7Y29udGVudDogdG9QYXJzZX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJ0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjdXRGaXJzdEdyb3VwKHRvQ3V0OiBzdHJpbmcpOiB7Y29udGVudDogc3RyaW5nLCBjbGFzc2VzOiBzdHJpbmdbXSwgY2xpY2tOYW1lOiBzdHJpbmcsIHJlc3Q6IHN0cmluZ30gfCAnaW52YWxpZCcgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0b0N1dC5zdGFydHNXaXRoKFBBUlRfU1RBUlQpKSB7XG4gICAgICAgICAgICAvLyBTdHJpbmcgZG9lc24ndCBzdGFydCB3aXRoIGV4cGVjdGVkIHBhcnNlciBzdGFydC5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJQYXJzZXJTdGFydCA9IHRvQ3V0LnN1YnN0cmluZyhQQVJUX1NUQVJULmxlbmd0aCk7XG4gICAgICAgIGxldCBpbmRleCA9IGFmdGVyUGFyc2VyU3RhcnQuaW5kZXhPZihQQVJTRV9NSURETEUpO1xuICAgICAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm90IGFibGUgdG8gcGFyc2UgaW52YWxpZCBzdHJpbmc6ICcgKyB0b0N1dCk7XG4gICAgICAgICAgICByZXR1cm4gJ2ludmFsaWQnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhZnRlclBhcnNlclN0YXJ0LnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIGxldCBjbGFzc2VzO1xuICAgICAgICBsZXQgY2xpY2tOYW1lO1xuICAgICAgICBjb25zdCBldmVudHNQYXJ0U2VwYXJhdG9ySW5kZXggPSBkYXRhLmluZGV4T2YoT1BUSU9OQUxfRVZFTlRTX1NFUEFSQVRPUik7XG4gICAgICAgIGlmIChldmVudHNQYXJ0U2VwYXJhdG9ySW5kZXggPiAwKSB7XG4gICAgICAgICAgICAvLyBDYXNlIHRoZSBkYXRhIGNvbnRhaW5zIGV2ZW50cyBwYXJ0IHdpdGggZGVkaWNhdGVkIHNlcGFyYXRvclxuICAgICAgICAgICAgY2xhc3NlcyA9IGRhdGEuc3Vic3RyaW5nKDAsIGV2ZW50c1BhcnRTZXBhcmF0b3JJbmRleCk7XG4gICAgICAgICAgICBjbGlja05hbWUgPSBkYXRhLnN1YnN0cmluZyhldmVudHNQYXJ0U2VwYXJhdG9ySW5kZXggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgb25seSBkZXNpZ24gY2xhc3NlcyBhcmUgcHJvdmlkZWRcbiAgICAgICAgICAgIGNsYXNzZXMgPSBkYXRhO1xuICAgICAgICAgICAgY2xpY2tOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN0ID0gYWZ0ZXJQYXJzZXJTdGFydC5zdWJzdHJpbmcoaW5kZXggKyBQQVJTRV9NSURETEUubGVuZ3RoKTtcbiAgICAgICAgaW5kZXggPSByZXN0LmluZGV4T2YoUEFSU0VfRU5EKTtcbiAgICAgICAgaWYgKGluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vdCBhYmxlIHRvIHBhcnNlIGludmFsaWQgc3RyaW5nOiAnICsgdG9DdXQpO1xuICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlkJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzdC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICByZXN0ID0gcmVzdC5zdWJzdHJpbmcoaW5kZXggKyBQQVJTRV9FTkQubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGNsYXNzZXM6IGNsYXNzZXMuc3BsaXQoREFUQV9TRVBBUkFUT1IpLFxuICAgICAgICAgICAgY2xpY2tOYW1lLFxuICAgICAgICAgICAgcmVzdFxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
@@ -3264,10 +3264,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3264
3264
  const PART_START = '<ng-container data-mst="';
3265
3265
  const PARSE_MIDDLE = '">';
3266
3266
  const PARSE_END = '</ng-container>';
3267
- const CLASS_SEPARATOR = ',';
3267
+ const DATA_SEPARATOR = ',';
3268
+ const OPTIONAL_EVENTS_SEPARATOR = ';';
3268
3269
  /**
3269
- * This directive aims to parse simple string to extract some specific tags and to turn them into SPAN with styling classes attributes.
3270
- * The specific tags must this schema: <ng-container data-mst="STYLING-CLASSES>TEXT</ng-container>.
3270
+ * This directive aims to parse simple string to extract some specific tags and to turn them into SPAN with styling classes attributes and optional event listening.
3271
+ * The specific tags must this schema: <ng-container data-mst="STYLING-CLASSES">TEXT</ng-container>.
3271
3272
  * Example: 'Lorem <ng-container data-mst="my-style">ipsum</ng-container> dolor sit amet'.
3272
3273
  */
3273
3274
  class MultiStyleTextDirective {
@@ -3275,43 +3276,54 @@ class MultiStyleTextDirective {
3275
3276
  this.elRef = elRef;
3276
3277
  this.renderer = renderer;
3277
3278
  this.childrenCreated = [];
3279
+ this.partEvent = new EventEmitter();
3278
3280
  }
3279
3281
  set multiStyleText(fullText) {
3280
3282
  // First remove previously added children (on update).
3281
3283
  for (const child of this.childrenCreated) {
3282
3284
  this.renderer.removeChild(this.elRef.nativeElement, child);
3283
3285
  }
3284
- const parts = MultiStyleTextDirective.parse(fullText);
3285
- for (const part of parts) {
3286
- if (part.clazz) {
3286
+ MultiStyleTextDirective.parse(fullText).forEach((part) => {
3287
+ if (part.clazz || part.clickName) {
3288
+ // Parsed item with styling classes and/or event listening.
3287
3289
  const span = this.renderer.createElement('span');
3288
3290
  const text = this.renderer.createText(part.content);
3289
3291
  this.renderer.appendChild(span, text);
3290
- part.clazz.forEach(clazz => this.renderer.addClass(span, clazz));
3292
+ if (part.clazz) {
3293
+ part.clazz.forEach(clazz => this.renderer.addClass(span, clazz));
3294
+ }
3295
+ if (part.clickName) {
3296
+ this.renderer.listen(span, 'click', () => this.partEvent.emit(part.clickName));
3297
+ }
3291
3298
  this.renderer.appendChild(this.elRef.nativeElement, span);
3292
3299
  this.childrenCreated.push(span);
3293
3300
  }
3294
3301
  else {
3302
+ // Specific of part without styling classes (could be used to get event listening only)
3295
3303
  const text = this.renderer.createText(part.content);
3296
3304
  this.renderer.appendChild(this.elRef.nativeElement, text);
3297
3305
  this.childrenCreated.push(text);
3298
3306
  }
3299
- }
3307
+ });
3300
3308
  }
3301
3309
  static parse(toParse) {
3302
3310
  const parts = [];
3303
3311
  let startIndex = toParse.indexOf(PART_START);
3304
3312
  while (startIndex >= 0) {
3305
3313
  if (startIndex > 0) {
3306
- // Optional start before parser start.
3307
- parts.push({ content: toParse.substr(0, startIndex) });
3314
+ // Optional text before first parsed part.
3315
+ parts.push({ content: toParse.substring(0, startIndex) });
3308
3316
  }
3309
- const elem = this.cutFirstGroup(toParse.substr(startIndex));
3317
+ const elem = this.cutFirstGroup(toParse.substring(startIndex));
3310
3318
  if (elem === 'invalid') {
3311
3319
  return [];
3312
3320
  }
3313
3321
  else if (elem) {
3314
- parts.push({ content: elem.content, clazz: elem.classes });
3322
+ parts.push({
3323
+ content: elem.content,
3324
+ clazz: elem.classes,
3325
+ clickName: elem.clickName
3326
+ });
3315
3327
  toParse = elem.rest;
3316
3328
  startIndex = toParse.indexOf(PART_START);
3317
3329
  }
@@ -3327,29 +3339,47 @@ class MultiStyleTextDirective {
3327
3339
  }
3328
3340
  static cutFirstGroup(toCut) {
3329
3341
  if (!toCut.startsWith(PART_START)) {
3330
- // String doesnt start with expected parser start.
3342
+ // String doesn't start with expected parser start.
3331
3343
  return null;
3332
3344
  }
3333
- const afterParserStart = toCut.substr(PART_START.length);
3345
+ const afterParserStart = toCut.substring(PART_START.length);
3334
3346
  let index = afterParserStart.indexOf(PARSE_MIDDLE);
3335
3347
  if (index <= 0) {
3336
3348
  console.error('Not able to parse invalid string: ' + toCut);
3337
3349
  return 'invalid';
3338
3350
  }
3339
- const classes = afterParserStart.substr(0, index);
3340
- let rest = afterParserStart.substr(index + PARSE_MIDDLE.length);
3351
+ const data = afterParserStart.substring(0, index);
3352
+ let classes;
3353
+ let clickName;
3354
+ const eventsPartSeparatorIndex = data.indexOf(OPTIONAL_EVENTS_SEPARATOR);
3355
+ if (eventsPartSeparatorIndex > 0) {
3356
+ // Case the data contains events part with dedicated separator
3357
+ classes = data.substring(0, eventsPartSeparatorIndex);
3358
+ clickName = data.substring(eventsPartSeparatorIndex + 1);
3359
+ }
3360
+ else {
3361
+ // Otherwise, only design classes are provided
3362
+ classes = data;
3363
+ clickName = undefined;
3364
+ }
3365
+ let rest = afterParserStart.substring(index + PARSE_MIDDLE.length);
3341
3366
  index = rest.indexOf(PARSE_END);
3342
3367
  if (index <= 0) {
3343
3368
  console.error('Not able to parse invalid string: ' + toCut);
3344
3369
  return 'invalid';
3345
3370
  }
3346
- const content = rest.substr(0, index);
3347
- rest = rest.substr(index + PARSE_END.length);
3348
- return { content, classes: classes.split(CLASS_SEPARATOR), rest };
3371
+ const content = rest.substring(0, index);
3372
+ rest = rest.substring(index + PARSE_END.length);
3373
+ return {
3374
+ content,
3375
+ classes: classes.split(DATA_SEPARATOR),
3376
+ clickName,
3377
+ rest
3378
+ };
3349
3379
  }
3350
3380
  }
3351
3381
  /** @nocollapse */ /** @nocollapse */ MultiStyleTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: MultiStyleTextDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
3352
- /** @nocollapse */ /** @nocollapse */ MultiStyleTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: MultiStyleTextDirective, selector: "[multiStyleText]", inputs: { multiStyleText: "multiStyleText" }, ngImport: i0 });
3382
+ /** @nocollapse */ /** @nocollapse */ MultiStyleTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: MultiStyleTextDirective, selector: "[multiStyleText]", inputs: { multiStyleText: "multiStyleText" }, outputs: { partEvent: "partEvent" }, ngImport: i0 });
3353
3383
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: MultiStyleTextDirective, decorators: [{
3354
3384
  type: Directive,
3355
3385
  args: [{
@@ -3358,6 +3388,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3358
3388
  }]
3359
3389
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { multiStyleText: [{
3360
3390
  type: Input
3391
+ }], partEvent: [{
3392
+ type: Output
3361
3393
  }] } });
3362
3394
 
3363
3395
  // Angular