mis-crystal-design-system 18.1.10 → 18.1.12
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.
|
@@ -391,36 +391,51 @@ export class FilterPanelComponent {
|
|
|
391
391
|
this.filterForm.markAllAsTouched();
|
|
392
392
|
return;
|
|
393
393
|
}
|
|
394
|
+
// Create a copy of the form value
|
|
394
395
|
const snapshot = { ...this.filterForm.value };
|
|
395
|
-
|
|
396
|
+
// OPTIONAL: Map objects back to values for the Output emission
|
|
397
|
+
// so the parent receives clean data (['LOGIN'] instead of [{label:..., value: 'LOGIN'}])
|
|
398
|
+
const cleanSnapshot = this.mapValuesForEmission(snapshot);
|
|
399
|
+
this.lastAppliedData.set(snapshot); // Keep objects for UI state
|
|
396
400
|
this.onApply.emit({
|
|
397
|
-
filterData:
|
|
401
|
+
filterData: cleanSnapshot, // Emit values
|
|
398
402
|
filterCount: this.filterCount()
|
|
399
403
|
});
|
|
400
|
-
// consistent behavior with earlier implementation:
|
|
401
|
-
// hide panel (parent should read show() to close) and restore form state via closePanel
|
|
402
|
-
// Note: we don't mutate show() here; parent owns show signal
|
|
403
404
|
this.closePanel();
|
|
404
405
|
}
|
|
406
|
+
// Helper to clean up data before emitting
|
|
407
|
+
mapValuesForEmission(formValue) {
|
|
408
|
+
const cleanData = { ...formValue };
|
|
409
|
+
const cfg = this.config();
|
|
410
|
+
cfg.forEach(filter => {
|
|
411
|
+
const value = cleanData[filter.key];
|
|
412
|
+
if (filter.type === 'multiSelect' && Array.isArray(value)) {
|
|
413
|
+
cleanData[filter.key] = value;
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
return cleanData;
|
|
417
|
+
}
|
|
405
418
|
resetFilters() {
|
|
406
419
|
this.clearFormValues();
|
|
407
420
|
// call applyFilters to maintain previous behavior (validation + emit)
|
|
408
421
|
this.applyFilters();
|
|
409
422
|
}
|
|
410
423
|
/* --- Value setters --- */
|
|
424
|
+
// filter-panel.component.ts
|
|
411
425
|
handleSelect(event, filterKey, filter) {
|
|
412
426
|
const ctrl = this.getControl(filterKey);
|
|
413
|
-
//
|
|
427
|
+
// FIX: Do not strip the value here. Store the full object so the UI
|
|
428
|
+
// can match it against the data list when re-rendering.
|
|
414
429
|
let valueToSet = event;
|
|
430
|
+
/* // COMMENTED OUT OR REMOVED THIS BLOCK
|
|
415
431
|
if (filter.type === 'multiSelect' && Array.isArray(event)) {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
}
|
|
432
|
+
if (event.length > 0 && typeof event[0] === 'object' && 'value' in event[0]) {
|
|
433
|
+
valueToSet = event.map((item: any) => item.value || item);
|
|
434
|
+
}
|
|
420
435
|
}
|
|
436
|
+
*/
|
|
421
437
|
ctrl?.setValue(valueToSet);
|
|
422
438
|
if (filter.onChange) {
|
|
423
|
-
// keep same callback contract: pass event, config and form snapshot
|
|
424
439
|
filter.onChange(event, this.config(), this.filterForm.value);
|
|
425
440
|
}
|
|
426
441
|
}
|
|
@@ -500,4 +515,4 @@ export class FilterPanelComponent {
|
|
|
500
515
|
args: [{ selector: 'mis-filter-panel', animations: [slideFromRight], template: "<div class=\"filter-panel-container\" *ngIf=\"show()\" @slideFromRight>\n <div class=\"panel-header\">\n <span>Filters</span>\n <svg class=\"close-icon\" (click)=\"closePanel()\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"ic-navigation-cancel-24\">\n <path id=\"Union\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.60468 6.64355C8.09036 6.12923 7.25649 6.12923 6.74218 6.64355C6.22787 7.15786 6.22787 7.99173 6.74218 8.50604L10.4938 12.2576L6.7431 16.0083C6.22879 16.5226 6.22879 17.3564 6.7431 17.8708C7.25742 18.3851 8.09129 18.3851 8.60560 17.8708L12.3562 14.1201L16.1068 17.8707C16.6211 18.3850 17.4550 18.3850 17.9693 17.8707C18.4836 17.3564 18.4836 16.5225 17.9693 16.0082L14.2187 12.2576L17.9702 8.50613C18.4845 7.99181 18.4845 7.15794 17.9702 6.64363C17.4559 6.12932 16.6220 6.12932 16.1077 6.64363L12.3562 10.3951L8.60468 6.64355Z\" fill=\"#181F33\" />\n </g>\n </svg>\n </div>\n \n <div class=\"horizontal-divider first\"></div>\n \n <div class=\"filters\" [formGroup]=\"filterForm\">\n <ng-container *ngFor=\"let filter of config(); let last = last\">\n <div class=\"filter\" *ngIf=\"!filter.hidden\">\n <span class=\"filter-title\">{{filter.title}}</span>\n <ng-container *ngIf=\"filter.type === 'multiSelect'\">\n <div class=\"multiselect-filter\">\n <mis-multi-select-dropdown class=\"no-padding\" [label]=\"filter.placeholder || 'Select'\" [selectedItems]=\"filterForm.get(filter.key)?.value || []\" (onChange)=\"handleSelect($event, filter.key, filter)\" [data]=\"filter.options\" [searchEnabled]=\"true\"\n [showSelectedCount]=\"true\" [enableSelectAll]=\"true\"\n [hideApplyButton]=\"false\" width=\"100%\" height=\"44px\"></mis-multi-select-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'select'\">\n <div class=\"multiselect-filter\">\n <mis-dropdown [data]=\"filter.options\" [searchEnabled]=\"true\" width=\"100%\" height=\"44px\"\n (onChange)=\"handleSelect($event, filter.key, filter)\" [selectedItem]=\"filterForm.get(filter.key)?.value\">\n </mis-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'checkbox'\">\n <div class=\"checkbox-row\">\n <div *ngFor=\"let option of filter.options\" class=\"checkbox-container\">\n <mis-checkbox [type]=\"'Default'\" [checked]=\"filterForm.get(filter.key)?.value?.includes(option.value)\" (valueChange)=\"handleCheckbox($event, filter.key, option.value, filter)\"></mis-checkbox>\n <span class=\"checkbox-label\">{{option.label}}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'datePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDp misInput type=\"text\" readonly class=\"mis-input\" [dpConfig]=\"filter.datePickerConfig\" [placeholder]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" [value]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" (dateChange)=\"onDateChange($event, filter.key, filter)\" [selectedDate]=\"filterForm.get(filter.key)?.value\" [positionX]=\"'end'\" [offsetX]=\"-10\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'dateRangePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDrp misInput type=\"text\" class=\"mis-input\" readonly\n [placeholder]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\"\n [value]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\" [positionX]=\"'start'\"\n [positionY]=\"'top'\" [selectedDates]=\"dateRangeSelectedDates()\" (dateChange)=\"onDateChange($event, filter.key, filter)\"\n [dpConfig]=\"filter.dateRangePickerConfig\" />\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'text'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"text\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'number'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"number\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'range'\">\n <div class=\"range-container\" [formGroup]=\"filterForm.get(filter.key)\">\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[0]?.label || 'Min' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"min\"\n />\n </div>\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[1]?.label || 'Max' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"max\"\n [min]=\"filterForm.get(filter.key)?.get('min')?.value || 0\"\n />\n </div>\n </div>\n </ng-container>\n <div class=\"horizontal-divider\" *ngIf=\"!last\"></div>\n </div>\n </ng-container>\n </div>\n \n <div class=\"actions\">\n <mis-button [name]=\"'Clear All'\" [size]=\"'Small'\" [type]=\"'Text'\" (click)=\"resetFilters()\"></mis-button>\n <mis-button [name]=\"'Apply'\" [size]=\"'Small'\" [type]=\"'Solid'\" (click)=\"applyFilters()\" [disabled]=\"filterForm.invalid\"></mis-button>\n </div>\n </div>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.filter-panel-container{display:flex;flex-direction:column;height:100%;max-width:100%;min-width:20rem;position:absolute;right:0;background:var(--bg-primary, #FFFFFF);top:0;z-index:999;box-shadow:0 0 5px #000000a6;transition:all .3s ease}.filter-panel-container .panel-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;font-weight:700;margin:0 1rem;flex-basis:5%}.filter-panel-container .panel-header span{font-size:1.25rem}.filter-panel-container .panel-header .close-icon{cursor:pointer;border-radius:50%;transform:scale(1.4);padding:.3rem;transition:all .3s ease}.filter-panel-container .panel-header .close-icon:hover{background:var(--bg-tertiary, #F5F5F5)}.filter-panel-container .panel-header .close-icon:active{background:var(--border-primary, #E0E0E0)}.filter-panel-container .mat-divider.horizontal{margin:1rem}.filters{display:flex;flex-direction:column;flex:1;row-gap:.5rem;overflow:auto;padding:0 1rem}.filters .filter{display:flex;flex-direction:column}.filters .filter .filter-title{color:var(--text-secondary, #6A737D);font-size:.875rem;font-weight:700;line-height:20px;letter-spacing:.25px}.filters .filter .checkbox-row{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:.8rem 0}.filters .filter .checkbox-row .checkbox-container{display:flex;flex-direction:row;align-items:center;gap:.5rem}.filters .filter .checkbox-row .checkbox-label{display:block;width:8rem}.filters .filter .checkbox-row ::ng-deep .mat-checkbox-inner-container{width:20px;height:20px}.filters .filter .checkbox-row ::ng-deep .mat-checkbox-frame{border-radius:5px}.filters .filter .multiselect-filter,.filters .filter mis-input{padding:.7rem 0}.horizontal-divider{display:block;width:100%;height:1px;margin:.5rem 0;background:var(--border-primary, #E0E0E0)}.first{margin-top:0}.actions{display:flex;flex-direction:row;justify-content:end;align-items:center;gap:1rem;border-top:1px solid var(--border-primary, #E0E0E0);flex-basis:4%;padding:.5rem}.actions button{font-weight:700;border-radius:.5rem;width:6rem}.no-padding ::ng-deep .container{padding:0!important}.range-container{display:flex;justify-content:space-between;padding:.8rem 0}.range-container .range-inner-container{display:flex;flex-direction:column}.range-container .range-inner-container input{height:2.2rem;outline:none;border-radius:.375rem;border:1px solid var(--border-primary, #E0E0E0);width:8rem;padding:0 .5rem}.range-container .range-inner-container span{margin-bottom:.2rem}input.ng-invalid.ng-touched{border:1px solid var(--brand-error, #B00020);background-color:var(--brand-error-lightest, #FDF2F2)}\n"] }]
|
|
501
516
|
}], () => [{ type: i1.HasValuePipe }], null); })();
|
|
502
517
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FilterPanelComponent, { className: "FilterPanelComponent" }); })();
|
|
503
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBa0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ0c5Qyw2QkFBb0Q7SUFFNUMsQUFESiwrQkFBZ0Msb0NBRzZCO0lBRndGLHFTQUFZLHFEQUF3QyxLQUFDO0lBRzFNLEFBRDZELGlCQUE0QixFQUNuRjs7Ozs7O0lBSDRDLGVBQXdDO0lBRWxGLEFBRDJCLEFBQTNCLEFBRDJOLEFBQXhCLEFBQWhILEFBQXpDLHlEQUF3QyxrSUFBMEQsMkJBQThFLHVCQUF1QiwyQkFDdk4seUJBQXlCLDBCQUMxQjs7OztJQUdyQyw2QkFBK0M7SUFFdkMsQUFESiwrQkFBZ0MsdUJBRXFGO0lBQXpHLHdSQUFZLHFEQUF3QyxLQUFDO0lBRWpFLEFBREksaUJBQWUsRUFDYjs7Ozs7O0lBSFksZUFBdUI7SUFDeUIsQUFEeEIsQUFBeEIsd0NBQXVCLHVCQUF1QixpR0FDb0Q7Ozs7SUFPNUcsQUFESiwrQkFBc0UsdUJBQzhHO0lBQXpFLGdVQUFlLHdFQUF3RCxLQUFDO0lBQUMsaUJBQWU7SUFDL0wsZ0NBQTZCO0lBQUEsWUFBZ0I7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Q0FBQztRQUV4QixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNwQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDO1lBQzNELDJDQUEyQztZQUMzQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQzthQUFNLENBQUM7WUFDTix5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO3FIQXhUVSxvQkFBb0I7b0VBQXBCLG9CQUFvQjtZQ3hEakMsdUVBQW1FOztZQUE5QixpQ0FBWTsrMVBEc0RuQyxDQUFDLGNBQWMsQ0FBQzs7aUZBRWpCLG9CQUFvQjtjQU5oQyxTQUFTOzJCQUNFLGtCQUFrQixjQUdoQixDQUFDLGNBQWMsQ0FBQzs7a0ZBRWpCLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgV3JpdGFibGVTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzbGlkZUZyb21SaWdodCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvc2xpZGVGcm9tUmlnaHQnO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgfSBmcm9tICdtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2RhdGVwaWNrZXJfdjInO1xuaW1wb3J0IHsgSVJTZWxlY3RlZERhdGVzQ29uZmlnIH0gZnJvbSAnbWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9zcGVjaWZpY2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgYXMgSURhdGVSYW5nZVBpY2tlckNvbmZpZyB9IGZyb20gJ21pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZGF0ZXJhbmdlcGlja2VyX3YyJztcbmltcG9ydCB7IEhhc1ZhbHVlUGlwZSB9IGZyb20gJy4uL2hhcy12YWx1ZS5waXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXRhPzogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlclR5cGUgPVxuICB8ICdtdWx0aVNlbGVjdCdcbiAgfCAnc2VsZWN0J1xuICB8ICdkYXRlUGlja2VyJ1xuICB8ICdkYXRlUmFuZ2VQaWNrZXInXG4gIHwgJ2NoZWNrYm94J1xuICB8ICdyYWRpbydcbiAgfCAndGV4dCdcbiAgfCAnbnVtYmVyJ1xuICB8ICdyYW5nZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUGFuZWxDb25maWcge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogRmlsdGVyVHlwZTtcbiAgb3B0aW9ucz86IEZpbHRlck9wdGlvbltdO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGF0ZVBpY2tlckNvbmZpZz86IElEYXRlUGlja2VyQ29uZmlnO1xuICBkYXRlUmFuZ2VQaWNrZXJDb25maWc/OiBJRGF0ZVJhbmdlUGlja2VyQ29uZmlnO1xuICBvbkNoYW5nZT86IChldmVudDogYW55LCBjb25maWc/OiBGaWx0ZXJQYW5lbENvbmZpZ1tdLCBmb3JtVmFsdWU/OiBhbnkpID0+IHZvaWQ7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgc2VsZWN0ZWRWYWx1ZT86IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWlzLWZpbHRlci1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW3NsaWRlRnJvbVJpZ2h0XVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoYXNWYWx1ZTogSGFzVmFsdWVQaXBlKSB7XG4gICAgLy8gRWZmZWN0IHRvIHJlYWN0IHRvIGNvbmZpZyBjaGFuZ2VzIC0gbXVzdCBhbGxvdyBzaWduYWwgd3JpdGVzIHNpbmNlIHdlIHVwZGF0ZSBpbnRlcm5hbCBzaWduYWxzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGlmIChjZmcgJiYgQXJyYXkuaXNBcnJheShjZmcpICYmIGNmZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gT25seSBpbml0aWFsaXplIGZvcm0gaWYgbm90IGFscmVhZHkgZG9uZSwgb3IgaWYgY29uZmlnIHN0cnVjdHVyZSBjaGFuZ2VkXG4gICAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQgfHwgdGhpcy5oYXNDb25maWdDaGFuZ2VkKGNmZykpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1Db250cm9scyhjZmcpO1xuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWx3YXlzIGNoZWNrIGZvciBzZWxlY3RlZFZhbHVlIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnNldEZpbHRlclZhbHVlKGNmZyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmlsdGVyUGFuZWw6IEVycm9yIGluIGNvbmZpZyBlZmZlY3QnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qIC0tLSBzaWduYWwtYmFzZWQgSW5wdXRzIC8gT3V0cHV0cyAtLS0gKi9cbiAgcHVibGljIHNob3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxGaWx0ZXJQYW5lbENvbmZpZ1tdPigpO1xuICBwdWJsaWMgZW1pdEZpbHRlcnNBZnRlclNldHRpbmdOZXdWYWx1ZXMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIG9uQ2xvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcHVibGljIG9uQXBwbHkgPSBvdXRwdXQ8eyBmaWx0ZXJEYXRhOiBhbnk7IGZpbHRlckNvdW50OiBudW1iZXIgfT4oKTtcblxuICAvKiAtLS0gZm9ybSArIGludGVybmFsIHN0YXRlIC0tLSAqL1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHJpdmF0ZSBmb3JtU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIGtlZXAgYSBzaWduYWwgc25hcHNob3Qgb2YgZm9ybSB2YWx1ZSBzbyBjb21wdXRlZCBjYW4gcmVhY3RcbiAgcHJpdmF0ZSBfZm9ybVZhbHVlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHNpZ25hbCh7fSk7XG5cbiAgLy8gbGFzdCBhcHBsaWVkIHNuYXBzaG90IChzaWduYWwgc28gdGVtcGxhdGUvbG9naWMgY2FuIHJlYWQgcmVsaWFibHkpXG4gIHB1YmxpYyBsYXN0QXBwbGllZERhdGE6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICAvLyBkYXRlIHJhbmdlIHJlYWRhYmxlIGZvciB0ZW1wbGF0ZVxuICBwdWJsaWMgZGF0ZVJhbmdlU2VsZWN0ZWREYXRlczogV3JpdGFibGVTaWduYWw8SVJTZWxlY3RlZERhdGVzQ29uZmlnPiA9IHNpZ25hbCh7XG4gICAgc3RhcnREYXRlOiAnJyxcbiAgICBlbmREYXRlOiAnJ1xuICB9KTtcblxuICAvKiBjb21wdXRlZCBmaWx0ZXJDb3VudCAqL1xuICBwdWJsaWMgZmlsdGVyQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5fZm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgY2ZnID0gdGhpcy5jb25maWcoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY2ZnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZvcm1WYWx1ZVtmaWx0ZXIua2V5XTtcblxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUubWluICE9PSBudWxsIHx8IHZhbHVlLm1heCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgfHwgZmlsdGVyLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZS50cmFuc2Zvcm0odmFsdWUpKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9KTtcblxuICAvKiAtLS0gTGlmZWN5Y2xlIC0tLSAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdWJzY3JpYmUgZm9ybSBjaGFuZ2VzIHNvIGNvbXB1dGVkL2ZpbHRlckNvdW50IHVwZGF0ZVxuICAgIHRoaXMuc3Vic2NyaWJlRm9ybUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qIC0tLSBGb3JtIGluaXQgJiBoZWxwZXJzIC0tLSAqL1xuICBpbml0aWFsaXplRm9ybUNvbnRyb2xzKGNvbmZpZzogRmlsdGVyUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgIC8vIGJ1aWxkIGEgZnJlc2ggZm9ybSB0byBtYXRjaCBjb25maWdcbiAgICBjb25zdCBuZXdGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICBjb25zdCByYW5nZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZ3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IG1pbiA9IChncm91cC5nZXQoJ21pbicpIGFzIEZvcm1Db250cm9sKT8udmFsdWU7XG4gICAgICBjb25zdCBtYXggPSAoZ3JvdXAuZ2V0KCdtYXgnKSBhcyBGb3JtQ29udHJvbCk/LnZhbHVlO1xuICAgICAgaWYgKG1pbiAhPT0gbnVsbCAmJiBtYXggIT09IG51bGwgJiYgbWluID4gbWF4KSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlRXJyb3I6ICdNaW4gdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBtYXggdmFsdWUnIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY29uZmlnKSB7XG4gICAgICBsZXQgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWluOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICAgIG1heDogbmV3IEZvcm1Db250cm9sKG51bGwpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB2YWxpZGF0b3JzOiByYW5nZVZhbGlkYXRvciB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKEFycmF5LmlzQXJyYXkoZmlsdGVyLmRlZmF1bHRWYWx1ZSkgPyBmaWx0ZXIuZGVmYXVsdFZhbHVlIDogW10pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChmaWx0ZXIuZGVmYXVsdFZhbHVlID8/ICcnKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyBudWxsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUudHJhbnNmb3JtKGZpbHRlci5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0Zvcm0uYWRkQ29udHJvbChmaWx0ZXIua2V5LCBjb250cm9sKTtcbiAgICB9XG5cbiAgICAvLyByZXBsYWNlIGZvcm0gc2FmZWx5XG4gICAgLy8gcHJlc2VydmUgc3Vic2NyaXB0aW9uIHNvIHZhbHVlQ2hhbmdlcyBjb250aW51ZXMgdG8gdXBkYXRlIF9mb3JtVmFsdWVTaWduYWxcbiAgICB0aGlzLmZpbHRlckZvcm0gPSBuZXdGb3JtO1xuICAgIC8vIHVwZGF0ZSBzaWduYWwgc25hcHNob3QgaW1tZWRpYXRlbHlcbiAgICB0aGlzLl9mb3JtVmFsdWVTaWduYWwuc2V0KHsgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlIH0pO1xuXG4gICAgLy8gcmUtc3Vic2NyaWJlIHRvIG5ldyBmb3JtJ3MgdmFsdWVDaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpYmVGb3JtQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JtQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAvLyB1bnN1YnNjcmliZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgYW55XG4gICAgdGhpcy5mb3JtU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc3Vic2NyaWJlIHRvIHZhbHVlQ2hhbmdlczsgc2V0IHNuYXBzaG90IHNpZ25hbFxuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX2Zvcm1WYWx1ZVNpZ25hbC5zZXQoeyAuLi52YWx1ZSB9KTtcbiAgICB9KTtcblxuICAgIC8vIGFsc28gc2V0IGluaXRpYWwgc25hcHNob3QgaW4gY2FzZSB2YWx1ZUNoYW5nZXMgZG9lc24ndCBlbWl0IGltbWVkaWF0ZWx5XG4gICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udHJvbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29uZmlnIHN0cnVjdHVyZSBoYXMgY2hhbmdlZCAobmV3IGtleXMgb3IgcmVtb3ZlZCBrZXlzKVxuICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiBmb3JtIG5lZWRzIHRvIGJlIHJlYnVpbHRcbiAgICovXG4gIHByaXZhdGUgaGFzQ29uZmlnQ2hhbmdlZChuZXdDb25maWc6IEZpbHRlclBhbmVsQ29uZmlnW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyRm9ybS5jb250cm9scykuc29ydCgpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBuZXdDb25maWcubWFwKGYgPT4gZi5rZXkpLnNvcnQoKTtcbiAgICBcbiAgICBpZiAoY3VycmVudEtleXMubGVuZ3RoICE9PSBuZXdLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjdXJyZW50S2V5cy5zb21lKChrZXksIGluZGV4KSA9PiBrZXkgIT09IG5ld0tleXNbaW5kZXhdKTtcbiAgfVxuXG4gIC8qIC0tLSBBY3Rpb25zIC8gVUkgaGFuZGxlcnMgLS0tICovXG4gIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMubGFzdEFwcGxpZWREYXRhKCk7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHByZWZlciBzZXRWYWx1ZSAoZW5zdXJlcyBzaGFwZSBtYXRjaGVzKTsgZmFsbGJhY2sgdG8gcGF0Y2hWYWx1ZVxuICAgICAgICB0aGlzLmZpbHRlckZvcm0uc2V0VmFsdWUobGFzdCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUobGFzdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJGb3JtVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgLy8gZW1pdCBjbG9zZSBldmVudFxuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNuYXBzaG90ID0geyAuLi50aGlzLmZpbHRlckZvcm0udmFsdWUgfTtcbiAgICB0aGlzLmxhc3RBcHBsaWVkRGF0YS5zZXQoc25hcHNob3QpO1xuXG4gICAgdGhpcy5vbkFwcGx5LmVtaXQoe1xuICAgICAgZmlsdGVyRGF0YTogc25hcHNob3QsXG4gICAgICBmaWx0ZXJDb3VudDogdGhpcy5maWx0ZXJDb3VudCgpXG4gICAgfSk7XG5cbiAgICAvLyBjb25zaXN0ZW50IGJlaGF2aW9yIHdpdGggZWFybGllciBpbXBsZW1lbnRhdGlvbjpcbiAgICAvLyBoaWRlIHBhbmVsIChwYXJlbnQgc2hvdWxkIHJlYWQgc2hvdygpIHRvIGNsb3NlKSBhbmQgcmVzdG9yZSBmb3JtIHN0YXRlIHZpYSBjbG9zZVBhbmVsXG4gICAgLy8gTm90ZTogd2UgZG9uJ3QgbXV0YXRlIHNob3coKSBoZXJlOyBwYXJlbnQgb3ducyBzaG93IHNpZ25hbFxuICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJGb3JtVmFsdWVzKCk7XG4gICAgLy8gY2FsbCBhcHBseUZpbHRlcnMgdG8gbWFpbnRhaW4gcHJldmlvdXMgYmVoYXZpb3IgKHZhbGlkYXRpb24gKyBlbWl0KVxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gIH1cblxuICAvKiAtLS0gVmFsdWUgc2V0dGVycyAtLS0gKi9cbiAgaGFuZGxlU2VsZWN0KGV2ZW50OiBhbnksIGZpbHRlcktleTogc3RyaW5nLCBmaWx0ZXI6IEZpbHRlclBhbmVsQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZ2V0Q29udHJvbChmaWx0ZXJLZXkpO1xuICAgIFxuICAgIC8vIEZvciBtdWx0aVNlbGVjdCwgZXh0cmFjdCB2YWx1ZXMgZnJvbSBhcnJheSBvZiBvYmplY3RzIChpZiBuZWVkZWQpXG4gICAgbGV0IHZhbHVlVG9TZXQgPSBldmVudDtcbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgJiYgQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICd2YWx1ZScgcHJvcGVydHlcbiAgICAgIGlmIChldmVudC5sZW5ndGggPiAwICYmIHR5cGVvZiBldmVudFswXSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBldmVudFswXSkge1xuICAgICAgICB2YWx1ZVRvU2V0ID0gZXZlbnQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUgfHwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGN0cmw/LnNldFZhbHVlKHZhbHVlVG9TZXQpO1xuICAgIGlmIChmaWx0ZXIub25DaGFuZ2UpIHtcbiAgICAgIC8vIGtlZXAgc2FtZSBjYWxsYmFjayBjb250cmFjdDogcGFzcyBldmVudCwgY29uZmlnIGFuZCBmb3JtIHNuYXBzaG90XG4gICAgICBmaWx0ZXIub25DaGFuZ2UoZXZlbnQsIHRoaXMuY29uZmlnKCksIHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2hlY2tib3goZXZlbnQ6IGFueSwgZmlsdGVyS2V5OiBzdHJpbmcsIGNoZWNrYm94VmFsdWU6IHN0cmluZywgZmlsdGVyOiBGaWx0ZXJQYW5lbENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmdldENvbnRyb2woZmlsdGVyS2V5KTtcbiAgICBjb25zdCBjdXJyZW50ID0gQXJyYXkuaXNBcnJheShjdHJsPy52YWx1ZSkgPyBbLi4uY3RybC52YWx1ZV0gOiBbXTtcbiAgICBpZiAoZXZlbnQ/LnZhbHVlKSB7XG4gICAgICBjdHJsPy5zZXRWYWx1ZShbLi4uY3VycmVudCwgY2hlY2tib3hWYWx1ZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHJsPy5zZXRWYWx1ZShjdXJyZW50LmZpbHRlcigodikgPT4gdiAhPT0gY2hlY2tib3hWYWx1ZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXIub25DaGFuZ2UpIHtcbiAgICAgIGZpbHRlci5vbkNoYW5nZShldmVudCwgdGhpcy5jb25maWcoKSwgdGhpcy5maWx0ZXJGb3JtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvbkRhdGVDaGFuZ2UoZXZlbnQ6IGFueSwgZmlsdGVyS2V5OiBzdHJpbmcsIGZpbHRlcjogRmlsdGVyUGFuZWxDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5nZXRDb250cm9sKGZpbHRlcktleSk7XG4gICAgY3RybD8uc2V0VmFsdWUoZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50ICYmIHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgJ3N0YXJ0RGF0ZScgaW4gZXZlbnQgJiYgJ2VuZERhdGUnIGluIGV2ZW50KSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMuc2V0KHtcbiAgICAgICAgc3RhcnREYXRlOiBldmVudC5zdGFydERhdGUsXG4gICAgICAgIGVuZERhdGU6IGV2ZW50LmVuZERhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tLSBDbGVhciAvIFNldCB2YWx1ZXMgaGVscGVycyAtLS0gKi9cbiAgY2xlYXJGb3JtVmFsdWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc2V0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5jb25maWcoKSkge1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55ID0gZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAnbXVsdGlTZWxlY3QnIHx8IGZpbHRlci50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGZpbHRlci5kZWZhdWx0VmFsdWUgPz8gW107XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyB7IG1pbjogbnVsbCwgbWF4OiBudWxsIH07XG4gICAgICB9XG4gICAgICByZXNldHNbZmlsdGVyLmtleV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gcGF0Y2ggdG8gYXZvaWQgc2hhcGUgbWlzbWF0Y2ggZXJyb3JzXG4gICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUocmVzZXRzKTtcbiAgICB0aGlzLl9mb3JtVmFsdWVTaWduYWwuc2V0KHsgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZmlsdGVyLnNlbGVjdGVkVmFsdWUgd2hlbiBwYXJlbnQgcHJvdmlkZXMgc2VsZWN0ZWRWYWx1ZS5cbiAgICogQ2FsbGVkIGJ5IHRoZSBjb25maWcgZWZmZWN0IChzbyBydW5zIG9uIGluaXRpYWwgbG9hZCBhbmQgb24gY29uZmlnIGNoYW5nZXMpLlxuICAgKi9cbiAgc2V0RmlsdGVyVmFsdWUoY29uZmlnOiBGaWx0ZXJQYW5lbENvbmZpZ1tdKTogdm9pZCB7XG4gICAgbGV0IGFueVZhbHVlU2V0ID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBjb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlLnRyYW5zZm9ybShmaWx0ZXI/LnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmdldENvbnRyb2woZmlsdGVyLmtleSk7XG4gICAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgICAgY3RybC5zZXRWYWx1ZShmaWx0ZXIuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgYW55VmFsdWVTZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFueVZhbHVlU2V0ICYmIHRoaXMuZW1pdEZpbHRlcnNBZnRlclNldHRpbmdOZXdWYWx1ZXMoKSkge1xuICAgICAgLy8gcmVzcGVjdCB0aGUgcGFyZW50IGZsYWcg4oCUIGFwcGx5IGFuZCBlbWl0XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYWtlIHN1cmUgb3VyIHNuYXBzaG90IHNpZ25hbCBpcyBmcmVzaFxuICAgICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgICB9XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLXBhbmVsLWNvbnRhaW5lclwiICpuZ0lmPVwic2hvdygpXCIgQHNsaWRlRnJvbVJpZ2h0PlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkZXJcIj5cbiAgICAgICAgPHNwYW4+RmlsdGVyczwvc3Bhbj5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNsb3NlLWljb25cIiAoY2xpY2spPVwiY2xvc2VQYW5lbCgpXCIgd2lkdGg9XCIyNVwiIGhlaWdodD1cIjI1XCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGcgaWQ9XCJpYy1uYXZpZ2F0aW9uLWNhbmNlbC0yNFwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVW5pb25cIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNOC42MDQ2OCA2LjY0MzU1QzguMDkwMzYgNi4xMjkyMyA3LjI1NjQ5IDYuMTI5MjMgNi43NDIxOCA2LjY0MzU1QzYuMjI3ODcgNy4xNTc4NiA2LjIyNzg3IDcuOTkxNzMgNi43NDIxOCA4LjUwNjA0TDEwLjQ5MzggMTIuMjU3Nkw2Ljc0MzEgMTYuMDA4M0M2LjIyODc5IDE2LjUyMjYgNi4yMjg3OSAxNy4zNTY0IDYuNzQzMSAxNy44NzA4QzcuMjU3NDIgMTguMzg1MSA4LjA5MTI5IDE4LjM4NTEgOC42MDU2MCAxNy44NzA4TDEyLjM1NjIgMTQuMTIwMUwxNi4xMDY4IDE3Ljg3MDdDMTYuNjIxMSAxOC4zODUwIDE3LjQ1NTAgMTguMzg1MCAxNy45NjkzIDE3Ljg3MDdDMTguNDgzNiAxNy4zNTY0IDE4LjQ4MzYgMTYuNTIyNSAxNy45NjkzIDE2LjAwODJMMTQuMjE4NyAxMi4yNTc2TDE3Ljk3MDIgOC41MDYxM0MxOC40ODQ1IDcuOTkxODEgMTguNDg0NSA3LjE1Nzk0IDE3Ljk3MDIgNi42NDM2M0MxNy40NTU5IDYuMTI5MzIgMTYuNjIyMCA2LjEyOTMyIDE2LjEwNzcgNi42NDM2M0wxMi4zNTYyIDEwLjM5NTFMOC42MDQ2OCA2LjY0MzU1WlwiIGZpbGw9XCIjMTgxRjMzXCIgLz5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpdmlkZXIgZmlyc3RcIj48L2Rpdj5cbiAgXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlcnNcIiBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNvbmZpZygpOyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdJZj1cIiFmaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItdGl0bGVcIj57e2ZpbHRlci50aXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ211bHRpU2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWlzLW11bHRpLXNlbGVjdC1kcm9wZG93biBjbGFzcz1cIm5vLXBhZGRpbmdcIiBbbGFiZWxdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QnXCIgW3NlbGVjdGVkSXRlbXNdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlIHx8IFtdXCIgKG9uQ2hhbmdlKT1cImhhbmRsZVNlbGVjdCgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIiBbZGF0YV09XCJmaWx0ZXIub3B0aW9uc1wiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0ZWRDb3VudF09XCJ0cnVlXCIgW2VuYWJsZVNlbGVjdEFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUFwcGx5QnV0dG9uXT1cImZhbHNlXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNDRweFwiPjwvbWlzLW11bHRpLXNlbGVjdC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWlzLWRyb3Bkb3duIFtkYXRhXT1cImZpbHRlci5vcHRpb25zXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjQ0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiaGFuZGxlU2VsZWN0KCRldmVudCwgZmlsdGVyLmtleSwgZmlsdGVyKVwiIFtzZWxlY3RlZEl0ZW1dPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21pcy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXIub3B0aW9uc1wiIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1pcy1jaGVja2JveCBbdHlwZV09XCInRGVmYXVsdCdcIiBbY2hlY2tlZF09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KT8udmFsdWU/LmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcIiAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlQ2hlY2tib3goJGV2ZW50LCBmaWx0ZXIua2V5LCBvcHRpb24udmFsdWUsIGZpbHRlcilcIj48L21pcy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+e3tvcHRpb24ubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdkYXRlUGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzVHpEcCBtaXNJbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IGNsYXNzPVwibWlzLWlucHV0XCIgW2RwQ29uZmlnXT1cImZpbHRlci5kYXRlUGlja2VyQ29uZmlnXCIgW3BsYWNlaG9sZGVyXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZSB8fCBmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCdcIiBbdmFsdWVdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlIHx8IGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0J1wiIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIiBbc2VsZWN0ZWREYXRlXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZVwiIFtwb3NpdGlvblhdPVwiJ2VuZCdcIiBbb2Zmc2V0WF09XCItMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnZGF0ZVJhbmdlUGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzVHpEcnAgbWlzSW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm1pcy1pbnB1dFwiIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIighZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSAmJiAhZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGUpID8gKGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0JykgOiBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuc3RhcnREYXRlICsgJyAtICcgKyBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuZW5kRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIighZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSAmJiAhZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGUpID8gKGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0JykgOiBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuc3RhcnREYXRlICsgJyAtICcgKyBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuZW5kRGF0ZVwiIFtwb3NpdGlvblhdPVwiJ3N0YXJ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uWV09XCIndG9wJ1wiIFtzZWxlY3RlZERhdGVzXT1cImRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMoKVwiIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcENvbmZpZ109XCJmaWx0ZXIuZGF0ZVJhbmdlUGlja2VyQ29uZmlnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAndGV4dCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1pcy1pbnB1dCB0eXBlPVwicm91bmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1pc0lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1R5cGUgaGVyZSdcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpbHRlci5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzSW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWlzLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLWlubmVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpbHRlcj8ub3B0aW9ucz8uWzBdPy5sYWJlbCB8fCAnTWluJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtaW5uZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZmlsdGVyPy5vcHRpb25zPy5bMV0/LmxhYmVsIHx8ICdNYXgnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1R5cGUgaGVyZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy5nZXQoJ21pbicpPy52YWx1ZSB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpdmlkZXJcIiAqbmdJZj1cIiFsYXN0XCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidDbGVhciBBbGwnXCIgW3NpemVdPVwiJ1NtYWxsJ1wiIFt0eXBlXT1cIidUZXh0J1wiIChjbGljayk9XCJyZXNldEZpbHRlcnMoKVwiPjwvbWlzLWJ1dHRvbj5cbiAgICAgICAgPG1pcy1idXR0b24gW25hbWVdPVwiJ0FwcGx5J1wiIFtzaXplXT1cIidTbWFsbCdcIiBbdHlwZV09XCInU29saWQnXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCIgW2Rpc2FibGVkXT1cImZpbHRlckZvcm0uaW52YWxpZFwiPjwvbWlzLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+Il19
|
|
518
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBa0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ0c5Qyw2QkFBb0Q7SUFFNUMsQUFESiwrQkFBZ0Msb0NBRzZCO0lBRndGLHFTQUFZLHFEQUF3QyxLQUFDO0lBRzFNLEFBRDZELGlCQUE0QixFQUNuRjs7Ozs7O0lBSDRDLGVBQXdDO0lBRWxGLEFBRDJCLEFBQTNCLEFBRDJOLEFBQXhCLEFBQWhILEFBQXpDLHlEQUF3QyxrSUFBMEQsMkJBQThFLHVCQUF1QiwyQkFDdk4seUJBQXlCLDBCQUMxQjs7OztJQUdyQyw2QkFBK0M7SUFFdkMsQUFESiwrQkFBZ0MsdUJBRXFGO0lBQXpHLHdSQUFZLHFEQUF3QyxLQUFDO0lBRWpFLEFBREksaUJBQWUsRUFDYjs7Ozs7O0lBSFksZUFBdUI7SUFDeUIsQUFEeEIsQUFBeEIsd0NBQXVCLHVCQUF1QixpR0FDb0Q7Ozs7SUFPNUcsQUFESiwrQkFBc0UsdUJBQzhHO0lBQXpFLGdVQUFlLHdFQUF3RCxLQUFDO0lBQUMsaUJBQWU7SUFDL0wsZ0NBQTZCO0lBQUEsWUFBZ0I7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LG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgV3JpdGFibGVTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzbGlkZUZyb21SaWdodCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvc2xpZGVGcm9tUmlnaHQnO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgfSBmcm9tICdtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2RhdGVwaWNrZXJfdjInO1xuaW1wb3J0IHsgSVJTZWxlY3RlZERhdGVzQ29uZmlnIH0gZnJvbSAnbWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9zcGVjaWZpY2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgYXMgSURhdGVSYW5nZVBpY2tlckNvbmZpZyB9IGZyb20gJ21pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZGF0ZXJhbmdlcGlja2VyX3YyJztcbmltcG9ydCB7IEhhc1ZhbHVlUGlwZSB9IGZyb20gJy4uL2hhcy12YWx1ZS5waXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXRhPzogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlclR5cGUgPVxuICB8ICdtdWx0aVNlbGVjdCdcbiAgfCAnc2VsZWN0J1xuICB8ICdkYXRlUGlja2VyJ1xuICB8ICdkYXRlUmFuZ2VQaWNrZXInXG4gIHwgJ2NoZWNrYm94J1xuICB8ICdyYWRpbydcbiAgfCAndGV4dCdcbiAgfCAnbnVtYmVyJ1xuICB8ICdyYW5nZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUGFuZWxDb25maWcge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogRmlsdGVyVHlwZTtcbiAgb3B0aW9ucz86IEZpbHRlck9wdGlvbltdO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGF0ZVBpY2tlckNvbmZpZz86IElEYXRlUGlja2VyQ29uZmlnO1xuICBkYXRlUmFuZ2VQaWNrZXJDb25maWc/OiBJRGF0ZVJhbmdlUGlja2VyQ29uZmlnO1xuICBvbkNoYW5nZT86IChldmVudDogYW55LCBjb25maWc/OiBGaWx0ZXJQYW5lbENvbmZpZ1tdLCBmb3JtVmFsdWU/OiBhbnkpID0+IHZvaWQ7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgc2VsZWN0ZWRWYWx1ZT86IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWlzLWZpbHRlci1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW3NsaWRlRnJvbVJpZ2h0XVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoYXNWYWx1ZTogSGFzVmFsdWVQaXBlKSB7XG4gICAgLy8gRWZmZWN0IHRvIHJlYWN0IHRvIGNvbmZpZyBjaGFuZ2VzIC0gbXVzdCBhbGxvdyBzaWduYWwgd3JpdGVzIHNpbmNlIHdlIHVwZGF0ZSBpbnRlcm5hbCBzaWduYWxzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGlmIChjZmcgJiYgQXJyYXkuaXNBcnJheShjZmcpICYmIGNmZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gT25seSBpbml0aWFsaXplIGZvcm0gaWYgbm90IGFscmVhZHkgZG9uZSwgb3IgaWYgY29uZmlnIHN0cnVjdHVyZSBjaGFuZ2VkXG4gICAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQgfHwgdGhpcy5oYXNDb25maWdDaGFuZ2VkKGNmZykpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1Db250cm9scyhjZmcpO1xuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWx3YXlzIGNoZWNrIGZvciBzZWxlY3RlZFZhbHVlIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnNldEZpbHRlclZhbHVlKGNmZyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmlsdGVyUGFuZWw6IEVycm9yIGluIGNvbmZpZyBlZmZlY3QnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qIC0tLSBzaWduYWwtYmFzZWQgSW5wdXRzIC8gT3V0cHV0cyAtLS0gKi9cbiAgcHVibGljIHNob3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxGaWx0ZXJQYW5lbENvbmZpZ1tdPigpO1xuICBwdWJsaWMgZW1pdEZpbHRlcnNBZnRlclNldHRpbmdOZXdWYWx1ZXMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIG9uQ2xvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcHVibGljIG9uQXBwbHkgPSBvdXRwdXQ8eyBmaWx0ZXJEYXRhOiBhbnk7IGZpbHRlckNvdW50OiBudW1iZXIgfT4oKTtcblxuICAvKiAtLS0gZm9ybSArIGludGVybmFsIHN0YXRlIC0tLSAqL1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHJpdmF0ZSBmb3JtU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIGtlZXAgYSBzaWduYWwgc25hcHNob3Qgb2YgZm9ybSB2YWx1ZSBzbyBjb21wdXRlZCBjYW4gcmVhY3RcbiAgcHJpdmF0ZSBfZm9ybVZhbHVlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHNpZ25hbCh7fSk7XG5cbiAgLy8gbGFzdCBhcHBsaWVkIHNuYXBzaG90IChzaWduYWwgc28gdGVtcGxhdGUvbG9naWMgY2FuIHJlYWQgcmVsaWFibHkpXG4gIHB1YmxpYyBsYXN0QXBwbGllZERhdGE6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICAvLyBkYXRlIHJhbmdlIHJlYWRhYmxlIGZvciB0ZW1wbGF0ZVxuICBwdWJsaWMgZGF0ZVJhbmdlU2VsZWN0ZWREYXRlczogV3JpdGFibGVTaWduYWw8SVJTZWxlY3RlZERhdGVzQ29uZmlnPiA9IHNpZ25hbCh7XG4gICAgc3RhcnREYXRlOiAnJyxcbiAgICBlbmREYXRlOiAnJ1xuICB9KTtcblxuICAvKiBjb21wdXRlZCBmaWx0ZXJDb3VudCAqL1xuICBwdWJsaWMgZmlsdGVyQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5fZm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgY2ZnID0gdGhpcy5jb25maWcoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY2ZnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZvcm1WYWx1ZVtmaWx0ZXIua2V5XTtcblxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUubWluICE9PSBudWxsIHx8IHZhbHVlLm1heCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgfHwgZmlsdGVyLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZS50cmFuc2Zvcm0odmFsdWUpKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9KTtcblxuICAvKiAtLS0gTGlmZWN5Y2xlIC0tLSAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdWJzY3JpYmUgZm9ybSBjaGFuZ2VzIHNvIGNvbXB1dGVkL2ZpbHRlckNvdW50IHVwZGF0ZVxuICAgIHRoaXMuc3Vic2NyaWJlRm9ybUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qIC0tLSBGb3JtIGluaXQgJiBoZWxwZXJzIC0tLSAqL1xuICBpbml0aWFsaXplRm9ybUNvbnRyb2xzKGNvbmZpZzogRmlsdGVyUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgIC8vIGJ1aWxkIGEgZnJlc2ggZm9ybSB0byBtYXRjaCBjb25maWdcbiAgICBjb25zdCBuZXdGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICBjb25zdCByYW5nZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZ3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IG1pbiA9IChncm91cC5nZXQoJ21pbicpIGFzIEZvcm1Db250cm9sKT8udmFsdWU7XG4gICAgICBjb25zdCBtYXggPSAoZ3JvdXAuZ2V0KCdtYXgnKSBhcyBGb3JtQ29udHJvbCk/LnZhbHVlO1xuICAgICAgaWYgKG1pbiAhPT0gbnVsbCAmJiBtYXggIT09IG51bGwgJiYgbWluID4gbWF4KSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlRXJyb3I6ICdNaW4gdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBtYXggdmFsdWUnIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY29uZmlnKSB7XG4gICAgICBsZXQgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWluOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICAgIG1heDogbmV3IEZvcm1Db250cm9sKG51bGwpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB2YWxpZGF0b3JzOiByYW5nZVZhbGlkYXRvciB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKEFycmF5LmlzQXJyYXkoZmlsdGVyLmRlZmF1bHRWYWx1ZSkgPyBmaWx0ZXIuZGVmYXVsdFZhbHVlIDogW10pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChmaWx0ZXIuZGVmYXVsdFZhbHVlID8/ICcnKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyBudWxsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUudHJhbnNmb3JtKGZpbHRlci5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0Zvcm0uYWRkQ29udHJvbChmaWx0ZXIua2V5LCBjb250cm9sKTtcbiAgICB9XG5cbiAgICAvLyByZXBsYWNlIGZvcm0gc2FmZWx5XG4gICAgLy8gcHJlc2VydmUgc3Vic2NyaXB0aW9uIHNvIHZhbHVlQ2hhbmdlcyBjb250aW51ZXMgdG8gdXBkYXRlIF9mb3JtVmFsdWVTaWduYWxcbiAgICB0aGlzLmZpbHRlckZvcm0gPSBuZXdGb3JtO1xuICAgIC8vIHVwZGF0ZSBzaWduYWwgc25hcHNob3QgaW1tZWRpYXRlbHlcbiAgICB0aGlzLl9mb3JtVmFsdWVTaWduYWwuc2V0KHsgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlIH0pO1xuXG4gICAgLy8gcmUtc3Vic2NyaWJlIHRvIG5ldyBmb3JtJ3MgdmFsdWVDaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpYmVGb3JtQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JtQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAvLyB1bnN1YnNjcmliZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgYW55XG4gICAgdGhpcy5mb3JtU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc3Vic2NyaWJlIHRvIHZhbHVlQ2hhbmdlczsgc2V0IHNuYXBzaG90IHNpZ25hbFxuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX2Zvcm1WYWx1ZVNpZ25hbC5zZXQoeyAuLi52YWx1ZSB9KTtcbiAgICB9KTtcblxuICAgIC8vIGFsc28gc2V0IGluaXRpYWwgc25hcHNob3QgaW4gY2FzZSB2YWx1ZUNoYW5nZXMgZG9lc24ndCBlbWl0IGltbWVkaWF0ZWx5XG4gICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udHJvbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29uZmlnIHN0cnVjdHVyZSBoYXMgY2hhbmdlZCAobmV3IGtleXMgb3IgcmVtb3ZlZCBrZXlzKVxuICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiBmb3JtIG5lZWRzIHRvIGJlIHJlYnVpbHRcbiAgICovXG4gIHByaXZhdGUgaGFzQ29uZmlnQ2hhbmdlZChuZXdDb25maWc6IEZpbHRlclBhbmVsQ29uZmlnW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyRm9ybS5jb250cm9scykuc29ydCgpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBuZXdDb25maWcubWFwKGYgPT4gZi5rZXkpLnNvcnQoKTtcbiAgICBcbiAgICBpZiAoY3VycmVudEtleXMubGVuZ3RoICE9PSBuZXdLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjdXJyZW50S2V5cy5zb21lKChrZXksIGluZGV4KSA9PiBrZXkgIT09IG5ld0tleXNbaW5kZXhdKTtcbiAgfVxuXG4gIC8qIC0tLSBBY3Rpb25zIC8gVUkgaGFuZGxlcnMgLS0tICovXG4gIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMubGFzdEFwcGxpZWREYXRhKCk7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHByZWZlciBzZXRWYWx1ZSAoZW5zdXJlcyBzaGFwZSBtYXRjaGVzKTsgZmFsbGJhY2sgdG8gcGF0Y2hWYWx1ZVxuICAgICAgICB0aGlzLmZpbHRlckZvcm0uc2V0VmFsdWUobGFzdCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUobGFzdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJGb3JtVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgLy8gZW1pdCBjbG9zZSBldmVudFxuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgZm9ybSB2YWx1ZVxuICAgIGNvbnN0IHNuYXBzaG90ID0geyAuLi50aGlzLmZpbHRlckZvcm0udmFsdWUgfTtcbiAgXG4gICAgLy8gT1BUSU9OQUw6IE1hcCBvYmplY3RzIGJhY2sgdG8gdmFsdWVzIGZvciB0aGUgT3V0cHV0IGVtaXNzaW9uIFxuICAgIC8vIHNvIHRoZSBwYXJlbnQgcmVjZWl2ZXMgY2xlYW4gZGF0YSAoWydMT0dJTiddIGluc3RlYWQgb2YgW3tsYWJlbDouLi4sIHZhbHVlOiAnTE9HSU4nfV0pXG4gICAgY29uc3QgY2xlYW5TbmFwc2hvdCA9IHRoaXMubWFwVmFsdWVzRm9yRW1pc3Npb24oc25hcHNob3QpO1xuICBcbiAgICB0aGlzLmxhc3RBcHBsaWVkRGF0YS5zZXQoc25hcHNob3QpOyAvLyBLZWVwIG9iamVjdHMgZm9yIFVJIHN0YXRlXG4gIFxuICAgIHRoaXMub25BcHBseS5lbWl0KHtcbiAgICAgIGZpbHRlckRhdGE6IGNsZWFuU25hcHNob3QsIC8vIEVtaXQgdmFsdWVzXG4gICAgICBmaWx0ZXJDb3VudDogdGhpcy5maWx0ZXJDb3VudCgpXG4gICAgfSk7XG4gIFxuICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICB9XG4gIFxuICAvLyBIZWxwZXIgdG8gY2xlYW4gdXAgZGF0YSBiZWZvcmUgZW1pdHRpbmdcbiAgcHJpdmF0ZSBtYXBWYWx1ZXNGb3JFbWlzc2lvbihmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgY2xlYW5EYXRhID0geyAuLi5mb3JtVmFsdWUgfTtcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNvbmZpZygpO1xuICBcbiAgICBjZmcuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjbGVhbkRhdGFbZmlsdGVyLmtleV07XG4gIFxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAnbXVsdGlTZWxlY3QnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNsZWFuRGF0YVtmaWx0ZXIua2V5XSA9IHZhbHVlOyBcbiAgICAgIH1cbiAgICB9KTtcbiAgXG4gICAgcmV0dXJuIGNsZWFuRGF0YTtcbiAgfVxuICBcbiAgXG4gIFxuXG4gIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRm9ybVZhbHVlcygpO1xuICAgIC8vIGNhbGwgYXBwbHlGaWx0ZXJzIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yICh2YWxpZGF0aW9uICsgZW1pdClcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICB9XG5cbiAgLyogLS0tIFZhbHVlIHNldHRlcnMgLS0tICovXG4vLyBmaWx0ZXItcGFuZWwuY29tcG9uZW50LnRzXG5cbmhhbmRsZVNlbGVjdChldmVudDogYW55LCBmaWx0ZXJLZXk6IHN0cmluZywgZmlsdGVyOiBGaWx0ZXJQYW5lbENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBjdHJsID0gdGhpcy5nZXRDb250cm9sKGZpbHRlcktleSk7XG4gIFxuICAvLyBGSVg6IERvIG5vdCBzdHJpcCB0aGUgdmFsdWUgaGVyZS4gU3RvcmUgdGhlIGZ1bGwgb2JqZWN0IHNvIHRoZSBVSSBcbiAgLy8gY2FuIG1hdGNoIGl0IGFnYWluc3QgdGhlIGRhdGEgbGlzdCB3aGVuIHJlLXJlbmRlcmluZy5cbiAgbGV0IHZhbHVlVG9TZXQgPSBldmVudDtcblxuICAvKiAvLyBDT01NRU5URUQgT1VUIE9SIFJFTU9WRUQgVEhJUyBCTE9DS1xuICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgJiYgQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICBpZiAoZXZlbnQubGVuZ3RoID4gMCAmJiB0eXBlb2YgZXZlbnRbMF0gPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZXZlbnRbMF0pIHtcbiAgICAgIHZhbHVlVG9TZXQgPSBldmVudC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS52YWx1ZSB8fCBpdGVtKTtcbiAgICB9XG4gIH1cbiAgKi9cbiAgXG4gIGN0cmw/LnNldFZhbHVlKHZhbHVlVG9TZXQpO1xuXG4gIGlmIChmaWx0ZXIub25DaGFuZ2UpIHtcbiAgICBmaWx0ZXIub25DaGFuZ2UoZXZlbnQsIHRoaXMuY29uZmlnKCksIHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gIH1cbn1cblxuXG5cbiAgaGFuZGxlQ2hlY2tib3goZXZlbnQ6IGFueSwgZmlsdGVyS2V5OiBzdHJpbmcsIGNoZWNrYm94VmFsdWU6IHN0cmluZywgZmlsdGVyOiBGaWx0ZXJQYW5lbENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmdldENvbnRyb2woZmlsdGVyS2V5KTtcbiAgICBjb25zdCBjdXJyZW50ID0gQXJyYXkuaXNBcnJheShjdHJsPy52YWx1ZSkgPyBbLi4uY3RybC52YWx1ZV0gOiBbXTtcbiAgICBpZiAoZXZlbnQ/LnZhbHVlKSB7XG4gICAgICBjdHJsPy5zZXRWYWx1ZShbLi4uY3VycmVudCwgY2hlY2tib3hWYWx1ZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHJsPy5zZXRWYWx1ZShjdXJyZW50LmZpbHRlcigodikgPT4gdiAhPT0gY2hlY2tib3hWYWx1ZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXIub25DaGFuZ2UpIHtcbiAgICAgIGZpbHRlci5vbkNoYW5nZShldmVudCwgdGhpcy5jb25maWcoKSwgdGhpcy5maWx0ZXJGb3JtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvbkRhdGVDaGFuZ2UoZXZlbnQ6IGFueSwgZmlsdGVyS2V5OiBzdHJpbmcsIGZpbHRlcjogRmlsdGVyUGFuZWxDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5nZXRDb250cm9sKGZpbHRlcktleSk7XG4gICAgY3RybD8uc2V0VmFsdWUoZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50ICYmIHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgJ3N0YXJ0RGF0ZScgaW4gZXZlbnQgJiYgJ2VuZERhdGUnIGluIGV2ZW50KSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMuc2V0KHtcbiAgICAgICAgc3RhcnREYXRlOiBldmVudC5zdGFydERhdGUsXG4gICAgICAgIGVuZERhdGU6IGV2ZW50LmVuZERhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tLSBDbGVhciAvIFNldCB2YWx1ZXMgaGVscGVycyAtLS0gKi9cbiAgY2xlYXJGb3JtVmFsdWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc2V0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5jb25maWcoKSkge1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55ID0gZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAnbXVsdGlTZWxlY3QnIHx8IGZpbHRlci50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGZpbHRlci5kZWZhdWx0VmFsdWUgPz8gW107XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyB7IG1pbjogbnVsbCwgbWF4OiBudWxsIH07XG4gICAgICB9XG4gICAgICByZXNldHNbZmlsdGVyLmtleV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gcGF0Y2ggdG8gYXZvaWQgc2hhcGUgbWlzbWF0Y2ggZXJyb3JzXG4gICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUocmVzZXRzKTtcbiAgICB0aGlzLl9mb3JtVmFsdWVTaWduYWwuc2V0KHsgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZmlsdGVyLnNlbGVjdGVkVmFsdWUgd2hlbiBwYXJlbnQgcHJvdmlkZXMgc2VsZWN0ZWRWYWx1ZS5cbiAgICogQ2FsbGVkIGJ5IHRoZSBjb25maWcgZWZmZWN0IChzbyBydW5zIG9uIGluaXRpYWwgbG9hZCBhbmQgb24gY29uZmlnIGNoYW5nZXMpLlxuICAgKi9cbiAgc2V0RmlsdGVyVmFsdWUoY29uZmlnOiBGaWx0ZXJQYW5lbENvbmZpZ1tdKTogdm9pZCB7XG4gICAgbGV0IGFueVZhbHVlU2V0ID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBjb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlLnRyYW5zZm9ybShmaWx0ZXI/LnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmdldENvbnRyb2woZmlsdGVyLmtleSk7XG4gICAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgICAgY3RybC5zZXRWYWx1ZShmaWx0ZXIuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgYW55VmFsdWVTZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFueVZhbHVlU2V0ICYmIHRoaXMuZW1pdEZpbHRlcnNBZnRlclNldHRpbmdOZXdWYWx1ZXMoKSkge1xuICAgICAgLy8gcmVzcGVjdCB0aGUgcGFyZW50IGZsYWcg4oCUIGFwcGx5IGFuZCBlbWl0XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYWtlIHN1cmUgb3VyIHNuYXBzaG90IHNpZ25hbCBpcyBmcmVzaFxuICAgICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgICB9XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLXBhbmVsLWNvbnRhaW5lclwiICpuZ0lmPVwic2hvdygpXCIgQHNsaWRlRnJvbVJpZ2h0PlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkZXJcIj5cbiAgICAgICAgPHNwYW4+RmlsdGVyczwvc3Bhbj5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNsb3NlLWljb25cIiAoY2xpY2spPVwiY2xvc2VQYW5lbCgpXCIgd2lkdGg9XCIyNVwiIGhlaWdodD1cIjI1XCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGcgaWQ9XCJpYy1uYXZpZ2F0aW9uLWNhbmNlbC0yNFwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVW5pb25cIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNOC42MDQ2OCA2LjY0MzU1QzguMDkwMzYgNi4xMjkyMyA3LjI1NjQ5IDYuMTI5MjMgNi43NDIxOCA2LjY0MzU1QzYuMjI3ODcgNy4xNTc4NiA2LjIyNzg3IDcuOTkxNzMgNi43NDIxOCA4LjUwNjA0TDEwLjQ5MzggMTIuMjU3Nkw2Ljc0MzEgMTYuMDA4M0M2LjIyODc5IDE2LjUyMjYgNi4yMjg3OSAxNy4zNTY0IDYuNzQzMSAxNy44NzA4QzcuMjU3NDIgMTguMzg1MSA4LjA5MTI5IDE4LjM4NTEgOC42MDU2MCAxNy44NzA4TDEyLjM1NjIgMTQuMTIwMUwxNi4xMDY4IDE3Ljg3MDdDMTYuNjIxMSAxOC4zODUwIDE3LjQ1NTAgMTguMzg1MCAxNy45NjkzIDE3Ljg3MDdDMTguNDgzNiAxNy4zNTY0IDE4LjQ4MzYgMTYuNTIyNSAxNy45NjkzIDE2LjAwODJMMTQuMjE4NyAxMi4yNTc2TDE3Ljk3MDIgOC41MDYxM0MxOC40ODQ1IDcuOTkxODEgMTguNDg0NSA3LjE1Nzk0IDE3Ljk3MDIgNi42NDM2M0MxNy40NTU5IDYuMTI5MzIgMTYuNjIyMCA2LjEyOTMyIDE2LjEwNzcgNi42NDM2M0wxMi4zNTYyIDEwLjM5NTFMOC42MDQ2OCA2LjY0MzU1WlwiIGZpbGw9XCIjMTgxRjMzXCIgLz5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpdmlkZXIgZmlyc3RcIj48L2Rpdj5cbiAgXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlcnNcIiBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNvbmZpZygpOyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdJZj1cIiFmaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItdGl0bGVcIj57e2ZpbHRlci50aXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ211bHRpU2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWlzLW11bHRpLXNlbGVjdC1kcm9wZG93biBjbGFzcz1cIm5vLXBhZGRpbmdcIiBbbGFiZWxdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QnXCIgW3NlbGVjdGVkSXRlbXNdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlIHx8IFtdXCIgKG9uQ2hhbmdlKT1cImhhbmRsZVNlbGVjdCgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIiBbZGF0YV09XCJmaWx0ZXIub3B0aW9uc1wiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0ZWRDb3VudF09XCJ0cnVlXCIgW2VuYWJsZVNlbGVjdEFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUFwcGx5QnV0dG9uXT1cImZhbHNlXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNDRweFwiPjwvbWlzLW11bHRpLXNlbGVjdC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWlzLWRyb3Bkb3duIFtkYXRhXT1cImZpbHRlci5vcHRpb25zXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjQ0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiaGFuZGxlU2VsZWN0KCRldmVudCwgZmlsdGVyLmtleSwgZmlsdGVyKVwiIFtzZWxlY3RlZEl0ZW1dPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21pcy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXIub3B0aW9uc1wiIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1pcy1jaGVja2JveCBbdHlwZV09XCInRGVmYXVsdCdcIiBbY2hlY2tlZF09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KT8udmFsdWU/LmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcIiAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlQ2hlY2tib3goJGV2ZW50LCBmaWx0ZXIua2V5LCBvcHRpb24udmFsdWUsIGZpbHRlcilcIj48L21pcy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+e3tvcHRpb24ubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdkYXRlUGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzVHpEcCBtaXNJbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IGNsYXNzPVwibWlzLWlucHV0XCIgW2RwQ29uZmlnXT1cImZpbHRlci5kYXRlUGlja2VyQ29uZmlnXCIgW3BsYWNlaG9sZGVyXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZSB8fCBmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCdcIiBbdmFsdWVdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlIHx8IGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0J1wiIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIiBbc2VsZWN0ZWREYXRlXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZVwiIFtwb3NpdGlvblhdPVwiJ2VuZCdcIiBbb2Zmc2V0WF09XCItMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnZGF0ZVJhbmdlUGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzVHpEcnAgbWlzSW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm1pcy1pbnB1dFwiIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIighZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSAmJiAhZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGUpID8gKGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0JykgOiBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuc3RhcnREYXRlICsgJyAtICcgKyBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuZW5kRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIighZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSAmJiAhZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGUpID8gKGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0JykgOiBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuc3RhcnREYXRlICsgJyAtICcgKyBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuZW5kRGF0ZVwiIFtwb3NpdGlvblhdPVwiJ3N0YXJ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uWV09XCIndG9wJ1wiIFtzZWxlY3RlZERhdGVzXT1cImRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMoKVwiIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcENvbmZpZ109XCJmaWx0ZXIuZGF0ZVJhbmdlUGlja2VyQ29uZmlnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAndGV4dCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1pcy1pbnB1dCB0eXBlPVwicm91bmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1pc0lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1R5cGUgaGVyZSdcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpbHRlci5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzSW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWlzLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLWlubmVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpbHRlcj8ub3B0aW9ucz8uWzBdPy5sYWJlbCB8fCAnTWluJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtaW5uZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZmlsdGVyPy5vcHRpb25zPy5bMV0/LmxhYmVsIHx8ICdNYXgnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1R5cGUgaGVyZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy5nZXQoJ21pbicpPy52YWx1ZSB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpdmlkZXJcIiAqbmdJZj1cIiFsYXN0XCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidDbGVhciBBbGwnXCIgW3NpemVdPVwiJ1NtYWxsJ1wiIFt0eXBlXT1cIidUZXh0J1wiIChjbGljayk9XCJyZXNldEZpbHRlcnMoKVwiPjwvbWlzLWJ1dHRvbj5cbiAgICAgICAgPG1pcy1idXR0b24gW25hbWVdPVwiJ0FwcGx5J1wiIFtzaXplXT1cIidTbWFsbCdcIiBbdHlwZV09XCInU29saWQnXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCIgW2Rpc2FibGVkXT1cImZpbHRlckZvcm0uaW52YWxpZFwiPjwvbWlzLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+Il19
|
|
@@ -440,36 +440,51 @@ class FilterPanelComponent {
|
|
|
440
440
|
this.filterForm.markAllAsTouched();
|
|
441
441
|
return;
|
|
442
442
|
}
|
|
443
|
+
// Create a copy of the form value
|
|
443
444
|
const snapshot = { ...this.filterForm.value };
|
|
444
|
-
|
|
445
|
+
// OPTIONAL: Map objects back to values for the Output emission
|
|
446
|
+
// so the parent receives clean data (['LOGIN'] instead of [{label:..., value: 'LOGIN'}])
|
|
447
|
+
const cleanSnapshot = this.mapValuesForEmission(snapshot);
|
|
448
|
+
this.lastAppliedData.set(snapshot); // Keep objects for UI state
|
|
445
449
|
this.onApply.emit({
|
|
446
|
-
filterData:
|
|
450
|
+
filterData: cleanSnapshot, // Emit values
|
|
447
451
|
filterCount: this.filterCount()
|
|
448
452
|
});
|
|
449
|
-
// consistent behavior with earlier implementation:
|
|
450
|
-
// hide panel (parent should read show() to close) and restore form state via closePanel
|
|
451
|
-
// Note: we don't mutate show() here; parent owns show signal
|
|
452
453
|
this.closePanel();
|
|
453
454
|
}
|
|
455
|
+
// Helper to clean up data before emitting
|
|
456
|
+
mapValuesForEmission(formValue) {
|
|
457
|
+
const cleanData = { ...formValue };
|
|
458
|
+
const cfg = this.config();
|
|
459
|
+
cfg.forEach(filter => {
|
|
460
|
+
const value = cleanData[filter.key];
|
|
461
|
+
if (filter.type === 'multiSelect' && Array.isArray(value)) {
|
|
462
|
+
cleanData[filter.key] = value;
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
return cleanData;
|
|
466
|
+
}
|
|
454
467
|
resetFilters() {
|
|
455
468
|
this.clearFormValues();
|
|
456
469
|
// call applyFilters to maintain previous behavior (validation + emit)
|
|
457
470
|
this.applyFilters();
|
|
458
471
|
}
|
|
459
472
|
/* --- Value setters --- */
|
|
473
|
+
// filter-panel.component.ts
|
|
460
474
|
handleSelect(event, filterKey, filter) {
|
|
461
475
|
const ctrl = this.getControl(filterKey);
|
|
462
|
-
//
|
|
476
|
+
// FIX: Do not strip the value here. Store the full object so the UI
|
|
477
|
+
// can match it against the data list when re-rendering.
|
|
463
478
|
let valueToSet = event;
|
|
479
|
+
/* // COMMENTED OUT OR REMOVED THIS BLOCK
|
|
464
480
|
if (filter.type === 'multiSelect' && Array.isArray(event)) {
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
}
|
|
481
|
+
if (event.length > 0 && typeof event[0] === 'object' && 'value' in event[0]) {
|
|
482
|
+
valueToSet = event.map((item: any) => item.value || item);
|
|
483
|
+
}
|
|
469
484
|
}
|
|
485
|
+
*/
|
|
470
486
|
ctrl?.setValue(valueToSet);
|
|
471
487
|
if (filter.onChange) {
|
|
472
|
-
// keep same callback contract: pass event, config and form snapshot
|
|
473
488
|
filter.onChange(event, this.config(), this.filterForm.value);
|
|
474
489
|
}
|
|
475
490
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mis-crystal-design-system-filter.mjs","sources":["../../../projects/mis-components/filter/animations/slideFromRight.ts","../../../projects/mis-components/filter/has-value.pipe.ts","../../../projects/mis-components/filter/filter-panel/filter-panel.component.html","../../../projects/mis-components/filter/filter-panel/filter-panel.component.ts","../../../projects/mis-components/filter/filters.module.ts","../../../projects/mis-components/filter/mis-crystal-design-system-filter.ts"],"sourcesContent":["import { trigger, style, animate, transition } from '@angular/animations';\n\nexport const slideFromRight = trigger('slideFromRight', [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('200ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ transform: 'translateX(0)' }))\n ]),\n\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate('200ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ transform: 'translateX(100%)' }))\n ])\n]);\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * HasValuePipe\n * This pipe is use to check given value should not null or undefined \n * Its also check object, Its hould not be empty\n */\n@Pipe({\n name: 'hasValue',\n})\nexport class HasValuePipe implements PipeTransform {\n transform(value: any): any {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n /* This was evaluating dateObject as false*/\n if (value instanceof Date) {\n return true;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length >= 1;\n }\n return value !== null && value !== undefined && value !== '';\n }\n}\n","<div class=\"filter-panel-container\" *ngIf=\"show()\" @slideFromRight>\n <div class=\"panel-header\">\n <span>Filters</span>\n <svg class=\"close-icon\" (click)=\"closePanel()\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"ic-navigation-cancel-24\">\n <path id=\"Union\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.60468 6.64355C8.09036 6.12923 7.25649 6.12923 6.74218 6.64355C6.22787 7.15786 6.22787 7.99173 6.74218 8.50604L10.4938 12.2576L6.7431 16.0083C6.22879 16.5226 6.22879 17.3564 6.7431 17.8708C7.25742 18.3851 8.09129 18.3851 8.60560 17.8708L12.3562 14.1201L16.1068 17.8707C16.6211 18.3850 17.4550 18.3850 17.9693 17.8707C18.4836 17.3564 18.4836 16.5225 17.9693 16.0082L14.2187 12.2576L17.9702 8.50613C18.4845 7.99181 18.4845 7.15794 17.9702 6.64363C17.4559 6.12932 16.6220 6.12932 16.1077 6.64363L12.3562 10.3951L8.60468 6.64355Z\" fill=\"#181F33\" />\n </g>\n </svg>\n </div>\n \n <div class=\"horizontal-divider first\"></div>\n \n <div class=\"filters\" [formGroup]=\"filterForm\">\n <ng-container *ngFor=\"let filter of config(); let last = last\">\n <div class=\"filter\" *ngIf=\"!filter.hidden\">\n <span class=\"filter-title\">{{filter.title}}</span>\n <ng-container *ngIf=\"filter.type === 'multiSelect'\">\n <div class=\"multiselect-filter\">\n <mis-multi-select-dropdown class=\"no-padding\" [label]=\"filter.placeholder || 'Select'\" [selectedItems]=\"filterForm.get(filter.key)?.value || []\" (onChange)=\"handleSelect($event, filter.key, filter)\" [data]=\"filter.options\" [searchEnabled]=\"true\"\n [showSelectedCount]=\"true\" [enableSelectAll]=\"true\"\n [hideApplyButton]=\"false\" width=\"100%\" height=\"44px\"></mis-multi-select-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'select'\">\n <div class=\"multiselect-filter\">\n <mis-dropdown [data]=\"filter.options\" [searchEnabled]=\"true\" width=\"100%\" height=\"44px\"\n (onChange)=\"handleSelect($event, filter.key, filter)\" [selectedItem]=\"filterForm.get(filter.key)?.value\">\n </mis-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'checkbox'\">\n <div class=\"checkbox-row\">\n <div *ngFor=\"let option of filter.options\" class=\"checkbox-container\">\n <mis-checkbox [type]=\"'Default'\" [checked]=\"filterForm.get(filter.key)?.value?.includes(option.value)\" (valueChange)=\"handleCheckbox($event, filter.key, option.value, filter)\"></mis-checkbox>\n <span class=\"checkbox-label\">{{option.label}}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'datePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDp misInput type=\"text\" readonly class=\"mis-input\" [dpConfig]=\"filter.datePickerConfig\" [placeholder]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" [value]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" (dateChange)=\"onDateChange($event, filter.key, filter)\" [selectedDate]=\"filterForm.get(filter.key)?.value\" [positionX]=\"'end'\" [offsetX]=\"-10\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'dateRangePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDrp misInput type=\"text\" class=\"mis-input\" readonly\n [placeholder]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\"\n [value]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\" [positionX]=\"'start'\"\n [positionY]=\"'top'\" [selectedDates]=\"dateRangeSelectedDates()\" (dateChange)=\"onDateChange($event, filter.key, filter)\"\n [dpConfig]=\"filter.dateRangePickerConfig\" />\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'text'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"text\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'number'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"number\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'range'\">\n <div class=\"range-container\" [formGroup]=\"filterForm.get(filter.key)\">\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[0]?.label || 'Min' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"min\"\n />\n </div>\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[1]?.label || 'Max' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"max\"\n [min]=\"filterForm.get(filter.key)?.get('min')?.value || 0\"\n />\n </div>\n </div>\n </ng-container>\n <div class=\"horizontal-divider\" *ngIf=\"!last\"></div>\n </div>\n </ng-container>\n </div>\n \n <div class=\"actions\">\n <mis-button [name]=\"'Clear All'\" [size]=\"'Small'\" [type]=\"'Text'\" (click)=\"resetFilters()\"></mis-button>\n <mis-button [name]=\"'Apply'\" [size]=\"'Small'\" [type]=\"'Solid'\" (click)=\"applyFilters()\" [disabled]=\"filterForm.invalid\"></mis-button>\n </div>\n </div>","import {\n Component,\n OnInit,\n OnDestroy,\n effect,\n signal,\n computed,\n input,\n output,\n WritableSignal\n} from '@angular/core';\nimport { FormControl, FormGroup, AbstractControl, ValidatorFn, ValidationErrors } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { slideFromRight } from '../animations/slideFromRight';\nimport { IDatePickerConfig } from 'mis-crystal-design-system/datepicker_v2';\nimport { IRSelectedDatesConfig } from 'mis-crystal-design-system/specificdatepicker';\nimport { IDatePickerConfig as IDateRangePickerConfig } from 'mis-crystal-design-system/daterangepicker_v2';\nimport { HasValuePipe } from '../has-value.pipe';\n\nexport interface FilterOption {\n label: string;\n value: string;\n data?: any[];\n}\n\nexport type FilterType =\n | 'multiSelect'\n | 'select'\n | 'datePicker'\n | 'dateRangePicker'\n | 'checkbox'\n | 'radio'\n | 'text'\n | 'number'\n | 'range';\n\nexport interface FilterPanelConfig {\n key: string;\n title: string;\n type: FilterType;\n options?: FilterOption[];\n placeholder?: string;\n hidden?: boolean;\n datePickerConfig?: IDatePickerConfig;\n dateRangePickerConfig?: IDateRangePickerConfig;\n onChange?: (event: any, config?: FilterPanelConfig[], formValue?: any) => void;\n defaultValue?: any;\n selectedValue?: any;\n}\n\n@Component({\n selector: 'mis-filter-panel',\n templateUrl: './filter-panel.component.html',\n styleUrls: ['./filter-panel.component.scss'],\n animations: [slideFromRight]\n})\nexport class FilterPanelComponent implements OnInit, OnDestroy {\n private isInitialized = false;\n\n constructor(private hasValue: HasValuePipe) {\n // Effect to react to config changes - must allow signal writes since we update internal signals\n effect(() => {\n try {\n const cfg = this.config();\n if (cfg && Array.isArray(cfg) && cfg.length > 0) {\n // Only initialize form if not already done, or if config structure changed\n if (!this.isInitialized || this.hasConfigChanged(cfg)) {\n this.initializeFormControls(cfg);\n this.isInitialized = true;\n }\n // Always check for selectedValue changes\n this.setFilterValue(cfg);\n }\n } catch (error) {\n console.warn('FilterPanel: Error in config effect', error);\n }\n }, { allowSignalWrites: true });\n }\n\n /* --- signal-based Inputs / Outputs --- */\n public show = input<boolean>(false);\n public config = input.required<FilterPanelConfig[]>();\n public emitFiltersAfterSettingNewValues = input<boolean>(false);\n\n public onClose = output<void>();\n public onApply = output<{ filterData: any; filterCount: number }>();\n\n /* --- form + internal state --- */\n filterForm: FormGroup = new FormGroup({});\n private formSubscription?: Subscription;\n\n // keep a signal snapshot of form value so computed can react\n private _formValueSignal: WritableSignal<Record<string, any>> = signal({});\n\n // last applied snapshot (signal so template/logic can read reliably)\n public lastAppliedData: WritableSignal<Record<string, any> | null> = signal(null);\n\n // date range readable for template\n public dateRangeSelectedDates: WritableSignal<IRSelectedDatesConfig> = signal({\n startDate: '',\n endDate: ''\n });\n\n /* computed filterCount */\n public filterCount = computed(() => {\n const formValue = this._formValueSignal();\n const cfg = this.config();\n let count = 0;\n\n for (const filter of cfg) {\n const value = formValue[filter.key];\n\n if (filter.type === 'range') {\n if (value && (value.min !== null || value.max !== null)) {\n count++;\n }\n continue;\n }\n\n if (filter.type === 'multiSelect' || filter.type === 'checkbox') {\n if (Array.isArray(value) && value.length > 0) {\n count++;\n }\n continue;\n }\n\n if (this.hasValue.transform(value)) {\n count++;\n }\n }\n\n return count;\n });\n\n /* --- Lifecycle --- */\n ngOnInit(): void {\n // subscribe form changes so computed/filterCount update\n this.subscribeFormChanges();\n }\n\n ngOnDestroy(): void {\n this.formSubscription?.unsubscribe();\n }\n\n /* --- Form init & helpers --- */\n initializeFormControls(config: FilterPanelConfig[]): void {\n // build a fresh form to match config\n const newForm = new FormGroup({});\n\n const rangeValidator: ValidatorFn = (group: AbstractControl): ValidationErrors | null => {\n const min = (group.get('min') as FormControl)?.value;\n const max = (group.get('max') as FormControl)?.value;\n if (min !== null && max !== null && min > max) {\n return { rangeError: 'Min value should be less than max value' };\n }\n return null;\n };\n\n for (const filter of config) {\n let control: AbstractControl;\n\n switch (filter.type) {\n case 'range':\n control = new FormGroup(\n {\n min: new FormControl(null),\n max: new FormControl(null)\n },\n { validators: rangeValidator }\n );\n break;\n\n case 'multiSelect':\n case 'checkbox':\n control = new FormControl(Array.isArray(filter.defaultValue) ? filter.defaultValue : []);\n break;\n\n case 'select':\n control = new FormControl(filter.defaultValue ?? '');\n break;\n\n default:\n control = new FormControl(filter.defaultValue ?? null);\n }\n\n if (this.hasValue.transform(filter.defaultValue)) {\n control.setValue(filter.defaultValue);\n }\n\n newForm.addControl(filter.key, control);\n }\n\n // replace form safely\n // preserve subscription so valueChanges continues to update _formValueSignal\n this.filterForm = newForm;\n // update signal snapshot immediately\n this._formValueSignal.set({ ...this.filterForm.value });\n\n // re-subscribe to new form's valueChanges\n this.subscribeFormChanges();\n }\n\n private subscribeFormChanges(): void {\n // unsubscribe previous subscription if any\n this.formSubscription?.unsubscribe();\n\n // subscribe to valueChanges; set snapshot signal\n this.formSubscription = this.filterForm.valueChanges?.subscribe((value) => {\n this._formValueSignal.set({ ...value });\n });\n\n // also set initial snapshot in case valueChanges doesn't emit immediately\n this._formValueSignal.set({ ...this.filterForm.value });\n }\n\n private getControl(key: string) {\n return this.filterForm.get(key);\n }\n\n /**\n * Check if config structure has changed (new keys or removed keys)\n * Used to determine if form needs to be rebuilt\n */\n private hasConfigChanged(newConfig: FilterPanelConfig[]): boolean {\n const currentKeys = Object.keys(this.filterForm.controls).sort();\n const newKeys = newConfig.map(f => f.key).sort();\n \n if (currentKeys.length !== newKeys.length) {\n return true;\n }\n \n return currentKeys.some((key, index) => key !== newKeys[index]);\n }\n\n /* --- Actions / UI handlers --- */\n closePanel(): void {\n const last = this.lastAppliedData();\n if (last) {\n try {\n // prefer setValue (ensures shape matches); fallback to patchValue\n this.filterForm.setValue(last);\n } catch {\n this.filterForm.patchValue(last);\n }\n } else {\n this.clearFormValues();\n }\n\n // emit close event\n this.onClose.emit();\n }\n\n applyFilters(): void {\n if (this.filterForm.invalid) {\n this.filterForm.markAllAsTouched();\n return;\n }\n\n const snapshot = { ...this.filterForm.value };\n this.lastAppliedData.set(snapshot);\n\n this.onApply.emit({\n filterData: snapshot,\n filterCount: this.filterCount()\n });\n\n // consistent behavior with earlier implementation:\n // hide panel (parent should read show() to close) and restore form state via closePanel\n // Note: we don't mutate show() here; parent owns show signal\n this.closePanel();\n }\n\n resetFilters(): void {\n this.clearFormValues();\n // call applyFilters to maintain previous behavior (validation + emit)\n this.applyFilters();\n }\n\n /* --- Value setters --- */\n handleSelect(event: any, filterKey: string, filter: FilterPanelConfig): void {\n const ctrl = this.getControl(filterKey);\n \n // For multiSelect, extract values from array of objects (if needed)\n let valueToSet = event;\n if (filter.type === 'multiSelect' && Array.isArray(event)) {\n // Check if it's an array of objects with 'value' property\n if (event.length > 0 && typeof event[0] === 'object' && 'value' in event[0]) {\n valueToSet = event.map((item: any) => item.value || item);\n }\n }\n \n ctrl?.setValue(valueToSet);\n if (filter.onChange) {\n // keep same callback contract: pass event, config and form snapshot\n filter.onChange(event, this.config(), this.filterForm.value);\n }\n }\n\n handleCheckbox(event: any, filterKey: string, checkboxValue: string, filter: FilterPanelConfig): void {\n const ctrl = this.getControl(filterKey);\n const current = Array.isArray(ctrl?.value) ? [...ctrl.value] : [];\n if (event?.value) {\n ctrl?.setValue([...current, checkboxValue]);\n } else {\n ctrl?.setValue(current.filter((v) => v !== checkboxValue));\n }\n\n if (filter.onChange) {\n filter.onChange(event, this.config(), this.filterForm.value);\n }\n }\n\n onDateChange(event: any, filterKey: string, filter: FilterPanelConfig): void {\n const ctrl = this.getControl(filterKey);\n ctrl?.setValue(event);\n\n if (event && typeof event === 'object' && 'startDate' in event && 'endDate' in event) {\n this.dateRangeSelectedDates.set({\n startDate: event.startDate,\n endDate: event.endDate\n });\n }\n }\n\n /* --- Clear / Set values helpers --- */\n clearFormValues(): void {\n const resets: Record<string, any> = {};\n\n for (const filter of this.config()) {\n let defaultValue: any = filter.defaultValue ?? null;\n if (filter.type === 'multiSelect' || filter.type === 'checkbox') {\n defaultValue = filter.defaultValue ?? [];\n }\n if (filter.type === 'range') {\n defaultValue = filter.defaultValue ?? { min: null, max: null };\n }\n resets[filter.key] = defaultValue;\n }\n\n // patch to avoid shape mismatch errors\n this.filterForm.patchValue(resets);\n this._formValueSignal.set({ ...this.filterForm.value });\n }\n\n /**\n * Applies filter.selectedValue when parent provides selectedValue.\n * Called by the config effect (so runs on initial load and on config changes).\n */\n setFilterValue(config: FilterPanelConfig[]): void {\n let anyValueSet = false;\n\n for (const filter of config) {\n if (this.hasValue.transform(filter?.selectedValue)) {\n const ctrl = this.getControl(filter.key);\n if (ctrl) {\n ctrl.setValue(filter.selectedValue);\n anyValueSet = true;\n }\n }\n }\n\n if (anyValueSet && this.emitFiltersAfterSettingNewValues()) {\n // respect the parent flag — apply and emit\n this.applyFilters();\n } else {\n // make sure our snapshot signal is fresh\n this._formValueSignal.set({ ...this.filterForm.value });\n }\n }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'mis-crystal-design-system/button';\nimport { RadioButtonModule } from 'mis-crystal-design-system/radio-button';\nimport { MisInputModule } from \"mis-crystal-design-system/input\";\nimport { CheckboxModule } from 'mis-crystal-design-system/checkbox';\nimport { MultiSelectDropdownModule } from 'mis-crystal-design-system/multi-select-dropdown';\nimport { DatepickerModuleV2 } from 'mis-crystal-design-system/datepicker_v2';\nimport { DateRangepickerModuleV2 } from 'mis-crystal-design-system/daterangepicker_v2';\nimport { FilterPanelComponent } from './filter-panel/filter-panel.component';\nimport { HasValuePipe } from './has-value.pipe';\nimport { DropdownModule } from 'mis-crystal-design-system/dropdown';\n\n@NgModule({\n imports: [\n CommonModule,\n ButtonModule,\n FormsModule,\n ReactiveFormsModule,\n MultiSelectDropdownModule,\n DropdownModule,\n RadioButtonModule,\n MisInputModule,\n DatepickerModuleV2,\n DateRangepickerModuleV2,\n CheckboxModule\n ],\n declarations: [FilterPanelComponent, HasValuePipe],\n providers: [\n HasValuePipe\n ],\n exports: [FilterPanelComponent]\n})\nexport class FiltersModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.HasValuePipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mis-crystal-design-system-filter.mjs","sources":["../../../projects/mis-components/filter/animations/slideFromRight.ts","../../../projects/mis-components/filter/has-value.pipe.ts","../../../projects/mis-components/filter/filter-panel/filter-panel.component.html","../../../projects/mis-components/filter/filter-panel/filter-panel.component.ts","../../../projects/mis-components/filter/filters.module.ts","../../../projects/mis-components/filter/mis-crystal-design-system-filter.ts"],"sourcesContent":["import { trigger, style, animate, transition } from '@angular/animations';\n\nexport const slideFromRight = trigger('slideFromRight', [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('200ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ transform: 'translateX(0)' }))\n ]),\n\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate('200ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ transform: 'translateX(100%)' }))\n ])\n]);\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * HasValuePipe\n * This pipe is use to check given value should not null or undefined \n * Its also check object, Its hould not be empty\n */\n@Pipe({\n name: 'hasValue',\n})\nexport class HasValuePipe implements PipeTransform {\n transform(value: any): any {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n /* This was evaluating dateObject as false*/\n if (value instanceof Date) {\n return true;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length >= 1;\n }\n return value !== null && value !== undefined && value !== '';\n }\n}\n","<div class=\"filter-panel-container\" *ngIf=\"show()\" @slideFromRight>\n <div class=\"panel-header\">\n <span>Filters</span>\n <svg class=\"close-icon\" (click)=\"closePanel()\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"ic-navigation-cancel-24\">\n <path id=\"Union\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.60468 6.64355C8.09036 6.12923 7.25649 6.12923 6.74218 6.64355C6.22787 7.15786 6.22787 7.99173 6.74218 8.50604L10.4938 12.2576L6.7431 16.0083C6.22879 16.5226 6.22879 17.3564 6.7431 17.8708C7.25742 18.3851 8.09129 18.3851 8.60560 17.8708L12.3562 14.1201L16.1068 17.8707C16.6211 18.3850 17.4550 18.3850 17.9693 17.8707C18.4836 17.3564 18.4836 16.5225 17.9693 16.0082L14.2187 12.2576L17.9702 8.50613C18.4845 7.99181 18.4845 7.15794 17.9702 6.64363C17.4559 6.12932 16.6220 6.12932 16.1077 6.64363L12.3562 10.3951L8.60468 6.64355Z\" fill=\"#181F33\" />\n </g>\n </svg>\n </div>\n \n <div class=\"horizontal-divider first\"></div>\n \n <div class=\"filters\" [formGroup]=\"filterForm\">\n <ng-container *ngFor=\"let filter of config(); let last = last\">\n <div class=\"filter\" *ngIf=\"!filter.hidden\">\n <span class=\"filter-title\">{{filter.title}}</span>\n <ng-container *ngIf=\"filter.type === 'multiSelect'\">\n <div class=\"multiselect-filter\">\n <mis-multi-select-dropdown class=\"no-padding\" [label]=\"filter.placeholder || 'Select'\" [selectedItems]=\"filterForm.get(filter.key)?.value || []\" (onChange)=\"handleSelect($event, filter.key, filter)\" [data]=\"filter.options\" [searchEnabled]=\"true\"\n [showSelectedCount]=\"true\" [enableSelectAll]=\"true\"\n [hideApplyButton]=\"false\" width=\"100%\" height=\"44px\"></mis-multi-select-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'select'\">\n <div class=\"multiselect-filter\">\n <mis-dropdown [data]=\"filter.options\" [searchEnabled]=\"true\" width=\"100%\" height=\"44px\"\n (onChange)=\"handleSelect($event, filter.key, filter)\" [selectedItem]=\"filterForm.get(filter.key)?.value\">\n </mis-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'checkbox'\">\n <div class=\"checkbox-row\">\n <div *ngFor=\"let option of filter.options\" class=\"checkbox-container\">\n <mis-checkbox [type]=\"'Default'\" [checked]=\"filterForm.get(filter.key)?.value?.includes(option.value)\" (valueChange)=\"handleCheckbox($event, filter.key, option.value, filter)\"></mis-checkbox>\n <span class=\"checkbox-label\">{{option.label}}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'datePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDp misInput type=\"text\" readonly class=\"mis-input\" [dpConfig]=\"filter.datePickerConfig\" [placeholder]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" [value]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" (dateChange)=\"onDateChange($event, filter.key, filter)\" [selectedDate]=\"filterForm.get(filter.key)?.value\" [positionX]=\"'end'\" [offsetX]=\"-10\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'dateRangePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDrp misInput type=\"text\" class=\"mis-input\" readonly\n [placeholder]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\"\n [value]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\" [positionX]=\"'start'\"\n [positionY]=\"'top'\" [selectedDates]=\"dateRangeSelectedDates()\" (dateChange)=\"onDateChange($event, filter.key, filter)\"\n [dpConfig]=\"filter.dateRangePickerConfig\" />\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'text'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"text\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'number'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"number\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'range'\">\n <div class=\"range-container\" [formGroup]=\"filterForm.get(filter.key)\">\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[0]?.label || 'Min' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"min\"\n />\n </div>\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[1]?.label || 'Max' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"max\"\n [min]=\"filterForm.get(filter.key)?.get('min')?.value || 0\"\n />\n </div>\n </div>\n </ng-container>\n <div class=\"horizontal-divider\" *ngIf=\"!last\"></div>\n </div>\n </ng-container>\n </div>\n \n <div class=\"actions\">\n <mis-button [name]=\"'Clear All'\" [size]=\"'Small'\" [type]=\"'Text'\" (click)=\"resetFilters()\"></mis-button>\n <mis-button [name]=\"'Apply'\" [size]=\"'Small'\" [type]=\"'Solid'\" (click)=\"applyFilters()\" [disabled]=\"filterForm.invalid\"></mis-button>\n </div>\n </div>","import {\n Component,\n OnInit,\n OnDestroy,\n effect,\n signal,\n computed,\n input,\n output,\n WritableSignal\n} from '@angular/core';\nimport { FormControl, FormGroup, AbstractControl, ValidatorFn, ValidationErrors } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { slideFromRight } from '../animations/slideFromRight';\nimport { IDatePickerConfig } from 'mis-crystal-design-system/datepicker_v2';\nimport { IRSelectedDatesConfig } from 'mis-crystal-design-system/specificdatepicker';\nimport { IDatePickerConfig as IDateRangePickerConfig } from 'mis-crystal-design-system/daterangepicker_v2';\nimport { HasValuePipe } from '../has-value.pipe';\n\nexport interface FilterOption {\n label: string;\n value: string;\n data?: any[];\n}\n\nexport type FilterType =\n | 'multiSelect'\n | 'select'\n | 'datePicker'\n | 'dateRangePicker'\n | 'checkbox'\n | 'radio'\n | 'text'\n | 'number'\n | 'range';\n\nexport interface FilterPanelConfig {\n key: string;\n title: string;\n type: FilterType;\n options?: FilterOption[];\n placeholder?: string;\n hidden?: boolean;\n datePickerConfig?: IDatePickerConfig;\n dateRangePickerConfig?: IDateRangePickerConfig;\n onChange?: (event: any, config?: FilterPanelConfig[], formValue?: any) => void;\n defaultValue?: any;\n selectedValue?: any;\n}\n\n@Component({\n selector: 'mis-filter-panel',\n templateUrl: './filter-panel.component.html',\n styleUrls: ['./filter-panel.component.scss'],\n animations: [slideFromRight]\n})\nexport class FilterPanelComponent implements OnInit, OnDestroy {\n private isInitialized = false;\n\n constructor(private hasValue: HasValuePipe) {\n // Effect to react to config changes - must allow signal writes since we update internal signals\n effect(() => {\n try {\n const cfg = this.config();\n if (cfg && Array.isArray(cfg) && cfg.length > 0) {\n // Only initialize form if not already done, or if config structure changed\n if (!this.isInitialized || this.hasConfigChanged(cfg)) {\n this.initializeFormControls(cfg);\n this.isInitialized = true;\n }\n // Always check for selectedValue changes\n this.setFilterValue(cfg);\n }\n } catch (error) {\n console.warn('FilterPanel: Error in config effect', error);\n }\n }, { allowSignalWrites: true });\n }\n\n /* --- signal-based Inputs / Outputs --- */\n public show = input<boolean>(false);\n public config = input.required<FilterPanelConfig[]>();\n public emitFiltersAfterSettingNewValues = input<boolean>(false);\n\n public onClose = output<void>();\n public onApply = output<{ filterData: any; filterCount: number }>();\n\n /* --- form + internal state --- */\n filterForm: FormGroup = new FormGroup({});\n private formSubscription?: Subscription;\n\n // keep a signal snapshot of form value so computed can react\n private _formValueSignal: WritableSignal<Record<string, any>> = signal({});\n\n // last applied snapshot (signal so template/logic can read reliably)\n public lastAppliedData: WritableSignal<Record<string, any> | null> = signal(null);\n\n // date range readable for template\n public dateRangeSelectedDates: WritableSignal<IRSelectedDatesConfig> = signal({\n startDate: '',\n endDate: ''\n });\n\n /* computed filterCount */\n public filterCount = computed(() => {\n const formValue = this._formValueSignal();\n const cfg = this.config();\n let count = 0;\n\n for (const filter of cfg) {\n const value = formValue[filter.key];\n\n if (filter.type === 'range') {\n if (value && (value.min !== null || value.max !== null)) {\n count++;\n }\n continue;\n }\n\n if (filter.type === 'multiSelect' || filter.type === 'checkbox') {\n if (Array.isArray(value) && value.length > 0) {\n count++;\n }\n continue;\n }\n\n if (this.hasValue.transform(value)) {\n count++;\n }\n }\n\n return count;\n });\n\n /* --- Lifecycle --- */\n ngOnInit(): void {\n // subscribe form changes so computed/filterCount update\n this.subscribeFormChanges();\n }\n\n ngOnDestroy(): void {\n this.formSubscription?.unsubscribe();\n }\n\n /* --- Form init & helpers --- */\n initializeFormControls(config: FilterPanelConfig[]): void {\n // build a fresh form to match config\n const newForm = new FormGroup({});\n\n const rangeValidator: ValidatorFn = (group: AbstractControl): ValidationErrors | null => {\n const min = (group.get('min') as FormControl)?.value;\n const max = (group.get('max') as FormControl)?.value;\n if (min !== null && max !== null && min > max) {\n return { rangeError: 'Min value should be less than max value' };\n }\n return null;\n };\n\n for (const filter of config) {\n let control: AbstractControl;\n\n switch (filter.type) {\n case 'range':\n control = new FormGroup(\n {\n min: new FormControl(null),\n max: new FormControl(null)\n },\n { validators: rangeValidator }\n );\n break;\n\n case 'multiSelect':\n case 'checkbox':\n control = new FormControl(Array.isArray(filter.defaultValue) ? filter.defaultValue : []);\n break;\n\n case 'select':\n control = new FormControl(filter.defaultValue ?? '');\n break;\n\n default:\n control = new FormControl(filter.defaultValue ?? null);\n }\n\n if (this.hasValue.transform(filter.defaultValue)) {\n control.setValue(filter.defaultValue);\n }\n\n newForm.addControl(filter.key, control);\n }\n\n // replace form safely\n // preserve subscription so valueChanges continues to update _formValueSignal\n this.filterForm = newForm;\n // update signal snapshot immediately\n this._formValueSignal.set({ ...this.filterForm.value });\n\n // re-subscribe to new form's valueChanges\n this.subscribeFormChanges();\n }\n\n private subscribeFormChanges(): void {\n // unsubscribe previous subscription if any\n this.formSubscription?.unsubscribe();\n\n // subscribe to valueChanges; set snapshot signal\n this.formSubscription = this.filterForm.valueChanges?.subscribe((value) => {\n this._formValueSignal.set({ ...value });\n });\n\n // also set initial snapshot in case valueChanges doesn't emit immediately\n this._formValueSignal.set({ ...this.filterForm.value });\n }\n\n private getControl(key: string) {\n return this.filterForm.get(key);\n }\n\n /**\n * Check if config structure has changed (new keys or removed keys)\n * Used to determine if form needs to be rebuilt\n */\n private hasConfigChanged(newConfig: FilterPanelConfig[]): boolean {\n const currentKeys = Object.keys(this.filterForm.controls).sort();\n const newKeys = newConfig.map(f => f.key).sort();\n \n if (currentKeys.length !== newKeys.length) {\n return true;\n }\n \n return currentKeys.some((key, index) => key !== newKeys[index]);\n }\n\n /* --- Actions / UI handlers --- */\n closePanel(): void {\n const last = this.lastAppliedData();\n if (last) {\n try {\n // prefer setValue (ensures shape matches); fallback to patchValue\n this.filterForm.setValue(last);\n } catch {\n this.filterForm.patchValue(last);\n }\n } else {\n this.clearFormValues();\n }\n\n // emit close event\n this.onClose.emit();\n }\n\n applyFilters(): void {\n if (this.filterForm.invalid) {\n this.filterForm.markAllAsTouched();\n return;\n }\n \n // Create a copy of the form value\n const snapshot = { ...this.filterForm.value };\n \n // OPTIONAL: Map objects back to values for the Output emission \n // so the parent receives clean data (['LOGIN'] instead of [{label:..., value: 'LOGIN'}])\n const cleanSnapshot = this.mapValuesForEmission(snapshot);\n \n this.lastAppliedData.set(snapshot); // Keep objects for UI state\n \n this.onApply.emit({\n filterData: cleanSnapshot, // Emit values\n filterCount: this.filterCount()\n });\n \n this.closePanel();\n }\n \n // Helper to clean up data before emitting\n private mapValuesForEmission(formValue: any): any {\n const cleanData = { ...formValue };\n const cfg = this.config();\n \n cfg.forEach(filter => {\n const value = cleanData[filter.key];\n \n if (filter.type === 'multiSelect' && Array.isArray(value)) {\n cleanData[filter.key] = value; \n }\n });\n \n return cleanData;\n }\n \n \n \n\n resetFilters(): void {\n this.clearFormValues();\n // call applyFilters to maintain previous behavior (validation + emit)\n this.applyFilters();\n }\n\n /* --- Value setters --- */\n// filter-panel.component.ts\n\nhandleSelect(event: any, filterKey: string, filter: FilterPanelConfig): void {\n const ctrl = this.getControl(filterKey);\n \n // FIX: Do not strip the value here. Store the full object so the UI \n // can match it against the data list when re-rendering.\n let valueToSet = event;\n\n /* // COMMENTED OUT OR REMOVED THIS BLOCK\n if (filter.type === 'multiSelect' && Array.isArray(event)) {\n if (event.length > 0 && typeof event[0] === 'object' && 'value' in event[0]) {\n valueToSet = event.map((item: any) => item.value || item);\n }\n }\n */\n \n ctrl?.setValue(valueToSet);\n\n if (filter.onChange) {\n filter.onChange(event, this.config(), this.filterForm.value);\n }\n}\n\n\n\n handleCheckbox(event: any, filterKey: string, checkboxValue: string, filter: FilterPanelConfig): void {\n const ctrl = this.getControl(filterKey);\n const current = Array.isArray(ctrl?.value) ? [...ctrl.value] : [];\n if (event?.value) {\n ctrl?.setValue([...current, checkboxValue]);\n } else {\n ctrl?.setValue(current.filter((v) => v !== checkboxValue));\n }\n\n if (filter.onChange) {\n filter.onChange(event, this.config(), this.filterForm.value);\n }\n }\n\n onDateChange(event: any, filterKey: string, filter: FilterPanelConfig): void {\n const ctrl = this.getControl(filterKey);\n ctrl?.setValue(event);\n\n if (event && typeof event === 'object' && 'startDate' in event && 'endDate' in event) {\n this.dateRangeSelectedDates.set({\n startDate: event.startDate,\n endDate: event.endDate\n });\n }\n }\n\n /* --- Clear / Set values helpers --- */\n clearFormValues(): void {\n const resets: Record<string, any> = {};\n\n for (const filter of this.config()) {\n let defaultValue: any = filter.defaultValue ?? null;\n if (filter.type === 'multiSelect' || filter.type === 'checkbox') {\n defaultValue = filter.defaultValue ?? [];\n }\n if (filter.type === 'range') {\n defaultValue = filter.defaultValue ?? { min: null, max: null };\n }\n resets[filter.key] = defaultValue;\n }\n\n // patch to avoid shape mismatch errors\n this.filterForm.patchValue(resets);\n this._formValueSignal.set({ ...this.filterForm.value });\n }\n\n /**\n * Applies filter.selectedValue when parent provides selectedValue.\n * Called by the config effect (so runs on initial load and on config changes).\n */\n setFilterValue(config: FilterPanelConfig[]): void {\n let anyValueSet = false;\n\n for (const filter of config) {\n if (this.hasValue.transform(filter?.selectedValue)) {\n const ctrl = this.getControl(filter.key);\n if (ctrl) {\n ctrl.setValue(filter.selectedValue);\n anyValueSet = true;\n }\n }\n }\n\n if (anyValueSet && this.emitFiltersAfterSettingNewValues()) {\n // respect the parent flag — apply and emit\n this.applyFilters();\n } else {\n // make sure our snapshot signal is fresh\n this._formValueSignal.set({ ...this.filterForm.value });\n }\n }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'mis-crystal-design-system/button';\nimport { RadioButtonModule } from 'mis-crystal-design-system/radio-button';\nimport { MisInputModule } from \"mis-crystal-design-system/input\";\nimport { CheckboxModule } from 'mis-crystal-design-system/checkbox';\nimport { MultiSelectDropdownModule } from 'mis-crystal-design-system/multi-select-dropdown';\nimport { DatepickerModuleV2 } from 'mis-crystal-design-system/datepicker_v2';\nimport { DateRangepickerModuleV2 } from 'mis-crystal-design-system/daterangepicker_v2';\nimport { FilterPanelComponent } from './filter-panel/filter-panel.component';\nimport { HasValuePipe } from './has-value.pipe';\nimport { DropdownModule } from 'mis-crystal-design-system/dropdown';\n\n@NgModule({\n imports: [\n CommonModule,\n ButtonModule,\n FormsModule,\n ReactiveFormsModule,\n MultiSelectDropdownModule,\n DropdownModule,\n RadioButtonModule,\n MisInputModule,\n DatepickerModuleV2,\n DateRangepickerModuleV2,\n CheckboxModule\n ],\n declarations: [FilterPanelComponent, HasValuePipe],\n providers: [\n HasValuePipe\n ],\n exports: [FilterPanelComponent]\n})\nexport class FiltersModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.HasValuePipe"],"mappings":"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"}
|
|
@@ -54,6 +54,7 @@ export declare class FilterPanelComponent implements OnInit, OnDestroy {
|
|
|
54
54
|
private hasConfigChanged;
|
|
55
55
|
closePanel(): void;
|
|
56
56
|
applyFilters(): void;
|
|
57
|
+
private mapValuesForEmission;
|
|
57
58
|
resetFilters(): void;
|
|
58
59
|
handleSelect(event: any, filterKey: string, filter: FilterPanelConfig): void;
|
|
59
60
|
handleCheckbox(event: any, filterKey: string, checkboxValue: string, filter: FilterPanelConfig): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mis-crystal-design-system",
|
|
3
|
-
"version": "18.1.
|
|
3
|
+
"version": "18.1.12",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "*",
|
|
6
6
|
"@angular/core": "*",
|
|
@@ -34,29 +34,29 @@
|
|
|
34
34
|
"esm": "./esm2022/analytics/mis-crystal-design-system-analytics.mjs",
|
|
35
35
|
"default": "./fesm2022/mis-crystal-design-system-analytics.mjs"
|
|
36
36
|
},
|
|
37
|
+
"./button": {
|
|
38
|
+
"types": "./button/index.d.ts",
|
|
39
|
+
"esm2022": "./esm2022/button/mis-crystal-design-system-button.mjs",
|
|
40
|
+
"esm": "./esm2022/button/mis-crystal-design-system-button.mjs",
|
|
41
|
+
"default": "./fesm2022/mis-crystal-design-system-button.mjs"
|
|
42
|
+
},
|
|
37
43
|
"./async-search-dropdown": {
|
|
38
44
|
"types": "./async-search-dropdown/index.d.ts",
|
|
39
45
|
"esm2022": "./esm2022/async-search-dropdown/mis-crystal-design-system-async-search-dropdown.mjs",
|
|
40
46
|
"esm": "./esm2022/async-search-dropdown/mis-crystal-design-system-async-search-dropdown.mjs",
|
|
41
47
|
"default": "./fesm2022/mis-crystal-design-system-async-search-dropdown.mjs"
|
|
42
48
|
},
|
|
43
|
-
"./checkbox": {
|
|
44
|
-
"types": "./checkbox/index.d.ts",
|
|
45
|
-
"esm2022": "./esm2022/checkbox/mis-crystal-design-system-checkbox.mjs",
|
|
46
|
-
"esm": "./esm2022/checkbox/mis-crystal-design-system-checkbox.mjs",
|
|
47
|
-
"default": "./fesm2022/mis-crystal-design-system-checkbox.mjs"
|
|
48
|
-
},
|
|
49
49
|
"./chip": {
|
|
50
50
|
"types": "./chip/index.d.ts",
|
|
51
51
|
"esm2022": "./esm2022/chip/mis-crystal-design-system-chip.mjs",
|
|
52
52
|
"esm": "./esm2022/chip/mis-crystal-design-system-chip.mjs",
|
|
53
53
|
"default": "./fesm2022/mis-crystal-design-system-chip.mjs"
|
|
54
54
|
},
|
|
55
|
-
"./
|
|
56
|
-
"types": "./
|
|
57
|
-
"esm2022": "./esm2022/
|
|
58
|
-
"esm": "./esm2022/
|
|
59
|
-
"default": "./fesm2022/mis-crystal-design-system-
|
|
55
|
+
"./checkbox": {
|
|
56
|
+
"types": "./checkbox/index.d.ts",
|
|
57
|
+
"esm2022": "./esm2022/checkbox/mis-crystal-design-system-checkbox.mjs",
|
|
58
|
+
"esm": "./esm2022/checkbox/mis-crystal-design-system-checkbox.mjs",
|
|
59
|
+
"default": "./fesm2022/mis-crystal-design-system-checkbox.mjs"
|
|
60
60
|
},
|
|
61
61
|
"./datepicker_v2": {
|
|
62
62
|
"types": "./datepicker_v2/index.d.ts",
|