@pobuca/email-builder 1.0.0 → 1.1.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 (135) hide show
  1. package/README.md +1 -1
  2. package/bundles/pobuca-email-builder.umd.js +4464 -4414
  3. package/bundles/pobuca-email-builder.umd.js.map +1 -1
  4. package/bundles/pobuca-email-builder.umd.min.js +1 -1
  5. package/bundles/pobuca-email-builder.umd.min.js.map +1 -1
  6. package/esm2015/lib/classes/DefaultEmail.js +54 -53
  7. package/esm2015/lib/classes/Elements.js +229 -229
  8. package/esm2015/lib/classes/Structure.js +89 -89
  9. package/esm2015/lib/components/block/block.component.js +89 -89
  10. package/esm2015/lib/components/block-settings/block-settings.component.js +53 -53
  11. package/esm2015/lib/components/builder-container/builder-container.component.js +114 -114
  12. package/esm2015/lib/components/dialog.component.js +30 -30
  13. package/esm2015/lib/components/general-settings/general-settings.component.js +25 -25
  14. package/esm2015/lib/components/import-dialog/import-dialog.component.js +62 -62
  15. package/esm2015/lib/components/preview.component.js +89 -89
  16. package/esm2015/lib/components/structure/structure.component.js +163 -163
  17. package/esm2015/lib/components/structure-settings/structure-settings.component.js +31 -31
  18. package/esm2015/lib/components/template-list-dialog/template-list-dialog.component.js +45 -45
  19. package/esm2015/lib/directives/dynamic-component.directive.js +46 -46
  20. package/esm2015/lib/elements/abstract-block.js +23 -23
  21. package/esm2015/lib/elements/button/button.component.js +29 -29
  22. package/esm2015/lib/elements/divider/divider.component.js +30 -30
  23. package/esm2015/lib/elements/image/image.component.js +54 -54
  24. package/esm2015/lib/elements/social/social.component.js +42 -42
  25. package/esm2015/lib/elements/spacer/spacer.component.js +30 -30
  26. package/esm2015/lib/elements/text-element/text-element.component.js +80 -80
  27. package/esm2015/lib/groups/align.js +79 -79
  28. package/esm2015/lib/groups/back-repeat.js +55 -55
  29. package/esm2015/lib/groups/border.js +102 -102
  30. package/esm2015/lib/groups/color.js +139 -139
  31. package/esm2015/lib/groups/direction.js +63 -63
  32. package/esm2015/lib/groups/font-styles.js +127 -112
  33. package/esm2015/lib/groups/gaps.js +45 -45
  34. package/esm2015/lib/groups/line-height.js +68 -68
  35. package/esm2015/lib/groups/link.js +67 -67
  36. package/esm2015/lib/groups/margin.js +45 -45
  37. package/esm2015/lib/groups/padding.js +53 -53
  38. package/esm2015/lib/groups/upload-image.js +112 -112
  39. package/esm2015/lib/groups/width-height.js +94 -94
  40. package/esm2015/lib/interceptors/pb-interceptor.interceptor.js +51 -51
  41. package/esm2015/lib/interfaces/interfaces.js +13 -13
  42. package/esm2015/lib/pb-email-builder.component.js +258 -246
  43. package/esm2015/lib/pb-email-builder.module.js +291 -291
  44. package/esm2015/lib/pb-email-builder.service.js +134 -134
  45. package/esm2015/lib/pipes/slugify.pipe.js +39 -39
  46. package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js +175 -165
  47. package/esm2015/lib/services/internals/user-interfaces/user-interface.service.js +122 -122
  48. package/esm2015/lib/services/pb-storage/FreeUsersStorage.class.js +11 -11
  49. package/esm2015/lib/services/pb-storage/index.js +7 -7
  50. package/esm2015/lib/services/pb-storage/pb-storage.service.js +79 -79
  51. package/esm2015/lib/services/user-image-uploader-service/free-users-image-uploader.service.js +26 -26
  52. package/esm2015/lib/services/user-image-uploader-service/index.js +8 -8
  53. package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js +30 -30
  54. package/esm2015/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.js +112 -112
  55. package/esm2015/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.js +91 -91
  56. package/esm2015/lib/services/user-image-uploader-service/user-image-uploader.service.js +26 -26
  57. package/esm2015/lib/services/user-middleware-service/FreeUsersMiddleware.js +31 -31
  58. package/esm2015/lib/services/user-middleware-service/PaidUsersMiddleware.js +12 -12
  59. package/esm2015/lib/services/user-middleware-service/index.js +8 -8
  60. package/esm2015/lib/services/user-middleware-service/pb-middlewares.service.js +195 -195
  61. package/esm2015/lib/services/user-rest-api-service/free-users-rest-api.service.js +16 -16
  62. package/esm2015/lib/services/user-rest-api-service/index.js +7 -7
  63. package/esm2015/lib/services/user-rest-api-service/user-rest-api.service.js +116 -116
  64. package/esm2015/lib/tokens/private-tokens.js +17 -17
  65. package/esm2015/lib/tokens/tokens.js +159 -159
  66. package/esm2015/lib/utils.js +147 -147
  67. package/esm2015/pobuca-email-builder.js +42 -42
  68. package/esm2015/public_api.js +26 -26
  69. package/fesm2015/pobuca-email-builder.js +4206 -4168
  70. package/fesm2015/pobuca-email-builder.js.map +1 -1
  71. package/lib/classes/DefaultEmail.d.ts +10 -9
  72. package/lib/classes/Elements.d.ts +62 -62
  73. package/lib/classes/Structure.d.ts +11 -11
  74. package/lib/components/block/block.component.d.ts +25 -25
  75. package/lib/components/block-settings/block-settings.component.d.ts +18 -18
  76. package/lib/components/builder-container/builder-container.component.d.ts +36 -36
  77. package/lib/components/dialog.component.d.ts +10 -10
  78. package/lib/components/general-settings/general-settings.component.d.ts +6 -6
  79. package/lib/components/import-dialog/import-dialog.component.d.ts +16 -16
  80. package/lib/components/preview.component.d.ts +18 -18
  81. package/lib/components/structure/structure.component.d.ts +43 -43
  82. package/lib/components/structure-settings/structure-settings.component.d.ts +9 -9
  83. package/lib/components/template-list-dialog/template-list-dialog.component.d.ts +15 -15
  84. package/lib/directives/dynamic-component.directive.d.ts +13 -13
  85. package/lib/elements/abstract-block.d.ts +8 -8
  86. package/lib/elements/button/button.component.d.ts +18 -18
  87. package/lib/elements/divider/divider.component.d.ts +10 -10
  88. package/lib/elements/image/image.component.d.ts +19 -19
  89. package/lib/elements/social/social.component.d.ts +21 -21
  90. package/lib/elements/spacer/spacer.component.d.ts +5 -5
  91. package/lib/elements/text-element/text-element.component.d.ts +52 -52
  92. package/lib/groups/align.d.ts +17 -17
  93. package/lib/groups/back-repeat.d.ts +8 -8
  94. package/lib/groups/border.d.ts +13 -13
  95. package/lib/groups/color.d.ts +26 -26
  96. package/lib/groups/direction.d.ts +13 -13
  97. package/lib/groups/font-styles.d.ts +21 -17
  98. package/lib/groups/gaps.d.ts +7 -7
  99. package/lib/groups/line-height.d.ts +12 -12
  100. package/lib/groups/link.d.ts +11 -11
  101. package/lib/groups/margin.d.ts +8 -8
  102. package/lib/groups/padding.d.ts +8 -8
  103. package/lib/groups/upload-image.d.ts +19 -19
  104. package/lib/groups/width-height.d.ts +19 -19
  105. package/lib/interceptors/pb-interceptor.interceptor.d.ts +10 -10
  106. package/lib/interfaces/interfaces.d.ts +430 -422
  107. package/lib/pb-email-builder.component.d.ts +67 -67
  108. package/lib/pb-email-builder.module.d.ts +51 -51
  109. package/lib/pb-email-builder.service.d.ts +83 -83
  110. package/lib/pipes/slugify.pipe.d.ts +9 -9
  111. package/lib/services/internals/pb-email-object-store/pb-email-object-store.service.d.ts +50 -50
  112. package/lib/services/internals/user-interfaces/user-interface.service.d.ts +46 -46
  113. package/lib/services/pb-storage/FreeUsersStorage.class.d.ts +6 -6
  114. package/lib/services/pb-storage/index.d.ts +2 -2
  115. package/lib/services/pb-storage/pb-storage.service.d.ts +54 -54
  116. package/lib/services/user-image-uploader-service/free-users-image-uploader.service.d.ts +12 -12
  117. package/lib/services/user-image-uploader-service/index.d.ts +3 -3
  118. package/lib/services/user-image-uploader-service/paid-users-image-uploader.service.d.ts +14 -14
  119. package/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.d.ts +28 -28
  120. package/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.d.ts +27 -27
  121. package/lib/services/user-image-uploader-service/user-image-uploader.service.d.ts +26 -26
  122. package/lib/services/user-middleware-service/FreeUsersMiddleware.d.ts +15 -15
  123. package/lib/services/user-middleware-service/PaidUsersMiddleware.d.ts +7 -7
  124. package/lib/services/user-middleware-service/index.d.ts +3 -3
  125. package/lib/services/user-middleware-service/pb-middlewares.service.d.ts +190 -190
  126. package/lib/services/user-rest-api-service/free-users-rest-api.service.d.ts +10 -10
  127. package/lib/services/user-rest-api-service/index.d.ts +2 -2
  128. package/lib/services/user-rest-api-service/user-rest-api.service.d.ts +82 -82
  129. package/lib/tokens/private-tokens.d.ts +5 -5
  130. package/lib/tokens/tokens.d.ts +70 -70
  131. package/lib/utils.d.ts +88 -88
  132. package/package.json +8 -3
  133. package/pobuca-email-builder.d.ts +42 -42
  134. package/pobuca-email-builder.metadata.json +1 -1
  135. package/public_api.d.ts +16 -16
