@fovestta2/web-angular 1.0.23 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/fv-document-field/fv-document-field.component.mjs +38 -6
- package/esm2022/lib/fv-file-selector/fv-file-selector.component.mjs +34 -4
- package/esm2022/lib/fv-image-selector/fv-image-selector.component.mjs +22 -4
- package/esm2022/lib/fv-name-code/fv-name-code.component.mjs +7 -2
- package/fesm2022/fovestta2-web-angular.mjs +97 -12
- package/fesm2022/fovestta2-web-angular.mjs.map +1 -1
- package/lib/fv-document-field/fv-document-field.component.d.ts +2 -0
- package/lib/fv-file-selector/fv-file-selector.component.d.ts +1 -0
- package/lib/fv-image-selector/fv-image-selector.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -93,13 +93,18 @@ export class FvNameCodeComponent {
|
|
|
93
93
|
this.highlightedIndex = -1;
|
|
94
94
|
}
|
|
95
95
|
writeValue(value) {
|
|
96
|
+
if (value === this.value) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
96
99
|
this.value = value;
|
|
97
100
|
const selectedOption = this.options.find(o => o.value === value);
|
|
98
101
|
if (selectedOption) {
|
|
99
102
|
this.searchControl.setValue(`${selectedOption.code} - ${selectedOption.name}`, { emitEvent: false });
|
|
100
103
|
}
|
|
101
104
|
else {
|
|
102
|
-
|
|
105
|
+
if (value === null || value === undefined || value === '') {
|
|
106
|
+
this.searchControl.setValue('', { emitEvent: false });
|
|
107
|
+
}
|
|
103
108
|
}
|
|
104
109
|
}
|
|
105
110
|
registerOnChange(fn) {
|
|
@@ -318,4 +323,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
318
323
|
type: HostListener,
|
|
319
324
|
args: ['keydown', ['$event']]
|
|
320
325
|
}] } });
|
|
321
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnYtbmFtZS1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z2LWNvbnRyb2xzL3NyYy9saWIvZnYtbmFtZS1jb2RlL2Z2LW5hbWUtY29kZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBYyxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQTRMM0csTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsT0FBTyxHQUF5QixFQUFFLENBQUM7SUFDbkMsTUFBTSxDQUFvQjtJQUMxQixPQUFPLENBQWU7SUFDdEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUV6QixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUVoRCxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsZUFBZSxHQUF5QixFQUFFLENBQUM7SUFDM0MsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixnQkFBZ0IsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUV0QixRQUFRLEdBQXlCLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxTQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTFDLEtBQUssR0FBUSxJQUFJLENBQUM7SUFFbEIsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFB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STt5QkFDWjtxQkFDRjs4QkFHUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBNkpQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTMUMsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2NoZW1hIH0gZnJvbSAnQGZvdmVzdHRhMi92YWxpZGF0aW9uLWVuZ2luZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFNlbGVjdE9wdGlvbiB7XHJcbiAgY29kZTogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z2LW5hbWUtY29kZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImZ2LW5hbWUtY29kZS1jb250YWluZXJcIj5cclxuICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImZ2LWxhYmVsXCI+XHJcbiAgICAgICAge3sgbGFiZWwgfX1cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiIGNsYXNzPVwicmVxdWlyZWQtYXN0ZXJpc2tcIj4qPC9zcGFuPlxyXG4gICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ib3gtd3JhcHBlclwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmdi1pbnB1dFwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKHNlYXJjaENvbnRyb2wudmFsdWUgfHwgaXNPcGVuKSA/ICcnIDogKHBsYWNlaG9sZGVyIHx8ICdTZWFyY2ggYnkgQ29kZSBvciBOYW1lJylcIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaENvbnRyb2xcIlxyXG4gICAgICAgICAgKGZvY3VzKT1cIm9wZW5Ecm9wZG93bigpXCJcclxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJpc0ludmFsaWQoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbGlzdFwiICpuZ0lmPVwiaXNPcGVuICYmICFkaXNhYmxlZFwiPlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgIFtjbGFzcy5oaWdobGlnaHRlZF09XCJpID09PSBoaWdobGlnaHRlZEluZGV4XCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0aW9uKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2RlXCI+e3sgb3B0aW9uLmNvZGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBvcHRpb24ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0c1wiICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgTm8gcmVzdWx0cyBmb3VuZFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc0ludmFsaWQoKVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgIOKaoCB7eyBnZXRFcnJvck1lc3NhZ2UoKSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9UG9wcGluczp3Z2h0QDMwMDs0MDA7NTAwOzYwMDs3MDAmZGlzcGxheT1zd2FwJyk7XHJcblxyXG4gICAgKiB7IGZvbnQtZmFtaWx5OiAnUG9wcGlucycsIHNhbnMtc2VyaWY7IH1cclxuXHJcbiAgICAuZnYtbmFtZS1jb2RlLWNvbnRhaW5lciB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmZ2LWxhYmVsIHtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICMxNTFENDg7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDtcclxuICAgIH1cclxuXHJcbiAgICAucmVxdWlyZWQtYXN0ZXJpc2sge1xyXG4gICAgICBjb2xvcjogI2U3NGMzYztcclxuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcclxuICAgIH1cclxuXHJcbiAgICAuc2VhcmNoLWJveC13cmFwcGVyIHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC5mdi1pbnB1dCB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBwYWRkaW5nOiA1cHggMTBweDtcclxuICAgICAgaGVpZ2h0OiAzNHB4O1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjOENCQkE4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgY29sb3I6ICMxZjJiNDE7XHJcbiAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBmb250LWZhbWlseTogJ1BvcHBpbnMnLCBzYW5zLXNlcmlmO1xyXG4gICAgICBtaW4td2lkdGg6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmZ2LWlucHV0OmZvY3VzIHtcclxuICAgICAgYm9yZGVyLWNvbG9yOiAjMzQ5OGRiO1xyXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSg1MiwgMTUyLCAyMTksIDAuMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLmZ2LWlucHV0LmVycm9yIHtcclxuICAgICAgYm9yZGVyLWNvbG9yOiAjZTc0YzNjO1xyXG4gICAgfVxyXG5cclxuICAgIC5mdi1pbnB1dDpkaXNhYmxlZCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XHJcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmRyb3Bkb3duLWxpc3Qge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMTAwJTtcclxuICAgICAgbGVmdDogMDtcclxuICAgICAgbWluLXdpZHRoOiAxMDAlO1xyXG4gICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XHJcbiAgICAgIG1heC13aWR0aDogMzAwcHg7XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDRweDtcclxuICAgICAgbWF4LWhlaWdodDogMjAwcHg7XHJcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgICAgei1pbmRleDogMTAwMDtcclxuICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwwLDAsMC4xKTtcclxuICAgIH1cclxuXHJcbiAgICAuZHJvcGRvd24taXRlbSB7XHJcbiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1xyXG4gICAgICBnYXA6IDEycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmRyb3Bkb3duLWl0ZW06aG92ZXIsIC5kcm9wZG93bi1pdGVtLmhpZ2hsaWdodGVkIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjdmZjtcclxuICAgIH1cclxuXHJcbiAgICAuY29kZSB7XHJcbiAgICAgIGNvbG9yOiAjMDA1NmIzO1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLm5hbWUge1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vLXJlc3VsdHMge1xyXG4gICAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgICBjb2xvcjogIzk5OTtcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmVycm9yLW1lc3NhZ2Uge1xyXG4gICAgICBjb2xvcjogI2U3NGMzYztcclxuICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICBtYXJnaW4tdG9wOiA0cHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGdhcDogNHB4O1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRnZOYW1lQ29kZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnZOYW1lQ29kZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgb3B0aW9uczogU2VhcmNoU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBASW5wdXQoKSBzY2hlbWE/OiBWYWxpZGF0aW9uU2NoZW1hO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2w/OiBGb3JtQ29udHJvbDtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgZmlsdGVyZWRPcHRpb25zOiBTZWFyY2hTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpZ2hsaWdodGVkSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgdmFsdWU6IGFueSA9IG51bGw7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10pIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBudWxsICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0ZXJtID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKHRlcm0gfHwgJycpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlICE9PSBudWxsICYmIHRoaXMuY29udHJvbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2wuZGlzYWJsZWQgIT09IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLnNldERpc2FibGVkU3RhdGUodGhpcy5jb250cm9sLmRpc2FibGVkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsdGVyT3B0aW9ucyh0ZXJtOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGVybSkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG93ZXJUZXJtID0gdGVybS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdCA9PlxyXG4gICAgICBvcHQuY29kZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyVGVybSkgfHxcclxuICAgICAgb3B0Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclRlcm0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3BlbkRyb3Bkb3duKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZSB8fCAnJyk7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSA/IDAgOiAtMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmx1cigpIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZURyb3Bkb3duKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShgJHtzZWxlY3RlZE9wdGlvbi5jb2RlfSAtICR7c2VsZWN0ZWRPcHRpb24ubmFtZX1gLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IFNlYXJjaFNlbGVjdE9wdGlvbikge1xyXG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcclxuICAgIHRoaXMudmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICB0aGlzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoYCR7b3B0aW9uLmNvZGV9IC0gJHtvcHRpb24ubmFtZX1gLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gLTE7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQobyA9PiBvLnZhbHVlID09PSB2YWx1ZSk7XHJcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKGAke3NlbGVjdGVkT3B0aW9uLmNvZGV9IC0gJHtzZWxlY3RlZE9wdGlvbi5uYW1lfWAsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sLmludmFsaWQgJiYgKHRoaXMuY29udHJvbC5kaXJ0eSB8fCB0aGlzLmNvbnRyb2wudG91Y2hlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5ydWxlcz8uc29tZShyID0+IHIubmFtZSA9PT0gJ3JlcXVpcmVkJykgfHwgZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5jb250cm9sIHx8ICF0aGlzLmNvbnRyb2wuZXJyb3JzIHx8ICF0aGlzLnNjaGVtYSkgcmV0dXJuICcnO1xyXG5cclxuICAgIGZvciAoY29uc3QgZXJyb3JLZXkgb2YgdGhpcy5zY2hlbWEuZXJyb3JQcmlvcml0eSkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9sLmhhc0Vycm9yKGVycm9yS2V5KSkge1xyXG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnNjaGVtYS5ydWxlcy5maW5kKHIgPT4gci5uYW1lID09PSAoZXJyb3JLZXkgPT09ICdyZXF1aXJlZCcgPyAncmVxdWlyZWQnIDogZXJyb3JLZXkpKTtcclxuICAgICAgICBpZiAocnVsZSkgcmV0dXJuIHRoaXMuZ2V0UmVhZGFibGVFcnJvcihydWxlLmVycm9yS2V5IHx8ICcnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkgcmV0dXJuICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJztcclxuXHJcbiAgICByZXR1cm4gJ0ludmFsaWQgdmFsdWUnO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVhZGFibGVFcnJvcihrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICAgICdFUlJfUkVRVUlSRUQnOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcsXHJcbiAgICAgICdFUlJfTUlOX0xFTkdUSCc6ICdWYWx1ZSBpcyB0b28gc2hvcnQnLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBtYXBba2V5XSB8fCAnSW52YWxpZCB2YWx1ZSc7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuZnYtbmFtZS1jb2RlLWNvbnRhaW5lcicpO1xyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuICYmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykpIHtcclxuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gKHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9IaWdobGlnaHRlZCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9ICh0aGlzLmhpZ2hsaWdodGVkSW5kZXggLSAxICsgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSAlIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvSGlnaGxpZ2h0ZWQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb24odGhpcy5maWx0ZXJlZE9wdGlvbnNbMF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oaWdobGlnaHRlZEluZGV4ID49IDAgJiYgdGhpcy5oaWdobGlnaHRlZEluZGV4IDwgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbih0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1RhYic6XHJcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvSGlnaGxpZ2h0ZWQoKSB7XHJcbiAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duLWxpc3QnKTtcclxuICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcGRvd24taXRlbScpW3RoaXMuaGlnaGxpZ2h0ZWRJbmRleF07XHJcbiAgICBpZiAobGlzdCAmJiBpdGVtKSB7XHJcbiAgICAgIGNvbnN0IGxpc3RSZWN0ID0gbGlzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgY29uc3QgaXRlbVJlY3QgPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgaWYgKGl0ZW1SZWN0LmJvdHRvbSA+IGxpc3RSZWN0LmJvdHRvbSkge1xyXG4gICAgICAgIGxpc3Quc2Nyb2xsVG9wICs9IChpdGVtUmVjdC5ib3R0b20gLSBsaXN0UmVjdC5ib3R0b20pO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW1SZWN0LnRvcCA8IGxpc3RSZWN0LnRvcCkge1xyXG4gICAgICAgIGxpc3Quc2Nyb2xsVG9wIC09IChsaXN0UmVjdC50b3AgLSBpdGVtUmVjdC50b3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnYtbmFtZS1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z2LWNvbnRyb2xzL3NyYy9saWIvZnYtbmFtZS1jb2RlL2Z2LW5hbWUtY29kZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBYyxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQTRMM0csTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsT0FBTyxHQUF5QixFQUFFLENBQUM7SUFDbkMsTUFBTSxDQUFvQjtJQUMxQixPQUFPLENBQWU7SUFDdEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUV6QixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUVoRCxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsZUFBZSxHQUF5QixFQUFFLENBQUM7SUFDM0MsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixnQkFBZ0IsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUV0QixRQUFRLEdBQXlCLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxTQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTFDLEtBQUssR0FBUSxJQUFJLENBQUM7SUFFbEIsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFB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WUFDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NULGFBaUlVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFHUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBa0tQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTMUMsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2NoZW1hIH0gZnJvbSAnQGZvdmVzdHRhMi92YWxpZGF0aW9uLWVuZ2luZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFNlbGVjdE9wdGlvbiB7XHJcbiAgY29kZTogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z2LW5hbWUtY29kZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImZ2LW5hbWUtY29kZS1jb250YWluZXJcIj5cclxuICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImZ2LWxhYmVsXCI+XHJcbiAgICAgICAge3sgbGFiZWwgfX1cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiIGNsYXNzPVwicmVxdWlyZWQtYXN0ZXJpc2tcIj4qPC9zcGFuPlxyXG4gICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ib3gtd3JhcHBlclwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmdi1pbnB1dFwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKHNlYXJjaENvbnRyb2wudmFsdWUgfHwgaXNPcGVuKSA/ICcnIDogKHBsYWNlaG9sZGVyIHx8ICdTZWFyY2ggYnkgQ29kZSBvciBOYW1lJylcIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaENvbnRyb2xcIlxyXG4gICAgICAgICAgKGZvY3VzKT1cIm9wZW5Ecm9wZG93bigpXCJcclxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJpc0ludmFsaWQoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbGlzdFwiICpuZ0lmPVwiaXNPcGVuICYmICFkaXNhYmxlZFwiPlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgIFtjbGFzcy5oaWdobGlnaHRlZF09XCJpID09PSBoaWdobGlnaHRlZEluZGV4XCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0aW9uKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2RlXCI+e3sgb3B0aW9uLmNvZGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBvcHRpb24ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0c1wiICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgTm8gcmVzdWx0cyBmb3VuZFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc0ludmFsaWQoKVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgIOKaoCB7eyBnZXRFcnJvck1lc3NhZ2UoKSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9UG9wcGluczp3Z2h0QDMwMDs0MDA7NTAwOzYwMDs3MDAmZGlzcGxheT1zd2FwJyk7XHJcblxyXG4gICAgKiB7IGZvbnQtZmFtaWx5OiAnUG9wcGlucycsIHNhbnMtc2VyaWY7IH1cclxuXHJcbiAgICAuZnYtbmFtZS1jb2RlLWNvbnRhaW5lciB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmZ2LWxhYmVsIHtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICMxNTFENDg7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDtcclxuICAgIH1cclxuXHJcbiAgICAucmVxdWlyZWQtYXN0ZXJpc2sge1xyXG4gICAgICBjb2xvcjogI2U3NGMzYztcclxuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcclxuICAgIH1cclxuXHJcbiAgICAuc2VhcmNoLWJveC13cmFwcGVyIHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC5mdi1pbnB1dCB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBwYWRkaW5nOiA1cHggMTBweDtcclxuICAgICAgaGVpZ2h0OiAzNHB4O1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjOENCQkE4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgY29sb3I6ICMxZjJiNDE7XHJcbiAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBmb250LWZhbWlseTogJ1BvcHBpbnMnLCBzYW5zLXNlcmlmO1xyXG4gICAgICBtaW4td2lkdGg6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmZ2LWlucHV0OmZvY3VzIHtcclxuICAgICAgYm9yZGVyLWNvbG9yOiAjMzQ5OGRiO1xyXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSg1MiwgMTUyLCAyMTksIDAuMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLmZ2LWlucHV0LmVycm9yIHtcclxuICAgICAgYm9yZGVyLWNvbG9yOiAjZTc0YzNjO1xyXG4gICAgfVxyXG5cclxuICAgIC5mdi1pbnB1dDpkaXNhYmxlZCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XHJcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmRyb3Bkb3duLWxpc3Qge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMTAwJTtcclxuICAgICAgbGVmdDogMDtcclxuICAgICAgbWluLXdpZHRoOiAxMDAlO1xyXG4gICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XHJcbiAgICAgIG1heC13aWR0aDogMzAwcHg7XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDRweDtcclxuICAgICAgbWF4LWhlaWdodDogMjAwcHg7XHJcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgICAgei1pbmRleDogMTAwMDtcclxuICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwwLDAsMC4xKTtcclxuICAgIH1cclxuXHJcbiAgICAuZHJvcGRvd24taXRlbSB7XHJcbiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1xyXG4gICAgICBnYXA6IDEycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmRyb3Bkb3duLWl0ZW06aG92ZXIsIC5kcm9wZG93bi1pdGVtLmhpZ2hsaWdodGVkIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjdmZjtcclxuICAgIH1cclxuXHJcbiAgICAuY29kZSB7XHJcbiAgICAgIGNvbG9yOiAjMDA1NmIzO1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLm5hbWUge1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vLXJlc3VsdHMge1xyXG4gICAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgICBjb2xvcjogIzk5OTtcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmVycm9yLW1lc3NhZ2Uge1xyXG4gICAgICBjb2xvcjogI2U3NGMzYztcclxuICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICBtYXJnaW4tdG9wOiA0cHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGdhcDogNHB4O1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRnZOYW1lQ29kZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnZOYW1lQ29kZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgb3B0aW9uczogU2VhcmNoU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBASW5wdXQoKSBzY2hlbWE/OiBWYWxpZGF0aW9uU2NoZW1hO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2w/OiBGb3JtQ29udHJvbDtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgZmlsdGVyZWRPcHRpb25zOiBTZWFyY2hTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpZ2hsaWdodGVkSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgdmFsdWU6IGFueSA9IG51bGw7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10pIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBudWxsICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0ZXJtID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKHRlcm0gfHwgJycpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlICE9PSBudWxsICYmIHRoaXMuY29udHJvbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2wuZGlzYWJsZWQgIT09IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLnNldERpc2FibGVkU3RhdGUodGhpcy5jb250cm9sLmRpc2FibGVkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsdGVyT3B0aW9ucyh0ZXJtOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGVybSkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG93ZXJUZXJtID0gdGVybS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdCA9PlxyXG4gICAgICBvcHQuY29kZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyVGVybSkgfHxcclxuICAgICAgb3B0Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclRlcm0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3BlbkRyb3Bkb3duKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZSB8fCAnJyk7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSA/IDAgOiAtMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmx1cigpIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZURyb3Bkb3duKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShgJHtzZWxlY3RlZE9wdGlvbi5jb2RlfSAtICR7c2VsZWN0ZWRPcHRpb24ubmFtZX1gLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IFNlYXJjaFNlbGVjdE9wdGlvbikge1xyXG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcclxuICAgIHRoaXMudmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICB0aGlzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoYCR7b3B0aW9uLmNvZGV9IC0gJHtvcHRpb24ubmFtZX1gLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gLTE7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKG8gPT4gby52YWx1ZSA9PT0gdmFsdWUpO1xyXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShgJHtzZWxlY3RlZE9wdGlvbi5jb2RlfSAtICR7c2VsZWN0ZWRPcHRpb24ubmFtZX1gLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sLmludmFsaWQgJiYgKHRoaXMuY29udHJvbC5kaXJ0eSB8fCB0aGlzLmNvbnRyb2wudG91Y2hlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5ydWxlcz8uc29tZShyID0+IHIubmFtZSA9PT0gJ3JlcXVpcmVkJykgfHwgZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5jb250cm9sIHx8ICF0aGlzLmNvbnRyb2wuZXJyb3JzIHx8ICF0aGlzLnNjaGVtYSkgcmV0dXJuICcnO1xyXG5cclxuICAgIGZvciAoY29uc3QgZXJyb3JLZXkgb2YgdGhpcy5zY2hlbWEuZXJyb3JQcmlvcml0eSkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9sLmhhc0Vycm9yKGVycm9yS2V5KSkge1xyXG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnNjaGVtYS5ydWxlcy5maW5kKHIgPT4gci5uYW1lID09PSAoZXJyb3JLZXkgPT09ICdyZXF1aXJlZCcgPyAncmVxdWlyZWQnIDogZXJyb3JLZXkpKTtcclxuICAgICAgICBpZiAocnVsZSkgcmV0dXJuIHRoaXMuZ2V0UmVhZGFibGVFcnJvcihydWxlLmVycm9yS2V5IHx8ICcnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkgcmV0dXJuICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJztcclxuXHJcbiAgICByZXR1cm4gJ0ludmFsaWQgdmFsdWUnO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVhZGFibGVFcnJvcihrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICAgICdFUlJfUkVRVUlSRUQnOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcsXHJcbiAgICAgICdFUlJfTUlOX0xFTkdUSCc6ICdWYWx1ZSBpcyB0b28gc2hvcnQnLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBtYXBba2V5XSB8fCAnSW52YWxpZCB2YWx1ZSc7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuZnYtbmFtZS1jb2RlLWNvbnRhaW5lcicpO1xyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuICYmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykpIHtcclxuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gKHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9IaWdobGlnaHRlZCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9ICh0aGlzLmhpZ2hsaWdodGVkSW5kZXggLSAxICsgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSAlIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvSGlnaGxpZ2h0ZWQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb24odGhpcy5maWx0ZXJlZE9wdGlvbnNbMF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oaWdobGlnaHRlZEluZGV4ID49IDAgJiYgdGhpcy5oaWdobGlnaHRlZEluZGV4IDwgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbih0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1RhYic6XHJcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvSGlnaGxpZ2h0ZWQoKSB7XHJcbiAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duLWxpc3QnKTtcclxuICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcGRvd24taXRlbScpW3RoaXMuaGlnaGxpZ2h0ZWRJbmRleF07XHJcbiAgICBpZiAobGlzdCAmJiBpdGVtKSB7XHJcbiAgICAgIGNvbnN0IGxpc3RSZWN0ID0gbGlzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgY29uc3QgaXRlbVJlY3QgPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgaWYgKGl0ZW1SZWN0LmJvdHRvbSA+IGxpc3RSZWN0LmJvdHRvbSkge1xyXG4gICAgICAgIGxpc3Quc2Nyb2xsVG9wICs9IChpdGVtUmVjdC5ib3R0b20gLSBsaXN0UmVjdC5ib3R0b20pO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW1SZWN0LnRvcCA8IGxpc3RSZWN0LnRvcCkge1xyXG4gICAgICAgIGxpc3Quc2Nyb2xsVG9wIC09IChsaXN0UmVjdC50b3AgLSBpdGVtUmVjdC50b3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1007,15 +1007,45 @@ class FvFileSelectorComponent {
|
|
|
1007
1007
|
}
|
|
1008
1008
|
// Subscribe to value changes
|
|
1009
1009
|
this.subscription = this.control.valueChanges.subscribe((value) => {
|
|
1010
|
+
this.handleValue(value);
|
|
1010
1011
|
this.validateValue(value);
|
|
1011
1012
|
this.valueChange.emit(value);
|
|
1012
1013
|
});
|
|
1013
1014
|
// Validate initial value
|
|
1014
|
-
|
|
1015
|
-
this.selectedFile = this.control.value;
|
|
1016
|
-
}
|
|
1015
|
+
this.handleValue(this.control.value);
|
|
1017
1016
|
this.validateValue(this.control.value);
|
|
1018
1017
|
}
|
|
1018
|
+
handleValue(value) {
|
|
1019
|
+
if (!value) {
|
|
1020
|
+
this.selectedFile = null;
|
|
1021
|
+
return;
|
|
1022
|
+
}
|
|
1023
|
+
if (typeof value === 'string') {
|
|
1024
|
+
// Handle API URL/String
|
|
1025
|
+
const name = value.split('/').pop() || 'Document';
|
|
1026
|
+
// Guess type from extension
|
|
1027
|
+
const ext = name.split('.').pop()?.toLowerCase() || '';
|
|
1028
|
+
let type = 'application/octet-stream';
|
|
1029
|
+
if (ext === 'pdf')
|
|
1030
|
+
type = 'application/pdf';
|
|
1031
|
+
if (['png', 'jpg', 'jpeg', 'gif'].includes(ext))
|
|
1032
|
+
type = `image/${ext}`;
|
|
1033
|
+
if (['xls', 'xlsx'].includes(ext))
|
|
1034
|
+
type = 'application/vnd.ms-excel';
|
|
1035
|
+
if (['doc', 'docx'].includes(ext))
|
|
1036
|
+
type = 'application/msword';
|
|
1037
|
+
this.selectedFile = {
|
|
1038
|
+
file: new File([''], name, { type }),
|
|
1039
|
+
name: name,
|
|
1040
|
+
size: 0,
|
|
1041
|
+
type: type
|
|
1042
|
+
};
|
|
1043
|
+
}
|
|
1044
|
+
else {
|
|
1045
|
+
// Assume it's a FileInfo object
|
|
1046
|
+
this.selectedFile = value;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1019
1049
|
ngOnDestroy() {
|
|
1020
1050
|
this.subscription?.unsubscribe();
|
|
1021
1051
|
}
|
|
@@ -1180,12 +1210,30 @@ class FvImageSelectorComponent {
|
|
|
1180
1210
|
if (!this.control)
|
|
1181
1211
|
return;
|
|
1182
1212
|
this.subscription = this.control.valueChanges.subscribe((value) => {
|
|
1213
|
+
this.handleValue(value);
|
|
1183
1214
|
this.validateValue(value);
|
|
1184
1215
|
this.valueChange.emit(value);
|
|
1185
1216
|
});
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1217
|
+
this.handleValue(this.control.value);
|
|
1218
|
+
this.validateValue(this.control.value);
|
|
1219
|
+
}
|
|
1220
|
+
handleValue(value) {
|
|
1221
|
+
if (!value) {
|
|
1222
|
+
this.selectedImage = null;
|
|
1223
|
+
return;
|
|
1224
|
+
}
|
|
1225
|
+
if (typeof value === 'string') {
|
|
1226
|
+
const name = value.split('/').pop() || 'Image';
|
|
1227
|
+
this.selectedImage = {
|
|
1228
|
+
file: new File([''], name, { type: 'image/jpeg' }),
|
|
1229
|
+
url: this.sanitizer.bypassSecurityTrustUrl(value),
|
|
1230
|
+
width: 0,
|
|
1231
|
+
height: 0,
|
|
1232
|
+
size: 0
|
|
1233
|
+
};
|
|
1234
|
+
}
|
|
1235
|
+
else {
|
|
1236
|
+
this.selectedImage = value;
|
|
1189
1237
|
}
|
|
1190
1238
|
}
|
|
1191
1239
|
ngOnDestroy() {
|
|
@@ -1636,13 +1684,18 @@ class FvNameCodeComponent {
|
|
|
1636
1684
|
this.highlightedIndex = -1;
|
|
1637
1685
|
}
|
|
1638
1686
|
writeValue(value) {
|
|
1687
|
+
if (value === this.value) {
|
|
1688
|
+
return;
|
|
1689
|
+
}
|
|
1639
1690
|
this.value = value;
|
|
1640
1691
|
const selectedOption = this.options.find(o => o.value === value);
|
|
1641
1692
|
if (selectedOption) {
|
|
1642
1693
|
this.searchControl.setValue(`${selectedOption.code} - ${selectedOption.name}`, { emitEvent: false });
|
|
1643
1694
|
}
|
|
1644
1695
|
else {
|
|
1645
|
-
|
|
1696
|
+
if (value === null || value === undefined || value === '') {
|
|
1697
|
+
this.searchControl.setValue('', { emitEvent: false });
|
|
1698
|
+
}
|
|
1646
1699
|
}
|
|
1647
1700
|
}
|
|
1648
1701
|
registerOnChange(fn) {
|
|
@@ -2731,6 +2784,7 @@ class FvDocumentFieldComponent {
|
|
|
2731
2784
|
showPreview = false;
|
|
2732
2785
|
previewUrl = null;
|
|
2733
2786
|
subscription;
|
|
2787
|
+
fileInfo = null;
|
|
2734
2788
|
constructor(sanitizer) {
|
|
2735
2789
|
this.sanitizer = sanitizer;
|
|
2736
2790
|
}
|
|
@@ -2740,14 +2794,45 @@ class FvDocumentFieldComponent {
|
|
|
2740
2794
|
return;
|
|
2741
2795
|
}
|
|
2742
2796
|
this.subscription = this.control.valueChanges.subscribe((value) => {
|
|
2797
|
+
this.handleValue(value);
|
|
2743
2798
|
this.validateValue(value);
|
|
2744
2799
|
this.valueChange.emit(value);
|
|
2745
2800
|
});
|
|
2746
2801
|
// Initial validation
|
|
2802
|
+
this.handleValue(this.control.value);
|
|
2747
2803
|
if (this.control.value) {
|
|
2748
2804
|
this.validateValue(this.control.value);
|
|
2749
2805
|
}
|
|
2750
2806
|
}
|
|
2807
|
+
handleValue(value) {
|
|
2808
|
+
if (!value) {
|
|
2809
|
+
this.fileInfo = null;
|
|
2810
|
+
return;
|
|
2811
|
+
}
|
|
2812
|
+
if (typeof value === 'string') {
|
|
2813
|
+
const name = value.split('/').pop() || 'Document';
|
|
2814
|
+
// Guess type from extension
|
|
2815
|
+
const ext = name.split('.').pop()?.toLowerCase() || '';
|
|
2816
|
+
let type = 'application/octet-stream';
|
|
2817
|
+
if (ext === 'pdf')
|
|
2818
|
+
type = 'application/pdf';
|
|
2819
|
+
if (['png', 'jpg', 'jpeg', 'gif'].includes(ext))
|
|
2820
|
+
type = `image/${ext}`;
|
|
2821
|
+
if (['xls', 'xlsx'].includes(ext))
|
|
2822
|
+
type = 'application/vnd.ms-excel';
|
|
2823
|
+
if (['doc', 'docx'].includes(ext))
|
|
2824
|
+
type = 'application/msword';
|
|
2825
|
+
this.fileInfo = {
|
|
2826
|
+
file: value, // Store the URL string as file property if strict typing allows, or cast. Interface says file: File | Blob | string. Perfect.
|
|
2827
|
+
name: name,
|
|
2828
|
+
size: 0,
|
|
2829
|
+
type: type
|
|
2830
|
+
};
|
|
2831
|
+
}
|
|
2832
|
+
else {
|
|
2833
|
+
this.fileInfo = value;
|
|
2834
|
+
}
|
|
2835
|
+
}
|
|
2751
2836
|
ngOnDestroy() {
|
|
2752
2837
|
this.subscription?.unsubscribe();
|
|
2753
2838
|
}
|
|
@@ -2807,7 +2892,7 @@ class FvDocumentFieldComponent {
|
|
|
2807
2892
|
}
|
|
2808
2893
|
}
|
|
2809
2894
|
viewFile() {
|
|
2810
|
-
const fileInfo = this.
|
|
2895
|
+
const fileInfo = this.fileInfo;
|
|
2811
2896
|
if (!fileInfo)
|
|
2812
2897
|
return;
|
|
2813
2898
|
const type = fileInfo.type || '';
|
|
@@ -2839,7 +2924,7 @@ class FvDocumentFieldComponent {
|
|
|
2839
2924
|
this.previewUrl = null;
|
|
2840
2925
|
}
|
|
2841
2926
|
downloadFile() {
|
|
2842
|
-
const fileInfo = this.
|
|
2927
|
+
const fileInfo = this.fileInfo;
|
|
2843
2928
|
if (!fileInfo)
|
|
2844
2929
|
return;
|
|
2845
2930
|
let url;
|
|
@@ -2862,7 +2947,7 @@ class FvDocumentFieldComponent {
|
|
|
2862
2947
|
}
|
|
2863
2948
|
}
|
|
2864
2949
|
getFileIcon() {
|
|
2865
|
-
const fileInfo = this.
|
|
2950
|
+
const fileInfo = this.fileInfo;
|
|
2866
2951
|
if (!fileInfo)
|
|
2867
2952
|
return 'description';
|
|
2868
2953
|
const type = fileInfo.type || '';
|
|
@@ -2891,11 +2976,11 @@ class FvDocumentFieldComponent {
|
|
|
2891
2976
|
return errorMessages[this.errorMessage] || this.errorMessage;
|
|
2892
2977
|
}
|
|
2893
2978
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FvDocumentFieldComponent, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
2894
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FvDocumentFieldComponent, isStandalone: true, selector: "fv-document-field", inputs: { label: "label", placeholder: "placeholder", schema: "schema", control: "control", disabled: "disabled", accept: "accept", maxSize: "maxSize" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"fv-document-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-document-field-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #fileInput type=\"file\" [accept]=\"accept\" (change)=\"onFileSelected($event)\" style=\"display: none\" />\r\n\r\n <div *ngIf=\"!
|
|
2979
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FvDocumentFieldComponent, isStandalone: true, selector: "fv-document-field", inputs: { label: "label", placeholder: "placeholder", schema: "schema", control: "control", disabled: "disabled", accept: "accept", maxSize: "maxSize" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"fv-document-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-document-field-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #fileInput type=\"file\" [accept]=\"accept\" (change)=\"onFileSelected($event)\" style=\"display: none\" />\r\n\r\n <div *ngIf=\"!fileInfo; else fileUploaded\" class=\"fv-upload-btn-wrapper\">\r\n <button type=\"button\" class=\"fv-upload-button\" [disabled]=\"disabled\" (click)=\"openFileDialog()\">\r\n <span class=\"fv-upload-text\">{{ placeholder }}</span>\r\n <span class=\"fv-upload-icon-section\">\r\n <svg viewBox=\"0 0 24 24\" class=\"upload-icon\">\r\n <path d=\"M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <ng-template #fileUploaded>\r\n <div class=\"fv-preview-row\">\r\n <div class=\"fv-preview-wrapper\" (click)=\"viewFile()\" style=\"cursor: pointer;\">\r\n <div class=\"fv-file-icon-preview\" [ngClass]=\"getFileIcon()\">\r\n <span class=\"material-icons\">{{ getFileIcon() }}</span>\r\n </div>\r\n </div>\r\n <span class=\"fv-filename\" (click)=\"viewFile()\" style=\"cursor: pointer;\">{{ fileInfo?.name }}</span>\r\n <button type=\"button\" class=\"fv-trash-btn\" (click)=\"removeFile()\" [disabled]=\"disabled\">\r\n <svg viewBox=\"0 0 24 24\" class=\"trash-icon\">\r\n <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"errorMessage && control?.touched\" class=\"fv-document-error-message\">\r\n \u26A0 {{ getErrorMessage() }}\r\n </div>\r\n</div>\r\n\r\n<!-- Preview Overlay/Modal for Image -->\r\n<div *ngIf=\"showPreview\" class=\"fv-preview-overlay\" (click)=\"closePreview()\">\r\n <div class=\"fv-preview-content\" (click)=\"$event.stopPropagation()\">\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n <div class=\"fv-preview-actions\">\r\n <button type=\"button\" class=\"fv-download-btn\" (click)=\"downloadFile()\">Download</button>\r\n <button type=\"button\" class=\"fv-close-btn\" (click)=\"closePreview()\">Close</button>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap\";.fv-document-field-container{display:flex;flex-direction:column;margin-bottom:16px;width:fit-content;max-width:100%;font-family:Poppins,sans-serif}.fv-document-field-label{font-size:14px;font-weight:600;color:#151d48;margin-bottom:6px;display:block}.required-asterisk{color:#e74c3c;font-weight:700}.fv-upload-button{display:flex;align-items:center;border:1px solid #dcdcdc;border-radius:8px;background:#fff;padding:0;cursor:pointer;overflow:hidden;width:100px;height:34px;transition:all .2s ease}.fv-upload-button:hover:not(:disabled){border-color:#bbb;box-shadow:0 2px 4px #0000000d}.fv-upload-button:disabled{cursor:not-allowed;background-color:#f9f9f9;opacity:.7}.fv-upload-text{flex:1;padding:0 16px;font-size:14px;color:#1f2b41;text-align:left;font-weight:500}.fv-upload-icon-section{background:#f4f5f7;padding:0 10px;border-left:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;color:#333;height:100%}.upload-icon{width:20px;height:20px}.fv-preview-row{display:flex;align-items:center;gap:8px;padding:8px 0;width:100px;box-sizing:border-box}.fv-preview-wrapper{position:relative;width:40px;height:40px}.fv-file-icon-preview{width:40px;height:40px;border-radius:8px;background:#f4f5f7;display:flex;align-items:center;justify-content:center;color:#3498db;border:1px solid #dcdcdc}.fv-file-icon-preview.picture_as_pdf{color:#e74c3c;background:#fdf2f2}.fv-file-icon-preview.image{color:#3498db;background:#f1f8fe}.fv-file-icon-preview.table_view{color:#27ae60;background:#f1f9f4}.material-icons{font-size:24px}.fv-filename{flex:1;font-size:14px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:300px}.fv-trash-btn{background:none;border:none;cursor:pointer;padding:6px;border-radius:50%;transition:background .2s;display:flex}.fv-trash-btn:hover:not(:disabled){background:#fee}.trash-icon{width:22px;height:22px;fill:red}.fv-document-error-message{margin-top:4px;font-size:12px;color:#e74c3c}.fv-preview-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000c;display:flex;justify-content:center;align-items:center;z-index:10000}.fv-preview-content{position:relative;background:#fff;padding:24px;border-radius:12px;max-width:90vw;max-height:90vh;display:flex;flex-direction:column;align-items:center}.fv-preview-content img{max-width:100%;max-height:70vh;object-fit:contain;border-radius:4px;margin-bottom:20px}.fv-preview-actions{display:flex;gap:16px}.fv-preview-actions button{padding:10px 24px;border-radius:6px;border:none;cursor:pointer;font-weight:500;transition:background .2s}.fv-download-btn{background:#3498db;color:#fff}.fv-download-btn:hover{background:#2980b9}.fv-close-btn{background:#f0f0f0;color:#333}.fv-close-btn:hover{background:#e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
|
|
2895
2980
|
}
|
|
2896
2981
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FvDocumentFieldComponent, decorators: [{
|
|
2897
2982
|
type: Component,
|
|
2898
|
-
args: [{ standalone: true, imports: [CommonModule, ReactiveFormsModule], selector: 'fv-document-field', template: "<div class=\"fv-document-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-document-field-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #fileInput type=\"file\" [accept]=\"accept\" (change)=\"onFileSelected($event)\" style=\"display: none\" />\r\n\r\n <div *ngIf=\"!
|
|
2983
|
+
args: [{ standalone: true, imports: [CommonModule, ReactiveFormsModule], selector: 'fv-document-field', template: "<div class=\"fv-document-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-document-field-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #fileInput type=\"file\" [accept]=\"accept\" (change)=\"onFileSelected($event)\" style=\"display: none\" />\r\n\r\n <div *ngIf=\"!fileInfo; else fileUploaded\" class=\"fv-upload-btn-wrapper\">\r\n <button type=\"button\" class=\"fv-upload-button\" [disabled]=\"disabled\" (click)=\"openFileDialog()\">\r\n <span class=\"fv-upload-text\">{{ placeholder }}</span>\r\n <span class=\"fv-upload-icon-section\">\r\n <svg viewBox=\"0 0 24 24\" class=\"upload-icon\">\r\n <path d=\"M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <ng-template #fileUploaded>\r\n <div class=\"fv-preview-row\">\r\n <div class=\"fv-preview-wrapper\" (click)=\"viewFile()\" style=\"cursor: pointer;\">\r\n <div class=\"fv-file-icon-preview\" [ngClass]=\"getFileIcon()\">\r\n <span class=\"material-icons\">{{ getFileIcon() }}</span>\r\n </div>\r\n </div>\r\n <span class=\"fv-filename\" (click)=\"viewFile()\" style=\"cursor: pointer;\">{{ fileInfo?.name }}</span>\r\n <button type=\"button\" class=\"fv-trash-btn\" (click)=\"removeFile()\" [disabled]=\"disabled\">\r\n <svg viewBox=\"0 0 24 24\" class=\"trash-icon\">\r\n <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"errorMessage && control?.touched\" class=\"fv-document-error-message\">\r\n \u26A0 {{ getErrorMessage() }}\r\n </div>\r\n</div>\r\n\r\n<!-- Preview Overlay/Modal for Image -->\r\n<div *ngIf=\"showPreview\" class=\"fv-preview-overlay\" (click)=\"closePreview()\">\r\n <div class=\"fv-preview-content\" (click)=\"$event.stopPropagation()\">\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n <div class=\"fv-preview-actions\">\r\n <button type=\"button\" class=\"fv-download-btn\" (click)=\"downloadFile()\">Download</button>\r\n <button type=\"button\" class=\"fv-close-btn\" (click)=\"closePreview()\">Close</button>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap\";.fv-document-field-container{display:flex;flex-direction:column;margin-bottom:16px;width:fit-content;max-width:100%;font-family:Poppins,sans-serif}.fv-document-field-label{font-size:14px;font-weight:600;color:#151d48;margin-bottom:6px;display:block}.required-asterisk{color:#e74c3c;font-weight:700}.fv-upload-button{display:flex;align-items:center;border:1px solid #dcdcdc;border-radius:8px;background:#fff;padding:0;cursor:pointer;overflow:hidden;width:100px;height:34px;transition:all .2s ease}.fv-upload-button:hover:not(:disabled){border-color:#bbb;box-shadow:0 2px 4px #0000000d}.fv-upload-button:disabled{cursor:not-allowed;background-color:#f9f9f9;opacity:.7}.fv-upload-text{flex:1;padding:0 16px;font-size:14px;color:#1f2b41;text-align:left;font-weight:500}.fv-upload-icon-section{background:#f4f5f7;padding:0 10px;border-left:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;color:#333;height:100%}.upload-icon{width:20px;height:20px}.fv-preview-row{display:flex;align-items:center;gap:8px;padding:8px 0;width:100px;box-sizing:border-box}.fv-preview-wrapper{position:relative;width:40px;height:40px}.fv-file-icon-preview{width:40px;height:40px;border-radius:8px;background:#f4f5f7;display:flex;align-items:center;justify-content:center;color:#3498db;border:1px solid #dcdcdc}.fv-file-icon-preview.picture_as_pdf{color:#e74c3c;background:#fdf2f2}.fv-file-icon-preview.image{color:#3498db;background:#f1f8fe}.fv-file-icon-preview.table_view{color:#27ae60;background:#f1f9f4}.material-icons{font-size:24px}.fv-filename{flex:1;font-size:14px;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:300px}.fv-trash-btn{background:none;border:none;cursor:pointer;padding:6px;border-radius:50%;transition:background .2s;display:flex}.fv-trash-btn:hover:not(:disabled){background:#fee}.trash-icon{width:22px;height:22px;fill:red}.fv-document-error-message{margin-top:4px;font-size:12px;color:#e74c3c}.fv-preview-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000c;display:flex;justify-content:center;align-items:center;z-index:10000}.fv-preview-content{position:relative;background:#fff;padding:24px;border-radius:12px;max-width:90vw;max-height:90vh;display:flex;flex-direction:column;align-items:center}.fv-preview-content img{max-width:100%;max-height:70vh;object-fit:contain;border-radius:4px;margin-bottom:20px}.fv-preview-actions{display:flex;gap:16px}.fv-preview-actions button{padding:10px 24px;border-radius:6px;border:none;cursor:pointer;font-weight:500;transition:background .2s}.fv-download-btn{background:#3498db;color:#fff}.fv-download-btn:hover{background:#2980b9}.fv-close-btn{background:#f0f0f0;color:#333}.fv-close-btn:hover{background:#e0e0e0}\n"] }]
|
|
2899
2984
|
}], ctorParameters: () => [{ type: i1$1.DomSanitizer }], propDecorators: { label: [{
|
|
2900
2985
|
type: Input
|
|
2901
2986
|
}], placeholder: [{
|