@posiwise/resource-contact-us 0.0.1 → 0.0.2

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 (23) hide show
  1. package/esm2022/index.mjs +8 -1
  2. package/esm2022/lib/custom-uploader/custom-uploader.component.mjs +107 -0
  3. package/esm2022/lib/field-error-display/field-error-display.component.mjs +16 -0
  4. package/esm2022/lib/field-error-display/field-error-display.module.mjs +23 -0
  5. package/esm2022/lib/image-cropper/image-cropper.component.mjs +92 -0
  6. package/esm2022/lib/image-cropper/profile-image-cropper.module.mjs +45 -0
  7. package/esm2022/lib/resource-header/edit-navbar-modal.component.mjs +195 -0
  8. package/esm2022/lib/resource-header/resource-header.component.mjs +227 -0
  9. package/esm2022/lib/resource-header/resource-header.module.mjs +63 -0
  10. package/fesm2022/posiwise-resource-contact-us-edit-navbar-modal.component-BtICpJJx.mjs +197 -0
  11. package/fesm2022/posiwise-resource-contact-us-edit-navbar-modal.component-BtICpJJx.mjs.map +1 -0
  12. package/fesm2022/posiwise-resource-contact-us.mjs +528 -9
  13. package/fesm2022/posiwise-resource-contact-us.mjs.map +1 -1
  14. package/index.d.ts +7 -0
  15. package/lib/custom-uploader/custom-uploader.component.d.ts +35 -0
  16. package/lib/field-error-display/field-error-display.component.d.ts +7 -0
  17. package/lib/field-error-display/field-error-display.module.d.ts +13 -0
  18. package/lib/image-cropper/image-cropper.component.d.ts +30 -0
  19. package/lib/image-cropper/profile-image-cropper.module.d.ts +19 -0
  20. package/lib/resource-header/edit-navbar-modal.component.d.ts +22 -0
  21. package/lib/resource-header/resource-header.component.d.ts +46 -0
  22. package/lib/resource-header/resource-header.module.d.ts +21 -0
  23. package/package.json +1 -1
