cax-design-system 2.8.1 → 2.8.3
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/esm2022/dropdown/dropdown.mjs +3 -3
- package/esm2022/menu/menu.mjs +3 -3
- package/esm2022/navigation/navigation.mjs +3 -3
- package/esm2022/tableconfiguration/tableconfiguration.mjs +19 -11
- package/esm2022/toggleswitch/toggleswitch.mjs +2 -2
- package/esm2022/upload/upload.component.mjs +12 -7
- package/fesm2022/cax-design-system-dropdown.mjs +2 -2
- package/fesm2022/cax-design-system-dropdown.mjs.map +1 -1
- package/fesm2022/cax-design-system-menu.mjs +2 -2
- package/fesm2022/cax-design-system-menu.mjs.map +1 -1
- package/fesm2022/cax-design-system-navigation.mjs +2 -2
- package/fesm2022/cax-design-system-navigation.mjs.map +1 -1
- package/fesm2022/cax-design-system-tableconfiguration.mjs +18 -10
- package/fesm2022/cax-design-system-tableconfiguration.mjs.map +1 -1
- package/fesm2022/cax-design-system-toggleswitch.mjs +2 -2
- package/fesm2022/cax-design-system-toggleswitch.mjs.map +1 -1
- package/fesm2022/cax-design-system-upload.mjs +11 -6
- package/fesm2022/cax-design-system-upload.mjs.map +1 -1
- package/package.json +184 -184
- package/resources/cax.min.scss +1 -1
- package/resources/cax.scss +1 -0
- package/resources/components/colorpicker/images/color.png +0 -0
- package/resources/components/colorpicker/images/hue.png +0 -0
- package/resources/components/menu/menu.scss +1 -0
- package/resources/components/navigation/navigation.scss +1 -0
- package/resources/components/password/images/password-meter.png +0 -0
- package/resources/components/tableconfiguration/tableconfiguration.scss +10 -0
- package/resources/components/toggleswitch/toggleswitch.scss +1 -1
- package/resources/components/tree/images/line.gif +0 -0
- package/resources/images/color.png +0 -0
- package/resources/images/hue.png +0 -0
- package/resources/images/line.gif +0 -0
- package/resources/images/password-meter.png +0 -0
- package/tableconfiguration/tableconfiguration.d.ts +3 -2
|
@@ -88,6 +88,8 @@ export class UploadComponent {
|
|
|
88
88
|
if (!this.isProcessingQueue) {
|
|
89
89
|
this.processQueue();
|
|
90
90
|
}
|
|
91
|
+
// 🔹 Reset the input value so the same file can be selected again
|
|
92
|
+
event.target.value = null;
|
|
91
93
|
}
|
|
92
94
|
// New method for file validation
|
|
93
95
|
validateFile(file) {
|
|
@@ -239,23 +241,22 @@ export class UploadComponent {
|
|
|
239
241
|
this.updateUploadStatus('idle');
|
|
240
242
|
}
|
|
241
243
|
}
|
|
242
|
-
// Remove a file from the list
|
|
243
244
|
removeFile(index) {
|
|
244
245
|
const fileToRemove = this.uploadedFiles[index];
|
|
245
|
-
// Cancel first if it's active
|
|
246
246
|
if (fileToRemove.status === 'uploading' || fileToRemove.status === 'queued') {
|
|
247
247
|
this.cancelUpload(index);
|
|
248
248
|
}
|
|
249
|
-
// Emit removal event
|
|
250
249
|
this.fileRemoved.emit(fileToRemove.file);
|
|
251
|
-
// Remove from array
|
|
252
250
|
this.uploadedFiles.splice(index, 1);
|
|
253
|
-
// Reset
|
|
251
|
+
// 🔹 Reset input element to allow re-uploading same file
|
|
252
|
+
const fileInput = document.getElementById(`fileInput-${this.uniqueId}`);
|
|
253
|
+
if (fileInput) {
|
|
254
|
+
fileInput.value = '';
|
|
255
|
+
}
|
|
254
256
|
if (this.uploadedFiles.length === 0) {
|
|
255
257
|
this.updateUploadStatus('idle');
|
|
256
258
|
}
|
|
257
259
|
else if (!this.hasQueuedOrUploading && this.uploadStatus !== 'complete') {
|
|
258
|
-
// If there are no more queued or uploading files but we have completed files
|
|
259
260
|
this.updateUploadStatus('complete');
|
|
260
261
|
}
|
|
261
262
|
}
|
|
@@ -269,6 +270,10 @@ export class UploadComponent {
|
|
|
269
270
|
}
|
|
270
271
|
this.uploadedFiles = [];
|
|
271
272
|
this.updateUploadStatus('idle');
|
|
273
|
+
const fileInput = document.getElementById(`fileInput-${this.uniqueId}`);
|
|
274
|
+
if (fileInput) {
|
|
275
|
+
fileInput.value = '';
|
|
276
|
+
}
|
|
272
277
|
}
|
|
273
278
|
get hasUploading() {
|
|
274
279
|
return this.uploadedFiles.some((file) => file.status === 'uploading');
|
|
@@ -364,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
364
369
|
type: HostListener,
|
|
365
370
|
args: ['drop', ['$event']]
|
|
366
371
|
}] } });
|
|
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
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztBQW1CN0YsTUFBTSxPQUFPLGVBQWU7SUFDZixPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLEtBQUssQ0FBOEM7SUFDbkQsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixVQUFVLEdBQVcsYUFBYSxDQUFDO0lBQ25DLFlBQVksR0FBVyxvQkFBb0IsQ0FBQztJQUM1QyxTQUFTLEdBQVcsc0JBQXNCLENBQUM7SUFDM0MsYUFBYSxHQUFZLElBQUksQ0FBQztJQUM5QixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUN6QywwQkFBMEI7SUFDaEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDeEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDekMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDekMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDM0MsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO0lBQ2hFLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ3ZDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQzNDLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO0lBRXJGLFVBQVUsR0FB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QUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQXlCUCxVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFwQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFyQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFVwbG9hZEZpbGVTdGF0dXMgPSAncXVldWVkJyB8ICd1cGxvYWRpbmcnIHwgJ2NvbXBsZXRlJyB8ICdjYW5jZWxlZCcgfCAnZXJyb3InO1xuXG5leHBvcnQgdHlwZSBVcGxvYWRGaWxlID0ge1xuICAgIGZpbGU6IEZpbGU7XG4gICAgc3RhdHVzOiBVcGxvYWRGaWxlU3RhdHVzO1xuICAgIHByb2dyZXNzPzogbnVtYmVyO1xuICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2F4LXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2NheC1lbGVtZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBpbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgbWF4RmlsZVNpemU6IG51bWJlciA9IDMwO1xuICAgIEBJbnB1dCgpIGlucHV0RmlsZXM6IHN0cmluZyA9ICdJbnB1dCBGaWxlcyc7XG4gICAgQElucHV0KCkgdXBsb2FkU3RyaW5nOiBzdHJpbmcgPSAndXBsb2FkaW5nIHRoZSBmaWxlJztcbiAgICBASW5wdXQoKSBlcnJvclRleHQ6IHN0cmluZyA9ICdQbGVhc2UgdXBsb2FkIGEgZmlsZSc7XG4gICAgQElucHV0KCkgYWxsb3dNdWx0aXBsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgY29tcG9uZW50SWQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIGFsbG93ZWRGaWxlVHlwZXM6IHN0cmluZ1tdID0gW107XG4gICAgLy8gRW5oYW5jZWQgZXZlbnQgZW1pdHRlcnNcbiAgICBAT3V0cHV0KCkgZmlsZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAgIEBPdXRwdXQoKSBmaWxlc1F1ZXVlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRDb21wbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gICAgQE91dHB1dCgpIHVwbG9hZENhbmNlbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRFcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWxlOiBGaWxlOyBlcnJvcjogc3RyaW5nIH0+KCk7XG4gICAgQE91dHB1dCgpIGZpbGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAgIEBPdXRwdXQoKSBhbGxGaWxlc1JlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIHVwbG9hZFN0YXR1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2lkbGUnIHwgJ3VwbG9hZGluZycgfCAnY29tcGxldGUnPigpO1xuXG4gICAgaXNEcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHVwbG9hZGVkRmlsZXM6IFVwbG9hZEZpbGVbXSA9IFtdO1xuICAgIHVwbG9hZFN0YXR1czogJ2lkbGUnIHwgJ3VwbG9hZGluZycgfCAnY29tcGxldGUnID0gJ2lkbGUnO1xuICAgIGlzUHJvY2Vzc2luZ1F1ZXVlOiBib29sZWFuID0gZmFsc2U7XG4gICAgdW5pcXVlSWQ6IHN0cmluZyA9ICcnO1xuXG4gICAgLy8gQ29tcHV0ZWQgcHJvcGVydHkgZm9yIGFjY2VwdCBhdHRyaWJ1dGUgaW4gZmlsZSBpbnB1dFxuICAgIGdldCBhY2NlcHRGaWxlVHlwZXMoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsbG93ZWRGaWxlVHlwZXMgfHwgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxvd2VkRmlsZVR5cGVzLm1hcCgodHlwZSkgPT4gYC4ke3R5cGV9YCkuam9pbignLCcpO1xuICAgIH1cblxuICAgIC8vIFRyYWNrIGFjdHVhbCBmaWxlcyB0byBwcm9jZXNzIChleGNsdWRlcyBjYW5jZWxlZCBvbmVzKVxuICAgIHByaXZhdGUgZ2V0IGFjdGl2ZUZpbGVzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkZWRGaWxlcy5maWx0ZXIoKGZpbGUpID0+IGZpbGUuc3RhdHVzICE9PSAnY2FuY2VsZWQnKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBJRCBpZiBub3QgcHJvdmlkZWQgdGhyb3VnaCBpbnB1dFxuICAgICAgICB0aGlzLnVuaXF1ZUlkID0gdGhpcy5jb21wb25lbnRJZCB8fCBgdXBsb2FkLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDExKX1gO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcbiAgICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcbiAgICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcbiAgICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgICAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbGVBcnJheSA9IEFycmF5LmZyb20oZmlsZXMpO1xuICAgICAgICBjb25zdCB2YWxpZEZpbGVzID0gZmlsZUFycmF5LmZpbHRlcigoZmlsZSkgPT4gdGhpcy52YWxpZGF0ZUZpbGUoZmlsZSkpO1xuXG4gICAgICAgIC8vIFF1ZXVlIGFsbCBmaWxlcyBmb3IgdXBsb2FkXG4gICAgICAgIHZhbGlkRmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5xdWV1ZUZpbGUoZmlsZSkpO1xuXG4gICAgICAgIC8vIEVtaXQgdGhlIHF1ZXVlZCBmaWxlcyBldmVudFxuICAgICAgICBpZiAodmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzUXVldWVkLmVtaXQodmFsaWRGaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSBpZiBub3QgYWxyZWFkeSBwcm9jZXNzaW5nXG4gICAgICAgIGlmICghdGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUZpbGVJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcbiAgICAgICAgaWYgKCFmaWxlcykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbGVBcnJheSA9IEFycmF5LmZyb20oZmlsZXMpO1xuICAgICAgICBjb25zdCB2YWxpZEZpbGVzID0gZmlsZUFycmF5LmZpbHRlcigoZmlsZSkgPT4gdGhpcy52YWxpZGF0ZUZpbGUoZmlsZSkpO1xuXG4gICAgICAgIC8vIFF1ZXVlIGFsbCBmaWxlcyBmb3IgdXBsb2FkXG4gICAgICAgIHZhbGlkRmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5xdWV1ZUZpbGUoZmlsZSkpO1xuXG4gICAgICAgIC8vIEVtaXQgdGhlIHF1ZXVlZCBmaWxlcyBldmVudFxuICAgICAgICBpZiAodmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzUXVldWVkLmVtaXQodmFsaWRGaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSBpZiBub3QgYWxyZWFkeSBwcm9jZXNzaW5nXG4gICAgICAgIGlmICghdGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIPCflLkgUmVzZXQgdGhlIGlucHV0IHZhbHVlIHNvIHRoZSBzYW1lIGZpbGUgY2FuIGJlIHNlbGVjdGVkIGFnYWluXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTmV3IG1ldGhvZCBmb3IgZmlsZSB2YWxpZGF0aW9uXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUZpbGUoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBTaXplIHZhbGlkYXRpb25cbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0RXJyb3IoZmlsZSwgYEZpbGUgc2l6ZSBzaG91bGQgYmUgbGVzcyB0aGFuICR7dGhpcy5tYXhGaWxlU2l6ZX1NQmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlsZSB0eXBlIHZhbGlkYXRpb25cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0RXJyb3IoZmlsZSwgYE9ubHkgJHt0aGlzLmFsbG93ZWRGaWxlVHlwZXMuam9pbignLCAnKX0gZmlsZXMgYXJlIGFsbG93ZWRgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBmaWxlIGV4dGVuc2lvblxuICAgIHByaXZhdGUgZ2V0RmlsZUV4dGVuc2lvbihmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGZpbGVuYW1lLnNwbGl0KCcuJykucG9wKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgLy8gUXVldWUgYSBmaWxlIGZvciB1cGxvYWRcbiAgICBwcml2YXRlIHF1ZXVlRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwbG9hZEVudHJ5OiBVcGxvYWRGaWxlID0ge1xuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIHN0YXR1czogJ3F1ZXVlZCcsXG4gICAgICAgICAgICBwcm9ncmVzczogMFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKHVwbG9hZEVudHJ5KTtcblxuICAgICAgICBpZiAodGhpcy51cGxvYWRTdGF0dXMgPT09ICdpZGxlJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRTdGF0dXMoJ3VwbG9hZGluZycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHVwbG9hZCBzdGF0dXMgYW5kIGVtaXQgZXZlbnRcbiAgICBwcml2YXRlIHVwZGF0ZVVwbG9hZFN0YXR1cyhzdGF0dXM6ICdpZGxlJyB8ICd1cGxvYWRpbmcnIHwgJ2NvbXBsZXRlJyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51cGxvYWRTdGF0dXMgIT09IHN0YXR1cykge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRTdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFN0YXR1c0NoYW5nZS5lbWl0KHN0YXR1cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIHRoZSBxdWV1ZSBvZiBmaWxlcyBzZXF1ZW50aWFsbHlcbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NRdWV1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nUXVldWUpIHJldHVybjtcblxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcblxuICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IGZpbGUgdG8gdXBsb2FkXG4gICAgICAgIGxldCBuZXh0RmlsZUluZGV4ID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbmRJbmRleCgoZmlsZSkgPT4gZmlsZS5zdGF0dXMgPT09ICdxdWV1ZWQnKTtcblxuICAgICAgICB3aGlsZSAobmV4dEZpbGVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzW25leHRGaWxlSW5kZXhdO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRmlsZShjdXJyZW50RmlsZSwgbmV4dEZpbGVJbmRleCk7XG5cbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgZmlsZSBhZnRlciBwcm9jZXNzaW5nXG4gICAgICAgICAgICBuZXh0RmlsZUluZGV4ID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbmRJbmRleCgoZmlsZSkgPT4gZmlsZS5zdGF0dXMgPT09ICdxdWV1ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDaGVjayBpZiBhbGwgdXBsb2FkcyBhcmUgY29tcGxldGUgYW5kIHRoZXJlIGFyZSBubyBtb3JlIGZpbGVzIHRvIHByb2Nlc3NcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlcy5sZW5ndGggPiAwICYmIHRoaXMudXBsb2FkZWRGaWxlcy5zb21lKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykgJiYgIXRoaXMuaGFzUXVldWVkT3JVcGxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXBsb2FkU3RhdHVzKCdjb21wbGV0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBmaWxlIGlucHV0IGNsaWNrIHByb2dyYW1tYXRpY2FsbHlcbiAgICBvcGVuRmlsZVNlbGVjdG9yKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWxlSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgZmlsZUlucHV0LSR7dGhpcy51bmlxdWVJZH1gKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpZiAoZmlsZUlucHV0KSB7XG4gICAgICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtaXQgZXJyb3IgZXZlbnRcbiAgICBwcml2YXRlIGVtaXRFcnJvcihmaWxlOiBGaWxlLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRFcnJvci5lbWl0KHsgZmlsZSwgZXJyb3I6IG1lc3NhZ2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRmlsZShmaWxlRW50cnk6IFVwbG9hZEZpbGUsIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gVXBkYXRlIHN0YXR1cyB0byB1cGxvYWRpbmdcbiAgICAgICAgZmlsZUVudHJ5LnN0YXR1cyA9ICd1cGxvYWRpbmcnO1xuICAgICAgICBmaWxlRW50cnkucHJvZ3Jlc3MgPSAwO1xuXG4gICAgICAgIHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQoZmlsZUVudHJ5LmZpbGUpO1xuICAgICAgICB0aGlzLnVwbG9hZFN0YXJ0ZWQuZW1pdChmaWxlRW50cnkuZmlsZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFNpbXVsYXRlIHVwbG9hZCB3aXRoIHByb2dyZXNzIHVwZGF0ZXNcbiAgICAgICAgICAgIGZvciAobGV0IHByb2dyZXNzID0gMDsgcHJvZ3Jlc3MgPD0gMTAwOyBwcm9ncmVzcyArPSAxMCkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHVwbG9hZCB3YXMgY2FuY2VsZWQgZHVyaW5nIHByb2dyZXNzXG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBjdXJyZW50IHN0YXR1cyBzaW5jZSBpdCBtaWdodCBoYXZlIGNoYW5nZWRcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUVudHJ5LnN0YXR1cyAhPT0gJ3VwbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIGNhbmNlbGVkIG9yIGVycm9yZWRcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmlsZUVudHJ5LnByb2dyZXNzID0gcHJvZ3Jlc3M7XG5cbiAgICAgICAgICAgICAgICAvLyBTaW11bGF0ZSBuZXR3b3JrIGRlbGF5XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9ubHkgc2V0IHRvIGNvbXBsZXRlIGlmIHN0aWxsIHVwbG9hZGluZyAobm90IGNhbmNlbGVkIG9yIGVycm9yZWQpXG4gICAgICAgICAgICBpZiAoZmlsZUVudHJ5LnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgICBmaWxlRW50cnkuc3RhdHVzID0gJ2NvbXBsZXRlJztcbiAgICAgICAgICAgICAgICBmaWxlRW50cnkucHJvZ3Jlc3MgPSAxMDA7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRDb21wbGV0ZWQuZW1pdChmaWxlRW50cnkuZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgICAgICBmaWxlRW50cnkuc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gdXBsb2FkIGVycm9yJztcbiAgICAgICAgICAgIGZpbGVFbnRyeS5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB0aGlzLmVtaXRFcnJvcihmaWxlRW50cnkuZmlsZSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbFVwbG9hZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIENhbmNlbCB0aGUgc3BlY2lmaWVkIGZpbGUgYW5kIGFsbCBmaWxlcyBiZWxvdyBpdFxuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0aGlzLnVwbG9hZGVkRmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVUb0NhbmNlbCA9IHRoaXMudXBsb2FkZWRGaWxlc1tpXTtcbiAgICAgICAgICAgIGlmIChmaWxlVG9DYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1N0YXR1cyA9IGZpbGVUb0NhbmNlbC5zdGF0dXM7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdHVzID09PSAndXBsb2FkaW5nJyB8fCBwcmV2aW91c1N0YXR1cyA9PT0gJ3F1ZXVlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZVRvQ2FuY2VsLnN0YXR1cyA9ICdjYW5jZWxlZCc7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZW1pdCBpZiBpdCB3YXMgYWN0aXZlbHkgdXBsb2FkaW5nIChub3QganVzdCBxdWV1ZWQpXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXR1cyA9PT0gJ3VwbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQuZW1pdChmaWxlVG9DYW5jZWwuZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCB3YXMgdXBsb2FkaW5nLCBwcm9jZXNzIHRoZSBuZXh0IGZpbGUgaW4gcXVldWVcbiAgICAgICAgLy8gKHdoaWNoIHdvdWxkIG5vdyBiZSBhIGZpbGUgYmVmb3JlIHRoZSBpbmRleCB0aGF0IG1pZ2h0IGJlIHF1ZXVlZClcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1tpbmRleF0/LnN0YXR1cyA9PT0gJ2NhbmNlbGVkJykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnByb2Nlc3NRdWV1ZSgpLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbmNlbCB0aGUgY3VycmVudCB1cGxvYWRcbiAgICBjYW5jZWxDdXJyZW50VXBsb2FkKCk6IHZvaWQge1xuICAgICAgICAvLyBGaW5kIHRoZSBmaWxlIHRoYXQncyBjdXJyZW50bHkgdXBsb2FkaW5nXG4gICAgICAgIGNvbnN0IGN1cnJlbnRVcGxvYWRJbmRleCA9IHRoaXMudXBsb2FkZWRGaWxlcy5maW5kSW5kZXgoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSAndXBsb2FkaW5nJyk7XG4gICAgICAgIGlmIChjdXJyZW50VXBsb2FkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxVcGxvYWQoY3VycmVudFVwbG9hZEluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbmNlbCBhbGwgdXBsb2Fkc1xuICAgIGNhbmNlbEFsbFVwbG9hZHMoKTogdm9pZCB7XG4gICAgICAgIGxldCBoYWRBY3RpdmVVcGxvYWRzID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycgfHwgZmlsZS5zdGF0dXMgPT09ICdxdWV1ZWQnKSB7XG4gICAgICAgICAgICAgICAgaGFkQWN0aXZlVXBsb2FkcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0dXMgPSBmaWxlLnN0YXR1cztcbiAgICAgICAgICAgICAgICBmaWxlLnN0YXR1cyA9ICdjYW5jZWxlZCc7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0dXMgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQuZW1pdChmaWxlLmZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhhZEFjdGl2ZVVwbG9hZHMgJiYgIXRoaXMuaGFzUXVldWVkT3JVcGxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXBsb2FkU3RhdHVzKCdpZGxlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsZVRvUmVtb3ZlID0gdGhpcy51cGxvYWRlZEZpbGVzW2luZGV4XTtcblxuICAgICAgICBpZiAoZmlsZVRvUmVtb3ZlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycgfHwgZmlsZVRvUmVtb3ZlLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdChmaWxlVG9SZW1vdmUuZmlsZSk7XG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIPCflLkgUmVzZXQgaW5wdXQgZWxlbWVudCB0byBhbGxvdyByZS11cGxvYWRpbmcgc2FtZSBmaWxlXG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBmaWxlSW5wdXQtJHt0aGlzLnVuaXF1ZUlkfWApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlmIChmaWxlSW5wdXQpIHtcbiAgICAgICAgICAgIGZpbGVJbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXBsb2FkU3RhdHVzKCdpZGxlJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzUXVldWVkT3JVcGxvYWRpbmcgJiYgdGhpcy51cGxvYWRTdGF0dXMgIT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXBsb2FkU3RhdHVzKCdjb21wbGV0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFsbCBmaWxlc1xuICAgIHJlbW92ZUFsbEZpbGVzKCk6IHZvaWQge1xuICAgICAgICAvLyBDYW5jZWwgYW55IGFjdGl2ZSB1cGxvYWRzXG4gICAgICAgIHRoaXMuY2FuY2VsQWxsVXBsb2FkcygpO1xuXG4gICAgICAgIC8vIE9ubHkgZW1pdCBpZiB0aGVyZSB3ZXJlIGZpbGVzIHRvIHJlbW92ZVxuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWxsRmlsZXNSZW1vdmVkLmVtaXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZFN0YXR1cygnaWRsZScpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBmaWxlSW5wdXQtJHt0aGlzLnVuaXF1ZUlkfWApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlmIChmaWxlSW5wdXQpIHtcbiAgICAgICAgICAgIGZpbGVJbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGhhc1VwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkZWRGaWxlcy5zb21lKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpO1xuICAgIH1cblxuICAgIGdldCBoYXNRdWV1ZWRPclVwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkZWRGaWxlcy5zb21lKChmaWxlKSA9PiBmaWxlLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycgfHwgZmlsZS5zdGF0dXMgPT09ICdxdWV1ZWQnKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRlZEZpbGVzLnNvbWUoKGZpbGUpID0+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
|
|
@@ -1455,7 +1455,7 @@ class Dropdown {
|
|
|
1455
1455
|
this.resetFilter();
|
|
1456
1456
|
}
|
|
1457
1457
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Dropdown, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.FilterService }, { token: i1.caxConfig }], target: i0.ɵɵFactoryTarget.Component });
|
|
1458
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Dropdown, isStandalone: true, selector: "cax-dropdown", inputs: { id: "id", scrollHeight: "scrollHeight", filter: ["filter", "filter", booleanAttribute], name: "name", style: "style", panelStyle: "panelStyle", styleClass: "styleClass", panelStyleClass: "panelStyleClass", readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], editable: ["editable", "editable", booleanAttribute], appendTo: "appendTo", tabindex: ["tabindex", "tabindex", numberAttribute], placeholder: "placeholder", loadingIcon: "loadingIcon", filterPlaceholder: "filterPlaceholder", filterLocale: "filterLocale", variant: "variant", inputId: "inputId", dataKey: "dataKey", filterBy: "filterBy", filterFields: "filterFields", autofocus: ["autofocus", "autofocus", booleanAttribute], resetFilterOnHide: ["resetFilterOnHide", "resetFilterOnHide", booleanAttribute], checkmark: ["checkmark", "checkmark", booleanAttribute], dropdownIcon: "dropdownIcon", loading: ["loading", "loading", booleanAttribute], optionLabel: "optionLabel", optionValue: "optionValue", optionDisabled: "optionDisabled", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", autoDisplayFirst: ["autoDisplayFirst", "autoDisplayFirst", booleanAttribute], group: ["group", "group", booleanAttribute], showClear: ["showClear", "showClear", booleanAttribute], emptyFilterMessage: "emptyFilterMessage", emptyMessage: "emptyMessage", lazy: ["lazy", "lazy", booleanAttribute], virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", overlayOptions: "overlayOptions", ariaFilterLabel: "ariaFilterLabel", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", filterMatchMode: "filterMatchMode", maxlength: ["maxlength", "maxlength", numberAttribute], tooltip: "tooltip", tooltipPosition: "tooltipPosition", tooltipPositionStyle: "tooltipPositionStyle", tooltipStyleClass: "tooltipStyleClass", focusOnHover: ["focusOnHover", "focusOnHover", booleanAttribute], selectOnFocus: ["selectOnFocus", "selectOnFocus", booleanAttribute], autoOptionFocus: ["autoOptionFocus", "autoOptionFocus", booleanAttribute], autofocusFilter: ["autofocusFilter", "autofocusFilter", booleanAttribute], autoShowPanelOnPrintableCharacterKeyDown: ["autoShowPanelOnPrintableCharacterKeyDown", "autoShowPanelOnPrintableCharacterKeyDown", booleanAttribute], labelText: "labelText", disabled: "disabled", itemSize: "itemSize", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", filterValue: "filterValue", options: "options" }, outputs: { onChange: "onChange", onFilter: "onFilter", onFocus: "onFocus", onBlur: "onBlur", onClick: "onClick", onShow: "onShow", onHide: "onHide", onClear: "onClear", onLazyLoad: "onLazyLoad" }, host: { properties: { "class.cax-inputwrapper-filled": "filled()", "class.cax-inputwrapper-focus": "focused || overlayVisible" }, classAttribute: "cax-element cax-inputwrapper" }, providers: [DROPDOWN_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }, { propertyName: "focusInputViewChild", first: true, predicate: ["focusInput"], descendants: true }, { propertyName: "editableInputViewChild", first: true, predicate: ["editableInput"], descendants: true }, { propertyName: "itemsViewChild", first: true, predicate: ["items"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }, { propertyName: "overlayViewChild", first: true, predicate: ["overlay"], descendants: true }, { propertyName: "firstHiddenFocusableElementOnOverlay", first: true, predicate: ["firstHiddenFocusableEl"], descendants: true }, { propertyName: "lastHiddenFocusableElementOnOverlay", first: true, predicate: ["lastHiddenFocusableEl"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{'cax-dropdown-main-label': labelText}\">\r\n <label *ngIf=\"labelText\" [ngClass]=\"labelTextClass\">{{ labelText }}</label>\r\n</div>\r\n<div #container [attr.id]=\"id\" [ngClass]=\"containerClass\" (click)=\"onContainerClick($event)\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <span\r\n #focusInput\r\n [ngClass]=\"inputClass\"\r\n *ngIf=\"!editable\"\r\n [caxTooltip]=\"tooltip\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [positionStyle]=\"tooltipPositionStyle\"\r\n [tooltipStyleClass]=\"tooltipStyleClass\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.id]=\"inputId\"\r\n role=\"combobox\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [attr.aria-controls]=\"overlayVisible ? id + '_list' : null\"\r\n [attr.tabindex]=\"!disabled ? tabindex : -1\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-required]=\"required\"\r\n [attr.required]=\"required\"\r\n >\r\n <ng-container *ngIf=\"!selectedItemTemplate; else defaultPlaceholder\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</ng-container>\r\n <ng-container *ngIf=\"selectedItemTemplate && !isSelectedOptionEmpty()\" [ngTemplateOutlet]=\"selectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: selectedOption }\"></ng-container>\r\n <ng-template #defaultPlaceholder>\r\n <span *ngIf=\"isSelectedOptionEmpty()\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</span>\r\n </ng-template>\r\n </span>\r\n <input\r\n *ngIf=\"editable\"\r\n #editableInput\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxlength\"\r\n [ngClass]=\"inputClass\"\r\n [disabled]=\"disabled\"\r\n aria-haspopup=\"listbox\"\r\n [attr.placeholder]=\"modelValue() === undefined || modelValue() === null ? placeholder() : undefined\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n (input)=\"onEditableInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n />\r\n <ng-container *ngIf=\"isVisibleClearIcon\">\r\n <TimesIcon [styleClass]=\"'cax-dropdown-clear-icon'\" (click)=\"clear($event)\" *ngIf=\"!clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\" />\r\n <span class=\"cax-dropdown-clear-icon\" (click)=\"clear($event)\" *ngIf=\"clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\">\r\n <ng-template *ngTemplateOutlet=\"clearIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n\r\n <div class=\"cax-dropdown-trigger\" role=\"button\" aria-label=\"dropdown trigger\" (mousedown)=\"onMouseDown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible ?? false\" [attr.data-pc-section]=\"'trigger'\">\r\n <ng-container *ngIf=\"loading; else elseBlock\">\r\n <ng-container *ngIf=\"loadingIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingIconTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loadingIconTemplate\">\r\n <span *ngIf=\"loadingIcon\" [ngClass]=\"'cax-dropdown-trigger-icon pi-spin ' + loadingIcon\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"!loadingIcon\" [class]=\"'cax-dropdown-trigger-icon pi pi-spinner pi-spin'\" aria-hidden=\"true\"></span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #elseBlock>\r\n <ng-container *ngIf=\"!dropdownIconTemplate\">\r\n <span class=\"cax-dropdown-trigger-icon\" *ngIf=\"dropdownIcon\" [ngClass]=\"dropdownIcon\"></span>\r\n <!-- <ChevronDownIcon *ngIf=\"!dropdownIcon\" [styleClass]=\"'cax-dropdown-trigger-icon'\" /> -->\r\n <i *ngIf=\"!dropdownIcon\" class=\"cax cax-alt-arrow-down\"></i>\r\n </ng-container>\r\n <span *ngIf=\"dropdownIconTemplate\" class=\"cax-dropdown-trigger-icon\">\r\n <ng-template *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-template>\r\n </span>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-overlay\r\n #overlay\r\n [(visible)]=\"overlayVisible\"\r\n [options]=\"overlayOptions\"\r\n [target]=\"'@parent'\"\r\n [appendTo]=\"appendTo\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\"\r\n (onAnimationStart)=\"onOverlayAnimationStart($event)\"\r\n (onHide)=\"hide()\"\r\n >\r\n <ng-template caxTemplate=\"content\">\r\n <div [ngClass]=\"'cax-dropdown-panel cax-component'\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\">\r\n <span\r\n #firstHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onFirstHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n >\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-dropdown-header\" *ngIf=\"filter\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"filterTemplate; else builtInFilterElement\">\r\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: { options: filterOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-template #builtInFilterElement>\r\n <div class=\"cax-dropdown-filter-container\">\r\n <input\r\n #filter\r\n type=\"text\"\r\n role=\"searchbox\"\r\n autocomplete=\"off\"\r\n [attr.placeholder]=\"filterPlaceholder || 'Search...'\"\r\n [value]=\"_filterValue() || ''\"\r\n class=\"cax-dropdown-filter cax-inputtext cax-component\"\r\n [ngClass]=\"{ 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\r\n [attr.placeholder]=\"filterPlaceholder\"\r\n [attr.aria-owns]=\"id + '_list'\"\r\n (input)=\"onFilterInputChange($event)\"\r\n [attr.aria-label]=\"ariaFilterLabel\"\r\n [attr.aria-activedescendant]=\"focusedOptionId\"\r\n (keydown)=\"onFilterKeyDown($event)\"\r\n (blur)=\"onFilterBlur($event)\"\r\n />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-dropdown-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-dropdown-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n <i *ngIf=\"_filterValue()\" class=\"cax cax-close-circle cax-dropdown-filter-clear-icon\" (click)=\"resetFilter()\"></i>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"cax-dropdown-items-wrapper\"\r\n [ngStyle]=\"{\r\n 'max-height': virtualScroll ? 'auto' : scrollHeight || 'auto'\r\n }\"\r\n tabindex=\"0\"\r\n >\r\n <cax-scroller\r\n *ngIf=\"virtualScroll\"\r\n #scroller\r\n [items]=\"visibleOptions()\"\r\n [style]=\"{ height: scrollHeight }\"\r\n [itemSize]=\"virtualScrollItemSize || _itemSize\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: visibleOptions(), options: {} }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInItems let-items let-scrollerOptions=\"options\">\r\n <ul #items [attr.id]=\"id + '_list'\" [attr.aria-label]=\"listLabel\" class=\"cax-dropdown-items\" [ngClass]=\"scrollerOptions.contentStyleClass\" [ngStyle]=\"scrollerOptions.contentStyle\" role=\"listbox\">\r\n <ng-template ngFor let-option [ngForOf]=\"items\" let-i=\"index\">\r\n <ng-container *ngIf=\"isOptionGroup(option)\">\r\n <li class=\"cax-dropdown-item-group\" [attr.id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <span *ngIf=\"!groupTemplate\">{{ getOptionGroupLabel(option.optionGroup) }}</span>\r\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: option.optionGroup }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isOptionGroup(option)\">\r\n <cax-dropdownItem\r\n [id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\"\r\n [option]=\"option\"\r\n [checkmark]=\"checkmark\"\r\n [selected]=\"isSelected(option)\"\r\n [label]=\"getOptionLabel(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [template]=\"itemTemplate\"\r\n [focused]=\"focusedOptionIndex() === getOptionIndex(i, scrollerOptions)\"\r\n [ariaPosInset]=\"getAriaPosInset(getOptionIndex(i, scrollerOptions))\"\r\n [ariaSetSize]=\"ariaSetSize\"\r\n (onClick)=\"onOptionSelect($event, option)\"\r\n (onMouseEnter)=\"onOptionMouseEnter($event, getOptionIndex(i, scrollerOptions))\"\r\n ></cax-dropdownItem>\r\n </ng-container>\r\n </ng-template>\r\n <li *ngIf=\"filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\"> {{ emptyFilterMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\r\n </li>\r\n <li *ngIf=\"!filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyTemplate; else empty\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n <span\r\n #lastHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onLastHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n ></span>\r\n </div>\r\n </ng-template>\r\n </cax-overlay>\r\n</div>\r\n", styles: ["@layer cax{.cax-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none;width:100%;height:40px}.cax-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-dropdown-main-label{font-weight:500;font-size:14px;line-height:20px;margin-bottom:8px}.cax-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.cax-dropdown-trigger-icon{transition:transform .3s ease}.cax-dropdown-open .cax-dropdown-trigger-icon{transform:rotate(180deg)}.cax-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.cax-dropdown-label-empty{overflow:hidden;opacity:0}input.cax-dropdown-label{cursor:default}.cax-dropdown-items-wrapper{overflow:auto}.cax-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden;font-weight:500}.cax-dropdown-item-group{cursor:auto}.cax-dropdown-items{margin:0;padding:0;list-style-type:none}.cax-fluid .cax-dropdown{display:flex}.cax-fluid .cax-dropdown .cax-dropdown-label{width:1%}.cax-float-label .cax-dropdown .cax-placeholder{opacity:0}}\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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "component", type: i3.Overlay, selector: "cax-overlay", inputs: ["visible", "mode", "style", "styleClass", "contentStyle", "contentStyleClass", "target", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "listener", "responsive", "options"], outputs: ["visibleChange", "onBeforeShow", "onShow", "onBeforeHide", "onHide", "onAnimationStart", "onAnimationDone"] }, { kind: "directive", type: i1.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.Tooltip, selector: "[caxTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "caxTooltip", "tooltipDisabled", "tooltipOptions", "linkUrl", "linkText"] }, { kind: "ngmodule", type: RippleModule }, { kind: "ngmodule", type: ScrollerModule }, { kind: "component", type: i5.Scroller, selector: "cax-scroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "ngmodule", type: AutoFocusModule }, { kind: "directive", type: i6.AutoFocus, selector: "[caxAutoFocus]", inputs: ["autofocus"] }, { kind: "component", type: TimesIcon, selector: "TimesIcon" }, { kind: "component", type: SearchIcon, selector: "SearchIcon" }, { kind: "component", type: DropdownItem, selector: "cax-dropdownItem", inputs: ["id", "option", "selected", "focused", "label", "disabled", "visible", "itemSize", "ariaPosInset", "ariaSetSize", "template", "checkmark"], outputs: ["onClick", "onMouseEnter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1458
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Dropdown, isStandalone: true, selector: "cax-dropdown", inputs: { id: "id", scrollHeight: "scrollHeight", filter: ["filter", "filter", booleanAttribute], name: "name", style: "style", panelStyle: "panelStyle", styleClass: "styleClass", panelStyleClass: "panelStyleClass", readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], editable: ["editable", "editable", booleanAttribute], appendTo: "appendTo", tabindex: ["tabindex", "tabindex", numberAttribute], placeholder: "placeholder", loadingIcon: "loadingIcon", filterPlaceholder: "filterPlaceholder", filterLocale: "filterLocale", variant: "variant", inputId: "inputId", dataKey: "dataKey", filterBy: "filterBy", filterFields: "filterFields", autofocus: ["autofocus", "autofocus", booleanAttribute], resetFilterOnHide: ["resetFilterOnHide", "resetFilterOnHide", booleanAttribute], checkmark: ["checkmark", "checkmark", booleanAttribute], dropdownIcon: "dropdownIcon", loading: ["loading", "loading", booleanAttribute], optionLabel: "optionLabel", optionValue: "optionValue", optionDisabled: "optionDisabled", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", autoDisplayFirst: ["autoDisplayFirst", "autoDisplayFirst", booleanAttribute], group: ["group", "group", booleanAttribute], showClear: ["showClear", "showClear", booleanAttribute], emptyFilterMessage: "emptyFilterMessage", emptyMessage: "emptyMessage", lazy: ["lazy", "lazy", booleanAttribute], virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", overlayOptions: "overlayOptions", ariaFilterLabel: "ariaFilterLabel", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", filterMatchMode: "filterMatchMode", maxlength: ["maxlength", "maxlength", numberAttribute], tooltip: "tooltip", tooltipPosition: "tooltipPosition", tooltipPositionStyle: "tooltipPositionStyle", tooltipStyleClass: "tooltipStyleClass", focusOnHover: ["focusOnHover", "focusOnHover", booleanAttribute], selectOnFocus: ["selectOnFocus", "selectOnFocus", booleanAttribute], autoOptionFocus: ["autoOptionFocus", "autoOptionFocus", booleanAttribute], autofocusFilter: ["autofocusFilter", "autofocusFilter", booleanAttribute], autoShowPanelOnPrintableCharacterKeyDown: ["autoShowPanelOnPrintableCharacterKeyDown", "autoShowPanelOnPrintableCharacterKeyDown", booleanAttribute], labelText: "labelText", disabled: "disabled", itemSize: "itemSize", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", filterValue: "filterValue", options: "options" }, outputs: { onChange: "onChange", onFilter: "onFilter", onFocus: "onFocus", onBlur: "onBlur", onClick: "onClick", onShow: "onShow", onHide: "onHide", onClear: "onClear", onLazyLoad: "onLazyLoad" }, host: { properties: { "class.cax-inputwrapper-filled": "filled()", "class.cax-inputwrapper-focus": "focused || overlayVisible" }, classAttribute: "cax-element cax-inputwrapper" }, providers: [DROPDOWN_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }, { propertyName: "focusInputViewChild", first: true, predicate: ["focusInput"], descendants: true }, { propertyName: "editableInputViewChild", first: true, predicate: ["editableInput"], descendants: true }, { propertyName: "itemsViewChild", first: true, predicate: ["items"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }, { propertyName: "overlayViewChild", first: true, predicate: ["overlay"], descendants: true }, { propertyName: "firstHiddenFocusableElementOnOverlay", first: true, predicate: ["firstHiddenFocusableEl"], descendants: true }, { propertyName: "lastHiddenFocusableElementOnOverlay", first: true, predicate: ["lastHiddenFocusableEl"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{'cax-dropdown-main-label': labelText}\">\r\n <label *ngIf=\"labelText\" [ngClass]=\"labelTextClass\">{{ labelText }}</label>\r\n</div>\r\n<div #container [attr.id]=\"id\" [ngClass]=\"containerClass\" (click)=\"onContainerClick($event)\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <span\r\n #focusInput\r\n [ngClass]=\"inputClass\"\r\n *ngIf=\"!editable\"\r\n [caxTooltip]=\"tooltip\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [positionStyle]=\"tooltipPositionStyle\"\r\n [tooltipStyleClass]=\"tooltipStyleClass\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.id]=\"inputId\"\r\n role=\"combobox\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [attr.aria-controls]=\"overlayVisible ? id + '_list' : null\"\r\n [attr.tabindex]=\"!disabled ? tabindex : -1\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-required]=\"required\"\r\n [attr.required]=\"required\"\r\n >\r\n <ng-container *ngIf=\"!selectedItemTemplate; else defaultPlaceholder\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</ng-container>\r\n <ng-container *ngIf=\"selectedItemTemplate && !isSelectedOptionEmpty()\" [ngTemplateOutlet]=\"selectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: selectedOption }\"></ng-container>\r\n <ng-template #defaultPlaceholder>\r\n <span *ngIf=\"isSelectedOptionEmpty()\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</span>\r\n </ng-template>\r\n </span>\r\n <input\r\n *ngIf=\"editable\"\r\n #editableInput\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxlength\"\r\n [ngClass]=\"inputClass\"\r\n [disabled]=\"disabled\"\r\n aria-haspopup=\"listbox\"\r\n [attr.placeholder]=\"modelValue() === undefined || modelValue() === null ? placeholder() : undefined\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n (input)=\"onEditableInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n />\r\n <ng-container *ngIf=\"isVisibleClearIcon\">\r\n <TimesIcon [styleClass]=\"'cax-dropdown-clear-icon'\" (click)=\"clear($event)\" *ngIf=\"!clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\" />\r\n <span class=\"cax-dropdown-clear-icon\" (click)=\"clear($event)\" *ngIf=\"clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\">\r\n <ng-template *ngTemplateOutlet=\"clearIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n\r\n <div class=\"cax-dropdown-trigger\" role=\"button\" aria-label=\"dropdown trigger\" (mousedown)=\"onMouseDown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible ?? false\" [attr.data-pc-section]=\"'trigger'\">\r\n <ng-container *ngIf=\"loading; else elseBlock\">\r\n <ng-container *ngIf=\"loadingIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingIconTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loadingIconTemplate\">\r\n <span *ngIf=\"loadingIcon\" [ngClass]=\"'cax-dropdown-trigger-icon pi-spin ' + loadingIcon\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"!loadingIcon\" [class]=\"'cax-dropdown-trigger-icon pi pi-spinner pi-spin'\" aria-hidden=\"true\"></span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #elseBlock>\r\n <ng-container *ngIf=\"!dropdownIconTemplate\">\r\n <span class=\"cax-dropdown-trigger-icon\" *ngIf=\"dropdownIcon\" [ngClass]=\"dropdownIcon\"></span>\r\n <!-- <ChevronDownIcon *ngIf=\"!dropdownIcon\" [styleClass]=\"'cax-dropdown-trigger-icon'\" /> -->\r\n <i *ngIf=\"!dropdownIcon && !overlayVisible\" class=\"cax cax-alt-arrow-down\"></i>\r\n <i *ngIf=\"!dropdownIcon && overlayVisible\" class=\"cax cax-alt-arrow-up\"></i>\r\n </ng-container>\r\n <span *ngIf=\"dropdownIconTemplate\" class=\"cax-dropdown-trigger-icon\">\r\n <ng-template *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-template>\r\n </span>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-overlay\r\n #overlay\r\n [(visible)]=\"overlayVisible\"\r\n [options]=\"overlayOptions\"\r\n [target]=\"'@parent'\"\r\n [appendTo]=\"appendTo\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\"\r\n (onAnimationStart)=\"onOverlayAnimationStart($event)\"\r\n (onHide)=\"hide()\"\r\n >\r\n <ng-template caxTemplate=\"content\">\r\n <div [ngClass]=\"'cax-dropdown-panel cax-component'\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\">\r\n <span\r\n #firstHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onFirstHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n >\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-dropdown-header\" *ngIf=\"filter\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"filterTemplate; else builtInFilterElement\">\r\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: { options: filterOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-template #builtInFilterElement>\r\n <div class=\"cax-dropdown-filter-container\">\r\n <input\r\n #filter\r\n type=\"text\"\r\n role=\"searchbox\"\r\n autocomplete=\"off\"\r\n [attr.placeholder]=\"filterPlaceholder || 'Search...'\"\r\n [value]=\"_filterValue() || ''\"\r\n class=\"cax-dropdown-filter cax-inputtext cax-component\"\r\n [ngClass]=\"{ 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\r\n [attr.placeholder]=\"filterPlaceholder\"\r\n [attr.aria-owns]=\"id + '_list'\"\r\n (input)=\"onFilterInputChange($event)\"\r\n [attr.aria-label]=\"ariaFilterLabel\"\r\n [attr.aria-activedescendant]=\"focusedOptionId\"\r\n (keydown)=\"onFilterKeyDown($event)\"\r\n (blur)=\"onFilterBlur($event)\"\r\n />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-dropdown-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-dropdown-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n <i *ngIf=\"_filterValue()\" class=\"cax cax-close-circle cax-dropdown-filter-clear-icon\" (click)=\"resetFilter()\"></i>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"cax-dropdown-items-wrapper\"\r\n [ngStyle]=\"{\r\n 'max-height': virtualScroll ? 'auto' : scrollHeight || 'auto'\r\n }\"\r\n tabindex=\"0\"\r\n >\r\n <cax-scroller\r\n *ngIf=\"virtualScroll\"\r\n #scroller\r\n [items]=\"visibleOptions()\"\r\n [style]=\"{ height: scrollHeight }\"\r\n [itemSize]=\"virtualScrollItemSize || _itemSize\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: visibleOptions(), options: {} }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInItems let-items let-scrollerOptions=\"options\">\r\n <ul #items [attr.id]=\"id + '_list'\" [attr.aria-label]=\"listLabel\" class=\"cax-dropdown-items\" [ngClass]=\"scrollerOptions.contentStyleClass\" [ngStyle]=\"scrollerOptions.contentStyle\" role=\"listbox\">\r\n <ng-template ngFor let-option [ngForOf]=\"items\" let-i=\"index\">\r\n <ng-container *ngIf=\"isOptionGroup(option)\">\r\n <li class=\"cax-dropdown-item-group\" [attr.id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <span *ngIf=\"!groupTemplate\">{{ getOptionGroupLabel(option.optionGroup) }}</span>\r\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: option.optionGroup }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isOptionGroup(option)\">\r\n <cax-dropdownItem\r\n [id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\"\r\n [option]=\"option\"\r\n [checkmark]=\"checkmark\"\r\n [selected]=\"isSelected(option)\"\r\n [label]=\"getOptionLabel(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [template]=\"itemTemplate\"\r\n [focused]=\"focusedOptionIndex() === getOptionIndex(i, scrollerOptions)\"\r\n [ariaPosInset]=\"getAriaPosInset(getOptionIndex(i, scrollerOptions))\"\r\n [ariaSetSize]=\"ariaSetSize\"\r\n (onClick)=\"onOptionSelect($event, option)\"\r\n (onMouseEnter)=\"onOptionMouseEnter($event, getOptionIndex(i, scrollerOptions))\"\r\n ></cax-dropdownItem>\r\n </ng-container>\r\n </ng-template>\r\n <li *ngIf=\"filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\"> {{ emptyFilterMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\r\n </li>\r\n <li *ngIf=\"!filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyTemplate; else empty\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n <span\r\n #lastHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onLastHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n ></span>\r\n </div>\r\n </ng-template>\r\n </cax-overlay>\r\n</div>\r\n", styles: ["@layer cax{.cax-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none;width:100%;height:40px}.cax-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-dropdown-main-label{font-weight:500;font-size:14px;line-height:20px;margin-bottom:8px}.cax-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.cax-dropdown-trigger-icon{transition:transform .3s ease}.cax-dropdown-open .cax-dropdown-trigger-icon{transform:rotate(180deg)}.cax-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.cax-dropdown-label-empty{overflow:hidden;opacity:0}input.cax-dropdown-label{cursor:default}.cax-dropdown-items-wrapper{overflow:auto}.cax-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden;font-weight:500}.cax-dropdown-item-group{cursor:auto}.cax-dropdown-items{margin:0;padding:0;list-style-type:none}.cax-fluid .cax-dropdown{display:flex}.cax-fluid .cax-dropdown .cax-dropdown-label{width:1%}.cax-float-label .cax-dropdown .cax-placeholder{opacity:0}}\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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "component", type: i3.Overlay, selector: "cax-overlay", inputs: ["visible", "mode", "style", "styleClass", "contentStyle", "contentStyleClass", "target", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "listener", "responsive", "options"], outputs: ["visibleChange", "onBeforeShow", "onShow", "onBeforeHide", "onHide", "onAnimationStart", "onAnimationDone"] }, { kind: "directive", type: i1.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.Tooltip, selector: "[caxTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "caxTooltip", "tooltipDisabled", "tooltipOptions", "linkUrl", "linkText"] }, { kind: "ngmodule", type: RippleModule }, { kind: "ngmodule", type: ScrollerModule }, { kind: "component", type: i5.Scroller, selector: "cax-scroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "ngmodule", type: AutoFocusModule }, { kind: "directive", type: i6.AutoFocus, selector: "[caxAutoFocus]", inputs: ["autofocus"] }, { kind: "component", type: TimesIcon, selector: "TimesIcon" }, { kind: "component", type: SearchIcon, selector: "SearchIcon" }, { kind: "component", type: DropdownItem, selector: "cax-dropdownItem", inputs: ["id", "option", "selected", "focused", "label", "disabled", "visible", "itemSize", "ariaPosInset", "ariaSetSize", "template", "checkmark"], outputs: ["onClick", "onMouseEnter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1459
1459
|
}
|
|
1460
1460
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Dropdown, decorators: [{
|
|
1461
1461
|
type: Component,
|
|
@@ -1463,7 +1463,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
1463
1463
|
class: 'cax-element cax-inputwrapper',
|
|
1464
1464
|
'[class.cax-inputwrapper-filled]': 'filled()',
|
|
1465
1465
|
'[class.cax-inputwrapper-focus]': 'focused || overlayVisible'
|
|
1466
|
-
}, providers: [DROPDOWN_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"{'cax-dropdown-main-label': labelText}\">\r\n <label *ngIf=\"labelText\" [ngClass]=\"labelTextClass\">{{ labelText }}</label>\r\n</div>\r\n<div #container [attr.id]=\"id\" [ngClass]=\"containerClass\" (click)=\"onContainerClick($event)\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <span\r\n #focusInput\r\n [ngClass]=\"inputClass\"\r\n *ngIf=\"!editable\"\r\n [caxTooltip]=\"tooltip\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [positionStyle]=\"tooltipPositionStyle\"\r\n [tooltipStyleClass]=\"tooltipStyleClass\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.id]=\"inputId\"\r\n role=\"combobox\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [attr.aria-controls]=\"overlayVisible ? id + '_list' : null\"\r\n [attr.tabindex]=\"!disabled ? tabindex : -1\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-required]=\"required\"\r\n [attr.required]=\"required\"\r\n >\r\n <ng-container *ngIf=\"!selectedItemTemplate; else defaultPlaceholder\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</ng-container>\r\n <ng-container *ngIf=\"selectedItemTemplate && !isSelectedOptionEmpty()\" [ngTemplateOutlet]=\"selectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: selectedOption }\"></ng-container>\r\n <ng-template #defaultPlaceholder>\r\n <span *ngIf=\"isSelectedOptionEmpty()\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</span>\r\n </ng-template>\r\n </span>\r\n <input\r\n *ngIf=\"editable\"\r\n #editableInput\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxlength\"\r\n [ngClass]=\"inputClass\"\r\n [disabled]=\"disabled\"\r\n aria-haspopup=\"listbox\"\r\n [attr.placeholder]=\"modelValue() === undefined || modelValue() === null ? placeholder() : undefined\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n (input)=\"onEditableInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n />\r\n <ng-container *ngIf=\"isVisibleClearIcon\">\r\n <TimesIcon [styleClass]=\"'cax-dropdown-clear-icon'\" (click)=\"clear($event)\" *ngIf=\"!clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\" />\r\n <span class=\"cax-dropdown-clear-icon\" (click)=\"clear($event)\" *ngIf=\"clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\">\r\n <ng-template *ngTemplateOutlet=\"clearIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n\r\n <div class=\"cax-dropdown-trigger\" role=\"button\" aria-label=\"dropdown trigger\" (mousedown)=\"onMouseDown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible ?? false\" [attr.data-pc-section]=\"'trigger'\">\r\n <ng-container *ngIf=\"loading; else elseBlock\">\r\n <ng-container *ngIf=\"loadingIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingIconTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loadingIconTemplate\">\r\n <span *ngIf=\"loadingIcon\" [ngClass]=\"'cax-dropdown-trigger-icon pi-spin ' + loadingIcon\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"!loadingIcon\" [class]=\"'cax-dropdown-trigger-icon pi pi-spinner pi-spin'\" aria-hidden=\"true\"></span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #elseBlock>\r\n <ng-container *ngIf=\"!dropdownIconTemplate\">\r\n <span class=\"cax-dropdown-trigger-icon\" *ngIf=\"dropdownIcon\" [ngClass]=\"dropdownIcon\"></span>\r\n <!-- <ChevronDownIcon *ngIf=\"!dropdownIcon\" [styleClass]=\"'cax-dropdown-trigger-icon'\" /> -->\r\n <i *ngIf=\"!dropdownIcon\" class=\"cax cax-alt-arrow-down\"></i>\r\n </ng-container>\r\n <span *ngIf=\"dropdownIconTemplate\" class=\"cax-dropdown-trigger-icon\">\r\n <ng-template *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-template>\r\n </span>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-overlay\r\n #overlay\r\n [(visible)]=\"overlayVisible\"\r\n [options]=\"overlayOptions\"\r\n [target]=\"'@parent'\"\r\n [appendTo]=\"appendTo\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\"\r\n (onAnimationStart)=\"onOverlayAnimationStart($event)\"\r\n (onHide)=\"hide()\"\r\n >\r\n <ng-template caxTemplate=\"content\">\r\n <div [ngClass]=\"'cax-dropdown-panel cax-component'\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\">\r\n <span\r\n #firstHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onFirstHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n >\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-dropdown-header\" *ngIf=\"filter\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"filterTemplate; else builtInFilterElement\">\r\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: { options: filterOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-template #builtInFilterElement>\r\n <div class=\"cax-dropdown-filter-container\">\r\n <input\r\n #filter\r\n type=\"text\"\r\n role=\"searchbox\"\r\n autocomplete=\"off\"\r\n [attr.placeholder]=\"filterPlaceholder || 'Search...'\"\r\n [value]=\"_filterValue() || ''\"\r\n class=\"cax-dropdown-filter cax-inputtext cax-component\"\r\n [ngClass]=\"{ 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\r\n [attr.placeholder]=\"filterPlaceholder\"\r\n [attr.aria-owns]=\"id + '_list'\"\r\n (input)=\"onFilterInputChange($event)\"\r\n [attr.aria-label]=\"ariaFilterLabel\"\r\n [attr.aria-activedescendant]=\"focusedOptionId\"\r\n (keydown)=\"onFilterKeyDown($event)\"\r\n (blur)=\"onFilterBlur($event)\"\r\n />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-dropdown-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-dropdown-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n <i *ngIf=\"_filterValue()\" class=\"cax cax-close-circle cax-dropdown-filter-clear-icon\" (click)=\"resetFilter()\"></i>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"cax-dropdown-items-wrapper\"\r\n [ngStyle]=\"{\r\n 'max-height': virtualScroll ? 'auto' : scrollHeight || 'auto'\r\n }\"\r\n tabindex=\"0\"\r\n >\r\n <cax-scroller\r\n *ngIf=\"virtualScroll\"\r\n #scroller\r\n [items]=\"visibleOptions()\"\r\n [style]=\"{ height: scrollHeight }\"\r\n [itemSize]=\"virtualScrollItemSize || _itemSize\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: visibleOptions(), options: {} }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInItems let-items let-scrollerOptions=\"options\">\r\n <ul #items [attr.id]=\"id + '_list'\" [attr.aria-label]=\"listLabel\" class=\"cax-dropdown-items\" [ngClass]=\"scrollerOptions.contentStyleClass\" [ngStyle]=\"scrollerOptions.contentStyle\" role=\"listbox\">\r\n <ng-template ngFor let-option [ngForOf]=\"items\" let-i=\"index\">\r\n <ng-container *ngIf=\"isOptionGroup(option)\">\r\n <li class=\"cax-dropdown-item-group\" [attr.id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <span *ngIf=\"!groupTemplate\">{{ getOptionGroupLabel(option.optionGroup) }}</span>\r\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: option.optionGroup }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isOptionGroup(option)\">\r\n <cax-dropdownItem\r\n [id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\"\r\n [option]=\"option\"\r\n [checkmark]=\"checkmark\"\r\n [selected]=\"isSelected(option)\"\r\n [label]=\"getOptionLabel(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [template]=\"itemTemplate\"\r\n [focused]=\"focusedOptionIndex() === getOptionIndex(i, scrollerOptions)\"\r\n [ariaPosInset]=\"getAriaPosInset(getOptionIndex(i, scrollerOptions))\"\r\n [ariaSetSize]=\"ariaSetSize\"\r\n (onClick)=\"onOptionSelect($event, option)\"\r\n (onMouseEnter)=\"onOptionMouseEnter($event, getOptionIndex(i, scrollerOptions))\"\r\n ></cax-dropdownItem>\r\n </ng-container>\r\n </ng-template>\r\n <li *ngIf=\"filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\"> {{ emptyFilterMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\r\n </li>\r\n <li *ngIf=\"!filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyTemplate; else empty\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n <span\r\n #lastHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onLastHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n ></span>\r\n </div>\r\n </ng-template>\r\n </cax-overlay>\r\n</div>\r\n", styles: ["@layer cax{.cax-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none;width:100%;height:40px}.cax-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-dropdown-main-label{font-weight:500;font-size:14px;line-height:20px;margin-bottom:8px}.cax-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.cax-dropdown-trigger-icon{transition:transform .3s ease}.cax-dropdown-open .cax-dropdown-trigger-icon{transform:rotate(180deg)}.cax-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.cax-dropdown-label-empty{overflow:hidden;opacity:0}input.cax-dropdown-label{cursor:default}.cax-dropdown-items-wrapper{overflow:auto}.cax-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden;font-weight:500}.cax-dropdown-item-group{cursor:auto}.cax-dropdown-items{margin:0;padding:0;list-style-type:none}.cax-fluid .cax-dropdown{display:flex}.cax-fluid .cax-dropdown .cax-dropdown-label{width:1%}.cax-float-label .cax-dropdown .cax-placeholder{opacity:0}}\n"] }]
|
|
1466
|
+
}, providers: [DROPDOWN_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"{'cax-dropdown-main-label': labelText}\">\r\n <label *ngIf=\"labelText\" [ngClass]=\"labelTextClass\">{{ labelText }}</label>\r\n</div>\r\n<div #container [attr.id]=\"id\" [ngClass]=\"containerClass\" (click)=\"onContainerClick($event)\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <span\r\n #focusInput\r\n [ngClass]=\"inputClass\"\r\n *ngIf=\"!editable\"\r\n [caxTooltip]=\"tooltip\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [positionStyle]=\"tooltipPositionStyle\"\r\n [tooltipStyleClass]=\"tooltipStyleClass\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.id]=\"inputId\"\r\n role=\"combobox\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [attr.aria-controls]=\"overlayVisible ? id + '_list' : null\"\r\n [attr.tabindex]=\"!disabled ? tabindex : -1\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-required]=\"required\"\r\n [attr.required]=\"required\"\r\n >\r\n <ng-container *ngIf=\"!selectedItemTemplate; else defaultPlaceholder\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</ng-container>\r\n <ng-container *ngIf=\"selectedItemTemplate && !isSelectedOptionEmpty()\" [ngTemplateOutlet]=\"selectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: selectedOption }\"></ng-container>\r\n <ng-template #defaultPlaceholder>\r\n <span *ngIf=\"isSelectedOptionEmpty()\">{{ label() === 'cax-emptylabel' ? ' ' : label() }}</span>\r\n </ng-template>\r\n </span>\r\n <input\r\n *ngIf=\"editable\"\r\n #editableInput\r\n type=\"text\"\r\n [attr.id]=\"inputId\"\r\n [attr.maxlength]=\"maxlength\"\r\n [ngClass]=\"inputClass\"\r\n [disabled]=\"disabled\"\r\n aria-haspopup=\"listbox\"\r\n [attr.placeholder]=\"modelValue() === undefined || modelValue() === null ? placeholder() : undefined\"\r\n [attr.aria-label]=\"ariaLabel || (label() === 'cax-emptylabel' ? undefined : label())\"\r\n (input)=\"onEditableInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n caxAutoFocus\r\n [autofocus]=\"autofocus\"\r\n [attr.aria-activedescendant]=\"focused ? focusedOptionId : undefined\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n />\r\n <ng-container *ngIf=\"isVisibleClearIcon\">\r\n <TimesIcon [styleClass]=\"'cax-dropdown-clear-icon'\" (click)=\"clear($event)\" *ngIf=\"!clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\" />\r\n <span class=\"cax-dropdown-clear-icon\" (click)=\"clear($event)\" *ngIf=\"clearIconTemplate\" [attr.data-pc-section]=\"'clearicon'\">\r\n <ng-template *ngTemplateOutlet=\"clearIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n\r\n <div class=\"cax-dropdown-trigger\" role=\"button\" aria-label=\"dropdown trigger\" (mousedown)=\"onMouseDown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible ?? false\" [attr.data-pc-section]=\"'trigger'\">\r\n <ng-container *ngIf=\"loading; else elseBlock\">\r\n <ng-container *ngIf=\"loadingIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingIconTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loadingIconTemplate\">\r\n <span *ngIf=\"loadingIcon\" [ngClass]=\"'cax-dropdown-trigger-icon pi-spin ' + loadingIcon\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"!loadingIcon\" [class]=\"'cax-dropdown-trigger-icon pi pi-spinner pi-spin'\" aria-hidden=\"true\"></span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #elseBlock>\r\n <ng-container *ngIf=\"!dropdownIconTemplate\">\r\n <span class=\"cax-dropdown-trigger-icon\" *ngIf=\"dropdownIcon\" [ngClass]=\"dropdownIcon\"></span>\r\n <!-- <ChevronDownIcon *ngIf=\"!dropdownIcon\" [styleClass]=\"'cax-dropdown-trigger-icon'\" /> -->\r\n <i *ngIf=\"!dropdownIcon && !overlayVisible\" class=\"cax cax-alt-arrow-down\"></i>\r\n <i *ngIf=\"!dropdownIcon && overlayVisible\" class=\"cax cax-alt-arrow-up\"></i>\r\n </ng-container>\r\n <span *ngIf=\"dropdownIconTemplate\" class=\"cax-dropdown-trigger-icon\">\r\n <ng-template *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-template>\r\n </span>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-overlay\r\n #overlay\r\n [(visible)]=\"overlayVisible\"\r\n [options]=\"overlayOptions\"\r\n [target]=\"'@parent'\"\r\n [appendTo]=\"appendTo\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\"\r\n (onAnimationStart)=\"onOverlayAnimationStart($event)\"\r\n (onHide)=\"hide()\"\r\n >\r\n <ng-template caxTemplate=\"content\">\r\n <div [ngClass]=\"'cax-dropdown-panel cax-component'\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\">\r\n <span\r\n #firstHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onFirstHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n >\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-dropdown-header\" *ngIf=\"filter\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"filterTemplate; else builtInFilterElement\">\r\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: { options: filterOptions }\"></ng-container>\r\n </ng-container>\r\n <ng-template #builtInFilterElement>\r\n <div class=\"cax-dropdown-filter-container\">\r\n <input\r\n #filter\r\n type=\"text\"\r\n role=\"searchbox\"\r\n autocomplete=\"off\"\r\n [attr.placeholder]=\"filterPlaceholder || 'Search...'\"\r\n [value]=\"_filterValue() || ''\"\r\n class=\"cax-dropdown-filter cax-inputtext cax-component\"\r\n [ngClass]=\"{ 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\r\n [attr.placeholder]=\"filterPlaceholder\"\r\n [attr.aria-owns]=\"id + '_list'\"\r\n (input)=\"onFilterInputChange($event)\"\r\n [attr.aria-label]=\"ariaFilterLabel\"\r\n [attr.aria-activedescendant]=\"focusedOptionId\"\r\n (keydown)=\"onFilterKeyDown($event)\"\r\n (blur)=\"onFilterBlur($event)\"\r\n />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-dropdown-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-dropdown-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n <i *ngIf=\"_filterValue()\" class=\"cax cax-close-circle cax-dropdown-filter-clear-icon\" (click)=\"resetFilter()\"></i>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"cax-dropdown-items-wrapper\"\r\n [ngStyle]=\"{\r\n 'max-height': virtualScroll ? 'auto' : scrollHeight || 'auto'\r\n }\"\r\n tabindex=\"0\"\r\n >\r\n <cax-scroller\r\n *ngIf=\"virtualScroll\"\r\n #scroller\r\n [items]=\"visibleOptions()\"\r\n [style]=\"{ height: scrollHeight }\"\r\n [itemSize]=\"virtualScrollItemSize || _itemSize\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInItems; context: { $implicit: visibleOptions(), options: {} }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInItems let-items let-scrollerOptions=\"options\">\r\n <ul #items [attr.id]=\"id + '_list'\" [attr.aria-label]=\"listLabel\" class=\"cax-dropdown-items\" [ngClass]=\"scrollerOptions.contentStyleClass\" [ngStyle]=\"scrollerOptions.contentStyle\" role=\"listbox\">\r\n <ng-template ngFor let-option [ngForOf]=\"items\" let-i=\"index\">\r\n <ng-container *ngIf=\"isOptionGroup(option)\">\r\n <li class=\"cax-dropdown-item-group\" [attr.id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <span *ngIf=\"!groupTemplate\">{{ getOptionGroupLabel(option.optionGroup) }}</span>\r\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: option.optionGroup }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isOptionGroup(option)\">\r\n <cax-dropdownItem\r\n [id]=\"id + '_' + getOptionIndex(i, scrollerOptions)\"\r\n [option]=\"option\"\r\n [checkmark]=\"checkmark\"\r\n [selected]=\"isSelected(option)\"\r\n [label]=\"getOptionLabel(option)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [template]=\"itemTemplate\"\r\n [focused]=\"focusedOptionIndex() === getOptionIndex(i, scrollerOptions)\"\r\n [ariaPosInset]=\"getAriaPosInset(getOptionIndex(i, scrollerOptions))\"\r\n [ariaSetSize]=\"ariaSetSize\"\r\n (onClick)=\"onOptionSelect($event, option)\"\r\n (onMouseEnter)=\"onOptionMouseEnter($event, getOptionIndex(i, scrollerOptions))\"\r\n ></cax-dropdownItem>\r\n </ng-container>\r\n </ng-template>\r\n <li *ngIf=\"filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\"> {{ emptyFilterMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\r\n </li>\r\n <li *ngIf=\"!filterValue && isEmpty()\" class=\"cax-dropdown-empty-message\" [ngStyle]=\"{ height: scrollerOptions.itemSize + 'px' }\" role=\"option\">\r\n <ng-container *ngIf=\"!emptyTemplate; else empty\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n <span\r\n #lastHiddenFocusableEl\r\n role=\"presentation\"\r\n class=\"cax-hidden-accessible cax-hidden-focusable\"\r\n [attr.tabindex]=\"0\"\r\n (focus)=\"onLastHiddenFocus($event)\"\r\n [attr.data-cax-hidden-accessible]=\"true\"\r\n [attr.data-cax-hidden-focusable]=\"true\"\r\n ></span>\r\n </div>\r\n </ng-template>\r\n </cax-overlay>\r\n</div>\r\n", styles: ["@layer cax{.cax-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;user-select:none;width:100%;height:40px}.cax-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-dropdown-main-label{font-weight:500;font-size:14px;line-height:20px;margin-bottom:8px}.cax-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.cax-dropdown-trigger-icon{transition:transform .3s ease}.cax-dropdown-open .cax-dropdown-trigger-icon{transform:rotate(180deg)}.cax-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.cax-dropdown-label-empty{overflow:hidden;opacity:0}input.cax-dropdown-label{cursor:default}.cax-dropdown-items-wrapper{overflow:auto}.cax-dropdown-item{cursor:pointer;font-weight:400;white-space:nowrap;position:relative;overflow:hidden;font-weight:500}.cax-dropdown-item-group{cursor:auto}.cax-dropdown-items{margin:0;padding:0;list-style-type:none}.cax-fluid .cax-dropdown{display:flex}.cax-fluid .cax-dropdown .cax-dropdown-label{width:1%}.cax-float-label .cax-dropdown .cax-placeholder{opacity:0}}\n"] }]
|
|
1467
1467
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.FilterService }, { type: i1.caxConfig }], propDecorators: { id: [{
|
|
1468
1468
|
type: Input
|
|
1469
1469
|
}], scrollHeight: [{
|