@pepperi-addons/ngx-lib 0.4.1-yaron.1 → 0.4.2-beta.2

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 (185) hide show
  1. package/chips/chips.component.d.ts +13 -2
  2. package/chips/chips.component.theme.scss +22 -8
  3. package/chips/chips.model.d.ts +1 -0
  4. package/core/common/directives/div-loader.directive.d.ts +21 -0
  5. package/core/common/directives/public-api.d.ts +1 -0
  6. package/core/common/model/wapi.model.d.ts +1 -0
  7. package/core/common/services/addon.service.d.ts +5 -0
  8. package/core/common/services/data-convertor.service.d.ts +1 -0
  9. package/core/common/services/utilities.service.d.ts +8 -6
  10. package/core/customization/customization.model.d.ts +1 -3
  11. package/date/date.component.d.ts +3 -2
  12. package/dialog/dialog.model.d.ts +7 -7
  13. package/dialog/dialog.module.d.ts +7 -9
  14. package/esm2020/address/address.component.mjs +3 -3
  15. package/esm2020/chips/chips.component.mjs +45 -13
  16. package/esm2020/chips/chips.model.mjs +1 -1
  17. package/esm2020/chips/chips.service.mjs +2 -1
  18. package/esm2020/color/color-picker.component.mjs +3 -3
  19. package/esm2020/core/common/directives/div-loader.directive.mjs +61 -0
  20. package/esm2020/core/common/directives/public-api.mjs +2 -1
  21. package/esm2020/core/common/model/wapi.model.mjs +2 -1
  22. package/esm2020/core/common/services/addon.service.mjs +52 -1
  23. package/esm2020/core/common/services/data-convertor.service.mjs +4 -1
  24. package/esm2020/core/common/services/utilities.service.mjs +80 -42
  25. package/esm2020/core/common/services/validator.service.mjs +3 -3
  26. package/esm2020/core/customization/customization.model.mjs +5 -3
  27. package/esm2020/core/http/interceptors/loader.interceptor.mjs +2 -2
  28. package/esm2020/date/date.component.mjs +28 -11
  29. package/esm2020/dialog/dialog.component.mjs +1 -1
  30. package/esm2020/dialog/dialog.model.mjs +4 -4
  31. package/esm2020/dialog/dialog.module.mjs +1 -9
  32. package/esm2020/field-title/field-title.component.mjs +2 -2
  33. package/esm2020/form/field-generator.component.mjs +8 -9
  34. package/esm2020/form/form.component.mjs +16 -6
  35. package/esm2020/form/form.module.mjs +4 -1
  36. package/esm2020/form/internal-field-generator.component.mjs +8 -9
  37. package/esm2020/form/internal-form.component.mjs +4 -4
  38. package/esm2020/icon/icon-generated-all.model.mjs +10 -4
  39. package/esm2020/icon/icon-generated.model.mjs +28 -4
  40. package/esm2020/link/link.component.mjs +19 -33
  41. package/esm2020/link/public-api.mjs +2 -1
  42. package/esm2020/list/list-pager.component.mjs +3 -3
  43. package/esm2020/list/list.component.mjs +55 -25
  44. package/esm2020/list/virtual-scroller.mjs +21 -13
  45. package/esm2020/ngx-lib.module.mjs +7 -3
  46. package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +1 -1
  47. package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +7 -5
  48. package/esm2020/quantity-selector/quantity-selector.component.mjs +89 -45
  49. package/esm2020/query-builder/common/model/type-map.mjs +2 -2
  50. package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +1 -1
  51. package/esm2020/remote-loader/addon-block-loader.component.mjs +1 -1
  52. package/esm2020/remote-loader/remote-loader-element.component.mjs +14 -7
  53. package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +3 -3
  54. package/esm2020/select/select.component.mjs +7 -7
  55. package/esm2020/select-panel/pepperi-addons-ngx-lib-select-panel.mjs +5 -0
  56. package/esm2020/select-panel/public-api.mjs +7 -0
  57. package/esm2020/select-panel/select-panel.component.mjs +159 -0
  58. package/esm2020/select-panel/select-panel.model.mjs +2 -0
  59. package/esm2020/select-panel/select-panel.module.mjs +70 -0
  60. package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +3 -3
  61. package/esm2020/smart-filters/common/model/base-filter-component.mjs +5 -4
  62. package/esm2020/smart-filters/date-filter/date-filter.component.mjs +3 -3
  63. package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +1 -1
  64. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +13 -3
  65. package/esm2020/smart-filters/text-filter/text-filter.component.mjs +4 -3
  66. package/esm2020/textarea/textarea.component.mjs +9 -3
  67. package/esm2020/textbox/textbox-validation.directive.mjs +9 -5
  68. package/esm2020/textbox/textbox.component.mjs +171 -78
  69. package/fesm2015/pepperi-addons-ngx-lib-address.mjs +2 -2
  70. package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  71. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +46 -13
  72. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  73. package/fesm2015/pepperi-addons-ngx-lib-color.mjs +2 -2
  74. package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  75. package/fesm2015/pepperi-addons-ngx-lib-date.mjs +27 -10
  76. package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  77. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +3 -11
  78. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  79. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +2 -2
  80. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
  81. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +35 -24
  82. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  83. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +37 -7
  84. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  85. package/fesm2015/pepperi-addons-ngx-lib-link.mjs +19 -33
  86. package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  87. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +121 -83
  88. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  89. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
  90. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  91. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +96 -50
  92. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  93. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
  94. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  95. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +13 -6
  96. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  97. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +2 -2
  98. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  99. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +237 -0
  100. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -0
  101. package/fesm2015/pepperi-addons-ngx-lib-select.mjs +6 -6
  102. package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  103. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +24 -12
  104. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  105. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +8 -2
  106. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  107. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +180 -83
  108. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  109. package/fesm2015/pepperi-addons-ngx-lib.mjs +2994 -2831
  110. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  111. package/fesm2020/pepperi-addons-ngx-lib-address.mjs +2 -2
  112. package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  113. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +45 -13
  114. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  115. package/fesm2020/pepperi-addons-ngx-lib-color.mjs +2 -2
  116. package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  117. package/fesm2020/pepperi-addons-ngx-lib-date.mjs +27 -10
  118. package/fesm2020/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  119. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +3 -11
  120. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  121. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +2 -2
  122. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
  123. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +35 -24
  124. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  125. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +37 -7
  126. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  127. package/fesm2020/pepperi-addons-ngx-lib-link.mjs +19 -33
  128. package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  129. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +121 -82
  130. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  131. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
  132. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  133. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +96 -50
  134. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  135. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
  136. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  137. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +13 -6
  138. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  139. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +2 -2
  140. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  141. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +236 -0
  142. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -0
  143. package/fesm2020/pepperi-addons-ngx-lib-select.mjs +6 -6
  144. package/fesm2020/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  145. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +24 -12
  146. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  147. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +8 -2
  148. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  149. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +180 -82
  150. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  151. package/fesm2020/pepperi-addons-ngx-lib.mjs +2970 -2816
  152. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  153. package/form/field-generator.component.d.ts +1 -3
  154. package/form/form.component.d.ts +1 -1
  155. package/form/form.module.d.ts +9 -8
  156. package/form/internal-field-generator.component.d.ts +1 -3
  157. package/form/internal-form.component.d.ts +1 -1
  158. package/icon/icon-generated-all.model.d.ts +6 -0
  159. package/icon/icon-generated.model.d.ts +25 -1
  160. package/link/link.component.d.ts +2 -10
  161. package/link/public-api.d.ts +1 -0
  162. package/list/list.component.d.ts +6 -3
  163. package/list/virtual-scroller.d.ts +5 -5
  164. package/ngx-lib.module.d.ts +10 -9
  165. package/package.json +9 -1
  166. package/quantity-selector/quantity-selector-validation.directive.d.ts +3 -2
  167. package/quantity-selector/quantity-selector.component.d.ts +11 -6
  168. package/remote-loader/remote-loader-element.component.d.ts +5 -3
  169. package/select/select.component.d.ts +2 -2
  170. package/select-panel/index.d.ts +5 -0
  171. package/select-panel/public-api.d.ts +3 -0
  172. package/select-panel/select-panel.component.d.ts +51 -0
  173. package/select-panel/select-panel.component.theme.scss +25 -0
  174. package/select-panel/select-panel.model.d.ts +5 -0
  175. package/select-panel/select-panel.module.d.ts +19 -0
  176. package/smart-filters/common/model/base-filter-component.d.ts +3 -2
  177. package/src/core/style/base/typography.scss +1 -1
  178. package/src/core/style/components/checkbox.scss +4 -0
  179. package/src/core/style/components/radio-button.scss +1 -0
  180. package/src/core/style/components/textarea.scss +8 -2
  181. package/textarea/textarea.component.d.ts +3 -1
  182. package/textbox/textbox-validation.directive.d.ts +3 -2
  183. package/textbox/textbox.component.d.ts +21 -22
  184. package/theming-offline.scss +79 -0
  185. package/theming.scss +4 -31
