@sd-angular/core 1.0.41 → 1.0.42

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.
@@ -51,9 +51,9 @@ _items = new WeakMap(), _send = new WeakMap(), _load = new WeakMap();
51
51
  SdComment.decorators = [
52
52
  { type: Component, args: [{
53
53
  selector: 'sd-comment',
54
- template: "<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">\u2022</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"></sd-editor>\r\n </div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"G\u1EEDi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
54
+ template: "<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\" *ngIf=\"commentOption?.style==='basic'\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">\u2022</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-body-style1\" *ngIf=\"commentOption?.style==='style1'\">\r\n <ng-container *ngFor=\"let item of items | async; let i = index\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment {{i + 1 === (count | async) ? 'c-comment-border': ''}}\">\r\n <div class=\"c-info mb-4\">\r\n <div class=\"c-col-left\">\r\n <div class=\"c-creator\">\r\n {{item.creator}}\r\n </div>\r\n <div class=\"c-email\">\r\n {{item.email}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <div class=\"c-col-right\"\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy H:mm'\">{{item.createdDate | date:'dd/MM/yyyy H:mm'}}</div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"></sd-editor>\r\n </div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"G\u1EEDi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
55
55
  changeDetection: ChangeDetectionStrategy.OnPush,
56
- styles: [".text-black400{color:#757575}.c-container{display:flex;flex-direction:column;height:100%}.c-container .c-header{align-items:center;background-color:#fff;display:flex;height:40px;padding:0 16px}.c-container .c-header .c-title{font-weight:500}.c-container .c-body{background:#f8f9fa;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body:hover{overflow-y:auto}.c-container .c-body .c-comment{background:#fff;border:1px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;padding:12px 16px;white-space:pre-wrap;word-break:break-word}.c-container .c-body .c-comment .c-info{color:#757575}.c-container .c-body .c-comment .c-info .c-creator{color:#000;font-weight:500}.c-container .c-footer{background:#fff;min-height:120px}"]
56
+ styles: [".text-black400{color:#757575}.c-container{display:flex;flex-direction:column;height:100%}.c-container .c-header{align-items:center;background-color:#fff;display:flex;height:40px;padding:0 16px}.c-container .c-header .c-title{font-weight:500}.c-container .c-body{background:#f8f9fa;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body:hover{overflow-y:auto}.c-container .c-body .c-comment{background:#fff;border:1px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;padding:12px 16px;white-space:pre-wrap;word-break:break-word}.c-container .c-body .c-comment .c-info{color:#757575}.c-container .c-body .c-comment .c-info .c-creator{color:#000;font-weight:500}.c-container .c-body-style1{background:#fff;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body-style1:hover{overflow-y:auto}.c-container .c-body-style1 .c-comment{background:#fff;border-bottom:3px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;white-space:pre-wrap;word-break:break-word}.c-container .c-body-style1 .c-comment .c-info{color:#757575}.c-container .c-body-style1 .c-comment .c-info .c-creator{color:#000;font-weight:500;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-email{color:#000;font-weight:400;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-col-left{display:inline-block;overflow:hidden;vertical-align:top;width:calc(100% - 128px)}.c-container .c-body-style1 .c-comment .c-info .c-col-right{display:inline-block;margin-left:8px;width:120px}.c-container .c-body-style1 .c-comment-border{border-bottom:none}.c-container .c-footer{background:#fff;min-height:120px}"]
57
57
  },] }
58
58
  ];
59
59
  SdComment.ctorParameters = () => [];
@@ -61,4 +61,4 @@ SdComment.propDecorators = {
61
61
  textarea: [{ type: ViewChild, args: [SdTextarea,] }],
62
62
  option: [{ type: Input }]
63
63
  };
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9jb21tZW50LyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21tZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBU2hELE1BQU0sT0FBTyxTQUFTO0lBYXBCO1FBWEEsaUJBQVMsSUFBSSxlQUFlLENBQVksRUFBRSxDQUFDLEVBQUM7UUFDNUMsZ0JBQVEsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLEVBQUM7UUEwQnhDLFdBQU0sR0FBRyxHQUFHLEVBQUU7O1lBQ1osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixZQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLEtBQUssMENBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLEtBQUssR0FBRzthQUN4QjtRQUNILENBQUMsQ0FBQTtRQUVELGdCQUFRLEdBQVMsRUFBRTtZQUNqQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLE9BQU8sWUFBWSxPQUFPLEVBQUU7Z0JBQzlCLE9BQU8sTUFBTSxPQUFPLENBQUM7YUFDdEI7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUEsRUFBQTtRQUVELFdBQU0sR0FBRyxHQUFTLEVBQUU7WUFDbEIscUNBQVksSUFBSSxDQUFDLE1BQU0seUNBQUEsSUFBSSxDQUFRLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUEsQ0FBQTtJQWxDRCxDQUFDO0lBVEQsSUFBYSxNQUFNLENBQUMsTUFBdUI7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFBQSxDQUFDO0lBT0YsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcscUNBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7O2dCQUFDLE9BQUEsaUNBQ2pCLENBQUMsS0FDSixPQUFPLFFBQUUsQ0FBQyxDQUFDLE9BQU8sbUNBQUksMkVBQTJFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFDNUcsQ0FBQTthQUFBLENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxXQUFXO0lBQ1gsQ0FBQztJQUNELGVBQWU7SUFDZixDQUFDOzs7O1lBakNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIseXRFQUF1QztnQkFFdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7O3VCQUVFLFNBQVMsU0FBQyxVQUFVO3FCQUlwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIElucHV0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZFRleHRhcmVhIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90ZXh0YXJlYSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tbWVudCwgU2RDb21tZW50T3B0aW9uIH0gZnJvbSAnLi9jb21tZW50Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtY29tbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RDb21tZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoU2RUZXh0YXJlYSkgdGV4dGFyZWE6IFNkVGV4dGFyZWE7XHJcbiAgI2l0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21tZW50W10+KFtdKTtcclxuICAjc2VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgY29tbWVudE9wdGlvbjogU2RDb21tZW50T3B0aW9uO1xyXG4gIEBJbnB1dCgpIHNldCBvcHRpb24ob3B0aW9uOiBTZENvbW1lbnRPcHRpb24pIHtcclxuICAgIHRoaXMuY29tbWVudE9wdGlvbiA9IG9wdGlvbjtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfTtcclxuXHJcbiAgaXRlbXM6IE9ic2VydmFibGU8Q29tbWVudFtdPjtcclxuICBjb3VudDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLml0ZW1zID0gdGhpcy4jaXRlbXMucGlwZShtYXAoaXRlbXMgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbXMubWFwKGUgPT4gKHtcclxuICAgICAgICAuLi5lLFxyXG4gICAgICAgIHBpY3R1cmU6IGUucGljdHVyZSA/PyBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP3NpemU9MzImcm91bmRlZD10cnVlJmJhY2tncm91bmQ9cmFuZG9tJm5hbWU9JHtlLmNyZWF0b3J9YFxyXG4gICAgICB9KSlcclxuICAgIH0pKTtcclxuICAgIHRoaXMuY291bnQgPSB0aGlzLml0ZW1zLnBpcGUobWFwKGl0ZW1zID0+IGl0ZW1zLmxlbmd0aCkpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgb25TZW5kID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMubWVzc2FnZSkge1xyXG4gICAgICB0aGlzLmNvbW1lbnRPcHRpb24/LmV2ZW50Py5vblNlbmQodGhpcy5tZXNzYWdlKTtcclxuICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDtcclxuICAgICAgdGhpcy50ZXh0YXJlYT8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICNsb2FkID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgeyBpdGVtcyB9ID0gdGhpcy5jb21tZW50T3B0aW9uO1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IGl0ZW1zKCk7XHJcbiAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIHJlbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMuI2l0ZW1zLm5leHQoYXdhaXQgdGhpcy4jbG9hZCgpKTtcclxuICB9XHJcbn1cclxuIl19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9jb21tZW50LyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21tZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBU2hELE1BQU0sT0FBTyxTQUFTO0lBYXBCO1FBWEEsaUJBQVMsSUFBSSxlQUFlLENBQVksRUFBRSxDQUFDLEVBQUM7UUFDNUMsZ0JBQVEsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLEVBQUM7UUEwQnhDLFdBQU0sR0FBRyxHQUFHLEVBQUU7O1lBQ1osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixZQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLEtBQUssMENBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLEtBQUssR0FBRzthQUN4QjtRQUNILENBQUMsQ0FBQTtRQUVELGdCQUFRLEdBQVMsRUFBRTtZQUNqQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLE9BQU8sWUFBWSxPQUFPLEVBQUU7Z0JBQzlCLE9BQU8sTUFBTSxPQUFPLENBQUM7YUFDdEI7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUEsRUFBQTtRQUVELFdBQU0sR0FBRyxHQUFTLEVBQUU7WUFDbEIscUNBQVksSUFBSSxDQUFDLE1BQU0seUNBQUEsSUFBSSxDQUFRLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUEsQ0FBQTtJQWxDRCxDQUFDO0lBVEQsSUFBYSxNQUFNLENBQUMsTUFBdUI7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFBQSxDQUFDO0lBT0YsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcscUNBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7O2dCQUFDLE9BQUEsaUNBQ2pCLENBQUMsS0FDSixPQUFPLFFBQUUsQ0FBQyxDQUFDLE9BQU8sbUNBQUksMkVBQTJFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFDNUcsQ0FBQTthQUFBLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxXQUFXO0lBQ1gsQ0FBQztJQUNELGVBQWU7SUFDZixDQUFDOzs7O1lBakNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsdTRHQUF1QztnQkFFdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7O3VCQUVFLFNBQVMsU0FBQyxVQUFVO3FCQUlwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIElucHV0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZFRleHRhcmVhIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90ZXh0YXJlYSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tbWVudCwgU2RDb21tZW50T3B0aW9uIH0gZnJvbSAnLi9jb21tZW50Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtY29tbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RDb21tZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoU2RUZXh0YXJlYSkgdGV4dGFyZWE6IFNkVGV4dGFyZWE7XHJcbiAgI2l0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21tZW50W10+KFtdKTtcclxuICAjc2VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgY29tbWVudE9wdGlvbjogU2RDb21tZW50T3B0aW9uO1xyXG4gIEBJbnB1dCgpIHNldCBvcHRpb24ob3B0aW9uOiBTZENvbW1lbnRPcHRpb24pIHtcclxuICAgIHRoaXMuY29tbWVudE9wdGlvbiA9IG9wdGlvbjtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfTtcclxuXHJcbiAgaXRlbXM6IE9ic2VydmFibGU8Q29tbWVudFtdPjtcclxuICBjb3VudDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLml0ZW1zID0gdGhpcy4jaXRlbXMucGlwZShtYXAoaXRlbXMgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbXMubWFwKGUgPT4gKHtcclxuICAgICAgICAuLi5lLFxyXG4gICAgICAgIHBpY3R1cmU6IGUucGljdHVyZSA/PyBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP3NpemU9MzImcm91bmRlZD10cnVlJmJhY2tncm91bmQ9cmFuZG9tJm5hbWU9JHtlLmNyZWF0b3J9YFxyXG4gICAgICB9KSk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5pdGVtcy5waXBlKG1hcChpdGVtcyA9PiBpdGVtcy5sZW5ndGgpKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG9uU2VuZCA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLm1lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5jb21tZW50T3B0aW9uPy5ldmVudD8ub25TZW5kKHRoaXMubWVzc2FnZSk7XHJcbiAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGV4dGFyZWE/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHsgaXRlbXMgfSA9IHRoaXMuY29tbWVudE9wdGlvbjtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBpdGVtcygpO1xyXG4gICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICByZWxvYWQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICB0aGlzLiNpdGVtcy5uZXh0KGF3YWl0IHRoaXMuI2xvYWQoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTUvRGVza3RvcC9Xb3JraW5nLzFNRy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2NvbW1lbnQvIiwic291cmNlcyI6WyJzcmMvbGliL2NvbW1lbnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZENvbW1lbnRPcHRpb24ge1xyXG4gIGl0ZW1zOiAoKSA9PiBDb21tZW50W10gfCBQcm9taXNlPENvbW1lbnRbXT47XHJcbiAgZXZlbnQ6IHtcclxuICAgIG9uU2VuZDogKHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxyXG4gIH07XHJcbiAgZWRpdG9yPzoge1xyXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbiAgICB0b29sYmFyPzogYW55O1xyXG4gICAgdXJsVXBsb2FkSW1hZ2U/OiBzdHJpbmc7XHJcbiAgICBzdHlsZXM/OiBhbnk7XHJcbiAgICBtZW50aW9uVmFsdWVzPzogeyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBsaW5rPzogc3RyaW5nIH1bXTtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbW1lbnQgZXh0ZW5kcyBCYXNlQ29tbWVudCB7XHJcbiAgY2hpbGRyZW46IENvbW1lbnRMdjJbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEJhc2VDb21tZW50IHtcclxuICBjcmVhdG9yOiBzdHJpbmc7XHJcbiAgY3JlYXRlZERhdGU6IHN0cmluZyB8IERhdGU7XHJcbiAgY29udGVudDogc3RyaW5nO1xyXG4gIHBpY3R1cmU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbW1lbnRMdjIgZXh0ZW5kcyBCYXNlQ29tbWVudCB7XHJcbiAgY2hpbGRyZW46IENvbW1lbnRMdjNbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbW1lbnRMdjMgZXh0ZW5kcyBCYXNlQ29tbWVudCB7XHJcblxyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTUvRGVza3RvcC9Xb3JraW5nLzFNRy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2NvbW1lbnQvIiwic291cmNlcyI6WyJzcmMvbGliL2NvbW1lbnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZENvbW1lbnRPcHRpb24ge1xyXG4gIGl0ZW1zOiAoKSA9PiBDb21tZW50W10gfCBQcm9taXNlPENvbW1lbnRbXT47XHJcbiAgZXZlbnQ6IHtcclxuICAgIG9uU2VuZDogKHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxyXG4gIH07XHJcbiAgZWRpdG9yPzoge1xyXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbiAgICB0b29sYmFyPzogYW55O1xyXG4gICAgdXJsVXBsb2FkSW1hZ2U/OiBzdHJpbmc7XHJcbiAgICBzdHlsZXM/OiBhbnk7XHJcbiAgICBtZW50aW9uVmFsdWVzPzogeyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBsaW5rPzogc3RyaW5nIH1bXTtcclxuICB9O1xyXG4gIHN0eWxlOiAnYmFzaWMnIHwgJ3N0eWxlMSc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWVudCBleHRlbmRzIEJhc2VDb21tZW50IHtcclxuICBjaGlsZHJlbjogQ29tbWVudEx2MltdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQmFzZUNvbW1lbnQge1xyXG4gIGNyZWF0b3I6IHN0cmluZztcclxuICBlbWFpbDogc3RyaW5nO1xyXG4gIGNyZWF0ZWREYXRlOiBzdHJpbmcgfCBEYXRlO1xyXG4gIGNvbnRlbnQ6IHN0cmluZztcclxuICBwaWN0dXJlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb21tZW50THYyIGV4dGVuZHMgQmFzZUNvbW1lbnQge1xyXG4gIGNoaWxkcmVuOiBDb21tZW50THYzW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb21tZW50THYzIGV4dGVuZHMgQmFzZUNvbW1lbnQge1xyXG5cclxufVxyXG5cclxuXHJcblxyXG4iXX0=
@@ -1,4 +1,4 @@
1
- var _delayDuration, _cache, _buildToastMultiMesssage;
1
+ var _delayDuration, _warningKey, _errorKey, _cache, _notifyWarning, _notifyError, _buildToastMultiMesssage;
2
2
  import { __classPrivateFieldGet } from "tslib";
