@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,112 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Component, ViewChild, ElementRef } from '@angular/core';
6
+ import { DomSanitizer } from '@angular/platform-browser';
7
+ import { Subject, EMPTY } from 'rxjs';
8
+ import { HttpEventType, HttpResponse } from '@angular/common/http';
9
+ import { MatBottomSheetRef } from '@angular/material/bottom-sheet';
10
+ import { catchError, finalize, switchMap } from 'rxjs/operators';
11
+ import { bytesToSize } from '../../../utils';
12
+ import { PbEmailBuilderService } from '../../../pb-email-builder.service';
13
+ import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
14
+ import { PbUserInterfaceService } from '../../internals/user-interfaces/user-interface.service';
15
+ import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
16
+ export class UploadBottomSheetDialogComponent {
17
+ constructor(sanitizer, ngb, userRestApi, userInterface, middlewares, bottomSheetRef) {
18
+ this.sanitizer = sanitizer;
19
+ this.ngb = ngb;
20
+ this.userRestApi = userRestApi;
21
+ this.userInterface = userInterface;
22
+ this.middlewares = middlewares;
23
+ this.bottomSheetRef = bottomSheetRef;
24
+ this.uploading = false;
25
+ this.progress = new Subject();
26
+ }
27
+ get imageInfo() {
28
+ if (this.choosedImage) {
29
+ const { lastModified, size } = this.choosedImage;
30
+ const modTime = new Date(lastModified);
31
+ return `${modTime.toLocaleString()}, ${bytesToSize(size)}.`;
32
+ }
33
+ return '';
34
+ }
35
+ previewLink() {
36
+ return this.sanitizer.bypassSecurityTrustResourceUrl(this.objectUrl);
37
+ }
38
+ openBrowserModal(event) {
39
+ event.preventDefault();
40
+ const { uploadImagePath } = this.ngb.config;
41
+ if (!this.uploading && uploadImagePath) {
42
+ this.uploadInput.nativeElement.click();
43
+ }
44
+ else if (!uploadImagePath) {
45
+ this.userInterface.notify(`Hm ... this isn't a bug, it seems 'uploadImagePath' is empty!`);
46
+ }
47
+ }
48
+ uploadInputChanged() {
49
+ const { nativeElement } = this.uploadInput;
50
+ if (nativeElement.files.length) {
51
+ this._startUploading(nativeElement.files.item(0));
52
+ }
53
+ }
54
+ _startUploading(image) {
55
+ if (this.objectUrl) {
56
+ URL.revokeObjectURL(this.objectUrl);
57
+ }
58
+ this.objectUrl = URL.createObjectURL(image);
59
+ this.uploading = true;
60
+ const { uploadImagePath, csrf } = this.ngb.config;
61
+ const formData = new FormData();
62
+ if (csrf) {
63
+ formData.append(csrf.name, csrf.token);
64
+ }
65
+ formData.append('image', image);
66
+ return this.userRestApi
67
+ .userImageUpload$(formData, uploadImagePath)
68
+ .pipe(catchError((error) => this.middlewares.catchError(error).pipe(switchMap(() => {
69
+ this.userInterface.notify(error.message);
70
+ return EMPTY;
71
+ }))), finalize(() => this.progress.complete()))
72
+ .subscribe((event) => {
73
+ if (event.type === HttpEventType.UploadProgress) {
74
+ const percentDone = Math.round((100 * event.loaded) / event.total);
75
+ this.progress.next(percentDone);
76
+ }
77
+ else if (event instanceof HttpResponse) {
78
+ if (!event.body.success) {
79
+ this.userInterface.notify(event.body.message, 'Dismiss', null);
80
+ }
81
+ else {
82
+ this.bottomSheetRef.dismiss(event.body.path);
83
+ this.userInterface.notify('Successfully uploaded.', null, 1000);
84
+ }
85
+ }
86
+ });
87
+ }
88
+ ngOnDestroy() {
89
+ if (this.objectUrl) {
90
+ URL.revokeObjectURL(this.objectUrl);
91
+ }
92
+ }
93
+ }
94
+ UploadBottomSheetDialogComponent.decorators = [
95
+ { type: Component, args: [{
96
+ selector: 'pb-upload-bottom-sheet-dialog',
97
+ template: "<!--\n ~ Copyright (c) 2024 Pobuca.\n ~ All rights reserved.\n -->\n\n<mat-nav-list>\n <mat-list-item (click)=\"openBrowserModal($event)\">\n <div *ngIf=\"!uploading\">\n <span mat-line i18n=\"upload|Browse images from computer\">Browse images from computer</span>\n </div>\n <ng-container *ngIf=\"uploading\">\n <img matListAvatar [src]=\"previewLink()\" />\n <span mat-line i18n=\"upload|Uploading Message\">Uploading ...</span>\n <span mat-line>{{ imageInfo }}</span>\n </ng-container>\n </mat-list-item>\n <mat-progress-bar *ngIf=\"uploading\" mode=\"buffer\" [value]=\"progress | async\"></mat-progress-bar>\n</mat-nav-list>\n<input type=\"file\" accept=\"image/*\" fxHide #uploadInput (change)=\"uploadInputChanged()\" />\n",
98
+ styles: [""]
99
+ },] }
100
+ ];
101
+ UploadBottomSheetDialogComponent.ctorParameters = () => [
102
+ { type: DomSanitizer },
103
+ { type: PbEmailBuilderService },
104
+ { type: PbUserRestApiService },
105
+ { type: PbUserInterfaceService },
106
+ { type: PbUserMiddlewaresService },
107
+ { type: MatBottomSheetRef }
108
+ ];
109
+ UploadBottomSheetDialogComponent.propDecorators = {
110
+ uploadInput: [{ type: ViewChild, args: ['uploadInput', { static: true },] }]
111
+ };
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWJvdHRvbS1zaGVldC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFPekYsTUFBTSxPQUFPLGdDQUFnQztJQU8zQyxZQUNVLFNBQXVCLEVBQ3ZCLEdBQTBCLEVBQzFCLFdBQWlDLEVBQ2pDLGFBQXFD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QUM7Z0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtnQkFDekMsMndCQUEwRDs7YUFFM0Q7OztZQWhCUSxZQUFZO1lBT1oscUJBQXFCO1lBR3JCLG9CQUFvQjtZQURwQixzQkFBc0I7WUFEdEIsd0JBQXdCO1lBTHhCLGlCQUFpQjs7OzBCQWV2QixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QsIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwRXZlbnRUeXBlLCBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBieXRlc1RvU2l6ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBiRW1haWxCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3BiLWVtYWlsLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBiVXNlckludGVyZmFjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvdXNlci1pbnRlcmZhY2VzL3VzZXItaW50ZXJmYWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGItdXBsb2FkLWJvdHRvbS1zaGVldC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWJvdHRvbS1zaGVldC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkQm90dG9tU2hlZXREaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCd1cGxvYWRJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIHVwbG9hZElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjaG9vc2VkSW1hZ2U6IEZpbGU7XG4gIHVwbG9hZGluZyA9IGZhbHNlO1xuICBwcm9ncmVzcyA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBvYmplY3RVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgbmdiOiBQYkVtYWlsQnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyUmVzdEFwaTogUGJVc2VyUmVzdEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VySW50ZXJmYWNlOiBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWlkZGxld2FyZXM6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcbiAgICBwcml2YXRlIGJvdHRvbVNoZWV0UmVmOiBNYXRCb3R0b21TaGVldFJlZjxVcGxvYWRCb3R0b21TaGVldERpYWxvZ0NvbXBvbmVudD5cbiAgKSB7fVxuXG4gIGdldCBpbWFnZUluZm8oKSB7XG4gICAgaWYgKHRoaXMuY2hvb3NlZEltYWdlKSB7XG4gICAgICBjb25zdCB7IGxhc3RNb2RpZmllZCwgc2l6ZSB9ID0gdGhpcy5jaG9vc2VkSW1hZ2U7XG4gICAgICBjb25zdCBtb2RUaW1lID0gbmV3IERhdGUobGFzdE1vZGlmaWVkKTtcbiAgICAgIHJldHVybiBgJHttb2RUaW1lLnRvTG9jYWxlU3RyaW5nKCl9LCAke2J5dGVzVG9TaXplKHNpemUpfS5gO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcmV2aWV3TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMub2JqZWN0VXJsKTtcbiAgfVxuXG4gIG9wZW5Ccm93c2VyTW9kYWwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdXBsb2FkSW1hZ2VQYXRoIH0gPSB0aGlzLm5nYi5jb25maWc7XG4gICAgaWYgKCF0aGlzLnVwbG9hZGluZyAmJiB1cGxvYWRJbWFnZVBhdGgpIHtcbiAgICAgIHRoaXMudXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH0gZWxzZSBpZiAoIXVwbG9hZEltYWdlUGF0aCkge1xuICAgICAgdGhpcy51c2VySW50ZXJmYWNlLm5vdGlmeShgSG0gLi4uIHRoaXMgaXNuJ3QgYSBidWcsIGl0IHNlZW1zICd1cGxvYWRJbWFnZVBhdGgnIGlzIGVtcHR5IWApO1xuICAgIH1cbiAgfVxuXG4gIHVwbG9hZElucHV0Q2hhbmdlZCgpIHtcbiAgICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IHRoaXMudXBsb2FkSW5wdXQ7XG4gICAgaWYgKG5hdGl2ZUVsZW1lbnQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9zdGFydFVwbG9hZGluZyhuYXRpdmVFbGVtZW50LmZpbGVzLml0ZW0oMCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N0YXJ0VXBsb2FkaW5nKGltYWdlOiBGaWxlKSB7XG4gICAgaWYgKHRoaXMub2JqZWN0VXJsKSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMub2JqZWN0VXJsKTtcbiAgICB9XG4gICAgdGhpcy5vYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlKTtcbiAgICB0aGlzLnVwbG9hZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCB7IHVwbG9hZEltYWdlUGF0aCwgY3NyZiB9ID0gdGhpcy5uZ2IuY29uZmlnO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoY3NyZikge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKGNzcmYubmFtZSwgY3NyZi50b2tlbik7XG4gICAgfVxuICAgIGZvcm1EYXRhLmFwcGVuZCgnaW1hZ2UnLCBpbWFnZSk7XG5cbiAgICByZXR1cm4gdGhpcy51c2VyUmVzdEFwaVxuICAgICAgLnVzZXJJbWFnZVVwbG9hZCQoZm9ybURhdGEsIHVwbG9hZEltYWdlUGF0aClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICB0aGlzLm1pZGRsZXdhcmVzLmNhdGNoRXJyb3IoZXJyb3IpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2Uubm90aWZ5KGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5wcm9ncmVzcy5jb21wbGV0ZSgpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEh0dHBFdmVudDx7IHN1Y2Nlc3M6IGJvb2xlYW47IHBhdGg6IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9PikgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgIGNvbnN0IHBlcmNlbnREb25lID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcbiAgICAgICAgICB0aGlzLnByb2dyZXNzLm5leHQocGVyY2VudERvbmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKCFldmVudC5ib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudXNlckludGVyZmFjZS5ub3RpZnkoZXZlbnQuYm9keS5tZXNzYWdlLCAnRGlzbWlzcycsIG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJvdHRvbVNoZWV0UmVmLmRpc21pc3MoZXZlbnQuYm9keS5wYXRoKTtcbiAgICAgICAgICAgIHRoaXMudXNlckludGVyZmFjZS5ub3RpZnkoJ1N1Y2Nlc3NmdWxseSB1cGxvYWRlZC4nLCBudWxsLCAxMDAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub2JqZWN0VXJsKSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMub2JqZWN0VXJsKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,91 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Component, Inject } from '@angular/core';
6
+ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
7
+ import { DomSanitizer } from '@angular/platform-browser';
8
+ import { catchError, switchMap } from 'rxjs/operators';
9
+ import { HttpEventType, HttpResponse } from '@angular/common/http';
10
+ import { EMPTY } from 'rxjs';
11
+ import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
12
+ import { PB_CONFIG } from '../../../tokens/tokens';
13
+ import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
14
+ import { PbUserInterfaceService } from '../../internals/user-interfaces/user-interface.service';
15
+ export class UploadImageGalleryComponent {
16
+ constructor(imageCategoryList, userConfig, matDialogRef, sanitizer, userRestApi, middlewares, userInterface) {
17
+ this.imageCategoryList = imageCategoryList;
18
+ this.userConfig = userConfig;
19
+ this.matDialogRef = matDialogRef;
20
+ this.sanitizer = sanitizer;
21
+ this.userRestApi = userRestApi;
22
+ this.middlewares = middlewares;
23
+ this.userInterface = userInterface;
24
+ this.currentMenuItem = 'gallery';
25
+ }
26
+ changeCurrentMenuItem(item) {
27
+ this.currentMenuItem = item;
28
+ }
29
+ addImageToTemplate(imagePath = this.choseImage) {
30
+ this.matDialogRef.close(imagePath);
31
+ }
32
+ previewImage({ target }) {
33
+ this.uploadImageFile = target.files.item(0);
34
+ if (this.imagePreviewObjectUrl) {
35
+ URL.revokeObjectURL(this.imagePreviewObjectUrl);
36
+ }
37
+ this.imagePreviewObjectUrl = URL.createObjectURL(this.uploadImageFile);
38
+ this.uploadImagePreview = this.sanitizer.bypassSecurityTrustResourceUrl(this.imagePreviewObjectUrl);
39
+ }
40
+ startUploading() {
41
+ const { csrf, uploadImagePath } = this.userConfig;
42
+ const formData = new FormData();
43
+ if (csrf) {
44
+ formData.append(csrf.name, csrf.token);
45
+ }
46
+ formData.append('image', this.uploadImageFile);
47
+ return this.userRestApi
48
+ .userImageUpload$(formData, uploadImagePath)
49
+ .pipe(catchError((error) => this.middlewares.catchError(error).pipe(switchMap(() => {
50
+ this.userInterface.notify(error.message);
51
+ return EMPTY;
52
+ }))))
53
+ .subscribe((event) => {
54
+ if (event.type === HttpEventType.UploadProgress) {
55
+ // const percentDone = Math.round((100 * event.loaded) / event.total);
56
+ // this.progress.next(percentDone);
57
+ }
58
+ else if (event instanceof HttpResponse) {
59
+ if (!event.body.success) {
60
+ this.userInterface.notify(event.body.message, 'Dismiss', null);
61
+ }
62
+ else {
63
+ this.addImageToTemplate(event.body.path);
64
+ this.userInterface.notify('Successfully uploaded.', null, 1000);
65
+ }
66
+ }
67
+ });
68
+ }
69
+ ngOnDestroy() {
70
+ if (this.imagePreviewObjectUrl) {
71
+ URL.revokeObjectURL(this.imagePreviewObjectUrl);
72
+ }
73
+ }
74
+ }
75
+ UploadImageGalleryComponent.decorators = [
76
+ { type: Component, args: [{
77
+ selector: 'pb-upload-image-gallery',
78
+ template: "<!--\n ~ Copyright (c) 2024 Pobuca.\n ~ All rights reserved.\n -->\n\n<div fxLayout=\"column\" style=\"height: 100%;\">\n <h2 mat-dialog-title i18n=\"image-gallery|Modal Image gallery header\">Image Gallery</h2>\n <div class=\"mat-typography gallery-list-wrapper\" fxLayout fxLayoutGap=\"1rem\" fxFlex>\n <mat-list fxFlex=\"200px\">\n <mat-list-item (click)=\"changeCurrentMenuItem('gallery')\" [class.active]=\"currentMenuItem === 'gallery'\"\n i18n=\"image-gallery|Image list\">\n Gallery Image list\n </mat-list-item>\n <mat-list-item (click)=\"changeCurrentMenuItem('upload')\" [class.active]=\"currentMenuItem === 'upload'\"\n i18n=\"image-gallery|Upload an image\">\n Upload an image\n </mat-list-item>\n </mat-list>\n\n <ng-container *ngIf=\"currentMenuItem === 'gallery'\">\n <ng-container *ngIf=\"imageCategoryList.length;else emptyImageList\">\n <cdk-virtual-scroll-viewport itemSize=\"150\" [minBufferPx]=\"150 * 10\" fxFlex\n class=\"gallery-list\">\n <div *cdkVirtualFor=\"let imagePath of imageCategoryList\" class=\"gallery-list-item\"\n (click)=\"choseImage = imagePath\" i18n-matTooltip=\"image-gallery|Click to choose message\"\n matTooltip=\"Click to choose\">\n <img [src]=\"imagePath\" />\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"currentMenuItem === 'upload'\">\n <div class=\"upload-image\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex fxLayoutGap=\"1rem\">\n <label class=\"upload-image-item\" [class.empty]=\"!uploadImagePreview\">\n <div class=\"upload-image-item-overview\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <mat-icon>backup</mat-icon>\n </div>\n <img class=\"upload-image-item-preview\" *ngIf=\"uploadImagePreview\" [src]=\"uploadImagePreview\" />\n <input type=\"file\" fxHide pattern=\"image/*\" (change)=\"previewImage($event)\">\n </label>\n <button mat-flat-button color=\"primary\" (click)=\"startUploading()\" i18n=\"image-gallery|Upload and insert into template\">\n Upload and insert into template\n </button>\n </div>\n </ng-container>\n </div>\n <mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n=\"actions|Undo\">Cancel</button>\n <button mat-stroked-button color=\"primary\" [disabled]=\"!choseImage\" (click)=\"addImageToTemplate()\"\n i18n=\"actions|Start\">\n Add to template\n </button>\n </mat-dialog-actions>\n</div>\n\n\n<ng-template #emptyImageList>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"empty-category-notification\">\n <mat-icon>notifications</mat-icon>\n <h2 i18n=\"image-gallery|Image list is empty message\">Image list is empty!</h2>\n </div>\n</ng-template>\n",
79
+ styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */mat-list{background-color:#fff}mat-list mat-list-item{cursor:pointer}mat-list mat-list-item.active{background-color:#ccc}.gallery-list ::ng-deep .cdk-virtual-scroll-content-wrapper{display:grid;gap:.3rem;grid-template:auto/repeat(4,1fr)}.gallery-list-item{height:120px;background-color:#ccc;cursor:pointer}.gallery-list-item img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center}.upload-image-item{width:80%;height:200px;background-color:#ccc;position:relative;border-radius:3px;padding:1em;text-align:center}.upload-image-item.empty .upload-image-item-overview,.upload-image-item:hover .upload-image-item-overview{opacity:1}.upload-image-item-overview{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;cursor:pointer;transition:opacity .5s linear}.upload-image-item-overview mat-icon{height:50px;width:50px;font-size:50px}.upload-image-item-preview{max-height:100%}"]
80
+ },] }
81
+ ];
82
+ UploadImageGalleryComponent.ctorParameters = () => [
83
+ { type: Array, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] },
84
+ { type: undefined, decorators: [{ type: Inject, args: [PB_CONFIG,] }] },
85
+ { type: MatDialogRef },
86
+ { type: DomSanitizer },
87
+ { type: PbUserRestApiService },
88
+ { type: PbUserMiddlewaresService },
89
+ { type: PbUserInterfaceService }
90
+ ];
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWltYWdlLWdhbGxlcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtaW1hZ2UtZ2FsbGVyeS91cGxvYWQtaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQW1CLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFnQyxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFPaEcsTUFBTSxPQUFPLDJCQUEyQjtJQU90QyxZQUNrQyxpQkFBMkIsRUFDaEMsVUFBd0IsRUFDM0MsWUFBK0QsRUFDL0QsU0FBdUIsRUFDdkIsV0FBaUMsRUFDakMsV0FBcUMsRUFDckMsYUFBcUM7UUFOYixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVU7UUFDaEMsZUFBVSxHQUFW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LElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQzs7O1lBN0VGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyw2dEdBQW9EOzthQUVyRDs7O3dDQVNJLE1BQU0sU0FBQyxlQUFlOzRDQUN0QixNQUFNLFNBQUMsU0FBUztZQTFCSyxZQUFZO1lBQ1osWUFBWTtZQUs3QixvQkFBb0I7WUFHcEIsd0JBQXdCO1lBQ3hCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBTYWZlUmVzb3VyY2VVcmwsIERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFBCX0NPTkZJRyB9IGZyb20gJy4uLy4uLy4uL3Rva2Vucy90b2tlbnMnO1xuaW1wb3J0IHsgSUZvclJvb3RDb25mIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGJVc2VySW50ZXJmYWNlU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVybmFscy91c2VyLWludGVyZmFjZXMvdXNlci1pbnRlcmZhY2Uuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BiLXVwbG9hZC1pbWFnZS1nYWxsZXJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1pbWFnZS1nYWxsZXJ5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLWltYWdlLWdhbGxlcnkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRJbWFnZUdhbGxlcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjdXJyZW50TWVudUl0ZW06ICdnYWxsZXJ5JyB8ICd1cGxvYWQnID0gJ2dhbGxlcnknO1xuICBjaG9zZUltYWdlOiBzdHJpbmc7XG4gIHVwbG9hZEltYWdlUHJldmlldzogU2FmZVJlc291cmNlVXJsO1xuICBwcml2YXRlIGltYWdlUHJldmlld09iamVjdFVybDogc3RyaW5nO1xuICBwcml2YXRlIHVwbG9hZEltYWdlRmlsZTogRmlsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGltYWdlQ2F0ZWdvcnlMaXN0OiBzdHJpbmdbXSxcbiAgICBASW5qZWN0KFBCX0NPTkZJRykgcHJpdmF0ZSB1c2VyQ29uZmlnOiBJRm9yUm9vdENvbmYsXG4gICAgcHJpdmF0ZSBtYXREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxVcGxvYWRJbWFnZUdhbGxlcnlDb21wb25lbnQsIHN0cmluZz4sXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHVzZXJSZXN0QXBpOiBQYlVzZXJSZXN0QXBpU2VydmljZSxcbiAgICBwcml2YXRlIG1pZGRsZXdhcmVzOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VySW50ZXJmYWNlOiBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlXG4gICkge31cblxuICBjaGFuZ2VDdXJyZW50TWVudUl0ZW0oaXRlbTogJ2dhbGxlcnknIHwgJ3VwbG9hZCcpIHtcbiAgICB0aGlzLmN1cnJlbnRNZW51SXRlbSA9IGl0ZW07XG4gIH1cblxuICBhZGRJbWFnZVRvVGVtcGxhdGUoaW1hZ2VQYXRoID0gdGhpcy5jaG9zZUltYWdlKSB7XG4gICAgdGhpcy5tYXREaWFsb2dSZWYuY2xvc2UoaW1hZ2VQYXRoKTtcbiAgfVxuXG4gIHByZXZpZXdJbWFnZSh7IHRhcmdldCB9OiBFdmVudCkge1xuICAgIHRoaXMudXBsb2FkSW1hZ2VGaWxlID0gKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcy5pdGVtKDApO1xuICAgIGlmICh0aGlzLmltYWdlUHJldmlld09iamVjdFVybCkge1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLmltYWdlUHJldmlld09iamVjdFVybCk7XG4gICAgfVxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3T2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh0aGlzLnVwbG9hZEltYWdlRmlsZSk7XG4gICAgdGhpcy51cGxvYWRJbWFnZVByZXZpZXcgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy5pbWFnZVByZXZpZXdPYmplY3RVcmwpO1xuICB9XG5cbiAgc3RhcnRVcGxvYWRpbmcoKSB7XG4gICAgY29uc3QgeyBjc3JmLCB1cGxvYWRJbWFnZVBhdGggfSA9IHRoaXMudXNlckNvbmZpZztcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGlmIChjc3JmKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoY3NyZi5uYW1lLCBjc3JmLnRva2VuKTtcbiAgICB9XG4gICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIHRoaXMudXBsb2FkSW1hZ2VGaWxlKTtcbiAgICByZXR1cm4gdGhpcy51c2VyUmVzdEFwaVxuICAgICAgLnVzZXJJbWFnZVVwbG9hZCQoZm9ybURhdGEsIHVwbG9hZEltYWdlUGF0aClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICB0aGlzLm1pZGRsZXdhcmVzLmNhdGNoRXJyb3IoZXJyb3IpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2Uubm90aWZ5KGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEh0dHBFdmVudDx7IHN1Y2Nlc3M6IGJvb2xlYW47IHBhdGg6IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9PikgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgIC8vIGNvbnN0IHBlcmNlbnREb25lID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcbiAgICAgICAgICAvLyB0aGlzLnByb2dyZXNzLm5leHQocGVyY2VudERvbmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKCFldmVudC5ib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudXNlckludGVyZmFjZS5ub3RpZnkoZXZlbnQuYm9keS5tZXNzYWdlLCAnRGlzbWlzcycsIG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlVG9UZW1wbGF0ZShldmVudC5ib2R5LnBhdGgpO1xuICAgICAgICAgICAgdGhpcy51c2VySW50ZXJmYWNlLm5vdGlmeSgnU3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLicsIG51bGwsIDEwMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5pbWFnZVByZXZpZXdPYmplY3RVcmwpIHtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5pbWFnZVByZXZpZXdPYmplY3RVcmwpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Injectable } from '@angular/core';
6
+ /**
7
+ * A service that must be extended in case you want to rewrite the default
8
+ * uploading process. In case you have a Regular License, you'll get a simple upload
9
+ * service, for any other paid Licenses - you get an Image Gallery.
10
+ *
11
+ * It won't work if you have a Regular/Free License - you'll get an error on running the project,
12
+ * you need either an [Extended or Commercial License]{@link https://wlocalhost.org} key for this purpose.
13
+ *
14
+ * @example
15
+ * // Create a custom service
16
+ * class YourOwnUploaderService extends PbUserImageUploaderService {}
17
+ *
18
+ * // Rewrite it into AppModule
19
+ * { provide: PbUserImageUploaderService, useClass: YourOwnUploaderService }
20
+ */
21
+ export class PbUserImageUploaderService {
22
+ }
23
+ PbUserImageUploaderService.decorators = [
24
+ { type: Injectable }
25
+ ];
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbWFnZS11cGxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91c2VyLWltYWdlLXVwbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE1BQU0sT0FBZ0IsMEJBQTBCOzs7WUFEL0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgbXVzdCBiZSBleHRlbmRlZCBpbiBjYXNlIHlvdSB3YW50IHRvIHJld3JpdGUgdGhlIGRlZmF1bHRcbiAqIHVwbG9hZGluZyBwcm9jZXNzLiBJbiBjYXNlIHlvdSBoYXZlIGEgUmVndWxhciBMaWNlbnNlLCB5b3UnbGwgZ2V0IGEgc2ltcGxlIHVwbG9hZFxuICogc2VydmljZSwgZm9yIGFueSBvdGhlciBwYWlkIExpY2Vuc2VzIC0geW91IGdldCBhbiBJbWFnZSBHYWxsZXJ5LlxuICpcbiAqIEl0IHdvbid0IHdvcmsgaWYgeW91IGhhdmUgYSBSZWd1bGFyL0ZyZWUgTGljZW5zZSAtIHlvdSdsbCBnZXQgYW4gZXJyb3Igb24gcnVubmluZyB0aGUgcHJvamVjdCxcbiAqIHlvdSBuZWVkIGVpdGhlciBhbiBbRXh0ZW5kZWQgb3IgQ29tbWVyY2lhbCBMaWNlbnNlXXtAbGluayBodHRwczovL3dsb2NhbGhvc3Qub3JnfSBrZXkgZm9yIHRoaXMgcHVycG9zZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgY3VzdG9tIHNlcnZpY2VcbiAqIGNsYXNzIFlvdXJPd25VcGxvYWRlclNlcnZpY2UgZXh0ZW5kcyBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSB7fVxuICpcbiAqIC8vIFJld3JpdGUgaXQgaW50byBBcHBNb2R1bGVcbiAqIHsgcHJvdmlkZTogUGJVc2VySW1hZ2VVcGxvYWRlclNlcnZpY2UsIHVzZUNsYXNzOiBZb3VyT3duVXBsb2FkZXJTZXJ2aWNlIH1cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBiVXNlckltYWdlVXBsb2FkZXJTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEEgbWV0aG9kIGNhbGxlZCBvbmNlIGVuZCB1c2VyIGludGVuZHMgdG8gdXBsb2FkIGFuIGltYWdlLlxuICAgKiBJdCBtdXN0IHJldHVybnMgYWx3YXlzIGFuIGBPYnNlcnZhYmxlPHN0cmluZz5gIC0gd2hlcmUgYHN0cmluZ2AgaXMgdGhlIHVwbG9hZGVkXG4gICAqIGltYWdlIHBhdGguXG4gICAqXG4gICAqIEByZXR1cm4gVXBsb2FkZWQgaW1hZ2UgcGF0aC5cbiAgICovXG4gIGFic3RyYWN0IGJyb3dzZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xufVxuIl19
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { iif, throwError } from 'rxjs';
6
+ import { PbUserMiddlewaresService } from './pb-middlewares.service';
7
+ import { deferOf } from '../../utils';
8
+ /**
9
+ * @ignore
10
+ */
11
+ const NOT_ALLOWED = 'This feature is disabled in free version.';
12
+ /**
13
+ * @internal
14
+ */
15
+ export default class FreeUsersMiddleware extends PbUserMiddlewaresService {
16
+ constructor() {
17
+ super();
18
+ // tslint:disable-next-line: no-console
19
+ console.warn('You use the Regular License of Angular Email Builder, some limitations are applied. More info on https://wlocalhost.org');
20
+ }
21
+ chooseTemplate() {
22
+ throw new Error(NOT_ALLOWED);
23
+ }
24
+ exportFile(type) {
25
+ return iif(() => type === 'json', deferOf(type), throwError(new Error(NOT_ALLOWED)));
26
+ }
27
+ importFile(file) {
28
+ return iif(() => file.type === 'application/json', deferOf(file), throwError(new Error(NOT_ALLOWED)));
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJlZVVzZXJzTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9GcmVlVXNlcnNNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSx3QkFBd0IsRUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRywyQ0FBMkMsQ0FBQztBQUNoRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUJBQW9CLFNBQVEsd0JBQXdCO0lBQ3ZFO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUix1Q0FBdUM7UUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyx5SEFBeUgsQ0FBQyxDQUFDO0lBQzFJLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWlCO1FBQzFCLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFVO1FBQ25CLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IE9ic2VydmFibGUsIGlpZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsIFRFeHBvcnRUeXBlIH0gZnJvbSAnLi9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlJztcbmltcG9ydCB7IElVc2VyVGVtcGxhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVmZXJPZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmNvbnN0IE5PVF9BTExPV0VEID0gJ1RoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBpbiBmcmVlIHZlcnNpb24uJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZyZWVVc2Vyc01pZGRsZXdhcmUgZXh0ZW5kcyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybignWW91IHVzZSB0aGUgUmVndWxhciBMaWNlbnNlIG9mIEFuZ3VsYXIgRW1haWwgQnVpbGRlciwgc29tZSBsaW1pdGF0aW9ucyBhcmUgYXBwbGllZC4gTW9yZSBpbmZvIG9uIGh0dHBzOi8vd2xvY2FsaG9zdC5vcmcnKTtcbiAgfVxuXG4gIGNob29zZVRlbXBsYXRlKCk6IE9ic2VydmFibGU8eyBjYXRlZ29yeTogc3RyaW5nOyB0ZW1wbGF0ZTogSVVzZXJUZW1wbGF0ZSB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKE5PVF9BTExPV0VEKTtcbiAgfVxuXG4gIGV4cG9ydEZpbGUodHlwZTogVEV4cG9ydFR5cGUpOiBPYnNlcnZhYmxlPFRFeHBvcnRUeXBlPiB7XG4gICAgcmV0dXJuIGlpZigoKSA9PiB0eXBlID09PSAnanNvbicsIGRlZmVyT2YodHlwZSksIHRocm93RXJyb3IobmV3IEVycm9yKE5PVF9BTExPV0VEKSkpO1xuICB9XG5cbiAgaW1wb3J0RmlsZShmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxGaWxlPiB7XG4gICAgcmV0dXJuIGlpZigoKSA9PiBmaWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJywgZGVmZXJPZihmaWxlKSwgdGhyb3dFcnJvcihuZXcgRXJyb3IoTk9UX0FMTE9XRUQpKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { PbUserMiddlewaresService } from './pb-middlewares.service';
6
+ /**
7
+ * @internal
8
+ * No limitations are applied for Paid users
9
+ */
10
+ export default class PaidUsersMiddleware extends PbUserMiddlewaresService {
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFpZFVzZXJzTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9QYWlkVXNlcnNNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXBFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUJBQW9CLFNBQVEsd0JBQXdCO0NBQUciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHsgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIH0gZnJvbSAnLi9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIE5vIGxpbWl0YXRpb25zIGFyZSBhcHBsaWVkIGZvciBQYWlkIHVzZXJzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhaWRVc2Vyc01pZGRsZXdhcmUgZXh0ZW5kcyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2Uge31cbiJdfQ==
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import FreeUsersMiddleware from './FreeUsersMiddleware';
6
+ import PaidUsersMiddleware from './PaidUsersMiddleware';
7
+ export { FreeUsersMiddleware, PaidUsersMiddleware };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvdXNlci1taWRkbGV3YXJlLXNlcnZpY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxtQkFBbUIsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLG1CQUFtQixNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCBGcmVlVXNlcnNNaWRkbGV3YXJlIGZyb20gJy4vRnJlZVVzZXJzTWlkZGxld2FyZSc7XG5pbXBvcnQgUGFpZFVzZXJzTWlkZGxld2FyZSBmcm9tICcuL1BhaWRVc2Vyc01pZGRsZXdhcmUnO1xuXG5leHBvcnQgeyBGcmVlVXNlcnNNaWRkbGV3YXJlLCBQYWlkVXNlcnNNaWRkbGV3YXJlIH07XG4iXX0=
@@ -0,0 +1,195 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Injectable } from '@angular/core';
6
+ import { deferOf } from '../../utils';
7
+ /**
8
+ * This service allows you to control all your users' abilities within this builder. Lets say you want to implement user Roles or just
9
+ * need to disable some functionality for certain users based on purchase plan or on something else. You can allow or disallow almost
10
+ * everything.
11
+ *
12
+ * All the methods must return an Observable, so, in my opinion, that's the best part of this service, you can either return an
13
+ * [EMPTY Observable]{@link https://rxjs.dev/api/index/const/EMPTY}, a modified object or an (Info Modal).pipe(mapTo(EMPTY)) - I think you
14
+ * got the idea.
15
+ *
16
+ * I recommend always using a Modal or a Toast for forbidden actions.
17
+ *
18
+ * It won't work if you have a Regular/Free License - you'll get an error on running the project,
19
+ * you need either an [Extended or Commercial License]{@link https://wlocalhost.org} key for this purpose.
20
+ *
21
+ * @example
22
+ * // Create a custom service
23
+ * class YourOwnMiddlewareService extends PbUserMiddlewaresService {}
24
+ *
25
+ * // Rewrite it into AppModule
26
+ * { provide: PbUserMiddlewaresService, useClass: YourOwnMiddlewareService }
27
+ */
28
+ export class PbUserMiddlewaresService {
29
+ /**
30
+ * This method is called before sending the request to MJML Convertor. Use it to add some additional blocks or anything else to
31
+ * the PBEmail object.
32
+ * @param email PBEmail object that's being sent to MJML Convertor.
33
+ */
34
+ createHTMLTemplate(email) {
35
+ return deferOf(email);
36
+ }
37
+ /**
38
+ * Allow or Disallow preview window.
39
+ * @param state Coming Preview state
40
+ */
41
+ togglePreview(state) {
42
+ return deferOf(state);
43
+ }
44
+ /**
45
+ * Allow or Disallow preview devices.
46
+ * @param button Device's button that has been clicked
47
+ */
48
+ togglePreviewDevice(button) {
49
+ return deferOf(button.value);
50
+ }
51
+ /**
52
+ * Allow or disallow users to select certain templates based either on category or template object.
53
+ * @param category Template's category user has selected
54
+ * @param template Template user has selected
55
+ */
56
+ chooseTemplate(category, template) {
57
+ return deferOf({ category, template });
58
+ }
59
+ /**
60
+ * Allow, disallow or return the same path for all user's uploaded images.
61
+ * @param path Path of uploaded image
62
+ *
63
+ * @TODO Check if this middleware is being called before image has been uploaded
64
+ */
65
+ uploadImage(path) {
66
+ return deferOf(path);
67
+ }
68
+ /**
69
+ * Allow or disallow users to add blocks within email structures.
70
+ * @param event Event of dropped block
71
+ * @param column Column that block has been dropped
72
+ *
73
+ * @TODO add parent structure as a parameter
74
+ */
75
+ addBlock(event, column) {
76
+ return deferOf({ event, column });
77
+ }
78
+ /**
79
+ * Prevent user to edit blocks within email body.
80
+ * @param block Block that user intends to edit
81
+ */
82
+ editBlock(block) {
83
+ return deferOf(block);
84
+ }
85
+ /**
86
+ * Prevent user to remove blocks within email body.
87
+ * @param index Block's Index
88
+ * @param column Block's parent column
89
+ * @param block Block that user intends to remove
90
+ */
91
+ removeBlock(index, column, block) {
92
+ return deferOf({ index, column });
93
+ }
94
+ /**
95
+ * Prevent user to duplicate blocks within email body.
96
+ * @param index Block's Index
97
+ * @param column Block's parent column
98
+ * @param block Block that user intends to duplicate
99
+ */
100
+ duplicateBlock(index, column, block) {
101
+ return deferOf({ index, column, block });
102
+ }
103
+ /**
104
+ * Disable Drag and Drop certain blocks from Blocks list to Email body.
105
+ * Return TRUE to disable all blocks - no matter on block's data.
106
+ * @param block Block to allow or disallow from being dragged
107
+ */
108
+ disableBlockDragFromList(block) {
109
+ return deferOf(false);
110
+ }
111
+ /**
112
+ * Prevent users to sort blocks within email body.
113
+ * @param block Block that user intends to change the order
114
+ */
115
+ disableBlockDragWithinEmailBody(block) {
116
+ return deferOf(false);
117
+ }
118
+ /**
119
+ * Prevent user to add new structure.
120
+ * @param event Event of dropped structure
121
+ */
122
+ addStructure(event) {
123
+ return deferOf(event);
124
+ }
125
+ /**
126
+ * Prevent user to edit the structure.
127
+ * @param structure Structure that user intends to edit
128
+ */
129
+ editStructure(structure) {
130
+ return deferOf(structure);
131
+ }
132
+ /**
133
+ * Prevent user to remove the structure.
134
+ * @param index Index of the structure
135
+ * @param structure Structure that user intends to remove
136
+ */
137
+ removeStructure(index, structure) {
138
+ return deferOf(index);
139
+ }
140
+ /**
141
+ * Prevent user to duplicate the structure within email body.
142
+ * @param index Index of structure
143
+ * @param structure Structure that user intends to duplicate
144
+ */
145
+ duplicateStructure(index, structure) {
146
+ return deferOf(index);
147
+ }
148
+ /**
149
+ * Disable Drag and Drop certain structures from Structures list to Email body.
150
+ * Return TRUE to disable all structures.
151
+ * @param structure Structure to prevent from being dragged
152
+ */
153
+ disableStructureDragFromList(structure) {
154
+ return deferOf(false);
155
+ }
156
+ /**
157
+ * Allow or disallow users to sort structures within email body.
158
+ * @param structure Structure that user intends to change the order
159
+ */
160
+ disableStructureDragWithinEmailBody(structure) {
161
+ return deferOf(false);
162
+ }
163
+ /**
164
+ * I don't know why would you do that, but you can disable OnExit confirm modal.
165
+ * @param event Window [BeforeUnloadEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent}
166
+ */
167
+ preventWindowExit(event) {
168
+ return deferOf(event);
169
+ }
170
+ /**
171
+ * Allow or disallow user to export certain types of file
172
+ * @param type Type that user intends to download
173
+ */
174
+ exportFile(type) {
175
+ return deferOf(type);
176
+ }
177
+ /**
178
+ * Allow or disallow user to import certain types of file
179
+ * @param file Web APIs [FILE]{@link https://developer.mozilla.org/en-US/docs/Web/API/File}
180
+ */
181
+ importFile(file) {
182
+ return deferOf(file);
183
+ }
184
+ /**
185
+ * Catch all errors within email editor, it might not work 100%, it's still on working process.
186
+ * @param error Throwable Error
187
+ */
188
+ catchError(error) {
189
+ return deferOf(error);
190
+ }
191
+ }
192
+ PbUserMiddlewaresService.decorators = [
193
+ { type: Injectable }
194
+ ];
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItbWlkZGxld2FyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWlDdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsTUFBTSxPQUFnQix3QkFBd0I7SUFDNUM7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLEtBQWM7UUFDL0IsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxLQUFjO1FBQzFCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxNQUE0QjtRQUM5QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsUUFBZ0IsRUFBRSxRQUF1QjtRQUN0RCxPQUFPLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsS0FBcUIsRUFBRSxNQUFpQjtRQUMvQyxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsS0FBYztRQUN0QixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsS0FBYSxFQUFFLE1BQWlCLEVBQUUsS0FBYztRQUMxRCxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxLQUFhLEVBQUUsTUFBaUIsRUFBRSxLQUFjO1FBQzdELE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUMsS0FBYztRQUNyQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsK0JBQStCLENBQUMsS0FBYztRQUM1QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQXlCO1FBQ3BDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsU0FBcUI7UUFDakMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBYSxFQUFFLFNBQXFCO1FBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsS0FBYSxFQUFFLFNBQXFCO1FBQ3JELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNEJBQTRCLENBQUMsU0FBcUI7UUFDaEQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1DQUFtQyxDQUFDLFNBQXFCO1FBQ3ZELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUF3QjtRQUN4QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQWlCO1FBQzFCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsSUFBVTtRQUNuQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQWdDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OztZQXZMRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJU3RydWN0dXJlLCBJVXNlclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRCbG9ja3MgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0VsZW1lbnRzJztcbmltcG9ydCB7IFBCRW1haWwgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0RlZmF1bHRFbWFpbCc7XG5pbXBvcnQgeyBUUHJldmlld0RldmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmZXJPZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBFbWFpbCBlZGl0b3IgZXhwb3J0IGZpbGUgdHlwZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRFeHBvcnRUeXBlID0gJ2h0bWwnIHwgJ2pzb24nIHwgJ21qbWwnO1xuXG4vKipcbiAqIEVtYWlsIGVkaXRvciBpbXBvcnQgZmlsZSB0eXBlcy4gJ21qbWwnIHR5cGUgaXMgdW5kZXIgZGV2ZWxvcG1lbnQgLSBkb24ndCB1c2UgaXQgeWV0LlxuICovXG5leHBvcnQgdHlwZSBUSW1wb3J0VHlwZSA9ICdqc29uJyB8ICdtam1sJztcblxuLyoqXG4gKiBBZGQgbmV3IFN0cnVjdHVyZSB3aXRoaW4gZW1haWwgYm9keSBldmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBZGRTdHJ1Y3R1cmVFdmVudCBleHRlbmRzIENka0RyYWdEcm9wPFNldDxJU3RydWN0dXJlPiwgU2V0PElTdHJ1Y3R1cmU+PiB7XG4gIGl0ZW06IENka0RyYWc8SVN0cnVjdHVyZT47XG59XG5cbi8qKlxuICogQWRkIG5ldyBCbG9jayB3aXRoaW4gc3RydWN0dXJlcycgY29sdW1ucyBldmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBZGRCbG9ja0V2ZW50IGV4dGVuZHMgQ2RrRHJhZ0Ryb3A8VEJsb2Nrc1tdLCBUQmxvY2tzW10+IHtcbiAgaXRlbTogQ2RrRHJhZzxUQmxvY2tzPjtcbn1cblxuLyoqXG4gKiBQcmV2aWV3IGRldmljZSBidXR0b25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVByZXZpZXdUb2dnbGVCdXR0b24gZXh0ZW5kcyBNYXRCdXR0b25Ub2dnbGVDaGFuZ2Uge1xuICB2YWx1ZTogVFByZXZpZXdEZXZpY2U7XG59XG5cbi8qKlxuICogVGhpcyBzZXJ2aWNlIGFsbG93cyB5b3UgdG8gY29udHJvbCBhbGwgeW91ciB1c2VycycgYWJpbGl0aWVzIHdpdGhpbiB0aGlzIGJ1aWxkZXIuIExldHMgc2F5IHlvdSB3YW50IHRvIGltcGxlbWVudCB1c2VyIFJvbGVzIG9yIGp1c3RcbiAqIG5lZWQgdG8gZGlzYWJsZSBzb21lIGZ1bmN0aW9uYWxpdHkgZm9yIGNlcnRhaW4gdXNlcnMgYmFzZWQgb24gcHVyY2hhc2UgcGxhbiBvciBvbiBzb21ldGhpbmcgZWxzZS4gWW91IGNhbiBhbGxvdyBvciBkaXNhbGxvdyBhbG1vc3RcbiAqIGV2ZXJ5dGhpbmcuXG4gKlxuICogQWxsIHRoZSBtZXRob2RzIG11c3QgcmV0dXJuIGFuIE9ic2VydmFibGUsIHNvLCBpbiBteSBvcGluaW9uLCB0aGF0J3MgdGhlIGJlc3QgcGFydCBvZiB0aGlzIHNlcnZpY2UsIHlvdSBjYW4gZWl0aGVyIHJldHVybiBhblxuICogW0VNUFRZIE9ic2VydmFibGVde0BsaW5rIGh0dHBzOi8vcnhqcy5kZXYvYXBpL2luZGV4L2NvbnN0L0VNUFRZfSwgYSBtb2RpZmllZCBvYmplY3Qgb3IgYW4gKEluZm8gTW9kYWwpLnBpcGUobWFwVG8oRU1QVFkpKSAtIEkgdGhpbmsgeW91XG4gKiBnb3QgdGhlIGlkZWEuXG4gKlxuICogSSByZWNvbW1lbmQgYWx3YXlzIHVzaW5nIGEgTW9kYWwgb3IgYSBUb2FzdCBmb3IgZm9yYmlkZGVuIGFjdGlvbnMuXG4gKlxuICogSXQgd29uJ3Qgd29yayBpZiB5b3UgaGF2ZSBhIFJlZ3VsYXIvRnJlZSBMaWNlbnNlIC0geW91J2xsIGdldCBhbiBlcnJvciBvbiBydW5uaW5nIHRoZSBwcm9qZWN0LFxuICogeW91IG5lZWQgZWl0aGVyIGFuIFtFeHRlbmRlZCBvciBDb21tZXJjaWFsIExpY2Vuc2Vde0BsaW5rIGh0dHBzOi8vd2xvY2FsaG9zdC5vcmd9IGtleSBmb3IgdGhpcyBwdXJwb3NlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBjdXN0b20gc2VydmljZVxuICogY2xhc3MgWW91ck93bk1pZGRsZXdhcmVTZXJ2aWNlIGV4dGVuZHMgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIHt9XG4gKlxuICogLy8gUmV3cml0ZSBpdCBpbnRvIEFwcE1vZHVsZVxuICogeyBwcm92aWRlOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsIHVzZUNsYXNzOiBZb3VyT3duTWlkZGxld2FyZVNlcnZpY2UgfVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCB0byBNSk1MIENvbnZlcnRvci4gVXNlIGl0IHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgYmxvY2tzIG9yIGFueXRoaW5nIGVsc2UgdG9cbiAgICogdGhlIFBCRW1haWwgb2JqZWN0LlxuICAgKiBAcGFyYW0gZW1haWwgUEJFbWFpbCBvYmplY3QgdGhhdCdzIGJlaW5nIHNlbnQgdG8gTUpNTCBDb252ZXJ0b3IuXG4gICAqL1xuICBjcmVhdGVIVE1MVGVtcGxhdGUoZW1haWw6IFBCRW1haWwpOiBPYnNlcnZhYmxlPFBCRW1haWw+IHtcbiAgICByZXR1cm4gZGVmZXJPZihlbWFpbCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgRGlzYWxsb3cgcHJldmlldyB3aW5kb3cuXG4gICAqIEBwYXJhbSBzdGF0ZSBDb21pbmcgUHJldmlldyBzdGF0ZVxuICAgKi9cbiAgdG9nZ2xlUHJldmlldyhzdGF0ZTogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlck9mKHN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBvciBEaXNhbGxvdyBwcmV2aWV3IGRldmljZXMuXG4gICAqIEBwYXJhbSBidXR0b24gRGV2aWNlJ3MgYnV0dG9uIHRoYXQgaGFzIGJlZW4gY2xpY2tlZFxuICAgKi9cbiAgdG9nZ2xlUHJldmlld0RldmljZShidXR0b246IElQcmV2aWV3VG9nZ2xlQnV0dG9uKTogT2JzZXJ2YWJsZTxUUHJldmlld0RldmljZT4ge1xuICAgIHJldHVybiBkZWZlck9mKGJ1dHRvbi52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGNlcnRhaW4gdGVtcGxhdGVzIGJhc2VkIGVpdGhlciBvbiBjYXRlZ29yeSBvciB0ZW1wbGF0ZSBvYmplY3QuXG4gICAqIEBwYXJhbSBjYXRlZ29yeSBUZW1wbGF0ZSdzIGNhdGVnb3J5IHVzZXIgaGFzIHNlbGVjdGVkXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSB1c2VyIGhhcyBzZWxlY3RlZFxuICAgKi9cbiAgY2hvb3NlVGVtcGxhdGUoY2F0ZWdvcnk6IHN0cmluZywgdGVtcGxhdGU6IElVc2VyVGVtcGxhdGUpOiBPYnNlcnZhYmxlPHsgY2F0ZWdvcnk6IHN0cmluZzsgdGVtcGxhdGU6IElVc2VyVGVtcGxhdGUgfT4ge1xuICAgIHJldHVybiBkZWZlck9mKHsgY2F0ZWdvcnksIHRlbXBsYXRlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93LCBkaXNhbGxvdyBvciByZXR1cm4gdGhlIHNhbWUgcGF0aCBmb3IgYWxsIHVzZXIncyB1cGxvYWRlZCBpbWFnZXMuXG4gICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdXBsb2FkZWQgaW1hZ2VcbiAgICpcbiAgICogQFRPRE8gQ2hlY2sgaWYgdGhpcyBtaWRkbGV3YXJlIGlzIGJlaW5nIGNhbGxlZCBiZWZvcmUgaW1hZ2UgaGFzIGJlZW4gdXBsb2FkZWRcbiAgICovXG4gIHVwbG9hZEltYWdlKHBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGRlZmVyT2YocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlcnMgdG8gYWRkIGJsb2NrcyB3aXRoaW4gZW1haWwgc3RydWN0dXJlcy5cbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG9mIGRyb3BwZWQgYmxvY2tcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW4gdGhhdCBibG9jayBoYXMgYmVlbiBkcm9wcGVkXG4gICAqXG4gICAqIEBUT0RPIGFkZCBwYXJlbnQgc3RydWN0dXJlIGFzIGEgcGFyYW1ldGVyXG4gICAqL1xuICBhZGRCbG9jayhldmVudDogSUFkZEJsb2NrRXZlbnQsIGNvbHVtbjogVEJsb2Nrc1tdKTogT2JzZXJ2YWJsZTx7IGNvbHVtbjogVEJsb2Nrc1tdOyBldmVudDogSUFkZEJsb2NrRXZlbnQgfT4ge1xuICAgIHJldHVybiBkZWZlck9mKHsgZXZlbnQsIGNvbHVtbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gZWRpdCBibG9ja3Mgd2l0aGluIGVtYWlsIGJvZHkuXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0aGF0IHVzZXIgaW50ZW5kcyB0byBlZGl0XG4gICAqL1xuICBlZGl0QmxvY2soYmxvY2s6IFRCbG9ja3MpOiBPYnNlcnZhYmxlPFRCbG9ja3M+IHtcbiAgICByZXR1cm4gZGVmZXJPZihibG9jayk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCB1c2VyIHRvIHJlbW92ZSBibG9ja3Mgd2l0aGluIGVtYWlsIGJvZHkuXG4gICAqIEBwYXJhbSBpbmRleCBCbG9jaydzIEluZGV4XG4gICAqIEBwYXJhbSBjb2x1bW4gQmxvY2sncyBwYXJlbnQgY29sdW1uXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0aGF0IHVzZXIgaW50ZW5kcyB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUJsb2NrKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVEJsb2Nrc1tdLCBibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8eyBpbmRleDogbnVtYmVyOyBjb2x1bW46IFRCbG9ja3NbXSB9PiB7XG4gICAgcmV0dXJuIGRlZmVyT2YoeyBpbmRleCwgY29sdW1uIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgdXNlciB0byBkdXBsaWNhdGUgYmxvY2tzIHdpdGhpbiBlbWFpbCBib2R5LlxuICAgKiBAcGFyYW0gaW5kZXggQmxvY2sncyBJbmRleFxuICAgKiBAcGFyYW0gY29sdW1uIEJsb2NrJ3MgcGFyZW50IGNvbHVtblxuICAgKiBAcGFyYW0gYmxvY2sgQmxvY2sgdGhhdCB1c2VyIGludGVuZHMgdG8gZHVwbGljYXRlXG4gICAqL1xuICBkdXBsaWNhdGVCbG9jayhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSwgYmxvY2s6IFRCbG9ja3MpOiBPYnNlcnZhYmxlPHsgaW5kZXg6IG51bWJlcjsgY29sdW1uOiBUQmxvY2tzW107IGJsb2NrOiBUQmxvY2tzIH0+IHtcbiAgICByZXR1cm4gZGVmZXJPZih7IGluZGV4LCBjb2x1bW4sIGJsb2NrIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgRHJhZyBhbmQgRHJvcCBjZXJ0YWluIGJsb2NrcyBmcm9tIEJsb2NrcyBsaXN0IHRvIEVtYWlsIGJvZHkuXG4gICAqIFJldHVybiBUUlVFIHRvIGRpc2FibGUgYWxsIGJsb2NrcyAtIG5vIG1hdHRlciBvbiBibG9jaydzIGRhdGEuXG4gICAqIEBwYXJhbSBibG9jayBCbG9jayB0byBhbGxvdyBvciBkaXNhbGxvdyBmcm9tIGJlaW5nIGRyYWdnZWRcbiAgICovXG4gIGRpc2FibGVCbG9ja0RyYWdGcm9tTGlzdChibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlck9mKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXJzIHRvIHNvcnQgYmxvY2tzIHdpdGhpbiBlbWFpbCBib2R5LlxuICAgKiBAcGFyYW0gYmxvY2sgQmxvY2sgdGhhdCB1c2VyIGludGVuZHMgdG8gY2hhbmdlIHRoZSBvcmRlclxuICAgKi9cbiAgZGlzYWJsZUJsb2NrRHJhZ1dpdGhpbkVtYWlsQm9keShibG9jazogVEJsb2Nrcyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBkZWZlck9mKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gYWRkIG5ldyBzdHJ1Y3R1cmUuXG4gICAqIEBwYXJhbSBldmVudCBFdmVudCBvZiBkcm9wcGVkIHN0cnVjdHVyZVxuICAgKi9cbiAgYWRkU3RydWN0dXJlKGV2ZW50OiBJQWRkU3RydWN0dXJlRXZlbnQpOiBPYnNlcnZhYmxlPElBZGRTdHJ1Y3R1cmVFdmVudD4ge1xuICAgIHJldHVybiBkZWZlck9mKGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gZWRpdCB0aGUgc3RydWN0dXJlLlxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byBlZGl0XG4gICAqL1xuICBlZGl0U3RydWN0dXJlKHN0cnVjdHVyZTogSVN0cnVjdHVyZSk6IE9ic2VydmFibGU8SVN0cnVjdHVyZT4ge1xuICAgIHJldHVybiBkZWZlck9mKHN0cnVjdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCB1c2VyIHRvIHJlbW92ZSB0aGUgc3RydWN0dXJlLlxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHN0cnVjdHVyZVxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZVN0cnVjdHVyZShpbmRleDogbnVtYmVyLCBzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiBkZWZlck9mKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IHVzZXIgdG8gZHVwbGljYXRlIHRoZSBzdHJ1Y3R1cmUgd2l0aGluIGVtYWlsIGJvZHkuXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBzdHJ1Y3R1cmVcbiAgICogQHBhcmFtIHN0cnVjdHVyZSBTdHJ1Y3R1cmUgdGhhdCB1c2VyIGludGVuZHMgdG8gZHVwbGljYXRlXG4gICAqL1xuICBkdXBsaWNhdGVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlciwgc3RydWN0dXJlOiBJU3RydWN0dXJlKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gZGVmZXJPZihpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBEcmFnIGFuZCBEcm9wIGNlcnRhaW4gc3RydWN0dXJlcyBmcm9tIFN0cnVjdHVyZXMgbGlzdCB0byBFbWFpbCBib2R5LlxuICAgKiBSZXR1cm4gVFJVRSB0byBkaXNhYmxlIGFsbCBzdHJ1Y3R1cmVzLlxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0byBwcmV2ZW50IGZyb20gYmVpbmcgZHJhZ2dlZFxuICAgKi9cbiAgZGlzYWJsZVN0cnVjdHVyZURyYWdGcm9tTGlzdChzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gZGVmZXJPZihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlcnMgdG8gc29ydCBzdHJ1Y3R1cmVzIHdpdGhpbiBlbWFpbCBib2R5LlxuICAgKiBAcGFyYW0gc3RydWN0dXJlIFN0cnVjdHVyZSB0aGF0IHVzZXIgaW50ZW5kcyB0byBjaGFuZ2UgdGhlIG9yZGVyXG4gICAqL1xuICBkaXNhYmxlU3RydWN0dXJlRHJhZ1dpdGhpbkVtYWlsQm9keShzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gZGVmZXJPZihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogSSBkb24ndCBrbm93IHdoeSB3b3VsZCB5b3UgZG8gdGhhdCwgYnV0IHlvdSBjYW4gZGlzYWJsZSBPbkV4aXQgY29uZmlybSBtb2RhbC5cbiAgICogQHBhcmFtIGV2ZW50IFdpbmRvdyBbQmVmb3JlVW5sb2FkRXZlbnRde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9CZWZvcmVVbmxvYWRFdmVudH1cbiAgICovXG4gIHByZXZlbnRXaW5kb3dFeGl0KGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCk6IE9ic2VydmFibGU8QmVmb3JlVW5sb2FkRXZlbnQ+IHtcbiAgICByZXR1cm4gZGVmZXJPZihldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlciB0byBleHBvcnQgY2VydGFpbiB0eXBlcyBvZiBmaWxlXG4gICAqIEBwYXJhbSB0eXBlIFR5cGUgdGhhdCB1c2VyIGludGVuZHMgdG8gZG93bmxvYWRcbiAgICovXG4gIGV4cG9ydEZpbGUodHlwZTogVEV4cG9ydFR5cGUpOiBPYnNlcnZhYmxlPFRFeHBvcnRUeXBlPiB7XG4gICAgcmV0dXJuIGRlZmVyT2YodHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3IgZGlzYWxsb3cgdXNlciB0byBpbXBvcnQgY2VydGFpbiB0eXBlcyBvZiBmaWxlXG4gICAqIEBwYXJhbSBmaWxlIFdlYiBBUElzIFtGSUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZX1cbiAgICovXG4gIGltcG9ydEZpbGUoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8RmlsZT4ge1xuICAgIHJldHVybiBkZWZlck9mKGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhdGNoIGFsbCBlcnJvcnMgd2l0aGluIGVtYWlsIGVkaXRvciwgaXQgbWlnaHQgbm90IHdvcmsgMTAwJSwgaXQncyBzdGlsbCBvbiB3b3JraW5nIHByb2Nlc3MuXG4gICAqIEBwYXJhbSBlcnJvciBUaHJvd2FibGUgRXJyb3JcbiAgICovXG4gIGNhdGNoRXJyb3IoZXJyb3I6IEVycm9yIHwgSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPEVycm9yIHwgSHR0cEVycm9yUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gZGVmZXJPZihlcnJvcik7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { PbUserRestApiService } from './user-rest-api.service';
6
+ /**
7
+ * @internal
8
+ * The free User Rest API service for Regular license.
9
+ * No differences between other licenses for now, but might be in the future.
10
+ */
11
+ export default class FreeUsersRestApi extends PbUserRestApiService {
12
+ constructor(http) {
13
+ super(http);
14
+ }
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZS11c2Vycy1yZXN0LWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItcmVzdC1hcGktc2VydmljZS9mcmVlLXVzZXJzLXJlc3QtYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0Q7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEsb0JBQW9CO0lBQ2hFLFlBQVksSUFBZ0I7UUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBQYlVzZXJSZXN0QXBpU2VydmljZSB9IGZyb20gJy4vdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFRoZSBmcmVlIFVzZXIgUmVzdCBBUEkgc2VydmljZSBmb3IgUmVndWxhciBsaWNlbnNlLlxuICogTm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBvdGhlciBsaWNlbnNlcyBmb3Igbm93LCBidXQgbWlnaHQgYmUgaW4gdGhlIGZ1dHVyZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJlZVVzZXJzUmVzdEFwaSBleHRlbmRzIFBiVXNlclJlc3RBcGlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoaHR0cDogSHR0cENsaWVudCkge1xuICAgIHN1cGVyKGh0dHApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import FreeUsersRestApi from './free-users-rest-api.service';
6
+ export { FreeUsersRestApi };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvdXNlci1yZXN0LWFwaS1zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sZ0JBQWdCLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEZyZWVVc2Vyc1Jlc3RBcGkgZnJvbSAnLi9mcmVlLXVzZXJzLXJlc3QtYXBpLnNlcnZpY2UnO1xuZXhwb3J0IHtGcmVlVXNlcnNSZXN0QXBpfTtcbiJdfQ==