@pepperi-addons/ngx-lib 0.4.2-beta.9 → 0.4.2-beta.91

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 (196) hide show
  1. package/attachment/attachment.component.d.ts +11 -2
  2. package/button/button.component.d.ts +8 -8
  3. package/core/common/services/color.service.d.ts +1 -0
  4. package/core/common/services/file.service.d.ts +7 -2
  5. package/dialog/dialog.service.d.ts +1 -0
  6. package/draggable-items/draggable-items.component.d.ts +3 -3
  7. package/draggable-items/draggable-items.module.d.ts +1 -1
  8. package/esm2020/address/address.component.mjs +1 -1
  9. package/esm2020/attachment/attachment.component.mjs +38 -18
  10. package/esm2020/button/button.component.mjs +7 -7
  11. package/esm2020/chips/chips.component.mjs +2 -2
  12. package/esm2020/color/color-picker.component.mjs +1 -1
  13. package/esm2020/core/common/services/color.service.mjs +27 -1
  14. package/esm2020/core/common/services/file.service.mjs +57 -20
  15. package/esm2020/core/common/services/session.service.mjs +2 -1
  16. package/esm2020/core/customization/customization.model.mjs +7 -6
  17. package/esm2020/core/customization/customization.service.mjs +13 -4
  18. package/esm2020/core/http/services/http.service.mjs +1 -1
  19. package/esm2020/dialog/dialog.component.mjs +3 -3
  20. package/esm2020/dialog/dialog.service.mjs +22 -1
  21. package/esm2020/draggable-items/draggable-items.component.mjs +7 -7
  22. package/esm2020/draggable-items/draggable-items.module.mjs +6 -6
  23. package/esm2020/files-uploader/files-uploader.component.mjs +50 -45
  24. package/esm2020/form/field-generator.component.mjs +3 -3
  25. package/esm2020/form/form.component.mjs +4 -3
  26. package/esm2020/form/internal-field-generator.component.mjs +1 -1
  27. package/esm2020/form/internal-form.component.mjs +1 -1
  28. package/esm2020/form/internal-list.component.mjs +2 -2
  29. package/esm2020/image/image.component.mjs +32 -16
  30. package/esm2020/image/image.service.mjs +2 -4
  31. package/esm2020/images-filmstrip/images-filmstrip.component.mjs +2 -2
  32. package/esm2020/link/link.component.mjs +33 -58
  33. package/esm2020/list/list.component.mjs +109 -18
  34. package/esm2020/list/list.model.mjs +1 -1
  35. package/esm2020/menu/menu.component.mjs +3 -3
  36. package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +1 -1
  37. package/esm2020/quantity-selector/quantity-selector.component.mjs +20 -25
  38. package/esm2020/query-builder/common/model/operator.mjs +2 -2
  39. package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +1 -1
  40. package/esm2020/select/select.component.mjs +66 -40
  41. package/esm2020/select-panel/select-panel.component.mjs +2 -2
  42. package/esm2020/signature/public-api.mjs +2 -1
  43. package/esm2020/signature/signature-dialog.component.mjs +78 -0
  44. package/esm2020/signature/signature.component.mjs +117 -89
  45. package/esm2020/signature/signature.module.mjs +6 -5
  46. package/esm2020/skeleton-loader/pepperi-addons-ngx-lib-skeleton-loader.mjs +5 -0
  47. package/esm2020/skeleton-loader/public-api.mjs +6 -0
  48. package/esm2020/skeleton-loader/skeleton-loader.component.mjs +44 -0
  49. package/esm2020/skeleton-loader/skeleton-loader.module.mjs +24 -0
  50. package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +3 -3
  51. package/esm2020/smart-filters/date-filter/date-filter.component.mjs +1 -1
  52. package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +1 -1
  53. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +3 -3
  54. package/esm2020/smart-filters/text-filter/text-filter.component.mjs +1 -1
  55. package/esm2020/textbox/textbox.component.mjs +9 -3
  56. package/esm2020/top-bar/top-bar.component.mjs +2 -2
  57. package/fesm2015/pepperi-addons-ngx-lib-address.mjs +1 -1
  58. package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  59. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +37 -17
  60. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  61. package/fesm2015/pepperi-addons-ngx-lib-button.mjs +6 -6
  62. package/fesm2015/pepperi-addons-ngx-lib-button.mjs.map +1 -1
  63. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +2 -2
  64. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  65. package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  66. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +23 -2
  67. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  68. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +11 -11
  69. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  70. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +49 -44
  71. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  72. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +8 -7
  73. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  74. package/fesm2015/pepperi-addons-ngx-lib-image.mjs +32 -18
  75. package/fesm2015/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  76. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +1 -1
  77. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  78. package/fesm2015/pepperi-addons-ngx-lib-link.mjs +32 -57
  79. package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  80. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +108 -18
  81. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  82. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +2 -2
  83. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  84. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
  85. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  86. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +19 -24
  87. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  88. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
  89. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  90. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +2 -2
  91. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  92. package/fesm2015/pepperi-addons-ngx-lib-select.mjs +64 -38
  93. package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  94. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +205 -102
  95. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  96. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs +78 -0
  97. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -0
  98. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +7 -7
  99. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  100. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +8 -2
  101. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  102. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
  103. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  104. package/fesm2015/pepperi-addons-ngx-lib.mjs +101 -27
  105. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  106. package/fesm2020/pepperi-addons-ngx-lib-address.mjs +1 -1
  107. package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  108. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +37 -17
  109. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  110. package/fesm2020/pepperi-addons-ngx-lib-button.mjs +6 -6
  111. package/fesm2020/pepperi-addons-ngx-lib-button.mjs.map +1 -1
  112. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +2 -2
  113. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  114. package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  115. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +23 -2
  116. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  117. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +11 -11
  118. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  119. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs +49 -44
  120. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  121. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +8 -7
  122. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  123. package/fesm2020/pepperi-addons-ngx-lib-image.mjs +32 -18
  124. package/fesm2020/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  125. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +1 -1
  126. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  127. package/fesm2020/pepperi-addons-ngx-lib-link.mjs +32 -57
  128. package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  129. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +108 -17
  130. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  131. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +2 -2
  132. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  133. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
  134. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  135. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +19 -24
  136. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  137. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
  138. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  139. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +2 -2
  140. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  141. package/fesm2020/pepperi-addons-ngx-lib-select.mjs +64 -38
  142. package/fesm2020/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  143. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +201 -102
  144. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  145. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs +76 -0
  146. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -0
  147. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +7 -7
  148. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  149. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +8 -2
  150. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  151. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
  152. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  153. package/fesm2020/pepperi-addons-ngx-lib.mjs +101 -27
  154. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  155. package/files-uploader/files-uploader.component.d.ts +7 -4
  156. package/image/image.component.d.ts +11 -3
  157. package/link/link.component.d.ts +23 -27
  158. package/list/list.component.d.ts +10 -2
  159. package/list/list.model.d.ts +3 -1
  160. package/menu/menu.component.d.ts +1 -1
  161. package/package.json +10 -2
  162. package/quantity-selector/quantity-selector.component.d.ts +0 -2
  163. package/select/select.component.d.ts +10 -2
  164. package/signature/public-api.d.ts +1 -0
  165. package/signature/signature-dialog.component.d.ts +29 -0
  166. package/signature/signature.component.d.ts +7 -16
  167. package/signature/signature.module.d.ts +16 -15
  168. package/skeleton-loader/index.d.ts +5 -0
  169. package/skeleton-loader/public-api.d.ts +2 -0
  170. package/skeleton-loader/skeleton-loader.component.d.ts +20 -0
  171. package/skeleton-loader/skeleton-loader.component.theme.scss +15 -0
  172. package/skeleton-loader/skeleton-loader.module.d.ts +9 -0
  173. package/src/core/style/abstracts/AbstractsIntro.stories.mdx +7 -0
  174. package/src/core/style/abstracts/functions.scss +11 -11
  175. package/src/core/style/abstracts/mixins.scss +9 -6
  176. package/src/core/style/abstracts/variables.scss +38 -18
  177. package/src/core/style/base/BorderRadius.stories.mdx +59 -0
  178. package/src/core/style/base/Breakpoints.stories.mdx +36 -0
  179. package/src/core/style/base/Colors.stories.mdx +128 -0
  180. package/src/core/style/base/Shadows.stories.mdx +69 -0
  181. package/src/core/style/base/Spacing.stories.mdx +75 -0
  182. package/src/core/style/base/States.stories.mdx +62 -0
  183. package/src/core/style/base/Typography.stories.mdx +89 -0
  184. package/src/core/style/base/ZIndex.stories.mdx +47 -0
  185. package/src/core/style/base/base.scss +8 -10
  186. package/src/core/style/base/borderRadius.component.ts +27 -0
  187. package/src/core/style/base/breakpoints.component.ts +14 -0
  188. package/src/core/style/base/colors.component.ts +174 -0
  189. package/src/core/style/base/shadows.component.ts +90 -0
  190. package/src/core/style/base/spacing.component.ts +71 -0
  191. package/src/core/style/base/states.component.ts +84 -0
  192. package/src/core/style/base/typography.component.ts +94 -0
  193. package/src/core/style/base/typography.scss +52 -50
  194. package/src/core/style/base/zIndex.component.ts +25 -0
  195. package/src/core/style/components/file.scss +4 -4
  196. package/src/core/style/components/general.scss +5 -1
