@provoly/dashboard 0.20.3 → 0.20.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/components/metadata-editor/style/_o-metadata-editor.scss +0 -5
  2. package/dataset/style/_o-pry-dataset-card.scss +5 -37
  3. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-form/admin-abac-rules-form.component.mjs +3 -3
  4. package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +3 -3
  5. package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +3 -3
  6. package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +3 -3
  7. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +3 -3
  8. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +3 -3
  9. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +15 -10
  10. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +3 -3
  11. package/esm2022/admin/components/admin-environment/admin-environment-form/admin-environment-form.component.mjs +3 -3
  12. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +3 -3
  13. package/esm2022/admin/components/admin-links/admin-links-new/admin-links-new.component.mjs +3 -3
  14. package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +3 -3
  15. package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +3 -3
  16. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +3 -3
  17. package/esm2022/components/metadata-editor/style/css.component.mjs +2 -2
  18. package/esm2022/components/scheme-picker/scheme-picker.component.mjs +3 -3
  19. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +5 -5
  20. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +1 -2
  21. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  22. package/esm2022/dataset/style/css.component.mjs +2 -2
  23. package/esm2022/filters/autocomplete/autocomplete.component.mjs +13 -6
  24. package/esm2022/filters/autocomplete/autocomplete.module.mjs +5 -5
  25. package/esm2022/filters/autocomplete/style/css.component.mjs +2 -2
  26. package/esm2022/filters/list/list-filter.component.mjs +1 -1
  27. package/esm2022/import/components/import.component.mjs +3 -3
  28. package/esm2022/lib/core/components/ellipsis.directive.mjs +31 -0
  29. package/esm2022/lib/core/components/select/select.component.mjs +163 -38
  30. package/esm2022/lib/core/components/select/select.module.mjs +4 -5
  31. package/esm2022/lib/core/components/share/share.component.mjs +3 -3
  32. package/esm2022/lib/core/components/translate-id/translate-id.pipe.mjs +7 -8
  33. package/esm2022/lib/core/core.module.mjs +8 -4
  34. package/esm2022/lib/core/i18n/en.translations.mjs +7 -5
  35. package/esm2022/lib/core/i18n/fr.translations.mjs +8 -5
  36. package/esm2022/lib/core/model/display-options.interface.mjs +18 -4
  37. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  38. package/esm2022/lib/core/public-api.mjs +2 -1
  39. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +1 -4
  40. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +3 -3
  41. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +6 -15
  42. package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +3 -3
  43. package/esm2022/lib/dashboard/filter/components/filter-group/filter-group.component.mjs +3 -3
  44. package/esm2022/lib/dashboard/filter/style/css.component.mjs +2 -2
  45. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +1 -4
  46. package/esm2022/pipeline-components/filter/component/filter.component.mjs +3 -3
  47. package/esm2022/pipeline-components/input-datasource/component/input-datasource.component.mjs +3 -3
  48. package/esm2022/pipeline-components/output-dataset/component/output-dataset.component.mjs +3 -3
  49. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
  50. package/esm2022/presentation/components/presentation.component.mjs +3 -3
  51. package/esm2022/presentation/i18n/fr.translations.mjs +9 -9
  52. package/esm2022/presentation/style/css.component.mjs +2 -2
  53. package/esm2022/restitution/components/restitution/restitution.component.mjs +23 -22
  54. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +13 -6
  55. package/esm2022/restitution/i18n/en.translations.mjs +2 -2
  56. package/esm2022/restitution/i18n/fr.translations.mjs +4 -4
  57. package/esm2022/restitution/style/css.component.mjs +2 -2
  58. package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +3 -3
  59. package/esm2022/search/search-mono-class/components/search-mono-class/search-mono-class.component.mjs +3 -3
  60. package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +3 -3
  61. package/esm2022/search/search-multi-class/components/multi-class-condition/multi-class-condition.component.mjs +3 -3
  62. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +3 -3
  63. package/esm2022/toolbox/components/automate-refresh/automate-refresh.component.mjs +3 -3
  64. package/esm2022/toolbox/components/clear-view/clear-view.component.mjs +3 -3
  65. package/esm2022/toolbox/components/drag-widgets/drag-widgets.component.mjs +3 -3
  66. package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +4 -4
  67. package/esm2022/toolbox/components/launch-tab/launch-tab.component.mjs +3 -3
  68. package/esm2022/toolbox/components/named-query/named-query.component.mjs +3 -3
  69. package/esm2022/toolbox/components/refresh-datasets/refresh-datasets.component.mjs +3 -3
  70. package/esm2022/toolbox/components/save-view/save-view.component.mjs +3 -3
  71. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +3 -3
  72. package/esm2022/toolbox/components/toolbox.component.mjs +4 -3
  73. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +8 -2
  74. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +8 -7
  75. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +3 -4
  76. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -3
  77. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +10 -4
  78. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +3 -2
  79. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +3 -2
  80. package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
  81. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +7 -7
  82. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -3
  83. package/fesm2022/provoly-dashboard-admin.mjs +38 -33
  84. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  85. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +4 -4
  86. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
  87. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs +2 -2
  88. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs.map +1 -1
  89. package/fesm2022/provoly-dashboard-dataset.mjs +5 -6
  90. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  91. package/fesm2022/provoly-dashboard-filters-autocomplete.mjs +18 -11
  92. package/fesm2022/provoly-dashboard-filters-autocomplete.mjs.map +1 -1
  93. package/fesm2022/provoly-dashboard-filters-list.mjs +1 -1
  94. package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -1
  95. package/fesm2022/provoly-dashboard-import.mjs +2 -2
  96. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  97. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs +2 -2
  98. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs.map +1 -1
  99. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs +2 -2
  100. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs.map +1 -1
  101. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs +2 -2
  102. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs.map +1 -1
  103. package/fesm2022/provoly-dashboard-presentation.mjs +14 -14
  104. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  105. package/fesm2022/provoly-dashboard-restitution.mjs +39 -31
  106. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  107. package/fesm2022/provoly-dashboard-search.mjs +8 -8
  108. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  109. package/fesm2022/provoly-dashboard-supervision.mjs +2 -2
  110. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  111. package/fesm2022/provoly-dashboard-toolbox.mjs +22 -21
  112. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  113. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +7 -1
  114. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  115. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +7 -6
  116. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  117. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +2 -3
  118. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  119. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -2
  120. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  121. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +15 -7
  122. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  123. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +6 -6
  124. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  125. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -2
  126. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  127. package/fesm2022/provoly-dashboard.mjs +245 -90
  128. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  129. package/filters/autocomplete/autocomplete.component.d.ts +1 -0
  130. package/filters/autocomplete/autocomplete.module.d.ts +1 -1
  131. package/filters/autocomplete/style/_m-autocomplete.scss +16 -3
  132. package/lib/core/components/ellipsis.directive.d.ts +11 -0
  133. package/lib/core/components/select/select.component.d.ts +39 -19
  134. package/lib/core/components/select/select.module.d.ts +4 -5
  135. package/lib/core/components/translate-id/translate-id.pipe.d.ts +1 -3
  136. package/lib/core/core.module.d.ts +15 -14
  137. package/lib/core/i18n/en.translations.d.ts +4 -2
  138. package/lib/core/i18n/fr.translations.d.ts +5 -2
  139. package/lib/core/model/display-options.interface.d.ts +11 -0
  140. package/lib/core/model/manifest.interface.d.ts +1 -5
  141. package/lib/core/public-api.d.ts +1 -0
  142. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +2 -5
  143. package/lib/dashboard/filter/style/_o-pry-filter-group.scss +0 -11
  144. package/lib/dashboard/store/dashboard.effects.d.ts +0 -1
  145. package/lib/dashboard/store/dashboard.selectors.d.ts +0 -9
  146. package/package.json +1 -2
  147. package/presentation/style/_o-pry-new-presentation.scss +0 -7
  148. package/presentation/style/_o-pry-presentation.scss +20 -55
  149. package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +1 -1
  150. package/restitution/i18n/en.translations.d.ts +1 -1
  151. package/restitution/i18n/fr.translations.d.ts +3 -3
  152. package/schematics/migration.json +6 -1
  153. package/schematics/ng-update/version-0-20/index.d.ts +2 -0
  154. package/schematics/ng-update/version-0-20/index.js +19 -0
  155. package/schematics/ng-update/version-0-20/index.js.map +1 -0
  156. package/styles/components/_a-pry-select.scss +34 -10
  157. package/styles/components/_a-tooltip.scss +2 -2
  158. package/styles/components/_m-filter.scss +11 -20
  159. package/styles/components/_o-dashboard.scss +4 -0
  160. package/styles/components/_o-draggable-menu.scss +1 -1
  161. package/styles/components/_o-widget.scss +2 -2
  162. package/styles/main.scss +0 -1
  163. package/styles-theme/abstracts-theme/variables/_variables-typo.scss +9 -0
  164. package/styles-theme/components-theme/_a-pry-select.theme.scss +23 -96
  165. package/styles-theme/components-theme/_a-tooltip.theme.scss +2 -2
  166. package/styles-theme/components-theme/_o-pry-composed-condition.theme.scss +0 -12
  167. package/toolbox/components/toolbox.component.d.ts +1 -0
  168. package/tooltips/attribute/attribute-tooltip.component.d.ts +1 -0
  169. package/widgets/widget-chart/component/widget-chart.component.d.ts +0 -1
  170. package/widgets/widget-map/component/widget-map.component.d.ts +2 -0
  171. package/widgets/widget-map/i18n/en.translations.d.ts +1 -0
  172. package/widgets/widget-map/i18n/fr.translations.d.ts +1 -0
  173. package/widgets/widget-map/style/_o-layer-legend.scss +21 -0
@@ -4,11 +4,6 @@
4
4
  /* Extends o-widget */
5
5
 