@@ -0,0 +1,195 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { CommonModule } from '@angular/common';
4
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
5
+ import { DragDropModule } from '@angular/cdk/drag-drop';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "@angular/cdk/drag-drop";
10
+ /**
11
+ * Edit Navbar Modal Component
12
+ * Contains drag-drop functionality for reordering navbar items
13
+ * This component is lazy-loaded only when the edit modal is opened
14
+ */
15
+ export class EditNavbarModalComponent {
16
+ constructor() {
17
+ this.save = new EventEmitter();
18
+ this.close = new EventEmitter();
19
+ }
20
+ dropNavbarItems(event) {
21
+ moveItemInArray(this.editingNavbar.items, event.previousIndex, event.currentIndex);
22
+ }
23
+ dropNavbarSubtitles(index, event) {
24
+ moveItemInArray(this.editingNavbar.items[index].subtitles, event.previousIndex, event.currentIndex);
25
+ }
26
+ addNavbarItem() {
27
+ this.editingNavbar.items.push({
28
+ title: '',
29
+ path: '',
30
+ subtitles: []
31
+ });
32
+ }
33
+ removeNavbarItem(index) {
34
+ this.editingNavbar.items.splice(index, 1);
35
+ }
36
+ addNavbarSubtitle(index) {
37
+ this.editingNavbar.items[index].subtitles.push({
38
+ title: '',
39
+ path: ''
40
+ });
41
+ }
42
+ removeNavbarSubtitle(navIndex, subIndex) {
43
+ this.editingNavbar.items[navIndex].subtitles.splice(subIndex, 1);
44
+ }
45
+ onSave() {
46
+ this.save.emit(this.editingNavbar);
47
+ }
48
+ onClose() {
49
+ this.close.emit();
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: EditNavbarModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: EditNavbarModalComponent, isStandalone: true, selector: "pw-edit-navbar-modal", inputs: { editingNavbar: "editingNavbar" }, outputs: { save: "save", close: "close" }, ngImport: i0, template: `
53
+ <div class="modal-header">
54
+ <h5 class="modal-title">Edit Navbar Links</h5>
55
+ <button type="button" class="btn-close" aria-label="Close" (click)="onClose()"></button>
56
+ </div>
57
+
58
+ <div class="modal-body">
59
+ <h4 class="mb-3">Navbar Section</h4>
60
+ <div cdkDropList (cdkDropListDropped)="dropNavbarItems($event)">
61
+ <div *ngFor="let item of editingNavbar.items; let i = index" class="border p-3 mb-3" cdkDrag>
62
+ <div class="row">
63
+ <div class="col-md-5 mb-2">
64
+ <label [for]="'navbarTitle' + i" class="form-label">Title</label>
65
+ <input [id]="'navbarTitle' + i" class="form-control" [(ngModel)]="item.title" />
66
+ </div>
67
+ <div class="col-md-5 mb-2">
68
+ <label [for]="'navbarPath' + i" class="form-label">Path</label>
69
+ <input [id]="'navbarPath' + i" class="form-control" [(ngModel)]="item.path" />
70
+ </div>
71
+ <div class="col-md-2 d-flex justify-content-between align-items-center mt-4">
72
+ <i class="fa fa-trash in-page-trash-icon text-danger cursor-pointer"
73
+ (click)="removeNavbarItem(i)"
74
+ (keydown.enter)="removeNavbarItem(i)"
75
+ (keydown.space)="removeNavbarItem(i)"></i>
76
+ <i class="fa fa-bars in-page-bars-icon cursor-pointer" cdkDragHandle></i>
77
+ </div>
78
+ </div>
79
+
80
+ <div cdkDropList (cdkDropListDropped)="dropNavbarSubtitles(i, $event)">
81
+ <div *ngFor="let sub of item.subtitles; let j = index" class="row border p-3 mb-2 align-items-center" cdkDrag>
82
+ <div class="col-md-5">
83
+ <label [for]="'navbarSubtitleTitle' + i + j" class="form-label">Subtitle Title</label>
84
+ <input [id]="'navbarSubtitleTitle' + i + j" class="form-control" [(ngModel)]="sub.title" />
85
+ </div>
86
+ <div class="col-md-5">
87
+ <label [for]="'navbarSubtitlePath' + i + j" class="form-label">Subtitle Path</label>
88
+ <input [id]="'navbarSubtitlePath' + i + j" class="form-control" [(ngModel)]="sub.path" />
89
+ </div>
90
+ <div class="col-md-2 d-flex justify-content-between align-items-center mt-4">
91
+ <i class="fa fa-trash in-page-trash-icon text-danger cursor-pointer"
92
+ (click)="removeNavbarSubtitle(i, j)"
93
+ (keydown.enter)="removeNavbarSubtitle(i, j)"
94
+ (keydown.space)="removeNavbarSubtitle(i, j)"></i>
95
+ <i class="fa fa-bars in-page-bars-icon cursor-pointer" cdkDragHandle></i>
96
+ </div>
97
+ </div>
98
+ </div>
99
+
100
+ <button class="btn btn-outline-primary btn-sm mt-2" (click)="addNavbarSubtitle(i)">
101
+ + Add Subtitle
102
+ </button>
103
+ </div>
104
+ </div>
105
+
106
+ <button class="btn btn-primary mt-3" (click)="addNavbarItem()">
107
+ + Add Navbar Item
108
+ </button>
109
+ </div>
110
+
111
+ <div class="modal-footer">
112
+ <button class="btn btn-secondary" (click)="onClose()">Cancel</button>
113
+ <button class="btn btn-primary" (click)="onSave()">Save</button>
114
+ </div>
115
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }] }); }
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: EditNavbarModalComponent, decorators: [{
118
+ type: Component,
119
+ args: [{
120
+ selector: 'pw-edit-navbar-modal',
121
+ standalone: true,
122
+ imports: [CommonModule, FormsModule, DragDropModule],
123
+ template: `
124
+ <div class="modal-header">
125
+ <h5 class="modal-title">Edit Navbar Links</h5>
126
+ <button type="button" class="btn-close" aria-label="Close" (click)="onClose()"></button>
127
+ </div>
128
+
129
+ <div class="modal-body">
130
+ <h4 class="mb-3">Navbar Section</h4>
131
+ <div cdkDropList (cdkDropListDropped)="dropNavbarItems($event)">
132
+ <div *ngFor="let item of editingNavbar.items; let i = index" class="border p-3 mb-3" cdkDrag>
133
+ <div class="row">
134
+ <div class="col-md-5 mb-2">
135
+ <label [for]="'navbarTitle' + i" class="form-label">Title</label>
136
+ <input [id]="'navbarTitle' + i" class="form-control" [(ngModel)]="item.title" />
137
+ </div>
138
+ <div class="col-md-5 mb-2">
139
+ <label [for]="'navbarPath' + i" class="form-label">Path</label>
140
+ <input [id]="'navbarPath' + i" class="form-control" [(ngModel)]="item.path" />
141
+ </div>
142
+ <div class="col-md-2 d-flex justify-content-between align-items-center mt-4">
143
+ <i class="fa fa-trash in-page-trash-icon text-danger cursor-pointer"
144
+ (click)="removeNavbarItem(i)"
145
+ (keydown.enter)="removeNavbarItem(i)"
146
+ (keydown.space)="removeNavbarItem(i)"></i>
147
+ <i class="fa fa-bars in-page-bars-icon cursor-pointer" cdkDragHandle></i>
148
+ </div>
149
+ </div>
150
+
151
+ <div cdkDropList (cdkDropListDropped)="dropNavbarSubtitles(i, $event)">
152
+ <div *ngFor="let sub of item.subtitles; let j = index" class="row border p-3 mb-2 align-items-center" cdkDrag>
153
+ <div class="col-md-5">
154
+ <label [for]="'navbarSubtitleTitle' + i + j" class="form-label">Subtitle Title</label>
155
+ <input [id]="'navbarSubtitleTitle' + i + j" class="form-control" [(ngModel)]="sub.title" />
156
+ </div>
157
+ <div class="col-md-5">
158
+ <label [for]="'navbarSubtitlePath' + i + j" class="form-label">Subtitle Path</label>
159
+ <input [id]="'navbarSubtitlePath' + i + j" class="form-control" [(ngModel)]="sub.path" />
160
+ </div>
161
+ <div class="col-md-2 d-flex justify-content-between align-items-center mt-4">
162
+ <i class="fa fa-trash in-page-trash-icon text-danger cursor-pointer"
163
+ (click)="removeNavbarSubtitle(i, j)"
164
+ (keydown.enter)="removeNavbarSubtitle(i, j)"
165
+ (keydown.space)="removeNavbarSubtitle(i, j)"></i>
166
+ <i class="fa fa-bars in-page-bars-icon cursor-pointer" cdkDragHandle></i>
167
+ </div>
168
+ </div>
169
+ </div>
170
+
171
+ <button class="btn btn-outline-primary btn-sm mt-2" (click)="addNavbarSubtitle(i)">
172
+ + Add Subtitle
173
+ </button>
174
+ </div>
175
+ </div>
176
+
177
+ <button class="btn btn-primary mt-3" (click)="addNavbarItem()">
178
+ + Add Navbar Item
179
+ </button>
180
+ </div>
181
+
182
+ <div class="modal-footer">
183
+ <button class="btn btn-secondary" (click)="onClose()">Cancel</button>
184
+ <button class="btn btn-primary" (click)="onSave()">Save</button>
185
+ </div>
186
+ `
187
+ }]
188
+ }], propDecorators: { editingNavbar: [{
189
+ type: Input
190
+ }], save: [{
191
+ type: Output
192
+ }], close: [{
193
+ type: Output
194
+ }] } });
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1uYXZiYXItbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1jb250YWN0LXVzL3NyYy9saWIvcmVzb3VyY2UtaGVhZGVyL2VkaXQtbmF2YmFyLW1vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFFeEQ7Ozs7R0FJRztBQXNFSCxNQUFNLE9BQU8sd0JBQXdCO0lBckVyQztRQXVFYyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQTRDOUM7SUExQ0csZUFBZSxDQUFDLEtBQVU7UUFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsS0FBVTtRQUN6QyxlQUFlLENBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUN6QyxLQUFLLENBQUMsYUFBYSxFQUNuQixLQUFLLENBQUMsWUFBWSxDQUNyQixDQUFDO0lBQ04sQ0FBQztJQUVELGFBQWE7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDMUIsS0FBSyxFQUFFLEVBQUU7WUFDVCxJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRSxFQUFFO1NBQ2hCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMzQyxLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1NBQ1gsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7K0dBOUNRLHdCQUF3QjttR0FBeEIsd0JBQXdCLHVLQWpFdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQStEVCwyREFoRVMsWUFBWSwySkFBRSxXQUFXLDhtQkFBRSxjQUFjOzs0RkFrRTFDLHdCQUF3QjtrQkFyRXBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDO29CQUNwRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQStEVDtpQkFDSjs4QkFFWSxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG4vKipcbiAqIEVkaXQgTmF2YmFyIE1vZGFsIENvbXBvbmVudFxuICogQ29udGFpbnMgZHJhZy1kcm9wIGZ1bmN0aW9uYWxpdHkgZm9yIHJlb3JkZXJpbmcgbmF2YmFyIGl0ZW1zXG4gKiBUaGlzIGNvbXBvbmVudCBpcyBsYXp5LWxvYWRlZCBvbmx5IHdoZW4gdGhlIGVkaXQgbW9kYWwgaXMgb3BlbmVkXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctZWRpdC1uYXZiYXItbW9kYWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIERyYWdEcm9wTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkVkaXQgTmF2YmFyIExpbmtzPC9oNT5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzPVwibWItM1wiPk5hdmJhciBTZWN0aW9uPC9oND5cbiAgICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wTmF2YmFySXRlbXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZWRpdGluZ05hdmJhci5pdGVtczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYm9yZGVyIHAtMyBtYi0zXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInbmF2YmFyVGl0bGUnICsgaVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlRpdGxlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cIiduYXZiYXJUaXRsZScgKyBpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIml0ZW0udGl0bGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTUgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIiduYXZiYXJQYXRoJyArIGlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QYXRoPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cIiduYXZiYXJQYXRoJyArIGlcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiaXRlbS5wYXRoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggaW4tcGFnZS10cmFzaC1pY29uIHRleHQtZGFuZ2VyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlTmF2YmFySXRlbShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlTmF2YmFySXRlbShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlTmF2YmFySXRlbShpKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhcnMgaW4tcGFnZS1iYXJzLWljb24gY3Vyc29yLXBvaW50ZXJcIiBjZGtEcmFnSGFuZGxlPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcE5hdmJhclN1YnRpdGxlcyhpLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWIgb2YgaXRlbS5zdWJ0aXRsZXM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJvdyBib3JkZXIgcC0zIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ25hdmJhclN1YnRpdGxlVGl0bGUnICsgaSArIGpcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdWJ0aXRsZSBUaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiJ25hdmJhclN1YnRpdGxlVGl0bGUnICsgaSArIGpcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic3ViLnRpdGxlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ25hdmJhclN1YnRpdGxlUGF0aCcgKyBpICsgalwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN1YnRpdGxlIFBhdGg8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cIiduYXZiYXJTdWJ0aXRsZVBhdGgnICsgaSArIGpcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic3ViLnBhdGhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCBpbi1wYWdlLXRyYXNoLWljb24gdGV4dC1kYW5nZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlTmF2YmFyU3VidGl0bGUoaSwgailcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJyZW1vdmVOYXZiYXJTdWJ0aXRsZShpLCBqKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZU5hdmJhclN1YnRpdGxlKGksIGopXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhcnMgaW4tcGFnZS1iYXJzLWljb24gY3Vyc29yLXBvaW50ZXJcIiBjZGtEcmFnSGFuZGxlPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLXNtIG10LTJcIiAoY2xpY2spPVwiYWRkTmF2YmFyU3VidGl0bGUoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICsgQWRkIFN1YnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXQtM1wiIChjbGljayk9XCJhZGROYXZiYXJJdGVtKClcIj5cbiAgICAgICAgICAgICAgICArIEFkZCBOYXZiYXIgSXRlbVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJvbkNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib25TYXZlKClcIj5TYXZlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgRWRpdE5hdmJhck1vZGFsQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBlZGl0aW5nTmF2YmFyOiBhbnk7XG4gICAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBkcm9wTmF2YmFySXRlbXMoZXZlbnQ6IGFueSkge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5lZGl0aW5nTmF2YmFyLml0ZW1zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIH1cblxuICAgIGRyb3BOYXZiYXJTdWJ0aXRsZXMoaW5kZXg6IG51bWJlciwgZXZlbnQ6IGFueSkge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdOYXZiYXIuaXRlbXNbaW5kZXhdLnN1YnRpdGxlcyxcbiAgICAgICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGROYXZiYXJJdGVtKCkge1xuICAgICAgICB0aGlzLmVkaXRpbmdOYXZiYXIuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICAgIHN1YnRpdGxlczogW11cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTmF2YmFySXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZ05hdmJhci5pdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGFkZE5hdmJhclN1YnRpdGxlKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nTmF2YmFyLml0ZW1zW2luZGV4XS5zdWJ0aXRsZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBwYXRoOiAnJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVOYXZiYXJTdWJ0aXRsZShuYXZJbmRleDogbnVtYmVyLCBzdWJJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZ05hdmJhci5pdGVtc1tuYXZJbmRleF0uc3VidGl0bGVzLnNwbGljZShzdWJJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLnNhdmUuZW1pdCh0aGlzLmVkaXRpbmdOYXZiYXIpO1xuICAgIH1cblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,227 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Component, ElementRef, HostListener, Inject, Injector, Input, TemplateRef, ViewChild } from '@angular/core';
3
+ import { AdminService } from '@posiwise/admin-module-utils';
4
+ import { AppBaseComponent } from '@posiwise/app-base-component';
5
+ import { HelperService } from '@posiwise/helper-service';
6
+ import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@posiwise/admin-module-utils";
9
+ import * as i2 from "@ng-bootstrap/ng-bootstrap";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@angular/router";
12
+ import * as i5 from "@posiwise/directives";
13
+ import * as i6 from "../custom-uploader/custom-uploader.component";
14
+ export class ResourceHeaderComponent extends AppBaseComponent {
15
+ constructor(injector, document, adminService, modalService) {
16
+ super(injector);
17
+ this.document = document;
18
+ this.adminService = adminService;
19
+ this.modalService = modalService;
20
+ this.isScrolled = false;
21
+ this.open = false;
22
+ this.logo = '/assets/img/landing-page/site-logo.png'; // Static fallback for LCP optimization
23
+ this.navbarItems = this.appConfig?.pages_config?.navbar?.items;
24
+ this.domainId = this.appConfig?.domain_id;
25
+ this.contrastImageUrl = this.appConfig?.company?.logos?.main_contrast?.url;
26
+ this.darkImageUrl = this.appConfig?.company?.logos?.main_dark?.url;
27
+ this.editingNavbar = {
28
+ items: []
29
+ };
30
+ this.canEditResourcesValue = false;
31
+ }
32
+ ngOnInit() {
33
+ console.log('In Header');
34
+ // Subscribe to appConfig changes to update logo dynamically
35
+ this.appConfigService.appConfig$.subscribe(config => {
36
+ if (config?.company?.logos) {
37
+ const isAboutUs = this.router.url?.includes('/about-us');
38
+ const logos = config.company.logos;
39
+ // Use smaller version for better performance (100x100 instead of 1200x264)
40
+ this.logo = isAboutUs
41
+ ? logos.main_contrast?.url || '/assets/img/landing-page/site-logo.png'
42
+ : logos.main_dark?.url || '/assets/img/landing-page/site-logo.png';
43
+ }
44
+ });
45
+ if (this.userLoggedIn) {
46
+ this.localStorage.getItem$('product').subscribe(res => {
47
+ const data = res ? JSON.parse(res) : null;
48
+ this.id = data?.subscriptionId;
49
+ });
50
+ }
51
+ }
52
+ ngOnChanges(changes) {
53
+ if (changes['user'] || changes['userLoggedIn']) {
54
+ if (this.userLoggedIn && this.user) {
55
+ this.updateCanEditResourcesValue();
56
+ }
57
+ }
58
+ }
59
+ openLogoEditModal() {
60
+ this.modalService.open(this.logoEditModal, { centered: true, size: 'md' });
61
+ }
62
+ onSaveLogo(event) {
63
+ const formData = new FormData();
64
+ formData.append('subscription_id', this.id);
65
+ if (event.file instanceof File) {
66
+ formData.append(this.isScrolled ? 'logo_main_contrast' : 'logo_main_dark', event.file);
67
+ }
68
+ else {
69
+ formData.append(this.isScrolled ? 'remove_logo_main_contrast' : 'remove_logo_main_dark', 'true');
70
+ }
71
+ this.adminService.updateDomainConfig(this.domainId, formData).subscribe(() => {
72
+ if (event.file) {
73
+ this.logo = URL.createObjectURL(event.file);
74
+ if (this.isScrolled) {
75
+ this.contrastImageUrl = URL.createObjectURL(event.file);
76
+ }
77
+ else {
78
+ this.darkImageUrl = URL.createObjectURL(event.file);
79
+ }
80
+ this.modalService.dismissAll();
81
+ }
82
+ this.toast.success(event.file ? 'Logo updated' : 'Logo removed');
83
+ });
84
+ }
85
+ onScroll() {
86
+ clearTimeout(this.scrollTimeout);
87
+ this.scrollTimeout = setTimeout(() => {
88
+ requestAnimationFrame(() => {
89
+ const isAboutUs = this.router?.url?.includes('/about-us');
90
+ const shouldScroll = window.scrollY > 150;
91
+ this.isScrolled = shouldScroll;
92
+ if (!isAboutUs) {
93
+ // Use smaller versions for better performance
94
+ const logos = this.appConfig?.company?.logos;
95
+ const newLogo = shouldScroll
96
+ ? logos?.main_contrast?.url ??
97
+ this.contrastImageUrl ??
98
+ '/assets/img/landing-page/site-logo.png'
99
+ : logos?.main_dark?.url ??
100
+ this.darkImageUrl ??
101
+ '/assets/img/landing-page/site-logo.png';
102
+ if (this.logo !== newLogo) {
103
+ this.logo = newLogo;
104
+ }
105
+ }
106
+ if (window.innerWidth < 768) {
107
+ this.open = false;
108
+ const collapseElement = this.navbarCollapse?.nativeElement;
109
+ if (collapseElement?.classList.contains('show')) {
110
+ collapseElement.classList.remove('show');
111
+ }
112
+ }
113
+ // Close all dropdowns when scrolling
114
+ this.closeAllDropdowns();
115
+ });
116
+ }, 50);
117
+ }
118
+ onDocumentClick(event) {
119
+ // Close all dropdowns when clicking outside
120
+ const target = event.target;
121
+ if (!target.closest('.nav-item') &&
122
+ !target.closest('.popup') &&
123
+ !target.closest('.sign-btn')) {
124
+ this.closeAllDropdowns();
125
+ }
126
+ }
127
+ closeAllDropdowns() {
128
+ if (this.navbarItems) {
129
+ this.navbarItems.forEach(item => {
130
+ if (item.open) {
131
+ item.open = false;
132
+ }
133
+ });
134
+ }
135
+ }
136
+ openDropdown(item) {
137
+ // Close other dropdowns first
138
+ this.navbarItems.forEach(navItem => {
139
+ if (navItem !== item) {
140
+ navItem.open = false;
141
+ }
142
+ });
143
+ item.open = true;
144
+ }
145
+ onDropdownItemClick(item) {
146
+ item.open = false;
147
+ }
148
+ async openEditNavbarModal() {
149
+ const navbarConfig = this.appConfig.pages_config?.navbar ?? {};
150
+ navbarConfig.items = navbarConfig.items ?? [];
151
+ this.editingNavbar = JSON.parse(JSON.stringify(navbarConfig));
152
+ try {
153
+ // Dynamically import EditNavbarModalComponent (includes DragDropModule)
154
+ // This only loads when the edit modal is opened (user is logged in with edit permissions)
155
+ // Reduces bundle size for landing pages where users aren't logged in
156
+ const { EditNavbarModalComponent } = await import('./edit-navbar-modal.component');
157
+ const modalRef = this.modalService.open(EditNavbarModalComponent, {
158
+ size: 'lg',
159
+ centered: true,
160
+ windowClass: 'modal-holder'
161
+ });
162
+ modalRef.componentInstance.editingNavbar = this.editingNavbar;
163
+ modalRef.componentInstance.save.subscribe((updatedNavbar) => {
164
+ this.saveNavbarLinks(modalRef, updatedNavbar);
165
+ });
166
+ modalRef.componentInstance.close.subscribe(() => {
167
+ modalRef.close();
168
+ });
169
+ }
170
+ catch (error) {
171
+ console.error('Failed to load edit navbar modal:', error);
172
+ this.toast.error('Failed to open edit modal. Please try again.');
173
+ }
174
+ }
175
+ saveNavbarLinks(modal, updatedNavbar) {
176
+ const navbarToSave = updatedNavbar || this.editingNavbar;
177
+ const updatedConfig = {
178
+ navbar: navbarToSave,
179
+ subscription_id: this.id
180
+ };
181
+ this.adminService
182
+ .updateDomainConfig(this.appConfig?.domain_id, updatedConfig)
183
+ .subscribe(() => {
184
+ this.toast.success('Navbar links updated');
185
+ this.navbarItems = [...navbarToSave.items];
186
+ // Update the appConfig to reflect the saved changes
187
+ this.appConfig.pages_config = this.appConfig.pages_config ?? {};
188
+ this.appConfig.pages_config.navbar = { ...navbarToSave };
189
+ modal.close();
190
+ });
191
+ }
192
+ updateCanEditResourcesValue() {
193
+ this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
194
+ }
195
+ canEditResources() {
196
+ return this.canEditResourcesValue;
197
+ }
198
+ navigateToLogin() {
199
+ window.location.href = '/login';
200
+ }
201
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderComponent, deps: [{ token: i0.Injector }, { token: DOCUMENT }, { token: i1.AdminService }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
202
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceHeaderComponent, selector: "pw-resource-header", inputs: { user: "user", userLoggedIn: "userLoggedIn" }, host: { listeners: { "window:scroll": "onScroll()", "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "navbarCollapse", first: true, predicate: ["collapsibleNavbar"], descendants: true }, { propertyName: "logoEditModal", first: true, predicate: ["logoEditModal"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<nav class=\"navbar navbar-expand-md navbar-dark fixed-top primary-nav-bg-color resource-header\"\n id=\"banner\">\n <div class=\"container container-wrapper banner-section\">\n\n <!-- Toggler/collapsibe Button -->\n <button class=\"navbar-toggler header-menu-bar\"\n type=\"button\"\n aria-label=\"Toggle navigation\"\n data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapsibleNavbar\">\n <img src=\"/assets/img/products/trial/navbar-toggle-icon.png\"\n class=\"img-fluid navbar-toggle-icon\"\n alt=\"\" />\n </button>\n\n <!-- Mobile Logo -->\n <div class=\"d-md-none mb-icon\">\n <div>\n <img src=\"/assets/img/landing-page/site-logo.png\"\n [src]=\"logo || '/assets/img/landing-page/site-logo.png'\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\"\n width=\"100\"\n height=\"100\"\n loading=\"eager\"\n fetchpriority=\"high\"\n sizes=\"100px\" />\n </div>\n </div>\n\n\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer text-black me-3\"\n (click)=\"openLogoEditModal()\"\n (keydown.enter)=\"openLogoEditModal()\"\n (keydown.space)=\"openLogoEditModal()\"\n title=\"Edit Logo\"></i>\n\n\n <!-- Navbar links -->\n <div class=\"collapse navbar-collapse mt-3 mt-md-0\"\n id=\"collapsibleNavbar\"\n #collapsibleNavbar>\n <div class=\"row align-items-center w-100\">\n\n <!-- Always occupy 3 columns for logo -->\n <div class=\"col-md-2 d-none d-md-flex align-items-center\">\n <div>\n <img src=\"/assets/img/landing-page/site-logo.png\"\n [src]=\"logo || '/assets/img/landing-page/site-logo.png'\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\"\n width=\"100\"\n height=\"100\"\n loading=\"eager\"\n fetchpriority=\"high\"\n sizes=\"100px\" />\n </div>\n </div>\n\n\n <div class=\"col-md-7 d-flex justify-content-start\">\n <ul #anchorLinks\n class=\"navbar-nav flex gap-4 me-0 wow fadeInUp position-relative\"\n data-wow-duration=\"2s\">\n\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer text-black me-3\"\n (click)=\"openEditNavbarModal()\"\n (keydown.enter)=\"openEditNavbarModal()\"\n (keydown.space)=\"openEditNavbarModal()\"\n title=\"Edit Navbar Links\"></i>\n <li class=\"nav-item\" *ngFor=\"let item of navbarItems\">\n <div class=\"dropdown-container\"\n (mouseenter)=\"openDropdown(item)\">\n <a\n class=\"nav-link\"\n href=\"javascript:void(0)\"\n [ngClass]=\"{ 'scrolled-nav-link': isScrolled }\"\n (click)=\"item.subtitles?.length ? (item.open = !item.open) : null\"\n [attr.href]=\"!(item.subtitles?.length) ? item.path : null\"\n >\n {{ item?.title }}\n <i *ngIf=\"item.subtitles.length > 0 && item.open\" class=\"fa-solid fa-caret-down\"></i>\n </a>\n <div class=\"popup position-absolute\"\n *ngIf=\"item.subtitles.length > 0 && item.open\">\n <ul>\n <li\n *ngFor=\"let sub of item.subtitles\"\n [routerLink]=\"sub.path\"\n class=\"dropdownItem\"\n (click)=\"onDropdownItemClick(item)\"\n (keydown.enter)=\"onDropdownItemClick(item)\"\n (keydown.space)=\"onDropdownItemClick(item)\"\n >\n {{ sub.title }}\n </li>\n </ul>\n </div>\n </div>\n </li>\n\n <li class=\"nav-item ms-2 mb-3 d-flex d-md-none\">\n <a class=\"sign-btn sign-header-btn\"\n (click)=\"navigateToLogin()\">Log In</a>\n </li>\n </ul>\n </div>\n\n <!-- Always 3 columns for login -->\n <div class=\"col-md-3 d-none d-md-flex justify-content-end\">\n <a class=\"sign-btn sign-header-btn\"\n (click)=\"navigateToLogin()\">Log In</a>\n </div>\n\n </div>\n </div>\n </div>\n</nav>\n\n<ng-template #logoEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Logo</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <pw-custom-uploader\n [title]=\"'Main Logo'\"\n [controlName]=\"'logo_main'\"\n [aspectRatio]=\"'fullLogo'\"\n [previewData]=\"{ url: logo, name: 'logo_main.png' }\"\n (saveEvent)=\"onSaveLogo($event)\">\n </pw-custom-uploader>\n </div>\n</ng-template>", styles: [".navbar-custom-background{background-color:#00000080;box-shadow:2px 2px 15px 2px #0000001f;transition:width 2s,height 2s,-webkit-transform 2s;transition:width 2s,height 2s,transform 2s background-color .5s ease;z-index:9999}.fixed-top{position:fixed!important}.primary-button{background-color:#000;border-radius:50px;color:#fff;font: 600 16.3px Montserrat-Regular,sans-serif;padding:5px 16px!important;width:auto;display:flex;gap:15px;align-items:center;justify-content:space-between}.logo_img{width:60%!important;min-width:159px!important}.navbar-toggle-icon{width:25px}@media (min-width: 500px){.navbar-nav .nav-item button{margin-top:10px}}@media (max-width: 1200px){.navbar-nav .nav-item .nav-link{font-size:15px!important}}.navbar-nav .nav-link{display:inline-flex!important;white-space:nowrap;gap:4px}.fa-caret-down{font-family:\"Font Awesome 6 Pro\",sans-serif;font-weight:900}@media (min-width: 1200px){.navbar-nav .nav-item .nav-link{padding-bottom:0!important;padding-top:0!important}.popup{top:3.4rem!important;background-color:var(--first)!important;background-color:transparent;padding:10px;z-index:1000;transition:opacity .3s ease-in-out}.popup ul li{color:#fff;font: 500 14px Montserrat-Regular,sans-serif;cursor:pointer;border-bottom:1px solid #eee}.popup ul li:last-child{border-bottom:none}.router-link-active{color:#000!important}}@media (max-width: 1200px){.popup ul li{color:#fff;font: 500 14px Montserrat-Regular,sans-serif;cursor:pointer;border-bottom:1px solid #eee}.popup ul li:last-child{border-bottom:none}.popup ul li:hover{background-color:#f1f1f1}.mb-icon{width:200px}.container-wrapper{padding:10px 20px!important}.dropdown-container{position:relative;display:inline-block}.popup{top:0%!important;background-color:var(--first)!important;left:10rem;padding:10px;z-index:1000;transition:opacity .3s ease-in-out}}@media (max-width: 500px){.navbar-nav{background-color:var(--first);border-top:3px solid rgb(254,209,54);color:#fff;margin-top:5px;z-index:1}.navbar-nav .nav-item .nav-link{font-size:100%;font-weight:500;padding:.7em 1em!important}}.popup{top:90%;background-color:transparent;padding:10px;z-index:1000}.popup ul{list-style-type:none;padding:0;margin:0}.popup ul li{padding:5px 10px;font: 500 14px Montserrat-Regular,sans-serif}.resource-header .nav-link.scrolled-nav-link{color:#fff!important}.resource-header .sign-btn,.resource-header .sign-header-btn{text-decoration:none!important}.dropdownItem{cursor:pointer}.rotate{transform:rotate(180deg)}@media (max-width: 500px){.logo_img{width:60%!important;margin-left:auto;margin-right:0;display:block;transition:margin .5s ease,width .5s ease}.navbar-nav{background-color:var(--first);border-top:3px solid rgb(254,209,54);color:#fff;margin-top:5px;z-index:1}.navbar-nav .nav-item .nav-link{font-size:100%;font-weight:500;padding:.7em 1em!important}.popup{top:0%!important;background-color:var(--first)!important;left:10rem;padding:10px;z-index:1000;transition:opacity .3s ease-in-out}.popup ul{list-style-type:none;padding:0;margin:0}.dropdownItem{cursor:pointer}.rotate{transform:rotate(180deg)}.dropdown-container{position:relative;display:inline-block}}.navbar-nav{visibility:visible!important;display:flex!important}.nav-link{text-transform:uppercase}.dropdown-container{position:relative;display:inline-block}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.LazyImgDirective, selector: "img" }, { kind: "component", type: i6.CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }] }); }
203
+ }
204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderComponent, decorators: [{
205
+ type: Component,
206
+ args: [{ selector: 'pw-resource-header', template: "<nav class=\"navbar navbar-expand-md navbar-dark fixed-top primary-nav-bg-color resource-header\"\n id=\"banner\">\n <div class=\"container container-wrapper banner-section\">\n\n <!-- Toggler/collapsibe Button -->\n <button class=\"navbar-toggler header-menu-bar\"\n type=\"button\"\n aria-label=\"Toggle navigation\"\n data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapsibleNavbar\">\n <img src=\"/assets/img/products/trial/navbar-toggle-icon.png\"\n class=\"img-fluid navbar-toggle-icon\"\n alt=\"\" />\n </button>\n\n <!-- Mobile Logo -->\n <div class=\"d-md-none mb-icon\">\n <div>\n <img src=\"/assets/img/landing-page/site-logo.png\"\n [src]=\"logo || '/assets/img/landing-page/site-logo.png'\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\"\n width=\"100\"\n height=\"100\"\n loading=\"eager\"\n fetchpriority=\"high\"\n sizes=\"100px\" />\n </div>\n </div>\n\n\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer text-black me-3\"\n (click)=\"openLogoEditModal()\"\n (keydown.enter)=\"openLogoEditModal()\"\n (keydown.space)=\"openLogoEditModal()\"\n title=\"Edit Logo\"></i>\n\n\n <!-- Navbar links -->\n <div class=\"collapse navbar-collapse mt-3 mt-md-0\"\n id=\"collapsibleNavbar\"\n #collapsibleNavbar>\n <div class=\"row align-items-center w-100\">\n\n <!-- Always occupy 3 columns for logo -->\n <div class=\"col-md-2 d-none d-md-flex align-items-center\">\n <div>\n <img src=\"/assets/img/landing-page/site-logo.png\"\n [src]=\"logo || '/assets/img/landing-page/site-logo.png'\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\"\n width=\"100\"\n height=\"100\"\n loading=\"eager\"\n fetchpriority=\"high\"\n sizes=\"100px\" />\n </div>\n </div>\n\n\n <div class=\"col-md-7 d-flex justify-content-start\">\n <ul #anchorLinks\n class=\"navbar-nav flex gap-4 me-0 wow fadeInUp position-relative\"\n data-wow-duration=\"2s\">\n\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer text-black me-3\"\n (click)=\"openEditNavbarModal()\"\n (keydown.enter)=\"openEditNavbarModal()\"\n (keydown.space)=\"openEditNavbarModal()\"\n title=\"Edit Navbar Links\"></i>\n <li class=\"nav-item\" *ngFor=\"let item of navbarItems\">\n <div class=\"dropdown-container\"\n (mouseenter)=\"openDropdown(item)\">\n <a\n class=\"nav-link\"\n href=\"javascript:void(0)\"\n [ngClass]=\"{ 'scrolled-nav-link': isScrolled }\"\n (click)=\"item.subtitles?.length ? (item.open = !item.open) : null\"\n [attr.href]=\"!(item.subtitles?.length) ? item.path : null\"\n >\n {{ item?.title }}\n <i *ngIf=\"item.subtitles.length > 0 && item.open\" class=\"fa-solid fa-caret-down\"></i>\n </a>\n <div class=\"popup position-absolute\"\n *ngIf=\"item.subtitles.length > 0 && item.open\">\n <ul>\n <li\n *ngFor=\"let sub of item.subtitles\"\n [routerLink]=\"sub.path\"\n class=\"dropdownItem\"\n (click)=\"onDropdownItemClick(item)\"\n (keydown.enter)=\"onDropdownItemClick(item)\"\n (keydown.space)=\"onDropdownItemClick(item)\"\n >\n {{ sub.title }}\n </li>\n </ul>\n </div>\n </div>\n </li>\n\n <li class=\"nav-item ms-2 mb-3 d-flex d-md-none\">\n <a class=\"sign-btn sign-header-btn\"\n (click)=\"navigateToLogin()\">Log In</a>\n </li>\n </ul>\n </div>\n\n <!-- Always 3 columns for login -->\n <div class=\"col-md-3 d-none d-md-flex justify-content-end\">\n <a class=\"sign-btn sign-header-btn\"\n (click)=\"navigateToLogin()\">Log In</a>\n </div>\n\n </div>\n </div>\n </div>\n</nav>\n\n<ng-template #logoEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Logo</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <pw-custom-uploader\n [title]=\"'Main Logo'\"\n [controlName]=\"'logo_main'\"\n [aspectRatio]=\"'fullLogo'\"\n [previewData]=\"{ url: logo, name: 'logo_main.png' }\"\n (saveEvent)=\"onSaveLogo($event)\">\n </pw-custom-uploader>\n </div>\n</ng-template>", styles: [".navbar-custom-background{background-color:#00000080;box-shadow:2px 2px 15px 2px #0000001f;transition:width 2s,height 2s,-webkit-transform 2s;transition:width 2s,height 2s,transform 2s background-color .5s ease;z-index:9999}.fixed-top{position:fixed!important}.primary-button{background-color:#000;border-radius:50px;color:#fff;font: 600 16.3px Montserrat-Regular,sans-serif;padding:5px 16px!important;width:auto;display:flex;gap:15px;align-items:center;justify-content:space-between}.logo_img{width:60%!important;min-width:159px!important}.navbar-toggle-icon{width:25px}@media (min-width: 500px){.navbar-nav .nav-item button{margin-top:10px}}@media (max-width: 1200px){.navbar-nav .nav-item .nav-link{font-size:15px!important}}.navbar-nav .nav-link{display:inline-flex!important;white-space:nowrap;gap:4px}.fa-caret-down{font-family:\"Font Awesome 6 Pro\",sans-serif;font-weight:900}@media (min-width: 1200px){.navbar-nav .nav-item .nav-link{padding-bottom:0!important;padding-top:0!important}.popup{top:3.4rem!important;background-color:var(--first)!important;background-color:transparent;padding:10px;z-index:1000;transition:opacity .3s ease-in-out}.popup ul li{color:#fff;font: 500 14px Montserrat-Regular,sans-serif;cursor:pointer;border-bottom:1px solid #eee}.popup ul li:last-child{border-bottom:none}.router-link-active{color:#000!important}}@media (max-width: 1200px){.popup ul li{color:#fff;font: 500 14px Montserrat-Regular,sans-serif;cursor:pointer;border-bottom:1px solid #eee}.popup ul li:last-child{border-bottom:none}.popup ul li:hover{background-color:#f1f1f1}.mb-icon{width:200px}.container-wrapper{padding:10px 20px!important}.dropdown-container{position:relative;display:inline-block}.popup{top:0%!important;background-color:var(--first)!important;left:10rem;padding:10px;z-index:1000;transition:opacity .3s ease-in-out}}@media (max-width: 500px){.navbar-nav{background-color:var(--first);border-top:3px solid rgb(254,209,54);color:#fff;margin-top:5px;z-index:1}.navbar-nav .nav-item .nav-link{font-size:100%;font-weight:500;padding:.7em 1em!important}}.popup{top:90%;background-color:transparent;padding:10px;z-index:1000}.popup ul{list-style-type:none;padding:0;margin:0}.popup ul li{padding:5px 10px;font: 500 14px Montserrat-Regular,sans-serif}.resource-header .nav-link.scrolled-nav-link{color:#fff!important}.resource-header .sign-btn,.resource-header .sign-header-btn{text-decoration:none!important}.dropdownItem{cursor:pointer}.rotate{transform:rotate(180deg)}@media (max-width: 500px){.logo_img{width:60%!important;margin-left:auto;margin-right:0;display:block;transition:margin .5s ease,width .5s ease}.navbar-nav{background-color:var(--first);border-top:3px solid rgb(254,209,54);color:#fff;margin-top:5px;z-index:1}.navbar-nav .nav-item .nav-link{font-size:100%;font-weight:500;padding:.7em 1em!important}.popup{top:0%!important;background-color:var(--first)!important;left:10rem;padding:10px;z-index:1000;transition:opacity .3s ease-in-out}.popup ul{list-style-type:none;padding:0;margin:0}.dropdownItem{cursor:pointer}.rotate{transform:rotate(180deg)}.dropdown-container{position:relative;display:inline-block}}.navbar-nav{visibility:visible!important;display:flex!important}.nav-link{text-transform:uppercase}.dropdown-container{position:relative;display:inline-block}\n"] }]
207
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: Document, decorators: [{
208
+ type: Inject,
209
+ args: [DOCUMENT]
210
+ }] }, { type: i1.AdminService }, { type: i2.NgbModal }], propDecorators: { navbarCollapse: [{
211
+ type: ViewChild,
212
+ args: ['collapsibleNavbar']
213
+ }], logoEditModal: [{
214
+ type: ViewChild,
215
+ args: ['logoEditModal']
216
+ }], user: [{
217
+ type: Input
218
+ }], userLoggedIn: [{
219
+ type: Input
220
+ }], onScroll: [{
221
+ type: HostListener,
222
+ args: ['window:scroll', []]
223
+ }], onDocumentClick: [{
224
+ type: HostListener,
225
+ args: ['document:click', ['$event']]
226
+ }] } });
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcmVzb3VyY2UtY29udGFjdC11cy9zcmMvbGliL3Jlc291cmNlLWhlYWRlci9yZXNvdXJjZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1jb250YWN0LXVzL3NyYy9saWIvcmVzb3VyY2UtaGVhZGVyL3Jlc291cmNlLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7O0FBcUJ0RCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBc0J6RCxZQUNJLFFBQWtCLEVBQ2lCLFFBQWtCLEVBQ3BDLFlBQTBCLEVBQzFCLFlBQXNCO1FBRXZDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUptQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBcEIzQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixTQUFJLEdB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a0JBTG5DLFNBQVM7K0JBQ0ksb0JBQW9COzswQkE0QnpCLE1BQU07MkJBQUMsUUFBUTsyRkF2QlksY0FBYztzQkFBN0MsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0YsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNqQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkF5Rk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFO2dCQXVDakMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuaW1wb3J0IHsgQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tdXBsb2FkZXIvY3VzdG9tLXVwbG9hZGVyLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBMb2dvQ29uZmlnIHtcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgdmVyc2lvbl8xMDB4MTAwPzoge1xuICAgICAgICB1cmw/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuaW50ZXJmYWNlIExvZ29zQ29uZmlnIHtcbiAgICBtYWluX2NvbnRyYXN0PzogTG9nb0NvbmZpZztcbiAgICBtYWluX2Rhcms/OiBMb2dvQ29uZmlnO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXJlc291cmNlLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc291cmNlLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmVzb3VyY2UtaGVhZGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VIZWFkZXJDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoJ2NvbGxhcHNpYmxlTmF2YmFyJykgbmF2YmFyQ29sbGFwc2U6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnbG9nb0VkaXRNb2RhbCcpIGxvZ29FZGl0TW9kYWw6IFRlbXBsYXRlUmVmPEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50PjtcbiAgICBASW5wdXQoKSB1c2VyOiBVc2VyO1xuICAgIEBJbnB1dCgpIHVzZXJMb2dnZWRJbjogYm9vbGVhbjtcblxuICAgIGlzU2Nyb2xsZWQgPSBmYWxzZTtcbiAgICBvcGVuID0gZmFsc2U7XG4gICAgbG9nbyA9ICcvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZyc7IC8vIFN0YXRpYyBmYWxsYmFjayBmb3IgTENQIG9wdGltaXphdGlvblxuICAgIG5hdmJhckl0ZW1zID0gdGhpcy5hcHBDb25maWc/LnBhZ2VzX2NvbmZpZz8ubmF2YmFyPy5pdGVtcztcbiAgICBkb21haW5JZCA9IHRoaXMuYXBwQ29uZmlnPy5kb21haW5faWQ7XG4gICAgY29udHJhc3RJbWFnZVVybCA9IHRoaXMuYXBwQ29uZmlnPy5jb21wYW55Py5sb2dvcz8ubWFpbl9jb250cmFzdD8udXJsO1xuICAgIGRhcmtJbWFnZVVybCA9IHRoaXMuYXBwQ29uZmlnPy5jb21wYW55Py5sb2dvcz8ubWFpbl9kYXJrPy51cmw7XG5cbiAgICBlZGl0aW5nTmF2YmFyID0ge1xuICAgICAgICBpdGVtczogW11cbiAgICB9O1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2Nyb2xsVGltZW91dDtcblxuICAgIGNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdJbiBIZWFkZXInKTtcbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGFwcENvbmZpZyBjaGFuZ2VzIHRvIHVwZGF0ZSBsb2dvIGR5bmFtaWNhbGx5XG4gICAgICAgIHRoaXMuYXBwQ29uZmlnU2VydmljZS5hcHBDb25maWckLnN1YnNjcmliZShjb25maWcgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8uY29tcGFueT8ubG9nb3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0Fib3V0VXMgPSB0aGlzLnJvdXRlci51cmw/LmluY2x1ZGVzKCcvYWJvdXQtdXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dvcyA9IGNvbmZpZy5jb21wYW55LmxvZ29zIGFzIExvZ29zQ29uZmlnO1xuXG4gICAgICAgICAgICAgICAgLy8gVXNlIHNtYWxsZXIgdmVyc2lvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlICgxMDB4MTAwIGluc3RlYWQgb2YgMTIwMHgyNjQpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvID0gaXNBYm91dFVzXG4gICAgICAgICAgICAgICAgICAgID8gbG9nb3MubWFpbl9jb250cmFzdD8udXJsIHx8ICcvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZydcbiAgICAgICAgICAgICAgICAgICAgOiBsb2dvcy5tYWluX2Rhcms/LnVybCB8fCAnL2Fzc2V0cy9pbWcvbGFuZGluZy1wYWdlL3NpdGUtbG9nby5wbmcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4pIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0kKCdwcm9kdWN0Jykuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlcyA/IEpTT04ucGFyc2UocmVzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IGRhdGE/LnN1YnNjcmlwdGlvbklkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd1c2VyJ10gfHwgY2hhbmdlc1sndXNlckxvZ2dlZEluJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbiAmJiB0aGlzLnVzZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbkVkaXRSZXNvdXJjZXNWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbkxvZ29FZGl0TW9kYWwoKSB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5sb2dvRWRpdE1vZGFsLCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnIH0pO1xuICAgIH1cblxuICAgIG9uU2F2ZUxvZ28oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdzdWJzY3JpcHRpb25faWQnLCB0aGlzLmlkKTtcbiAgICAgICAgaWYgKGV2ZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQodGhpcy5pc1Njcm9sbGVkID8gJ2xvZ29fbWFpbl9jb250cmFzdCcgOiAnbG9nb19tYWluX2RhcmsnLCBldmVudC5maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPyAncmVtb3ZlX2xvZ29fbWFpbl9jb250cmFzdCcgOiAncmVtb3ZlX2xvZ29fbWFpbl9kYXJrJyxcbiAgICAgICAgICAgICAgICAndHJ1ZSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS51cGRhdGVEb21haW5Db25maWcodGhpcy5kb21haW5JZCwgZm9ybURhdGEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nbyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZXZlbnQuZmlsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyYXN0SW1hZ2VVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGV2ZW50LmZpbGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGFya0ltYWdlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChldmVudC5maWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKGV2ZW50LmZpbGUgPyAnTG9nbyB1cGRhdGVkJyA6ICdMb2dvIHJlbW92ZWQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICAgIG9uU2Nyb2xsKCk6IHZvaWQge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWJvdXRVcyA9IHRoaXMucm91dGVyPy51cmw/LmluY2x1ZGVzKCcvYWJvdXQtdXMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRTY3JvbGwgPSB3aW5kb3cuc2Nyb2xsWSA+IDE1MDtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPSBzaG91bGRTY3JvbGw7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzQWJvdXRVcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBVc2Ugc21hbGxlciB2ZXJzaW9ucyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ29zID0gdGhpcy5hcHBDb25maWc/LmNvbXBhbnk/LmxvZ29zIGFzIExvZ29zQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdMb2dvID0gc2hvdWxkU2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGxvZ29zPy5tYWluX2NvbnRyYXN0Py51cmwgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cmFzdEltYWdlVXJsID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICcvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbG9nb3M/Lm1haW5fZGFyaz8udXJsID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGFya0ltYWdlVXJsID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICcvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZyc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ28gIT09IG5ld0xvZ28pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nbyA9IG5ld0xvZ287XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA3NjgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxhcHNlRWxlbWVudCA9IHRoaXMubmF2YmFyQ29sbGFwc2U/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgYWxsIGRyb3Bkb3ducyB3aGVuIHNjcm9sbGluZ1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBbGxEcm9wZG93bnMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICAgIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2xvc2UgYWxsIGRyb3Bkb3ducyB3aGVuIGNsaWNraW5nIG91dHNpZGVcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGFyZ2V0LmNsb3Nlc3QoJy5uYXYtaXRlbScpICYmXG4gICAgICAgICAgICAhdGFyZ2V0LmNsb3Nlc3QoJy5wb3B1cCcpICYmXG4gICAgICAgICAgICAhdGFyZ2V0LmNsb3Nlc3QoJy5zaWduLWJ0bicpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbERyb3Bkb3ducygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2VBbGxEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdmJhckl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmJhckl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ub3Blbikge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5Ecm9wZG93bihpdGVtKTogdm9pZCB7XG4gICAgICAgIC8vIENsb3NlIG90aGVyIGRyb3Bkb3ducyBmaXJzdFxuICAgICAgICB0aGlzLm5hdmJhckl0ZW1zLmZvckVhY2gobmF2SXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAobmF2SXRlbSAhPT0gaXRlbSkge1xuICAgICAgICAgICAgICAgIG5hdkl0ZW0ub3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaXRlbS5vcGVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkRyb3Bkb3duSXRlbUNsaWNrKGl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlbkVkaXROYXZiYXJNb2RhbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbmF2YmFyQ29uZmlnID0gdGhpcy5hcHBDb25maWcucGFnZXNfY29uZmlnPy5uYXZiYXIgPz8ge307XG4gICAgICAgIG5hdmJhckNvbmZpZy5pdGVtcyA9IG5hdmJhckNvbmZpZy5pdGVtcyA/PyBbXTtcblxuICAgICAgICB0aGlzLmVkaXRpbmdOYXZiYXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5hdmJhckNvbmZpZykpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBEeW5hbWljYWxseSBpbXBvcnQgRWRpdE5hdmJhck1vZGFsQ29tcG9uZW50IChpbmNsdWRlcyBEcmFnRHJvcE1vZHVsZSlcbiAgICAgICAgICAgIC8vIFRoaXMgb25seSBsb2FkcyB3aGVuIHRoZSBlZGl0IG1vZGFsIGlzIG9wZW5lZCAodXNlciBpcyBsb2dnZWQgaW4gd2l0aCBlZGl0IHBlcm1pc3Npb25zKVxuICAgICAgICAgICAgLy8gUmVkdWNlcyBidW5kbGUgc2l6ZSBmb3IgbGFuZGluZyBwYWdlcyB3aGVyZSB1c2VycyBhcmVuJ3QgbG9nZ2VkIGluXG4gICAgICAgICAgICBjb25zdCB7IEVkaXROYXZiYXJNb2RhbENvbXBvbmVudCB9ID0gYXdhaXQgaW1wb3J0KCcuL2VkaXQtbmF2YmFyLW1vZGFsLmNvbXBvbmVudCcpO1xuXG4gICAgICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdE5hdmJhck1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ2xnJyxcbiAgICAgICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcidcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5lZGl0aW5nTmF2YmFyID0gdGhpcy5lZGl0aW5nTmF2YmFyO1xuICAgICAgICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2F2ZS5zdWJzY3JpYmUoKHVwZGF0ZWROYXZiYXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVOYXZiYXJMaW5rcyhtb2RhbFJlZiwgdXBkYXRlZE5hdmJhcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbW9kYWxSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgZWRpdCBuYXZiYXIgbW9kYWw6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRmFpbGVkIHRvIG9wZW4gZWRpdCBtb2RhbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVOYXZiYXJMaW5rcyhtb2RhbCwgdXBkYXRlZE5hdmJhcj86IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuYXZiYXJUb1NhdmUgPSB1cGRhdGVkTmF2YmFyIHx8IHRoaXMuZWRpdGluZ05hdmJhcjtcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHtcbiAgICAgICAgICAgIG5hdmJhcjogbmF2YmFyVG9TYXZlLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVEb21haW5Db25maWcodGhpcy5hcHBDb25maWc/LmRvbWFpbl9pZCwgdXBkYXRlZENvbmZpZylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnTmF2YmFyIGxpbmtzIHVwZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmJhckl0ZW1zID0gWy4uLm5hdmJhclRvU2F2ZS5pdGVtc107XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBhcHBDb25maWcgdG8gcmVmbGVjdCB0aGUgc2F2ZWQgY2hhbmdlc1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwQ29uZmlnLnBhZ2VzX2NvbmZpZyA9IHRoaXMuYXBwQ29uZmlnLnBhZ2VzX2NvbmZpZyA/PyB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcENvbmZpZy5wYWdlc19jb25maWcubmF2YmFyID0geyAuLi5uYXZiYXJUb1NhdmUgfTtcbiAgICAgICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDYW5FZGl0UmVzb3VyY2VzVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gSGVscGVyU2VydmljZS5jYW5FZGl0UmVzb3VyY2VzKFxuICAgICAgICAgICAgdGhpcy51c2VyLFxuICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4sXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2FuRWRpdFJlc291cmNlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlO1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9Mb2dpbigpOiB2b2lkIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2xvZ2luJztcbiAgICB9XG59XG4iLCI8bmF2IGNsYXNzPVwibmF2YmFyIG5hdmJhci1leHBhbmQtbWQgbmF2YmFyLWRhcmsgZml4ZWQtdG9wIHByaW1hcnktbmF2LWJnLWNvbG9yIHJlc291cmNlLWhlYWRlclwiXG4gIGlkPVwiYmFubmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29udGFpbmVyLXdyYXBwZXIgYmFubmVyLXNlY3Rpb25cIj5cblxuICAgIDwhLS0gVG9nZ2xlci9jb2xsYXBzaWJlIEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXIgaGVhZGVyLW1lbnUtYmFyXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgYXJpYS1sYWJlbD1cIlRvZ2dsZSBuYXZpZ2F0aW9uXCJcbiAgICAgIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIlxuICAgICAgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2libGVOYXZiYXJcIj5cbiAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWcvcHJvZHVjdHMvdHJpYWwvbmF2YmFyLXRvZ2dsZS1pY29uLnBuZ1wiXG4gICAgICAgIGNsYXNzPVwiaW1nLWZsdWlkIG5hdmJhci10b2dnbGUtaWNvblwiXG4gICAgICAgIGFsdD1cIlwiIC8+XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIE1vYmlsZSBMb2dvIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLW1kLW5vbmUgbWItaWNvblwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZ1wiXG4gICAgICAgICAgW3NyY109XCJsb2dvIHx8ICcvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZydcIlxuICAgICAgICAgIHJvdXRlckxpbms9XCIvXCJcbiAgICAgICAgICBhbHQ9XCJsb2dvXCJcbiAgICAgICAgICBjbGFzcz1cImltZy1mbHVpZCBsb2dvX2ltZ1wiXG4gICAgICAgICAgd2lkdGg9XCIxMDBcIlxuICAgICAgICAgIGhlaWdodD1cIjEwMFwiXG4gICAgICAgICAgbG9hZGluZz1cImVhZ2VyXCJcbiAgICAgICAgICBmZXRjaHByaW9yaXR5PVwiaGlnaFwiXG4gICAgICAgICAgc2l6ZXM9XCIxMDBweFwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPGkgKm5nSWY9XCJjYW5FZGl0UmVzb3VyY2VzVmFsdWVcIlxuICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBpbi1wYWdlLWVkaXQtaWNvbiBjdXJzb3ItcG9pbnRlciB0ZXh0LWJsYWNrIG1lLTNcIlxuICAgIChjbGljayk9XCJvcGVuTG9nb0VkaXRNb2RhbCgpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJvcGVuTG9nb0VkaXRNb2RhbCgpXCJcbiAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuTG9nb0VkaXRNb2RhbCgpXCJcbiAgICB0aXRsZT1cIkVkaXQgTG9nb1wiPjwvaT5cblxuXG4gICAgPCEtLSBOYXZiYXIgbGlua3MgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlIG5hdmJhci1jb2xsYXBzZSBtdC0zIG10LW1kLTBcIlxuICAgICAgaWQ9XCJjb2xsYXBzaWJsZU5hdmJhclwiXG4gICAgICAjY29sbGFwc2libGVOYXZiYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxuXG4gICAgICAgIDwhLS0gQWx3YXlzIG9jY3VweSAzIGNvbHVtbnMgZm9yIGxvZ28gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBkLW5vbmUgZC1tZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1nL2xhbmRpbmctcGFnZS9zaXRlLWxvZ28ucG5nXCJcbiAgICAgICAgICAgICAgW3NyY109XCJsb2dvIHx8ICcvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZydcIlxuICAgICAgICAgICAgICByb3V0ZXJMaW5rPVwiL1wiXG4gICAgICAgICAgICAgIGFsdD1cImxvZ29cIlxuICAgICAgICAgICAgICBjbGFzcz1cImltZy1mbHVpZCBsb2dvX2ltZ1wiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwXCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMTAwXCJcbiAgICAgICAgICAgICAgbG9hZGluZz1cImVhZ2VyXCJcbiAgICAgICAgICAgICAgZmV0Y2hwcmlvcml0eT1cImhpZ2hcIlxuICAgICAgICAgICAgICBzaXplcz1cIjEwMHB4XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTcgZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydFwiPlxuICAgICAgICAgIDx1bCAjYW5jaG9yTGlua3NcbiAgICAgICAgICAgIGNsYXNzPVwibmF2YmFyLW5hdiBmbGV4IGdhcC00IG1lLTAgd293IGZhZGVJblVwIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICAgICAgICAgIGRhdGEtd293LWR1cmF0aW9uPVwiMnNcIj5cblxuICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gY3Vyc29yLXBvaW50ZXIgdGV4dC1ibGFjayBtZS0zXCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkVkaXROYXZiYXJNb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvcGVuRWRpdE5hdmJhck1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9wZW5FZGl0TmF2YmFyTW9kYWwoKVwiXG4gICAgICAgICAgdGl0bGU9XCJFZGl0IE5hdmJhciBMaW5rc1wiPjwvaT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbmF2YmFySXRlbXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9wZW5Ecm9wZG93bihpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzY3JvbGxlZC1uYXYtbGluayc6IGlzU2Nyb2xsZWQgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIml0ZW0uc3VidGl0bGVzPy5sZW5ndGggPyAoaXRlbS5vcGVuID0gIWl0ZW0ub3BlbikgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cIiEoaXRlbS5zdWJ0aXRsZXM/Lmxlbmd0aCkgPyBpdGVtLnBhdGggOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0/LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJpdGVtLnN1YnRpdGxlcy5sZW5ndGggPiAwICYmIGl0ZW0ub3BlblwiIGNsYXNzPVwiZmEtc29saWQgZmEtY2FyZXQtZG93blwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAgcG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uc3VidGl0bGVzLmxlbmd0aCA+IDAgJiYgaXRlbS5vcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN1YiBvZiBpdGVtLnN1YnRpdGxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN1Yi5wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bkl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ecm9wZG93bkl0ZW1DbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRHJvcGRvd25JdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbkRyb3Bkb3duSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3ViLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBtcy0yIG1iLTMgZC1mbGV4IGQtbWQtbm9uZVwiPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cInNpZ24tYnRuIHNpZ24taGVhZGVyLWJ0blwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9Mb2dpbigpXCI+TG9nIEluPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFsd2F5cyAzIGNvbHVtbnMgZm9yIGxvZ2luIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZC1ub25lIGQtbWQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICA8YSBjbGFzcz1cInNpZ24tYnRuIHNpZ24taGVhZGVyLWJ0blwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvTG9naW4oKVwiPkxvZyBJbjwvYT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmF2PlxuXG48bmctdGVtcGxhdGUgI2xvZ29FZGl0TW9kYWwgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5VcGxvYWQgTG9nbzwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxwdy1jdXN0b20tdXBsb2FkZXJcbiAgICAgIFt0aXRsZV09XCInTWFpbiBMb2dvJ1wiXG4gICAgICBbY29udHJvbE5hbWVdPVwiJ2xvZ29fbWFpbidcIlxuICAgICAgW2FzcGVjdFJhdGlvXT1cIidmdWxsTG9nbydcIlxuICAgICAgW3ByZXZpZXdEYXRhXT1cInsgdXJsOiBsb2dvLCBuYW1lOiAnbG9nb19tYWluLnBuZycgfVwiXG4gICAgICAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUxvZ28oJGV2ZW50KVwiPlxuICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
@@ -0,0 +1,63 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { RouterModule } from '@angular/router';
5
+ import { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';
6
+ import { CoreTranslocoModule } from '@posiwise/core-transloco';
7
+ import { DirectivesModule } from '@posiwise/directives';
8
+ import { PipesModule } from '@posiwise/pipes';
9
+ import { NgbModalModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
10
+ import { ProfileImageCropperModule } from '../image-cropper/profile-image-cropper.module';
11
+ import { ResourceHeaderComponent } from './resource-header.component';
12
+ import * as i0 from "@angular/core";
13
+ /**
14
+ * ResourceHeaderModule - Optimized
15
+ * DragDropModule removed - now lazy-loaded only when edit modal opens
16
+ * This reduces bundle size for landing pages where users aren't logged in
17
+ */
18
+ export class ResourceHeaderModule {
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, declarations: [ResourceHeaderComponent], imports: [CommonModule,
21
+ FormsModule,
22
+ RouterModule,
23
+ // DragDropModule removed - lazy-loaded in EditNavbarModalComponent
24
+ NgbModalModule,
25
+ NgbTooltipModule,
26
+ CoreTranslocoModule,
27
+ DirectivesModule,
28
+ PipesModule,
29
+ AdminModuleUtilsModule,
30
+ ProfileImageCropperModule], exports: [ResourceHeaderComponent] }); }
31
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, imports: [CommonModule,
32
+ FormsModule,
33
+ RouterModule,
34
+ // DragDropModule removed - lazy-loaded in EditNavbarModalComponent
35
+ NgbModalModule,
36
+ NgbTooltipModule,
37
+ CoreTranslocoModule,
38
+ DirectivesModule,
39
+ PipesModule,
40
+ AdminModuleUtilsModule,
41
+ ProfileImageCropperModule] }); }
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, decorators: [{
44
+ type: NgModule,
45
+ args: [{
46
+ declarations: [ResourceHeaderComponent],
47
+ imports: [
48
+ CommonModule,
49
+ FormsModule,
50
+ RouterModule,
51
+ // DragDropModule removed - lazy-loaded in EditNavbarModalComponent
52
+ NgbModalModule,
53
+ NgbTooltipModule,
54
+ CoreTranslocoModule,
55
+ DirectivesModule,
56
+ PipesModule,
57
+ AdminModuleUtilsModule,
58
+ ProfileImageCropperModule
59
+ ],
60
+ exports: [ResourceHeaderComponent]
61
+ }]
62
+ }] });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaGVhZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcmVzb3VyY2UtY29udGFjdC11cy9zcmMvbGliL3Jlc291cmNlLWhlYWRlci9yZXNvdXJjZS1oZWFkZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUUxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFdEU7Ozs7R0FJRztBQWtCSCxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQixpQkFoQmQsdUJBQXVCLGFBRWxDLFlBQVk7WUFDWixXQUFXO1lBQ1gsWUFBWTtZQUNaLG1FQUFtRTtZQUNuRSxjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsV0FBVztZQUNYLHNCQUFzQjtZQUN0Qix5QkFBeUIsYUFFbkIsdUJBQXVCO2dIQUV4QixvQkFBb0IsWUFkekIsWUFBWTtZQUNaLFdBQVc7WUFDWCxZQUFZO1lBQ1osbUVBQW1FO1lBQ25FLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsbUJBQW1CO1lBQ25CLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsc0JBQXNCO1lBQ3RCLHlCQUF5Qjs7NEZBSXBCLG9CQUFvQjtrQkFqQmhDLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixtRUFBbUU7d0JBQ25FLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxzQkFBc0I7d0JBQ3RCLHlCQUF5QjtxQkFDNUI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ3JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFkbWluTW9kdWxlVXRpbHNNb2R1bGUgfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IENvcmVUcmFuc2xvY29Nb2R1bGUgfSBmcm9tICdAcG9zaXdpc2UvY29yZS10cmFuc2xvY28nO1xuaW1wb3J0IHsgRGlyZWN0aXZlc01vZHVsZSB9IGZyb20gJ0Bwb3Npd2lzZS9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFBpcGVzTW9kdWxlIH0gZnJvbSAnQHBvc2l3aXNlL3BpcGVzJztcblxuaW1wb3J0IHsgTmdiTW9kYWxNb2R1bGUsIE5nYlRvb2x0aXBNb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbmltcG9ydCB7IFByb2ZpbGVJbWFnZUNyb3BwZXJNb2R1bGUgfSBmcm9tICcuLi9pbWFnZS1jcm9wcGVyL3Byb2ZpbGUtaW1hZ2UtY3JvcHBlci5tb2R1bGUnO1xuXG5pbXBvcnQgeyBSZXNvdXJjZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vcmVzb3VyY2UtaGVhZGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogUmVzb3VyY2VIZWFkZXJNb2R1bGUgLSBPcHRpbWl6ZWRcbiAqIERyYWdEcm9wTW9kdWxlIHJlbW92ZWQgLSBub3cgbGF6eS1sb2FkZWQgb25seSB3aGVuIGVkaXQgbW9kYWwgb3BlbnNcbiAqIFRoaXMgcmVkdWNlcyBidW5kbGUgc2l6ZSBmb3IgbGFuZGluZyBwYWdlcyB3aGVyZSB1c2VycyBhcmVuJ3QgbG9nZ2VkIGluXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbUmVzb3VyY2VIZWFkZXJDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICAvLyBEcmFnRHJvcE1vZHVsZSByZW1vdmVkIC0gbGF6eS1sb2FkZWQgaW4gRWRpdE5hdmJhck1vZGFsQ29tcG9uZW50XG4gICAgICAgIE5nYk1vZGFsTW9kdWxlLFxuICAgICAgICBOZ2JUb29sdGlwTW9kdWxlLFxuICAgICAgICBDb3JlVHJhbnNsb2NvTW9kdWxlLFxuICAgICAgICBEaXJlY3RpdmVzTW9kdWxlLFxuICAgICAgICBQaXBlc01vZHVsZSxcbiAgICAgICAgQWRtaW5Nb2R1bGVVdGlsc01vZHVsZSxcbiAgICAgICAgUHJvZmlsZUltYWdlQ3JvcHBlck1vZHVsZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1Jlc291cmNlSGVhZGVyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUhlYWRlck1vZHVsZSB7fVxuIl19