@@ -0,0 +1,78 @@
1
+ import { Component, Inject, ViewChild } 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 "@angular/material/button";
6
+ import * as i3 from "ngx-signaturepad";
7
+ import * as i4 from "@pepperi-addons/ngx-lib/dialog";
8
+ import * as i5 from "@ngx-translate/core";
9
+ export class PepSignatureDialogComponent {
10
+ constructor(dialogRef, data) {
11
+ this.dialogRef = dialogRef;
12
+ this.data = data;
13
+ this.signatureURL = '';
14
+ this.acceptSignatureType = 'png';
15
+ this.signaturePadOptions = {
16
+ // passed through to szimek/signature_pad constructor
17
+ minWidth: 2,
18
+ canvasWidth: 500,
19
+ canvasHeight: 300,
20
+ penColor: 'rgb(151, 151, 151)',
21
+ };
22
+ if (data) {
23
+ this.signatureURL = data.value ?? '';
24
+ this.data.showActionBtn = data.showActionBtn ?? true;
25
+ this.data.disabled = data.disabled ?? false;
26
+ }
27
+ }
28
+ ngOnInit() {
29
+ }
30
+ ngAfterViewInit() {
31
+ if (this.signatureURL && this.signatureURL !== '') {
32
+ this.signaturePad.fromDataURL(this.signatureURL);
33
+ this.signaturePad.off();
34
+ }
35
+ }
36
+ drawComplete() {
37
+ // will be notified of szimek/signature_pad's onEnd event
38
+ }
39
+ drawStart() {
40
+ // will be notified of szimek/signature_pad's onBegin event
41
+ }
42
+ clearSignModal() {
43
+ this.signatureURL = '';
44
+ this.signaturePad.clear();
45
+ this.signaturePad.on();
46
+ }
47
+ saveSignModal(event) {
48
+ let value;
49
+ if (!this.signaturePad.isEmpty()) {
50
+ this.signatureURL = this.signaturePad.toDataURL('image/png');
51
+ value = {
52
+ acceptedExtensions: this.acceptSignatureType,
53
+ fileStr: this.signatureURL,
54
+ fileExt: this.acceptSignatureType,
55
+ };
56
+ }
57
+ else {
58
+ value = '';
59
+ }
60
+ this.dialogRef.close(value);
61
+ }
62
+ closeDialog(event) {
63
+ this.dialogRef.close(event);
64
+ }
65
+ }
66
+ PepSignatureDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSignatureDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
67
+ PepSignatureDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepSignatureDialogComponent, selector: "ng-component", viewQueries: [{ propertyName: "signaturePad", first: true, predicate: ["signaturePad"], descendants: true }], ngImport: i0, template: "<pep-dialog [title]=\"data.title || ('SIGNATURE.DIALOG_TITLE' | translate)\" [showFooter]=\"data.showActionBtn\" [showClose]=\"true\" (close)=\"closeDialog($event)\">\n <ng-container pep-dialog-content>\n <signature-pad #signaturePad [options]=\"signaturePadOptions\" (onBeginEvent)=\"drawStart()\"\n (onEndEvent)=\"drawComplete()\">\n </signature-pad>\n </ng-container>\n <div pep-dialog-actions class=\"pep-spacing-element-negative\">\n <button mat-button class=\"pep-spacing-element pep-button md weak\" [disabled]=\"data.disabled\"\n (click)=\"clearSignModal()\">\n {{ 'ACTIONS.CLEAR' | translate }}\n </button>\n <button mat-button class=\"pep-spacing-element pep-button md strong\" [disabled]=\"data.disabled\"\n (click)=\"saveSignModal($event)\">\n {{ 'ACTIONS.DONE' | translate }}\n </button>\n </div>\n</pep-dialog>", styles: [""], dependencies: [{ kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.SignaturePad, selector: "signature-pad", inputs: ["options"], outputs: ["onBeginEvent", "onEndEvent"] }, { kind: "component", type: i4.PepDialogComponent, selector: "pep-dialog", inputs: ["title", "showClose", "showHeader", "showFooter"], outputs: ["close"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSignatureDialogComponent, decorators: [{
69
+ type: Component,
70
+ args: [{ template: "<pep-dialog [title]=\"data.title || ('SIGNATURE.DIALOG_TITLE' | translate)\" [showFooter]=\"data.showActionBtn\" [showClose]=\"true\" (close)=\"closeDialog($event)\">\n <ng-container pep-dialog-content>\n <signature-pad #signaturePad [options]=\"signaturePadOptions\" (onBeginEvent)=\"drawStart()\"\n (onEndEvent)=\"drawComplete()\">\n </signature-pad>\n </ng-container>\n <div pep-dialog-actions class=\"pep-spacing-element-negative\">\n <button mat-button class=\"pep-spacing-element pep-button md weak\" [disabled]=\"data.disabled\"\n (click)=\"clearSignModal()\">\n {{ 'ACTIONS.CLEAR' | translate }}\n </button>\n <button mat-button class=\"pep-spacing-element pep-button md strong\" [disabled]=\"data.disabled\"\n (click)=\"saveSignModal($event)\">\n {{ 'ACTIONS.DONE' | translate }}\n </button>\n </div>\n</pep-dialog>" }]
71
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
72
+ type: Inject,
73
+ args: [MAT_DIALOG_DATA]
74
+ }] }]; }, propDecorators: { signaturePad: [{
75
+ type: ViewChild,
76
+ args: ['signaturePad']
77
+ }] } });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NpZ25hdHVyZS9zaWduYXR1cmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvc2lnbmF0dXJlL3NpZ25hdHVyZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBZXpFLE1BQU0sT0FBTywyQkFBMkI7SUFjcEMsWUFDWSxTQUFvRCxFQUM1QixJQUE2QjtRQURyRCxjQUFTLEdBQVQsU0FBUyxDQUEyQztRQUM1QixTQUFJLEdBQUosSUFBSSxDQUF5QjtRQWZ6RCxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsd0JBQW1CLEdBQVE7WUFDakMscURBQXFEO1lBQ3JELFFBQVEsRUFBRSxDQUFDO1lBQ1gsV0FBVyxFQUFFLEdBQUc7WUFDaEIsWUFBWSxFQUFFLEdBQUc7WUFDakIsUUFBUSxFQUFFLG9CQUFvQjtTQUNqQyxDQUFDO1FBUUUsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1NBQy9DO0lBQ0wsQ0FBQztJQUVELFFBQVE7SUFFUixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IseURBQXlEO0lBQzdELENBQUM7SUFFRCxTQUFTO1FBQ0wsMkRBQTJEO0lBQy9ELENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUNwQixJQUFJLEtBQVUsQ0FBQztRQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0QsS0FBSyxHQUFHO2dCQUNKLGtCQUFrQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQzVDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztTQUNMO2FBQU07WUFDSCxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDOzt3SEFyRVEsMkJBQTJCLDhDQWdCeEIsZUFBZTs0R0FoQmxCLDJCQUEyQixrS0NoQnhDLHU2QkFnQmE7MkZEQUEsMkJBQTJCO2tCQUp2QyxTQUFTOzs7MEJBb0JELE1BQU07MkJBQUMsZUFBZTs0Q0FKQSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFNpZ25hdHVyZVBhZCB9IGZyb20gJ25neC1zaWduYXR1cmVwYWQnO1xuXG5cbmludGVyZmFjZSBJUGVwU2lnbmF0dXJlRGlhbG9nRGF0YSB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHNob3dBY3Rpb25CdG46IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWduYXR1cmUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zaWduYXR1cmUtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBlcFNpZ25hdHVyZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJpdmF0ZSBzaWduYXR1cmVVUkwgPSAnJztcbiAgICBwcml2YXRlIGFjY2VwdFNpZ25hdHVyZVR5cGUgPSAncG5nJztcblxuICAgIHByb3RlY3RlZCBzaWduYXR1cmVQYWRPcHRpb25zOiBhbnkgPSB7XG4gICAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHN6aW1lay9zaWduYXR1cmVfcGFkIGNvbnN0cnVjdG9yXG4gICAgICAgIG1pbldpZHRoOiAyLFxuICAgICAgICBjYW52YXNXaWR0aDogNTAwLFxuICAgICAgICBjYW52YXNIZWlnaHQ6IDMwMCxcbiAgICAgICAgcGVuQ29sb3I6ICdyZ2IoMTUxLCAxNTEsIDE1MSknLFxuICAgIH07XG5cbiAgICBAVmlld0NoaWxkKCdzaWduYXR1cmVQYWQnKSBzaWduYXR1cmVQYWQ6IFNpZ25hdHVyZVBhZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFBlcFNpZ25hdHVyZURpYWxvZ0NvbXBvbmVudD4sXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogSVBlcFNpZ25hdHVyZURpYWxvZ0RhdGFcbiAgICApIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2lnbmF0dXJlVVJMID0gZGF0YS52YWx1ZSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zaG93QWN0aW9uQnRuID0gZGF0YS5zaG93QWN0aW9uQnRuID8/IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRhdGEuZGlzYWJsZWQgPSBkYXRhLmRpc2FibGVkID8/IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIFxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmF0dXJlVVJMICYmIHRoaXMuc2lnbmF0dXJlVVJMICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVQYWQuZnJvbURhdGFVUkwodGhpcy5zaWduYXR1cmVVUkwpO1xuICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3Q29tcGxldGUoKTogdm9pZCB7XG4gICAgICAgIC8vIHdpbGwgYmUgbm90aWZpZWQgb2Ygc3ppbWVrL3NpZ25hdHVyZV9wYWQncyBvbkVuZCBldmVudFxuICAgIH1cblxuICAgIGRyYXdTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgLy8gd2lsbCBiZSBub3RpZmllZCBvZiBzemltZWsvc2lnbmF0dXJlX3BhZCdzIG9uQmVnaW4gZXZlbnRcbiAgICB9XG5cbiAgICBjbGVhclNpZ25Nb2RhbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaWduYXR1cmVVUkwgPSAnJztcbiAgICAgICAgdGhpcy5zaWduYXR1cmVQYWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zaWduYXR1cmVQYWQub24oKTtcbiAgICB9XG5cbiAgICBzYXZlU2lnbk1vZGFsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNpZ25hdHVyZVBhZC5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2lnbmF0dXJlVVJMID0gdGhpcy5zaWduYXR1cmVQYWQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGFjY2VwdGVkRXh0ZW5zaW9uczogdGhpcy5hY2NlcHRTaWduYXR1cmVUeXBlLFxuICAgICAgICAgICAgICAgIGZpbGVTdHI6IHRoaXMuc2lnbmF0dXJlVVJMLFxuICAgICAgICAgICAgICAgIGZpbGVFeHQ6IHRoaXMuYWNjZXB0U2lnbmF0dXJlVHlwZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodmFsdWUpO1xuICAgIH1cblxuICAgIGNsb3NlRGlhbG9nKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGV2ZW50KTtcbiAgICB9XG59XG4iLCI8cGVwLWRpYWxvZyBbdGl0bGVdPVwiZGF0YS50aXRsZSB8fCAoJ1NJR05BVFVSRS5ESUFMT0dfVElUTEUnIHwgdHJhbnNsYXRlKVwiIFtzaG93Rm9vdGVyXT1cImRhdGEuc2hvd0FjdGlvbkJ0blwiIFtzaG93Q2xvc2VdPVwidHJ1ZVwiIChjbG9zZSk9XCJjbG9zZURpYWxvZygkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRhaW5lciBwZXAtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICAgIDxzaWduYXR1cmUtcGFkICNzaWduYXR1cmVQYWQgW29wdGlvbnNdPVwic2lnbmF0dXJlUGFkT3B0aW9uc1wiIChvbkJlZ2luRXZlbnQpPVwiZHJhd1N0YXJ0KClcIlxuICAgICAgICAgICAgKG9uRW5kRXZlbnQpPVwiZHJhd0NvbXBsZXRlKClcIj5cbiAgICAgICAgPC9zaWduYXR1cmUtcGFkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgcGVwLWRpYWxvZy1hY3Rpb25zIGNsYXNzPVwicGVwLXNwYWNpbmctZWxlbWVudC1uZWdhdGl2ZVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJwZXAtc3BhY2luZy1lbGVtZW50IHBlcC1idXR0b24gbWQgd2Vha1wiIFtkaXNhYmxlZF09XCJkYXRhLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNpZ25Nb2RhbCgpXCI+XG4gICAgICAgICAgICB7eyAnQUNUSU9OUy5DTEVBUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInBlcC1zcGFjaW5nLWVsZW1lbnQgcGVwLWJ1dHRvbiBtZCBzdHJvbmdcIiBbZGlzYWJsZWRdPVwiZGF0YS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZVNpZ25Nb2RhbCgkZXZlbnQpXCI+XG4gICAgICAgICAgICB7eyAnQUNUSU9OUy5ET05FJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvcGVwLWRpYWxvZz4iXX0=