@posiwise/shared-components 0.0.137 → 0.0.139
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 +1 -4
- package/esm2022/lib/landing-page-footer-b/landing-page-footer-b.component.mjs +3 -3
- package/esm2022/lib/resource-shared-components.module.mjs +3 -12
- package/fesm2022/posiwise-shared-components.mjs +26 -304
- package/fesm2022/posiwise-shared-components.mjs.map +1 -1
- package/index.d.ts +0 -3
- package/lib/resource-shared-components.module.d.ts +1 -2
- package/package.json +1 -1
- package/esm2022/lib/resource-header/resource-header.component.mjs +0 -240
- package/esm2022/lib/resource-header/resource-header.module.mjs +0 -59
- package/lib/resource-header/resource-header.component.d.ts +0 -53
- package/lib/resource-header/resource-header.module.d.ts +0 -17
package/index.d.ts
CHANGED
|
@@ -14,8 +14,6 @@ export * from './lib/privacy-policy/privacy-policy.component';
|
|
|
14
14
|
export * from './lib/splash/splash.component';
|
|
15
15
|
export * from './lib/demo-cards/demo-cards.component';
|
|
16
16
|
export * from './lib/demo-cards/demo-cards.module';
|
|
17
|
-
export * from './lib/resource-header/resource-header.component';
|
|
18
|
-
export * from './lib/resource-header/resource-header.module';
|
|
19
17
|
export * from './lib/terms-conditions/terms-conditions.component';
|
|
20
18
|
export * from './lib/authenticator/authenticator.component';
|
|
21
19
|
export * from './lib/clearbit-icon/clearbit-icon.component';
|
|
@@ -28,4 +26,3 @@ export * from './lib/label-management/group-definition/group-definition.componen
|
|
|
28
26
|
export * from './lib/number-picker/number-picker.component';
|
|
29
27
|
export * from './lib/header/header.component';
|
|
30
28
|
export * from './lib/landing-page-footer-b/landing-page-footer-b.component';
|
|
31
|
-
export * from './lib/resource-header/resource-header.component';
|
|
@@ -13,10 +13,9 @@ import * as i11 from "primeng/autocomplete";
|
|
|
13
13
|
import * as i12 from "@angular/cdk/drag-drop";
|
|
14
14
|
import * as i13 from "./field-error-display/field-error-display.module";
|
|
15
15
|
import * as i14 from "./image-cropper/profile-image-cropper.module";
|
|
16
|
-
import * as i15 from "./resource-header/resource-header.module";
|
|
17
16
|
export declare class ResourceSharedComponentsModule {
|
|
18
17
|
constructor();
|
|
19
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceSharedComponentsModule, never>;
|
|
20
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceSharedComponentsModule, [typeof i1.NoDataComponent, typeof i2.InputContainerComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i4.ReactiveFormsModule, typeof i5.AppLoaderModule, typeof i6.CoreTranslocoModule, typeof i7.DirectivesModule, typeof i8.ButtonModule, typeof i9.NgbTooltipModule, typeof i10.ProgressSpinnerModule, typeof i11.AutoCompleteModule, typeof i12.DragDropModule, typeof i13.FieldErrorDisplayModule, typeof i14.ProfileImageCropperModule
|
|
19
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceSharedComponentsModule, [typeof i1.NoDataComponent, typeof i2.InputContainerComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i4.ReactiveFormsModule, typeof i5.AppLoaderModule, typeof i6.CoreTranslocoModule, typeof i7.DirectivesModule, typeof i8.ButtonModule, typeof i9.NgbTooltipModule, typeof i10.ProgressSpinnerModule, typeof i11.AutoCompleteModule, typeof i12.DragDropModule, typeof i13.FieldErrorDisplayModule, typeof i14.ProfileImageCropperModule], [typeof i14.ProfileImageCropperModule, typeof i2.InputContainerComponent, typeof i1.NoDataComponent, typeof i8.ButtonModule, typeof i12.DragDropModule, typeof i10.ProgressSpinnerModule, typeof i11.AutoCompleteModule, typeof i13.FieldErrorDisplayModule]>;
|
|
21
20
|
static ɵinj: i0.ɵɵInjectorDeclaration<ResourceSharedComponentsModule>;
|
|
22
21
|
}
|
package/package.json
CHANGED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
|
3
|
-
import { Component, ElementRef, HostListener, Inject, Injector, Input, TemplateRef, ViewChild } from '@angular/core';
|
|
4
|
-
import { AdminService } from '@posiwise/admin-module-utils';
|
|
5
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
6
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
7
|
-
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@posiwise/admin-module-utils";
|
|
10
|
-
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
11
|
-
import * as i3 from "@angular/common";
|
|
12
|
-
import * as i4 from "@angular/forms";
|
|
13
|
-
import * as i5 from "@angular/router";
|
|
14
|
-
import * as i6 from "@angular/cdk/drag-drop";
|
|
15
|
-
import * as i7 from "@posiwise/directives";
|
|
16
|
-
import * as i8 from "../custom-uploader/custom-uploader.component";
|
|
17
|
-
export class ResourceHeaderComponent extends AppBaseComponent {
|
|
18
|
-
constructor(injector, document, adminService, modalService) {
|
|
19
|
-
super(injector);
|
|
20
|
-
this.document = document;
|
|
21
|
-
this.adminService = adminService;
|
|
22
|
-
this.modalService = modalService;
|
|
23
|
-
this.isScrolled = false;
|
|
24
|
-
this.open = false;
|
|
25
|
-
this.logo = '/assets/img/landing-page/site-logo.png'; // Static fallback for LCP optimization
|
|
26
|
-
this.navbarItems = this.appConfig?.pages_config?.navbar?.items;
|
|
27
|
-
this.domainId = this.appConfig?.domain_id;
|
|
28
|
-
this.contrastImageUrl = this.appConfig?.company?.logos?.main_contrast?.url;
|
|
29
|
-
this.darkImageUrl = this.appConfig?.company?.logos?.main_dark?.url;
|
|
30
|
-
this.editingNavbar = {
|
|
31
|
-
items: []
|
|
32
|
-
};
|
|
33
|
-
this.canEditResourcesValue = false;
|
|
34
|
-
}
|
|
35
|
-
ngOnInit() {
|
|
36
|
-
console.log('In Header');
|
|
37
|
-
// Subscribe to appConfig changes to update logo dynamically
|
|
38
|
-
this.appConfigService.appConfig$.subscribe(config => {
|
|
39
|
-
if (config?.company?.logos) {
|
|
40
|
-
const isAboutUs = this.router.url?.includes('/about-us');
|
|
41
|
-
const logos = config.company.logos;
|
|
42
|
-
// Use smaller version for better performance (100x100 instead of 1200x264)
|
|
43
|
-
this.logo = isAboutUs
|
|
44
|
-
? logos.main_contrast?.url || '/assets/img/landing-page/site-logo.png'
|
|
45
|
-
: logos.main_dark?.url || '/assets/img/landing-page/site-logo.png';
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
if (this.userLoggedIn) {
|
|
49
|
-
this.localStorage.getItem$('product').subscribe(res => {
|
|
50
|
-
const data = res ? JSON.parse(res) : null;
|
|
51
|
-
this.id = data?.subscriptionId;
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
ngOnChanges(changes) {
|
|
56
|
-
if (changes['user'] || changes['userLoggedIn']) {
|
|
57
|
-
if (this.userLoggedIn && this.user) {
|
|
58
|
-
this.updateCanEditResourcesValue();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
openLogoEditModal() {
|
|
63
|
-
this.modalService.open(this.logoEditModal, { centered: true, size: 'md' });
|
|
64
|
-
}
|
|
65
|
-
onSaveLogo(event) {
|
|
66
|
-
const formData = new FormData();
|
|
67
|
-
formData.append('subscription_id', this.id);
|
|
68
|
-
if (event.file instanceof File) {
|
|
69
|
-
formData.append(this.isScrolled ? 'logo_main_contrast' : 'logo_main_dark', event.file);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
formData.append(this.isScrolled ? 'remove_logo_main_contrast' : 'remove_logo_main_dark', 'true');
|
|
73
|
-
}
|
|
74
|
-
this.adminService.updateDomainConfig(this.domainId, formData).subscribe(() => {
|
|
75
|
-
if (event.file) {
|
|
76
|
-
this.logo = URL.createObjectURL(event.file);
|
|
77
|
-
if (this.isScrolled) {
|
|
78
|
-
this.contrastImageUrl = URL.createObjectURL(event.file);
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
this.darkImageUrl = URL.createObjectURL(event.file);
|
|
82
|
-
}
|
|
83
|
-
this.modalService.dismissAll();
|
|
84
|
-
}
|
|
85
|
-
this.toast.success(event.file ? 'Logo updated' : 'Logo removed');
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
onScroll() {
|
|
89
|
-
clearTimeout(this.scrollTimeout);
|
|
90
|
-
this.scrollTimeout = setTimeout(() => {
|
|
91
|
-
requestAnimationFrame(() => {
|
|
92
|
-
const isAboutUs = this.router?.url?.includes('/about-us');
|
|
93
|
-
const shouldScroll = window.scrollY > 150;
|
|
94
|
-
this.isScrolled = shouldScroll;
|
|
95
|
-
if (!isAboutUs) {
|
|
96
|
-
// Use smaller versions for better performance
|
|
97
|
-
const logos = this.appConfig?.company?.logos;
|
|
98
|
-
const newLogo = shouldScroll
|
|
99
|
-
? logos?.main_contrast?.url ??
|
|
100
|
-
this.contrastImageUrl ??
|
|
101
|
-
'/assets/img/landing-page/site-logo.png'
|
|
102
|
-
: logos?.main_dark?.url ??
|
|
103
|
-
this.darkImageUrl ??
|
|
104
|
-
'/assets/img/landing-page/site-logo.png';
|
|
105
|
-
if (this.logo !== newLogo) {
|
|
106
|
-
this.logo = newLogo;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
if (window.innerWidth < 768) {
|
|
110
|
-
this.open = false;
|
|
111
|
-
const collapseElement = this.navbarCollapse?.nativeElement;
|
|
112
|
-
if (collapseElement?.classList.contains('show')) {
|
|
113
|
-
collapseElement.classList.remove('show');
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
// Close all dropdowns when scrolling
|
|
117
|
-
this.closeAllDropdowns();
|
|
118
|
-
});
|
|
119
|
-
}, 50);
|
|
120
|
-
}
|
|
121
|
-
onDocumentClick(event) {
|
|
122
|
-
// Close all dropdowns when clicking outside
|
|
123
|
-
const target = event.target;
|
|
124
|
-
if (!target.closest('.nav-item') &&
|
|
125
|
-
!target.closest('.popup') &&
|
|
126
|
-
!target.closest('.sign-btn')) {
|
|
127
|
-
this.closeAllDropdowns();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
closeAllDropdowns() {
|
|
131
|
-
if (this.navbarItems) {
|
|
132
|
-
this.navbarItems.forEach(item => {
|
|
133
|
-
if (item.open) {
|
|
134
|
-
item.open = false;
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
openDropdown(item) {
|
|
140
|
-
// Close other dropdowns first
|
|
141
|
-
this.navbarItems.forEach(navItem => {
|
|
142
|
-
if (navItem !== item) {
|
|
143
|
-
navItem.open = false;
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
item.open = true;
|
|
147
|
-
}
|
|
148
|
-
onDropdownItemClick(item) {
|
|
149
|
-
item.open = false;
|
|
150
|
-
}
|
|
151
|
-
openEditNavbarModal() {
|
|
152
|
-
const navbarConfig = this.appConfig.pages_config?.navbar ?? {};
|
|
153
|
-
navbarConfig.items = navbarConfig.items ?? [];
|
|
154
|
-
this.editingNavbar = JSON.parse(JSON.stringify(navbarConfig));
|
|
155
|
-
this.modalService.open(this.editNavbarModal, {
|
|
156
|
-
size: 'lg',
|
|
157
|
-
centered: true,
|
|
158
|
-
windowClass: 'modal-holder'
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
saveNavbarLinks(modal) {
|
|
162
|
-
const updatedConfig = {
|
|
163
|
-
navbar: this.editingNavbar,
|
|
164
|
-
subscription_id: this.id
|
|
165
|
-
};
|
|
166
|
-
this.adminService
|
|
167
|
-
.updateDomainConfig(this.appConfig?.domain_id, updatedConfig)
|
|
168
|
-
.subscribe(() => {
|
|
169
|
-
this.toast.success('Navbar links updated');
|
|
170
|
-
this.navbarItems = [...this.editingNavbar.items];
|
|
171
|
-
// Update the appConfig to reflect the saved changes
|
|
172
|
-
this.appConfig.pages_config = this.appConfig.pages_config ?? {};
|
|
173
|
-
this.appConfig.pages_config.navbar = { ...this.editingNavbar };
|
|
174
|
-
modal.close();
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
addNavbarItem() {
|
|
178
|
-
this.editingNavbar.items.push({
|
|
179
|
-
title: '',
|
|
180
|
-
path: '',
|
|
181
|
-
subtitles: []
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
removeNavbarItem(index) {
|
|
185
|
-
this.editingNavbar.items.splice(index, 1);
|
|
186
|
-
}
|
|
187
|
-
addNavbarSubtitle(index) {
|
|
188
|
-
this.editingNavbar.items[index].subtitles.push({
|
|
189
|
-
title: '',
|
|
190
|
-
path: ''
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
removeNavbarSubtitle(navIndex, subIndex) {
|
|
194
|
-
this.editingNavbar.items[navIndex].subtitles.splice(subIndex, 1);
|
|
195
|
-
}
|
|
196
|
-
dropNavbarItems(event) {
|
|
197
|
-
moveItemInArray(this.editingNavbar.items, event.previousIndex, event.currentIndex);
|
|
198
|
-
}
|
|
199
|
-
dropNavbarSubtitles(index, event) {
|
|
200
|
-
moveItemInArray(this.editingNavbar.items[index].subtitles, event.previousIndex, event.currentIndex);
|
|
201
|
-
}
|
|
202
|
-
updateCanEditResourcesValue() {
|
|
203
|
-
this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
|
|
204
|
-
}
|
|
205
|
-
canEditResources() {
|
|
206
|
-
return this.canEditResourcesValue;
|
|
207
|
-
}
|
|
208
|
-
navigateToLogin() {
|
|
209
|
-
window.location.href = '/login';
|
|
210
|
-
}
|
|
211
|
-
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 }); }
|
|
212
|
-
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: "editNavbarModal", first: true, predicate: ["editNavbarModal"], 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\n\n<ng-template #editNavbarModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Navbar Links</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Navbar Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropNavbarItems($event)\">\n <div *ngFor=\"let item of editingNavbar.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5 mb-2\">\n <label for=\"navbarTitle{{i}}\" class=\"form-label\">Title</label>\n <input id=\"navbarTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5 mb-2\">\n <label for=\"navbarPath{{i}}\" class=\"form-label\">Path</label>\n <input id=\"navbarPath{{i}}\" class=\"form-control\" [(ngModel)]=\"item.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeNavbarItem(i)\" (keydown.enter)=\"removeNavbarItem(i)\"\n (keydown.space)=\"removeNavbarItem(i)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-pointer\" cdkDragHandle></i>\n </div>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropNavbarSubtitles(i, $event)\">\n <div *ngFor=\"let sub of item.subtitles; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-5\">\n <label for=\"navbarSubtitleTitle{{i}}{{j}}\" class=\"form-label\">Subtitle Title</label>\n <input id=\"navbarSubtitleTitle{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"navbarSubtitlePath{{i}}{{j}}\" class=\"form-label\">Subtitle Path</label>\n <input id=\"navbarSubtitlePath{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeNavbarSubtitle(i, j)\" (keydown.enter)=\"removeNavbarSubtitle(i, j)\" (keydown.space)=\"removeNavbarSubtitle(i, j)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-pointer\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addNavbarSubtitle(i)\">\n + Add Subtitle\n </button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addNavbarItem()\">\n + Add Navbar Item\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveNavbarLinks(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\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.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.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: i6.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: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i7.LazyImgDirective, selector: "img" }, { kind: "component", type: i8.CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }] }); }
|
|
213
|
-
}
|
|
214
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderComponent, decorators: [{
|
|
215
|
-
type: Component,
|
|
216
|
-
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\n\n<ng-template #editNavbarModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Navbar Links</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Navbar Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropNavbarItems($event)\">\n <div *ngFor=\"let item of editingNavbar.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5 mb-2\">\n <label for=\"navbarTitle{{i}}\" class=\"form-label\">Title</label>\n <input id=\"navbarTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5 mb-2\">\n <label for=\"navbarPath{{i}}\" class=\"form-label\">Path</label>\n <input id=\"navbarPath{{i}}\" class=\"form-control\" [(ngModel)]=\"item.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeNavbarItem(i)\" (keydown.enter)=\"removeNavbarItem(i)\"\n (keydown.space)=\"removeNavbarItem(i)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-pointer\" cdkDragHandle></i>\n </div>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropNavbarSubtitles(i, $event)\">\n <div *ngFor=\"let sub of item.subtitles; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-5\">\n <label for=\"navbarSubtitleTitle{{i}}{{j}}\" class=\"form-label\">Subtitle Title</label>\n <input id=\"navbarSubtitleTitle{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"navbarSubtitlePath{{i}}{{j}}\" class=\"form-label\">Subtitle Path</label>\n <input id=\"navbarSubtitlePath{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeNavbarSubtitle(i, j)\" (keydown.enter)=\"removeNavbarSubtitle(i, j)\" (keydown.space)=\"removeNavbarSubtitle(i, j)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-pointer\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addNavbarSubtitle(i)\">\n + Add Subtitle\n </button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addNavbarItem()\">\n + Add Navbar Item\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveNavbarLinks(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\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"] }]
|
|
217
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: Document, decorators: [{
|
|
218
|
-
type: Inject,
|
|
219
|
-
args: [DOCUMENT]
|
|
220
|
-
}] }, { type: i1.AdminService }, { type: i2.NgbModal }], propDecorators: { navbarCollapse: [{
|
|
221
|
-
type: ViewChild,
|
|
222
|
-
args: ['collapsibleNavbar']
|
|
223
|
-
}], editNavbarModal: [{
|
|
224
|
-
type: ViewChild,
|
|
225
|
-
args: ['editNavbarModal']
|
|
226
|
-
}], logoEditModal: [{
|
|
227
|
-
type: ViewChild,
|
|
228
|
-
args: ['logoEditModal']
|
|
229
|
-
}], user: [{
|
|
230
|
-
type: Input
|
|
231
|
-
}], userLoggedIn: [{
|
|
232
|
-
type: Input
|
|
233
|
-
}], onScroll: [{
|
|
234
|
-
type: HostListener,
|
|
235
|
-
args: ['window:scroll', []]
|
|
236
|
-
}], onDocumentClick: [{
|
|
237
|
-
type: HostListener,
|
|
238
|
-
args: ['document:click', ['$event']]
|
|
239
|
-
}] } });
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9yZXNvdXJjZS1oZWFkZXIvcmVzb3VyY2UtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9yZXNvdXJjZS1oZWFkZXIvcmVzb3VyY2UtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7QUFxQnRELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBZ0I7SUF1QnpELFlBQ0ksUUFBa0IsRUFDaUIsUUFBa0IsRUFDcEMsWUFBMEIsRUFDMUIsWUFBc0I7UUFFdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSm1CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFwQjNDLGVBQVUsR0FBRyxLQUFLLENB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WSxFQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDdEMsQ0FBQztJQUVELGVBQWU7UUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7SUFDcEMsQ0FBQzsrR0F0UFEsdUJBQXVCLDBDQXlCcEIsUUFBUTttR0F6QlgsdUJBQXVCLDhqQkMxQ3BDLGt0UUEwTWM7OzRGRGhLRCx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0ksb0JBQW9COzswQkE2QnpCLE1BQU07MkJBQUMsUUFBUTsyRkF4QlksY0FBYztzQkFBN0MsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0EsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0EsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNqQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkF5Rk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFO2dCQXVDakMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBDdXN0b21VcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2N1c3RvbS11cGxvYWRlci9jdXN0b20tdXBsb2FkZXIuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIExvZ29Db25maWcge1xuICAgIHVybD86IHN0cmluZztcbiAgICB2ZXJzaW9uXzEwMHgxMDA/OiB7XG4gICAgICAgIHVybD86IHN0cmluZztcbiAgICB9O1xufVxuXG5pbnRlcmZhY2UgTG9nb3NDb25maWcge1xuICAgIG1haW5fY29udHJhc3Q/OiBMb2dvQ29uZmlnO1xuICAgIG1haW5fZGFyaz86IExvZ29Db25maWc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctcmVzb3VyY2UtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2UtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS1oZWFkZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUhlYWRlckNvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZCgnY29sbGFwc2libGVOYXZiYXInKSBuYXZiYXJDb2xsYXBzZTogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdlZGl0TmF2YmFyTW9kYWwnKSBlZGl0TmF2YmFyTW9kYWw6IFRlbXBsYXRlUmVmPEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCdsb2dvRWRpdE1vZGFsJykgbG9nb0VkaXRNb2RhbDogVGVtcGxhdGVSZWY8Q3VzdG9tVXBsb2FkZXJDb21wb25lbnQ+O1xuICAgIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG4gICAgQElucHV0KCkgdXNlckxvZ2dlZEluOiBib29sZWFuO1xuXG4gICAgaXNTY3JvbGxlZCA9IGZhbHNlO1xuICAgIG9wZW4gPSBmYWxzZTtcbiAgICBsb2dvID0gJy9hc3NldHMvaW1nL2xhbmRpbmctcGFnZS9zaXRlLWxvZ28ucG5nJzsgLy8gU3RhdGljIGZhbGxiYWNrIGZvciBMQ1Agb3B0aW1pemF0aW9uXG4gICAgbmF2YmFySXRlbXMgPSB0aGlzLmFwcENvbmZpZz8ucGFnZXNfY29uZmlnPy5uYXZiYXI/Lml0ZW1zO1xuICAgIGRvbWFpbklkID0gdGhpcy5hcHBDb25maWc/LmRvbWFpbl9pZDtcbiAgICBjb250cmFzdEltYWdlVXJsID0gdGhpcy5hcHBDb25maWc/LmNvbXBhbnk/LmxvZ29zPy5tYWluX2NvbnRyYXN0Py51cmw7XG4gICAgZGFya0ltYWdlVXJsID0gdGhpcy5hcHBDb25maWc/LmNvbXBhbnk/LmxvZ29zPy5tYWluX2Rhcms/LnVybDtcblxuICAgIGVkaXRpbmdOYXZiYXIgPSB7XG4gICAgICAgIGl0ZW1zOiBbXVxuICAgIH07XG4gICAgaWQ6IHN0cmluZztcbiAgICBzY3JvbGxUaW1lb3V0O1xuXG4gICAgY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0luIEhlYWRlcicpO1xuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gYXBwQ29uZmlnIGNoYW5nZXMgdG8gdXBkYXRlIGxvZ28gZHluYW1pY2FsbHlcbiAgICAgICAgdGhpcy5hcHBDb25maWdTZXJ2aWNlLmFwcENvbmZpZyQuc3Vic2NyaWJlKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlnPy5jb21wYW55Py5sb2dvcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWJvdXRVcyA9IHRoaXMucm91dGVyLnVybD8uaW5jbHVkZXMoJy9hYm91dC11cycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ29zID0gY29uZmlnLmNvbXBhbnkubG9nb3MgYXMgTG9nb3NDb25maWc7XG5cbiAgICAgICAgICAgICAgICAvLyBVc2Ugc21hbGxlciB2ZXJzaW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgKDEwMHgxMDAgaW5zdGVhZCBvZiAxMjAweDI2NClcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ28gPSBpc0Fib3V0VXNcbiAgICAgICAgICAgICAgICAgICAgPyBsb2dvcy5tYWluX2NvbnRyYXN0Py51cmwgfHwgJy9hc3NldHMvaW1nL2xhbmRpbmctcGFnZS9zaXRlLWxvZ28ucG5nJ1xuICAgICAgICAgICAgICAgICAgICA6IGxvZ29zLm1haW5fZGFyaz8udXJsIHx8ICcvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbikge1xuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoJ3Byb2R1Y3QnKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzID8gSlNPTi5wYXJzZShyZXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gZGF0YT8uc3Vic2NyaXB0aW9uSWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3VzZXInXSB8fCBjaGFuZ2VzWyd1c2VyTG9nZ2VkSW4nXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlckxvZ2dlZEluICYmIHRoaXMudXNlcikge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FuRWRpdFJlc291cmNlc1ZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuTG9nb0VkaXRNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmxvZ29FZGl0TW9kYWwsIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcgfSk7XG4gICAgfVxuXG4gICAgb25TYXZlTG9nbyhldmVudCkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3N1YnNjcmlwdGlvbl9pZCcsIHRoaXMuaWQpO1xuICAgICAgICBpZiAoZXZlbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCh0aGlzLmlzU2Nyb2xsZWQgPyAnbG9nb19tYWluX2NvbnRyYXN0JyA6ICdsb2dvX21haW5fZGFyaycsIGV2ZW50LmZpbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxlZCA/ICdyZW1vdmVfbG9nb19tYWluX2NvbnRyYXN0JyA6ICdyZW1vdmVfbG9nb19tYWluX2RhcmsnLFxuICAgICAgICAgICAgICAgICd0cnVlJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLnVwZGF0ZURvbWFpbkNvbmZpZyh0aGlzLmRvbWFpbklkLCBmb3JtRGF0YSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5maWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvID0gVVJMLmNyZWF0ZU9iamVjdFVSTChldmVudC5maWxlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJhc3RJbWFnZVVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZXZlbnQuZmlsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXJrSW1hZ2VVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGV2ZW50LmZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoZXZlbnQuZmlsZSA/ICdMb2dvIHVwZGF0ZWQnIDogJ0xvZ28gcmVtb3ZlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXG4gICAgb25TY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRpbWVvdXQpO1xuICAgICAgICB0aGlzLnNjcm9sbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBYm91dFVzID0gdGhpcy5yb3V0ZXI/LnVybD8uaW5jbHVkZXMoJy9hYm91dC11cycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9IHdpbmRvdy5zY3JvbGxZID4gMTUwO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxlZCA9IHNob3VsZFNjcm9sbDtcblxuICAgICAgICAgICAgICAgIGlmICghaXNBYm91dFVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBzbWFsbGVyIHZlcnNpb25zIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9nb3MgPSB0aGlzLmFwcENvbmZpZz8uY29tcGFueT8ubG9nb3MgYXMgTG9nb3NDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xvZ28gPSBzaG91bGRTY3JvbGxcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbG9nb3M/Lm1haW5fY29udHJhc3Q/LnVybCA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyYXN0SW1hZ2VVcmwgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJy9hc3NldHMvaW1nL2xhbmRpbmctcGFnZS9zaXRlLWxvZ28ucG5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBsb2dvcz8ubWFpbl9kYXJrPy51cmwgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXJrSW1hZ2VVcmwgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJy9hc3NldHMvaW1nL2xhbmRpbmctcGFnZS9zaXRlLWxvZ28ucG5nJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nbyAhPT0gbmV3TG9nbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dvID0gbmV3TG9nbztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGFwc2VFbGVtZW50ID0gdGhpcy5uYXZiYXJDb2xsYXBzZT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxhcHNlRWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdzaG93JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDbG9zZSBhbGwgZHJvcGRvd25zIHdoZW4gc2Nyb2xsaW5nXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFsbERyb3Bkb3ducygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gICAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBDbG9zZSBhbGwgZHJvcGRvd25zIHdoZW4gY2xpY2tpbmcgb3V0c2lkZVxuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0YXJnZXQuY2xvc2VzdCgnLm5hdi1pdGVtJykgJiZcbiAgICAgICAgICAgICF0YXJnZXQuY2xvc2VzdCgnLnBvcHVwJykgJiZcbiAgICAgICAgICAgICF0YXJnZXQuY2xvc2VzdCgnLnNpZ24tYnRuJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQWxsRHJvcGRvd25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZUFsbERyb3Bkb3ducygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF2YmFySXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF2YmFySXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5vcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbkRyb3Bkb3duKGl0ZW0pOiB2b2lkIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3RoZXIgZHJvcGRvd25zIGZpcnN0XG4gICAgICAgIHRoaXMubmF2YmFySXRlbXMuZm9yRWFjaChuYXZJdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChuYXZJdGVtICE9PSBpdGVtKSB7XG4gICAgICAgICAgICAgICAgbmF2SXRlbS5vcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpdGVtLm9wZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25JdGVtQ2xpY2soaXRlbSk6IHZvaWQge1xuICAgICAgICBpdGVtLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvcGVuRWRpdE5hdmJhck1vZGFsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuYXZiYXJDb25maWcgPSB0aGlzLmFwcENvbmZpZy5wYWdlc19jb25maWc/Lm5hdmJhciA/PyB7fTtcbiAgICAgICAgbmF2YmFyQ29uZmlnLml0ZW1zID0gbmF2YmFyQ29uZmlnLml0ZW1zID8/IFtdO1xuXG4gICAgICAgIHRoaXMuZWRpdGluZ05hdmJhciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobmF2YmFyQ29uZmlnKSk7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5lZGl0TmF2YmFyTW9kYWwsIHtcbiAgICAgICAgICAgIHNpemU6ICdsZycsXG4gICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYXZlTmF2YmFyTGlua3MobW9kYWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHtcbiAgICAgICAgICAgIG5hdmJhcjogdGhpcy5lZGl0aW5nTmF2YmFyLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVEb21haW5Db25maWcodGhpcy5hcHBDb25maWc/LmRvbWFpbl9pZCwgdXBkYXRlZENvbmZpZylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnTmF2YmFyIGxpbmtzIHVwZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmJhckl0ZW1zID0gWy4uLnRoaXMuZWRpdGluZ05hdmJhci5pdGVtc107XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBhcHBDb25maWcgdG8gcmVmbGVjdCB0aGUgc2F2ZWQgY2hhbmdlc1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwQ29uZmlnLnBhZ2VzX2NvbmZpZyA9IHRoaXMuYXBwQ29uZmlnLnBhZ2VzX2NvbmZpZyA/PyB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcENvbmZpZy5wYWdlc19jb25maWcubmF2YmFyID0geyAuLi50aGlzLmVkaXRpbmdOYXZiYXIgfTtcbiAgICAgICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkTmF2YmFySXRlbSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nTmF2YmFyLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgICBzdWJ0aXRsZXM6IFtdXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZU5hdmJhckl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdOYXZiYXIuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBhZGROYXZiYXJTdWJ0aXRsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ05hdmJhci5pdGVtc1tpbmRleF0uc3VidGl0bGVzLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgICAgcGF0aDogJydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTmF2YmFyU3VidGl0bGUobmF2SW5kZXg6IG51bWJlciwgc3ViSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdOYXZiYXIuaXRlbXNbbmF2SW5kZXhdLnN1YnRpdGxlcy5zcGxpY2Uoc3ViSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGRyb3BOYXZiYXJJdGVtcyhldmVudCk6IHZvaWQge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5lZGl0aW5nTmF2YmFyLml0ZW1zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIH1cblxuICAgIGRyb3BOYXZiYXJTdWJ0aXRsZXMoaW5kZXg6IG51bWJlciwgZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgICAgICAgdGhpcy5lZGl0aW5nTmF2YmFyLml0ZW1zW2luZGV4XS5zdWJ0aXRsZXMsXG4gICAgICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICk7XG4gICAgfVxuICAgIHByaXZhdGUgdXBkYXRlQ2FuRWRpdFJlc291cmNlc1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IEhlbHBlclNlcnZpY2UuY2FuRWRpdFJlc291cmNlcyhcbiAgICAgICAgICAgIHRoaXMudXNlcixcbiAgICAgICAgICAgIHRoaXMudXNlckxvZ2dlZEluLFxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNhbkVkaXRSZXNvdXJjZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbkVkaXRSZXNvdXJjZXNWYWx1ZTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvTG9naW4oKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9sb2dpbic7XG4gICAgfVxufVxuIiwiPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLW1kIG5hdmJhci1kYXJrIGZpeGVkLXRvcCBwcmltYXJ5LW5hdi1iZy1jb2xvciByZXNvdXJjZS1oZWFkZXJcIlxuICBpZD1cImJhbm5lclwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnRhaW5lci13cmFwcGVyIGJhbm5lci1zZWN0aW9uXCI+XG5cbiAgICA8IS0tIFRvZ2dsZXIvY29sbGFwc2liZSBCdXR0b24gLS0+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyIGhlYWRlci1tZW51LWJhclwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiXG4gICAgICBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNpYmxlTmF2YmFyXCI+XG4gICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1nL3Byb2R1Y3RzL3RyaWFsL25hdmJhci10b2dnbGUtaWNvbi5wbmdcIlxuICAgICAgICBjbGFzcz1cImltZy1mbHVpZCBuYXZiYXItdG9nZ2xlLWljb25cIlxuICAgICAgICBhbHQ9XCJcIiAvPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBNb2JpbGUgTG9nbyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1tZC1ub25lIG1iLWljb25cIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWcvbGFuZGluZy1wYWdlL3NpdGUtbG9nby5wbmdcIlxuICAgICAgICAgIFtzcmNdPVwibG9nbyB8fCAnL2Fzc2V0cy9pbWcvbGFuZGluZy1wYWdlL3NpdGUtbG9nby5wbmcnXCJcbiAgICAgICAgICByb3V0ZXJMaW5rPVwiL1wiXG4gICAgICAgICAgYWx0PVwibG9nb1wiXG4gICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgbG9nb19pbWdcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxMDBcIlxuICAgICAgICAgIGxvYWRpbmc9XCJlYWdlclwiXG4gICAgICAgICAgZmV0Y2hwcmlvcml0eT1cImhpZ2hcIlxuICAgICAgICAgIHNpemVzPVwiMTAwcHhcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cblxuICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gY3Vyc29yLXBvaW50ZXIgdGV4dC1ibGFjayBtZS0zXCJcbiAgICAoY2xpY2spPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgKGtleWRvd24uc3BhY2UpPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgdGl0bGU9XCJFZGl0IExvZ29cIj48L2k+XG5cblxuICAgIDwhLS0gTmF2YmFyIGxpbmtzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2UgbXQtMyBtdC1tZC0wXCJcbiAgICAgIGlkPVwiY29sbGFwc2libGVOYXZiYXJcIlxuICAgICAgI2NvbGxhcHNpYmxlTmF2YmFyPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cblxuICAgICAgICA8IS0tIEFsd2F5cyBvY2N1cHkgMyBjb2x1bW5zIGZvciBsb2dvIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1ub25lIGQtbWQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltZy9sYW5kaW5nLXBhZ2Uvc2l0ZS1sb2dvLnBuZ1wiXG4gICAgICAgICAgICAgIFtzcmNdPVwibG9nbyB8fCAnL2Fzc2V0cy9pbWcvbGFuZGluZy1wYWdlL3NpdGUtbG9nby5wbmcnXCJcbiAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9cIlxuICAgICAgICAgICAgICBhbHQ9XCJsb2dvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgbG9nb19pbWdcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMFwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjEwMFwiXG4gICAgICAgICAgICAgIGxvYWRpbmc9XCJlYWdlclwiXG4gICAgICAgICAgICAgIGZldGNocHJpb3JpdHk9XCJoaWdoXCJcbiAgICAgICAgICAgICAgc2l6ZXM9XCIxMDBweFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnRcIj5cbiAgICAgICAgICA8dWwgI2FuY2hvckxpbmtzXG4gICAgICAgICAgICBjbGFzcz1cIm5hdmJhci1uYXYgZmxleCBnYXAtNCBtZS0wIHdvdyBmYWRlSW5VcCBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgICAgICAgICBkYXRhLXdvdy1kdXJhdGlvbj1cIjJzXCI+XG5cbiAgICAgICAgICA8aSAqbmdJZj1cImNhbkVkaXRSZXNvdXJjZXNWYWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIGN1cnNvci1wb2ludGVyIHRleHQtYmxhY2sgbWUtM1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5FZGl0TmF2YmFyTW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3BlbkVkaXROYXZiYXJNb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuRWRpdE5hdmJhck1vZGFsKClcIlxuICAgICAgICAgIHRpdGxlPVwiRWRpdCBOYXZiYXIgTGlua3NcIj48L2k+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5hdmJhckl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvcGVuRHJvcGRvd24oaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2Nyb2xsZWQtbmF2LWxpbmsnOiBpc1Njcm9sbGVkIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLnN1YnRpdGxlcz8ubGVuZ3RoID8gKGl0ZW0ub3BlbiA9ICFpdGVtLm9wZW4pIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCIhKGl0ZW0uc3VidGl0bGVzPy5sZW5ndGgpID8gaXRlbS5wYXRoIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtPy50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbS5zdWJ0aXRsZXMubGVuZ3RoID4gMCAmJiBpdGVtLm9wZW5cIiBjbGFzcz1cImZhLXNvbGlkIGZhLWNhcmV0LWRvd25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwIHBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN1YnRpdGxlcy5sZW5ndGggPiAwICYmIGl0ZW0ub3BlblwiPlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWIgb2YgaXRlbS5zdWJ0aXRsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzdWIucGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25JdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRHJvcGRvd25JdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkRyb3Bkb3duSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25Ecm9wZG93bkl0ZW1DbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1Yi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbXMtMiBtYi0zIGQtZmxleCBkLW1kLW5vbmVcIj5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJzaWduLWJ0biBzaWduLWhlYWRlci1idG5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvTG9naW4oKVwiPkxvZyBJbjwvYT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBBbHdheXMgMyBjb2x1bW5zIGZvciBsb2dpbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGQtbm9uZSBkLW1kLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJzaWduLWJ0biBzaWduLWhlYWRlci1idG5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb0xvZ2luKClcIj5Mb2cgSW48L2E+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25hdj5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjZWRpdE5hdmJhck1vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RWRpdCBOYXZiYXIgTGlua3M8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxoNCBjbGFzcz1cIm1iLTNcIj5OYXZiYXIgU2VjdGlvbjwvaDQ+XG4gICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BOYXZiYXJJdGVtcygkZXZlbnQpXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGVkaXRpbmdOYXZiYXIuaXRlbXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImJvcmRlciBwLTMgbWItM1wiIGNka0RyYWc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTUgbWItMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5hdmJhclRpdGxle3tpfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJuYXZiYXJUaXRsZXt7aX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIml0ZW0udGl0bGVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwibmF2YmFyUGF0aHt7aX19XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGF0aDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJuYXZiYXJQYXRoe3tpfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiaXRlbS5wYXRoXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC00XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGluLXBhZ2UtdHJhc2gtaWNvbiB0ZXh0LWRhbmdlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVOYXZiYXJJdGVtKGkpXCIgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlTmF2YmFySXRlbShpKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJyZW1vdmVOYXZiYXJJdGVtKGkpXCI+PC9pPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzIGluLXBhZ2UtYmFycy1pY29uIGN1cnNvci1wb2ludGVyXCIgY2RrRHJhZ0hhbmRsZT48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wTmF2YmFyU3VidGl0bGVzKGksICRldmVudClcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWIgb2YgaXRlbS5zdWJ0aXRsZXM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJvdyBib3JkZXIgcC0zIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmF2YmFyU3VidGl0bGVUaXRsZXt7aX19e3tqfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdWJ0aXRsZSBUaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cIm5hdmJhclN1YnRpdGxlVGl0bGV7e2l9fXt7an19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInN1Yi50aXRsZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmF2YmFyU3VidGl0bGVQYXRoe3tpfX17e2p9fVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN1YnRpdGxlIFBhdGg8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJuYXZiYXJTdWJ0aXRsZVBhdGh7e2l9fXt7an19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInN1Yi5wYXRoXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGluLXBhZ2UtdHJhc2gtaWNvbiB0ZXh0LWRhbmdlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVOYXZiYXJTdWJ0aXRsZShpLCBqKVwiIChrZXlkb3duLmVudGVyKT1cInJlbW92ZU5hdmJhclN1YnRpdGxlKGksIGopXCIgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlTmF2YmFyU3VidGl0bGUoaSwgailcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBpbi1wYWdlLWJhcnMtaWNvbiBjdXJzb3ItcG9pbnRlclwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gbXQtMlwiIChjbGljayk9XCJhZGROYXZiYXJTdWJ0aXRsZShpKVwiPlxuICAgICAgICAgICsgQWRkIFN1YnRpdGxlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTNcIiAoY2xpY2spPVwiYWRkTmF2YmFySXRlbSgpXCI+XG4gICAgICArIEFkZCBOYXZiYXIgSXRlbVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2F2ZU5hdmJhckxpbmtzKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cblxuXG48bmctdGVtcGxhdGUgI2xvZ29FZGl0TW9kYWwgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5VcGxvYWQgTG9nbzwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxwdy1jdXN0b20tdXBsb2FkZXJcbiAgICAgIFt0aXRsZV09XCInTWFpbiBMb2dvJ1wiXG4gICAgICBbY29udHJvbE5hbWVdPVwiJ2xvZ29fbWFpbidcIlxuICAgICAgW2FzcGVjdFJhdGlvXT1cIidmdWxsTG9nbydcIlxuICAgICAgW3ByZXZpZXdEYXRhXT1cInsgdXJsOiBsb2dvLCBuYW1lOiAnbG9nb19tYWluLnBuZycgfVwiXG4gICAgICAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUxvZ28oJGV2ZW50KVwiPlxuICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { NgModule } from '@angular/core';
|
|
4
|
-
import { FormsModule } from '@angular/forms';
|
|
5
|
-
import { RouterModule } from '@angular/router';
|
|
6
|
-
import { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';
|
|
7
|
-
import { CoreTranslocoModule } from '@posiwise/core-transloco';
|
|
8
|
-
import { DirectivesModule } from '@posiwise/directives';
|
|
9
|
-
import { PipesModule } from '@posiwise/pipes';
|
|
10
|
-
import { NgbModalModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
|
|
11
|
-
import { ProfileImageCropperModule } from '../image-cropper/profile-image-cropper.module';
|
|
12
|
-
import { ResourceHeaderComponent } from './resource-header.component';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
export class ResourceHeaderModule {
|
|
15
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, declarations: [ResourceHeaderComponent], imports: [CommonModule,
|
|
17
|
-
FormsModule,
|
|
18
|
-
RouterModule,
|
|
19
|
-
DragDropModule,
|
|
20
|
-
NgbModalModule,
|
|
21
|
-
NgbTooltipModule,
|
|
22
|
-
CoreTranslocoModule,
|
|
23
|
-
DirectivesModule,
|
|
24
|
-
PipesModule,
|
|
25
|
-
AdminModuleUtilsModule,
|
|
26
|
-
ProfileImageCropperModule], exports: [ResourceHeaderComponent] }); }
|
|
27
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, imports: [CommonModule,
|
|
28
|
-
FormsModule,
|
|
29
|
-
RouterModule,
|
|
30
|
-
DragDropModule,
|
|
31
|
-
NgbModalModule,
|
|
32
|
-
NgbTooltipModule,
|
|
33
|
-
CoreTranslocoModule,
|
|
34
|
-
DirectivesModule,
|
|
35
|
-
PipesModule,
|
|
36
|
-
AdminModuleUtilsModule,
|
|
37
|
-
ProfileImageCropperModule] }); }
|
|
38
|
-
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, decorators: [{
|
|
40
|
-
type: NgModule,
|
|
41
|
-
args: [{
|
|
42
|
-
declarations: [ResourceHeaderComponent],
|
|
43
|
-
imports: [
|
|
44
|
-
CommonModule,
|
|
45
|
-
FormsModule,
|
|
46
|
-
RouterModule,
|
|
47
|
-
DragDropModule,
|
|
48
|
-
NgbModalModule,
|
|
49
|
-
NgbTooltipModule,
|
|
50
|
-
CoreTranslocoModule,
|
|
51
|
-
DirectivesModule,
|
|
52
|
-
PipesModule,
|
|
53
|
-
AdminModuleUtilsModule,
|
|
54
|
-
ProfileImageCropperModule
|
|
55
|
-
],
|
|
56
|
-
exports: [ResourceHeaderComponent]
|
|
57
|
-
}]
|
|
58
|
-
}] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaGVhZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9yZXNvdXJjZS1oZWFkZXIvcmVzb3VyY2UtaGVhZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRTFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQW1CdEUsTUFBTSxPQUFPLG9CQUFvQjsrR0FBcEIsb0JBQW9CO2dIQUFwQixvQkFBb0IsaUJBaEJkLHVCQUF1QixhQUVsQyxZQUFZO1lBQ1osV0FBVztZQUNYLFlBQVk7WUFDWixjQUFjO1lBQ2QsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCxzQkFBc0I7WUFDdEIseUJBQXlCLGFBRW5CLHVCQUF1QjtnSEFFeEIsb0JBQW9CLFlBZHpCLFlBQVk7WUFDWixXQUFXO1lBQ1gsWUFBWTtZQUNaLGNBQWM7WUFDZCxjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsV0FBVztZQUNYLHNCQUFzQjtZQUN0Qix5QkFBeUI7OzRGQUlwQixvQkFBb0I7a0JBakJoQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUN2QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsc0JBQXNCO3dCQUN0Qix5QkFBeUI7cUJBQzVCO29CQUNELE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWRtaW5Nb2R1bGVVdGlsc01vZHVsZSB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQ29yZVRyYW5zbG9jb01vZHVsZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb3JlLXRyYW5zbG9jbyc7XG5pbXBvcnQgeyBEaXJlY3RpdmVzTW9kdWxlIH0gZnJvbSAnQHBvc2l3aXNlL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgUGlwZXNNb2R1bGUgfSBmcm9tICdAcG9zaXdpc2UvcGlwZXMnO1xuXG5pbXBvcnQgeyBOZ2JNb2RhbE1vZHVsZSwgTmdiVG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuaW1wb3J0IHsgUHJvZmlsZUltYWdlQ3JvcHBlck1vZHVsZSB9IGZyb20gJy4uL2ltYWdlLWNyb3BwZXIvcHJvZmlsZS1pbWFnZS1jcm9wcGVyLm1vZHVsZSc7XG5cbmltcG9ydCB7IFJlc291cmNlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNvdXJjZS1oZWFkZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtSZXNvdXJjZUhlYWRlckNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIERyYWdEcm9wTW9kdWxlLFxuICAgICAgICBOZ2JNb2RhbE1vZHVsZSxcbiAgICAgICAgTmdiVG9vbHRpcE1vZHVsZSxcbiAgICAgICAgQ29yZVRyYW5zbG9jb01vZHVsZSxcbiAgICAgICAgRGlyZWN0aXZlc01vZHVsZSxcbiAgICAgICAgUGlwZXNNb2R1bGUsXG4gICAgICAgIEFkbWluTW9kdWxlVXRpbHNNb2R1bGUsXG4gICAgICAgIFByb2ZpbGVJbWFnZUNyb3BwZXJNb2R1bGVcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtSZXNvdXJjZUhlYWRlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VIZWFkZXJNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { ElementRef, Injector, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
|
|
2
|
-
import { AdminService } from '@posiwise/admin-module-utils';
|
|
3
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
4
|
-
import { User } from '@posiwise/common-utilities';
|
|
5
|
-
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
6
|
-
import { CustomUploaderComponent } from '../custom-uploader/custom-uploader.component';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export declare class ResourceHeaderComponent extends AppBaseComponent implements OnInit, OnChanges {
|
|
9
|
-
private readonly document;
|
|
10
|
-
private readonly adminService;
|
|
11
|
-
private readonly modalService;
|
|
12
|
-
navbarCollapse: ElementRef;
|
|
13
|
-
editNavbarModal: TemplateRef<CustomUploaderComponent>;
|
|
14
|
-
logoEditModal: TemplateRef<CustomUploaderComponent>;
|
|
15
|
-
user: User;
|
|
16
|
-
userLoggedIn: boolean;
|
|
17
|
-
isScrolled: boolean;
|
|
18
|
-
open: boolean;
|
|
19
|
-
logo: string;
|
|
20
|
-
navbarItems: any;
|
|
21
|
-
domainId: any;
|
|
22
|
-
contrastImageUrl: any;
|
|
23
|
-
darkImageUrl: any;
|
|
24
|
-
editingNavbar: {
|
|
25
|
-
items: any[];
|
|
26
|
-
};
|
|
27
|
-
id: string;
|
|
28
|
-
scrollTimeout: any;
|
|
29
|
-
canEditResourcesValue: boolean;
|
|
30
|
-
constructor(injector: Injector, document: Document, adminService: AdminService, modalService: NgbModal);
|
|
31
|
-
ngOnInit(): void;
|
|
32
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
33
|
-
openLogoEditModal(): void;
|
|
34
|
-
onSaveLogo(event: any): void;
|
|
35
|
-
onScroll(): void;
|
|
36
|
-
onDocumentClick(event: Event): void;
|
|
37
|
-
closeAllDropdowns(): void;
|
|
38
|
-
openDropdown(item: any): void;
|
|
39
|
-
onDropdownItemClick(item: any): void;
|
|
40
|
-
openEditNavbarModal(): void;
|
|
41
|
-
saveNavbarLinks(modal: any): void;
|
|
42
|
-
addNavbarItem(): void;
|
|
43
|
-
removeNavbarItem(index: number): void;
|
|
44
|
-
addNavbarSubtitle(index: number): void;
|
|
45
|
-
removeNavbarSubtitle(navIndex: number, subIndex: number): void;
|
|
46
|
-
dropNavbarItems(event: any): void;
|
|
47
|
-
dropNavbarSubtitles(index: number, event: any): void;
|
|
48
|
-
private updateCanEditResourcesValue;
|
|
49
|
-
canEditResources(): boolean;
|
|
50
|
-
navigateToLogin(): void;
|
|
51
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceHeaderComponent, never>;
|
|
52
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ResourceHeaderComponent, "pw-resource-header", never, { "user": { "alias": "user"; "required": false; }; "userLoggedIn": { "alias": "userLoggedIn"; "required": false; }; }, {}, never, never, false, never>;
|
|
53
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
import * as i1 from "./resource-header.component";
|
|
3
|
-
import * as i2 from "@angular/common";
|
|
4
|
-
import * as i3 from "@angular/forms";
|
|
5
|
-
import * as i4 from "@angular/router";
|
|
6
|
-
import * as i5 from "@angular/cdk/drag-drop";
|
|
7
|
-
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
8
|
-
import * as i7 from "@posiwise/core-transloco";
|
|
9
|
-
import * as i8 from "@posiwise/directives";
|
|
10
|
-
import * as i9 from "@posiwise/pipes";
|
|
11
|
-
import * as i10 from "@posiwise/admin-module-utils";
|
|
12
|
-
import * as i11 from "../image-cropper/profile-image-cropper.module";
|
|
13
|
-
export declare class ResourceHeaderModule {
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceHeaderModule, never>;
|
|
15
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceHeaderModule, [typeof i1.ResourceHeaderComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i4.RouterModule, typeof i5.DragDropModule, typeof i6.NgbModalModule, typeof i6.NgbTooltipModule, typeof i7.CoreTranslocoModule, typeof i8.DirectivesModule, typeof i9.PipesModule, typeof i10.AdminModuleUtilsModule, typeof i11.ProfileImageCropperModule], [typeof i1.ResourceHeaderComponent]>;
|
|
16
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<ResourceHeaderModule>;
|
|
17
|
-
}
|