@agorapulse/ui-components 15.0.37 → 15.0.39

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,4 +1,4 @@
1
- import { Renderer2, ElementRef, EventEmitter } from '@angular/core';
1
+ import { ElementRef, EventEmitter, Renderer2 } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  /**
4
4
  * 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.
@@ -8,12 +8,9 @@ import * as i0 from "@angular/core";
8
8
  export declare class MultiStyleTextDirective {
9
9
  private elRef;
10
10
  private renderer;
11
- private childrenCreated;
12
11
  set multiStyleText(fullText: string);
13
12
  partEvent: EventEmitter<string>;
14
13
  constructor(elRef: ElementRef, renderer: Renderer2);
15
- private static parse;
16
- private static cutFirstGroup;
17
14
  static ɵfac: i0.ɵɵFactoryDeclaration<MultiStyleTextDirective, never>;
18
15
  static ɵdir: i0.ɵɵDirectiveDeclaration<MultiStyleTextDirective, "[multiStyleText]", never, { "multiStyleText": "multiStyleText"; }, { "partEvent": "partEvent"; }, never, never, true, never>;
19
16
  }
@@ -1,10 +1,7 @@
1
- import { Directive, Input, Output, EventEmitter } from '@angular/core';
1
+ import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
+ import DOMPurify from 'dompurify';
2
3
  import * as i0 from "@angular/core";
3
- const PART_START = '<ng-container data-mst="';
4
- const PARSE_MIDDLE = '">';
5
- const PARSE_END = '</ng-container>';
6
- const DATA_SEPARATOR = ',';
7
- const OPTIONAL_EVENTS_SEPARATOR = ';';
4
+ const DATA_MST = 'data-mst';
8
5
  /**
9
6
  * 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
7
  * The specific tags must this schema: <ng-container data-mst="STYLING-CLASSES">TEXT</ng-container>.
@@ -13,111 +10,36 @@ const OPTIONAL_EVENTS_SEPARATOR = ';';
13
10
  export class MultiStyleTextDirective {
14
11
  set multiStyleText(fullText) {
15
12
  // First remove previously added children (on update).
16
- for (const child of this.childrenCreated) {
17
- this.renderer.removeChild(this.elRef.nativeElement, child);
18
- }
19
- if (fullText && fullText.length > 0) {
20
- MultiStyleTextDirective.parse(fullText).forEach((part) => {
21
- if (part.clazz || part.clickName) {
22
- // Parsed item with styling classes and/or event listening.
23
- const span = this.renderer.createElement('span');
24
- const text = this.renderer.createText(part.content);
25
- this.renderer.appendChild(span, text);
26
- if (part.clazz) {
27
- part.clazz.forEach(clazz => this.renderer.addClass(span, clazz));
13
+ this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', "");
14
+ if (!fullText || fullText.length <= 0) {
15
+ return;
16
+ }
17
+ this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', DOMPurify.sanitize(fullText.replace(/ng-container/g, 'span')));
18
+ Array.from(this.elRef.nativeElement.children).forEach((childNode) => {
19
+ if (childNode.nodeType == 1 && childNode.tagName.toLowerCase() === 'span') { // Node.ELEMENT_NODE
20
+ const span = this.renderer.createElement('span');
21
+ span.innerHTML = childNode.innerHTML;
22
+ this.elRef.nativeElement.replaceChild(span, childNode);
23
+ const mstValue = childNode.getAttribute(DATA_MST);
24
+ if (mstValue) {
25
+ const mstContents = mstValue.split(';');
26
+ // Bind click events
27
+ if (mstContents[1]) {
28
+ this.renderer.listen(span, 'click', () => this.partEvent.emit(mstContents[1]));
28
29
  }
29
- if (part.clickName) {
30
- this.renderer.listen(span, 'click', () => this.partEvent.emit(part.clickName));
30
+ // Add classes
31
+ if (mstContents[0] && mstContents[0].length > 0) {
32
+ this.renderer.setAttribute(span, 'class', mstContents[0].replace(',', ' '));
31
33
  }
32
- this.renderer.appendChild(this.elRef.nativeElement, span);
33
- this.childrenCreated.push(span);
34
- }
35
- else {
36
- // Specific of part without styling classes (could be used to get event listening only)
37
- const text = this.renderer.createText(part.content);
38
- this.renderer.appendChild(this.elRef.nativeElement, text);
39
- this.childrenCreated.push(text);
40
34
  }
41
- });
42
- }
35
+ }
36
+ });
43
37
  }
44
38
  constructor(elRef, renderer) {
45
39
  this.elRef = elRef;
46
40
  this.renderer = renderer;
47
- this.childrenCreated = [];
48
41
  this.partEvent = new EventEmitter();
49
42
  }
50
- static parse(toParse) {
51
- const parts = [];
52
- let startIndex = toParse.indexOf(PART_START);
53
- while (startIndex >= 0) {
54
- if (startIndex > 0) {
55
- // Optional text before first parsed part.
56
- parts.push({ content: toParse.substring(0, startIndex) });
57
- }
58
- const elem = this.cutFirstGroup(toParse.substring(startIndex));
59
- if (elem === 'invalid') {
60
- return [];
61
- }
62
- else if (elem) {
63
- parts.push({
64
- content: elem.content,
65
- clazz: elem.classes,
66
- clickName: elem.clickName
67
- });
68
- toParse = elem.rest;
69
- startIndex = toParse.indexOf(PART_START);
70
- }
71
- else {
72
- parts.push({ content: toParse });
73
- }
74
- }
75
- // Very end
76
- if (toParse.length > 0) {
77
- parts.push({ content: toParse });
78
- }
79
- return parts;
80
- }
81
- static cutFirstGroup(toCut) {
82
- if (!toCut.startsWith(PART_START)) {
83
- // String doesn't start with expected parser start.
84
- return null;
85
- }
86
- const afterParserStart = toCut.substring(PART_START.length);
87
- let index = afterParserStart.indexOf(PARSE_MIDDLE);
88
- if (index <= 0) {
89
- console.error('Not able to parse invalid string: ' + toCut);
90
- return 'invalid';
91
- }
92
- const data = afterParserStart.substring(0, index);
93
- let classes;
94
- let clickName;
95
- const eventsPartSeparatorIndex = data.indexOf(OPTIONAL_EVENTS_SEPARATOR);
96
- if (eventsPartSeparatorIndex > 0) {
97
- // Case the data contains events part with dedicated separator
98
- classes = data.substring(0, eventsPartSeparatorIndex);
99
- clickName = data.substring(eventsPartSeparatorIndex + 1);
100
- }
101
- else {
102
- // Otherwise, only design classes are provided
103
- classes = data;
104
- clickName = undefined;
105
- }
106
- let rest = afterParserStart.substring(index + PARSE_MIDDLE.length);
107
- index = rest.indexOf(PARSE_END);
108
- if (index <= 0) {
109
- console.error('Not able to parse invalid string: ' + toCut);
110
- return 'invalid';
111
- }
112
- const content = rest.substring(0, index);
113
- rest = rest.substring(index + PARSE_END.length);
114
- return {
115
- content,
116
- classes: classes.split(DATA_SEPARATOR),
117
- clickName,
118
- rest
119
- };
120
- }
121
43
  }
122
44
  MultiStyleTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: MultiStyleTextDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
123
45
  MultiStyleTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: MultiStyleTextDirective, isStandalone: true, selector: "[multiStyleText]", inputs: { multiStyleText: "multiStyleText" }, outputs: { partEvent: "partEvent" }, ngImport: i0 });
@@ -133,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImpor
133
55
  }], partEvent: [{
134
56
  type: Output
135
57
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc3R5bGUtdGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvZGlyZWN0aXZlcy9zcmMvbXVsdGktc3R5bGUtdGV4dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQXlCLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBRTVGLE1BQU0sVUFBVSxHQUFHLDBCQUEwQixDQUFDO0FBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQUMxQixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztBQUNwQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0IsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFRdEM7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTyx1QkFBdUI7SUFJaEMsSUFBYSxjQUFjLENBQUMsUUFBZ0I7UUFDeEMsc0RBQXNEO1FBQ3RELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5RDtRQUVELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQzlCLDJEQUEyRDtvQkFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pELE1BQU0sSUFBSSxHQUFH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Q0QsSUFBSSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUM1RCxPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEQsT0FBTztZQUNILE9BQU87WUFDUCxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDdEMsU0FBUztZQUNULElBQUk7U0FDUCxDQUFDO0lBQ04sQ0FBQzs7b0hBakhRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1AsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7eUhBS2dCLGNBQWM7c0JBQTFCLEtBQUs7Z0JBK0JJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFJlbmRlcmVyMiwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBQQVJUX1NUQVJUID0gJzxuZy1jb250YWluZXIgZGF0YS1tc3Q9XCInO1xuY29uc3QgUEFSU0VfTUlERExFID0gJ1wiPic7XG5jb25zdCBQQVJTRV9FTkQgPSAnPC9uZy1jb250YWluZXI+JztcbmNvbnN0IERBVEFfU0VQQVJBVE9SID0gJywnO1xuY29uc3QgT1BUSU9OQUxfRVZFTlRTX1NFUEFSQVRPUiA9ICc7JztcblxuaW50ZXJmYWNlIFBhcnQge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBjbGF6ej86IHN0cmluZ1tdOyAvLyBOb3QgZGVmaW5lZCBvbiBzdGVyaWxlIHRleHRcbiAgICBjbGlja05hbWU/OiBzdHJpbmc7IC8vIE5vdCBkZWZpbmVkIG9uIHN0ZXJpbGUgdGV4dFxufVxuXG4vKipcbiAqIFRoaXMgZGlyZWN0aXZlIGFpbXMgdG8gcGFyc2Ugc2ltcGxlIHN0cmluZyB0byBleHRyYWN0IHNvbWUgc3BlY2lmaWMgdGFncyBhbmQgdG8gdHVybiB0aGVtIGludG8gU1BBTiB3aXRoIHN0eWxpbmcgY2xhc3NlcyBhdHRyaWJ1dGVzIGFuZCBvcHRpb25hbCBldmVudCBsaXN0ZW5pbmcuXG4gKiBUaGUgc3BlY2lmaWMgdGFncyBtdXN0IHRoaXMgc2NoZW1hOiA8bmctY29udGFpbmVyIGRhdGEtbXN0PVwiU1RZTElORy1DTEFTU0VTXCI+VEVYVDwvbmctY29udGFpbmVyPi5cbiAqIEV4YW1wbGU6ICdMb3JlbSA8bmctY29udGFpbmVyIGRhdGEtbXN0PVwibXktc3R5bGVcIj5pcHN1bTwvbmctY29udGFpbmVyPiBkb2xvciBzaXQgYW1ldCcuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbbXVsdGlTdHlsZVRleHRdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aVN0eWxlVGV4dERpcmVjdGl2ZSB7XG5cbiAgICBwcml2YXRlIGNoaWxkcmVuQ3JlYXRlZDogYW55W10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHNldCBtdWx0aVN0eWxlVGV4dChmdWxsVGV4dDogc3RyaW5nKSB7XG4gICAgICAgIC8vIEZpcnN0IHJlbW92ZSBwcmV2aW91c2x5IGFkZGVkIGNoaWxkcmVuIChvbiB1cGRhdGUpLlxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW5DcmVhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bGxUZXh0ICYmIGZ1bGxUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIE11bHRpU3R5bGVUZXh0RGlyZWN0aXZlLnBhcnNlKGZ1bGxUZXh0KS5mb3JFYWNoKChwYXJ0OiBQYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQuY2xhenogfHwgcGFydC5jbGlja05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2VkIGl0ZW0gd2l0aCBzdHlsaW5nIGNsYXNzZXMgYW5kL29yIGV2ZW50IGxpc3RlbmluZy5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHBhcnQuY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc3BhbiwgdGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LmNsYXp6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmNsYXp6LmZvckVhY2goY2xhenogPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzcGFuLCBjbGF6eikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LmNsaWNrTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oc3BhbiwgJ2NsaWNrJywgKCkgPT4gdGhpcy5wYXJ0RXZlbnQuZW1pdChwYXJ0LmNsaWNrTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNyZWF0ZWQucHVzaChzcGFuKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWZpYyBvZiBwYXJ0IHdpdGhvdXQgc3R5bGluZyBjbGFzc2VzIChjb3VsZCBiZSB1c2VkIHRvIGdldCBldmVudCBsaXN0ZW5pbmcgb25seSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChwYXJ0LmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgdGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5DcmVhdGVkLnB1c2godGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgcGFydEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHBhcnNlKHRvUGFyc2U6IHN0cmluZyk6IFBhcnRbXSB7XG4gICAgICAgIGNvbnN0IHBhcnRzOiBQYXJ0W10gPSBbXTtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB0b1BhcnNlLmluZGV4T2YoUEFSVF9TVEFSVCk7XG4gICAgICAgIHdoaWxlIChzdGFydEluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGlmIChzdGFydEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIE9wdGlvbmFsIHRleHQgYmVmb3JlIGZpcnN0IHBhcnNlZCBwYXJ0LlxuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goe2NvbnRlbnQ6IHRvUGFyc2Uuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5jdXRGaXJzdEdyb3VwKHRvUGFyc2Uuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpKTtcbiAgICAgICAgICAgIGlmIChlbGVtID09PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogZWxlbS5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBjbGF6ejogZWxlbS5jbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICBjbGlja05hbWU6IGVsZW0uY2xpY2tOYW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdG9QYXJzZSA9IGVsZW0ucmVzdDtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gdG9QYXJzZS5pbmRleE9mKFBBUlRfU1RBUlQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtjb250ZW50OiB0b1BhcnNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmVyeSBlbmRcbiAgICAgICAgaWYgKHRvUGFyc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcGFydHMucHVzaCh7Y29udGVudDogdG9QYXJzZX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJ0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjdXRGaXJzdEdyb3VwKHRvQ3V0OiBzdHJpbmcpOiB7Y29udGVudDogc3RyaW5nLCBjbGFzc2VzOiBzdHJpbmdbXSwgY2xpY2tOYW1lOiBzdHJpbmcsIHJlc3Q6IHN0cmluZ30gfCAnaW52YWxpZCcgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0b0N1dC5zdGFydHNXaXRoKFBBUlRfU1RBUlQpKSB7XG4gICAgICAgICAgICAvLyBTdHJpbmcgZG9lc24ndCBzdGFydCB3aXRoIGV4cGVjdGVkIHBhcnNlciBzdGFydC5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJQYXJzZXJTdGFydCA9IHRvQ3V0LnN1YnN0cmluZyhQQVJUX1NUQVJULmxlbmd0aCk7XG4gICAgICAgIGxldCBpbmRleCA9IGFmdGVyUGFyc2VyU3RhcnQuaW5kZXhPZihQQVJTRV9NSURETEUpO1xuICAgICAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm90IGFibGUgdG8gcGFyc2UgaW52YWxpZCBzdHJpbmc6ICcgKyB0b0N1dCk7XG4gICAgICAgICAgICByZXR1cm4gJ2ludmFsaWQnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhZnRlclBhcnNlclN0YXJ0LnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIGxldCBjbGFzc2VzO1xuICAgICAgICBsZXQgY2xpY2tOYW1lO1xuICAgICAgICBjb25zdCBldmVudHNQYXJ0U2VwYXJhdG9ySW5kZXggPSBkYXRhLmluZGV4T2YoT1BUSU9OQUxfRVZFTlRTX1NFUEFSQVRPUik7XG4gICAgICAgIGlmIChldmVudHNQYXJ0U2VwYXJhdG9ySW5kZXggPiAwKSB7XG4gICAgICAgICAgICAvLyBDYXNlIHRoZSBkYXRhIGNvbnRhaW5zIGV2ZW50cyBwYXJ0IHdpdGggZGVkaWNhdGVkIHNlcGFyYXRvclxuICAgICAgICAgICAgY2xhc3NlcyA9IGRhdGEuc3Vic3RyaW5nKDAsIGV2ZW50c1BhcnRTZXBhcmF0b3JJbmRleCk7XG4gICAgICAgICAgICBjbGlja05hbWUgPSBkYXRhLnN1YnN0cmluZyhldmVudHNQYXJ0U2VwYXJhdG9ySW5kZXggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgb25seSBkZXNpZ24gY2xhc3NlcyBhcmUgcHJvdmlkZWRcbiAgICAgICAgICAgIGNsYXNzZXMgPSBkYXRhO1xuICAgICAgICAgICAgY2xpY2tOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN0ID0gYWZ0ZXJQYXJzZXJTdGFydC5zdWJzdHJpbmcoaW5kZXggKyBQQVJTRV9NSURETEUubGVuZ3RoKTtcbiAgICAgICAgaW5kZXggPSByZXN0LmluZGV4T2YoUEFSU0VfRU5EKTtcbiAgICAgICAgaWYgKGluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vdCBhYmxlIHRvIHBhcnNlIGludmFsaWQgc3RyaW5nOiAnICsgdG9DdXQpO1xuICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlkJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzdC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICByZXN0ID0gcmVzdC5zdWJzdHJpbmcoaW5kZXggKyBQQVJTRV9FTkQubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGNsYXNzZXM6IGNsYXNzZXMuc3BsaXQoREFUQV9TRVBBUkFUT1IpLFxuICAgICAgICAgICAgY2xpY2tOYW1lLFxuICAgICAgICAgICAgcmVzdFxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc3R5bGUtdGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvZGlyZWN0aXZlcy9zcmMvbXVsdGktc3R5bGUtdGV4dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7O0FBRWxDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQTtBQVEzQjs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHVCQUF1QjtJQUVoQyxJQUFhLGNBQWMsQ0FBQyxRQUFnQjtRQUN4QyxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDbkMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUMzRCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ2hFLENBQUM7UUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQXNCLEVBQUUsRUFBRTtZQUM3RSxJQUFJLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsb0JBQW9CO2dCQUU3RixNQUFNLElBQUksR0FBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFFdkQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEMsb0JBQW9CO29CQUNwQixJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNsRjtvQkFDRCxjQUFjO29CQUNkLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7cUJBQzlFO2lCQUVKO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFJRCxZQUNZLEtBQWlCLEVBQ2pCLFFBQW1CO1FBRG5CLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUpyQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUs5QyxDQUFDOztvSEExQ0ssdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjt5SEFHZ0IsY0FBYztzQkFBMUIsS0FBSztnQkFtQ0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgRE9NUHVyaWZ5IGZyb20gJ2RvbXB1cmlmeSc7XG5cbmNvbnN0IERBVEFfTVNUID0gJ2RhdGEtbXN0J1xuXG5pbnRlcmZhY2UgUGFydCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIGNsYXp6Pzogc3RyaW5nW107IC8vIE5vdCBkZWZpbmVkIG9uIHN0ZXJpbGUgdGV4dFxuICAgIGNsaWNrTmFtZT86IHN0cmluZzsgLy8gTm90IGRlZmluZWQgb24gc3RlcmlsZSB0ZXh0XG59XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgYWltcyB0byBwYXJzZSBzaW1wbGUgc3RyaW5nIHRvIGV4dHJhY3Qgc29tZSBzcGVjaWZpYyB0YWdzIGFuZCB0byB0dXJuIHRoZW0gaW50byBTUEFOIHdpdGggc3R5bGluZyBjbGFzc2VzIGF0dHJpYnV0ZXMgYW5kIG9wdGlvbmFsIGV2ZW50IGxpc3RlbmluZy5cbiAqIFRoZSBzcGVjaWZpYyB0YWdzIG11c3QgdGhpcyBzY2hlbWE6IDxuZy1jb250YWluZXIgZGF0YS1tc3Q9XCJTVFlMSU5HLUNMQVNTRVNcIj5URVhUPC9uZy1jb250YWluZXI+LlxuICogRXhhbXBsZTogJ0xvcmVtIDxuZy1jb250YWluZXIgZGF0YS1tc3Q9XCJteS1zdHlsZVwiPmlwc3VtPC9uZy1jb250YWluZXI+IGRvbG9yIHNpdCBhbWV0Jy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1ttdWx0aVN0eWxlVGV4dF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU3R5bGVUZXh0RGlyZWN0aXZlIHtcblxuICAgIEBJbnB1dCgpIHNldCBtdWx0aVN0eWxlVGV4dChmdWxsVGV4dDogc3RyaW5nKSB7XG4gICAgICAgIC8vIEZpcnN0IHJlbW92ZSBwcmV2aW91c2x5IGFkZGVkIGNoaWxkcmVuIChvbiB1cGRhdGUpLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2lubmVySFRNTCcsIFwiXCIpO1xuICAgICAgICBpZiAoIWZ1bGxUZXh0IHx8IGZ1bGxUZXh0Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2lubmVySFRNTCcsXG4gICAgICAgICAgICBET01QdXJpZnkuc2FuaXRpemUoZnVsbFRleHQucmVwbGFjZSgvbmctY29udGFpbmVyL2csICdzcGFuJykpXG4gICAgICAgICk7XG5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkTm9kZTogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT0gMSAmJiBjaGlsZE5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc3BhbicpIHsgLy8gTm9kZS5FTEVNRU5UX05PREVcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW46IEhUTUxFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgc3Bhbi5pbm5lckhUTUwgPSBjaGlsZE5vZGUuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5yZXBsYWNlQ2hpbGQoc3BhbiwgY2hpbGROb2RlKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1zdFZhbHVlID0gY2hpbGROb2RlLmdldEF0dHJpYnV0ZShEQVRBX01TVCk7XG4gICAgICAgICAgICAgICAgaWYgKG1zdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zdENvbnRlbnRzID0gbXN0VmFsdWUuc3BsaXQoJzsnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQmluZCBjbGljayBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zdENvbnRlbnRzWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzcGFuLCAnY2xpY2snLCAoKSA9PiB0aGlzLnBhcnRFdmVudC5lbWl0KG1zdENvbnRlbnRzWzFdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGNsYXNzZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zdENvbnRlbnRzWzBdICYmIG1zdENvbnRlbnRzWzBdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHNwYW4sICdjbGFzcycsIG1zdENvbnRlbnRzWzBdLnJlcGxhY2UoJywnLCAnICcpKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBwYXJ0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICkge31cblxufVxuIl19
@@ -65,11 +65,11 @@ export class SplitButtonComponent {
65
65
  }
66
66
  }
67
67
  SplitButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: SplitButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
68
- SplitButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: SplitButtonComponent, isStandalone: true, selector: "ap-split-button[name]", inputs: { ariaLabel: "ariaLabel", disabled: "disabled", name: "name", config: "config", menuTrigger: "menuTrigger", splitDisabled: "splitDisabled", symbolPosition: "symbolPosition", splitButtonDataTest: "splitButtonDataTest" }, outputs: { menuOpened: "menuOpened", menuClosed: "menuClosed", click: "click", focus: "focus", blur: "blur" }, host: { listeners: { "window:keyup.space": "onSpaceKeyUp($event)" }, properties: { "attr.disabled": "disabled || null" } }, providers: [], queries: [{ propertyName: "symbolComponent", first: true, predicate: SymbolComponent, descendants: true }], viewQueries: [{ propertyName: "buttonElement", first: true, predicate: ["button"], descendants: true }, { propertyName: "splitButtonElement", first: true, predicate: ["splitButton"], descendants: true }], hostDirectives: [{ directive: i1.BaseButtonDirective }], ngImport: i0, template: "<button\n #button\n role=\"button\"\n [class.primary]=\"config.style === 'primary'\"\n [class.orange]=\"config.color === 'orange'\"\n [class.blue]=\"config.color === 'blue'\"\n [class.inverse]=\"symbolPosition === 'left'\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [attr.id]=\"baseButtonDirective.hostId\"\n [attr.data-test]=\"baseButtonDirective.hostDataTest ?? name\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-disabled]=\"disabled?.toString()\"\n (click)=\"onClickHandle($event)\"\n (focus)=\"focus.emit($event)\"\n (blur)=\"blur.emit($event)\"\n>\n <ng-content select=\"span\"></ng-content>\n <ng-content select=\"ap-symbol\"></ng-content>\n</button>\n<button\n #splitButton\n #trigger=\"matMenuTrigger\"\n role=\"button\"\n [class.primary]=\"config.style === 'primary'\"\n [class.orange]=\"config.color === 'orange'\"\n [class.blue]=\"config.color === 'blue'\"\n [disabled]=\"splitDisabled\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-disabled]=\"splitDisabled.toString()\"\n [attr.data-test]=\"splitButtonDataTest ?? name + '-split'\"\n (click)=\"onSplitButtonClickHandle($event)\"\n [matMenuTriggerFor]=\"menuTrigger\"\n (menuClosed)=\"handleMenuClosed()\"\n (menuOpened)=\"handleMenuOpened()\"\n>\n <ap-symbol symbolId=\"arrow-down-1\"\n size=\"nano\"\n [class.opened]=\"menuOpen\"></ap-symbol>\n</button>\n", styles: ["ap-split-button{--loading-bar-width: 50px;display:inline-flex;gap:1px;position:relative}ap-split-button[disabled]{pointer-events:none}ap-split-button button{border:none;position:relative;padding:var(--comp-split-button-padding-horizontal) var(--comp-split-button-padding-vertical);max-height:var(--comp-button-height);min-height:var(--comp-button-height);overflow:hidden;display:flex;flex-direction:row;justify-content:center;align-items:center;gap:10px}ap-split-button button.inverse{flex-direction:row-reverse}ap-split-button button:hover:not(:disabled):not(.loading){cursor:pointer}ap-split-button button:disabled{pointer-events:none}@media (hover: hover){ap-split-button button:focus:not(:disabled):not(:active):not(.loading){outline:2px solid var(--ref-color-electric-blue-100);outline-offset:1px;z-index:10}}ap-split-button button span{font-size:var(--comp-split-button-text-size);font-family:var(--comp-split-button-text-font-family);line-height:var(--comp-split-button-text-line-height);font-weight:var(--comp-split-button-text-weight);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ap-split-button button.loading{pointer-events:none}ap-split-button button.primary span,ap-split-button button.primary ap-symbol{color:var(--ref-color-white)}ap-split-button button.primary.orange{background:var(--ref-color-orange-100)}ap-split-button button.primary.orange:hover{background-color:var(--ref-color-orange-80)}ap-split-button button.primary.orange:active:not(:disabled){background-color:var(--ref-color-orange-60)}ap-split-button button.primary.orange:disabled{background-color:var(--ref-color-orange-20)}ap-split-button button.primary.orange.loading{background-color:var(--ref-color-orange-60)}ap-split-button button.primary.orange .loading-bar{background-color:var(--ref-color-orange-100)}ap-split-button button.primary.blue{background:var(--ref-color-electric-blue-100)}ap-split-button button.primary.blue:hover{background-color:var(--ref-color-electric-blue-80)}ap-split-button button.primary.blue:active:not(:disabled){background-color:var(--ref-color-electric-blue-60)}ap-split-button button.primary.blue:disabled{background-color:var(--ref-color-electric-blue-20)}ap-split-button button.primary.blue.loading{background-color:var(--ref-color-electric-blue-60)}ap-split-button button.primary.blue .loading-bar{background-color:var(--ref-color-electric-blue-100)}ap-split-button button:first-child{border-top-left-radius:var(--comp-split-button-border-radius);border-bottom-left-radius:var(--comp-split-button-border-radius)}ap-split-button button:last-child{border-top-right-radius:var(--comp-split-button-border-radius);border-bottom-right-radius:var(--comp-split-button-border-radius);padding:var(--comp-split-button-padding-horizontal) 10px var(--comp-split-button-padding-horizontal) 10px}ap-split-button button ap-symbol{will-change:transform;transition:.2s ease-in-out}ap-split-button button ap-symbol.opened{transform:rotate(180deg)}\n"], dependencies: [{ kind: "component", type: SymbolComponent, selector: "ap-symbol[symbolId]", inputs: ["color", "symbolId", "size", "state"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
68
+ SplitButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: SplitButtonComponent, isStandalone: true, selector: "ap-split-button[name]", inputs: { ariaLabel: "ariaLabel", disabled: "disabled", name: "name", config: "config", menuTrigger: "menuTrigger", splitDisabled: "splitDisabled", symbolPosition: "symbolPosition", splitButtonDataTest: "splitButtonDataTest" }, outputs: { menuOpened: "menuOpened", menuClosed: "menuClosed", click: "click", focus: "focus", blur: "blur" }, host: { listeners: { "window:keyup.space": "onSpaceKeyUp($event)" }, properties: { "attr.disabled": "(disabled && splitDisabled) || null" } }, providers: [], queries: [{ propertyName: "symbolComponent", first: true, predicate: SymbolComponent, descendants: true }], viewQueries: [{ propertyName: "buttonElement", first: true, predicate: ["button"], descendants: true }, { propertyName: "splitButtonElement", first: true, predicate: ["splitButton"], descendants: true }], hostDirectives: [{ directive: i1.BaseButtonDirective }], ngImport: i0, template: "<button\n #button\n role=\"button\"\n [class.primary]=\"config.style === 'primary'\"\n [class.orange]=\"config.color === 'orange'\"\n [class.blue]=\"config.color === 'blue'\"\n [class.inverse]=\"symbolPosition === 'left'\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [attr.id]=\"baseButtonDirective.hostId\"\n [attr.data-test]=\"baseButtonDirective.hostDataTest ?? name\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-disabled]=\"disabled?.toString()\"\n (click)=\"onClickHandle($event)\"\n (focus)=\"focus.emit($event)\"\n (blur)=\"blur.emit($event)\"\n>\n <ng-content select=\"span\"></ng-content>\n <ng-content select=\"ap-symbol\"></ng-content>\n</button>\n<button\n #splitButton\n #trigger=\"matMenuTrigger\"\n role=\"button\"\n [class.primary]=\"config.style === 'primary'\"\n [class.orange]=\"config.color === 'orange'\"\n [class.blue]=\"config.color === 'blue'\"\n [disabled]=\"splitDisabled\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-disabled]=\"splitDisabled.toString()\"\n [attr.data-test]=\"splitButtonDataTest ?? name + '-split'\"\n (click)=\"onSplitButtonClickHandle($event)\"\n [matMenuTriggerFor]=\"menuTrigger\"\n (menuClosed)=\"handleMenuClosed()\"\n (menuOpened)=\"handleMenuOpened()\"\n>\n <ap-symbol symbolId=\"arrow-down-1\"\n size=\"nano\"\n [class.opened]=\"menuOpen\"></ap-symbol>\n</button>\n", styles: ["ap-split-button{--loading-bar-width: 50px;display:inline-flex;gap:1px;position:relative}ap-split-button[disabled]{pointer-events:none}ap-split-button button{border:none;position:relative;padding:var(--comp-split-button-padding-horizontal) var(--comp-split-button-padding-vertical);max-height:var(--comp-button-height);min-height:var(--comp-button-height);overflow:hidden;display:flex;flex-direction:row;justify-content:center;align-items:center;gap:10px}ap-split-button button.inverse{flex-direction:row-reverse}ap-split-button button:hover:not(:disabled):not(.loading){cursor:pointer}ap-split-button button:disabled{pointer-events:none}@media (hover: hover){ap-split-button button:focus:not(:disabled):not(:active):not(.loading){outline:2px solid var(--ref-color-electric-blue-100);outline-offset:1px;z-index:10}}ap-split-button button span{font-size:var(--comp-split-button-text-size);font-family:var(--comp-split-button-text-font-family);line-height:var(--comp-split-button-text-line-height);font-weight:var(--comp-split-button-text-weight);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ap-split-button button.loading{pointer-events:none}ap-split-button button.primary span,ap-split-button button.primary ap-symbol{color:var(--ref-color-white)}ap-split-button button.primary.orange{background:var(--ref-color-orange-100)}ap-split-button button.primary.orange:hover{background-color:var(--ref-color-orange-80)}ap-split-button button.primary.orange:active:not(:disabled){background-color:var(--ref-color-orange-60)}ap-split-button button.primary.orange:disabled{background-color:var(--ref-color-orange-20)}ap-split-button button.primary.orange.loading{background-color:var(--ref-color-orange-60)}ap-split-button button.primary.orange .loading-bar{background-color:var(--ref-color-orange-100)}ap-split-button button.primary.blue{background:var(--ref-color-electric-blue-100)}ap-split-button button.primary.blue:hover{background-color:var(--ref-color-electric-blue-80)}ap-split-button button.primary.blue:active:not(:disabled){background-color:var(--ref-color-electric-blue-60)}ap-split-button button.primary.blue:disabled{background-color:var(--ref-color-electric-blue-20)}ap-split-button button.primary.blue.loading{background-color:var(--ref-color-electric-blue-60)}ap-split-button button.primary.blue .loading-bar{background-color:var(--ref-color-electric-blue-100)}ap-split-button button:first-child{border-top-left-radius:var(--comp-split-button-border-radius);border-bottom-left-radius:var(--comp-split-button-border-radius)}ap-split-button button:last-child{border-top-right-radius:var(--comp-split-button-border-radius);border-bottom-right-radius:var(--comp-split-button-border-radius);padding:var(--comp-split-button-padding-horizontal) 10px var(--comp-split-button-padding-horizontal) 10px}ap-split-button button ap-symbol{will-change:transform;transition:.2s ease-in-out}ap-split-button button ap-symbol.opened{transform:rotate(180deg)}\n"], dependencies: [{ kind: "component", type: SymbolComponent, selector: "ap-symbol[symbolId]", inputs: ["color", "symbolId", "size", "state"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
69
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: SplitButtonComponent, decorators: [{
70
70
  type: Component,
71
71
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ap-split-button[name]', standalone: true, imports: [NgIf, SymbolComponent, CommonModule, MatMenuModule], providers: [], encapsulation: ViewEncapsulation.None, hostDirectives: [BaseButtonDirective], host: {
72
- '[attr.disabled]': 'disabled || null',
72
+ '[attr.disabled]': '(disabled && splitDisabled) || null',
73
73
  }, template: "<button\n #button\n role=\"button\"\n [class.primary]=\"config.style === 'primary'\"\n [class.orange]=\"config.color === 'orange'\"\n [class.blue]=\"config.color === 'blue'\"\n [class.inverse]=\"symbolPosition === 'left'\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [attr.id]=\"baseButtonDirective.hostId\"\n [attr.data-test]=\"baseButtonDirective.hostDataTest ?? name\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-disabled]=\"disabled?.toString()\"\n (click)=\"onClickHandle($event)\"\n (focus)=\"focus.emit($event)\"\n (blur)=\"blur.emit($event)\"\n>\n <ng-content select=\"span\"></ng-content>\n <ng-content select=\"ap-symbol\"></ng-content>\n</button>\n<button\n #splitButton\n #trigger=\"matMenuTrigger\"\n role=\"button\"\n [class.primary]=\"config.style === 'primary'\"\n [class.orange]=\"config.color === 'orange'\"\n [class.blue]=\"config.color === 'blue'\"\n [disabled]=\"splitDisabled\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-disabled]=\"splitDisabled.toString()\"\n [attr.data-test]=\"splitButtonDataTest ?? name + '-split'\"\n (click)=\"onSplitButtonClickHandle($event)\"\n [matMenuTriggerFor]=\"menuTrigger\"\n (menuClosed)=\"handleMenuClosed()\"\n (menuOpened)=\"handleMenuOpened()\"\n>\n <ap-symbol symbolId=\"arrow-down-1\"\n size=\"nano\"\n [class.opened]=\"menuOpen\"></ap-symbol>\n</button>\n", styles: ["ap-split-button{--loading-bar-width: 50px;display:inline-flex;gap:1px;position:relative}ap-split-button[disabled]{pointer-events:none}ap-split-button button{border:none;position:relative;padding:var(--comp-split-button-padding-horizontal) var(--comp-split-button-padding-vertical);max-height:var(--comp-button-height);min-height:var(--comp-button-height);overflow:hidden;display:flex;flex-direction:row;justify-content:center;align-items:center;gap:10px}ap-split-button button.inverse{flex-direction:row-reverse}ap-split-button button:hover:not(:disabled):not(.loading){cursor:pointer}ap-split-button button:disabled{pointer-events:none}@media (hover: hover){ap-split-button button:focus:not(:disabled):not(:active):not(.loading){outline:2px solid var(--ref-color-electric-blue-100);outline-offset:1px;z-index:10}}ap-split-button button span{font-size:var(--comp-split-button-text-size);font-family:var(--comp-split-button-text-font-family);line-height:var(--comp-split-button-text-line-height);font-weight:var(--comp-split-button-text-weight);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ap-split-button button.loading{pointer-events:none}ap-split-button button.primary span,ap-split-button button.primary ap-symbol{color:var(--ref-color-white)}ap-split-button button.primary.orange{background:var(--ref-color-orange-100)}ap-split-button button.primary.orange:hover{background-color:var(--ref-color-orange-80)}ap-split-button button.primary.orange:active:not(:disabled){background-color:var(--ref-color-orange-60)}ap-split-button button.primary.orange:disabled{background-color:var(--ref-color-orange-20)}ap-split-button button.primary.orange.loading{background-color:var(--ref-color-orange-60)}ap-split-button button.primary.orange .loading-bar{background-color:var(--ref-color-orange-100)}ap-split-button button.primary.blue{background:var(--ref-color-electric-blue-100)}ap-split-button button.primary.blue:hover{background-color:var(--ref-color-electric-blue-80)}ap-split-button button.primary.blue:active:not(:disabled){background-color:var(--ref-color-electric-blue-60)}ap-split-button button.primary.blue:disabled{background-color:var(--ref-color-electric-blue-20)}ap-split-button button.primary.blue.loading{background-color:var(--ref-color-electric-blue-60)}ap-split-button button.primary.blue .loading-bar{background-color:var(--ref-color-electric-blue-100)}ap-split-button button:first-child{border-top-left-radius:var(--comp-split-button-border-radius);border-bottom-left-radius:var(--comp-split-button-border-radius)}ap-split-button button:last-child{border-top-right-radius:var(--comp-split-button-border-radius);border-bottom-right-radius:var(--comp-split-button-border-radius);padding:var(--comp-split-button-padding-horizontal) 10px var(--comp-split-button-padding-horizontal) 10px}ap-split-button button ap-symbol{will-change:transform;transition:.2s ease-in-out}ap-split-button button ap-symbol.opened{transform:rotate(180deg)}\n"] }]
74
74
  }], ctorParameters: function () { return []; }, propDecorators: { buttonElement: [{
75
75
  type: ViewChild,
@@ -110,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImpor
110
110
  type: HostListener,
111
111
  args: ['window:keyup.space', ['$event']]
112
112
  }] } });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9zcGxpdC1idXR0b24vc3JjL3NwbGl0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvc3BsaXQtYnV0dG9uL3NyYy9zcGxpdC1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFFWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFtQnpFLE1BQU0sT0FBTyxvQkFBb0I7SUE4QjdCO1FBN0JRLG1CQUFjLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2RCx3QkFBbUIsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFLckYsYUFBUSxHQUF3QixLQUFLLENBQUM7UUFJdEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsbUJBQWMsR0FBcUIsT0FBTyxDQUFDO1FBTzFDLGVBQVUsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRCxlQUFVLEdBQXVCLElBQUksWUFB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QVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRW9CLGtCQUFrQjtzQkFBM0MsU0FBUzt1QkFBQyxhQUFhO2dCQUVPLGVBQWU7c0JBQTdDLFlBQVk7dUJBQUMsZUFBZTtnQkFFbkIsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLEtBQUs7c0JBQWQsTUFBTTtnQkFFRyxLQUFLO3NCQUFkLE1BQU07Z0JBRUcsSUFBSTtzQkFBYixNQUFNO2dCQWdEUCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2UsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHthcEFycm93RG93bjEsIFN5bWJvbENvbXBvbmVudCwgU3ltYm9sUmVnaXN0cnl9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLXN5bWJvbCc7XG5pbXBvcnQge01hdExlZ2FjeU1lbnV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1tZW51JztcbmltcG9ydCB7TWF0TWVudU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQge0Jhc2VCdXR0b25EaXJlY3RpdmV9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLWNvbXBvbmVudHMvZGlyZWN0aXZlcyc7XG5cbnR5cGUgU3BsaXRCdXR0b25Db25maWcgPSB7c3R5bGU6ICdwcmltYXJ5JzsgY29sb3I6ICdvcmFuZ2UnIHwgJ2JsdWUnfTtcblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdhcC1zcGxpdC1idXR0b25bbmFtZV0nLFxuICAgIHN0eWxlVXJsczogWycuL3NwbGl0LWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIFN5bWJvbENvbXBvbmVudCwgQ29tbW9uTW9kdWxlLCBNYXRNZW51TW9kdWxlXSxcbiAgICBwcm92aWRlcnM6IFtdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zcGxpdC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtCYXNlQnV0dG9uRGlyZWN0aXZlXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5kaXNhYmxlZF0nOiAnZGlzYWJsZWQgfHwgbnVsbCcsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU3BsaXRCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBwcml2YXRlIHN5bWJvbFJlZ2lzdHJ5OiBTeW1ib2xSZWdpc3RyeSA9IGluamVjdChTeW1ib2xSZWdpc3RyeSk7XG4gICAgcmVhZG9ubHkgYmFzZUJ1dHRvbkRpcmVjdGl2ZTogQmFzZUJ1dHRvbkRpcmVjdGl2ZSA9IGluamVjdChCYXNlQnV0dG9uRGlyZWN0aXZlLCB7c2VsZjogdHJ1ZX0pO1xuXG4gICAgQFZpZXdDaGlsZCgnYnV0dG9uJykgYnV0dG9uRWxlbWVudDogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWc6IFNwbGl0QnV0dG9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1lbnVUcmlnZ2VyOiBNYXRMZWdhY3lNZW51O1xuICAgIEBJbnB1dCgpIHNwbGl0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzeW1ib2xQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCc7XG4gICAgQElucHV0KCkgc3BsaXRCdXR0b25EYXRhVGVzdDogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZCgnc3BsaXRCdXR0b24nKSBzcGxpdEJ1dHRvbkVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZChTeW1ib2xDb21wb25lbnQpIHN5bWJvbENvbXBvbmVudDogU3ltYm9sQ29tcG9uZW50O1xuXG4gICAgQE91dHB1dCgpIG1lbnVPcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbWVudUNsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSBjbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSBmb2N1czogRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSBibHVyOiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBtZW51T3BlbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sUmVnaXN0cnkucmVnaXN0ZXJTeW1ib2xzKFthcEFycm93RG93bjFdKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN5bWJvbENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zeW1ib2xDb21wb25lbnQuc2l6ZSA9ICdtaWNybyc7XG4gICAgICAgICAgICB0aGlzLnN5bWJvbENvbXBvbmVudC5uZ09uQ2hhbmdlcyh7XG4gICAgICAgICAgICAgICAgc2l6ZTogbmV3IFNpbXBsZUNoYW5nZShudWxsLCB0aGlzLnN5bWJvbENvbXBvbmVudC5zaXplLCBmYWxzZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU3BsaXRCdXR0b25DbGlja0hhbmRsZSgkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgJGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGhhbmRsZU1lbnVPcGVuZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWVudU9wZW5lZC5lbWl0KCk7XG4gICAgICAgIHRoaXMubWVudU9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgIHRoaXMuc3BsaXRCdXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cblxuICAgIGhhbmRsZU1lbnVDbG9zZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWVudUNsb3NlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMubWVudU9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB0aGlzLnNwbGl0QnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG5cbiAgICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBvbkNsaWNrSGFuZGxlKCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5jbGljay5lbWl0KCRldmVudCk7XG4gICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuc3BhY2UnLCBbJyRldmVudCddKVxuICAgIG9uU3BhY2VLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxidXR0b25cbiAgICAjYnV0dG9uXG4gICAgcm9sZT1cImJ1dHRvblwiXG4gICAgW2NsYXNzLnByaW1hcnldPVwiY29uZmlnLnN0eWxlID09PSAncHJpbWFyeSdcIlxuICAgIFtjbGFzcy5vcmFuZ2VdPVwiY29uZmlnLmNvbG9yID09PSAnb3JhbmdlJ1wiXG4gICAgW2NsYXNzLmJsdWVdPVwiY29uZmlnLmNvbG9yID09PSAnYmx1ZSdcIlxuICAgIFtjbGFzcy5pbnZlcnNlXT1cInN5bWJvbFBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2F0dHIuaWRdPVwiYmFzZUJ1dHRvbkRpcmVjdGl2ZS5ob3N0SWRcIlxuICAgIFthdHRyLmRhdGEtdGVzdF09XCJiYXNlQnV0dG9uRGlyZWN0aXZlLmhvc3REYXRhVGVzdCA/PyBuYW1lXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkPy50b1N0cmluZygpXCJcbiAgICAoY2xpY2spPVwib25DbGlja0hhbmRsZSgkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwiZm9jdXMuZW1pdCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJibHVyLmVtaXQoJGV2ZW50KVwiXG4+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic3BhblwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhcC1zeW1ib2xcIj48L25nLWNvbnRlbnQ+XG48L2J1dHRvbj5cbjxidXR0b25cbiAgICAjc3BsaXRCdXR0b25cbiAgICAjdHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICByb2xlPVwiYnV0dG9uXCJcbiAgICBbY2xhc3MucHJpbWFyeV09XCJjb25maWcuc3R5bGUgPT09ICdwcmltYXJ5J1wiXG4gICAgW2NsYXNzLm9yYW5nZV09XCJjb25maWcuY29sb3IgPT09ICdvcmFuZ2UnXCJcbiAgICBbY2xhc3MuYmx1ZV09XCJjb25maWcuY29sb3IgPT09ICdibHVlJ1wiXG4gICAgW2Rpc2FibGVkXT1cInNwbGl0RGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwic3BsaXREaXNhYmxlZC50b1N0cmluZygpXCJcbiAgICBbYXR0ci5kYXRhLXRlc3RdPVwic3BsaXRCdXR0b25EYXRhVGVzdCA/PyBuYW1lICsgJy1zcGxpdCdcIlxuICAgIChjbGljayk9XCJvblNwbGl0QnV0dG9uQ2xpY2tIYW5kbGUoJGV2ZW50KVwiXG4gICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVUcmlnZ2VyXCJcbiAgICAobWVudUNsb3NlZCk9XCJoYW5kbGVNZW51Q2xvc2VkKClcIlxuICAgIChtZW51T3BlbmVkKT1cImhhbmRsZU1lbnVPcGVuZWQoKVwiXG4+XG4gICAgPGFwLXN5bWJvbCBzeW1ib2xJZD1cImFycm93LWRvd24tMVwiXG4gICAgICAgICAgICAgICBzaXplPVwibmFub1wiXG4gICAgICAgICAgICAgICBbY2xhc3Mub3BlbmVkXT1cIm1lbnVPcGVuXCI+PC9hcC1zeW1ib2w+XG48L2J1dHRvbj5cbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9zcGxpdC1idXR0b24vc3JjL3NwbGl0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvc3BsaXQtYnV0dG9uL3NyYy9zcGxpdC1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFtQnpFLE1BQU0sT0FBTyxvQkFBb0I7SUE4QjdCO1FBN0JRLG1CQUFjLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2RCx3QkFBbUIsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFLckYsYUFBUSxHQUF3QixLQUFLLENBQUM7UUFJdEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsbUJBQWMsR0FBcUIsT0FBTyxDQUFDO1FBTzFDLGVBQVUsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRCxlQUFVLEdBQXVCLElBQUksWUFB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QVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRW9CLGtCQUFrQjtzQkFBM0MsU0FBUzt1QkFBQyxhQUFhO2dCQUVPLGVBQWU7c0JBQTdDLFlBQVk7dUJBQUMsZUFBZTtnQkFFbkIsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLEtBQUs7c0JBQWQsTUFBTTtnQkFFRyxLQUFLO3NCQUFkLE1BQU07Z0JBRUcsSUFBSTtzQkFBYixNQUFNO2dCQWdEUCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2UsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHthcEFycm93RG93bjEsIFN5bWJvbENvbXBvbmVudCwgU3ltYm9sUmVnaXN0cnl9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLXN5bWJvbCc7XG5pbXBvcnQge01hdExlZ2FjeU1lbnV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1tZW51JztcbmltcG9ydCB7TWF0TWVudU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQge0Jhc2VCdXR0b25EaXJlY3RpdmV9IGZyb20gJ0BhZ29yYXB1bHNlL3VpLWNvbXBvbmVudHMvZGlyZWN0aXZlcyc7XG5cbnR5cGUgU3BsaXRCdXR0b25Db25maWcgPSB7c3R5bGU6ICdwcmltYXJ5JzsgY29sb3I6ICdvcmFuZ2UnIHwgJ2JsdWUnfTtcblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdhcC1zcGxpdC1idXR0b25bbmFtZV0nLFxuICAgIHN0eWxlVXJsczogWycuL3NwbGl0LWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIFN5bWJvbENvbXBvbmVudCwgQ29tbW9uTW9kdWxlLCBNYXRNZW51TW9kdWxlXSxcbiAgICBwcm92aWRlcnM6IFtdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zcGxpdC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtCYXNlQnV0dG9uRGlyZWN0aXZlXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5kaXNhYmxlZF0nOiAnKGRpc2FibGVkICYmIHNwbGl0RGlzYWJsZWQpICB8fCBudWxsJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTcGxpdEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xuICAgIHByaXZhdGUgc3ltYm9sUmVnaXN0cnk6IFN5bWJvbFJlZ2lzdHJ5ID0gaW5qZWN0KFN5bWJvbFJlZ2lzdHJ5KTtcbiAgICByZWFkb25seSBiYXNlQnV0dG9uRGlyZWN0aXZlOiBCYXNlQnV0dG9uRGlyZWN0aXZlID0gaW5qZWN0KEJhc2VCdXR0b25EaXJlY3RpdmUsIHtzZWxmOiB0cnVlfSk7XG5cbiAgICBAVmlld0NoaWxkKCdidXR0b24nKSBidXR0b25FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICAgIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZzogU3BsaXRCdXR0b25Db25maWc7XG4gICAgQElucHV0KCkgbWVudVRyaWdnZXI6IE1hdExlZ2FjeU1lbnU7XG4gICAgQElucHV0KCkgc3BsaXREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHN5bWJvbFBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnID0gJ3JpZ2h0JztcbiAgICBASW5wdXQoKSBzcGxpdEJ1dHRvbkRhdGFUZXN0OiBzdHJpbmc7XG5cbiAgICBAVmlld0NoaWxkKCdzcGxpdEJ1dHRvbicpIHNwbGl0QnV0dG9uRWxlbWVudDogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgICBAQ29udGVudENoaWxkKFN5bWJvbENvbXBvbmVudCkgc3ltYm9sQ29tcG9uZW50OiBTeW1ib2xDb21wb25lbnQ7XG5cbiAgICBAT3V0cHV0KCkgbWVudU9wZW5lZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBtZW51Q2xvc2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIGNsaWNrOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIGZvY3VzOiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIGJsdXI6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIG1lbnVPcGVuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xSZWdpc3RyeS5yZWdpc3RlclN5bWJvbHMoW2FwQXJyb3dEb3duMV0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3ltYm9sQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLnN5bWJvbENvbXBvbmVudC5zaXplID0gJ21pY3JvJztcbiAgICAgICAgICAgIHRoaXMuc3ltYm9sQ29tcG9uZW50Lm5nT25DaGFuZ2VzKHtcbiAgICAgICAgICAgICAgICBzaXplOiBuZXcgU2ltcGxlQ2hhbmdlKG51bGwsIHRoaXMuc3ltYm9sQ29tcG9uZW50LnNpemUsIGZhbHNlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TcGxpdEJ1dHRvbkNsaWNrSGFuZGxlKCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICAkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlTWVudU9wZW5lZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51T3BlbmVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5tZW51T3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgdGhpcy5zcGxpdEJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlTWVudUNsb3NlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51Q2xvc2VkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5tZW51T3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgIHRoaXMuc3BsaXRCdXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cblxuICAgIGZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG9uQ2xpY2tIYW5kbGUoJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNsaWNrLmVtaXQoJGV2ZW50KTtcbiAgICAgICAgdGhpcy5idXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB0aGlzLmJsdXIuZW1pdCgkZXZlbnQpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5zcGFjZScsIFsnJGV2ZW50J10pXG4gICAgb25TcGFjZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGJ1dHRvblxuICAgICNidXR0b25cbiAgICByb2xlPVwiYnV0dG9uXCJcbiAgICBbY2xhc3MucHJpbWFyeV09XCJjb25maWcuc3R5bGUgPT09ICdwcmltYXJ5J1wiXG4gICAgW2NsYXNzLm9yYW5nZV09XCJjb25maWcuY29sb3IgPT09ICdvcmFuZ2UnXCJcbiAgICBbY2xhc3MuYmx1ZV09XCJjb25maWcuY29sb3IgPT09ICdibHVlJ1wiXG4gICAgW2NsYXNzLmludmVyc2VdPVwic3ltYm9sUG9zaXRpb24gPT09ICdsZWZ0J1wiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbbmFtZV09XCJuYW1lXCJcbiAgICBbYXR0ci5pZF09XCJiYXNlQnV0dG9uRGlyZWN0aXZlLmhvc3RJZFwiXG4gICAgW2F0dHIuZGF0YS10ZXN0XT1cImJhc2VCdXR0b25EaXJlY3RpdmUuaG9zdERhdGFUZXN0ID8/IG5hbWVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQ/LnRvU3RyaW5nKClcIlxuICAgIChjbGljayk9XCJvbkNsaWNrSGFuZGxlKCRldmVudClcIlxuICAgIChmb2N1cyk9XCJmb2N1cy5lbWl0KCRldmVudClcIlxuICAgIChibHVyKT1cImJsdXIuZW1pdCgkZXZlbnQpXCJcbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzcGFuXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFwLXN5bWJvbFwiPjwvbmctY29udGVudD5cbjwvYnV0dG9uPlxuPGJ1dHRvblxuICAgICNzcGxpdEJ1dHRvblxuICAgICN0cmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgIFtjbGFzcy5wcmltYXJ5XT1cImNvbmZpZy5zdHlsZSA9PT0gJ3ByaW1hcnknXCJcbiAgICBbY2xhc3Mub3JhbmdlXT1cImNvbmZpZy5jb2xvciA9PT0gJ29yYW5nZSdcIlxuICAgIFtjbGFzcy5ibHVlXT1cImNvbmZpZy5jb2xvciA9PT0gJ2JsdWUnXCJcbiAgICBbZGlzYWJsZWRdPVwic3BsaXREaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJzcGxpdERpc2FibGVkLnRvU3RyaW5nKClcIlxuICAgIFthdHRyLmRhdGEtdGVzdF09XCJzcGxpdEJ1dHRvbkRhdGFUZXN0ID8/IG5hbWUgKyAnLXNwbGl0J1wiXG4gICAgKGNsaWNrKT1cIm9uU3BsaXRCdXR0b25DbGlja0hhbmRsZSgkZXZlbnQpXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVRyaWdnZXJcIlxuICAgIChtZW51Q2xvc2VkKT1cImhhbmRsZU1lbnVDbG9zZWQoKVwiXG4gICAgKG1lbnVPcGVuZWQpPVwiaGFuZGxlTWVudU9wZW5lZCgpXCJcbj5cbiAgICA8YXAtc3ltYm9sIHN5bWJvbElkPVwiYXJyb3ctZG93bi0xXCJcbiAgICAgICAgICAgICAgIHNpemU9XCJuYW5vXCJcbiAgICAgICAgICAgICAgIFtjbGFzcy5vcGVuZWRdPVwibWVudU9wZW5cIj48L2FwLXN5bWJvbD5cbjwvYnV0dG9uPlxuIl19
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive, HostListener, inject, ElementRef, ChangeDetectorRef, Input, EventEmitter, Output, forwardRef, Attribute } from '@angular/core';
3
3
  import { NG_VALIDATORS } from '@angular/forms';
4
+ import DOMPurify from 'dompurify';
4
5
  import { fromEvent } from 'rxjs';
5
6
  import * as i1 from '@agorapulse/ui-components/tooltip-neo';
6
7
 
@@ -384,11 +385,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImpor
384
385
  type: Input
385
386
  }] } });
386
387
 
387
- const PART_START = '<ng-container data-mst="';
388
- const PARSE_MIDDLE = '">';
389
- const PARSE_END = '</ng-container>';
390
- const DATA_SEPARATOR = ',';
391
- const OPTIONAL_EVENTS_SEPARATOR = ';';
388
+ const DATA_MST = 'data-mst';
392
389
  /**
393
390
  * 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.
394
391
  * The specific tags must this schema: <ng-container data-mst="STYLING-CLASSES">TEXT</ng-container>.
@@ -397,111 +394,36 @@ const OPTIONAL_EVENTS_SEPARATOR = ';';
397
394
  class MultiStyleTextDirective {
398
395
  set multiStyleText(fullText) {
399
396
  // First remove previously added children (on update).
400
- for (const child of this.childrenCreated) {
401
- this.renderer.removeChild(this.elRef.nativeElement, child);
397
+ this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', "");
398
+ if (!fullText || fullText.length <= 0) {
399
+ return;
402
400
  }
403
- if (fullText && fullText.length > 0) {
404
- MultiStyleTextDirective.parse(fullText).forEach((part) => {
405
- if (part.clazz || part.clickName) {
406
- // Parsed item with styling classes and/or event listening.
407
- const span = this.renderer.createElement('span');
408
- const text = this.renderer.createText(part.content);
409
- this.renderer.appendChild(span, text);
410
- if (part.clazz) {
411
- part.clazz.forEach(clazz => this.renderer.addClass(span, clazz));
401
+ this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', DOMPurify.sanitize(fullText.replace(/ng-container/g, 'span')));
402
+ Array.from(this.elRef.nativeElement.children).forEach((childNode) => {
403
+ if (childNode.nodeType == 1 && childNode.tagName.toLowerCase() === 'span') { // Node.ELEMENT_NODE
404
+ const span = this.renderer.createElement('span');
405
+ span.innerHTML = childNode.innerHTML;
406
+ this.elRef.nativeElement.replaceChild(span, childNode);
407
+ const mstValue = childNode.getAttribute(DATA_MST);
408
+ if (mstValue) {
409
+ const mstContents = mstValue.split(';');
410
+ // Bind click events
411
+ if (mstContents[1]) {
412
+ this.renderer.listen(span, 'click', () => this.partEvent.emit(mstContents[1]));
412
413
  }
413
- if (part.clickName) {
414
- this.renderer.listen(span, 'click', () => this.partEvent.emit(part.clickName));
414
+ // Add classes
415
+ if (mstContents[0] && mstContents[0].length > 0) {
416
+ this.renderer.setAttribute(span, 'class', mstContents[0].replace(',', ' '));
415
417
  }
416
- this.renderer.appendChild(this.elRef.nativeElement, span);
417
- this.childrenCreated.push(span);
418
- }
419
- else {
420
- // Specific of part without styling classes (could be used to get event listening only)
421
- const text = this.renderer.createText(part.content);
422
- this.renderer.appendChild(this.elRef.nativeElement, text);
423
- this.childrenCreated.push(text);
424
418
  }
425
- });
426
- }
419
+ }
420
+ });
427
421
  }
428
422
  constructor(elRef, renderer) {
429
423
  this.elRef = elRef;
430
424
  this.renderer = renderer;
431
- this.childrenCreated = [];
432
425
  this.partEvent = new EventEmitter();
433
426
  }
434
- static parse(toParse) {
435
- const parts = [];
436
- let startIndex = toParse.indexOf(PART_START);
437
- while (startIndex >= 0) {
438
- if (startIndex > 0) {
439
- // Optional text before first parsed part.
440
- parts.push({ content: toParse.substring(0, startIndex) });
441
- }
442
- const elem = this.cutFirstGroup(toParse.substring(startIndex));
443
- if (elem === 'invalid') {
444
- return [];
445
- }
446
- else if (elem) {
447
- parts.push({
448
- content: elem.content,
449
- clazz: elem.classes,
450
- clickName: elem.clickName
451
- });
452
- toParse = elem.rest;
453
- startIndex = toParse.indexOf(PART_START);
454
- }
455
- else {
456
- parts.push({ content: toParse });
457
- }
458
- }
459
- // Very end
460
- if (toParse.length > 0) {
461
- parts.push({ content: toParse });
462
- }
463
- return parts;
464
- }
465
- static cutFirstGroup(toCut) {
466
- if (!toCut.startsWith(PART_START)) {
467
- // String doesn't start with expected parser start.
468
- return null;
469
- }
470
- const afterParserStart = toCut.substring(PART_START.length);
471
- let index = afterParserStart.indexOf(PARSE_MIDDLE);
472
- if (index <= 0) {
473
- console.error('Not able to parse invalid string: ' + toCut);
474
- return 'invalid';
475
- }
476
- const data = afterParserStart.substring(0, index);
477
- let classes;
478
- let clickName;
479
- const eventsPartSeparatorIndex = data.indexOf(OPTIONAL_EVENTS_SEPARATOR);
480
- if (eventsPartSeparatorIndex > 0) {
481
- // Case the data contains events part with dedicated separator
482
- classes = data.substring(0, eventsPartSeparatorIndex);
483
- clickName = data.substring(eventsPartSeparatorIndex + 1);
484
- }
485
- else {
486
- // Otherwise, only design classes are provided
487
- classes = data;
488
- clickName = undefined;
489
- }
490
- let rest = afterParserStart.substring(index + PARSE_MIDDLE.length);
491
- index = rest.indexOf(PARSE_END);
492
- if (index <= 0) {
493
- console.error('Not able to parse invalid string: ' + toCut);
494
- return 'invalid';
495
- }
496
- const content = rest.substring(0, index);
497
- rest = rest.substring(index + PARSE_END.length);
498
- return {
499
- content,
500
- classes: classes.split(DATA_SEPARATOR),
501
- clickName,
502
- rest
503
- };
504
- }
505
427
  }
506
428
  MultiStyleTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: MultiStyleTextDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
507
429
  MultiStyleTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: MultiStyleTextDirective, isStandalone: true, selector: "[multiStyleText]", inputs: { multiStyleText: "multiStyleText" }, outputs: { partEvent: "partEvent" }, ngImport: i0 });