@bizdoc/core 1.15.3 → 1.15.6

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 (162) hide show
  1. package/assets/bizdoc-schema.json +6 -8
  2. package/assets/system/icons.json +1 -0
  3. package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +9 -7
  4. package/esm2020/lib/admin/configuration-designer/designer.base.mjs +109 -4
  5. package/esm2020/lib/admin/configuration-designer/designer.component.mjs +115 -46
  6. package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +12 -20
  7. package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +48 -0
  8. package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +16 -39
  9. package/esm2020/lib/admin/configuration-designer/elements/anomaly-rule.component.mjs +10 -15
  10. package/esm2020/lib/admin/configuration-designer/elements/box-form.component.mjs +14 -15
  11. package/esm2020/lib/admin/configuration-designer/elements/configuration-datasource.component.mjs +61 -0
  12. package/esm2020/lib/admin/configuration-designer/elements/cube-view.component.mjs +18 -28
  13. package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +142 -17
  14. package/esm2020/lib/admin/configuration-designer/elements/documents-report.component.mjs +15 -34
  15. package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +24 -34
  16. package/esm2020/lib/admin/configuration-designer/elements/explore-view.component.mjs +18 -27
  17. package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +16 -19
  18. package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +58 -25
  19. package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +34 -19
  20. package/esm2020/lib/admin/configuration-designer/elements/matrix-view.component.mjs +45 -41
  21. package/esm2020/lib/admin/configuration-designer/elements/parallel-view.component.mjs +18 -34
  22. package/esm2020/lib/admin/configuration-designer/elements/performance-widget.component.mjs +15 -29
  23. package/esm2020/lib/admin/configuration-designer/elements/pivot-view.component.mjs +17 -34
  24. package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +12 -18
  25. package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +38 -0
  26. package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +18 -18
  27. package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +9 -18
  28. package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +28 -0
  29. package/esm2020/lib/admin/configuration-designer/elements/sum-view.component.mjs +17 -35
  30. package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +19 -42
  31. package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +15 -19
  32. package/esm2020/lib/admin/configuration-designer/elements/usage-report.component.mjs +37 -33
  33. package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +12 -18
  34. package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +13 -16
  35. package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +10 -20
  36. package/esm2020/lib/admin/configuration-designer/icon-picker.component.mjs +162 -0
  37. package/esm2020/lib/admin/configuration-designer/privileges.component.mjs +31 -16
  38. package/esm2020/lib/admin/core/color-picker.input.mjs +9 -33
  39. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +4 -4
  40. package/esm2020/lib/admin/form/designer/designer.component.mjs +140 -18
  41. package/esm2020/lib/admin/form/form.resolve.service.mjs +7 -7
  42. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +9 -9
  43. package/esm2020/lib/admin/patterns/patterns.component.mjs +4 -4
  44. package/esm2020/lib/admin/system.service.mjs +57 -0
  45. package/esm2020/lib/compose/box/box.component.mjs +43 -0
  46. package/esm2020/lib/compose/document.component.mjs +2 -2
  47. package/esm2020/lib/compose/form-ref.mjs +7 -2
  48. package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  49. package/esm2020/lib/compose/form.component.mjs +2 -2
  50. package/esm2020/lib/compose/new-menu.component.mjs +3 -3
  51. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +2 -2
  52. package/esm2020/lib/core/functions.mjs +6 -1
  53. package/esm2020/lib/core/mailbox.service.mjs +2 -2
  54. package/esm2020/lib/core/models.mjs +1 -1
  55. package/esm2020/lib/core/translations.mjs +44 -6
  56. package/esm2020/lib/cube/filter/filter.component.mjs +3 -3
  57. package/esm2020/lib/cube/matrix/table.component.mjs +1 -1
  58. package/esm2020/lib/cube/sum/sum.component.mjs +1 -1
  59. package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +1 -1
  60. package/esm2020/lib/dashboard/cube/compare.widget.mjs +1 -1
  61. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +1 -1
  62. package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +1 -1
  63. package/esm2020/lib/dashboard/cube/documents.widget.mjs +1 -1
  64. package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +1 -1
  65. package/esm2020/lib/reports/cube/documents.component.mjs +1 -1
  66. package/esm2020/lib/reports/cube/grid-documents.component.mjs +1 -1
  67. package/esm2020/lib/reports/cube/table-documents.component.mjs +1 -1
  68. package/esm2020/lib/reports/cube/usage-args.component.mjs +1 -1
  69. package/esm2020/lib/reports/cube/usage-base.mjs +2 -1
  70. package/esm2020/lib/reports/cube/usage-chart.component.mjs +1 -1
  71. package/esm2020/lib/reports/cube/usage-pivot.component.mjs +1 -1
  72. package/esm2020/lib/reports/cube/usage.component.mjs +4 -5
  73. package/esm2020/lib/reports/tasks/tasks.component.mjs +1 -1
  74. package/esm2020/lib/shared.module.mjs +5 -4
  75. package/esm2020/lib/system.module.mjs +18 -12
  76. package/esm2020/lib/views/cube/chart.component.mjs +2 -2
  77. package/esm2020/lib/views/cube/explore.component.mjs +1 -1
  78. package/esm2020/lib/views/cube/matrix.component.mjs +1 -1
  79. package/esm2020/lib/views/cube/parallel.component.mjs +1 -1
  80. package/esm2020/lib/views/cube/pivot.component.mjs +1 -1
  81. package/esm2020/lib/views/cube/sum.component.mjs +1 -1
  82. package/esm2020/lib/views/cube/view.component.mjs +1 -1
  83. package/fesm2015/bizdoc-core.mjs +1457 -937
  84. package/fesm2015/bizdoc-core.mjs.map +1 -1
  85. package/fesm2020/bizdoc-core.mjs +1437 -939
  86. package/fesm2020/bizdoc-core.mjs.map +1 -1
  87. package/lib/admin/configuration-designer/designer-element.component.d.ts +3 -2
  88. package/lib/admin/configuration-designer/designer.base.d.ts +111 -16
  89. package/lib/admin/configuration-designer/designer.component.d.ts +15 -18
  90. package/lib/admin/configuration-designer/elements/action.component.d.ts +2 -16
  91. package/lib/admin/configuration-designer/elements/analysis-view.component.d.ts +19 -0
  92. package/lib/admin/configuration-designer/elements/analysis-widget.component.d.ts +4 -30
  93. package/lib/admin/configuration-designer/elements/anomaly-rule.component.d.ts +1 -9
  94. package/lib/admin/configuration-designer/elements/box-form.component.d.ts +3 -13
  95. package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts +26 -0
  96. package/lib/admin/configuration-designer/elements/cube-view.component.d.ts +6 -29
  97. package/lib/admin/configuration-designer/elements/cube.component.d.ts +36 -13
  98. package/lib/admin/configuration-designer/elements/documents-report.component.d.ts +3 -27
  99. package/lib/admin/configuration-designer/elements/documents-widget.component.d.ts +8 -25
  100. package/lib/admin/configuration-designer/elements/explore-view.component.d.ts +6 -26
  101. package/lib/admin/configuration-designer/elements/folder.component.d.ts +2 -14
  102. package/lib/admin/configuration-designer/elements/form.component.d.ts +8 -13
  103. package/lib/admin/configuration-designer/elements/guide.component.d.ts +7 -16
  104. package/lib/admin/configuration-designer/elements/matrix-view.component.d.ts +10 -32
  105. package/lib/admin/configuration-designer/elements/parallel-view.component.d.ts +5 -28
  106. package/lib/admin/configuration-designer/elements/performance-widget.component.d.ts +3 -21
  107. package/lib/admin/configuration-designer/elements/pivot-view.component.d.ts +5 -25
  108. package/lib/admin/configuration-designer/elements/report.component.d.ts +2 -15
  109. package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +18 -0
  110. package/lib/admin/configuration-designer/elements/role.component.d.ts +3 -15
  111. package/lib/admin/configuration-designer/elements/rule.component.d.ts +2 -13
  112. package/lib/admin/configuration-designer/elements/state.component.d.ts +7 -0
  113. package/lib/admin/configuration-designer/elements/sum-view.component.d.ts +4 -29
  114. package/lib/admin/configuration-designer/elements/tasks-report.component.d.ts +6 -29
  115. package/lib/admin/configuration-designer/elements/type.component.d.ts +2 -16
  116. package/lib/admin/configuration-designer/elements/usage-report.component.d.ts +9 -25
  117. package/lib/admin/configuration-designer/elements/utility.component.d.ts +2 -15
  118. package/lib/admin/configuration-designer/elements/view.component.d.ts +3 -13
  119. package/lib/admin/configuration-designer/elements/widget.component.d.ts +2 -16
  120. package/lib/admin/configuration-designer/icon-picker.component.d.ts +67 -0
  121. package/lib/admin/configuration-designer/privileges.component.d.ts +11 -7
  122. package/lib/admin/core/color-picker.input.d.ts +3 -6
  123. package/lib/admin/document-trace/document-trace.component.d.ts +2 -2
  124. package/lib/admin/form/designer/designer.component.d.ts +59 -19
  125. package/lib/admin/form/form.resolve.service.d.ts +3 -3
  126. package/lib/admin/form/workflow/workflow.component.d.ts +3 -3
  127. package/lib/admin/patterns/patterns.component.d.ts +2 -2
  128. package/lib/admin/{form/form.service.d.ts → system.service.d.ts} +9 -5
  129. package/lib/compose/box/box.component.d.ts +17 -0
  130. package/lib/compose/form-ref.d.ts +6 -2
  131. package/lib/core/models.d.ts +4 -1
  132. package/lib/core/translations.d.ts +42 -0
  133. package/lib/cube/matrix/table.component.d.ts +0 -1
  134. package/lib/cube/sum/sum.component.d.ts +2 -1
  135. package/lib/dashboard/cube/accum-cube.widget.d.ts +2 -2
  136. package/lib/dashboard/cube/compare.widget.d.ts +7 -1
  137. package/lib/dashboard/cube/cube-analysis.base.d.ts +4 -3
  138. package/lib/dashboard/cube/cube-analysis.widget.d.ts +2 -2
  139. package/lib/dashboard/cube/documents.widget.d.ts +11 -1
  140. package/lib/dashboard/cube/filter/filter.component.d.ts +2 -2
  141. package/lib/reports/cube/documents.component.d.ts +2 -3
  142. package/lib/reports/cube/grid-documents.component.d.ts +2 -2
  143. package/lib/reports/cube/table-documents.component.d.ts +2 -2
  144. package/lib/reports/cube/usage-args.component.d.ts +2 -2
  145. package/lib/reports/cube/usage-base.d.ts +9 -7
  146. package/lib/reports/cube/usage-chart.component.d.ts +2 -2
  147. package/lib/reports/cube/usage-pivot.component.d.ts +2 -2
  148. package/lib/reports/cube/usage.component.d.ts +3 -4
  149. package/lib/reports/tasks/tasks.component.d.ts +4 -2
  150. package/lib/shared.module.d.ts +183 -182
  151. package/lib/system.module.d.ts +61 -57
  152. package/lib/views/cube/chart.component.d.ts +5 -4
  153. package/lib/views/cube/explore.component.d.ts +4 -4
  154. package/lib/views/cube/matrix.component.d.ts +8 -7
  155. package/lib/views/cube/parallel.component.d.ts +8 -3
  156. package/lib/views/cube/pivot.component.d.ts +4 -3
  157. package/lib/views/cube/sum.component.d.ts +5 -3
  158. package/lib/views/cube/view.component.d.ts +4 -4
  159. package/package.json +1 -1
  160. package/esm2020/lib/admin/configuration-designer/elements/chart-view.component.mjs +0 -76
  161. package/esm2020/lib/admin/form/form.service.mjs +0 -48
  162. package/lib/admin/configuration-designer/elements/chart-view.component.d.ts +0 -45
