@abp/ng.theme.shared 7.0.0-rc.3 → 7.0.0-rc.4

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.
Files changed (80) hide show
  1. package/esm2020/extensions/lib/adapters/date-time.adapter.mjs +3 -3
  2. package/esm2020/extensions/lib/adapters/date.adapter.mjs +3 -3
  3. package/esm2020/extensions/lib/adapters/time.adapter.mjs +3 -3
  4. package/esm2020/extensions/lib/components/abstract-actions/abstract-actions.component.mjs +3 -3
  5. package/esm2020/extensions/lib/components/date-time-picker/date-time-picker.component.mjs +5 -5
  6. package/esm2020/extensions/lib/components/extensible-form/extensible-form-prop.component.mjs +4 -4
  7. package/esm2020/extensions/lib/components/extensible-form/extensible-form.component.mjs +3 -3
  8. package/esm2020/extensions/lib/components/extensible-table/extensible-table.component.mjs +3 -3
  9. package/esm2020/extensions/lib/components/grid-actions/grid-actions.component.mjs +4 -4
  10. package/esm2020/extensions/lib/components/page-toolbar/page-toolbar.component.mjs +3 -3
  11. package/esm2020/extensions/lib/directives/disabled.directive.mjs +3 -3
  12. package/esm2020/extensions/lib/directives/prop-data.directive.mjs +3 -3
  13. package/esm2020/extensions/lib/models/props.mjs +1 -1
  14. package/esm2020/extensions/lib/pipes/create-injector.pipe.mjs +7 -7
  15. package/esm2020/extensions/lib/services/extensions.service.mjs +3 -3
  16. package/esm2020/extensions/lib/ui-extensions.module.mjs +8 -8
  17. package/esm2020/lib/components/breadcrumb/breadcrumb.component.mjs +3 -3
  18. package/esm2020/lib/components/breadcrumb-items/breadcrumb-items.component.mjs +3 -3
  19. package/esm2020/lib/components/button/button.component.mjs +3 -3
  20. package/esm2020/lib/components/confirmation/confirmation.component.mjs +3 -3
  21. package/esm2020/lib/components/http-error-wrapper/http-error-wrapper.component.mjs +3 -3
  22. package/esm2020/lib/components/loader-bar/loader-bar.component.mjs +3 -3
  23. package/esm2020/lib/components/loading/loading.component.mjs +3 -3
  24. package/esm2020/lib/components/modal/modal-close.directive.mjs +3 -3
  25. package/esm2020/lib/components/modal/modal-ref.service.mjs +3 -3
  26. package/esm2020/lib/components/modal/modal.component.mjs +3 -3
  27. package/esm2020/lib/components/toast/toast.component.mjs +3 -3
  28. package/esm2020/lib/components/toast-container/toast-container.component.mjs +3 -3
  29. package/esm2020/lib/directives/ellipsis.directive.mjs +7 -7
  30. package/esm2020/lib/directives/loading.directive.mjs +3 -3
  31. package/esm2020/lib/directives/ngx-datatable-default.directive.mjs +3 -3
  32. package/esm2020/lib/directives/ngx-datatable-list.directive.mjs +3 -3
  33. package/esm2020/lib/handlers/document-dir.handler.mjs +3 -3
  34. package/esm2020/lib/handlers/error.handler.mjs +3 -3
  35. package/esm2020/lib/services/confirmation.service.mjs +3 -3
  36. package/esm2020/lib/services/nav-items.service.mjs +3 -3
  37. package/esm2020/lib/services/page-alert.service.mjs +3 -3
  38. package/esm2020/lib/services/toaster.service.mjs +3 -3
  39. package/esm2020/lib/services/user-menu.service.mjs +3 -3
  40. package/esm2020/lib/theme-shared.module.mjs +8 -8
  41. package/esm2020/lib/utils/date-parser-formatter.mjs +3 -3
  42. package/esm2020/lib/utils/validation-utils.mjs +1 -1
  43. package/esm2020/testing/lib/theme-shared-testing.module.mjs +4 -4
  44. package/extensions/lib/components/abstract-actions/abstract-actions.component.d.ts +1 -1
  45. package/extensions/lib/components/date-time-picker/date-time-picker.component.d.ts +1 -1
  46. package/extensions/lib/components/extensible-form/extensible-form-prop.component.d.ts +1 -1
  47. package/extensions/lib/components/extensible-form/extensible-form.component.d.ts +1 -1
  48. package/extensions/lib/components/extensible-table/extensible-table.component.d.ts +1 -1
  49. package/extensions/lib/components/grid-actions/grid-actions.component.d.ts +1 -1
  50. package/extensions/lib/components/page-toolbar/page-toolbar.component.d.ts +1 -1
  51. package/extensions/lib/directives/disabled.directive.d.ts +1 -1
  52. package/extensions/lib/directives/prop-data.directive.d.ts +1 -1
  53. package/extensions/lib/models/props.d.ts +2 -2
  54. package/fesm2015/abp-ng.theme.shared-extensions.mjs +54 -54
  55. package/fesm2015/abp-ng.theme.shared-extensions.mjs.map +1 -1
  56. package/fesm2015/abp-ng.theme.shared-testing.mjs +4 -4
  57. package/fesm2015/abp-ng.theme.shared.mjs +84 -84
  58. package/fesm2015/abp-ng.theme.shared.mjs.map +1 -1
  59. package/fesm2020/abp-ng.theme.shared-extensions.mjs +54 -54
  60. package/fesm2020/abp-ng.theme.shared-extensions.mjs.map +1 -1
  61. package/fesm2020/abp-ng.theme.shared-testing.mjs +4 -4
  62. package/fesm2020/abp-ng.theme.shared.mjs +84 -84
  63. package/fesm2020/abp-ng.theme.shared.mjs.map +1 -1
  64. package/lib/components/breadcrumb/breadcrumb.component.d.ts +1 -1
  65. package/lib/components/breadcrumb-items/breadcrumb-items.component.d.ts +1 -1
  66. package/lib/components/button/button.component.d.ts +1 -1
  67. package/lib/components/confirmation/confirmation.component.d.ts +1 -1
  68. package/lib/components/http-error-wrapper/http-error-wrapper.component.d.ts +1 -1
  69. package/lib/components/loader-bar/loader-bar.component.d.ts +1 -1
  70. package/lib/components/loading/loading.component.d.ts +1 -1
  71. package/lib/components/modal/modal-close.directive.d.ts +1 -1
  72. package/lib/components/modal/modal.component.d.ts +1 -1
  73. package/lib/components/toast/toast.component.d.ts +1 -1
  74. package/lib/components/toast-container/toast-container.component.d.ts +1 -1
  75. package/lib/directives/ellipsis.directive.d.ts +1 -1
  76. package/lib/directives/loading.directive.d.ts +1 -1
  77. package/lib/directives/ngx-datatable-default.directive.d.ts +1 -1
  78. package/lib/directives/ngx-datatable-list.directive.d.ts +1 -1
  79. package/lib/utils/validation-utils.d.ts +1 -1
  80. package/package.json +4 -4
@@ -36,9 +36,9 @@ export class DateTimeAdapter {
36
36
  return new Date(date).toISOString();
37
37
  }
38
38
  }
39
- DateTimeAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateTimeAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
40
- DateTimeAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateTimeAdapter });
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateTimeAdapter, decorators: [{
39
+ DateTimeAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateTimeAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
40
+ DateTimeAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateTimeAdapter });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateTimeAdapter, decorators: [{
42
42
  type: Injectable
43
43
  }] });
44
44
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL2FkYXB0ZXJzL2RhdGUtdGltZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDLE1BQU0sT0FBTyxlQUFlO0lBRzFCLFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLElBQUksS0FBSyxDQUFDLElBQXlCLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVsRCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1lBQzFCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzFCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUErQjtRQUNyQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFdkIsS0FBSyxHQUFHO1lBQ04sbUNBQW1DO1lBQ25DLElBQUksRUFBRSxHQUFHLENBQUMsY0FBYyxFQUFFO1lBQzFCLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztZQUN6QixHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUNsQixJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLENBQUM7WUFDVCxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2IsR0FBRyxLQUFLO1NBQ1QsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUNuQixLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUNmLEtBQUssQ0FBQyxHQUFHLEVBQ1QsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxNQUFNLENBQ2IsQ0FBQztRQUVGLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQzs7NEdBakRVLGVBQWU7Z0hBQWYsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JEYXRlU3RydWN0LCBOZ2JUaW1lU3RydWN0IH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVBZGFwdGVyIHtcclxuICB2YWx1ZSE6IE5nYkRhdGVUaW1lU3RydWN0O1xyXG5cclxuICBmcm9tTW9kZWwodmFsdWU6IHN0cmluZyB8IERhdGUpOiBOZ2JEYXRlVGltZVN0cnVjdCB8IG51bGwge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuXHJcbiAgICBpZiAoaXNOYU4oZGF0ZSBhcyB1bmtub3duIGFzIG51bWJlcikpIHJldHVybiBudWxsO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKCksXHJcbiAgICAgIGhvdXI6IGRhdGUuZ2V0SG91cnMoKSxcclxuICAgICAgbWludXRlOiBkYXRlLmdldE1pbnV0ZXMoKSxcclxuICAgICAgc2Vjb25kOiBkYXRlLmdldFNlY29uZHMoKSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgfVxyXG5cclxuICB0b01vZGVsKHZhbHVlOiBOZ2JEYXRlVGltZVN0cnVjdCB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgdmFsdWUgPSB7XHJcbiAgICAgIC8vIFRPRE8gbG9vayBmb3Igc3RyaWN0IG1vZGUgZXJyb3JzXHJcbiAgICAgIHllYXI6IG5vdy5nZXRVVENGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogbm93LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5vdy5nZXREYXRlKCksXHJcbiAgICAgIGhvdXI6IDAsXHJcbiAgICAgIG1pbnV0ZTogMCxcclxuICAgICAgc2Vjb25kOiAwLFxyXG4gICAgICAuLi50aGlzLnZhbHVlLFxyXG4gICAgICAuLi52YWx1ZSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKFxyXG4gICAgICB2YWx1ZS55ZWFyLFxyXG4gICAgICB2YWx1ZS5tb250aCAtIDEsXHJcbiAgICAgIHZhbHVlLmRheSxcclxuICAgICAgdmFsdWUuaG91cixcclxuICAgICAgdmFsdWUubWludXRlLFxyXG4gICAgICB2YWx1ZS5zZWNvbmQsXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0lTT1N0cmluZygpO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBOZ2JEYXRlVGltZVN0cnVjdCA9IE5nYkRhdGVTdHJ1Y3QgJiBOZ2JUaW1lU3RydWN0O1xyXG4iXX0=
@@ -33,9 +33,9 @@ export class DateAdapter extends NgbDateAdapter {
33
33
  return new Date(dateUtc.getTime() + Math.abs(dateUtc.getTimezoneOffset() * 60000));
34
34
  }
35
35
  }
36
- DateAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
37
- DateAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateAdapter });
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateAdapter, decorators: [{
36
+ DateAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
37
+ DateAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateAdapter });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateAdapter, decorators: [{
39
39
  type: Injectable
40
40
  }] });
41
41
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL2V4dGVuc2lvbnMvc3JjL2xpYi9hZGFwdGVycy9kYXRlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHM0UsTUFBTSxPQUFPLFdBQVksU0FBUSxjQUE2QjtJQUM1RCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV4QixJQUFJLElBQVUsQ0FBQztRQUVmLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUF5QixDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFbEQsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztZQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUEyQjtRQUNqQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxNQUFNLENBQUMsS0FBYTtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7O3dHQWpDVSxXQUFXOzRHQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkRhdGVBZGFwdGVyLCBOZ2JEYXRlU3RydWN0IH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRGF0ZUFkYXB0ZXIgZXh0ZW5kcyBOZ2JEYXRlQWRhcHRlcjxzdHJpbmcgfCBEYXRlPiB7XHJcbiAgZnJvbU1vZGVsKHZhbHVlOiBzdHJpbmcgfCBEYXRlKTogTmdiRGF0ZVN0cnVjdCB8IG51bGwge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgbGV0IGRhdGU6IERhdGU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZGF0ZSA9IHRoaXMuZGF0ZU9mKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTmFOKGRhdGUgYXMgdW5rbm93biBhcyBudW1iZXIpKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwodmFsdWU6IE5nYkRhdGVTdHJ1Y3QgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcclxuXHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUueWVhciwgdmFsdWUubW9udGggLSAxLCB2YWx1ZS5kYXkpO1xyXG4gICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdERhdGUoZGF0ZSwgJ3l5eXktTU0tZGQnLCAnZW4nKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBkYXRlT2YodmFsdWU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgY29uc3QgZGF0ZVV0YyA9IG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUpKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlVXRjLmdldFRpbWUoKSArIE1hdGguYWJzKGRhdGVVdGMuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -25,9 +25,9 @@ export class TimeAdapter extends NgbTimeAdapter {
25
25
  return formattedDate;
26
26
  }
