@provoly/dashboard 0.13.6 → 0.13.8

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 (160) hide show
  1. package/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.d.ts +4 -4
  2. package/admin/components/admin-dataset/store/admin-dataset.actions.d.ts +3 -3
  3. package/admin/components/admin-dataset/store/admin-dataset.effects.d.ts +2 -2
  4. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-form/admin-abac-rules-form.component.mjs +1 -1
  5. package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +1 -1
  6. package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +1 -1
  7. package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +1 -1
  8. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +3 -3
  9. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +1 -1
  10. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +3 -3
  11. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +1 -1
  12. package/esm2022/admin/components/admin-dataset/store/admin-dataset.actions.mjs +1 -1
  13. package/esm2022/admin/components/admin-dataset/store/admin-dataset.effects.mjs +5 -3
  14. package/esm2022/admin/components/admin-environment/admin-environment-form/admin-environment-form.component.mjs +1 -1
  15. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +1 -1
  16. package/esm2022/admin/components/admin-links/admin-links-new/admin-links-new.component.mjs +1 -1
  17. package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +1 -1
  18. package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +1 -1
  19. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +1 -1
  20. package/esm2022/filters/list/list-filter.component.mjs +1 -1
  21. package/esm2022/import/components/import.component.mjs +1 -1
  22. package/esm2022/lib/core/components/overlay/dialog-confirm.component.mjs +5 -12
  23. package/esm2022/lib/core/components/overlay/overlay.module.mjs +5 -4
  24. package/esm2022/lib/core/components/select/select.component.mjs +7 -4
  25. package/esm2022/lib/core/components/share/share.component.mjs +3 -3
  26. package/esm2022/lib/core/model/admin-api.model.mjs +1 -1
  27. package/esm2022/lib/core/model/dataset.interface.mjs +1 -1
  28. package/esm2022/lib/core/model/display-options.interface.mjs +4 -2
  29. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  30. package/esm2022/lib/core/store/config/config.actions.mjs +2 -1
  31. package/esm2022/lib/core/store/config/config.effects.mjs +25 -4
  32. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +1 -1
  33. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +1 -1
  34. package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
  35. package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +1 -1
  36. package/esm2022/lib/core/store/data-source/data-source.service.mjs +1 -1
  37. package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +3 -7
  38. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +1 -1
  39. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.mjs +1 -1
  40. package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +6 -3
  41. package/esm2022/lib/dashboard/public-api.mjs +2 -1
  42. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -3
  43. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +25 -11
  44. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +2 -11
  45. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +3 -5
  46. package/esm2022/lib/dashboard/store/manifest-utils.class.mjs +11 -0
  47. package/esm2022/lib/dashboard/store/manifest.service.mjs +3 -10
  48. package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +5 -4
  49. package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +5 -8
  50. package/esm2022/pipeline-components/filter/component/filter.component.mjs +1 -1
  51. package/esm2022/pipeline-components/input-datasource/component/input-datasource.component.mjs +1 -1
  52. package/esm2022/pipeline-components/output-dataset/component/output-dataset.component.mjs +1 -1
  53. package/esm2022/presentation/components/presentation.component.mjs +5 -42
  54. package/esm2022/presentation/presentation.module.mjs +8 -4
  55. package/esm2022/restitution/components/restitution/restitution.component.mjs +1 -1
  56. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +9 -65
  57. package/esm2022/search/components/save-query/save-query.component.mjs +5 -8
  58. package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +1 -1
  59. package/esm2022/search/search-mono-class/components/search-mono-class/search-mono-class.component.mjs +1 -1
  60. package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +1 -1
  61. package/esm2022/search/search-multi-class/components/multi-class-condition/multi-class-condition.component.mjs +1 -1
  62. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +1 -1
  63. package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +3 -3
  64. package/esm2022/toolbox/components/refresh-datasets/refresh-datasets.component.mjs +3 -3
  65. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +5 -16
  66. package/esm2022/toolbox/toolbox.module.mjs +8 -4
  67. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +3 -3
  68. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +1 -1
  69. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +3 -3
  70. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +1 -1
  71. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +46 -23
  72. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +4 -2
  73. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +4 -2
  74. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +4 -23
  75. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +1 -1
  76. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -3
  77. package/fesm2022/provoly-dashboard-admin.mjs +19 -17
  78. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  79. package/fesm2022/provoly-dashboard-filters-list.mjs +1 -1
  80. package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -1
  81. package/fesm2022/provoly-dashboard-import.mjs +1 -1
  82. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  83. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs +1 -1
  84. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs.map +1 -1
  85. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs +1 -1
  86. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs.map +1 -1
  87. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs +1 -1
  88. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs.map +1 -1
  89. package/fesm2022/provoly-dashboard-pipeline.mjs +4 -7
  90. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  91. package/fesm2022/provoly-dashboard-presentation.mjs +11 -44
  92. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  93. package/fesm2022/provoly-dashboard-restitution.mjs +10 -66
  94. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  95. package/fesm2022/provoly-dashboard-search.mjs +8 -11
  96. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  97. package/fesm2022/provoly-dashboard-supervision.mjs +1 -1
  98. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  99. package/fesm2022/provoly-dashboard-toolbox.mjs +14 -21
  100. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  101. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +2 -2
  102. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  103. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +1 -1
  104. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  105. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +2 -2
  106. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  107. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +1 -1
  108. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  109. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +57 -111
  110. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  111. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +1 -1
  112. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  113. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -2
  114. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  115. package/fesm2022/provoly-dashboard.mjs +159 -138
  116. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  117. package/lib/core/components/overlay/overlay.module.d.ts +2 -1
  118. package/lib/core/components/select/select.component.d.ts +2 -1
  119. package/lib/core/model/admin-api.model.d.ts +1 -1
  120. package/lib/core/model/dataset.interface.d.ts +0 -10
  121. package/lib/core/model/display-options.interface.d.ts +1 -0
  122. package/lib/core/model/manifest.interface.d.ts +2 -0
  123. package/lib/core/store/config/config.actions.d.ts +5 -0
  124. package/lib/core/store/config/config.effects.d.ts +6 -1
  125. package/lib/core/store/data-source/data-source.actions.d.ts +2 -2
  126. package/lib/core/store/data-source/data-source.effects.d.ts +2 -3
  127. package/lib/core/store/data-source/data-source.model.d.ts +11 -3
  128. package/lib/core/store/data-source/data-source.reducer.d.ts +2 -2
  129. package/lib/core/store/data-source/data-source.selectors.d.ts +5 -5
  130. package/lib/core/store/data-source/data-source.service.d.ts +4 -4
  131. package/lib/dashboard/components/context-menu/context-menu.component.d.ts +0 -1
  132. package/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.d.ts +1 -2
  133. package/lib/dashboard/components/widgets/settings/settings.component.d.ts +1 -0
  134. package/lib/dashboard/public-api.d.ts +1 -0
  135. package/lib/dashboard/store/dashboard.actions.d.ts +6 -17
  136. package/lib/dashboard/store/dashboard.effects.d.ts +6 -7
  137. package/lib/dashboard/store/dashboard.reducers.d.ts +1 -5
  138. package/lib/dashboard/store/dashboard.selectors.d.ts +0 -57
  139. package/lib/dashboard/store/manifest-utils.class.d.ts +4 -0
  140. package/lib/dashboard/store/manifest.service.d.ts +0 -1
  141. package/package.json +7 -7
  142. package/pipeline/components/pipeline-list/pipeline-list.component.d.ts +1 -2
  143. package/presentation/components/presentation.component.d.ts +0 -5
  144. package/presentation/presentation.module.d.ts +2 -1
  145. package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +4 -15
  146. package/schematics/ng-update/version-0-13/index.js +18 -1
  147. package/schematics/ng-update/version-0-13/index.js.map +1 -1
  148. package/schematics/ng-update/version-0-13/index.spec.js +8 -1
  149. package/schematics/ng-update/version-0-13/index.spec.js.map +1 -1
  150. package/search/components/save-query/save-query.component.d.ts +1 -2
  151. package/styles/components/_m-tooltip.scss +18 -2
  152. package/styles-theme/components-theme/_m-tooltip.theme.scss +0 -12
  153. package/toolbox/components/select-grid-layout/select-grid-layout.component.d.ts +0 -4
  154. package/toolbox/toolbox.module.d.ts +2 -1
  155. package/widgets/widget-map/component/widget-map.component.d.ts +8 -3
  156. package/widgets/widget-map/i18n/en.translations.d.ts +2 -0
  157. package/widgets/widget-map/i18n/fr.translations.d.ts +2 -0
  158. package/widgets/widget-map/interaction/interaction-manager.class.d.ts +3 -5
  159. package/esm2022/widgets/widget-map/search-bar/search-bar.control.mjs +0 -66
  160. package/widgets/widget-map/search-bar/search-bar.control.d.ts +0 -27