@@ -1,31 +1,21 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { Component } from "@angular/core";
3
3
  import { BizDoc } from "../../../core/decorators";
4
- import { DesignerElementComponent } from "../designer.base";
4
+ import { DesignerTypeElementComponent } from "../designer.base";
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
7
- import * as i2 from "../../../core/session.service";
8
- import * as i3 from "@angular/common";
9
- let WidgetDesignComponent = class WidgetDesignComponent extends DesignerElementComponent {
10
- constructor(_fb, _session) {
11
- super();
12
- this._fb = _fb;
13
- this._session = _session;
14
- this.form = this._fb.group({
15
- disabled: false,
16
- });
17
- }
18
- ngOnInit() {
19
- }
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "../privileges.component";
9
+ let WidgetDesignComponent = class WidgetDesignComponent extends DesignerTypeElementComponent {
20
10
  };
21
- WidgetDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: WidgetDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SessionService }], target: i0.ɵɵFactoryTarget.Component });
22
- WidgetDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: WidgetDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<form *ngIf=\"editMode; else info\" autocomplete=\"off\" [formGroup]=\"form\">\r\n</form>\r\n<!---->\r\n<ng-template #info>\r\n <div>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
11
+ WidgetDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: WidgetDesignComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ WidgetDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: WidgetDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"editMode; else info\">\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n </form>\r\n <bizdoc-layout *ngIf=\"model.arguments\" [fields]=\"model.arguments\" [model]=\"args\" (modelChange)=\"assignargs($event)\"></bizdoc-layout>\r\n <bizdoc-privileges (change)=\"change.emit()\" [model]=\"model.privileges\"></bizdoc-privileges>\r\n</ng-container>\r\n<!---->\r\n<ng-template #info>\r\n <div>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.PrivilegesDesignComponent, selector: "bizdoc-privileges", inputs: ["model"], outputs: ["change"] }] });
23
13
  WidgetDesignComponent = __decorate([
24
14
  BizDoc({ selector: 'widget-designer' })
25
15
  ], WidgetDesignComponent);
26
16
  export { WidgetDesignComponent };