6
6
  .o-metadata-editor {
7
- ng-select {
8
- position: absolute;
9
- width: 80%;
10
- }
11
-
12
7
  &__container {
13
8
  min-height: toRem(55);
14
9
  }
@@ -11,6 +11,7 @@
11
11
  border-collapse: collapse;
12
12
  font-size: toRem(14);
13
13
  min-width: toRem(330);
14
+ height: toRem(150);
14
15
 
15
16
  &__header {
16
17
  display: flex;
@@ -22,44 +23,11 @@
22
23
  &__description-container {
23
24
  position: relative;
24
25
  width: 100%;
25
- }
26
- .description {
27
- white-space: nowrap;
28
- text-overflow: ellipsis;
29
- overflow: hidden;
30
- display: inherit;
31
- position: relative;
32
- line-height: 2rem;
33
- box-sizing: border-box;
34
- pointer-events:none;
35
- }
36
26
 
37
- .description:after {
38
- content:"";
39
- display: block;
40
- position: absolute;
41
- top: 0;
42
- right: 0;
43
- width: 40px;
44
- height: 48px;
45
- pointer-events:initial;
46
- }
47
- .description-tooltip {
48
- position: absolute;
49
- max-width: 50vw;
50
- visibility: hidden;
51
- background-color: #fff;
52
- padding: 20px;
53
- -webkit-box-shadow: 0 0 50px 0 rgba(0,0,0,0.3);
54
- opacity: 0;
55
- transition: opacity 0.5s ease;
56
- z-index: 2;
57
- }
58
-
59
- .description:hover + .description-tooltip {
60
- visibility: visible;
61
- transition: opacity 0.2s ease;
62
- opacity: 1;
27
+ &.a-tooltip[data-tooltip]:after {
28
+ width: 100%;
29
+ white-space: normal;
30
+ }
63
31
  }
64
32
 
65
33
  &__txt {
@@ -44,14 +44,14 @@ export class AdminAbacRulesFormComponent {
44
44
  this.store.dispatch(AbacRulesActions.cancelAbacRuleEdition({ redirect: backPath.toString() }));
45
45
  }
46
46
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdminAbacRulesFormComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
47
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdminAbacRulesFormComponent, selector: "pry-admin-abac-rules-form", inputs: { readonly: "readonly", edit: "edit" }, ngImport: i0, template: "<ng-container *ngIf=\"editAbacRule$ | async as rule\">\n <form class=\"o-form\" #abacRuleForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"name-label\" for=\"inputName\">\n {{ '@pry.admin.abac-rules.form.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"inputName\"\n type=\"text\"\n [ngModel]=\"rule.name\"\n (ngModelChange)=\"onChangeAbacRuleProperty('name', $event)\"\n class=\"a-form-field\"\n name=\"name\"\n #name=\"ngModel\"\n maxlength=\"50\"\n required\n [readonly]=\"readonly\"\n [attr.aria-labelledby]=\"isSubmitted && name?.invalid ? 'name-label name-error' : 'name-label'\"\n [attr.aria-invalid]=\"isSubmitted && name?.invalid\"\n />\n <label\n class=\"a-label a-label--help -error\"\n id=\"name-error\"\n for=\"inputName\"\n *ngIf=\"isSubmitted && name.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.status' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n <div class=\"m-form-radio-group\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleTrue\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"true\"\n />\n <label for=\"newRuleTrue\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusActive' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleFalse\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"false\"\n />\n <label for=\"newRuleFalse\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusInactive' | i18n }}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abac-rules-description\">{{\n '@pry.admin.abac-rules.form.description' | i18n\n }}</label>\n <textarea\n name=\"description\"\n id=\"abac-rules-description\"\n [ngModel]=\"rule.description\"\n (ngModelChange)=\"onChangeAbacRuleProperty('description', $event)\"\n class=\"a-form-field\"\n maxlength=\"90\"\n [readonly]=\"readonly\"\n ></textarea>\n </div>\n\n <div class=\"m-form-label-field\">\n <label id=\"predicate-label\" for=\"predicate\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.predicate' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n id=\"predicate\"\n class=\"a-pry-select\"\n [attr.aria-labelledby]=\"\n isSubmitted && abacRuleForm.form.get('predicate')?.invalid\n ? 'predicate-label predicate-error'\n : 'predicate-label'\n \"\n [readonly]=\"readonly\"\n [items]=\"predicates$ | async\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [itemsAsOption]=\"true\"\n [templateOption]=\"templateOption\"\n name=\"predicate\"\n [ngModel]=\"rule.predicate\"\n (ngModelChange)=\"onChangeAbacRuleProperty('predicate', $event)\"\n [isForm]=\"!readonly\"\n [attr.aria-invalid]=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n required\n ></pry-select>\n\n <ng-template #templateOption let-item=\"item\">\n <ng-container *ngIf=\"toPredicate(item); let item\">\n <div class=\"u-display-flex -column\">\n <span>#{{ item.id }}</span>\n <span>{{ item.name }}</span>\n <span>{{ item.value }}</span>\n </div>\n </ng-container>\n </ng-template>\n <label\n class=\"a-label a-label--help -error\"\n id=\"predicate-error\"\n for=\"predicate\"\n *ngIf=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n <label>{{ '@pry.admin.abac-rules.form.type' | i18n }}</label> *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n\n <div class=\"m-form-radio-group\">\n <ng-container *ngIf=\"typeSelected$ | async; else typeNotSelected\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"METADATA\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"ATTRIBUTE\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n <span *ngIf=\"!readonly\" style=\"font-size: 12px; font-style: italic\">{{\n '@pry.admin.abac-rules.form.typeSelected' | i18n\n }}</span>\n </ng-container>\n\n <ng-template #typeNotSelected>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', METADATA)\"\n value=\"METADATA\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', ATTRIBUTE)\"\n value=\"ATTRIBUTE\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n </ng-template>\n </div>\n </fieldset>\n </div>\n </div>\n\n <ng-container *ngIf=\"editAbacRuleConditionsMasterId$ | async as masterId\">\n <div class=\"row\">\n <div class=\"col\">\n <pry-composed-condition\n class=\"o-component-pry-composed-condition\"\n style=\"margin: 1rem\"\n [rootElement]=\"true\"\n [id]=\"masterId\"\n [readonly]=\"readonly\"\n ></pry-composed-condition>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"!readonly\" class=\"m-btn-group -align-center -width-sm\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"goBack()\">\n {{ '@pry.admin.cancel' | i18n }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"onCreateAbacRule(abacRuleForm)\">\n {{ '@pry.admin.' + (edit ? 'edit' : 'create') | i18n }}\n </button>\n </div>\n </form>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i6.ComposedConditionComponent, selector: "pry-composed-condition", inputs: ["id", "readonly", "rootElement"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
47
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdminAbacRulesFormComponent, selector: "pry-admin-abac-rules-form", inputs: { readonly: "readonly", edit: "edit" }, ngImport: i0, template: "<ng-container *ngIf=\"editAbacRule$ | async as rule\">\n <form class=\"o-form\" #abacRuleForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"name-label\" for=\"inputName\">\n {{ '@pry.admin.abac-rules.form.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"inputName\"\n type=\"text\"\n [ngModel]=\"rule.name\"\n (ngModelChange)=\"onChangeAbacRuleProperty('name', $event)\"\n class=\"a-form-field\"\n name=\"name\"\n #name=\"ngModel\"\n maxlength=\"50\"\n required\n [readonly]=\"readonly\"\n [attr.aria-labelledby]=\"isSubmitted && name?.invalid ? 'name-label name-error' : 'name-label'\"\n [attr.aria-invalid]=\"isSubmitted && name?.invalid\"\n />\n <label\n class=\"a-label a-label--help -error\"\n id=\"name-error\"\n for=\"inputName\"\n *ngIf=\"isSubmitted && name.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.status' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n <div class=\"m-form-radio-group\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleTrue\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"true\"\n />\n <label for=\"newRuleTrue\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusActive' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleFalse\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"false\"\n />\n <label for=\"newRuleFalse\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusInactive' | i18n }}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abac-rules-description\">{{\n '@pry.admin.abac-rules.form.description' | i18n\n }}</label>\n <textarea\n name=\"description\"\n id=\"abac-rules-description\"\n [ngModel]=\"rule.description\"\n (ngModelChange)=\"onChangeAbacRuleProperty('description', $event)\"\n class=\"a-form-field\"\n maxlength=\"90\"\n [readonly]=\"readonly\"\n ></textarea>\n </div>\n\n <div class=\"m-form-label-field\">\n <label id=\"predicate-label\" for=\"predicate\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.predicate' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n id=\"predicate\"\n [attr.aria-labelledby]=\"\n isSubmitted && abacRuleForm.form.get('predicate')?.invalid\n ? 'predicate-label predicate-error'\n : 'predicate-label'\n \"\n [readonly]=\"readonly\"\n [items]=\"predicates$ | async\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [template]=\"templateOption\"\n name=\"predicate\"\n [ngModel]=\"rule.predicate\"\n (ngModelChange)=\"onChangeAbacRuleProperty('predicate', $event)\"\n [isForm]=\"!readonly\"\n [attr.aria-invalid]=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n required\n ></pry-select>\n\n <ng-template #templateOption let-item=\"item\">\n <ng-container *ngIf=\"toPredicate(item); let item\">\n <div class=\"u-display-flex -column\">\n <span>#{{ item.id }}</span>\n <span>{{ item.name }}</span>\n <span>{{ item.value }}</span>\n </div>\n </ng-container>\n </ng-template>\n <label\n class=\"a-label a-label--help -error\"\n id=\"predicate-error\"\n for=\"predicate\"\n *ngIf=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n <label>{{ '@pry.admin.abac-rules.form.type' | i18n }}</label> *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n\n <div class=\"m-form-radio-group\">\n <ng-container *ngIf=\"typeSelected$ | async; else typeNotSelected\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"METADATA\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"ATTRIBUTE\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n <span *ngIf=\"!readonly\" style=\"font-size: 12px; font-style: italic\">{{\n '@pry.admin.abac-rules.form.typeSelected' | i18n\n }}</span>\n </ng-container>\n\n <ng-template #typeNotSelected>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', METADATA)\"\n value=\"METADATA\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', ATTRIBUTE)\"\n value=\"ATTRIBUTE\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n </ng-template>\n </div>\n </fieldset>\n </div>\n </div>\n\n <ng-container *ngIf=\"editAbacRuleConditionsMasterId$ | async as masterId\">\n <div class=\"row\">\n <div class=\"col\">\n <pry-composed-condition\n class=\"o-component-pry-composed-condition\"\n style=\"margin: 1rem\"\n [rootElement]=\"true\"\n [id]=\"masterId\"\n [readonly]=\"readonly\"\n ></pry-composed-condition>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"!readonly\" class=\"m-btn-group -align-center -width-sm\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"goBack()\">\n {{ '@pry.admin.cancel' | i18n }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"onCreateAbacRule(abacRuleForm)\">\n {{ '@pry.admin.' + (edit ? 'edit' : 'create') | i18n }}\n </button>\n </div>\n </form>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "elementRef"], outputs: ["searched", "cleared"] }, { kind: "component", type: i6.ComposedConditionComponent, selector: "pry-composed-condition", inputs: ["id", "readonly", "rootElement"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
48
48
  }
49
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdminAbacRulesFormComponent, decorators: [{
50
50
  type: Component,
51
- args: [{ selector: 'pry-admin-abac-rules-form', template: "<ng-container *ngIf=\"editAbacRule$ | async as rule\">\n <form class=\"o-form\" #abacRuleForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"name-label\" for=\"inputName\">\n {{ '@pry.admin.abac-rules.form.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"inputName\"\n type=\"text\"\n [ngModel]=\"rule.name\"\n (ngModelChange)=\"onChangeAbacRuleProperty('name', $event)\"\n class=\"a-form-field\"\n name=\"name\"\n #name=\"ngModel\"\n maxlength=\"50\"\n required\n [readonly]=\"readonly\"\n [attr.aria-labelledby]=\"isSubmitted && name?.invalid ? 'name-label name-error' : 'name-label'\"\n [attr.aria-invalid]=\"isSubmitted && name?.invalid\"\n />\n <label\n class=\"a-label a-label--help -error\"\n id=\"name-error\"\n for=\"inputName\"\n *ngIf=\"isSubmitted && name.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.status' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n <div class=\"m-form-radio-group\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleTrue\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"true\"\n />\n <label for=\"newRuleTrue\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusActive' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleFalse\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"false\"\n />\n <label for=\"newRuleFalse\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusInactive' | i18n }}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abac-rules-description\">{{\n '@pry.admin.abac-rules.form.description' | i18n\n }}</label>\n <textarea\n name=\"description\"\n id=\"abac-rules-description\"\n [ngModel]=\"rule.description\"\n (ngModelChange)=\"onChangeAbacRuleProperty('description', $event)\"\n class=\"a-form-field\"\n maxlength=\"90\"\n [readonly]=\"readonly\"\n ></textarea>\n </div>\n\n <div class=\"m-form-label-field\">\n <label id=\"predicate-label\" for=\"predicate\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.predicate' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n id=\"predicate\"\n class=\"a-pry-select\"\n [attr.aria-labelledby]=\"\n isSubmitted && abacRuleForm.form.get('predicate')?.invalid\n ? 'predicate-label predicate-error'\n : 'predicate-label'\n \"\n [readonly]=\"readonly\"\n [items]=\"predicates$ | async\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [itemsAsOption]=\"true\"\n [templateOption]=\"templateOption\"\n name=\"predicate\"\n [ngModel]=\"rule.predicate\"\n (ngModelChange)=\"onChangeAbacRuleProperty('predicate', $event)\"\n [isForm]=\"!readonly\"\n [attr.aria-invalid]=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n required\n ></pry-select>\n\n <ng-template #templateOption let-item=\"item\">\n <ng-container *ngIf=\"toPredicate(item); let item\">\n <div class=\"u-display-flex -column\">\n <span>#{{ item.id }}</span>\n <span>{{ item.name }}</span>\n <span>{{ item.value }}</span>\n </div>\n </ng-container>\n </ng-template>\n <label\n class=\"a-label a-label--help -error\"\n id=\"predicate-error\"\n for=\"predicate\"\n *ngIf=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n <label>{{ '@pry.admin.abac-rules.form.type' | i18n }}</label> *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n\n <div class=\"m-form-radio-group\">\n <ng-container *ngIf=\"typeSelected$ | async; else typeNotSelected\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"METADATA\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"ATTRIBUTE\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n <span *ngIf=\"!readonly\" style=\"font-size: 12px; font-style: italic\">{{\n '@pry.admin.abac-rules.form.typeSelected' | i18n\n }}</span>\n </ng-container>\n\n <ng-template #typeNotSelected>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', METADATA)\"\n value=\"METADATA\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', ATTRIBUTE)\"\n value=\"ATTRIBUTE\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n </ng-template>\n </div>\n </fieldset>\n </div>\n </div>\n\n <ng-container *ngIf=\"editAbacRuleConditionsMasterId$ | async as masterId\">\n <div class=\"row\">\n <div class=\"col\">\n <pry-composed-condition\n class=\"o-component-pry-composed-condition\"\n style=\"margin: 1rem\"\n [rootElement]=\"true\"\n [id]=\"masterId\"\n [readonly]=\"readonly\"\n ></pry-composed-condition>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"!readonly\" class=\"m-btn-group -align-center -width-sm\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"goBack()\">\n {{ '@pry.admin.cancel' | i18n }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"onCreateAbacRule(abacRuleForm)\">\n {{ '@pry.admin.' + (edit ? 'edit' : 'create') | i18n }}\n </button>\n </div>\n </form>\n</ng-container>\n" }]
51
+ args: [{ selector: 'pry-admin-abac-rules-form', template: "<ng-container *ngIf=\"editAbacRule$ | async as rule\">\n <form class=\"o-form\" #abacRuleForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"name-label\" for=\"inputName\">\n {{ '@pry.admin.abac-rules.form.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"inputName\"\n type=\"text\"\n [ngModel]=\"rule.name\"\n (ngModelChange)=\"onChangeAbacRuleProperty('name', $event)\"\n class=\"a-form-field\"\n name=\"name\"\n #name=\"ngModel\"\n maxlength=\"50\"\n required\n [readonly]=\"readonly\"\n [attr.aria-labelledby]=\"isSubmitted && name?.invalid ? 'name-label name-error' : 'name-label'\"\n [attr.aria-invalid]=\"isSubmitted && name?.invalid\"\n />\n <label\n class=\"a-label a-label--help -error\"\n id=\"name-error\"\n for=\"inputName\"\n *ngIf=\"isSubmitted && name.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.status' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n <div class=\"m-form-radio-group\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleTrue\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"true\"\n />\n <label for=\"newRuleTrue\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusActive' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"newRuleFalse\"\n name=\"active\"\n [ngModel]=\"rule.active\"\n (ngModelChange)=\"!readonly && onChangeAbacRuleProperty('active', $event)\"\n [value]=\"false\"\n />\n <label for=\"newRuleFalse\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.statusInactive' | i18n }}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"col\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abac-rules-description\">{{\n '@pry.admin.abac-rules.form.description' | i18n\n }}</label>\n <textarea\n name=\"description\"\n id=\"abac-rules-description\"\n [ngModel]=\"rule.description\"\n (ngModelChange)=\"onChangeAbacRuleProperty('description', $event)\"\n class=\"a-form-field\"\n maxlength=\"90\"\n [readonly]=\"readonly\"\n ></textarea>\n </div>\n\n <div class=\"m-form-label-field\">\n <label id=\"predicate-label\" for=\"predicate\" class=\"a-label\">\n {{ '@pry.admin.abac-rules.form.predicate' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n id=\"predicate\"\n [attr.aria-labelledby]=\"\n isSubmitted && abacRuleForm.form.get('predicate')?.invalid\n ? 'predicate-label predicate-error'\n : 'predicate-label'\n \"\n [readonly]=\"readonly\"\n [items]=\"predicates$ | async\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [template]=\"templateOption\"\n name=\"predicate\"\n [ngModel]=\"rule.predicate\"\n (ngModelChange)=\"onChangeAbacRuleProperty('predicate', $event)\"\n [isForm]=\"!readonly\"\n [attr.aria-invalid]=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n required\n ></pry-select>\n\n <ng-template #templateOption let-item=\"item\">\n <ng-container *ngIf=\"toPredicate(item); let item\">\n <div class=\"u-display-flex -column\">\n <span>#{{ item.id }}</span>\n <span>{{ item.name }}</span>\n <span>{{ item.value }}</span>\n </div>\n </ng-container>\n </ng-template>\n <label\n class=\"a-label a-label--help -error\"\n id=\"predicate-error\"\n for=\"predicate\"\n *ngIf=\"isSubmitted && abacRuleForm.form.get('predicate')?.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <fieldset class=\"m-form-radio-group-wrapper\" [disabled]=\"readonly\">\n <legend class=\"a-label\">\n <label>{{ '@pry.admin.abac-rules.form.type' | i18n }}</label> *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </legend>\n\n <div class=\"m-form-radio-group\">\n <ng-container *ngIf=\"typeSelected$ | async; else typeNotSelected\">\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"METADATA\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n disabled\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n value=\"ATTRIBUTE\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n <span *ngIf=\"!readonly\" style=\"font-size: 12px; font-style: italic\">{{\n '@pry.admin.abac-rules.form.typeSelected' | i18n\n }}</span>\n </ng-container>\n\n <ng-template #typeNotSelected>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"metadataId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', METADATA)\"\n value=\"METADATA\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"metadataId\">\n {{ '@pry.admin.abac-rules.form.typeMetadata' | i18n }}\n </label>\n </div>\n <div class=\"m-form-radio-group__item\">\n <input\n class=\"a-form-field\"\n type=\"radio\"\n id=\"attributeId\"\n name=\"type\"\n [ngModel]=\"rule.type\"\n (ngModelChange)=\"onChangeAbacRuleProperty('type', ATTRIBUTE)\"\n value=\"ATTRIBUTE\"\n [disabled]=\"readonly\"\n />\n <label class=\"a-label\" for=\"attributeId\">\n {{ '@pry.admin.abac-rules.form.typeAttribute' | i18n }}\n </label>\n </div>\n </ng-template>\n </div>\n </fieldset>\n </div>\n </div>\n\n <ng-container *ngIf=\"editAbacRuleConditionsMasterId$ | async as masterId\">\n <div class=\"row\">\n <div class=\"col\">\n <pry-composed-condition\n class=\"o-component-pry-composed-condition\"\n style=\"margin: 1rem\"\n [rootElement]=\"true\"\n [id]=\"masterId\"\n [readonly]=\"readonly\"\n ></pry-composed-condition>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"!readonly\" class=\"m-btn-group -align-center -width-sm\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"goBack()\">\n {{ '@pry.admin.cancel' | i18n }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"onCreateAbacRule(abacRuleForm)\">\n {{ '@pry.admin.' + (edit ? 'edit' : 'create') | i18n }}\n </button>\n </div>\n </form>\n</ng-container>\n" }]
52
52
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }, { type: i2.ActivatedRoute }]; }, propDecorators: { readonly: [{
53
53
  type: Input
54
54
  }], edit: [{
55
55
  type: Input
56
56
  }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tYWJhYy1ydWxlcy9hZG1pbi1hYmFjLXJ1bGVzLWZvcm0vYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tYWJhYy1ydWxlcy9hZG1pbi1hYmFjLXJ1bGVzLWZvcm0vYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7OztBQU1uRSxNQUFNLE9BQU8sMkJBQTJCO0lBZXRDLFlBQ1UsS0FBaUIsRUFDakIsTUFBYyxFQUNkLEtBQXFCO1FBRnJCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBakJ0QixjQUFTLEdBQWtCLFdBQVcsQ0FBQztRQUN2QyxhQUFRLEdBQWtCLFVBQVUsQ0FBQztRQUNyQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFLdEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFXbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWU7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsUUFBd0IsRUFBRSxLQUFhO1FBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLDRCQUE0QixDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzRjtJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQzsrR0EvQ1UsMkJBQTJCO21HQUEzQiwyQkFBMkIsaUhDZnhDLDRwU0F5T0E7OzRGRDFOYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMkJBQTJCOzhJQU01QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBQcmVkaWNhdGUgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZGljYXRlc1NlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2FkbWluLXByZWRpY2F0ZXMvc3RvcmUvcHJlZGljYXRlcy5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgQWJhY1J1bGVzQWN0aW9ucyB9IGZyb20gJy4uL3N0b3JlL2FiYWMtcnVsZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBBYmFjUnVsZSwgQWJhY1J1bGVUeXBlLCBDb25kaXRpb25UeXBlIH0gZnJvbSAnLi4vc3RvcmUvYWJhYy1ydWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBBYmFjUnVsZXNTZWxlY3RvcnMgfSBmcm9tICcuLi9zdG9yZS9hYmFjLXJ1bGVzLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1hZG1pbi1hYmFjLXJ1bGVzLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZG1pbkFiYWNSdWxlc0Zvcm1Db21wb25lbnQge1xuICByZWFkb25seSBBVFRSSUJVVEU6IENvbmRpdGlvblR5cGUgPSAnQVRUUklCVVRFJztcbiAgcmVhZG9ubHkgTUVUQURBVEE6IENvbmRpdGlvblR5cGUgPSAnTUVUQURBVEEnO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBlZGl0ID0gZmFsc2U7XG5cbiAgcHJlZGljYXRlcyQ6IE9ic2VydmFibGU8UHJlZGljYXRlW10+O1xuICBlZGl0QWJhY1J1bGVUeXBlJDogT2JzZXJ2YWJsZTxBYmFjUnVsZVR5cGUgfCB1bmRlZmluZWQ+O1xuXG4gIGlzU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgZWRpdEFiYWNSdWxlQ29uZGl0aW9uc01hc3RlcklkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgdHlwZVNlbGVjdGVkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBlZGl0QWJhY1J1bGUkOiBPYnNlcnZhYmxlPEFiYWNSdWxlIHwgbnVsbD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIHRoaXMucHJlZGljYXRlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChQcmVkaWNhdGVzU2VsZWN0b3JzLnByZWRpY2F0ZXMpO1xuICAgIHRoaXMuZWRpdEFiYWNSdWxlJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEFiYWNSdWxlc1NlbGVjdG9ycy5lZGl0QWJhY1J1bGUpO1xuICAgIHRoaXMuZWRpdEFiYWNSdWxlVHlwZSQgPSB0aGlzLnN0b3JlLnNlbGVjdChBYmFjUnVsZXNTZWxlY3RvcnMuZWRpdEFiYWNSdWxlVHlwZSk7XG4gICAgdGhpcy5lZGl0QWJhY1J1bGVDb25kaXRpb25zTWFzdGVySWQkID0gdGhpcy5zdG9yZS5zZWxlY3QoQWJhY1J1bGVzU2VsZWN0b3JzLmVkaXRBYmFjUnVsZUNvbmRpdGlvbnNNYXN0ZXJJZCk7XG4gICAgdGhpcy50eXBlU2VsZWN0ZWQkID0gdGhpcy5zdG9yZS5zZWxlY3QoQWJhY1J1bGVzU2VsZWN0b3JzLmVkaXRBYmFjUnVsZUNvbmRpdGlvbnNUeXBlU2VsZWN0ZWQpO1xuICB9XG5cbiAgdG9QcmVkaWNhdGUoaXRlbTogUHJlZGljYXRlKTogUHJlZGljYXRlIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIG9uQ2hhbmdlQWJhY1J1bGVQcm9wZXJ0eShwcm9wZXJ0eToga2V5b2YgQWJhY1J1bGUsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFiYWNSdWxlc0FjdGlvbnMudXBkYXRlRWRpdEFiYWNSdWxlQnlQcm9wZXJ0eSh7IHByb3BlcnR5LCB2YWx1ZSB9KSk7XG4gIH1cblxuICBvbkNyZWF0ZUFiYWNSdWxlKGZvcm06IE5nRm9ybSk6IHZvaWQge1xuICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xuICAgIGlmIChmb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLmlzU3VibWl0dGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBiYWNrUGF0aCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWycuLiddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFiYWNSdWxlc0FjdGlvbnMuc2F2ZUVkaXRBYmFjUnVsZSh7IHJlZGlyZWN0OiBiYWNrUGF0aC50b1N0cmluZygpIH0pKTtcbiAgICB9XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgY29uc3QgYmFja1BhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQWJhY1J1bGVzQWN0aW9ucy5jYW5jZWxBYmFjUnVsZUVkaXRpb24oeyByZWRpcmVjdDogYmFja1BhdGgudG9TdHJpbmcoKSB9KSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0QWJhY1J1bGUkIHwgYXN5bmMgYXMgcnVsZVwiPlxuICA8Zm9ybSBjbGFzcz1cIm8tZm9ybVwiICNhYmFjUnVsZUZvcm09XCJuZ0Zvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgaWQ9XCJuYW1lLWxhYmVsXCIgZm9yPVwiaW5wdXROYW1lXCI+XG4gICAgICAgICAgICB7eyAnQHByeS5hZG1pbi5hYmFjLXJ1bGVzLmZvcm0ubmFtZScgfCBpMThuIH19ICpcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj4oe3sgJ0BwcnkuYWRtaW4ucmVxdWlyZWQnIHwgaTE4biB9fSk8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwiaW5wdXROYW1lXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUubmFtZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUFiYWNSdWxlUHJvcGVydHkoJ25hbWUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICNuYW1lPVwibmdNb2RlbFwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpc1N1Ym1pdHRlZCAmJiBuYW1lPy5pbnZhbGlkID8gJ25hbWUtbGFiZWwgbmFtZS1lcnJvcicgOiAnbmFtZS1sYWJlbCdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzU3VibWl0dGVkICYmIG5hbWU/LmludmFsaWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIlxuICAgICAgICAgICAgaWQ9XCJuYW1lLWVycm9yXCJcbiAgICAgICAgICAgIGZvcj1cImlucHV0TmFtZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzU3VibWl0dGVkICYmIG5hbWUuaW52YWxpZFwiXG4gICAgICAgICAgICA+e3sgJ0BwcnkuYWRtaW4ucmVxdWlyZWQnIHwgaTE4biB9fTwvbGFiZWxcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cC13cmFwcGVyXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImEtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS5zdGF0dXMnIHwgaTE4biB9fSAqXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgaWQ9XCJuZXdSdWxlVHJ1ZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIiFyZWFkb25seSAmJiBvbkNoYW5nZUFiYWNSdWxlUHJvcGVydHkoJ2FjdGl2ZScsICRldmVudClcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5ld1J1bGVUcnVlXCIgY2xhc3M9XCJhLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5mb3JtLnN0YXR1c0FjdGl2ZScgfCBpMThuIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgaWQ9XCJuZXdSdWxlRmFsc2VcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCIhcmVhZG9ubHkgJiYgb25DaGFuZ2VBYmFjUnVsZVByb3BlcnR5KCdhY3RpdmUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmV3UnVsZUZhbHNlXCIgY2xhc3M9XCJhLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5mb3JtLnN0YXR1c0luYWN0aXZlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhYmFjLXJ1bGVzLWRlc2NyaXB0aW9uXCI+e3tcbiAgICAgICAgICAgICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS5kZXNjcmlwdGlvbicgfCBpMThuXG4gICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIGlkPVwiYWJhYy1ydWxlcy1kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJydWxlLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlQWJhY1J1bGVQcm9wZXJ0eSgnZGVzY3JpcHRpb24nLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjkwXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgaWQ9XCJwcmVkaWNhdGUtbGFiZWxcIiBmb3I9XCJwcmVkaWNhdGVcIiBjbGFzcz1cImEtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS5wcmVkaWNhdGUnIHwgaTE4biB9fSAqXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIGlkPVwicHJlZGljYXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgaXNTdWJtaXR0ZWQgJiYgYWJhY1J1bGVGb3JtLmZvcm0uZ2V0KCdwcmVkaWNhdGUnKT8uaW52YWxpZFxuICAgICAgICAgICAgICAgID8gJ3ByZWRpY2F0ZS1sYWJlbCBwcmVkaWNhdGUtZXJyb3InXG4gICAgICAgICAgICAgICAgOiAncHJlZGljYXRlLWxhYmVsJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwicHJlZGljYXRlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgW3RlbXBsYXRlT3B0aW9uXT1cInRlbXBsYXRlT3B0aW9uXCJcbiAgICAgICAgICAgIG5hbWU9XCJwcmVkaWNhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS5wcmVkaWNhdGVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VBYmFjUnVsZVByb3BlcnR5KCdwcmVkaWNhdGUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpc0Zvcm1dPVwiIXJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJpc1N1Ym1pdHRlZCAmJiBhYmFjUnVsZUZvcm0uZm9ybS5nZXQoJ3ByZWRpY2F0ZScpPy5pbnZhbGlkXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVPcHRpb24gbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9QcmVkaWNhdGUoaXRlbSk7IGxldCBpdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+I3t7IGl0ZW0uaWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiXG4gICAgICAgICAgICBpZD1cInByZWRpY2F0ZS1lcnJvclwiXG4gICAgICAgICAgICBmb3I9XCJwcmVkaWNhdGVcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc1N1Ym1pdHRlZCAmJiBhYmFjUnVsZUZvcm0uZm9ybS5nZXQoJ3ByZWRpY2F0ZScpPy5pbnZhbGlkXCJcbiAgICAgICAgICAgID57eyAnQHByeS5hZG1pbi5yZXF1aXJlZCcgfCBpMThuIH19PC9sYWJlbFxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwibS1mb3JtLXJhZGlvLWdyb3VwLXdyYXBwZXJcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIj5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwiYS1sYWJlbFwiPlxuICAgICAgICAgICAgPGxhYmVsPnt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS50eXBlJyB8IGkxOG4gfX08L2xhYmVsPiAqXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgICAgICAgIDwvbGVnZW5kPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGVTZWxlY3RlZCQgfCBhc3luYzsgZWxzZSB0eXBlTm90U2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cF9faXRlbVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICBpZD1cIm1ldGFkYXRhSWRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiTUVUQURBVEFcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1ldGFkYXRhSWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS50eXBlTWV0YWRhdGEnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLXJhZGlvLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgIGlkPVwiYXR0cmlidXRlSWRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiQVRUUklCVVRFXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyaWJ1dGVJZFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5mb3JtLnR5cGVBdHRyaWJ1dGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFyZWFkb25seVwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4OyBmb250LXN0eWxlOiBpdGFsaWNcIj57e1xuICAgICAgICAgICAgICAgICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS50eXBlU2VsZWN0ZWQnIHwgaTE4blxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3R5cGVOb3RTZWxlY3RlZD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cF9faXRlbVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwibWV0YWRhdGFJZFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwidHlwZVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJydWxlLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VBYmFjUnVsZVByb3BlcnR5KCd0eXBlJywgTUVUQURBVEEpXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiTUVUQURBVEFcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtZXRhZGF0YUlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnQHByeS5hZG1pbi5hYmFjLXJ1bGVzLmZvcm0udHlwZU1ldGFkYXRhJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cF9faXRlbVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiYXR0cmlidXRlSWRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlQWJhY1J1bGVQcm9wZXJ0eSgndHlwZScsIEFUVFJJQlVURSlcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9XCJBVFRSSUJVVEVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyaWJ1dGVJZFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5mb3JtLnR5cGVBdHRyaWJ1dGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRBYmFjUnVsZUNvbmRpdGlvbnNNYXN0ZXJJZCQgfCBhc3luYyBhcyBtYXN0ZXJJZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgPHByeS1jb21wb3NlZC1jb25kaXRpb25cbiAgICAgICAgICAgIGNsYXNzPVwiby1jb21wb25lbnQtcHJ5LWNvbXBvc2VkLWNvbmRpdGlvblwiXG4gICAgICAgICAgICBzdHlsZT1cIm1hcmdpbjogMXJlbVwiXG4gICAgICAgICAgICBbcm9vdEVsZW1lbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaWRdPVwibWFzdGVySWRcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICA+PC9wcnktY29tcG9zZWQtY29uZGl0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiAqbmdJZj1cIiFyZWFkb25seVwiIGNsYXNzPVwibS1idG4tZ3JvdXAgLWFsaWduLWNlbnRlciAtd2lkdGgtc21cIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICB7eyAnQHByeS5hZG1pbi5jYW5jZWwnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ3JlYXRlQWJhY1J1bGUoYWJhY1J1bGVGb3JtKVwiPlxuICAgICAgICB7eyAnQHByeS5hZG1pbi4nICsgKGVkaXQgPyAnZWRpdCcgOiAnY3JlYXRlJykgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tYWJhYy1ydWxlcy9hZG1pbi1hYmFjLXJ1bGVzLWZvcm0vYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tYWJhYy1ydWxlcy9hZG1pbi1hYmFjLXJ1bGVzLWZvcm0vYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7OztBQU1uRSxNQUFNLE9BQU8sMkJBQTJCO0lBZXRDLFlBQ1UsS0FBaUIsRUFDakIsTUFBYyxFQUNkLEtBQXFCO1FBRnJCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBakJ0QixjQUFTLEdBQWtCLFdBQVcsQ0FBQztRQUN2QyxhQUFRLEdBQWtCLFVBQVUsQ0FBQztRQUNyQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFLdEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFXbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWU7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsUUFBd0IsRUFBRSxLQUFhO1FBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLDRCQUE0QixDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzRjtJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQzsrR0EvQ1UsMkJBQTJCO21HQUEzQiwyQkFBMkIsaUhDZnhDLDRrU0F1T0E7OzRGRHhOYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMkJBQTJCOzhJQU01QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBQcmVkaWNhdGUgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZGljYXRlc1NlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2FkbWluLXByZWRpY2F0ZXMvc3RvcmUvcHJlZGljYXRlcy5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgQWJhY1J1bGVzQWN0aW9ucyB9IGZyb20gJy4uL3N0b3JlL2FiYWMtcnVsZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBBYmFjUnVsZSwgQWJhY1J1bGVUeXBlLCBDb25kaXRpb25UeXBlIH0gZnJvbSAnLi4vc3RvcmUvYWJhYy1ydWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBBYmFjUnVsZXNTZWxlY3RvcnMgfSBmcm9tICcuLi9zdG9yZS9hYmFjLXJ1bGVzLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1hZG1pbi1hYmFjLXJ1bGVzLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRtaW4tYWJhYy1ydWxlcy1mb3JtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZG1pbkFiYWNSdWxlc0Zvcm1Db21wb25lbnQge1xuICByZWFkb25seSBBVFRSSUJVVEU6IENvbmRpdGlvblR5cGUgPSAnQVRUUklCVVRFJztcbiAgcmVhZG9ubHkgTUVUQURBVEE6IENvbmRpdGlvblR5cGUgPSAnTUVUQURBVEEnO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBlZGl0ID0gZmFsc2U7XG5cbiAgcHJlZGljYXRlcyQ6IE9ic2VydmFibGU8UHJlZGljYXRlW10+O1xuICBlZGl0QWJhY1J1bGVUeXBlJDogT2JzZXJ2YWJsZTxBYmFjUnVsZVR5cGUgfCB1bmRlZmluZWQ+O1xuXG4gIGlzU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgZWRpdEFiYWNSdWxlQ29uZGl0aW9uc01hc3RlcklkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgdHlwZVNlbGVjdGVkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBlZGl0QWJhY1J1bGUkOiBPYnNlcnZhYmxlPEFiYWNSdWxlIHwgbnVsbD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIHRoaXMucHJlZGljYXRlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChQcmVkaWNhdGVzU2VsZWN0b3JzLnByZWRpY2F0ZXMpO1xuICAgIHRoaXMuZWRpdEFiYWNSdWxlJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEFiYWNSdWxlc1NlbGVjdG9ycy5lZGl0QWJhY1J1bGUpO1xuICAgIHRoaXMuZWRpdEFiYWNSdWxlVHlwZSQgPSB0aGlzLnN0b3JlLnNlbGVjdChBYmFjUnVsZXNTZWxlY3RvcnMuZWRpdEFiYWNSdWxlVHlwZSk7XG4gICAgdGhpcy5lZGl0QWJhY1J1bGVDb25kaXRpb25zTWFzdGVySWQkID0gdGhpcy5zdG9yZS5zZWxlY3QoQWJhY1J1bGVzU2VsZWN0b3JzLmVkaXRBYmFjUnVsZUNvbmRpdGlvbnNNYXN0ZXJJZCk7XG4gICAgdGhpcy50eXBlU2VsZWN0ZWQkID0gdGhpcy5zdG9yZS5zZWxlY3QoQWJhY1J1bGVzU2VsZWN0b3JzLmVkaXRBYmFjUnVsZUNvbmRpdGlvbnNUeXBlU2VsZWN0ZWQpO1xuICB9XG5cbiAgdG9QcmVkaWNhdGUoaXRlbTogUHJlZGljYXRlKTogUHJlZGljYXRlIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIG9uQ2hhbmdlQWJhY1J1bGVQcm9wZXJ0eShwcm9wZXJ0eToga2V5b2YgQWJhY1J1bGUsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFiYWNSdWxlc0FjdGlvbnMudXBkYXRlRWRpdEFiYWNSdWxlQnlQcm9wZXJ0eSh7IHByb3BlcnR5LCB2YWx1ZSB9KSk7XG4gIH1cblxuICBvbkNyZWF0ZUFiYWNSdWxlKGZvcm06IE5nRm9ybSk6IHZvaWQge1xuICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xuICAgIGlmIChmb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLmlzU3VibWl0dGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBiYWNrUGF0aCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWycuLiddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFiYWNSdWxlc0FjdGlvbnMuc2F2ZUVkaXRBYmFjUnVsZSh7IHJlZGlyZWN0OiBiYWNrUGF0aC50b1N0cmluZygpIH0pKTtcbiAgICB9XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgY29uc3QgYmFja1BhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQWJhY1J1bGVzQWN0aW9ucy5jYW5jZWxBYmFjUnVsZUVkaXRpb24oeyByZWRpcmVjdDogYmFja1BhdGgudG9TdHJpbmcoKSB9KSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0QWJhY1J1bGUkIHwgYXN5bmMgYXMgcnVsZVwiPlxuICA8Zm9ybSBjbGFzcz1cIm8tZm9ybVwiICNhYmFjUnVsZUZvcm09XCJuZ0Zvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgaWQ9XCJuYW1lLWxhYmVsXCIgZm9yPVwiaW5wdXROYW1lXCI+XG4gICAgICAgICAgICB7eyAnQHByeS5hZG1pbi5hYmFjLXJ1bGVzLmZvcm0ubmFtZScgfCBpMThuIH19ICpcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj4oe3sgJ0BwcnkuYWRtaW4ucmVxdWlyZWQnIHwgaTE4biB9fSk8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwiaW5wdXROYW1lXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUubmFtZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUFiYWNSdWxlUHJvcGVydHkoJ25hbWUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICNuYW1lPVwibmdNb2RlbFwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpc1N1Ym1pdHRlZCAmJiBuYW1lPy5pbnZhbGlkID8gJ25hbWUtbGFiZWwgbmFtZS1lcnJvcicgOiAnbmFtZS1sYWJlbCdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzU3VibWl0dGVkICYmIG5hbWU/LmludmFsaWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIlxuICAgICAgICAgICAgaWQ9XCJuYW1lLWVycm9yXCJcbiAgICAgICAgICAgIGZvcj1cImlucHV0TmFtZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzU3VibWl0dGVkICYmIG5hbWUuaW52YWxpZFwiXG4gICAgICAgICAgICA+e3sgJ0BwcnkuYWRtaW4ucmVxdWlyZWQnIHwgaTE4biB9fTwvbGFiZWxcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cC13cmFwcGVyXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImEtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS5zdGF0dXMnIHwgaTE4biB9fSAqXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgaWQ9XCJuZXdSdWxlVHJ1ZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIiFyZWFkb25seSAmJiBvbkNoYW5nZUFiYWNSdWxlUHJvcGVydHkoJ2FjdGl2ZScsICRldmVudClcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5ld1J1bGVUcnVlXCIgY2xhc3M9XCJhLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5mb3JtLnN0YXR1c0FjdGl2ZScgfCBpMThuIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgaWQ9XCJuZXdSdWxlRmFsc2VcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCIhcmVhZG9ubHkgJiYgb25DaGFuZ2VBYmFjUnVsZVByb3BlcnR5KCdhY3RpdmUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmV3UnVsZUZhbHNlXCIgY2xhc3M9XCJhLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5mb3JtLnN0YXR1c0luYWN0aXZlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhYmFjLXJ1bGVzLWRlc2NyaXB0aW9uXCI+e3tcbiAgICAgICAgICAgICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS5kZXNjcmlwdGlvbicgfCBpMThuXG4gICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIGlkPVwiYWJhYy1ydWxlcy1kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJydWxlLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlQWJhY1J1bGVQcm9wZXJ0eSgnZGVzY3JpcHRpb24nLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjkwXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgaWQ9XCJwcmVkaWNhdGUtbGFiZWxcIiBmb3I9XCJwcmVkaWNhdGVcIiBjbGFzcz1cImEtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS5wcmVkaWNhdGUnIHwgaTE4biB9fSAqXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIGlkPVwicHJlZGljYXRlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgaXNTdWJtaXR0ZWQgJiYgYWJhY1J1bGVGb3JtLmZvcm0uZ2V0KCdwcmVkaWNhdGUnKT8uaW52YWxpZFxuICAgICAgICAgICAgICAgID8gJ3ByZWRpY2F0ZS1sYWJlbCBwcmVkaWNhdGUtZXJyb3InXG4gICAgICAgICAgICAgICAgOiAncHJlZGljYXRlLWxhYmVsJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwicHJlZGljYXRlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZU9wdGlvblwiXG4gICAgICAgICAgICBuYW1lPVwicHJlZGljYXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUucHJlZGljYXRlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlQWJhY1J1bGVQcm9wZXJ0eSgncHJlZGljYXRlJywgJGV2ZW50KVwiXG4gICAgICAgICAgICBbaXNGb3JtXT1cIiFyZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNTdWJtaXR0ZWQgJiYgYWJhY1J1bGVGb3JtLmZvcm0uZ2V0KCdwcmVkaWNhdGUnKT8uaW52YWxpZFwiXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlT3B0aW9uIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvUHJlZGljYXRlKGl0ZW0pOyBsZXQgaXRlbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPiN7eyBpdGVtLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIlxuICAgICAgICAgICAgaWQ9XCJwcmVkaWNhdGUtZXJyb3JcIlxuICAgICAgICAgICAgZm9yPVwicHJlZGljYXRlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNTdWJtaXR0ZWQgJiYgYWJhY1J1bGVGb3JtLmZvcm0uZ2V0KCdwcmVkaWNhdGUnKT8uaW52YWxpZFwiXG4gICAgICAgICAgICA+e3sgJ0BwcnkuYWRtaW4ucmVxdWlyZWQnIHwgaTE4biB9fTwvbGFiZWxcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cC13cmFwcGVyXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImEtbGFiZWxcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyAnQHByeS5hZG1pbi5hYmFjLXJ1bGVzLmZvcm0udHlwZScgfCBpMThuIH19PC9sYWJlbD4gKlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPih7eyAnQHByeS5hZG1pbi5yZXF1aXJlZCcgfCBpMThuIH19KTwvc3Bhbj5cbiAgICAgICAgICA8L2xlZ2VuZD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlU2VsZWN0ZWQkIHwgYXN5bmM7IGVsc2UgdHlwZU5vdFNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgaWQ9XCJtZXRhZGF0YUlkXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0eXBlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT1cIk1FVEFEQVRBXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtZXRhZGF0YUlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnQHByeS5hZG1pbi5hYmFjLXJ1bGVzLmZvcm0udHlwZU1ldGFkYXRhJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cF9faXRlbVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICBpZD1cImF0dHJpYnV0ZUlkXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0eXBlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT1cIkFUVFJJQlVURVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYXR0cmlidXRlSWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS50eXBlQXR0cmlidXRlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcmVhZG9ubHlcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogaXRhbGljXCI+e3tcbiAgICAgICAgICAgICAgICAnQHByeS5hZG1pbi5hYmFjLXJ1bGVzLmZvcm0udHlwZVNlbGVjdGVkJyB8IGkxOG5cbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0eXBlTm90U2VsZWN0ZWQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICBpZD1cIm1ldGFkYXRhSWRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlQWJhY1J1bGVQcm9wZXJ0eSgndHlwZScsIE1FVEFEQVRBKVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT1cIk1FVEFEQVRBXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWV0YWRhdGFJZFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5mb3JtLnR5cGVNZXRhZGF0YScgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICBpZD1cImF0dHJpYnV0ZUlkXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0eXBlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJ1bGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUFiYWNSdWxlUHJvcGVydHkoJ3R5cGUnLCBBVFRSSUJVVEUpXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiQVRUUklCVVRFXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYXR0cmlidXRlSWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZm9ybS50eXBlQXR0cmlidXRlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0QWJhY1J1bGVDb25kaXRpb25zTWFzdGVySWQkIHwgYXN5bmMgYXMgbWFzdGVySWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgIDxwcnktY29tcG9zZWQtY29uZGl0aW9uXG4gICAgICAgICAgICBjbGFzcz1cIm8tY29tcG9uZW50LXByeS1jb21wb3NlZC1jb25kaXRpb25cIlxuICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDFyZW1cIlxuICAgICAgICAgICAgW3Jvb3RFbGVtZW50XT1cInRydWVcIlxuICAgICAgICAgICAgW2lkXT1cIm1hc3RlcklkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgPjwvcHJ5LWNvbXBvc2VkLWNvbmRpdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgKm5nSWY9XCIhcmVhZG9ubHlcIiBjbGFzcz1cIm0tYnRuLWdyb3VwIC1hbGlnbi1jZW50ZXIgLXdpZHRoLXNtXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAge3sgJ0BwcnkuYWRtaW4uY2FuY2VsJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiIChjbGljayk9XCJvbkNyZWF0ZUFiYWNSdWxlKGFiYWNSdWxlRm9ybSlcIj5cbiAgICAgICAge3sgJ0BwcnkuYWRtaW4uJyArIChlZGl0ID8gJ2VkaXQnIDogJ2NyZWF0ZScpIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -68,14 +68,14 @@ export class AttributeConditionComponent {
68
68
  this.store.dispatch(AbacRulesActions.removeEditAbacRuleConditionFromComposed({ conditionId: parentId, childrenId: conditionId }));
69
69
  }
70
70
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeConditionComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AttributeConditionComponent, selector: "pry-attribute-condition", inputs: { readonly: "readonly", id: "id" }, ngImport: i0, template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"attribute$ | async as attr; else noAttribute\">\n <ng-container *ngIf=\"field$ | async as field; else noField\">\n <div class=\"o-pry-attribute-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n (click)=\"onOpenPanel()\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.admin.abac-rules.delete' | i18n }}</span>\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n <button\n class=\"pry-condition-delete\"\n (click)=\"onDeleteAttributeCondition(condition.id, condition.parentId)\"\n >\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </div>\n </div>\n </ng-template>\n </button>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"attr_name\">Name</label>\n <input id=\"attr_name\" class=\"a-form-field\" type=\"text\" [value]=\"attr.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_operator\">???</label>\n <pry-select\n class=\"a-pry-select\"\n id=\"condition_operator\"\n [style.width.px]=\"160\"\n [labelTranslate]=\"true\"\n [items]=\"operatorOptions$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n [readonly]=\"readonly\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">Name</label>\n <input\n id=\"condition_value\"\n [readonly]=\"readonly\"\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n </div>\n </ng-container>\n <ng-template #noField> Loading field ...</ng-template>\n </ng-container>\n <ng-template #noAttribute> Loading attribute ...</ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "directive", type: i5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i5.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AttributeConditionComponent, selector: "pry-attribute-condition", inputs: { readonly: "readonly", id: "id" }, ngImport: i0, template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"attribute$ | async as attr; else noAttribute\">\n <ng-container *ngIf=\"field$ | async as field; else noField\">\n <div class=\"o-pry-attribute-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n (click)=\"onOpenPanel()\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.admin.abac-rules.delete' | i18n }}</span>\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n <button\n class=\"pry-condition-delete\"\n (click)=\"onDeleteAttributeCondition(condition.id, condition.parentId)\"\n >\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </div>\n </div>\n </ng-template>\n </button>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"attr_name\">Name</label>\n <input id=\"attr_name\" class=\"a-form-field\" type=\"text\" [value]=\"attr.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_operator\">???</label>\n <pry-select\n id=\"condition_operator\"\n [style.width.px]=\"160\"\n [items]=\"operatorOptions$ | async\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n [readonly]=\"readonly\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">Name</label>\n <input\n id=\"condition_value\"\n [readonly]=\"readonly\"\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n </div>\n </ng-container>\n <ng-template #noField> Loading field ...</ng-template>\n </ng-container>\n <ng-template #noAttribute> Loading attribute ...</ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "elementRef"], outputs: ["searched", "cleared"] }, { kind: "directive", type: i5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i5.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
72
72
  }
73
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeConditionComponent, decorators: [{
74
74
  type: Component,
75
- args: [{ selector: 'pry-attribute-condition', template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"attribute$ | async as attr; else noAttribute\">\n <ng-container *ngIf=\"field$ | async as field; else noField\">\n <div class=\"o-pry-attribute-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n (click)=\"onOpenPanel()\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.admin.abac-rules.delete' | i18n }}</span>\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n <button\n class=\"pry-condition-delete\"\n (click)=\"onDeleteAttributeCondition(condition.id, condition.parentId)\"\n >\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </div>\n </div>\n </ng-template>\n </button>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"attr_name\">Name</label>\n <input id=\"attr_name\" class=\"a-form-field\" type=\"text\" [value]=\"attr.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_operator\">???</label>\n <pry-select\n class=\"a-pry-select\"\n id=\"condition_operator\"\n [style.width.px]=\"160\"\n [labelTranslate]=\"true\"\n [items]=\"operatorOptions$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n [readonly]=\"readonly\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">Name</label>\n <input\n id=\"condition_value\"\n [readonly]=\"readonly\"\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n </div>\n </ng-container>\n <ng-template #noField> Loading field ...</ng-template>\n </ng-container>\n <ng-template #noAttribute> Loading attribute ...</ng-template>\n</ng-container>\n" }]
75
+ args: [{ selector: 'pry-attribute-condition', template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"attribute$ | async as attr; else noAttribute\">\n <ng-container *ngIf=\"field$ | async as field; else noField\">\n <div class=\"o-pry-attribute-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n (click)=\"onOpenPanel()\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.admin.abac-rules.delete' | i18n }}</span>\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n <button\n class=\"pry-condition-delete\"\n (click)=\"onDeleteAttributeCondition(condition.id, condition.parentId)\"\n >\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </div>\n </div>\n </ng-template>\n </button>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"attr_name\">Name</label>\n <input id=\"attr_name\" class=\"a-form-field\" type=\"text\" [value]=\"attr.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_operator\">???</label>\n <pry-select\n id=\"condition_operator\"\n [style.width.px]=\"160\"\n [items]=\"operatorOptions$ | async\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n [readonly]=\"readonly\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">Name</label>\n <input\n id=\"condition_value\"\n [readonly]=\"readonly\"\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n </div>\n </ng-container>\n <ng-template #noField> Loading field ...</ng-template>\n </ng-container>\n <ng-template #noAttribute> Loading attribute ...</ng-template>\n</ng-container>\n" }]
76
76
  }], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { readonly: [{
77
77
  type: Input
78
78
  }], id: [{
79
79
  type: Input
80
80
  }] } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNvbmRpdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWFiYWMtcnVsZXMvY29tcG9uZW50cy9hdHRyaWJ1dGUtY29uZGl0aW9uL2F0dHJpYnV0ZS1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvYWRtaW4vY29tcG9uZW50cy9hZG1pbi1hYmFjLXJ1bGVzL2NvbXBvbmVudHMvYXR0cmlidXRlLWNvbmRpdGlvbi9hdHRyaWJ1dGUtY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBb0IsY0FBYyxFQUFTLGNBQWMsRUFBRSxTQUFTLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUNuSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUF1QixnQkFBZ0IsRUFBZ0MsTUFBTSw4QkFBOEIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7OztBQU10RSxNQUFNLE9BQU8sMkJBQTJCO0lBSXRDLElBQ0ksRUFBRSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBU0QsWUFB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UUFBUTtzQkFBaEIsS0FBSztnQkFHRixFQUFFO3NCQURMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEF0dHJpYnV0ZSwgQ2xhc3MsIENsYXNzU2VsZWN0b3JzLCBGaWVsZCwgRmllbGRTZWxlY3RvcnMsIEZpZWxkVHlwZSwgSU1ldGFkYXRhIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJhY1J1bGVzQWN0aW9ucyB9IGZyb20gJy4uLy4uL3N0b3JlL2FiYWMtcnVsZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBOb3JtYWxpemVkQ29uZGl0aW9uLCBPUEVSQVRPUl9PUFRJT05TLCBPcGVyYXRvck9wdGlvbiwgT3BlcmF0b3JUeXBlIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWJhYy1ydWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBBYmFjUnVsZXNTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9zdG9yZS9hYmFjLXJ1bGVzLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1hdHRyaWJ1dGUtY29uZGl0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dHJpYnV0ZS1jb25kaXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZUNvbmRpdGlvbkNvbXBvbmVudCB7XG4gIHBhbmVsT3BlbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsO1xuICAgIHRoaXMuYXNzaWduT2JzZXJ2YWJsZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lkPzogc3RyaW5nO1xuICBmaWVsZCQ6IE9ic2VydmFibGU8RmllbGQgfCBudWxsPiA9IG9mKG51bGwpO1xuICBhdHRyaWJ1dGUkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZSB8IHVuZGVmaW5lZD4gPSBvZih1bmRlZmluZWQpO1xuICBtZXRhZGF0YSQ6IE9ic2VydmFibGU8SU1ldGFkYXRhIHwgdW5kZWZpbmVkPiA9IG9mKHVuZGVmaW5lZCk7XG4gIGNvbmRpdGlvbiQ6IE9ic2VydmFibGU8Tm9ybWFsaXplZENvbmRpdGlvbiB8IG51bGw+ID0gb2YobnVsbCk7XG4gIG9wZXJhdG9yT3B0aW9ucyQ6IE9ic2VydmFibGU8T3BlcmF0b3JPcHRpb25bXT4gPSBvZihbXSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55Pikge31cblxuICBwcml2YXRlIGFzc2lnbk9ic2VydmFibGVzKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZGl0aW9uJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEFiYWNSdWxlc1NlbGVjdG9ycy5lZGl0QWJhY1J1bGVDb25kaXRpb25zQnlJZCh0aGlzLl9pZCA/PyAnJykpO1xuICAgIHRoaXMuYXR0cmlidXRlJCA9IHRoaXMuY29uZGl0aW9uJC5waXBlKFxuICAgICAgZmlsdGVyKChjb25kKTogY29uZCBpcyBOb3JtYWxpemVkQ29uZGl0aW9uID0+IGNvbmQgIT09IG51bGwgJiYgY29uZCAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIG1lcmdlTWFwKChjb25kKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtvZihjb25kKSwgdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NCeUF0dHJpYnV0ZUlkKGNvbmQuYXR0cmlidXRlID8/ICcnKSldKVxuICAgICAgKSxcbiAgICAgIG1hcCgoW2NvbmQsIGtsYXNzXSkgPT4ge1xuICAgICAgICByZXR1cm4gKGtsYXNzIGFzIENsYXNzKT8uYXR0cmlidXRlcy5maW5kKChhKSA9PiBhLmlkID09PSBjb25kLmF0dHJpYnV0ZSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWVsZCQgPSB0aGlzLmF0dHJpYnV0ZSQucGlwZShcbiAgICAgIGZpbHRlcigoYXR0cik6IGF0dHIgaXMgQXR0cmlidXRlID0+IGF0dHIgIT09IHVuZGVmaW5lZCksXG4gICAgICBzd2l0Y2hNYXAoKGF0dHIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkQnlJZChhdHRyLmZpZWxkKSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm9wZXJhdG9yT3B0aW9ucyQgPSB0aGlzLmZpZWxkJC5waXBlKFxuICAgICAgZmlsdGVyKChmaWVsZCk6IGZpZWxkIGlzIEZpZWxkID0+IGZpZWxkICE9PSB1bmRlZmluZWQpLFxuICAgICAgbWFwKChmaWVsZDogRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlNUUklORyB8fCBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5LRVlXT1JEKSB7XG4gICAgICAgICAgcmV0dXJuIE9QRVJBVE9SX09QVElPTlMuZmlsdGVyKChlbCkgPT4gZWwudHlwZSA9PT0gJ3N0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLklOVEVHRVIgfHwgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuREVDSU1BTCB8fCBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5MT05HKSB7XG4gICAgICAgICAgcmV0dXJuIE9QRVJBVE9SX09QVElPTlMuZmlsdGVyKChlbCkgPT4gZWwudHlwZSA9PT0gJ251bWJlcicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPUEVSQVRPUl9PUFRJT05TLmZpbHRlcigoZWwpID0+IGVsLnR5cGUgPT09ICdkYXRlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG9uQ2hhbmdlT3BlcmF0b3Iob3BlcmF0b3I6IE9wZXJhdG9yVHlwZSwgY29uZGl0aW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBBYmFjUnVsZXNBY3Rpb25zLnVwZGF0ZUVkaXRBYmFjUnVsZUNvbmRpdGlvblByb3BlcnR5KHtcbiAgICAgICAgY29uZGl0aW9uSWQsXG4gICAgICAgIHByb3BlcnR5OiB7IHR5cGU6ICdvcGVyYXRvcicsIHZhbHVlOiBvcGVyYXRvciB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvbkNoYW5nZVZhbHVlKGV2dDogYW55LCBjb25kaXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMudXBkYXRlRWRpdEFiYWNSdWxlQ29uZGl0aW9uUHJvcGVydHkoe1xuICAgICAgICBjb25kaXRpb25JZCxcbiAgICAgICAgcHJvcGVydHk6IHsgdHlwZTogJ3ZhbHVlJywgdmFsdWU6IGV2dC50YXJnZXQudmFsdWUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25PcGVuUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgb25DbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFuZWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkRlbGV0ZUF0dHJpYnV0ZUNvbmRpdGlvbihjb25kaXRpb25JZDogc3RyaW5nLCBwYXJlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMucmVtb3ZlRWRpdEFiYWNSdWxlQ29uZGl0aW9uRnJvbUNvbXBvc2VkKHsgY29uZGl0aW9uSWQ6IHBhcmVudElkLCBjaGlsZHJlbklkOiBjb25kaXRpb25JZCB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb25kaXRpb24kIHwgYXN5bmMgYXMgY29uZGl0aW9uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdHRyaWJ1dGUkIHwgYXN5bmMgYXMgYXR0cjsgZWxzZSBub0F0dHJpYnV0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZCQgfCBhc3luYyBhcyBmaWVsZDsgZWxzZSBub0ZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1wcnktYXR0cmlidXRlLWNvbmRpdGlvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgKm5nSWY9XCIhcmVhZG9ubHlcIlxuICAgICAgICAgIChjbGljayk9XCJvbk9wZW5QYW5lbCgpXCJcbiAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAgICAgI29yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJkcmFnX2luZGljYXRvclwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZGVsZXRlJyB8IGkxOG4gfX08L3NwYW4+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcFxuICAgICAgICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvblxuICAgICAgICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiXG4gICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJvcmlnaW5cIlxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInBhbmVsT3BlblwiXG4gICAgICAgICAgICAoYmFja2Ryb3BDbGljayk9XCJvbkNsb3NlUGFuZWwoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tcHJ5LW92ZXJsYXktcGFuZWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1wcnktb3ZlcmxheS1wYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJ5LWNvbmRpdGlvbi1kZWxldGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlQXR0cmlidXRlQ29uZGl0aW9uKGNvbmRpdGlvbi5pZCwgY29uZGl0aW9uLnBhcmVudElkKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5kZWxldGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIHUtdmlzdWFsbHktaGlkZGVuXCIgZm9yPVwiYXR0cl9uYW1lXCI+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGlkPVwiYXR0cl9uYW1lXCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJhdHRyLm5hbWVcIiByZWFkb25seSAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCB1LXZpc3VhbGx5LWhpZGRlblwiIGZvcj1cImNvbmRpdGlvbl9vcGVyYXRvclwiPj8/PzwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgIGlkPVwiY29uZGl0aW9uX29wZXJhdG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIxNjBcIlxuICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cIm9wZXJhdG9yT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm9wZXJhdG9yXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cInRyYW5zbGF0aW9uXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbmRpdGlvbi5vcGVyYXRvclwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZU9wZXJhdG9yKCRldmVudCwgY29uZGl0aW9uLmlkKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIHUtdmlzdWFsbHktaGlkZGVuXCIgZm9yPVwiY29uZGl0aW9uX3ZhbHVlXCI+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImNvbmRpdGlvbl92YWx1ZVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImNvbmRpdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwib25DaGFuZ2VWYWx1ZSgkZXZlbnQsIGNvbmRpdGlvbi5pZClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub0ZpZWxkPiBMb2FkaW5nIGZpZWxkIC4uLjwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI25vQXR0cmlidXRlPiBMb2FkaW5nIGF0dHJpYnV0ZSAuLi48L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNvbmRpdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWFiYWMtcnVsZXMvY29tcG9uZW50cy9hdHRyaWJ1dGUtY29uZGl0aW9uL2F0dHJpYnV0ZS1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvYWRtaW4vY29tcG9uZW50cy9hZG1pbi1hYmFjLXJ1bGVzL2NvbXBvbmVudHMvYXR0cmlidXRlLWNvbmRpdGlvbi9hdHRyaWJ1dGUtY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBb0IsY0FBYyxFQUFTLGNBQWMsRUFBRSxTQUFTLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUNuSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUF1QixnQkFBZ0IsRUFBZ0MsTUFBTSw4QkFBOEIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7OztBQU10RSxNQUFNLE9BQU8sMkJBQTJCO0lBSXRDLElBQ0ksRUFBRSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBU0QsWUFB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UUFBUTtzQkFBaEIsS0FBSztnQkFHRixFQUFFO3NCQURMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEF0dHJpYnV0ZSwgQ2xhc3MsIENsYXNzU2VsZWN0b3JzLCBGaWVsZCwgRmllbGRTZWxlY3RvcnMsIEZpZWxkVHlwZSwgSU1ldGFkYXRhIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJhY1J1bGVzQWN0aW9ucyB9IGZyb20gJy4uLy4uL3N0b3JlL2FiYWMtcnVsZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBOb3JtYWxpemVkQ29uZGl0aW9uLCBPUEVSQVRPUl9PUFRJT05TLCBPcGVyYXRvck9wdGlvbiwgT3BlcmF0b3JUeXBlIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWJhYy1ydWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBBYmFjUnVsZXNTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9zdG9yZS9hYmFjLXJ1bGVzLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1hdHRyaWJ1dGUtY29uZGl0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dHJpYnV0ZS1jb25kaXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZUNvbmRpdGlvbkNvbXBvbmVudCB7XG4gIHBhbmVsT3BlbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsO1xuICAgIHRoaXMuYXNzaWduT2JzZXJ2YWJsZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lkPzogc3RyaW5nO1xuICBmaWVsZCQ6IE9ic2VydmFibGU8RmllbGQgfCBudWxsPiA9IG9mKG51bGwpO1xuICBhdHRyaWJ1dGUkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZSB8IHVuZGVmaW5lZD4gPSBvZih1bmRlZmluZWQpO1xuICBtZXRhZGF0YSQ6IE9ic2VydmFibGU8SU1ldGFkYXRhIHwgdW5kZWZpbmVkPiA9IG9mKHVuZGVmaW5lZCk7XG4gIGNvbmRpdGlvbiQ6IE9ic2VydmFibGU8Tm9ybWFsaXplZENvbmRpdGlvbiB8IG51bGw+ID0gb2YobnVsbCk7XG4gIG9wZXJhdG9yT3B0aW9ucyQ6IE9ic2VydmFibGU8T3BlcmF0b3JPcHRpb25bXT4gPSBvZihbXSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55Pikge31cblxuICBwcml2YXRlIGFzc2lnbk9ic2VydmFibGVzKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZGl0aW9uJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEFiYWNSdWxlc1NlbGVjdG9ycy5lZGl0QWJhY1J1bGVDb25kaXRpb25zQnlJZCh0aGlzLl9pZCA/PyAnJykpO1xuICAgIHRoaXMuYXR0cmlidXRlJCA9IHRoaXMuY29uZGl0aW9uJC5waXBlKFxuICAgICAgZmlsdGVyKChjb25kKTogY29uZCBpcyBOb3JtYWxpemVkQ29uZGl0aW9uID0+IGNvbmQgIT09IG51bGwgJiYgY29uZCAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIG1lcmdlTWFwKChjb25kKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtvZihjb25kKSwgdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NCeUF0dHJpYnV0ZUlkKGNvbmQuYXR0cmlidXRlID8/ICcnKSldKVxuICAgICAgKSxcbiAgICAgIG1hcCgoW2NvbmQsIGtsYXNzXSkgPT4ge1xuICAgICAgICByZXR1cm4gKGtsYXNzIGFzIENsYXNzKT8uYXR0cmlidXRlcy5maW5kKChhKSA9PiBhLmlkID09PSBjb25kLmF0dHJpYnV0ZSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWVsZCQgPSB0aGlzLmF0dHJpYnV0ZSQucGlwZShcbiAgICAgIGZpbHRlcigoYXR0cik6IGF0dHIgaXMgQXR0cmlidXRlID0+IGF0dHIgIT09IHVuZGVmaW5lZCksXG4gICAgICBzd2l0Y2hNYXAoKGF0dHIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkQnlJZChhdHRyLmZpZWxkKSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm9wZXJhdG9yT3B0aW9ucyQgPSB0aGlzLmZpZWxkJC5waXBlKFxuICAgICAgZmlsdGVyKChmaWVsZCk6IGZpZWxkIGlzIEZpZWxkID0+IGZpZWxkICE9PSB1bmRlZmluZWQpLFxuICAgICAgbWFwKChmaWVsZDogRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlNUUklORyB8fCBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5LRVlXT1JEKSB7XG4gICAgICAgICAgcmV0dXJuIE9QRVJBVE9SX09QVElPTlMuZmlsdGVyKChlbCkgPT4gZWwudHlwZSA9PT0gJ3N0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLklOVEVHRVIgfHwgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuREVDSU1BTCB8fCBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5MT05HKSB7XG4gICAgICAgICAgcmV0dXJuIE9QRVJBVE9SX09QVElPTlMuZmlsdGVyKChlbCkgPT4gZWwudHlwZSA9PT0gJ251bWJlcicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBPUEVSQVRPUl9PUFRJT05TLmZpbHRlcigoZWwpID0+IGVsLnR5cGUgPT09ICdkYXRlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG9uQ2hhbmdlT3BlcmF0b3Iob3BlcmF0b3I6IE9wZXJhdG9yVHlwZSwgY29uZGl0aW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBBYmFjUnVsZXNBY3Rpb25zLnVwZGF0ZUVkaXRBYmFjUnVsZUNvbmRpdGlvblByb3BlcnR5KHtcbiAgICAgICAgY29uZGl0aW9uSWQsXG4gICAgICAgIHByb3BlcnR5OiB7IHR5cGU6ICdvcGVyYXRvcicsIHZhbHVlOiBvcGVyYXRvciB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvbkNoYW5nZVZhbHVlKGV2dDogYW55LCBjb25kaXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMudXBkYXRlRWRpdEFiYWNSdWxlQ29uZGl0aW9uUHJvcGVydHkoe1xuICAgICAgICBjb25kaXRpb25JZCxcbiAgICAgICAgcHJvcGVydHk6IHsgdHlwZTogJ3ZhbHVlJywgdmFsdWU6IGV2dC50YXJnZXQudmFsdWUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25PcGVuUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgb25DbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFuZWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkRlbGV0ZUF0dHJpYnV0ZUNvbmRpdGlvbihjb25kaXRpb25JZDogc3RyaW5nLCBwYXJlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMucmVtb3ZlRWRpdEFiYWNSdWxlQ29uZGl0aW9uRnJvbUNvbXBvc2VkKHsgY29uZGl0aW9uSWQ6IHBhcmVudElkLCBjaGlsZHJlbklkOiBjb25kaXRpb25JZCB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb25kaXRpb24kIHwgYXN5bmMgYXMgY29uZGl0aW9uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdHRyaWJ1dGUkIHwgYXN5bmMgYXMgYXR0cjsgZWxzZSBub0F0dHJpYnV0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZCQgfCBhc3luYyBhcyBmaWVsZDsgZWxzZSBub0ZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1wcnktYXR0cmlidXRlLWNvbmRpdGlvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgKm5nSWY9XCIhcmVhZG9ubHlcIlxuICAgICAgICAgIChjbGljayk9XCJvbk9wZW5QYW5lbCgpXCJcbiAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAgICAgI29yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJkcmFnX2luZGljYXRvclwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZGVsZXRlJyB8IGkxOG4gfX08L3NwYW4+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcFxuICAgICAgICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvblxuICAgICAgICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiXG4gICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJvcmlnaW5cIlxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInBhbmVsT3BlblwiXG4gICAgICAgICAgICAoYmFja2Ryb3BDbGljayk9XCJvbkNsb3NlUGFuZWwoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tcHJ5LW92ZXJsYXktcGFuZWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1wcnktb3ZlcmxheS1wYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJ5LWNvbmRpdGlvbi1kZWxldGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlQXR0cmlidXRlQ29uZGl0aW9uKGNvbmRpdGlvbi5pZCwgY29uZGl0aW9uLnBhcmVudElkKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5kZWxldGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIHUtdmlzdWFsbHktaGlkZGVuXCIgZm9yPVwiYXR0cl9uYW1lXCI+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGlkPVwiYXR0cl9uYW1lXCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJhdHRyLm5hbWVcIiByZWFkb25seSAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCB1LXZpc3VhbGx5LWhpZGRlblwiIGZvcj1cImNvbmRpdGlvbl9vcGVyYXRvclwiPj8/PzwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIGlkPVwiY29uZGl0aW9uX29wZXJhdG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIxNjBcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cIm9wZXJhdG9yT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJvcGVyYXRvclwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJ0cmFuc2xhdGlvblwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJjb25kaXRpb24ub3BlcmF0b3JcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VPcGVyYXRvcigkZXZlbnQsIGNvbmRpdGlvbi5pZClcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCB1LXZpc3VhbGx5LWhpZGRlblwiIGZvcj1cImNvbmRpdGlvbl92YWx1ZVwiPk5hbWU8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJjb25kaXRpb25fdmFsdWVcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJjb25kaXRpb24udmFsdWVcIlxuICAgICAgICAgICAgKGZvY3Vzb3V0KT1cIm9uQ2hhbmdlVmFsdWUoJGV2ZW50LCBjb25kaXRpb24uaWQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9GaWVsZD4gTG9hZGluZyBmaWVsZCAuLi48L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNub0F0dHJpYnV0ZT4gTG9hZGluZyBhdHRyaWJ1dGUgLi4uPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -55,14 +55,14 @@ export class MetadataConditionComponent {
55
55
  this.store.dispatch(AbacRulesActions.removeEditAbacRuleConditionFromComposed({ conditionId: parentId, childrenId: conditionId }));
56
56
  }
57
57
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataConditionComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
58
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataConditionComponent, selector: "pry-metadata-condition", inputs: { readonly: "readonly", id: "id" }, ngImport: i0, template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"metadata$ | async as metadata; else noMetadata\">\n <div class=\"o-pry-metadata-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n (click)=\"deleteConditionOpen = true\"\n [pryOverlay]=\"deleteConditionTpl\"\n [(overlayOpen)]=\"deleteConditionOpen\"\n >\n <pry-icon *ngIf=\"!readonly\" iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">???</span>\n </button>\n\n <ng-template #deleteConditionTpl>\n <button class=\"m-pry-overlay-item\" (click)=\"onDeleteMetadataCondition(condition.id, condition.parentId)\">\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </ng-template>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_name\">Name</label>\n <input id=\"metadata_name\" class=\"a-form-field\" type=\"text\" [value]=\"metadata.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_operator\">???</label>\n <pry-select\n id=\"metadata_operator\"\n class=\"a-pry-select\"\n [readonly]=\"readonly\"\n [style.width.px]=\"160\"\n [labelTranslate]=\"true\"\n [items]=\"operators$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">???</label>\n <input\n id=\"condition_value\"\n class=\"a-form-field\"\n [readonly]=\"readonly\"\n type=\"text\"\n [style.width.px]=\"200\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n\n <button\n type=\"button\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n class=\"a-btn a-btn--select -size-sm\"\n [pryOverlay]=\"metadataUserTpl\"\n [(overlayOpen)]=\"metadataUserOpen\"\n (click)=\"metadataUserOpen = true\"\n >\n {{ '@pry.admin.abac-rules.metadataUser' | i18n }}\n </button>\n\n <ng-template #metadataUserTpl>\n <div class=\"m-pry-overlay-wrapper\">\n <ng-container *ngFor=\"let metadataUser of metadataUsers$ | async\">\n <button class=\"m-pry-overlay-item\" (click)=\"onSelectMetadataUser(condition.id, metadataUser)\">\n {{ metadataUser.name }}\n </button>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #noMetadata> Loading ...</ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "directive", type: i3.PryOverlayDirective, selector: "[pryOverlay]", inputs: ["pryOverlay", "styleReversed", "pryOverlaySticky", "pryOverlayNoPadding", "pryOverlayPosition", "overlayOpen", "hasBackdrop"], outputs: ["overlayOpenChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataConditionComponent, selector: "pry-metadata-condition", inputs: { readonly: "readonly", id: "id" }, ngImport: i0, template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"metadata$ | async as metadata; else noMetadata\">\n <div class=\"o-pry-metadata-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n (click)=\"deleteConditionOpen = true\"\n [pryOverlay]=\"deleteConditionTpl\"\n [(overlayOpen)]=\"deleteConditionOpen\"\n >\n <pry-icon *ngIf=\"!readonly\" iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">???</span>\n </button>\n\n <ng-template #deleteConditionTpl>\n <button class=\"m-pry-overlay-item\" (click)=\"onDeleteMetadataCondition(condition.id, condition.parentId)\">\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </ng-template>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_name\">Name</label>\n <input id=\"metadata_name\" class=\"a-form-field\" type=\"text\" [value]=\"metadata.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_operator\">???</label>\n <pry-select\n id=\"metadata_operator\"\n [readonly]=\"readonly\"\n [style.width.px]=\"160\"\n [items]=\"operators$ | async\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">???</label>\n <input\n id=\"condition_value\"\n class=\"a-form-field\"\n [readonly]=\"readonly\"\n type=\"text\"\n [style.width.px]=\"200\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n\n <button\n type=\"button\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n class=\"a-btn a-btn--select -size-sm\"\n [pryOverlay]=\"metadataUserTpl\"\n [(overlayOpen)]=\"metadataUserOpen\"\n (click)=\"metadataUserOpen = true\"\n >\n {{ '@pry.admin.abac-rules.metadataUser' | i18n }}\n </button>\n\n <ng-template #metadataUserTpl>\n <div class=\"m-pry-overlay-wrapper\">\n <ng-container *ngFor=\"let metadataUser of metadataUsers$ | async\">\n <button class=\"m-pry-overlay-item\" (click)=\"onSelectMetadataUser(condition.id, metadataUser)\">\n {{ metadataUser.name }}\n </button>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #noMetadata> Loading ...</ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "elementRef"], outputs: ["searched", "cleared"] }, { kind: "directive", type: i3.PryOverlayDirective, selector: "[pryOverlay]", inputs: ["pryOverlay", "styleReversed", "pryOverlaySticky", "pryOverlayNoPadding", "pryOverlayPosition", "overlayOpen", "hasBackdrop"], outputs: ["overlayOpenChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
59
59
  }
60
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataConditionComponent, decorators: [{
61
61
  type: Component,
62
- args: [{ selector: 'pry-metadata-condition', template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"metadata$ | async as metadata; else noMetadata\">\n <div class=\"o-pry-metadata-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n (click)=\"deleteConditionOpen = true\"\n [pryOverlay]=\"deleteConditionTpl\"\n [(overlayOpen)]=\"deleteConditionOpen\"\n >\n <pry-icon *ngIf=\"!readonly\" iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">???</span>\n </button>\n\n <ng-template #deleteConditionTpl>\n <button class=\"m-pry-overlay-item\" (click)=\"onDeleteMetadataCondition(condition.id, condition.parentId)\">\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </ng-template>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_name\">Name</label>\n <input id=\"metadata_name\" class=\"a-form-field\" type=\"text\" [value]=\"metadata.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_operator\">???</label>\n <pry-select\n id=\"metadata_operator\"\n class=\"a-pry-select\"\n [readonly]=\"readonly\"\n [style.width.px]=\"160\"\n [labelTranslate]=\"true\"\n [items]=\"operators$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">???</label>\n <input\n id=\"condition_value\"\n class=\"a-form-field\"\n [readonly]=\"readonly\"\n type=\"text\"\n [style.width.px]=\"200\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n\n <button\n type=\"button\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n class=\"a-btn a-btn--select -size-sm\"\n [pryOverlay]=\"metadataUserTpl\"\n [(overlayOpen)]=\"metadataUserOpen\"\n (click)=\"metadataUserOpen = true\"\n >\n {{ '@pry.admin.abac-rules.metadataUser' | i18n }}\n </button>\n\n <ng-template #metadataUserTpl>\n <div class=\"m-pry-overlay-wrapper\">\n <ng-container *ngFor=\"let metadataUser of metadataUsers$ | async\">\n <button class=\"m-pry-overlay-item\" (click)=\"onSelectMetadataUser(condition.id, metadataUser)\">\n {{ metadataUser.name }}\n </button>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #noMetadata> Loading ...</ng-template>\n</ng-container>\n" }]
62
+ args: [{ selector: 'pry-metadata-condition', template: "<ng-container *ngIf=\"condition$ | async as condition\">\n <ng-container *ngIf=\"metadata$ | async as metadata; else noMetadata\">\n <div class=\"o-pry-metadata-condition\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n aria-pressed=\"false\"\n (click)=\"deleteConditionOpen = true\"\n [pryOverlay]=\"deleteConditionTpl\"\n [(overlayOpen)]=\"deleteConditionOpen\"\n >\n <pry-icon *ngIf=\"!readonly\" iconSvg=\"drag_indicator\"></pry-icon>\n <span class=\"u-visually-hidden\">???</span>\n </button>\n\n <ng-template #deleteConditionTpl>\n <button class=\"m-pry-overlay-item\" (click)=\"onDeleteMetadataCondition(condition.id, condition.parentId)\">\n {{ '@pry.admin.abac-rules.delete' | i18n }}\n </button>\n </ng-template>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_name\">Name</label>\n <input id=\"metadata_name\" class=\"a-form-field\" type=\"text\" [value]=\"metadata.name\" readonly />\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"metadata_operator\">???</label>\n <pry-select\n id=\"metadata_operator\"\n [readonly]=\"readonly\"\n [style.width.px]=\"160\"\n [items]=\"operators$ | async\"\n bindValue=\"operator\"\n bindLabel=\"translation\"\n [ngModel]=\"condition.operator\"\n (ngModelChange)=\"onChangeOperator($event, condition.id)\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label u-visually-hidden\" for=\"condition_value\">???</label>\n <input\n id=\"condition_value\"\n class=\"a-form-field\"\n [readonly]=\"readonly\"\n type=\"text\"\n [style.width.px]=\"200\"\n [value]=\"condition.value\"\n (focusout)=\"onChangeValue($event, condition.id)\"\n />\n </div>\n\n <button\n type=\"button\"\n aria-pressed=\"false\"\n *ngIf=\"!readonly\"\n class=\"a-btn a-btn--select -size-sm\"\n [pryOverlay]=\"metadataUserTpl\"\n [(overlayOpen)]=\"metadataUserOpen\"\n (click)=\"metadataUserOpen = true\"\n >\n {{ '@pry.admin.abac-rules.metadataUser' | i18n }}\n </button>\n\n <ng-template #metadataUserTpl>\n <div class=\"m-pry-overlay-wrapper\">\n <ng-container *ngFor=\"let metadataUser of metadataUsers$ | async\">\n <button class=\"m-pry-overlay-item\" (click)=\"onSelectMetadataUser(condition.id, metadataUser)\">\n {{ metadataUser.name }}\n </button>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #noMetadata> Loading ...</ng-template>\n</ng-container>\n" }]
63
63
  }], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { readonly: [{
64
64
  type: Input
65
65
  }], id: [{
66
66
  type: Input
67
67
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtY29uZGl0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tYWJhYy1ydWxlcy9jb21wb25lbnRzL21ldGFkYXRhLWNvbmRpdGlvbi9tZXRhZGF0YS1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvYWRtaW4vY29tcG9uZW50cy9hZG1pbi1hYmFjLXJ1bGVzL2NvbXBvbmVudHMvbWV0YWRhdGEtY29uZGl0aW9uL21ldGFkYXRhLWNvbmRpdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQU10RSxNQUFNLE9BQU8sMEJBQTBCO0lBR3JDLElBQ0ksRUFBRSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBY0QsWUFBb0IsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQXBCNUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVMxQixjQUFTLEdBQXNDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FB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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IElNZXRhZGF0YSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlbGVjdG9ycyB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZC9jb21wb25lbnRzL21ldGFkYXRhLWVkaXRvcic7XG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFiYWNSdWxlc0FjdGlvbnMgfSBmcm9tICcuLi8uLi9zdG9yZS9hYmFjLXJ1bGVzLmFjdGlvbnMnO1xuaW1wb3J0IHsgTm9ybWFsaXplZENvbmRpdGlvbiwgT3BlcmF0b3JUeXBlIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWJhYy1ydWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBBYmFjUnVsZXNTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9zdG9yZS9hYmFjLXJ1bGVzLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1tZXRhZGF0YS1jb25kaXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWV0YWRhdGEtY29uZGl0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YUNvbmRpdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGlkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWw7XG4gICAgdGhpcy5hc3NpZ25PYnNlcnZhYmxlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaWQ/OiBzdHJpbmc7XG4gIG1ldGFkYXRhJDogT2JzZXJ2YWJsZTxJTWV0YWRhdGEgfCB1bmRlZmluZWQ+ID0gb2YodW5kZWZpbmVkKTtcbiAgY29uZGl0aW9uJDogT2JzZXJ2YWJsZTxOb3JtYWxpemVkQ29uZGl0aW9uIHwgbnVsbD4gPSBvZihudWxsKTtcbiAgZGVsZXRlQ29uZGl0aW9uT3BlbiA9IGZhbHNlO1xuICBtZXRhZGF0YVVzZXJzJDogT2JzZXJ2YWJsZTxJTWV0YWRhdGFbXT47XG4gIG1ldGFkYXRhVXNlck9wZW4gPSBmYWxzZTtcblxuICBvcGVyYXRvcnMkID0gb2YoW1xuICAgIHsgb3BlcmF0b3I6ICdFUVVBTFMnLCB0cmFuc2xhdGlvbjogJ0Bwcnkuc2VhcmNoLm9wZXJhdG9yLmVxdWFsc1N0cmluZycgfSxcbiAgICB7IG9wZXJhdG9yOiAnTk9UX0VRVUFMUycsIHRyYW5zbGF0aW9uOiAnQHByeS5zZWFyY2gub3BlcmF0b3Iubm90RXF1YWxzU3RyaW5nJyB9XG4gIF0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4pIHtcbiAgICB0aGlzLm1ldGFkYXRhVXNlcnMkID0gdGhpcy5zdG9yZS5zZWxlY3QoTWV0YWRhdGFTZWxlY3RvcnMudXNlclByb2ZpbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25PYnNlcnZhYmxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmRpdGlvbiQgPSB0aGlzLnN0b3JlLnNlbGVjdChBYmFjUnVsZXNTZWxlY3RvcnMuZWRpdEFiYWNSdWxlQ29uZGl0aW9uc0J5SWQodGhpcy5faWQgPz8gJycpKTtcbiAgICB0aGlzLm1ldGFkYXRhJCA9IHRoaXMuY29uZGl0aW9uJC5waXBlKFxuICAgICAgZmlsdGVyKChjb25kKTogY29uZCBpcyBOb3JtYWxpemVkQ29uZGl0aW9uID0+IGNvbmQgIT09IG51bGwgJiYgY29uZCAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIHN3aXRjaE1hcCgoY29uZDogTm9ybWFsaXplZENvbmRpdGlvbikgPT5cbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoTWV0YWRhdGFTZWxlY3RvcnMuc2VsZWN0TWV0YWRhdGFCeUlkKGNvbmQubWV0YWRhdGEgPz8gJycpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBvbkNoYW5nZU9wZXJhdG9yKG9wZXJhdG9yOiBPcGVyYXRvclR5cGUsIGNvbmRpdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgQWJhY1J1bGVzQWN0aW9ucy51cGRhdGVFZGl0QWJhY1J1bGVDb25kaXRpb25Qcm9wZXJ0eSh7XG4gICAgICAgIGNvbmRpdGlvbklkLFxuICAgICAgICBwcm9wZXJ0eTogeyB0eXBlOiAnb3BlcmF0b3InLCB2YWx1ZTogb3BlcmF0b3IgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25DaGFuZ2VWYWx1ZShldnQ6IGFueSwgY29uZGl0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBBYmFjUnVsZXNBY3Rpb25zLnVwZGF0ZUVkaXRBYmFjUnVsZUNvbmRpdGlvblByb3BlcnR5KHtcbiAgICAgICAgY29uZGl0aW9uSWQsXG4gICAgICAgIHByb3BlcnR5OiB7IHR5cGU6ICd2YWx1ZScsIHZhbHVlOiBldnQudGFyZ2V0LnZhbHVlIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG9uU2VsZWN0TWV0YWRhdGFVc2VyKGNvbmRpdGlvbklkOiBzdHJpbmcsIG1ldGFkYXRhOiBJTWV0YWRhdGEpIHtcbiAgICB0aGlzLm1ldGFkYXRhVXNlck9wZW4gPSBmYWxzZTtcbiAgICBjb25zdCB2YWx1ZSA9IGBcXCR7dXNlci5tZXRhZGF0YSgnJHttZXRhZGF0YS5uYW1lfScpfWA7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMudXBkYXRlRWRpdEFiYWNSdWxlQ29uZGl0aW9uUHJvcGVydHkoe1xuICAgICAgICBjb25kaXRpb25JZCxcbiAgICAgICAgcHJvcGVydHk6IHsgdHlwZTogJ3ZhbHVlJywgdmFsdWUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25EZWxldGVNZXRhZGF0YUNvbmRpdGlvbihjb25kaXRpb25JZDogc3RyaW5nLCBwYXJlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGVDb25kaXRpb25PcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMucmVtb3ZlRWRpdEFiYWNSdWxlQ29uZGl0aW9uRnJvbUNvbXBvc2VkKHsgY29uZGl0aW9uSWQ6IHBhcmVudElkLCBjaGlsZHJlbklkOiBjb25kaXRpb25JZCB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb25kaXRpb24kIHwgYXN5bmMgYXMgY29uZGl0aW9uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXRhZGF0YSQgfCBhc3luYyBhcyBtZXRhZGF0YTsgZWxzZSBub01ldGFkYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tcHJ5LW1ldGFkYXRhLWNvbmRpdGlvblwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29uZGl0aW9uT3BlbiA9IHRydWVcIlxuICAgICAgICBbcHJ5T3ZlcmxheV09XCJkZWxldGVDb25kaXRpb25UcGxcIlxuICAgICAgICBbKG92ZXJsYXlPcGVuKV09XCJkZWxldGVDb25kaXRpb25PcGVuXCJcbiAgICAgID5cbiAgICAgICAgPHByeS1pY29uICpuZ0lmPVwiIXJlYWRvbmx5XCIgaWNvblN2Zz1cImRyYWdfaW5kaWNhdG9yXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPj8/Pzwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2RlbGV0ZUNvbmRpdGlvblRwbD5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tcHJ5LW92ZXJsYXktaXRlbVwiIChjbGljayk9XCJvbkRlbGV0ZU1ldGFkYXRhQ29uZGl0aW9uKGNvbmRpdGlvbi5pZCwgY29uZGl0aW9uLnBhcmVudElkKVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZGVsZXRlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgdS12aXN1YWxseS1oaWRkZW5cIiBmb3I9XCJtZXRhZGF0YV9uYW1lXCI+TmFtZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cIm1ldGFkYXRhX25hbWVcIiBjbGFzcz1cImEtZm9ybS1maWVsZFwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cIm1ldGFkYXRhLm5hbWVcIiByZWFkb25seSAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCB1LXZpc3VhbGx5LWhpZGRlblwiIGZvcj1cIm1ldGFkYXRhX29wZXJhdG9yXCI+Pz8/PC9sYWJlbD5cbiAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICBpZD1cIm1ldGFkYXRhX29wZXJhdG9yXCJcbiAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiMTYwXCJcbiAgICAgICAgICBbbGFiZWxUcmFuc2xhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2l0ZW1zXT1cIm9wZXJhdG9ycyQgfCBhc3luY1wiXG4gICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgYmluZFZhbHVlPVwib3BlcmF0b3JcIlxuICAgICAgICAgIGJpbmRMYWJlbD1cInRyYW5zbGF0aW9uXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJjb25kaXRpb24ub3BlcmF0b3JcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlT3BlcmF0b3IoJGV2ZW50LCBjb25kaXRpb24uaWQpXCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgdS12aXN1YWxseS1oaWRkZW5cIiBmb3I9XCJjb25kaXRpb25fdmFsdWVcIj4/Pz88L2xhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cImNvbmRpdGlvbl92YWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIyMDBcIlxuICAgICAgICAgIFt2YWx1ZV09XCJjb25kaXRpb24udmFsdWVcIlxuICAgICAgICAgIChmb2N1c291dCk9XCJvbkNoYW5nZVZhbHVlKCRldmVudCwgY29uZGl0aW9uLmlkKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAqbmdJZj1cIiFyZWFkb25seVwiXG4gICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlbGVjdCAtc2l6ZS1zbVwiXG4gICAgICAgIFtwcnlPdmVybGF5XT1cIm1ldGFkYXRhVXNlclRwbFwiXG4gICAgICAgIFsob3ZlcmxheU9wZW4pXT1cIm1ldGFkYXRhVXNlck9wZW5cIlxuICAgICAgICAoY2xpY2spPVwibWV0YWRhdGFVc2VyT3BlbiA9IHRydWVcIlxuICAgICAgPlxuICAgICAgICB7eyAnQHByeS5hZG1pbi5hYmFjLXJ1bGVzLm1ldGFkYXRhVXNlcicgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNtZXRhZGF0YVVzZXJUcGw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLXByeS1vdmVybGF5LXdyYXBwZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZXRhZGF0YVVzZXIgb2YgbWV0YWRhdGFVc2VycyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tcHJ5LW92ZXJsYXktaXRlbVwiIChjbGljayk9XCJvblNlbGVjdE1ldGFkYXRhVXNlcihjb25kaXRpb24uaWQsIG1ldGFkYXRhVXNlcilcIj5cbiAgICAgICAgICAgICAge3sgbWV0YWRhdGFVc2VyLm5hbWUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI25vTWV0YWRhdGE+IExvYWRpbmcgLi4uPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtY29uZGl0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tYWJhYy1ydWxlcy9jb21wb25lbnRzL21ldGFkYXRhLWNvbmRpdGlvbi9tZXRhZGF0YS1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvYWRtaW4vY29tcG9uZW50cy9hZG1pbi1hYmFjLXJ1bGVzL2NvbXBvbmVudHMvbWV0YWRhdGEtY29uZGl0aW9uL21ldGFkYXRhLWNvbmRpdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQU10RSxNQUFNLE9BQU8sMEJBQTBCO0lBR3JDLElBQ0ksRUFBRSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBY0QsWUFBb0IsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQXBCNUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVMxQixjQUFTLEdBQXNDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FB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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IElNZXRhZGF0YSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlbGVjdG9ycyB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZC9jb21wb25lbnRzL21ldGFkYXRhLWVkaXRvcic7XG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFiYWNSdWxlc0FjdGlvbnMgfSBmcm9tICcuLi8uLi9zdG9yZS9hYmFjLXJ1bGVzLmFjdGlvbnMnO1xuaW1wb3J0IHsgTm9ybWFsaXplZENvbmRpdGlvbiwgT3BlcmF0b3JUeXBlIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWJhYy1ydWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBBYmFjUnVsZXNTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9zdG9yZS9hYmFjLXJ1bGVzLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1tZXRhZGF0YS1jb25kaXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWV0YWRhdGEtY29uZGl0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YUNvbmRpdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGlkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWw7XG4gICAgdGhpcy5hc3NpZ25PYnNlcnZhYmxlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaWQ/OiBzdHJpbmc7XG4gIG1ldGFkYXRhJDogT2JzZXJ2YWJsZTxJTWV0YWRhdGEgfCB1bmRlZmluZWQ+ID0gb2YodW5kZWZpbmVkKTtcbiAgY29uZGl0aW9uJDogT2JzZXJ2YWJsZTxOb3JtYWxpemVkQ29uZGl0aW9uIHwgbnVsbD4gPSBvZihudWxsKTtcbiAgZGVsZXRlQ29uZGl0aW9uT3BlbiA9IGZhbHNlO1xuICBtZXRhZGF0YVVzZXJzJDogT2JzZXJ2YWJsZTxJTWV0YWRhdGFbXT47XG4gIG1ldGFkYXRhVXNlck9wZW4gPSBmYWxzZTtcblxuICBvcGVyYXRvcnMkID0gb2YoW1xuICAgIHsgb3BlcmF0b3I6ICdFUVVBTFMnLCB0cmFuc2xhdGlvbjogJ0Bwcnkuc2VhcmNoLm9wZXJhdG9yLmVxdWFsc1N0cmluZycgfSxcbiAgICB7IG9wZXJhdG9yOiAnTk9UX0VRVUFMUycsIHRyYW5zbGF0aW9uOiAnQHByeS5zZWFyY2gub3BlcmF0b3Iubm90RXF1YWxzU3RyaW5nJyB9XG4gIF0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4pIHtcbiAgICB0aGlzLm1ldGFkYXRhVXNlcnMkID0gdGhpcy5zdG9yZS5zZWxlY3QoTWV0YWRhdGFTZWxlY3RvcnMudXNlclByb2ZpbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25PYnNlcnZhYmxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmRpdGlvbiQgPSB0aGlzLnN0b3JlLnNlbGVjdChBYmFjUnVsZXNTZWxlY3RvcnMuZWRpdEFiYWNSdWxlQ29uZGl0aW9uc0J5SWQodGhpcy5faWQgPz8gJycpKTtcbiAgICB0aGlzLm1ldGFkYXRhJCA9IHRoaXMuY29uZGl0aW9uJC5waXBlKFxuICAgICAgZmlsdGVyKChjb25kKTogY29uZCBpcyBOb3JtYWxpemVkQ29uZGl0aW9uID0+IGNvbmQgIT09IG51bGwgJiYgY29uZCAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIHN3aXRjaE1hcCgoY29uZDogTm9ybWFsaXplZENvbmRpdGlvbikgPT5cbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoTWV0YWRhdGFTZWxlY3RvcnMuc2VsZWN0TWV0YWRhdGFCeUlkKGNvbmQubWV0YWRhdGEgPz8gJycpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBvbkNoYW5nZU9wZXJhdG9yKG9wZXJhdG9yOiBPcGVyYXRvclR5cGUsIGNvbmRpdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgQWJhY1J1bGVzQWN0aW9ucy51cGRhdGVFZGl0QWJhY1J1bGVDb25kaXRpb25Qcm9wZXJ0eSh7XG4gICAgICAgIGNvbmRpdGlvbklkLFxuICAgICAgICBwcm9wZXJ0eTogeyB0eXBlOiAnb3BlcmF0b3InLCB2YWx1ZTogb3BlcmF0b3IgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25DaGFuZ2VWYWx1ZShldnQ6IGFueSwgY29uZGl0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBBYmFjUnVsZXNBY3Rpb25zLnVwZGF0ZUVkaXRBYmFjUnVsZUNvbmRpdGlvblByb3BlcnR5KHtcbiAgICAgICAgY29uZGl0aW9uSWQsXG4gICAgICAgIHByb3BlcnR5OiB7IHR5cGU6ICd2YWx1ZScsIHZhbHVlOiBldnQudGFyZ2V0LnZhbHVlIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG9uU2VsZWN0TWV0YWRhdGFVc2VyKGNvbmRpdGlvbklkOiBzdHJpbmcsIG1ldGFkYXRhOiBJTWV0YWRhdGEpIHtcbiAgICB0aGlzLm1ldGFkYXRhVXNlck9wZW4gPSBmYWxzZTtcbiAgICBjb25zdCB2YWx1ZSA9IGBcXCR7dXNlci5tZXRhZGF0YSgnJHttZXRhZGF0YS5uYW1lfScpfWA7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMudXBkYXRlRWRpdEFiYWNSdWxlQ29uZGl0aW9uUHJvcGVydHkoe1xuICAgICAgICBjb25kaXRpb25JZCxcbiAgICAgICAgcHJvcGVydHk6IHsgdHlwZTogJ3ZhbHVlJywgdmFsdWUgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25EZWxldGVNZXRhZGF0YUNvbmRpdGlvbihjb25kaXRpb25JZDogc3RyaW5nLCBwYXJlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGVDb25kaXRpb25PcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIEFiYWNSdWxlc0FjdGlvbnMucmVtb3ZlRWRpdEFiYWNSdWxlQ29uZGl0aW9uRnJvbUNvbXBvc2VkKHsgY29uZGl0aW9uSWQ6IHBhcmVudElkLCBjaGlsZHJlbklkOiBjb25kaXRpb25JZCB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb25kaXRpb24kIHwgYXN5bmMgYXMgY29uZGl0aW9uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXRhZGF0YSQgfCBhc3luYyBhcyBtZXRhZGF0YTsgZWxzZSBub01ldGFkYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tcHJ5LW1ldGFkYXRhLWNvbmRpdGlvblwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29uZGl0aW9uT3BlbiA9IHRydWVcIlxuICAgICAgICBbcHJ5T3ZlcmxheV09XCJkZWxldGVDb25kaXRpb25UcGxcIlxuICAgICAgICBbKG92ZXJsYXlPcGVuKV09XCJkZWxldGVDb25kaXRpb25PcGVuXCJcbiAgICAgID5cbiAgICAgICAgPHByeS1pY29uICpuZ0lmPVwiIXJlYWRvbmx5XCIgaWNvblN2Zz1cImRyYWdfaW5kaWNhdG9yXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPj8/Pzwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2RlbGV0ZUNvbmRpdGlvblRwbD5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tcHJ5LW92ZXJsYXktaXRlbVwiIChjbGljayk9XCJvbkRlbGV0ZU1ldGFkYXRhQ29uZGl0aW9uKGNvbmRpdGlvbi5pZCwgY29uZGl0aW9uLnBhcmVudElkKVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LmFkbWluLmFiYWMtcnVsZXMuZGVsZXRlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgdS12aXN1YWxseS1oaWRkZW5cIiBmb3I9XCJtZXRhZGF0YV9uYW1lXCI+TmFtZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cIm1ldGFkYXRhX25hbWVcIiBjbGFzcz1cImEtZm9ybS1maWVsZFwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cIm1ldGFkYXRhLm5hbWVcIiByZWFkb25seSAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCB1LXZpc3VhbGx5LWhpZGRlblwiIGZvcj1cIm1ldGFkYXRhX29wZXJhdG9yXCI+Pz8/PC9sYWJlbD5cbiAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICBpZD1cIm1ldGFkYXRhX29wZXJhdG9yXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIxNjBcIlxuICAgICAgICAgIFtpdGVtc109XCJvcGVyYXRvcnMkIHwgYXN5bmNcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cIm9wZXJhdG9yXCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJ0cmFuc2xhdGlvblwiXG4gICAgICAgICAgW25nTW9kZWxdPVwiY29uZGl0aW9uLm9wZXJhdG9yXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZU9wZXJhdG9yKCRldmVudCwgY29uZGl0aW9uLmlkKVwiXG4gICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIHUtdmlzdWFsbHktaGlkZGVuXCIgZm9yPVwiY29uZGl0aW9uX3ZhbHVlXCI+Pz8/PC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgaWQ9XCJjb25kaXRpb25fdmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiMjAwXCJcbiAgICAgICAgICBbdmFsdWVdPVwiY29uZGl0aW9uLnZhbHVlXCJcbiAgICAgICAgICAoZm9jdXNvdXQpPVwib25DaGFuZ2VWYWx1ZSgkZXZlbnQsIGNvbmRpdGlvbi5pZClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgKm5nSWY9XCIhcmVhZG9ubHlcIlxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWxlY3QgLXNpemUtc21cIlxuICAgICAgICBbcHJ5T3ZlcmxheV09XCJtZXRhZGF0YVVzZXJUcGxcIlxuICAgICAgICBbKG92ZXJsYXlPcGVuKV09XCJtZXRhZGF0YVVzZXJPcGVuXCJcbiAgICAgICAgKGNsaWNrKT1cIm1ldGFkYXRhVXNlck9wZW4gPSB0cnVlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ0BwcnkuYWRtaW4uYWJhYy1ydWxlcy5tZXRhZGF0YVVzZXInIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbWV0YWRhdGFVc2VyVHBsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1wcnktb3ZlcmxheS13cmFwcGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWV0YWRhdGFVc2VyIG9mIG1ldGFkYXRhVXNlcnMkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtLXByeS1vdmVybGF5LWl0ZW1cIiAoY2xpY2spPVwib25TZWxlY3RNZXRhZGF0YVVzZXIoY29uZGl0aW9uLmlkLCBtZXRhZGF0YVVzZXIpXCI+XG4gICAgICAgICAgICAgIHt7IG1ldGFkYXRhVXNlci5uYW1lIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNub01ldGFkYXRhPiBMb2FkaW5nIC4uLjwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==