@pobuca/email-builder 1.0.0

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 (150) hide show
  1. package/README.md +1 -0
  2. package/assets/icons/dribbble.png +0 -0
  3. package/assets/icons/facebook.png +0 -0
  4. package/assets/icons/github.png +0 -0
  5. package/assets/icons/instagram.png +0 -0
  6. package/assets/icons/linkedin.png +0 -0
  7. package/assets/icons/medium.png +0 -0
  8. package/assets/icons/pinterest.png +0 -0
  9. package/assets/icons/snapchat.png +0 -0
  10. package/assets/icons/soundcloud.png +0 -0
  11. package/assets/icons/tumblr.png +0 -0
  12. package/assets/icons/twitter.png +0 -0
  13. package/assets/icons/vimeo.png +0 -0
  14. package/assets/icons/web.png +0 -0
  15. package/assets/icons/xing.png +0 -0
  16. package/assets/icons/youtube.png +0 -0
  17. package/bundles/pobuca-email-builder.umd.js +4664 -0
  18. package/bundles/pobuca-email-builder.umd.js.map +1 -0
  19. package/bundles/pobuca-email-builder.umd.min.js +2 -0
  20. package/bundles/pobuca-email-builder.umd.min.js.map +1 -0
  21. package/esm2015/lib/classes/DefaultEmail.js +53 -0
  22. package/esm2015/lib/classes/Elements.js +229 -0
  23. package/esm2015/lib/classes/Structure.js +89 -0
  24. package/esm2015/lib/components/block/block.component.js +89 -0
  25. package/esm2015/lib/components/block-settings/block-settings.component.js +53 -0
  26. package/esm2015/lib/components/builder-container/builder-container.component.js +114 -0
  27. package/esm2015/lib/components/dialog.component.js +30 -0
  28. package/esm2015/lib/components/general-settings/general-settings.component.js +25 -0
  29. package/esm2015/lib/components/import-dialog/import-dialog.component.js +62 -0
  30. package/esm2015/lib/components/preview.component.js +89 -0
  31. package/esm2015/lib/components/structure/structure.component.js +163 -0
  32. package/esm2015/lib/components/structure-settings/structure-settings.component.js +31 -0
  33. package/esm2015/lib/components/template-list-dialog/template-list-dialog.component.js +45 -0
  34. package/esm2015/lib/directives/dynamic-component.directive.js +46 -0
  35. package/esm2015/lib/elements/abstract-block.js +23 -0
  36. package/esm2015/lib/elements/button/button.component.js +29 -0
  37. package/esm2015/lib/elements/divider/divider.component.js +30 -0
  38. package/esm2015/lib/elements/image/image.component.js +54 -0
  39. package/esm2015/lib/elements/social/social.component.js +42 -0
  40. package/esm2015/lib/elements/spacer/spacer.component.js +30 -0
  41. package/esm2015/lib/elements/text-element/text-element.component.js +80 -0
  42. package/esm2015/lib/groups/align.js +79 -0
  43. package/esm2015/lib/groups/back-repeat.js +55 -0
  44. package/esm2015/lib/groups/border.js +102 -0
  45. package/esm2015/lib/groups/color.js +139 -0
  46. package/esm2015/lib/groups/direction.js +63 -0
  47. package/esm2015/lib/groups/font-styles.js +112 -0
  48. package/esm2015/lib/groups/gaps.js +45 -0
  49. package/esm2015/lib/groups/line-height.js +68 -0
  50. package/esm2015/lib/groups/link.js +67 -0
  51. package/esm2015/lib/groups/margin.js +45 -0
  52. package/esm2015/lib/groups/padding.js +53 -0
  53. package/esm2015/lib/groups/upload-image.js +112 -0
  54. package/esm2015/lib/groups/width-height.js +94 -0
  55. package/esm2015/lib/interceptors/pb-interceptor.interceptor.js +51 -0
  56. package/esm2015/lib/interfaces/interfaces.js +13 -0
  57. package/esm2015/lib/pb-email-builder.component.js +246 -0
  58. package/esm2015/lib/pb-email-builder.module.js +291 -0
  59. package/esm2015/lib/pb-email-builder.service.js +134 -0
  60. package/esm2015/lib/pipes/slugify.pipe.js +39 -0
  61. package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js +165 -0
  62. package/esm2015/lib/services/internals/user-interfaces/user-interface.service.js +122 -0
  63. package/esm2015/lib/services/pb-storage/FreeUsersStorage.class.js +11 -0
  64. package/esm2015/lib/services/pb-storage/index.js +7 -0
  65. package/esm2015/lib/services/pb-storage/pb-storage.service.js +79 -0
  66. package/esm2015/lib/services/user-image-uploader-service/free-users-image-uploader.service.js +26 -0
  67. package/esm2015/lib/services/user-image-uploader-service/index.js +8 -0
  68. package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js +30 -0
  69. package/esm2015/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.js +112 -0
  70. package/esm2015/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.js +91 -0
  71. package/esm2015/lib/services/user-image-uploader-service/user-image-uploader.service.js +26 -0
  72. package/esm2015/lib/services/user-middleware-service/FreeUsersMiddleware.js +31 -0
  73. package/esm2015/lib/services/user-middleware-service/PaidUsersMiddleware.js +12 -0
  74. package/esm2015/lib/services/user-middleware-service/index.js +8 -0
  75. package/esm2015/lib/services/user-middleware-service/pb-middlewares.service.js +195 -0
  76. package/esm2015/lib/services/user-rest-api-service/free-users-rest-api.service.js +16 -0
  77. package/esm2015/lib/services/user-rest-api-service/index.js +7 -0
  78. package/esm2015/lib/services/user-rest-api-service/user-rest-api.service.js +116 -0
  79. package/esm2015/lib/tokens/private-tokens.js +17 -0
  80. package/esm2015/lib/tokens/tokens.js +159 -0
  81. package/esm2015/lib/utils.js +147 -0
  82. package/esm2015/pobuca-email-builder.js +43 -0
  83. package/esm2015/public_api.js +26 -0
  84. package/fesm2015/pobuca-email-builder.js +4335 -0
  85. package/fesm2015/pobuca-email-builder.js.map +1 -0
  86. package/lib/classes/DefaultEmail.d.ts +9 -0
  87. package/lib/classes/Elements.d.ts +62 -0
  88. package/lib/classes/Structure.d.ts +11 -0
  89. package/lib/components/block/block.component.d.ts +25 -0
  90. package/lib/components/block-settings/block-settings.component.d.ts +18 -0
  91. package/lib/components/builder-container/builder-container.component.d.ts +36 -0
  92. package/lib/components/dialog.component.d.ts +10 -0
  93. package/lib/components/general-settings/general-settings.component.d.ts +6 -0
  94. package/lib/components/import-dialog/import-dialog.component.d.ts +16 -0
  95. package/lib/components/preview.component.d.ts +18 -0
  96. package/lib/components/structure/structure.component.d.ts +43 -0
  97. package/lib/components/structure-settings/structure-settings.component.d.ts +9 -0
  98. package/lib/components/template-list-dialog/template-list-dialog.component.d.ts +15 -0
  99. package/lib/directives/dynamic-component.directive.d.ts +13 -0
  100. package/lib/elements/abstract-block.d.ts +8 -0
  101. package/lib/elements/button/button.component.d.ts +18 -0
  102. package/lib/elements/divider/divider.component.d.ts +10 -0
  103. package/lib/elements/image/image.component.d.ts +19 -0
  104. package/lib/elements/social/social.component.d.ts +21 -0
  105. package/lib/elements/spacer/spacer.component.d.ts +5 -0
  106. package/lib/elements/text-element/text-element.component.d.ts +52 -0
  107. package/lib/groups/align.d.ts +17 -0
  108. package/lib/groups/back-repeat.d.ts +8 -0
  109. package/lib/groups/border.d.ts +13 -0
  110. package/lib/groups/color.d.ts +26 -0
  111. package/lib/groups/direction.d.ts +13 -0
  112. package/lib/groups/font-styles.d.ts +17 -0
  113. package/lib/groups/gaps.d.ts +7 -0
  114. package/lib/groups/line-height.d.ts +12 -0
  115. package/lib/groups/link.d.ts +11 -0
  116. package/lib/groups/margin.d.ts +8 -0
  117. package/lib/groups/padding.d.ts +8 -0
  118. package/lib/groups/upload-image.d.ts +19 -0
  119. package/lib/groups/width-height.d.ts +19 -0
  120. package/lib/interceptors/pb-interceptor.interceptor.d.ts +10 -0
  121. package/lib/interfaces/interfaces.d.ts +422 -0
  122. package/lib/pb-email-builder.component.d.ts +67 -0
  123. package/lib/pb-email-builder.module.d.ts +51 -0
  124. package/lib/pb-email-builder.service.d.ts +83 -0
  125. package/lib/pipes/slugify.pipe.d.ts +9 -0
  126. package/lib/services/internals/pb-email-object-store/pb-email-object-store.service.d.ts +50 -0
  127. package/lib/services/internals/user-interfaces/user-interface.service.d.ts +46 -0
  128. package/lib/services/pb-storage/FreeUsersStorage.class.d.ts +6 -0
  129. package/lib/services/pb-storage/index.d.ts +2 -0
  130. package/lib/services/pb-storage/pb-storage.service.d.ts +54 -0
  131. package/lib/services/user-image-uploader-service/free-users-image-uploader.service.d.ts +12 -0
  132. package/lib/services/user-image-uploader-service/index.d.ts +3 -0
  133. package/lib/services/user-image-uploader-service/paid-users-image-uploader.service.d.ts +14 -0
  134. package/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.d.ts +28 -0
  135. package/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.d.ts +27 -0
  136. package/lib/services/user-image-uploader-service/user-image-uploader.service.d.ts +26 -0
  137. package/lib/services/user-middleware-service/FreeUsersMiddleware.d.ts +15 -0
  138. package/lib/services/user-middleware-service/PaidUsersMiddleware.d.ts +7 -0
  139. package/lib/services/user-middleware-service/index.d.ts +3 -0
  140. package/lib/services/user-middleware-service/pb-middlewares.service.d.ts +190 -0
  141. package/lib/services/user-rest-api-service/free-users-rest-api.service.d.ts +10 -0
  142. package/lib/services/user-rest-api-service/index.d.ts +2 -0
  143. package/lib/services/user-rest-api-service/user-rest-api.service.d.ts +82 -0
  144. package/lib/tokens/private-tokens.d.ts +5 -0
  145. package/lib/tokens/tokens.d.ts +70 -0
  146. package/lib/utils.d.ts +88 -0
  147. package/package.json +37 -0
  148. package/pobuca-email-builder.d.ts +42 -0
  149. package/pobuca-email-builder.metadata.json +1 -0
  150. package/public_api.d.ts +16 -0
