@sd-angular/core 1.3.49 → 1.3.51

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.
@@ -314,6 +314,30 @@ export class SdExportService {
314
314
  const file = yield workbook.xlsx.writeBuffer();
315
315
  __classPrivateFieldGet(this, _blobToSaveAs).call(this, new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);
316
316
  });
317
+ this.exportCustom = (option) => __awaiter(this, void 0, void 0, function* () {
318
+ const { fileName, sheets } = option;
319
+ if (!(sheets === null || sheets === void 0 ? void 0 : sheets.length)) {
320
+ this.notifyService.notify.warning('Phải có ít nhất 1 sheet');
321
+ return;
322
+ }
323
+ const workbook = new Workbook();
324
+ for (const [idx, sheet] of sheets.entries()) {
325
+ const { name, columns, cells } = sheet;
326
+ const worksheet = workbook.addWorksheet(name || `Sheet ${idx + 1}`);
327
+ for (const column of (columns || [])) {
328
+ worksheet.getColumn(column.index).style = column.style;
329
+ worksheet.getColumn(column.index).width = column.width;
330
+ }
331
+ for (const cell of cells) {
332
+ const { row, column, value, style } = cell;
333
+ worksheet.getCell(row, column).style = style || worksheet.getColumn(column).style;
334
+ worksheet.getCell(row, column).value = value;
335
+ worksheet.mergeCells();
336
+ }
337
+ }
338
+ const file = yield workbook.xlsx.writeBuffer();
339
+ __classPrivateFieldGet(this, _blobToSaveAs).call(this, new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);
340
+ });
317
341
  this.mergePDF = (urls) => __awaiter(this, void 0, void 0, function* () {
318
342
  const { sdMergePDF } = API;
319
343
  const url = `${this.functionUrl}${sdMergePDF}`;
@@ -379,4 +403,4 @@ SdExportService.ctorParameters = () => [
379
403
  { type: SdNotifyService },
380
404
  { type: undefined, decorators: [{ type: Inject, args: [FIREBASE_CONFIG,] }, { type: Optional }] }
381
405
  ];
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFTLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBbUMsR0FBRyxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFLbEYsTUFBTSxPQUFPLGVBQWU7SUE4SDFCLFlBQ1UsVUFBd0IsRUFDeEIsY0FBZ0MsRUFDaEMsYUFBOEIsRUFDTyxxQkFBNkM7UUFIbEYsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQ08sMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF3QjtRQTdHNUYsc0JBQThCO1lBQzVCLE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsRUFBRSxL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QkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakM7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDeEM7UUFDSCxDQUFDLEVBQUE7SUE5UEQsQ0FBQztJQWxJRCxJQUFZLFdBQVc7O1FBQ3JCLGFBQU8sSUFBSSxDQUFDLHFCQUFxQiwwQ0FBRSxXQUFXLENBQUM7SUFDakQsQ0FBQztJQUVELElBQVksTUFBTTtRQUNoQixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUNwRCxPQUFPLEdBQUcsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFZLFVBQVU7UUFDcEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ2hDLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLENBQUM7Ozs7O1lBdEJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBWlEsWUFBWTtZQU9aLGdCQUFnQjtZQURoQixlQUFlOzRDQXlJbkIsTUFBTSxTQUFDLGVBQWUsY0FBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNkQXBpU2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvYXBpJztcclxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBFeHBvcnRUb0NzdiB9IGZyb20gJ2V4cG9ydC10by1jc3YnO1xyXG5pbXBvcnQgeyBXb3JrYm9vaywgU3R5bGUgfSBmcm9tICdleGNlbGpzJztcclxuaW1wb3J0IHsgU2RFeHBvcnRUZW1wbGF0ZSwgSUV4cG9ydE9wdGlvbiwgQVBJLCBTZEV4cG9ydEZpbGUgfSBmcm9tICcuL2V4cG9ydC5tb2RlbCc7XHJcbmltcG9ydCB7IFNkTm90aWZ5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuaW1wb3J0IHsgU2RVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdXRpbGl0eSc7XHJcbmltcG9ydCB7IEZJUkVCQVNFX0NPTkZJRywgSUZpcmViYXNlQ29uZmlndXJhdGlvbiB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRXhwb3J0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBnZXQgZnVuY3Rpb25VcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maXJlYmFzZUNvbmZpZ3VyYXRpb24/LmZ1bmN0aW9uVXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgZm9sZGVyKCkge1xyXG4gICAgY29uc3QgeyBwcm9qZWN0LCBlbnYgfSA9IHRoaXMuZmlyZWJhc2VDb25maWd1cmF0aW9uO1xyXG4gICAgcmV0dXJuIGAke3Byb2plY3R9LSR7ZW52fWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCB1c2VyRm9sZGVyKCkge1xyXG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IHRoaXMuZmlyZWJhc2VDb25maWd1cmF0aW9uO1xyXG4gICAgaWYgKCFmb2xkZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiAoZm9sZGVyKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2xkZXIoKTtcclxuICB9XHJcblxyXG4gICNmaWVsZFN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBib2xkOiB0cnVlLFxyXG4gICAgICBzaXplOiAxMSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJzAwMDAwMCcgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICdGQUZBRkEnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICN0aXRsZVN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBib2xkOiB0cnVlLFxyXG4gICAgICBzaXplOiAxMSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJ0ZGRkZGRicgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICcxNDMxODAnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICNyZXF1aXJlZFN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBpdGFsaWM6IHRydWUsXHJcbiAgICAgIHNpemU6IDExLFxyXG4gICAgICBjb2xvcjogeyBhcmdiOiAnRkZGRkZGJyB9LFxyXG4gICAgfSxcclxuICAgIGZpbGw6IHtcclxuICAgICAgdHlwZTogJ3BhdHRlcm4nLFxyXG4gICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICBmZ0NvbG9yOiB7XHJcbiAgICAgICAgYXJnYjogJ0ZGMTc0NCdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgI2Rlc2NyaXB0aW9uU3R5bGU6IFBhcnRpYWw8U3R5bGU+ID0ge1xyXG4gICAgYm9yZGVyOiB7XHJcbiAgICAgIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgIH0sXHJcbiAgICBhbGlnbm1lbnQ6IHtcclxuICAgICAgd3JhcFRleHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBmb250OiB7XHJcbiAgICAgIGl0YWxpYzogdHJ1ZSxcclxuICAgICAgc2l6ZTogOSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJzAwMDAwMCcgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICdDRkQ4REMnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICNjZWxsU3R5bGU6IFBhcnRpYWw8U3R5bGU+ID0ge1xyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgd3JhcFRleHQ6IHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBTZEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBTZFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEZJUkVCQVNFX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmaXJlYmFzZUNvbmZpZ3VyYXRpb246IElGaXJlYmFzZUNvbmZpZ3VyYXRpb24pIHtcclxuICB9XHJcblxyXG4gICNkaXJlY3RvcnkgPSAoa2V5OiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBoYXNoZWRGb2xkZXIgPSBoYXNoKHtcclxuICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcixcclxuICAgICAgdXNlckZvbGRlcjogdGhpcy51c2VyRm9sZGVyXHJcbiAgICB9KTtcclxuICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgcmV0dXJuIGBkaXIxPSR7dGhpcy5mb2xkZXJ9JmRpcjI9VS0ke2hhc2hlZEZvbGRlcn0mZGlyMz0ke2tleSB8fCAnJ31gO1xyXG4gICAgfVxyXG4gICAgaGFzaGVkRm9sZGVyID0gaGFzaCh7XHJcbiAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIsXHJcbiAgICAgIGdyb3VwXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPUctJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICB9XHJcblxyXG4gIC8vIGdlbmVyYXRlVGVtcGxhdGUgPSBhc3luYyAodGVtcGxhdGU6IFNkRXhwb3J0VGVtcGxhdGUpID0+IHtcclxuICAvLyAgIGNvbnN0IHsgc2RHZW5lcmF0ZVRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgLy8gICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7c2RHZW5lcmF0ZVRlbXBsYXRlfWA7XHJcbiAgLy8gICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHRlbXBsYXRlLCBudWxsLCB7XHJcbiAgLy8gICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2Jhc2U2NCwnIH0pO1xyXG4gIC8vICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIHRlbXBsYXRlLmZpbGVOYW1lIHx8ICdUZW1wbGF0ZScpO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2VuZXJhdGVUZW1wbGF0ZSA9IGFzeW5jICh0ZW1wbGF0ZTogU2RFeHBvcnRUZW1wbGF0ZSkgPT4ge1xyXG4gICAgY29uc3QgeyBzZEdlbmVyYXRlVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtzZEdlbmVyYXRlVGVtcGxhdGV9YDtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUsIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7YmFzZTY0LCcgfSk7XHJcbiAgICB0aGlzLiNibG9iVG9TYXZlQXMoYmxvYiwgdGVtcGxhdGUuZmlsZU5hbWUgfHwgJ1RlbXBsYXRlJyk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZT4gPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCB2YWxpZGF0b3IgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IHVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7dXBsb2FkVGVtcGxhdGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfWA7XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS51cGxvYWQoe1xyXG4gICAgICBleHRlbnNpb25zOiBbJ3hsc3gnXSxcclxuICAgICAgbWF4U2l6ZUluTWI6IDAuMSxcclxuICAgICAgdmFsaWRhdG9yXHJcbiAgICB9KTtcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UudXBsb2FkKHVybCwgZmlsZSkuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoZXJyPy5tZXNzYWdlKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGU6IFNkRXhwb3J0VGVtcGxhdGU7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGtleSwgdGVtcGxhdGUsIGdyb3VwIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7Z2VuZXJhdGVVcGxvYWRUZW1wbGF0ZX0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHRlbXBsYXRlKTtcclxuICAgIHJldHVybiB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgcmVtb3ZlRmlsZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3JlbW92ZUZpbGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfSZuYW1lPSR7ZmlsZU5hbWV9YDtcclxuICAgIGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCk7XHJcbiAgfVxyXG5cclxuICBmaWxlc0luRm9sZGVyID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgfSk6IFByb21pc2U8U2RFeHBvcnRGaWxlW10+ID0+IHtcclxuICAgIGludGVyZmFjZSBGaWxlc0luRm9sZGVyUmVzIHtcclxuICAgICAgZGlyZWN0b3J5OiBzdHJpbmc7XHJcbiAgICAgIGZpbGVzOiB7XHJcbiAgICAgICAgcHVibGljVXJsOiBzdHJpbmcsIGZ1bGxQYXRoOiBzdHJpbmcsIG5hbWU6IHN0cmluZ1xyXG4gICAgICB9W107XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGtleSwgZ3JvdXAgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpbGVzSW5Gb2xkZXIgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtmaWxlc0luRm9sZGVyfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldDxGaWxlc0luRm9sZGVyUmVzPih1cmwpO1xyXG4gICAgcmV0dXJuIHJlcy5maWxlcz8ubWFwKGUgPT4gKHtcclxuICAgICAgZmlsZVBhdGg6IGUucHVibGljVXJsLFxyXG4gICAgICBmaWxlTmFtZTogZS5uYW1lXHJcbiAgICB9KSkgfHwgW107XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZCA9IChmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5kb3dubG9hZCA9IGAke2ZpbGVOYW1lIHx8IHV1aWQudjQoKX0ueGxzeGA7XHJcbiAgICBsaW5rLmhyZWYgPSBmaWxlUGF0aDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0QnlUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBmaWxlUGF0aDogc3RyaW5nLFxyXG4gICAgY29sdW1uczogYW55W10sXHJcbiAgICBpdGVtczogYW55W10sXHJcbiAgICBmaWxlTmFtZT86IHN0cmluZ1xyXG4gIH0pID0+IHtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgc2RFeHBvcnRCeVRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7c2RFeHBvcnRCeVRlbXBsYXRlfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHtcclxuICAgICAgZmlsZVBhdGgsXHJcbiAgICAgIGNvbHVtbnMsXHJcbiAgICAgIGl0ZW1zLFxyXG4gICAgICBmaWxlTmFtZVxyXG4gICAgfSwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtiYXNlNjQsJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0Q1NWID0gYXN5bmMgKG9wdGlvbjogSUV4cG9ydE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBpdGVtcywgZmlsZU5hbWUgfSA9IG9wdGlvbjtcclxuICAgIGNvbnN0IGhlYWRlckNTViA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBoZWFkZXJDU1ZbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi50aXRsZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNzdkV4cG9ydGVyID0gbmV3IEV4cG9ydFRvQ3N2KHtcclxuICAgICAgZmlsZW5hbWU6IGAke2ZpbGVOYW1lIHx8ICdDU1YnfV8ke0RhdGUudG9Gb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0tc3MnKX1gLFxyXG4gICAgICBmaWVsZFNlcGFyYXRvcjogJywnLFxyXG4gICAgICBxdW90ZVN0cmluZ3M6ICdcIicsXHJcbiAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgc2hvd0xhYmVsczogdHJ1ZSxcclxuICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAgICAgdGl0bGU6IGZpbGVOYW1lIHx8ICdDU1YnLFxyXG4gICAgICB1c2VCb206IHRydWUsXHJcbiAgICB9KTtcclxuICAgIGNzdkV4cG9ydGVyLmdlbmVyYXRlQ3N2KFtoZWFkZXJDU1YsIC4uLml0ZW1zXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgPSBhc3luYyAob3B0aW9uOiBJRXhwb3J0T3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSwgc2hlZXRzIH0gPSBvcHRpb247XHJcbiAgICBsZXQgaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgW2lkeCwgY29sdW1uXSBvZiBjb2x1bW5zLmVudHJpZXMoKSkge1xyXG4gICAgICBpZiAoIWNvbHVtbi5maWVsZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7aWR4ICsgMX06IEZpZWxkIGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFjb2x1bW4udGl0bGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2lkeCArIDF9OiBUaXRsZSBpcyByZXF1aXJlZGApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4uZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBoYXNEZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IFdvcmtib29rKCk7IC8vYXdhaXQgWGxzeFBvcHVsYXRlLmZyb21CbGFua0FzeW5jKCk7IC8vIMSQ4buNYyBmaWxlIHNhdSBraGkgxJHDoyBkb3dubG9hZFxyXG4gICAgY29uc3QgZmlyc3RTaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgnZGF0YScpOyAvLyBM4bqleSByYSBzaGVldCDEkeG6p3UgdGnDqm5cclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBsZXQgd2lkdGggPSAxMjA7XHJcbiAgICAgIGlmIChjb2x1bW4ud2lkdGggJiYgY29sdW1uLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XHJcbiAgICAgICAgd2lkdGggPSArY29sdW1uLndpZHRoLnJlcGxhY2UoJ3B4JywgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q29sdW1uKGluZGV4ICsgMSkud2lkdGggPSB3aWR0aCAvIDcgfHwgMjA7XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jZmllbGRTdHlsZVxyXG4gICAgICBpZiAoY29sdW1uLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDIsIGluZGV4ICsgMSkuc3R5bGUgPSB0aGlzLiNyZXF1aXJlZFN0eWxlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgyLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jdGl0bGVTdHlsZTtcclxuICAgICAgfVxyXG4gICAgICBmaXJzdFNoZWV0LmdldENlbGwoMSwgaW5kZXggKyAxKS52YWx1ZSA9IGNvbHVtbi5maWVsZDtcclxuICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDIsIGluZGV4ICsgMSkudmFsdWUgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgIGlmIChoYXNEZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgzLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jZGVzY3JpcHRpb25TdHlsZTtcclxuICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoMywgaW5kZXggKyAxKS52YWx1ZSA9IGNvbHVtbi5kZXNjcmlwdGlvbiB8fCAnJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoc2hlZXRzPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVldCBvZiBzaGVldHMpIHtcclxuICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBBcnJheS5pc0FycmF5KHNoZWV0Lml0ZW1zKSAmJiBBcnJheS5pc0FycmF5KHNoZWV0LmZpZWxkcykpIHtcclxuICAgICAgICAgIGNvbnN0IG5ld1NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KHNoZWV0Lm5hbWUpO1xyXG4gICAgICAgICAgc2hlZXQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDb2x1bW4oaW5kZXggKyAxKS53aWR0aCA9IDMwO1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkuc3R5bGUgPSB0aGlzLiN0aXRsZVN0eWxlO1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkudmFsdWUgPSBmaWVsZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2hlZXQuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaWR4MSkgPT4ge1xyXG4gICAgICAgICAgICBzaGVldC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGlkeDIpID0+IHtcclxuICAgICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDIgKyBpZHgxLCAxICsgaWR4MikudmFsdWUgPSBpdGVtW2ZpZWxkXTtcclxuICAgICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDIgKyBpZHgxLCAxICsgaWR4Mikuc3R5bGUgPSB0aGlzLiNjZWxsU3R5bGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZnJvbVJvdyA9IGhhc0Rlc2NyaXB0aW9uID8gNCA6IDM7XHJcbiAgICBpdGVtcy5mb3JFYWNoKChlLCBpZHgxKSA9PiB7XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpZHgyKSA9PiB7XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKGZyb21Sb3cgKyBpZHgxLCAxICsgaWR4MikudmFsdWUgPSBlW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKGZyb21Sb3cgKyBpZHgxLCAxICsgaWR4Mikuc3R5bGUgPSB0aGlzLiNjZWxsU3R5bGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKG5ldyBCbG9iKFtmaWxlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBtZXJnZVBERiA9IGFzeW5jICh1cmxzOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgY29uc3QgeyBzZE1lcmdlUERGIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7c2RNZXJnZVBERn1gO1xyXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnBvc3QodXJsLCB7XHJcbiAgICAgIHVybHNcclxuICAgIH0sIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBgJHt1dWlkLnY0KCl9YCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRXhwb3J0ZWRJdGVtcyA9IGFzeW5jIChpdGVtczogKHBhZ2VTaXplOiBudW1iZXIsIHBhZ2VOdW1iZXI6IG51bWJlcikgPT4geyB0b3RhbDogbnVtYmVyLCB9KSA9PiB7XHJcblxyXG4gIH1cclxuXHJcbiAgI2Jsb2JUb1NhdmVBcyA9IChibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nID0gJ0V4cG9ydCcpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoLy54bHN4L2ksICcnKTtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC8ucGRmL2ksICcnKTtcclxuICAgICAgaWYgKGxpbmsuZG93bmxvYWQgIT09IHVuZGVmaW5lZCkgeyAvLyBmZWF0dXJlIGRldGVjdGlvblxyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBgJHtmaWxlTmFtZX1fJHtuZXcgRGF0ZSgpLnRvRm9ybWF0KCd5eXl5X01NX2RkX0hIX21tJyl9YCk7XHJcbiAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCbG9iVG9TYXZlQXMgZXJyb3InLCBlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV4cG9ydEluZm8ge1xyXG4gIGRhdGE6IGFueVtdO1xyXG4gIHNoZWV0TmFtZT86IHN0cmluZztcclxuICBmaWxlTmFtZT86IHN0cmluZztcclxufVxyXG4iXX0=
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFTLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBbUMsR0FBRyxFQUFzQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFLbEYsTUFBTSxPQUFPLGVBQWU7SUE4SDFCLFlBQ1UsVUFBd0IsRUFDeEIsY0FBZ0MsRUFDaEMsYUFBOEIsRUFDTyxxQkFBNkM7UUFIbEYsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQ08sMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF3QjtRQTdHNUYsc0JBQThCO1lBQzVCLE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsRUFBRSxL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WCxPQUFPO1NBQ1I7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE9BQU8sTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQzs7Ozs7WUF0QkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFaUSxZQUFZO1lBT1osZ0JBQWdCO1lBRGhCLGVBQWU7NENBeUluQixNQUFNLFNBQUMsZUFBZSxjQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2RBcGlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9hcGknO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IEV4cG9ydFRvQ3N2IH0gZnJvbSAnZXhwb3J0LXRvLWNzdic7XHJcbmltcG9ydCB7IFdvcmtib29rLCBTdHlsZSB9IGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydFRlbXBsYXRlLCBJRXhwb3J0T3B0aW9uLCBBUEksIFNkRXhwb3J0RmlsZSwgU2RFeHBvcnRDdXN0b21PcHRpb24gfSBmcm9tICcuL2V4cG9ydC5tb2RlbCc7XHJcbmltcG9ydCB7IFNkTm90aWZ5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuaW1wb3J0IHsgU2RVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdXRpbGl0eSc7XHJcbmltcG9ydCB7IEZJUkVCQVNFX0NPTkZJRywgSUZpcmViYXNlQ29uZmlndXJhdGlvbiB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRXhwb3J0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBnZXQgZnVuY3Rpb25VcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maXJlYmFzZUNvbmZpZ3VyYXRpb24/LmZ1bmN0aW9uVXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgZm9sZGVyKCkge1xyXG4gICAgY29uc3QgeyBwcm9qZWN0LCBlbnYgfSA9IHRoaXMuZmlyZWJhc2VDb25maWd1cmF0aW9uO1xyXG4gICAgcmV0dXJuIGAke3Byb2plY3R9LSR7ZW52fWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCB1c2VyRm9sZGVyKCkge1xyXG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IHRoaXMuZmlyZWJhc2VDb25maWd1cmF0aW9uO1xyXG4gICAgaWYgKCFmb2xkZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiAoZm9sZGVyKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2xkZXIoKTtcclxuICB9XHJcblxyXG4gICNmaWVsZFN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBib2xkOiB0cnVlLFxyXG4gICAgICBzaXplOiAxMSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJzAwMDAwMCcgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICdGQUZBRkEnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICN0aXRsZVN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBib2xkOiB0cnVlLFxyXG4gICAgICBzaXplOiAxMSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJ0ZGRkZGRicgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICcxNDMxODAnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICNyZXF1aXJlZFN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBpdGFsaWM6IHRydWUsXHJcbiAgICAgIHNpemU6IDExLFxyXG4gICAgICBjb2xvcjogeyBhcmdiOiAnRkZGRkZGJyB9LFxyXG4gICAgfSxcclxuICAgIGZpbGw6IHtcclxuICAgICAgdHlwZTogJ3BhdHRlcm4nLFxyXG4gICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICBmZ0NvbG9yOiB7XHJcbiAgICAgICAgYXJnYjogJ0ZGMTc0NCdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgI2Rlc2NyaXB0aW9uU3R5bGU6IFBhcnRpYWw8U3R5bGU+ID0ge1xyXG4gICAgYm9yZGVyOiB7XHJcbiAgICAgIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgIH0sXHJcbiAgICBhbGlnbm1lbnQ6IHtcclxuICAgICAgd3JhcFRleHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBmb250OiB7XHJcbiAgICAgIGl0YWxpYzogdHJ1ZSxcclxuICAgICAgc2l6ZTogOSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJzAwMDAwMCcgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICdDRkQ4REMnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICNjZWxsU3R5bGU6IFBhcnRpYWw8U3R5bGU+ID0ge1xyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgd3JhcFRleHQ6IHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBTZEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBTZFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEZJUkVCQVNFX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmaXJlYmFzZUNvbmZpZ3VyYXRpb246IElGaXJlYmFzZUNvbmZpZ3VyYXRpb24pIHtcclxuICB9XHJcblxyXG4gICNkaXJlY3RvcnkgPSAoa2V5OiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBoYXNoZWRGb2xkZXIgPSBoYXNoKHtcclxuICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcixcclxuICAgICAgdXNlckZvbGRlcjogdGhpcy51c2VyRm9sZGVyXHJcbiAgICB9KTtcclxuICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgcmV0dXJuIGBkaXIxPSR7dGhpcy5mb2xkZXJ9JmRpcjI9VS0ke2hhc2hlZEZvbGRlcn0mZGlyMz0ke2tleSB8fCAnJ31gO1xyXG4gICAgfVxyXG4gICAgaGFzaGVkRm9sZGVyID0gaGFzaCh7XHJcbiAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIsXHJcbiAgICAgIGdyb3VwXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPUctJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICB9XHJcblxyXG4gIC8vIGdlbmVyYXRlVGVtcGxhdGUgPSBhc3luYyAodGVtcGxhdGU6IFNkRXhwb3J0VGVtcGxhdGUpID0+IHtcclxuICAvLyAgIGNvbnN0IHsgc2RHZW5lcmF0ZVRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgLy8gICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7c2RHZW5lcmF0ZVRlbXBsYXRlfWA7XHJcbiAgLy8gICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHRlbXBsYXRlLCBudWxsLCB7XHJcbiAgLy8gICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2Jhc2U2NCwnIH0pO1xyXG4gIC8vICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIHRlbXBsYXRlLmZpbGVOYW1lIHx8ICdUZW1wbGF0ZScpO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2VuZXJhdGVUZW1wbGF0ZSA9IGFzeW5jICh0ZW1wbGF0ZTogU2RFeHBvcnRUZW1wbGF0ZSkgPT4ge1xyXG4gICAgY29uc3QgeyBzZEdlbmVyYXRlVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtzZEdlbmVyYXRlVGVtcGxhdGV9YDtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUsIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7YmFzZTY0LCcgfSk7XHJcbiAgICB0aGlzLiNibG9iVG9TYXZlQXMoYmxvYiwgdGVtcGxhdGUuZmlsZU5hbWUgfHwgJ1RlbXBsYXRlJyk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZT4gPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCB2YWxpZGF0b3IgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IHVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7dXBsb2FkVGVtcGxhdGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfWA7XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS51cGxvYWQoe1xyXG4gICAgICBleHRlbnNpb25zOiBbJ3hsc3gnXSxcclxuICAgICAgbWF4U2l6ZUluTWI6IDAuMSxcclxuICAgICAgdmFsaWRhdG9yXHJcbiAgICB9KTtcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UudXBsb2FkKHVybCwgZmlsZSkuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoZXJyPy5tZXNzYWdlKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGU6IFNkRXhwb3J0VGVtcGxhdGU7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGtleSwgdGVtcGxhdGUsIGdyb3VwIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7Z2VuZXJhdGVVcGxvYWRUZW1wbGF0ZX0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHRlbXBsYXRlKTtcclxuICAgIHJldHVybiB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgcmVtb3ZlRmlsZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3JlbW92ZUZpbGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfSZuYW1lPSR7ZmlsZU5hbWV9YDtcclxuICAgIGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCk7XHJcbiAgfVxyXG5cclxuICBmaWxlc0luRm9sZGVyID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgfSk6IFByb21pc2U8U2RFeHBvcnRGaWxlW10+ID0+IHtcclxuICAgIGludGVyZmFjZSBGaWxlc0luRm9sZGVyUmVzIHtcclxuICAgICAgZGlyZWN0b3J5OiBzdHJpbmc7XHJcbiAgICAgIGZpbGVzOiB7XHJcbiAgICAgICAgcHVibGljVXJsOiBzdHJpbmcsIGZ1bGxQYXRoOiBzdHJpbmcsIG5hbWU6IHN0cmluZ1xyXG4gICAgICB9W107XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGtleSwgZ3JvdXAgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpbGVzSW5Gb2xkZXIgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtmaWxlc0luRm9sZGVyfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldDxGaWxlc0luRm9sZGVyUmVzPih1cmwpO1xyXG4gICAgcmV0dXJuIHJlcy5maWxlcz8ubWFwKGUgPT4gKHtcclxuICAgICAgZmlsZVBhdGg6IGUucHVibGljVXJsLFxyXG4gICAgICBmaWxlTmFtZTogZS5uYW1lXHJcbiAgICB9KSkgfHwgW107XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZCA9IChmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5kb3dubG9hZCA9IGAke2ZpbGVOYW1lIHx8IHV1aWQudjQoKX0ueGxzeGA7XHJcbiAgICBsaW5rLmhyZWYgPSBmaWxlUGF0aDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0QnlUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBmaWxlUGF0aDogc3RyaW5nLFxyXG4gICAgY29sdW1uczogYW55W10sXHJcbiAgICBpdGVtczogYW55W10sXHJcbiAgICBmaWxlTmFtZT86IHN0cmluZ1xyXG4gIH0pID0+IHtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgc2RFeHBvcnRCeVRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7c2RFeHBvcnRCeVRlbXBsYXRlfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHtcclxuICAgICAgZmlsZVBhdGgsXHJcbiAgICAgIGNvbHVtbnMsXHJcbiAgICAgIGl0ZW1zLFxyXG4gICAgICBmaWxlTmFtZVxyXG4gICAgfSwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtiYXNlNjQsJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0Q1NWID0gYXN5bmMgKG9wdGlvbjogSUV4cG9ydE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBpdGVtcywgZmlsZU5hbWUgfSA9IG9wdGlvbjtcclxuICAgIGNvbnN0IGhlYWRlckNTViA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBoZWFkZXJDU1ZbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi50aXRsZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNzdkV4cG9ydGVyID0gbmV3IEV4cG9ydFRvQ3N2KHtcclxuICAgICAgZmlsZW5hbWU6IGAke2ZpbGVOYW1lIHx8ICdDU1YnfV8ke0RhdGUudG9Gb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0tc3MnKX1gLFxyXG4gICAgICBmaWVsZFNlcGFyYXRvcjogJywnLFxyXG4gICAgICBxdW90ZVN0cmluZ3M6ICdcIicsXHJcbiAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgc2hvd0xhYmVsczogdHJ1ZSxcclxuICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAgICAgdGl0bGU6IGZpbGVOYW1lIHx8ICdDU1YnLFxyXG4gICAgICB1c2VCb206IHRydWUsXHJcbiAgICB9KTtcclxuICAgIGNzdkV4cG9ydGVyLmdlbmVyYXRlQ3N2KFtoZWFkZXJDU1YsIC4uLml0ZW1zXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgPSBhc3luYyAob3B0aW9uOiBJRXhwb3J0T3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSwgc2hlZXRzIH0gPSBvcHRpb247XHJcbiAgICBsZXQgaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgW2lkeCwgY29sdW1uXSBvZiBjb2x1bW5zLmVudHJpZXMoKSkge1xyXG4gICAgICBpZiAoIWNvbHVtbi5maWVsZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7aWR4ICsgMX06IEZpZWxkIGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFjb2x1bW4udGl0bGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2lkeCArIDF9OiBUaXRsZSBpcyByZXF1aXJlZGApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4uZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBoYXNEZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IFdvcmtib29rKCk7IC8vYXdhaXQgWGxzeFBvcHVsYXRlLmZyb21CbGFua0FzeW5jKCk7IC8vIMSQ4buNYyBmaWxlIHNhdSBraGkgxJHDoyBkb3dubG9hZFxyXG4gICAgY29uc3QgZmlyc3RTaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgnZGF0YScpOyAvLyBM4bqleSByYSBzaGVldCDEkeG6p3UgdGnDqm5cclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBsZXQgd2lkdGggPSAxMjA7XHJcbiAgICAgIGlmIChjb2x1bW4ud2lkdGggJiYgY29sdW1uLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XHJcbiAgICAgICAgd2lkdGggPSArY29sdW1uLndpZHRoLnJlcGxhY2UoJ3B4JywgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q29sdW1uKGluZGV4ICsgMSkud2lkdGggPSB3aWR0aCAvIDcgfHwgMjA7XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jZmllbGRTdHlsZVxyXG4gICAgICBpZiAoY29sdW1uLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDIsIGluZGV4ICsgMSkuc3R5bGUgPSB0aGlzLiNyZXF1aXJlZFN0eWxlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgyLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jdGl0bGVTdHlsZTtcclxuICAgICAgfVxyXG4gICAgICBmaXJzdFNoZWV0LmdldENlbGwoMSwgaW5kZXggKyAxKS52YWx1ZSA9IGNvbHVtbi5maWVsZDtcclxuICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDIsIGluZGV4ICsgMSkudmFsdWUgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgIGlmIChoYXNEZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgzLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jZGVzY3JpcHRpb25TdHlsZTtcclxuICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoMywgaW5kZXggKyAxKS52YWx1ZSA9IGNvbHVtbi5kZXNjcmlwdGlvbiB8fCAnJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoc2hlZXRzPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVldCBvZiBzaGVldHMpIHtcclxuICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBBcnJheS5pc0FycmF5KHNoZWV0Lml0ZW1zKSAmJiBBcnJheS5pc0FycmF5KHNoZWV0LmZpZWxkcykpIHtcclxuICAgICAgICAgIGNvbnN0IG5ld1NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KHNoZWV0Lm5hbWUpO1xyXG4gICAgICAgICAgc2hlZXQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDb2x1bW4oaW5kZXggKyAxKS53aWR0aCA9IDMwO1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkuc3R5bGUgPSB0aGlzLiN0aXRsZVN0eWxlO1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkudmFsdWUgPSBmaWVsZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2hlZXQuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaWR4MSkgPT4ge1xyXG4gICAgICAgICAgICBzaGVldC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGlkeDIpID0+IHtcclxuICAgICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDIgKyBpZHgxLCAxICsgaWR4MikudmFsdWUgPSBpdGVtW2ZpZWxkXTtcclxuICAgICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDIgKyBpZHgxLCAxICsgaWR4Mikuc3R5bGUgPSB0aGlzLiNjZWxsU3R5bGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZnJvbVJvdyA9IGhhc0Rlc2NyaXB0aW9uID8gNCA6IDM7XHJcbiAgICBpdGVtcy5mb3JFYWNoKChlLCBpZHgxKSA9PiB7XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpZHgyKSA9PiB7XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKGZyb21Sb3cgKyBpZHgxLCAxICsgaWR4MikudmFsdWUgPSBlW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKGZyb21Sb3cgKyBpZHgxLCAxICsgaWR4Mikuc3R5bGUgPSB0aGlzLiNjZWxsU3R5bGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKG5ldyBCbG9iKFtmaWxlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRDdXN0b20gPSBhc3luYyAob3B0aW9uOiBTZEV4cG9ydEN1c3RvbU9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyBmaWxlTmFtZSwgc2hlZXRzIH0gPSBvcHRpb247XHJcbiAgICBpZiAoIXNoZWV0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZygnUGjhuqNpIGPDsyDDrXQgbmjhuqV0IDEgc2hlZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgV29ya2Jvb2soKTtcclxuICAgIGZvciAoY29uc3QgW2lkeCwgc2hlZXRdIG9mIHNoZWV0cy5lbnRyaWVzKCkpIHtcclxuICAgICAgY29uc3QgeyBuYW1lLCBjb2x1bW5zLCBjZWxscyB9ID0gc2hlZXRcclxuICAgICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KG5hbWUgfHwgYFNoZWV0ICR7aWR4ICsgMX1gKTtcclxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgKGNvbHVtbnMgfHwgW10pKSB7XHJcbiAgICAgICAgd29ya3NoZWV0LmdldENvbHVtbihjb2x1bW4uaW5kZXgpLnN0eWxlID0gY29sdW1uLnN0eWxlO1xyXG4gICAgICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oY29sdW1uLmluZGV4KS53aWR0aCA9IGNvbHVtbi53aWR0aDtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgY2VsbHMpIHtcclxuICAgICAgICBjb25zdCB7IHJvdywgY29sdW1uLCB2YWx1ZSwgc3R5bGUgfSA9IGNlbGw7XHJcbiAgICAgICAgd29ya3NoZWV0LmdldENlbGwocm93LCBjb2x1bW4pLnN0eWxlID0gc3R5bGUgfHwgd29ya3NoZWV0LmdldENvbHVtbihjb2x1bW4pLnN0eWxlO1xyXG4gICAgICAgIHdvcmtzaGVldC5nZXRDZWxsKHJvdywgY29sdW1uKS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhuZXcgQmxvYihbZmlsZV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB9KSwgZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VQREYgPSBhc3luYyAodXJsczogc3RyaW5nW10pID0+IHtcclxuICAgIGNvbnN0IHsgc2RNZXJnZVBERiB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3NkTWVyZ2VQREZ9YDtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwge1xyXG4gICAgICB1cmxzXHJcbiAgICB9LCBudWxsLCB7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcbiAgICB0aGlzLiNibG9iVG9TYXZlQXMoYmxvYiwgYCR7dXVpZC52NCgpfWApO1xyXG4gIH1cclxuXHJcbiAgbG9hZEV4cG9ydGVkSXRlbXMgPSBhc3luYyAoaXRlbXM6IChwYWdlU2l6ZTogbnVtYmVyLCBwYWdlTnVtYmVyOiBudW1iZXIpID0+IHsgdG90YWw6IG51bWJlciwgfSkgPT4ge1xyXG5cclxuICB9XHJcblxyXG4gICNibG9iVG9TYXZlQXMgPSAoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyA9ICdFeHBvcnQnKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC8ueGxzeC9pLCAnJyk7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvLnBkZi9pLCAnJyk7XHJcbiAgICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHsgLy8gZmVhdHVyZSBkZXRlY3Rpb25cclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYCR7ZmlsZU5hbWV9XyR7bmV3IERhdGUoKS50b0Zvcm1hdCgneXl5eV9NTV9kZF9ISF9tbScpfWApO1xyXG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQmxvYlRvU2F2ZUFzIGVycm9yJywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFeHBvcnRJbmZvIHtcclxuICBkYXRhOiBhbnlbXTtcclxuICBzaGVldE5hbWU/OiBzdHJpbmc7XHJcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbn1cclxuIl19
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"SdExportTemplate":{"__symbolic":"interface"},"SdExportTempateColumn":{"__symbolic":"interface"},"SdExportFile":{"__symbolic":"interface"},"SdExportColumn":{"__symbolic":"interface"},"IExportOption":{"__symbolic":"interface"},"IBigExportRequest":{"__symbolic":"interface"},"IBigExportResponse":{"__symbolic":"interface"},"GroupPermission":{"__symbolic":"interface"},"API":{"generateTemplate":"/excel/generateTemplate","uploadTemplate":"/excel/uploadTemplate","generateUploadTemplate":"/excel/generateUploadTemplate","export":"/excel/export","downloadByTemplate":"/excel/downloadByTemplate","filesInFolder":"/excel/filesInFolder","removeFile":"/excel/remove","sdExport":"/excel/sd-export","sdExportByTemplate":"/excel/sd-export-by-template","sdMergePDF":"/excel/sd-merge-pdf","sdGenerateTemplate":"/excel/sd-generate-template"},"SdExportService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":145,"character":5},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"FIREBASE_CONFIG","line":145,"character":12}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":145,"character":30}}]],"parameters":[{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiService","line":142,"character":24},{"__symbolic":"reference","module":"@sd-angular/core/utility","name":"SdUtilityService","line":143,"character":28},{"__symbolic":"reference","module":"@sd-angular/core/notify","name":"SdNotifyService","line":144,"character":27},{"__symbolic":"reference","module":"@sd-angular/core/common","name":"IFirebaseConfiguration","line":145,"character":72}]}]},"statics":{"ɵprov":{}}},"IExportInfo":{"__symbolic":"interface"}},"origins":{"SdExportTemplate":"./src/lib/export.model","SdExportTempateColumn":"./src/lib/export.model","SdExportFile":"./src/lib/export.model","SdExportColumn":"./src/lib/export.model","IExportOption":"./src/lib/export.model","IBigExportRequest":"./src/lib/export.model","IBigExportResponse":"./src/lib/export.model","GroupPermission":"./src/lib/export.model","API":"./src/lib/export.model","SdExportService":"./src/lib/export.service","IExportInfo":"./src/lib/export.service"},"importAs":"@sd-angular/core/export"}
1
+ {"__symbolic":"module","version":4,"metadata":{"SdExportTemplate":{"__symbolic":"interface"},"SdExportTempateColumn":{"__symbolic":"interface"},"SdExportFile":{"__symbolic":"interface"},"SdExportColumn":{"__symbolic":"interface"},"IExportOption":{"__symbolic":"interface"},"IBigExportRequest":{"__symbolic":"interface"},"IBigExportResponse":{"__symbolic":"interface"},"SdExportCustomOption":{"__symbolic":"interface"},"GroupPermission":{"__symbolic":"interface"},"API":{"generateTemplate":"/excel/generateTemplate","uploadTemplate":"/excel/uploadTemplate","generateUploadTemplate":"/excel/generateUploadTemplate","export":"/excel/export","downloadByTemplate":"/excel/downloadByTemplate","filesInFolder":"/excel/filesInFolder","removeFile":"/excel/remove","sdExport":"/excel/sd-export","sdExportByTemplate":"/excel/sd-export-by-template","sdMergePDF":"/excel/sd-merge-pdf","sdGenerateTemplate":"/excel/sd-generate-template"},"SdExportService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":145,"character":5},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"FIREBASE_CONFIG","line":145,"character":12}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":145,"character":30}}]],"parameters":[{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiService","line":142,"character":24},{"__symbolic":"reference","module":"@sd-angular/core/utility","name":"SdUtilityService","line":143,"character":28},{"__symbolic":"reference","module":"@sd-angular/core/notify","name":"SdNotifyService","line":144,"character":27},{"__symbolic":"reference","module":"@sd-angular/core/common","name":"IFirebaseConfiguration","line":145,"character":72}]}]},"statics":{"ɵprov":{}}},"IExportInfo":{"__symbolic":"interface"}},"origins":{"SdExportTemplate":"./src/lib/export.model","SdExportTempateColumn":"./src/lib/export.model","SdExportFile":"./src/lib/export.model","SdExportColumn":"./src/lib/export.model","IExportOption":"./src/lib/export.model","IBigExportRequest":"./src/lib/export.model","IBigExportResponse":"./src/lib/export.model","SdExportCustomOption":"./src/lib/export.model","GroupPermission":"./src/lib/export.model","API":"./src/lib/export.model","SdExportService":"./src/lib/export.service","IExportInfo":"./src/lib/export.service"},"importAs":"@sd-angular/core/export"}
@@ -1,3 +1,4 @@
1
+ import { CellValue, Style } from 'exceljs';
1
2
  export interface SdExportTemplate {
2
3
  fileName?: string;
3
4
  columns: SdExportTempateColumn[];
@@ -54,6 +55,29 @@ export interface IBigExportResponse {
54
55
  destination: string;
55
56
  latestRow: number;
56
57
  }
58
+ export interface SdExportCustomOption {
59
+ fileName?: string;
60
+ sheets: {
61
+ name?: string;
62
+ columns?: {
63
+ index: number;
64
+ width?: number;
65
+ style?: Style;
66
+ }[];
67
+ cells: {
68
+ row: number;
69
+ column: number;
70
+ value?: CellValue;
71
+ style?: Style;
72
+ }[];
73
+ mergeCells: {
74
+ top: number;
75
+ left: number;
76
+ bottom: number;
77
+ right: number;
78
+ }[];
79
+ }[];
80
+ }
57
81
  export declare type GroupPermission = 'view' | 'add' | 'delete';
58
82
  export declare const API: {
59
83
  generateTemplate: string;
@@ -1,5 +1,5 @@
1
1
  import { SdApiService } from '@sd-angular/core/api';
2
- import { SdExportTemplate, IExportOption, SdExportFile } from './export.model';
2
+ import { SdExportTemplate, IExportOption, SdExportFile, SdExportCustomOption } from './export.model';
3
3
  import { SdNotifyService } from '@sd-angular/core/notify';
4
4
  import { SdUtilityService } from '@sd-angular/core/utility';
5
5
  import { IFirebaseConfiguration } from '@sd-angular/core/common';
@@ -45,6 +45,7 @@ export declare class SdExportService {
45
45
  }) => Promise<void>;
46
46
  exportCSV: (option: IExportOption) => Promise<void>;
47
47
  export: (option: IExportOption) => Promise<void>;
48
+ exportCustom: (option: SdExportCustomOption) => Promise<void>;
48
49
  mergePDF: (urls: string[]) => Promise<void>;
49
50
  loadExportedItems: (items: (pageSize: number, pageNumber: number) => {
50
51
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-autocomplete.js","sources":["../../../../projects/sd-core/autocomplete/src/lib/autocomplete-display-def.directive.ts","../../../../projects/sd-core/autocomplete/src/lib/autocomplete.component.ts","../../../../projects/sd-core/autocomplete/src/lib/autocomplete.module.ts","../../../../projects/sd-core/autocomplete/src/public-api.ts","../../../../projects/sd-core/autocomplete/sd-angular-core-autocomplete.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdAutocompleteDisplayDef]'\r\n})\r\nexport class SdAutocompleteDisplayDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n ContentChild,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n Inject,\r\n Optional\r\n} from '@angular/core';\r\nimport { startWith, switchMap, debounceTime, map, finalize, catchError } from 'rxjs/operators';\r\n\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { FormControl, NgForm, Validators, FormGroupDirective, FormGroup, ValidatorFn, AsyncValidatorFn } from '@angular/forms';\r\nimport { BehaviorSubject, combineLatest, defer, from, Observable, of, Subscription } from 'rxjs';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { SdAutocompleteDisplayDefDirective } from './autocomplete-display-def.directive';\r\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\nclass SdAutocompleteErrotStateMatcher implements ErrorStateMatcher {\r\n constructor(private formControl: FormControl) { }\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n const isSubmitted = form && form.submitted;\r\n return !!(this.formControl?.invalid && (this.formControl?.dirty || this.formControl?.touched || isSubmitted));\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'sd-autocomplete',\r\n templateUrl: './autocomplete.component.html',\r\n styleUrls: ['./autocomplete.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdAutocomplete implements OnInit, OnDestroy, AfterViewInit {\r\n @Input() set key(value: any) {\r\n this.#cache = {};\r\n this.#item = {};\r\n }\r\n @ViewChild(MatAutocompleteTrigger, { read: MatAutocompleteTrigger }) autocompleteTrigger: MatAutocompleteTrigger;\r\n id = `I${uuid.v4()}`;\r\n #model: string | number;\r\n\r\n #delay = 0; // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện gọi hàm\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() appearance: MatFormFieldAppearance;\r\n loading = false;\r\n inputControl = new SdFormControl();\r\n formControl = new SdFormControl();\r\n matcher = new SdAutocompleteErrotStateMatcher(this.formControl);\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n qcId: string;\r\n label: string;\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-autocomplete',\r\n label: val\r\n });\r\n };\r\n @Input() valueField: string;\r\n @Input() displayField: string;\r\n @Input() placeholder: string;\r\n\r\n #itemsChanges = new BehaviorSubject<any[] | SearchFunc>([]);\r\n @Input() set items(items: undefined | any[] | SearchFunc) {\r\n if (!items) {\r\n this.#itemsChanges.next([]);\r\n } else if (Array.isArray(items)) {\r\n this.#itemsChanges.next(items.filter(e => e !== null && e !== undefined));\r\n } else {\r\n this.#itemsChanges.next(items);\r\n this.#delay = 500;\r\n }\r\n this.formControl.updateValueAndValidity();\r\n }\r\n\r\n @Input() limit = 100;\r\n filteredItems: Observable<any[]>;\r\n\r\n @Input() cacheChecksum: any;\r\n\r\n controlPlaceHolder: Observable<string | number>;\r\n @Input() set model(value: undefined | number | string) {\r\n if(this.#model !== value) {\r\n this.#model = value;\r\n this.formControl.setValue(value);\r\n }\r\n }\r\n @Input() hiddenAdd: boolean = false;\r\n\r\n @ContentChild(SdAutocompleteDisplayDefDirective) autocompleteDisplayDef: SdAutocompleteDisplayDefDirective;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n\r\n @Input() actionIcon: string;\r\n @Output() action = new EventEmitter();\r\n @Output() modelChange = new EventEmitter();\r\n @Output() sdChange = new EventEmitter();\r\n @Output() sdAdd = new EventEmitter();\r\n\r\n // Optional\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.inputControl.disable();\r\n this.formControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n this.formControl.enable();\r\n }\r\n }\r\n isRequired = false;\r\n @Input() set required(val: boolean | '') {\r\n this.isRequired = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n val = (val === '') || val;\r\n }\r\n #subscription = new Subscription();\r\n @ViewChild('input') input: ElementRef;\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n isFocused = false;\r\n selected: Observable<any>;\r\n\r\n #cache: {\r\n [key: string]: any[]\r\n } = {};\r\n #item: {\r\n [key: string]: any\r\n } = {};\r\n isTyping = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(this.inputControl.touchChanges.subscribe(() => {\r\n this.formControl.markAsTouched();\r\n this.ref.markForCheck();\r\n }));\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n }));\r\n this.#subscription.add(this.inputControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n }));\r\n this.#subscription.add(this.inputControl.valueChanges.subscribe(() => {\r\n this.isTyping = true;\r\n }));\r\n this.filteredItems = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.inputControl.valueChanges.pipe(debounceTime(this.#delay))]).pipe(\r\n switchMap(([items, searchText]) => {\r\n this.isTyping = false;\r\n searchText = searchText || '';\r\n if (typeof (items) !== 'function') {\r\n return items\r\n .search(searchText, [this.valueField, this.displayField])\r\n .paging(this.limit)\r\n .asObservable();\r\n }\r\n const key = hash({\r\n checksum: this.cacheChecksum || null,\r\n searchText\r\n });\r\n if (this.#cache[key] !== undefined) {\r\n if (!this.#cache[key]?.length) {\r\n this.isTyping = true;\r\n }\r\n return this.#cache[key].asObservable();\r\n }\r\n let obs: Observable<any[]>;\r\n const func = items(searchText, false);\r\n if (func instanceof Promise) {\r\n obs = defer(() => from(func));\r\n } else {\r\n obs = func;\r\n }\r\n this.loading = true;\r\n this.ref.markForCheck();\r\n return obs.pipe(map(data => {\r\n this.#cache[key] = data || [];\r\n Object.assign(this.#item, Array.toObject(this.#cache[key], this.valueField));\r\n return this.#cache[key];\r\n }), catchError(() => of([]))\r\n , finalize(() => {\r\n this.loading = false;\r\n this.ref.markForCheck();\r\n }));\r\n })\r\n );\r\n this.selected = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value))])\r\n .pipe(\r\n switchMap(([items]) => {\r\n // Vì một số lý do chưa xác định mà khi sử dụng sdViewDef thì khi chuyển sang dạng view sẽ trigger val = null\r\n // Nhưng formControl.value vẫn có giá trị đúng nên thực hiện gán val = this.formControl.value;\r\n const val = this.formControl.value;\r\n if (!this.valueField) {\r\n return of(val);\r\n }\r\n if (val || val === 0) {\r\n if (typeof (items) === 'function') {\r\n if (this.#item[val]) {\r\n return of(this.#item[val]);\r\n }\r\n let obs: Observable<any[]>;\r\n const func = items(val, true);\r\n if (func instanceof Promise) {\r\n obs = defer(() => from(func));\r\n } else {\r\n obs = func;\r\n }\r\n return obs.pipe(map(data => {\r\n Object.assign(this.#item, Array.toObject(data, this.valueField));\r\n return this.#item[val] || {\r\n [this.valueField]: val,\r\n [this.displayField]: val\r\n };\r\n }), catchError(() => {\r\n return of({\r\n [this.valueField]: val,\r\n [this.displayField]: val\r\n });\r\n }), finalize(() => {\r\n this.loading = false;\r\n this.ref.markForCheck();\r\n }));\r\n }\r\n return of(items.find(e => e[this.valueField] === val));\r\n }\r\n return of('');\r\n })\r\n );\r\n this.controlPlaceHolder = this.selected.pipe(map(item => item?.[this.displayField] ?? item ?? this.placeholder ?? (this.appearance ? this.label : '')));\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n this.#form?.removeControl(this.#name);\r\n }\r\n\r\n onSelect = (item: any) => {\r\n if (item) {\r\n if (typeof (item) === 'string' || typeof (item) === 'number') {\r\n if (this.formControl.value !== item) {\r\n this.formControl.setValue(item);\r\n this.modelChange.emit(item);\r\n this.sdChange.emit(item);\r\n }\r\n } else if (this.valueField && this.displayField) {\r\n const val = item?.[this.valueField] || null;\r\n if (this.formControl.value !== val) {\r\n this.formControl.setValue(val);\r\n this.modelChange.emit(val);\r\n this.sdChange.emit(item);\r\n }\r\n }\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.inputControl.setValue('');\r\n // this.inputControl.updateValueAndValidity();\r\n }\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n }\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n }\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n this.input?.nativeElement?.focus();\r\n }, 100);\r\n }\r\n\r\n clear = ($event?: any) => {\r\n $event?.stopPropagation();\r\n this.inputControl?.setValue('');\r\n if (this.#model) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n }\r\n\r\n onAction = ($event: Event) => {\r\n $event?.stopPropagation();\r\n this.autocompleteTrigger?.closePanel();\r\n this.action.emit();\r\n }\r\n\r\n onAdd = ($event: Event) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.sdAdd.emit();\r\n }\r\n\r\n reValidate = () => {\r\n this.inputControl.updateValueAndValidity({ emitEvent: true });\r\n }\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n // const asyncValidators: AsyncValidatorFn[] = [];\r\n if (this.isRequired) {\r\n validators.push(Validators.required);\r\n }\r\n // if (this.#validator) {\r\n // asyncValidators.push(this.#customValidator(this.#validator));\r\n // }\r\n this.formControl.setValidators(validators);\r\n // this.formControl.setAsyncValidators(asyncValidators);\r\n this.formControl.updateValueAndValidity();\r\n }\r\n}\r\n\r\ntype SearchFunc = (searchText?: string | number, isFormValue?: boolean) => Promise<any[]> | Observable<any[]>;","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdAutocomplete } from './autocomplete.component';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { SdAutocompleteDisplayDefDirective } from './autocomplete-display-def.directive';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdPopoverModule } from '@sd-angular/core/popover';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatAutocompleteModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdPopoverModule\r\n ],\r\n declarations: [\r\n SdAutocomplete,\r\n SdAutocompleteDisplayDefDirective\r\n ],\r\n exports: [\r\n SdAutocomplete,\r\n SdAutocompleteDisplayDefDirective,\r\n SdCommonModule\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdAutocompleteModule {\r\n\r\n}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/autocomplete.module';\r\nexport * from './lib/autocomplete.component';\r\nexport * from './lib/autocomplete-display-def.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-autocomplete.js","sources":["../../../../projects/sd-core/autocomplete/src/lib/autocomplete-display-def.directive.ts","../../../../projects/sd-core/autocomplete/src/lib/autocomplete.component.ts","../../../../projects/sd-core/autocomplete/src/lib/autocomplete.module.ts","../../../../projects/sd-core/autocomplete/src/public-api.ts","../../../../projects/sd-core/autocomplete/sd-angular-core-autocomplete.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdAutocompleteDisplayDef]'\r\n})\r\nexport class SdAutocompleteDisplayDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n ContentChild,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n Inject,\r\n Optional\r\n} from '@angular/core';\r\nimport { startWith, switchMap, debounceTime, map, finalize, catchError } from 'rxjs/operators';\r\n\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { FormControl, NgForm, Validators, FormGroupDirective, FormGroup, ValidatorFn, AsyncValidatorFn } from '@angular/forms';\r\nimport { BehaviorSubject, combineLatest, defer, from, Observable, of, Subscription } from 'rxjs';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { SdAutocompleteDisplayDefDirective } from './autocomplete-display-def.directive';\r\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\nclass SdAutocompleteErrotStateMatcher implements ErrorStateMatcher {\r\n constructor(private formControl: FormControl) { }\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n const isSubmitted = form && form.submitted;\r\n return !!(this.formControl?.invalid && (this.formControl?.dirty || this.formControl?.touched || isSubmitted));\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'sd-autocomplete',\r\n templateUrl: './autocomplete.component.html',\r\n styleUrls: ['./autocomplete.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdAutocomplete implements OnInit, OnDestroy, AfterViewInit {\r\n @Input() set key(value: any) {\r\n this.#cache = {};\r\n this.#item = {};\r\n }\r\n @ViewChild(MatAutocompleteTrigger, { read: MatAutocompleteTrigger }) autocompleteTrigger: MatAutocompleteTrigger;\r\n id = `I${uuid.v4()}`;\r\n #model: string | number;\r\n\r\n #delay = 0; // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện gọi hàm\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() appearance: MatFormFieldAppearance;\r\n loading = false;\r\n inputControl = new SdFormControl();\r\n formControl = new SdFormControl();\r\n matcher = new SdAutocompleteErrotStateMatcher(this.formControl);\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n qcId: string;\r\n label: string;\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-autocomplete',\r\n label: val\r\n });\r\n };\r\n @Input() valueField: string;\r\n @Input() displayField: string;\r\n @Input() placeholder: string;\r\n\r\n #itemsChanges = new BehaviorSubject<any[] | SearchFunc>([]);\r\n @Input() set items(items: undefined | any[] | SearchFunc) {\r\n if (!items) {\r\n this.#itemsChanges.next([]);\r\n } else if (Array.isArray(items)) {\r\n this.#itemsChanges.next(items.filter(e => e !== null && e !== undefined));\r\n } else {\r\n this.#itemsChanges.next(items);\r\n this.#delay = 500;\r\n }\r\n this.formControl.updateValueAndValidity();\r\n }\r\n\r\n @Input() limit = 100;\r\n filteredItems: Observable<any[]>;\r\n\r\n @Input() cacheChecksum: any;\r\n\r\n controlPlaceHolder: Observable<string | number>;\r\n @Input() set model(value: undefined | number | string) {\r\n if(this.#model !== value) {\r\n this.#model = value;\r\n this.formControl.setValue(value);\r\n }\r\n }\r\n @Input() hiddenAdd: boolean = false;\r\n\r\n @ContentChild(SdAutocompleteDisplayDefDirective) autocompleteDisplayDef: SdAutocompleteDisplayDefDirective;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n\r\n @Input() actionIcon: string;\r\n @Output() action = new EventEmitter();\r\n @Output() modelChange = new EventEmitter();\r\n @Output() sdChange = new EventEmitter();\r\n @Output() sdAdd = new EventEmitter();\r\n\r\n // Optional\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.inputControl.disable();\r\n this.formControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n this.formControl.enable();\r\n }\r\n }\r\n isRequired = false;\r\n @Input() set required(val: boolean | '') {\r\n this.isRequired = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n val = (val === '') || val;\r\n }\r\n #subscription = new Subscription();\r\n @ViewChild('input') input: ElementRef;\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n isFocused = false;\r\n selected: Observable<any>;\r\n\r\n #cache: {\r\n [key: string]: any[]\r\n } = {};\r\n #item: {\r\n [key: string]: any\r\n } = {};\r\n isTyping = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(this.inputControl.touchChanges.subscribe(() => {\r\n this.formControl.markAsTouched();\r\n this.ref.markForCheck();\r\n }));\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n }));\r\n this.#subscription.add(this.inputControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n }));\r\n this.#subscription.add(this.inputControl.valueChanges.subscribe(() => {\r\n this.isTyping = true;\r\n }));\r\n this.filteredItems = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.inputControl.valueChanges.pipe(debounceTime(this.#delay))]).pipe(\r\n switchMap(([items, searchText]) => {\r\n this.isTyping = false;\r\n searchText = searchText || '';\r\n if (typeof (items) !== 'function') {\r\n return items\r\n .search(searchText, [this.valueField, this.displayField])\r\n .paging(this.limit)\r\n .asObservable();\r\n }\r\n const key = hash({\r\n checksum: this.cacheChecksum || null,\r\n searchText\r\n });\r\n if (this.#cache[key] !== undefined) {\r\n if (!this.#cache[key]?.length) {\r\n this.isTyping = true;\r\n }\r\n return this.#cache[key].asObservable();\r\n }\r\n let obs: Observable<any[]>;\r\n const func = items(searchText, false);\r\n if (func instanceof Promise) {\r\n obs = defer(() => from(func));\r\n } else {\r\n obs = func;\r\n }\r\n this.loading = true;\r\n this.ref.markForCheck();\r\n return obs.pipe(map(data => {\r\n this.#cache[key] = data || [];\r\n Object.assign(this.#item, Array.toObject(this.#cache[key], this.valueField));\r\n return this.#cache[key];\r\n }), catchError(() => of([]))\r\n , finalize(() => {\r\n this.loading = false;\r\n this.ref.markForCheck();\r\n }));\r\n })\r\n );\r\n this.selected = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value))])\r\n .pipe(\r\n switchMap(([items]) => {\r\n // Vì một số lý do chưa xác định mà khi sử dụng sdViewDef thì khi chuyển sang dạng view sẽ trigger val = null\r\n // Nhưng formControl.value vẫn có giá trị đúng nên thực hiện gán val = this.formControl.value;\r\n const val = this.formControl.value;\r\n if (!this.valueField) {\r\n return of(val);\r\n }\r\n if (val || val === 0) {\r\n if (typeof (items) === 'function') {\r\n if (this.#item[val]) {\r\n return of(this.#item[val]);\r\n }\r\n let obs: Observable<any[]>;\r\n const func = items(val, true);\r\n if (func instanceof Promise) {\r\n obs = defer(() => from(func));\r\n } else {\r\n obs = func;\r\n }\r\n return obs.pipe(map(data => {\r\n Object.assign(this.#item, Array.toObject(data, this.valueField));\r\n return this.#item[val] || {\r\n [this.valueField]: val,\r\n [this.displayField]: val\r\n };\r\n }), catchError(() => {\r\n return of({\r\n [this.valueField]: val,\r\n [this.displayField]: val\r\n });\r\n }), finalize(() => {\r\n this.loading = false;\r\n this.ref.markForCheck();\r\n }));\r\n }\r\n return of(items.find(e => e[this.valueField] === val));\r\n }\r\n return of('');\r\n })\r\n );\r\n this.controlPlaceHolder = this.selected.pipe(map(item => item?.[this.displayField] ?? item ?? this.placeholder ?? (this.appearance ? this.label : '')));\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n this.#form?.removeControl(this.#name);\r\n }\r\n\r\n onSelect = (item: any) => {\r\n if (item) {\r\n if (typeof (item) === 'string' || typeof (item) === 'number') {\r\n if (this.formControl.value !== item) {\r\n this.formControl.setValue(item);\r\n this.modelChange.emit(item);\r\n this.sdChange.emit(item);\r\n }\r\n } else if (this.valueField && this.displayField) {\r\n const val = item?.[this.valueField] || null;\r\n if (this.formControl.value !== val) {\r\n this.formControl.setValue(val);\r\n this.modelChange.emit(val);\r\n this.sdChange.emit(item);\r\n }\r\n }\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.inputControl.setValue('');\r\n // this.inputControl.updateValueAndValidity();\r\n }\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n }\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n }\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n this.input?.nativeElement?.focus();\r\n }, 100);\r\n }\r\n\r\n clear = ($event?: any) => {\r\n $event?.stopPropagation();\r\n this.inputControl?.setValue('');\r\n if (this.#model) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n }\r\n\r\n onAction = ($event: Event) => {\r\n $event?.stopPropagation();\r\n this.autocompleteTrigger?.closePanel();\r\n this.action.emit();\r\n }\r\n\r\n onAdd = ($event: Event) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.sdAdd.emit();\r\n }\r\n\r\n reValidate = () => {\r\n this.inputControl.updateValueAndValidity({ emitEvent: true });\r\n }\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n // const asyncValidators: AsyncValidatorFn[] = [];\r\n if (this.isRequired) {\r\n validators.push(Validators.required);\r\n }\r\n // if (this.#validator) {\r\n // asyncValidators.push(this.#customValidator(this.#validator));\r\n // }\r\n this.formControl.setValidators(validators);\r\n // this.formControl.setAsyncValidators(asyncValidators);\r\n this.formControl.updateValueAndValidity();\r\n }\r\n}\r\n\r\ntype SearchFunc = (searchText?: string, isFormValue?: boolean) => Promise<any[]> | Observable<any[]>;","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdAutocomplete } from './autocomplete.component';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { SdAutocompleteDisplayDefDirective } from './autocomplete-display-def.directive';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdPopoverModule } from '@sd-angular/core/popover';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatAutocompleteModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdPopoverModule\r\n ],\r\n declarations: [\r\n SdAutocomplete,\r\n SdAutocompleteDisplayDefDirective\r\n ],\r\n exports: [\r\n SdAutocomplete,\r\n SdAutocompleteDisplayDefDirective,\r\n SdCommonModule\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdAutocompleteModule {\r\n\r\n}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/autocomplete.module';\r\nexport * from './lib/autocomplete.component';\r\nexport * from './lib/autocomplete-display-def.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
@@ -64,7 +64,7 @@ SdButton.decorators = [
64
64
  host: {
65
65
  '[attr.disabled]': 'isDisabled ? true : null'
66
66
  },
67
- styles: [".text-black400{color:#757575}:host[disabled=true]{pointer-events:none}:host ::ng-deep button.c-button{font-size:16px;height:40px;line-height:20px;min-width:auto;padding:2px 16px!important}:host ::ng-deep button.c-button .mat-button-wrapper{align-items:center;display:flex;justify-content:center}:host ::ng-deep button.c-button.mat-button-disabled{background-color:#e9e9e9!important;color:#a6a6a6!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important;width:40px!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;font-weight:400;height:32px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-sm mat-icon{font-size:16px!important;height:16px!important;width:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;height:48px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-primary{background-color:#2962ff;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-success{background-color:#4caf50;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-warning{background-color:#ff9600;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-danger{background-color:#f82c13;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-secondary{background-color:#212121;color:#fff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-primary{background-color:#e7e9ff;color:#2962ff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-success{background-color:#dbefdc;color:#4caf50}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-warning{background-color:#ffeacc;color:#ff9600}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-danger{background-color:#fed5d0;color:#f82c13}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-secondary{background-color:#e9e9e9;color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-info,:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-secondary{color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-button.mat-info,:host ::ng-deep button.c-button.c-link.mat-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-link.mat-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-link.mat-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-link.mat-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-link.mat-button.mat-secondary{color:#212121}"]
67
+ styles: [".text-black400{color:#757575}:host[disabled=true]{pointer-events:none}:host ::ng-deep button.c-button{font-size:16px;height:40px;line-height:20px;min-width:auto;padding:2px 16px!important}:host ::ng-deep button.c-button .mat-button-wrapper{align-items:center;display:flex;justify-content:center}:host ::ng-deep button.c-button.mat-button-disabled{background-color:#e9e9e9!important;color:#a6a6a6!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important;width:40px!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;font-weight:400;height:32px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-sm mat-icon{font-size:16px!important;height:16px!important;width:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;height:48px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-primary{background-color:#2962ff;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-success{background-color:#4caf50;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-warning{background-color:#ff9600;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-danger{background-color:#f82c13;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-secondary{background-color:#212121;color:#fff}:host ::ng-deep button.c-button.c-fill .mat-spinner.mat-progress-spinner circle,:host ::ng-deep button.c-button.c-fill .mat-spinner.mat-spinner circle{stroke:#fff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-primary{background-color:#e7e9ff;color:#2962ff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-success{background-color:#dbefdc;color:#4caf50}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-warning{background-color:#ffeacc;color:#ff9600}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-danger{background-color:#fed5d0;color:#f82c13}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-secondary{background-color:#e9e9e9;color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-info,:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-secondary{color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-button.mat-info,:host ::ng-deep button.c-button.c-link.mat-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-link.mat-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-link.mat-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-link.mat-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-link.mat-button.mat-secondary{color:#212121}"]
68
68
  },] }
69
69
  ];
70
70
  SdButton.ctorParameters = () => [
@@ -322,6 +322,30 @@ class SdExportService {
322
322
  const file = yield workbook.xlsx.writeBuffer();
323
323
  __classPrivateFieldGet(this, _blobToSaveAs).call(this, new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);
324
324
  });
325
+ this.exportCustom = (option) => __awaiter(this, void 0, void 0, function* () {
326
+ const { fileName, sheets } = option;
327
+ if (!(sheets === null || sheets === void 0 ? void 0 : sheets.length)) {
328
+ this.notifyService.notify.warning('Phải có ít nhất 1 sheet');
329
+ return;
330
+ }
331
+ const workbook = new Workbook();
332
+ for (const [idx, sheet] of sheets.entries()) {
333
+ const { name, columns, cells } = sheet;
334
+ const worksheet = workbook.addWorksheet(name || `Sheet ${idx + 1}`);
335
+ for (const column of (columns || [])) {
336
+ worksheet.getColumn(column.index).style = column.style;
337
+ worksheet.getColumn(column.index).width = column.width;
338
+ }
339
+ for (const cell of cells) {
340
+ const { row, column, value, style } = cell;
341
+ worksheet.getCell(row, column).style = style || worksheet.getColumn(column).style;
342
+ worksheet.getCell(row, column).value = value;
343
+ worksheet.mergeCells();
344
+ }
345
+ }
346
+ const file = yield workbook.xlsx.writeBuffer();
347
+ __classPrivateFieldGet(this, _blobToSaveAs).call(this, new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);
348
+ });
325
349
  this.mergePDF = (urls) => __awaiter(this, void 0, void 0, function* () {
326
350
  const { sdMergePDF } = API;
327
351
  const url = `${this.functionUrl}${sdMergePDF}`;