27
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: WidgetDesignComponent, decorators: [{
28
18
  type: Component,
29
- args: [{ template: "<form *ngIf=\"editMode; else info\" autocomplete=\"off\" [formGroup]=\"form\">\r\n</form>\r\n<!---->\r\n<ng-template #info>\r\n <div>\r\n </div>\r\n</ng-template>\r\n" }]
30
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SessionService }]; } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29uZmlndXJhdGlvbi1kZXNpZ25lci9lbGVtZW50cy93aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uLWRlc2lnbmVyL2VsZW1lbnRzL3dpZGdldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0lBSS9DLHFCQUFxQixTQUFyQixxQkFBc0IsU0FBUSx3QkFBK0I7SUFJeEUsWUFBb0IsR0FBZ0IsRUFBVSxRQUF3QjtRQUNwRSxLQUFLLEVBQUUsQ0FBQTtRQURXLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUg3RCxTQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDN0IsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO0lBR0gsQ0FBQztJQUNELFFBQVE7SUFDUixDQUFDO0NBQ0YsQ0FBQTtrSEFUWSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwyRUNSbEMsMEtBT0E7QURDYSxxQkFBcUI7SUFEakMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUM7R0FDM0IscUJBQXFCLENBU2pDO1NBVFkscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRmpDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Rlc2lnbmVyLmJhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoeyB0ZW1wbGF0ZVVybDogJ3dpZGdldC5jb21wb25lbnQuaHRtbCcgfSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnd2lkZ2V0LWRlc2lnbmVyJyB9KVxyXG5leHBvcnQgY2xhc3MgV2lkZ2V0RGVzaWduQ29tcG9uZW50IGV4dGVuZHMgRGVzaWduZXJFbGVtZW50Q29tcG9uZW50PE1vZGVsPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICB9KTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgTW9kZWwge1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbixcclxufVxyXG4iLCI8Zm9ybSAqbmdJZj1cImVkaXRNb2RlOyBlbHNlIGluZm9cIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuPC9mb3JtPlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW5mbz5cclxuICA8ZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
19
+ args: [{ template: "<ng-container *ngIf=\"editMode; else info\">\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n </form>\r\n <bizdoc-layout *ngIf=\"model.arguments\" [fields]=\"model.arguments\" [model]=\"args\" (modelChange)=\"assignargs($event)\"></bizdoc-layout>\r\n <bizdoc-privileges (change)=\"change.emit()\" [model]=\"model.privileges\"></bizdoc-privileges>\r\n</ng-container>\r\n<!---->\r\n<ng-template #info>\r\n <div>\r\n </div>\r\n</ng-template>\r\n" }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29uZmlndXJhdGlvbi1kZXNpZ25lci9lbGVtZW50cy93aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uLWRlc2lnbmVyL2VsZW1lbnRzL3dpZGdldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0lBSW5ELHFCQUFxQixTQUFyQixxQkFBc0IsU0FBUSw0QkFBNEI7Q0FDdEUsQ0FBQTtrSEFEWSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwyRUNQbEMsMGNBV0E7QURKYSxxQkFBcUI7SUFEakMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUM7R0FDM0IscUJBQXFCLENBQ2pDO1NBRFkscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRmpDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCB9IGZyb20gXCIuLi9kZXNpZ25lci5iYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHsgdGVtcGxhdGVVcmw6ICd3aWRnZXQuY29tcG9uZW50Lmh0bWwnIH0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ3dpZGdldC1kZXNpZ25lcicgfSlcclxuZXhwb3J0IGNsYXNzIFdpZGdldERlc2lnbkNvbXBvbmVudCBleHRlbmRzIERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQge1xyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0TW9kZTsgZWxzZSBpbmZvXCI+XHJcbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPC9mb3JtPlxyXG4gIDxiaXpkb2MtbGF5b3V0ICpuZ0lmPVwibW9kZWwuYXJndW1lbnRzXCIgW2ZpZWxkc109XCJtb2RlbC5hcmd1bWVudHNcIiBbbW9kZWxdPVwiYXJnc1wiIChtb2RlbENoYW5nZSk9XCJhc3NpZ25hcmdzKCRldmVudClcIj48L2JpemRvYy1sYXlvdXQ+XHJcbiAgPGJpemRvYy1wcml2aWxlZ2VzIChjaGFuZ2UpPVwiY2hhbmdlLmVtaXQoKVwiIFttb2RlbF09XCJtb2RlbC5wcml2aWxlZ2VzXCI+PC9iaXpkb2MtcHJpdmlsZWdlcz5cclxuPC9uZy1jb250YWluZXI+XHJcbjwhLS0tLT5cclxuPG5nLXRlbXBsYXRlICNpbmZvPlxyXG4gIDxkaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -0,0 +1,162 @@
1
+ import { ESCAPE } from "@angular/cdk/keycodes";
2
+ import { TemplatePortal } from "@angular/cdk/portal";
3
+ import { Component, EventEmitter, HostBinding, Input, Optional, Output, Self, TemplateRef, ViewChild } from "@angular/core";
4
+ import { FormControl } from "@angular/forms";
5
+ import { debounceTime, filter, merge, Subject } from "rxjs";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "@angular/cdk/overlay";
9
+ import * as i3 from "@angular/common/http";
10
+ import * as i4 from "@angular/cdk/bidi";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "@angular/material/button";
13
+ import * as i7 from "@angular/material/input";
14
+ import * as i8 from "@angular/material/icon";
15
+ export class IconPickerComponent {
16
+ constructor(ngControl, _overlay, _http, _vc, _element, _dir) {
17
+ this.ngControl = ngControl;
18
+ this._overlay = _overlay;
19
+ this._http = _http;
20
+ this._vc = _vc;
21
+ this._element = _element;
22
+ this._dir = _dir;
23
+ this.id = `color-picker-${IconPickerComponent.nextId++}`;
24
+ this.errorState = false;
25
+ this.describedBy = '';
26
+ this.focused = false;
27
+ this.valueChanges = new EventEmitter();
28
+ this.categories = [];
29
+ this.filter = new FormControl(null);
30
+ this._required = false;
31
+ this._disabled = false;
32
+ this.stateChanges = new Subject();
33
+ if (this.ngControl != null) {
34
+ this.ngControl.valueAccessor = this;
35
+ }
36
+ }
37
+ get value() { return this._value; }
38
+ set value(val) {
39
+ this._value = val;
40
+ this._onChange && this._onChange(val);
41
+ this.valueChanges.next(val);
42
+ this.stateChanges.next();
43
+ }
44
+ get empty() {
45
+ return this._value === null;
46
+ }
47
+ get shouldLabelFloat() {
48
+ return this.focused || !this.empty;
49
+ }
50
+ get required() {
51
+ return this._required;
52
+ }
53
+ set required(req) {
54
+ this._required = req;
55
+ this.stateChanges.next();
56
+ }
57
+ get disabled() { return this._disabled; }
58
+ set disabled(value) {
59
+ this._disabled = value;
60
+ this.stateChanges.next();
61
+ }
62
+ registerOnChange(fn) {
63
+ this._onChange = fn;
64
+ }
65
+ registerOnTouched(fn) {
66
+ this._onTouched = fn;
67
+ }
68
+ writeValue(obj) {
69
+ this._value = obj;
70
+ }
71
+ setDescribedByIds(ids) {
72
+ this.describedBy = ids.join(' ');
73
+ }
74
+ onContainerClick(_event) {
75
+ this._onTouched && this._onTouched();
76
+ this.open();
77
+ }
78
+ ngOnInit() {
79
+ if (!IconPickerComponent.icons)
80
+ this._http.get('/assets/system/icons.json').subscribe(e => {
81
+ IconPickerComponent.icons = e;
82
+ this._list(e);
83
+ });
84
+ else
85
+ this._list(IconPickerComponent.icons);
86
+ this.filter.valueChanges.
87
+ pipe(debounceTime(150)).
88
+ subscribe(v => this._list(IconPickerComponent.icons.filter(i => i.tags.findIndex(t => t.indexOf(v) > -1) > -1)));
89
+ }
90
+ _list(e) {
91
+ e.forEach(i => i.categories.forEach(c => {
92
+ if (this.categories[c])
93
+ this.categories[c].items.push(i);
94
+ else
95
+ this.categories.push(this.categories[c] = { items: [i] });
96
+ }));
97
+ }
98
+ open() {
99
+ this._overlayRef = this._overlay.create({
100
+ positionStrategy: this._overlay.position().flexibleConnectedTo(this._element).withPositions([{
101
+ originX: 'start',
102
+ originY: 'bottom',
103
+ overlayX: 'start',
104
+ overlayY: 'top'
105
+ }, {
106
+ originX: 'start',
107
+ originY: 'top',
108
+ overlayX: 'start',
109
+ overlayY: 'bottom'
110
+ }]),
111
+ hasBackdrop: true,
112
+ direction: this._dir.value,
113
+ backdropClass: 'cdk-overlay-transparent-backdrop',
114
+ panelClass: 'home-panel'
115
+ });
116
+ const portal = new TemplatePortal(this.panel, this._vc);
117
+ this._overlayRef.attach(portal);
118
+ merge(this._overlayRef.backdropClick(), this._overlayRef.keydownEvents().pipe(filter(k => k.keyCode === ESCAPE))).subscribe(() => this._overlayRef.detach());
119
+ }
120
+ _trackBy(index, el) {
121
+ return el.name;
122
+ }
123
+ _clear() { }
124
+ close() {
125
+ this._overlayRef.detach();
126
+ }
127
+ _pick(icon) {
128
+ this.value = icon.name;
129
+ this.close();
130
+ }
131
+ }
132
+ IconPickerComponent.nextId = 0;
133
+ IconPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: IconPickerComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.Overlay }, { token: i3.HttpClient }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i4.Directionality }], target: i0.ɵɵFactoryTarget.Component });
134
+ IconPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: IconPickerComponent, selector: "bizdoc-icon-picker", inputs: { value: "value", required: "required", disabled: "disabled" }, outputs: { valueChanges: "valueChanges" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy" } }, viewQueries: [{ propertyName: "panel", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<button mat-button (click)=\"open()\" [disabled]=\"disabled\">\r\n <mat-icon>{{value}}</mat-icon>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n</button>\r\n<ng-template>\r\n <div class=\"icon-palette\">\r\n <input matInput [formControl]=\"filter\" (keydown.escape)=\"_clear()\" />\r\n <div *ngFor=\"let c of categories; trackBy: _trackBy\">\r\n <span></span>\r\n <div>\r\n <mat-icon *ngFor=\"let i of c.items; trackBy: _trackBy\" (click)=\"_pick(i)\">{{i.name}}</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".icon-palette{max-height:400px;overflow-y:auto;max-width:450px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: IconPickerComponent, decorators: [{
136
+ type: Component,
137
+ args: [{ selector: 'bizdoc-icon-picker', template: "<button mat-button (click)=\"open()\" [disabled]=\"disabled\">\r\n <mat-icon>{{value}}</mat-icon>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n</button>\r\n<ng-template>\r\n <div class=\"icon-palette\">\r\n <input matInput [formControl]=\"filter\" (keydown.escape)=\"_clear()\" />\r\n <div *ngFor=\"let c of categories; trackBy: _trackBy\">\r\n <span></span>\r\n <div>\r\n <mat-icon *ngFor=\"let i of c.items; trackBy: _trackBy\" (click)=\"_pick(i)\">{{i.name}}</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".icon-palette{max-height:400px;overflow-y:auto;max-width:450px}\n"] }]
138
+ }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
139
+ type: Optional
140
+ }, {
141
+ type: Self
142
+ }] }, { type: i2.Overlay }, { type: i3.HttpClient }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i4.Directionality }]; }, propDecorators: { id: [{
143
+ type: HostBinding
144
+ }], value: [{
145
+ type: Input
146
+ }], shouldLabelFloat: [{
147
+ type: HostBinding,
148
+ args: ['class.floating']
149
+ }], required: [{
150
+ type: Input
151
+ }], disabled: [{
152
+ type: Input
153
+ }], describedBy: [{
154
+ type: HostBinding,
155
+ args: ['attr.aria-describedby']
156
+ }], valueChanges: [{
157
+ type: Output
158
+ }], panel: [{
159
+ type: ViewChild,
160
+ args: [TemplateRef]
161
+ }] } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uLWRlc2lnbmVyL2ljb24tcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29uZmlndXJhdGlvbi1kZXNpZ25lci9pY29uLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxFQUF3QixXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBTzVELE1BQU0sT0FBTyxtQkFBbUI7SUFnRDlCLFlBQzZCLFNBQW9CLEVBQ3ZDLFFBQWlCLEVBQ2pCLEtBQWlCLEVBQ2pCLEdBQXFCLEVBQ3JCLFFBQW9CLEVBQ3BCLElBQW9CO1FBTEQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN2QyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQXBEZixPQUFFLEdBQUcs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Q0FBQztJQUM1QixDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQWM7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7O0FBOUhjLDBCQUFNLEdBQUcsQ0FBRSxDQUFBO2dIQURmLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHVWQXNDbkIsV0FBVyxnRENyRHhCLG1qQkFlQTsyRkRBYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBR0Usb0JBQW9COzswQkFtRDNCLFFBQVE7OzBCQUFJLElBQUk7Z0xBL0NKLEVBQUU7c0JBQWhCLFdBQVc7Z0JBSVIsS0FBSztzQkFEUixLQUFLO2dCQVdGLGdCQUFnQjtzQkFEbkIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3pCLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBT2dDLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUdqQixZQUFZO3NCQUE5QixNQUFNO2dCQUNpQixLQUFLO3NCQUE1QixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xyXG5pbXBvcnQgeyBFU0NBUEUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2tleWNvZGVzXCI7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2VsZiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICdpY29uLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2ljb24tcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtaWNvbi1waWNrZXInXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJY29uUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxzdHJpbmc+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIEBIb3N0QmluZGluZygpIGlkID0gYGNvbG9yLXBpY2tlci0ke0ljb25QaWNrZXJDb21wb25lbnQubmV4dElkKyt9YDtcclxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xyXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh2YWwpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMubmV4dCh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgPT09IG51bGw7XHJcbiAgfVxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxyXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBnZXQgcmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG4gIHNldCByZXF1aXJlZChyZXEpIHtcclxuICAgIHRoaXMuX3JlcXVpcmVkID0gcmVxO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBlcnJvclN0YXRlID0gZmFsc2U7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBkZXNjcmliZWRCeSA9ICcnO1xyXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgZm9jdXNlZCA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAVmlld0NoaWxkKFRlbXBsYXRlUmVmKSBwYW5lbDogVGVtcGxhdGVSZWY8YW55PjtcclxuICByZWFkb25seSBjYXRlZ29yaWVzOiBDYXRlZ29yeUluZm9bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IGZpbHRlciA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcclxuICBwcml2YXRlIHN0YXRpYyBpY29uczogSWNvbkluZm9bXTtcclxuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnk7XHJcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkOiBhbnk7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfdmM6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gb2JqO1xyXG4gIH1cclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcclxuICB9XHJcbiAgb25Db250YWluZXJDbGljayhfZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCAmJiB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIHRoaXMub3BlbigpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghSWNvblBpY2tlckNvbXBvbmVudC5pY29ucylcclxuICAgICAgdGhpcy5faHR0cC5nZXQ8SWNvbkluZm9bXT4oJy9hc3NldHMvc3lzdGVtL2ljb25zLmpzb24nKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgSWNvblBpY2tlckNvbXBvbmVudC5pY29ucyA9IGU7XHJcbiAgICAgICAgdGhpcy5fbGlzdChlKTtcclxuICAgICAgfSk7XHJcbiAgICBlbHNlIHRoaXMuX2xpc3QoSWNvblBpY2tlckNvbXBvbmVudC5pY29ucyk7XHJcbiAgICB0aGlzLmZpbHRlci52YWx1ZUNoYW5nZXMuXHJcbiAgICAgIHBpcGUoZGVib3VuY2VUaW1lKDE1MCkpLlxyXG4gICAgICBzdWJzY3JpYmUodiA9PiB0aGlzLl9saXN0KEljb25QaWNrZXJDb21wb25lbnQuaWNvbnMuZmlsdGVyKGkgPT4gaS50YWdzLmZpbmRJbmRleCh0ID0+IHQuaW5kZXhPZih2KSA+IC0xKSA+IC0xKSkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9saXN0KGU6IEljb25JbmZvW10pIHtcclxuICAgIGUuZm9yRWFjaChpID0+IGkuY2F0ZWdvcmllcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jYXRlZ29yaWVzW2NdKVxyXG4gICAgICAgICh0aGlzLmNhdGVnb3JpZXNbY10gYXMgQ2F0ZWdvcnlJbmZvKS5pdGVtcy5wdXNoKGkpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2godGhpcy5jYXRlZ29yaWVzW2NdID0geyBpdGVtczogW2ldIH0gYXMgQ2F0ZWdvcnlJbmZvKTtcclxuICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBvcGVuKCkge1xyXG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudCkud2l0aFBvc2l0aW9ucyhbe1xyXG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICB9XSksXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICBkaXJlY3Rpb246IHRoaXMuX2Rpci52YWx1ZSxcclxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcclxuICAgICAgcGFuZWxDbGFzczogJ2hvbWUtcGFuZWwnXHJcbiAgICB9KVxyXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMucGFuZWwsIHRoaXMuX3ZjKTtcclxuICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgICBtZXJnZSh0aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSwgdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkucGlwZShmaWx0ZXIoayA9PiBrLmtleUNvZGUgPT09IEVTQ0FQRSkpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSk7XHJcbiAgfVxyXG4gIF90cmFja0J5KGluZGV4OiBudW1iZXIsIGVsOiBJY29uSW5mbyB8IENhdGVnb3J5SW5mbykge1xyXG4gICAgcmV0dXJuIGVsLm5hbWU7XHJcbiAgfVxyXG4gIF9jbGVhcigpIHsgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKTtcclxuICB9XHJcbiAgX3BpY2soaWNvbjogSWNvbkluZm8pIHtcclxuICAgIHRoaXMudmFsdWUgPSBpY29uLm5hbWU7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG59XHJcbmludGVyZmFjZSBDYXRlZ29yeUluZm8ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBpdGVtczogSWNvbkluZm9bXTtcclxufVxyXG5pbnRlcmZhY2UgSWNvbkluZm8ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBjYXRlZ29yaWVzOiBzdHJpbmdbXTtcclxuICB0YWdzOiBzdHJpbmdbXTtcclxufVxyXG4iLCI8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9wZW4oKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gIDxtYXQtaWNvbj57e3ZhbHVlfX08L21hdC1pY29uPlxyXG4gIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuPG5nLXRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJpY29uLXBhbGV0dGVcIj5cclxuICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiZmlsdGVyXCIgKGtleWRvd24uZXNjYXBlKT1cIl9jbGVhcigpXCIgLz5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGMgb2YgY2F0ZWdvcmllczsgdHJhY2tCeTogX3RyYWNrQnlcIj5cclxuICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdGb3I9XCJsZXQgaSBvZiBjLml0ZW1zOyB0cmFja0J5OiBfdHJhY2tCeVwiIChjbGljayk9XCJfcGljayhpKVwiPnt7aS5uYW1lfX08L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -1,35 +1,50 @@
1
- import { Component, Input } from "@angular/core";
1
+ import { Component, EventEmitter, Inject, Input, Output } from "@angular/core";
2
+ import { DesignerRef } from "./designer.base";
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "@angular/forms";
4
- import * as i2 from "../form/form.service";
5
+ import * as i2 from "../system.service";
5
6
  import * as i3 from "@angular/common";
