@pobuca/email-builder 1.0.1 → 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,112 +1,127 @@
1
- /*
2
- * Copyright (c) 2024 Pobuca.
3
- * All rights reserved.
4
- */
5
- import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
6
- import { PB_FALLBACK_FONTS, PB_GOOGLE_FONTS } from '../tokens/tokens';
7
- import { PbEmailObjectStoreService } from '../services/internals/pb-email-object-store/pb-email-object-store.service';
8
- export class FontStylesComponent {
9
- constructor(pbEmailObject, googleFonts, fallbackFonts) {
10
- this.pbEmailObject = pbEmailObject;
11
- this.fallbackFonts = fallbackFonts;
12
- this.fontsMap = new Map();
13
- this.stylesMap = new Map([
14
- ['normal', $localize `:@@font_style_normal:Normal`],
15
- ['italic', $localize `:@@font_style_italic:Italic`],
16
- ['oblique', $localize `:@@font_style_oblique:Oblique`]
17
- ]);
18
- googleFonts.forEach(font => {
19
- const [family, ...weights] = font.match(/[^\d:,]{2,}|\d{3}/g);
20
- this.fontsMap.set(family.replace('+', ' '), [...new Set(weights.map(Number))]);
21
- });
22
- }
23
- get fontWeightList() {
24
- return this.isGoogleFont() ? this.fontsMap.get(this.font.family) : [100, 400, 500, 700, 900];
25
- }
26
- get fontFamilyList() {
27
- return [...this.fontsMap.keys(), ...this.fallbackFonts];
28
- }
29
- get styles() {
30
- return [...this.stylesMap.keys()];
31
- }
32
- markForCheck() {
33
- this.pbEmailObject.markForCheck();
34
- }
35
- isGoogleFont() {
36
- return this.fontsMap.has(this.font.family);
37
- }
38
- getStyleLabel(style) {
39
- // tslint:disable-next-line:no-non-null-assertion
40
- return this.stylesMap.get(style);
41
- }
42
- hasProperty(property) {
43
- return this.font.hasOwnProperty(property);
44
- }
45
- }
46
- FontStylesComponent.decorators = [
47
- { type: Component, args: [{
48
- selector: 'pb-font-styles',
49
- template: `
50
- <div class="group two">
51
- <mat-form-field appearance="outline" *ngIf="hasProperty('family')">
52
- <mat-label i18n="settings|Font Family">Family</mat-label>
53
- <mat-select [(value)]="font.family" disableRipple (selectionChange)="markForCheck()">
54
- <mat-option *ngFor="let name of fontFamilyList" [ngStyle]="{ fontFamily: name }" [value]="name">
55
- {{ name }}
56
- </mat-option>
57
- </mat-select>
58
- <mat-hint *ngIf="isGoogleFont()" i18n="settings|Partial support">Partial support.</mat-hint>
59
- <mat-hint *ngIf="!isGoogleFont()" i18n="settings|Full support">Full support.</mat-hint>
60
- </mat-form-field>
61
- <mat-form-field appearance="outline" *ngIf="hasProperty('fallback')">
62
- <mat-label i18n="settings|Font Fallback">Fallback</mat-label>
63
- <mat-select [(value)]="font.fallback" [disabled]="!isGoogleFont()" disableRipple (selectionChange)="markForCheck()">
64
- <mat-option *ngFor="let name of fallbackFonts" [ngStyle]="{ fontFamily: name }" [value]="name">
65
- {{ name }}
66
- </mat-option>
67
- </mat-select>
68
- <mat-hint i18n="settings|Full support">Full support.</mat-hint>
69
- </mat-form-field>
70
- </div>
71
-
72
- <div class="group three">
73
- <mat-form-field appearance="outline" *ngIf="hasProperty('size')">
74
- <mat-label i18n="settings|Font Size">Size</mat-label>
75
- <input matInput type="number" max="30" min="10" step="1" (input)="markForCheck()" [(ngModel)]="font.size" />
76
- </mat-form-field>
77
- <mat-form-field appearance="outline" *ngIf="hasProperty('weight')">
78
- <mat-label i18n="settings|Font Weight">Weight</mat-label>
79
- <mat-select placeholder="Weight" [(value)]="font.weight" disableRipple (selectionChange)="markForCheck()">
80
- <mat-option *ngFor="let weight of fontWeightList" [value]="weight">
81
- {{ weight }}
82
- </mat-option>
83
- </mat-select>
84
- </mat-form-field>
85
- <mat-form-field appearance="outline" style="min-width: 90px;">
86
- <mat-label i18n="settings|Font Style">Style</mat-label>
87
- <mat-select placeholder="Style" [(value)]="font.style" disableRipple (selectionChange)="markForCheck()">
88
- <mat-option *ngFor="let style of styles" [value]="style" i18n>
89
- {{ getStyleLabel(style) }}
90
- </mat-option>
91
- </mat-select>
92
- </mat-form-field>
93
- </div>
94
- `,
95
- changeDetection: ChangeDetectionStrategy.OnPush,
96
- styles: [`
97
- :host {
98
- display: block;
99
- width: 100%;
100
- }
101
- `]
102
- },] }
103
- ];
104
- FontStylesComponent.ctorParameters = () => [
105
- { type: PbEmailObjectStoreService },
106
- { type: Array, decorators: [{ type: Inject, args: [PB_GOOGLE_FONTS,] }] },
107
- { type: Array, decorators: [{ type: Inject, args: [PB_FALLBACK_FONTS,] }] }
108
- ];
109
- FontStylesComponent.propDecorators = {
110
- font: [{ type: Input }]
111
- };
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1zdHlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvZ3JvdXBzL2ZvbnQtc3R5bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUE0RHRILE1BQU0sT0FBTyxtQkFBbUI7SUFTOUIsWUFDVSxhQUF3QyxFQUN2QixXQUFxQixFQUNaLGFBQXVCO1FBRmpELGtCQUFhLEdBQWIsYUFBYSxDQUEyQjtRQUVkLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBVm5ELGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUN2QyxjQUFTLEdBQUcsSUFBSSxHQUFHLENBQXlCO1lBQ2xELENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQSw2QkFBNkIsQ0FBQztZQUNsRCxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUEsNkJBQTZCLENBQUM7WUFDbEQsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFBLCtCQUErQixDQUFDO1NBQ3RELENBQUMsQ0FBQztRQU9ELFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXFCO1FBQ2pDLGlEQUFpRDtRQUNqRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDOzs7WUF6R0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNUO2dCQVNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO3lCQVA3Qzs7Ozs7S0FLQzthQUdKOzs7WUEzRFEseUJBQXlCO3dDQXVFN0IsTUFBTSxTQUFDLGVBQWU7d0NBQ3RCLE1BQU0sU0FBQyxpQkFBaUI7OzttQkFYMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRm9udCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQQl9GQUxMQkFDS19GT05UUywgUEJfR09PR0xFX0ZPTlRTIH0gZnJvbSAnLi4vdG9rZW5zL3Rva2Vucyc7XG5pbXBvcnQgeyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BiLWZvbnQtc3R5bGVzJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgdHdvXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiAqbmdJZj1cImhhc1Byb3BlcnR5KCdmYW1pbHknKVwiPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJzZXR0aW5nc3xGb250IEZhbWlseVwiPkZhbWlseTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJmb250LmZhbWlseVwiIGRpc2FibGVSaXBwbGUgKHNlbGVjdGlvbkNoYW5nZSk9XCJtYXJrRm9yQ2hlY2soKVwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBuYW1lIG9mIGZvbnRGYW1pbHlMaXN0XCIgW25nU3R5bGVdPVwieyBmb250RmFtaWx5OiBuYW1lIH1cIiBbdmFsdWVdPVwibmFtZVwiPlxuICAgICAgICAgICAge3sgbmFtZSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJpc0dvb2dsZUZvbnQoKVwiIGkxOG49XCJzZXR0aW5nc3xQYXJ0aWFsIHN1cHBvcnRcIj5QYXJ0aWFsIHN1cHBvcnQuPC9tYXQtaGludD5cbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwiIWlzR29vZ2xlRm9udCgpXCIgaTE4bj1cInNldHRpbmdzfEZ1bGwgc3VwcG9ydFwiPkZ1bGwgc3VwcG9ydC48L21hdC1oaW50PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwiaGFzUHJvcGVydHkoJ2ZhbGxiYWNrJylcIj5cbiAgICAgICAgPG1hdC1sYWJlbCBpMThuPVwic2V0dGluZ3N8Rm9udCBGYWxsYmFja1wiPkZhbGxiYWNrPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImZvbnQuZmFsbGJhY2tcIiBbZGlzYWJsZWRdPVwiIWlzR29vZ2xlRm9udCgpXCIgZGlzYWJsZVJpcHBsZSAoc2VsZWN0aW9uQ2hhbmdlKT1cIm1hcmtGb3JDaGVjaygpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG5hbWUgb2YgZmFsbGJhY2tGb250c1wiIFtuZ1N0eWxlXT1cInsgZm9udEZhbWlseTogbmFtZSB9XCIgW3ZhbHVlXT1cIm5hbWVcIj5cbiAgICAgICAgICAgIHt7IG5hbWUgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPG1hdC1oaW50IGkxOG49XCJzZXR0aW5nc3xGdWxsIHN1cHBvcnRcIj5GdWxsIHN1cHBvcnQuPC9tYXQtaGludD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgdGhyZWVcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwiaGFzUHJvcGVydHkoJ3NpemUnKVwiPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJzZXR0aW5nc3xGb250IFNpemVcIj5TaXplPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgbWF4PVwiMzBcIiBtaW49XCIxMFwiIHN0ZXA9XCIxXCIgKGlucHV0KT1cIm1hcmtGb3JDaGVjaygpXCIgWyhuZ01vZGVsKV09XCJmb250LnNpemVcIiAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwiaGFzUHJvcGVydHkoJ3dlaWdodCcpXCI+XG4gICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cInNldHRpbmdzfEZvbnQgV2VpZ2h0XCI+V2VpZ2h0PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiV2VpZ2h0XCIgWyh2YWx1ZSldPVwiZm9udC53ZWlnaHRcIiBkaXNhYmxlUmlwcGxlIChzZWxlY3Rpb25DaGFuZ2UpPVwibWFya0ZvckNoZWNrKClcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgd2VpZ2h0IG9mIGZvbnRXZWlnaHRMaXN0XCIgW3ZhbHVlXT1cIndlaWdodFwiPlxuICAgICAgICAgICAge3sgd2VpZ2h0IH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3R5bGU9XCJtaW4td2lkdGg6IDkwcHg7XCI+XG4gICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cInNldHRpbmdzfEZvbnQgU3R5bGVcIj5TdHlsZTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlN0eWxlXCIgWyh2YWx1ZSldPVwiZm9udC5zdHlsZVwiIGRpc2FibGVSaXBwbGUgKHNlbGVjdGlvbkNoYW5nZSk9XCJtYXJrRm9yQ2hlY2soKVwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdHlsZSBvZiBzdHlsZXNcIiBbdmFsdWVdPVwic3R5bGVcIiBpMThuPlxuICAgICAgICAgICAge3sgZ2V0U3R5bGVMYWJlbChzdHlsZSkgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIGBcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRm9udFN0eWxlc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGZvbnQ6IElGb250O1xuICBwcml2YXRlIGZvbnRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpO1xuICBwcml2YXRlIHN0eWxlc01hcCA9IG5ldyBNYXA8SUZvbnRbJ3N0eWxlJ10sIHN0cmluZz4oW1xuICAgIFsnbm9ybWFsJywgJGxvY2FsaXplYDpAQGZvbnRfc3R5bGVfbm9ybWFsOk5vcm1hbGBdLFxuICAgIFsnaXRhbGljJywgJGxvY2FsaXplYDpAQGZvbnRfc3R5bGVfaXRhbGljOkl0YWxpY2BdLFxuICAgIFsnb2JsaXF1ZScsICRsb2NhbGl6ZWA6QEBmb250X3N0eWxlX29ibGlxdWU6T2JsaXF1ZWBdXG4gIF0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGJFbWFpbE9iamVjdDogUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSxcbiAgICBASW5qZWN0KFBCX0dPT0dMRV9GT05UUykgZ29vZ2xlRm9udHM6IHN0cmluZ1tdLFxuICAgIEBJbmplY3QoUEJfRkFMTEJBQ0tfRk9OVFMpIHB1YmxpYyBmYWxsYmFja0ZvbnRzOiBzdHJpbmdbXVxuICApIHtcbiAgICBnb29nbGVGb250cy5mb3JFYWNoKGZvbnQgPT4ge1xuICAgICAgY29uc3QgW2ZhbWlseSwgLi4ud2VpZ2h0c10gPSBmb250Lm1hdGNoKC9bXlxcZDosXXsyLH18XFxkezN9L2cpO1xuICAgICAgdGhpcy5mb250c01hcC5zZXQoZmFtaWx5LnJlcGxhY2UoJysnLCAnICcpLCBbLi4ubmV3IFNldCh3ZWlnaHRzLm1hcChOdW1iZXIpKV0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZvbnRXZWlnaHRMaXN0KCkge1xuICAgIHJldHVybiB0aGlzLmlzR29vZ2xlRm9udCgpID8gdGhpcy5mb250c01hcC5nZXQodGhpcy5mb250LmZhbWlseSkgOiBbMTAwLCA0MDAsIDUwMCwgNzAwLCA5MDBdO1xuICB9XG5cbiAgZ2V0IGZvbnRGYW1pbHlMaXN0KCkge1xuICAgIHJldHVybiBbLi4udGhpcy5mb250c01hcC5rZXlzKCksIC4uLnRoaXMuZmFsbGJhY2tGb250c107XG4gIH1cblxuICBnZXQgc3R5bGVzKCk6IElGb250WydzdHlsZSddW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5zdHlsZXNNYXAua2V5cygpXTtcbiAgfVxuXG4gIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLnBiRW1haWxPYmplY3QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpc0dvb2dsZUZvbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9udHNNYXAuaGFzKHRoaXMuZm9udC5mYW1pbHkpO1xuICB9XG5cbiAgZ2V0U3R5bGVMYWJlbChzdHlsZTogSUZvbnRbJ3N0eWxlJ10pOiBzdHJpbmcge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICByZXR1cm4gdGhpcy5zdHlsZXNNYXAuZ2V0KHN0eWxlKSE7XG4gIH1cblxuICBoYXNQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9udC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSk7XG4gIH1cbn1cbiJdfQ==
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
6
+ import { PB_FALLBACK_FONTS, PB_GOOGLE_FONTS } from '../tokens/tokens';
7
+ import { PbEmailObjectStoreService } from '../services/internals/pb-email-object-store/pb-email-object-store.service';
8
+ export class FontStylesComponent {
9
+ constructor(pbEmailObject, googleFonts, fallbackFonts) {
10
+ this.pbEmailObject = pbEmailObject;
11
+ this.fallbackFonts = fallbackFonts;
12
+ this.fontsMap = new Map();
13
+ this.stylesMap = new Map([
14
+ ['normal', $localize `:@@font_style_normal:Normal`],
15
+ ['italic', $localize `:@@font_style_italic:Italic`],
16
+ ['oblique', $localize `:@@font_style_oblique:Oblique`]
17
+ ]);
18
+ googleFonts.forEach(font => {
19
+ const [family, ...weights] = font.match(/[^\d:,]{2,}|\d{3}/g);
20
+ this.fontsMap.set(family.replace('+', ' '), [...new Set(weights.map(Number))]);
21
+ });
22
+ }
23
+ get fontWeightList() {
24
+ return this.isGoogleFont() ? this.fontsMap.get(this.font.family) : [100, 400, 500, 700, 900];
25
+ }
26
+ get customFonts() {
27
+ return (this.pbEmailObject.Email.customFonts || []).map(f => f.family);
28
+ }
29
+ get customStack() {
30
+ return this.customFonts.join(', ');
31
+ }
32
+ get fontFamilyList() {
33
+ const stack = this.customStack;
34
+ return [...(stack ? [stack] : []), ...this.fontsMap.keys(), ...this.fallbackFonts];
35
+ }
36
+ get fallbackFontChoices() {
37
+ const stack = this.customStack;
38
+ return [...(stack ? [stack] : []), ...this.fallbackFonts];
39
+ }
40
+ get styles() {
41
+ return [...this.stylesMap.keys()];
42
+ }
43
+ markForCheck() {
44
+ this.pbEmailObject.markForCheck();
45
+ }
46
+ isCustomFont() {
47
+ return this.customFonts.includes(this.font.family);
48
+ }
49
+ isGoogleFont() {
50
+ return this.fontsMap.has(this.font.family);
51
+ }
52
+ getStyleLabel(style) {
53
+ // tslint:disable-next-line:no-non-null-assertion
54
+ return this.stylesMap.get(style);
55
+ }
56
+ hasProperty(property) {
57
+ return this.font.hasOwnProperty(property);
58
+ }
59
+ }
60
+ FontStylesComponent.decorators = [
61
+ { type: Component, args: [{
62
+ selector: 'pb-font-styles',
63
+ template: `
64
+ <div class="group two">
65
+ <mat-form-field appearance="outline" *ngIf="hasProperty('family')">
66
+ <mat-label i18n="settings|Font Family">Family</mat-label>
67
+ <mat-select [(value)]="font.family" disableRipple (selectionChange)="markForCheck()">
68
+ <mat-option *ngFor="let name of fontFamilyList" [ngStyle]="{ fontFamily: name }" [value]="name">
69
+ {{ name }}
70
+ </mat-option>
71
+ </mat-select>
72
+ <mat-hint *ngIf="isGoogleFont()" i18n="settings|Partial support">Partial support.</mat-hint>
73
+ <mat-hint *ngIf="isCustomFont()" i18n="settings|Custom font">Custom font.</mat-hint>
74
+ <mat-hint *ngIf="!isGoogleFont() && !isCustomFont()" i18n="settings|Full support">Full support.</mat-hint>
75
+ </mat-form-field>
76
+ <mat-form-field appearance="outline" *ngIf="hasProperty('fallback')">
77
+ <mat-label i18n="settings|Font Fallback">Fallback</mat-label>
78
+ <mat-select [(value)]="font.fallback" [disabled]="!isGoogleFont() && !isCustomFont()" disableRipple (selectionChange)="markForCheck()">
79
+ <mat-option *ngFor="let name of fallbackFontChoices" [ngStyle]="{ fontFamily: name }" [value]="name">
80
+ {{ name }}
81
+ </mat-option>
82
+ </mat-select>
83
+ <mat-hint i18n="settings|Full support">Full support.</mat-hint>
84
+ </mat-form-field>
85
+ </div>
86
+
87
+ <div class="group three">
88
+ <mat-form-field appearance="outline" *ngIf="hasProperty('size')">
89
+ <mat-label i18n="settings|Font Size">Size</mat-label>
90
+ <input matInput type="number" max="30" min="10" step="1" (input)="markForCheck()" [(ngModel)]="font.size" />
91
+ </mat-form-field>
92
+ <mat-form-field appearance="outline" *ngIf="hasProperty('weight')">
93
+ <mat-label i18n="settings|Font Weight">Weight</mat-label>
94
+ <mat-select placeholder="Weight" [(value)]="font.weight" disableRipple (selectionChange)="markForCheck()">
95
+ <mat-option *ngFor="let weight of fontWeightList" [value]="weight">
96
+ {{ weight }}
97
+ </mat-option>
98
+ </mat-select>
99
+ </mat-form-field>
100
+ <mat-form-field appearance="outline" style="min-width: 90px;">
101
+ <mat-label i18n="settings|Font Style">Style</mat-label>
102
+ <mat-select placeholder="Style" [(value)]="font.style" disableRipple (selectionChange)="markForCheck()">
103
+ <mat-option *ngFor="let style of styles" [value]="style" i18n>
104
+ {{ getStyleLabel(style) }}
105
+ </mat-option>
106
+ </mat-select>
107
+ </mat-form-field>
108
+ </div>
109
+ `,
110
+ changeDetection: ChangeDetectionStrategy.OnPush,
111
+ styles: [`
112
+ :host {
113
+ display: block;
114
+ width: 100%;
115
+ }
116
+ `]
117
+ },] }
118
+ ];
119
+ FontStylesComponent.ctorParameters = () => [
120
+ { type: PbEmailObjectStoreService },
121
+ { type: Array, decorators: [{ type: Inject, args: [PB_GOOGLE_FONTS,] }] },
122
+ { type: Array, decorators: [{ type: Inject, args: [PB_FALLBACK_FONTS,] }] }
123
+ ];
124
+ FontStylesComponent.propDecorators = {
125
+ font: [{ type: Input }]
126
+ };
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1zdHlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvZ3JvdXBzL2ZvbnQtc3R5bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUE2RHRILE1BQU0sT0FBTyxtQkFBbUI7SUFTOUIsWUFDVSxhQUF3QyxFQUN2QixXQUFxQixFQUNaLGFBQXVCO1FBRmpELGtCQUFhLEdBQWIsYUFBYSxDQUEyQjtRQUVkLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBVm5ELGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUN2QyxjQUFTLEdBQUcsSUFBSSxHQUFHLENBQXlCO1lBQ2xELENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQSw2QkFBNkIsQ0FBQztZQUNsRCxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUEsNkJBQTZCLENBQUM7WUFDbEQsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFBLCtCQUErQixDQUFDO1NBQ3RELENBQUMsQ0FBQztRQU9ELFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFxQjtRQUNqQyxpREFBaUQ7UUFDakQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7O1lBNUhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q1Q7Z0JBU0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07eUJBUDdDOzs7OztLQUtDO2FBR0o7OztZQTVEUSx5QkFBeUI7d0NBd0U3QixNQUFNLFNBQUMsZUFBZTt3Q0FDdEIsTUFBTSxTQUFDLGlCQUFpQjs7O21CQVgxQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElGb250IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgUEJfRkFMTEJBQ0tfRk9OVFMsIFBCX0dPT0dMRV9GT05UUyB9IGZyb20gJy4uL3Rva2Vucy90b2tlbnMnO1xyXG5pbXBvcnQgeyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BiLWZvbnQtc3R5bGVzJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImdyb3VwIHR3b1wiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiAqbmdJZj1cImhhc1Byb3BlcnR5KCdmYW1pbHknKVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cInNldHRpbmdzfEZvbnQgRmFtaWx5XCI+RmFtaWx5PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwiZm9udC5mYW1pbHlcIiBkaXNhYmxlUmlwcGxlIChzZWxlY3Rpb25DaGFuZ2UpPVwibWFya0ZvckNoZWNrKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBuYW1lIG9mIGZvbnRGYW1pbHlMaXN0XCIgW25nU3R5bGVdPVwieyBmb250RmFtaWx5OiBuYW1lIH1cIiBbdmFsdWVdPVwibmFtZVwiPlxyXG4gICAgICAgICAgICB7eyBuYW1lIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cImlzR29vZ2xlRm9udCgpXCIgaTE4bj1cInNldHRpbmdzfFBhcnRpYWwgc3VwcG9ydFwiPlBhcnRpYWwgc3VwcG9ydC48L21hdC1oaW50PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cImlzQ3VzdG9tRm9udCgpXCIgaTE4bj1cInNldHRpbmdzfEN1c3RvbSBmb250XCI+Q3VzdG9tIGZvbnQuPC9tYXQtaGludD5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCIhaXNHb29nbGVGb250KCkgJiYgIWlzQ3VzdG9tRm9udCgpXCIgaTE4bj1cInNldHRpbmdzfEZ1bGwgc3VwcG9ydFwiPkZ1bGwgc3VwcG9ydC48L21hdC1oaW50PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiAqbmdJZj1cImhhc1Byb3BlcnR5KCdmYWxsYmFjaycpXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBpMThuPVwic2V0dGluZ3N8Rm9udCBGYWxsYmFja1wiPkZhbGxiYWNrPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwiZm9udC5mYWxsYmFja1wiIFtkaXNhYmxlZF09XCIhaXNHb29nbGVGb250KCkgJiYgIWlzQ3VzdG9tRm9udCgpXCIgZGlzYWJsZVJpcHBsZSAoc2VsZWN0aW9uQ2hhbmdlKT1cIm1hcmtGb3JDaGVjaygpXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbmFtZSBvZiBmYWxsYmFja0ZvbnRDaG9pY2VzXCIgW25nU3R5bGVdPVwieyBmb250RmFtaWx5OiBuYW1lIH1cIiBbdmFsdWVdPVwibmFtZVwiPlxyXG4gICAgICAgICAgICB7eyBuYW1lIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDxtYXQtaGludCBpMThuPVwic2V0dGluZ3N8RnVsbCBzdXBwb3J0XCI+RnVsbCBzdXBwb3J0LjwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgdGhyZWVcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJoYXNQcm9wZXJ0eSgnc2l6ZScpXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBpMThuPVwic2V0dGluZ3N8Rm9udCBTaXplXCI+U2l6ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgbWF4PVwiMzBcIiBtaW49XCIxMFwiIHN0ZXA9XCIxXCIgKGlucHV0KT1cIm1hcmtGb3JDaGVjaygpXCIgWyhuZ01vZGVsKV09XCJmb250LnNpemVcIiAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiAqbmdJZj1cImhhc1Byb3BlcnR5KCd3ZWlnaHQnKVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cInNldHRpbmdzfEZvbnQgV2VpZ2h0XCI+V2VpZ2h0PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJXZWlnaHRcIiBbKHZhbHVlKV09XCJmb250LndlaWdodFwiIGRpc2FibGVSaXBwbGUgKHNlbGVjdGlvbkNoYW5nZSk9XCJtYXJrRm9yQ2hlY2soKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHdlaWdodCBvZiBmb250V2VpZ2h0TGlzdFwiIFt2YWx1ZV09XCJ3ZWlnaHRcIj5cclxuICAgICAgICAgICAge3sgd2VpZ2h0IH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIm1pbi13aWR0aDogOTBweDtcIj5cclxuICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJzZXR0aW5nc3xGb250IFN0eWxlXCI+U3R5bGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlN0eWxlXCIgWyh2YWx1ZSldPVwiZm9udC5zdHlsZVwiIGRpc2FibGVSaXBwbGUgKHNlbGVjdGlvbkNoYW5nZSk9XCJtYXJrRm9yQ2hlY2soKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0eWxlIG9mIHN0eWxlc1wiIFt2YWx1ZV09XCJzdHlsZVwiIGkxOG4+XHJcbiAgICAgICAgICAgIHt7IGdldFN0eWxlTGFiZWwoc3R5bGUpIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgOmhvc3Qge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICB9XHJcbiAgICBgXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9udFN0eWxlc0NvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgZm9udDogSUZvbnQ7XHJcbiAgcHJpdmF0ZSBmb250c01hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcclxuICBwcml2YXRlIHN0eWxlc01hcCA9IG5ldyBNYXA8SUZvbnRbJ3N0eWxlJ10sIHN0cmluZz4oW1xyXG4gICAgWydub3JtYWwnLCAkbG9jYWxpemVgOkBAZm9udF9zdHlsZV9ub3JtYWw6Tm9ybWFsYF0sXHJcbiAgICBbJ2l0YWxpYycsICRsb2NhbGl6ZWA6QEBmb250X3N0eWxlX2l0YWxpYzpJdGFsaWNgXSxcclxuICAgIFsnb2JsaXF1ZScsICRsb2NhbGl6ZWA6QEBmb250X3N0eWxlX29ibGlxdWU6T2JsaXF1ZWBdXHJcbiAgXSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYkVtYWlsT2JqZWN0OiBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChQQl9HT09HTEVfRk9OVFMpIGdvb2dsZUZvbnRzOiBzdHJpbmdbXSxcclxuICAgIEBJbmplY3QoUEJfRkFMTEJBQ0tfRk9OVFMpIHB1YmxpYyBmYWxsYmFja0ZvbnRzOiBzdHJpbmdbXVxyXG4gICkge1xyXG4gICAgZ29vZ2xlRm9udHMuZm9yRWFjaChmb250ID0+IHtcclxuICAgICAgY29uc3QgW2ZhbWlseSwgLi4ud2VpZ2h0c10gPSBmb250Lm1hdGNoKC9bXlxcZDosXXsyLH18XFxkezN9L2cpO1xyXG4gICAgICB0aGlzLmZvbnRzTWFwLnNldChmYW1pbHkucmVwbGFjZSgnKycsICcgJyksIFsuLi5uZXcgU2V0KHdlaWdodHMubWFwKE51bWJlcikpXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBmb250V2VpZ2h0TGlzdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlzR29vZ2xlRm9udCgpID8gdGhpcy5mb250c01hcC5nZXQodGhpcy5mb250LmZhbWlseSkgOiBbMTAwLCA0MDAsIDUwMCwgNzAwLCA5MDBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1c3RvbUZvbnRzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiAodGhpcy5wYkVtYWlsT2JqZWN0LkVtYWlsLmN1c3RvbUZvbnRzIHx8IFtdKS5tYXAoZiA9PiBmLmZhbWlseSk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VzdG9tU3RhY2soKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmN1c3RvbUZvbnRzLmpvaW4oJywgJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgZm9udEZhbWlseUxpc3QoKSB7XHJcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuY3VzdG9tU3RhY2s7XHJcbiAgICByZXR1cm4gWy4uLihzdGFjayA/IFtzdGFja10gOiBbXSksIC4uLnRoaXMuZm9udHNNYXAua2V5cygpLCAuLi50aGlzLmZhbGxiYWNrRm9udHNdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhbGxiYWNrRm9udENob2ljZXMoKSB7XHJcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuY3VzdG9tU3RhY2s7XHJcbiAgICByZXR1cm4gWy4uLihzdGFjayA/IFtzdGFja10gOiBbXSksIC4uLnRoaXMuZmFsbGJhY2tGb250c107XHJcbiAgfVxyXG5cclxuICBnZXQgc3R5bGVzKCk6IElGb250WydzdHlsZSddW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLnN0eWxlc01hcC5rZXlzKCldO1xyXG4gIH1cclxuXHJcbiAgbWFya0ZvckNoZWNrKCkge1xyXG4gICAgdGhpcy5wYkVtYWlsT2JqZWN0Lm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgaXNDdXN0b21Gb250KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tRm9udHMuaW5jbHVkZXModGhpcy5mb250LmZhbWlseSk7XHJcbiAgfVxyXG5cclxuICBpc0dvb2dsZUZvbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb250c01hcC5oYXModGhpcy5mb250LmZhbWlseSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdHlsZUxhYmVsKHN0eWxlOiBJRm9udFsnc3R5bGUnXSk6IHN0cmluZyB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICByZXR1cm4gdGhpcy5zdHlsZXNNYXAuZ2V0KHN0eWxlKSE7XHJcbiAgfVxyXG5cclxuICBoYXNQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb250Lmhhc093blByb3BlcnR5KHByb3BlcnR5KTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,45 +1,45 @@
1
- /*
2
- * Copyright (c) 2024 Pobuca.
3
- * All rights reserved.
4
- */
5
- import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
6
- import { PbEmailObjectStoreService } from '../services/internals/pb-email-object-store/pb-email-object-store.service';
7
- export class GapsComponent {
8
- constructor(emailObject) {
9
- this.emailObject = emailObject;
10
- }
11
- markForCheck() {
12
- this.emailObject.markForCheck();
13
- }
14
- }
15
- GapsComponent.decorators = [
16
- { type: Component, args: [{
17
- selector: 'pb-gaps',
18
- template: `
19
- <div class="group">
20
- <mat-form-field appearance="outline">
21
- <mat-label i18n="Gaps settings|Vertical Gaps">Vertical Gaps</mat-label>
22
- <input matInput type="number" min="0" step="1" [(ngModel)]="gaps[0]" (input)="markForCheck()" />
23
- </mat-form-field>
24
- <mat-form-field appearance="outline">
25
- <mat-label i18n="Gaps settings|Horizontal Gaps">Horizontal Gaps</mat-label>
26
- <input matInput type="number" min="0" step="1" [(ngModel)]="gaps[1]" (input)="markForCheck()" />
27
- </mat-form-field>
28
- </div>
29
- `,
30
- changeDetection: ChangeDetectionStrategy.OnPush,
31
- styles: [`
32
- :host {
33
- display: block;
34
- width: 100%;
35
- }
36
- `]
37
- },] }
38
- ];
39
- GapsComponent.ctorParameters = () => [
40
- { type: PbEmailObjectStoreService }
41
- ];
42
- GapsComponent.propDecorators = {
43
- gaps: [{ type: Input }]
44
- };
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2Fwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9ncm91cHMvZ2Fwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQTBCdEgsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsV0FBc0M7UUFBdEMsZ0JBQVcsR0FBWCxXQUFXLENBQTJCO0lBQUcsQ0FBQztJQUU5RCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7WUE5QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxTQUFTO2dCQUNuQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7O0dBV1Q7Z0JBU0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07eUJBUDdDOzs7OztLQUtDO2FBR0o7OztZQXpCUSx5QkFBeUI7OzttQkEyQi9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbnRlcm5hbHMvcGItZW1haWwtb2JqZWN0LXN0b3JlL3BiLWVtYWlsLW9iamVjdC1zdG9yZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGItZ2FwcycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImdyb3VwXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgPG1hdC1sYWJlbCBpMThuPVwiR2FwcyBzZXR0aW5nc3xWZXJ0aWNhbCBHYXBzXCI+VmVydGljYWwgR2FwczwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjBcIiBzdGVwPVwiMVwiIFsobmdNb2RlbCldPVwiZ2Fwc1swXVwiIChpbnB1dCk9XCJtYXJrRm9yQ2hlY2soKVwiIC8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cIkdhcHMgc2V0dGluZ3N8SG9yaXpvbnRhbCBHYXBzXCI+SG9yaXpvbnRhbCBHYXBzPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMFwiIHN0ZXA9XCIxXCIgWyhuZ01vZGVsKV09XCJnYXBzWzFdXCIgKGlucHV0KT1cIm1hcmtGb3JDaGVjaygpXCIgLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIGBcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgR2Fwc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGdhcHM6IFtudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW1haWxPYmplY3Q6IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UpIHt9XG5cbiAgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuZW1haWxPYmplY3QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ==
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
6
+ import { PbEmailObjectStoreService } from '../services/internals/pb-email-object-store/pb-email-object-store.service';
7
+ export class GapsComponent {
8
+ constructor(emailObject) {
9
+ this.emailObject = emailObject;
10
+ }
11
+ markForCheck() {
12
+ this.emailObject.markForCheck();
13
+ }
14
+ }
15
+ GapsComponent.decorators = [
16
+ { type: Component, args: [{
17
+ selector: 'pb-gaps',
18
+ template: `
19
+ <div class="group">
20
+ <mat-form-field appearance="outline">
21
+ <mat-label i18n="Gaps settings|Vertical Gaps">Vertical Gaps</mat-label>
22
+ <input matInput type="number" min="0" step="1" [(ngModel)]="gaps[0]" (input)="markForCheck()" />
23
+ </mat-form-field>
24
+ <mat-form-field appearance="outline">
25
+ <mat-label i18n="Gaps settings|Horizontal Gaps">Horizontal Gaps</mat-label>
26
+ <input matInput type="number" min="0" step="1" [(ngModel)]="gaps[1]" (input)="markForCheck()" />
27
+ </mat-form-field>
28
+ </div>
29
+ `,
30
+ changeDetection: ChangeDetectionStrategy.OnPush,
31
+ styles: [`
32
+ :host {
33
+ display: block;
34
+ width: 100%;
35
+ }
36
+ `]
37
+ },] }
38
+ ];
39
+ GapsComponent.ctorParameters = () => [
40
+ { type: PbEmailObjectStoreService }
41
+ ];
42
+ GapsComponent.propDecorators = {
43
+ gaps: [{ type: Input }]
44
+ };
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2Fwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9ncm91cHMvZ2Fwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQTBCdEgsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsV0FBc0M7UUFBdEMsZ0JBQVcsR0FBWCxXQUFXLENBQTJCO0lBQUcsQ0FBQztJQUU5RCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7WUE5QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxTQUFTO2dCQUNuQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7O0dBV1Q7Z0JBU0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07eUJBUDdDOzs7OztLQUtDO2FBR0o7OztZQXpCUSx5QkFBeUI7OzttQkEyQi9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxyXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbnRlcm5hbHMvcGItZW1haWwtb2JqZWN0LXN0b3JlL3BiLWVtYWlsLW9iamVjdC1zdG9yZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGItZ2FwcycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJncm91cFwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJHYXBzIHNldHRpbmdzfFZlcnRpY2FsIEdhcHNcIj5WZXJ0aWNhbCBHYXBzPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgc3RlcD1cIjFcIiBbKG5nTW9kZWwpXT1cImdhcHNbMF1cIiAoaW5wdXQpPVwibWFya0ZvckNoZWNrKClcIiAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJHYXBzIHNldHRpbmdzfEhvcml6b250YWwgR2Fwc1wiPkhvcml6b250YWwgR2FwczwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMFwiIHN0ZXA9XCIxXCIgWyhuZ01vZGVsKV09XCJnYXBzWzFdXCIgKGlucHV0KT1cIm1hcmtGb3JDaGVjaygpXCIgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXHJcbiAgICBgXHJcbiAgICAgIDpob3N0IHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgfVxyXG4gICAgYFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEdhcHNDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGdhcHM6IFtudW1iZXIsIG51bWJlcl07XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbWFpbE9iamVjdDogUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSkge31cclxuXHJcbiAgbWFya0ZvckNoZWNrKCkge1xyXG4gICAgdGhpcy5lbWFpbE9iamVjdC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,68 +1,68 @@
1
- /*
2
- * Copyright (c) 2024 Pobuca.
3
- * All rights reserved.
4
- */
5
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
6
- import { PbEmailObjectStoreService } from '../services/internals/pb-email-object-store/pb-email-object-store.service';
7
- export class LineHeightComponent {
8
- constructor(emailObject) {
9
- this.emailObject = emailObject;
10
- this.label = $localize `:@@line_height_label:Line Height`;
11
- this.units = ['%', 'px', 'none'];
12
- this.unitsLabels = new Map([
13
- ['%', $localize `:@@unit_percent:Percent`],
14
- ['px', $localize `:@@unit_pixels:Pixels`],
15
- ['none', $localize `:@@unit_none:None`]
16
- ]);
17
- }
18
- markForCheck() {
19
- this.emailObject.markForCheck();
20
- }
21
- getUnitLabel(unit) {
22
- return this.unitsLabels.get(unit);
23
- }
24
- }
25
- LineHeightComponent.decorators = [
26
- { type: Component, args: [{
27
- selector: 'pb-line-height',
28
- template: `
29
- <div class="group">
30
- <mat-form-field appearance="outline">
31
- <mat-label>{{ label }}</mat-label>
32
- <input
33
- matInput
34
- [(ngModel)]="lineHeight.value"
35
- type="number"
36
- step="1"
37
- (input)="markForCheck()"
38
- [disabled]="lineHeight.unit === 'none'"
39
- />
40
- </mat-form-field>
41
- <mat-form-field appearance="outline">
42
- <mat-label i18n="Line Height Settings|Change Line Height Unit">Unit</mat-label>
43
- <mat-select placeholder="Unit" [(value)]="lineHeight.unit" (selectionChange)="markForCheck()" disableRipple>
44
- <mat-option *ngFor="let unit of units" [value]="unit" i18n>
45
- {{ getUnitLabel(unit) }}
46
- </mat-option>
47
- </mat-select>
48
- </mat-form-field>
49
- </div>
50
- `,
51
- changeDetection: ChangeDetectionStrategy.OnPush,
52
- styles: [`
53
- :host {
54
- display: block;
55
- width: 100%;
56
- }
57
- `]
58
- },] }
59
- ];
60
- LineHeightComponent.ctorParameters = () => [
61
- { type: PbEmailObjectStoreService }
62
- ];
63
- LineHeightComponent.propDecorators = {
64
- lineHeight: [{ type: Input }],
65
- label: [{ type: Input }],
66
- units: [{ type: Input }]
67
- };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1oZWlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvZ3JvdXBzL2xpbmUtaGVpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBcUN0SCxNQUFNLE9BQU8sbUJBQW1CO0lBVTlCLFlBQW9CLFdBQXNDO1FBQXRDLGdCQUFXLEdBQVgsV0FBVyxDQUEyQjtRQVJqRCxVQUFLLEdBQUcsU0FBUyxDQUFBLGtDQUFrQyxDQUFDO1FBQ3BELFVBQUssR0FBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLGdCQUFXLEdBQXdCLElBQUksR0FBRyxDQUFDO1lBQ2pELENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQSx5QkFBeUIsQ0FBQztZQUN6QyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUEsdUJBQXVCLENBQUM7WUFDeEMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFBLG1CQUFtQixDQUFDO1NBQ3ZDLENBQUMsQ0FBQztJQUUwRCxDQUFDO0lBRTlELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBaUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7WUFyREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDtnQkFTRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTt5QkFQN0M7Ozs7O0tBS0M7YUFHSjs7O1lBcENRLHlCQUF5Qjs7O3lCQXNDL0IsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElMaW5lSGVpZ2h0LCBUTGluZUhlaWdodCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BiLWxpbmUtaGVpZ2h0JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IGxhYmVsIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsaW5lSGVpZ2h0LnZhbHVlXCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgKGlucHV0KT1cIm1hcmtGb3JDaGVjaygpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibGluZUhlaWdodC51bml0ID09PSAnbm9uZSdcIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJMaW5lIEhlaWdodCBTZXR0aW5nc3xDaGFuZ2UgTGluZSBIZWlnaHQgVW5pdFwiPlVuaXQ8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJVbml0XCIgWyh2YWx1ZSldPVwibGluZUhlaWdodC51bml0XCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJtYXJrRm9yQ2hlY2soKVwiIGRpc2FibGVSaXBwbGU+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVuaXQgb2YgdW5pdHNcIiBbdmFsdWVdPVwidW5pdFwiIGkxOG4+XG4gICAgICAgICAgICB7eyBnZXRVbml0TGFiZWwodW5pdCkgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIGBcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTGluZUhlaWdodENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGxpbmVIZWlnaHQ6IElMaW5lSGVpZ2h0O1xuICBASW5wdXQoKSBsYWJlbCA9ICRsb2NhbGl6ZWA6QEBsaW5lX2hlaWdodF9sYWJlbDpMaW5lIEhlaWdodGA7XG4gIEBJbnB1dCgpIHVuaXRzOiBUTGluZUhlaWdodFtdID0gWyclJywgJ3B4JywgJ25vbmUnXTtcbiAgcHJpdmF0ZSB1bml0c0xhYmVsczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoW1xuICAgIFsnJScsICRsb2NhbGl6ZWA6QEB1bml0X3BlcmNlbnQ6UGVyY2VudGBdLFxuICAgIFsncHgnLCAkbG9jYWxpemVgOkBAdW5pdF9waXhlbHM6UGl4ZWxzYF0sXG4gICAgWydub25lJywgJGxvY2FsaXplYDpAQHVuaXRfbm9uZTpOb25lYF1cbiAgXSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbWFpbE9iamVjdDogUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSkge31cblxuICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5lbWFpbE9iamVjdC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldFVuaXRMYWJlbCh1bml0OiBUTGluZUhlaWdodCkge1xuICAgIHJldHVybiB0aGlzLnVuaXRzTGFiZWxzLmdldCh1bml0KTtcbiAgfVxufVxuIl19
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
6
+ import { PbEmailObjectStoreService } from '../services/internals/pb-email-object-store/pb-email-object-store.service';
7
+ export class LineHeightComponent {
8
+ constructor(emailObject) {
9
+ this.emailObject = emailObject;
10
+ this.label = $localize `:@@line_height_label:Line Height`;
11
+ this.units = ['%', 'px', 'none'];
12
+ this.unitsLabels = new Map([
13
+ ['%', $localize `:@@unit_percent:Percent`],
14
+ ['px', $localize `:@@unit_pixels:Pixels`],
15
+ ['none', $localize `:@@unit_none:None`]
16
+ ]);
17
+ }
18
+ markForCheck() {
19
+ this.emailObject.markForCheck();
20
+ }
21
+ getUnitLabel(unit) {
22
+ return this.unitsLabels.get(unit);
23
+ }
24
+ }
25
+ LineHeightComponent.decorators = [
26
+ { type: Component, args: [{
27
+ selector: 'pb-line-height',
28
+ template: `
29
+ <div class="group">
30
+ <mat-form-field appearance="outline">
31
+ <mat-label>{{ label }}</mat-label>
32
+ <input
33
+ matInput
34
+ [(ngModel)]="lineHeight.value"
35
+ type="number"
36
+ step="1"
37
+ (input)="markForCheck()"
38
+ [disabled]="lineHeight.unit === 'none'"
39
+ />
40
+ </mat-form-field>
41
+ <mat-form-field appearance="outline">
42
+ <mat-label i18n="Line Height Settings|Change Line Height Unit">Unit</mat-label>
43
+ <mat-select placeholder="Unit" [(value)]="lineHeight.unit" (selectionChange)="markForCheck()" disableRipple>
44
+ <mat-option *ngFor="let unit of units" [value]="unit" i18n>
45
+ {{ getUnitLabel(unit) }}
46
+ </mat-option>
47
+ </mat-select>
48
+ </mat-form-field>
49
+ </div>
50
+ `,
51
+ changeDetection: ChangeDetectionStrategy.OnPush,
52
+ styles: [`
53
+ :host {
54
+ display: block;
55
+ width: 100%;
56
+ }
57
+ `]
58
+ },] }
59
+ ];
60
+ LineHeightComponent.ctorParameters = () => [
61
+ { type: PbEmailObjectStoreService }
62
+ ];
63
+ LineHeightComponent.propDecorators = {
64
+ lineHeight: [{ type: Input }],
65
+ label: [{ type: Input }],
66
+ units: [{ type: Input }]
67
+ };
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1oZWlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvZ3JvdXBzL2xpbmUtaGVpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBcUN0SCxNQUFNLE9BQU8sbUJBQW1CO0lBVTlCLFlBQW9CLFdBQXNDO1FBQXRDLGdCQUFXLEdBQVgsV0FBVyxDQUEyQjtRQVJqRCxVQUFLLEdBQUcsU0FBUyxDQUFBLGtDQUFrQyxDQUFDO1FBQ3BELFVBQUssR0FBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLGdCQUFXLEdBQXdCLElBQUksR0FBRyxDQUFDO1lBQ2pELENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQSx5QkFBeUIsQ0FBQztZQUN6QyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUEsdUJBQXVCLENBQUM7WUFDeEMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFBLG1CQUFtQixDQUFDO1NBQ3ZDLENBQUMsQ0FBQztJQUUwRCxDQUFDO0lBRTlELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBaUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7WUFyREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDtnQkFTRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTt5QkFQN0M7Ozs7O0tBS0M7YUFHSjs7O1lBcENRLHlCQUF5Qjs7O3lCQXNDL0IsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxyXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElMaW5lSGVpZ2h0LCBUTGluZUhlaWdodCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbnRlcm5hbHMvcGItZW1haWwtb2JqZWN0LXN0b3JlL3BiLWVtYWlsLW9iamVjdC1zdG9yZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGItbGluZS1oZWlnaHQnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGluZUhlaWdodC52YWx1ZVwiXHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIHN0ZXA9XCIxXCJcclxuICAgICAgICAgIChpbnB1dCk9XCJtYXJrRm9yQ2hlY2soKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibGluZUhlaWdodC51bml0ID09PSAnbm9uZSdcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cIkxpbmUgSGVpZ2h0IFNldHRpbmdzfENoYW5nZSBMaW5lIEhlaWdodCBVbml0XCI+VW5pdDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiVW5pdFwiIFsodmFsdWUpXT1cImxpbmVIZWlnaHQudW5pdFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwibWFya0ZvckNoZWNrKClcIiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVuaXQgb2YgdW5pdHNcIiBbdmFsdWVdPVwidW5pdFwiIGkxOG4+XHJcbiAgICAgICAgICAgIHt7IGdldFVuaXRMYWJlbCh1bml0KSB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXHJcbiAgICBgXHJcbiAgICAgIDpob3N0IHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgfVxyXG4gICAgYFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIExpbmVIZWlnaHRDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGxpbmVIZWlnaHQ6IElMaW5lSGVpZ2h0O1xyXG4gIEBJbnB1dCgpIGxhYmVsID0gJGxvY2FsaXplYDpAQGxpbmVfaGVpZ2h0X2xhYmVsOkxpbmUgSGVpZ2h0YDtcclxuICBASW5wdXQoKSB1bml0czogVExpbmVIZWlnaHRbXSA9IFsnJScsICdweCcsICdub25lJ107XHJcbiAgcHJpdmF0ZSB1bml0c0xhYmVsczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoW1xyXG4gICAgWyclJywgJGxvY2FsaXplYDpAQHVuaXRfcGVyY2VudDpQZXJjZW50YF0sXHJcbiAgICBbJ3B4JywgJGxvY2FsaXplYDpAQHVuaXRfcGl4ZWxzOlBpeGVsc2BdLFxyXG4gICAgWydub25lJywgJGxvY2FsaXplYDpAQHVuaXRfbm9uZTpOb25lYF1cclxuICBdKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbWFpbE9iamVjdDogUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSkge31cclxuXHJcbiAgbWFya0ZvckNoZWNrKCkge1xyXG4gICAgdGhpcy5lbWFpbE9iamVjdC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGdldFVuaXRMYWJlbCh1bml0OiBUTGluZUhlaWdodCkge1xyXG4gICAgcmV0dXJuIHRoaXMudW5pdHNMYWJlbHMuZ2V0KHVuaXQpO1xyXG4gIH1cclxufVxyXG4iXX0=