@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.
- package/README.md +1 -1
- package/bundles/pobuca-email-builder.umd.js +4464 -4414
- package/bundles/pobuca-email-builder.umd.js.map +1 -1
- package/bundles/pobuca-email-builder.umd.min.js +1 -1
- package/bundles/pobuca-email-builder.umd.min.js.map +1 -1
- package/esm2015/lib/classes/DefaultEmail.js +54 -53
- package/esm2015/lib/classes/Elements.js +229 -229
- package/esm2015/lib/classes/Structure.js +89 -89
- package/esm2015/lib/components/block/block.component.js +89 -89
- package/esm2015/lib/components/block-settings/block-settings.component.js +53 -53
- package/esm2015/lib/components/builder-container/builder-container.component.js +114 -114
- package/esm2015/lib/components/dialog.component.js +30 -30
- package/esm2015/lib/components/general-settings/general-settings.component.js +25 -25
- package/esm2015/lib/components/import-dialog/import-dialog.component.js +62 -62
- package/esm2015/lib/components/preview.component.js +89 -89
- package/esm2015/lib/components/structure/structure.component.js +163 -163
- package/esm2015/lib/components/structure-settings/structure-settings.component.js +31 -31
- package/esm2015/lib/components/template-list-dialog/template-list-dialog.component.js +45 -45
- package/esm2015/lib/directives/dynamic-component.directive.js +46 -46
- package/esm2015/lib/elements/abstract-block.js +23 -23
- package/esm2015/lib/elements/button/button.component.js +29 -29
- package/esm2015/lib/elements/divider/divider.component.js +30 -30
- package/esm2015/lib/elements/image/image.component.js +54 -54
- package/esm2015/lib/elements/social/social.component.js +42 -42
- package/esm2015/lib/elements/spacer/spacer.component.js +30 -30
- package/esm2015/lib/elements/text-element/text-element.component.js +80 -80
- package/esm2015/lib/groups/align.js +79 -79
- package/esm2015/lib/groups/back-repeat.js +55 -55
- package/esm2015/lib/groups/border.js +102 -102
- package/esm2015/lib/groups/color.js +139 -139
- package/esm2015/lib/groups/direction.js +63 -63
- package/esm2015/lib/groups/font-styles.js +127 -112
- package/esm2015/lib/groups/gaps.js +45 -45
- package/esm2015/lib/groups/line-height.js +68 -68
- package/esm2015/lib/groups/link.js +67 -67
- package/esm2015/lib/groups/margin.js +45 -45
- package/esm2015/lib/groups/padding.js +53 -53
- package/esm2015/lib/groups/upload-image.js +112 -112
- package/esm2015/lib/groups/width-height.js +94 -94
- package/esm2015/lib/interceptors/pb-interceptor.interceptor.js +51 -51
- package/esm2015/lib/interfaces/interfaces.js +13 -13
- package/esm2015/lib/pb-email-builder.component.js +258 -246
- package/esm2015/lib/pb-email-builder.module.js +291 -291
- package/esm2015/lib/pb-email-builder.service.js +134 -134
- package/esm2015/lib/pipes/slugify.pipe.js +39 -39
- package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js +175 -165
- package/esm2015/lib/services/internals/user-interfaces/user-interface.service.js +122 -122
- package/esm2015/lib/services/pb-storage/FreeUsersStorage.class.js +11 -11
- package/esm2015/lib/services/pb-storage/index.js +7 -7
- package/esm2015/lib/services/pb-storage/pb-storage.service.js +79 -79
- package/esm2015/lib/services/user-image-uploader-service/free-users-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-image-uploader-service/index.js +8 -8
- package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js +30 -30
- package/esm2015/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.js +112 -112
- package/esm2015/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.js +91 -91
- package/esm2015/lib/services/user-image-uploader-service/user-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-middleware-service/FreeUsersMiddleware.js +31 -31
- package/esm2015/lib/services/user-middleware-service/PaidUsersMiddleware.js +12 -12
- package/esm2015/lib/services/user-middleware-service/index.js +8 -8
- package/esm2015/lib/services/user-middleware-service/pb-middlewares.service.js +195 -195
- package/esm2015/lib/services/user-rest-api-service/free-users-rest-api.service.js +16 -16
- package/esm2015/lib/services/user-rest-api-service/index.js +7 -7
- package/esm2015/lib/services/user-rest-api-service/user-rest-api.service.js +116 -116
- package/esm2015/lib/tokens/private-tokens.js +17 -17
- package/esm2015/lib/tokens/tokens.js +159 -159
- package/esm2015/lib/utils.js +147 -147
- package/esm2015/pobuca-email-builder.js +42 -42
- package/esm2015/public_api.js +26 -26
- package/fesm2015/pobuca-email-builder.js +4206 -4168
- package/fesm2015/pobuca-email-builder.js.map +1 -1
- package/lib/classes/DefaultEmail.d.ts +10 -9
- package/lib/classes/Elements.d.ts +62 -62
- package/lib/classes/Structure.d.ts +11 -11
- package/lib/components/block/block.component.d.ts +25 -25
- package/lib/components/block-settings/block-settings.component.d.ts +18 -18
- package/lib/components/builder-container/builder-container.component.d.ts +36 -36
- package/lib/components/dialog.component.d.ts +10 -10
- package/lib/components/general-settings/general-settings.component.d.ts +6 -6
- package/lib/components/import-dialog/import-dialog.component.d.ts +16 -16
- package/lib/components/preview.component.d.ts +18 -18
- package/lib/components/structure/structure.component.d.ts +43 -43
- package/lib/components/structure-settings/structure-settings.component.d.ts +9 -9
- package/lib/components/template-list-dialog/template-list-dialog.component.d.ts +15 -15
- package/lib/directives/dynamic-component.directive.d.ts +13 -13
- package/lib/elements/abstract-block.d.ts +8 -8
- package/lib/elements/button/button.component.d.ts +18 -18
- package/lib/elements/divider/divider.component.d.ts +10 -10
- package/lib/elements/image/image.component.d.ts +19 -19
- package/lib/elements/social/social.component.d.ts +21 -21
- package/lib/elements/spacer/spacer.component.d.ts +5 -5
- package/lib/elements/text-element/text-element.component.d.ts +52 -52
- package/lib/groups/align.d.ts +17 -17
- package/lib/groups/back-repeat.d.ts +8 -8
- package/lib/groups/border.d.ts +13 -13
- package/lib/groups/color.d.ts +26 -26
- package/lib/groups/direction.d.ts +13 -13
- package/lib/groups/font-styles.d.ts +21 -17
- package/lib/groups/gaps.d.ts +7 -7
- package/lib/groups/line-height.d.ts +12 -12
- package/lib/groups/link.d.ts +11 -11
- package/lib/groups/margin.d.ts +8 -8
- package/lib/groups/padding.d.ts +8 -8
- package/lib/groups/upload-image.d.ts +19 -19
- package/lib/groups/width-height.d.ts +19 -19
- package/lib/interceptors/pb-interceptor.interceptor.d.ts +10 -10
- package/lib/interfaces/interfaces.d.ts +430 -422
- package/lib/pb-email-builder.component.d.ts +67 -67
- package/lib/pb-email-builder.module.d.ts +51 -51
- package/lib/pb-email-builder.service.d.ts +83 -83
- package/lib/pipes/slugify.pipe.d.ts +9 -9
- package/lib/services/internals/pb-email-object-store/pb-email-object-store.service.d.ts +50 -50
- package/lib/services/internals/user-interfaces/user-interface.service.d.ts +46 -46
- package/lib/services/pb-storage/FreeUsersStorage.class.d.ts +6 -6
- package/lib/services/pb-storage/index.d.ts +2 -2
- package/lib/services/pb-storage/pb-storage.service.d.ts +54 -54
- package/lib/services/user-image-uploader-service/free-users-image-uploader.service.d.ts +12 -12
- package/lib/services/user-image-uploader-service/index.d.ts +3 -3
- package/lib/services/user-image-uploader-service/paid-users-image-uploader.service.d.ts +14 -14
- package/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.d.ts +28 -28
- package/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.d.ts +27 -27
- package/lib/services/user-image-uploader-service/user-image-uploader.service.d.ts +26 -26
- package/lib/services/user-middleware-service/FreeUsersMiddleware.d.ts +15 -15
- package/lib/services/user-middleware-service/PaidUsersMiddleware.d.ts +7 -7
- package/lib/services/user-middleware-service/index.d.ts +3 -3
- package/lib/services/user-middleware-service/pb-middlewares.service.d.ts +190 -190
- package/lib/services/user-rest-api-service/free-users-rest-api.service.d.ts +10 -10
- package/lib/services/user-rest-api-service/index.d.ts +2 -2
- package/lib/services/user-rest-api-service/user-rest-api.service.d.ts +82 -82
- package/lib/tokens/private-tokens.d.ts +5 -5
- package/lib/tokens/tokens.d.ts +70 -70
- package/lib/utils.d.ts +88 -88
- package/package.json +8 -3
- package/pobuca-email-builder.d.ts +42 -42
- package/pobuca-email-builder.metadata.json +1 -1
- 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,
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0cnVjdHVyZS9zdHJ1Y3R1cmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN6SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQVV6SCxNQUFNLE9BQU8sa0JBQWtCO0lBa0I3QixZQUNVLG9CQUE0QyxFQUM1QyxnQkFBMkMsRUFDM0MsS0FBd0IsRUFDeEIsb0JBQThDO1FBSDlDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBd0I7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTBCO1FBckIvQyxjQUFTLEdBQUcsSUFBSSxTQUFT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dUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7Z0JBQ3pDLFFBQVEsRUFBRSxXQUFXOzthQUN0Qjs7O1lBVlEsc0JBQXNCO1lBQ3RCLHlCQUF5QjtZQW5CaEMsaUJBQWlCO1lBaUJNLHdCQUF3Qjs7O3dCQWE5QyxLQUFLO29CQUNMLEtBQUs7Z0NBdUJMLFdBQVcsU0FBQyxjQUFjOzBCQVUxQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50JztcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZpbHRlciwgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGRlZmF1bHRDb2x1bW5zT3B0aW9ucywgU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9TdHJ1Y3R1cmUnO1xuaW1wb3J0IHsgVEJsb2NrcyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRWxlbWVudHMnO1xuaW1wb3J0IHsgY3JlYXRlQm9yZGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgSUFkZEJsb2NrRXZlbnQsIFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGJVc2VySW50ZXJmYWNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludGVybmFscy91c2VyLWludGVyZmFjZXMvdXNlci1pbnRlcmZhY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BiLXN0cnVjdHVyZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdHJ1Y3R1cmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHJ1Y3R1cmUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBleHBvcnRBczogJ3N0cnVjdHVyZSdcbn0pXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzdHJ1Y3R1cmUgPSBuZXcgU3RydWN0dXJlKCk7XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgcHVibGljIGNka0Ryb3BMaXN0Q29ubmVjdGVkVG8kID0gdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5jZGtEcm9wTGlzdENvbm5lY3RlZFRvJDtcbiAgcHVibGljIGZyOiBudW1iZXI7XG4gIHB1YmxpYyB2YWxpZGF0ZSA9IGZ1bmN0aW9uICh7IHJlY3RhbmdsZSB9OiBSZXNpemVFdmVudCkge1xuICAgIGNvbnN0IGNvbEZyID0gKyhyZWN0YW5nbGUud2lkdGggLyB0aGlzLmZyKS50b0ZpeGVkKDIpO1xuICAgIHJldHVybiBjb2xGciA+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
|