@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.
- package/esm2022/index.mjs +8 -1
- package/esm2022/lib/custom-uploader/custom-uploader.component.mjs +107 -0
- package/esm2022/lib/field-error-display/field-error-display.component.mjs +16 -0
- package/esm2022/lib/field-error-display/field-error-display.module.mjs +23 -0
- package/esm2022/lib/image-cropper/image-cropper.component.mjs +92 -0
- package/esm2022/lib/image-cropper/profile-image-cropper.module.mjs +45 -0
- package/esm2022/lib/resource-header/edit-navbar-modal.component.mjs +195 -0
- package/esm2022/lib/resource-header/resource-header.component.mjs +227 -0
- package/esm2022/lib/resource-header/resource-header.module.mjs +63 -0
- package/fesm2022/posiwise-resource-contact-us-edit-navbar-modal.component-BtICpJJx.mjs +197 -0
- package/fesm2022/posiwise-resource-contact-us-edit-navbar-modal.component-BtICpJJx.mjs.map +1 -0
- package/fesm2022/posiwise-resource-contact-us.mjs +528 -9
- package/fesm2022/posiwise-resource-contact-us.mjs.map +1 -1
- package/index.d.ts +7 -0
- package/lib/custom-uploader/custom-uploader.component.d.ts +35 -0
- package/lib/field-error-display/field-error-display.component.d.ts +7 -0
- package/lib/field-error-display/field-error-display.module.d.ts +13 -0
- package/lib/image-cropper/image-cropper.component.d.ts +30 -0
- package/lib/image-cropper/profile-image-cropper.module.d.ts +19 -0
- package/lib/resource-header/edit-navbar-modal.component.d.ts +22 -0
- package/lib/resource-header/resource-header.component.d.ts +46 -0
- package/lib/resource-header/resource-header.module.d.ts +21 -0
- 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
|