@@ -2,7 +2,7 @@ import { OnDestroy, OnInit } from '@angular/core';
2
2
  import { FormBuilder, FormGroup } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { Store } from '@ngrx/store';
5
- import { Associations, Dataset, DatasetMetadata, IMetadata, SubscriptionnerDirective } from '@provoly/dashboard';
5
+ import { Associations, Dataset, IMetadata, MetadataValue, SubscriptionnerDirective } from '@provoly/dashboard';
6
6
  import { Observable, Subscription } from 'rxjs';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class AdminSelectDatasetComponent extends SubscriptionnerDirective implements OnInit, OnDestroy {
@@ -17,7 +17,7 @@ export declare class AdminSelectDatasetComponent extends SubscriptionnerDirectiv
17
17
  sub: Subscription;
18
18
  currentTypeTranslation: string;
19
19
  tab: number;
20
- datasetMetadata$: Observable<DatasetMetadata[]>;
20
+ datasetMetadata$: Observable<MetadataValue[]>;
21
21
  metadata$: Observable<IMetadata[]>;
22
22
  availableMetadata$?: Observable<IMetadata[]>;
23
23
  form: FormGroup;
@@ -29,8 +29,8 @@ export declare class AdminSelectDatasetComponent extends SubscriptionnerDirectiv
29
29
  closePanel(): void;
30
30
  addDatasetMetadata(): void;
31
31
  onMetaChange(metadata: IMetadata): void;
32
- removeMetadata(metadata: DatasetMetadata): void;
33
- editMetadata(currentMetadata: DatasetMetadata): void;
32
+ removeMetadata(metadata: MetadataValue): void;
33
+ editMetadata(currentMetadata: MetadataValue): void;
34
34
  switch(number: number): void;
35
35
  static ɵfac: i0.ɵɵFactoryDeclaration<AdminSelectDatasetComponent, never>;
36
36
  static ɵcmp: i0.ɵɵComponentDeclaration<AdminSelectDatasetComponent, "pry-admin-select-dataset", never, {}, {}, never, never, false, never>;
@@ -1,4 +1,4 @@
1
- import { DatasetMetadata } from '@provoly/dashboard';
1
+ import { MetadataValue } from '@provoly/dashboard';
2
2
  export declare const AdminDatasetActions: {
3
3
  isEditable: import("@ngrx/store").ActionCreator<"[Admin/Datasource] Is editable", (props: {
4
4
  editable: boolean;
@@ -11,9 +11,9 @@ export declare const AdminDatasetActions: {
11
11
  datasetId: string;
12
12
  } & import("@ngrx/store/src/models").TypedAction<"[Admin/Datasource] Load Metadata of selected Datasets">>;
13
13
  loadDatasetMetadataSuccess: import("@ngrx/store").ActionCreator<"[Admin/Datasource] Load Metadata of selected Datasets Success", (props: {
14
- metadata: DatasetMetadata[];
14
+ metadata: MetadataValue[];
15
15
  }) => {
16
- metadata: DatasetMetadata[];
16
+ metadata: MetadataValue[];
17
17
  } & import("@ngrx/store/src/models").TypedAction<"[Admin/Datasource] Load Metadata of selected Datasets Success">>;
18
18
  loadDatasetMetadataFailure: import("@ngrx/store").ActionCreator<"[Admin/Datasource] Load Metadata of selected Datasets Failure", (props: {
19
19
  error: any;
@@ -9,7 +9,7 @@ export declare class AdminDatasetEffects {
9
9
  } & import("@ngrx/store/src/models").TypedAction<"[Admin/Datasource] Add Metadata of selected Datasets Success">) | ({
10
10
  error: any;
11
11
  } & import("@ngrx/store/src/models").TypedAction<"[Admin/Datasource] Add Metadata of selected Datasets Failure">)> & import("@ngrx/effects").CreateEffectMetadata;
12
- addDatasetMetadataSuccess$: import("rxjs").Observable<({
12
+ addDatasetMetadataSuccess$: import("rxjs").Observable<import("@ngrx/store/src/models").TypedAction<"[Dataset] load datasets"> | ({
13
13
  id: string;
14
14
  } & import("@ngrx/store/src/models").TypedAction<"[Dataset] Get Dataset by ID">) | ({
15
15
  editable: boolean;
@@ -19,7 +19,7 @@ export declare class AdminDatasetEffects {
19
19
  } & import("@ngrx/store/src/models").TypedAction<"[Admin/Datasource] Delete Metadata of selected Datasets Success">) | ({
20
20
  error: any;
21
21
  } & import("@ngrx/store/src/models").TypedAction<"[Admin/Datasource] Delete Metadata of selected Datasets Failure">)> & import("@ngrx/effects").CreateEffectMetadata;
22
- deleteDatasetMetadataSuccess$: import("rxjs").Observable<({
22
+ deleteDatasetMetadataSuccess$: import("rxjs").Observable<import("@ngrx/store/src/models").TypedAction<"[Dataset] load datasets"> | ({
23
23
  id: string;
24
24
  } & import("@ngrx/store/src/models").TypedAction<"[Dataset] Get Dataset by ID">) | ({
25
25
  editable: boolean;
@@ -44,7 +44,7 @@ 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.1.6", 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.1.6", 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", "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.1.6", 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" }] }); }
48
48
  }
49
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminAbacRulesFormComponent, decorators: [{
50
50
  type: Component,
@@ -68,7 +68,7 @@ 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.1.6", ngImport: i0, type: AttributeConditionComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", 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", "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.1.6", 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" }] }); }
72
72
  }
73
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AttributeConditionComponent, decorators: [{
74
74
  type: Component,
@@ -56,7 +56,7 @@ export class MetadataConditionComponent {
56
56
  this.store.dispatch(AbacRulesActions.removeEditAbacRuleConditionFromComposed({ conditionId: parentId, childrenId: conditionId }));
57
57
  }
58
58
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataConditionComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
59
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", 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", "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" }] }); }
59
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", 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" }] }); }
60
60
  }