6
- import * as i4 from "@angular/material/core";
7
+ import * as i4 from "@angular/material/list";
7
8
  import * as i5 from "@angular/material/form-field";
8
- import * as i6 from "@angular/material/select";
9
- import * as i7 from "../core/ace.input";
10
- import * as i8 from "../../core/pipes/translate.pipe";
11
- let roles;
9
+ import * as i6 from "../core/ace.input";
10
+ import * as i7 from "../../core/pipes/translate.pipe";
11
+ import * as i8 from "./designer.base";
12
12
  export class PrivilegesDesignComponent {
13
- constructor(_fb, _service) {
13
+ constructor(_fb, _service, _ref) {
14
14
  this._fb = _fb;
15
15
  this._service = _service;
16
+ this._ref = _ref;
17
+ this.change = new EventEmitter();
16
18
  this.form = this._fb.group({
17
19
  rule: null,
18
- roles: [],
20
+ roles: this._fb.control([]),
19
21
  });
20
22
  }
21
23
  ngOnInit() {
22
- this._service.roles().subscribe(r => this.roles = r);
23
- this.form.setValue(this.model);
24
+ this._service.roles().subscribe(r => this.roles = r.
25
+ concat(this._ref.model.roles.map(r => ({
26
+ name: r.name,
27
+ title: r.title,
28
+ dataType: r.dataType
29
+ }))));
30
+ this.form.patchValue(this.model);
24
31
  this.form.valueChanges.subscribe(v => Object.assign(this.model, v));
25
32
  }
33
+ rolesChange(evt) {
34
+ this.form.get('roles').setValue(evt.options.map(o => o.value));
35
+ }
26
36
  }
27
- PrivilegesDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PrivilegesDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FormService }], target: i0.ɵɵFactoryTarget.Component });
28
- PrivilegesDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: PrivilegesDesignComponent, selector: "bizdoc-privileges", inputs: { model: "model" }, ngImport: i0, template: "<h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Roles'|translate}}</mat-label>\r\n <mat-select formControlName=\"roles\" multiple>\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n</form>\r\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
37
+ PrivilegesDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PrivilegesDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SystemService }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component });
38
+ PrivilegesDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: PrivilegesDesignComponent, selector: "bizdoc-privileges", inputs: { model: "model" }, outputs: { change: "change" }, ngImport: i0, template: "<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list (selectionChange)=\"rolesChange($event)\" multiple *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [selected]=\"model?.roles?.indexOf(r.name) > -1\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n <!--[disabled]=\"false\"-->\r\n </mat-selection-list>\r\n <!--<mat-form-field>\r\n <mat-label>{{'Roles'|translate}}</mat-label>\r\n <mat-select formControlName=\"roles\" multiple>\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>-->\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n</form>\r\n", dependencies: [{ 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: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i4.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i6.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
29
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PrivilegesDesignComponent, decorators: [{
30
40
  type: Component,
31
- args: [{ selector: 'bizdoc-privileges', template: "<h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Roles'|translate}}</mat-label>\r\n <mat-select formControlName=\"roles\" multiple>\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n</form>\r\n" }]
32
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.FormService }]; }, propDecorators: { model: [{
41
+ args: [{ selector: 'bizdoc-privileges', template: "<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list (selectionChange)=\"rolesChange($event)\" multiple *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [selected]=\"model?.roles?.indexOf(r.name) > -1\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n <!--[disabled]=\"false\"-->\r\n </mat-selection-list>\r\n <!--<mat-form-field>\r\n <mat-label>{{'Roles'|translate}}</mat-label>\r\n <mat-select formControlName=\"roles\" multiple>\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>-->\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n</form>\r\n" }]
42
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SystemService }, { type: i8.DesignerRef, decorators: [{
43
+ type: Inject,
44
+ args: [DesignerRef]
45
+ }] }]; }, propDecorators: { model: [{
33
46
  type: Input
47
+ }], change: [{
48
+ type: Output
34
49
  }] } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmlsZWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvcHJpdmlsZWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvcHJpdmlsZWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQU96RCxJQUFJLEtBQXlCLENBQUM7QUFLOUIsTUFBTSxPQUFPLHlCQUF5QjtJQU9wQyxZQUFvQixHQUFnQixFQUMxQixRQUFxQjtRQURYLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQU50QixTQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQWtCO1lBQzlDLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7SUFJSCxDQUFDO0lBQ0QsUUFBUTtRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUNmLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBWSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQzs7c0hBaEJVLHlCQUF5QjswR0FBekIseUJBQXlCLHFGQ2J0QyxzbkJBYUE7MkZEQWEseUJBQXlCO2tCQUpyQyxTQUFTOytCQUNFLG1CQUFtQjs0SEFJcEIsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi4vLi4vY29yZS9tb2RlbHNcIjtcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tIFwiLi4vZm9ybS9mb3JtLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJpdmlsZWdlc01vZGVsIH0gZnJvbSBcIi4vZGVzaWduZXIuYmFzZVwiO1xyXG5cclxubGV0IHJvbGVzOiBPYnNlcnZhYmxlPFJvbGVbXT47XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLXByaXZpbGVnZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAncHJpdmlsZWdlcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFByaXZpbGVnZXNEZXNpZ25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIG1vZGVsITogUHJpdmlsZWdlc01vZGVsO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cDxQcml2aWxlZ2VzTW9kZWw+KHtcclxuICAgIHJ1bGU6IG51bGwsXHJcbiAgICByb2xlczogW10sXHJcbiAgfSk7XHJcbiAgcm9sZXM6IFJvbGVbXTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBGb3JtU2VydmljZSkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuIHRoaXMuX3NlcnZpY2Uucm9sZXMoKS5zdWJzY3JpYmUociA9PlxyXG4gICAgICB0aGlzLnJvbGVzID0gclxyXG4gICAgKTtcclxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh0aGlzLm1vZGVsIGFzIGFueSk7XHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdikpO1xyXG4gIH1cclxufVxyXG4iLCI8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eydQcml2aWxlZ2VzJ3x0cmFuc2xhdGV9fTwvaDI+XHJcbjxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1sYWJlbD57eydSb2xlcyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInJvbGVzXCIgbXVsdGlwbGU+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCByIG9mIHJvbGVzXCIgW3ZhbHVlXT1cInIubmFtZVwiPnt7ci50aXRsZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgPGJpemRvYy1hY2UtaW5wdXQgW3BsYWNlaG9sZGVyXT1cIidDb25kaXRpb24nfHRyYW5zbGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cInJ1bGVcIj48L2JpemRvYy1hY2UtaW5wdXQ+XHJcbiAgICA8bWF0LWhpbnQ+IHt7ICdQcm9ncmFtbWFibGVFeHByZXNzaW9uJ3x0cmFuc2xhdGUgfX08L21hdC1oaW50PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZm9ybT5cclxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmlsZWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvcHJpdmlsZWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvcHJpdmlsZWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt2RixPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7O0FBTS9ELE1BQU0sT0FBTyx5QkFBeUI7SUFRcEMsWUFBb0IsR0FBZ0IsRUFDMUIsUUFBdUIsRUFDRixJQUFpQjtRQUY1QixRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWU7UUFDRixTQUFJLEdBQUosSUFBSSxDQUFhO1FBUjdCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLFNBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM3QixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBVyxFQUFFLENBQUM7U0FDdEMsQ0FBQyxDQUFDO0lBS0gsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1lBQ2QsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1NBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQ1AsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsV0FBVyxDQUFDLEdBQTJCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7O3NIQTFCVSx5QkFBeUIsMEVBVTFCLFdBQVc7MEdBVlYseUJBQXlCLG9IQ1h0QywrNkJBaUJBOzJGRE5hLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSxtQkFBbUI7OzBCQWExQixNQUFNOzJCQUFDLFdBQVc7NENBVFosS0FBSztzQkFBYixLQUFLO2dCQUNhLE1BQU07c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3Rpb25MaXN0Q2hhbmdlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2xpc3RcIjtcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uL3N5c3RlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyUmVmLCBQcml2aWxlZ2VzTW9kZWwgfSBmcm9tIFwiLi9kZXNpZ25lci5iYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1wcml2aWxlZ2VzJyxcclxuICB0ZW1wbGF0ZVVybDogJ3ByaXZpbGVnZXMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcml2aWxlZ2VzRGVzaWduQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBtb2RlbCE6IFByaXZpbGVnZXNNb2RlbDtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBydWxlOiBudWxsLFxyXG4gICAgcm9sZXM6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nW10+KFtdKSxcclxuICB9KTtcclxuICByb2xlczogUm9sZVtdO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSBwcml2YXRlIF9yZWY6IERlc2lnbmVyUmVmKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5fc2VydmljZS5yb2xlcygpLnN1YnNjcmliZShyID0+XHJcbiAgICAgIHRoaXMucm9sZXMgPSByLlxyXG4gICAgICAgIGNvbmNhdCh0aGlzLl9yZWYubW9kZWwucm9sZXMubWFwKHIgPT4gKHtcclxuICAgICAgICAgIG5hbWU6IHIubmFtZSxcclxuICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IHIuZGF0YVR5cGVcclxuICAgICAgICB9KSkpXHJcbiAgICApO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdikpO1xyXG4gIH1cclxuICByb2xlc0NoYW5nZShldnQ6IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UpIHtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3JvbGVzJykuc2V0VmFsdWUoZXZ0Lm9wdGlvbnMubWFwKG8gPT4gby52YWx1ZSkpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J1ByaXZpbGVnZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICA8bWF0LXNlbGVjdGlvbi1saXN0IChzZWxlY3Rpb25DaGFuZ2UpPVwicm9sZXNDaGFuZ2UoJGV2ZW50KVwiIG11bHRpcGxlICpuZ0lmPVwicm9sZXNcIj5cclxuICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbc2VsZWN0ZWRdPVwibW9kZWw/LnJvbGVzPy5pbmRleE9mKHIubmFtZSkgPiAtMVwiIFt2YWx1ZV09XCJyLm5hbWVcIj57e3IudGl0bGV9fTwvbWF0LWxpc3Qtb3B0aW9uPlxyXG4gICAgPCEtLVtkaXNhYmxlZF09XCJmYWxzZVwiLS0+XHJcbiAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XHJcbiAgPCEtLTxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtbGFiZWw+e3snUm9sZXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJyb2xlc1wiIG11bHRpcGxlPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgciBvZiByb2xlc1wiIFt2YWx1ZV09XCJyLm5hbWVcIj57e3IudGl0bGV9fTwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPi0tPlxyXG4gIDxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxiaXpkb2MtYWNlLWlucHV0IFtwbGFjZWhvbGRlcl09XCInQ29uZGl0aW9uJ3x0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJydWxlXCI+PC9iaXpkb2MtYWNlLWlucHV0PlxyXG4gICAgPG1hdC1oaW50PiB7eyAnUHJvZ3JhbW1hYmxlRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Zvcm0+XHJcbiJdfQ==
@@ -4,7 +4,6 @@ import { merge, Subject } from "rxjs";
4
4
  import { filter } from "rxjs/operators";
5
5
  import { ESCAPE } from "@angular/cdk/keycodes";
6
6
  import { TemplatePortal } from "@angular/cdk/portal";
7
- import { MatButton } from "@angular/material/button";
8
7
  import { MATERIAL_PALETTES } from "../../core/colors";
9
8
  import * as i0 from "@angular/core";
10
9
  import * as i1 from "@angular/forms";
@@ -53,7 +52,6 @@ export class ColorPicker {
53
52
  this.Object = Object;
54
53
  this._required = false;
55
54
  this._disabled = false;
56
- this._opened = false;
57
55
  this.stateChanges = new Subject();
58
56
  this.valueChanges = new Subject();
59
57
  this.id = `color-picker-${ColorPicker.nextId++}`;
@@ -99,7 +97,7 @@ export class ColorPicker {
99
97
  }
100
98
  get disabled() { return this._disabled; }
101
99
  set disabled(value) {
102
- this._trigger.disabled = this._disabled = value;
100
+ this._disabled = value;
103
101
  this.stateChanges.next();
104
102
  }
105
103
  setDescribedByIds(ids) {
@@ -107,21 +105,20 @@ export class ColorPicker {
107
105
  }
108
106
  onContainerClick(_event) {
109
107
  this._onTouched && this._onTouched();
110
- !this._opened && this.open();
108
+ this.open();
111
109
  }
112
110
  ngOnDestroy() {
113
111
  this._destroy.next();
112
+ this._destroy.complete();
114
113
  }
115
114
  open() {
116
115
  if (!this._overlayRef)
117
116
  this._overlayRef = this._createOverlay();
118
117
  const portal = new TemplatePortal(this._colorPalette, this._vc);
119
118
  this._overlayRef.attach(portal);
120
- this._opened = true;
121
119
  }
122
120
  close() {
123
121
  this._overlayRef.detach();
124
- this._opened = false;
125
122
  }
126
123
  _pick(color) {
127
124
  this.value = color;
@@ -150,40 +147,22 @@ export class ColorPicker {
150
147
  }
151
148
  ColorPicker.nextId = 0;
152
149
  ColorPicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: ColorPicker, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i3.Directionality }], target: i0.ɵɵFactoryTarget.Component });
