@pepperi-addons/ngx-composite-lib 0.4.2-beta.8 → 0.4.2-beta.80

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 (170) hide show
  1. package/color-settings/color-settings.component.d.ts +3 -2
  2. package/core/common/services/dimx.service.d.ts +4 -0
  3. package/esm2020/color-settings/color-settings.component.mjs +6 -3
  4. package/esm2020/core/common/directives/reset-configuration-field.directive.mjs +5 -4
  5. package/esm2020/core/common/services/dimx.service.mjs +1 -1
  6. package/esm2020/file-status-panel/file-status-panel.module.mjs +23 -3
  7. package/esm2020/flow-picker-button/flow-picker-button.component.mjs +94 -0
  8. package/esm2020/flow-picker-button/flow-picker-button.module.mjs +36 -0
  9. package/esm2020/flow-picker-button/flow-picker-button.service.mjs +21 -0
  10. package/esm2020/flow-picker-button/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs +5 -0
  11. package/esm2020/flow-picker-button/public-api.mjs +6 -0
  12. package/esm2020/generic-list/generic-list.component.mjs +55 -7
  13. package/esm2020/generic-list/generic-list.service.mjs +6 -2
  14. package/esm2020/group-buttons-settings/group-buttons-settings.component.mjs +17 -4
  15. package/esm2020/group-buttons-settings/group-buttons-settings.model.mjs +1 -1
  16. package/esm2020/icon-picker/icon-picker.component.mjs +79 -0
  17. package/esm2020/icon-picker/icon-picker.module.mjs +44 -0
  18. package/esm2020/icon-picker/icon-picker.service.mjs +17 -0
  19. package/esm2020/icon-picker/pepperi-addons-ngx-composite-lib-icon-picker.mjs +5 -0
  20. package/esm2020/icon-picker/public-api.mjs +6 -0
  21. package/esm2020/layout-builder/hide-in/hide-in.component.mjs +54 -0
  22. package/esm2020/layout-builder/hide-in/hide-in.module.mjs +81 -0
  23. package/esm2020/layout-builder/layout/layout.component.mjs +204 -0
  24. package/esm2020/layout-builder/layout/layout.module.mjs +54 -0
  25. package/esm2020/layout-builder/layout-builder-editor/layout-builder-editor.component.mjs +29 -0
  26. package/esm2020/layout-builder/layout-builder-editor/layout-builder-editor.module.mjs +45 -0
  27. package/esm2020/layout-builder/layout-builder-internal.service.mjs +628 -0
  28. package/esm2020/layout-builder/layout-builder.component.mjs +197 -0
  29. package/esm2020/layout-builder/layout-builder.model.mjs +2 -0
  30. package/esm2020/layout-builder/layout-builder.module.mjs +143 -0
  31. package/esm2020/layout-builder/layout-builder.service.mjs +36 -0
  32. package/esm2020/layout-builder/main-editor/main-editor.component.mjs +130 -0
  33. package/esm2020/layout-builder/main-editor/main-editor.module.mjs +99 -0
  34. package/esm2020/layout-builder/pepperi-addons-ngx-composite-lib-layout-builder.mjs +5 -0
  35. package/esm2020/layout-builder/public-api.mjs +12 -0
  36. package/esm2020/layout-builder/section/section.component.mjs +296 -0
  37. package/esm2020/layout-builder/section/section.module.mjs +44 -0
  38. package/esm2020/layout-builder/section-block/section-block.component.mjs +113 -0
  39. package/esm2020/layout-builder/section-block/section-block.module.mjs +34 -0
  40. package/esm2020/layout-builder/section-editor/section-editor.component.mjs +192 -0
  41. package/esm2020/layout-builder/section-editor/section-editor.module.mjs +44 -0
  42. package/esm2020/manage-parameters/manage-parameter/manage-parameter.component.mjs +82 -0
  43. package/esm2020/manage-parameters/manage-parameters.component.mjs +153 -0
  44. package/esm2020/manage-parameters/manage-parameters.model.mjs +24 -0
  45. package/esm2020/manage-parameters/manage-parameters.module.mjs +45 -0
  46. package/esm2020/manage-parameters/manage-parameters.service.mjs +142 -0
  47. package/esm2020/manage-parameters/pepperi-addons-ngx-composite-lib-manage-parameters.mjs +5 -0
  48. package/esm2020/manage-parameters/public-api.mjs +8 -0
  49. package/esm2020/rich-text/pepperi-addons-ngx-composite-lib-rich-text.mjs +5 -0
  50. package/esm2020/rich-text/public-api.mjs +6 -0
  51. package/esm2020/rich-text/rich-text.component.mjs +154 -0
  52. package/esm2020/rich-text/rich-text.module.mjs +52 -0
  53. package/esm2020/rich-text/rich-text.service.mjs +21 -0
  54. package/esm2020/shadow-settings/shadow-settings.component.mjs +7 -4
  55. package/esm2020/show-if-badge/pepperi-addons-ngx-composite-lib-show-if-badge.mjs +5 -0
  56. package/esm2020/show-if-badge/public-api.mjs +6 -0
  57. package/esm2020/show-if-badge/show-if-badge.component.mjs +44 -0
  58. package/esm2020/show-if-badge/show-if-badge.module.mjs +50 -0
  59. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.mjs +5 -2
  60. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.mjs.map +1 -1
  61. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +22 -3
  62. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.mjs.map +1 -1
  63. package/fesm2015/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs +161 -0
  64. package/fesm2015/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs.map +1 -0
  65. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.mjs +61 -7
  66. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -1
  67. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +16 -3
  68. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs.map +1 -1
  69. package/fesm2015/pepperi-addons-ngx-composite-lib-icon-picker.mjs +146 -0
  70. package/fesm2015/pepperi-addons-ngx-composite-lib-icon-picker.mjs.map +1 -0
  71. package/fesm2015/pepperi-addons-ngx-composite-lib-layout-builder.mjs +2290 -0
  72. package/fesm2015/pepperi-addons-ngx-composite-lib-layout-builder.mjs.map +1 -0
  73. package/fesm2015/pepperi-addons-ngx-composite-lib-manage-parameters.mjs +441 -0
  74. package/fesm2015/pepperi-addons-ngx-composite-lib-manage-parameters.mjs.map +1 -0
  75. package/fesm2015/pepperi-addons-ngx-composite-lib-rich-text.mjs +234 -0
  76. package/fesm2015/pepperi-addons-ngx-composite-lib-rich-text.mjs.map +1 -0
  77. package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +6 -3
  78. package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.mjs.map +1 -1
  79. package/fesm2015/pepperi-addons-ngx-composite-lib-show-if-badge.mjs +100 -0
  80. package/fesm2015/pepperi-addons-ngx-composite-lib-show-if-badge.mjs.map +1 -0
  81. package/fesm2015/pepperi-addons-ngx-composite-lib.mjs +4 -3
  82. package/fesm2015/pepperi-addons-ngx-composite-lib.mjs.map +1 -1
  83. package/fesm2020/pepperi-addons-ngx-composite-lib-color-settings.mjs +5 -2
  84. package/fesm2020/pepperi-addons-ngx-composite-lib-color-settings.mjs.map +1 -1
  85. package/fesm2020/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +22 -3
  86. package/fesm2020/pepperi-addons-ngx-composite-lib-file-status-panel.mjs.map +1 -1
  87. package/fesm2020/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs +155 -0
  88. package/fesm2020/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs.map +1 -0
  89. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs +59 -7
  90. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -1
  91. package/fesm2020/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +16 -3
  92. package/fesm2020/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs.map +1 -1
  93. package/fesm2020/pepperi-addons-ngx-composite-lib-icon-picker.mjs +145 -0
  94. package/fesm2020/pepperi-addons-ngx-composite-lib-icon-picker.mjs.map +1 -0
  95. package/fesm2020/pepperi-addons-ngx-composite-lib-layout-builder.mjs +2267 -0
  96. package/fesm2020/pepperi-addons-ngx-composite-lib-layout-builder.mjs.map +1 -0
  97. package/fesm2020/pepperi-addons-ngx-composite-lib-manage-parameters.mjs +438 -0
  98. package/fesm2020/pepperi-addons-ngx-composite-lib-manage-parameters.mjs.map +1 -0
  99. package/fesm2020/pepperi-addons-ngx-composite-lib-rich-text.mjs +230 -0
  100. package/fesm2020/pepperi-addons-ngx-composite-lib-rich-text.mjs.map +1 -0
  101. package/fesm2020/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +6 -3
  102. package/fesm2020/pepperi-addons-ngx-composite-lib-shadow-settings.mjs.map +1 -1
  103. package/fesm2020/pepperi-addons-ngx-composite-lib-show-if-badge.mjs +100 -0
  104. package/fesm2020/pepperi-addons-ngx-composite-lib-show-if-badge.mjs.map +1 -0
  105. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs +4 -3
  106. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs.map +1 -1
  107. package/flow-picker-button/flow-picker-button.component.d.ts +27 -0
  108. package/flow-picker-button/flow-picker-button.module.d.ts +11 -0
  109. package/flow-picker-button/flow-picker-button.service.d.ts +9 -0
  110. package/flow-picker-button/index.d.ts +5 -0
  111. package/flow-picker-button/public-api.d.ts +2 -0
  112. package/generic-list/generic-list.component.d.ts +15 -5
  113. package/generic-list/generic-list.service.d.ts +2 -1
  114. package/group-buttons-settings/group-buttons-settings.component.d.ts +5 -2
  115. package/group-buttons-settings/group-buttons-settings.model.d.ts +1 -1
  116. package/icon-picker/icon-picker.component.d.ts +24 -0
  117. package/icon-picker/icon-picker.module.d.ts +13 -0
  118. package/icon-picker/icon-picker.service.d.ts +8 -0
  119. package/icon-picker/index.d.ts +5 -0
  120. package/icon-picker/public-api.d.ts +2 -0
  121. package/layout-builder/hide-in/hide-in.component.d.ts +25 -0
  122. package/layout-builder/hide-in/hide-in.component.theme.scss +9 -0
  123. package/layout-builder/hide-in/hide-in.module.d.ts +20 -0
  124. package/layout-builder/index.d.ts +5 -0
  125. package/layout-builder/layout/layout.component.d.ts +49 -0
  126. package/layout-builder/layout/layout.module.d.ts +16 -0
  127. package/layout-builder/layout-builder-editor/layout-builder-editor.component.d.ts +15 -0
  128. package/layout-builder/layout-builder-editor/layout-builder-editor.module.d.ts +14 -0
  129. package/layout-builder/layout-builder-internal.service.d.ts +120 -0
  130. package/layout-builder/layout-builder.component.d.ts +50 -0
  131. package/layout-builder/layout-builder.component.theme.scss +57 -0
  132. package/layout-builder/layout-builder.model.d.ts +44 -0
  133. package/layout-builder/layout-builder.module.d.ts +32 -0
  134. package/layout-builder/layout-builder.service.d.ts +15 -0
  135. package/layout-builder/main-editor/main-editor.component.d.ts +46 -0
  136. package/layout-builder/main-editor/main-editor.module.d.ts +27 -0
  137. package/layout-builder/public-api.d.ts +8 -0
  138. package/layout-builder/section/section.component.d.ts +75 -0
  139. package/layout-builder/section/section.component.theme.scss +115 -0
  140. package/layout-builder/section/section.module.d.ts +14 -0
  141. package/layout-builder/section-block/section-block.component.d.ts +38 -0
  142. package/layout-builder/section-block/section-block.component.theme.scss +13 -0
  143. package/layout-builder/section-block/section-block.module.d.ts +11 -0
  144. package/layout-builder/section-editor/section-editor.component.d.ts +53 -0
  145. package/layout-builder/section-editor/section-editor.module.d.ts +14 -0
  146. package/manage-parameters/index.d.ts +5 -0
  147. package/manage-parameters/manage-parameter/manage-parameter.component.d.ts +28 -0
  148. package/manage-parameters/manage-parameters.component.d.ts +33 -0
  149. package/manage-parameters/manage-parameters.model.d.ts +21 -0
  150. package/manage-parameters/manage-parameters.module.d.ts +14 -0
  151. package/manage-parameters/manage-parameters.service.d.ts +16 -0
  152. package/manage-parameters/public-api.d.ts +3 -0
  153. package/package.json +49 -1
  154. package/rich-text/index.d.ts +5 -0
  155. package/rich-text/public-api.d.ts +2 -0
  156. package/rich-text/rich-text.component.d.ts +43 -0
  157. package/rich-text/rich-text.module.d.ts +16 -0
  158. package/rich-text/rich-text.service.d.ts +9 -0
  159. package/shadow-settings/shadow-settings.component.d.ts +2 -1
  160. package/show-if-badge/index.d.ts +5 -0
  161. package/show-if-badge/public-api.d.ts +2 -0
  162. package/show-if-badge/show-if-badge.component.d.ts +20 -0
  163. package/show-if-badge/show-if-badge.module.d.ts +16 -0
  164. package/src/assets/i18n/en.ngx-composite-lib.json +77 -4
  165. package/src/assets/images/brand-leaf-full@1x.png +0 -0
  166. package/src/assets/images/brand-leaf-full@2x.png +0 -0
  167. package/src/assets/images/brand-leaf-round.png +0 -0
  168. package/src/assets/images/brand-leaf-round@2x.png +0 -0
  169. package/src/assets/images/brand-leaf-skiny@1x.png +0 -0
  170. package/src/assets/images/brand-leaf-skiny@2x.png +0 -0