61
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataConditionComponent, decorators: [{
62
62
  type: Component,
@@ -133,7 +133,7 @@ export class AdminClassesCustomizeSymbolComponent extends SubscriptionnerDirecti
133
133
  this.store.dispatch(ConfigActions.updateIcons({ definitions: { [this.currentClass?.id ?? '']: this.definitions } }));
134
134
  }
135
135
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminClassesCustomizeSymbolComponent, deps: [{ token: i1.PryI18nService }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Component }); }
136
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminClassesCustomizeSymbolComponent, selector: "pry-admin-classes-customize-symbol", inputs: { currentClass: "currentClass" }, outputs: { backPressed: "backPressed" }, usesInheritance: true, ngImport: i0, template: "<ul class=\"m-rule-wrapper\">\n <li\n *ngFor=\"let definition of definitions; let i = index\"\n [class.m-rule--default]=\"definition.isDefault\"\n class=\"m-rule\"\n >\n <div class=\"m-rule__header\">\n <h3 class=\"a-h3\">\n {{ '@pry.admin.rule' | i18n: { id: i + 1 } }}\n <span>{{ definition.isDefault ? ('@pry.admin.defaultRule' | i18n) : '' }}</span>\n </h3>\n\n <div *ngIf=\"!definition.isDefault\" class=\"m-rule__actions\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [class.-disabled]=\"i <= 1\"\n [disabled]=\"i <= 1\"\n (click)=\"move(i, i - 1)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [class.-disabled]=\"i >= definitions.length - 1\"\n [disabled]=\"i >= definitions.length - 1\"\n (click)=\"move(i, i + 1)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"removeRule(i)\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"delete\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.delete' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div>\n <pry-select-image [iconUrl]=\"definition.iconUrl\" (changed)=\"changeForImage($event, i)\"></pry-select-image>\n\n <ng-container *ngIf=\"definition.isDefault\">\n <div class=\"m-form-label-field m-rule__display-mode\">\n <label class=\"a-label\" for=\"size\">{{ '@pry.admin.size' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSize($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"sizes\"\n [ngModel]=\"definition.iconSize[0]\"\n [labelTranslate]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"a-pry-select\"\n id=\"size\"\n ></pry-select>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!definition.isDefault\">\n <div class=\"m-form-label-field m-rule__display-mode\">\n <label class=\"a-label\" for=\"display_mode\">{{ '@pry.admin.displayModeImage' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePosition($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"positions\"\n [ngModel]=\"definition.position\"\n [labelTranslate]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"a-pry-select\"\n id=\"display_mode\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"!!definition.rule\" (click)=\"toggleRule(i)\">{{\n '@pry.admin.classes.condition' | i18n\n }}</pry-checkbox>\n </div>\n </ng-container>\n\n <div *ngIf=\"!!definition.rule && !definition.isDefault\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"classes_attrname\">{{ '@pry.admin.classes.attrName' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAttrName($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"fieldsForClass\"\n [ngModel]=\"definition.rule.attributeName\"\n [labelTranslate]=\"true\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"classes_attrname\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"classes_operation\">{{ '@pry.admin.classes.operation' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations\"\n [ngModel]=\"definition.rule.operation\"\n [labelTranslate]=\"true\"\n bindLabel=\"label\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"classes_operation\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"classes_value\">{{ '@pry.admin.classes.value' | i18n }}</label>\n <input\n id=\"classes_value\"\n type=\"text\"\n class=\"a-form-field\"\n (ngModelChange)=\"changeValue($event, i)\"\n [ngModel]=\"definition.rule.value\"\n />\n </div>\n </div>\n </div>\n </li>\n</ul>\n\n<button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"addRule()\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n Ajouter une r\u00E8gle\n</button>\n\n<div class=\"m-btn-group -width-lg\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"restoreSymbols(); goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.customize.updateIcons' | i18n\"\n (click)=\"valid()\"\n ></button>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "component", type: i1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { 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.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: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i1.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
136
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminClassesCustomizeSymbolComponent, selector: "pry-admin-classes-customize-symbol", inputs: { currentClass: "currentClass" }, outputs: { backPressed: "backPressed" }, usesInheritance: true, ngImport: i0, template: "<ul class=\"m-rule-wrapper\">\n <li\n *ngFor=\"let definition of definitions; let i = index\"\n [class.m-rule--default]=\"definition.isDefault\"\n class=\"m-rule\"\n >\n <div class=\"m-rule__header\">\n <h3 class=\"a-h3\">\n {{ '@pry.admin.rule' | i18n: { id: i + 1 } }}\n <span>{{ definition.isDefault ? ('@pry.admin.defaultRule' | i18n) : '' }}</span>\n </h3>\n\n <div *ngIf=\"!definition.isDefault\" class=\"m-rule__actions\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [class.-disabled]=\"i <= 1\"\n [disabled]=\"i <= 1\"\n (click)=\"move(i, i - 1)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [class.-disabled]=\"i >= definitions.length - 1\"\n [disabled]=\"i >= definitions.length - 1\"\n (click)=\"move(i, i + 1)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"removeRule(i)\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"delete\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.delete' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div>\n <pry-select-image [iconUrl]=\"definition.iconUrl\" (changed)=\"changeForImage($event, i)\"></pry-select-image>\n\n <ng-container *ngIf=\"definition.isDefault\">\n <div class=\"m-form-label-field m-rule__display-mode\">\n <label class=\"a-label\" for=\"size\">{{ '@pry.admin.size' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSize($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"sizes\"\n [ngModel]=\"definition.iconSize[0]\"\n [labelTranslate]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"a-pry-select\"\n id=\"size\"\n ></pry-select>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!definition.isDefault\">\n <div class=\"m-form-label-field m-rule__display-mode\">\n <label class=\"a-label\" for=\"display_mode\">{{ '@pry.admin.displayModeImage' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePosition($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"positions\"\n [ngModel]=\"definition.position\"\n [labelTranslate]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"a-pry-select\"\n id=\"display_mode\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"!!definition.rule\" (click)=\"toggleRule(i)\">{{\n '@pry.admin.classes.condition' | i18n\n }}</pry-checkbox>\n </div>\n </ng-container>\n\n <div *ngIf=\"!!definition.rule && !definition.isDefault\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"classes_attrname\">{{ '@pry.admin.classes.attrName' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAttrName($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"fieldsForClass\"\n [ngModel]=\"definition.rule.attributeName\"\n [labelTranslate]=\"true\"\n bindLabel=\"name\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"classes_attrname\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"classes_operation\">{{ '@pry.admin.classes.operation' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event, i)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations\"\n [ngModel]=\"definition.rule.operation\"\n [labelTranslate]=\"true\"\n bindLabel=\"label\"\n bindValue=\"name\"\n class=\"a-pry-select\"\n id=\"classes_operation\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"classes_value\">{{ '@pry.admin.classes.value' | i18n }}</label>\n <input\n id=\"classes_value\"\n type=\"text\"\n class=\"a-form-field\"\n (ngModelChange)=\"changeValue($event, i)\"\n [ngModel]=\"definition.rule.value\"\n />\n </div>\n </div>\n </div>\n </li>\n</ul>\n\n<button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"addRule()\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n Ajouter une r\u00E8gle\n</button>\n\n<div class=\"m-btn-group -width-lg\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"restoreSymbols(); goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.customize.updateIcons' | i18n\"\n (click)=\"valid()\"\n ></button>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "component", type: i1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { 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.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: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i1.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: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
137
137
  }