@@ -1,7 +1,8 @@
1
1
  import { OnInit, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
2
3
  import { MatChipInputEvent } from '@angular/material/chips';
3
4
  import { TranslateService } from '@ngx-translate/core';
4
- import { PepStyleType } from '@pepperi-addons/ngx-lib';
5
+ import { PepHorizontalAlignment, PepLayoutType, PepStyleType } from '@pepperi-addons/ngx-lib';
5
6
  import { IPepChip, PepChipsOrientationType, PepChipsInputType, IPepChipSelection } from './chips.model';
6
7
  import { PepChipsService } from './chips.service';
7
8
  import * as i0 from "@angular/core";
@@ -13,6 +14,16 @@ export declare class PepChipsComponent implements OnInit, OnDestroy {
13
14
  *
14
15
  * @memberof PepChipsComponent
15
16
  */
17
+ form: FormGroup;
18
+ layoutType: PepLayoutType;
19
+ inline: boolean;
20
+ xAlignment: PepHorizontalAlignment;
21
+ renderTitle: boolean;
22
+ showTitle: boolean;
23
+ label: string;
24
+ mandatory: boolean;
25
+ disabled: boolean;
26
+ classNames: string;
16
27
  set chips(chips: IPepChip[]);
17
28
  get chips(): IPepChip[];
18
29
  /**
@@ -89,5 +100,5 @@ export declare class PepChipsComponent implements OnInit, OnDestroy {
89
100
  onChipsSelectClicked(): void;
90
101
  ngOnDestroy(): void;
91
102
  static ɵfac: i0.ɵɵFactoryDeclaration<PepChipsComponent, never>;
92
- static ɵcmp: i0.ɵɵComponentDeclaration<PepChipsComponent, "pep-chips", never, { "chips": "chips"; "type": "type"; "orientation": "orientation"; "styleType": "styleType"; "multiSelect": "multiSelect"; "placeholder": "placeholder"; }, { "fieldClick": "fieldClick"; "selectionChange": "selectionChange"; }, never, never, false>;
103
+ static ɵcmp: i0.ɵɵComponentDeclaration<PepChipsComponent, "pep-chips", never, { "form": "form"; "layoutType": "layoutType"; "inline": "inline"; "xAlignment": "xAlignment"; "renderTitle": "renderTitle"; "showTitle": "showTitle"; "label": "label"; "mandatory": "mandatory"; "disabled": "disabled"; "classNames": "classNames"; "chips": "chips"; "type": "type"; "orientation": "orientation"; "styleType": "styleType"; "multiSelect": "multiSelect"; "placeholder": "placeholder"; }, { "fieldClick": "fieldClick"; "selectionChange": "selectionChange"; }, never, never, false>;
93
104
  }
@@ -1,5 +1,6 @@
1
1
  @use '../src/core/style/abstracts/mixins';
2
2
  @use '../src/core/style/abstracts/functions';
3
+ @use '../src/core/style/abstracts/variables';
3
4
 
4
5
  @mixin pep-chips-states ($style: regular){
5
6
  @include mixins.pep-state-default($style, null, true);
@@ -7,12 +8,12 @@
7
8
  &:hover {
8
9
  @include mixins.pep-state-hover($style, null, true);
9
10
  }
10
- &.mat-chip-selected {
11
- @include mixins.pep-state-active($style, null, true);
12
- @if $style != strong {
13
- color:functions.get-pep-color(color-text, color-main) !important;
14
- }
15
- }
11
+ // &.mat-chip-selected {
12
+ // @include mixins.pep-state-active($style, null, true);
13
+ // @if $style != strong {
14
+ // color:functions.get-pep-color(color-text, color-main) !important;
15
+ // }
16
+ // }
16
17
  &:focus {
17
18
  @include mixins.pep-state-focus($style, null, true);
18
19
 
@@ -26,8 +27,21 @@
26
27
 
27
28
  }
28
29
 
29
- .pep-chips-container {
30
+ .pep-chips-container {
31
+ @include mixins.state-weak-default();
32
+
33
+ &.input-type-state{
34
+ &:hover {
35
+ @include mixins.state-weak-hover();
36
+ }
37
+ }
38
+
30
39
  ::ng-deep.mat-chip-list {
40
+
41
+ &:focus-visible {
42
+ outline: none;
43
+ }
44
+
31
45
  /* override material props*/
32
46
  .mat-chip.mat-standard-chip {
33
47
  &::after {
@@ -55,4 +69,4 @@
55
69
  }
56
70
  }
57
71
  }
58
- }
72
+ }
@@ -1,6 +1,7 @@
1
1
  export declare type PepChipsOrientationType = 'horizontal' | 'vertical';
2
2
  export declare type PepChipsInputType = 'input' | 'select';
3
3
  export interface IPepChip {
4
+ key?: string;
4
5
  value: string;
5
6
  disabled?: boolean;
6
7
  selected?: boolean;
@@ -0,0 +1,21 @@
1
+ import { ElementRef, OnInit, Renderer2 } from '@angular/core';
2
+ import { PepCustomizationService } from '../../customization/customization.service';
3
+ import { PepUtilitiesService } from '../services/utilities.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class PepDivLoaderDirective implements OnInit {
6
+ private renderer;
7
+ private element;
8
+ private utilitiesService;
9
+ private customizationService;
10
+ private document;
11
+ loaderColor: any;
12
+ loaderWidth: string;
13
+ loaderHeight: string;
14
+ private svgIcon;
15
+ constructor(renderer: Renderer2, element: ElementRef, utilitiesService: PepUtilitiesService, customizationService: PepCustomizationService, document: any);
16
+ ngOnInit(): void;
17
+ private setDivStyle;
18
+ private setIconStyle;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<PepDivLoaderDirective, [null, null, null, null, { optional: true; }]>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PepDivLoaderDirective, "[pepDivLoader]", never, { "loaderColor": "loaderColor"; "loaderWidth": "loaderWidth"; "loaderHeight": "loaderHeight"; }, {}, never, never, false>;
21
+ }
@@ -5,3 +5,4 @@ export * from './data-qa.directive';
5
5
  export * from './menu-blur.directive';