27
27
  }
28
- TimeAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TimeAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
29
- TimeAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TimeAdapter });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TimeAdapter, decorators: [{
28
+ TimeAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: TimeAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
29
+ TimeAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: TimeAdapter });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: TimeAdapter, decorators: [{
31
31
  type: Injectable
32
32
  }] });
33
33
  function isTimeStr(value) {
@@ -15,9 +15,9 @@ export class AbstractActionsComponent extends ActionData {
15
15
  this.actionList = extensions[type].get(name).actions;
16
16
  }
17
17
  }
18
- AbstractActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AbstractActionsComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
19
- AbstractActionsComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: AbstractActionsComponent, inputs: { record: "record" }, usesInheritance: true, ngImport: i0 });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AbstractActionsComponent, decorators: [{
18
+ AbstractActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: AbstractActionsComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
19
+ AbstractActionsComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.3", type: AbstractActionsComponent, inputs: { record: "record" }, usesInheritance: true, ngImport: i0 });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: AbstractActionsComponent, decorators: [{
21
21
  type: Directive
22
22
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { record: [{
23
23
  type: Input
@@ -20,8 +20,8 @@ export class DateTimePickerComponent {
20
20
  this.time.writeValue(datestr);
21
21
  }
22
22
  }
23
- DateTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateTimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
24
- DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: DateTimePickerComponent, selector: "abp-date-time-picker", inputs: { prop: "prop", meridian: "meridian" }, viewQueries: [{ propertyName: "date", first: true, predicate: NgbInputDatepicker, descendants: true }, { propertyName: "time", first: true, predicate: NgbTimepicker, descendants: true }], exportAs: ["abpDateTimePicker"], ngImport: i0, template: `
23
+ DateTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateTimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
24
+ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: DateTimePickerComponent, selector: "abp-date-time-picker", inputs: { prop: "prop", meridian: "meridian" }, viewQueries: [{ propertyName: "date", first: true, predicate: NgbInputDatepicker, descendants: true }, { propertyName: "time", first: true, predicate: NgbTimepicker, descendants: true }], exportAs: ["abpDateTimePicker"], ngImport: i0, template: `
25
25
  <input
26
26
  [id]="prop.id"
27
27
  [formControlName]="prop.name"
@@ -39,7 +39,7 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
39
39
  (ngModelChange)="setDate($event)"
40
40
  [meridian]="meridian"
41
41
  ></ngb-timepicker>
42
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: i3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i3.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"] }], viewProviders: [
42
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: i3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i3.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"], exportAs: ["ngbTimepicker"] }], viewProviders: [
43
43
  {
44
44
  provide: ControlContainer,
45
45
  useFactory: selfFactory,
@@ -54,7 +54,7 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
54
54
  useClass: DateTimeAdapter,
55
55
  },
56
56
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DateTimePickerComponent, decorators: [{
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DateTimePickerComponent, decorators: [{
58
58
  type: Component,
59
59
  args: [{
60
60
  exportAs: 'abpDateTimePicker',
@@ -106,4 +106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImpor
106
106
  type: ViewChild,
107
107
  args: [NgbTimepicker]
108
108
  }] } });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxhQUFhLEdBQ2QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUF5Q3ZELE1BQU0sT0FBTyx1QkFBdUI7SUFPbEMsWUFBNEIsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFMM0MsYUFBUSxHQUFHLEtBQUssQ0FBQztJQUs2QixDQUFDO0lBRXhELE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOztvSEFmVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixrSkFJdkIsa0JBQWtCLHVFQUNsQixhQUFhLGlGQXpDZDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULGsyQ0FFYztRQUNiO1lBQ0UsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixVQUFVLEVBQUUsV0FBVztZQUN2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsY0FBYztZQUN2QixRQUFRLEVBQUUsZUFBZTtTQUMxQjtRQUNEO1lBQ0UsT0FBTyxFQUFFLGNBQWM7WUFDdkIsUUFBUSxFQUFFLGVBQWU7U0FDMUI7S0FDRjsyRkFFVSx1QkFBdUI7a0JBdkNuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUU7d0JBQ2I7NEJBQ0UsT0FBTyxFQUFFLGdCQUFnQjs0QkFDekIsVUFBVSxFQUFFLFdBQVc7NEJBQ3ZCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7eUJBQzNEO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxjQUFjOzRCQUN2QixRQUFRLEVBQUUsZUFBZTt5QkFDMUI7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGNBQWM7NEJBQ3ZCLFFBQVEsRUFBRSxlQUFlO3lCQUMxQjtxQkFDRjtpQkFDRjt3R0FFVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFeUIsSUFBSTtzQkFBbEMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ0gsSUFBSTtzQkFBN0IsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgU2tpcFNlbGYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGVBZGFwdGVyLFxyXG4gIE5nYklucHV0RGF0ZXBpY2tlcixcclxuICBOZ2JUaW1lQWRhcHRlcixcclxuICBOZ2JUaW1lcGlja2VyLFxyXG59IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvZGF0ZS10aW1lLmFkYXB0ZXInO1xyXG5pbXBvcnQgeyBGb3JtUHJvcCB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXByb3BzJztcclxuaW1wb3J0IHsgc2VsZkZhY3RvcnkgfSBmcm9tICcuLi8uLi91dGlscy9mYWN0b3J5LnV0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgZXhwb3J0QXM6ICdhYnBEYXRlVGltZVBpY2tlcicsXHJcbiAgc2VsZWN0b3I6ICdhYnAtZGF0ZS10aW1lLXBpY2tlcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxpbnB1dFxyXG4gICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcC5uYW1lXCJcclxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0VGltZSgkZXZlbnQpXCJcclxuICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgKGtleXVwLnNwYWNlKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAjZGF0ZXBpY2tlcj1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgIC8+XHJcbiAgICA8bmdiLXRpbWVwaWNrZXJcclxuICAgICAgI3RpbWVwaWNrZXJcclxuICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wLm5hbWVcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXREYXRlKCRldmVudClcIlxyXG4gICAgICBbbWVyaWRpYW5dPVwibWVyaWRpYW5cIlxyXG4gICAgPjwvbmdiLXRpbWVwaWNrZXI+XHJcbiAgYCxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB2aWV3UHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICAgIHVzZUZhY3Rvcnk6IHNlbGZGYWN0b3J5LFxyXG4gICAgICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgQ29udHJvbENvbnRhaW5lcl1dLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTmdiRGF0ZUFkYXB0ZXIsXHJcbiAgICAgIHVzZUNsYXNzOiBEYXRlVGltZUFkYXB0ZXIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOZ2JUaW1lQWRhcHRlcixcclxuICAgICAgdXNlQ2xhc3M6IERhdGVUaW1lQWRhcHRlcixcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBwcm9wITogRm9ybVByb3A7XHJcbiAgQElucHV0KCkgbWVyaWRpYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChOZ2JJbnB1dERhdGVwaWNrZXIpIGRhdGUhOiBOZ2JJbnB1dERhdGVwaWNrZXI7XHJcbiAgQFZpZXdDaGlsZChOZ2JUaW1lcGlja2VyKSB0aW1lITogTmdiVGltZXBpY2tlcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgc2V0RGF0ZShkYXRlc3RyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGF0ZS53cml0ZVZhbHVlKGRhdGVzdHIpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGltZShkYXRlc3RyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGltZS53cml0ZVZhbHVlKGRhdGVzdHIpO1xyXG4gIH1cclxufVxyXG4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxhQUFhLEdBQ2QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUF5Q3ZELE1BQU0sT0FBTyx1QkFBdUI7SUFPbEMsWUFBNEIsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFMM0MsYUFBUSxHQUFHLEtBQUssQ0FBQztJQUs2QixDQUFDO0lBRXhELE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOztvSEFmVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixrSkFJdkIsa0JBQWtCLHVFQUNsQixhQUFhLGlGQXpDZDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULGc1Q0FFYztRQUNiO1lBQ0UsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixVQUFVLEVBQUUsV0FBVztZQUN2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsY0FBYztZQUN2QixRQUFRLEVBQUUsZUFBZTtTQUMxQjtRQUNEO1lBQ0UsT0FBTyxFQUFFLGNBQWM7WUFDdkIsUUFBUSxFQUFFLGVBQWU7U0FDMUI7S0FDRjsyRkFFVSx1QkFBdUI7a0JBdkNuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUU7d0JBQ2I7NEJBQ0UsT0FBTyxFQUFFLGdCQUFnQjs0QkFDekIsVUFBVSxFQUFFLFdBQVc7NEJBQ3ZCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7eUJBQzNEO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxjQUFjOzRCQUN2QixRQUFRLEVBQUUsZUFBZTt5QkFDMUI7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGNBQWM7NEJBQ3ZCLFFBQVEsRUFBRSxlQUFlO3lCQUMxQjtxQkFDRjtpQkFDRjt3R0FFVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFeUIsSUFBSTtzQkFBbEMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ0gsSUFBSTtzQkFBN0IsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgU2tpcFNlbGYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGVBZGFwdGVyLFxyXG4gIE5nYklucHV0RGF0ZXBpY2tlcixcclxuICBOZ2JUaW1lQWRhcHRlcixcclxuICBOZ2JUaW1lcGlja2VyLFxyXG59IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvZGF0ZS10aW1lLmFkYXB0ZXInO1xyXG5pbXBvcnQgeyBGb3JtUHJvcCB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXByb3BzJztcclxuaW1wb3J0IHsgc2VsZkZhY3RvcnkgfSBmcm9tICcuLi8uLi91dGlscy9mYWN0b3J5LnV0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgZXhwb3J0QXM6ICdhYnBEYXRlVGltZVBpY2tlcicsXHJcbiAgc2VsZWN0b3I6ICdhYnAtZGF0ZS10aW1lLXBpY2tlcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxpbnB1dFxyXG4gICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcC5uYW1lXCJcclxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0VGltZSgkZXZlbnQpXCJcclxuICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgKGtleXVwLnNwYWNlKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAjZGF0ZXBpY2tlcj1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgIC8+XHJcbiAgICA8bmdiLXRpbWVwaWNrZXJcclxuICAgICAgI3RpbWVwaWNrZXJcclxuICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wLm5hbWVcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXREYXRlKCRldmVudClcIlxyXG4gICAgICBbbWVyaWRpYW5dPVwibWVyaWRpYW5cIlxyXG4gICAgPjwvbmdiLXRpbWVwaWNrZXI+XHJcbiAgYCxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB2aWV3UHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICAgIHVzZUZhY3Rvcnk6IHNlbGZGYWN0b3J5LFxyXG4gICAgICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgQ29udHJvbENvbnRhaW5lcl1dLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTmdiRGF0ZUFkYXB0ZXIsXHJcbiAgICAgIHVzZUNsYXNzOiBEYXRlVGltZUFkYXB0ZXIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOZ2JUaW1lQWRhcHRlcixcclxuICAgICAgdXNlQ2xhc3M6IERhdGVUaW1lQWRhcHRlcixcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBwcm9wITogRm9ybVByb3A7XHJcbiAgQElucHV0KCkgbWVyaWRpYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChOZ2JJbnB1dERhdGVwaWNrZXIpIGRhdGUhOiBOZ2JJbnB1dERhdGVwaWNrZXI7XHJcbiAgQFZpZXdDaGlsZChOZ2JUaW1lcGlja2VyKSB0aW1lITogTmdiVGltZXBpY2tlcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgc2V0RGF0ZShkYXRlc3RyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGF0ZS53cml0ZVZhbHVlKGRhdGVzdHIpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGltZShkYXRlc3RyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGltZS53cml0ZVZhbHVlKGRhdGVzdHIpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -153,8 +153,8 @@ export class ExtensibleFormPropComponent {
153
153
  this.typeaheadModel = { key: keyControl.value, value: valueControl.value };
154
154
  }
155
155
  }
156
- ExtensibleFormPropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ExtensibleFormPropComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i1.ConfigStateService }, { token: i2.FormGroupDirective }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
157
- ExtensibleFormPropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: { data: "data", prop: "prop", first: "first" }, viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container\r\n [ngSwitch]=\"getComponent(prop)\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\"\r\n>\r\n <ng-template ngSwitchCase=\"template\">\r\n <ng-container *ngComponentOutlet=\"prop.template; injector: injectorForCustomComponent\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div [ngClass]=\"containerClassName\" class=\"mb-3\">\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\">\r\n <ng-container *ngIf=\"prop.displayTextResolver; else displayNameTemplate\">\r\n {{ prop.displayTextResolver(data) | abpLocalization }}\r\n </ng-container>\r\n <ng-template #displayNameTemplate> {{ prop.displayName | abpLocalization }}</ng-template>\r\n {{ asterisk }}\r\n </label>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i4.ValidationStyleDirective, selector: "[validationStyle]", exportAs: ["validationStyle"] }, { kind: "directive", type: i4.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { kind: "directive", type: i4.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: i5.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i5.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"] }, { kind: "directive", type: i5.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "component", type: i6.DateTimePickerComponent, selector: "abp-date-time-picker", inputs: ["prop", "meridian"], exportAs: ["abpDateTimePicker"] }, { kind: "directive", type: i7.DisabledDirective, selector: "[abpDisabled]", inputs: ["abpDisabled"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }], viewProviders: [
156
+ ExtensibleFormPropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ExtensibleFormPropComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i1.ConfigStateService }, { token: i2.FormGroupDirective }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
157
+ ExtensibleFormPropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: { data: "data", prop: "prop", first: "first" }, viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container\r\n [ngSwitch]=\"getComponent(prop)\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\"\r\n>\r\n <ng-template ngSwitchCase=\"template\">\r\n <ng-container *ngComponentOutlet=\"prop.template; injector: injectorForCustomComponent\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div [ngClass]=\"containerClassName\" class=\"mb-3\">\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\">\r\n <ng-container *ngIf=\"prop.displayTextResolver; else displayNameTemplate\">\r\n {{ prop.displayTextResolver(data) | abpLocalization }}\r\n </ng-container>\r\n <ng-template #displayNameTemplate> {{ prop.displayName | abpLocalization }}</ng-template>\r\n {{ asterisk }}\r\n </label>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i4.ValidationStyleDirective, selector: "[validationStyle]", exportAs: ["validationStyle"] }, { kind: "directive", type: i4.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { kind: "directive", type: i4.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: i5.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i5.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"], exportAs: ["ngbTimepicker"] }, { kind: "directive", type: i5.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "component", type: i6.DateTimePickerComponent, selector: "abp-date-time-picker", inputs: ["prop", "meridian"], exportAs: ["abpDateTimePicker"] }, { kind: "directive", type: i7.DisabledDirective, selector: "[abpDisabled]", inputs: ["abpDisabled"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }], viewProviders: [
158
158
  {
159
159
  provide: ControlContainer,
160
160
  useFactory: selfFactory,
@@ -163,7 +163,7 @@ ExtensibleFormPropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
163
163
  { provide: NgbDateAdapter, useClass: DateAdapter },
164
164
  { provide: NgbTimeAdapter, useClass: TimeAdapter },
165
165
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ExtensibleFormPropComponent, decorators: [{
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ExtensibleFormPropComponent, decorators: [{
167
167
  type: Component,
168
168
  args: [{ selector: 'abp-extensible-form-prop', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
169
169
  {
@@ -189,4 +189,4 @@ function isRequired(validator) {
189
189
  validator === AbpValidators.required ||
190
190
  validator.name === 'required');
191
191
  }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaWJsZS1mb3JtLXByb3AuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL2V4dGVuc2lvbnMvc3JjL2xpYi9jb21wb25lbnRzL2V4dGVuc2libGUtZm9ybS9leHRlbnNpYmxlLWZvcm0tcHJvcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZXh0ZW5zaWJsZS1mb3JtL2V4dGVuc2libGUtZm9ybS1wcm9wLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xHLE9BQU8sRUFBTyxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RGLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUdsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdB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TyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO1FBQ2xELEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0tBQ25EOzJGQUVVLDJCQUEyQjtrQkFkdkMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBRW5CLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDO3dCQUNiOzRCQUNFLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLFVBQVUsRUFBRSxXQUFXOzRCQUN2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO3lCQUMzRDt3QkFDRCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTt3QkFDbEQsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7cUJBQ25EOzhOQUdRLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVzQixRQUFRO3NCQUFuQyxTQUFTO3VCQUFDLE9BQU87O0FBMEtwQixTQUFTLFVBQVUsQ0FBQyxTQUFzQjtJQUN4QyxPQUFPLENBQ0wsU0FBUyxLQUFLLFVBQVUsQ0FBQyxRQUFRO1FBQ2pDLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUTtRQUNwQyxTQUFTLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FDOUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFWFRFTlNJT05TX0ZPUk1fUFJPUCwgRVhURU5TSU9OU19GT1JNX1BST1BfREFUQSB9IGZyb20gJy4vLi4vLi4vdG9rZW5zL2V4dGVuc2lvbnMudG9rZW4nO1xyXG5pbXBvcnQgeyBBQlAsIEFicFZhbGlkYXRvcnMsIENvbmZpZ1N0YXRlU2VydmljZSwgVHJhY2tCeVNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgU2tpcFNlbGYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRyb2xDb250YWluZXIsXHJcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nYkRhdGVBZGFwdGVyLCBOZ2JUaW1lQWRhcHRlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL2RhdGUuYWRhcHRlcic7XHJcbmltcG9ydCB7IFRpbWVBZGFwdGVyIH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdGltZS5hZGFwdGVyJztcclxuaW1wb3J0IHsgRVhUUkFfUFJPUEVSVElFU19LRVkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXh0cmEtcHJvcGVydGllcyc7XHJcbmltcG9ydCB7IGVQcm9wVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL3Byb3BzLmVudW0nO1xyXG5pbXBvcnQgeyBGb3JtUHJvcCB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXByb3BzJztcclxuaW1wb3J0IHsgUHJvcERhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvcHMnO1xyXG5pbXBvcnQgeyBzZWxmRmFjdG9yeSB9IGZyb20gJy4uLy4uL3V0aWxzL2ZhY3RvcnkudXRpbCc7XHJcbmltcG9ydCB7IGFkZFR5cGVhaGVhZFRleHRTdWZmaXggfSBmcm9tICcuLi8uLi91dGlscy90eXBlYWhlYWQudXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1leHRlbnNpYmxlLWZvcm0tcHJvcCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2V4dGVuc2libGUtZm9ybS1wcm9wLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB2aWV3UHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICAgIHVzZUZhY3Rvcnk6IHNlbGZGYWN0b3J5LFxyXG4gICAgICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgQ29udHJvbENvbnRhaW5lcl1dLFxyXG4gICAgfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBEYXRlQWRhcHRlciB9LFxyXG4gICAgeyBwcm92aWRlOiBOZ2JUaW1lQWRhcHRlciwgdXNlQ2xhc3M6IFRpbWVBZGFwdGVyIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEV4dGVuc2libGVGb3JtUHJvcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YSE6IFByb3BEYXRhO1xyXG5cclxuICBASW5wdXQoKSBwcm9wITogRm9ybVByb3A7XHJcblxyXG4gIEBJbnB1dCgpIGZpcnN0PzogYm9vbGVhbjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmllbGQnKSBwcml2YXRlIGZpZWxkUmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHB1YmxpYyBpbmplY3RvckZvckN1c3RvbUNvbXBvbmVudDogSW5qZWN0b3I7XHJcblxyXG4gIGFzdGVyaXNrID0gJyc7XHJcblxyXG4gIGNvbnRhaW5lckNsYXNzTmFtZSA9ICdtYi0zJztcclxuXHJcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8QUJQLk9wdGlvbjxhbnk+W10+ID0gb2YoW10pO1xyXG5cclxuICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gIHJlYWRvbmx5ITogYm9vbGVhbjtcclxuXHJcbiAgdHlwZWFoZWFkTW9kZWw6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICBkaXNhYmxlZEZuID0gKGRhdGE6IFByb3BEYXRhKSA9PiBmYWxzZTtcclxuXHJcbiAgZ2V0IGRpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRGbih0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHlwZWFoZWFkVmFsdWUoc2VsZWN0ZWRPcHRpb246IEFCUC5PcHRpb248c3RyaW5nPikge1xyXG4gICAgdGhpcy50eXBlYWhlYWRNb2RlbCA9IHNlbGVjdGVkT3B0aW9uIHx8IHsga2V5OiBudWxsLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSB0aGlzLnR5cGVhaGVhZE1vZGVsO1xyXG4gICAgY29uc3QgW2tleUNvbnRyb2wsIHZhbHVlQ29udHJvbF0gPSB0aGlzLmdldFR5cGVhaGVhZENvbnRyb2xzKCk7XHJcbiAgICBpZiAodmFsdWVDb250cm9sPy52YWx1ZSAmJiAhdmFsdWUpIHZhbHVlQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAga2V5Q29udHJvbD8uc2V0VmFsdWUoa2V5KTtcclxuICAgIHZhbHVlQ29udHJvbD8uc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoID0gKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XHJcbiAgICB0ZXh0JFxyXG4gICAgICA/IHRleHQkLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAodGV4dCA9PiB0aGlzLnByb3Aub3B0aW9ucyh0aGlzLmRhdGEsIHRleHQpKSxcclxuICAgICAgICApXHJcbiAgICAgIDogb2YoW10pO1xyXG5cclxuICB0eXBlYWhlYWRGb3JtYXR0ZXIgPSAob3B0aW9uOiBBQlAuT3B0aW9uPGFueT4pID0+IG9wdGlvbi5rZXk7XHJcblxyXG4gIGdldCBtZXJpZGlhbigpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29uZmlnU3RhdGUuZ2V0RGVlcCgnbG9jYWxpemF0aW9uLmN1cnJlbnRDdWx0dXJlLmRhdGVUaW1lRm9ybWF0LnNob3J0VGltZVBhdHRlcm4nKSB8fCAnJ1xyXG4gICAgKS5pbmNsdWRlcygndHQnKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0ludmFsaWQoKSB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLnByb3AubmFtZSk7XHJcbiAgICByZXR1cm4gY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyByZWFkb25seSB0cmFjazogVHJhY2tCeVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcclxuICAgIGdyb3VwRGlyZWN0aXZlOiBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICApIHtcclxuICAgIHRoaXMuZm9ybSA9IGdyb3VwRGlyZWN0aXZlLmZvcm07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFR5cGVhaGVhZENvbnRyb2xzKCkge1xyXG4gICAgY29uc3QgeyBuYW1lIH0gPSB0aGlzLnByb3A7XHJcbiAgICBjb25zdCBleHRyYVByb3BOYW1lID0gYCR7RVhUUkFfUFJPUEVSVElFU19LRVl9LiR7bmFtZX1gO1xyXG4gICAgY29uc3Qga2V5Q29udHJvbCA9XHJcbiAgICAgIHRoaXMuZm9ybS5nZXQoYWRkVHlwZWFoZWFkVGV4dFN1ZmZpeChleHRyYVByb3BOYW1lKSkgfHxcclxuICAgICAgdGhpcy5mb3JtLmdldChhZGRUeXBlYWhlYWRUZXh0U3VmZml4KG5hbWUpKTtcclxuICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZXh0cmFQcm9wTmFtZSkgfHwgdGhpcy5mb3JtLmdldChuYW1lKTtcclxuICAgIHJldHVybiBba2V5Q29udHJvbCwgdmFsdWVDb250cm9sXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXN0ZXJpc2soKSB7XHJcbiAgICB0aGlzLmFzdGVyaXNrID0gdGhpcy52YWxpZGF0b3JzLnNvbWUoaXNSZXF1aXJlZCkgPyAnKicgOiAnJztcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmZpcnN0ICYmIHRoaXMuZmllbGRSZWYpIHtcclxuICAgICAgdGhpcy5maWVsZFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50KHByb3A6IEZvcm1Qcm9wKTogc3RyaW5nIHtcclxuICAgIGlmIChwcm9wLnRlbXBsYXRlKSB7XHJcbiAgICAgIHJldHVybiAndGVtcGxhdGUnO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wLnR5cGUpIHtcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuQm9vbGVhbjpcclxuICAgICAgICByZXR1cm4gJ2NoZWNrYm94JztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuRGF0ZTpcclxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xyXG4gICAgICBjYXNlIGVQcm9wVHlwZS5EYXRlVGltZTpcclxuICAgICAgICByZXR1cm4gJ2RhdGVUaW1lJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuSGlkZGVuOlxyXG4gICAgICAgIHJldHVybiAnaGlkZGVuJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuTXVsdGlTZWxlY3Q6XHJcbiAgICAgICAgcmV0dXJuICdtdWx0aXNlbGVjdCc7XHJcbiAgICAgIGNhc2UgZVByb3BUeXBlLlRleHQ6XHJcbiAgICAgICAgcmV0dXJuICd0ZXh0YXJlYSc7XHJcbiAgICAgIGNhc2UgZVByb3BUeXBlLlRpbWU6XHJcbiAgICAgICAgcmV0dXJuICd0aW1lJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuVHlwZWFoZWFkOlxyXG4gICAgICAgIHJldHVybiAndHlwZWFoZWFkJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gcHJvcC5vcHRpb25zID8gJ3NlbGVjdCcgOiAnaW5wdXQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VHlwZShwcm9wOiBGb3JtUHJvcCk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHByb3AudHlwZSkge1xyXG4gICAgICBjYXNlIGVQcm9wVHlwZS5EYXRlOlxyXG4gICAgICBjYXNlIGVQcm9wVHlwZS5TdHJpbmc6XHJcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuQm9vbGVhbjpcclxuICAgICAgICByZXR1cm4gJ2NoZWNrYm94JztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuTnVtYmVyOlxyXG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuRW1haWw6XHJcbiAgICAgICAgcmV0dXJuICdlbWFpbCc7XHJcbiAgICAgIGNhc2UgZVByb3BUeXBlLlBhc3N3b3JkOlxyXG4gICAgICAgIHJldHVybiAncGFzc3dvcmQnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnaGlkZGVuJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKHsgcHJvcCwgZGF0YSB9OiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvcCA9IHByb3A/LmN1cnJlbnRWYWx1ZSBhcyBGb3JtUHJvcDtcclxuICAgIGNvbnN0IHsgb3B0aW9ucywgcmVhZG9ubHksIGRpc2FibGVkLCB2YWxpZGF0b3JzLCBjbGFzc05hbWUsIHRlbXBsYXRlIH0gPSBjdXJyZW50UHJvcCB8fCB7fTtcclxuICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmluamVjdG9yRm9yQ3VzdG9tQ29tcG9uZW50ID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogRVhURU5TSU9OU19GT1JNX1BST1AsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBjdXJyZW50UHJvcCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEVYVEVOU0lPTlNfRk9STV9QUk9QX0RBVEEsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiAoZGF0YT8uY3VycmVudFZhbHVlIGFzIFByb3BEYXRhKT8ucmVjb3JkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEZvcm1Hcm91cERpcmVjdGl2ZSB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucykgdGhpcy5vcHRpb25zJCA9IG9wdGlvbnModGhpcy5kYXRhKTtcclxuICAgIGlmIChyZWFkb25seSkgdGhpcy5yZWFkb25seSA9IHJlYWRvbmx5KHRoaXMuZGF0YSk7XHJcblxyXG4gICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWRGbiA9IGRpc2FibGVkO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbGlkYXRvcnMpIHtcclxuICAgICAgdGhpcy52YWxpZGF0b3JzID0gdmFsaWRhdG9ycyh0aGlzLmRhdGEpO1xyXG4gICAgICB0aGlzLnNldEFzdGVyaXNrKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb250YWluZXJDbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgW2tleUNvbnRyb2wsIHZhbHVlQ29udHJvbF0gPSB0aGlzLmdldFR5cGVhaGVhZENvbnRyb2xzKCk7XHJcbiAgICBpZiAoa2V5Q29udHJvbCAmJiB2YWx1ZUNvbnRyb2wpXHJcbiAgICAgIHRoaXMudHlwZWFoZWFkTW9kZWwgPSB7IGtleToga2V5Q29udHJvbC52YWx1ZSwgdmFsdWU6IHZhbHVlQ29udHJvbC52YWx1ZSB9O1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNSZXF1aXJlZCh2YWxpZGF0b3I6IFZhbGlkYXRvckZuKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCB8fFxyXG4gICAgdmFsaWRhdG9yID09PSBBYnBWYWxpZGF0b3JzLnJlcXVpcmVkIHx8XHJcbiAgICB2YWxpZGF0b3IubmFtZSA9PT0gJ3JlcXVpcmVkJ1xyXG4gICk7XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lclxyXG4gIFtuZ1N3aXRjaF09XCJnZXRDb21wb25lbnQocHJvcClcIlxyXG4gICphYnBQZXJtaXNzaW9uPVwicHJvcC5wZXJtaXNzaW9uOyBydW5DaGFuZ2VEZXRlY3Rpb246IGZhbHNlXCJcclxuPlxyXG4gIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJ0ZW1wbGF0ZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJwcm9wLnRlbXBsYXRlOyBpbmplY3RvcjogaW5qZWN0b3JGb3JDdXN0b21Db21wb25lbnRcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiY29udGFpbmVyQ2xhc3NOYW1lXCIgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiaW5wdXRcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgW2lkXT1cInByb3AuaWRcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcC5uYW1lXCJcclxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cInByb3AuYXV0b2NvbXBsZXRlXCJcclxuICAgICAgICBbdHlwZV09XCJnZXRUeXBlKHByb3ApXCJcclxuICAgICAgICBbYWJwRGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiaGlkZGVuXCI+XHJcbiAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiIHR5cGU9XCJoaWRkZW5cIiAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiY2hlY2tib3hcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiB2YWxpZGF0aW9uVGFyZ2V0PlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiXHJcbiAgICAgICAgICBbYWJwRGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogJ2Zvcm0tY2hlY2stbGFiZWwnIH1cIlxyXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoQ2FzZT1cInNlbGVjdFwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8c2VsZWN0XHJcbiAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgW2lkXT1cInByb3AuaWRcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcC5uYW1lXCJcclxuICAgICAgICBbYWJwRGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1jb250cm9sXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9ucyQgfCBhc3luYzsgdHJhY2tCeTogdHJhY2suYnkoJ3ZhbHVlJylcIlxyXG4gICAgICAgICAgW25nVmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBvcHRpb24ua2V5IH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwibXVsdGlzZWxlY3RcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPHNlbGVjdFxyXG4gICAgICAgICNmaWVsZFxyXG4gICAgICAgIFtpZF09XCJwcm9wLmlkXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiXHJcbiAgICAgICAgW2FicERpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBtdWx0aXBsZT1cIm11bHRpcGxlXCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tY29udHJvbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMkIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrLmJ5KCd2YWx1ZScpXCJcclxuICAgICAgICAgIFtuZ1ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgb3B0aW9uLmtleSB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoQ2FzZT1cInR5cGVhaGVhZFwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8ZGl2ICN0eXBlYWhlYWQgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiIHZhbGlkYXRpb25TdHlsZSB2YWxpZGF0aW9uVGFyZ2V0PlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cInByb3AuYXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgIFthYnBEaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICBbbmdiVHlwZWFoZWFkXT1cInNlYXJjaFwiXHJcbiAgICAgICAgICBbZWRpdGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2lucHV0Rm9ybWF0dGVyXT1cInR5cGVhaGVhZEZvcm1hdHRlclwiXHJcbiAgICAgICAgICBbcmVzdWx0Rm9ybWF0dGVyXT1cInR5cGVhaGVhZEZvcm1hdHRlclwiXHJcbiAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0eXBlYWhlYWRNb2RlbFwiXHJcbiAgICAgICAgICAoc2VsZWN0SXRlbSk9XCJzZXRUeXBlYWhlYWRWYWx1ZSgkZXZlbnQuaXRlbSlcIlxyXG4gICAgICAgICAgKGJsdXIpPVwic2V0VHlwZWFoZWFkVmFsdWUodHlwZWFoZWFkTW9kZWwpXCJcclxuICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInR5cGVhaGVhZC5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWludmFsaWQnKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wLm5hbWVcIiB0eXBlPVwiaGlkZGVuXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJkYXRlXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIFtpZF09XCJwcm9wLmlkXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZGF0ZXBpY2tlci5vcGVuKClcIlxyXG4gICAgICAgIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAjZGF0ZXBpY2tlcj1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgIC8+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJ0aW1lXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZ2ItdGltZXBpY2tlciBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiPjwvbmdiLXRpbWVwaWNrZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJkYXRlVGltZVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8YWJwLWRhdGUtdGltZS1waWNrZXIgW3Byb3BdPVwicHJvcFwiIFttZXJpZGlhbl09XCJtZXJpZGlhblwiPjwvYWJwLWRhdGUtdGltZS1waWNrZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJ0ZXh0YXJlYVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8dGV4dGFyZWFcclxuICAgICAgICAjZmllbGRcclxuICAgICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wLm5hbWVcIlxyXG4gICAgICAgIFthYnBEaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgID48L3RleHRhcmVhPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2xhYmVsIGxldC1jbGFzc2VzPlxyXG4gIDxsYWJlbCBbaHRtbEZvcl09XCJwcm9wLmlkXCIgW25nQ2xhc3NdPVwiY2xhc3NlcyB8fCAnZm9ybS1sYWJlbCdcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9wLmRpc3BsYXlUZXh0UmVzb2x2ZXI7IGVsc2UgZGlzcGxheU5hbWVUZW1wbGF0ZVwiPlxyXG4gICAgICB7eyBwcm9wLmRpc3BsYXlUZXh0UmVzb2x2ZXIoZGF0YSkgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5TmFtZVRlbXBsYXRlPiB7eyBwcm9wLmRpc3BsYXlOYW1lIHwgYWJwTG9jYWxpemF0aW9uIH19PC9uZy10ZW1wbGF0ZT5cclxuICAgIHt7IGFzdGVyaXNrIH19XHJcbiAgPC9sYWJlbD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaWJsZS1mb3JtLXByb3AuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL2V4dGVuc2lvbnMvc3JjL2xpYi9jb21wb25lbnRzL2V4dGVuc2libGUtZm9ybS9leHRlbnNpYmxlLWZvcm0tcHJvcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZXh0ZW5zaWJsZS1mb3JtL2V4dGVuc2libGUtZm9ybS1wcm9wLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xHLE9BQU8sRUFBTyxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RGLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUdsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdB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TyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO1FBQ2xELEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0tBQ25EOzJGQUVVLDJCQUEyQjtrQkFkdkMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBRW5CLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDO3dCQUNiOzRCQUNFLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLFVBQVUsRUFBRSxXQUFXOzRCQUN2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO3lCQUMzRDt3QkFDRCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTt3QkFDbEQsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7cUJBQ25EOzhOQUdRLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVzQixRQUFRO3NCQUFuQyxTQUFTO3VCQUFDLE9BQU87O0FBMEtwQixTQUFTLFVBQVUsQ0FBQyxTQUFzQjtJQUN4QyxPQUFPLENBQ0wsU0FBUyxLQUFLLFVBQVUsQ0FBQyxRQUFRO1FBQ2pDLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUTtRQUNwQyxTQUFTLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FDOUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFWFRFTlNJT05TX0ZPUk1fUFJPUCwgRVhURU5TSU9OU19GT1JNX1BST1BfREFUQSB9IGZyb20gJy4vLi4vLi4vdG9rZW5zL2V4dGVuc2lvbnMudG9rZW4nO1xyXG5pbXBvcnQgeyBBQlAsIEFicFZhbGlkYXRvcnMsIENvbmZpZ1N0YXRlU2VydmljZSwgVHJhY2tCeVNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgU2tpcFNlbGYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRyb2xDb250YWluZXIsXHJcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nYkRhdGVBZGFwdGVyLCBOZ2JUaW1lQWRhcHRlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL2RhdGUuYWRhcHRlcic7XHJcbmltcG9ydCB7IFRpbWVBZGFwdGVyIH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdGltZS5hZGFwdGVyJztcclxuaW1wb3J0IHsgRVhUUkFfUFJPUEVSVElFU19LRVkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXh0cmEtcHJvcGVydGllcyc7XHJcbmltcG9ydCB7IGVQcm9wVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL3Byb3BzLmVudW0nO1xyXG5pbXBvcnQgeyBGb3JtUHJvcCB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXByb3BzJztcclxuaW1wb3J0IHsgUHJvcERhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvcHMnO1xyXG5pbXBvcnQgeyBzZWxmRmFjdG9yeSB9IGZyb20gJy4uLy4uL3V0aWxzL2ZhY3RvcnkudXRpbCc7XHJcbmltcG9ydCB7IGFkZFR5cGVhaGVhZFRleHRTdWZmaXggfSBmcm9tICcuLi8uLi91dGlscy90eXBlYWhlYWQudXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1leHRlbnNpYmxlLWZvcm0tcHJvcCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2V4dGVuc2libGUtZm9ybS1wcm9wLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB2aWV3UHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICAgIHVzZUZhY3Rvcnk6IHNlbGZGYWN0b3J5LFxyXG4gICAgICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgQ29udHJvbENvbnRhaW5lcl1dLFxyXG4gICAgfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBEYXRlQWRhcHRlciB9LFxyXG4gICAgeyBwcm92aWRlOiBOZ2JUaW1lQWRhcHRlciwgdXNlQ2xhc3M6IFRpbWVBZGFwdGVyIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEV4dGVuc2libGVGb3JtUHJvcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YSE6IFByb3BEYXRhO1xyXG5cclxuICBASW5wdXQoKSBwcm9wITogRm9ybVByb3A7XHJcblxyXG4gIEBJbnB1dCgpIGZpcnN0PzogYm9vbGVhbjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmllbGQnKSBwcml2YXRlIGZpZWxkUmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHB1YmxpYyBpbmplY3RvckZvckN1c3RvbUNvbXBvbmVudDogSW5qZWN0b3I7XHJcblxyXG4gIGFzdGVyaXNrID0gJyc7XHJcblxyXG4gIGNvbnRhaW5lckNsYXNzTmFtZSA9ICdtYi0zJztcclxuXHJcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8QUJQLk9wdGlvbjxhbnk+W10+ID0gb2YoW10pO1xyXG5cclxuICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gIHJlYWRvbmx5ITogYm9vbGVhbjtcclxuXHJcbiAgdHlwZWFoZWFkTW9kZWw6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICBkaXNhYmxlZEZuID0gKGRhdGE6IFByb3BEYXRhKSA9PiBmYWxzZTtcclxuXHJcbiAgZ2V0IGRpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRGbih0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHlwZWFoZWFkVmFsdWUoc2VsZWN0ZWRPcHRpb246IEFCUC5PcHRpb248c3RyaW5nPikge1xyXG4gICAgdGhpcy50eXBlYWhlYWRNb2RlbCA9IHNlbGVjdGVkT3B0aW9uIHx8IHsga2V5OiBudWxsLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSB0aGlzLnR5cGVhaGVhZE1vZGVsO1xyXG4gICAgY29uc3QgW2tleUNvbnRyb2wsIHZhbHVlQ29udHJvbF0gPSB0aGlzLmdldFR5cGVhaGVhZENvbnRyb2xzKCk7XHJcbiAgICBpZiAodmFsdWVDb250cm9sPy52YWx1ZSAmJiAhdmFsdWUpIHZhbHVlQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAga2V5Q29udHJvbD8uc2V0VmFsdWUoa2V5KTtcclxuICAgIHZhbHVlQ29udHJvbD8uc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoID0gKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XHJcbiAgICB0ZXh0JFxyXG4gICAgICA/IHRleHQkLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAodGV4dCA9PiB0aGlzLnByb3Aub3B0aW9ucyh0aGlzLmRhdGEsIHRleHQpKSxcclxuICAgICAgICApXHJcbiAgICAgIDogb2YoW10pO1xyXG5cclxuICB0eXBlYWhlYWRGb3JtYXR0ZXIgPSAob3B0aW9uOiBBQlAuT3B0aW9uPGFueT4pID0+IG9wdGlvbi5rZXk7XHJcblxyXG4gIGdldCBtZXJpZGlhbigpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29uZmlnU3RhdGUuZ2V0RGVlcCgnbG9jYWxpemF0aW9uLmN1cnJlbnRDdWx0dXJlLmRhdGVUaW1lRm9ybWF0LnNob3J0VGltZVBhdHRlcm4nKSB8fCAnJ1xyXG4gICAgKS5pbmNsdWRlcygndHQnKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0ludmFsaWQoKSB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLnByb3AubmFtZSk7XHJcbiAgICByZXR1cm4gY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyByZWFkb25seSB0cmFjazogVHJhY2tCeVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcclxuICAgIGdyb3VwRGlyZWN0aXZlOiBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICApIHtcclxuICAgIHRoaXMuZm9ybSA9IGdyb3VwRGlyZWN0aXZlLmZvcm07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFR5cGVhaGVhZENvbnRyb2xzKCkge1xyXG4gICAgY29uc3QgeyBuYW1lIH0gPSB0aGlzLnByb3A7XHJcbiAgICBjb25zdCBleHRyYVByb3BOYW1lID0gYCR7RVhUUkFfUFJPUEVSVElFU19LRVl9LiR7bmFtZX1gO1xyXG4gICAgY29uc3Qga2V5Q29udHJvbCA9XHJcbiAgICAgIHRoaXMuZm9ybS5nZXQoYWRkVHlwZWFoZWFkVGV4dFN1ZmZpeChleHRyYVByb3BOYW1lKSkgfHxcclxuICAgICAgdGhpcy5mb3JtLmdldChhZGRUeXBlYWhlYWRUZXh0U3VmZml4KG5hbWUpKTtcclxuICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZXh0cmFQcm9wTmFtZSkgfHwgdGhpcy5mb3JtLmdldChuYW1lKTtcclxuICAgIHJldHVybiBba2V5Q29udHJvbCwgdmFsdWVDb250cm9sXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXN0ZXJpc2soKSB7XHJcbiAgICB0aGlzLmFzdGVyaXNrID0gdGhpcy52YWxpZGF0b3JzLnNvbWUoaXNSZXF1aXJlZCkgPyAnKicgOiAnJztcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmZpcnN0ICYmIHRoaXMuZmllbGRSZWYpIHtcclxuICAgICAgdGhpcy5maWVsZFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50KHByb3A6IEZvcm1Qcm9wKTogc3RyaW5nIHtcclxuICAgIGlmIChwcm9wLnRlbXBsYXRlKSB7XHJcbiAgICAgIHJldHVybiAndGVtcGxhdGUnO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wLnR5cGUpIHtcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuQm9vbGVhbjpcclxuICAgICAgICByZXR1cm4gJ2NoZWNrYm94JztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuRGF0ZTpcclxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xyXG4gICAgICBjYXNlIGVQcm9wVHlwZS5EYXRlVGltZTpcclxuICAgICAgICByZXR1cm4gJ2RhdGVUaW1lJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuSGlkZGVuOlxyXG4gICAgICAgIHJldHVybiAnaGlkZGVuJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuTXVsdGlTZWxlY3Q6XHJcbiAgICAgICAgcmV0dXJuICdtdWx0aXNlbGVjdCc7XHJcbiAgICAgIGNhc2UgZVByb3BUeXBlLlRleHQ6XHJcbiAgICAgICAgcmV0dXJuICd0ZXh0YXJlYSc7XHJcbiAgICAgIGNhc2UgZVByb3BUeXBlLlRpbWU6XHJcbiAgICAgICAgcmV0dXJuICd0aW1lJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuVHlwZWFoZWFkOlxyXG4gICAgICAgIHJldHVybiAndHlwZWFoZWFkJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gcHJvcC5vcHRpb25zID8gJ3NlbGVjdCcgOiAnaW5wdXQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VHlwZShwcm9wOiBGb3JtUHJvcCk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHByb3AudHlwZSkge1xyXG4gICAgICBjYXNlIGVQcm9wVHlwZS5EYXRlOlxyXG4gICAgICBjYXNlIGVQcm9wVHlwZS5TdHJpbmc6XHJcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuQm9vbGVhbjpcclxuICAgICAgICByZXR1cm4gJ2NoZWNrYm94JztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuTnVtYmVyOlxyXG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcclxuICAgICAgY2FzZSBlUHJvcFR5cGUuRW1haWw6XHJcbiAgICAgICAgcmV0dXJuICdlbWFpbCc7XHJcbiAgICAgIGNhc2UgZVByb3BUeXBlLlBhc3N3b3JkOlxyXG4gICAgICAgIHJldHVybiAncGFzc3dvcmQnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnaGlkZGVuJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKHsgcHJvcCwgZGF0YSB9OiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvcCA9IHByb3A/LmN1cnJlbnRWYWx1ZSBhcyBGb3JtUHJvcDtcclxuICAgIGNvbnN0IHsgb3B0aW9ucywgcmVhZG9ubHksIGRpc2FibGVkLCB2YWxpZGF0b3JzLCBjbGFzc05hbWUsIHRlbXBsYXRlIH0gPSBjdXJyZW50UHJvcCB8fCB7fTtcclxuICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmluamVjdG9yRm9yQ3VzdG9tQ29tcG9uZW50ID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogRVhURU5TSU9OU19GT1JNX1BST1AsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBjdXJyZW50UHJvcCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEVYVEVOU0lPTlNfRk9STV9QUk9QX0RBVEEsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiAoZGF0YT8uY3VycmVudFZhbHVlIGFzIFByb3BEYXRhKT8ucmVjb3JkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEZvcm1Hcm91cERpcmVjdGl2ZSB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucykgdGhpcy5vcHRpb25zJCA9IG9wdGlvbnModGhpcy5kYXRhKTtcclxuICAgIGlmIChyZWFkb25seSkgdGhpcy5yZWFkb25seSA9IHJlYWRvbmx5KHRoaXMuZGF0YSk7XHJcblxyXG4gICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWRGbiA9IGRpc2FibGVkO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbGlkYXRvcnMpIHtcclxuICAgICAgdGhpcy52YWxpZGF0b3JzID0gdmFsaWRhdG9ycyh0aGlzLmRhdGEpO1xyXG4gICAgICB0aGlzLnNldEFzdGVyaXNrKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb250YWluZXJDbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgW2tleUNvbnRyb2wsIHZhbHVlQ29udHJvbF0gPSB0aGlzLmdldFR5cGVhaGVhZENvbnRyb2xzKCk7XHJcbiAgICBpZiAoa2V5Q29udHJvbCAmJiB2YWx1ZUNvbnRyb2wpXHJcbiAgICAgIHRoaXMudHlwZWFoZWFkTW9kZWwgPSB7IGtleToga2V5Q29udHJvbC52YWx1ZSwgdmFsdWU6IHZhbHVlQ29udHJvbC52YWx1ZSB9O1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNSZXF1aXJlZCh2YWxpZGF0b3I6IFZhbGlkYXRvckZuKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCB8fFxyXG4gICAgdmFsaWRhdG9yID09PSBBYnBWYWxpZGF0b3JzLnJlcXVpcmVkIHx8XHJcbiAgICB2YWxpZGF0b3IubmFtZSA9PT0gJ3JlcXVpcmVkJ1xyXG4gICk7XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lclxyXG4gIFtuZ1N3aXRjaF09XCJnZXRDb21wb25lbnQocHJvcClcIlxyXG4gICphYnBQZXJtaXNzaW9uPVwicHJvcC5wZXJtaXNzaW9uOyBydW5DaGFuZ2VEZXRlY3Rpb246IGZhbHNlXCJcclxuPlxyXG4gIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJ0ZW1wbGF0ZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJwcm9wLnRlbXBsYXRlOyBpbmplY3RvcjogaW5qZWN0b3JGb3JDdXN0b21Db21wb25lbnRcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiY29udGFpbmVyQ2xhc3NOYW1lXCIgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiaW5wdXRcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgW2lkXT1cInByb3AuaWRcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcC5uYW1lXCJcclxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cInByb3AuYXV0b2NvbXBsZXRlXCJcclxuICAgICAgICBbdHlwZV09XCJnZXRUeXBlKHByb3ApXCJcclxuICAgICAgICBbYWJwRGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiaGlkZGVuXCI+XHJcbiAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiIHR5cGU9XCJoaWRkZW5cIiAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiY2hlY2tib3hcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiB2YWxpZGF0aW9uVGFyZ2V0PlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiXHJcbiAgICAgICAgICBbYWJwRGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogJ2Zvcm0tY2hlY2stbGFiZWwnIH1cIlxyXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoQ2FzZT1cInNlbGVjdFwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8c2VsZWN0XHJcbiAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgW2lkXT1cInByb3AuaWRcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcC5uYW1lXCJcclxuICAgICAgICBbYWJwRGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1jb250cm9sXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9ucyQgfCBhc3luYzsgdHJhY2tCeTogdHJhY2suYnkoJ3ZhbHVlJylcIlxyXG4gICAgICAgICAgW25nVmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBvcHRpb24ua2V5IH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwibXVsdGlzZWxlY3RcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPHNlbGVjdFxyXG4gICAgICAgICNmaWVsZFxyXG4gICAgICAgIFtpZF09XCJwcm9wLmlkXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiXHJcbiAgICAgICAgW2FicERpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBtdWx0aXBsZT1cIm11bHRpcGxlXCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tY29udHJvbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMkIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrLmJ5KCd2YWx1ZScpXCJcclxuICAgICAgICAgIFtuZ1ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgb3B0aW9uLmtleSB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoQ2FzZT1cInR5cGVhaGVhZFwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8ZGl2ICN0eXBlYWhlYWQgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiIHZhbGlkYXRpb25TdHlsZSB2YWxpZGF0aW9uVGFyZ2V0PlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI2ZpZWxkXHJcbiAgICAgICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cInByb3AuYXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgIFthYnBEaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICBbbmdiVHlwZWFoZWFkXT1cInNlYXJjaFwiXHJcbiAgICAgICAgICBbZWRpdGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2lucHV0Rm9ybWF0dGVyXT1cInR5cGVhaGVhZEZvcm1hdHRlclwiXHJcbiAgICAgICAgICBbcmVzdWx0Rm9ybWF0dGVyXT1cInR5cGVhaGVhZEZvcm1hdHRlclwiXHJcbiAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0eXBlYWhlYWRNb2RlbFwiXHJcbiAgICAgICAgICAoc2VsZWN0SXRlbSk9XCJzZXRUeXBlYWhlYWRWYWx1ZSgkZXZlbnQuaXRlbSlcIlxyXG4gICAgICAgICAgKGJsdXIpPVwic2V0VHlwZWFoZWFkVmFsdWUodHlwZWFoZWFkTW9kZWwpXCJcclxuICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInR5cGVhaGVhZC5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWludmFsaWQnKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wLm5hbWVcIiB0eXBlPVwiaGlkZGVuXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJkYXRlXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIFtpZF09XCJwcm9wLmlkXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZGF0ZXBpY2tlci5vcGVuKClcIlxyXG4gICAgICAgIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAjZGF0ZXBpY2tlcj1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgIC8+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJ0aW1lXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZ2ItdGltZXBpY2tlciBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3AubmFtZVwiPjwvbmdiLXRpbWVwaWNrZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJkYXRlVGltZVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8YWJwLWRhdGUtdGltZS1waWNrZXIgW3Byb3BdPVwicHJvcFwiIFttZXJpZGlhbl09XCJtZXJpZGlhblwiPjwvYWJwLWRhdGUtdGltZS1waWNrZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaENhc2U9XCJ0ZXh0YXJlYVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8dGV4dGFyZWFcclxuICAgICAgICAjZmllbGRcclxuICAgICAgICBbaWRdPVwicHJvcC5pZFwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wLm5hbWVcIlxyXG4gICAgICAgIFthYnBEaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgID48L3RleHRhcmVhPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2xhYmVsIGxldC1jbGFzc2VzPlxyXG4gIDxsYWJlbCBbaHRtbEZvcl09XCJwcm9wLmlkXCIgW25nQ2xhc3NdPVwiY2xhc3NlcyB8fCAnZm9ybS1sYWJlbCdcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9wLmRpc3BsYXlUZXh0UmVzb2x2ZXI7IGVsc2UgZGlzcGxheU5hbWVUZW1wbGF0ZVwiPlxyXG4gICAgICB7eyBwcm9wLmRpc3BsYXlUZXh0UmVzb2x2ZXIoZGF0YSkgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5TmFtZVRlbXBsYXRlPiB7eyBwcm9wLmRpc3BsYXlOYW1lIHwgYWJwTG9jYWxpemF0aW9uIH19PC9uZy10ZW1wbGF0ZT5cclxuICAgIHt7IGFzdGVyaXNrIH19XHJcbiAgPC9sYWJlbD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -44,15 +44,15 @@ export class ExtensibleFormComponent {
44
44
  return (this.form.controls.extraProperties || { controls: {} });
45
45
  }
46
46
  }
47
- ExtensibleFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ExtensibleFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i2.ControlContainer }, { token: i3.ExtensionsService }, { token: EXTENSIONS_IDENTIFIER }], target: i0.ɵɵFactoryTarget.Component });
48
- ExtensibleFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: { selectedRecord: "selectedRecord" }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n\r\n <ng-container *ngFor=\"let groupedProp of groupedPropList.items\">\r\n <ng-container *abpPropData=\"let data; fromList: groupedProp.formPropList; withRecord: record\">\r\n\r\n <div *ngIf=\"groupedProp.group?.className; else withoutClassName\"\r\n [class]=\"groupedProp.group?.className\" [attr.data-name]=\"groupedProp.group?.className\">\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\" [ngTemplateOutletContext]=\"{groupedProp:groupedProp,data:data}\">\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #withoutClassName>\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\" [ngTemplateOutletContext]=\"{groupedProp:groupedProp,data:data}\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n </ng-container>\r\n</ng-container>\r\n\r\n\r\n<ng-template let-groupedProp=\"groupedProp\" let-data=\"data\" #propListTemplate>\r\n <ng-container *ngFor=\"let prop of groupedProp.formPropList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\"\r\n [class]=\"prop.className\">\r\n </abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop\r\n [class]=\"prop.className\"\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "component", type: i6.ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first"] }, { kind: "directive", type: i7.PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }], viewProviders: [
47
+ ExtensibleFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ExtensibleFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i2.ControlContainer }, { token: i3.ExtensionsService }, { token: EXTENSIONS_IDENTIFIER }], target: i0.ɵɵFactoryTarget.Component });
48
+ ExtensibleFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: { selectedRecord: "selectedRecord" }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n\r\n <ng-container *ngFor=\"let groupedProp of groupedPropList.items\">\r\n <ng-container *abpPropData=\"let data; fromList: groupedProp.formPropList; withRecord: record\">\r\n\r\n <div *ngIf=\"groupedProp.group?.className; else withoutClassName\"\r\n [class]=\"groupedProp.group?.className\" [attr.data-name]=\"groupedProp.group?.className\">\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\" [ngTemplateOutletContext]=\"{groupedProp:groupedProp,data:data}\">\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #withoutClassName>\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\" [ngTemplateOutletContext]=\"{groupedProp:groupedProp,data:data}\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n </ng-container>\r\n</ng-container>\r\n\r\n\r\n<ng-template let-groupedProp=\"groupedProp\" let-data=\"data\" #propListTemplate>\r\n <ng-container *ngFor=\"let prop of groupedProp.formPropList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\"\r\n [class]=\"prop.className\">\r\n </abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop\r\n [class]=\"prop.className\"\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "component", type: i6.ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first"] }, { kind: "directive", type: i7.PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }], viewProviders: [
49
49
  {
50
50
  provide: ControlContainer,
51
51
  useFactory: selfFactory,
52
52
  deps: [[new Optional(), new SkipSelf(), ControlContainer]],
53
53
  },
54
54
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ExtensibleFormComponent, decorators: [{
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ExtensibleFormComponent, decorators: [{
56
56
  type: Component,
57
57
  args: [{ exportAs: 'abpExtensibleForm', selector: 'abp-extensible-form', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
58
58
  {
@@ -109,9 +109,9 @@ export class ExtensibleTableComponent {
109
109
  });
110
110
  }
111
111
  }
112
- ExtensibleTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ExtensibleTableComponent, deps: [{ token: LOCALE_ID }, { token: i1.ConfigStateService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
113
- ExtensibleTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: { actionsText: "actionsText", data: "data", list: "list", recordsTotal: "recordsTotal", actionsColumnWidth: "actionsColumnWidth", actionsTemplate: "actionsTemplate" }, outputs: { tableActivate: "tableActivate" }, exportAs: ["abpExtensibleTable"], usesOnChanges: true, ngImport: i0, template: "<ngx-datatable\r\n default\r\n [rows]=\"data\"\r\n [count]=\"recordsTotal\"\r\n [list]=\"list\"\r\n (activate)=\"tableActivate.emit($event)\"\r\n>\r\n <ngx-datatable-column\r\n *ngIf=\"actionsTemplate || (actionList.length && hasAtLeastOnePermittedAction)\"\r\n [name]=\"actionsText | abpLocalization\"\r\n [maxWidth]=\"columnWidths[0]\"\r\n [width]=\"columnWidths[0]\"\r\n [sortable]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate || gridActions; context: { $implicit: row, index: i }\"\r\n ></ng-container>\r\n <ng-template #gridActions>\r\n <abp-grid-actions [index]=\"i\" [record]=\"row\" text=\"AbpUi::Actions\"></abp-grid-actions>\r\n </ng-template>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n\r\n <ng-container *ngFor=\"let prop of propList; let i = index; trackBy: trackByFn\">\r\n <ngx-datatable-column\r\n [width]=\"columnWidths[i + 1] || 200\"\r\n [name]=\"prop.displayName | abpLocalization\"\r\n [prop]=\"prop.name\"\r\n [sortable]=\"prop.sortable\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"index\" ngx-datatable-cell-template>\r\n <ng-container *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n <ng-container *ngIf=\"row['_' + prop.name]?.visible\">\r\n <div\r\n *ngIf=\"!row['_' + prop.name].component; else component\"\r\n [innerHTML]=\"row['_' + prop.name]?.value | async\"\r\n (click)=\"\r\n prop.action && prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [ngClass]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n </ng-container>\r\n <ng-template #component>\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n row['_' + prop.name].component;\r\n injector: row['_' + prop.name].injector\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n </ng-container>\r\n</ngx-datatable>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i3.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i3.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate"] }, { kind: "directive", type: i3.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i4.NgxDatatableDefaultDirective, selector: "ngx-datatable[default]", inputs: ["class"], exportAs: ["ngxDatatableDefault"] }, { kind: "directive", type: i4.NgxDatatableListDirective, selector: "ngx-datatable[list]", inputs: ["list"], exportAs: ["ngxDatatableList"] }, { kind: "component", type: i5.GridActionsComponent, selector: "abp-grid-actions", inputs: ["icon", "index", "text"], exportAs: ["abpGridActions"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ExtensibleTableComponent, decorators: [{
112
+ ExtensibleTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ExtensibleTableComponent, deps: [{ token: LOCALE_ID }, { token: i1.ConfigStateService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
113
+ ExtensibleTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: { actionsText: "actionsText", data: "data", list: "list", recordsTotal: "recordsTotal", actionsColumnWidth: "actionsColumnWidth", actionsTemplate: "actionsTemplate" }, outputs: { tableActivate: "tableActivate" }, exportAs: ["abpExtensibleTable"], usesOnChanges: true, ngImport: i0, template: "<ngx-datatable\r\n default\r\n [rows]=\"data\"\r\n [count]=\"recordsTotal\"\r\n [list]=\"list\"\r\n (activate)=\"tableActivate.emit($event)\"\r\n>\r\n <ngx-datatable-column\r\n *ngIf=\"actionsTemplate || (actionList.length && hasAtLeastOnePermittedAction)\"\r\n [name]=\"actionsText | abpLocalization\"\r\n [maxWidth]=\"columnWidths[0]\"\r\n [width]=\"columnWidths[0]\"\r\n [sortable]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate || gridActions; context: { $implicit: row, index: i }\"\r\n ></ng-container>\r\n <ng-template #gridActions>\r\n <abp-grid-actions [index]=\"i\" [record]=\"row\" text=\"AbpUi::Actions\"></abp-grid-actions>\r\n </ng-template>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n\r\n <ng-container *ngFor=\"let prop of propList; let i = index; trackBy: trackByFn\">\r\n <ngx-datatable-column\r\n [width]=\"columnWidths[i + 1] || 200\"\r\n [name]=\"prop.displayName | abpLocalization\"\r\n [prop]=\"prop.name\"\r\n [sortable]=\"prop.sortable\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"index\" ngx-datatable-cell-template>\r\n <ng-container *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n <ng-container *ngIf=\"row['_' + prop.name]?.visible\">\r\n <div\r\n *ngIf=\"!row['_' + prop.name].component; else component\"\r\n [innerHTML]=\"row['_' + prop.name]?.value | async\"\r\n (click)=\"\r\n prop.action && prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [ngClass]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n </ng-container>\r\n <ng-template #component>\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n row['_' + prop.name].component;\r\n injector: row['_' + prop.name].injector\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n </ng-container>\r\n</ngx-datatable>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i3.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i3.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate"] }, { kind: "directive", type: i3.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i4.NgxDatatableDefaultDirective, selector: "ngx-datatable[default]", inputs: ["class"], exportAs: ["ngxDatatableDefault"] }, { kind: "directive", type: i4.NgxDatatableListDirective, selector: "ngx-datatable[list]", inputs: ["list"], exportAs: ["ngxDatatableList"] }, { kind: "component", type: i5.GridActionsComponent, selector: "abp-grid-actions", inputs: ["icon", "index", "text"], exportAs: ["abpGridActions"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: ExtensibleTableComponent, decorators: [{
115
115
  type: Component,
116
116
  args: [{ exportAs: 'abpExtensibleTable', selector: 'abp-extensible-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ngx-datatable\r\n default\r\n [rows]=\"data\"\r\n [count]=\"recordsTotal\"\r\n [list]=\"list\"\r\n (activate)=\"tableActivate.emit($event)\"\r\n>\r\n <ngx-datatable-column\r\n *ngIf=\"actionsTemplate || (actionList.length && hasAtLeastOnePermittedAction)\"\r\n [name]=\"actionsText | abpLocalization\"\r\n [maxWidth]=\"columnWidths[0]\"\r\n [width]=\"columnWidths[0]\"\r\n [sortable]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate || gridActions; context: { $implicit: row, index: i }\"\r\n ></ng-container>\r\n <ng-template #gridActions>\r\n <abp-grid-actions [index]=\"i\" [record]=\"row\" text=\"AbpUi::Actions\"></abp-grid-actions>\r\n </ng-template>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n\r\n <ng-container *ngFor=\"let prop of propList; let i = index; trackBy: trackByFn\">\r\n <ngx-datatable-column\r\n [width]=\"columnWidths[i + 1] || 200\"\r\n [name]=\"prop.displayName | abpLocalization\"\r\n [prop]=\"prop.name\"\r\n [sortable]=\"prop.sortable\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"index\" ngx-datatable-cell-template>\r\n <ng-container *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n <ng-container *ngIf=\"row['_' + prop.name]?.visible\">\r\n <div\r\n *ngIf=\"!row['_' + prop.name].component; else component\"\r\n [innerHTML]=\"row['_' + prop.name]?.value | async\"\r\n (click)=\"\r\n prop.action && prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [ngClass]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n </ng-container>\r\n <ng-template #component>\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n row['_' + prop.name].component;\r\n injector: row['_' + prop.name].injector\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n </ng-container>\r\n</ngx-datatable>\r\n" }]
117
117
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
@@ -14,14 +14,14 @@ export class GridActionsComponent extends AbstractActionsComponent {
14
14
  this.trackByFn = (_, item) => item.text;
15
15
  }
16
16
  }
17
- GridActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: GridActionsComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
18
- GridActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: GridActionsComponent, selector: "abp-grid-actions", inputs: { icon: "icon", index: "index", text: "text" }, providers: [
17
+ GridActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: GridActionsComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
18
+ GridActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: GridActionsComponent, selector: "abp-grid-actions", inputs: { icon: "icon", index: "index", text: "text" }, providers: [
19
19
  {
20
20
  provide: EXTENSIONS_ACTION_TYPE,
21
21
  useValue: 'entityActions',
22
22
  },
23
- ], exportAs: ["abpGridActions"], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"actionList.length > 1\" ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button\r\n class=\"btn btn-primary btn-sm dropdown-toggle\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n ngbDropdownToggle\r\n >\r\n <i [ngClass]=\"icon\" [class.me-1]=\"icon\"></i>{{ text | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <ng-container\r\n *ngFor=\"let action of actionList; trackBy: trackByFn\"\r\n [ngTemplateOutlet]=\"dropDownBtnItemTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: action }\"\r\n >\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-container\r\n *ngIf=\"actionList.length === 1\"\r\n [ngTemplateOutlet]=\"btnTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: actionList.get(0).value }\"\r\n></ng-container>\r\n\r\n<ng-template #dropDownBtnItemTmp let-action>\r\n <ng-container *ngIf=\"action.visible(data)\">\r\n <button\r\n ngbDropdownItem\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"\r\n ></ng-container>\r\n </button>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #buttonContentTmp let-action>\r\n <i [ngClass]=\"action.icon\" [class.me-1]=\"action.icon\"></i>\r\n <span *ngIf=\"action.icon; else ellipsis\">{{ action.text | abpLocalization }}</span>\r\n <ng-template #ellipsis>\r\n <div abpEllipsis>{{ action.text | abpLocalization }}</div>\r\n </ng-template>\r\n</ng-template>\r\n\r\n<ng-template #btnTmp let-action>\r\n <ng-container *ngIf=\"action.visible(data)\">\r\n <button\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n class=\"btn btn-primary text-center\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"\r\n ></ng-container>\r\n </button>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i3.EllipsisDirective, selector: "[abpEllipsis]", inputs: ["abpEllipsis", "title", "abpEllipsisEnabled"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: GridActionsComponent, decorators: [{
23
+ ], exportAs: ["abpGridActions"], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"actionList.length > 1\" ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button\r\n class=\"btn btn-primary btn-sm dropdown-toggle\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n ngbDropdownToggle\r\n >\r\n <i [ngClass]=\"icon\" [class.me-1]=\"icon\"></i>{{ text | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <ng-container\r\n *ngFor=\"let action of actionList; trackBy: trackByFn\"\r\n [ngTemplateOutlet]=\"dropDownBtnItemTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: action }\"\r\n >\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-container\r\n *ngIf=\"actionList.length === 1\"\r\n [ngTemplateOutlet]=\"btnTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: actionList.get(0).value }\"\r\n></ng-container>\r\n\r\n<ng-template #dropDownBtnItemTmp let-action>\r\n <ng-container *ngIf=\"action.visible(data)\">\r\n <button\r\n ngbDropdownItem\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"\r\n ></ng-container>\r\n </button>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #buttonContentTmp let-action>\r\n <i [ngClass]=\"action.icon\" [class.me-1]=\"action.icon\"></i>\r\n <span *ngIf=\"action.icon; else ellipsis\">{{ action.text | abpLocalization }}</span>\r\n <ng-template #ellipsis>\r\n <div abpEllipsis>{{ action.text | abpLocalization }}</div>\r\n </ng-template>\r\n</ng-template>\r\n\r\n<ng-template #btnTmp let-action>\r\n <ng-container *ngIf=\"action.visible(data)\">\r\n <button\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n class=\"btn btn-primary text-center\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"\r\n ></ng-container>\r\n </button>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i3.EllipsisDirective, selector: "[abpEllipsis]", inputs: ["abpEllipsis", "title", "abpEllipsisEnabled"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: GridActionsComponent, decorators: [{
25
25
  type: Component,
26
26
  args: [{ exportAs: 'abpGridActions', selector: 'abp-grid-actions', providers: [
27
27
  {
@@ -14,14 +14,14 @@ export class PageToolbarComponent extends AbstractActionsComponent {
14
14
  this.trackByFn = (_, item) => item.action || item.component;
15
15
  }
16
16
  }
17
- PageToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PageToolbarComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
18
- PageToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: PageToolbarComponent, selector: "abp-page-toolbar", providers: [
17
+ PageToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PageToolbarComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
18
+ PageToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: PageToolbarComponent, selector: "abp-page-toolbar", providers: [
19
19
  {
20
20
  provide: EXTENSIONS_ACTION_TYPE,
21
21
  useValue: 'toolbarActions',
22
22
  },
23
23
  ], exportAs: ["abpPageToolbar"], usesInheritance: true, ngImport: i0, template: "<div class=\"row justify-content-end mx-0 gap-2\" id=\"AbpContentToolbar\">\r\n <div\r\n class=\"col-auto px-0 pt-0 pt-md-2\"\r\n [class.pe-0]=\"last\"\r\n *ngFor=\"let action of actionList; trackBy: trackByFn; let last = last\"\r\n >\r\n <ng-container *ngIf=\"action.visible(data)\">\r\n <ng-container *abpPermission=\"action.permission;runChangeDetection: false\">\r\n <ng-container *ngIf=\"action.component as component; else button\">\r\n <ng-container\r\n *ngComponentOutlet=\"component; injector: record | createInjector: action:this\"\r\n ></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #button>\r\n <button\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n [ngClass]=\"action.btnClass ? action.btnClass : defaultBtnClass\"\r\n class=\"d-inline-flex align-items-center gap-1\"\r\n >\r\n <i [ngClass]=\"action.icon\" [class.me-1]=\"action.icon\"></i>\r\n {{ action.text | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: i3.CreateInjectorPipe, name: "createInjector" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PageToolbarComponent, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PageToolbarComponent, decorators: [{
25
25
  type: Component,
26
26
  args: [{ exportAs: 'abpPageToolbar', selector: 'abp-page-toolbar', providers: [
27
27
  {
@@ -14,9 +14,9 @@ export class DisabledDirective {
14
14
  }
15
15
  }
16
16
  }
17
- DisabledDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DisabledDirective, deps: [{ token: i1.NgControl, host: true }], target: i0.ɵɵFactoryTarget.Directive });
18
- DisabledDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: DisabledDirective, selector: "[abpDisabled]", inputs: { abpDisabled: "abpDisabled" }, usesOnChanges: true, ngImport: i0 });
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DisabledDirective, decorators: [{
17
+ DisabledDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DisabledDirective, deps: [{ token: i1.NgControl, host: true }], target: i0.ɵɵFactoryTarget.Directive });
18
+ DisabledDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.3", type: DisabledDirective, selector: "[abpDisabled]", inputs: { abpDisabled: "abpDisabled" }, usesOnChanges: true, ngImport: i0 });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: DisabledDirective, decorators: [{
20
20
  type: Directive,
21
21
  args: [{
22
22
  selector: '[abpDisabled]',
@@ -20,9 +20,9 @@ export class PropDataDirective extends PropData {
20
20
  this.vcRef.clear();
21
21
  }
22
22
  }
23
- PropDataDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PropDataDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
24
- PropDataDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: PropDataDirective, selector: "[abpPropData]", inputs: { propList: ["abpPropDataFromList", "propList"], record: ["abpPropDataWithRecord", "record"], index: ["abpPropDataAtIndex", "index"] }, exportAs: ["abpPropData"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PropDataDirective, decorators: [{
23
+ PropDataDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PropDataDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
24
+ PropDataDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.3", type: PropDataDirective, selector: "[abpPropData]", inputs: { propList: ["abpPropDataFromList", "propList"], record: ["abpPropDataWithRecord", "record"], index: ["abpPropDataAtIndex", "index"] }, exportAs: ["abpPropData"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: PropDataDirective, decorators: [{
26
26
  type: Directive,
27
27
  args: [{
28
28
  exportAs: 'abpPropData',
@@ -50,4 +50,4 @@ export class Props {
50
50
  this.callbackList.pop();
51
51
  }
52
52
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL21vZGVscy9wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBS3hDLE1BQU0sT0FBZ0IsUUFBK0IsU0FBUSxVQUFhO0NBQUc7QUFFN0UsTUFBTSxPQUFnQixRQUFRO0lBUzVCLElBQUksSUFBSTtRQUNOLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBSUQsTUFBTSxPQUFnQixJQUFJO0lBQ3hCLFlBQ2tCLElBQWUsRUFDZixJQUFZLEVBQ1osV0FBbUIsRUFDbkIsVUFBa0IsRUFDbEIsVUFBNEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQ3JDLFVBQVUsS0FBSyxFQUNmLFFBQW9CLEVBQ3BCLFNBQWtCLEVBQ2xCLG1CQUFnRDtRQVJoRCxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBOEI7UUFDckMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQVk7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTZCO1FBRWhFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQU1ELE1BQU0sT0FBZ0IsWUFBWTtJQUFsQztRQUVVLHlCQUFvQixHQUFrRCxFQUFFLENBQUM7SUFPbkYsQ0FBQztJQUxDLEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEUsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFnQixLQUFLO0lBV3pCLFlBQTZCLFlBQTBDO1FBQTFDLGlCQUFZLEdBQVosWUFBWSxDQUE4QjtJQUFHLENBQUM7SUFSM0UsSUFBSSxLQUFLO1FBQ1AsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUUxRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBSUQsY0FBYyxDQUFDLGtCQUE4QztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlua2VkTGlzdCB9IGZyb20gJ0BhYnAvdXRpbHMnO1xyXG5pbXBvcnQgeyBJbmplY3RGbGFncywgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTyB9IGZyb20gJ3RzLXRvb2xiZWx0JztcclxuaW1wb3J0IHsgZVByb3BUeXBlIH0gZnJvbSAnLi4vZW51bXMvcHJvcHMuZW51bSc7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJvcExpc3Q8UiA9IGFueSwgQSA9IFByb3A8Uj4+IGV4dGVuZHMgTGlua2VkTGlzdDxBPiB7fVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb3BEYXRhPFIgPSBhbnk+IHtcclxuICBhYnN0cmFjdCBnZXRJbmplY3RlZDogPFQ+KFxyXG4gICAgdG9rZW46IFR5cGU8VD4gfCBJbmplY3Rpb25Ub2tlbjxUPixcclxuICAgIG5vdEZvdW5kVmFsdWU/OiBULFxyXG4gICAgZmxhZ3M/OiBJbmplY3RGbGFncyxcclxuICApID0+IFQ7XHJcbiAgaW5kZXg/OiBudW1iZXI7XHJcbiAgYWJzdHJhY3QgcmVjb3JkOiBSO1xyXG5cclxuICBnZXQgZGF0YSgpOiBSZWFkb25seVByb3BEYXRhPFI+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGdldEluamVjdGVkOiB0aGlzLmdldEluamVjdGVkLFxyXG4gICAgICBpbmRleDogdGhpcy5pbmRleCxcclxuICAgICAgcmVjb3JkOiB0aGlzLnJlY29yZCxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWFkb25seVByb3BEYXRhPFIgPSBhbnk+ID0gTy5SZWFkb25seTxPbWl0PFByb3BEYXRhPFI+LCAnZGF0YSc+PjtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wPFIgPSBhbnk+IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWFkb25seSB0eXBlOiBlUHJvcFR5cGUsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlOYW1lOiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbjogc3RyaW5nLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHZpc2libGU6IFByb3BQcmVkaWNhdGU8Uj4gPSBfID0+IHRydWUsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNFeHRyYSA9IGZhbHNlLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlPzogVHlwZTxhbnk+LFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHB1YmxpYyByZWFkb25seSBkaXNwbGF5VGV4dFJlc29sdmVyPzogUHJvcERpc3BsYXlUZXh0UmVzb2x2ZXI8Uj4sXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gdGhpcy5kaXNwbGF5TmFtZSB8fCB0aGlzLm5hbWU7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcm9wQ2FsbGJhY2s8VCwgUiA9IGFueT4gPSAoZGF0YTogT21pdDxQcm9wRGF0YTxUPiwgJ2RhdGEnPiwgYXV4RGF0YT86IGFueSkgPT4gUjtcclxuZXhwb3J0IHR5cGUgUHJvcFByZWRpY2F0ZTxUPiA9IChkYXRhPzogT21pdDxQcm9wRGF0YTxUPiwgJ2RhdGEnPiwgYXV4RGF0YT86IGFueSkgPT4gYm9vbGVhbjtcclxuZXhwb3J0IHR5cGUgUHJvcERpc3BsYXlUZXh0UmVzb2x2ZXI8VD4gPSAoZGF0YT86IE9taXQ8UHJvcERhdGE8VD4sICdkYXRhJz4pID0+IHN0cmluZztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wc0ZhY3Rvcnk8QyBleHRlbmRzIFByb3BzPGFueT4+IHtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2N0b3I6IFR5cGU8Qz47XHJcbiAgcHJpdmF0ZSBjb250cmlidXRvckNhbGxiYWNrczogUHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2tzPEluZmVycmVkUHJvcExpc3Q8Qz4+ID0ge307XHJcblxyXG4gIGdldChuYW1lOiBzdHJpbmcpOiBDIHtcclxuICAgIHRoaXMuY29udHJpYnV0b3JDYWxsYmFja3NbbmFtZV0gPSB0aGlzLmNvbnRyaWJ1dG9yQ2FsbGJhY2tzW25hbWVdIHx8IFtdO1xyXG5cclxuICAgIHJldHVybiBuZXcgdGhpcy5fY3Rvcih0aGlzLmNvbnRyaWJ1dG9yQ2FsbGJhY2tzW25hbWVdKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wczxMIGV4dGVuZHMgUHJvcExpc3Q+IHtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2N0b3I6IFR5cGU8TD47XHJcblxyXG4gIGdldCBwcm9wcygpOiBMIHtcclxuICAgIGNvbnN0IHByb3BMaXN0ID0gbmV3IHRoaXMuX2N0b3IoKTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrTGlzdC5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKHByb3BMaXN0KSk7XHJcblxyXG4gICAgcmV0dXJuIHByb3BMaXN0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjYWxsYmFja0xpc3Q6IFByb3BDb250cmlidXRvckNhbGxiYWNrPEw+W10pIHt9XHJcblxyXG4gIGFkZENvbnRyaWJ1dG9yKGNvbnRyaWJ1dGVDYWxsYmFjazogUHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2s8TD4pIHtcclxuICAgIHRoaXMuY2FsbGJhY2tMaXN0LnB1c2goY29udHJpYnV0ZUNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQ29udHJpYnV0b3JzKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY2FsbGJhY2tMaXN0Lmxlbmd0aCkgdGhpcy5jYWxsYmFja0xpc3QucG9wKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcm9wQ29udHJpYnV0b3JDYWxsYmFja3M8TCBleHRlbmRzIFByb3BMaXN0PGFueT4+ID0gUmVjb3JkPFxyXG4gIHN0cmluZyxcclxuICBQcm9wQ29udHJpYnV0b3JDYWxsYmFjazxMPltdXHJcbj47XHJcblxyXG5leHBvcnQgdHlwZSBQcm9wQ29udHJpYnV0b3JDYWxsYmFjazxMIGV4dGVuZHMgUHJvcExpc3Q8YW55Pj4gPSAocHJvcExpc3Q6IEwpID0+IGFueTtcclxuXHJcbnR5cGUgSW5mZXJyZWRQcm9wTGlzdDxDPiA9IEMgZXh0ZW5kcyBQcm9wczxpbmZlciBMPiA/IEwgOiBuZXZlcjtcclxuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL21vZGVscy9wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBS3hDLE1BQU0sT0FBZ0IsUUFBK0IsU0FBUSxVQUFhO0NBQUc7QUFFN0UsTUFBTSxPQUFnQixRQUFRO0lBUzVCLElBQUksSUFBSTtRQUNOLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBSUQsTUFBTSxPQUFnQixJQUFJO0lBQ3hCLFlBQ2tCLElBQWUsRUFDZixJQUFZLEVBQ1osV0FBbUIsRUFDbkIsVUFBa0IsRUFDbEIsVUFBNEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQ3JDLFVBQVUsS0FBSyxFQUNmLFFBQW9CLEVBQ3BCLFNBQWtCLEVBQ2xCLG1CQUFnRDtRQVJoRCxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBOEI7UUFDckMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQVk7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTZCO1FBRWhFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQU1ELE1BQU0sT0FBZ0IsWUFBWTtJQUFsQztRQUVVLHlCQUFvQixHQUFrRCxFQUFFLENBQUM7SUFPbkYsQ0FBQztJQUxDLEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEUsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFnQixLQUFLO0lBV3pCLFlBQTZCLFlBQTBDO1FBQTFDLGlCQUFZLEdBQVosWUFBWSxDQUE4QjtJQUFHLENBQUM7SUFSM0UsSUFBSSxLQUFLO1FBQ1AsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUUxRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBSUQsY0FBYyxDQUFDLGtCQUE4QztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlua2VkTGlzdCB9IGZyb20gJ0BhYnAvdXRpbHMnO1xyXG5pbXBvcnQgeyBJbmplY3RGbGFncywgSW5qZWN0aW9uVG9rZW4sIEluamVjdE9wdGlvbnMsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTyB9IGZyb20gJ3RzLXRvb2xiZWx0JztcclxuaW1wb3J0IHsgZVByb3BUeXBlIH0gZnJvbSAnLi4vZW51bXMvcHJvcHMuZW51bSc7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJvcExpc3Q8UiA9IGFueSwgQSA9IFByb3A8Uj4+IGV4dGVuZHMgTGlua2VkTGlzdDxBPiB7fVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb3BEYXRhPFIgPSBhbnk+IHtcclxuICBhYnN0cmFjdCBnZXRJbmplY3RlZDogPFQ+KFxyXG4gICAgdG9rZW46IFR5cGU8VD4gfCBJbmplY3Rpb25Ub2tlbjxUPixcclxuICAgIG5vdEZvdW5kVmFsdWU/OiBULFxyXG4gICAgb3B0aW9ucz86IEluamVjdE9wdGlvbnMgfCBJbmplY3RGbGFncyxcclxuICApID0+IFQ7XHJcbiAgaW5kZXg/OiBudW1iZXI7XHJcbiAgYWJzdHJhY3QgcmVjb3JkOiBSO1xyXG5cclxuICBnZXQgZGF0YSgpOiBSZWFkb25seVByb3BEYXRhPFI+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGdldEluamVjdGVkOiB0aGlzLmdldEluamVjdGVkLFxyXG4gICAgICBpbmRleDogdGhpcy5pbmRleCxcclxuICAgICAgcmVjb3JkOiB0aGlzLnJlY29yZCxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWFkb25seVByb3BEYXRhPFIgPSBhbnk+ID0gTy5SZWFkb25seTxPbWl0PFByb3BEYXRhPFI+LCAnZGF0YSc+PjtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wPFIgPSBhbnk+IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWFkb25seSB0eXBlOiBlUHJvcFR5cGUsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlOYW1lOiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbjogc3RyaW5nLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHZpc2libGU6IFByb3BQcmVkaWNhdGU8Uj4gPSBfID0+IHRydWUsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNFeHRyYSA9IGZhbHNlLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlPzogVHlwZTxhbnk+LFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHB1YmxpYyByZWFkb25seSBkaXNwbGF5VGV4dFJlc29sdmVyPzogUHJvcERpc3BsYXlUZXh0UmVzb2x2ZXI8Uj4sXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gdGhpcy5kaXNwbGF5TmFtZSB8fCB0aGlzLm5hbWU7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcm9wQ2FsbGJhY2s8VCwgUiA9IGFueT4gPSAoZGF0YTogT21pdDxQcm9wRGF0YTxUPiwgJ2RhdGEnPiwgYXV4RGF0YT86IGFueSkgPT4gUjtcclxuZXhwb3J0IHR5cGUgUHJvcFByZWRpY2F0ZTxUPiA9IChkYXRhPzogT21pdDxQcm9wRGF0YTxUPiwgJ2RhdGEnPiwgYXV4RGF0YT86IGFueSkgPT4gYm9vbGVhbjtcclxuZXhwb3J0IHR5cGUgUHJvcERpc3BsYXlUZXh0UmVzb2x2ZXI8VD4gPSAoZGF0YT86IE9taXQ8UHJvcERhdGE8VD4sICdkYXRhJz4pID0+IHN0cmluZztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wc0ZhY3Rvcnk8QyBleHRlbmRzIFByb3BzPGFueT4+IHtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2N0b3I6IFR5cGU8Qz47XHJcbiAgcHJpdmF0ZSBjb250cmlidXRvckNhbGxiYWNrczogUHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2tzPEluZmVycmVkUHJvcExpc3Q8Qz4+ID0ge307XHJcblxyXG4gIGdldChuYW1lOiBzdHJpbmcpOiBDIHtcclxuICAgIHRoaXMuY29udHJpYnV0b3JDYWxsYmFja3NbbmFtZV0gPSB0aGlzLmNvbnRyaWJ1dG9yQ2FsbGJhY2tzW25hbWVdIHx8IFtdO1xyXG5cclxuICAgIHJldHVybiBuZXcgdGhpcy5fY3Rvcih0aGlzLmNvbnRyaWJ1dG9yQ2FsbGJhY2tzW25hbWVdKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wczxMIGV4dGVuZHMgUHJvcExpc3Q+IHtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2N0b3I6IFR5cGU8TD47XHJcblxyXG4gIGdldCBwcm9wcygpOiBMIHtcclxuICAgIGNvbnN0IHByb3BMaXN0ID0gbmV3IHRoaXMuX2N0b3IoKTtcclxuXHJcbiAgICB0aGlzLmNhbGxiYWNrTGlzdC5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKHByb3BMaXN0KSk7XHJcblxyXG4gICAgcmV0dXJuIHByb3BMaXN0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjYWxsYmFja0xpc3Q6IFByb3BDb250cmlidXRvckNhbGxiYWNrPEw+W10pIHt9XHJcblxyXG4gIGFkZENvbnRyaWJ1dG9yKGNvbnRyaWJ1dGVDYWxsYmFjazogUHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2s8TD4pIHtcclxuICAgIHRoaXMuY2FsbGJhY2tMaXN0LnB1c2goY29udHJpYnV0ZUNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQ29udHJpYnV0b3JzKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY2FsbGJhY2tMaXN0Lmxlbmd0aCkgdGhpcy5jYWxsYmFja0xpc3QucG9wKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcm9wQ29udHJpYnV0b3JDYWxsYmFja3M8TCBleHRlbmRzIFByb3BMaXN0PGFueT4+ID0gUmVjb3JkPFxyXG4gIHN0cmluZyxcclxuICBQcm9wQ29udHJpYnV0b3JDYWxsYmFjazxMPltdXHJcbj47XHJcblxyXG5leHBvcnQgdHlwZSBQcm9wQ29udHJpYnV0b3JDYWxsYmFjazxMIGV4dGVuZHMgUHJvcExpc3Q8YW55Pj4gPSAocHJvcExpc3Q6IEwpID0+IGFueTtcclxuXHJcbnR5cGUgSW5mZXJyZWRQcm9wTGlzdDxDPiA9IEMgZXh0ZW5kcyBQcm9wczxpbmZlciBMPiA/IEwgOiBuZXZlcjtcclxuIl19