138
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminClassesCustomizeSymbolComponent, decorators: [{
139
139
  type: Component,
@@ -111,11 +111,11 @@ export class AdminClassesCustomizeTooltipComponent extends SubscriptionnerDirect
111
111
  this.currentClassConfig.options.attributes = $event;
112
112
  }
113
113
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminClassesCustomizeTooltipComponent, deps: [{ token: i1.TooltipFactoryService }, { token: i0.Injector }, { token: i1.PryI18nService }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Component }); }
114
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminClassesCustomizeTooltipComponent, selector: "pry-admin-classes-customize-tooltip", inputs: { currentClass: "currentClass" }, outputs: { backPressed: "backPressed" }, viewQueries: [{ propertyName: "example", first: true, predicate: ["example"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<div>\n <div class=\"m-form-label-field -width-xl\">\n <label class=\"a-label\" for=\"tooltip_type\">{{ '@pry.admin.customize.type' | i18n }}</label>\n <pry-select\n id=\"tooltip_type\"\n class=\"a-pry-select\"\n (ngModelChange)=\"tooltipTypeChanged($event)\"\n [ngModel]=\"currentClassConfig.type\"\n [items]=\"possibleTooltipTypes$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"value\"\n bindLabel=\"label\"\n [labelTranslate]=\"true\"\n ></pry-select>\n </div>\n\n <div>\n <pry-checkbox [(ngModel)]=\"advancedTooltip\">{{ '@pry.admin.customize.advanced' | i18n }}</pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!advancedTooltip && currentClassConfig.type === 'attribute'\">\n <label class=\"a-label\" for=\"customize_simplified\">{{ '@pry.admin.customize.simplified' | i18n }}</label>\n <pry-select\n id=\"customize_simplified\"\n class=\"a-pry-select\"\n (ngModelChange)=\"changeAttributes($event)\"\n [ngModel]=\"currentClassConfig.options.attributes\"\n [itemsAsOption]=\"true\"\n [items]=\"possibleAttributes\"\n [multiple]=\"true\"\n bindLabel=\"name\"\n bindValue=\"name\"\n ></pry-select>\n </ng-container>\n\n <ng-container *ngIf=\"advancedTooltip\">\n <textarea\n cols=\"100\"\n rows=\"15\"\n class=\"a-form-field\"\n [(ngModel)]=\"strOptions\"\n (focusout)=\"optionsChanged()\"\n ></textarea>\n </ng-container>\n</div>\n\n<div class=\"m-tooltip m-tooltip--example\" [class.-hidden]=\"noTooltip\">\n <div #example></div>\n</div>\n\n<div class=\"m-btn-group -width-md\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button class=\"a-btn a-btn--primary\" type=\"submit\" (click)=\"updateTemplate()\">\n {{ '@pry.admin.customize.update' | i18n }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.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: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i1.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminClassesCustomizeTooltipComponent, selector: "pry-admin-classes-customize-tooltip", inputs: { currentClass: "currentClass" }, outputs: { backPressed: "backPressed" }, viewQueries: [{ propertyName: "example", first: true, predicate: ["example"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<div>\n <div class=\"m-form-label-field -width-xl\">\n <label class=\"a-label\" for=\"tooltip_type\">{{ '@pry.admin.customize.type' | i18n }}</label>\n <pry-select\n id=\"tooltip_type\"\n class=\"a-pry-select\"\n (ngModelChange)=\"tooltipTypeChanged($event)\"\n [ngModel]=\"currentClassConfig.type\"\n [items]=\"possibleTooltipTypes$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"value\"\n bindLabel=\"label\"\n [labelTranslate]=\"true\"\n ></pry-select>\n </div>\n\n <div>\n <pry-checkbox [(ngModel)]=\"advancedTooltip\">{{ '@pry.admin.customize.advanced' | i18n }}</pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!advancedTooltip && currentClassConfig.type === 'attribute'\">\n <label class=\"a-label\" for=\"customize_simplified\">{{ '@pry.admin.customize.simplified' | i18n }}</label>\n <pry-select\n id=\"customize_simplified\"\n class=\"a-pry-select\"\n (ngModelChange)=\"changeAttributes($event)\"\n [ngModel]=\"currentClassConfig.options.attributes\"\n [itemsAsOption]=\"true\"\n [items]=\"possibleAttributes\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n bindLabel=\"name\"\n bindValue=\"name\"\n ></pry-select>\n </ng-container>\n\n <ng-container *ngIf=\"advancedTooltip\">\n <textarea\n cols=\"100\"\n rows=\"15\"\n class=\"a-form-field\"\n [(ngModel)]=\"strOptions\"\n (focusout)=\"optionsChanged()\"\n ></textarea>\n </ng-container>\n</div>\n\n<div class=\"m-tooltip m-tooltip--example\" [class.-hidden]=\"noTooltip\">\n <div #example></div>\n</div>\n\n<div class=\"m-btn-group -width-md\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button class=\"a-btn a-btn--primary\" type=\"submit\" (click)=\"updateTemplate()\">\n {{ '@pry.admin.customize.update' | i18n }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.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: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i1.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: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
115
115
  }
116
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminClassesCustomizeTooltipComponent, decorators: [{
117
117
  type: Component,
118
- args: [{ selector: 'pry-admin-classes-customize-tooltip', template: "<div>\n <div class=\"m-form-label-field -width-xl\">\n <label class=\"a-label\" for=\"tooltip_type\">{{ '@pry.admin.customize.type' | i18n }}</label>\n <pry-select\n id=\"tooltip_type\"\n class=\"a-pry-select\"\n (ngModelChange)=\"tooltipTypeChanged($event)\"\n [ngModel]=\"currentClassConfig.type\"\n [items]=\"possibleTooltipTypes$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"value\"\n bindLabel=\"label\"\n [labelTranslate]=\"true\"\n ></pry-select>\n </div>\n\n <div>\n <pry-checkbox [(ngModel)]=\"advancedTooltip\">{{ '@pry.admin.customize.advanced' | i18n }}</pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!advancedTooltip && currentClassConfig.type === 'attribute'\">\n <label class=\"a-label\" for=\"customize_simplified\">{{ '@pry.admin.customize.simplified' | i18n }}</label>\n <pry-select\n id=\"customize_simplified\"\n class=\"a-pry-select\"\n (ngModelChange)=\"changeAttributes($event)\"\n [ngModel]=\"currentClassConfig.options.attributes\"\n [itemsAsOption]=\"true\"\n [items]=\"possibleAttributes\"\n [multiple]=\"true\"\n bindLabel=\"name\"\n bindValue=\"name\"\n ></pry-select>\n </ng-container>\n\n <ng-container *ngIf=\"advancedTooltip\">\n <textarea\n cols=\"100\"\n rows=\"15\"\n class=\"a-form-field\"\n [(ngModel)]=\"strOptions\"\n (focusout)=\"optionsChanged()\"\n ></textarea>\n </ng-container>\n</div>\n\n<div class=\"m-tooltip m-tooltip--example\" [class.-hidden]=\"noTooltip\">\n <div #example></div>\n</div>\n\n<div class=\"m-btn-group -width-md\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button class=\"a-btn a-btn--primary\" type=\"submit\" (click)=\"updateTemplate()\">\n {{ '@pry.admin.customize.update' | i18n }}\n </button>\n</div>\n" }]
118
+ args: [{ selector: 'pry-admin-classes-customize-tooltip', template: "<div>\n <div class=\"m-form-label-field -width-xl\">\n <label class=\"a-label\" for=\"tooltip_type\">{{ '@pry.admin.customize.type' | i18n }}</label>\n <pry-select\n id=\"tooltip_type\"\n class=\"a-pry-select\"\n (ngModelChange)=\"tooltipTypeChanged($event)\"\n [ngModel]=\"currentClassConfig.type\"\n [items]=\"possibleTooltipTypes$ | async\"\n [itemsAsOption]=\"true\"\n bindValue=\"value\"\n bindLabel=\"label\"\n [labelTranslate]=\"true\"\n ></pry-select>\n </div>\n\n <div>\n <pry-checkbox [(ngModel)]=\"advancedTooltip\">{{ '@pry.admin.customize.advanced' | i18n }}</pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!advancedTooltip && currentClassConfig.type === 'attribute'\">\n <label class=\"a-label\" for=\"customize_simplified\">{{ '@pry.admin.customize.simplified' | i18n }}</label>\n <pry-select\n id=\"customize_simplified\"\n class=\"a-pry-select\"\n (ngModelChange)=\"changeAttributes($event)\"\n [ngModel]=\"currentClassConfig.options.attributes\"\n [itemsAsOption]=\"true\"\n [items]=\"possibleAttributes\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n bindLabel=\"name\"\n bindValue=\"name\"\n ></pry-select>\n </ng-container>\n\n <ng-container *ngIf=\"advancedTooltip\">\n <textarea\n cols=\"100\"\n rows=\"15\"\n class=\"a-form-field\"\n [(ngModel)]=\"strOptions\"\n (focusout)=\"optionsChanged()\"\n ></textarea>\n </ng-container>\n</div>\n\n<div class=\"m-tooltip m-tooltip--example\" [class.-hidden]=\"noTooltip\">\n <div #example></div>\n</div>\n\n<div class=\"m-btn-group -width-md\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button class=\"a-btn a-btn--primary\" type=\"submit\" (click)=\"updateTemplate()\">\n {{ '@pry.admin.customize.update' | i18n }}\n </button>\n</div>\n" }]
119
119
  }], ctorParameters: function () { return [{ type: i1.TooltipFactoryService }, { type: i0.Injector }, { type: i1.PryI18nService }, { type: i2.Store }]; }, propDecorators: { example: [{
120
120
  type: ViewChild,
121
121
  args: ['example', { read: ViewContainerRef }]
@@ -124,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
124
124
  }], currentClass: [{
125
125
  type: Input
126
126
  }] } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tY2xhc3Nlcy1jdXN0b21pemUtdG9vbHRpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWNsYXNzZXMvYWRtaW4tY2xhc3Nlcy1jdXN0b21pemUvdG9vbHRpcC9hZG1pbi1jbGFzc2VzLWN1c3RvbWl6ZS10b29sdGlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLWN1c3RvbWl6ZS90b29sdGlwL2FkbWluLWNsYXNzZXMtY3VzdG9taXplLXRvb2x0aXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBRVosS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFLTCxhQUFhLEVBQ2IsZUFBZSxFQUdmLHdCQUF3QixFQUd6QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQU0xQixNQUFNLE9BQU8scUNBQXNDLFNBQVEsd0JBQXdCO0lBeUJqRixJQUFhLFlBQVksQ0FBQyxLQUErQjtRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSyxFQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7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WSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtTQUNqRSxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQVc7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQ3RELENBQUM7OEdBL0hVLHFDQUFxQztrR0FBckMscUNBQXFDLDZPQUNsQixnQkFBZ0Isb0RDakNoRCx1NkRBNkRBOzsyRkQ3QmEscUNBQXFDO2tCQUpqRCxTQUFTOytCQUNFLHFDQUFxQztvTEFJRyxPQUFPO3NCQUF4RCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFnQnRDLFdBQVc7c0JBQXBCLE1BQU07Z0JBUU0sWUFBWTtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSxcbiAgQmFzZVRvb2x0aXBDb21wb25lbnQsXG4gIENsYXNzLFxuICBDb25maWdBY3Rpb25zLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIEl0ZW0sXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgVG9vbHRpcE9mQ2xhc3Ncbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWFkbWluLWNsYXNzZXMtY3VzdG9taXplLXRvb2x0aXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRtaW4tY2xhc3Nlcy1jdXN0b21pemUtdG9vbHRpcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRtaW5DbGFzc2VzQ3VzdG9taXplVG9vbHRpcENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2V4YW1wbGUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZXhhbXBsZSE6IFZpZXdDb250YWluZXJSZWY7XG4gIGN1cnJlbnRDbGFzc0NvbmZpZzogVG9vbHRpcE9mQ2xhc3MgPSB7IHR5cGU6ICdkZWZhdWx0JyB9O1xuICBwb3NzaWJsZVRvb2x0aXBUeXBlcyQ6IE9ic2VydmFibGU8eyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIGFkdmFuY2VkVG9vbHRpcDogYm9vbGVhbiA9IGZhbHNlO1xuICBhdHRyaWJ1dGVzRm9yVG9vbHRpcDogc3RyaW5nW10gPSBbXTtcbiAgcG9zc2libGVBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSA9IFtdO1xuICBwb3NzaWJsZU5vbkF0dHJpYnV0ZXNGaWVsZHMgPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2lkJyxcbiAgICAgIGZpZWxkOiAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29DbGFzcycsXG4gICAgICBmaWVsZDogJydcbiAgICB9XG4gIF0gYXMgQXR0cmlidXRlW107XG4gIEBPdXRwdXQoKSBiYWNrUHJlc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudENsYXNzOiBDbGFzcyA9IHt9IGFzIENsYXNzO1xuICBwcml2YXRlIGZpZWxkczogQXR0cmlidXRlW10gPSBbXTtcbiAgc3RyT3B0aW9uczogc3RyaW5nID0gJyc7XG4gIHRtcENvbXBvbmVudD86IENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD47XG4gIGRlZnM6IHsgW3A6IHN0cmluZ106IFRvb2x0aXBPZkNsYXNzIH0gPSB7fTtcbiAgbm9Ub29sdGlwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IGN1cnJlbnRDbGFzcyhjbGF6ejogQ2xhc3MgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY3VycmVudENsYXNzID0gY2xhenogPz8gKHt9IGFzIENsYXNzKTtcbiAgICB0aGlzLmZpZWxkcyA9IChjbGF6eiA/PyB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXMgPz8gW107XG4gICAgdGhpcy5wb3NzaWJsZUF0dHJpYnV0ZXMgPSB0aGlzLnBvc3NpYmxlTm9uQXR0cmlidXRlc0ZpZWxkc1xuICAgICAgLmNvbmNhdCh0aGlzLmZpZWxkcylcbiAgICAgIC5zb3J0KChmMSwgZjIpID0+IGYxLm5hbWUubG9jYWxlQ29tcGFyZShmMi5uYW1lKSk7XG4gICAgdGhpcy5jdXJyZW50Q2xhc3NDb25maWcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmc1t0aGlzLmN1cnJlbnRDbGFzcy5pZF0gPz8geyB0eXBlOiAnZGVmYXVsdCcgfSkpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDbGFzcygpOiBDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDbGFzcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucG9zc2libGVUb29sdGlwVHlwZXMkID0gdGhpcy50b29sdGlwRmFjdG9yeVNlcnZpY2UudHlwZXMkLnBpcGUoXG4gICAgICBtYXAoKHR5cGVzKSA9PlxuICAgICAgICB0eXBlcy5tYXAoKHR5cGUpID0+ICh7XG4gICAgICAgICAgdmFsdWU6IHR5cGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LnRvb2x0aXAuJyArIHR5cGUpXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy50b29sdGlwRGVmaW5pdGlvbnMpLnN1YnNjcmliZSgoZGVmcykgPT4ge1xuICAgICAgICB0aGlzLmRlZnMgPSBkZWZzO1xuICAgICAgICB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmc1t0aGlzLmN1cnJlbnRDbGFzcy5pZF0gPz8geyB0eXBlOiAnZGVmYXVsdCcgfSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdG9vbHRpcFR5cGVDaGFuZ2VkKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50Q2xhc3NDb25maWcudHlwZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5jdXJyZW50Q2xhc3NDb25maWcudHlwZSA9PT0gJ2F0dHJpYnV0ZScpIHtcbiAgICAgIHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMgPSB7IGF0dHJpYnV0ZXM6IHRoaXMucG9zc2libGVBdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYXR0ci5uYW1lKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZy5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMuc3RyT3B0aW9ucyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMudXBkYXRlRXhhbXBsZSgpO1xuICB9XG5cbiAgb3B0aW9uc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50Q2xhc3NDb25maWcub3B0aW9ucyA9IEpTT04ucGFyc2UodGhpcy5zdHJPcHRpb25zKTtcbiAgICBpZiAodGhpcy50bXBDb21wb25lbnQpIHtcbiAgICAgIHRoaXMudG1wQ29tcG9uZW50Lmluc3RhbmNlLmNvbnRleHQgPSB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZy5vcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUV4YW1wbGUoKTtcbiAgfVxuXG4gIHVwZGF0ZUV4YW1wbGUoKSB7XG4gICAgdGhpcy5leGFtcGxlPy5jbGVhcigpO1xuICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAoXG4gICAgICB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZy50eXBlLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgIHRoaXMuZXhhbXBsZVxuICAgICk7XG4gICAgY29tcG9uZW50JC5zdWJzY3JpYmUoKGNvbXBvbmVudCkgPT4ge1xuICAgICAgdGhpcy5ub1Rvb2x0aXAgPSAhY29tcG9uZW50O1xuICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdGhpcy5maWVsZHNcbiAgICAgICAgICAubWFwKChhdHRyKSA9PiAoe1xuICAgICAgICAgICAgW2F0dHIubmFtZV06IHtcbiAgICAgICAgICAgICAgdHlwZTogJ1ZBTFVFJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICfCqycgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS5hZG1pbi5jdXN0b21pemUuZXhlbXBsZScsIHsgZXhwcjogYXR0ci5uYW1lIH0pICsgJ8K7JyxcbiAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIGF0dHJpYnV0ZXM6IHsgLi4ucC5hdHRyaWJ1dGVzLCAuLi5jIH0gfSksIHtcbiAgICAgICAgICAgIG9DbGFzczogdGhpcy5jdXJyZW50Q2xhc3MuaWQsXG4gICAgICAgICAgICBpZDogdjQoKSxcbiAgICAgICAgICAgIGxhYmVsOiAnwqsnICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkuYWRtaW4uY3VzdG9taXplLmV4ZW1wbGUnLCB7IGV4cHI6ICdsYWJlbCcgfSkgKyAnwrsnLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge30gYXMgeyBba2V5OiBzdHJpbmddOiBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSB9XG4gICAgICAgICAgfSBhcyBJdGVtKTtcblxuICAgICAgICB0aGlzLnRtcENvbXBvbmVudCA9IGNvbXBvbmVudDtcblxuICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuY29udGV4dCA9IHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVUZW1wbGF0ZSgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgQ29uZmlnQWN0aW9ucy5zYXZlVG9vbHRpcCh7XG4gICAgICAgIGRlZmluaXRpb25zOiB7IFt0aGlzLmN1cnJlbnRDbGFzcy5pZF06IHRoaXMuY3VycmVudENsYXNzQ29uZmlnIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMuYmFja1ByZXNzZWQuZW1pdCgpO1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRlcygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMuYXR0cmlidXRlcyA9ICRldmVudDtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCAtd2lkdGgteGxcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidG9vbHRpcF90eXBlXCI+e3sgJ0BwcnkuYWRtaW4uY3VzdG9taXplLnR5cGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgPHByeS1zZWxlY3RcbiAgICAgIGlkPVwidG9vbHRpcF90eXBlXCJcbiAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvb2x0aXBUeXBlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRDbGFzc0NvbmZpZy50eXBlXCJcbiAgICAgIFtpdGVtc109XCJwb3NzaWJsZVRvb2x0aXBUeXBlcyQgfCBhc3luY1wiXG4gICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxwcnktY2hlY2tib3ggWyhuZ01vZGVsKV09XCJhZHZhbmNlZFRvb2x0aXBcIj57eyAnQHByeS5hZG1pbi5jdXN0b21pemUuYWR2YW5jZWQnIHwgaTE4biB9fTwvcHJ5LWNoZWNrYm94PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFkdmFuY2VkVG9vbHRpcCAmJiBjdXJyZW50Q2xhc3NDb25maWcudHlwZSA9PT0gJ2F0dHJpYnV0ZSdcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY3VzdG9taXplX3NpbXBsaWZpZWRcIj57eyAnQHByeS5hZG1pbi5jdXN0b21pemUuc2ltcGxpZmllZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8cHJ5LXNlbGVjdFxuICAgICAgaWQ9XCJjdXN0b21pemVfc2ltcGxpZmllZFwiXG4gICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdHRyaWJ1dGVzKCRldmVudClcIlxuICAgICAgW25nTW9kZWxdPVwiY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMuYXR0cmlidXRlc1wiXG4gICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgIFtpdGVtc109XCJwb3NzaWJsZUF0dHJpYnV0ZXNcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWR2YW5jZWRUb29sdGlwXCI+XG4gICAgPHRleHRhcmVhXG4gICAgICBjb2xzPVwiMTAwXCJcbiAgICAgIHJvd3M9XCIxNVwiXG4gICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICBbKG5nTW9kZWwpXT1cInN0ck9wdGlvbnNcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9wdGlvbnNDaGFuZ2VkKClcIlxuICAgID48L3RleHRhcmVhPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibS10b29sdGlwIG0tdG9vbHRpcC0tZXhhbXBsZVwiIFtjbGFzcy4taGlkZGVuXT1cIm5vVG9vbHRpcFwiPlxuICA8ZGl2ICNleGFtcGxlPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCAtd2lkdGgtbWRcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiXG4gICAgKGNsaWNrKT1cImdvQmFjaygpXCJcbiAgICBbaW5uZXJIVE1MXT1cIidAcHJ5LmFkbWluLmNhbmNlbCcgfCBpMThuXCJcbiAgPjwvYnV0dG9uPlxuICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInVwZGF0ZVRlbXBsYXRlKClcIj5cbiAgICB7eyAnQHByeS5hZG1pbi5jdXN0b21pemUudXBkYXRlJyB8IGkxOG4gfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tY2xhc3Nlcy1jdXN0b21pemUtdG9vbHRpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWNsYXNzZXMvYWRtaW4tY2xhc3Nlcy1jdXN0b21pemUvdG9vbHRpcC9hZG1pbi1jbGFzc2VzLWN1c3RvbWl6ZS10b29sdGlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLWN1c3RvbWl6ZS90b29sdGlwL2FkbWluLWNsYXNzZXMtY3VzdG9taXplLXRvb2x0aXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBRVosS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFLTCxhQUFhLEVBQ2IsZUFBZSxFQUdmLHdCQUF3QixFQUd6QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQU0xQixNQUFNLE9BQU8scUNBQXNDLFNBQVEsd0JBQXdCO0lBeUJqRixJQUFhLFlBQVksQ0FBQyxLQUErQjtRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSyxFQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7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WSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtTQUNqRSxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQVc7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQ3RELENBQUM7OEdBL0hVLHFDQUFxQztrR0FBckMscUNBQXFDLDZPQUNsQixnQkFBZ0Isb0RDakNoRCx3OERBOERBOzsyRkQ5QmEscUNBQXFDO2tCQUpqRCxTQUFTOytCQUNFLHFDQUFxQztvTEFJRyxPQUFPO3NCQUF4RCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFnQnRDLFdBQVc7c0JBQXBCLE1BQU07Z0JBUU0sWUFBWTtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSxcbiAgQmFzZVRvb2x0aXBDb21wb25lbnQsXG4gIENsYXNzLFxuICBDb25maWdBY3Rpb25zLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIEl0ZW0sXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgVG9vbHRpcE9mQ2xhc3Ncbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWFkbWluLWNsYXNzZXMtY3VzdG9taXplLXRvb2x0aXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRtaW4tY2xhc3Nlcy1jdXN0b21pemUtdG9vbHRpcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRtaW5DbGFzc2VzQ3VzdG9taXplVG9vbHRpcENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2V4YW1wbGUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZXhhbXBsZSE6IFZpZXdDb250YWluZXJSZWY7XG4gIGN1cnJlbnRDbGFzc0NvbmZpZzogVG9vbHRpcE9mQ2xhc3MgPSB7IHR5cGU6ICdkZWZhdWx0JyB9O1xuICBwb3NzaWJsZVRvb2x0aXBUeXBlcyQ6IE9ic2VydmFibGU8eyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIGFkdmFuY2VkVG9vbHRpcDogYm9vbGVhbiA9IGZhbHNlO1xuICBhdHRyaWJ1dGVzRm9yVG9vbHRpcDogc3RyaW5nW10gPSBbXTtcbiAgcG9zc2libGVBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSA9IFtdO1xuICBwb3NzaWJsZU5vbkF0dHJpYnV0ZXNGaWVsZHMgPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2lkJyxcbiAgICAgIGZpZWxkOiAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29DbGFzcycsXG4gICAgICBmaWVsZDogJydcbiAgICB9XG4gIF0gYXMgQXR0cmlidXRlW107XG4gIEBPdXRwdXQoKSBiYWNrUHJlc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudENsYXNzOiBDbGFzcyA9IHt9IGFzIENsYXNzO1xuICBwcml2YXRlIGZpZWxkczogQXR0cmlidXRlW10gPSBbXTtcbiAgc3RyT3B0aW9uczogc3RyaW5nID0gJyc7XG4gIHRtcENvbXBvbmVudD86IENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD47XG4gIGRlZnM6IHsgW3A6IHN0cmluZ106IFRvb2x0aXBPZkNsYXNzIH0gPSB7fTtcbiAgbm9Ub29sdGlwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IGN1cnJlbnRDbGFzcyhjbGF6ejogQ2xhc3MgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY3VycmVudENsYXNzID0gY2xhenogPz8gKHt9IGFzIENsYXNzKTtcbiAgICB0aGlzLmZpZWxkcyA9IChjbGF6eiA/PyB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXMgPz8gW107XG4gICAgdGhpcy5wb3NzaWJsZUF0dHJpYnV0ZXMgPSB0aGlzLnBvc3NpYmxlTm9uQXR0cmlidXRlc0ZpZWxkc1xuICAgICAgLmNvbmNhdCh0aGlzLmZpZWxkcylcbiAgICAgIC5zb3J0KChmMSwgZjIpID0+IGYxLm5hbWUubG9jYWxlQ29tcGFyZShmMi5uYW1lKSk7XG4gICAgdGhpcy5jdXJyZW50Q2xhc3NDb25maWcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmc1t0aGlzLmN1cnJlbnRDbGFzcy5pZF0gPz8geyB0eXBlOiAnZGVmYXVsdCcgfSkpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDbGFzcygpOiBDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDbGFzcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucG9zc2libGVUb29sdGlwVHlwZXMkID0gdGhpcy50b29sdGlwRmFjdG9yeVNlcnZpY2UudHlwZXMkLnBpcGUoXG4gICAgICBtYXAoKHR5cGVzKSA9PlxuICAgICAgICB0eXBlcy5tYXAoKHR5cGUpID0+ICh7XG4gICAgICAgICAgdmFsdWU6IHR5cGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LnRvb2x0aXAuJyArIHR5cGUpXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy50b29sdGlwRGVmaW5pdGlvbnMpLnN1YnNjcmliZSgoZGVmcykgPT4ge1xuICAgICAgICB0aGlzLmRlZnMgPSBkZWZzO1xuICAgICAgICB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmc1t0aGlzLmN1cnJlbnRDbGFzcy5pZF0gPz8geyB0eXBlOiAnZGVmYXVsdCcgfSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdG9vbHRpcFR5cGVDaGFuZ2VkKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50Q2xhc3NDb25maWcudHlwZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5jdXJyZW50Q2xhc3NDb25maWcudHlwZSA9PT0gJ2F0dHJpYnV0ZScpIHtcbiAgICAgIHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMgPSB7IGF0dHJpYnV0ZXM6IHRoaXMucG9zc2libGVBdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYXR0ci5uYW1lKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZy5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMuc3RyT3B0aW9ucyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMudXBkYXRlRXhhbXBsZSgpO1xuICB9XG5cbiAgb3B0aW9uc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50Q2xhc3NDb25maWcub3B0aW9ucyA9IEpTT04ucGFyc2UodGhpcy5zdHJPcHRpb25zKTtcbiAgICBpZiAodGhpcy50bXBDb21wb25lbnQpIHtcbiAgICAgIHRoaXMudG1wQ29tcG9uZW50Lmluc3RhbmNlLmNvbnRleHQgPSB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZy5vcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUV4YW1wbGUoKTtcbiAgfVxuXG4gIHVwZGF0ZUV4YW1wbGUoKSB7XG4gICAgdGhpcy5leGFtcGxlPy5jbGVhcigpO1xuICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAoXG4gICAgICB0aGlzLmN1cnJlbnRDbGFzc0NvbmZpZy50eXBlLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgIHRoaXMuZXhhbXBsZVxuICAgICk7XG4gICAgY29tcG9uZW50JC5zdWJzY3JpYmUoKGNvbXBvbmVudCkgPT4ge1xuICAgICAgdGhpcy5ub1Rvb2x0aXAgPSAhY29tcG9uZW50O1xuICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdGhpcy5maWVsZHNcbiAgICAgICAgICAubWFwKChhdHRyKSA9PiAoe1xuICAgICAgICAgICAgW2F0dHIubmFtZV06IHtcbiAgICAgICAgICAgICAgdHlwZTogJ1ZBTFVFJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICfCqycgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS5hZG1pbi5jdXN0b21pemUuZXhlbXBsZScsIHsgZXhwcjogYXR0ci5uYW1lIH0pICsgJ8K7JyxcbiAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIGF0dHJpYnV0ZXM6IHsgLi4ucC5hdHRyaWJ1dGVzLCAuLi5jIH0gfSksIHtcbiAgICAgICAgICAgIG9DbGFzczogdGhpcy5jdXJyZW50Q2xhc3MuaWQsXG4gICAgICAgICAgICBpZDogdjQoKSxcbiAgICAgICAgICAgIGxhYmVsOiAnwqsnICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkuYWRtaW4uY3VzdG9taXplLmV4ZW1wbGUnLCB7IGV4cHI6ICdsYWJlbCcgfSkgKyAnwrsnLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge30gYXMgeyBba2V5OiBzdHJpbmddOiBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSB9XG4gICAgICAgICAgfSBhcyBJdGVtKTtcblxuICAgICAgICB0aGlzLnRtcENvbXBvbmVudCA9IGNvbXBvbmVudDtcblxuICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuY29udGV4dCA9IHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVUZW1wbGF0ZSgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgQ29uZmlnQWN0aW9ucy5zYXZlVG9vbHRpcCh7XG4gICAgICAgIGRlZmluaXRpb25zOiB7IFt0aGlzLmN1cnJlbnRDbGFzcy5pZF06IHRoaXMuY3VycmVudENsYXNzQ29uZmlnIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMuYmFja1ByZXNzZWQuZW1pdCgpO1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRlcygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMuYXR0cmlidXRlcyA9ICRldmVudDtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCAtd2lkdGgteGxcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidG9vbHRpcF90eXBlXCI+e3sgJ0BwcnkuYWRtaW4uY3VzdG9taXplLnR5cGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgPHByeS1zZWxlY3RcbiAgICAgIGlkPVwidG9vbHRpcF90eXBlXCJcbiAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvb2x0aXBUeXBlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRDbGFzc0NvbmZpZy50eXBlXCJcbiAgICAgIFtpdGVtc109XCJwb3NzaWJsZVRvb2x0aXBUeXBlcyQgfCBhc3luY1wiXG4gICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxwcnktY2hlY2tib3ggWyhuZ01vZGVsKV09XCJhZHZhbmNlZFRvb2x0aXBcIj57eyAnQHByeS5hZG1pbi5jdXN0b21pemUuYWR2YW5jZWQnIHwgaTE4biB9fTwvcHJ5LWNoZWNrYm94PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFkdmFuY2VkVG9vbHRpcCAmJiBjdXJyZW50Q2xhc3NDb25maWcudHlwZSA9PT0gJ2F0dHJpYnV0ZSdcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY3VzdG9taXplX3NpbXBsaWZpZWRcIj57eyAnQHByeS5hZG1pbi5jdXN0b21pemUuc2ltcGxpZmllZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8cHJ5LXNlbGVjdFxuICAgICAgaWQ9XCJjdXN0b21pemVfc2ltcGxpZmllZFwiXG4gICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdHRyaWJ1dGVzKCRldmVudClcIlxuICAgICAgW25nTW9kZWxdPVwiY3VycmVudENsYXNzQ29uZmlnLm9wdGlvbnMuYXR0cmlidXRlc1wiXG4gICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgIFtpdGVtc109XCJwb3NzaWJsZUF0dHJpYnV0ZXNcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgW2Nsb3NlT25TZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWR2YW5jZWRUb29sdGlwXCI+XG4gICAgPHRleHRhcmVhXG4gICAgICBjb2xzPVwiMTAwXCJcbiAgICAgIHJvd3M9XCIxNVwiXG4gICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICBbKG5nTW9kZWwpXT1cInN0ck9wdGlvbnNcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9wdGlvbnNDaGFuZ2VkKClcIlxuICAgID48L3RleHRhcmVhPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibS10b29sdGlwIG0tdG9vbHRpcC0tZXhhbXBsZVwiIFtjbGFzcy4taGlkZGVuXT1cIm5vVG9vbHRpcFwiPlxuICA8ZGl2ICNleGFtcGxlPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCAtd2lkdGgtbWRcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiXG4gICAgKGNsaWNrKT1cImdvQmFjaygpXCJcbiAgICBbaW5uZXJIVE1MXT1cIidAcHJ5LmFkbWluLmNhbmNlbCcgfCBpMThuXCJcbiAgPjwvYnV0dG9uPlxuICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInVwZGF0ZVRlbXBsYXRlKClcIj5cbiAgICB7eyAnQHByeS5hZG1pbi5jdXN0b21pemUudXBkYXRlJyB8IGkxOG4gfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
@@ -133,7 +133,7 @@ export class AdminAttributesFormComponent {
133
133
  this.closeCategory();
134
134
  }
135
135
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminAttributesFormComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.UntypedFormBuilder }, { token: i4.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
136
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminAttributesFormComponent, selector: "pry-admin-attributes-form", inputs: { selectedClass: "selectedClass", interClass: "interClass", selectedAttribute: "selectedAttribute" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<form class=\"o-form\" [formGroup]=\"attrForm\" (ngSubmit)=\"addAttribute()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_name\">{{ '@pry.admin.classes.attributes.name' | i18n }}</label>\n <input id=\"attr_name\" type=\"text\" class=\"a-form-field\" formControlName=\"name\" required />\n <label class=\"a-label a-label--help -error\" *ngIf=\"nameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('name')?.invalid\">\n <div *ngIf=\"attrForm.get('name')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.minLength' | i18n: { len: 3 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.maxLength' | i18n: { len: 100 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('whitespace') && !attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.noWhitespace' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"type\">{{ '@pry.admin.classes.attributes.field' | i18n }}</label>\n <pry-select\n id=\"type\"\n class=\"a-pry-select\"\n formControlName=\"field\"\n [labelTranslate]=\"true\"\n [items]=\"fields$ | async\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n required=\"true\"\n ></pry-select>\n <div *ngIf=\"attrForm.get('field')?.invalid\">\n <div *ngIf=\"attrForm.get('field')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"category\">{{ '@pry.admin.classes.attributes.category' | i18n }}</label>\n <pry-select\n id=\"category\"\n class=\"form-control\"\n formControlName=\"category\"\n [labelTranslate]=\"true\"\n [items]=\"categories$ | async\"\n (click)=\"showCategory()\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n [readonly]=\"true\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <pry-checkbox formControlName=\"multiValued\" ngDefaultControl>{{\n '@pry.admin.classes.attributes.multiValued' | i18n\n }}</pry-checkbox>\n </div>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n *pryAccess=\"{ module: 'admin', page: 'classes', action: 'add_attribute' }\"\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [disabled]=\"attrForm.invalid || nameAlreadyExists\"\n [innerHTML]=\"(selectedAttribute ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n\n<ng-template #template>\n <div class=\"o-modal o-modal--selector\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.admin.classes.category.select' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeCategory()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <form (ngSubmit)=\"addCategory()\">\n <div class=\"m-form-label-field selector\">\n <label class=\"a-label\" for=\"name-search\">{{ '@pry.admin.classes.category.searchOrCreate' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n (input)=\"search($event)\"\n [(ngModel)]=\"catToAdd.name\"\n name=\"name\"\n id=\"name-search\"\n />\n </div>\n\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.classes.category.name' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th scole=\"col\">{{ '@pry.admin.classes.category.name' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cat of categories$ | async\">\n <td>\n <button type=\"button\" class=\"a-btn a-btn--ghost select-it\" (click)=\"setCategory(cat)\">\n <span class=\"u-visually-hidden\">{{ '@pry.admin.classes.category.selectIt' | i18n }}</span>\n {{ cat.name }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-container *ngIf=\"(categories$ | async)?.length === 0\">\n <p class=\"a-p a-p--create\">\n <strong>{{ catToAdd.name }} </strong>\n <span [innerHTML]=\"'@pry.admin.classes.category.add' | i18n\"></span>\n </p>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.classes.category.create' | i18n\"\n ></button>\n </ng-container>\n </form>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i6.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.I18nPipe, name: "i18n" }] }); }
136
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminAttributesFormComponent, selector: "pry-admin-attributes-form", inputs: { selectedClass: "selectedClass", interClass: "interClass", selectedAttribute: "selectedAttribute" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<form class=\"o-form\" [formGroup]=\"attrForm\" (ngSubmit)=\"addAttribute()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_name\">{{ '@pry.admin.classes.attributes.name' | i18n }}</label>\n <input id=\"attr_name\" type=\"text\" class=\"a-form-field\" formControlName=\"name\" required />\n <label class=\"a-label a-label--help -error\" *ngIf=\"nameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('name')?.invalid\">\n <div *ngIf=\"attrForm.get('name')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.minLength' | i18n: { len: 3 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.maxLength' | i18n: { len: 100 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('whitespace') && !attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.noWhitespace' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"type\">{{ '@pry.admin.classes.attributes.field' | i18n }}</label>\n <pry-select\n id=\"type\"\n class=\"a-pry-select\"\n formControlName=\"field\"\n [labelTranslate]=\"true\"\n [items]=\"fields$ | async\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n required=\"true\"\n ></pry-select>\n <div *ngIf=\"attrForm.get('field')?.invalid\">\n <div *ngIf=\"attrForm.get('field')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"category\">{{ '@pry.admin.classes.attributes.category' | i18n }}</label>\n <pry-select\n id=\"category\"\n class=\"form-control\"\n formControlName=\"category\"\n [labelTranslate]=\"true\"\n [items]=\"categories$ | async\"\n (click)=\"showCategory()\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n [readonly]=\"true\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <pry-checkbox formControlName=\"multiValued\" ngDefaultControl>{{\n '@pry.admin.classes.attributes.multiValued' | i18n\n }}</pry-checkbox>\n </div>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n *pryAccess=\"{ module: 'admin', page: 'classes', action: 'add_attribute' }\"\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [disabled]=\"attrForm.invalid || nameAlreadyExists\"\n [innerHTML]=\"(selectedAttribute ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n\n<ng-template #template>\n <div class=\"o-modal o-modal--selector\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.admin.classes.category.select' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeCategory()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <form (ngSubmit)=\"addCategory()\">\n <div class=\"m-form-label-field selector\">\n <label class=\"a-label\" for=\"name-search\">{{ '@pry.admin.classes.category.searchOrCreate' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n (input)=\"search($event)\"\n [(ngModel)]=\"catToAdd.name\"\n name=\"name\"\n id=\"name-search\"\n />\n </div>\n\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.classes.category.name' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th scole=\"col\">{{ '@pry.admin.classes.category.name' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cat of categories$ | async\">\n <td>\n <button type=\"button\" class=\"a-btn a-btn--ghost select-it\" (click)=\"setCategory(cat)\">\n <span class=\"u-visually-hidden\">{{ '@pry.admin.classes.category.selectIt' | i18n }}</span>\n {{ cat.name }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-container *ngIf=\"(categories$ | async)?.length === 0\">\n <p class=\"a-p a-p--create\">\n <strong>{{ catToAdd.name }} </strong>\n <span [innerHTML]=\"'@pry.admin.classes.category.add' | i18n\"></span>\n </p>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.classes.category.create' | i18n\"\n ></button>\n </ng-container>\n </form>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i6.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.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: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.I18nPipe, name: "i18n" }] }); }
137
137
  }
138
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminAttributesFormComponent, decorators: [{
139
139
  type: Component,