6
6
  export * from './prevent-multi-click.directive';
7
7
  export * from './print.directive';
8
+ export * from './div-loader.directive';
@@ -148,6 +148,7 @@ export declare class ObjectsDataRow {
148
148
  }>;
149
149
  Fields: Array<ObjectsDataRowCell>;
150
150
  IsEditable: boolean;
151
+ IsSelected: boolean;
151
152
  IsSelectableForActions: boolean;
152
153
  MainAction?: string;
153
154
  Profile?: any;
@@ -20,6 +20,7 @@ export declare class PepAddonService {
20
20
  private readonly ADDONS_DICTIONARY_ASSETS_PATH_KEY;
21
21
  private readonly ADDON_API_RELATIVE_PATH;
22
22
  private readonly ADDON_API_ASYNC_RELATIVE_PATH;
23
+ private static _customElementsMap;
23
24
  private get devServer();
24
25
  constructor(sessionService: PepSessionService, httpService: PepHttpService, loaderService: PepLoaderService, translateService: PepTranslateService, fileService: PepFileService, route: ActivatedRoute);
25
26
  private getAddonBaseRelativePath;
@@ -28,6 +29,9 @@ export declare class PepAddonService {
28
29
  getServerBaseUrl(addonUUID: string, fileName?: string, isAsync?: boolean, localhostPort?: number): string;
29
30
  getAddonApiCall(addonUUID: string, fileName: string, functionName: string, httpOptions?: {}, isAsync?: boolean): Observable<any>;
30
31
  postAddonApiCall(addonUUID: string, fileName: string, functionName: string, body?: {}, httpOptions?: {}, isAsync?: boolean): Observable<any>;
32
+ getAddonCPICall(addonUUID: string, url: string): Promise<any>;
33
+ postAddonCPICall(addonUUID: string, url: string, body: any): Promise<any>;
34
+ emitEvent(eventKey: string, eventData: any): Promise<any>;
31
35
  fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
32
36
  getNgxLibTranslationResource(addonUUID: string, libName?: string): ITranslationResource;
33
37
  getAddonTranslationResource(addonUUID: string): ITranslationResource;
@@ -39,6 +43,7 @@ export declare class PepAddonService {
39
43
  showHeader?: boolean;
40
44
  }): void;
41
45
  defineCustomElement(elementName: string, component: Type<any>, injector: Injector): void;
46
+ connectInternalRouter(elementName: string): void;
42
47
  static createMultiTranslateLoader(addonUUID: string, addonService: PepAddonService, libsName?: string[]): import("ngx-translate-multi-http-loader").MultiTranslateHttpLoader;
43
48
  static ɵfac: i0.ɵɵFactoryDeclaration<PepAddonService, [null, null, null, null, null, { optional: true; }]>;
44
49
  static ɵprov: i0.ɵɵInjectableDeclaration<PepAddonService>;
@@ -29,6 +29,7 @@ export declare class PepFieldData {
29
29
  export declare class PepRowData {
30
30
  UUID?: string;
31
31
  IsEditable?: boolean;
32
+ IsSelected?: boolean;
32
33
  IsSelectableForActions?: boolean;
33
34
  Fields: PepFieldData[];
34
35
  }
@@ -4,20 +4,20 @@ export declare class PepUtilitiesService {
4
4
  private translate;
5
5
  private culture;
6
6
  constructor(translate?: TranslateService);
7
- private changeDecimalSeperator;
8
- private getDecimalSeparator;
7
+ private prepareNumberToFormat;
9
8
  private parseMs;
10
9
  private addZero;
11
10
  private isCurrencyShouldBeOnRight;
11
+ private cutValueByFractionDigits;
12
12
  parseDate(dateStr: string, showTime?: boolean): Date;
13
13
  stringifyDate(date: Date, showTime?: boolean): string;
14
14
  isValueHtml(value: string): boolean;
15
15
  isJsonString(str: string): boolean;
16
16
  getSvgElementFromString(document: any, svgContent: string): SVGElement;
17
17
  formatPercent(value: any, minFractionDigits?: number, maxFractionDigits?: number): string;
18
- formatCurrency(value: any, currencySign?: string, minFractionDigits?: number, maxFractionDigits?: number): string;
19
- formatDecimal(value: any, minFractionDigits?: number, maxFractionDigits?: number): string;
20
- formatNumber(value: any): string;
18
+ formatCurrency(value: any, currencySign?: string, minFractionDigits?: number, maxFractionDigits?: number, useGrouping?: boolean): string;
19
+ formatDecimal(value: any, minFractionDigits?: number, maxFractionDigits?: number, useGrouping?: boolean): string;
20
+ formatNumber(value: any, useGrouping?: boolean): string;
21
21
  /**
22
22
  * Convert a number in milliseconds to a standard duration string.
23
23
  * @param {number} value - duration in milliseconds
@@ -31,7 +31,9 @@ export declare class PepUtilitiesService {
31
31
  }): string;
32
32
  incrementNumber(value: any): string;
33
33
  decrementNumber(value: any): string;
34
- coerceNumberProperty(value: any, fallbackValue?: number): number;
34
+ getDecimalSeparator(): string;
35
+ changeDecimalSeparatorWhenItsComma(value: string, reverse?: boolean): string;
36
+ isEqualNumber(numberAsString: string, numberAsString2: string): boolean;
35
37
  static ɵfac: i0.ɵɵFactoryDeclaration<PepUtilitiesService, [{ optional: true; }]>;
36
38
  static ɵprov: i0.ɵɵInjectableDeclaration<PepUtilitiesService>;
37
39
  }
@@ -98,13 +98,11 @@ export declare type PepTextboxFieldType = 'text' | 'link' | 'email' | 'phone' |
98
98
  interface IPepTextboxFieldOptions extends IPepFieldBaseOptions {
99
99
  type?: PepTextboxFieldType;
100
100
  regex?: string | RegExp;
101
- regexError?: string;
102
101
  }
103
102
  export declare class PepTextboxField extends PepFieldBase {
104
103
  controlType: string;
105
104
  type: PepTextboxFieldType;
106
- regex: string | RegExp;
107
- regexError: string;
105
+ regex?: string | RegExp;
108
106
  digitsNumberAfterDecimalPoint: number;
109
107
  constructor(options?: IPepTextboxFieldOptions);
110
108
  update(options: IPepTextboxFieldOptions): void;
@@ -17,7 +17,7 @@ export declare class PepDateComponent implements OnInit, OnChanges, OnDestroy {
17
17
  private _value;
18
18
  set value(value: string);
19
19
  get value(): string;
20
- formattedValue: string;
20
+ protected formattedValue: string;
21
21
  label: string;
22
22
  private _type;
23
23
  set type(type: PepDateFieldType);
@@ -62,8 +62,9 @@ export declare class PepDateComponent implements OnInit, OnChanges, OnDestroy {
62
62
  private setDateModel;
63
63
  openDatetimePicker(datetimePicker: any): void;
64
64
  onBlur(event: any): void;
65
+ private updateFormFieldValue;
65
66
  onDateChange(event: MatDatetimepickerInputEvent<Moment>): void;
66
67
  cardTemplateClicked(event: any): void;
67
68
  static ɵfac: i0.ɵɵFactoryDeclaration<PepDateComponent, never>;
68
- static ɵcmp: i0.ɵɵComponentDeclaration<PepDateComponent, "pep-date", never, { "key": "key"; "value": "value"; "formattedValue": "formattedValue"; "label": "label"; "type": "type"; "mandatory": "mandatory"; "disabled": "disabled"; "readonly": "readonly"; "textColor": "textColor"; "xAlignment": "xAlignment"; "rowSpan": "rowSpan"; "visible": "visible"; "minValue": "minValue"; "maxValue": "maxValue"; "minDateValue": "minDateValue"; "maxDateValue": "maxDateValue"; "form": "form"; "isActive": "isActive"; "showTitle": "showTitle"; "renderTitle": "renderTitle"; "renderError": "renderError"; "renderSymbol": "renderSymbol"; "layoutType": "layoutType"; }, { "valueChange": "valueChange"; }, never, never, false>;
69
+ static ɵcmp: i0.ɵɵComponentDeclaration<PepDateComponent, "pep-date", never, { "key": "key"; "value": "value"; "label": "label"; "type": "type"; "mandatory": "mandatory"; "disabled": "disabled"; "readonly": "readonly"; "textColor": "textColor"; "xAlignment": "xAlignment"; "rowSpan": "rowSpan"; "visible": "visible"; "minValue": "minValue"; "maxValue": "maxValue"; "minDateValue": "minDateValue"; "maxDateValue": "maxDateValue"; "form": "form"; "isActive": "isActive"; "showTitle": "showTitle"; "renderTitle": "renderTitle"; "renderError": "renderError"; "renderSymbol": "renderSymbol"; "layoutType": "layoutType"; }, { "valueChange": "valueChange"; }, never, never, false>;
69
70
  }
@@ -7,13 +7,13 @@ export declare class PepDialogActionButton {
7
7
  constructor(title?: string, className?: string, callback?: () => void);
8
8
  }
9
9
  export declare class PepDialogData {
10
- title: string;
11
- actionsType: PepDialogActionsType;
12
- content: any;
13
- showClose: boolean;
14
- showHeader: boolean;
15
- showFooter: boolean;
16
- actionButtons: Array<PepDialogActionButton>;
10
+ title?: string;
11
+ actionsType?: PepDialogActionsType;
12
+ content?: any;
13
+ showClose?: boolean;
14
+ showHeader?: boolean;
15
+ showFooter?: boolean;
16
+ actionButtons?: Array<PepDialogActionButton>;
17
17
  constructor(options: {
18
18
  title?: string;
19
19
  actionsType?: PepDialogActionsType;
@@ -3,18 +3,16 @@ import * as i0 from "@angular/core";
3
3
  import * as i1 from "./default-dialog.component";
4
4
  import * as i2 from "./dialog.component";
5
5
  import * as i3 from "@angular/common";
6
- import * as i4 from "@angular/platform-browser";
7
- import * as i5 from "@angular/platform-browser/animations";
8
- import * as i6 from "@angular/material/core";
9
- import * as i7 from "@angular/material/button";
10
- import * as i8 from "@angular/material/icon";
11
- import * as i9 from "@angular/material/dialog";
12
- import * as i10 from "@pepperi-addons/ngx-lib";
13
- import * as i11 from "@pepperi-addons/ngx-lib/icon";
6
+ import * as i4 from "@angular/material/core";
7
+ import * as i5 from "@angular/material/button";
8
+ import * as i6 from "@angular/material/icon";
9
+ import * as i7 from "@angular/material/dialog";
10
+ import * as i8 from "@pepperi-addons/ngx-lib";
11
+ import * as i9 from "@pepperi-addons/ngx-lib/icon";
14
12
  export declare class PepDialogModule {
15
13
  private pepIconRegistry;
16
14
  constructor(pepIconRegistry: PepIconRegistry);
17
15
  static ɵfac: i0.ɵɵFactoryDeclaration<PepDialogModule, never>;
18
- static ɵmod: i0.ɵɵNgModuleDeclaration<PepDialogModule, [typeof i1.PepDefaultDialogComponent, typeof i2.PepDialogComponent], [typeof i3.CommonModule, typeof i4.BrowserModule, typeof i5.BrowserAnimationsModule, typeof i6.MatCommonModule, typeof i7.MatButtonModule, typeof i8.MatIconModule, typeof i9.MatDialogModule, typeof i10.PepNgxLibModule, typeof i11.PepIconModule], [typeof i2.PepDialogComponent]>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PepDialogModule, [typeof i1.PepDefaultDialogComponent, typeof i2.PepDialogComponent], [typeof i3.CommonModule, typeof i4.MatCommonModule, typeof i5.MatButtonModule, typeof i6.MatIconModule, typeof i7.MatDialogModule, typeof i8.PepNgxLibModule, typeof i9.PepIconModule], [typeof i2.PepDialogComponent]>;
19
17
  static ɵinj: i0.ɵɵInjectorDeclaration<PepDialogModule>;
20
18
  }
@@ -75,10 +75,10 @@ export class PepAddressComponent {
75
75
  }
76
76
  }
77
77
  PepAddressComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepAddressComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
78
- PepAddressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepAddressComponent, selector: "pep-address", inputs: { key: "key", formattedValue: "formattedValue", label: "label", mandatory: "mandatory", disabled: "disabled", readonly: "readonly", xAlignment: "xAlignment", rowSpan: "rowSpan", groupFields: "groupFields", form: "form", layoutType: "layoutType", visible: "visible" }, outputs: { addressValueChange: "addressValueChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\" class=\"header\">\n </pep-field-title>\n <div [formGroupName]=\"key\" [id]=\"key\" class=\"pep-address-container\"\n dir=\"{{ xAlignment === 'right' ? 'rtl' : 'ltr' }}\">\n <div [ngSwitch]=\"groupField.controlType\" *ngFor=\"let groupField of groupFields; let i = index\"\n class=\"pep-address-field columns-{{ groupField.colSpan }}\">\n <pep-textbox *ngSwitchCase=\"'textbox'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\"\n [formattedValue]=\"groupField.formattedValue\" [label]=\"groupField.label\"\n [placeholder]=\"groupField.placeholder\" [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\"\n [disabled]=\"groupField.disabled\" [readonly]=\"groupField.readonly\"\n [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-textbox>\n\n <pep-select *ngSwitchCase=\"'select'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\" [label]=\"groupField.label\"\n [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\" [disabled]=\"groupField.disabled\"\n [readonly]=\"groupField.readonly\" [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\"\n [options]=\"groupField.options\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-select>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <div class=\"pep-card-input \" title=\"{{ label }}&nbsp;{{ formattedValue }}\"\n [ngClass]=\"['text-align-' + xAlignment]\">\n <span *ngIf=\"label != ''\" class=\"body-xs title\">{{ label }}&nbsp;</span>\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <div class=\"pep-card-input \" title=\"{{ formattedValue }}\" [ngClass]=\"['text-align-' + xAlignment]\">\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>", styles: [".header{grid-column:1/span 3}.pep-address-container{padding:.875rem var(--pep-spacing-md, .75rem);border-radius:var(--pep-border-radius-md, .25rem);display:grid;grid-template-columns:repeat(3,1fr);grid-column-gap:var(--pep-spacing-md, .75rem);grid-row-gap:var(--pep-spacing-md, .75rem)}.pep-address-container .columns-2{grid-column:1/span 2}.pep-address-container .columns-3{grid-column:1/span 3}\n", ".pepperi-address-container,.pep-address-container{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i4.PepTextboxComponent, selector: "pep-textbox", inputs: ["key", "value", "formattedValue", "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"], outputs: ["valueChange", "formValidationChange"] }, { kind: "component", type: i5.PepSelectComponent, selector: "pep-select", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "options", "visible", "emptyOption", "form", "layoutType", "parentFieldKey", "isActive", "showTitle", "renderTitle"], outputs: ["valueChange", "formValidationChange"] }, { kind: "component", type: i6.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
78
+ PepAddressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepAddressComponent, selector: "pep-address", inputs: { key: "key", formattedValue: "formattedValue", label: "label", mandatory: "mandatory", disabled: "disabled", readonly: "readonly", xAlignment: "xAlignment", rowSpan: "rowSpan", groupFields: "groupFields", form: "form", layoutType: "layoutType", visible: "visible" }, outputs: { addressValueChange: "addressValueChange" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\" class=\"header\">\n </pep-field-title>\n <div [formGroupName]=\"key\" [id]=\"key\" class=\"pep-address-container\"\n dir=\"{{ xAlignment === 'right' ? 'rtl' : 'ltr' }}\">\n <div [ngSwitch]=\"groupField.controlType\" *ngFor=\"let groupField of groupFields; let i = index\"\n class=\"pep-address-field columns-{{ groupField.colSpan }}\">\n <pep-textbox *ngSwitchCase=\"'textbox'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\" [label]=\"groupField.label\"\n [placeholder]=\"groupField.placeholder\" [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\"\n [disabled]=\"groupField.disabled\" [readonly]=\"groupField.readonly\"\n [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-textbox>\n\n <pep-select *ngSwitchCase=\"'select'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\" [label]=\"groupField.label\"\n [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\" [disabled]=\"groupField.disabled\"\n [readonly]=\"groupField.readonly\" [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\"\n [options]=\"groupField.options\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-select>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <div class=\"pep-card-input \" title=\"{{ label }}&nbsp;{{ formattedValue }}\"\n [ngClass]=\"['text-align-' + xAlignment]\">\n <span *ngIf=\"label != ''\" class=\"body-xs title\">{{ label }}&nbsp;</span>\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <div class=\"pep-card-input \" title=\"{{ formattedValue }}\" [ngClass]=\"['text-align-' + xAlignment]\">\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>", styles: [".header{grid-column:1/span 3}.pep-address-container{padding:.875rem var(--pep-spacing-md, .75rem);border-radius:var(--pep-border-radius-md, .25rem);display:grid;grid-template-columns:repeat(3,1fr);grid-column-gap:var(--pep-spacing-md, .75rem);grid-row-gap:var(--pep-spacing-md, .75rem)}.pep-address-container .columns-2{grid-column:1/span 2}.pep-address-container .columns-3{grid-column:1/span 3}\n", ".pepperi-address-container,.pep-address-container{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i4.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: i5.PepSelectComponent, selector: "pep-select", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "options", "visible", "emptyOption", "form", "layoutType", "parentFieldKey", "isActive", "showTitle", "renderTitle", "typeaheadDebounceInterval"], outputs: ["valueChange"] }, { kind: "component", type: i6.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
79
79
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepAddressComponent, decorators: [{
80
80
  type: Component,
81
- args: [{ selector: 'pep-address', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\" class=\"header\">\n </pep-field-title>\n <div [formGroupName]=\"key\" [id]=\"key\" class=\"pep-address-container\"\n dir=\"{{ xAlignment === 'right' ? 'rtl' : 'ltr' }}\">\n <div [ngSwitch]=\"groupField.controlType\" *ngFor=\"let groupField of groupFields; let i = index\"\n class=\"pep-address-field columns-{{ groupField.colSpan }}\">\n <pep-textbox *ngSwitchCase=\"'textbox'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\"\n [formattedValue]=\"groupField.formattedValue\" [label]=\"groupField.label\"\n [placeholder]=\"groupField.placeholder\" [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\"\n [disabled]=\"groupField.disabled\" [readonly]=\"groupField.readonly\"\n [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-textbox>\n\n <pep-select *ngSwitchCase=\"'select'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\" [label]=\"groupField.label\"\n [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\" [disabled]=\"groupField.disabled\"\n [readonly]=\"groupField.readonly\" [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\"\n [options]=\"groupField.options\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-select>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <div class=\"pep-card-input \" title=\"{{ label }}&nbsp;{{ formattedValue }}\"\n [ngClass]=\"['text-align-' + xAlignment]\">\n <span *ngIf=\"label != ''\" class=\"body-xs title\">{{ label }}&nbsp;</span>\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <div class=\"pep-card-input \" title=\"{{ formattedValue }}\" [ngClass]=\"['text-align-' + xAlignment]\">\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>", styles: [".header{grid-column:1/span 3}.pep-address-container{padding:.875rem var(--pep-spacing-md, .75rem);border-radius:var(--pep-border-radius-md, .25rem);display:grid;grid-template-columns:repeat(3,1fr);grid-column-gap:var(--pep-spacing-md, .75rem);grid-row-gap:var(--pep-spacing-md, .75rem)}.pep-address-container .columns-2{grid-column:1/span 2}.pep-address-container .columns-3{grid-column:1/span 3}\n", ".pepperi-address-container,.pep-address-container{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)}\n"] }]
81
+ args: [{ selector: 'pep-address', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <ng-container *ngIf=\"layoutType === 'form'\">\n <pep-field-title [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\" class=\"header\">\n </pep-field-title>\n <div [formGroupName]=\"key\" [id]=\"key\" class=\"pep-address-container\"\n dir=\"{{ xAlignment === 'right' ? 'rtl' : 'ltr' }}\">\n <div [ngSwitch]=\"groupField.controlType\" *ngFor=\"let groupField of groupFields; let i = index\"\n class=\"pep-address-field columns-{{ groupField.colSpan }}\">\n <pep-textbox *ngSwitchCase=\"'textbox'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\" [label]=\"groupField.label\"\n [placeholder]=\"groupField.placeholder\" [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\"\n [disabled]=\"groupField.disabled\" [readonly]=\"groupField.readonly\"\n [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-textbox>\n\n <pep-select *ngSwitchCase=\"'select'\" [layoutType]=\"layoutType\" title=\"{{ groupField.formattedValue }}\"\n [form]=\"form\" [key]=\"groupField.key\" [value]=\"groupField.value\" [label]=\"groupField.label\"\n [type]=\"groupField.type\" [mandatory]=\"groupField.mandatory\" [disabled]=\"groupField.disabled\"\n [readonly]=\"groupField.readonly\" [xAlignment]=\"groupField.xAlignment\" [rowSpan]=\"groupField.rowSpan\"\n [options]=\"groupField.options\" [parentFieldKey]=\"key\"\n (valueChange)=\"onValueChange($event, groupField.key)\">\n </pep-select>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <div class=\"pep-card-input \" title=\"{{ label }}&nbsp;{{ formattedValue }}\"\n [ngClass]=\"['text-align-' + xAlignment]\">\n <span *ngIf=\"label != ''\" class=\"body-xs title\">{{ label }}&nbsp;</span>\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <div class=\"pep-card-input \" title=\"{{ formattedValue }}\" [ngClass]=\"['text-align-' + xAlignment]\">\n <ng-container *ngFor=\"let groupField of groupFields; let i = index\">\n <span *ngIf=\"groupField?.formattedValue != ''\" class=\"body-sm\">{{ groupField.formattedValue\n }},&nbsp;</span>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>", styles: [".header{grid-column:1/span 3}.pep-address-container{padding:.875rem var(--pep-spacing-md, .75rem);border-radius:var(--pep-border-radius-md, .25rem);display:grid;grid-template-columns:repeat(3,1fr);grid-column-gap:var(--pep-spacing-md, .75rem);grid-row-gap:var(--pep-spacing-md, .75rem)}.pep-address-container .columns-2{grid-column:1/span 2}.pep-address-container .columns-3{grid-column:1/span 3}\n", ".pepperi-address-container,.pep-address-container{background:hsla(var(--pep-color-weak-h, 0),var(--pep-color-weak-s, 0%),var(--pep-color-weak-l, 10%),.04)}\n"] }]
82
82
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { key: [{
83
83
  type: Input
84
84
  }], formattedValue: [{
@@ -106,4 +106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
106
106
  }], addressValueChange: [{
107
107
  type: Output
108
108
  }] } });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUdULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUkxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBR0gsNEJBQTRCLEdBRS9CLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7O0FBUWpDLE1BQU0sT0FBTyxtQkFBbUI7SUFzQzVCLFlBQW9CLE9BQW1CLEVBQVUsUUFBbUI7UUFBaEQsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFyQzNELFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDbEIsdUJBQXVCO1FBQ2QsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGVBQVUsR0FBMkIsNEJBQTRCLENBQUM7UUFDbEUsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUdaLFNBQUksR0FBYyxJQUFJLENBQUM7UUFDdkIsZUFBVSxHQUFrQixNQUFNLENBQUM7UUFFcEMsYUFBUSxHQUFHLElBQUksQ0FBQztRQXFCeEIsdUJBQWtCLEdBQTRDLElBQUksWUFBWSxFQUE2QixDQUFDO0lBRXBDLENBQUM7SUF0QnpFLElBQ0ksT0FBTyxDQUFDLE9BQWdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUMxQixnQkFBZ0IsQ0FDbkIsQ0FBQztTQUNMO2FBQU07WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzFCLGdCQUFnQixDQUNuQixDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFPRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDZixFQUFFO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDUCxFQUFFO0lBQ04sQ0FBQztJQUVELHVDQUF1QztJQUN2QyxzQ0FBc0M7SUFDdEMsbURBQW1EO0lBQ25ELHlEQUF5RDtJQUN6RCxJQUFJO0lBRUosYUFBYSxDQUFDLEtBQWEsRUFBRSxHQUFXO1FBQ3BDLGtCQUFrQjtRQUNsQixtREFBbUQ7UUFDbkQscURBQXFEO1FBQ3JELFdBQVc7UUFDWCwyQkFBMkI7UUFDM0IsSUFBSTtRQUVKLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFeEUsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ3hELHFDQUFxQztZQUNyQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUV6QyxJQUFJLFFBQVEsRUFBRTtvQkFDVixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDckM7YUFDSjtZQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLEtBQUssRUFBRSxLQUFLO2FBQ2YsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOztnSEFuRlEsbUJBQW1CO29HQUFuQixtQkFBbUIsbVpDMUJoQyw4a0dBK0NlOzJGRHJCRixtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNO3lIQUd0QyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFJRixPQUFPO3NCQURWLEtBQUs7Z0JBb0JOLGtCQUFrQjtzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUmVuZGVyZXIyLFxuICAgIEVsZW1lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBJUGVwRmllbGRWYWx1ZUNoYW5nZUV2ZW50LFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWFkZHJlc3MnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZGRyZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZGRyZXNzLmNvbXBvbmVudC5zY3NzJywgJy4vYWRkcmVzcy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBBZGRyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkga2V5ID0gJyc7XG4gICAgLy8gQElucHV0KCkgdmFsdWUgPSAnJztcbiAgICBASW5wdXQoKSBmb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gICAgQElucHV0KCkgbWFuZGF0b3J5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHhBbGlnbm1lbnQ6IFBlcEhvcml6b250YWxBbGlnbm1lbnQgPSBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5UO1xuICAgIEBJbnB1dCgpIHJvd1NwYW4gPSAxO1xuICAgIEBJbnB1dCgpIGdyb3VwRmllbGRzOiBBcnJheTxhbnk+O1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBsYXlvdXRUeXBlOiBQZXBMYXlvdXRUeXBlID0gJ2Zvcm0nO1xuXG4gICAgcHJpdmF0ZSBfdmlzaWJsZSA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBzZXQgdmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KClcbiAgICBhZGRyZXNzVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRWYWx1ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkVmFsdWVDaGFuZ2VFdmVudD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAncGVwLWdyb3VwZWQtZmllbGQnKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuXG4gICAgLy8gTm90IGluIHVzZSBhbnltb3JlIGNvbW1lbnQgaW4gMTYuNTUuXG4gICAgLy8gb25CbHVyKGU6IGFueSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldCA/IGUudGFyZ2V0LnZhbHVlIDogZTtcbiAgICAvLyAgICAgdGhpcy5jaGFuZ2VWYWx1ZSh7IGtleSwgdmFsdWUgfSwgZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAvLyB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIChlLnRhcmdldCkge1xuICAgICAgICAvLyAgICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCA/IGUudGFyZ2V0LnZhbHVlIDogZTtcbiAgICAgICAgLy8gICAgIHRoaXMuY2hhbmdlVmFsdWUoeyBrZXksIHZhbHVlOiBpbnB1dC52YWx1ZSB9KTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2hhbmdlVmFsdWUoZSk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50R3JvdXBGaWVsZCA9IHRoaXMuZ3JvdXBGaWVsZHMuZmluZCgoZ2YpID0+IGdmLmtleSA9PT0ga2V5KTtcblxuICAgICAgICBpZiAoY3VycmVudEdyb3VwRmllbGQgJiYgY3VycmVudEdyb3VwRmllbGQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIGluIHRoZSBmb3JtIGNvbnRyb2xzXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUN0cmwgPSB0aGlzLmZvcm0uZ2V0KHRoaXMua2V5KTtcblxuICAgICAgICAgICAgICAgIGlmIChmb3JtQ3RybCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ3RybC5nZXQoa2V5KS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoYW5nZVZhbHVlKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICAvLyAgICAgY29uc3QgY3VycmVudEdyb3VwRmllbGQgPSB0aGlzLmdyb3VwRmllbGRzLmZpbHRlcihcbiAgICAvLyAgICAgICAgIChncm91cEZpZWxkKSA9PiBncm91cEZpZWxkLmtleSA9PT0gZmllbGQua2V5XG4gICAgLy8gICAgIClbMF07XG5cbiAgICAvLyAgICAgaWYgKGN1cnJlbnRHcm91cEZpZWxkLnZhbHVlICE9PSBmaWVsZC52YWx1ZSkge1xuICAgIC8vICAgICAgICAgLy8gU2V0IHRoZSB2YWx1ZSBpbiB0aGUgZm9ybSBjb250cm9sc1xuICAgIC8vICAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZvcm1DdHJsID0gdGhpcy5mb3JtLmdldCh0aGlzLmtleSk7XG5cbiAgICAvLyAgICAgICAgICAgICBpZiAoZm9ybUN0cmwpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgZm9ybUN0cmwuZ2V0KGZpZWxkLmtleSkuc2V0VmFsdWUoZmllbGQudmFsdWUpO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAvLyAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAvLyAgICAgICAgICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdmb3JtJ1wiPlxuICAgICAgICA8cGVwLWZpZWxkLXRpdGxlIFtsYWJlbF09XCJsYWJlbFwiIFttYW5kYXRvcnldPVwibWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPC9wZXAtZmllbGQtdGl0bGU+XG4gICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwia2V5XCIgW2lkXT1cImtleVwiIGNsYXNzPVwicGVwLWFkZHJlc3MtY29udGFpbmVyXCJcbiAgICAgICAgICAgIGRpcj1cInt7IHhBbGlnbm1lbnQgPT09ICdyaWdodCcgPyAncnRsJyA6ICdsdHInIH19XCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJncm91cEZpZWxkLmNvbnRyb2xUeXBlXCIgKm5nRm9yPVwibGV0IGdyb3VwRmllbGQgb2YgZ3JvdXBGaWVsZHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwLWFkZHJlc3MtZmllbGQgY29sdW1ucy17eyBncm91cEZpZWxkLmNvbFNwYW4gfX1cIj5cbiAgICAgICAgICAgICAgICA8cGVwLXRleHRib3ggKm5nU3dpdGNoQ2FzZT1cIid0ZXh0Ym94J1wiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIiB0aXRsZT1cInt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJncm91cEZpZWxkLmtleVwiIFt2YWx1ZV09XCJncm91cEZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdHRlZFZhbHVlXT1cImdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWVcIiBbbGFiZWxdPVwiZ3JvdXBGaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJncm91cEZpZWxkLnBsYWNlaG9sZGVyXCIgW3R5cGVdPVwiZ3JvdXBGaWVsZC50eXBlXCIgW21hbmRhdG9yeV09XCJncm91cEZpZWxkLm1hbmRhdG9yeVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncm91cEZpZWxkLmRpc2FibGVkXCIgW3JlYWRvbmx5XT1cImdyb3VwRmllbGQucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbeEFsaWdubWVudF09XCJncm91cEZpZWxkLnhBbGlnbm1lbnRcIiBbcm93U3Bhbl09XCJncm91cEZpZWxkLnJvd1NwYW5cIiBbcGFyZW50RmllbGRLZXldPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50LCBncm91cEZpZWxkLmtleSlcIj5cbiAgICAgICAgICAgICAgICA8L3BlcC10ZXh0Ym94PlxuXG4gICAgICAgICAgICAgICAgPHBlcC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCIgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiIHRpdGxlPVwie3sgZ3JvdXBGaWVsZC5mb3JtYXR0ZWRWYWx1ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImdyb3VwRmllbGQua2V5XCIgW3ZhbHVlXT1cImdyb3VwRmllbGQudmFsdWVcIiBbbGFiZWxdPVwiZ3JvdXBGaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImdyb3VwRmllbGQudHlwZVwiIFttYW5kYXRvcnldPVwiZ3JvdXBGaWVsZC5tYW5kYXRvcnlcIiBbZGlzYWJsZWRdPVwiZ3JvdXBGaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJncm91cEZpZWxkLnJlYWRvbmx5XCIgW3hBbGlnbm1lbnRdPVwiZ3JvdXBGaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZ3JvdXBGaWVsZC5yb3dTcGFuXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ3JvdXBGaWVsZC5vcHRpb25zXCIgW3BhcmVudEZpZWxkS2V5XT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudCwgZ3JvdXBGaWVsZC5rZXkpXCI+XG4gICAgICAgICAgICAgICAgPC9wZXAtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdjYXJkJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVwLWNhcmQtaW5wdXQgXCIgdGl0bGU9XCJ7eyBsYWJlbCB9fSZuYnNwO3t7IGZvcm1hdHRlZFZhbHVlIH19XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsndGV4dC1hbGlnbi0nICsgeEFsaWdubWVudF1cIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibGFiZWwgIT0gJydcIiBjbGFzcz1cImJvZHkteHMgdGl0bGVcIj57eyBsYWJlbCB9fSZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwRmllbGQgb2YgZ3JvdXBGaWVsZHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwRmllbGQ/LmZvcm1hdHRlZFZhbHVlICE9ICcnXCIgY2xhc3M9XCJib2R5LXNtXCI+e3sgZ3JvdXBGaWVsZC5mb3JtYXR0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICB9fSwmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVwLWNhcmQtaW5wdXQgXCIgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiIFtuZ0NsYXNzXT1cIlsndGV4dC1hbGlnbi0nICsgeEFsaWdubWVudF1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwRmllbGQgb2YgZ3JvdXBGaWVsZHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwRmllbGQ/LmZvcm1hdHRlZFZhbHVlICE9ICcnXCIgY2xhc3M9XCJib2R5LXNtXCI+e3sgZ3JvdXBGaWVsZC5mb3JtYXR0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICB9fSwmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUdULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUkxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBR0gsNEJBQTRCLEdBRS9CLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7O0FBUWpDLE1BQU0sT0FBTyxtQkFBbUI7SUFzQzVCLFlBQW9CLE9BQW1CLEVBQVUsUUFBbUI7UUFBaEQsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFyQzNELFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDbEIsdUJBQXVCO1FBQ2QsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGVBQVUsR0FBMkIsNEJBQTRCLENBQUM7UUFDbEUsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUdaLFNBQUksR0FBYyxJQUFJLENBQUM7UUFDdkIsZUFBVSxHQUFrQixNQUFNLENBQUM7UUFFcEMsYUFBUSxHQUFHLElBQUksQ0FBQztRQXFCeEIsdUJBQWtCLEdBQTRDLElBQUksWUFBWSxFQUE2QixDQUFDO0lBRXBDLENBQUM7SUF0QnpFLElBQ0ksT0FBTyxDQUFDLE9BQWdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUMxQixnQkFBZ0IsQ0FDbkIsQ0FBQztTQUNMO2FBQU07WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzFCLGdCQUFnQixDQUNuQixDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFPRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDZixFQUFFO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDUCxFQUFFO0lBQ04sQ0FBQztJQUVELHVDQUF1QztJQUN2QyxzQ0FBc0M7SUFDdEMsbURBQW1EO0lBQ25ELHlEQUF5RDtJQUN6RCxJQUFJO0lBRUosYUFBYSxDQUFDLEtBQWEsRUFBRSxHQUFXO1FBQ3BDLGtCQUFrQjtRQUNsQixtREFBbUQ7UUFDbkQscURBQXFEO1FBQ3JELFdBQVc7UUFDWCwyQkFBMkI7UUFDM0IsSUFBSTtRQUVKLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFeEUsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ3hELHFDQUFxQztZQUNyQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUV6QyxJQUFJLFFBQVEsRUFBRTtvQkFDVixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDckM7YUFDSjtZQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLEtBQUssRUFBRSxLQUFLO2FBQ2YsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOztnSEFuRlEsbUJBQW1CO29HQUFuQixtQkFBbUIsbVpDMUJoQywwZ0dBOENlOzJGRHBCRixtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNO3lIQUd0QyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFJRixPQUFPO3NCQURWLEtBQUs7Z0JBb0JOLGtCQUFrQjtzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUmVuZGVyZXIyLFxuICAgIEVsZW1lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBJUGVwRmllbGRWYWx1ZUNoYW5nZUV2ZW50LFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWFkZHJlc3MnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZGRyZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZGRyZXNzLmNvbXBvbmVudC5zY3NzJywgJy4vYWRkcmVzcy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBBZGRyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkga2V5ID0gJyc7XG4gICAgLy8gQElucHV0KCkgdmFsdWUgPSAnJztcbiAgICBASW5wdXQoKSBmb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gICAgQElucHV0KCkgbWFuZGF0b3J5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHhBbGlnbm1lbnQ6IFBlcEhvcml6b250YWxBbGlnbm1lbnQgPSBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5UO1xuICAgIEBJbnB1dCgpIHJvd1NwYW4gPSAxO1xuICAgIEBJbnB1dCgpIGdyb3VwRmllbGRzOiBBcnJheTxhbnk+O1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBsYXlvdXRUeXBlOiBQZXBMYXlvdXRUeXBlID0gJ2Zvcm0nO1xuXG4gICAgcHJpdmF0ZSBfdmlzaWJsZSA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBzZXQgdmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGlkZGVuLWVsZW1lbnQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KClcbiAgICBhZGRyZXNzVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRWYWx1ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkVmFsdWVDaGFuZ2VFdmVudD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAncGVwLWdyb3VwZWQtZmllbGQnKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuXG4gICAgLy8gTm90IGluIHVzZSBhbnltb3JlIGNvbW1lbnQgaW4gMTYuNTUuXG4gICAgLy8gb25CbHVyKGU6IGFueSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldCA/IGUudGFyZ2V0LnZhbHVlIDogZTtcbiAgICAvLyAgICAgdGhpcy5jaGFuZ2VWYWx1ZSh7IGtleSwgdmFsdWUgfSwgZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAvLyB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIChlLnRhcmdldCkge1xuICAgICAgICAvLyAgICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCA/IGUudGFyZ2V0LnZhbHVlIDogZTtcbiAgICAgICAgLy8gICAgIHRoaXMuY2hhbmdlVmFsdWUoeyBrZXksIHZhbHVlOiBpbnB1dC52YWx1ZSB9KTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2hhbmdlVmFsdWUoZSk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50R3JvdXBGaWVsZCA9IHRoaXMuZ3JvdXBGaWVsZHMuZmluZCgoZ2YpID0+IGdmLmtleSA9PT0ga2V5KTtcblxuICAgICAgICBpZiAoY3VycmVudEdyb3VwRmllbGQgJiYgY3VycmVudEdyb3VwRmllbGQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIGluIHRoZSBmb3JtIGNvbnRyb2xzXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUN0cmwgPSB0aGlzLmZvcm0uZ2V0KHRoaXMua2V5KTtcblxuICAgICAgICAgICAgICAgIGlmIChmb3JtQ3RybCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ3RybC5nZXQoa2V5KS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoYW5nZVZhbHVlKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICAvLyAgICAgY29uc3QgY3VycmVudEdyb3VwRmllbGQgPSB0aGlzLmdyb3VwRmllbGRzLmZpbHRlcihcbiAgICAvLyAgICAgICAgIChncm91cEZpZWxkKSA9PiBncm91cEZpZWxkLmtleSA9PT0gZmllbGQua2V5XG4gICAgLy8gICAgIClbMF07XG5cbiAgICAvLyAgICAgaWYgKGN1cnJlbnRHcm91cEZpZWxkLnZhbHVlICE9PSBmaWVsZC52YWx1ZSkge1xuICAgIC8vICAgICAgICAgLy8gU2V0IHRoZSB2YWx1ZSBpbiB0aGUgZm9ybSBjb250cm9sc1xuICAgIC8vICAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZvcm1DdHJsID0gdGhpcy5mb3JtLmdldCh0aGlzLmtleSk7XG5cbiAgICAvLyAgICAgICAgICAgICBpZiAoZm9ybUN0cmwpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgZm9ybUN0cmwuZ2V0KGZpZWxkLmtleSkuc2V0VmFsdWUoZmllbGQudmFsdWUpO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAvLyAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAvLyAgICAgICAgICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdmb3JtJ1wiPlxuICAgICAgICA8cGVwLWZpZWxkLXRpdGxlIFtsYWJlbF09XCJsYWJlbFwiIFttYW5kYXRvcnldPVwibWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPC9wZXAtZmllbGQtdGl0bGU+XG4gICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwia2V5XCIgW2lkXT1cImtleVwiIGNsYXNzPVwicGVwLWFkZHJlc3MtY29udGFpbmVyXCJcbiAgICAgICAgICAgIGRpcj1cInt7IHhBbGlnbm1lbnQgPT09ICdyaWdodCcgPyAncnRsJyA6ICdsdHInIH19XCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJncm91cEZpZWxkLmNvbnRyb2xUeXBlXCIgKm5nRm9yPVwibGV0IGdyb3VwRmllbGQgb2YgZ3JvdXBGaWVsZHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwLWFkZHJlc3MtZmllbGQgY29sdW1ucy17eyBncm91cEZpZWxkLmNvbFNwYW4gfX1cIj5cbiAgICAgICAgICAgICAgICA8cGVwLXRleHRib3ggKm5nU3dpdGNoQ2FzZT1cIid0ZXh0Ym94J1wiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIiB0aXRsZT1cInt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJncm91cEZpZWxkLmtleVwiIFt2YWx1ZV09XCJncm91cEZpZWxkLnZhbHVlXCIgW2xhYmVsXT1cImdyb3VwRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ3JvdXBGaWVsZC5wbGFjZWhvbGRlclwiIFt0eXBlXT1cImdyb3VwRmllbGQudHlwZVwiIFttYW5kYXRvcnldPVwiZ3JvdXBGaWVsZC5tYW5kYXRvcnlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXBGaWVsZC5kaXNhYmxlZFwiIFtyZWFkb25seV09XCJncm91cEZpZWxkLnJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgW3hBbGlnbm1lbnRdPVwiZ3JvdXBGaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZ3JvdXBGaWVsZC5yb3dTcGFuXCIgW3BhcmVudEZpZWxkS2V5XT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudCwgZ3JvdXBGaWVsZC5rZXkpXCI+XG4gICAgICAgICAgICAgICAgPC9wZXAtdGV4dGJveD5cblxuICAgICAgICAgICAgICAgIDxwZXAtc2VsZWN0ICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIiB0aXRsZT1cInt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJncm91cEZpZWxkLmtleVwiIFt2YWx1ZV09XCJncm91cEZpZWxkLnZhbHVlXCIgW2xhYmVsXT1cImdyb3VwRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJncm91cEZpZWxkLnR5cGVcIiBbbWFuZGF0b3J5XT1cImdyb3VwRmllbGQubWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImdyb3VwRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZ3JvdXBGaWVsZC5yZWFkb25seVwiIFt4QWxpZ25tZW50XT1cImdyb3VwRmllbGQueEFsaWdubWVudFwiIFtyb3dTcGFuXT1cImdyb3VwRmllbGQucm93U3BhblwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImdyb3VwRmllbGQub3B0aW9uc1wiIFtwYXJlbnRGaWVsZEtleV09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQsIGdyb3VwRmllbGQua2V5KVwiPlxuICAgICAgICAgICAgICAgIDwvcGVwLXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAnY2FyZCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcC1jYXJkLWlucHV0IFwiIHRpdGxlPVwie3sgbGFiZWwgfX0mbmJzcDt7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJbJ3RleHQtYWxpZ24tJyArIHhBbGlnbm1lbnRdXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxhYmVsICE9ICcnXCIgY2xhc3M9XCJib2R5LXhzIHRpdGxlXCI+e3sgbGFiZWwgfX0mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cEZpZWxkIG9mIGdyb3VwRmllbGRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cEZpZWxkPy5mb3JtYXR0ZWRWYWx1ZSAhPSAnJ1wiIGNsYXNzPVwiYm9keS1zbVwiPnt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfX0sJm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICd0YWJsZSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcC1jYXJkLWlucHV0IFwiIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIiBbbmdDbGFzc109XCJbJ3RleHQtYWxpZ24tJyArIHhBbGlnbm1lbnRdXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cEZpZWxkIG9mIGdyb3VwRmllbGRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cEZpZWxkPy5mb3JtYXR0ZWRWYWx1ZSAhPSAnJ1wiIGNsYXNzPVwiYm9keS1zbVwiPnt7IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfX0sJm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+Il19