@@ -1,89 +1,89 @@
1
- /*
2
- * Copyright (c) 2024 Pobuca.
3
- * All rights reserved.
4
- */
5
- import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
6
- import { DomSanitizer } from '@angular/platform-browser';
7
- import { take } from 'rxjs/operators';
8
- import { PbUserMiddlewaresService } from '../services/user-middleware-service/pb-middlewares.service';
9
- const devicesMap = new Map([
10
- ['desktop', '1 1 100%'],
11
- ['smartphone', '1 1 360px'],
12
- ['tablet', '1 1 768px']
13
- ]);
14
- export class PreviewTemplateComponent {
15
- constructor(middlewares, sanitizer) {
16
- this.middlewares = middlewares;
17
- this.sanitizer = sanitizer;
18
- this.device = 'desktop';
19
- }
20
- changeDevice(button) {
21
- return this.middlewares
22
- .togglePreviewDevice(button)
23
- .pipe(take(1))
24
- .subscribe(device => {
25
- this.device = device;
26
- });
27
- }
28
- getFlexWidth() {
29
- return devicesMap.get(this.device);
30
- }
31
- ngOnInit() {
32
- this.src = URL.createObjectURL(new Blob([this.template], { type: 'text/html' }));
33
- this.templateSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
34
- }
35
- ngOnDestroy() {
36
- if (this.src) {
37
- URL.revokeObjectURL(this.src);
38
- }
39
- }
40
- }
41
- PreviewTemplateComponent.decorators = [
42
- { type: Component, args: [{
43
- selector: 'pb-preview-template',
44
- template: `
45
- <iframe [src]="templateSrc" [fxFlex]="getFlexWidth()"></iframe>
46
- <mat-button-toggle-group value="desktop" (change)="changeDevice($event)" vertical>
47
- <mat-button-toggle value="desktop" matTooltip="Desktop / 100%" matTooltipPosition="left">
48
- <mat-icon>desktop_windows</mat-icon>
49
- </mat-button-toggle>
50
- <mat-button-toggle value="tablet" matTooltip="Tablet / 768px" matTooltipPosition="left">
51
- <mat-icon>tablet</mat-icon>
52
- </mat-button-toggle>
53
- <mat-button-toggle value="smartphone" matTooltip="Smartphone / 360px" matTooltipPosition="left">
54
- <mat-icon>smartphone</mat-icon>
55
- </mat-button-toggle>
56
- </mat-button-toggle-group>
57
- `,
58
- changeDetection: ChangeDetectionStrategy.OnPush,
59
- styles: [`
60
- iframe {
61
- border: 0;
62
- will-change: width;
63
- transition: all 500ms ease-in-out;
64
- }
65
-
66
- /* iframe a[href] {
67
- pointer-events: none;
68
- } */
69
-
70
- /* iframe.active {
71
- opacity: 1;
72
- } */
73
-
74
- mat-button-toggle-group {
75
- position: absolute;
76
- right: 0;
77
- background: white;
78
- }
79
- `]
80
- },] }
81
- ];
82
- PreviewTemplateComponent.ctorParameters = () => [
83
- { type: PbUserMiddlewaresService },
84
- { type: DomSanitizer }
85
- ];
86
- PreviewTemplateComponent.propDecorators = {
87
- template: [{ type: Input }]
88
- };
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSx1QkFBdUIsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUl0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN6QixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7SUFDdkIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO0lBQzNCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztDQUN4QixDQUFDLENBQUM7QUEyQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQU1uQyxZQUFvQixXQUFxQyxFQUFVLFNBQXVCO1FBQXRFLGdCQUFXLEdBQVgsV0FBVyxDQUEwQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFIbEYsV0FBTSxHQUFtQixTQUFTLENBQUM7SUFHa0QsQ0FBQztJQUU5RixZQUFZLENBQUMsTUFBNkI7UUFDeEMsT0FBTyxJQUFJLENBQUMsV0FBVzthQUNwQixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7YUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNaLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQzs7O1lBdkVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7R0FhVDtnQkF3QkQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07eUJBdEI3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FvQkM7YUFHSjs7O1lBbERRLHdCQUF3QjtZQUh4QixZQUFZOzs7dUJBdURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXNlci1taWRkbGV3YXJlLXNlcnZpY2UvcGItbWlkZGxld2FyZXMuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIFRQcmV2aWV3RGV2aWNlID0gJ2Rlc2t0b3AnIHwgJ3NtYXJ0cGhvbmUnIHwgJ3RhYmxldCc7XG5cbmNvbnN0IGRldmljZXNNYXAgPSBuZXcgTWFwKFtcbiAgWydkZXNrdG9wJywgJzEgMSAxMDAlJ10sXG4gIFsnc21hcnRwaG9uZScsICcxIDEgMzYwcHgnXSxcbiAgWyd0YWJsZXQnLCAnMSAxIDc2OHB4J11cbl0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYi1wcmV2aWV3LXRlbXBsYXRlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aWZyYW1lIFtzcmNdPVwidGVtcGxhdGVTcmNcIiBbZnhGbGV4XT1cImdldEZsZXhXaWR0aCgpXCI+PC9pZnJhbWU+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIHZhbHVlPVwiZGVza3RvcFwiIChjaGFuZ2UpPVwiY2hhbmdlRGV2aWNlKCRldmVudClcIiB2ZXJ0aWNhbD5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImRlc2t0b3BcIiBtYXRUb29sdGlwPVwiRGVza3RvcCAvIDEwMCVcIiBtYXRUb29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgIDxtYXQtaWNvbj5kZXNrdG9wX3dpbmRvd3M8L21hdC1pY29uPlxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cInRhYmxldFwiIG1hdFRvb2x0aXA9XCJUYWJsZXQgLyA3NjhweFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj5cbiAgICAgICAgPG1hdC1pY29uPnRhYmxldDwvbWF0LWljb24+XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwic21hcnRwaG9uZVwiIG1hdFRvb2x0aXA9XCJTbWFydHBob25lIC8gMzYwcHhcIiBtYXRUb29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgIDxtYXQtaWNvbj5zbWFydHBob25lPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgaWZyYW1lIHtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICB3aWxsLWNoYW5nZTogd2lkdGg7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCA1MDBtcyBlYXNlLWluLW91dDtcbiAgICAgIH1cblxuICAgICAgLyogaWZyYW1lIGFbaHJlZl0ge1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH0gKi9cblxuICAgICAgLyogaWZyYW1lLmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9ICovXG5cbiAgICAgIG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICB9XG4gICAgYFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3VGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgc3JjOiBzdHJpbmc7XG4gIHByaXZhdGUgZGV2aWNlOiBUUHJldmlld0RldmljZSA9ICdkZXNrdG9wJztcbiAgdGVtcGxhdGVTcmM6IFNhZmVSZXNvdXJjZVVybDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1pZGRsZXdhcmVzOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgY2hhbmdlRGV2aWNlKGJ1dHRvbjogTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlKSB7XG4gICAgcmV0dXJuIHRoaXMubWlkZGxld2FyZXNcbiAgICAgIC50b2dnbGVQcmV2aWV3RGV2aWNlKGJ1dHRvbilcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKGRldmljZSA9PiB7XG4gICAgICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRGbGV4V2lkdGgoKSB7XG4gICAgcmV0dXJuIGRldmljZXNNYXAuZ2V0KHRoaXMuZGV2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGhpcy50ZW1wbGF0ZV0sIHsgdHlwZTogJ3RleHQvaHRtbCcgfSkpO1xuICAgIHRoaXMudGVtcGxhdGVTcmMgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy5zcmMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3JjKSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc3JjKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
6
+ import { DomSanitizer } from '@angular/platform-browser';
7
+ import { take } from 'rxjs/operators';
8
+ import { PbUserMiddlewaresService } from '../services/user-middleware-service/pb-middlewares.service';
9
+ const devicesMap = new Map([
10
+ ['desktop', '1 1 100%'],
11
+ ['smartphone', '1 1 360px'],
12
+ ['tablet', '1 1 768px']
13
+ ]);
14
+ export class PreviewTemplateComponent {
15
+ constructor(middlewares, sanitizer) {
16
+ this.middlewares = middlewares;
17
+ this.sanitizer = sanitizer;
18
+ this.device = 'desktop';
19
+ }
20
+ changeDevice(button) {
21
+ return this.middlewares
22
+ .togglePreviewDevice(button)
23
+ .pipe(take(1))
24
+ .subscribe(device => {
25
+ this.device = device;
26
+ });
27
+ }
28
+ getFlexWidth() {
29
+ return devicesMap.get(this.device);
30
+ }
31
+ ngOnInit() {
32
+ this.src = URL.createObjectURL(new Blob([this.template], { type: 'text/html' }));
33
+ this.templateSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
34
+ }
35
+ ngOnDestroy() {
36
+ if (this.src) {
37
+ URL.revokeObjectURL(this.src);
38
+ }
39
+ }
40
+ }
41
+ PreviewTemplateComponent.decorators = [
42
+ { type: Component, args: [{
43
+ selector: 'pb-preview-template',
44
+ template: `
45
+ <iframe [src]="templateSrc" [fxFlex]="getFlexWidth()"></iframe>
46
+ <mat-button-toggle-group value="desktop" (change)="changeDevice($event)" vertical>
47
+ <mat-button-toggle value="desktop" matTooltip="Desktop / 100%" matTooltipPosition="left">
48
+ <mat-icon>desktop_windows</mat-icon>
49
+ </mat-button-toggle>
50
+ <mat-button-toggle value="tablet" matTooltip="Tablet / 768px" matTooltipPosition="left">
51
+ <mat-icon>tablet</mat-icon>
52
+ </mat-button-toggle>
53
+ <mat-button-toggle value="smartphone" matTooltip="Smartphone / 360px" matTooltipPosition="left">
54
+ <mat-icon>smartphone</mat-icon>
55
+ </mat-button-toggle>
56
+ </mat-button-toggle-group>
57
+ `,
58
+ changeDetection: ChangeDetectionStrategy.OnPush,
59
+ styles: [`
60
+ iframe {
61
+ border: 0;
62
+ will-change: width;
63
+ transition: all 500ms ease-in-out;
64
+ }
65
+
66
+ /* iframe a[href] {
67
+ pointer-events: none;
68
+ } */
69
+
70
+ /* iframe.active {
71
+ opacity: 1;
72
+ } */
73
+
74
+ mat-button-toggle-group {
75
+ position: absolute;
76
+ right: 0;
77
+ background: white;
78
+ }
79
+ `]
80
+ },] }
81
+ ];
82
+ PreviewTemplateComponent.ctorParameters = () => [
83
+ { type: PbUserMiddlewaresService },
84
+ { type: DomSanitizer }
85
+ ];
86
+ PreviewTemplateComponent.propDecorators = {
87
+ template: [{ type: Input }]
88
+ };
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSx1QkFBdUIsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUl0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN6QixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7SUFDdkIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO0lBQzNCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztDQUN4QixDQUFDLENBQUM7QUEyQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQU1uQyxZQUFvQixXQUFxQyxFQUFVLFNBQXVCO1FBQXRFLGdCQUFXLEdBQVgsV0FBVyxDQUEwQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFIbEYsV0FBTSxHQUFtQixTQUFTLENBQUM7SUFHa0QsQ0FBQztJQUU5RixZQUFZLENBQUMsTUFBNkI7UUFDeEMsT0FBTyxJQUFJLENBQUMsV0FBVzthQUNwQixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7YUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNaLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQzs7O1lBdkVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7R0FhVDtnQkF3QkQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07eUJBdEI3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FvQkM7YUFHSjs7O1lBbERRLHdCQUF3QjtZQUh4QixZQUFZOzs7dUJBdURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIFRQcmV2aWV3RGV2aWNlID0gJ2Rlc2t0b3AnIHwgJ3NtYXJ0cGhvbmUnIHwgJ3RhYmxldCc7XHJcblxyXG5jb25zdCBkZXZpY2VzTWFwID0gbmV3IE1hcChbXHJcbiAgWydkZXNrdG9wJywgJzEgMSAxMDAlJ10sXHJcbiAgWydzbWFydHBob25lJywgJzEgMSAzNjBweCddLFxyXG4gIFsndGFibGV0JywgJzEgMSA3NjhweCddXHJcbl0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYi1wcmV2aWV3LXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGlmcmFtZSBbc3JjXT1cInRlbXBsYXRlU3JjXCIgW2Z4RmxleF09XCJnZXRGbGV4V2lkdGgoKVwiPjwvaWZyYW1lPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIHZhbHVlPVwiZGVza3RvcFwiIChjaGFuZ2UpPVwiY2hhbmdlRGV2aWNlKCRldmVudClcIiB2ZXJ0aWNhbD5cclxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiZGVza3RvcFwiIG1hdFRvb2x0aXA9XCJEZXNrdG9wIC8gMTAwJVwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj5cclxuICAgICAgICA8bWF0LWljb24+ZGVza3RvcF93aW5kb3dzPC9tYXQtaWNvbj5cclxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwidGFibGV0XCIgbWF0VG9vbHRpcD1cIlRhYmxldCAvIDc2OHB4XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj50YWJsZXQ8L21hdC1pY29uPlxyXG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJzbWFydHBob25lXCIgbWF0VG9vbHRpcD1cIlNtYXJ0cGhvbmUgLyAzNjBweFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj5cclxuICAgICAgICA8bWF0LWljb24+c21hcnRwaG9uZTwvbWF0LWljb24+XHJcbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXHJcbiAgICBgXHJcbiAgICAgIGlmcmFtZSB7XHJcbiAgICAgICAgYm9yZGVyOiAwO1xyXG4gICAgICAgIHdpbGwtY2hhbmdlOiB3aWR0aDtcclxuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgNTAwbXMgZWFzZS1pbi1vdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIGlmcmFtZSBhW2hyZWZdIHtcclxuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgICAgfSAqL1xyXG5cclxuICAgICAgLyogaWZyYW1lLmFjdGl2ZSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgfSAqL1xyXG5cclxuICAgICAgbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICByaWdodDogMDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgfVxyXG4gICAgYFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFByZXZpZXdUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3JjOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBkZXZpY2U6IFRQcmV2aWV3RGV2aWNlID0gJ2Rlc2t0b3AnO1xyXG4gIHRlbXBsYXRlU3JjOiBTYWZlUmVzb3VyY2VVcmw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWlkZGxld2FyZXM6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSwgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cclxuXHJcbiAgY2hhbmdlRGV2aWNlKGJ1dHRvbjogTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5taWRkbGV3YXJlc1xyXG4gICAgICAudG9nZ2xlUHJldmlld0RldmljZShidXR0b24pXHJcbiAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoZGV2aWNlID0+IHtcclxuICAgICAgICB0aGlzLmRldmljZSA9IGRldmljZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGbGV4V2lkdGgoKSB7XHJcbiAgICByZXR1cm4gZGV2aWNlc01hcC5nZXQodGhpcy5kZXZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3RoaXMudGVtcGxhdGVdLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pKTtcclxuICAgIHRoaXMudGVtcGxhdGVTcmMgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy5zcmMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zcmMpIHtcclxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNyYyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,163 +1,163 @@
1
- /*
2
- * Copyright (c) 2024 Pobuca.
3
- * All rights reserved.
4
- */
5
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, HostListener, Input, ViewEncapsulation } from '@angular/core';
6
- import { exhaustMap, filter, map, take, takeUntil } from 'rxjs/operators';
7
- import { Subject } from 'rxjs';
8
- import { defaultColumnsOptions, Structure } from '../../classes/Structure';
9
- import { createBorder } from '../../utils';
10
- import { PbUserMiddlewaresService } from '../../services/user-middleware-service/pb-middlewares.service';
11
- import { PbUserInterfaceService } from '../../services/internals/user-interfaces/user-interface.service';
12
- import { PbEmailObjectStoreService } from '../../services/internals/pb-email-object-store/pb-email-object-store.service';
13
- export class StructureComponent {
14
- constructor(userInterfaceService, emailObjectStore, chRef, pbMiddlewaresService) {
15
- this.userInterfaceService = userInterfaceService;
16
- this.emailObjectStore = emailObjectStore;
17
- this.chRef = chRef;
18
- this.pbMiddlewaresService = pbMiddlewaresService;
19
- this.structure = new Structure();
20
- this.cdkDropListConnectedTo$ = this.userInterfaceService.cdkDropListConnectedTo$;
21
- this.validate = function ({ rectangle }) {
22
- const colFr = +(rectangle.width / this.fr).toFixed(2);
23
- return colFr > 1 && colFr <= 10 - this.structure.columns;
24
- }.bind(this);
25
- // sectionWidth$ = this.userInterfaceService.currentEditingStructure$.pipe(
26
- // withLatestFrom(this.emailObjectStore.emailBodyWidth$),
27
- // map(([{ options }, width]) => {
28
- // return options.fullWidth ? '100%' : width;
29
- // })
30
- // );
31
- this.componentIsDestroyed$ = new Subject();
32
- }
33
- get isStructureActive() {
34
- return this.isActive;
35
- }
36
- // @HostBinding('style.width') get sectionWidth(): string | number {
37
- // console.log(this.emailObjectStore.Email.general.width.value);
38
- // return this.structure.options.fullWidth ? '100%' : this.emailObjectStore.Email.general.width.value;
39
- // }
40
- // Don't close right panel on structure click
41
- onHostClick(event) {
42
- event.stopImmediatePropagation();
43
- this.editStructure();
44
- }
45
- removeStructure(event) {
46
- event.stopPropagation();
47
- this.pbMiddlewaresService
48
- .removeStructure(this.index, this.structure)
49
- .pipe(exhaustMap(() => this.userInterfaceService.confirmDialog$()), filter(removeAllowed => removeAllowed), take(1))
50
- .subscribe(() => {
51
- this.emailObjectStore.removeStructure(this.index);
52
- this.userInterfaceService.resetElements();
53
- });
54
- }
55
- duplicateStructure(event) {
56
- event.stopPropagation();
57
- this.pbMiddlewaresService
58
- .duplicateStructure(this.index, this.structure)
59
- .pipe(map(() => this.emailObjectStore.duplicateStructure(this.index)), take(1))
60
- .subscribe(newStructure => {
61
- this.editStructure(newStructure);
62
- });
63
- }
64
- dropNewBlock(event, column) {
65
- if (event.previousContainer === event.container) {
66
- this.emailObjectStore.addBlock(event, column);
67
- }
68
- else {
69
- this.pbMiddlewaresService
70
- .addBlock(event, column)
71
- .pipe(map(newData => this.emailObjectStore.addBlock(newData.event, newData.column)))
72
- .subscribe(() => {
73
- // this.userInterfaceService.editBlock(newBlock);
74
- this.chRef.markForCheck();
75
- });
76
- }
77
- }
78
- disableBlockDrag$(block) {
79
- return this.pbMiddlewaresService.disableBlockDragWithinEmailBody(block).pipe(take(1));
80
- }
81
- editStructure(structure = this.structure) {
82
- this.pbMiddlewaresService
83
- .editStructure(structure)
84
- .pipe(take(1))
85
- .subscribe(strctr => {
86
- this.userInterfaceService.editStructure(strctr);
87
- });
88
- }
89
- getResizeEdges(columnKey) {
90
- return {
91
- right: columnKey + 1 !== this.structure.columns,
92
- left: columnKey !== 0
93
- };
94
- }
95
- createColumnId(columnKey) {
96
- return `column-droplist-${columnKey}-${this.index}`;
97
- }
98
- getColumnStyles(columnKey) {
99
- const { options: { gaps = [4, 4], columns = [] } } = this.structure;
100
- const column = columns[columnKey] || defaultColumnsOptions;
101
- let verticalAlign = 'center';
102
- if (column.verticalAlign === 'bottom') {
103
- verticalAlign = 'flex-end';
104
- }
105
- else if (column.verticalAlign === 'top') {
106
- verticalAlign = 'flex-start';
107
- }
108
- return Object.assign({ padding: gaps.map(gap => `${gap}px`).join(' '), backgroundColor: column.background.color, placeSelf: `${verticalAlign} stretch` }, createBorder(column.border)
109
- // ...createBackground(column.background)
110
- );
111
- }
112
- onResizeEnd({ rectangle }, key) {
113
- this.structure.options.columnsWidth[key] = +(rectangle.width / this.fr).toFixed(2);
114
- }
115
- ngDoCheck() {
116
- if (this.isActive || this.userInterfaceService.currentStructureContainsActiveBlock(this.structure)) {
117
- this.chRef.markForCheck();
118
- }
119
- }
120
- ngOnInit() {
121
- // Add columns options in case of old template
122
- const { columns, columnsWidth } = this.structure.options;
123
- if (!columns || !columnsWidth) {
124
- const { type, elements, options } = this.structure;
125
- this.editStructure(new Structure(type, elements, options));
126
- }
127
- const width = this.emailObjectStore.Email.general.width.value;
128
- const [, horizontalGap] = this.structure.options.gaps;
129
- this.fr = (width - horizontalGap * this.structure.columns) / 10;
130
- this.userInterfaceService.currentEditingStructure$
131
- .pipe(map(currentEditingStructure => currentEditingStructure === this.structure), takeUntil(this.componentIsDestroyed$))
132
- .subscribe(isActive => {
133
- this.isActive = isActive;
134
- });
135
- }
136
- ngOnDestroy() {
137
- this.componentIsDestroyed$.next('');
138
- this.componentIsDestroyed$.complete();
139
- }
140
- }
141
- StructureComponent.decorators = [
142
- { type: Component, args: [{
143
- selector: 'pb-structure',
144
- template: "<!--\n ~ Copyright (c) 2024 Pobuca.\n ~ All rights reserved.\n -->\n\n<div class=\"column\" *ngFor=\"let column of structure.elements; let index = index\" cdkDropList mwlResizable\n [enableGhostResize]=\"false\" [resizeSnapGrid]=\"{ left: fr, right: fr }\" [resizeEdges]=\"getResizeEdges(index)\"\n [validateResize]=\"validate\" (resizing)=\"onResizeEnd($event, index)\"\n (cdkDropListDropped)=\"dropNewBlock($event, column)\" [class.empty]=\"!column.length\" [ngStyle]=\"getColumnStyles(index)\"\n [cdkDropListConnectedTo]=\"cdkDropListConnectedTo$ | async\" [cdkDropListData]=\"column\" [id]=\"createColumnId(index)\">\n\n <div *ngIf=\"!column.length\" class=\"empty-block\" i18n=\"structure|Inside empty block\">DnD blocks</div>\n\n <pb-block *ngFor=\"let block of column; let index = index\" cdkDrag [cdkDragData]=\"block\" [block]=\"block\"\n [index]=\"index\" [column]=\"column\" [cdkDragDisabled]=\"disableBlockDrag$(block) | async\">\n <button mat-icon-button class=\"move\" cdkDragHandle i18n-matTooltip=\"block|Change Block order\"\n matTooltip=\"Change Block order\" *ngIf=\"!(disableBlockDrag$(block) | async)\">\n <mat-icon i18n-aria-label=\"block|Move block\" aria-label=\"Move block\" inline>pan_tool</mat-icon>\n </button>\n </pb-block>\n</div>\n\n<ng-content select=\".move\"></ng-content>\n<div class=\"tools\" fxLayoutGap=\"0.25rem\">\n <button mat-icon-button class=\"edit\" color=\"primary\" i18n-matTooltip=\"structure|Change structure settings\"\n matTooltip=\"Change structure settings\">\n <mat-icon i18n-aria-label=\"structure|Edit structure\" aria-label=\"Edit structure\" inline>edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"duplicateStructure($event)\" i18n-matTooltip=\"structure|Duplicate structure\"\n matTooltip=\"Duplicate structure\">\n <mat-icon i18n-aria-label=\"structure|Duplicate structure\" aria-label=\"Duplicate structure\" inline>file_copy\n </mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"removeStructure($event)\" i18n-matTooltip=\"structure|Delete structure\"\n matTooltip=\"Delete structure\">\n <mat-icon i18n-aria-label=\"structure|Remove Structure\" aria-label=\"Remove Structure\" inline>delete_forever\n </mat-icon>\n </button>\n</div>\n",
145
- changeDetection: ChangeDetectionStrategy.OnPush,
146
- encapsulation: ViewEncapsulation.Emulated,
147
- exportAs: 'structure',
148
- styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */pb-block>.cdk-drag-handle{position:absolute;top:-30px;right:0;cursor:move;background-color:rgba(63,81,181,.5);color:#fff;border-radius:50% 50% 0 0;opacity:0;height:30px;width:30px;font-size:smaller}pb-block>.cdk-drag-handle mat-icon{margin-top:-8px}pb-block>.cdk-drag-handle:hover{background-color:#3f51b5}pb-block.cdk-drag-preview .cdk-drag-handle,pb-block:hover .cdk-drag-handle{opacity:1}:host{display:grid;border:1px solid #ccc;position:relative;grid-template-columns:1fr}:host>.tools{direction:ltr;position:absolute;opacity:0;left:0;bottom:-25px;color:#ff4081}:host>.tools button{background-color:#fff;border-radius:0 0 3px 3px;height:25px;width:25px;line-height:0}:host.active,:host.cdk-drag-placeholder,:host.cdk-drag-preview,:host:hover{box-shadow:0 0 1px 2px #ff4081;z-index:1}:host:hover>.tools{opacity:1}:host:hover>.tools button{background-color:#ff4081;color:#fff}:host.active>.tools>.edit{display:none}:host.cols_2{grid-template-columns:repeat(2,6fr)}:host.cols_3{grid-template-columns:repeat(3,4fr)}:host.cols_4{grid-template-columns:repeat(4,3fr)}:host.cols_12{grid-template-columns:7fr 5fr}:host.cols_21{grid-template-columns:5fr 7fr}:host .cdk-drop-list-dragging,:host .cdk-drop-list-receiving{height:100%}:host>.column{box-sizing:border-box}:host>.column.empty{height:60px}:host>.column.empty .empty-block{background-color:rgba(101,99,99,.21);height:100%;display:flex;justify-content:center;place-items:center;flex-direction:column;color:rgba(101,99,99,.3);font-size:small}:host>.column.empty.cdk-drop-list-dragging .empty-block{display:none}:host>.column.empty>.cdk-drag-placeholder{min-height:60px!important}"]
149
- },] }
150
- ];
151
- StructureComponent.ctorParameters = () => [
152
- { type: PbUserInterfaceService },
153
- { type: PbEmailObjectStoreService },
154
- { type: ChangeDetectorRef },
155
- { type: PbUserMiddlewaresService }
156
- ];
157
- StructureComponent.propDecorators = {
158
- structure: [{ type: Input }],
159
- index: [{ type: Input }],
160
- isStructureActive: [{ type: HostBinding, args: ['class.active',] }],
161
- onHostClick: [{ type: HostListener, args: ['click', ['$event'],] }]
162
- };
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0cnVjdHVyZS9zdHJ1Y3R1cmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN6SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQVV6SCxNQUFNLE9BQU8sa0JBQWtCO0lBa0I3QixZQUNVLG9CQUE0QyxFQUM1QyxnQkFBMkMsRUFDM0MsS0FBd0IsRUFDeEIsb0JBQThDO1FBSDlDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBd0I7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTBCO1FBckIvQyxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUc5Qiw0QkFBdUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQUM7UUFFNUUsYUFBUSxHQUFHLFVBQVUsRUFBRSxTQUFTLEVBQWU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxPQUFPLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUMzRCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2IsMkVBQTJFO1FBQzNFLDJEQUEyRDtRQUMzRCxvQ0FBb0M7UUFDcEMsaURBQWlEO1FBQ2pELE9BQU87UUFDUCxLQUFLO1FBQ1ksMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQU9wRCxDQUFDO0lBRUosSUFBaUMsaUJBQWlCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLGtFQUFrRTtJQUNsRSx3R0FBd0c7SUFDeEcsSUFBSTtJQUVKLDZDQUE2QztJQUNWLFdBQVcsQ0FBQyxLQUFpQjtRQUM5RCxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFZO1FBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsb0JBQW9CO2FBQ3RCLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDM0MsSUFBSSxDQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxFQUFFLENBQUMsRUFDNUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBWTtRQUM3QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDOUMsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQy9ELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjthQUNBLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFxQixFQUFFLE1BQWlCO1FBQ25ELElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNMLElBQUksQ0FBQyxvQkFBb0I7aUJBQ3RCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO2lCQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUNuRixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLGlEQUFpRDtnQkFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWM7UUFDOUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWlCO1FBQzlCLE9BQU87WUFDTCxLQUFLLEVBQUUsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFDL0MsSUFBSSxFQUFFLFNBQVMsS0FBSyxDQUFDO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWlCO1FBQzlCLE9BQU8sbUJBQW1CLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFpQjtRQUMvQixNQUFNLEVBQ0osT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFDekMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ25CLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxxQkFBcUIsQ0FBQztRQUUzRCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDN0IsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLEtBQUssRUFBRTtZQUN6QyxhQUFhLEdBQUcsWUFBWSxDQUFDO1NBQzlCO1FBRUQsdUJBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUM5QyxlQUFlLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQ3hDLFNBQVMsRUFBRSxHQUFHLGFBQWEsVUFBVSxJQUNsQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5Qix5Q0FBeUM7VUFDekM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFlLEVBQUUsR0FBVztRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2xHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLDhDQUE4QztRQUM5QyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDN0IsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM1RDtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDOUQsTUFBTSxDQUFDLEVBQUUsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3RELElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWhFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0I7YUFDL0MsSUFBSSxDQUNILEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUMxRSxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQ3RDO2FBQ0EsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QyxDQUFDOzs7WUEzS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxjQUFjO2dCQUN4Qixrd0VBQXlDO2dCQUV6QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7Z0JBQ3pDLFFBQVEsRUFBRSxXQUFXOzthQUN0Qjs7O1lBVlEsc0JBQXNCO1lBQ3RCLHlCQUF5QjtZQW5CaEMsaUJBQWlCO1lBaUJNLHdCQUF3Qjs7O3dCQWE5QyxLQUFLO29CQUNMLEtBQUs7Z0NBdUJMLFdBQVcsU0FBQyxjQUFjOzBCQVUxQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50JztcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZpbHRlciwgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGRlZmF1bHRDb2x1bW5zT3B0aW9ucywgU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9TdHJ1Y3R1cmUnO1xuaW1wb3J0IHsgVEJsb2NrcyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRWxlbWVudHMnO1xuaW1wb3J0IHsgY3JlYXRlQm9yZGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgSUFkZEJsb2NrRXZlbnQsIFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGJVc2VySW50ZXJmYWNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludGVybmFscy91c2VyLWludGVyZmFjZXMvdXNlci1pbnRlcmZhY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BiLXN0cnVjdHVyZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdHJ1Y3R1cmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHJ1Y3R1cmUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBleHBvcnRBczogJ3N0cnVjdHVyZSdcbn0pXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzdHJ1Y3R1cmUgPSBuZXcgU3RydWN0dXJlKCk7XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgcHVibGljIGNka0Ryb3BMaXN0Q29ubmVjdGVkVG8kID0gdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5jZGtEcm9wTGlzdENvbm5lY3RlZFRvJDtcbiAgcHVibGljIGZyOiBudW1iZXI7XG4gIHB1YmxpYyB2YWxpZGF0ZSA9IGZ1bmN0aW9uICh7IHJlY3RhbmdsZSB9OiBSZXNpemVFdmVudCkge1xuICAgIGNvbnN0IGNvbEZyID0gKyhyZWN0YW5nbGUud2lkdGggLyB0aGlzLmZyKS50b0ZpeGVkKDIpO1xuICAgIHJldHVybiBjb2xGciA+IDEgJiYgY29sRnIgPD0gMTAgLSB0aGlzLnN0cnVjdHVyZS5jb2x1bW5zO1xuICB9LmJpbmQodGhpcyk7XG4gIC8vIHNlY3Rpb25XaWR0aCQgPSB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmN1cnJlbnRFZGl0aW5nU3RydWN0dXJlJC5waXBlKFxuICAvLyAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuZW1haWxPYmplY3RTdG9yZS5lbWFpbEJvZHlXaWR0aCQpLFxuICAvLyAgIG1hcCgoW3sgb3B0aW9ucyB9LCB3aWR0aF0pID0+IHtcbiAgLy8gICAgIHJldHVybiBvcHRpb25zLmZ1bGxXaWR0aCA/ICcxMDAlJyA6IHdpZHRoO1xuICAvLyAgIH0pXG4gIC8vICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50SXNEZXN0cm95ZWQkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHVzZXJJbnRlcmZhY2VTZXJ2aWNlOiBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1haWxPYmplY3RTdG9yZTogUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSxcbiAgICBwcml2YXRlIGNoUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHBiTWlkZGxld2FyZXNTZXJ2aWNlOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2VcbiAgKSB7fVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJykgZ2V0IGlzU3RydWN0dXJlQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLmlzQWN0aXZlO1xuICB9XG5cbiAgLy8gQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpIGdldCBzZWN0aW9uV2lkdGgoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmVtYWlsT2JqZWN0U3RvcmUuRW1haWwuZ2VuZXJhbC53aWR0aC52YWx1ZSk7XG4gIC8vICAgcmV0dXJuIHRoaXMuc3RydWN0dXJlLm9wdGlvbnMuZnVsbFdpZHRoID8gJzEwMCUnIDogdGhpcy5lbWFpbE9iamVjdFN0b3JlLkVtYWlsLmdlbmVyYWwud2lkdGgudmFsdWU7XG4gIC8vIH1cblxuICAvLyBEb24ndCBjbG9zZSByaWdodCBwYW5lbCBvbiBzdHJ1Y3R1cmUgY2xpY2tcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKSBvbkhvc3RDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZWRpdFN0cnVjdHVyZSgpO1xuICB9XG5cbiAgcmVtb3ZlU3RydWN0dXJlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucGJNaWRkbGV3YXJlc1NlcnZpY2VcbiAgICAgIC5yZW1vdmVTdHJ1Y3R1cmUodGhpcy5pbmRleCwgdGhpcy5zdHJ1Y3R1cmUpXG4gICAgICAucGlwZShcbiAgICAgICAgZXhoYXVzdE1hcCgoKSA9PiB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmNvbmZpcm1EaWFsb2ckKCkpLFxuICAgICAgICBmaWx0ZXIocmVtb3ZlQWxsb3dlZCA9PiByZW1vdmVBbGxvd2VkKSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZW1haWxPYmplY3RTdG9yZS5yZW1vdmVTdHJ1Y3R1cmUodGhpcy5pbmRleCk7XG4gICAgICAgIHRoaXMudXNlckludGVyZmFjZVNlcnZpY2UucmVzZXRFbGVtZW50cygpO1xuICAgICAgfSk7XG4gIH1cblxuICBkdXBsaWNhdGVTdHJ1Y3R1cmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZVxuICAgICAgLmR1cGxpY2F0ZVN0cnVjdHVyZSh0aGlzLmluZGV4LCB0aGlzLnN0cnVjdHVyZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5lbWFpbE9iamVjdFN0b3JlLmR1cGxpY2F0ZVN0cnVjdHVyZSh0aGlzLmluZGV4KSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUobmV3U3RydWN0dXJlID0+IHtcbiAgICAgICAgdGhpcy5lZGl0U3RydWN0dXJlKG5ld1N0cnVjdHVyZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGRyb3BOZXdCbG9jayhldmVudDogSUFkZEJsb2NrRXZlbnQsIGNvbHVtbjogVEJsb2Nrc1tdKSB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgIHRoaXMuZW1haWxPYmplY3RTdG9yZS5hZGRCbG9jayhldmVudCwgY29sdW1uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZVxuICAgICAgICAuYWRkQmxvY2soZXZlbnQsIGNvbHVtbilcbiAgICAgICAgLnBpcGUobWFwKG5ld0RhdGEgPT4gdGhpcy5lbWFpbE9iamVjdFN0b3JlLmFkZEJsb2NrKG5ld0RhdGEuZXZlbnQsIG5ld0RhdGEuY29sdW1uKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIC8vIHRoaXMudXNlckludGVyZmFjZVNlcnZpY2UuZWRpdEJsb2NrKG5ld0Jsb2NrKTtcbiAgICAgICAgICB0aGlzLmNoUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlQmxvY2tEcmFnJChibG9jazogVEJsb2Nrcykge1xuICAgIHJldHVybiB0aGlzLnBiTWlkZGxld2FyZXNTZXJ2aWNlLmRpc2FibGVCbG9ja0RyYWdXaXRoaW5FbWFpbEJvZHkoYmxvY2spLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICBlZGl0U3RydWN0dXJlKHN0cnVjdHVyZSA9IHRoaXMuc3RydWN0dXJlKSB7XG4gICAgdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZVxuICAgICAgLmVkaXRTdHJ1Y3R1cmUoc3RydWN0dXJlKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoc3RyY3RyID0+IHtcbiAgICAgICAgdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5lZGl0U3RydWN0dXJlKHN0cmN0cik7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFJlc2l6ZUVkZ2VzKGNvbHVtbktleTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJpZ2h0OiBjb2x1bW5LZXkgKyAxICE9PSB0aGlzLnN0cnVjdHVyZS5jb2x1bW5zLFxuICAgICAgbGVmdDogY29sdW1uS2V5ICE9PSAwXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZUNvbHVtbklkKGNvbHVtbktleTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGBjb2x1bW4tZHJvcGxpc3QtJHtjb2x1bW5LZXl9LSR7dGhpcy5pbmRleH1gO1xuICB9XG5cbiAgZ2V0Q29sdW1uU3R5bGVzKGNvbHVtbktleTogbnVtYmVyKSB7XG4gICAgY29uc3Qge1xuICAgICAgb3B0aW9uczogeyBnYXBzID0gWzQsIDRdLCBjb2x1bW5zID0gW10gfVxuICAgIH0gPSB0aGlzLnN0cnVjdHVyZTtcbiAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NvbHVtbktleV0gfHwgZGVmYXVsdENvbHVtbnNPcHRpb25zO1xuXG4gICAgbGV0IHZlcnRpY2FsQWxpZ24gPSAnY2VudGVyJztcbiAgICBpZiAoY29sdW1uLnZlcnRpY2FsQWxpZ24gPT09ICdib3R0b20nKSB7XG4gICAgICB2ZXJ0aWNhbEFsaWduID0gJ2ZsZXgtZW5kJztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi52ZXJ0aWNhbEFsaWduID09PSAndG9wJykge1xuICAgICAgdmVydGljYWxBbGlnbiA9ICdmbGV4LXN0YXJ0JztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFkZGluZzogZ2Fwcy5tYXAoZ2FwID0+IGAke2dhcH1weGApLmpvaW4oJyAnKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sdW1uLmJhY2tncm91bmQuY29sb3IsXG4gICAgICBwbGFjZVNlbGY6IGAke3ZlcnRpY2FsQWxpZ259IHN0cmV0Y2hgLFxuICAgICAgLi4uY3JlYXRlQm9yZGVyKGNvbHVtbi5ib3JkZXIpXG4gICAgICAvLyAuLi5jcmVhdGVCYWNrZ3JvdW5kKGNvbHVtbi5iYWNrZ3JvdW5kKVxuICAgIH07XG4gIH1cblxuICBvblJlc2l6ZUVuZCh7IHJlY3RhbmdsZSB9OiBSZXNpemVFdmVudCwga2V5OiBudW1iZXIpIHtcbiAgICB0aGlzLnN0cnVjdHVyZS5vcHRpb25zLmNvbHVtbnNXaWR0aFtrZXldID0gKyhyZWN0YW5nbGUud2lkdGggLyB0aGlzLmZyKS50b0ZpeGVkKDIpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLmlzQWN0aXZlIHx8IHRoaXMudXNlckludGVyZmFjZVNlcnZpY2UuY3VycmVudFN0cnVjdHVyZUNvbnRhaW5zQWN0aXZlQmxvY2sodGhpcy5zdHJ1Y3R1cmUpKSB7XG4gICAgICB0aGlzLmNoUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEFkZCBjb2x1bW5zIG9wdGlvbnMgaW4gY2FzZSBvZiBvbGQgdGVtcGxhdGVcbiAgICBjb25zdCB7IGNvbHVtbnMsIGNvbHVtbnNXaWR0aCB9ID0gdGhpcy5zdHJ1Y3R1cmUub3B0aW9ucztcbiAgICBpZiAoIWNvbHVtbnMgfHwgIWNvbHVtbnNXaWR0aCkge1xuICAgICAgY29uc3QgeyB0eXBlLCBlbGVtZW50cywgb3B0aW9ucyB9ID0gdGhpcy5zdHJ1Y3R1cmU7XG4gICAgICB0aGlzLmVkaXRTdHJ1Y3R1cmUobmV3IFN0cnVjdHVyZSh0eXBlLCBlbGVtZW50cywgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5lbWFpbE9iamVjdFN0b3JlLkVtYWlsLmdlbmVyYWwud2lkdGgudmFsdWU7XG4gICAgY29uc3QgWywgaG9yaXpvbnRhbEdhcF0gPSB0aGlzLnN0cnVjdHVyZS5vcHRpb25zLmdhcHM7XG4gICAgdGhpcy5mciA9ICh3aWR0aCAtIGhvcml6b250YWxHYXAgKiB0aGlzLnN0cnVjdHVyZS5jb2x1bW5zKSAvIDEwO1xuXG4gICAgdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5jdXJyZW50RWRpdGluZ1N0cnVjdHVyZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoY3VycmVudEVkaXRpbmdTdHJ1Y3R1cmUgPT4gY3VycmVudEVkaXRpbmdTdHJ1Y3R1cmUgPT09IHRoaXMuc3RydWN0dXJlKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50SXNEZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShpc0FjdGl2ZSA9PiB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb21wb25lbnRJc0Rlc3Ryb3llZCQubmV4dCgnJyk7XG4gICAgdGhpcy5jb21wb25lbnRJc0Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, HostListener, Input, ViewEncapsulation } from '@angular/core';
6
+ import { exhaustMap, filter, map, take, takeUntil } from 'rxjs/operators';
7
+ import { Subject } from 'rxjs';
8
+ import { defaultColumnsOptions, Structure } from '../../classes/Structure';
9
+ import { createBorder } from '../../utils';
10
+ import { PbUserMiddlewaresService } from '../../services/user-middleware-service/pb-middlewares.service';
11
+ import { PbUserInterfaceService } from '../../services/internals/user-interfaces/user-interface.service';
12
+ import { PbEmailObjectStoreService } from '../../services/internals/pb-email-object-store/pb-email-object-store.service';
13
+ export class StructureComponent {
14
+ constructor(userInterfaceService, emailObjectStore, chRef, pbMiddlewaresService) {
15
+ this.userInterfaceService = userInterfaceService;
16
+ this.emailObjectStore = emailObjectStore;
17
+ this.chRef = chRef;
18
+ this.pbMiddlewaresService = pbMiddlewaresService;
19
+ this.structure = new Structure();
20
+ this.cdkDropListConnectedTo$ = this.userInterfaceService.cdkDropListConnectedTo$;
21
+ this.validate = function ({ rectangle }) {
22
+ const colFr = +(rectangle.width / this.fr).toFixed(2);
23
+ return colFr > 1 && colFr <= 10 - this.structure.columns;
24
+ }.bind(this);
25
+ // sectionWidth$ = this.userInterfaceService.currentEditingStructure$.pipe(
26
+ // withLatestFrom(this.emailObjectStore.emailBodyWidth$),
27
+ // map(([{ options }, width]) => {
28
+ // return options.fullWidth ? '100%' : width;
29
+ // })
30
+ // );
31
+ this.componentIsDestroyed$ = new Subject();
32
+ }
33
+ get isStructureActive() {
34
+ return this.isActive;
35
+ }
36
+ // @HostBinding('style.width') get sectionWidth(): string | number {
37
+ // console.log(this.emailObjectStore.Email.general.width.value);
38
+ // return this.structure.options.fullWidth ? '100%' : this.emailObjectStore.Email.general.width.value;
39
+ // }
40
+ // Don't close right panel on structure click
41
+ onHostClick(event) {
42
+ event.stopImmediatePropagation();
43
+ this.editStructure();
44
+ }
45
+ removeStructure(event) {
46
+ event.stopPropagation();
47
+ this.pbMiddlewaresService
48
+ .removeStructure(this.index, this.structure)
49
+ .pipe(exhaustMap(() => this.userInterfaceService.confirmDialog$()), filter(removeAllowed => removeAllowed), take(1))
50
+ .subscribe(() => {
51
+ this.emailObjectStore.removeStructure(this.index);
52
+ this.userInterfaceService.resetElements();
53
+ });
54
+ }
55
+ duplicateStructure(event) {
56
+ event.stopPropagation();
57
+ this.pbMiddlewaresService
58
+ .duplicateStructure(this.index, this.structure)
59
+ .pipe(map(() => this.emailObjectStore.duplicateStructure(this.index)), take(1))
60
+ .subscribe(newStructure => {
61
+ this.editStructure(newStructure);
62
+ });
63
+ }
64
+ dropNewBlock(event, column) {
65
+ if (event.previousContainer === event.container) {
66
+ this.emailObjectStore.addBlock(event, column);
67
+ }
68
+ else {
69
+ this.pbMiddlewaresService
70
+ .addBlock(event, column)
71
+ .pipe(map(newData => this.emailObjectStore.addBlock(newData.event, newData.column)))
72
+ .subscribe(() => {
73
+ // this.userInterfaceService.editBlock(newBlock);
74
+ this.chRef.markForCheck();
75
+ });
76
+ }
77
+ }
78
+ disableBlockDrag$(block) {
79
+ return this.pbMiddlewaresService.disableBlockDragWithinEmailBody(block).pipe(take(1));
80
+ }
81
+ editStructure(structure = this.structure) {
82
+ this.pbMiddlewaresService
83
+ .editStructure(structure)
84
+ .pipe(take(1))
85
+ .subscribe(strctr => {
86
+ this.userInterfaceService.editStructure(strctr);
87
+ });
88
+ }
89
+ getResizeEdges(columnKey) {
90
+ return {
91
+ right: columnKey + 1 !== this.structure.columns,
92
+ left: columnKey !== 0
93
+ };
94
+ }
95
+ createColumnId(columnKey) {
96
+ return `column-droplist-${columnKey}-${this.index}`;
97
+ }
98
+ getColumnStyles(columnKey) {
99
+ const { options: { gaps = [4, 4], columns = [] } } = this.structure;
100
+ const column = columns[columnKey] || defaultColumnsOptions;
101
+ let verticalAlign = 'center';
102
+ if (column.verticalAlign === 'bottom') {
103
+ verticalAlign = 'flex-end';
104
+ }
105
+ else if (column.verticalAlign === 'top') {
106
+ verticalAlign = 'flex-start';
107
+ }
108
+ return Object.assign({ padding: gaps.map(gap => `${gap}px`).join(' '), backgroundColor: column.background.color, placeSelf: `${verticalAlign} stretch` }, createBorder(column.border)
109
+ // ...createBackground(column.background)
110
+ );
111
+ }
112
+ onResizeEnd({ rectangle }, key) {
113
+ this.structure.options.columnsWidth[key] = +(rectangle.width / this.fr).toFixed(2);
114
+ }
115
+ ngDoCheck() {
116
+ if (this.isActive || this.userInterfaceService.currentStructureContainsActiveBlock(this.structure)) {
117
+ this.chRef.markForCheck();
118
+ }
119
+ }
120
+ ngOnInit() {
121
+ // Add columns options in case of old template
122
+ const { columns, columnsWidth } = this.structure.options;
123
+ if (!columns || !columnsWidth) {
124
+ const { type, elements, options } = this.structure;
125
+ this.editStructure(new Structure(type, elements, options));
126
+ }
127
+ const width = this.emailObjectStore.Email.general.width.value;
128
+ const [, horizontalGap] = this.structure.options.gaps;
129
+ this.fr = (width - horizontalGap * this.structure.columns) / 10;
130
+ this.userInterfaceService.currentEditingStructure$
131
+ .pipe(map(currentEditingStructure => currentEditingStructure === this.structure), takeUntil(this.componentIsDestroyed$))
132
+ .subscribe(isActive => {
133
+ this.isActive = isActive;
134
+ });
135
+ }
136
+ ngOnDestroy() {
137
+ this.componentIsDestroyed$.next('');
138
+ this.componentIsDestroyed$.complete();
139
+ }
140
+ }
141
+ StructureComponent.decorators = [
142
+ { type: Component, args: [{
143
+ selector: 'pb-structure',
144
+ template: "<!--\r\n ~ Copyright (c) 2024 Pobuca.\r\n ~ All rights reserved.\r\n -->\r\n\r\n<div class=\"column\" *ngFor=\"let column of structure.elements; let index = index\" cdkDropList mwlResizable\r\n [enableGhostResize]=\"false\" [resizeSnapGrid]=\"{ left: fr, right: fr }\" [resizeEdges]=\"getResizeEdges(index)\"\r\n [validateResize]=\"validate\" (resizing)=\"onResizeEnd($event, index)\"\r\n (cdkDropListDropped)=\"dropNewBlock($event, column)\" [class.empty]=\"!column.length\" [ngStyle]=\"getColumnStyles(index)\"\r\n [cdkDropListConnectedTo]=\"cdkDropListConnectedTo$ | async\" [cdkDropListData]=\"column\" [id]=\"createColumnId(index)\">\r\n\r\n <div *ngIf=\"!column.length\" class=\"empty-block\" i18n=\"structure|Inside empty block\">DnD blocks</div>\r\n\r\n <pb-block *ngFor=\"let block of column; let index = index\" cdkDrag [cdkDragData]=\"block\" [block]=\"block\"\r\n [index]=\"index\" [column]=\"column\" [cdkDragDisabled]=\"disableBlockDrag$(block) | async\">\r\n <button mat-icon-button class=\"move\" cdkDragHandle i18n-matTooltip=\"block|Change Block order\"\r\n matTooltip=\"Change Block order\" *ngIf=\"!(disableBlockDrag$(block) | async)\">\r\n <mat-icon i18n-aria-label=\"block|Move block\" aria-label=\"Move block\" inline>pan_tool</mat-icon>\r\n </button>\r\n </pb-block>\r\n</div>\r\n\r\n<ng-content select=\".move\"></ng-content>\r\n<div class=\"tools\" fxLayoutGap=\"0.25rem\">\r\n <button mat-icon-button class=\"edit\" color=\"primary\" i18n-matTooltip=\"structure|Change structure settings\"\r\n matTooltip=\"Change structure settings\">\r\n <mat-icon i18n-aria-label=\"structure|Edit structure\" aria-label=\"Edit structure\" inline>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"duplicateStructure($event)\" i18n-matTooltip=\"structure|Duplicate structure\"\r\n matTooltip=\"Duplicate structure\">\r\n <mat-icon i18n-aria-label=\"structure|Duplicate structure\" aria-label=\"Duplicate structure\" inline>file_copy\r\n </mat-icon>\r\n </button>\r\n <button mat-icon-button color=\"warn\" (click)=\"removeStructure($event)\" i18n-matTooltip=\"structure|Delete structure\"\r\n matTooltip=\"Delete structure\">\r\n <mat-icon i18n-aria-label=\"structure|Remove Structure\" aria-label=\"Remove Structure\" inline>delete_forever\r\n </mat-icon>\r\n </button>\r\n</div>\r\n",
145
+ changeDetection: ChangeDetectionStrategy.OnPush,
146
+ encapsulation: ViewEncapsulation.Emulated,
147
+ exportAs: 'structure',
148
+ styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */pb-block>.cdk-drag-handle{position:absolute;top:-30px;right:0;cursor:move;background-color:rgba(63,81,181,.5);color:#fff;border-radius:50% 50% 0 0;opacity:0;height:30px;width:30px;font-size:smaller}pb-block>.cdk-drag-handle mat-icon{margin-top:-8px}pb-block>.cdk-drag-handle:hover{background-color:#3f51b5}pb-block.cdk-drag-preview .cdk-drag-handle,pb-block:hover .cdk-drag-handle{opacity:1}:host{display:grid;border:1px solid #ccc;position:relative;grid-template-columns:1fr}:host>.tools{direction:ltr;position:absolute;opacity:0;left:0;bottom:-25px;color:#ff4081}:host>.tools button{background-color:#fff;border-radius:0 0 3px 3px;height:25px;width:25px;line-height:0}:host.active,:host.cdk-drag-placeholder,:host.cdk-drag-preview,:host:hover{box-shadow:0 0 1px 2px #ff4081;z-index:1}:host:hover>.tools{opacity:1}:host:hover>.tools button{background-color:#ff4081;color:#fff}:host.active>.tools>.edit{display:none}:host.cols_2{grid-template-columns:repeat(2,6fr)}:host.cols_3{grid-template-columns:repeat(3,4fr)}:host.cols_4{grid-template-columns:repeat(4,3fr)}:host.cols_12{grid-template-columns:7fr 5fr}:host.cols_21{grid-template-columns:5fr 7fr}:host .cdk-drop-list-dragging,:host .cdk-drop-list-receiving{height:100%}:host>.column{box-sizing:border-box}:host>.column.empty{height:60px}:host>.column.empty .empty-block{background-color:rgba(101,99,99,.21);height:100%;display:flex;justify-content:center;place-items:center;flex-direction:column;color:rgba(101,99,99,.3);font-size:small}:host>.column.empty.cdk-drop-list-dragging .empty-block{display:none}:host>.column.empty>.cdk-drag-placeholder{min-height:60px!important}"]
149
+ },] }
150
+ ];
151
+ StructureComponent.ctorParameters = () => [
152
+ { type: PbUserInterfaceService },
153
+ { type: PbEmailObjectStoreService },
154
+ { type: ChangeDetectorRef },
155
+ { type: PbUserMiddlewaresService }
156
+ ];
157
+ StructureComponent.propDecorators = {
158
+ structure: [{ type: Input }],
159
+ index: [{ type: Input }],
160
+ isStructureActive: [{ type: HostBinding, args: ['class.active',] }],
161
+ onHostClick: [{ type: HostListener, args: ['click', ['$event'],] }]
162
+ };
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0cnVjdHVyZS9zdHJ1Y3R1cmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN6SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQVV6SCxNQUFNLE9BQU8sa0JBQWtCO0lBa0I3QixZQUNVLG9CQUE0QyxFQUM1QyxnQkFBMkMsRUFDM0MsS0FBd0IsRUFDeEIsb0JBQThDO1FBSDlDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBd0I7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTBCO1FBckIvQyxjQUFTLEdBQUcsSUFBSSxTQUFT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dUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7Z0JBQ3pDLFFBQVEsRUFBRSxXQUFXOzthQUN0Qjs7O1lBVlEsc0JBQXNCO1lBQ3RCLHlCQUF5QjtZQW5CaEMsaUJBQWlCO1lBaUJNLHdCQUF3Qjs7O3dCQWE5QyxLQUFLO29CQUNMLEtBQUs7Z0NBdUJMLFdBQVcsU0FBQyxjQUFjOzBCQVUxQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBEb0NoZWNrLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlc2l6ZUV2ZW50IH0gZnJvbSAnYW5ndWxhci1yZXNpemFibGUtZWxlbWVudCc7XHJcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZpbHRlciwgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IGRlZmF1bHRDb2x1bW5zT3B0aW9ucywgU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9TdHJ1Y3R1cmUnO1xyXG5pbXBvcnQgeyBUQmxvY2tzIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9FbGVtZW50cyc7XHJcbmltcG9ydCB7IGNyZWF0ZUJvcmRlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgSUFkZEJsb2NrRXZlbnQsIFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW50ZXJuYWxzL3VzZXItaW50ZXJmYWNlcy91c2VyLWludGVyZmFjZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludGVybmFscy9wYi1lbWFpbC1vYmplY3Qtc3RvcmUvcGItZW1haWwtb2JqZWN0LXN0b3JlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYi1zdHJ1Y3R1cmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdHJ1Y3R1cmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N0cnVjdHVyZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxyXG4gIGV4cG9ydEFzOiAnc3RydWN0dXJlJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHN0cnVjdHVyZSA9IG5ldyBTdHJ1Y3R1cmUoKTtcclxuICBASW5wdXQoKSBpbmRleDogbnVtYmVyO1xyXG4gIHB1YmxpYyBpc0FjdGl2ZTogYm9vbGVhbjtcclxuICBwdWJsaWMgY2RrRHJvcExpc3RDb25uZWN0ZWRUbyQgPSB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmNka0Ryb3BMaXN0Q29ubmVjdGVkVG8kO1xyXG4gIHB1YmxpYyBmcjogbnVtYmVyO1xyXG4gIHB1YmxpYyB2YWxpZGF0ZSA9IGZ1bmN0aW9uICh7IHJlY3RhbmdsZSB9OiBSZXNpemVFdmVudCkge1xyXG4gICAgY29uc3QgY29sRnIgPSArKHJlY3RhbmdsZS53aWR0aCAvIHRoaXMuZnIpLnRvRml4ZWQoMik7XHJcbiAgICByZXR1cm4gY29sRnIgPiAxICYmIGNvbEZyIDw9IDEwIC0gdGhpcy5zdHJ1Y3R1cmUuY29sdW1ucztcclxuICB9LmJpbmQodGhpcyk7XHJcbiAgLy8gc2VjdGlvbldpZHRoJCA9IHRoaXMudXNlckludGVyZmFjZVNlcnZpY2UuY3VycmVudEVkaXRpbmdTdHJ1Y3R1cmUkLnBpcGUoXHJcbiAgLy8gICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmVtYWlsT2JqZWN0U3RvcmUuZW1haWxCb2R5V2lkdGgkKSxcclxuICAvLyAgIG1hcCgoW3sgb3B0aW9ucyB9LCB3aWR0aF0pID0+IHtcclxuICAvLyAgICAgcmV0dXJuIG9wdGlvbnMuZnVsbFdpZHRoID8gJzEwMCUnIDogd2lkdGg7XHJcbiAgLy8gICB9KVxyXG4gIC8vICk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRJc0Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXNlckludGVyZmFjZVNlcnZpY2U6IFBiVXNlckludGVyZmFjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVtYWlsT2JqZWN0U3RvcmU6IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcGJNaWRkbGV3YXJlc1NlcnZpY2U6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKSBnZXQgaXNTdHJ1Y3R1cmVBY3RpdmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0FjdGl2ZTtcclxuICB9XHJcblxyXG4gIC8vIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKSBnZXQgc2VjdGlvbldpZHRoKCk6IHN0cmluZyB8IG51bWJlciB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmVtYWlsT2JqZWN0U3RvcmUuRW1haWwuZ2VuZXJhbC53aWR0aC52YWx1ZSk7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5zdHJ1Y3R1cmUub3B0aW9ucy5mdWxsV2lkdGggPyAnMTAwJScgOiB0aGlzLmVtYWlsT2JqZWN0U3RvcmUuRW1haWwuZ2VuZXJhbC53aWR0aC52YWx1ZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIERvbid0IGNsb3NlIHJpZ2h0IHBhbmVsIG9uIHN0cnVjdHVyZSBjbGlja1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgb25Ib3N0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5lZGl0U3RydWN0dXJlKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdHJ1Y3R1cmUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMucGJNaWRkbGV3YXJlc1NlcnZpY2VcclxuICAgICAgLnJlbW92ZVN0cnVjdHVyZSh0aGlzLmluZGV4LCB0aGlzLnN0cnVjdHVyZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZXhoYXVzdE1hcCgoKSA9PiB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmNvbmZpcm1EaWFsb2ckKCkpLFxyXG4gICAgICAgIGZpbHRlcihyZW1vdmVBbGxvd2VkID0+IHJlbW92ZUFsbG93ZWQpLFxyXG4gICAgICAgIHRha2UoMSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmVtYWlsT2JqZWN0U3RvcmUucmVtb3ZlU3RydWN0dXJlKHRoaXMuaW5kZXgpO1xyXG4gICAgICAgIHRoaXMudXNlckludGVyZmFjZVNlcnZpY2UucmVzZXRFbGVtZW50cygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGR1cGxpY2F0ZVN0cnVjdHVyZShldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZVxyXG4gICAgICAuZHVwbGljYXRlU3RydWN0dXJlKHRoaXMuaW5kZXgsIHRoaXMuc3RydWN0dXJlKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5lbWFpbE9iamVjdFN0b3JlLmR1cGxpY2F0ZVN0cnVjdHVyZSh0aGlzLmluZGV4KSksXHJcbiAgICAgICAgdGFrZSgxKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUobmV3U3RydWN0dXJlID0+IHtcclxuICAgICAgICB0aGlzLmVkaXRTdHJ1Y3R1cmUobmV3U3RydWN0dXJlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBkcm9wTmV3QmxvY2soZXZlbnQ6IElBZGRCbG9ja0V2ZW50LCBjb2x1bW46IFRCbG9ja3NbXSkge1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcclxuICAgICAgdGhpcy5lbWFpbE9iamVjdFN0b3JlLmFkZEJsb2NrKGV2ZW50LCBjb2x1bW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZVxyXG4gICAgICAgIC5hZGRCbG9jayhldmVudCwgY29sdW1uKVxyXG4gICAgICAgIC5waXBlKG1hcChuZXdEYXRhID0+IHRoaXMuZW1haWxPYmplY3RTdG9yZS5hZGRCbG9jayhuZXdEYXRhLmV2ZW50LCBuZXdEYXRhLmNvbHVtbikpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5lZGl0QmxvY2sobmV3QmxvY2spO1xyXG4gICAgICAgICAgdGhpcy5jaFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVCbG9ja0RyYWckKGJsb2NrOiBUQmxvY2tzKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZS5kaXNhYmxlQmxvY2tEcmFnV2l0aGluRW1haWxCb2R5KGJsb2NrKS5waXBlKHRha2UoMSkpO1xyXG4gIH1cclxuXHJcbiAgZWRpdFN0cnVjdHVyZShzdHJ1Y3R1cmUgPSB0aGlzLnN0cnVjdHVyZSkge1xyXG4gICAgdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZVxyXG4gICAgICAuZWRpdFN0cnVjdHVyZShzdHJ1Y3R1cmUpXHJcbiAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoc3RyY3RyID0+IHtcclxuICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmVkaXRTdHJ1Y3R1cmUoc3RyY3RyKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNpemVFZGdlcyhjb2x1bW5LZXk6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmlnaHQ6IGNvbHVtbktleSArIDEgIT09IHRoaXMuc3RydWN0dXJlLmNvbHVtbnMsXHJcbiAgICAgIGxlZnQ6IGNvbHVtbktleSAhPT0gMFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbHVtbklkKGNvbHVtbktleTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gYGNvbHVtbi1kcm9wbGlzdC0ke2NvbHVtbktleX0tJHt0aGlzLmluZGV4fWA7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5TdHlsZXMoY29sdW1uS2V5OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgb3B0aW9uczogeyBnYXBzID0gWzQsIDRdLCBjb2x1bW5zID0gW10gfVxyXG4gICAgfSA9IHRoaXMuc3RydWN0dXJlO1xyXG4gICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5LZXldIHx8IGRlZmF1bHRDb2x1bW5zT3B0aW9ucztcclxuXHJcbiAgICBsZXQgdmVydGljYWxBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgaWYgKGNvbHVtbi52ZXJ0aWNhbEFsaWduID09PSAnYm90dG9tJykge1xyXG4gICAgICB2ZXJ0aWNhbEFsaWduID0gJ2ZsZXgtZW5kJztcclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnZlcnRpY2FsQWxpZ24gPT09ICd0b3AnKSB7XHJcbiAgICAgIHZlcnRpY2FsQWxpZ24gPSAnZmxleC1zdGFydCc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFkZGluZzogZ2Fwcy5tYXAoZ2FwID0+IGAke2dhcH1weGApLmpvaW4oJyAnKSxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2x1bW4uYmFja2dyb3VuZC5jb2xvcixcclxuICAgICAgcGxhY2VTZWxmOiBgJHt2ZXJ0aWNhbEFsaWdufSBzdHJldGNoYCxcclxuICAgICAgLi4uY3JlYXRlQm9yZGVyKGNvbHVtbi5ib3JkZXIpXHJcbiAgICAgIC8vIC4uLmNyZWF0ZUJhY2tncm91bmQoY29sdW1uLmJhY2tncm91bmQpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemVFbmQoeyByZWN0YW5nbGUgfTogUmVzaXplRXZlbnQsIGtleTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN0cnVjdHVyZS5vcHRpb25zLmNvbHVtbnNXaWR0aFtrZXldID0gKyhyZWN0YW5nbGUud2lkdGggLyB0aGlzLmZyKS50b0ZpeGVkKDIpO1xyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCkge1xyXG4gICAgaWYgKHRoaXMuaXNBY3RpdmUgfHwgdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5jdXJyZW50U3RydWN0dXJlQ29udGFpbnNBY3RpdmVCbG9jayh0aGlzLnN0cnVjdHVyZSkpIHtcclxuICAgICAgdGhpcy5jaFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gQWRkIGNvbHVtbnMgb3B0aW9ucyBpbiBjYXNlIG9mIG9sZCB0ZW1wbGF0ZVxyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBjb2x1bW5zV2lkdGggfSA9IHRoaXMuc3RydWN0dXJlLm9wdGlvbnM7XHJcbiAgICBpZiAoIWNvbHVtbnMgfHwgIWNvbHVtbnNXaWR0aCkge1xyXG4gICAgICBjb25zdCB7IHR5cGUsIGVsZW1lbnRzLCBvcHRpb25zIH0gPSB0aGlzLnN0cnVjdHVyZTtcclxuICAgICAgdGhpcy5lZGl0U3RydWN0dXJlKG5ldyBTdHJ1Y3R1cmUodHlwZSwgZWxlbWVudHMsIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZW1haWxPYmplY3RTdG9yZS5FbWFpbC5nZW5lcmFsLndpZHRoLnZhbHVlO1xyXG4gICAgY29uc3QgWywgaG9yaXpvbnRhbEdhcF0gPSB0aGlzLnN0cnVjdHVyZS5vcHRpb25zLmdhcHM7XHJcbiAgICB0aGlzLmZyID0gKHdpZHRoIC0gaG9yaXpvbnRhbEdhcCAqIHRoaXMuc3RydWN0dXJlLmNvbHVtbnMpIC8gMTA7XHJcblxyXG4gICAgdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5jdXJyZW50RWRpdGluZ1N0cnVjdHVyZSRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKGN1cnJlbnRFZGl0aW5nU3RydWN0dXJlID0+IGN1cnJlbnRFZGl0aW5nU3RydWN0dXJlID09PSB0aGlzLnN0cnVjdHVyZSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50SXNEZXN0cm95ZWQkKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoaXNBY3RpdmUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50SXNEZXN0cm95ZWQkLm5leHQoJycpO1xyXG4gICAgdGhpcy5jb21wb25lbnRJc0Rlc3Ryb3llZCQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19