3
3
  import "@sd-angular/core/common";
4
4
  import { Injectable } from "@angular/core";
@@ -6,15 +6,17 @@ import { MatDialog } from "@angular/material/dialog";
6
6
  import { DialogConfirmComponent } from "./components/dialog-confirm/dialog-confirm.component";
7
7
  import { ToastrService } from "ngx-toastr";
8
8
  import { SdTranslateService } from "@sd-angular/core/translate";
9
- import { takeUntil } from "rxjs/operators";
9
+ import { take, takeUntil } from "rxjs/operators";
10
+ import { timer } from "rxjs";
10
11
  import * as uuid from 'uuid';
11
- let notifyId = 0;
12
12
  export class SdNotifyService {
13
13
  constructor(dialog, toastr, translateService) {
14
14
  this.dialog = dialog;
15
15
  this.toastr = toastr;
16
16
  this.translateService = translateService;
17
17
  _delayDuration.set(this, 500); // Các error/warning message sẽ tự động gộp sau khoảng thời gian trên
18
+ _warningKey.set(this, uuid.v4());
19
+ _errorKey.set(this, uuid.v4());
18
20
  _cache.set(this, {});
19
21
  this.alert = {
20
22
  info: (message, title, yesTitle, icon) => {
@@ -77,42 +79,82 @@ export class SdNotifyService {
77
79
  });
78
80
  },
79
81
  warning: (message, delay, title) => {
80
- // tslint:disable-next-line: max-line-length
81
- // const style = `border-radius: 5px; margin: 0; padding: 12px; z-index: 99999; top: 5px; right: 5px; display: none; position: fixed;color: #9F6000; background-color: #FEEFB3`;
82
- // tslint:disable-next-line: max-line-length
83
- // const html = `<div id="${this.notifyId}" style="${style}"><i class="fa fa-exclamation-triangle"></i> ${message || this.translate('Warning')}</div>`;
84
- // this.showNotify(html, delay);
82
+ if (!__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].createdDate, __classPrivateFieldGet(this, _delayDuration)) < new Date()) {
83
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)] = {
84
+ createdDate: new Date(),
85
+ data: {
86
+ title: title,
87
+ messages: [],
88
+ }
89
+ };
90
+ timer(__classPrivateFieldGet(this, _delayDuration)).pipe(take(1)).subscribe(() => {
91
+ __classPrivateFieldGet(this, _notifyWarning).call(this, {
92
+ title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.title,
93
+ message: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages,
94
+ delay: delay
95
+ });
96
+ });
97
+ }
85
98
  if (Array.isArray(message)) {
86
- __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'warning', message, delay, title);
99
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages = [...__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages, ...message];
87
100
  }
88
101
  else {
89
- const content = message || this.translate("Warning");
90
- this.toastr.warning(content, title, {
91
- enableHtml: true,
92
- timeOut: delay || 3000,
93
- closeButton: true,
94
- });
102
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages.push(message);
95
103
  }
96
104
  },
97
105
  error: (message, delay, title) => {
98
- // tslint:disable-next-line: max-line-length
99
- // const style = `border-radius: 5px; margin: 0; padding: 12px; z-index: 99999; top: 5px; right: 5px; display: none; position: fixed;color: #D8000C; background-color: #FFD2D2`;
100
- // tslint:disable-next-line: max-line-length
101
- // const html = `<div id="${this.notifyId}" style="${style}"><i class="fa fa-times"></i> ${message || this.translate('Error')}</div>`;
102
- // this.showNotify(html, delay);
106
+ if (!__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].createdDate, __classPrivateFieldGet(this, _delayDuration)) < new Date()) {
107
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)] = {
108
+ createdDate: new Date(),
109
+ data: {
110
+ title: title,
111
+ messages: [],
112
+ }
113
+ };
114
+ timer(__classPrivateFieldGet(this, _delayDuration)).pipe(take(1)).subscribe(() => {
115
+ __classPrivateFieldGet(this, _notifyError).call(this, {
116
+ title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.title,
117
+ message: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages,
118
+ delay: delay
119
+ });
120
+ });
121
+ }
103
122
  if (Array.isArray(message)) {
104
- __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'error', message, delay, title);
123
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages = [...__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages, ...message];
105
124
  }
106
125
  else {
107
- const content = message || this.translate("Error");
108
- this.toastr.error(content, title, {
109
- enableHtml: true,
110
- timeOut: delay || 3000,
111
- closeButton: true,
112
- });
126
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages.push(message);
113
127
  }
114
128
  },
115
129
  };
130
+ _notifyWarning.set(this, (args) => {
131
+ const { message, delay, title } = args;
132
+ if (Array.isArray(message)) {
133
+ __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'warning', message, delay, title);
134
+ }
135
+ else {
136
+ const content = message || this.translate('Warning');
137
+ this.toastr.warning(content, title, {
138
+ enableHtml: true,
139
+ timeOut: delay || 3000,
140
+ closeButton: true,
141
+ });
142
+ }
143
+ });
144
+ _notifyError.set(this, (args) => {
145
+ const { message, delay, title } = args;
146
+ if (Array.isArray(message)) {
147
+ __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'error', message, delay, title);
148
+ }
149
+ else {
150
+ const content = message || this.translate('Error');
151
+ this.toastr.error(content, title, {
152
+ enableHtml: true,
153
+ timeOut: delay || 3000,
154
+ closeButton: true,
155
+ });
156
+ }
157
+ });
116
158
  _buildToastMultiMesssage.set(this, (type, messages, delay, title) => {
117
159
  /** số lượng item hiển thị mặc định */
118
160
  const showNum = 2;
@@ -254,7 +296,7 @@ export class SdNotifyService {
254
296
  };
255
297
  }
256
298
  }