153
- ColorPicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: ColorPicker, selector: "bizdoc-color-picker", inputs: { label: "label", required: "required", disabled: "disabled" }, outputs: { valueChanges: "valueChanges" }, host: { properties: { "class.floating": "this.shouldLabelFloat", "id": "this.id", "attr.aria-describedby": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], viewQueries: [{ propertyName: "_trigger", first: true, predicate: MatButton, descendants: true, static: true }, { propertyName: "_colorPalette", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: `<button mat-button (click)='open()'>
154
- <span>{{label}}</span>
155
- <mat-icon>arrow_drop_down</mat-icon>
156
- </button>
157
- <ng-template>
158
- <div class="color-palette">
159
- <div *ngFor='let p of Object.keys(_palettes)' class="color-container">
160
- <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class="color-item"></span>
161
- </div>
162
- </div>
163
- </ng-template>`, isInline: true, styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
150
+ ColorPicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: ColorPicker, selector: "bizdoc-color-picker", inputs: { label: "label", value: "value", required: "required", disabled: "disabled" }, outputs: { valueChanges: "valueChanges" }, host: { properties: { "class.floating": "this.shouldLabelFloat", "id": "this.id", "attr.aria-describedby": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], viewQueries: [{ propertyName: "_colorPalette", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: "<button mat-button (click)='open()' [disabled]=\"disabled\">\r\n <span>{{label}}</span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n</button>\r\n<ng-template>\r\n <div class=\"color-palette\">\r\n <div *ngFor='let p of Object.keys(_palettes)' class=\"color-container\">\r\n <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class=\"color-item\"></span>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
164
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: ColorPicker, decorators: [{
165
152
  type: Component,
166
- args: [{ selector: 'bizdoc-color-picker', providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], template: `<button mat-button (click)='open()'>
167
- <span>{{label}}</span>
168
- <mat-icon>arrow_drop_down</mat-icon>
169
- </button>
170
- <ng-template>
171
- <div class="color-palette">
172
- <div *ngFor='let p of Object.keys(_palettes)' class="color-container">
173
- <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class="color-item"></span>
174
- </div>
175
- </div>
176
- </ng-template>`, host: {
153
+ args: [{ selector: 'bizdoc-color-picker', providers: [{ provide: MatFormFieldControl, useExisting: ColorPicker }], host: {
177
154
  '[class.floating]': 'shouldLabelFloat',
178
155
  '[id]': 'id',
179
156
  '[attr.aria-describedby]': 'describedBy'
180
- }, styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"] }]
157
+ }, template: "<button mat-button (click)='open()' [disabled]=\"disabled\">\r\n <span>{{label}}</span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n</button>\r\n<ng-template>\r\n <div class=\"color-palette\">\r\n <div *ngFor='let p of Object.keys(_palettes)' class=\"color-container\">\r\n <span *ngFor='let c of Object.keys(_palettes[p])' (click)='_pick(_palettes[p][c])' [style.background-color]='_palettes[p][c]' class=\"color-item\"></span>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".color-palette{display:flex;flex-direction:column}.color-palette .color-container{display:flex}button{width:100%}.color-item{width:20px;height:20px}\n"] }]
181
158
  }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
182
159
  type: Optional
183
160
  }, {
184
161
  type: Self
185
162
  }] }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i3.Directionality }]; }, propDecorators: { label: [{
186
163
  type: Input
164
+ }], value: [{
165
+ type: Input
187
166
  }], valueChanges: [{
188
167
  type: Output
189
168
  }], id: [{
@@ -198,11 +177,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
198
177
  }], describedBy: [{
199
178
  type: HostBinding,
200
179
  args: ['attr.aria-describedby']
201
- }], _trigger: [{
202
- type: ViewChild,
203
- args: [MatButton, { static: true }]
204
180
  }], _colorPalette: [{
205
181
  type: ViewChild,
206
182
  args: [TemplateRef, { static: true }]
207
183
  }] } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb3JlL2NvbG9yLXBpY2tlci5pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUErQixXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7OztBQUV0RCxrQ0FBa0M7QUFzQmxDLE1BQU0sT0FBTyxXQUFXO0lBc0d0QixZQUF1QyxTQUFvQixFQUFVLFFBQWlCLEVBQVUsR0FBcUIsRUFBVSxRQUFvQixFQUFVLElBQW9CO1FBQTFJLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFwR3hLLGNBQVMsR0FBRyxpQkFBaUIsQ0FBQztRQUV2QyxXQUFNLEdBQUcsQ0FBQyxJQUFJO1lBQ1osS0FBSztZQUNMLEtB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O3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDOzswQkF3R1ksUUFBUTs7MEJBQUksSUFBSTt1SkFuR3BCLEtBQUs7c0JBQWIsS0FBSztnQkEwREcsWUFBWTtzQkFEcEIsTUFBTTtnQkFFUSxFQUFFO3NCQUFoQixXQUFXO2dCQU9SLGdCQUFnQjtzQkFEbkIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3pCLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBT2dDLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQVFJLFFBQVE7c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSxhQUFhO3NCQUF0RCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgU2VsZiwgT3B0aW9uYWwsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgT3ZlcmxheVJlZiwgT3ZlcmxheSB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xyXG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBFU0NBUEUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2tleWNvZGVzXCI7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcclxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBNQVRFUklBTF9QQUxFVFRFUyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbG9yc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xyXG4vL1tzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ndmFsdWUnXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWNvbG9yLXBpY2tlcicsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogQ29sb3JQaWNrZXIgfV0sXHJcbiAgdGVtcGxhdGU6IGA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT0nb3BlbigpJz5cclxuPHNwYW4+e3tsYWJlbH19PC9zcGFuPlxyXG4gICAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG48bmctdGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImNvbG9yLXBhbGV0dGVcIj5cclxuICAgIDxkaXYgKm5nRm9yPSdsZXQgcCBvZiBPYmplY3Qua2V5cyhfcGFsZXR0ZXMpJyBjbGFzcz1cImNvbG9yLWNvbnRhaW5lclwiPlxyXG4gICAgICA8c3BhbiAqbmdGb3I9J2xldCBjIG9mIE9iamVjdC5rZXlzKF9wYWxldHRlc1twXSknIChjbGljayk9J19waWNrKF9wYWxldHRlc1twXVtjXSknIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0nX3BhbGV0dGVzW3BdW2NdJyBjbGFzcz1cImNvbG9yLWl0ZW1cIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5gLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5pbnB1dC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5mbG9hdGluZ10nOiAnc2hvdWxkTGFiZWxGbG9hdCcsXHJcbiAgICAnW2lkXSc6ICdpZCcsXHJcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnZGVzY3JpYmVkQnknXHJcbiAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sb3JQaWNrZXIgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPHN0cmluZz4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgcmVhZG9ubHkgX3BhbGV0dGVzID0gTUFURVJJQUxfUEFMRVRURVM7XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICBzY2FsZXMgPSBbXCI1MFwiLFxyXG4gICAgXCIxMDBcIixcclxuICAgIFwiMjAwXCIsXHJcbiAgICBcIjMwMFwiLFxyXG4gICAgXCI0MDBcIixcclxuICAgIFwiNTAwXCIsXHJcbiAgICBcIjYwMFwiLFxyXG4gICAgXCI3MDBcIixcclxuICAgIFwiODAwXCIsXHJcbiAgICBcIjkwMFwiXTtcclxuICBjb2xvcnMgPSBbXCJyZWRcIixcclxuICAgIFwicGlua1wiLFxyXG4gICAgXCJwdXJwbGVcIixcclxuICAgIFwiZGVlcFB1cnBsZVwiLFxyXG4gICAgXCJpbmRpZ29cIixcclxuICAgIFwiYmx1ZVwiLFxyXG4gICAgXCJsaWdodEJsdWVcIixcclxuICAgIFwiY3lhblwiLFxyXG4gICAgXCJ0ZWFsXCIsXHJcbiAgICBcImdyZWVuXCIsXHJcbiAgICBcImxpZ2h0R3JlZW5cIixcclxuICAgIFwibGltZVwiLFxyXG4gICAgXCJ5ZWxsb3dcIixcclxuICAgIFwiYW1iZXJcIixcclxuICAgIFwib3JhbmdlXCIsXHJcbiAgICBcImJyb3duXCIsXHJcbiAgICBcImdyZXlcIixcclxuICAgIFwiYmx1ZUdyZXlcIl07XHJcblxyXG4gIHJlYWRvbmx5IE9iamVjdCA9IE9iamVjdDtcclxuICBwcml2YXRlIF9vbkNoYW5nZTogYW55O1xyXG4gIHByaXZhdGUgX29uVG91Y2hlZDogYW55O1xyXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gb2JqO1xyXG4gIH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl92YWx1ZTsgfVxyXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh2YWwpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMubmV4dCh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBjb2xvci1waWNrZXItJHtDb2xvclBpY2tlci5uZXh0SWQrK31gO1xyXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgZm9jdXNlZCA9IGZhbHNlO1xyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZSA9PT0gbnVsbDtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXHJcbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSByZXE7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3RyaWdnZXIuZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBlcnJvclN0YXRlID0gZmFsc2U7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBkZXNjcmliZWRCeSA9ICcnO1xyXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xyXG4gIH1cclxuICBvbkNvbnRhaW5lckNsaWNrKF9ldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkICYmIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgIXRoaXMuX29wZW5lZCAmJiB0aGlzLm9wZW4oKTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZChNYXRCdXR0b24sIHsgc3RhdGljOiB0cnVlIH0pIF90cmlnZ2VyOiBNYXRCdXR0b247XHJcbiAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSkgX2NvbG9yUGFsZXR0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLCBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LCBwcml2YXRlIF92YzogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYpIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5fY29sb3JQYWxldHRlLCB0aGlzLl92Yyk7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcclxuICB9XHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XHJcbiAgfVxyXG4gIF9waWNrKGNvbG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudmFsdWUgPSBjb2xvcjtcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheSgpOiBPdmVybGF5UmVmIHtcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudCkud2l0aFBvc2l0aW9ucyhbe1xyXG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICB9XSksXHJcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLnZhbHVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJ1xyXG4gICAgfSk7XHJcbiAgICBtZXJnZShyZWYuYmFja2Ryb3BDbGljaygpLCByZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoZmlsdGVyKGsgPT4gay5rZXlDb2RlID09PSBFU0NBUEUpKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XHJcbiAgICByZXR1cm4gcmVmO1xyXG4gIH1cclxufVxyXG4iXX0=
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb3JlL2NvbG9yLXBpY2tlci5pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29yZS9jb2xvci1waWNrZXIuaW5wdXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUErQixXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7O0FBRXRELGtDQUFrQztBQVlsQyxNQUFNLE9BQU8sV0FBVztJQXNHdEIsWUFDNkIsU0FBb0IsRUFDdkMsUUFBaUIsRUFDakIsR0FBcUIsRUFDckIsUUFBb0IsRUFDcEIsSUFBb0I7UUFKRCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3ZDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQXpHckIsY0FBUyxHQUFHLGlCQUFpQixDQUFDO1FBRTlCLFdBQU0sR0FBRyxDQUFDLElBQUk7WUFDckIsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLLENBQUMsQ0FBQztRQUNBLFdBQU0sR0FBRyxDQUFDLEtBQUs7WUFDdEIsTUFBTTtZQUNOLFFBQVE7WUFDUixZQUFZO1lBQ1osUUFBUTtZQUNSLE1BQU07WUFDTixXQUFXO1lBQ1gsTUFBTTtZQUNOLE1BQU07WUFDTixPQUFPO1lBQ1AsWUFBWTtZQUNaLE1BQU07WUFDTixRQUFRO1lBQ1IsT0FBTztZQUNQLFFBQVE7WUFDUixPQUFPO1lBQ1AsTUFBTTtZQUNOLFVBQVUsQ0FBQyxDQUFDO1FBRUwsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUdqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFzQmpCLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVuQyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDL0IsT0FBRSxHQUFHLGdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUUzRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBc0JoQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ21CLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBY3RDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBTzlDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQXhFRCxVQUFVLENBQUMsR0FBUTtRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUUsVUFBbUI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksS0FBSyxLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0MsSUFDSSxLQUFLLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBT0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBQ0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxHQUFHO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFDSSxRQUFRLEtBQWMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELGlCQUFpQixDQUFDLEdBQWE7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxNQUFrQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBYUQsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsS0FBSyxDQUFDLEtBQWE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUNPLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzNGLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2lCQUNoQixFQUFFO29CQUNELE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7aUJBQ25CLENBQUMsQ0FBQztZQUNILFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDMUIsV0FBVyxFQUFFLElBQUk7WUFDakIsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7QUE5SWMsa0JBQU0sR0FBRyxDQUFFLENBQUE7d0dBRGYsV0FBVzs0RkFBWCxXQUFXLG9UQVRYLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLHlFQXdHNUQsV0FBVyw4RENySHhCLHllQVdBOzJGRFdhLFdBQVc7a0JBWHZCLFNBQVM7K0JBQ0UscUJBQXFCLGFBQ3BCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxhQUFhLEVBQUUsQ0FBQyxRQUdqRTt3QkFDSixrQkFBa0IsRUFBRSxrQkFBa0I7d0JBQ3RDLE1BQU0sRUFBRSxJQUFJO3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDOzswQkF5R0UsUUFBUTs7MEJBQUksSUFBSTt1SkFwR1YsS0FBSztzQkFBYixLQUFLO2dCQWtERixLQUFLO3NCQURSLEtBQUs7Z0JBU0csWUFBWTtzQkFEcEIsTUFBTTtnQkFFUSxFQUFFO3NCQUFoQixXQUFXO2dCQU9SLGdCQUFnQjtzQkFEbkIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3pCLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBT2dDLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQVFNLGFBQWE7c0JBQXRELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBTZWxmLCBPcHRpb25hbCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBPdmVybGF5UmVmLCBPdmVybGF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEVTQ0FQRSB9IGZyb20gXCJAYW5ndWxhci9jZGsva2V5Y29kZXNcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xyXG5pbXBvcnQgeyBNQVRFUklBTF9QQUxFVFRFUyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbG9yc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xyXG4vL1tzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ndmFsdWUnXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWNvbG9yLXBpY2tlcicsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogQ29sb3JQaWNrZXIgfV0sXHJcbiAgdGVtcGxhdGVVcmw6IGAuL2NvbG9yLXBpY2tlci5pbnB1dC5odG1sYCxcclxuICBzdHlsZVVybHM6IFsnLi9jb2xvci1waWNrZXIuaW5wdXQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdbY2xhc3MuZmxvYXRpbmddJzogJ3Nob3VsZExhYmVsRmxvYXQnLFxyXG4gICAgJ1tpZF0nOiAnaWQnLFxyXG4gICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ2Rlc2NyaWJlZEJ5J1xyXG4gIH1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbG9yUGlja2VyIGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxzdHJpbmc+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIHJlYWRvbmx5IF9wYWxldHRlcyA9IE1BVEVSSUFMX1BBTEVUVEVTO1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgc2NhbGVzID0gW1wiNTBcIixcclxuICAgIFwiMTAwXCIsXHJcbiAgICBcIjIwMFwiLFxyXG4gICAgXCIzMDBcIixcclxuICAgIFwiNDAwXCIsXHJcbiAgICBcIjUwMFwiLFxyXG4gICAgXCI2MDBcIixcclxuICAgIFwiNzAwXCIsXHJcbiAgICBcIjgwMFwiLFxyXG4gICAgXCI5MDBcIl07XHJcbiAgcmVhZG9ubHkgY29sb3JzID0gW1wicmVkXCIsXHJcbiAgICBcInBpbmtcIixcclxuICAgIFwicHVycGxlXCIsXHJcbiAgICBcImRlZXBQdXJwbGVcIixcclxuICAgIFwiaW5kaWdvXCIsXHJcbiAgICBcImJsdWVcIixcclxuICAgIFwibGlnaHRCbHVlXCIsXHJcbiAgICBcImN5YW5cIixcclxuICAgIFwidGVhbFwiLFxyXG4gICAgXCJncmVlblwiLFxyXG4gICAgXCJsaWdodEdyZWVuXCIsXHJcbiAgICBcImxpbWVcIixcclxuICAgIFwieWVsbG93XCIsXHJcbiAgICBcImFtYmVyXCIsXHJcbiAgICBcIm9yYW5nZVwiLFxyXG4gICAgXCJicm93blwiLFxyXG4gICAgXCJncmV5XCIsXHJcbiAgICBcImJsdWVHcmV5XCJdO1xyXG5cclxuICByZWFkb25seSBPYmplY3QgPSBPYmplY3Q7XHJcbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IGFueTtcclxuICBwcml2YXRlIF9vblRvdWNoZWQ6IGFueTtcclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IG9iajtcclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh2YWwpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMubmV4dCh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBjb2xvci1waWNrZXItJHtDb2xvclBpY2tlci5uZXh0SWQrK31gO1xyXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgZm9jdXNlZCA9IGZhbHNlO1xyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZSA9PT0gbnVsbDtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXHJcbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSByZXE7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIGVycm9yU3RhdGUgPSBmYWxzZTtcclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpIGRlc2NyaWJlZEJ5ID0gJyc7XHJcbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XHJcbiAgfVxyXG4gIG9uQ29udGFpbmVyQ2xpY2soX2V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICB0aGlzLm9wZW4oKTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSkgX2NvbG9yUGFsZXR0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LFxyXG4gICAgcHJpdmF0ZSBfdmM6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9wZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYpIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5fY29sb3JQYWxldHRlLCB0aGlzLl92Yyk7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gIH1cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgfVxyXG4gIF9waWNrKGNvbG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudmFsdWUgPSBjb2xvcjtcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheSgpOiBPdmVybGF5UmVmIHtcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudCkud2l0aFBvc2l0aW9ucyhbe1xyXG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICB9XSksXHJcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLnZhbHVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJ1xyXG4gICAgfSk7XHJcbiAgICBtZXJnZShyZWYuYmFja2Ryb3BDbGljaygpLCByZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoZmlsdGVyKGsgPT4gay5rZXlDb2RlID09PSBFU0NBUEUpKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XHJcbiAgICByZXR1cm4gcmVmO1xyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT0nb3BlbigpJyBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICA8c3Bhbj57e2xhYmVsfX08L3NwYW4+XHJcbiAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XHJcbjwvYnV0dG9uPlxyXG48bmctdGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImNvbG9yLXBhbGV0dGVcIj5cclxuICAgIDxkaXYgKm5nRm9yPSdsZXQgcCBvZiBPYmplY3Qua2V5cyhfcGFsZXR0ZXMpJyBjbGFzcz1cImNvbG9yLWNvbnRhaW5lclwiPlxyXG4gICAgICA8c3BhbiAqbmdGb3I9J2xldCBjIG9mIE9iamVjdC5rZXlzKF9wYWxldHRlc1twXSknIChjbGljayk9J19waWNrKF9wYWxldHRlc1twXVtjXSknIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0nX3BhbGV0dGVzW3BdW2NdJyBjbGFzcz1cImNvbG9yLWl0ZW1cIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19