cax-design-system 2.7.1 → 2.7.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.
- package/README.md +1 -1
- package/chips/chips.d.ts +2 -1
- package/esm2022/chips/chips.mjs +6 -3
- package/esm2022/dropdown/dropdown.mjs +3 -3
- package/esm2022/upload/upload.component.mjs +52 -40
- package/fesm2022/cax-design-system-chips.mjs +5 -2
- package/fesm2022/cax-design-system-chips.mjs.map +1 -1
- package/fesm2022/cax-design-system-dropdown.mjs +2 -2
- package/fesm2022/cax-design-system-dropdown.mjs.map +1 -1
- package/fesm2022/cax-design-system-upload.mjs +51 -39
- package/fesm2022/cax-design-system-upload.mjs.map +1 -1
- package/package.json +249 -249
- package/resources/cax.min.scss +1 -1
- package/resources/cax.scss +28 -12
- package/resources/components/chips/chips.scss +1 -0
- package/resources/components/upload/upload.component.scss +0 -2
- package/upload/upload.component.d.ts +10 -4
|
@@ -11,24 +11,37 @@ export class UploadComponent {
|
|
|
11
11
|
uploadString = 'uploading the file';
|
|
12
12
|
errorText = 'Please upload a file';
|
|
13
13
|
allowMultiple = true;
|
|
14
|
+
componentId = '';
|
|
15
|
+
allowedFileTypes = [];
|
|
14
16
|
// Enhanced event emitters
|
|
15
17
|
fileSelected = new EventEmitter();
|
|
16
|
-
filesQueued = new EventEmitter();
|
|
18
|
+
filesQueued = new EventEmitter();
|
|
17
19
|
uploadStarted = new EventEmitter();
|
|
18
20
|
uploadCompleted = new EventEmitter();
|
|
19
|
-
uploadCanceled = new EventEmitter();
|
|
20
|
-
uploadError = new EventEmitter();
|
|
21
|
-
fileRemoved = new EventEmitter();
|
|
22
|
-
allFilesRemoved = new EventEmitter();
|
|
23
|
-
uploadStatusChange = new EventEmitter();
|
|
21
|
+
uploadCanceled = new EventEmitter();
|
|
22
|
+
uploadError = new EventEmitter();
|
|
23
|
+
fileRemoved = new EventEmitter();
|
|
24
|
+
allFilesRemoved = new EventEmitter();
|
|
25
|
+
uploadStatusChange = new EventEmitter();
|
|
24
26
|
isDragging = false;
|
|
25
27
|
uploadedFiles = [];
|
|
26
28
|
uploadStatus = 'idle';
|
|
27
29
|
isProcessingQueue = false;
|
|
30
|
+
uniqueId = '';
|
|
31
|
+
// Computed property for accept attribute in file input
|
|
32
|
+
get acceptFileTypes() {
|
|
33
|
+
if (!this.allowedFileTypes || this.allowedFileTypes.length === 0)
|
|
34
|
+
return '';
|
|
35
|
+
return this.allowedFileTypes.map((type) => `.${type}`).join(',');
|
|
36
|
+
}
|
|
28
37
|
// Track actual files to process (excludes canceled ones)
|
|
29
38
|
get activeFilesCount() {
|
|
30
39
|
return this.uploadedFiles.filter((file) => file.status !== 'canceled').length;
|
|
31
40
|
}
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
// Generate unique ID if not provided through input
|
|
43
|
+
this.uniqueId = this.componentId || `upload-${Math.random().toString(36).substring(2, 11)}`;
|
|
44
|
+
}
|
|
32
45
|
onDragOver(event) {
|
|
33
46
|
event.preventDefault();
|
|
34
47
|
event.stopPropagation();
|
|
@@ -47,13 +60,7 @@ export class UploadComponent {
|
|
|
47
60
|
if (!files || files.length === 0)
|
|
48
61
|
return;
|
|
49
62
|
const fileArray = Array.from(files);
|
|
50
|
-
const validFiles = fileArray.filter((file) =>
|
|
51
|
-
if (file.size > this.maxFileSize * 1024 * 1024) {
|
|
52
|
-
this.emitError(file, `File size should be less than ${this.maxFileSize}MB`);
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
return true;
|
|
56
|
-
});
|
|
63
|
+
const validFiles = fileArray.filter((file) => this.validateFile(file));
|
|
57
64
|
// Queue all files for upload
|
|
58
65
|
validFiles.forEach((file) => this.queueFile(file));
|
|
59
66
|
// Emit the queued files event
|
|
@@ -70,13 +77,7 @@ export class UploadComponent {
|
|
|
70
77
|
if (!files)
|
|
71
78
|
return;
|
|
72
79
|
const fileArray = Array.from(files);
|
|
73
|
-
const validFiles = fileArray.filter((file) =>
|
|
74
|
-
if (file.size > this.maxFileSize * 1024 * 1024) {
|
|
75
|
-
this.emitError(file, `File size should be less than ${this.maxFileSize}MB`);
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
return true;
|
|
79
|
-
});
|
|
80
|
+
const validFiles = fileArray.filter((file) => this.validateFile(file));
|
|
80
81
|
// Queue all files for upload
|
|
81
82
|
validFiles.forEach((file) => this.queueFile(file));
|
|
82
83
|
// Emit the queued files event
|
|
@@ -88,6 +89,27 @@ export class UploadComponent {
|
|
|
88
89
|
this.processQueue();
|
|
89
90
|
}
|
|
90
91
|
}
|
|
92
|
+
// New method for file validation
|
|
93
|
+
validateFile(file) {
|
|
94
|
+
// Size validation
|
|
95
|
+
if (file.size > this.maxFileSize * 1024 * 1024) {
|
|
96
|
+
this.emitError(file, `File size should be less than ${this.maxFileSize}MB`);
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
// File type validation
|
|
100
|
+
if (this.allowedFileTypes.length > 0) {
|
|
101
|
+
const fileExtension = this.getFileExtension(file.name).toLowerCase();
|
|
102
|
+
if (!this.allowedFileTypes.includes(fileExtension)) {
|
|
103
|
+
this.emitError(file, `Only ${this.allowedFileTypes.join(', ')} files are allowed`);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
// Helper method to get file extension
|
|
110
|
+
getFileExtension(filename) {
|
|
111
|
+
return filename.split('.').pop() || '';
|
|
112
|
+
}
|
|
91
113
|
// Queue a file for upload
|
|
92
114
|
queueFile(file) {
|
|
93
115
|
const uploadEntry = {
|
|
@@ -128,7 +150,7 @@ export class UploadComponent {
|
|
|
128
150
|
}
|
|
129
151
|
// Trigger file input click programmatically
|
|
130
152
|
openFileSelector() {
|
|
131
|
-
const fileInput = document.getElementById(
|
|
153
|
+
const fileInput = document.getElementById(`fileInput-${this.uniqueId}`);
|
|
132
154
|
if (fileInput) {
|
|
133
155
|
fileInput.click();
|
|
134
156
|
}
|
|
@@ -153,7 +175,6 @@ export class UploadComponent {
|
|
|
153
175
|
break;
|
|
154
176
|
}
|
|
155
177
|
fileEntry.progress = progress;
|
|
156
|
-
//this.uploadProgress.emit({ file: fileEntry.file, progress });
|
|
157
178
|
// Simulate network delay
|
|
158
179
|
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
159
180
|
}
|
|
@@ -249,21 +270,6 @@ export class UploadComponent {
|
|
|
249
270
|
this.uploadedFiles = [];
|
|
250
271
|
this.updateUploadStatus('idle');
|
|
251
272
|
}
|
|
252
|
-
// Retry a failed upload
|
|
253
|
-
retryUpload(index) {
|
|
254
|
-
const fileToRetry = this.uploadedFiles[index];
|
|
255
|
-
if (fileToRetry) {
|
|
256
|
-
const currentStatus = fileToRetry.status;
|
|
257
|
-
if (currentStatus === 'error' || currentStatus === 'canceled') {
|
|
258
|
-
fileToRetry.status = 'queued';
|
|
259
|
-
fileToRetry.errorMessage = undefined;
|
|
260
|
-
// Start processing if not already doing so
|
|
261
|
-
if (!this.isProcessingQueue) {
|
|
262
|
-
this.processQueue();
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
273
|
get hasUploading() {
|
|
268
274
|
return this.uploadedFiles.some((file) => file.status === 'uploading');
|
|
269
275
|
}
|
|
@@ -305,11 +311,13 @@ export class UploadComponent {
|
|
|
305
311
|
return activeFilesCount > 0 ? Math.round((totalProgress / (activeFilesCount * 100)) * 100) : 0;
|
|
306
312
|
}
|
|
307
313
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
308
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UploadComponent, selector: "cax-upload", inputs: { invalid: "invalid", style: "style", maxFileSize: "maxFileSize", inputFiles: "inputFiles", uploadString: "uploadString", errorText: "errorText", allowMultiple: "allowMultiple" }, outputs: { fileSelected: "fileSelected", filesQueued: "filesQueued", uploadStarted: "uploadStarted", uploadCompleted: "uploadCompleted", uploadCanceled: "uploadCanceled", uploadError: "uploadError", fileRemoved: "fileRemoved", allFilesRemoved: "allFilesRemoved", uploadStatusChange: "uploadStatusChange" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" } }, ngImport: i0, template: "<p class=\"cax-files\">{{inputFiles}}</p>\r\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\r\n [class.dragging]=\"isDragging\" \r\n (click)=\"openFileSelector()\">\r\n
|
|
314
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UploadComponent, selector: "cax-upload", inputs: { invalid: "invalid", style: "style", maxFileSize: "maxFileSize", inputFiles: "inputFiles", uploadString: "uploadString", errorText: "errorText", allowMultiple: "allowMultiple", componentId: "componentId", allowedFileTypes: "allowedFileTypes" }, outputs: { fileSelected: "fileSelected", filesQueued: "filesQueued", uploadStarted: "uploadStarted", uploadCompleted: "uploadCompleted", uploadCanceled: "uploadCanceled", uploadError: "uploadError", fileRemoved: "fileRemoved", allFilesRemoved: "allFilesRemoved", uploadStatusChange: "uploadStatusChange" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, classAttribute: "cax-element" }, ngImport: i0, template: "<p class=\"cax-files\">{{inputFiles}}</p>\r\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\r\n [class.dragging]=\"isDragging\" \r\n (click)=\"openFileSelector()\">\r\n <input\r\n type=\"file\"\r\n id=\"fileInput-{{uniqueId}}\"\r\n style=\"display:none\"\r\n [multiple]=\"allowMultiple\"\r\n [accept]=\"acceptFileTypes\"\r\n (change)=\"handleFileInput($event)\"\r\n />\r\n\r\n <!-- Default Upload State -->\r\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\r\n <div class=\"cax-upload-options\" >\r\n <p class=\"hint-text\">\r\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\r\n </p>\r\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <!-- Uploading State -->\r\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\r\n <div class=\"status-container\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'lg'\"\r\n [animationDuration]=\"'2s'\"\r\n ></cax-progressSpinner>\r\n <p >{{ uploadingProgressText }}</p>\r\n <cax-button\r\n [label]=\"'Cancel'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n</div>\r\n\r\n <!-- Complete State -->\r\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\r\n <div class=\"status-container\">\r\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\r\n <p>{{uploadString}}</p>\r\n <cax-button\r\n [label]=\"'Remove'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\r\n</div>\r\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\r\n {{ errorText }}\r\n</div>\r\n\r\n<!-- stacked file -->\r\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\r\n <div\r\n *ngFor=\"let item of uploadedFiles; let i = index\"\r\n class=\"cax-file-preview\"\r\n [ngClass]=\"{\r\n 'queued': item.status === 'queued',\r\n 'uploading': item.status === 'uploading',\r\n 'complete': item.status === 'complete',\r\n 'canceled': item.status === 'canceled'\r\n }\"\r\n >\r\n <div class=\"file-info\">\r\n <p class=\"file-name\">{{ item.file.name }}</p>\r\n </div> \r\n\r\n <!-- Show spinner for queued or uploading files -->\r\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'sm'\"\r\n [animationDuration]=\"'2s'\">\r\n </cax-progressSpinner>\r\n </div>\r\n \r\n <!-- Show remove button only for complete or canceled files -->\r\n <button\r\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\r\n class=\"remove-button\"\r\n (click)=\"removeFile(i); $event.stopPropagation()\">\r\n <i class=\"cax cax-close\"></i> \r\n </button>\r\n </div>\r\n</div>", styles: ["@layer cax{.cax-files{font-size:14px;font-weight:500;margin-bottom:10px}.cax-upload-menu{border-radius:12px;padding:24px 56px}.status-container{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;height:150px}.status-container p{margin:0;font-size:14px;font-weight:500}.status-container .success-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center}.status-container .success-icon i{font-size:1.5rem;font-weight:800}.cax-upload-options{text-align:center}.cax-upload-options .hint-text{font-size:14px;font-weight:500}.cax-upload-options .drop-files{font-weight:500;font-size:14px}.cax-upload-options .max-size{font-size:12px;margin-bottom:20px;font-weight:400}.cax-error-upload{font-size:14px;font-weight:400;padding-top:8px}.cax-options-container{display:flex;gap:24px;justify-content:center}.cax-upload-option{display:flex;flex-direction:column;align-items:center;cursor:pointer}.cax-upload-option .icon-container{width:48px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.cax-upload-option span{font-size:14px;font-weight:600;padding-top:10px}.cax-file-preview-wrapper{display:flex;flex-direction:column;gap:10px;margin-top:1rem}.cax-file-preview{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:8px}.cax-file-preview .file-info{display:flex;align-items:center;gap:10px}.cax-file-preview .file-info .file-icon img{width:32px;height:32px}.cax-file-preview .file-info .file-name{font-weight:500;font-size:14px}.cax-file-preview .spinner{margin-left:auto;font-size:20px!important}.cax-file-preview .remove-button{background:none;border:none;margin-left:auto;cursor:pointer}.cax-file-preview .remove-button i{font-size:20px}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ProgressSpinner, selector: "cax-progressSpinner", inputs: ["styleClass", "strokeColor", "backgroundStrokeColor", "size", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i3.Button, selector: "cax-button", inputs: ["type", "iconPos", "icon", "badge", "rightIcon", "leftIcon", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }] });
|
|
309
315
|
}
|
|
310
316
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UploadComponent, decorators: [{
|
|
311
317
|
type: Component,
|
|
312
|
-
args: [{ selector: 'cax-upload',
|
|
318
|
+
args: [{ selector: 'cax-upload', host: {
|
|
319
|
+
class: 'cax-element'
|
|
320
|
+
}, template: "<p class=\"cax-files\">{{inputFiles}}</p>\r\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\r\n [class.dragging]=\"isDragging\" \r\n (click)=\"openFileSelector()\">\r\n <input\r\n type=\"file\"\r\n id=\"fileInput-{{uniqueId}}\"\r\n style=\"display:none\"\r\n [multiple]=\"allowMultiple\"\r\n [accept]=\"acceptFileTypes\"\r\n (change)=\"handleFileInput($event)\"\r\n />\r\n\r\n <!-- Default Upload State -->\r\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\r\n <div class=\"cax-upload-options\" >\r\n <p class=\"hint-text\">\r\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\r\n </p>\r\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <!-- Uploading State -->\r\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\r\n <div class=\"status-container\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'lg'\"\r\n [animationDuration]=\"'2s'\"\r\n ></cax-progressSpinner>\r\n <p >{{ uploadingProgressText }}</p>\r\n <cax-button\r\n [label]=\"'Cancel'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n</div>\r\n\r\n <!-- Complete State -->\r\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\r\n <div class=\"status-container\">\r\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\r\n <p>{{uploadString}}</p>\r\n <cax-button\r\n [label]=\"'Remove'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\r\n</div>\r\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\r\n {{ errorText }}\r\n</div>\r\n\r\n<!-- stacked file -->\r\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\r\n <div\r\n *ngFor=\"let item of uploadedFiles; let i = index\"\r\n class=\"cax-file-preview\"\r\n [ngClass]=\"{\r\n 'queued': item.status === 'queued',\r\n 'uploading': item.status === 'uploading',\r\n 'complete': item.status === 'complete',\r\n 'canceled': item.status === 'canceled'\r\n }\"\r\n >\r\n <div class=\"file-info\">\r\n <p class=\"file-name\">{{ item.file.name }}</p>\r\n </div> \r\n\r\n <!-- Show spinner for queued or uploading files -->\r\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'sm'\"\r\n [animationDuration]=\"'2s'\">\r\n </cax-progressSpinner>\r\n </div>\r\n \r\n <!-- Show remove button only for complete or canceled files -->\r\n <button\r\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\r\n class=\"remove-button\"\r\n (click)=\"removeFile(i); $event.stopPropagation()\">\r\n <i class=\"cax cax-close\"></i> \r\n </button>\r\n </div>\r\n</div>", styles: ["@layer cax{.cax-files{font-size:14px;font-weight:500;margin-bottom:10px}.cax-upload-menu{border-radius:12px;padding:24px 56px}.status-container{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;height:150px}.status-container p{margin:0;font-size:14px;font-weight:500}.status-container .success-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center}.status-container .success-icon i{font-size:1.5rem;font-weight:800}.cax-upload-options{text-align:center}.cax-upload-options .hint-text{font-size:14px;font-weight:500}.cax-upload-options .drop-files{font-weight:500;font-size:14px}.cax-upload-options .max-size{font-size:12px;margin-bottom:20px;font-weight:400}.cax-error-upload{font-size:14px;font-weight:400;padding-top:8px}.cax-options-container{display:flex;gap:24px;justify-content:center}.cax-upload-option{display:flex;flex-direction:column;align-items:center;cursor:pointer}.cax-upload-option .icon-container{width:48px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.cax-upload-option span{font-size:14px;font-weight:600;padding-top:10px}.cax-file-preview-wrapper{display:flex;flex-direction:column;gap:10px;margin-top:1rem}.cax-file-preview{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:8px}.cax-file-preview .file-info{display:flex;align-items:center;gap:10px}.cax-file-preview .file-info .file-icon img{width:32px;height:32px}.cax-file-preview .file-info .file-name{font-weight:500;font-size:14px}.cax-file-preview .spinner{margin-left:auto;font-size:20px!important}.cax-file-preview .remove-button{background:none;border:none;margin-left:auto;cursor:pointer}.cax-file-preview .remove-button i{font-size:20px}}\n"] }]
|
|
313
321
|
}], propDecorators: { invalid: [{
|
|
314
322
|
type: Input
|
|
315
323
|
}], style: [{
|
|
@@ -324,6 +332,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
324
332
|
type: Input
|
|
325
333
|
}], allowMultiple: [{
|
|
326
334
|
type: Input
|
|
335
|
+
}], componentId: [{
|
|
336
|
+
type: Input
|
|
337
|
+
}], allowedFileTypes: [{
|
|
338
|
+
type: Input
|
|
327
339
|
}], fileSelected: [{
|
|
328
340
|
type: Output
|
|
329
341
|
}], filesQueued: [{
|
|
@@ -352,4 +364,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
352
364
|
type: HostListener,
|
|
353
365
|
args: ['drop', ['$event']]
|
|
354
366
|
}] } });
|
|
355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQWdCckYsTUFBTSxPQUFPLGVBQWU7SUFDZixPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLEtBQUssQ0FBOEM7SUFDbkQsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixVQUFVLEdBQVcsYUFBYSxDQUFDO0lBQ25DLFlBQVksR0FBVyxvQkFBb0IsQ0FBQztJQUM1QyxTQUFTLEdBQVcsc0JBQXNCLENBQUM7SUFDM0MsYUFBYSxHQUFZLElBQUksQ0FBQztJQUV2QywwQkFBMEI7SUFDaEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDeEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUMsQ0FBQyx3Q0FBd0M7SUFDbEYsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDekMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDM0MsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUMsQ0FBQyw4QkFBOEI7SUFDekUsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDLENBQUMsb0JBQW9CO0lBQ3JGLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDLENBQUMsdUNBQXVDO0lBQy9FLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDLENBQUMsNkJBQTZCO0lBQ3pFLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDLENBQUMsaUJB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ZTsyRkFBZixlQUFlLDBwQkNoQjVCLDIwR0FtR007OzJGRG5GTyxlQUFlO2tCQUwzQixTQUFTOytCQUNJLFlBQVk7OEJBS2IsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFhUCxVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFwQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFyQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBVcGxvYWRGaWxlU3RhdHVzID0gJ3F1ZXVlZCcgfCAndXBsb2FkaW5nJyB8ICdjb21wbGV0ZScgfCAnY2FuY2VsZWQnIHwgJ2Vycm9yJztcblxuZXhwb3J0IHR5cGUgVXBsb2FkRmlsZSA9IHtcbiAgICBmaWxlOiBGaWxlO1xuICAgIHN0YXR1czogVXBsb2FkRmlsZVN0YXR1cztcbiAgICBwcm9ncmVzcz86IG51bWJlcjtcbiAgICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NheC11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZENvbXBvbmVudCB7XG4gICAgQElucHV0KCkgaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSAzMDtcbiAgICBASW5wdXQoKSBpbnB1dEZpbGVzOiBzdHJpbmcgPSAnSW5wdXQgRmlsZXMnO1xuICAgIEBJbnB1dCgpIHVwbG9hZFN0cmluZzogc3RyaW5nID0gJ3VwbG9hZGluZyB0aGUgZmlsZSc7XG4gICAgQElucHV0KCkgZXJyb3JUZXh0OiBzdHJpbmcgPSAnUGxlYXNlIHVwbG9hZCBhIGZpbGUnO1xuICAgIEBJbnB1dCgpIGFsbG93TXVsdGlwbGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLy8gRW5oYW5jZWQgZXZlbnQgZW1pdHRlcnNcbiAgICBAT3V0cHV0KCkgZmlsZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAgIEBPdXRwdXQoKSBmaWxlc1F1ZXVlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpOyAvLyBFbWl0IHdoZW4gZmlsZXMgYXJlIHF1ZXVlZCBmb3IgdXBsb2FkXG4gICAgQE91dHB1dCgpIHVwbG9hZFN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gICAgQE91dHB1dCgpIHVwbG9hZENvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcbiAgICBAT3V0cHV0KCkgdXBsb2FkQ2FuY2VsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7IC8vIFdoZW4gdXNlciBjYW5jZWxzIGFuIHVwbG9hZFxuICAgIEBPdXRwdXQoKSB1cGxvYWRFcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWxlOiBGaWxlOyBlcnJvcjogc3RyaW5nIH0+KCk7IC8vIFdoZW4gdXBsb2FkIGZhaWxzXG4gICAgQE91dHB1dCgpIGZpbGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpOyAvLyBXaGVuIGEgZmlsZSBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3RcbiAgICBAT3V0cHV0KCkgYWxsRmlsZXNSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBXaGVuIGFsbCBmaWxlcyBhcmUgY2xlYXJlZFxuICAgIEBPdXRwdXQoKSB1cGxvYWRTdGF0dXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPCdpZGxlJyB8ICd1cGxvYWRpbmcnIHwgJ2NvbXBsZXRlJz4oKTsgLy8gU3RhdHVzIGNoYW5nZXNcblxuICAgIGlzRHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICB1cGxvYWRlZEZpbGVzOiBVcGxvYWRGaWxlW10gPSBbXTtcbiAgICB1cGxvYWRTdGF0dXM6ICdpZGxlJyB8ICd1cGxvYWRpbmcnIHwgJ2NvbXBsZXRlJyA9ICdpZGxlJztcbiAgICBpc1Byb2Nlc3NpbmdRdWV1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgYWN0dWFsIGZpbGVzIHRvIHByb2Nlc3MgKGV4Y2x1ZGVzIGNhbmNlbGVkIG9uZXMpXG4gICAgcHJpdmF0ZSBnZXQgYWN0aXZlRmlsZXNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5zdGF0dXMgIT09ICdjYW5jZWxlZCcpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gICAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICAgICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWxlQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgY29uc3QgdmFsaWRGaWxlcyA9IGZpbGVBcnJheS5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEZpbGVTaXplICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRFcnJvcihmaWxlLCBgRmlsZSBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heEZpbGVTaXplfU1CYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFF1ZXVlIGFsbCBmaWxlcyBmb3IgdXBsb2FkXG4gICAgICAgIHZhbGlkRmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5xdWV1ZUZpbGUoZmlsZSkpO1xuXG4gICAgICAgIC8vIEVtaXQgdGhlIHF1ZXVlZCBmaWxlcyBldmVudFxuICAgICAgICBpZiAodmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzUXVldWVkLmVtaXQodmFsaWRGaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSBpZiBub3QgYWxyZWFkeSBwcm9jZXNzaW5nXG4gICAgICAgIGlmICghdGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUZpbGVJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcbiAgICAgICAgaWYgKCFmaWxlcykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbGVBcnJheSA9IEFycmF5LmZyb20oZmlsZXMpO1xuICAgICAgICBjb25zdCB2YWxpZEZpbGVzID0gZmlsZUFycmF5LmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEVycm9yKGZpbGUsIGBGaWxlIHNpemUgc2hvdWxkIGJlIGxlc3MgdGhhbiAke3RoaXMubWF4RmlsZVNpemV9TUJgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUXVldWUgYWxsIGZpbGVzIGZvciB1cGxvYWRcbiAgICAgICAgdmFsaWRGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB0aGlzLnF1ZXVlRmlsZShmaWxlKSk7XG5cbiAgICAgICAgLy8gRW1pdCB0aGUgcXVldWVkIGZpbGVzIGV2ZW50XG4gICAgICAgIGlmICh2YWxpZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZXNRdWV1ZWQuZW1pdCh2YWxpZEZpbGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHByb2Nlc3NpbmcgdGhlIHF1ZXVlIGlmIG5vdCBhbHJlYWR5IHByb2Nlc3NpbmdcbiAgICAgICAgaWYgKCF0aGlzLmlzUHJvY2Vzc2luZ1F1ZXVlKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUXVldWUgYSBmaWxlIGZvciB1cGxvYWRcbiAgICBwcml2YXRlIHF1ZXVlRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwbG9hZEVudHJ5OiBVcGxvYWRGaWxlID0ge1xuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIHN0YXR1czogJ3F1ZXVlZCcsXG5cbiAgICAgICAgICAgIHByb2dyZXNzOiAwXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2godXBsb2FkRW50cnkpO1xuXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFN0YXR1cyA9PT0gJ2lkbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZFN0YXR1cygndXBsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdXBsb2FkIHN0YXR1cyBhbmQgZW1pdCBldmVudFxuICAgIHByaXZhdGUgdXBkYXRlVXBsb2FkU3RhdHVzKHN0YXR1czogJ2lkbGUnIHwgJ3VwbG9hZGluZycgfCAnY29tcGxldGUnKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFN0YXR1cyAhPT0gc3RhdHVzKSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgIHRoaXMudXBsb2FkU3RhdHVzQ2hhbmdlLmVtaXQoc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIGZpbGVzIHNlcXVlbnRpYWxseVxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIG5leHQgZmlsZSB0byB1cGxvYWRcbiAgICAgICAgbGV0IG5leHRGaWxlSW5kZXggPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmluZEluZGV4KChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpO1xuXG4gICAgICAgIHdoaWxlIChuZXh0RmlsZUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbbmV4dEZpbGVJbmRleF07XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NGaWxlKGN1cnJlbnRGaWxlLCBuZXh0RmlsZUluZGV4KTtcblxuICAgICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBmaWxlIGFmdGVyIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIG5leHRGaWxlSW5kZXggPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmluZEluZGV4KChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCB1cGxvYWRzIGFyZSBjb21wbGV0ZSBhbmQgdGhlcmUgYXJlIG5vIG1vcmUgZmlsZXMgdG8gcHJvY2Vzc1xuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAnY29tcGxldGUnKSAmJiAhdGhpcy5oYXNRdWV1ZWRPclVwbG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRTdGF0dXMoJ2NvbXBsZXRlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGZpbGUgaW5wdXQgY2xpY2sgcHJvZ3JhbW1hdGljYWxseVxuICAgIG9wZW5GaWxlU2VsZWN0b3IoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlSW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpZiAoZmlsZUlucHV0KSB7XG4gICAgICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtaXQgZXJyb3IgZXZlbnRcbiAgICBwcml2YXRlIGVtaXRFcnJvcihmaWxlOiBGaWxlLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRFcnJvci5lbWl0KHsgZmlsZSwgZXJyb3I6IG1lc3NhZ2UgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ZpbGUoZmlsZUVudHJ5OiBVcGxvYWRGaWxlLCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIFVwZGF0ZSBzdGF0dXMgdG8gdXBsb2FkaW5nXG4gICAgICAgIGZpbGVFbnRyeS5zdGF0dXMgPSAndXBsb2FkaW5nJztcbiAgICAgICAgZmlsZUVudHJ5LnByb2dyZXNzID0gMDtcblxuICAgICAgICB0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGZpbGVFbnRyeS5maWxlKTtcbiAgICAgICAgdGhpcy51cGxvYWRTdGFydGVkLmVtaXQoZmlsZUVudHJ5LmZpbGUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBTaW11bGF0ZSB1cGxvYWQgd2l0aCBwcm9ncmVzcyB1cGRhdGVzXG4gICAgICAgICAgICBmb3IgKGxldCBwcm9ncmVzcyA9IDA7IHByb2dyZXNzIDw9IDEwMDsgcHJvZ3Jlc3MgKz0gMTApIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB1cGxvYWQgd2FzIGNhbmNlbGVkIGR1cmluZyBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgY3VycmVudCBzdGF0dXMgc2luY2UgaXQgbWlnaHQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVFbnRyeS5zdGF0dXMgIT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciBjYW5jZWxlZCBvciBlcnJvcmVkXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpbGVFbnRyeS5wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICAgICAgICAgIC8vdGhpcy51cGxvYWRQcm9ncmVzcy5lbWl0KHsgZmlsZTogZmlsZUVudHJ5LmZpbGUsIHByb2dyZXNzIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gU2ltdWxhdGUgbmV0d29yayBkZWxheVxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPbmx5IHNldCB0byBjb21wbGV0ZSBpZiBzdGlsbCB1cGxvYWRpbmcgKG5vdCBjYW5jZWxlZCBvciBlcnJvcmVkKVxuICAgICAgICAgICAgaWYgKGZpbGVFbnRyeS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmlsZUVudHJ5LnN0YXR1cyA9ICdjb21wbGV0ZSc7XG4gICAgICAgICAgICAgICAgZmlsZUVudHJ5LnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ29tcGxldGVkLmVtaXQoZmlsZUVudHJ5LmZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgICAgZmlsZUVudHJ5LnN0YXR1cyA9ICdlcnJvcic7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIHVwbG9hZCBlcnJvcic7XG4gICAgICAgICAgICBmaWxlRW50cnkuZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgdGhpcy5lbWl0RXJyb3IoZmlsZUVudHJ5LmZpbGUsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWxVcGxvYWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBDYW5jZWwgdGhlIHNwZWNpZmllZCBmaWxlIGFuZCBhbGwgZmlsZXMgYmVsb3cgaXRcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgdGhpcy51cGxvYWRlZEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVG9DYW5jZWwgPSB0aGlzLnVwbG9hZGVkRmlsZXNbaV07XG4gICAgICAgICAgICBpZiAoZmlsZVRvQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0dXMgPSBmaWxlVG9DYW5jZWwuc3RhdHVzO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXR1cyA9PT0gJ3VwbG9hZGluZycgfHwgcHJldmlvdXNTdGF0dXMgPT09ICdxdWV1ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVUb0NhbmNlbC5zdGF0dXMgPSAnY2FuY2VsZWQnO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGVtaXQgaWYgaXQgd2FzIGFjdGl2ZWx5IHVwbG9hZGluZyAobm90IGp1c3QgcXVldWVkKVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0dXMgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZENhbmNlbGVkLmVtaXQoZmlsZVRvQ2FuY2VsLmZpbGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggd2FzIHVwbG9hZGluZywgcHJvY2VzcyB0aGUgbmV4dCBmaWxlIGluIHF1ZXVlXG4gICAgICAgIC8vICh3aGljaCB3b3VsZCBub3cgYmUgYSBmaWxlIGJlZm9yZSB0aGUgaW5kZXggdGhhdCBtaWdodCBiZSBxdWV1ZWQpXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbaW5kZXhdPy5zdGF0dXMgPT09ICdjYW5jZWxlZCcpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wcm9jZXNzUXVldWUoKSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgdXBsb2FkXG4gICAgY2FuY2VsQ3VycmVudFVwbG9hZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gRmluZCB0aGUgZmlsZSB0aGF0J3MgY3VycmVudGx5IHVwbG9hZGluZ1xuICAgICAgICBjb25zdCBjdXJyZW50VXBsb2FkSW5kZXggPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmluZEluZGV4KChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpO1xuICAgICAgICBpZiAoY3VycmVudFVwbG9hZEluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGN1cnJlbnRVcGxvYWRJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYW5jZWwgYWxsIHVwbG9hZHNcbiAgICBjYW5jZWxBbGxVcGxvYWRzKCk6IHZvaWQge1xuICAgICAgICBsZXQgaGFkQWN0aXZlVXBsb2FkcyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnIHx8IGZpbGUuc3RhdHVzID09PSAncXVldWVkJykge1xuICAgICAgICAgICAgICAgIGhhZEFjdGl2ZVVwbG9hZHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdHVzID0gZmlsZS5zdGF0dXM7XG4gICAgICAgICAgICAgICAgZmlsZS5zdGF0dXMgPSAnY2FuY2VsZWQnO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdHVzID09PSAndXBsb2FkaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZENhbmNlbGVkLmVtaXQoZmlsZS5maWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYWRBY3RpdmVVcGxvYWRzICYmICF0aGlzLmhhc1F1ZXVlZE9yVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZFN0YXR1cygnaWRsZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGEgZmlsZSBmcm9tIHRoZSBsaXN0XG4gICAgcmVtb3ZlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVUb1JlbW92ZSA9IHRoaXMudXBsb2FkZWRGaWxlc1tpbmRleF07XG5cbiAgICAgICAgLy8gQ2FuY2VsIGZpcnN0IGlmIGl0J3MgYWN0aXZlXG4gICAgICAgIGlmIChmaWxlVG9SZW1vdmUuc3RhdHVzID09PSAndXBsb2FkaW5nJyB8fCBmaWxlVG9SZW1vdmUuc3RhdHVzID09PSAncXVldWVkJykge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxVcGxvYWQoaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW1pdCByZW1vdmFsIGV2ZW50XG4gICAgICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdChmaWxlVG9SZW1vdmUuZmlsZSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gYXJyYXlcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gUmVzZXQgc3RhdHVzIGlmIG5vIGZpbGVzIGxlZnRcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXBsb2FkU3RhdHVzKCdpZGxlJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzUXVldWVkT3JVcGxvYWRpbmcgJiYgdGhpcy51cGxvYWRTdGF0dXMgIT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHF1ZXVlZCBvciB1cGxvYWRpbmcgZmlsZXMgYnV0IHdlIGhhdmUgY29tcGxldGVkIGZpbGVzXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZFN0YXR1cygnY29tcGxldGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbGwgZmlsZXNcbiAgICByZW1vdmVBbGxGaWxlcygpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFueSBhY3RpdmUgdXBsb2Fkc1xuICAgICAgICB0aGlzLmNhbmNlbEFsbFVwbG9hZHMoKTtcblxuICAgICAgICAvLyBPbmx5IGVtaXQgaWYgdGhlcmUgd2VyZSBmaWxlcyB0byByZW1vdmVcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFsbEZpbGVzUmVtb3ZlZC5lbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcbiAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRTdGF0dXMoJ2lkbGUnKTtcbiAgICB9XG5cbiAgICAvLyBSZXRyeSBhIGZhaWxlZCB1cGxvYWRcbiAgICByZXRyeVVwbG9hZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVUb1JldHJ5ID0gdGhpcy51cGxvYWRlZEZpbGVzW2luZGV4XTtcbiAgICAgICAgaWYgKGZpbGVUb1JldHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gZmlsZVRvUmV0cnkuc3RhdHVzO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0dXMgPT09ICdlcnJvcicgfHwgY3VycmVudFN0YXR1cyA9PT0gJ2NhbmNlbGVkJykge1xuICAgICAgICAgICAgICAgIGZpbGVUb1JldHJ5LnN0YXR1cyA9ICdxdWV1ZWQnO1xuICAgICAgICAgICAgICAgIGZpbGVUb1JldHJ5LmVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHByb2Nlc3NpbmcgaWYgbm90IGFscmVhZHkgZG9pbmcgc29cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNQcm9jZXNzaW5nUXVldWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgaGFzVXBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAndXBsb2FkaW5nJyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1F1ZXVlZE9yVXBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAndXBsb2FkaW5nJyB8fCBmaWxlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpO1xuICAgIH1cblxuICAgIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZGVkRmlsZXMuc29tZSgoZmlsZSkgPT4gZmlsZS5zdGF0dXMgPT09ICdlcnJvcicpO1xuICAgIH1cblxuICAgIGdldCBhbGxVcGxvYWRzQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZGVkRmlsZXMubGVuZ3RoID4gMCAmJiB0aGlzLnVwbG9hZGVkRmlsZXMuc29tZSgoZmlsZSkgPT4gZmlsZS5zdGF0dXMgPT09ICdjb21wbGV0ZScpICYmICF0aGlzLmhhc1F1ZXVlZE9yVXBsb2FkaW5nO1xuICAgIH1cblxuICAgIGdldCB1cGxvYWRpbmdQcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gQ291bnQgYWN0aXZlIGZpbGVzIChleGNsdWRpbmcgY2FuY2VsZWQgb25lcylcbiAgICAgICAgY29uc3QgdG90YWxBY3RpdmVGaWxlcyA9IHRoaXMuYWN0aXZlRmlsZXNDb3VudDtcbiAgICAgICAgY29uc3QgY29tcGxldGVkQ291bnQgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykubGVuZ3RoO1xuICAgICAgICBjb25zdCB1cGxvYWRpbmdGaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAndXBsb2FkaW5nJyk7XG4gICAgICAgIGlmICh1cGxvYWRpbmdGaWxlKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBjdXJyZW50bHkgdXBsb2FkaW5nIHRoZSAoY29tcGxldGVkQ291bnQgKyAxKXRoIGFjdGl2ZSBmaWxlXG4gICAgICAgICAgICByZXR1cm4gYFVwbG9hZGluZyAke2NvbXBsZXRlZENvdW50fS8ke3RvdGFsQWN0aXZlRmlsZXN9IGZpbGUke3RvdGFsQWN0aXZlRmlsZXMgPiAxID8gJ3MnIDogJyd9Li4uYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAncXVldWVkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBgVXBsb2FkaW5nICR7Y29tcGxldGVkQ291bnQgKyAxfS8ke3RvdGFsQWN0aXZlRmlsZXN9IGZpbGUke3RvdGFsQWN0aXZlRmlsZXMgPiAxID8gJ3MnIDogJyd9Li4uYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFVwbG9hZGluZyAke2NvbXBsZXRlZENvdW50fS8ke3RvdGFsQWN0aXZlRmlsZXN9IGZpbGUke3RvdGFsQWN0aXZlRmlsZXMgPiAxID8gJ3MnIDogJyd9Li4uYDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgb3ZlcmFsbCBwcm9ncmVzcyBwZXJjZW50YWdlIGFjcm9zcyBhbGwgZmlsZXNcbiAgICBnZXQgb3ZlcmFsbFByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcblxuICAgICAgICBjb25zdCB0b3RhbFByb2dyZXNzID0gdGhpcy51cGxvYWRlZEZpbGVzLnJlZHVjZSgoc3VtLCBmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09ICdjb21wbGV0ZScpIHJldHVybiBzdW0gKyAxMDA7XG4gICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09ICdjYW5jZWxlZCcgfHwgZmlsZS5zdGF0dXMgPT09ICdlcnJvcicpIHJldHVybiBzdW07XG4gICAgICAgICAgICByZXR1cm4gc3VtICsgKGZpbGUucHJvZ3Jlc3MgfHwgMCk7XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUZpbGVzQ291bnQgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKChmaWxlKSA9PiBmaWxlLnN0YXR1cyAhPT0gJ2NhbmNlbGVkJyAmJiBmaWxlLnN0YXR1cyAhPT0gJ2Vycm9yJykubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBhY3RpdmVGaWxlc0NvdW50ID4gMCA/IE1hdGgucm91bmQoKHRvdGFsUHJvZ3Jlc3MgLyAoYWN0aXZlRmlsZXNDb3VudCAqIDEwMCkpICogMTAwKSA6IDA7XG4gICAgfVxufVxuIiwiPHAgY2xhc3M9XCJjYXgtZmlsZXNcIj57e2lucHV0RmlsZXN9fTwvcD5cclxuPGRpdiBjbGFzcz1cImNheC11cGxvYWQtbWVudVwiIFtuZ1N0eWxlXT1cInN0eWxlXCJcclxuICAgICBbY2xhc3MuZHJhZ2dpbmddPVwiaXNEcmFnZ2luZ1wiIFxyXG4gICAgIChjbGljayk9XCJvcGVuRmlsZVNlbGVjdG9yKClcIj5cclxuICA8aW5wdXRcclxuICAgIGlkPVwiZmlsZUlucHV0XCJcclxuICAgIHR5cGU9XCJmaWxlXCJcclxuICAgIChjaGFuZ2UpPVwiaGFuZGxlRmlsZUlucHV0KCRldmVudClcIlxyXG4gICAgaGlkZGVuXHJcbiAgICBtdWx0aXBsZVxyXG4gID5cclxuXHJcbiAgPCEtLSBEZWZhdWx0IFVwbG9hZCBTdGF0ZSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidXBsb2FkU3RhdHVzID09PSAnaWRsZSdcIiA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F4LXVwbG9hZC1vcHRpb25zXCIgPlxyXG4gICAgICA8cCBjbGFzcz1cImhpbnQtdGV4dFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1maWxlc1wiPkRyb3AgZmlsZXMgaGVyZTwvc3Bhbj4gb3IgYnJvd3NlIGZpbGVzIGZyb20geW91ciBkZXZpY2VcclxuICAgICAgPC9wPlxyXG4gICAgICA8cCBjbGFzcz1cIm1heC1zaXplXCI+TWF4LiBGaWxlIFNpemU6IHt7IG1heEZpbGVTaXplIH19TUI8L3A+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gIDwhLS0gVXBsb2FkaW5nIFN0YXRlIC0tPlxyXG48ZGl2ICpuZ0lmPVwidXBsb2FkU3RhdHVzID09PSAndXBsb2FkaW5nJ1wiIGNsYXNzPVwiY2F4LXVwbG9hZC1zdGF0dXMgdXBsb2FkaW5nXCIgPlxyXG4gIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyXCI+XHJcbiAgICA8Y2F4LXByb2dyZXNzU3Bpbm5lclxyXG4gICAgICAgIFtzdHJva2VDb2xvcl09XCIncHJpbWFyeSdcIlxyXG4gICAgICAgIFtzaXplXT1cIidsZydcIlxyXG4gICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09XCInMnMnXCJcclxuICAgICAgPjwvY2F4LXByb2dyZXNzU3Bpbm5lcj5cclxuICAgIDxwID57eyB1cGxvYWRpbmdQcm9ncmVzc1RleHQgfX08L3A+XHJcbiAgICA8Y2F4LWJ1dHRvblxyXG4gICAgICBbbGFiZWxdPVwiJ0NhbmNlbCdcIlxyXG4gICAgICBbcm91bmRlZF09XCJmYWxzZVwiXHJcbiAgICAgIFtzZXZlcml0eV09XCInZGFuZ2VyJ1wiXHJcbiAgICAgIFtzaXplXT1cIidsYXJnZSdcIlxyXG4gICAgICBbb3V0bGluZWRdPVwiJ2ZhbHNlJ1wiXHJcbiAgICAgIFtsaW5rXT1cInRydWVcIlxyXG4gICAgICAoY2xpY2spPVwiY2FuY2VsQ3VycmVudFVwbG9hZCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4gIDwhLS0gQ29tcGxldGUgU3RhdGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInVwbG9hZFN0YXR1cyA9PT0gJ2NvbXBsZXRlJ1wiIGNsYXNzPVwiY2F4LXVwbG9hZC1zdGF0dXMgY29tcGxldGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdWNjZXNzLWljb25cIj48aSBjbGFzcz1cImNheCBjYXgtY2hlY2tcIj48L2k+PC9kaXY+XHJcbiAgICAgIDxwPnt7dXBsb2FkU3RyaW5nfX08L3A+XHJcbiAgICAgIDxjYXgtYnV0dG9uXHJcbiAgICAgICAgW2xhYmVsXT1cIidSZW1vdmUnXCJcclxuICAgICAgICBbcm91bmRlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgW3NldmVyaXR5XT1cIidkYW5nZXInXCJcclxuICAgICAgICBbc2l6ZV09XCInbGFyZ2UnXCJcclxuICAgICAgICBbb3V0bGluZWRdPVwiJ2ZhbHNlJ1wiXHJcbiAgICAgICAgW2xpbmtdPVwidHJ1ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInJlbW92ZUFsbEZpbGVzKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGlkPVwiaGVscGVyLXRleHRcIiBjbGFzcz1cImNheC1lcnJvci11cGxvYWRcIj48L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJpbnZhbGlkXCIgaWQ9XCJoZWxwZXItdGV4dFwiIGNsYXNzPVwiY2F4LWVycm9yLXVwbG9hZFwiPlxyXG4gIHt7IGVycm9yVGV4dCB9fVxyXG48L2Rpdj5cclxuXHJcbjwhLS0gc3RhY2tlZCBmaWxlIC0tPlxyXG48ZGl2ICpuZ0lmPVwidXBsb2FkZWRGaWxlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjYXgtZmlsZS1wcmV2aWV3LXdyYXBwZXJcIiBbbmdTdHlsZV09XCJzdHlsZVwiPlxyXG4gIDxkaXZcclxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHVwbG9hZGVkRmlsZXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgY2xhc3M9XCJjYXgtZmlsZS1wcmV2aWV3XCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ3F1ZXVlZCc6IGl0ZW0uc3RhdHVzID09PSAncXVldWVkJyxcclxuICAgICAgJ3VwbG9hZGluZyc6IGl0ZW0uc3RhdHVzID09PSAndXBsb2FkaW5nJyxcclxuICAgICAgJ2NvbXBsZXRlJzogaXRlbS5zdGF0dXMgPT09ICdjb21wbGV0ZScsXHJcbiAgICAgICdjYW5jZWxlZCc6IGl0ZW0uc3RhdHVzID09PSAnY2FuY2VsZWQnXHJcbiAgICB9XCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1pbmZvXCI+XHJcbiAgICAgIDxwIGNsYXNzPVwiZmlsZS1uYW1lXCI+e3sgaXRlbS5maWxlLm5hbWUgfX08L3A+XHJcbiAgICA8L2Rpdj4gXHJcblxyXG4gICAgPCEtLSBTaG93IHNwaW5uZXIgZm9yIHF1ZXVlZCBvciB1cGxvYWRpbmcgZmlsZXMgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09ICdxdWV1ZWQnIHx8IGl0ZW0uc3RhdHVzID09PSAndXBsb2FkaW5nJ1wiIGNsYXNzPVwic3Bpbm5lclwiPlxyXG4gICAgICA8Y2F4LXByb2dyZXNzU3Bpbm5lclxyXG4gICAgICAgIFtzdHJva2VDb2xvcl09XCIncHJpbWFyeSdcIlxyXG4gICAgICAgIFtzaXplXT1cIidzbSdcIlxyXG4gICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09XCInMnMnXCI+XHJcbiAgICAgIDwvY2F4LXByb2dyZXNzU3Bpbm5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8IS0tIFNob3cgcmVtb3ZlIGJ1dHRvbiBvbmx5IGZvciBjb21wbGV0ZSBvciBjYW5jZWxlZCBmaWxlcyAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJyB8fCBpdGVtLnN0YXR1cyA9PT0gJ2NhbmNlbGVkJ1wiXHJcbiAgICAgIGNsYXNzPVwicmVtb3ZlLWJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKGkpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWNsb3NlXCI+PC9pPiBcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztBQW1CN0YsTUFBTSxPQUFPLGVBQWU7SUFDZixPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLEtBQUssQ0FBOEM7SUFDbkQsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixVQUFVLEdBQVcsYUFBYSxDQUFDO0lBQ25DLFlBQVksR0FBVyxvQkFBb0IsQ0FBQztJQUM1QyxTQUFTLEdBQVcsc0JBQXNCLENBQUM7SUFDM0MsYUFBYSxHQUFZLElBQUksQ0FBQztJQUM5QixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUN6QywwQkFBMEI7SUFDaEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDeEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDekMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDekMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDM0MsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO0lBQ2hFLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ3ZDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQzNDLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO0lBRXJGLFVBQVUsR0FB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QUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkF5QlAsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRcEMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRckMsTUFBTTtzQkFETCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBVcGxvYWRGaWxlU3RhdHVzID0gJ3F1ZXVlZCcgfCAndXBsb2FkaW5nJyB8ICdjb21wbGV0ZScgfCAnY2FuY2VsZWQnIHwgJ2Vycm9yJztcblxuZXhwb3J0IHR5cGUgVXBsb2FkRmlsZSA9IHtcbiAgICBmaWxlOiBGaWxlO1xuICAgIHN0YXR1czogVXBsb2FkRmlsZVN0YXR1cztcbiAgICBwcm9ncmVzcz86IG51bWJlcjtcbiAgICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NheC11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdjYXgtZWxlbWVudCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSAzMDtcbiAgICBASW5wdXQoKSBpbnB1dEZpbGVzOiBzdHJpbmcgPSAnSW5wdXQgRmlsZXMnO1xuICAgIEBJbnB1dCgpIHVwbG9hZFN0cmluZzogc3RyaW5nID0gJ3VwbG9hZGluZyB0aGUgZmlsZSc7XG4gICAgQElucHV0KCkgZXJyb3JUZXh0OiBzdHJpbmcgPSAnUGxlYXNlIHVwbG9hZCBhIGZpbGUnO1xuICAgIEBJbnB1dCgpIGFsbG93TXVsdGlwbGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGNvbXBvbmVudElkOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBhbGxvd2VkRmlsZVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vIEVuaGFuY2VkIGV2ZW50IGVtaXR0ZXJzXG4gICAgQE91dHB1dCgpIGZpbGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcbiAgICBAT3V0cHV0KCkgZmlsZXNRdWV1ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVbXT4oKTtcbiAgICBAT3V0cHV0KCkgdXBsb2FkU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcbiAgICBAT3V0cHV0KCkgdXBsb2FkQ29tcGxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRDYW5jZWxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcbiAgICBAT3V0cHV0KCkgdXBsb2FkRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmlsZTogRmlsZTsgZXJyb3I6IHN0cmluZyB9PigpO1xuICAgIEBPdXRwdXQoKSBmaWxlUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcbiAgICBAT3V0cHV0KCkgYWxsRmlsZXNSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRTdGF0dXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPCdpZGxlJyB8ICd1cGxvYWRpbmcnIHwgJ2NvbXBsZXRlJz4oKTtcblxuICAgIGlzRHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICB1cGxvYWRlZEZpbGVzOiBVcGxvYWRGaWxlW10gPSBbXTtcbiAgICB1cGxvYWRTdGF0dXM6ICdpZGxlJyB8ICd1cGxvYWRpbmcnIHwgJ2NvbXBsZXRlJyA9ICdpZGxlJztcbiAgICBpc1Byb2Nlc3NpbmdRdWV1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHVuaXF1ZUlkOiBzdHJpbmcgPSAnJztcblxuICAgIC8vIENvbXB1dGVkIHByb3BlcnR5IGZvciBhY2NlcHQgYXR0cmlidXRlIGluIGZpbGUgaW5wdXRcbiAgICBnZXQgYWNjZXB0RmlsZVR5cGVzKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5hbGxvd2VkRmlsZVR5cGVzIHx8IHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5tYXAoKHR5cGUpID0+IGAuJHt0eXBlfWApLmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICAvLyBUcmFjayBhY3R1YWwgZmlsZXMgdG8gcHJvY2VzcyAoZXhjbHVkZXMgY2FuY2VsZWQgb25lcylcbiAgICBwcml2YXRlIGdldCBhY3RpdmVGaWxlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKChmaWxlKSA9PiBmaWxlLnN0YXR1cyAhPT0gJ2NhbmNlbGVkJykubGVuZ3RoO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgSUQgaWYgbm90IHByb3ZpZGVkIHRocm91Z2ggaW5wdXRcbiAgICAgICAgdGhpcy51bmlxdWVJZCA9IHRoaXMuY29tcG9uZW50SWQgfHwgYHVwbG9hZC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSl9YDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gICAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICAgICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWxlQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgY29uc3QgdmFsaWRGaWxlcyA9IGZpbGVBcnJheS5maWx0ZXIoKGZpbGUpID0+IHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKTtcblxuICAgICAgICAvLyBRdWV1ZSBhbGwgZmlsZXMgZm9yIHVwbG9hZFxuICAgICAgICB2YWxpZEZpbGVzLmZvckVhY2goKGZpbGUpID0+IHRoaXMucXVldWVGaWxlKGZpbGUpKTtcblxuICAgICAgICAvLyBFbWl0IHRoZSBxdWV1ZWQgZmlsZXMgZXZlbnRcbiAgICAgICAgaWYgKHZhbGlkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWxlc1F1ZXVlZC5lbWl0KHZhbGlkRmlsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUgaWYgbm90IGFscmVhZHkgcHJvY2Vzc2luZ1xuICAgICAgICBpZiAoIXRoaXMuaXNQcm9jZXNzaW5nUXVldWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVGaWxlSW5wdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZUxpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gICAgICAgIGlmICghZmlsZXMpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWxlQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgY29uc3QgdmFsaWRGaWxlcyA9IGZpbGVBcnJheS5maWx0ZXIoKGZpbGUpID0+IHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKTtcblxuICAgICAgICAvLyBRdWV1ZSBhbGwgZmlsZXMgZm9yIHVwbG9hZFxuICAgICAgICB2YWxpZEZpbGVzLmZvckVhY2goKGZpbGUpID0+IHRoaXMucXVldWVGaWxlKGZpbGUpKTtcblxuICAgICAgICAvLyBFbWl0IHRoZSBxdWV1ZWQgZmlsZXMgZXZlbnRcbiAgICAgICAgaWYgKHZhbGlkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWxlc1F1ZXVlZC5lbWl0KHZhbGlkRmlsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUgaWYgbm90IGFscmVhZHkgcHJvY2Vzc2luZ1xuICAgICAgICBpZiAoIXRoaXMuaXNQcm9jZXNzaW5nUXVldWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOZXcgbWV0aG9kIGZvciBmaWxlIHZhbGlkYXRpb25cbiAgICBwcml2YXRlIHZhbGlkYXRlRmlsZShmaWxlOiBGaWxlKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIFNpemUgdmFsaWRhdGlvblxuICAgICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5tYXhGaWxlU2l6ZSAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRFcnJvcihmaWxlLCBgRmlsZSBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heEZpbGVTaXplfU1CYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWxlIHR5cGUgdmFsaWRhdGlvblxuICAgICAgICBpZiAodGhpcy5hbGxvd2VkRmlsZVR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZS5uYW1lKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93ZWRGaWxlVHlwZXMuaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRFcnJvcihmaWxlLCBgT25seSAke3RoaXMuYWxsb3dlZEZpbGVUeXBlcy5qb2luKCcsICcpfSBmaWxlcyBhcmUgYWxsb3dlZGApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGZpbGUgZXh0ZW5zaW9uXG4gICAgcHJpdmF0ZSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZmlsZW5hbWUuc3BsaXQoJy4nKS5wb3AoKSB8fCAnJztcbiAgICB9XG5cbiAgICAvLyBRdWV1ZSBhIGZpbGUgZm9yIHVwbG9hZFxuICAgIHByaXZhdGUgcXVldWVGaWxlKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBsb2FkRW50cnk6IFVwbG9hZEZpbGUgPSB7XG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICAgICAgICAgIHByb2dyZXNzOiAwXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2godXBsb2FkRW50cnkpO1xuXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFN0YXR1cyA9PT0gJ2lkbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZFN0YXR1cygndXBsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdXBsb2FkIHN0YXR1cyBhbmQgZW1pdCBldmVudFxuICAgIHByaXZhdGUgdXBkYXRlVXBsb2FkU3RhdHVzKHN0YXR1czogJ2lkbGUnIHwgJ3VwbG9hZGluZycgfCAnY29tcGxldGUnKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFN0YXR1cyAhPT0gc3RhdHVzKSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgIHRoaXMudXBsb2FkU3RhdHVzQ2hhbmdlLmVtaXQoc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIGZpbGVzIHNlcXVlbnRpYWxseVxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIG5leHQgZmlsZSB0byB1cGxvYWRcbiAgICAgICAgbGV0IG5leHRGaWxlSW5kZXggPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmluZEluZGV4KChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpO1xuXG4gICAgICAgIHdoaWxlIChuZXh0RmlsZUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbbmV4dEZpbGVJbmRleF07XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NGaWxlKGN1cnJlbnRGaWxlLCBuZXh0RmlsZUluZGV4KTtcblxuICAgICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBmaWxlIGFmdGVyIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIG5leHRGaWxlSW5kZXggPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmluZEluZGV4KChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCB1cGxvYWRzIGFyZSBjb21wbGV0ZSBhbmQgdGhlcmUgYXJlIG5vIG1vcmUgZmlsZXMgdG8gcHJvY2Vzc1xuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAnY29tcGxldGUnKSAmJiAhdGhpcy5oYXNRdWV1ZWRPclVwbG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRTdGF0dXMoJ2NvbXBsZXRlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGZpbGUgaW5wdXQgY2xpY2sgcHJvZ3JhbW1hdGljYWxseVxuICAgIG9wZW5GaWxlU2VsZWN0b3IoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBmaWxlSW5wdXQtJHt0aGlzLnVuaXF1ZUlkfWApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlmIChmaWxlSW5wdXQpIHtcbiAgICAgICAgICAgIGZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1pdCBlcnJvciBldmVudFxuICAgIHByaXZhdGUgZW1pdEVycm9yKGZpbGU6IEZpbGUsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwbG9hZEVycm9yLmVtaXQoeyBmaWxlLCBlcnJvcjogbWVzc2FnZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NGaWxlKGZpbGVFbnRyeTogVXBsb2FkRmlsZSwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBVcGRhdGUgc3RhdHVzIHRvIHVwbG9hZGluZ1xuICAgICAgICBmaWxlRW50cnkuc3RhdHVzID0gJ3VwbG9hZGluZyc7XG4gICAgICAgIGZpbGVFbnRyeS5wcm9ncmVzcyA9IDA7XG5cbiAgICAgICAgdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChmaWxlRW50cnkuZmlsZSk7XG4gICAgICAgIHRoaXMudXBsb2FkU3RhcnRlZC5lbWl0KGZpbGVFbnRyeS5maWxlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gU2ltdWxhdGUgdXBsb2FkIHdpdGggcHJvZ3Jlc3MgdXBkYXRlc1xuICAgICAgICAgICAgZm9yIChsZXQgcHJvZ3Jlc3MgPSAwOyBwcm9ncmVzcyA8PSAxMDA7IHByb2dyZXNzICs9IDEwKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdXBsb2FkIHdhcyBjYW5jZWxlZCBkdXJpbmcgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGN1cnJlbnQgc3RhdHVzIHNpbmNlIGl0IG1pZ2h0IGhhdmUgY2hhbmdlZFxuICAgICAgICAgICAgICAgIGlmIChmaWxlRW50cnkuc3RhdHVzICE9PSAndXBsb2FkaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgY2FuY2VsZWQgb3IgZXJyb3JlZFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWxlRW50cnkucHJvZ3Jlc3MgPSBwcm9ncmVzcztcblxuICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIG5ldHdvcmsgZGVsYXlcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT25seSBzZXQgdG8gY29tcGxldGUgaWYgc3RpbGwgdXBsb2FkaW5nIChub3QgY2FuY2VsZWQgb3IgZXJyb3JlZClcbiAgICAgICAgICAgIGlmIChmaWxlRW50cnkuc3RhdHVzID09PSAndXBsb2FkaW5nJykge1xuICAgICAgICAgICAgICAgIGZpbGVFbnRyeS5zdGF0dXMgPSAnY29tcGxldGUnO1xuICAgICAgICAgICAgICAgIGZpbGVFbnRyeS5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZENvbXBsZXRlZC5lbWl0KGZpbGVFbnRyeS5maWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgICAgIGZpbGVFbnRyeS5zdGF0dXMgPSAnZXJyb3InO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biB1cGxvYWQgZXJyb3InO1xuICAgICAgICAgICAgZmlsZUVudHJ5LmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdEVycm9yKGZpbGVFbnRyeS5maWxlLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuY2VsVXBsb2FkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBzcGVjaWZpZWQgZmlsZSBhbmQgYWxsIGZpbGVzIGJlbG93IGl0XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMudXBsb2FkZWRGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVRvQ2FuY2VsID0gdGhpcy51cGxvYWRlZEZpbGVzW2ldO1xuICAgICAgICAgICAgaWYgKGZpbGVUb0NhbmNlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdHVzID0gZmlsZVRvQ2FuY2VsLnN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0dXMgPT09ICd1cGxvYWRpbmcnIHx8IHByZXZpb3VzU3RhdHVzID09PSAncXVldWVkJykge1xuICAgICAgICAgICAgICAgICAgICBmaWxlVG9DYW5jZWwuc3RhdHVzID0gJ2NhbmNlbGVkJztcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBlbWl0IGlmIGl0IHdhcyBhY3RpdmVseSB1cGxvYWRpbmcgKG5vdCBqdXN0IHF1ZXVlZClcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdHVzID09PSAndXBsb2FkaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRDYW5jZWxlZC5lbWl0KGZpbGVUb0NhbmNlbC5maWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHdhcyB1cGxvYWRpbmcsIHByb2Nlc3MgdGhlIG5leHQgZmlsZSBpbiBxdWV1ZVxuICAgICAgICAvLyAod2hpY2ggd291bGQgbm93IGJlIGEgZmlsZSBiZWZvcmUgdGhlIGluZGV4IHRoYXQgbWlnaHQgYmUgcXVldWVkKVxuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzW2luZGV4XT8uc3RhdHVzID09PSAnY2FuY2VsZWQnKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJvY2Vzc1F1ZXVlKCksIDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IHVwbG9hZFxuICAgIGNhbmNlbEN1cnJlbnRVcGxvYWQoKTogdm9pZCB7XG4gICAgICAgIC8vIEZpbmQgdGhlIGZpbGUgdGhhdCdzIGN1cnJlbnRseSB1cGxvYWRpbmdcbiAgICAgICAgY29uc3QgY3VycmVudFVwbG9hZEluZGV4ID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbmRJbmRleCgoZmlsZSkgPT4gZmlsZS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnKTtcbiAgICAgICAgaWYgKGN1cnJlbnRVcGxvYWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFVwbG9hZChjdXJyZW50VXBsb2FkSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FuY2VsIGFsbCB1cGxvYWRzXG4gICAgY2FuY2VsQWxsVXBsb2FkcygpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhhZEFjdGl2ZVVwbG9hZHMgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSAndXBsb2FkaW5nJyB8fCBmaWxlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHtcbiAgICAgICAgICAgICAgICBoYWRBY3RpdmVVcGxvYWRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1N0YXR1cyA9IGZpbGUuc3RhdHVzO1xuICAgICAgICAgICAgICAgIGZpbGUuc3RhdHVzID0gJ2NhbmNlbGVkJztcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXR1cyA9PT0gJ3VwbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRDYW5jZWxlZC5lbWl0KGZpbGUuZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGFkQWN0aXZlVXBsb2FkcyAmJiAhdGhpcy5oYXNRdWV1ZWRPclVwbG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRTdGF0dXMoJ2lkbGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhIGZpbGUgZnJvbSB0aGUgbGlzdFxuICAgIHJlbW92ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWxlVG9SZW1vdmUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbaW5kZXhdO1xuXG4gICAgICAgIC8vIENhbmNlbCBmaXJzdCBpZiBpdCdzIGFjdGl2ZVxuICAgICAgICBpZiAoZmlsZVRvUmVtb3ZlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycgfHwgZmlsZVRvUmVtb3ZlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtaXQgcmVtb3ZhbCBldmVudFxuICAgICAgICB0aGlzLmZpbGVSZW1vdmVkLmVtaXQoZmlsZVRvUmVtb3ZlLmZpbGUpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGFycmF5XG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFJlc2V0IHN0YXR1cyBpZiBubyBmaWxlcyBsZWZ0XG4gICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZFN0YXR1cygnaWRsZScpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmhhc1F1ZXVlZE9yVXBsb2FkaW5nICYmIHRoaXMudXBsb2FkU3RhdHVzICE9PSAnY29tcGxldGUnKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBxdWV1ZWQgb3IgdXBsb2FkaW5nIGZpbGVzIGJ1dCB3ZSBoYXZlIGNvbXBsZXRlZCBmaWxlc1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRTdGF0dXMoJ2NvbXBsZXRlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYWxsIGZpbGVzXG4gICAgcmVtb3ZlQWxsRmlsZXMoKTogdm9pZCB7XG4gICAgICAgIC8vIENhbmNlbCBhbnkgYWN0aXZlIHVwbG9hZHNcbiAgICAgICAgdGhpcy5jYW5jZWxBbGxVcGxvYWRzKCk7XG5cbiAgICAgICAgLy8gT25seSBlbWl0IGlmIHRoZXJlIHdlcmUgZmlsZXMgdG8gcmVtb3ZlXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hbGxGaWxlc1JlbW92ZWQuZW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlVXBsb2FkU3RhdHVzKCdpZGxlJyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1VwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkZWRGaWxlcy5zb21lKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpO1xuICAgIH1cblxuICAgIGdldCBoYXNRdWV1ZWRPclVwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkZWRGaWxlcy5zb21lKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycgfHwgZmlsZS5zdGF0dXMgPT09ICdxdWV1ZWQnKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBnZXQgYWxsVXBsb2Fkc0NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAnY29tcGxldGUnKSAmJiAhdGhpcy5oYXNRdWV1ZWRPclVwbG9hZGluZztcbiAgICB9XG5cbiAgICBnZXQgdXBsb2FkaW5nUHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIC8vIENvdW50IGFjdGl2ZSBmaWxlcyAoZXhjbHVkaW5nIGNhbmNlbGVkIG9uZXMpXG4gICAgICAgIGNvbnN0IHRvdGFsQWN0aXZlRmlsZXMgPSB0aGlzLmFjdGl2ZUZpbGVzQ291bnQ7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZENvdW50ID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5zdGF0dXMgPT09ICdjb21wbGV0ZScpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdXBsb2FkaW5nRmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpO1xuICAgICAgICBpZiAodXBsb2FkaW5nRmlsZSkge1xuICAgICAgICAgICAgLy8gV2UncmUgY3VycmVudGx5IHVwbG9hZGluZyB0aGUgKGNvbXBsZXRlZENvdW50ICsgMSl0aCBhY3RpdmUgZmlsZVxuICAgICAgICAgICAgcmV0dXJuIGBVcGxvYWRpbmcgJHtjb21wbGV0ZWRDb3VudH0vJHt0b3RhbEFjdGl2ZUZpbGVzfSBmaWxlJHt0b3RhbEFjdGl2ZUZpbGVzID4gMSA/ICdzJyA6ICcnfS4uLmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlcy5zb21lKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gYFVwbG9hZGluZyAke2NvbXBsZXRlZENvdW50ICsgMX0vJHt0b3RhbEFjdGl2ZUZpbGVzfSBmaWxlJHt0b3RhbEFjdGl2ZUZpbGVzID4gMSA/ICdzJyA6ICcnfS4uLmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBVcGxvYWRpbmcgJHtjb21wbGV0ZWRDb3VudH0vJHt0b3RhbEFjdGl2ZUZpbGVzfSBmaWxlJHt0b3RhbEFjdGl2ZUZpbGVzID4gMSA/ICdzJyA6ICcnfS4uLmA7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIG92ZXJhbGwgcHJvZ3Jlc3MgcGVyY2VudGFnZSBhY3Jvc3MgYWxsIGZpbGVzXG4gICAgZ2V0IG92ZXJhbGxQcm9ncmVzcygpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgICAgICAgY29uc3QgdG90YWxQcm9ncmVzcyA9IHRoaXMudXBsb2FkZWRGaWxlcy5yZWR1Y2UoKHN1bSwgZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSAnY29tcGxldGUnKSByZXR1cm4gc3VtICsgMTAwO1xuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSAnY2FuY2VsZWQnIHx8IGZpbGUuc3RhdHVzID09PSAnZXJyb3InKSByZXR1cm4gc3VtO1xuICAgICAgICAgICAgcmV0dXJuIHN1bSArIChmaWxlLnByb2dyZXNzIHx8IDApO1xuICAgICAgICB9LCAwKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVGaWxlc0NvdW50ID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5zdGF0dXMgIT09ICdjYW5jZWxlZCcgJiYgZmlsZS5zdGF0dXMgIT09ICdlcnJvcicpLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gYWN0aXZlRmlsZXNDb3VudCA+IDAgPyBNYXRoLnJvdW5kKCh0b3RhbFByb2dyZXNzIC8gKGFjdGl2ZUZpbGVzQ291bnQgKiAxMDApKSAqIDEwMCkgOiAwO1xuICAgIH1cbn1cbiIsIjxwIGNsYXNzPVwiY2F4LWZpbGVzXCI+e3tpbnB1dEZpbGVzfX08L3A+XHJcbjxkaXYgY2xhc3M9XCJjYXgtdXBsb2FkLW1lbnVcIiBbbmdTdHlsZV09XCJzdHlsZVwiXHJcbiAgICAgW2NsYXNzLmRyYWdnaW5nXT1cImlzRHJhZ2dpbmdcIiBcclxuICAgICAoY2xpY2spPVwib3BlbkZpbGVTZWxlY3RvcigpXCI+XHJcbiAgICAgPGlucHV0XHJcbiAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgIGlkPVwiZmlsZUlucHV0LXt7dW5pcXVlSWR9fVwiXHJcbiAgICAgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIlxyXG4gICAgIFttdWx0aXBsZV09XCJhbGxvd011bHRpcGxlXCJcclxuICAgICBbYWNjZXB0XT1cImFjY2VwdEZpbGVUeXBlc1wiXHJcbiAgICAgKGNoYW5nZSk9XCJoYW5kbGVGaWxlSW5wdXQoJGV2ZW50KVwiXHJcbiAgIC8+XHJcblxyXG4gIDwhLS0gRGVmYXVsdCBVcGxvYWQgU3RhdGUgLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVwbG9hZFN0YXR1cyA9PT0gJ2lkbGUnXCIgPlxyXG4gICAgPGRpdiBjbGFzcz1cImNheC11cGxvYWQtb3B0aW9uc1wiID5cclxuICAgICAgPHAgY2xhc3M9XCJoaW50LXRleHRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtZmlsZXNcIj5Ecm9wIGZpbGVzIGhlcmU8L3NwYW4+IG9yIGJyb3dzZSBmaWxlcyBmcm9tIHlvdXIgZGV2aWNlXHJcbiAgICAgIDwvcD5cclxuICAgICAgPHAgY2xhc3M9XCJtYXgtc2l6ZVwiPk1heC4gRmlsZSBTaXplOiB7eyBtYXhGaWxlU2l6ZSB9fU1CPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICA8IS0tIFVwbG9hZGluZyBTdGF0ZSAtLT5cclxuPGRpdiAqbmdJZj1cInVwbG9hZFN0YXR1cyA9PT0gJ3VwbG9hZGluZydcIiBjbGFzcz1cImNheC11cGxvYWQtc3RhdHVzIHVwbG9hZGluZ1wiID5cclxuICA8ZGl2IGNsYXNzPVwic3RhdHVzLWNvbnRhaW5lclwiPlxyXG4gICAgPGNheC1wcm9ncmVzc1NwaW5uZXJcclxuICAgICAgICBbc3Ryb2tlQ29sb3JdPVwiJ3ByaW1hcnknXCJcclxuICAgICAgICBbc2l6ZV09XCInbGcnXCJcclxuICAgICAgICBbYW5pbWF0aW9uRHVyYXRpb25dPVwiJzJzJ1wiXHJcbiAgICAgID48L2NheC1wcm9ncmVzc1NwaW5uZXI+XHJcbiAgICA8cCA+e3sgdXBsb2FkaW5nUHJvZ3Jlc3NUZXh0IH19PC9wPlxyXG4gICAgPGNheC1idXR0b25cclxuICAgICAgW2xhYmVsXT1cIidDYW5jZWwnXCJcclxuICAgICAgW3JvdW5kZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbc2V2ZXJpdHldPVwiJ2RhbmdlcidcIlxyXG4gICAgICBbc2l6ZV09XCInbGFyZ2UnXCJcclxuICAgICAgW291dGxpbmVkXT1cIidmYWxzZSdcIlxyXG4gICAgICBbbGlua109XCJ0cnVlXCJcclxuICAgICAgKGNsaWNrKT1cImNhbmNlbEN1cnJlbnRVcGxvYWQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuICA8IS0tIENvbXBsZXRlIFN0YXRlIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJ1cGxvYWRTdGF0dXMgPT09ICdjb21wbGV0ZSdcIiBjbGFzcz1cImNheC11cGxvYWQtc3RhdHVzIGNvbXBsZXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3VjY2Vzcy1pY29uXCI+PGkgY2xhc3M9XCJjYXggY2F4LWNoZWNrXCI+PC9pPjwvZGl2PlxyXG4gICAgICA8cD57e3VwbG9hZFN0cmluZ319PC9wPlxyXG4gICAgICA8Y2F4LWJ1dHRvblxyXG4gICAgICAgIFtsYWJlbF09XCInUmVtb3ZlJ1wiXHJcbiAgICAgICAgW3JvdW5kZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtzZXZlcml0eV09XCInZGFuZ2VyJ1wiXHJcbiAgICAgICAgW3NpemVdPVwiJ2xhcmdlJ1wiXHJcbiAgICAgICAgW291dGxpbmVkXT1cIidmYWxzZSdcIlxyXG4gICAgICAgIFtsaW5rXT1cInRydWVcIlxyXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVBbGxGaWxlcygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cImludmFsaWRcIiBpZD1cImhlbHBlci10ZXh0XCIgY2xhc3M9XCJjYXgtZXJyb3ItdXBsb2FkXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGlkPVwiaGVscGVyLXRleHRcIiBjbGFzcz1cImNheC1lcnJvci11cGxvYWRcIj5cclxuICB7eyBlcnJvclRleHQgfX1cclxuPC9kaXY+XHJcblxyXG48IS0tIHN0YWNrZWQgZmlsZSAtLT5cclxuPGRpdiAqbmdJZj1cInVwbG9hZGVkRmlsZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiY2F4LWZpbGUtcHJldmlldy13cmFwcGVyXCIgW25nU3R5bGVdPVwic3R5bGVcIj5cclxuICA8ZGl2XHJcbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiB1cGxvYWRlZEZpbGVzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgIGNsYXNzPVwiY2F4LWZpbGUtcHJldmlld1wiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICdxdWV1ZWQnOiBpdGVtLnN0YXR1cyA9PT0gJ3F1ZXVlZCcsXHJcbiAgICAgICd1cGxvYWRpbmcnOiBpdGVtLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycsXHJcbiAgICAgICdjb21wbGV0ZSc6IGl0ZW0uc3RhdHVzID09PSAnY29tcGxldGUnLFxyXG4gICAgICAnY2FuY2VsZWQnOiBpdGVtLnN0YXR1cyA9PT0gJ2NhbmNlbGVkJ1xyXG4gICAgfVwiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGUtaW5mb1wiPlxyXG4gICAgICA8cCBjbGFzcz1cImZpbGUtbmFtZVwiPnt7IGl0ZW0uZmlsZS5uYW1lIH19PC9wPlxyXG4gICAgPC9kaXY+IFxyXG5cclxuICAgIDwhLS0gU2hvdyBzcGlubmVyIGZvciBxdWV1ZWQgb3IgdXBsb2FkaW5nIGZpbGVzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAncXVldWVkJyB8fCBpdGVtLnN0YXR1cyA9PT0gJ3VwbG9hZGluZydcIiBjbGFzcz1cInNwaW5uZXJcIj5cclxuICAgICAgPGNheC1wcm9ncmVzc1NwaW5uZXJcclxuICAgICAgICBbc3Ryb2tlQ29sb3JdPVwiJ3ByaW1hcnknXCJcclxuICAgICAgICBbc2l6ZV09XCInc20nXCJcclxuICAgICAgICBbYW5pbWF0aW9uRHVyYXRpb25dPVwiJzJzJ1wiPlxyXG4gICAgICA8L2NheC1wcm9ncmVzc1NwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPCEtLSBTaG93IHJlbW92ZSBidXR0b24gb25seSBmb3IgY29tcGxldGUgb3IgY2FuY2VsZWQgZmlsZXMgLS0+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09ICdjb21wbGV0ZScgfHwgaXRlbS5zdGF0dXMgPT09ICdjYW5jZWxlZCdcIlxyXG4gICAgICBjbGFzcz1cInJlbW92ZS1idXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlRmlsZShpKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiY2F4IGNheC1jbG9zZVwiPjwvaT4gXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -33,6 +33,7 @@ class Chips {
|
|
|
33
33
|
rightIconClass = '';
|
|
34
34
|
rightIcon = false;
|
|
35
35
|
chipIcon;
|
|
36
|
+
label;
|
|
36
37
|
chipsScrollable;
|
|
37
38
|
isTyping = false;
|
|
38
39
|
/**
|
|
@@ -500,7 +501,7 @@ class Chips {
|
|
|
500
501
|
}
|
|
501
502
|
}
|
|
502
503
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Chips, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.caxConfig }], target: i0.ɵɵFactoryTarget.Component });
|
|
503
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Chips, isStandalone: true, selector: "cax-chips", inputs: { leftIconClass: "leftIconClass", leftIcon: "leftIcon", rightIconClass: "rightIconClass", rightIcon: "rightIcon", chipIcon: "chipIcon", style: "style", styleClass: "styleClass", disabled: ["disabled", "disabled", booleanAttribute], field: "field", placeholder: "placeholder", max: ["max", "max", numberAttribute], maxLength: "maxLength", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", tabindex: ["tabindex", "tabindex", numberAttribute], inputId: "inputId", allowDuplicate: ["allowDuplicate", "allowDuplicate", booleanAttribute], caseSensitiveDuplication: ["caseSensitiveDuplication", "caseSensitiveDuplication", booleanAttribute], inputStyle: "inputStyle", inputStyleClass: "inputStyleClass", addOnTab: ["addOnTab", "addOnTab", booleanAttribute], addOnBlur: ["addOnBlur", "addOnBlur", booleanAttribute], separator: "separator", showClear: ["showClear", "showClear", booleanAttribute], autofocus: ["autofocus", "autofocus", booleanAttribute], variant: "variant", size: "size", value: "value", severity: "severity" }, outputs: { onAdd: "onAdd", onRemove: "onRemove", onFocus: "onFocus", onBlur: "onBlur", onChipClick: "onChipClick", onClear: "onClear" }, host: { properties: { "class.cax-inputwrapper-filled": "filled", "class.cax-inputwrapper-focus": "focused", "class.cax-chips-clearable": "showClear" }, classAttribute: "cax-element cax-inputwrapper" }, providers: [CHIPS_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "chipsScrollable", first: true, predicate: ["chipsScrollable"], descendants: true }, { propertyName: "inputViewChild", first: true, predicate: ["inputtext"], descendants: true }, { propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{'cax-chips': true, 'cax-chips-size-sm': size === 'sm', 'cax-chips-size-md': size === 'md', 'cax-chips-size-lg': size === 'lg', 'cax-chips-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <div class=\"cax-chips-container\" [ngClass]=\"{'cax-focus': focused && !disabled, 'no-chips': !value?.length}\">\r\n <span *ngIf=\"leftIcon\" class=\"cax-chips-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <div class=\"cax-chips-content\" #chipsScrollable>\r\n <div class=\"cax-chips-list\">\r\n <cax-chip\r\n *ngFor=\"let item of value; let i = index\"\r\n [label]=\"field ? resolveFieldData(item, field) : item\"\r\n [removable]=\"true\"\r\n [size]=\"size\"\r\n [icon]=\"chipIcon\"\r\n [severity]=\"severity\"\r\n (onRemove)=\"removeItem($event, i)\"\r\n (click)=\"onItemClick($event, item)\"\r\n [class.cax-focus]=\"focusedIndex === i\"\r\n >\r\n </cax-chip>\r\n <input\r\n #inputtext\r\n class=\"cax-chips-input\"\r\n [attr.placeholder]=\"(!value || !value.length) ? placeholder : ''\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onInput()\"\r\n (paste)=\"onPaste($event)\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxLength\"\r\n [attr.tabindex]=\"tabindex\"\r\n [disabled]=\"disabled || isMaxedOut\"\r\n [ngStyle]=\"inputStyle\"\r\n [class]=\"inputStyleClass\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"showClear && value?.length\" class=\"cax-chips-clear-icon\" (click)=\"clear()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n <span *ngIf=\"rightIcon\" class=\"cax-chips-icon-right\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-chips{display:inline-flex}.cax-chips-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.cax-chips-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto;max-width:100%;border-radius:8px;padding:0 10px;background:var(--neutral-100);border:1px solid var(--neutral-200);scroll-snap-align:end;scroll-snap-stop:always}.cax-chips-token:hover{border-color:var(--neutral-300)}.cax-chips-token-label{min-width:0%;overflow:auto}.cax-chips-token-label::-webkit-scrollbar{display:none}.cax-chips-input-token{flex:1 1 auto;display:inline-flex}.cax-chips-token-icon{cursor:pointer;position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px}.cax-chips-token-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-token-icon:hover{color:var(--neutral-900)}.cax-chips-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.cax-fluid .cax-chips{display:flex}.cax-chips-clear-icon{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px;cursor:pointer}.cax-chips-clear-icon:hover{color:var(--neutral-900)}.cax-chips-clear-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-clearable .cax-inputtext{position:relative}.cax-cax-edit-icon{margin-right:5px;height:15px;width:auto}.cax-chips-wrapper{display:flex;align-items:center;flex:1;min-width:0;position:relative}.cax-chips-content{display:flex;flex:1;min-width:0;overflow:hidden}.cax-input-icon-left{margin-right:10px}.cax-chips-multiple-container{display:flex;align-items:center;width:100%}.cax-chips-input-token{display:inline-flex;align-items:center;min-width:120px;flex:0 0 auto;height:100%}.cax-chips-input-token input{width:100%;background:transparent;border:none;outline:none;padding:4px;font-family:inherit;font-size:inherit}.cax-chips-icon-left{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-right:8px}.cax-chips-icon-left i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px}.cax-chips-icon-right i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right:hover{color:var(--neutral-900)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: AutoFocusModule }, { kind: "directive", type: i3.AutoFocus, selector: "[caxAutoFocus]", inputs: ["autofocus"] }, { kind: "ngmodule", type: ChipModule }, { kind: "component", type: i4.Chip, selector: "cax-chip", inputs: ["label", "icon", "image", "alt", "style", "styleClass", "removable", "removeIcon", "size", "severity"], outputs: ["onRemove", "onImageError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
504
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Chips, isStandalone: true, selector: "cax-chips", inputs: { leftIconClass: "leftIconClass", leftIcon: "leftIcon", rightIconClass: "rightIconClass", rightIcon: "rightIcon", chipIcon: "chipIcon", label: "label", style: "style", styleClass: "styleClass", disabled: ["disabled", "disabled", booleanAttribute], field: "field", placeholder: "placeholder", max: ["max", "max", numberAttribute], maxLength: "maxLength", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", tabindex: ["tabindex", "tabindex", numberAttribute], inputId: "inputId", allowDuplicate: ["allowDuplicate", "allowDuplicate", booleanAttribute], caseSensitiveDuplication: ["caseSensitiveDuplication", "caseSensitiveDuplication", booleanAttribute], inputStyle: "inputStyle", inputStyleClass: "inputStyleClass", addOnTab: ["addOnTab", "addOnTab", booleanAttribute], addOnBlur: ["addOnBlur", "addOnBlur", booleanAttribute], separator: "separator", showClear: ["showClear", "showClear", booleanAttribute], autofocus: ["autofocus", "autofocus", booleanAttribute], variant: "variant", size: "size", value: "value", severity: "severity" }, outputs: { onAdd: "onAdd", onRemove: "onRemove", onFocus: "onFocus", onBlur: "onBlur", onChipClick: "onChipClick", onClear: "onClear" }, host: { properties: { "class.cax-inputwrapper-filled": "filled", "class.cax-inputwrapper-focus": "focused", "class.cax-chips-clearable": "showClear" }, classAttribute: "cax-element cax-inputwrapper" }, providers: [CHIPS_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "chipsScrollable", first: true, predicate: ["chipsScrollable"], descendants: true }, { propertyName: "inputViewChild", first: true, predicate: ["inputtext"], descendants: true }, { propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{'cax-chips': true, 'cax-chips-size-sm': size === 'sm', 'cax-chips-size-md': size === 'md', 'cax-chips-size-lg': size === 'lg', 'cax-chips-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <label *ngIf=\"label\" class=\"cax-chips-label\">{{label}}</label>\r\n\r\n <div class=\"cax-chips-container\" [ngClass]=\"{'cax-focus': focused && !disabled, 'no-chips': !value?.length}\">\r\n <span *ngIf=\"leftIcon\" class=\"cax-chips-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <div class=\"cax-chips-content\" #chipsScrollable>\r\n <div class=\"cax-chips-list\">\r\n <cax-chip\r\n *ngFor=\"let item of value; let i = index\"\r\n [label]=\"field ? resolveFieldData(item, field) : item\"\r\n [removable]=\"true\"\r\n [size]=\"size\"\r\n [icon]=\"chipIcon\"\r\n [severity]=\"severity\"\r\n (onRemove)=\"removeItem($event, i)\"\r\n (click)=\"onItemClick($event, item)\"\r\n [class.cax-focus]=\"focusedIndex === i\"\r\n >\r\n </cax-chip>\r\n <input\r\n #inputtext\r\n class=\"cax-chips-input\"\r\n [attr.placeholder]=\"(!value || !value.length) ? placeholder : ''\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onInput()\"\r\n (paste)=\"onPaste($event)\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxLength\"\r\n [attr.tabindex]=\"tabindex\"\r\n [disabled]=\"disabled || isMaxedOut\"\r\n [ngStyle]=\"inputStyle\"\r\n [class]=\"inputStyleClass\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"showClear && value?.length\" class=\"cax-chips-clear-icon\" (click)=\"clear()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n <span *ngIf=\"rightIcon\" class=\"cax-chips-icon-right\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-chips{display:inline-flex;flex-direction:column}.cax-chips-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.cax-chips-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto;max-width:100%;border-radius:8px;padding:0 10px;background:var(--neutral-100);border:1px solid var(--neutral-200);scroll-snap-align:end;scroll-snap-stop:always}.cax-chips-token:hover{border-color:var(--neutral-300)}.cax-chips-token-label{min-width:0%;overflow:auto}.cax-chips-token-label::-webkit-scrollbar{display:none}.cax-chips-input-token{flex:1 1 auto;display:inline-flex}.cax-chips-token-icon{cursor:pointer;position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px}.cax-chips-token-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-token-icon:hover{color:var(--neutral-900)}.cax-chips-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.cax-fluid .cax-chips{display:flex}.cax-chips-clear-icon{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px;cursor:pointer}.cax-chips-clear-icon:hover{color:var(--neutral-900)}.cax-chips-clear-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-clearable .cax-inputtext{position:relative}.cax-cax-edit-icon{margin-right:5px;height:15px;width:auto}.cax-chips-wrapper{display:flex;align-items:center;flex:1;min-width:0;position:relative}.cax-chips-content{display:flex;flex:1;min-width:0;overflow:hidden}.cax-input-icon-left{margin-right:10px}.cax-chips-multiple-container{display:flex;align-items:center;width:100%}.cax-chips-input-token{display:inline-flex;align-items:center;min-width:120px;flex:0 0 auto;height:100%}.cax-chips-input-token input{width:100%;background:transparent;border:none;outline:none;padding:4px;font-family:inherit;font-size:inherit}.cax-chips-icon-left{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-right:8px}.cax-chips-icon-left i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px}.cax-chips-icon-right i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right:hover{color:var(--neutral-900)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: AutoFocusModule }, { kind: "directive", type: i3.AutoFocus, selector: "[caxAutoFocus]", inputs: ["autofocus"] }, { kind: "ngmodule", type: ChipModule }, { kind: "component", type: i4.Chip, selector: "cax-chip", inputs: ["label", "icon", "image", "alt", "style", "styleClass", "removable", "removeIcon", "size", "severity"], outputs: ["onRemove", "onImageError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
504
505
|
}
|
|
505
506
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Chips, decorators: [{
|
|
506
507
|
type: Component,
|
|
@@ -509,7 +510,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
509
510
|
'[class.cax-inputwrapper-filled]': 'filled',
|
|
510
511
|
'[class.cax-inputwrapper-focus]': 'focused',
|
|
511
512
|
'[class.cax-chips-clearable]': 'showClear'
|
|
512
|
-
}, providers: [CHIPS_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"{'cax-chips': true, 'cax-chips-size-sm': size === 'sm', 'cax-chips-size-md': size === 'md', 'cax-chips-size-lg': size === 'lg', 'cax-chips-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <div class=\"cax-chips-container\" [ngClass]=\"{'cax-focus': focused && !disabled, 'no-chips': !value?.length}\">\r\n <span *ngIf=\"leftIcon\" class=\"cax-chips-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <div class=\"cax-chips-content\" #chipsScrollable>\r\n <div class=\"cax-chips-list\">\r\n <cax-chip\r\n *ngFor=\"let item of value; let i = index\"\r\n [label]=\"field ? resolveFieldData(item, field) : item\"\r\n [removable]=\"true\"\r\n [size]=\"size\"\r\n [icon]=\"chipIcon\"\r\n [severity]=\"severity\"\r\n (onRemove)=\"removeItem($event, i)\"\r\n (click)=\"onItemClick($event, item)\"\r\n [class.cax-focus]=\"focusedIndex === i\"\r\n >\r\n </cax-chip>\r\n <input\r\n #inputtext\r\n class=\"cax-chips-input\"\r\n [attr.placeholder]=\"(!value || !value.length) ? placeholder : ''\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onInput()\"\r\n (paste)=\"onPaste($event)\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxLength\"\r\n [attr.tabindex]=\"tabindex\"\r\n [disabled]=\"disabled || isMaxedOut\"\r\n [ngStyle]=\"inputStyle\"\r\n [class]=\"inputStyleClass\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"showClear && value?.length\" class=\"cax-chips-clear-icon\" (click)=\"clear()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n <span *ngIf=\"rightIcon\" class=\"cax-chips-icon-right\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-chips{display:inline-flex}.cax-chips-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.cax-chips-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto;max-width:100%;border-radius:8px;padding:0 10px;background:var(--neutral-100);border:1px solid var(--neutral-200);scroll-snap-align:end;scroll-snap-stop:always}.cax-chips-token:hover{border-color:var(--neutral-300)}.cax-chips-token-label{min-width:0%;overflow:auto}.cax-chips-token-label::-webkit-scrollbar{display:none}.cax-chips-input-token{flex:1 1 auto;display:inline-flex}.cax-chips-token-icon{cursor:pointer;position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px}.cax-chips-token-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-token-icon:hover{color:var(--neutral-900)}.cax-chips-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.cax-fluid .cax-chips{display:flex}.cax-chips-clear-icon{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px;cursor:pointer}.cax-chips-clear-icon:hover{color:var(--neutral-900)}.cax-chips-clear-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-clearable .cax-inputtext{position:relative}.cax-cax-edit-icon{margin-right:5px;height:15px;width:auto}.cax-chips-wrapper{display:flex;align-items:center;flex:1;min-width:0;position:relative}.cax-chips-content{display:flex;flex:1;min-width:0;overflow:hidden}.cax-input-icon-left{margin-right:10px}.cax-chips-multiple-container{display:flex;align-items:center;width:100%}.cax-chips-input-token{display:inline-flex;align-items:center;min-width:120px;flex:0 0 auto;height:100%}.cax-chips-input-token input{width:100%;background:transparent;border:none;outline:none;padding:4px;font-family:inherit;font-size:inherit}.cax-chips-icon-left{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-right:8px}.cax-chips-icon-left i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px}.cax-chips-icon-right i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right:hover{color:var(--neutral-900)}}\n"] }]
|
|
513
|
+
}, providers: [CHIPS_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"{'cax-chips': true, 'cax-chips-size-sm': size === 'sm', 'cax-chips-size-md': size === 'md', 'cax-chips-size-lg': size === 'lg', 'cax-chips-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <label *ngIf=\"label\" class=\"cax-chips-label\">{{label}}</label>\r\n\r\n <div class=\"cax-chips-container\" [ngClass]=\"{'cax-focus': focused && !disabled, 'no-chips': !value?.length}\">\r\n <span *ngIf=\"leftIcon\" class=\"cax-chips-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <div class=\"cax-chips-content\" #chipsScrollable>\r\n <div class=\"cax-chips-list\">\r\n <cax-chip\r\n *ngFor=\"let item of value; let i = index\"\r\n [label]=\"field ? resolveFieldData(item, field) : item\"\r\n [removable]=\"true\"\r\n [size]=\"size\"\r\n [icon]=\"chipIcon\"\r\n [severity]=\"severity\"\r\n (onRemove)=\"removeItem($event, i)\"\r\n (click)=\"onItemClick($event, item)\"\r\n [class.cax-focus]=\"focusedIndex === i\"\r\n >\r\n </cax-chip>\r\n <input\r\n #inputtext\r\n class=\"cax-chips-input\"\r\n [attr.placeholder]=\"(!value || !value.length) ? placeholder : ''\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onInput()\"\r\n (paste)=\"onPaste($event)\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxLength\"\r\n [attr.tabindex]=\"tabindex\"\r\n [disabled]=\"disabled || isMaxedOut\"\r\n [ngStyle]=\"inputStyle\"\r\n [class]=\"inputStyleClass\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"showClear && value?.length\" class=\"cax-chips-clear-icon\" (click)=\"clear()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n <span *ngIf=\"rightIcon\" class=\"cax-chips-icon-right\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-chips{display:inline-flex;flex-direction:column}.cax-chips-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.cax-chips-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto;max-width:100%;border-radius:8px;padding:0 10px;background:var(--neutral-100);border:1px solid var(--neutral-200);scroll-snap-align:end;scroll-snap-stop:always}.cax-chips-token:hover{border-color:var(--neutral-300)}.cax-chips-token-label{min-width:0%;overflow:auto}.cax-chips-token-label::-webkit-scrollbar{display:none}.cax-chips-input-token{flex:1 1 auto;display:inline-flex}.cax-chips-token-icon{cursor:pointer;position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px}.cax-chips-token-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-token-icon:hover{color:var(--neutral-900)}.cax-chips-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.cax-fluid .cax-chips{display:flex}.cax-chips-clear-icon{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px;cursor:pointer}.cax-chips-clear-icon:hover{color:var(--neutral-900)}.cax-chips-clear-icon i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-clearable .cax-inputtext{position:relative}.cax-cax-edit-icon{margin-right:5px;height:15px;width:auto}.cax-chips-wrapper{display:flex;align-items:center;flex:1;min-width:0;position:relative}.cax-chips-content{display:flex;flex:1;min-width:0;overflow:hidden}.cax-input-icon-left{margin-right:10px}.cax-chips-multiple-container{display:flex;align-items:center;width:100%}.cax-chips-input-token{display:inline-flex;align-items:center;min-width:120px;flex:0 0 auto;height:100%}.cax-chips-input-token input{width:100%;background:transparent;border:none;outline:none;padding:4px;font-family:inherit;font-size:inherit}.cax-chips-icon-left{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-right:8px}.cax-chips-icon-left i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px;min-height:20px;color:var(--neutral-750);margin-left:8px}.cax-chips-icon-right i{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.cax-chips-icon-right:hover{color:var(--neutral-900)}}\n"] }]
|
|
513
514
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
514
515
|
type: Inject,
|
|
515
516
|
args: [DOCUMENT]
|
|
@@ -523,6 +524,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
523
524
|
type: Input
|
|
524
525
|
}], chipIcon: [{
|
|
525
526
|
type: Input
|
|
527
|
+
}], label: [{
|
|
528
|
+
type: Input
|
|
526
529
|
}], chipsScrollable: [{
|
|
527
530
|
type: ViewChild,
|
|
528
531
|
args: ['chipsScrollable']
|