@@ -0,0 +1,165 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Inject, Injectable } from '@angular/core';
6
+ import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
7
+ import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
8
+ import { exhaustMap, map, pluck, switchMap, withLatestFrom } from 'rxjs/operators';
9
+ // import { getDiff } from 'recursive-diff';
10
+ import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
11
+ import { PBEmail } from '../../../classes/DefaultEmail';
12
+ import { cloneDeep, createPadding, createWidthHeight, deferOf, isEqual } from '../../../utils';
13
+ import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
14
+ import { PbStorageService } from '../../pb-storage/pb-storage.service';
15
+ import { PB_CONFIG, PB_GOOGLE_FONTS } from '../../../tokens/tokens';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "../../user-rest-api-service/user-rest-api.service";
18
+ import * as i2 from "../../pb-storage/pb-storage.service";
19
+ import * as i3 from "../../user-middleware-service/pb-middlewares.service";
20
+ import * as i4 from "../../../tokens/tokens";
21
+ // https://www.npmjs.com/package/recursive-diff
22
+ /**
23
+ * @internal
24
+ */
25
+ export class PbEmailObjectStoreService {
26
+ constructor(userRestApi, pbStorage, userMiddleware, googleFonts, config) {
27
+ this.userRestApi = userRestApi;
28
+ this.pbStorage = pbStorage;
29
+ this.userMiddleware = userMiddleware;
30
+ this.googleFonts = googleFonts;
31
+ this.config = config;
32
+ this.Email = new PBEmail();
33
+ this.clonedEmail = cloneDeep(this.Email);
34
+ this._Email$ = new BehaviorSubject(this.Email);
35
+ this.emailAsObservable$ = this._Email$.asObservable();
36
+ this.emailStructuresAsObservable$ = this.emailAsObservable$.pipe(pluck('structures'));
37
+ this.generalEmailOptionsAsObservable$ = this.emailAsObservable$.pipe(pluck('general'));
38
+ this.currentEmailHasChanges$ = this.emailAsObservable$.pipe(map(current => !isEqual(current, this.clonedEmail))
39
+ // shareReplay(),
40
+ // tap((isDirty) => console.log('IsDirty', isDirty)),
41
+ );
42
+ this.builderContainerStyles$ = this.generalEmailOptionsAsObservable$.pipe(map(({ background, padding, direction }) => (Object.assign({ direction, backgroundRepeat: background.repeat, backgroundColor: background.color, backgroundSize: createWidthHeight(background.size), backgroundPosition: 'top center' }, createPadding(padding)))));
43
+ // public readonly emailBodyWidth$ = this.generalEmailOptionsAsObservable$.pipe(map(({ width }) => createWidthHeight(width)));
44
+ this._Mjml$ = new BehaviorSubject('');
45
+ this.mjmlAsObservable$ = this._Mjml$.asObservable();
46
+ this._Template$ = new BehaviorSubject('');
47
+ this.templateAsObservable$ = this._Template$.asObservable();
48
+ this._onTemplateCreated$ = new Subject();
49
+ this.onTemplateCreated$ = this._onTemplateCreated$.pipe(withLatestFrom(this._Email$, this._Template$, this._Mjml$), map(([_, ...rest]) => rest));
50
+ }
51
+ createHTMLTemplate$() {
52
+ return this.emailAsObservable$.pipe(switchMap(email => {
53
+ if (!email.structures.length) {
54
+ throw new Error('Please add some structures and blocks to perform this action.');
55
+ }
56
+ return deferOf(email);
57
+ }), withLatestFrom(combineLatest([this.currentEmailHasChanges$, this.templateAsObservable$])), exhaustMap(([email, [hasChanges, currentHtml]]) => {
58
+ if (hasChanges || !currentHtml) {
59
+ return this.userMiddleware.createHTMLTemplate(email).pipe(exhaustMap(em => this.userRestApi.createHTMLTemplate$(Object.assign(Object.assign({}, em), { googleFonts: this.googleFonts }), this.config.apiPath)), map(res => {
60
+ if (res.errors.length) {
61
+ const error = res.errors.map(({ message, tagName }) => `${tagName} > ${message}`).join('\n');
62
+ throw new Error(error);
63
+ }
64
+ this._Mjml$.next(res.mjml);
65
+ this._Template$.next(res.html);
66
+ this.clonedEmail = cloneDeep(this.Email);
67
+ this._onTemplateCreated$.next();
68
+ return res;
69
+ }));
70
+ }
71
+ return combineLatest([this._Mjml$, this._Template$]).pipe(map(([mjml, html]) => ({ html, mjml, errors: [] })));
72
+ }));
73
+ }
74
+ markForCheck() {
75
+ this._Email$.next(this.Email);
76
+ if (this.Email.structures.length) {
77
+ this.pbStorage.addTemplateToLatestUsed(cloneDeep({
78
+ templateData: this.Email,
79
+ title: 'last-edited',
80
+ thumbPath: 'https://via.placeholder.com/200x300?text=LAST+EDITED'
81
+ }));
82
+ }
83
+ // console.log(getDiff(this.clonedEmail, this.Email));
84
+ }
85
+ setEmail(newEmail) {
86
+ if (!newEmail.structures || !newEmail.general) {
87
+ throw new Error('Injected object is not a valid PBEmail');
88
+ }
89
+ this.Email = newEmail;
90
+ this.reset();
91
+ }
92
+ addStructure({ currentIndex = 0, item }) {
93
+ const { structures = [] } = this.Email;
94
+ let isModule = true;
95
+ if (!item.data.elements.length) {
96
+ isModule = false;
97
+ item.data.elements = Array.from({ length: item.data.columns }, () => []);
98
+ }
99
+ const newStructure = Object.assign(Object.assign({ id: Date.now() }, cloneDeep(item.data)), { isModule });
100
+ structures.splice(currentIndex, 0, newStructure);
101
+ this.markForCheck();
102
+ return newStructure;
103
+ }
104
+ changeStructureOrder({ previousIndex = 0, currentIndex = 0 }) {
105
+ moveItemInArray(this.Email.structures, previousIndex, currentIndex);
106
+ this.markForCheck();
107
+ }
108
+ duplicateStructure(index) {
109
+ const { structures = [] } = this.Email;
110
+ const newStructure = cloneDeep(Object.assign(Object.assign({}, structures[index]), { id: Date.now() }));
111
+ structures.splice(index, 0, newStructure);
112
+ this.markForCheck();
113
+ return newStructure;
114
+ }
115
+ removeStructure(index) {
116
+ const { structures = [] } = this.Email;
117
+ structures.splice(index, 1);
118
+ this.markForCheck();
119
+ }
120
+ addBlock({ previousIndex = 0, currentIndex = 0, item, previousContainer: { id, data } }, column) {
121
+ // console.log(id);
122
+ // console.log(item);
123
+ if (id === 'block-elements') {
124
+ column.splice(currentIndex, 0, cloneDeep(item.data));
125
+ }
126
+ else {
127
+ transferArrayItem(data, column, previousIndex, currentIndex);
128
+ }
129
+ this.markForCheck();
130
+ }
131
+ changeBlockOrder({ previousIndex = 0, currentIndex = 0 }, column) {
132
+ moveItemInArray(column, previousIndex, currentIndex);
133
+ this.markForCheck();
134
+ }
135
+ duplicateBlock(key, column, block) {
136
+ const newBlock = cloneDeep(block);
137
+ column.splice(key, 0, newBlock);
138
+ this.markForCheck();
139
+ return newBlock;
140
+ }
141
+ removeBlock(key, column) {
142
+ column.splice(key, 1);
143
+ this.markForCheck();
144
+ }
145
+ reset() {
146
+ this._Mjml$.next(null);
147
+ this._Template$.next(null);
148
+ this.clonedEmail = cloneDeep(this.Email);
149
+ this.markForCheck();
150
+ }
151
+ }
152
+ PbEmailObjectStoreService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PbEmailObjectStoreService_Factory() { return new PbEmailObjectStoreService(i0.ɵɵinject(i1.PbUserRestApiService), i0.ɵɵinject(i2.PbStorageService), i0.ɵɵinject(i3.PbUserMiddlewaresService), i0.ɵɵinject(i4.PB_GOOGLE_FONTS), i0.ɵɵinject(i4.PB_CONFIG)); }, token: PbEmailObjectStoreService, providedIn: "root" });
153
+ PbEmailObjectStoreService.decorators = [
154
+ { type: Injectable, args: [{
155
+ providedIn: 'root'
156
+ },] }
157
+ ];
158
+ PbEmailObjectStoreService.ctorParameters = () => [
159
+ { type: PbUserRestApiService },
160
+ { type: PbStorageService },
161
+ { type: PbUserMiddlewaresService },
162
+ { type: Array, decorators: [{ type: Inject, args: [PB_GOOGLE_FONTS,] }] },
163
+ { type: undefined, decorators: [{ type: Inject, args: [PB_CONFIG,] }] }
164
+ ];
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItZW1haWwtb2JqZWN0LXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsNENBQTRDO0FBQzVDLE9BQU8sRUFBc0Msd0JBQXdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUdwSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUVwRSwrQ0FBK0M7QUFFL0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBaUNwQyxZQUNVLFdBQWlDLEVBQ2pDLFNBQTJCLEVBQzNCLGNBQXdDLEVBQ2YsV0FBcUIsRUFDMUIsTUFBb0I7UUFKeEMsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFyQzNDLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsU0FBUyxDQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELHVCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakQsaUNBQTRCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNqRixxQ0FBZ0MsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLDRCQUF1QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQzdELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsaUJBQWlCO1FBQ2pCLHFEQUFxRDtTQUN0RCxDQUFDO1FBQ08sNEJBQXVCLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FDM0UsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxpQkFDMUMsU0FBUyxFQUNULGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQ25DLGVBQWUsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUNqQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUNsRCxrQkFBa0IsRUFBRSxZQUFZLElBQzdCLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFDekIsQ0FBQyxDQUNKLENBQUM7UUFDRiw4SEFBOEg7UUFDdEgsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLHNCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkQsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLDBCQUFxQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0Qsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUNqQyx1QkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNoRSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDMUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQzVCLENBQUM7SUFRQyxDQUFDO0lBRUosbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDakMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO2FBQ2xGO1lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLEVBQ0YsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQ3pGLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoRCxJQUFJLFVBQVUsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDdkQsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsaUNBQU0sRUFBRSxLQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxLQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDckgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNSLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7d0JBQ3JCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3RixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN4QjtvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hDLE9BQU8sR0FBRyxDQUFDO2dCQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtZQUNELE9BQU8sYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUEwQixDQUFBLENBQUMsQ0FDM0UsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUNwQyxTQUFTLENBQWdCO2dCQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ3hCLEtBQUssRUFBRSxhQUFhO2dCQUNwQixTQUFTLEVBQUUsc0RBQXNEO2FBQ2xFLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxzREFBc0Q7SUFDeEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFpQjtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFzQjtRQUN6RCxNQUFNLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUU7UUFFRCxNQUFNLFlBQVksaUNBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSyxTQUFTLENBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFFLFFBQVEsR0FBRSxDQUFDO1FBQ3ZGLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLEVBQUUsYUFBYSxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxFQUFnQztRQUN4RixlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYTtRQUM5QixNQUFNLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkMsTUFBTSxZQUFZLEdBQUcsU0FBUyxpQ0FBa0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUcsQ0FBQztRQUNyRixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixNQUFNLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBRSxhQUFhLEdBQUcsQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFrQixFQUFFLE1BQWlCO1FBQ3hILG1CQUFtQjtRQUNuQixxQkFBcUI7UUFFckIsSUFBSSxFQUFFLEtBQUssZ0JBQWdCLEVBQUU7WUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDOUQ7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQUUsYUFBYSxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxFQUEwQixFQUFFLE1BQWlCO1FBQ2pHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQVcsRUFBRSxNQUFpQixFQUFFLEtBQWM7UUFDM0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBaUI7UUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7O1lBeEtGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBWFEsb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQU5vQix3QkFBd0I7d0NBc0RoRSxNQUFNLFNBQUMsZUFBZTs0Q0FDdEIsTUFBTSxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBtYXAsIHBsdWNrLCBzd2l0Y2hNYXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuLy8gaW1wb3J0IHsgZ2V0RGlmZiB9IGZyb20gJ3JlY3Vyc2l2ZS1kaWZmJztcbmltcG9ydCB7IElBZGRCbG9ja0V2ZW50LCBJQWRkU3RydWN0dXJlRXZlbnQsIFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvclJvb3RDb25mLCBJTWptbFNlcnZlclJlc3BvbnNlLCBJU3RydWN0dXJlLCBJVXNlclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRCbG9ja3MgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL0VsZW1lbnRzJztcbmltcG9ydCB7IFBCRW1haWwgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL0RlZmF1bHRFbWFpbCc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGNyZWF0ZVBhZGRpbmcsIGNyZWF0ZVdpZHRoSGVpZ2h0LCBkZWZlck9mLCBpc0VxdWFsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFBiU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9wYi1zdG9yYWdlL3BiLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQQl9DT05GSUcsIFBCX0dPT0dMRV9GT05UUyB9IGZyb20gJy4uLy4uLy4uL3Rva2Vucy90b2tlbnMnO1xuXG4vLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9yZWN1cnNpdmUtZGlmZlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIHtcbiAgcHVibGljIEVtYWlsID0gbmV3IFBCRW1haWwoKTtcbiAgcHJpdmF0ZSBjbG9uZWRFbWFpbCA9IGNsb25lRGVlcDxQQkVtYWlsPih0aGlzLkVtYWlsKTtcbiAgcHJpdmF0ZSBfRW1haWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQQkVtYWlsPih0aGlzLkVtYWlsKTtcbiAgcmVhZG9ubHkgZW1haWxBc09ic2VydmFibGUkID0gdGhpcy5fRW1haWwkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBlbWFpbFN0cnVjdHVyZXNBc09ic2VydmFibGUkID0gdGhpcy5lbWFpbEFzT2JzZXJ2YWJsZSQucGlwZShwbHVjaygnc3RydWN0dXJlcycpKTtcbiAgcmVhZG9ubHkgZ2VuZXJhbEVtYWlsT3B0aW9uc0FzT2JzZXJ2YWJsZSQgPSB0aGlzLmVtYWlsQXNPYnNlcnZhYmxlJC5waXBlKHBsdWNrKCdnZW5lcmFsJykpO1xuICByZWFkb25seSBjdXJyZW50RW1haWxIYXNDaGFuZ2VzJCA9IHRoaXMuZW1haWxBc09ic2VydmFibGUkLnBpcGUoXG4gICAgbWFwKGN1cnJlbnQgPT4gIWlzRXF1YWwoY3VycmVudCwgdGhpcy5jbG9uZWRFbWFpbCkpXG4gICAgLy8gc2hhcmVSZXBsYXkoKSxcbiAgICAvLyB0YXAoKGlzRGlydHkpID0+IGNvbnNvbGUubG9nKCdJc0RpcnR5JywgaXNEaXJ0eSkpLFxuICApO1xuICByZWFkb25seSBidWlsZGVyQ29udGFpbmVyU3R5bGVzJCA9IHRoaXMuZ2VuZXJhbEVtYWlsT3B0aW9uc0FzT2JzZXJ2YWJsZSQucGlwZShcbiAgICBtYXAoKHsgYmFja2dyb3VuZCwgcGFkZGluZywgZGlyZWN0aW9uIH0pID0+ICh7XG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBiYWNrZ3JvdW5kUmVwZWF0OiBiYWNrZ3JvdW5kLnJlcGVhdCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZC5jb2xvcixcbiAgICAgIGJhY2tncm91bmRTaXplOiBjcmVhdGVXaWR0aEhlaWdodChiYWNrZ3JvdW5kLnNpemUpLFxuICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAndG9wIGNlbnRlcicsXG4gICAgICAuLi5jcmVhdGVQYWRkaW5nKHBhZGRpbmcpXG4gICAgfSkpXG4gICk7XG4gIC8vIHB1YmxpYyByZWFkb25seSBlbWFpbEJvZHlXaWR0aCQgPSB0aGlzLmdlbmVyYWxFbWFpbE9wdGlvbnNBc09ic2VydmFibGUkLnBpcGUobWFwKCh7IHdpZHRoIH0pID0+IGNyZWF0ZVdpZHRoSGVpZ2h0KHdpZHRoKSkpO1xuICBwcml2YXRlIF9Nam1sJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHB1YmxpYyByZWFkb25seSBtam1sQXNPYnNlcnZhYmxlJCA9IHRoaXMuX01qbWwkLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIF9UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVBc09ic2VydmFibGUkID0gdGhpcy5fVGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIF9vblRlbXBsYXRlQ3JlYXRlZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvblRlbXBsYXRlQ3JlYXRlZCQgPSB0aGlzLl9vblRlbXBsYXRlQ3JlYXRlZCQucGlwZShcbiAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLl9FbWFpbCQsIHRoaXMuX1RlbXBsYXRlJCwgdGhpcy5fTWptbCQpLFxuICAgIG1hcCgoW18sIC4uLnJlc3RdKSA9PiByZXN0KVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXNlclJlc3RBcGk6IFBiVXNlclJlc3RBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGJTdG9yYWdlOiBQYlN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlck1pZGRsZXdhcmU6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcbiAgICBASW5qZWN0KFBCX0dPT0dMRV9GT05UUykgcHJpdmF0ZSBnb29nbGVGb250czogc3RyaW5nW10sXG4gICAgQEluamVjdChQQl9DT05GSUcpIHJlYWRvbmx5IGNvbmZpZzogSUZvclJvb3RDb25mXG4gICkge31cblxuICBjcmVhdGVIVE1MVGVtcGxhdGUkKCkge1xuICAgIHJldHVybiB0aGlzLmVtYWlsQXNPYnNlcnZhYmxlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGVtYWlsID0+IHtcbiAgICAgICAgaWYgKCFlbWFpbC5zdHJ1Y3R1cmVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGFkZCBzb21lIHN0cnVjdHVyZXMgYW5kIGJsb2NrcyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZlck9mKGVtYWlsKTtcbiAgICAgIH0pLFxuICAgICAgd2l0aExhdGVzdEZyb20oY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50RW1haWxIYXNDaGFuZ2VzJCwgdGhpcy50ZW1wbGF0ZUFzT2JzZXJ2YWJsZSRdKSksXG4gICAgICBleGhhdXN0TWFwKChbZW1haWwsIFtoYXNDaGFuZ2VzLCBjdXJyZW50SHRtbF1dKSA9PiB7XG4gICAgICAgIGlmIChoYXNDaGFuZ2VzIHx8ICFjdXJyZW50SHRtbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJNaWRkbGV3YXJlLmNyZWF0ZUhUTUxUZW1wbGF0ZShlbWFpbCkucGlwZShcbiAgICAgICAgICAgIGV4aGF1c3RNYXAoZW0gPT4gdGhpcy51c2VyUmVzdEFwaS5jcmVhdGVIVE1MVGVtcGxhdGUkKHsgLi4uZW0sIGdvb2dsZUZvbnRzOiB0aGlzLmdvb2dsZUZvbnRzIH0sIHRoaXMuY29uZmlnLmFwaVBhdGgpKSxcbiAgICAgICAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlcy5lcnJvcnMubWFwKCh7IG1lc3NhZ2UsIHRhZ05hbWUgfSkgPT4gYCR7dGFnTmFtZX0gPiAke21lc3NhZ2V9YCkuam9pbignXFxuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl9Nam1sJC5uZXh0KHJlcy5tam1sKTtcbiAgICAgICAgICAgICAgdGhpcy5fVGVtcGxhdGUkLm5leHQocmVzLmh0bWwpO1xuICAgICAgICAgICAgICB0aGlzLmNsb25lZEVtYWlsID0gY2xvbmVEZWVwKHRoaXMuRW1haWwpO1xuICAgICAgICAgICAgICB0aGlzLl9vblRlbXBsYXRlQ3JlYXRlZCQubmV4dCgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLl9Nam1sJCwgdGhpcy5fVGVtcGxhdGUkXSkucGlwZShcbiAgICAgICAgICBtYXAoKFttam1sLCBodG1sXSkgPT4gKHsgaHRtbCwgbWptbCwgZXJyb3JzOiBbXSB9IGFzIElNam1sU2VydmVyUmVzcG9uc2UpKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuX0VtYWlsJC5uZXh0KHRoaXMuRW1haWwpO1xuXG4gICAgaWYgKHRoaXMuRW1haWwuc3RydWN0dXJlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGJTdG9yYWdlLmFkZFRlbXBsYXRlVG9MYXRlc3RVc2VkKFxuICAgICAgICBjbG9uZURlZXA8SVVzZXJUZW1wbGF0ZT4oe1xuICAgICAgICAgIHRlbXBsYXRlRGF0YTogdGhpcy5FbWFpbCxcbiAgICAgICAgICB0aXRsZTogJ2xhc3QtZWRpdGVkJyxcbiAgICAgICAgICB0aHVtYlBhdGg6ICdodHRwczovL3ZpYS5wbGFjZWhvbGRlci5jb20vMjAweDMwMD90ZXh0PUxBU1QrRURJVEVEJ1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZ2V0RGlmZih0aGlzLmNsb25lZEVtYWlsLCB0aGlzLkVtYWlsKSk7XG4gIH1cblxuICBzZXRFbWFpbChuZXdFbWFpbDogUEJFbWFpbCkge1xuICAgIGlmICghbmV3RW1haWwuc3RydWN0dXJlcyB8fCAhbmV3RW1haWwuZ2VuZXJhbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmplY3RlZCBvYmplY3QgaXMgbm90IGEgdmFsaWQgUEJFbWFpbCcpO1xuICAgIH1cbiAgICB0aGlzLkVtYWlsID0gbmV3RW1haWw7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgYWRkU3RydWN0dXJlKHsgY3VycmVudEluZGV4ID0gMCwgaXRlbSB9OiBJQWRkU3RydWN0dXJlRXZlbnQpOiBJU3RydWN0dXJlIHtcbiAgICBjb25zdCB7IHN0cnVjdHVyZXMgPSBbXSB9ID0gdGhpcy5FbWFpbDtcbiAgICBsZXQgaXNNb2R1bGUgPSB0cnVlO1xuXG4gICAgaWYgKCFpdGVtLmRhdGEuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBpc01vZHVsZSA9IGZhbHNlO1xuICAgICAgaXRlbS5kYXRhLmVsZW1lbnRzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbS5kYXRhLmNvbHVtbnMgfSwgKCkgPT4gW10pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1N0cnVjdHVyZSA9IHsgaWQ6IERhdGUubm93KCksIC4uLmNsb25lRGVlcDxJU3RydWN0dXJlPihpdGVtLmRhdGEpLCBpc01vZHVsZSB9O1xuICAgIHN0cnVjdHVyZXMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgbmV3U3RydWN0dXJlKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7XG4gIH1cblxuICBjaGFuZ2VTdHJ1Y3R1cmVPcmRlcih7IHByZXZpb3VzSW5kZXggPSAwLCBjdXJyZW50SW5kZXggPSAwIH06IENka0RyYWdEcm9wPFNldDxJU3RydWN0dXJlPj4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5FbWFpbC5zdHJ1Y3R1cmVzLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBkdXBsaWNhdGVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlcik6IElTdHJ1Y3R1cmUge1xuICAgIGNvbnN0IHsgc3RydWN0dXJlcyA9IFtdIH0gPSB0aGlzLkVtYWlsO1xuICAgIGNvbnN0IG5ld1N0cnVjdHVyZSA9IGNsb25lRGVlcDxJU3RydWN0dXJlPih7IC4uLnN0cnVjdHVyZXNbaW5kZXhdLCBpZDogRGF0ZS5ub3coKSB9KTtcbiAgICBzdHJ1Y3R1cmVzLnNwbGljZShpbmRleCwgMCwgbmV3U3RydWN0dXJlKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7XG4gIH1cblxuICByZW1vdmVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHsgc3RydWN0dXJlcyA9IFtdIH0gPSB0aGlzLkVtYWlsO1xuICAgIHN0cnVjdHVyZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYWRkQmxvY2soeyBwcmV2aW91c0luZGV4ID0gMCwgY3VycmVudEluZGV4ID0gMCwgaXRlbSwgcHJldmlvdXNDb250YWluZXI6IHsgaWQsIGRhdGEgfSB9OiBJQWRkQmxvY2tFdmVudCwgY29sdW1uOiBUQmxvY2tzW10pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhpZCk7XG4gICAgLy8gY29uc29sZS5sb2coaXRlbSk7XG5cbiAgICBpZiAoaWQgPT09ICdibG9jay1lbGVtZW50cycpIHtcbiAgICAgIGNvbHVtbi5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBjbG9uZURlZXAoaXRlbS5kYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKGRhdGEsIGNvbHVtbiwgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcbiAgICB9XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNoYW5nZUJsb2NrT3JkZXIoeyBwcmV2aW91c0luZGV4ID0gMCwgY3VycmVudEluZGV4ID0gMCB9OiBDZGtEcmFnRHJvcDxUQmxvY2tzW10+LCBjb2x1bW46IFRCbG9ja3NbXSkge1xuICAgIG1vdmVJdGVtSW5BcnJheShjb2x1bW4sIHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGR1cGxpY2F0ZUJsb2NrKGtleTogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSwgYmxvY2s6IFRCbG9ja3MpOiBUQmxvY2tzIHtcbiAgICBjb25zdCBuZXdCbG9jayA9IGNsb25lRGVlcDxUQmxvY2tzPihibG9jayk7XG4gICAgY29sdW1uLnNwbGljZShrZXksIDAsIG5ld0Jsb2NrKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiBuZXdCbG9jaztcbiAgfVxuXG4gIHJlbW92ZUJsb2NrKGtleTogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSkge1xuICAgIGNvbHVtbi5zcGxpY2Uoa2V5LCAxKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fTWptbCQubmV4dChudWxsKTtcbiAgICB0aGlzLl9UZW1wbGF0ZSQubmV4dChudWxsKTtcbiAgICB0aGlzLmNsb25lZEVtYWlsID0gY2xvbmVEZWVwKHRoaXMuRW1haWwpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,122 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Injectable } from '@angular/core';
6
+ import { MatSnackBar } from '@angular/material/snack-bar';
7
+ import { MatDialog } from '@angular/material/dialog';
8
+ import { MatBottomSheet } from '@angular/material/bottom-sheet';
9
+ import { animationFrameScheduler, BehaviorSubject, of, ReplaySubject, Subject } from 'rxjs';
10
+ import { catchError, distinct, distinctUntilChanged, distinctUntilKeyChanged, filter, map, shareReplay, subscribeOn, tap } from 'rxjs/operators';
11
+ import { TemplateListDialogComponent } from '../../../components/template-list-dialog/template-list-dialog.component';
12
+ import { ConfirmDialogComponent } from '../../../components/dialog.component';
13
+ import { PbEmailObjectStoreService } from '../pb-email-object-store/pb-email-object-store.service';
14
+ import { ImportDialogComponent } from '../../../components/import-dialog/import-dialog.component';
15
+ /**
16
+ * @internal
17
+ */
18
+ export class PbUserInterfaceService {
19
+ constructor(emailObjectStore, matDialog, bottomSheet, snackBar) {
20
+ this.emailObjectStore = emailObjectStore;
21
+ this.matDialog = matDialog;
22
+ this.bottomSheet = bottomSheet;
23
+ this.snackBar = snackBar;
24
+ this.activeMatProgress$ = new ReplaySubject();
25
+ this.cdkDropListConnectedTo$ = this.emailObjectStore.emailStructuresAsObservable$.pipe(
26
+ // tap(structures => console.log('Structures Length', structures.length)),
27
+ map(structures => structures.reduce((prev, { elements }, structureKey) => {
28
+ prev.push(...elements.map((_, columnKey) => `column-droplist-${columnKey}-${structureKey}`));
29
+ return prev;
30
+ }, [])), distinct(), distinctUntilKeyChanged('length'),
31
+ // tap(dropList => console.log('Drop List', dropList)),
32
+ shareReplay());
33
+ this._currentEditingStructure$ = new BehaviorSubject(null);
34
+ this.currentEditingStructure$ = this._currentEditingStructure$.pipe(subscribeOn(animationFrameScheduler), distinctUntilChanged(), catchError(() => of(null)),
35
+ // tap(editStructure => console.log(editStructure)),
36
+ shareReplay());
37
+ this._currentEditingBlock$ = new BehaviorSubject(null);
38
+ this.currentEditingBlock$ = this._currentEditingBlock$.pipe(subscribeOn(animationFrameScheduler), distinctUntilChanged(), catchError(() => of(null)), shareReplay());
39
+ this._editGeneralSettings$ = new Subject();
40
+ this.editGeneralSettings$ = this._editGeneralSettings$.pipe(subscribeOn(animationFrameScheduler), tap(() => this.changeTabIndex(2)), distinctUntilChanged(), shareReplay());
41
+ this._currentTabIndex$ = new BehaviorSubject(0);
42
+ this.currentTabIndex$ = this._currentTabIndex$.pipe(subscribeOn(animationFrameScheduler), distinctUntilChanged());
43
+ }
44
+ editBlock(block) {
45
+ this._currentEditingStructure$.next(null);
46
+ this._currentEditingBlock$.next(block);
47
+ this._editGeneralSettings$.next('block');
48
+ }
49
+ editStructure(structure) {
50
+ this._currentEditingBlock$.next(null);
51
+ this._editGeneralSettings$.next('structure');
52
+ this._currentEditingStructure$.next(structure);
53
+ }
54
+ editGeneralSettings() {
55
+ this.resetElements();
56
+ this._editGeneralSettings$.next('general');
57
+ }
58
+ changeTabIndex(index) {
59
+ this._currentTabIndex$.next(index);
60
+ }
61
+ confirmDialog$() {
62
+ return this.matDialog
63
+ .open(ConfirmDialogComponent)
64
+ .afterClosed()
65
+ .pipe(map(res => res === '1'));
66
+ }
67
+ templatesListDialog$(templateList) {
68
+ return this.matDialog
69
+ .open(TemplateListDialogComponent, {
70
+ data: templateList,
71
+ width: '60vw',
72
+ maxWidth: '800px',
73
+ height: '70vh',
74
+ maxHeight: '900px'
75
+ })
76
+ .afterClosed()
77
+ .pipe(filter(tmpl => Boolean(tmpl)));
78
+ }
79
+ importDialog$() {
80
+ return this.bottomSheet
81
+ .open(ImportDialogComponent, {
82
+ ariaLabel: 'Browse media'
83
+ })
84
+ .afterDismissed();
85
+ }
86
+ notify(msg, close = 'dismiss', duration = 3000) {
87
+ return this.snackBar.open(msg, close, { duration });
88
+ }
89
+ currentEditingBlock() {
90
+ return this._currentEditingBlock$.getValue();
91
+ }
92
+ currentEditingStructure() {
93
+ return this._currentEditingStructure$.getValue();
94
+ }
95
+ currentStructureEqualWith(structure) {
96
+ return this.currentEditingStructure() === structure;
97
+ }
98
+ currentBlockEqualWith(block) {
99
+ return this.currentEditingBlock() === block;
100
+ }
101
+ currentStructureContainsActiveBlock(structure) {
102
+ return structure.elements.some(elems => elems.some(block => block === this.currentEditingBlock()));
103
+ }
104
+ resetElements() {
105
+ this._currentEditingStructure$.next(null);
106
+ this._currentEditingBlock$.next(null);
107
+ }
108
+ reset() {
109
+ this.resetElements();
110
+ this.changeTabIndex(0);
111
+ }
112
+ }
113
+ PbUserInterfaceService.decorators = [
114
+ { type: Injectable }
115
+ ];
116
+ PbUserInterfaceService.ctorParameters = () => [
117
+ { type: PbEmailObjectStoreService },
118
+ { type: MatDialog },
119
+ { type: MatBottomSheet },
120
+ { type: MatSnackBar }
121
+ ];
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbnRlcmZhY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy9pbnRlcm5hbHMvdXNlci1pbnRlcmZhY2VzL3VzZXItaW50ZXJmYWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUNSLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIsTUFBTSxFQUNOLEdBQUcsRUFDSCxXQUFXLEVBQ1gsV0FBVyxFQUNYLEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBSXhCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBR2xHOztHQUVHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQXdDakMsWUFDVSxnQkFBMkMsRUFDM0MsU0FBb0IsRUFDcEIsV0FBMkIsRUFDM0IsUUFBcUI7UUFIckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBM0NmLHVCQUFrQixHQUFHLElBQUksYUFBYSxFQUFXLENBQUM7UUFDbEQsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLDRCQUE0QixDQUFDLElBQUk7UUFDL0YsMEVBQTBFO1FBQzFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUNmLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixTQUFTLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNQLEVBQ0QsUUFBUSxFQUFFLEVBQ1YsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1FBQ2pDLHVEQUF1RDtRQUN2RCxXQUFXLEVBQUUsQ0FDZCxDQUFDO1FBQ2UsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQWEsSUFBSSxDQUFDLENBQUM7UUFDbkUsNkJBQXdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FDNUUsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQ3BDLG9CQUFvQixFQUFFLEVBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBa0IsQ0FBQyxDQUFDO1FBQ3hDLG9EQUFvRDtRQUNwRCxXQUFXLEVBQUUsQ0FDZCxDQUFDO1FBQ2UsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDNUQseUJBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FDcEUsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQ3BDLG9CQUFvQixFQUFFLEVBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBZSxDQUFDLENBQUMsRUFDckMsV0FBVyxFQUFFLENBQ2QsQ0FBQztRQUNlLDBCQUFxQixHQUFHLElBQUksT0FBTyxFQUFxQyxDQUFDO1FBQzFFLHlCQUFvQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQ3BFLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUNwQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNqQyxvQkFBb0IsRUFBRSxFQUN0QixXQUFXLEVBQUUsQ0FDZCxDQUFDO1FBQ2Usc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEQscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFPMUgsQ0FBQztJQUVKLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBcUI7UUFDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVM7YUFDbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDO2FBQzVCLFdBQVcsRUFBRTthQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsWUFBcUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsU0FBUzthQUNsQixJQUFJLENBQ0gsMkJBQTJCLEVBQzNCO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsS0FBSyxFQUFFLE1BQU07WUFDYixRQUFRLEVBQUUsT0FBTztZQUNqQixNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxPQUFPO1NBQ25CLENBQ0Y7YUFDQSxXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVc7YUFDcEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzNCLFNBQVMsRUFBRSxjQUFjO1NBQzFCLENBQUM7YUFDRCxjQUFjLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVcsRUFBRSxLQUFLLEdBQUcsU0FBUyxFQUFFLFFBQVEsR0FBRyxJQUFJO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxTQUFxQjtRQUM3QyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLFNBQVMsQ0FBQztJQUN0RCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBYztRQUNsQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEtBQUssQ0FBQztJQUM5QyxDQUFDO0lBRUQsbUNBQW1DLENBQUMsU0FBcUI7UUFDdkQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7O1lBcElGLFVBQVU7OztZQVBGLHlCQUF5QjtZQW5CekIsU0FBUztZQUNULGNBQWM7WUFGZCxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XG5pbXBvcnQgeyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGlzdGluY3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBzdWJzY3JpYmVPbixcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSVN0cnVjdHVyZSwgSVVzZXJUZW1wbGF0ZSwgSVVzZXJUZW1wbGF0ZUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRCbG9ja3MgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL0VsZW1lbnRzJztcbmltcG9ydCB7IFRlbXBsYXRlTGlzdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdGVtcGxhdGUtbGlzdC1kaWFsb2cvdGVtcGxhdGUtbGlzdC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2RpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSB9IGZyb20gJy4uL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBJbXBvcnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2ltcG9ydC1kaWFsb2cvaW1wb3J0LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUEJFbWFpbCB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvRGVmYXVsdEVtYWlsJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBiVXNlckludGVyZmFjZVNlcnZpY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlTWF0UHJvZ3Jlc3MkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGNka0Ryb3BMaXN0Q29ubmVjdGVkVG8kID0gdGhpcy5lbWFpbE9iamVjdFN0b3JlLmVtYWlsU3RydWN0dXJlc0FzT2JzZXJ2YWJsZSQucGlwZShcbiAgICAvLyB0YXAoc3RydWN0dXJlcyA9PiBjb25zb2xlLmxvZygnU3RydWN0dXJlcyBMZW5ndGgnLCBzdHJ1Y3R1cmVzLmxlbmd0aCkpLFxuICAgIG1hcChzdHJ1Y3R1cmVzID0+XG4gICAgICBzdHJ1Y3R1cmVzLnJlZHVjZSgocHJldiwgeyBlbGVtZW50cyB9LCBzdHJ1Y3R1cmVLZXkpID0+IHtcbiAgICAgICAgcHJldi5wdXNoKC4uLmVsZW1lbnRzLm1hcCgoXywgY29sdW1uS2V5KSA9PiBgY29sdW1uLWRyb3BsaXN0LSR7Y29sdW1uS2V5fS0ke3N0cnVjdHVyZUtleX1gKSk7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwgW10pXG4gICAgKSxcbiAgICBkaXN0aW5jdCgpLFxuICAgIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCdsZW5ndGgnKSxcbiAgICAvLyB0YXAoZHJvcExpc3QgPT4gY29uc29sZS5sb2coJ0Ryb3AgTGlzdCcsIGRyb3BMaXN0KSksXG4gICAgc2hhcmVSZXBsYXkoKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50RWRpdGluZ1N0cnVjdHVyZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTdHJ1Y3R1cmU+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudEVkaXRpbmdTdHJ1Y3R1cmUkID0gdGhpcy5fY3VycmVudEVkaXRpbmdTdHJ1Y3R1cmUkLnBpcGUoXG4gICAgc3Vic2NyaWJlT24oYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsIGFzIElTdHJ1Y3R1cmUpKSxcbiAgICAvLyB0YXAoZWRpdFN0cnVjdHVyZSA9PiBjb25zb2xlLmxvZyhlZGl0U3RydWN0dXJlKSksXG4gICAgc2hhcmVSZXBsYXkoKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50RWRpdGluZ0Jsb2NrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VEJsb2Nrcz4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50RWRpdGluZ0Jsb2NrJCA9IHRoaXMuX2N1cnJlbnRFZGl0aW5nQmxvY2skLnBpcGUoXG4gICAgc3Vic2NyaWJlT24oYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsIGFzIFRCbG9ja3MpKSxcbiAgICBzaGFyZVJlcGxheSgpXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRHZW5lcmFsU2V0dGluZ3MkID0gbmV3IFN1YmplY3Q8J3N0cnVjdHVyZScgfCAnYmxvY2snIHwgJ2dlbmVyYWwnPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgZWRpdEdlbmVyYWxTZXR0aW5ncyQgPSB0aGlzLl9lZGl0R2VuZXJhbFNldHRpbmdzJC5waXBlKFxuICAgIHN1YnNjcmliZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5jaGFuZ2VUYWJJbmRleCgyKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgpXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRUYWJJbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50VGFiSW5kZXgkID0gdGhpcy5fY3VycmVudFRhYkluZGV4JC5waXBlKHN1YnNjcmliZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbWFpbE9iamVjdFN0b3JlOiBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWF0RGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBib3R0b21TaGVldDogTWF0Qm90dG9tU2hlZXQsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXJcbiAgKSB7fVxuXG4gIGVkaXRCbG9jayhibG9jazogVEJsb2Nrcykge1xuICAgIHRoaXMuX2N1cnJlbnRFZGl0aW5nU3RydWN0dXJlJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2N1cnJlbnRFZGl0aW5nQmxvY2skLm5leHQoYmxvY2spO1xuICAgIHRoaXMuX2VkaXRHZW5lcmFsU2V0dGluZ3MkLm5leHQoJ2Jsb2NrJyk7XG4gIH1cblxuICBlZGl0U3RydWN0dXJlKHN0cnVjdHVyZTogSVN0cnVjdHVyZSkge1xuICAgIHRoaXMuX2N1cnJlbnRFZGl0aW5nQmxvY2skLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZWRpdEdlbmVyYWxTZXR0aW5ncyQubmV4dCgnc3RydWN0dXJlJyk7XG4gICAgdGhpcy5fY3VycmVudEVkaXRpbmdTdHJ1Y3R1cmUkLm5leHQoc3RydWN0dXJlKTtcbiAgfVxuXG4gIGVkaXRHZW5lcmFsU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5yZXNldEVsZW1lbnRzKCk7XG4gICAgdGhpcy5fZWRpdEdlbmVyYWxTZXR0aW5ncyQubmV4dCgnZ2VuZXJhbCcpO1xuICB9XG5cbiAgY2hhbmdlVGFiSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRUYWJJbmRleCQubmV4dChpbmRleCk7XG4gIH1cblxuICBjb25maXJtRGlhbG9nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXREaWFsb2dcbiAgICAgIC5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQpXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUobWFwKHJlcyA9PiByZXMgPT09ICcxJykpO1xuICB9XG5cbiAgdGVtcGxhdGVzTGlzdERpYWxvZyQodGVtcGxhdGVMaXN0OiBJVXNlclRlbXBsYXRlQ2F0ZWdvcnlbXSkge1xuICAgIHJldHVybiB0aGlzLm1hdERpYWxvZ1xuICAgICAgLm9wZW48VGVtcGxhdGVMaXN0RGlhbG9nQ29tcG9uZW50LCBJVXNlclRlbXBsYXRlQ2F0ZWdvcnlbXSwgeyBjYXRlZ29yeTogc3RyaW5nOyB0ZW1wbGF0ZTogSVVzZXJUZW1wbGF0ZSB9PihcbiAgICAgICAgVGVtcGxhdGVMaXN0RGlhbG9nQ29tcG9uZW50LFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YTogdGVtcGxhdGVMaXN0LFxuICAgICAgICAgIHdpZHRoOiAnNjB2dycsXG4gICAgICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgaGVpZ2h0OiAnNzB2aCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiAnOTAwcHgnXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZShmaWx0ZXIodG1wbCA9PiBCb29sZWFuKHRtcGwpKSk7XG4gIH1cblxuICBpbXBvcnREaWFsb2ckKCk6IE9ic2VydmFibGU8UEJFbWFpbD4ge1xuICAgIHJldHVybiB0aGlzLmJvdHRvbVNoZWV0XG4gICAgICAub3BlbihJbXBvcnREaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgYXJpYUxhYmVsOiAnQnJvd3NlIG1lZGlhJ1xuICAgICAgfSlcbiAgICAgIC5hZnRlckRpc21pc3NlZCgpO1xuICB9XG5cbiAgbm90aWZ5KG1zZzogc3RyaW5nLCBjbG9zZSA9ICdkaXNtaXNzJywgZHVyYXRpb24gPSAzMDAwKSB7XG4gICAgcmV0dXJuIHRoaXMuc25hY2tCYXIub3Blbihtc2csIGNsb3NlLCB7IGR1cmF0aW9uIH0pO1xuICB9XG5cbiAgY3VycmVudEVkaXRpbmdCbG9jaygpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEVkaXRpbmdCbG9jayQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGN1cnJlbnRFZGl0aW5nU3RydWN0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50RWRpdGluZ1N0cnVjdHVyZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGN1cnJlbnRTdHJ1Y3R1cmVFcXVhbFdpdGgoc3RydWN0dXJlOiBJU3RydWN0dXJlKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEVkaXRpbmdTdHJ1Y3R1cmUoKSA9PT0gc3RydWN0dXJlO1xuICB9XG5cbiAgY3VycmVudEJsb2NrRXF1YWxXaXRoKGJsb2NrOiBUQmxvY2tzKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEVkaXRpbmdCbG9jaygpID09PSBibG9jaztcbiAgfVxuXG4gIGN1cnJlbnRTdHJ1Y3R1cmVDb250YWluc0FjdGl2ZUJsb2NrKHN0cnVjdHVyZTogSVN0cnVjdHVyZSkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmUuZWxlbWVudHMuc29tZShlbGVtcyA9PiBlbGVtcy5zb21lKGJsb2NrID0+IGJsb2NrID09PSB0aGlzLmN1cnJlbnRFZGl0aW5nQmxvY2soKSkpO1xuICB9XG5cbiAgcmVzZXRFbGVtZW50cygpIHtcbiAgICB0aGlzLl9jdXJyZW50RWRpdGluZ1N0cnVjdHVyZSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9jdXJyZW50RWRpdGluZ0Jsb2NrJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5yZXNldEVsZW1lbnRzKCk7XG4gICAgdGhpcy5jaGFuZ2VUYWJJbmRleCgwKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { PbStorageService } from './pb-storage.service';
6
+ /**
7
+ * @internal
8
+ */
9
+ export default class FreeUsersPbStorage extends PbStorageService {
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJlZVVzZXJzU3RvcmFnZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy9wYi1zdG9yYWdlL0ZyZWVVc2Vyc1N0b3JhZ2UuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtDQUFHIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IFBiU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3BiLXN0b3JhZ2Uuc2VydmljZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZyZWVVc2Vyc1BiU3RvcmFnZSBleHRlbmRzIFBiU3RvcmFnZVNlcnZpY2Uge31cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import FreeUsersPbStorage from './FreeUsersStorage.class';
6
+ export { FreeUsersPbStorage };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvcGItc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLGtCQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCBGcmVlVXNlcnNQYlN0b3JhZ2UgZnJvbSAnLi9GcmVlVXNlcnNTdG9yYWdlLmNsYXNzJztcbmV4cG9ydCB7RnJlZVVzZXJzUGJTdG9yYWdlfTtcbiJdfQ==
@@ -0,0 +1,79 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Inject, Injectable } from '@angular/core';
6
+ import { PB_TEMPLATES_TEMPORARY_STORAGE } from '../../tokens/tokens';
7
+ import { ETemplatesStorage } from '../../interfaces/interfaces';
8
+ /**
9
+ * This service allow you rewrite the default Builder Storage methods. It contains all methods builder needs to cache or store objects.
10
+ * Alternatively you can rewrite the [PB_TEMPLATES_TEMPORARY_STORAGE]{@link PB_TEMPLATES_TEMPORARY_STORAGE}
11
+ * or [PB_STORAGE_FACTORY]{@link PB_STORAGE_FACTORY} tokens.
12
+ *
13
+ * In next major updates, it can have some limitations for Regular License.
14
+ *
15
+ * @example
16
+ * // Create a custom service
17
+ * class YourOwnStorageService extends IpStorageService {}
18
+ *
19
+ * // Rewrite it into AppModule
20
+ * { provide: IpStorageService, useClass: YourOwnStorageService }
21
+ */
22
+ export class PbStorageService {
23
+ constructor(
24
+ /**
25
+ * Storage for templates defined by [PB_TEMPLATES_TEMPORARY_STORAGE]{@link PB_TEMPLATES_TEMPORARY_STORAGE} token.
26
+ */
27
+ templateStorage) {
28
+ this.templateStorage = templateStorage;
29
+ }
30
+ /**
31
+ * Get the latest used templates end user has chosen from templates list.
32
+ * @return Latest used templates by end user.
33
+ */
34
+ getLatestUsedTemplates() {
35
+ return JSON.parse(this.templateStorage.getItem(ETemplatesStorage.LATEST_USED)) || [];
36
+ }
37
+ /**
38
+ * Add a template to end user's chosen templates list.
39
+ * @param template Template end user chosen.
40
+ */
41
+ addTemplateToLatestUsed(template) {
42
+ const latest = this.getLatestUsedTemplates().filter(({ title }) => title !== template.title);
43
+ latest.unshift(template);
44
+ this.templateStorage.setItem(ETemplatesStorage.LATEST_USED, JSON.stringify(latest));
45
+ }
46
+ /**
47
+ * Clear all latest used templates cache.
48
+ */
49
+ clearLatestUsed() {
50
+ this.templateStorage.removeItem(ETemplatesStorage.LATEST_USED);
51
+ }
52
+ /**
53
+ * Cache a fully templates list.
54
+ * @param list Template list to cache
55
+ */
56
+ cacheTemplateList(list) {
57
+ this.templateStorage.setItem(ETemplatesStorage.STORAGE, JSON.stringify(list));
58
+ }
59
+ /**
60
+ * Get a cached templates list if exists.
61
+ * @return Either a cached templates list or an empty array.
62
+ */
63
+ getCachedTemplateList() {
64
+ return JSON.parse(this.templateStorage.getItem(ETemplatesStorage.STORAGE)) || [];
65
+ }
66
+ /**
67
+ * Clear all templates list cache.
68
+ */
69
+ clearCachedTemplateList() {
70
+ this.templateStorage.removeItem(ETemplatesStorage.STORAGE);
71
+ }
72
+ }
73
+ PbStorageService.decorators = [
74
+ { type: Injectable }
75
+ ];
76
+ PbStorageService.ctorParameters = () => [
77
+ { type: Storage, decorators: [{ type: Inject, args: [PB_TEMPLATES_TEMPORARY_STORAGE,] }] }
78
+ ];
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3BiLXN0b3JhZ2UvcGItc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0MsTUFBTSw2QkFBNkIsQ0FBQztBQUV0Rzs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsTUFBTSxPQUFnQixnQkFBZ0I7SUFDcEM7SUFDRTs7T0FFRztJQUM0QyxlQUF3QjtRQUF4QixvQkFBZSxHQUFmLGVBQWUsQ0FBUztJQUN0RSxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsdUJBQXVCLENBQUMsUUFBdUI7UUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxJQUE2QjtRQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QjtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDOzs7WUF2REYsVUFBVTs7O1lBTXlELE9BQU8sdUJBQXRFLE1BQU0sU0FBQyw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBCX1RFTVBMQVRFU19URU1QT1JBUllfU1RPUkFHRSB9IGZyb20gJy4uLy4uL3Rva2Vucy90b2tlbnMnO1xuaW1wb3J0IHsgRVRlbXBsYXRlc1N0b3JhZ2UsIElVc2VyVGVtcGxhdGUsIElVc2VyVGVtcGxhdGVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogVGhpcyBzZXJ2aWNlIGFsbG93IHlvdSByZXdyaXRlIHRoZSBkZWZhdWx0IEJ1aWxkZXIgU3RvcmFnZSBtZXRob2RzLiBJdCBjb250YWlucyBhbGwgbWV0aG9kcyBidWlsZGVyIG5lZWRzIHRvIGNhY2hlIG9yIHN0b3JlIG9iamVjdHMuXG4gKiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gcmV3cml0ZSB0aGUgW1BCX1RFTVBMQVRFU19URU1QT1JBUllfU1RPUkFHRV17QGxpbmsgUEJfVEVNUExBVEVTX1RFTVBPUkFSWV9TVE9SQUdFfVxuICogb3IgW1BCX1NUT1JBR0VfRkFDVE9SWV17QGxpbmsgUEJfU1RPUkFHRV9GQUNUT1JZfSB0b2tlbnMuXG4gKlxuICogSW4gbmV4dCBtYWpvciB1cGRhdGVzLCBpdCBjYW4gaGF2ZSBzb21lIGxpbWl0YXRpb25zIGZvciBSZWd1bGFyIExpY2Vuc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIGN1c3RvbSBzZXJ2aWNlXG4gKiBjbGFzcyBZb3VyT3duU3RvcmFnZVNlcnZpY2UgZXh0ZW5kcyBJcFN0b3JhZ2VTZXJ2aWNlIHt9XG4gKlxuICogLy8gUmV3cml0ZSBpdCBpbnRvIEFwcE1vZHVsZVxuICogeyBwcm92aWRlOiBJcFN0b3JhZ2VTZXJ2aWNlLCB1c2VDbGFzczogWW91ck93blN0b3JhZ2VTZXJ2aWNlIH1cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBiU3RvcmFnZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBTdG9yYWdlIGZvciB0ZW1wbGF0ZXMgZGVmaW5lZCBieSBbUEJfVEVNUExBVEVTX1RFTVBPUkFSWV9TVE9SQUdFXXtAbGluayBQQl9URU1QTEFURVNfVEVNUE9SQVJZX1NUT1JBR0V9IHRva2VuLlxuICAgICAqL1xuICAgIEBJbmplY3QoUEJfVEVNUExBVEVTX1RFTVBPUkFSWV9TVE9SQUdFKSBwdWJsaWMgdGVtcGxhdGVTdG9yYWdlOiBTdG9yYWdlXG4gICkge31cblxuICAvKipcbiAgICogR2V0IHRoZSBsYXRlc3QgdXNlZCB0ZW1wbGF0ZXMgZW5kIHVzZXIgaGFzIGNob3NlbiBmcm9tIHRlbXBsYXRlcyBsaXN0LlxuICAgKiBAcmV0dXJuIExhdGVzdCB1c2VkIHRlbXBsYXRlcyBieSBlbmQgdXNlci5cbiAgICovXG4gIGdldExhdGVzdFVzZWRUZW1wbGF0ZXMoKTogSVVzZXJUZW1wbGF0ZVtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLnRlbXBsYXRlU3RvcmFnZS5nZXRJdGVtKEVUZW1wbGF0ZXNTdG9yYWdlLkxBVEVTVF9VU0VEKSkgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGVtcGxhdGUgdG8gZW5kIHVzZXIncyBjaG9zZW4gdGVtcGxhdGVzIGxpc3QuXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSBlbmQgdXNlciBjaG9zZW4uXG4gICAqL1xuICBhZGRUZW1wbGF0ZVRvTGF0ZXN0VXNlZCh0ZW1wbGF0ZTogSVVzZXJUZW1wbGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxhdGVzdCA9IHRoaXMuZ2V0TGF0ZXN0VXNlZFRlbXBsYXRlcygpLmZpbHRlcigoeyB0aXRsZSB9KSA9PiB0aXRsZSAhPT0gdGVtcGxhdGUudGl0bGUpO1xuICAgIGxhdGVzdC51bnNoaWZ0KHRlbXBsYXRlKTtcbiAgICB0aGlzLnRlbXBsYXRlU3RvcmFnZS5zZXRJdGVtKEVUZW1wbGF0ZXNTdG9yYWdlLkxBVEVTVF9VU0VELCBKU09OLnN0cmluZ2lmeShsYXRlc3QpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgbGF0ZXN0IHVzZWQgdGVtcGxhdGVzIGNhY2hlLlxuICAgKi9cbiAgY2xlYXJMYXRlc3RVc2VkKCk6IHZvaWQge1xuICAgIHRoaXMudGVtcGxhdGVTdG9yYWdlLnJlbW92ZUl0ZW0oRVRlbXBsYXRlc1N0b3JhZ2UuTEFURVNUX1VTRUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlIGEgZnVsbHkgdGVtcGxhdGVzIGxpc3QuXG4gICAqIEBwYXJhbSBsaXN0IFRlbXBsYXRlIGxpc3QgdG8gY2FjaGVcbiAgICovXG4gIGNhY2hlVGVtcGxhdGVMaXN0KGxpc3Q6IElVc2VyVGVtcGxhdGVDYXRlZ29yeVtdKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wbGF0ZVN0b3JhZ2Uuc2V0SXRlbShFVGVtcGxhdGVzU3RvcmFnZS5TVE9SQUdFLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgY2FjaGVkIHRlbXBsYXRlcyBsaXN0IGlmIGV4aXN0cy5cbiAgICogQHJldHVybiBFaXRoZXIgYSBjYWNoZWQgdGVtcGxhdGVzIGxpc3Qgb3IgYW4gZW1wdHkgYXJyYXkuXG4gICAqL1xuICBnZXRDYWNoZWRUZW1wbGF0ZUxpc3QoKTogSVVzZXJUZW1wbGF0ZUNhdGVnb3J5W10ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRoaXMudGVtcGxhdGVTdG9yYWdlLmdldEl0ZW0oRVRlbXBsYXRlc1N0b3JhZ2UuU1RPUkFHRSkpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCB0ZW1wbGF0ZXMgbGlzdCBjYWNoZS5cbiAgICovXG4gIGNsZWFyQ2FjaGVkVGVtcGxhdGVMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMudGVtcGxhdGVTdG9yYWdlLnJlbW92ZUl0ZW0oRVRlbXBsYXRlc1N0b3JhZ2UuU1RPUkFHRSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { switchMap } from 'rxjs/operators';
6
+ import { UploadBottomSheetDialogComponent } from './upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component';
7
+ import { PbUserImageUploaderService } from './user-image-uploader.service';
8
+ /**
9
+ * @internal
10
+ */
11
+ export default class ImageUploader extends PbUserImageUploaderService {
12
+ constructor(matBottomSheet, userMiddlewaresService) {
13
+ super();
14
+ this.matBottomSheet = matBottomSheet;
15
+ this.userMiddlewaresService = userMiddlewaresService;
16
+ }
17
+ browse$() {
18
+ return this.matBottomSheet
19
+ .open(UploadBottomSheetDialogComponent, {
20
+ ariaLabel: 'Browse media'
21
+ })
22
+ .afterDismissed()
23
+ .pipe(switchMap(path => this.userMiddlewaresService.uploadImage(path)));
24
+ }
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZS11c2Vycy1pbWFnZS11cGxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS9mcmVlLXVzZXJzLWltYWdlLXVwbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQ3JILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxhQUFjLFNBQVEsMEJBQTBCO0lBQ25FLFlBQW9CLGNBQThCLEVBQVUsc0JBQWdEO1FBQzFHLEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUEwQjtJQUU1RyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsSUFBSSxDQUFDLGdDQUFnQyxFQUFFO1lBQ3RDLFNBQVMsRUFBRSxjQUFjO1NBQzFCLENBQUM7YUFDRCxjQUFjLEVBQUU7YUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBsb2FkQm90dG9tU2hlZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL3VwbG9hZC1ib3R0b20tc2hlZXQtZGlhbG9nL3VwbG9hZC1ib3R0b20tc2hlZXQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSB9IGZyb20gJy4vdXNlci1pbWFnZS11cGxvYWRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VVcGxvYWRlciBleHRlbmRzIFBiVXNlckltYWdlVXBsb2FkZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXRCb3R0b21TaGVldDogTWF0Qm90dG9tU2hlZXQsIHByaXZhdGUgdXNlck1pZGRsZXdhcmVzU2VydmljZTogUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGJyb3dzZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Qm90dG9tU2hlZXRcbiAgICAgIC5vcGVuKFVwbG9hZEJvdHRvbVNoZWV0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgIGFyaWFMYWJlbDogJ0Jyb3dzZSBtZWRpYSdcbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJEaXNtaXNzZWQoKVxuICAgICAgLnBpcGUoc3dpdGNoTWFwKHBhdGggPT4gdGhpcy51c2VyTWlkZGxld2FyZXNTZXJ2aWNlLnVwbG9hZEltYWdlKHBhdGgpKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import FreeUsersImageUploader from './free-users-image-uploader.service';
6
+ import PaidUsersImageUploader from './paid-users-image-uploader.service';
7
+ export { FreeUsersImageUploader, PaidUsersImageUploader };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvdXNlci1pbWFnZS11cGxvYWRlci1zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sc0JBQXNCLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxzQkFBc0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUV6RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRnJlZVVzZXJzSW1hZ2VVcGxvYWRlciBmcm9tICcuL2ZyZWUtdXNlcnMtaW1hZ2UtdXBsb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgUGFpZFVzZXJzSW1hZ2VVcGxvYWRlciBmcm9tICcuL3BhaWQtdXNlcnMtaW1hZ2UtdXBsb2FkZXIuc2VydmljZSc7XG5cbmV4cG9ydCB7IEZyZWVVc2Vyc0ltYWdlVXBsb2FkZXIsIFBhaWRVc2Vyc0ltYWdlVXBsb2FkZXIgfTtcbiJdfQ==
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { exhaustMap, filter, switchMap } from 'rxjs/operators';
6
+ import { PbUserImageUploaderService } from './user-image-uploader.service';
7
+ import { UploadImageGalleryComponent } from './upload-image-gallery/upload-image-gallery.component';
8
+ /**
9
+ * @internal
10
+ */
11
+ export default class PaidUsersImageUploaderServiceService extends PbUserImageUploaderService {
12
+ constructor(matDialog, userMiddleware, userRestApi) {
13
+ super();
14
+ this.matDialog = matDialog;
15
+ this.userMiddleware = userMiddleware;
16
+ this.userRestApi = userRestApi;
17
+ }
18
+ browse$() {
19
+ return this.userRestApi.getUserImages$().pipe(exhaustMap(imageCategoryList => this.matDialog
20
+ .open(UploadImageGalleryComponent, {
21
+ data: imageCategoryList,
22
+ width: '60vw',
23
+ maxWidth: '800px',
24
+ height: '60vh',
25
+ maxHeight: '800px'
26
+ })
27
+ .afterClosed()), filter(path => !!path.length), switchMap(path => this.userMiddleware.uploadImage(path)));
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpZC11c2Vycy1pbWFnZS11cGxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS9wYWlkLXVzZXJzLWltYWdlLXVwbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFHcEc7O0dBRUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFxQyxTQUFRLDBCQUEwQjtJQUMxRixZQUFvQixTQUFvQixFQUFVLGNBQXdDLEVBQVUsV0FBaUM7UUFDbkksS0FBSyxFQUFFLENBQUM7UUFEVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO0lBRXJJLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FDM0MsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLFNBQVM7YUFDWCxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDakMsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsU0FBUyxFQUFFLE9BQU87U0FDbkIsQ0FBQzthQUNELFdBQVcsRUFBRSxDQUNqQixFQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQzdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSB9IGZyb20gJy4vdXNlci1pbWFnZS11cGxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBsb2FkSW1hZ2VHYWxsZXJ5Q29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtaW1hZ2UtZ2FsbGVyeS91cGxvYWQtaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFpZFVzZXJzSW1hZ2VVcGxvYWRlclNlcnZpY2VTZXJ2aWNlIGV4dGVuZHMgUGJVc2VySW1hZ2VVcGxvYWRlclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIHVzZXJNaWRkbGV3YXJlOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsIHByaXZhdGUgdXNlclJlc3RBcGk6IFBiVXNlclJlc3RBcGlTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGJyb3dzZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlclJlc3RBcGkuZ2V0VXNlckltYWdlcyQoKS5waXBlKFxuICAgICAgZXhoYXVzdE1hcChpbWFnZUNhdGVnb3J5TGlzdCA9PlxuICAgICAgICB0aGlzLm1hdERpYWxvZ1xuICAgICAgICAgIC5vcGVuKFVwbG9hZEltYWdlR2FsbGVyeUNvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogaW1hZ2VDYXRlZ29yeUxpc3QsXG4gICAgICAgICAgICB3aWR0aDogJzYwdncnLFxuICAgICAgICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6ICc2MHZoJyxcbiAgICAgICAgICAgIG1heEhlaWdodDogJzgwMHB4J1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICksXG4gICAgICBmaWx0ZXIocGF0aCA9PiAhIXBhdGgubGVuZ3RoKSxcbiAgICAgIHN3aXRjaE1hcChwYXRoID0+IHRoaXMudXNlck1pZGRsZXdhcmUudXBsb2FkSW1hZ2UocGF0aCkpXG4gICAgKTtcbiAgfVxufVxuIl19