257
- _delayDuration = new WeakMap(), _cache = new WeakMap(), _buildToastMultiMesssage = new WeakMap();
299
+ _delayDuration = new WeakMap(), _warningKey = new WeakMap(), _errorKey = new WeakMap(), _cache = new WeakMap(), _notifyWarning = new WeakMap(), _notifyError = new WeakMap(), _buildToastMultiMesssage = new WeakMap();
258
300
  SdNotifyService.decorators = [
259
301
  { type: Injectable }
260
302
  ];
@@ -263,4 +305,4 @@ SdNotifyService.ctorParameters = () => [
263
305
  { type: ToastrService },
264
306
  { type: SdTranslateService }
265
307
  ];
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ub3RpZnkvIiwic291cmNlcyI6WyJzcmMvbGliL25vdGlmeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFHakIsTUFBTSxPQUFPLGVBQWU7SUFZMUIsWUFDVSxNQUFpQixFQUNqQixNQUFxQixFQUNyQixnQkFBb0M7UUFGcEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFkOUMseUJBQWlCLEdBQUcsRUFBQyxDQUFDLHFFQUFxRTtRQUMzRixpQkFTSSxFQUFFLEVBQUM7UUFPUCxVQUFLLEdBQUc7WUFDTixJQUFJLEVBQUUsQ0FDSixPQUFnQixFQUNoQixLQUFjLEVBQ2QsUUFBaUIsRUFDakIsSUFBYSxFQUNiLEVBQUU7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7b0JBQ3ZDLEtBQUssRUFBRSxPQUFP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UUFBUSxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRO3dCQUMxQixZQUFZLEVBQUUsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsWUFBWSxLQUFJLEVBQUU7cUJBQ3pDO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDckMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUMzQyxJQUFJLE1BQU0sRUFBRTt3QkFDVixJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7NEJBQ3ZCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDakI7NkJBQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFOzRCQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQ2hCOzZCQUFNOzRCQUNMLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDakI7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFO1lBQzVDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUM7SUFsU0MsQ0FBQzs7OztZQWpCTCxVQUFVOzs7WUFWRixTQUFTO1lBRUksYUFBYTtZQUMxQixrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJAc2QtYW5ndWxhci9jb3JlL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBEaWFsb2dDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9kaWFsb2ctY29uZmlybS9kaWFsb2ctY29uZmlybS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQWN0aXZlVG9hc3QsIFRvYXN0clNlcnZpY2UgfSBmcm9tIFwibmd4LXRvYXN0clwiO1xyXG5pbXBvcnQgeyBTZFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQHNkLWFuZ3VsYXIvY29yZS90cmFuc2xhdGVcIjtcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5cclxubGV0IG5vdGlmeUlkID0gMDtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNkTm90aWZ5U2VydmljZSB7XHJcbiAgI2RlbGF5RHVyYXRpb24gPSA1MDA7IC8vIEPDoWMgZXJyb3Ivd2FybmluZyBtZXNzYWdlIHPhur0gdOG7sSDEkeG7mW5nIGfhu5lwIHNhdSBraG/huqNuZyB0aOG7nWkgZ2lhbiB0csOqblxyXG4gICNjYWNoZToge1xyXG4gICAgW2tleTogc3RyaW5nXToge1xyXG4gICAgICBjcmVhdGVkRGF0ZTogRGF0ZTtcclxuICAgICAgc3ViamVjdDogU3ViamVjdDxhbnk+O1xyXG4gICAgICByZXNwb25zZT86IHtcclxuICAgICAgICBzdGF0dXM/OiAnc3VjY2VzcycgfCAnZXJyb3InO1xyXG4gICAgICAgIHJlc3VsdDogYW55LFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSA9IHt9O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBTZFRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGFsZXJ0ID0ge1xyXG4gICAgaW5mbzogKFxyXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxyXG4gICAgICB0aXRsZT86IHN0cmluZyxcclxuICAgICAgeWVzVGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIGljb24/OiBzdHJpbmdcclxuICAgICkgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKERpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICB3aWR0aDogXCI0MDBweFwiLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGljb246IGljb24gfHwgXCJpbmZvXCIsXHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoXCJOb3RpY2VcIiksXHJcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8IFwiRG9uZSFcIixcclxuICAgICAgICAgIHllc1RpdGxlOiB5ZXNUaXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIk9rXCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIHN1Y2Nlc3M6IChcclxuICAgICAgbWVzc2FnZT86IHN0cmluZyxcclxuICAgICAgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nLFxyXG4gICAgICBpY29uPzogc3RyaW5nXHJcbiAgICApID0+IHtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihEaWFsb2dDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgd2lkdGg6IFwiNDAwcHhcIixcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBpY29uOiBpY29uIHx8IFwiZG9uZVwiLFxyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiU3VjY2Vzc1wiKSxcclxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgXCJEb25lIVwiLFxyXG4gICAgICAgICAgeWVzVGl0bGU6IHllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiT2tcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgd2FybmluZzogKFxyXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxyXG4gICAgICB0aXRsZT86IHN0cmluZyxcclxuICAgICAgeWVzVGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIGljb24/OiBzdHJpbmdcclxuICAgICkgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKERpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICB3aWR0aDogXCI0MDBweFwiLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGljb246IGljb24gfHwgXCJ3YXJuaW5nXCIsXHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoXCJXYXJuaW5nXCIpLFxyXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBcIlNvbWV0aGluZyB3ZW50IHdyb25nIVwiLFxyXG4gICAgICAgICAgeWVzVGl0bGU6IHllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiT2tcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6IChcclxuICAgICAgbWVzc2FnZT86IHN0cmluZyxcclxuICAgICAgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nLFxyXG4gICAgICBpY29uPzogc3RyaW5nXHJcbiAgICApID0+IHtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihEaWFsb2dDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgd2lkdGg6IFwiNDAwcHhcIixcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBpY29uOiBpY29uIHx8IFwiZXJyb3JcIixcclxuICAgICAgICAgIHRpdGxlOiB0aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIkVycm9yXCIpLFxyXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBcIlNvbWV0aGluZyB3ZW50IHdyb25nIVwiLFxyXG4gICAgICAgICAgeWVzVGl0bGU6IHllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiT2tcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIG5vdGlmeSA9IHtcclxuICAgIHN1Y2Nlc3M6IChtZXNzYWdlPzogc3RyaW5nLCBkZWxheT86IG51bWJlciwgdGl0bGU/OiBzdHJpbmcpID0+IHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgLy8gY29uc3Qgc3R5bGUgPSBgYm9yZGVyLXJhZGl1czogNXB4OyBtYXJnaW46IDA7IHBhZGRpbmc6IDEycHg7IHotaW5kZXg6IDk5OTk5OyB0b3A6IDVweDsgcmlnaHQ6IDVweDsgZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGZpeGVkO2NvbG9yOiAjNEY4QTEwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjREZGMkJGYDtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgLy8gY29uc3QgaHRtbCA9IGA8ZGl2IGlkPVwiJHt0aGlzLm5vdGlmeUlkfVwiIHN0eWxlPVwiJHtzdHlsZX1cIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPiAke21lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUoJ1N1Y2Nlc3MnKX08L2Rpdj5gO1xyXG4gICAgICAvLyB0aGlzLnNob3dOb3RpZnkoaHRtbCwgZGVsYXkpO1xyXG4gICAgICBjb25zdCBjb250ZW50ID0gbWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZShcIlN1Y2Nlc3NcIik7XHJcbiAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoY29udGVudCwgdGl0bGUsIHtcclxuICAgICAgICBlbmFibGVIdG1sOiB0cnVlLFxyXG4gICAgICAgIHRpbWVPdXQ6IGRlbGF5IHx8IDMwMDAsXHJcbiAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIHdhcm5pbmc6IChtZXNzYWdlPzogc3RyaW5nIHwgc3RyaW5nW10sIGRlbGF5PzogbnVtYmVyLCB0aXRsZT86IHN0cmluZykgPT4ge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAvLyBjb25zdCBzdHlsZSA9IGBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbjogMDsgcGFkZGluZzogMTJweDsgei1pbmRleDogOTk5OTk7IHRvcDogNXB4OyByaWdodDogNXB4OyBkaXNwbGF5OiBub25lOyBwb3NpdGlvbjogZml4ZWQ7Y29sb3I6ICM5RjYwMDA7IGJhY2tncm91bmQtY29sb3I6ICNGRUVGQjNgO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAvLyBjb25zdCBodG1sID0gYDxkaXYgaWQ9XCIke3RoaXMubm90aWZ5SWR9XCIgc3R5bGU9XCIke3N0eWxlfVwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+ICR7bWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZSgnV2FybmluZycpfTwvZGl2PmA7XHJcbiAgICAgIC8vIHRoaXMuc2hvd05vdGlmeShodG1sLCBkZWxheSk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpKXtcclxuICAgICAgICB0aGlzLiNidWlsZFRvYXN0TXVsdGlNZXNzc2FnZSgnd2FybmluZycsIG1lc3NhZ2UsIGRlbGF5LCB0aXRsZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IG1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUoXCJXYXJuaW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoY29udGVudCwgdGl0bGUsIHtcclxuICAgICAgICAgIGVuYWJsZUh0bWw6IHRydWUsXHJcbiAgICAgICAgICB0aW1lT3V0OiBkZWxheSB8fCAzMDAwLFxyXG4gICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlcnJvcjogKG1lc3NhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXSwgZGVsYXk/OiBudW1iZXIsIHRpdGxlPzogc3RyaW5nKSA9PiB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgIC8vIGNvbnN0IHN0eWxlID0gYGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAxMnB4OyB6LWluZGV4OiA5OTk5OTsgdG9wOiA1cHg7IHJpZ2h0OiA1cHg7IGRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBmaXhlZDtjb2xvcjogI0Q4MDAwQzsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRDJEMmA7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgIC8vIGNvbnN0IGh0bWwgPSBgPGRpdiBpZD1cIiR7dGhpcy5ub3RpZnlJZH1cIiBzdHlsZT1cIiR7c3R5bGV9XCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiPjwvaT4gJHttZXNzYWdlIHx8IHRoaXMudHJhbnNsYXRlKCdFcnJvcicpfTwvZGl2PmA7XHJcbiAgICAgIC8vIHRoaXMuc2hvd05vdGlmeShodG1sLCBkZWxheSk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpKXtcclxuICAgICAgICB0aGlzLiNidWlsZFRvYXN0TXVsdGlNZXNzc2FnZSgnZXJyb3InLCBtZXNzYWdlLCBkZWxheSwgdGl0bGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlIHx8IHRoaXMudHJhbnNsYXRlKFwiRXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoY29udGVudCwgdGl0bGUsIHtcclxuICAgICAgICAgIGVuYWJsZUh0bWw6IHRydWUsXHJcbiAgICAgICAgICB0aW1lT3V0OiBkZWxheSB8fCAzMDAwLFxyXG4gICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgI2J1aWxkVG9hc3RNdWx0aU1lc3NzYWdlID0gKHR5cGU6ICd3YXJuaW5nJyB8ICdlcnJvcicsIG1lc3NhZ2VzOiBzdHJpbmdbXSwgZGVsYXk/OiBudW1iZXIsIHRpdGxlPzogc3RyaW5nKSA9PiB7XHJcbiAgICAvKiogc+G7kSBsxrDhu6NuZyBpdGVtIGhp4buDbiB0aOG7iyBt4bq3YyDEkeG7i25oICovXHJcbiAgICBjb25zdCBzaG93TnVtID0gMjtcclxuICAgIGNvbnN0IGlkID0gYHNkLW5vdGlmeS1ja2ItJHt1dWlkLnY0KCl9YDtcclxuICAgIGNvbnN0IG1lc3NhZ2VMZW5ndGggPSBtZXNzYWdlcy5sZW5ndGg7XHJcbiAgICBjb25zdCBtZXNzYWdlUmVzdHMgPSBtZXNzYWdlcy5zcGxpY2Uoc2hvd051bSk7XHJcbiAgICBjb25zdCBtZXNzYWdlQ29udGFpbmVyID0gYDx1bCBjbGFzcz1cInNkLW5vdGlmeV9fbGlzdFwiPnswfXsxfTwvdWw+YDtcclxuICAgIGNvbnN0IG1lc3NhZ2VUZW1wID0gYDxsaSBjbGFzcz1cInNkLW5vdGlmeV9faXRlbVwiPi0gezB9PC9saT5gO1xyXG4gICAgbGV0IGNvbnRlbnRSZXN0ID0gJyc7XHJcbiAgICBpZiAobWVzc2FnZVJlc3RzPy5sZW5ndGgpIHtcclxuICAgICAgY29udGVudFJlc3QgPSBgPGlucHV0IGlkPVwiJHtpZH1cIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW4gc2Qtbm90aWZ5X19jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIC8+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cInNkLW5vdGlmeV9fdGV4dCBzZC1ub3RpZnlfX3RleHQtLXNob3cgdGV4dC1zZWNvbmRhcnlcIiBmb3I9XCIke2lkfVwiPiR7dGhpcy50cmFuc2xhdGUoJ1Nob3cgbW9yZScpfTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzZC1ub3RpZnlfX2l0ZW0tLXJlc3RcIj5cclxuICAgICAgICAke21lc3NhZ2VSZXN0cy5tYXAobSA9PiBTdHJpbmcuZm9ybWF0KG1lc3NhZ2VUZW1wLCBtKSkuam9pbignJyl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJzZC1ub3RpZnlfX3RleHQgc2Qtbm90aWZ5X190ZXh0LS1sZXNzIHRleHQtc2Vjb25kYXJ5XCIgZm9yPVwiJHtpZH1cIj4ke3RoaXMudHJhbnNsYXRlKCdTaG93IGxlc3MnKX08L2xhYmVsPmA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb250ZW50ID0gU3RyaW5nLmZvcm1hdChtZXNzYWdlQ29udGFpbmVyLCBtZXNzYWdlcy5tYXAobSA9PiBTdHJpbmcuZm9ybWF0KG1lc3NhZ2VUZW1wLCBtKSkuam9pbignJyksIGNvbnRlbnRSZXN0KTtcclxuICAgIGxldCB0b2FzdDogQWN0aXZlVG9hc3Q8YW55PjtcclxuICAgIC8vIGtoaSB0cnV54buBbiBtZXNzYWdlIGh0bWwgc+G6vSBi4buLIHNhbml0aXplIG7Dqm4gcGjhuqNpIHRydXnhu4FuIGlubmVySFRNTCBraGkgdG9hc3QgaGnhu4duIGzDqm5cclxuICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3NjdHRjcGVyL25neC10b2FzdHIvYmxvYi92MTIuMS4wL3NyYy9saWIvdG9hc3RyL3RvYXN0ci5zZXJ2aWNlLnRzI0wyNzFcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgdG9hc3QgPSB0aGlzLnRvYXN0ci5lcnJvcihjb250ZW50LCBgJHt0aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZSgnRXJyb3InKX0gKCR7bWVzc2FnZUxlbmd0aH0pYCwge1xyXG4gICAgICAgICAgZW5hYmxlSHRtbDogdHJ1ZSxcclxuICAgICAgICAgIHRpbWVPdXQ6IGRlbGF5IHx8IDMwMDAsXHJcbiAgICAgICAgICBtZXNzYWdlQ2xhc3M6IGB0b2FzdC1tZXNzYWdlIHRvYXN0LW1lc3NhZ2UtJHtpZH1gLFxyXG4gICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgICB0YXBUb0Rpc21pc3M6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxyXG4gICAgICAgIHRvYXN0ID0gdGhpcy50b2FzdHIud2FybmluZyhjb250ZW50LCBgJHt0aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZSgnV2FybmluZycpfSAoJHttZXNzYWdlTGVuZ3RofSlgLCB7XHJcbiAgICAgICAgICBlbmFibGVIdG1sOiB0cnVlLFxyXG4gICAgICAgICAgdGltZU91dDogZGVsYXkgfHwgMzAwMCxcclxuICAgICAgICAgIG1lc3NhZ2VDbGFzczogYHRvYXN0LW1lc3NhZ2UgdG9hc3QtbWVzc2FnZS0ke2lkfWAsXHJcbiAgICAgICAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIHRhcFRvRGlzbWlzczogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKHRvYXN0KSB7XHJcbiAgICAgIHRvYXN0Lm9uU2hvd25cclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0b2FzdC5vbkhpZGRlbilcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtZXNzYWdlRWxlOiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC50b2FzdC1tZXNzYWdlLSR7aWR9YCk7XHJcbiAgICAgICAgICBtZXNzYWdlRWxlLmlubmVySFRNTCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZSA9IHtcclxuICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeS53YXJuaW5nKGVycik7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgIGVycj8uZXJyb3IgfHxcclxuICAgICAgICAgIGVycj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgZXJyPy5FeGNlcHRpb25NZXNzYWdlIHx8XHJcbiAgICAgICAgICBlcnI/Lk1lc3NhZ2UgfHxcclxuICAgICAgICAgIFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyLmpzb24gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgZXJyID0gZXJyLmpzb24oKTtcclxuICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgZXJyPy5lcnJvciB8fFxyXG4gICAgICAgICAgICAgIGVycj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIGVycj8uRXhjZXB0aW9uTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIGVycj8uTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmeS53YXJuaW5nKG1lc3NhZ2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubm90aWZ5Lndhcm5pbmcoXCJVbmtub3duIGVycm9yXCIpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNvbmZpcm0gPSAoXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICBvcHRpb246IHtcclxuICAgICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICBub1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICB5ZXNCdXR0b25Db2xvcj86IHN0cmluZztcclxuICAgICAgbm9CdXR0b25Db2xvcj86IHN0cmluZztcclxuICAgIH0gPSB7fVxyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEaWFsb2dDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBcIjQwMHB4XCIsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogb3B0aW9uPy50aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIkNvbmZpcm1cIiksXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICB5ZXNUaXRsZTogb3B0aW9uPy55ZXNUaXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIlllc1wiKSxcclxuICAgICAgICBub1RpdGxlOiBvcHRpb24/Lm5vVGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoXCJOb1wiKSxcclxuICAgICAgICBub0J1dHRvbkNvbG9yOiBvcHRpb24/Lm5vQnV0dG9uQ29sb3IgfHwgXCJzZWNvbmRhcnlcIixcclxuICAgICAgICB5ZXNCdXR0b25Db2xvcjogb3B0aW9uPy55ZXNCdXR0b25Db2xvciB8fCBcInByaW1hcnlcIixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBcIkFDQ0VQVFwiKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDQU5DRUxcIikge1xyXG4gICAgICAgICAgICByZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGNvbmZpcm1EZWxldGUgPSAoKSA9PiB0aGlzLmNvbmZpcm0odGhpcy50cmFuc2xhdGUoXCJEZWxldGUgcmVjb3JkKHMpXCIpKTtcclxuXHJcbiAgY29uZmlybUFwcHJvdmUgPSAoKSA9PiB0aGlzLmNvbmZpcm0odGhpcy50cmFuc2xhdGUoXCJBcHByb3ZlIHJlY29yZChzKVwiKSk7XHJcblxyXG4gIGNvbmZpcm1XaXRoSW5wdXQgPSAoXHJcbiAgICB0aXRsZTogc3RyaW5nLFxyXG4gICAgb3B0aW9uOiB7XHJcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICBub1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgICAgIG1heGxlbmd0aD86IG51bWJlcjtcclxuICAgICAgeWVzQnV0dG9uQ29sb3I/OiBzdHJpbmc7XHJcbiAgICAgIG5vQnV0dG9uQ29sb3I/OiBzdHJpbmc7XHJcbiAgICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIH0gPSB7fVxyXG4gICk6IFByb21pc2U8c3RyaW5nPiA9PiB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6IFwiNDAwcHhcIixcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIkNvbmZpcm1cIiksXHJcbiAgICAgICAgbWVzc2FnZTogb3B0aW9uPy5tZXNzYWdlLFxyXG4gICAgICAgIHllc1RpdGxlOiBvcHRpb24/Lnllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiWWVzXCIpLFxyXG4gICAgICAgIG5vVGl0bGU6IG9wdGlvbj8ubm9UaXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIk5vXCIpLFxyXG4gICAgICAgIG5vQnV0dG9uQ29sb3I6IG9wdGlvbj8ubm9CdXR0b25Db2xvciB8fCBcInNlY29uZGFyeVwiLFxyXG4gICAgICAgIHllc0J1dHRvbkNvbG9yOiBvcHRpb24/Lnllc0J1dHRvbkNvbG9yIHx8IFwicHJpbWFyeVwiLFxyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBtYXhsZW5ndGg6IG9wdGlvbj8ubWF4bGVuZ3RoIHx8IDI1NSxcclxuICAgICAgICAgIHJlcXVpcmVkOiBvcHRpb24/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBvcHRpb24/LmRlZmF1bHRWYWx1ZSB8fCAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJBQ0NFUFRcIikge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDQU5DRUxcIikge1xyXG4gICAgICAgICAgICByZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSh2YWx1ZSk7XHJcbiAgfTtcclxufVxyXG4iXX0=
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ub3RpZnkvIiwic291cmNlcyI6WyJzcmMvbGliL25vdGlmeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBZ0IsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBVyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsTUFBTSxPQUFPLGVBQWU7SUFhMUIsWUFDVSxNQUFpQixFQUNqQixNQUFxQixFQUNyQixnQkFBb0M7UUFGcEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFmOUMseUJBQWlCLEdBQUcsRUFBQyxDQUFDLHFFQUFxRTtRQUMzRixzQkFBYyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUM7UUFDeEIsb0JBQVksSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFDO1FBQ3RCLGlCQVFJLEVBQUUsRUFBQztRQU9QLFVBQUssR0FBRztZQUNOLElBQUksRUFBRSxDQUNKLE9BQWdCLEVBQ2hCLEtBQWMsRUFDZCxR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LENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQzNDLElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTs0QkFDdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUNqQjs2QkFBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7NEJBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDaEI7NkJBQU07NEJBQ0wsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUNqQjtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRU0sY0FBUyxHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQztJQWxWRSxDQUFDOzs7O1lBbEJOLFVBQVU7OztZQVJGLFNBQVM7WUFFSSxhQUFhO1lBQzFCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBzZC1hbmd1bGFyL2NvcmUvY29tbW9uXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IERpYWxvZ0NvbmZpcm1Db21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2RpYWxvZy1jb25maXJtL2RpYWxvZy1jb25maXJtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBY3RpdmVUb2FzdCwgVG9hc3RyU2VydmljZSB9IGZyb20gXCJuZ3gtdG9hc3RyXCI7XHJcbmltcG9ydCB7IFNkVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZVwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0aW1lciB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZE5vdGlmeVNlcnZpY2Uge1xyXG4gICNkZWxheUR1cmF0aW9uID0gNTAwOyAvLyBDw6FjIGVycm9yL3dhcm5pbmcgbWVzc2FnZSBz4bq9IHThu7EgxJHhu5luZyBn4buZcCBzYXUga2hv4bqjbmcgdGjhu51pIGdpYW4gdHLDqm5cclxuICAjd2FybmluZ0tleSA9IHV1aWQudjQoKTtcclxuICAjZXJyb3JLZXkgPSB1dWlkLnY0KCk7XHJcbiAgI2NhY2hlOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgIGNyZWF0ZWREYXRlOiBEYXRlO1xyXG4gICAgICBkYXRhPzoge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICAgICAgbWVzc2FnZXM6IHN0cmluZ1tdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9ID0ge307XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIGFsZXJ0ID0ge1xyXG4gICAgaW5mbzogKFxyXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxyXG4gICAgICB0aXRsZT86IHN0cmluZyxcclxuICAgICAgeWVzVGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIGljb24/OiBzdHJpbmdcclxuICAgICkgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKERpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICB3aWR0aDogXCI0MDBweFwiLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGljb246IGljb24gfHwgXCJpbmZvXCIsXHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoXCJOb3RpY2VcIiksXHJcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8IFwiRG9uZSFcIixcclxuICAgICAgICAgIHllc1RpdGxlOiB5ZXNUaXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIk9rXCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIHN1Y2Nlc3M6IChcclxuICAgICAgbWVzc2FnZT86IHN0cmluZyxcclxuICAgICAgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nLFxyXG4gICAgICBpY29uPzogc3RyaW5nXHJcbiAgICApID0+IHtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihEaWFsb2dDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgd2lkdGg6IFwiNDAwcHhcIixcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBpY29uOiBpY29uIHx8IFwiZG9uZVwiLFxyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiU3VjY2Vzc1wiKSxcclxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgXCJEb25lIVwiLFxyXG4gICAgICAgICAgeWVzVGl0bGU6IHllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiT2tcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgd2FybmluZzogKFxyXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxyXG4gICAgICB0aXRsZT86IHN0cmluZyxcclxuICAgICAgeWVzVGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIGljb24/OiBzdHJpbmdcclxuICAgICkgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKERpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICB3aWR0aDogXCI0MDBweFwiLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGljb246IGljb24gfHwgXCJ3YXJuaW5nXCIsXHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoXCJXYXJuaW5nXCIpLFxyXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBcIlNvbWV0aGluZyB3ZW50IHdyb25nIVwiLFxyXG4gICAgICAgICAgeWVzVGl0bGU6IHllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiT2tcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6IChcclxuICAgICAgbWVzc2FnZT86IHN0cmluZyxcclxuICAgICAgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nLFxyXG4gICAgICBpY29uPzogc3RyaW5nXHJcbiAgICApID0+IHtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihEaWFsb2dDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgd2lkdGg6IFwiNDAwcHhcIixcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBpY29uOiBpY29uIHx8IFwiZXJyb3JcIixcclxuICAgICAgICAgIHRpdGxlOiB0aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIkVycm9yXCIpLFxyXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBcIlNvbWV0aGluZyB3ZW50IHdyb25nIVwiLFxyXG4gICAgICAgICAgeWVzVGl0bGU6IHllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiT2tcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIG5vdGlmeSA9IHtcclxuICAgIHN1Y2Nlc3M6IChtZXNzYWdlPzogc3RyaW5nLCBkZWxheT86IG51bWJlciwgdGl0bGU/OiBzdHJpbmcpID0+IHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgLy8gY29uc3Qgc3R5bGUgPSBgYm9yZGVyLXJhZGl1czogNXB4OyBtYXJnaW46IDA7IHBhZGRpbmc6IDEycHg7IHotaW5kZXg6IDk5OTk5OyB0b3A6IDVweDsgcmlnaHQ6IDVweDsgZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGZpeGVkO2NvbG9yOiAjNEY4QTEwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjREZGMkJGYDtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgLy8gY29uc3QgaHRtbCA9IGA8ZGl2IGlkPVwiJHt0aGlzLm5vdGlmeUlkfVwiIHN0eWxlPVwiJHtzdHlsZX1cIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPiAke21lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUoJ1N1Y2Nlc3MnKX08L2Rpdj5gO1xyXG4gICAgICAvLyB0aGlzLnNob3dOb3RpZnkoaHRtbCwgZGVsYXkpO1xyXG4gICAgICBjb25zdCBjb250ZW50ID0gbWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZShcIlN1Y2Nlc3NcIik7XHJcbiAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoY29udGVudCwgdGl0bGUsIHtcclxuICAgICAgICBlbmFibGVIdG1sOiB0cnVlLFxyXG4gICAgICAgIHRpbWVPdXQ6IGRlbGF5IHx8IDMwMDAsXHJcbiAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIHdhcm5pbmc6IChtZXNzYWdlPzogc3RyaW5nIHwgc3RyaW5nW10sIGRlbGF5PzogbnVtYmVyLCB0aXRsZT86IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuI2NhY2hlW3RoaXMuI3dhcm5pbmdLZXldIHx8IERhdGUuYWRkTWlsaXNlY29uZHModGhpcy4jY2FjaGVbdGhpcy4jd2FybmluZ0tleV0uY3JlYXRlZERhdGUsIHRoaXMuI2RlbGF5RHVyYXRpb24pIDwgbmV3IERhdGUoKSkge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW3RoaXMuI3dhcm5pbmdLZXldID0ge1xyXG4gICAgICAgICAgY3JlYXRlZERhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgbWVzc2FnZXM6IFtdLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGltZXIodGhpcy4jZGVsYXlEdXJhdGlvbikucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jbm90aWZ5V2FybmluZyh7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLiNjYWNoZVt0aGlzLiN3YXJuaW5nS2V5XS5kYXRhLnRpdGxlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLiNjYWNoZVt0aGlzLiN3YXJuaW5nS2V5XS5kYXRhLm1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBkZWxheTogZGVsYXlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZSkpIHtcclxuICAgICAgICB0aGlzLiNjYWNoZVt0aGlzLiN3YXJuaW5nS2V5XS5kYXRhLm1lc3NhZ2VzID0gWy4uLnRoaXMuI2NhY2hlW3RoaXMuI3dhcm5pbmdLZXldLmRhdGEubWVzc2FnZXMsIC4uLm1lc3NhZ2VdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW3RoaXMuI3dhcm5pbmdLZXldLmRhdGEubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVycm9yOiAobWVzc2FnZT86IHN0cmluZyB8IHN0cmluZ1tdLCBkZWxheT86IG51bWJlciwgdGl0bGU/OiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLiNjYWNoZVt0aGlzLiNlcnJvcktleV0gfHwgRGF0ZS5hZGRNaWxpc2Vjb25kcyh0aGlzLiNjYWNoZVt0aGlzLiNlcnJvcktleV0uY3JlYXRlZERhdGUsIHRoaXMuI2RlbGF5RHVyYXRpb24pIDwgbmV3IERhdGUoKSkge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW3RoaXMuI2Vycm9yS2V5XSA9IHtcclxuICAgICAgICAgIGNyZWF0ZWREYXRlOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBbXSxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRpbWVyKHRoaXMuI2RlbGF5RHVyYXRpb24pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuI25vdGlmeUVycm9yKHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuI2NhY2hlW3RoaXMuI2Vycm9yS2V5XS5kYXRhLnRpdGxlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLiNjYWNoZVt0aGlzLiNlcnJvcktleV0uZGF0YS5tZXNzYWdlcyxcclxuICAgICAgICAgICAgZGVsYXk6IGRlbGF5XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgdGhpcy4jY2FjaGVbdGhpcy4jZXJyb3JLZXldLmRhdGEubWVzc2FnZXMgPSBbLi4udGhpcy4jY2FjaGVbdGhpcy4jZXJyb3JLZXldLmRhdGEubWVzc2FnZXMsIC4uLm1lc3NhZ2VdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW3RoaXMuI2Vycm9yS2V5XS5kYXRhLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgI25vdGlmeVdhcm5pbmcgPSAoYXJnczoge1xyXG4gICAgbWVzc2FnZT86IHN0cmluZyB8IHN0cmluZ1tdLFxyXG4gICAgZGVsYXk/OiBudW1iZXIsXHJcbiAgICB0aXRsZT86IHN0cmluZ1xyXG4gIH0pID0+IHtcclxuICAgIGNvbnN0IHsgbWVzc2FnZSwgZGVsYXksIHRpdGxlIH0gPSBhcmdzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZSkpIHtcclxuICAgICAgdGhpcy4jYnVpbGRUb2FzdE11bHRpTWVzc3NhZ2UoJ3dhcm5pbmcnLCBtZXNzYWdlLCBkZWxheSwgdGl0bGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlIHx8IHRoaXMudHJhbnNsYXRlKCdXYXJuaW5nJyk7XHJcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoY29udGVudCwgdGl0bGUsIHtcclxuICAgICAgICBlbmFibGVIdG1sOiB0cnVlLFxyXG4gICAgICAgIHRpbWVPdXQ6IGRlbGF5IHx8IDMwMDAsXHJcbiAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgI25vdGlmeUVycm9yID0gKGFyZ3M6IHtcclxuICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXSxcclxuICAgIGRlbGF5PzogbnVtYmVyLFxyXG4gICAgdGl0bGU/OiBzdHJpbmdcclxuICB9KSA9PiB7XHJcbiAgICBjb25zdCB7IG1lc3NhZ2UsIGRlbGF5LCB0aXRsZSB9ID0gYXJncztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSB7XHJcbiAgICAgIHRoaXMuI2J1aWxkVG9hc3RNdWx0aU1lc3NzYWdlKCdlcnJvcicsIG1lc3NhZ2UsIGRlbGF5LCB0aXRsZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IG1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUoJ0Vycm9yJyk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGNvbnRlbnQsIHRpdGxlLCB7XHJcbiAgICAgICAgZW5hYmxlSHRtbDogdHJ1ZSxcclxuICAgICAgICB0aW1lT3V0OiBkZWxheSB8fCAzMDAwLFxyXG4gICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICNidWlsZFRvYXN0TXVsdGlNZXNzc2FnZSA9ICh0eXBlOiAnd2FybmluZycgfCAnZXJyb3InLCBtZXNzYWdlczogc3RyaW5nW10sIGRlbGF5PzogbnVtYmVyLCB0aXRsZT86IHN0cmluZykgPT4ge1xyXG4gICAgLyoqIHPhu5EgbMaw4bujbmcgaXRlbSBoaeG7g24gdGjhu4sgbeG6t2MgxJHhu4tuaCAqL1xyXG4gICAgY29uc3Qgc2hvd051bSA9IDI7XHJcbiAgICBjb25zdCBpZCA9IGBzZC1ub3RpZnktY2tiLSR7dXVpZC52NCgpfWA7XHJcbiAgICBjb25zdCBtZXNzYWdlTGVuZ3RoID0gbWVzc2FnZXMubGVuZ3RoO1xyXG4gICAgY29uc3QgbWVzc2FnZVJlc3RzID0gbWVzc2FnZXMuc3BsaWNlKHNob3dOdW0pO1xyXG4gICAgY29uc3QgbWVzc2FnZUNvbnRhaW5lciA9IGA8dWwgY2xhc3M9XCJzZC1ub3RpZnlfX2xpc3RcIj57MH17MX08L3VsPmA7XHJcbiAgICBjb25zdCBtZXNzYWdlVGVtcCA9IGA8bGkgY2xhc3M9XCJzZC1ub3RpZnlfX2l0ZW1cIj4tIHswfTwvbGk+YDtcclxuICAgIGxldCBjb250ZW50UmVzdCA9ICcnO1xyXG4gICAgaWYgKG1lc3NhZ2VSZXN0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnRlbnRSZXN0ID0gYDxpbnB1dCBpZD1cIiR7aWR9XCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuIHNkLW5vdGlmeV9fY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiAvPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJzZC1ub3RpZnlfX3RleHQgc2Qtbm90aWZ5X190ZXh0LS1zaG93IHRleHQtc2Vjb25kYXJ5XCIgZm9yPVwiJHtpZH1cIj4ke3RoaXMudHJhbnNsYXRlKCdTaG93IG1vcmUnKX08L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2Qtbm90aWZ5X19pdGVtLS1yZXN0XCI+XHJcbiAgICAgICAgJHttZXNzYWdlUmVzdHMubWFwKG0gPT4gU3RyaW5nLmZvcm1hdChtZXNzYWdlVGVtcCwgbSkpLmpvaW4oJycpfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwic2Qtbm90aWZ5X190ZXh0IHNkLW5vdGlmeV9fdGV4dC0tbGVzcyB0ZXh0LXNlY29uZGFyeVwiIGZvcj1cIiR7aWR9XCI+JHt0aGlzLnRyYW5zbGF0ZSgnU2hvdyBsZXNzJyl9PC9sYWJlbD5gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29udGVudCA9IFN0cmluZy5mb3JtYXQobWVzc2FnZUNvbnRhaW5lciwgbWVzc2FnZXMubWFwKG0gPT4gU3RyaW5nLmZvcm1hdChtZXNzYWdlVGVtcCwgbSkpLmpvaW4oJycpLCBjb250ZW50UmVzdCk7XHJcbiAgICBsZXQgdG9hc3Q6IEFjdGl2ZVRvYXN0PGFueT47XHJcbiAgICAvLyBraGkgdHJ1eeG7gW4gbWVzc2FnZSBodG1sIHPhur0gYuG7iyBzYW5pdGl6ZSBuw6puIHBo4bqjaSB0cnV54buBbiBpbm5lckhUTUwga2hpIHRvYXN0IGhp4buHbiBsw6puXHJcbiAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zY3R0Y3Blci9uZ3gtdG9hc3RyL2Jsb2IvdjEyLjEuMC9zcmMvbGliL3RvYXN0ci90b2FzdHIuc2VydmljZS50cyNMMjcxXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIHRvYXN0ID0gdGhpcy50b2FzdHIuZXJyb3IoY29udGVudCwgYCR7dGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoJ0Vycm9yJyl9ICgke21lc3NhZ2VMZW5ndGh9KWAsIHtcclxuICAgICAgICAgIGVuYWJsZUh0bWw6IHRydWUsXHJcbiAgICAgICAgICB0aW1lT3V0OiBkZWxheSB8fCAzMDAwLFxyXG4gICAgICAgICAgbWVzc2FnZUNsYXNzOiBgdG9hc3QtbWVzc2FnZSB0b2FzdC1tZXNzYWdlLSR7aWR9YCxcclxuICAgICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgdGFwVG9EaXNtaXNzOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd3YXJuaW5nJzpcclxuICAgICAgICB0b2FzdCA9IHRoaXMudG9hc3RyLndhcm5pbmcoY29udGVudCwgYCR7dGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoJ1dhcm5pbmcnKX0gKCR7bWVzc2FnZUxlbmd0aH0pYCwge1xyXG4gICAgICAgICAgZW5hYmxlSHRtbDogdHJ1ZSxcclxuICAgICAgICAgIHRpbWVPdXQ6IGRlbGF5IHx8IDMwMDAsXHJcbiAgICAgICAgICBtZXNzYWdlQ2xhc3M6IGB0b2FzdC1tZXNzYWdlIHRvYXN0LW1lc3NhZ2UtJHtpZH1gLFxyXG4gICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgICB0YXBUb0Rpc21pc3M6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRvYXN0KSB7XHJcbiAgICAgIHRvYXN0Lm9uU2hvd25cclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0b2FzdC5vbkhpZGRlbilcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtZXNzYWdlRWxlOiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC50b2FzdC1tZXNzYWdlLSR7aWR9YCk7XHJcbiAgICAgICAgICBtZXNzYWdlRWxlLmlubmVySFRNTCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZSA9IHtcclxuICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeS53YXJuaW5nKGVycik7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgIGVycj8uZXJyb3IgfHxcclxuICAgICAgICAgIGVycj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgZXJyPy5FeGNlcHRpb25NZXNzYWdlIHx8XHJcbiAgICAgICAgICBlcnI/Lk1lc3NhZ2UgfHxcclxuICAgICAgICAgIFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyLmpzb24gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgZXJyID0gZXJyLmpzb24oKTtcclxuICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgZXJyPy5lcnJvciB8fFxyXG4gICAgICAgICAgICAgIGVycj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIGVycj8uRXhjZXB0aW9uTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIGVycj8uTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmeS53YXJuaW5nKG1lc3NhZ2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubm90aWZ5Lndhcm5pbmcoXCJVbmtub3duIGVycm9yXCIpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNvbmZpcm0gPSAoXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICBvcHRpb246IHtcclxuICAgICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICBub1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICB5ZXNCdXR0b25Db2xvcj86IHN0cmluZztcclxuICAgICAgbm9CdXR0b25Db2xvcj86IHN0cmluZztcclxuICAgIH0gPSB7fVxyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEaWFsb2dDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBcIjQwMHB4XCIsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogb3B0aW9uPy50aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIkNvbmZpcm1cIiksXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICB5ZXNUaXRsZTogb3B0aW9uPy55ZXNUaXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIlllc1wiKSxcclxuICAgICAgICBub1RpdGxlOiBvcHRpb24/Lm5vVGl0bGUgfHwgdGhpcy50cmFuc2xhdGUoXCJOb1wiKSxcclxuICAgICAgICBub0J1dHRvbkNvbG9yOiBvcHRpb24/Lm5vQnV0dG9uQ29sb3IgfHwgXCJzZWNvbmRhcnlcIixcclxuICAgICAgICB5ZXNCdXR0b25Db2xvcjogb3B0aW9uPy55ZXNCdXR0b25Db2xvciB8fCBcInByaW1hcnlcIixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBcIkFDQ0VQVFwiKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDQU5DRUxcIikge1xyXG4gICAgICAgICAgICByZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGNvbmZpcm1EZWxldGUgPSAoKSA9PiB0aGlzLmNvbmZpcm0odGhpcy50cmFuc2xhdGUoXCJEZWxldGUgcmVjb3JkKHMpXCIpKTtcclxuXHJcbiAgY29uZmlybUFwcHJvdmUgPSAoKSA9PiB0aGlzLmNvbmZpcm0odGhpcy50cmFuc2xhdGUoXCJBcHByb3ZlIHJlY29yZChzKVwiKSk7XHJcblxyXG4gIGNvbmZpcm1XaXRoSW5wdXQgPSAoXHJcbiAgICB0aXRsZTogc3RyaW5nLFxyXG4gICAgb3B0aW9uOiB7XHJcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgICAgIHllc1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICBub1RpdGxlPzogc3RyaW5nO1xyXG4gICAgICByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgICAgIG1heGxlbmd0aD86IG51bWJlcjtcclxuICAgICAgeWVzQnV0dG9uQ29sb3I/OiBzdHJpbmc7XHJcbiAgICAgIG5vQnV0dG9uQ29sb3I/OiBzdHJpbmc7XHJcbiAgICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIH0gPSB7fVxyXG4gICk6IFByb21pc2U8c3RyaW5nPiA9PiB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6IFwiNDAwcHhcIixcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIkNvbmZpcm1cIiksXHJcbiAgICAgICAgbWVzc2FnZTogb3B0aW9uPy5tZXNzYWdlLFxyXG4gICAgICAgIHllc1RpdGxlOiBvcHRpb24/Lnllc1RpdGxlIHx8IHRoaXMudHJhbnNsYXRlKFwiWWVzXCIpLFxyXG4gICAgICAgIG5vVGl0bGU6IG9wdGlvbj8ubm9UaXRsZSB8fCB0aGlzLnRyYW5zbGF0ZShcIk5vXCIpLFxyXG4gICAgICAgIG5vQnV0dG9uQ29sb3I6IG9wdGlvbj8ubm9CdXR0b25Db2xvciB8fCBcInNlY29uZGFyeVwiLFxyXG4gICAgICAgIHllc0J1dHRvbkNvbG9yOiBvcHRpb24/Lnllc0J1dHRvbkNvbG9yIHx8IFwicHJpbWFyeVwiLFxyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBtYXhsZW5ndGg6IG9wdGlvbj8ubWF4bGVuZ3RoIHx8IDI1NSxcclxuICAgICAgICAgIHJlcXVpcmVkOiBvcHRpb24/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBvcHRpb24/LmRlZmF1bHRWYWx1ZSB8fCAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJBQ0NFUFRcIikge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDQU5DRUxcIikge1xyXG4gICAgICAgICAgICByZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSh2YWx1ZSk7XHJcbiAgfTtcclxufVxyXG4iXX0=
@@ -61,9 +61,9 @@ _items = new WeakMap(), _send = new WeakMap(), _load = new WeakMap();
61
61
  SdComment.decorators = [
62
62
  { type: Component, args: [{
63
63
  selector: 'sd-comment',
64
- template: "<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">\u2022</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"></sd-editor>\r\n </div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"G\u1EEDi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
64
+ template: "<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\" *ngIf=\"commentOption?.style==='basic'\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">\u2022</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-body-style1\" *ngIf=\"commentOption?.style==='style1'\">\r\n <ng-container *ngFor=\"let item of items | async; let i = index\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment {{i + 1 === (count | async) ? 'c-comment-border': ''}}\">\r\n <div class=\"c-info mb-4\">\r\n <div class=\"c-col-left\">\r\n <div class=\"c-creator\">\r\n {{item.creator}}\r\n </div>\r\n <div class=\"c-email\">\r\n {{item.email}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <div class=\"c-col-right\"\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy H:mm'\">{{item.createdDate | date:'dd/MM/yyyy H:mm'}}</div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"></sd-editor>\r\n </div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"G\u1EEDi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
65
65
  changeDetection: ChangeDetectionStrategy.OnPush,
66
- styles: [".text-black400{color:#757575}.c-container{display:flex;flex-direction:column;height:100%}.c-container .c-header{align-items:center;background-color:#fff;display:flex;height:40px;padding:0 16px}.c-container .c-header .c-title{font-weight:500}.c-container .c-body{background:#f8f9fa;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body:hover{overflow-y:auto}.c-container .c-body .c-comment{background:#fff;border:1px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;padding:12px 16px;white-space:pre-wrap;word-break:break-word}.c-container .c-body .c-comment .c-info{color:#757575}.c-container .c-body .c-comment .c-info .c-creator{color:#000;font-weight:500}.c-container .c-footer{background:#fff;min-height:120px}"]
66
+ styles: [".text-black400{color:#757575}.c-container{display:flex;flex-direction:column;height:100%}.c-container .c-header{align-items:center;background-color:#fff;display:flex;height:40px;padding:0 16px}.c-container .c-header .c-title{font-weight:500}.c-container .c-body{background:#f8f9fa;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body:hover{overflow-y:auto}.c-container .c-body .c-comment{background:#fff;border:1px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;padding:12px 16px;white-space:pre-wrap;word-break:break-word}.c-container .c-body .c-comment .c-info{color:#757575}.c-container .c-body .c-comment .c-info .c-creator{color:#000;font-weight:500}.c-container .c-body-style1{background:#fff;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body-style1:hover{overflow-y:auto}.c-container .c-body-style1 .c-comment{background:#fff;border-bottom:3px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;white-space:pre-wrap;word-break:break-word}.c-container .c-body-style1 .c-comment .c-info{color:#757575}.c-container .c-body-style1 .c-comment .c-info .c-creator{color:#000;font-weight:500;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-email{color:#000;font-weight:400;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-col-left{display:inline-block;overflow:hidden;vertical-align:top;width:calc(100% - 128px)}.c-container .c-body-style1 .c-comment .c-info .c-col-right{display:inline-block;margin-left:8px;width:120px}.c-container .c-body-style1 .c-comment-border{border-bottom:none}.c-container .c-footer{background:#fff;min-height:120px}"]
67
67
  },] }
68
68
  ];
69
69
  SdComment.ctorParameters = () => [];
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-comment.js","sources":["../../../../projects/sd-core/comment/src/lib/comment.component.ts","../../../../projects/sd-core/comment/src/lib/comment.module.ts","../../../../projects/sd-core/comment/src/public-api.ts","../../../../projects/sd-core/comment/sd-angular-core-comment.ts"],"sourcesContent":["import {\r\n Component,\r\n AfterViewInit,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n ChangeDetectionStrategy,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { SdTextarea } from '@sd-angular/core/textarea';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { Comment, SdCommentOption } from './comment.model';\r\n\r\n@Component({\r\n selector: 'sd-comment',\r\n templateUrl: './comment.component.html',\r\n styleUrls: ['./comment.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdComment implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild(SdTextarea) textarea: SdTextarea;\r\n #items = new BehaviorSubject<Comment[]>([]);\r\n #send = new BehaviorSubject<string>('');\r\n commentOption: SdCommentOption;\r\n @Input() set option(option: SdCommentOption) {\r\n this.commentOption = option;\r\n this.reload();\r\n };\r\n\r\n items: Observable<Comment[]>;\r\n count: Observable<number>;\r\n message: string;\r\n constructor() {\r\n }\r\n ngOnInit(): void {\r\n this.items = this.#items.pipe(map(items => {\r\n return items.map(e => ({\r\n ...e,\r\n picture: e.picture ?? `https://ui-avatars.com/api/?size=32&rounded=true&background=random&name=${e.creator}`\r\n }))\r\n }));\r\n this.count = this.items.pipe(map(items => items.length));\r\n }\r\n ngOnDestroy(): void {\r\n }\r\n ngAfterViewInit(): void {\r\n }\r\n\r\n onSend = () => {\r\n if (this.message) {\r\n this.commentOption?.event?.onSend(this.message);\r\n this.message = null;\r\n this.textarea?.focus();\r\n }\r\n }\r\n\r\n #load = async () => {\r\n const { items } = this.commentOption;\r\n const results = items();\r\n if (results instanceof Promise) {\r\n return await results;\r\n }\r\n return results;\r\n }\r\n\r\n reload = async () => {\r\n this.#items.next(await this.#load());\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SdComment } from './comment.component';\r\nimport { SdButtonModule } from '@sd-angular/core/button';\r\nimport { SdInputModule } from '@sd-angular/core/input';\r\nimport { SdTextareaModule } from '@sd-angular/core/textarea';\r\nimport { SdUtilityModule } from '@sd-angular/core/utility';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {SdEditorModule} from '@sd-angular/core/editor';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n SdTranslateModule,\r\n SdButtonModule,\r\n SdInputModule,\r\n SdTextareaModule,\r\n SdEditorModule,\r\n SdUtilityModule,\r\n SdTranslateModule\r\n ],\r\n declarations: [\r\n SdComment\r\n ],\r\n exports: [\r\n SdComment\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdCommentModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/comment.module';\r\nexport * from './lib/comment.model';\r\nexport * from './lib/comment.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAoBa,SAAS;IAapB;QAXA,iBAAS,IAAI,eAAe,CAAY,EAAE,CAAC,EAAC;QAC5C,gBAAQ,IAAI,eAAe,CAAS,EAAE,CAAC,EAAC;QA0BxC,WAAM,GAAG;;YACP,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,YAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,0CAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,GAAG;aACxB;SACF,CAAA;QAED,gBAAQ;YACN,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;YACxB,IAAI,OAAO,YAAY,OAAO,EAAE;gBAC9B,OAAO,MAAM,OAAO,CAAC;aACtB;YACD,OAAO,OAAO,CAAC;SAChB,CAAA,EAAA;QAED,WAAM,GAAG;YACP,qCAAY,IAAI,CAAC,MAAM,yCAAA,IAAI,CAAQ,CAAC,CAAC;SACtC,CAAA,CAAA;KAlCA;IATD,IAAa,MAAM,CAAC,MAAuB;QACzC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;;IAOD,QAAQ;QACN,IAAI,CAAC,KAAK,GAAG,qCAAY,IAAI,CAAC,GAAG,CAAC,KAAK;YACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;;gBAAI,wCACjB,CAAC,KACJ,OAAO,QAAE,CAAC,CAAC,OAAO,mCAAI,2EAA2E,CAAC,CAAC,OAAO,EAAE,KAC5G;aAAA,CAAC,CAAA;SACJ,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KAC1D;IACD,WAAW;KACV;IACD,eAAe;KACd;;;;YAjCF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,ytEAAuC;gBAEvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;uBAEE,SAAS,SAAC,UAAU;qBAIpB,KAAK;;;MCWK,eAAe;;;YAvB3B,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,eAAe;oBACf,aAAa;oBACb,gBAAgB;oBAChB,iBAAiB;oBACjB,cAAc;oBACd,aAAa;oBACb,gBAAgB;oBAChB,cAAc;oBACd,eAAe;oBACf,iBAAiB;iBAClB;gBACD,YAAY,EAAE;oBACZ,SAAS;iBACV;gBACD,OAAO,EAAE;oBACP,SAAS;iBACV;gBACD,SAAS,EAAE,EACV;aACF;;;ACnCD;;;;ACAA;;;;;;"}
1
+ {"version":3,"file":"sd-angular-core-comment.js","sources":["../../../../projects/sd-core/comment/src/lib/comment.component.ts","../../../../projects/sd-core/comment/src/lib/comment.module.ts","../../../../projects/sd-core/comment/src/public-api.ts","../../../../projects/sd-core/comment/sd-angular-core-comment.ts"],"sourcesContent":["import {\r\n Component,\r\n AfterViewInit,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n ChangeDetectionStrategy,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { SdTextarea } from '@sd-angular/core/textarea';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { Comment, SdCommentOption } from './comment.model';\r\n\r\n@Component({\r\n selector: 'sd-comment',\r\n templateUrl: './comment.component.html',\r\n styleUrls: ['./comment.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdComment implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild(SdTextarea) textarea: SdTextarea;\r\n #items = new BehaviorSubject<Comment[]>([]);\r\n #send = new BehaviorSubject<string>('');\r\n commentOption: SdCommentOption;\r\n @Input() set option(option: SdCommentOption) {\r\n this.commentOption = option;\r\n this.reload();\r\n };\r\n\r\n items: Observable<Comment[]>;\r\n count: Observable<number>;\r\n message: string;\r\n constructor() {\r\n }\r\n ngOnInit(): void {\r\n this.items = this.#items.pipe(map(items => {\r\n return items.map(e => ({\r\n ...e,\r\n picture: e.picture ?? `https://ui-avatars.com/api/?size=32&rounded=true&background=random&name=${e.creator}`\r\n }));\r\n }));\r\n this.count = this.items.pipe(map(items => items.length));\r\n }\r\n ngOnDestroy(): void {\r\n }\r\n ngAfterViewInit(): void {\r\n }\r\n\r\n onSend = () => {\r\n if (this.message) {\r\n this.commentOption?.event?.onSend(this.message);\r\n this.message = null;\r\n this.textarea?.focus();\r\n }\r\n }\r\n\r\n #load = async () => {\r\n const { items } = this.commentOption;\r\n const results = items();\r\n if (results instanceof Promise) {\r\n return await results;\r\n }\r\n return results;\r\n }\r\n\r\n reload = async () => {\r\n this.#items.next(await this.#load());\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SdComment } from './comment.component';\r\nimport { SdButtonModule } from '@sd-angular/core/button';\r\nimport { SdInputModule } from '@sd-angular/core/input';\r\nimport { SdTextareaModule } from '@sd-angular/core/textarea';\r\nimport { SdUtilityModule } from '@sd-angular/core/utility';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {SdEditorModule} from '@sd-angular/core/editor';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n SdTranslateModule,\r\n SdButtonModule,\r\n SdInputModule,\r\n SdTextareaModule,\r\n SdEditorModule,\r\n SdUtilityModule,\r\n SdTranslateModule\r\n ],\r\n declarations: [\r\n SdComment\r\n ],\r\n exports: [\r\n SdComment\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdCommentModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/comment.module';\r\nexport * from './lib/comment.model';\r\nexport * from './lib/comment.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAoBa,SAAS;IAapB;QAXA,iBAAS,IAAI,eAAe,CAAY,EAAE,CAAC,EAAC;QAC5C,gBAAQ,IAAI,eAAe,CAAS,EAAE,CAAC,EAAC;QA0BxC,WAAM,GAAG;;YACP,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,YAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,0CAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,GAAG;aACxB;SACF,CAAA;QAED,gBAAQ;YACN,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;YACxB,IAAI,OAAO,YAAY,OAAO,EAAE;gBAC9B,OAAO,MAAM,OAAO,CAAC;aACtB;YACD,OAAO,OAAO,CAAC;SAChB,CAAA,EAAA;QAED,WAAM,GAAG;YACP,qCAAY,IAAI,CAAC,MAAM,yCAAA,IAAI,CAAQ,CAAC,CAAC;SACtC,CAAA,CAAA;KAlCA;IATD,IAAa,MAAM,CAAC,MAAuB;QACzC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;;IAOD,QAAQ;QACN,IAAI,CAAC,KAAK,GAAG,qCAAY,IAAI,CAAC,GAAG,CAAC,KAAK;YACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;;gBAAI,wCACjB,CAAC,KACJ,OAAO,QAAE,CAAC,CAAC,OAAO,mCAAI,2EAA2E,CAAC,CAAC,OAAO,EAAE,KAC5G;aAAA,CAAC,CAAC;SACL,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KAC1D;IACD,WAAW;KACV;IACD,eAAe;KACd;;;;YAjCF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,u4GAAuC;gBAEvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;uBAEE,SAAS,SAAC,UAAU;qBAIpB,KAAK;;;MCWK,eAAe;;;YAvB3B,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,eAAe;oBACf,aAAa;oBACb,gBAAgB;oBAChB,iBAAiB;oBACjB,cAAc;oBACd,aAAa;oBACb,gBAAgB;oBAChB,cAAc;oBACd,eAAe;oBACf,iBAAiB;iBAClB;gBACD,YAAY,EAAE;oBACZ,SAAS;iBACV;gBACD,OAAO,EAAE;oBACP,SAAS;iBACV;gBACD,SAAS,EAAE,EACV;aACF;;;ACnCD;;;;ACAA;;;;;;"}
@@ -11,7 +11,8 @@ import { SdButtonModule } from '@sd-angular/core/button';
11
11
  import { __classPrivateFieldGet } from 'tslib';
12
12
  import '@sd-angular/core/common';
13
13
  import { SdTranslateService } from '@sd-angular/core/translate';
14
- import { takeUntil } from 'rxjs/operators';
14
+ import { take, takeUntil } from 'rxjs/operators';
15
+ import { timer } from 'rxjs';
15
16
  import { v4 } from 'uuid';
16
17
 
17
18
  class DialogConfirmComponent {
@@ -36,14 +37,15 @@ DialogConfirmComponent.ctorParameters = () => [
36
37
  { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
37
38
  ];
38
39
 
39
- var _delayDuration, _cache, _buildToastMultiMesssage;
40
- let notifyId = 0;
40
+ var _delayDuration, _warningKey, _errorKey, _cache, _notifyWarning, _notifyError, _buildToastMultiMesssage;
41
41
  class SdNotifyService {
42
42
  constructor(dialog, toastr, translateService) {
43
43
  this.dialog = dialog;
44
44
  this.toastr = toastr;
45
45
  this.translateService = translateService;
46
46
  _delayDuration.set(this, 500); // Các error/warning message sẽ tự động gộp sau khoảng thời gian trên
47
+ _warningKey.set(this, v4());
48
+ _errorKey.set(this, v4());
47
49
  _cache.set(this, {});
48
50
  this.alert = {
49
51
  info: (message, title, yesTitle, icon) => {
@@ -106,42 +108,82 @@ class SdNotifyService {
106
108
  });
107
109
  },
108
110
  warning: (message, delay, title) => {
109
- // tslint:disable-next-line: max-line-length
110
- // const style = `border-radius: 5px; margin: 0; padding: 12px; z-index: 99999; top: 5px; right: 5px; display: none; position: fixed;color: #9F6000; background-color: #FEEFB3`;
111
- // tslint:disable-next-line: max-line-length
112
- // const html = `<div id="${this.notifyId}" style="${style}"><i class="fa fa-exclamation-triangle"></i> ${message || this.translate('Warning')}</div>`;
113
- // this.showNotify(html, delay);
111
+ if (!__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].createdDate, __classPrivateFieldGet(this, _delayDuration)) < new Date()) {
112
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)] = {
113
+ createdDate: new Date(),
114
+ data: {
115
+ title: title,
116
+ messages: [],
117
+ }
118
+ };
119
+ timer(__classPrivateFieldGet(this, _delayDuration)).pipe(take(1)).subscribe(() => {
120
+ __classPrivateFieldGet(this, _notifyWarning).call(this, {
121
+ title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.title,
122
+ message: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages,
123
+ delay: delay
124
+ });
125
+ });
126
+ }
114
127
  if (Array.isArray(message)) {
115
- __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'warning', message, delay, title);
128
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages = [...__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages, ...message];
116
129
  }
117
130
  else {
118
- const content = message || this.translate("Warning");
119
- this.toastr.warning(content, title, {
120
- enableHtml: true,
121
- timeOut: delay || 3000,
122
- closeButton: true,
123
- });
131
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages.push(message);
124
132
  }
125
133
  },
126
134
  error: (message, delay, title) => {
127
- // tslint:disable-next-line: max-line-length
128
- // const style = `border-radius: 5px; margin: 0; padding: 12px; z-index: 99999; top: 5px; right: 5px; display: none; position: fixed;color: #D8000C; background-color: #FFD2D2`;
129
- // tslint:disable-next-line: max-line-length
130
- // const html = `<div id="${this.notifyId}" style="${style}"><i class="fa fa-times"></i> ${message || this.translate('Error')}</div>`;
131
- // this.showNotify(html, delay);
135
+ if (!__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].createdDate, __classPrivateFieldGet(this, _delayDuration)) < new Date()) {
136
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)] = {
137
+ createdDate: new Date(),
138
+ data: {
139
+ title: title,
140
+ messages: [],
141
+ }
142
+ };
143
+ timer(__classPrivateFieldGet(this, _delayDuration)).pipe(take(1)).subscribe(() => {
144
+ __classPrivateFieldGet(this, _notifyError).call(this, {
145
+ title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.title,
146
+ message: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages,
147
+ delay: delay
148
+ });
149
+ });
150
+ }
132
151
  if (Array.isArray(message)) {
133
- __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'error', message, delay, title);
152
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages = [...__classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages, ...message];
134
153
  }
135
154
  else {
136
- const content = message || this.translate("Error");
137
- this.toastr.error(content, title, {
138
- enableHtml: true,
139
- timeOut: delay || 3000,
140
- closeButton: true,
141
- });
155
+ __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages.push(message);
142
156
  }
143
157
  },
144
158
  };
159
+ _notifyWarning.set(this, (args) => {
160
+ const { message, delay, title } = args;
161
+ if (Array.isArray(message)) {
162
+ __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'warning', message, delay, title);
163
+ }
164
+ else {
165
+ const content = message || this.translate('Warning');
166
+ this.toastr.warning(content, title, {
167
+ enableHtml: true,
168
+ timeOut: delay || 3000,
169
+ closeButton: true,
170
+ });
171
+ }
172
+ });
173
+ _notifyError.set(this, (args) => {
174
+ const { message, delay, title } = args;
175
+ if (Array.isArray(message)) {
176
+ __classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'error', message, delay, title);
177
+ }
178
+ else {
179
+ const content = message || this.translate('Error');
180
+ this.toastr.error(content, title, {
181
+ enableHtml: true,
182
+ timeOut: delay || 3000,
183
+ closeButton: true,
184
+ });
185
+ }
186
+ });
145
187
  _buildToastMultiMesssage.set(this, (type, messages, delay, title) => {
146
188
  /** số lượng item hiển thị mặc định */
147
189
  const showNum = 2;
@@ -283,7 +325,7 @@ class SdNotifyService {
283
325
  };
284
326
  }
285
327
  }
286
- _delayDuration = new WeakMap(), _cache = new WeakMap(), _buildToastMultiMesssage = new WeakMap();
328
+ _delayDuration = new WeakMap(), _warningKey = new WeakMap(), _errorKey = new WeakMap(), _cache = new WeakMap(), _notifyWarning = new WeakMap(), _notifyError = new WeakMap(), _buildToastMultiMesssage = new WeakMap();
287
329
  SdNotifyService.decorators = [
288
330
  { type: Injectable }
289
331
  ];