@@ -0,0 +1,34 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { SectionBlockComponent } from './section-block.component';
4
+ import { DragDropModule } from '@angular/cdk/drag-drop';
5
+ import { PepButtonModule } from '@pepperi-addons/ngx-lib/button';
6
+ import { PepDraggableItemsModule } from '@pepperi-addons/ngx-lib/draggable-items';
7
+ import * as i0 from "@angular/core";
8
+ export class SectionBlockModule {
9
+ }
10
+ SectionBlockModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionBlockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ SectionBlockModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: SectionBlockModule, declarations: [SectionBlockComponent], imports: [CommonModule,
12
+ DragDropModule,
13
+ PepButtonModule,
14
+ PepDraggableItemsModule], exports: [SectionBlockComponent] });
15
+ SectionBlockModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionBlockModule, imports: [CommonModule,
16
+ DragDropModule,
17
+ PepButtonModule,
18
+ PepDraggableItemsModule] });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionBlockModule, decorators: [{
20
+ type: NgModule,
21
+ args: [{
22
+ declarations: [
23
+ SectionBlockComponent,
24
+ ],
25
+ imports: [
26
+ CommonModule,
27
+ DragDropModule,
28
+ PepButtonModule,
29
+ PepDraggableItemsModule,
30
+ ],
31
+ exports: [SectionBlockComponent]
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1ibG9jay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9sYXlvdXQtYnVpbGRlci9zZWN0aW9uLWJsb2NrL3NlY3Rpb24tYmxvY2subW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBY2xGLE1BQU0sT0FBTyxrQkFBa0I7OytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkFWdkIscUJBQXFCLGFBR3JCLFlBQVk7UUFDWixjQUFjO1FBQ2QsZUFBZTtRQUNmLHVCQUF1QixhQUVqQixxQkFBcUI7Z0hBRXRCLGtCQUFrQixZQVB2QixZQUFZO1FBQ1osY0FBYztRQUNkLGVBQWU7UUFDZix1QkFBdUI7MkZBSWxCLGtCQUFrQjtrQkFaOUIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUU7d0JBQ1YscUJBQXFCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsdUJBQXVCO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNlY3Rpb25CbG9ja0NvbXBvbmVudCB9IGZyb20gJy4vc2VjdGlvbi1ibG9jay5jb21wb25lbnQnXG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgUGVwQnV0dG9uTW9kdWxlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvYnV0dG9uJztcbmltcG9ydCB7IFBlcERyYWdnYWJsZUl0ZW1zTW9kdWxlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvZHJhZ2dhYmxlLWl0ZW1zJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgU2VjdGlvbkJsb2NrQ29tcG9uZW50LFxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIERyYWdEcm9wTW9kdWxlLFxuICAgICAgICBQZXBCdXR0b25Nb2R1bGUsXG4gICAgICAgIFBlcERyYWdnYWJsZUl0ZW1zTW9kdWxlLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1NlY3Rpb25CbG9ja0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgU2VjdGlvbkJsb2NrTW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,192 @@
1
+ import { coerceNumberProperty } from '@angular/cdk/coercion';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { PepDialogActionButton, PepDialogData } from '@pepperi-addons/ngx-lib/dialog';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@ngx-translate/core";
6
+ import * as i2 from "@pepperi-addons/ngx-lib/dialog";
7
+ import * as i3 from "@pepperi-addons/ngx-lib/textbox";
8
+ import * as i4 from "@pepperi-addons/ngx-lib/select";
9
+ import * as i5 from "@pepperi-addons/ngx-lib/checkbox";
10
+ import * as i6 from "../layout-builder-editor/layout-builder-editor.component";
11
+ export class SectionEditorComponent {
12
+ constructor(translate, dialog) {
13
+ this.translate = translate;
14
+ this.dialog = dialog;
15
+ this.MIN_HEIGHT = 40;
16
+ this.sectionName = '';
17
+ this.isAutoHeight = true;
18
+ this.height = this.MIN_HEIGHT;
19
+ this.hostObjectChange = new EventEmitter();
20
+ this.collapseOnTablet = false;
21
+ this.fillHeight = false;
22
+ this.subSections = false;
23
+ this.partsNumber = "2";
24
+ this.partsNumberOptions = Array();
25
+ this.splitOptions = Array();
26
+ this.allSplitOptions = Array();
27
+ this.initData();
28
+ }
29
+ set hostObject(value) {
30
+ this._hostObject = value;
31
+ this.sectionName = value.sectionName;
32
+ this.split = value.split;
33
+ this.isAutoHeight = !value.height || value.height === 0;
34
+ this.height = this.isAutoHeight ? this.MIN_HEIGHT : value.height;
35
+ this.collapseOnTablet = value.collapseOnTablet ?? false;
36
+ this.fillHeight = value.fillHeight ?? false;
37
+ }
38
+ get hostObject() {
39
+ return this._hostObject;
40
+ }
41
+ set split(value) {
42
+ this._split = value;
43
+ this.subSections = (this._split && this._split.length > 0) ? true : false;
44
+ // Check how many parts we have.
45
+ const arr = value?.split(' ');
46
+ if (arr && arr.length > 1 && arr.length <= 4) {
47
+ this.partsNumber = arr.length.toString();
48
+ }
49
+ else {
50
+ this.partsNumber = "2";
51
+ }
52
+ this.loadSplitOptions();
53
+ }
54
+ get split() {
55
+ return this._split;
56
+ }
57
+ initData() {
58
+ this.partsNumberOptions = [
59
+ { 'key': '2', 'value': '2 Parts' },
60
+ { 'key': '3', 'value': '3 Parts' },
61
+ { 'key': '4', 'value': '4 Parts' }
62
+ ];
63
+ this.allSplitOptions = [
64
+ { 'key': '2', 'value': [
65
+ { 'key': '1/4 3/4', 'value': '1/4-3/4' },
66
+ { 'key': '1/3 2/3', 'value': '1/3-2/3' },
67
+ { 'key': '1/2 1/2', 'value': '1/2-1/2' },
68
+ { 'key': '2/3 1/3', 'value': '2/3-1/3' },
69
+ { 'key': '3/4 1/4', 'value': '3/4-1/4' },
70
+ ] },
71
+ { 'key': '3', 'value': [
72
+ { 'key': '1/3 1/3 1/3', 'value': '1/3-1/3-1/3' },
73
+ { 'key': '1/2 1/4 1/4', 'value': '1/2-1/4-1/4' },
74
+ { 'key': '1/4 1/2 1/4', 'value': '1/4-1/2-1/4' },
75
+ { 'key': '1/4 1/4 1/2', 'value': '1/4-1/4-1/2' },
76
+ ] },
77
+ { 'key': '4', 'value': [
78
+ { 'key': '1/4 1/4 1/4 1/4', 'value': '1/4-1/4-1/4-1/4' },
79
+ ] }
80
+ ];
81
+ }
82
+ loadSplitOptions() {
83
+ const splitOptions = this.allSplitOptions.find((option) => option.key === this.partsNumber);
84
+ if (splitOptions) {
85
+ this.splitOptions = splitOptions.value;
86
+ }
87
+ else {
88
+ this.splitOptions = this.allSplitOptions[0].value;
89
+ }
90
+ if (!this._split) {
91
+ this._split = this.splitOptions[0].key;
92
+ }
93
+ }
94
+ updateHostObject() {
95
+ this._hostObject.sectionName = this.sectionName;
96
+ this._hostObject.split = this.subSections ? this.split : undefined;
97
+ this._hostObject.height = this.isAutoHeight ? 0 : this.height;
98
+ this._hostObject.collapseOnTablet = this.collapseOnTablet;
99
+ this._hostObject.fillHeight = this.fillHeight;
100
+ this.hostObjectChange.emit(this.hostObject);
101
+ }
102
+ ngOnInit() {
103
+ this.loadSplitOptions();
104
+ }
105
+ isAutoHeightChange(isChecked) {
106
+ this.isAutoHeight = isChecked;
107
+ this.updateHostObject();
108
+ }
109
+ onHeightChange(height) {
110
+ if (height >= this.MIN_HEIGHT) {
111
+ this.height = coerceNumberProperty(height, this.height);
112
+ this.updateHostObject();
113
+ }
114
+ }
115
+ onSectionNameChange(value) {
116
+ this.sectionName = value;
117
+ this.updateHostObject();
118
+ }
119
+ onCollapseOnTabletChange(value) {
120
+ this.collapseOnTablet = value;
121
+ this.updateHostObject();
122
+ }
123
+ onFillHeightChange(value) {
124
+ this.fillHeight = value;
125
+ this.updateHostObject();
126
+ }
127
+ onSubSectionsChange(value) {
128
+ const oldValue = this.subSections;
129
+ // Check if cancel the sub sections ( change from any -> 1 section ), if true need to show confirm message
130
+ if (value === false) {
131
+ this.subSections = value;
132
+ this.showDeleteSectionMsg(() => {
133
+ this.updateHostObject();
134
+ }, () => {
135
+ this.subSections = oldValue;
136
+ });
137
+ }
138
+ else {
139
+ this.subSections = value;
140
+ this.updateHostObject();
141
+ }
142
+ }
143
+ onPartsNumberChange(key) {
144
+ const oldKey = this.partsNumber;
145
+ // Check if decrease on sub sections number, if true need to show confirm message
146
+ if (key && parseInt(key) < parseInt(this.partsNumber)) {
147
+ this.partsNumber = key;
148
+ this.showDeleteSectionMsg(() => {
149
+ this.loadSplitOptions();
150
+ this._split = this.splitOptions[0].key;
151
+ this.updateHostObject();
152
+ }, () => {
153
+ this.partsNumber = oldKey;
154
+ });
155
+ }
156
+ else {
157
+ this.partsNumber = key;
158
+ this.loadSplitOptions();
159
+ this._split = this.splitOptions[0].key;
160
+ this.updateHostObject();
161
+ }
162
+ }
163
+ showDeleteSectionMsg(continueCB, cancelCB) {
164
+ const actionButtons = [
165
+ new PepDialogActionButton(this.translate.instant('ACTIONS.CANCEL'), '', () => {
166
+ cancelCB();
167
+ }),
168
+ new PepDialogActionButton(this.translate.instant('ACTIONS.CONTINUE'), 'strong caution', () => {
169
+ continueCB();
170
+ })
171
+ ];
172
+ const content = this.translate.instant('LAYOUT_BUILDER.DELETE_SECTION_MSG');
173
+ const title = this.translate.instant('LAYOUT_BUILDER.DELETE_SECTION_TITLE');
174
+ const dataMsg = new PepDialogData({ title, actionsType: 'custom', content, actionButtons });
175
+ this.dialog.openDefaultDialog(dataMsg);
176
+ }
177
+ onSplitChange(key) {
178
+ this._split = key;
179
+ this.updateHostObject();
180
+ }
181
+ }
182
+ SectionEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionEditorComponent, deps: [{ token: i1.TranslateService }, { token: i2.PepDialogService }], target: i0.ɵɵFactoryTarget.Component });
183
+ SectionEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: SectionEditorComponent, selector: "section-editor", inputs: { hostObject: "hostObject" }, outputs: { hostObjectChange: "hostObjectChange" }, ngImport: i0, template: "<pep-layout-builder-editor class=\"section-editor-container\">\n <div>\n <pep-textbox [value]=\"sectionName\" [label]=\"'LAYOUT_BUILDER.SECTION_NAME_TITLE' | translate\" (valueChange)=\"onSectionNameChange($event)\"></pep-textbox>\n </div>\n <!-- \n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"isAutoHeight\" [label]=\"'LAYOUT_BUILDER.AUTO_HEIGHT_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"isAutoHeightChange($event)\"></pep-checkbox>\n <pep-textbox [label]=\"'LAYOUT_BUILDER.HEIGHT_TITLE' | translate\" type=\"int\" [minValue]=\"MIN_HEIGHT\" [disabled]=\"isAutoHeight\" [value]=\"height\" (valueChange)=\"onHeightChange($event)\"></pep-textbox> \n </div>\n -->\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"subSections\" [label]=\"'LAYOUT_BUILDER.SUB_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onSubSectionsChange($event)\"></pep-checkbox>\n <div class=\"split-area\">\n <pep-select [label]=\"'LAYOUT_BUILDER.SECTIONS_TITLE' | translate\" [value]=\"partsNumber\" [options]=\"partsNumberOptions\" \n (valueChange)=\"onPartsNumberChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n <pep-select [label]=\"'LAYOUT_BUILDER.SPLIT_TITLE' | translate\" [value]=\"split || ''\" [options]=\"splitOptions\"\n (valueChange)=\"onSplitChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n </div>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"collapseOnTablet\" [label]=\"'LAYOUT_BUILDER.COLLAPSE_ON_TABLET_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onCollapseOnTabletChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.COLLAPSE_ON_TABLET_DESCRIPTION' | translate)}}</span>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"fillHeight\" [label]=\"'LAYOUT_BUILDER.FILL_HEIGHT_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onFillHeightChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.FILL_HEIGHT_SECTION_DESCRIPTION' | translate)}}</span>\n </div>\n</pep-layout-builder-editor>\n\n<!-- <div class=\"section-editor-container layout-builder-editor-container\">\n <div>\n <pep-textbox [value]=\"sectionName\" [label]=\"'LAYOUT_BUILDER.SECTION_NAME_TITLE' | translate\" (valueChange)=\"onSectionNameChange($event)\"></pep-textbox>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"subSections\" [label]=\"'LAYOUT_BUILDER.SUB_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onSubSectionsChange($event)\"></pep-checkbox>\n <div class=\"split-area\">\n <pep-select [label]=\"'LAYOUT_BUILDER.SECTIONS_TITLE' | translate\" [value]=\"partsNumber\" [options]=\"partsNumberOptions\" \n (valueChange)=\"onPartsNumberChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n <pep-select [label]=\"'LAYOUT_BUILDER.SPLIT_TITLE' | translate\" [value]=\"split || ''\" [options]=\"splitOptions\"\n (valueChange)=\"onSplitChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n </div>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"collapseOnTablet\" [label]=\"'LAYOUT_BUILDER.COLLAPSE_ON_TABLET_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onCollapseOnTabletChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.COLLAPSE_ON_TABLET_DESCRIPTION' | translate)}}</span>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"fillHeight\" [label]=\"'LAYOUT_BUILDER.FILL_HEIGHT_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onFillHeightChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.FILL_HEIGHT_SECTION_DESCRIPTION' | translate)}}</span>\n </div>\n</div> -->\n", styles: [".section-editor-container .split-area{display:grid;grid-template-columns:1fr 1fr;gap:var(--pep-spacing-lg, 1rem)}\n"], dependencies: [{ kind: "component", type: i3.PepTextboxComponent, selector: "pep-textbox", inputs: ["key", "value", "minFractionDigits", "maxFractionDigits", "accessory", "label", "placeholder", "type", "mandatory", "disabled", "readonly", "maxFieldCharacters", "hint", "textColor", "xAlignment", "rowSpan", "minValue", "maxValue", "visible", "form", "isActive", "showTitle", "renderTitle", "renderError", "renderSymbol", "layoutType", "parentFieldKey", "regex", "regexError", "isInFocus"], outputs: ["valueChange", "keyup"] }, { kind: "component", type: i4.PepSelectComponent, selector: "pep-select", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "placeholder", "placeholderWhenDisabled", "options", "visible", "emptyOption", "form", "layoutType", "parentFieldKey", "isActive", "showTitle", "renderTitle", "typeaheadDebounceInterval", "addValueToOptionsIfNotExist"], outputs: ["valueChange"] }, { kind: "component", type: i5.PepCheckboxComponent, selector: "pep-checkbox", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "additionalValue", "form", "isActive", "showTitle", "renderTitle", "layoutType", "visible"], outputs: ["valueChange"] }, { kind: "component", type: i6.PepLayoutBuilderEditorComponent, selector: "pep-layout-builder-editor", inputs: ["editorTabs"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionEditorComponent, decorators: [{
185
+ type: Component,
186
+ args: [{ selector: 'section-editor', template: "<pep-layout-builder-editor class=\"section-editor-container\">\n <div>\n <pep-textbox [value]=\"sectionName\" [label]=\"'LAYOUT_BUILDER.SECTION_NAME_TITLE' | translate\" (valueChange)=\"onSectionNameChange($event)\"></pep-textbox>\n </div>\n <!-- \n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"isAutoHeight\" [label]=\"'LAYOUT_BUILDER.AUTO_HEIGHT_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"isAutoHeightChange($event)\"></pep-checkbox>\n <pep-textbox [label]=\"'LAYOUT_BUILDER.HEIGHT_TITLE' | translate\" type=\"int\" [minValue]=\"MIN_HEIGHT\" [disabled]=\"isAutoHeight\" [value]=\"height\" (valueChange)=\"onHeightChange($event)\"></pep-textbox> \n </div>\n -->\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"subSections\" [label]=\"'LAYOUT_BUILDER.SUB_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onSubSectionsChange($event)\"></pep-checkbox>\n <div class=\"split-area\">\n <pep-select [label]=\"'LAYOUT_BUILDER.SECTIONS_TITLE' | translate\" [value]=\"partsNumber\" [options]=\"partsNumberOptions\" \n (valueChange)=\"onPartsNumberChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n <pep-select [label]=\"'LAYOUT_BUILDER.SPLIT_TITLE' | translate\" [value]=\"split || ''\" [options]=\"splitOptions\"\n (valueChange)=\"onSplitChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n </div>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"collapseOnTablet\" [label]=\"'LAYOUT_BUILDER.COLLAPSE_ON_TABLET_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onCollapseOnTabletChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.COLLAPSE_ON_TABLET_DESCRIPTION' | translate)}}</span>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"fillHeight\" [label]=\"'LAYOUT_BUILDER.FILL_HEIGHT_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onFillHeightChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.FILL_HEIGHT_SECTION_DESCRIPTION' | translate)}}</span>\n </div>\n</pep-layout-builder-editor>\n\n<!-- <div class=\"section-editor-container layout-builder-editor-container\">\n <div>\n <pep-textbox [value]=\"sectionName\" [label]=\"'LAYOUT_BUILDER.SECTION_NAME_TITLE' | translate\" (valueChange)=\"onSectionNameChange($event)\"></pep-textbox>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"subSections\" [label]=\"'LAYOUT_BUILDER.SUB_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onSubSectionsChange($event)\"></pep-checkbox>\n <div class=\"split-area\">\n <pep-select [label]=\"'LAYOUT_BUILDER.SECTIONS_TITLE' | translate\" [value]=\"partsNumber\" [options]=\"partsNumberOptions\" \n (valueChange)=\"onPartsNumberChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n <pep-select [label]=\"'LAYOUT_BUILDER.SPLIT_TITLE' | translate\" [value]=\"split || ''\" [options]=\"splitOptions\"\n (valueChange)=\"onSplitChange($event)\" [emptyOption]=\"false\" [disabled]=\"!subSections\"></pep-select>\n </div>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"collapseOnTablet\" [label]=\"'LAYOUT_BUILDER.COLLAPSE_ON_TABLET_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onCollapseOnTabletChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.COLLAPSE_ON_TABLET_DESCRIPTION' | translate)}}</span>\n </div>\n <div class=\"editor-separator\"></div>\n <div>\n <pep-checkbox class=\"checkbox-as-title\" [value]=\"fillHeight\" [label]=\"'LAYOUT_BUILDER.FILL_HEIGHT_SECTION_TITLE' | translate\" [renderTitle]=\"false\" (valueChange)=\"onFillHeightChange($event)\"></pep-checkbox>\n <span class=\"header-title body-xs\">{{('LAYOUT_BUILDER.FILL_HEIGHT_SECTION_DESCRIPTION' | translate)}}</span>\n </div>\n</div> -->\n", styles: [".section-editor-container .split-area{display:grid;grid-template-columns:1fr 1fr;gap:var(--pep-spacing-lg, 1rem)}\n"] }]
187
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.PepDialogService }]; }, propDecorators: { hostObject: [{
188
+ type: Input
189
+ }], hostObjectChange: [{
190
+ type: Output
191
+ }] } });
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvc2VjdGlvbi1lZGl0b3Ivc2VjdGlvbi1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvc2VjdGlvbi1lZGl0b3Ivc2VjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFvQixNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7OztBQWlCeEcsTUFBTSxPQUFPLHNCQUFzQjtJQXNEL0IsWUFBb0IsU0FBMkIsRUFBVSxNQUF3QjtRQUE3RCxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBckR4RSxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBa0J6QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQXNCekIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsV0FBTSxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFdkIscUJBQWdCLEdBQXVDLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRTFHLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGdCQUFXLEdBQVcsR0FBRyxDQUFDO1FBQzFCLHVCQUFrQixHQUFHLEtBQUssRUFBYyxDQUFDO1FBQ3pDLGlC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LENBQUM7O21IQTVNUSxzQkFBc0I7dUdBQXRCLHNCQUFzQiwrSUN0Qm5DLHkxSUF5REE7MkZEbkNhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDSSxnQkFBZ0I7c0lBU3RCLFVBQVU7c0JBRGIsS0FBSztnQkF3Q0ksZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSVBlcE9wdGlvbiB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IFNwbGl0VHlwZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9wYXBpLXNkayc7XG5pbXBvcnQgeyBQZXBEaWFsb2dBY3Rpb25CdXR0b24sIFBlcERpYWxvZ0RhdGEsIFBlcERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kaWFsb2cnO1xuaW1wb3J0IHsgSUxheW91dFNlY3Rpb25FZGl0b3IgfSBmcm9tICcuLi9sYXlvdXQtYnVpbGRlci1pbnRlcm5hbC5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJU3BsaXRPcHRpb24ge1xuICAgIGtleTogU3BsaXRUeXBlOyBcbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBJQWxsU3BsaXRPcHRpb24ge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBBcnJheTxJU3BsaXRPcHRpb24+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NlY3Rpb24tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NlY3Rpb24tZWRpdG9yLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2VjdGlvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcmVhZG9ubHkgTUlOX0hFSUdIVCA9IDQwO1xuICAgIFxuICAgIHByaXZhdGUgX2hvc3RPYmplY3QhOiBJTGF5b3V0U2VjdGlvbkVkaXRvcjtcbiAgICBASW5wdXQoKVxuICAgIHNldCBob3N0T2JqZWN0KHZhbHVlOiBJTGF5b3V0U2VjdGlvbkVkaXRvcikge1xuICAgICAgICB0aGlzLl9ob3N0T2JqZWN0ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZWN0aW9uTmFtZSA9IHZhbHVlLnNlY3Rpb25OYW1lO1xuICAgICAgICB0aGlzLnNwbGl0ID0gdmFsdWUuc3BsaXQ7XG4gICAgICAgIHRoaXMuaXNBdXRvSGVpZ2h0ID0gIXZhbHVlLmhlaWdodCB8fCB2YWx1ZS5oZWlnaHQgPT09IDA7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5pc0F1dG9IZWlnaHQgPyB0aGlzLk1JTl9IRUlHSFQgOiB2YWx1ZS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuY29sbGFwc2VPblRhYmxldCA9IHZhbHVlLmNvbGxhcHNlT25UYWJsZXQgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsbEhlaWdodCA9IHZhbHVlLmZpbGxIZWlnaHQgPz8gZmFsc2U7XG4gICAgfVxuICAgIGdldCBob3N0T2JqZWN0KCk6IElMYXlvdXRTZWN0aW9uRWRpdG9yIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvc3RPYmplY3Q7XG4gICAgfVxuXG4gICAgc2VjdGlvbk5hbWU6IHN0cmluZyA9ICcnO1xuICAgIFxuICAgIHByaXZhdGUgX3NwbGl0OiBTcGxpdFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgc2V0IHNwbGl0KHZhbHVlOiBTcGxpdFR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3BsaXQgPSB2YWx1ZTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc3ViU2VjdGlvbnMgPSAodGhpcy5fc3BsaXQgJiYgdGhpcy5fc3BsaXQubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgaG93IG1hbnkgcGFydHMgd2UgaGF2ZS5cbiAgICAgICAgY29uc3QgYXJyID0gdmFsdWU/LnNwbGl0KCcgJyk7XG4gICAgICAgIGlmIChhcnIgJiYgYXJyLmxlbmd0aCA+IDEgJiYgYXJyLmxlbmd0aCA8PSA0KSB7XG4gICAgICAgICAgICB0aGlzLnBhcnRzTnVtYmVyID0gYXJyLmxlbmd0aC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXJ0c051bWJlciA9IFwiMlwiO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxvYWRTcGxpdE9wdGlvbnMoKTtcbiAgICB9XG4gICAgZ2V0IHNwbGl0KCk6IFNwbGl0VHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGxpdDtcbiAgICB9XG4gICAgXG4gICAgaXNBdXRvSGVpZ2h0OiBib29sZWFuID0gdHJ1ZTtcbiAgICBoZWlnaHQ6IG51bWJlciA9IHRoaXMuTUlOX0hFSUdIVDtcblxuICAgIEBPdXRwdXQoKSBob3N0T2JqZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUxheW91dFNlY3Rpb25FZGl0b3I+ID0gbmV3IEV2ZW50RW1pdHRlcjxJTGF5b3V0U2VjdGlvbkVkaXRvcj4oKTtcbiAgICBcbiAgICBjb2xsYXBzZU9uVGFibGV0OiBib29sZWFuID0gZmFsc2U7XG4gICAgZmlsbEhlaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHN1YlNlY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG4gICAgcGFydHNOdW1iZXI6IHN0cmluZyA9IFwiMlwiO1xuICAgIHBhcnRzTnVtYmVyT3B0aW9ucyA9IEFycmF5PElQZXBPcHRpb24+KCk7XG4gICAgc3BsaXRPcHRpb25zID0gQXJyYXk8SVNwbGl0T3B0aW9uPigpO1xuICAgIGFsbFNwbGl0T3B0aW9ucyA9IEFycmF5PElBbGxTcGxpdE9wdGlvbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIGRpYWxvZzogUGVwRGlhbG9nU2VydmljZSkge1xuICAgICAgICB0aGlzLmluaXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5wYXJ0c051bWJlck9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7ICdrZXknOiAnMicsICd2YWx1ZSc6ICcyIFBhcnRzJyB9LCBcbiAgICAgICAgICAgIHsgJ2tleSc6ICczJywgJ3ZhbHVlJzogJzMgUGFydHMnIH0sXG4gICAgICAgICAgICB7ICdrZXknOiAnNCcsICd2YWx1ZSc6ICc0IFBhcnRzJyB9XG4gICAgICAgIF07XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFsbFNwbGl0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHsgJ2tleSc6ICcyJywgJ3ZhbHVlJzogW1xuICAgICAgICAgICAgICAgIHsgJ2tleSc6ICcxLzQgMy80JywgJ3ZhbHVlJzogJzEvNC0zLzQnIH0sXG4gICAgICAgICAgICAgICAgeyAna2V5JzogJzEvMyAyLzMnLCAndmFsdWUnOiAnMS8zLTIvMycgfSxcbiAgICAgICAgICAgICAgICB7ICdrZXknOiAnMS8yIDEvMicsICd2YWx1ZSc6ICcxLzItMS8yJyB9LFxuICAgICAgICAgICAgICAgIHsgJ2tleSc6ICcyLzMgMS8zJywgJ3ZhbHVlJzogJzIvMy0xLzMnIH0sXG4gICAgICAgICAgICAgICAgeyAna2V5JzogJzMvNCAxLzQnLCAndmFsdWUnOiAnMy80LTEvNCcgfSxcbiAgICAgICAgICAgIF19LCBcbiAgICAgICAgICAgIHsgJ2tleSc6ICczJywgJ3ZhbHVlJzogW1xuICAgICAgICAgICAgICAgIHsgJ2tleSc6ICcxLzMgMS8zIDEvMycsICd2YWx1ZSc6ICcxLzMtMS8zLTEvMycgfSxcbiAgICAgICAgICAgICAgICB7ICdrZXknOiAnMS8yIDEvNCAxLzQnLCAndmFsdWUnOiAnMS8yLTEvNC0xLzQnIH0sXG4gICAgICAgICAgICAgICAgeyAna2V5JzogJzEvNCAxLzIgMS80JywgJ3ZhbHVlJzogJzEvNC0xLzItMS80JyB9LFxuICAgICAgICAgICAgICAgIHsgJ2tleSc6ICcxLzQgMS80IDEvMicsICd2YWx1ZSc6ICcxLzQtMS80LTEvMicgfSxcbiAgICAgICAgICAgIF19LFxuICAgICAgICAgICAgeyAna2V5JzogJzQnLCAndmFsdWUnOiBbXG4gICAgICAgICAgICAgICAgeyAna2V5JzogJzEvNCAxLzQgMS80IDEvNCcsICd2YWx1ZSc6ICcxLzQtMS80LTEvNC0xLzQnIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFNwbGl0T3B0aW9ucygpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRPcHRpb25zID0gdGhpcy5hbGxTcGxpdE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSB0aGlzLnBhcnRzTnVtYmVyKTtcbiAgICAgICAgaWYgKHNwbGl0T3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zcGxpdE9wdGlvbnMgPSBzcGxpdE9wdGlvbnMudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNwbGl0T3B0aW9ucyA9IHRoaXMuYWxsU3BsaXRPcHRpb25zWzBdLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9zcGxpdCkge1xuICAgICAgICAgICAgdGhpcy5fc3BsaXQgPSB0aGlzLnNwbGl0T3B0aW9uc1swXS5rZXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUhvc3RPYmplY3QoKSB7XG4gICAgICAgIHRoaXMuX2hvc3RPYmplY3Quc2VjdGlvbk5hbWUgPSB0aGlzLnNlY3Rpb25OYW1lO1xuICAgICAgICB0aGlzLl9ob3N0T2JqZWN0LnNwbGl0ID0gdGhpcy5zdWJTZWN0aW9ucyA/IHRoaXMuc3BsaXQgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2hvc3RPYmplY3QuaGVpZ2h0ID0gdGhpcy5pc0F1dG9IZWlnaHQgPyAwIDogdGhpcy5oZWlnaHQ7XG4gICAgICAgIHRoaXMuX2hvc3RPYmplY3QuY29sbGFwc2VPblRhYmxldCA9IHRoaXMuY29sbGFwc2VPblRhYmxldDtcbiAgICAgICAgdGhpcy5faG9zdE9iamVjdC5maWxsSGVpZ2h0ID0gdGhpcy5maWxsSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuaG9zdE9iamVjdENoYW5nZS5lbWl0KHRoaXMuaG9zdE9iamVjdCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZFNwbGl0T3B0aW9ucygpO1xuICAgIH1cbiAgICBcbiAgICBpc0F1dG9IZWlnaHRDaGFuZ2UoaXNDaGVja2VkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNBdXRvSGVpZ2h0ID0gaXNDaGVja2VkO1xuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RPYmplY3QoKTtcbiAgICB9XG5cbiAgICBvbkhlaWdodENoYW5nZShoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBpZiAoaGVpZ2h0ID49IHRoaXMuTUlOX0hFSUdIVCkge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShoZWlnaHQsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSG9zdE9iamVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIG9uU2VjdGlvbk5hbWVDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlY3Rpb25OYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlSG9zdE9iamVjdCgpO1xuICAgIH1cblxuICAgIG9uQ29sbGFwc2VPblRhYmxldENoYW5nZSh2YWx1ZTogYm9vbGVhbil7XG4gICAgICAgIHRoaXMuY29sbGFwc2VPblRhYmxldCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RPYmplY3QoKTtcbiAgICB9XG5cbiAgICBvbkZpbGxIZWlnaHRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pe1xuICAgICAgICB0aGlzLmZpbGxIZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVIb3N0T2JqZWN0KCk7XG4gICAgfVxuXG4gICAgb25TdWJTZWN0aW9uc0NoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3ViU2VjdGlvbnM7XG4gICAgICAgIC8vIENoZWNrIGlmIGNhbmNlbCB0aGUgc3ViIHNlY3Rpb25zICggY2hhbmdlIGZyb20gYW55IC0+IDEgc2VjdGlvbiApLCBpZiB0cnVlIG5lZWQgdG8gc2hvdyBjb25maXJtIG1lc3NhZ2VcbiAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5zdWJTZWN0aW9ucyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zaG93RGVsZXRlU2VjdGlvbk1zZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVIb3N0T2JqZWN0KCk7XG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJTZWN0aW9ucyA9IG9sZFZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YlNlY3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUhvc3RPYmplY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgXG4gICAgb25QYXJ0c051bWJlckNoYW5nZShrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBvbGRLZXkgPSB0aGlzLnBhcnRzTnVtYmVyO1xuICAgICAgICAvLyBDaGVjayBpZiBkZWNyZWFzZSBvbiBzdWIgc2VjdGlvbnMgbnVtYmVyLCBpZiB0cnVlIG5lZWQgdG8gc2hvdyBjb25maXJtIG1lc3NhZ2VcbiAgICAgICAgaWYgKGtleSAmJiBwYXJzZUludChrZXkpIDwgcGFyc2VJbnQodGhpcy5wYXJ0c051bWJlcikpIHtcbiAgICAgICAgICAgIHRoaXMucGFydHNOdW1iZXIgPSBrZXk7XG4gICAgICAgICAgICB0aGlzLnNob3dEZWxldGVTZWN0aW9uTXNnKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTcGxpdE9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zcGxpdCA9IHRoaXMuc3BsaXRPcHRpb25zWzBdLmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUhvc3RPYmplY3QoKTtcbiAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRzTnVtYmVyID0gb2xkS2V5O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFydHNOdW1iZXIgPSBrZXk7XG4gICAgICAgICAgICB0aGlzLmxvYWRTcGxpdE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX3NwbGl0ID0gdGhpcy5zcGxpdE9wdGlvbnNbMF0ua2V5O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVIb3N0T2JqZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93RGVsZXRlU2VjdGlvbk1zZyhjb250aW51ZUNCOiAoKSA9PiB2b2lkLCBjYW5jZWxDQjogKCkgPT4gdm9pZCl7XG4gICAgICAgIGNvbnN0IGFjdGlvbkJ1dHRvbnMgPSBbXG4gICAgICAgICAgICBuZXcgUGVwRGlhbG9nQWN0aW9uQnV0dG9uKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0FDVElPTlMuQ0FOQ0VMJyksXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxDQigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBuZXcgUGVwRGlhbG9nQWN0aW9uQnV0dG9uKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0FDVElPTlMuQ09OVElOVUUnKSxcbiAgICAgICAgICAgICAgICAnc3Ryb25nIGNhdXRpb24nLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVDQigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgXTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdMQVlPVVRfQlVJTERFUi5ERUxFVEVfU0VDVElPTl9NU0cnKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdMQVlPVVRfQlVJTERFUi5ERUxFVEVfU0VDVElPTl9USVRMRScpO1xuICAgICAgICBjb25zdCBkYXRhTXNnID0gbmV3IFBlcERpYWxvZ0RhdGEoe3RpdGxlLCBhY3Rpb25zVHlwZTogJ2N1c3RvbScsIGNvbnRlbnQsIGFjdGlvbkJ1dHRvbnN9KTtcblxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGVmYXVsdERpYWxvZyhkYXRhTXNnKTtcbiAgICB9XG5cblxuICAgIG9uU3BsaXRDaGFuZ2Uoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc3BsaXQgPSBrZXkgYXMgU3BsaXRUeXBlO1xuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RPYmplY3QoKTtcbiAgICB9XG59XG4iLCI8cGVwLWxheW91dC1idWlsZGVyLWVkaXRvciBjbGFzcz1cInNlY3Rpb24tZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxwZXAtdGV4dGJveCBbdmFsdWVdPVwic2VjdGlvbk5hbWVcIiBbbGFiZWxdPVwiJ0xBWU9VVF9CVUlMREVSLlNFQ1RJT05fTkFNRV9USVRMRScgfCB0cmFuc2xhdGVcIiAodmFsdWVDaGFuZ2UpPVwib25TZWN0aW9uTmFtZUNoYW5nZSgkZXZlbnQpXCI+PC9wZXAtdGV4dGJveD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFxuICAgIDxkaXY+XG4gICAgICAgIDxwZXAtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveC1hcy10aXRsZVwiIFt2YWx1ZV09XCJpc0F1dG9IZWlnaHRcIiBbbGFiZWxdPVwiJ0xBWU9VVF9CVUlMREVSLkFVVE9fSEVJR0hUX1RJVExFJyB8IHRyYW5zbGF0ZVwiIFtyZW5kZXJUaXRsZV09XCJmYWxzZVwiICh2YWx1ZUNoYW5nZSk9XCJpc0F1dG9IZWlnaHRDaGFuZ2UoJGV2ZW50KVwiPjwvcGVwLWNoZWNrYm94PlxuICAgICAgICA8cGVwLXRleHRib3ggW2xhYmVsXT1cIidMQVlPVVRfQlVJTERFUi5IRUlHSFRfVElUTEUnIHwgdHJhbnNsYXRlXCIgdHlwZT1cImludFwiIFttaW5WYWx1ZV09XCJNSU5fSEVJR0hUXCIgW2Rpc2FibGVkXT1cImlzQXV0b0hlaWdodFwiIFt2YWx1ZV09XCJoZWlnaHRcIiAodmFsdWVDaGFuZ2UpPVwib25IZWlnaHRDaGFuZ2UoJGV2ZW50KVwiPjwvcGVwLXRleHRib3g+IFxuICAgIDwvZGl2PlxuICAgIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3Itc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgPGRpdj5cbiAgICAgICAgPHBlcC1jaGVja2JveCBjbGFzcz1cImNoZWNrYm94LWFzLXRpdGxlXCIgW3ZhbHVlXT1cInN1YlNlY3Rpb25zXCIgW2xhYmVsXT1cIidMQVlPVVRfQlVJTERFUi5TVUJfU0VDVElPTl9USVRMRScgfCB0cmFuc2xhdGVcIiBbcmVuZGVyVGl0bGVdPVwiZmFsc2VcIiAodmFsdWVDaGFuZ2UpPVwib25TdWJTZWN0aW9uc0NoYW5nZSgkZXZlbnQpXCI+PC9wZXAtY2hlY2tib3g+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGxpdC1hcmVhXCI+XG4gICAgICAgICAgICA8cGVwLXNlbGVjdCBbbGFiZWxdPVwiJ0xBWU9VVF9CVUlMREVSLlNFQ1RJT05TX1RJVExFJyB8IHRyYW5zbGF0ZVwiIFt2YWx1ZV09XCJwYXJ0c051bWJlclwiIFtvcHRpb25zXT1cInBhcnRzTnVtYmVyT3B0aW9uc1wiIFxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblBhcnRzTnVtYmVyQ2hhbmdlKCRldmVudClcIiBbZW1wdHlPcHRpb25dPVwiZmFsc2VcIiBbZGlzYWJsZWRdPVwiIXN1YlNlY3Rpb25zXCI+PC9wZXAtc2VsZWN0PlxuICAgICAgICAgICAgPHBlcC1zZWxlY3QgW2xhYmVsXT1cIidMQVlPVVRfQlVJTERFUi5TUExJVF9USVRMRScgfCB0cmFuc2xhdGVcIiBbdmFsdWVdPVwic3BsaXQgfHwgJydcIiBbb3B0aW9uc109XCJzcGxpdE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblNwbGl0Q2hhbmdlKCRldmVudClcIiBbZW1wdHlPcHRpb25dPVwiZmFsc2VcIiBbZGlzYWJsZWRdPVwiIXN1YlNlY3Rpb25zXCI+PC9wZXAtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXNlcGFyYXRvclwiPjwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIDxwZXAtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveC1hcy10aXRsZVwiIFt2YWx1ZV09XCJjb2xsYXBzZU9uVGFibGV0XCIgW2xhYmVsXT1cIidMQVlPVVRfQlVJTERFUi5DT0xMQVBTRV9PTl9UQUJMRVRfVElUTEUnIHwgdHJhbnNsYXRlXCIgW3JlbmRlclRpdGxlXT1cImZhbHNlXCIgKHZhbHVlQ2hhbmdlKT1cIm9uQ29sbGFwc2VPblRhYmxldENoYW5nZSgkZXZlbnQpXCI+PC9wZXAtY2hlY2tib3g+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXRpdGxlIGJvZHkteHNcIj57eygnTEFZT1VUX0JVSUxERVIuQ09MTEFQU0VfT05fVEFCTEVUX0RFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZSl9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXNlcGFyYXRvclwiPjwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIDxwZXAtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveC1hcy10aXRsZVwiIFt2YWx1ZV09XCJmaWxsSGVpZ2h0XCIgW2xhYmVsXT1cIidMQVlPVVRfQlVJTERFUi5GSUxMX0hFSUdIVF9TRUNUSU9OX1RJVExFJyB8IHRyYW5zbGF0ZVwiIFtyZW5kZXJUaXRsZV09XCJmYWxzZVwiICh2YWx1ZUNoYW5nZSk9XCJvbkZpbGxIZWlnaHRDaGFuZ2UoJGV2ZW50KVwiPjwvcGVwLWNoZWNrYm94PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlci10aXRsZSBib2R5LXhzXCI+e3soJ0xBWU9VVF9CVUlMREVSLkZJTExfSEVJR0hUX1NFQ1RJT05fREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlKX19PC9zcGFuPlxuICAgIDwvZGl2PlxuPC9wZXAtbGF5b3V0LWJ1aWxkZXItZWRpdG9yPlxuXG48IS0tIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWVkaXRvci1jb250YWluZXIgbGF5b3V0LWJ1aWxkZXItZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxwZXAtdGV4dGJveCBbdmFsdWVdPVwic2VjdGlvbk5hbWVcIiBbbGFiZWxdPVwiJ0xBWU9VVF9CVUlMREVSLlNFQ1RJT05fTkFNRV9USVRMRScgfCB0cmFuc2xhdGVcIiAodmFsdWVDaGFuZ2UpPVwib25TZWN0aW9uTmFtZUNoYW5nZSgkZXZlbnQpXCI+PC9wZXAtdGV4dGJveD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXNlcGFyYXRvclwiPjwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIDxwZXAtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveC1hcy10aXRsZVwiIFt2YWx1ZV09XCJzdWJTZWN0aW9uc1wiIFtsYWJlbF09XCInTEFZT1VUX0JVSUxERVIuU1VCX1NFQ1RJT05fVElUTEUnIHwgdHJhbnNsYXRlXCIgW3JlbmRlclRpdGxlXT1cImZhbHNlXCIgKHZhbHVlQ2hhbmdlKT1cIm9uU3ViU2VjdGlvbnNDaGFuZ2UoJGV2ZW50KVwiPjwvcGVwLWNoZWNrYm94PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BsaXQtYXJlYVwiPlxuICAgICAgICAgICAgPHBlcC1zZWxlY3QgW2xhYmVsXT1cIidMQVlPVVRfQlVJTERFUi5TRUNUSU9OU19USVRMRScgfCB0cmFuc2xhdGVcIiBbdmFsdWVdPVwicGFydHNOdW1iZXJcIiBbb3B0aW9uc109XCJwYXJ0c051bWJlck9wdGlvbnNcIiBcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25QYXJ0c051bWJlckNoYW5nZSgkZXZlbnQpXCIgW2VtcHR5T3B0aW9uXT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cIiFzdWJTZWN0aW9uc1wiPjwvcGVwLXNlbGVjdD5cbiAgICAgICAgICAgIDxwZXAtc2VsZWN0IFtsYWJlbF09XCInTEFZT1VUX0JVSUxERVIuU1BMSVRfVElUTEUnIHwgdHJhbnNsYXRlXCIgW3ZhbHVlXT1cInNwbGl0IHx8ICcnXCIgW29wdGlvbnNdPVwic3BsaXRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25TcGxpdENoYW5nZSgkZXZlbnQpXCIgW2VtcHR5T3B0aW9uXT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cIiFzdWJTZWN0aW9uc1wiPjwvcGVwLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImVkaXRvci1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgICA8cGVwLWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3gtYXMtdGl0bGVcIiBbdmFsdWVdPVwiY29sbGFwc2VPblRhYmxldFwiIFtsYWJlbF09XCInTEFZT1VUX0JVSUxERVIuQ09MTEFQU0VfT05fVEFCTEVUX1RJVExFJyB8IHRyYW5zbGF0ZVwiIFtyZW5kZXJUaXRsZV09XCJmYWxzZVwiICh2YWx1ZUNoYW5nZSk9XCJvbkNvbGxhcHNlT25UYWJsZXRDaGFuZ2UoJGV2ZW50KVwiPjwvcGVwLWNoZWNrYm94PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlci10aXRsZSBib2R5LXhzXCI+e3soJ0xBWU9VVF9CVUlMREVSLkNPTExBUFNFX09OX1RBQkxFVF9ERVNDUklQVElPTicgfCB0cmFuc2xhdGUpfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImVkaXRvci1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgICA8cGVwLWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3gtYXMtdGl0bGVcIiBbdmFsdWVdPVwiZmlsbEhlaWdodFwiIFtsYWJlbF09XCInTEFZT1VUX0JVSUxERVIuRklMTF9IRUlHSFRfU0VDVElPTl9USVRMRScgfCB0cmFuc2xhdGVcIiBbcmVuZGVyVGl0bGVdPVwiZmFsc2VcIiAodmFsdWVDaGFuZ2UpPVwib25GaWxsSGVpZ2h0Q2hhbmdlKCRldmVudClcIj48L3BlcC1jaGVja2JveD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItdGl0bGUgYm9keS14c1wiPnt7KCdMQVlPVVRfQlVJTERFUi5GSUxMX0hFSUdIVF9TRUNUSU9OX0RFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZSl9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZGl2PiAtLT5cbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { SectionEditorComponent } from './section-editor.component';
4
+ import { PepButtonModule } from '@pepperi-addons/ngx-lib/button';
5
+ import { PepTextboxModule } from '@pepperi-addons/ngx-lib/textbox';
6
+ import { PepCheckboxModule } from '@pepperi-addons/ngx-lib/checkbox';
7
+ import { PepSelectModule } from '@pepperi-addons/ngx-lib/select';
8
+ import { TranslateModule } from '@ngx-translate/core';
9
+ import { PepLayoutBuilderEditorModule } from '../layout-builder-editor/layout-builder-editor.module';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@ngx-translate/core";
12
+ export class SectionEditorModule {
13
+ }
14
+ SectionEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ SectionEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: SectionEditorModule, declarations: [SectionEditorComponent], imports: [CommonModule,
16
+ PepButtonModule,
17
+ PepTextboxModule,
18
+ PepSelectModule,
19
+ PepCheckboxModule,
20
+ PepLayoutBuilderEditorModule, i1.TranslateModule], exports: [SectionEditorComponent] });
21
+ SectionEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionEditorModule, imports: [CommonModule,
22
+ PepButtonModule,
23
+ PepTextboxModule,
24
+ PepSelectModule,
25
+ PepCheckboxModule,
26
+ PepLayoutBuilderEditorModule,
27
+ TranslateModule.forChild()] });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SectionEditorModule, decorators: [{
29
+ type: NgModule,
30
+ args: [{
31
+ declarations: [SectionEditorComponent],
32
+ imports: [
33
+ CommonModule,
34
+ PepButtonModule,
35
+ PepTextboxModule,
36
+ PepSelectModule,
37
+ PepCheckboxModule,
38
+ PepLayoutBuilderEditorModule,
39
+ TranslateModule.forChild()
40
+ ],
41
+ exports: [SectionEditorComponent]
42
+ }]
43
+ }] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvc2VjdGlvbi1lZGl0b3Ivc2VjdGlvbi1lZGl0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7QUFlckcsTUFBTSxPQUFPLG1CQUFtQjs7Z0hBQW5CLG1CQUFtQjtpSEFBbkIsbUJBQW1CLGlCQVpiLHNCQUFzQixhQUVqQyxZQUFZO1FBQ1osZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLDRCQUE0QixpQ0FHdEIsc0JBQXNCO2lIQUV2QixtQkFBbUIsWUFWeEIsWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQiw0QkFBNEI7UUFDNUIsZUFBZSxDQUFDLFFBQVEsRUFBRTsyRkFJckIsbUJBQW1CO2tCQWIvQixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUN0QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLDRCQUE0Qjt3QkFDNUIsZUFBZSxDQUFDLFFBQVEsRUFBRTtxQkFDN0I7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTZWN0aW9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9zZWN0aW9uLWVkaXRvci5jb21wb25lbnQnXG5pbXBvcnQgeyBQZXBCdXR0b25Nb2R1bGUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9idXR0b24nO1xuaW1wb3J0IHsgUGVwVGV4dGJveE1vZHVsZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL3RleHRib3gnO1xuaW1wb3J0IHsgUGVwQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9jaGVja2JveCc7XG5pbXBvcnQgeyBQZXBTZWxlY3RNb2R1bGUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9zZWxlY3QnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBQZXBMYXlvdXRCdWlsZGVyRWRpdG9yTW9kdWxlIH0gZnJvbSAnLi4vbGF5b3V0LWJ1aWxkZXItZWRpdG9yL2xheW91dC1idWlsZGVyLWVkaXRvci5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1NlY3Rpb25FZGl0b3JDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBQZXBCdXR0b25Nb2R1bGUsXG4gICAgICAgIFBlcFRleHRib3hNb2R1bGUsXG4gICAgICAgIFBlcFNlbGVjdE1vZHVsZSxcbiAgICAgICAgUGVwQ2hlY2tib3hNb2R1bGUsXG4gICAgICAgIFBlcExheW91dEJ1aWxkZXJFZGl0b3JNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpXG4gICAgXSxcbiAgICBleHBvcnRzOiBbU2VjdGlvbkVkaXRvckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgU2VjdGlvbkVkaXRvck1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,82 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/dialog";
5
+ import * as i2 from "../manage-parameters.service";
6
+ import * as i3 from "@ngx-translate/core";
7
+ import * as i4 from "@pepperi-addons/ngx-lib/dialog";
8
+ import * as i5 from "@pepperi-addons/ngx-lib/button";
9
+ import * as i6 from "@pepperi-addons/ngx-composite-lib/generic-form";
10
+ export class ManageParameterComponent {
11
+ constructor(dialogRef, manageParametersService, translate, incoming) {
12
+ this.dialogRef = dialogRef;
13
+ this.manageParametersService = manageParametersService;
14
+ this.translate = translate;
15
+ this.incoming = incoming;
16
+ this.parameter = undefined;
17
+ this.showType = false;
18
+ this.showAccessibility = false;
19
+ this.isValid = true;
20
+ }
21
+ loadDataView(paramType) {
22
+ this.dataView = this.manageParametersService.getParameterFormDataView(this.incoming.Mode, paramType || 'String', this.showType, this.showAccessibility);
23
+ }
24
+ ngOnInit() {
25
+ this.parameter = this.getParameter(this.incoming.Parameter);
26
+ this.showType = this.incoming.ShowType ?? false;
27
+ this.showAccessibility = this.incoming.ShowAccessibility ?? false;
28
+ this.loadDataView(this.parameter?.Type);
29
+ }
30
+ saveParameter() {
31
+ // before updating the parameter, remove redundant properties
32
+ if (this.parameter && this.showAccessibility) {
33
+ delete this.parameter['Accessibility'];
34
+ delete this.parameter['Accessibility_Description'];
35
+ }
36
+ this.close(this.parameter);
37
+ }
38
+ close(parameter = undefined) {
39
+ this.dialogRef.close(parameter || null);
40
+ }
41
+ getParameter(parameter) {
42
+ const ret = JSON.parse(JSON.stringify(parameter));
43
+ Object.keys(parameter || {}).forEach(prop => {
44
+ if (typeof (parameter[prop]) != 'boolean') {
45
+ // if the value is null/undefined, don't copy it
46
+ if (parameter[prop]) {
47
+ ret[prop] = parameter[prop].toString();
48
+ }
49
+ }
50
+ else if (prop === 'Internal' && this.showAccessibility) {
51
+ ret['Accessibility'] = parameter[prop] ? 'Internal' : 'External';
52
+ }
53
+ else {
54
+ ret[prop] = parameter[prop];
55
+ }
56
+ });
57
+ if (this.showAccessibility) {
58
+ ret['Accessibility_Description'] = this.translate.instant('MANAGE_PARAMETERS.INTERNAL_DESCRIPTION');
59
+ }
60
+ return ret;
61
+ }
62
+ onValueChanged(event) {
63
+ if (event.ApiName === 'Type' && this.showType) {
64
+ this.loadDataView(event.Value);
65
+ }
66
+ else if (event.ApiName === 'Accessibility' && this.showAccessibility) {
67
+ if (this.parameter) {
68
+ this.parameter['Internal'] = event.Value === 'Internal';
69
+ }
70
+ }
71
+ }
72
+ }
73
+ ManageParameterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ManageParameterComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.ManageParametersService }, { token: i3.TranslateService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
74
+ ManageParameterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: ManageParameterComponent, selector: "manage-parameter", ngImport: i0, template: "<pep-dialog [title]=\"(incoming.Mode === 'edit' ? 'MANAGE_PARAMETERS.EDIT_FORM_TITLE' : 'MANAGE_PARAMETERS.ADD_FORM_TITLE') | translate\">\n <ng-container pep-dialog-content>\n <pep-generic-form #addForm [dataSource]=\"parameter\" [dataView]=\"dataView\" (formValidationChange)=\"isValid = $event\" (valueChange)=\"onValueChanged($event)\">\n\n </pep-generic-form>\n </ng-container>\n <ng-container pep-dialog-actions>\n <div class=\"pep-spacing-element-negative\" style=\"display: flex;\"> \n <pep-button \n class=\"pep-spacing-element\"\n [sizeType]=\"'md'\" \n [value]=\"'Cancel' | translate\" \n [styleType]=\"'weak'\" \n (buttonClick)=\"close()\"\n ></pep-button>\n <pep-button \n class=\"pep-spacing-element\"\n [sizeType]=\"'md'\" \n [value]=\"(incoming.Mode === 'edit' ? 'Update' : 'Save') | translate\"\n [styleType]=\"'strong'\" \n (buttonClick)=\"saveParameter()\"\n [disabled]=\"!isValid\"\n ></pep-button>\n </div>\n </ng-container>\n</pep-dialog>", styles: [""], dependencies: [{ kind: "component", type: i4.PepDialogComponent, selector: "pep-dialog", inputs: ["title", "showClose", "showHeader", "showFooter"], outputs: ["close"] }, { kind: "component", type: i5.PepButtonComponent, selector: "pep-button", inputs: ["key", "value", "styleType", "styleStateType", "sizeType", "classNames", "disabled", "iconName", "iconPosition", "visible"], outputs: ["buttonClick"] }, { kind: "component", type: i6.GenericFormComponent, selector: "pep-generic-form", inputs: ["dataSource", "dataView", "isLocked", "inline", "showTopBar", "addPadding"], outputs: ["valueChange", "fieldClick", "formValidationChange"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ManageParameterComponent, decorators: [{
76
+ type: Component,
77
+ args: [{ selector: 'manage-parameter', template: "<pep-dialog [title]=\"(incoming.Mode === 'edit' ? 'MANAGE_PARAMETERS.EDIT_FORM_TITLE' : 'MANAGE_PARAMETERS.ADD_FORM_TITLE') | translate\">\n <ng-container pep-dialog-content>\n <pep-generic-form #addForm [dataSource]=\"parameter\" [dataView]=\"dataView\" (formValidationChange)=\"isValid = $event\" (valueChange)=\"onValueChanged($event)\">\n\n </pep-generic-form>\n </ng-container>\n <ng-container pep-dialog-actions>\n <div class=\"pep-spacing-element-negative\" style=\"display: flex;\"> \n <pep-button \n class=\"pep-spacing-element\"\n [sizeType]=\"'md'\" \n [value]=\"'Cancel' | translate\" \n [styleType]=\"'weak'\" \n (buttonClick)=\"close()\"\n ></pep-button>\n <pep-button \n class=\"pep-spacing-element\"\n [sizeType]=\"'md'\" \n [value]=\"(incoming.Mode === 'edit' ? 'Update' : 'Save') | translate\"\n [styleType]=\"'strong'\" \n (buttonClick)=\"saveParameter()\"\n [disabled]=\"!isValid\"\n ></pep-button>\n </div>\n </ng-container>\n</pep-dialog>" }]
78
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.ManageParametersService }, { type: i3.TranslateService }, { type: undefined, decorators: [{
79
+ type: Inject,
80
+ args: [MAT_DIALOG_DATA]
81
+ }] }]; } });
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXBhcmFtZXRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9tYW5hZ2UtcGFyYW1ldGVycy9tYW5hZ2UtcGFyYW1ldGVyL21hbmFnZS1wYXJhbWV0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbWFuYWdlLXBhcmFtZXRlcnMvbWFuYWdlLXBhcmFtZXRlci9tYW5hZ2UtcGFyYW1ldGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sd0JBQXdCO0lBZWpDLFlBQXNCLFNBQWlELEVBQzNELHVCQUFnRCxFQUNoRCxTQUEyQixFQUNILFFBQTRCO1FBSDFDLGNBQVMsR0FBVCxTQUFTLENBQXdDO1FBQzNELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDSCxhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQVRoRSxjQUFTLEdBQTZCLFNBQVMsQ0FBQztRQUNoRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixZQUFPLEdBQUcsSUFBSSxDQUFDO0lBT2YsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUEwQjtRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixD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YTsyRkRWQSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0ksa0JBQWtCOzswQkFzQnZCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBHZW5lcmljRm9ybUNvbXBvbmVudCwgSVBlcEdlbmVyaWNGb3JtRGF0YVZpZXcsIElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtZm9ybSc7XG5pbXBvcnQgeyBJUGFyYW1lbWV0ZXIsIElQYXJhbWV0ZXJGb3JtRGF0YSB9IGZyb20gJy4uL21hbmFnZS1wYXJhbWV0ZXJzLm1vZGVsJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWFuYWdlUGFyYW1ldGVyc1NlcnZpY2UgfSBmcm9tICcuLi9tYW5hZ2UtcGFyYW1ldGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IFNjaGVtZUZpZWxkVHlwZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9wYXBpLXNkayc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbWFuYWdlLXBhcmFtZXRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21hbmFnZS1wYXJhbWV0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL21hbmFnZS1wYXJhbWV0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VQYXJhbWV0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgLy8gQFZpZXdDaGlsZCgnZmxvd3NMaXN0Jywge3JlYWQ6IEdlbmVyaWNGb3JtQ29tcG9uZW50fSkgc2V0IGdlbmVyaWNGb3JtU2V0dGVyKGluRm9ybTogR2VuZXJpY0Zvcm1Db21wb25lbnQpIHtcbiAgICAvLyAgICAgaWYgKGluRm9ybSkge1xuICAgIC8vICAgICAgICAgdGhpcy5mb3JtID0gaW5Gb3JtO1xuICAgIC8vICAgICB9XG4gICAgLy8gfTtcbiAgICBcbiAgICBmb3JtITogR2VuZXJpY0Zvcm1Db21wb25lbnQ7XG4gICAgcGFyYW1ldGVyOiBJUGFyYW1lbWV0ZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgc2hvd1R5cGUgPSBmYWxzZTtcbiAgICBzaG93QWNjZXNzaWJpbGl0eSA9IGZhbHNlO1xuICAgIGRhdGFWaWV3ITogSVBlcEdlbmVyaWNGb3JtRGF0YVZpZXc7XG4gICAgaXNWYWxpZCA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvciAoIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8TWFuYWdlUGFyYW1ldGVyQ29tcG9uZW50PixcbiAgICAgICAgcHJpdmF0ZSBtYW5hZ2VQYXJhbWV0ZXJzU2VydmljZTogTWFuYWdlUGFyYW1ldGVyc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGluY29taW5nOiBJUGFyYW1ldGVyRm9ybURhdGEpIHtcblxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZERhdGFWaWV3KHBhcmFtVHlwZTogU2NoZW1lRmllbGRUeXBlKSB7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSB0aGlzLm1hbmFnZVBhcmFtZXRlcnNTZXJ2aWNlLmdldFBhcmFtZXRlckZvcm1EYXRhVmlldyh0aGlzLmluY29taW5nLk1vZGUsIHBhcmFtVHlwZSB8fCAnU3RyaW5nJywgdGhpcy5zaG93VHlwZSwgdGhpcy5zaG93QWNjZXNzaWJpbGl0eSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFyYW1ldGVyID0gdGhpcy5nZXRQYXJhbWV0ZXIodGhpcy5pbmNvbWluZy5QYXJhbWV0ZXIpO1xuICAgICAgICB0aGlzLnNob3dUeXBlID0gdGhpcy5pbmNvbWluZy5TaG93VHlwZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93QWNjZXNzaWJpbGl0eSA9IHRoaXMuaW5jb21pbmcuU2hvd0FjY2Vzc2liaWxpdHkgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZERhdGFWaWV3KHRoaXMucGFyYW1ldGVyPy5UeXBlKTtcbiAgICB9XG5cbiAgICBzYXZlUGFyYW1ldGVyKCkge1xuICAgICAgICAvLyBiZWZvcmUgdXBkYXRpbmcgdGhlIHBhcmFtZXRlciwgcmVtb3ZlIHJlZHVuZGFudCBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICh0aGlzLnBhcmFtZXRlciAmJiB0aGlzLnNob3dBY2Nlc3NpYmlsaXR5KSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJhbWV0ZXJbJ0FjY2Vzc2liaWxpdHknXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBhcmFtZXRlclsnQWNjZXNzaWJpbGl0eV9EZXNjcmlwdGlvbiddO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZSh0aGlzLnBhcmFtZXRlcik7XG4gICAgfVxuXG4gICAgY2xvc2UocGFyYW1ldGVyOiBJUGFyYW1lbWV0ZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocGFyYW1ldGVyIHx8IG51bGwpO1xuICAgIH1cblxuICAgIGdldFBhcmFtZXRlcihwYXJhbWV0ZXI6IElQYXJhbWVtZXRlcik6IElQYXJhbWVtZXRlciB7XG4gICAgICAgIGNvbnN0IHJldDogSVBhcmFtZW1ldGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXIpKTtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1ldGVyIHx8IHt9KS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZihwYXJhbWV0ZXJbcHJvcF0pICE9ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBudWxsL3VuZGVmaW5lZCwgZG9uJ3QgY29weSBpdFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJbcHJvcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W3Byb3BdID0gcGFyYW1ldGVyW3Byb3BdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wID09PSAnSW50ZXJuYWwnICYmIHRoaXMuc2hvd0FjY2Vzc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICByZXRbJ0FjY2Vzc2liaWxpdHknXSA9IHBhcmFtZXRlcltwcm9wXSA/ICdJbnRlcm5hbCcgOiAnRXh0ZXJuYWwnXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtwcm9wXSA9IHBhcmFtZXRlcltwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5zaG93QWNjZXNzaWJpbGl0eSkge1xuICAgICAgICAgICAgcmV0WydBY2Nlc3NpYmlsaXR5X0Rlc2NyaXB0aW9uJ10gPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdNQU5BR0VfUEFSQU1FVEVSUy5JTlRFUk5BTF9ERVNDUklQVElPTicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlZChldmVudDogSVBlcEdlbmVyaWNGb3JtVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LkFwaU5hbWUgPT09ICdUeXBlJyAmJiB0aGlzLnNob3dUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhVmlldyhldmVudC5WYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuQXBpTmFtZSA9PT0gJ0FjY2Vzc2liaWxpdHknICYmIHRoaXMuc2hvd0FjY2Vzc2liaWxpdHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtZXRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldGVyWydJbnRlcm5hbCddID0gZXZlbnQuVmFsdWUgPT09ICdJbnRlcm5hbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn0iLCI8cGVwLWRpYWxvZyBbdGl0bGVdPVwiKGluY29taW5nLk1vZGUgPT09ICdlZGl0JyA/ICdNQU5BR0VfUEFSQU1FVEVSUy5FRElUX0ZPUk1fVElUTEUnIDogJ01BTkFHRV9QQVJBTUVURVJTLkFERF9GT1JNX1RJVExFJykgfCB0cmFuc2xhdGVcIj5cbiAgICA8bmctY29udGFpbmVyIHBlcC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgPHBlcC1nZW5lcmljLWZvcm0gI2FkZEZvcm0gW2RhdGFTb3VyY2VdPVwicGFyYW1ldGVyXCIgW2RhdGFWaWV3XT1cImRhdGFWaWV3XCIgKGZvcm1WYWxpZGF0aW9uQ2hhbmdlKT1cImlzVmFsaWQgPSAkZXZlbnRcIiAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiPlxuXG4gICAgICAgIDwvcGVwLWdlbmVyaWMtZm9ybT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIHBlcC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcC1zcGFjaW5nLWVsZW1lbnQtbmVnYXRpdmVcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+ICAgICAgICAgXG4gICAgICAgICAgICA8cGVwLWJ1dHRvbiBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBlcC1zcGFjaW5nLWVsZW1lbnRcIlxuICAgICAgICAgICAgICAgIFtzaXplVHlwZV09XCInbWQnXCIgXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIidDYW5jZWwnIHwgdHJhbnNsYXRlXCIgXG4gICAgICAgICAgICAgICAgW3N0eWxlVHlwZV09XCInd2VhaydcIiBcbiAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgID48L3BlcC1idXR0b24+XG4gICAgICAgICAgICA8cGVwLWJ1dHRvbiBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBlcC1zcGFjaW5nLWVsZW1lbnRcIlxuICAgICAgICAgICAgICAgIFtzaXplVHlwZV09XCInbWQnXCIgXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIihpbmNvbWluZy5Nb2RlID09PSAnZWRpdCcgPyAnVXBkYXRlJyA6ICdTYXZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZVR5cGVdPVwiJ3N0cm9uZydcIiBcbiAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwic2F2ZVBhcmFtZXRlcigpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzVmFsaWRcIlxuICAgICAgICAgICAgPjwvcGVwLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L3BlcC1kaWFsb2c+Il19