@posiwise/shared-components 0.0.135 → 0.0.137

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/esm2022/index.mjs +8 -5
  2. package/esm2022/lib/custom-uploader/custom-uploader.component.mjs +4 -4
  3. package/esm2022/lib/demo-cards/demo-cards.component.mjs +12 -8
  4. package/esm2022/lib/demo-cards/demo-cards.module.mjs +44 -0
  5. package/esm2022/lib/field-error-display/field-error-display.component.mjs +3 -3
  6. package/esm2022/lib/field-error-display/field-error-display.module.mjs +23 -0
  7. package/esm2022/lib/header/header.component.mjs +7 -3
  8. package/esm2022/lib/image-cropper/image-cropper.component.mjs +3 -3
  9. package/esm2022/lib/image-cropper/profile-image-cropper.module.mjs +45 -0
  10. package/esm2022/lib/input-container/input-container.component.mjs +5 -6
  11. package/esm2022/lib/label-management/entity-group/entity-group.component.mjs +6 -6
  12. package/esm2022/lib/label-management/group-definition/group-definition.component.mjs +3 -3
  13. package/esm2022/lib/label-management/groups/groups.component.mjs +4 -4
  14. package/esm2022/lib/no-data/no-data.component.mjs +10 -6
  15. package/esm2022/lib/privacy-and-tos/privacy-and-tos.component.mjs +4 -4
  16. package/esm2022/lib/pw-tabs/pw-tabs.component.mjs +3 -3
  17. package/esm2022/lib/resource-header/resource-header.component.mjs +31 -11
  18. package/esm2022/lib/resource-header/resource-header.module.mjs +59 -0
  19. package/esm2022/lib/resource-shared-components.module.mjs +101 -0
  20. package/esm2022/lib/shared-components.module.mjs +76 -100
  21. package/fesm2022/posiwise-shared-components.mjs +724 -688
  22. package/fesm2022/posiwise-shared-components.mjs.map +1 -1
  23. package/index.d.ts +7 -4
  24. package/lib/demo-cards/demo-cards.module.d.ts +14 -0
  25. package/lib/field-error-display/field-error-display.module.d.ts +13 -0
  26. package/lib/header/header.component.d.ts +2 -0
  27. package/lib/image-cropper/profile-image-cropper.module.d.ts +19 -0
  28. package/lib/resource-header/resource-header.component.d.ts +2 -1
  29. package/lib/resource-header/resource-header.module.d.ts +17 -0
  30. package/lib/resource-shared-components.module.d.ts +22 -0
  31. package/lib/shared-components.module.d.ts +40 -46
  32. package/package.json +1 -1
  33. package/esm2022/lib/ab-test/ab-alternative/ab-alternative.component.mjs +0 -26
  34. package/esm2022/lib/ab-test/ab-test-container/ab-test-container.component.mjs +0 -46
  35. package/esm2022/lib/ab-test/ab-test.interface.mjs +0 -2
  36. package/esm2022/lib/geo-template/geo-template.component.mjs +0 -24
  37. package/esm2022/lib/lazy-loading.service.mjs +0 -111
  38. package/lib/ab-test/ab-alternative/ab-alternative.component.d.ts +0 -16
  39. package/lib/ab-test/ab-test-container/ab-test-container.component.d.ts +0 -19
  40. package/lib/ab-test/ab-test.interface.d.ts +0 -9
  41. package/lib/geo-template/geo-template.component.d.ts +0 -12
  42. package/lib/lazy-loading.service.d.ts +0 -55
@@ -1,120 +1,57 @@
1
- import * as i5 from '@angular/cdk/drag-drop';
2
- import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
3
- import * as i3 from '@angular/common';
4
- import { DOCUMENT, CommonModule, NgIf } from '@angular/common';
1
+ import * as i3$2 from '@angular/common';
2
+ import { CommonModule, DOCUMENT, NgIf } from '@angular/common';
5
3
  import * as i0 from '@angular/core';
6
- import { Component, Input, EventEmitter, Output, Inject, ViewChild, Optional, Host, SkipSelf, ContentChild, Injectable, HostListener, NgModule } from '@angular/core';
7
- import * as i2$3 from '@angular/forms';
8
- import { NG_VALUE_ACCESSOR, UntypedFormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
9
- import * as i1$5 from '@posiwise/app-loader';
4
+ import { Component, Input, ViewChild, NgModule, ContentChild, EventEmitter, Output, Inject, Optional, Host, SkipSelf, HostListener } from '@angular/core';
5
+ import * as i2 from '@angular/forms';
6
+ import { FormsModule, UntypedFormControl, Validators, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i5 from '@angular/router';
8
+ import { NavigationEnd, RouterModule } from '@angular/router';
9
+ import * as i1$4 from '@posiwise/app-loader';
10
10
  import { AppLoaderModule } from '@posiwise/app-loader';
11
11
  import { CoreTranslocoModule } from '@posiwise/core-transloco';
12
- import * as i1$1 from '@posiwise/directives';
12
+ import * as i3 from '@posiwise/directives';
13
13
  import { DirectivesModule } from '@posiwise/directives';
14
14
  import { PipesModule } from '@posiwise/pipes';
15
- import * as i2$6 from 'ngx-daterangepicker-material';
15
+ import * as i1$3 from 'ngx-daterangepicker-material';
16
16
  import { DaterangepickerDirective, NgxDaterangepickerMd } from 'ngx-daterangepicker-material';
17
- import * as i2 from 'ngx-image-cropper';
17
+ import * as i2$2 from 'ngx-image-cropper';
18
18
  import { ImageCropperModule } from 'ngx-image-cropper';
19
- import * as i6 from 'ngx-ui-switch';
19
+ import * as i5$1 from 'ngx-ui-switch';
20
20
  import { UiSwitchModule } from 'ngx-ui-switch';
21
21
  import * as i9 from 'primeng/autocomplete';
22
22
  import { AutoCompleteModule } from 'primeng/autocomplete';
23
- import * as i2$2 from 'primeng/button';
23
+ import * as i3$4 from 'primeng/button';
24
24
  import { ButtonModule } from 'primeng/button';
25
- import * as i3$1 from 'primeng/dropdown';
25
+ import * as i5$2 from 'primeng/dropdown';
26
26
  import { DropdownModule } from 'primeng/dropdown';
27
27
  import { MultiSelectModule } from 'primeng/multiselect';
28
- import * as i7 from 'primeng/progressspinner';
28
+ import * as i4$1 from 'primeng/progressspinner';
29
29
  import { ProgressSpinnerModule } from 'primeng/progressspinner';
30
- import * as i8 from 'primeng/table';
30
+ import * as i6$1 from 'primeng/table';
31
31
  import { TableModule } from 'primeng/table';
32
- import * as i1$4 from 'primeng/tabmenu';
32
+ import * as i2$1 from 'primeng/tabmenu';
33
33
  import { TabMenuModule } from 'primeng/tabmenu';
34
- import * as i2$1 from '@ng-bootstrap/ng-bootstrap';
35
- import { NgbTooltipModule, NgbModalModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
34
+ import * as i3$1 from '@ng-bootstrap/ng-bootstrap';
35
+ import { NgbModalModule, NgbTooltipModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
36
+ import { AppBaseComponent } from '@posiwise/app-base-component';
36
37
  import * as i1 from '@posiwise/common-services';
37
38
  import { PermissionService } from '@posiwise/common-services';
38
- import { AB_TEST_ACTIONS, TAG_ENTITY } from '@posiwise/common-utilities';
39
- import { AppBaseComponent } from '@posiwise/app-base-component';
40
39
  import { HelperService } from '@posiwise/helper-service';
40
+ import * as i6 from '@angular/cdk/drag-drop';
41
+ import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
42
+ import * as i1$2 from '@posiwise/admin-module-utils';
43
+ import { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';
44
+ import * as i1$1 from '@angular/platform-browser';
41
45
  import * as i4 from '@jsverse/transloco';
42
- import * as i1$2 from '@angular/platform-browser';
43
- import * as i1$3 from '@posiwise/admin-module-utils';
44
- import * as i2$4 from 'primeng/tooltip';
45
- import * as i4$1 from 'primeng/api';
46
- import * as i2$5 from '@angular/router';
47
- import { NavigationEnd } from '@angular/router';
46
+ import { TAG_ENTITY } from '@posiwise/common-utilities';
47
+ import * as i7 from 'primeng/api';
48
48
  import { __decorate, __metadata } from 'tslib';
49
49
  import { ValidateForm } from '@posiwise/utils';
50
50
  import swal from 'sweetalert2';
51
- import { from } from 'rxjs';
51
+ import * as i3$3 from 'primeng/tooltip';
52
52
  import { StatusCodes } from 'http-status-codes';
53
53
  import map from 'lodash/map';
54
- import * as i1$6 from '@posiwise/app-config-service';
55
-
56
- class AbTestContainerComponent {
57
- constructor(service) {
58
- this.service = service;
59
- /**
60
- * Specifies boolean to show the experiment as fallback
61
- */
62
- this.showDefaultExperiment = false;
63
- }
64
- ngOnInit() {
65
- this.getExperiment();
66
- }
67
- getExperiment() {
68
- this.service
69
- .getExperiment(this.experimentName, AB_TEST_ACTIONS.START, this.serviceInput)
70
- .subscribe({
71
- next: (response) => {
72
- this.showDefaultExperiment = false;
73
- this.data = response || {};
74
- },
75
- error: () => {
76
- // in case the api for experiment fails, we show the default experiment
77
- this.showDefaultExperiment = true;
78
- }
79
- });
80
- }
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AbTestContainerComponent, deps: [{ token: i1.AbTestService }], target: i0.ɵɵFactoryTarget.Component }); }
82
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: AbTestContainerComponent, selector: "pw-ab-test-container", inputs: { experimentName: "experimentName", serviceInput: "serviceInput" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); }
83
- }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AbTestContainerComponent, decorators: [{
85
- type: Component,
86
- args: [{
87
- // eslint-disable-next-line @angular-eslint/component-selector
88
- selector: 'pw-ab-test-container',
89
- template: '<ng-content></ng-content>'
90
- }]
91
- }], ctorParameters: () => [{ type: i1.AbTestService }], propDecorators: { experimentName: [{
92
- type: Input
93
- }], serviceInput: [{
94
- type: Input
95
- }] } });
96
-
97
- class AbAlternativeComponent {
98
- constructor() {
99
- /**
100
- * If the getExperiment call fails, it can be set to show the experiment
101
- * as fallback
102
- */
103
- this.default = false;
104
- }
105
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AbAlternativeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
106
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: AbAlternativeComponent, selector: "ab-alternative", inputs: { name: "name", ref: "ref", default: "default" }, ngImport: i0, template: "<!-- renders the template for the started experiment.\nin case of error, render the template marked as default=true -->\n<ng-template [ngIf]=\"\n ref?.data?.alternative === name || (default === true && ref.showDefaultExperiment === true)\n \">\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
107
- }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AbAlternativeComponent, decorators: [{
109
- type: Component,
110
- args: [{ selector: 'ab-alternative', template: "<!-- renders the template for the started experiment.\nin case of error, render the template marked as default=true -->\n<ng-template [ngIf]=\"\n ref?.data?.alternative === name || (default === true && ref.showDefaultExperiment === true)\n \">\n <ng-content></ng-content>\n</ng-template>\n" }]
111
- }], propDecorators: { name: [{
112
- type: Input
113
- }], ref: [{
114
- type: Input
115
- }], default: [{
116
- type: Input
117
- }] } });
54
+ import * as i1$5 from '@posiwise/app-config-service';
118
55
 
119
56
  class AuthenticatorComponent extends AppBaseComponent {
120
57
  constructor(authService, injector) {
@@ -167,7 +104,7 @@ class ClearBitIconComponent {
167
104
  }
168
105
  }
169
106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClearBitIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
170
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ClearBitIconComponent, selector: "pw-clearbit-icon", inputs: { src: "src", altText: "altText", dummyPath: "dummyPath" }, usesOnChanges: true, ngImport: i0, template: "<img [src]=\"clearBitSrc\"\n [alt]=\"altText\"\n class=\"img-fluid company-logo me-2 mt-1\" />\n", styles: [".company-logo{height:25px;width:25px}\n"], dependencies: [{ kind: "directive", type: i1$1.LazyImgDirective, selector: "img" }] }); }
107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ClearBitIconComponent, selector: "pw-clearbit-icon", inputs: { src: "src", altText: "altText", dummyPath: "dummyPath" }, usesOnChanges: true, ngImport: i0, template: "<img [src]=\"clearBitSrc\"\n [alt]=\"altText\"\n class=\"img-fluid company-logo me-2 mt-1\" />\n", styles: [".company-logo{height:25px;width:25px}\n"], dependencies: [{ kind: "directive", type: i3.LazyImgDirective, selector: "img" }] }); }
171
108
  }
172
109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClearBitIconComponent, decorators: [{
173
110
  type: Component,
@@ -207,193 +144,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
207
144
  type: Input
208
145
  }] } });
209
146
 
210
- class ProfileImageCropperComponent {
211
- constructor(cdr) {
212
- this.cdr = cdr;
213
- this.imageChangedEvent = '';
214
- this.croppedImage = '';
215
- this.imageSelectionEvent = new EventEmitter();
216
- this.closeEvent = new EventEmitter();
217
- this.fileChangeEvent = new EventEmitter();
218
- this.aspectRatio = 'auto';
219
- this.transform = {};
220
- this.canvasRotation = 0;
221
- this.showCropper = false;
222
- }
223
- onFileChange(event) {
224
- const input = event.target;
225
- if (input.files && input.files.length > 0) {
226
- this.imageChangedEvent = event;
227
- this.fileChangeEvent.emit(input.files[0].name);
228
- }
229
- }
230
- imageCropped(event) {
231
- const reader = new FileReader();
232
- reader.onloadend = () => {
233
- this.croppedImage = reader.result;
234
- this.cdr.detectChanges();
235
- };
236
- reader.readAsDataURL(event.blob);
237
- }
238
- imageLoaded() {
239
- this.showCropper = true;
240
- }
241
- rotateLeft() {
242
- this.canvasRotation--;
243
- this.flipAfterRotate();
244
- }
245
- rotateRight() {
246
- this.canvasRotation++;
247
- this.flipAfterRotate();
248
- }
249
- flipAfterRotate() {
250
- const flippedH = this.transform.flipH;
251
- const flippedV = this.transform.flipV;
252
- this.transform = {
253
- ...this.transform,
254
- flipH: flippedV,
255
- flipV: flippedH
256
- };
257
- }
258
- flipHorizontal() {
259
- this.transform = {
260
- ...this.transform,
261
- flipH: !this.transform.flipH
262
- };
263
- }
264
- flipVertical() {
265
- this.transform = {
266
- ...this.transform,
267
- flipV: !this.transform.flipV
268
- };
269
- }
270
- saveProfilePicture() {
271
- if (this.croppedImage) {
272
- this.imageSelectionEvent.emit(this.croppedImage);
273
- this.busy = true;
274
- }
275
- }
276
- onCloseModal() {
277
- this.closeEvent.emit();
278
- }
279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
280
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: { aspectRatio: "aspectRatio", dynamicData: "dynamicData" }, outputs: { imageSelectionEvent: "imageSelectionEvent", closeEvent: "closeEvent", fileChangeEvent: "fileChangeEvent" }, ngImport: i0, template: "<section class=\"image-cropper\">\n <div class=\"row text-start\">\n <div class=\"col-12\">\n <div class=\"card-block pb-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"file-upload my-2 float-start\">\n <label for=\"custom-input\">\n Upload Pic\n <input id=\"custom-input\"\n type=\"file\"\n (change)=\"onFileChange($event)\" />\n </label>\n </div>\n\n <div class=\"float-end m-2\">\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Left\">\n <i\n class=\"fa fa-undo-alt\"\n (click)=\"rotateLeft()\"\n (keydown.enter)=\"rotateLeft()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Right\">\n <i\n class=\"fa fa-redo-alt\"\n (click)=\"rotateRight()\"\n (keydown.enter)=\"rotateRight()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Horizontal\">\n <i\n class=\"fa fa-arrows-alt-h\"\n (click)=\"flipHorizontal()\"\n (keydown.enter)=\"flipHorizontal()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Vertical\">\n <i\n class=\"fa fa-arrows-alt-v\"\n (click)=\"flipVertical()\"\n (keydown.enter)=\"flipVertical()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-8\">\n <div *ngIf=\"aspectRatio === 'auto'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [aspectRatio]=\"4 / 4\"\n [onlyScaleDown]=\"true\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'fullLogo'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"5 / 1.1\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'rectangular'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"3 / 1\"\n [onlyScaleDown]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'dynamic'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"false\"\n [resizeToWidth]=\"0\"\n [cropperStaticWidth]=\"0\"\n [cropperStaticHeight]=\"0\"\n [cropperMinWidth]=\"10\"\n [cropperMinHeight]=\"10\"\n [onlyScaleDown]=\"false\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n imageQuality=\"100\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n [style.display]=\"showCropper ? null : 'none'\">\n </image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'custom'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [aspectRatio]=\"4 / 3\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n </div>\n <div *ngIf=\"croppedImage\" class=\"col-4 mt-2\">\n <img [src]=\"croppedImage\"\n class=\"cropped-image\"\n alt=\"cropped.png\"\n width=\"128\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-end mt-2\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCloseModal()\">\n Close\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveProfilePicture()\"\n [buttonBusy]=\"busy\">\n Save\n </button>\n </div>\n </div>\n</section>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.image-cropper label{background:var(--first);border-radius:5px;color:#fff;display:table;font-size:13px;font-weight:500;padding:7px}.image-cropper input[type=file]{display:none}.cropped-image{max-height:390px!important}.card-footer{background-color:transparent;left:0}\n"], dependencies: [{ kind: "directive", type: i1$1.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i1$1.LazyImgDirective, selector: "img" }, { kind: "component", type: i2.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "cropperFrameAriaLabel", "output", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
281
- }
282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperComponent, decorators: [{
283
- type: Component,
284
- args: [{ selector: 'pw-image-cropper', template: "<section class=\"image-cropper\">\n <div class=\"row text-start\">\n <div class=\"col-12\">\n <div class=\"card-block pb-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"file-upload my-2 float-start\">\n <label for=\"custom-input\">\n Upload Pic\n <input id=\"custom-input\"\n type=\"file\"\n (change)=\"onFileChange($event)\" />\n </label>\n </div>\n\n <div class=\"float-end m-2\">\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Left\">\n <i\n class=\"fa fa-undo-alt\"\n (click)=\"rotateLeft()\"\n (keydown.enter)=\"rotateLeft()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Right\">\n <i\n class=\"fa fa-redo-alt\"\n (click)=\"rotateRight()\"\n (keydown.enter)=\"rotateRight()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Horizontal\">\n <i\n class=\"fa fa-arrows-alt-h\"\n (click)=\"flipHorizontal()\"\n (keydown.enter)=\"flipHorizontal()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Vertical\">\n <i\n class=\"fa fa-arrows-alt-v\"\n (click)=\"flipVertical()\"\n (keydown.enter)=\"flipVertical()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-8\">\n <div *ngIf=\"aspectRatio === 'auto'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [aspectRatio]=\"4 / 4\"\n [onlyScaleDown]=\"true\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'fullLogo'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"5 / 1.1\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'rectangular'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"3 / 1\"\n [onlyScaleDown]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'dynamic'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"false\"\n [resizeToWidth]=\"0\"\n [cropperStaticWidth]=\"0\"\n [cropperStaticHeight]=\"0\"\n [cropperMinWidth]=\"10\"\n [cropperMinHeight]=\"10\"\n [onlyScaleDown]=\"false\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n imageQuality=\"100\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n [style.display]=\"showCropper ? null : 'none'\">\n </image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'custom'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [aspectRatio]=\"4 / 3\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n </div>\n <div *ngIf=\"croppedImage\" class=\"col-4 mt-2\">\n <img [src]=\"croppedImage\"\n class=\"cropped-image\"\n alt=\"cropped.png\"\n width=\"128\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-end mt-2\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCloseModal()\">\n Close\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveProfilePicture()\"\n [buttonBusy]=\"busy\">\n Save\n </button>\n </div>\n </div>\n</section>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.image-cropper label{background:var(--first);border-radius:5px;color:#fff;display:table;font-size:13px;font-weight:500;padding:7px}.image-cropper input[type=file]{display:none}.cropped-image{max-height:390px!important}.card-footer{background-color:transparent;left:0}\n"] }]
285
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { imageSelectionEvent: [{
286
- type: Output
287
- }], closeEvent: [{
288
- type: Output
289
- }], fileChangeEvent: [{
290
- type: Output
291
- }], aspectRatio: [{
292
- type: Input
293
- }], dynamicData: [{
294
- type: Input
295
- }] } });
296
-
297
- var imageCropper_component = /*#__PURE__*/Object.freeze({
298
- __proto__: null,
299
- ProfileImageCropperComponent: ProfileImageCropperComponent
300
- });
301
-
302
- class CustomUploaderComponent extends AppBaseComponent {
303
- constructor(injector, modalService, document) {
304
- super(injector);
305
- this.modalService = modalService;
306
- this.document = document;
307
- this.saveEvent = new EventEmitter();
308
- this.aspectRatio = 'auto';
309
- this.uploadedFile = null;
310
- }
311
- deleteExistingFile() {
312
- HelperService.raiseDeletePopup().then(rep => {
313
- if (rep.value) {
314
- this.previewData = null;
315
- this.onSaveFile();
316
- }
317
- });
318
- }
319
- onSaveFile() {
320
- this.buttonBusy = true;
321
- this.saveEvent.emit({
322
- file: this.previewData?.url ? this.previewData : this.uploadedFile,
323
- name: this.controlName
324
- });
325
- }
326
- // modal image cropper
327
- onFileChange(value) {
328
- this.selectedFileName = value;
329
- }
330
- dataURLtoBlob(dataUrl) {
331
- const arr = dataUrl?.split(',');
332
- // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
333
- const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];
334
- const bStr = atob(arr[1]);
335
- let n = bStr.length;
336
- const u8arr = new Uint8Array(n);
337
- // eslint-disable-next-line no-plusplus
338
- while (n--) {
339
- u8arr[n] = bStr.charCodeAt(n);
340
- }
341
- return new Blob([u8arr], { type: mime });
342
- }
343
- onImageSelection(event) {
344
- const blob = this.dataURLtoBlob(event);
345
- const file = new File([blob], this.selectedFileName);
346
- this.uploadedFile = file;
347
- this.onSaveFile();
348
- }
349
- openModal(content) {
350
- this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });
351
- }
352
- clearValues() {
353
- this.uploadedFile = null;
354
- this.selectedFileName = null;
355
- this.updateHeight();
356
- }
357
- onClose() {
358
- this.modalService.dismissAll();
359
- }
360
- updateHeight() {
361
- // wait for update card height
362
- setTimeout(() => {
363
- this.onImgChange();
364
- });
365
- }
366
- onImgChange(event) {
367
- if (event) {
368
- const target = event.target;
369
- target.src = 'assets/img/icons/imagenotavailable.png';
370
- }
371
- const el = this.document.querySelectorAll('pw-domain-config-interface,pw-domain-config-build div[matchheight="card"]');
372
- el.forEach((item) => {
373
- HelperService.matchHeights(item, 'card');
374
- });
375
- }
376
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CustomUploaderComponent, deps: [{ token: i0.Injector }, { token: i2$1.NgbModal }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
377
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: CustomUploaderComponent, selector: "pw-custom-uploader", inputs: { controlName: "controlName", previewData: "previewData", aspectRatio: "aspectRatio", title: "title" }, outputs: { saveEvent: "saveEvent" }, usesInheritance: true, ngImport: i0, template: "<div class=\"card pb-2\">\n <div class=\"card-header upload-button-bar\">\n <button pButton\n type=\"button\"\n [disabled]=\"previewData?.url || uploadedFile\"\n (click)=\"openModal(content)\"\n (keydown.enter)=\"openModal(content)\"\n icon=\"pi pi-plus\"\n label=\"Choose\"></button>\n </div>\n <div class=\"card-body\">\n <!-- no files -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"!previewData?.url\">\n <div>\n <img src=\"assets/img/icons/nofilesfound.png\"\n (load)=\"onImgChange()\"\n class=\"mx-auto img-fluid\"\n alt=\"\" />\n </div>\n </div>\n <!-- existing images -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"previewData?.url\">\n <div>\n <a [href]=\"previewData?.url\"\n target=\"_blank\">\n <img [src]=\"previewData?.url\"\n alt=\"\"\n (load)=\"onImgChange()\"\n (error)=\"onImgChange($event)\"\n class=\"img-fluid\" />\n </a>\n </div>\n <div class=\"ms-3\">\n <i\n container=\"body\"\n ngbTooltip=\"Delete\"\n (click)=\"deleteExistingFile()\"\n (keydown.enter)=\"deleteExistingFile()\"\n (keydown.space)=\"deleteExistingFile()\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n </div>\n</div>\n<!-- image cropper -->\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ title }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n [aspectRatio]=\"aspectRatio\"\n (fileChangeEvent)=\"onFileChange($event)\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.upload-button-bar{background:#efefef;padding:1rem 1.25rem}.card{min-height:270px!important;max-height:550px!important;height:auto}.preview-wrapper{align-items:center;text-align:center}.preview-wrapper div{padding:1rem;flex:1 1 auto;width:25%;word-break:break-all}button[label=Choose],button[label=Choose]:hover,button[label=Choose]:enabled:active{background-color:#616161;border-color:#616161}\n"], dependencies: [{ kind: "directive", type: i2$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i2$2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i1$1.LazyImgDirective, selector: "img" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
378
- }
379
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CustomUploaderComponent, decorators: [{
380
- type: Component,
381
- args: [{ selector: 'pw-custom-uploader', template: "<div class=\"card pb-2\">\n <div class=\"card-header upload-button-bar\">\n <button pButton\n type=\"button\"\n [disabled]=\"previewData?.url || uploadedFile\"\n (click)=\"openModal(content)\"\n (keydown.enter)=\"openModal(content)\"\n icon=\"pi pi-plus\"\n label=\"Choose\"></button>\n </div>\n <div class=\"card-body\">\n <!-- no files -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"!previewData?.url\">\n <div>\n <img src=\"assets/img/icons/nofilesfound.png\"\n (load)=\"onImgChange()\"\n class=\"mx-auto img-fluid\"\n alt=\"\" />\n </div>\n </div>\n <!-- existing images -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"previewData?.url\">\n <div>\n <a [href]=\"previewData?.url\"\n target=\"_blank\">\n <img [src]=\"previewData?.url\"\n alt=\"\"\n (load)=\"onImgChange()\"\n (error)=\"onImgChange($event)\"\n class=\"img-fluid\" />\n </a>\n </div>\n <div class=\"ms-3\">\n <i\n container=\"body\"\n ngbTooltip=\"Delete\"\n (click)=\"deleteExistingFile()\"\n (keydown.enter)=\"deleteExistingFile()\"\n (keydown.space)=\"deleteExistingFile()\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n </div>\n</div>\n<!-- image cropper -->\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ title }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n [aspectRatio]=\"aspectRatio\"\n (fileChangeEvent)=\"onFileChange($event)\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.upload-button-bar{background:#efefef;padding:1rem 1.25rem}.card{min-height:270px!important;max-height:550px!important;height:auto}.preview-wrapper{align-items:center;text-align:center}.preview-wrapper div{padding:1rem;flex:1 1 auto;width:25%;word-break:break-all}button[label=Choose],button[label=Choose]:hover,button[label=Choose]:enabled:active{background-color:#616161;border-color:#616161}\n"] }]
382
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i2$1.NgbModal }, { type: Document, decorators: [{
383
- type: Inject,
384
- args: [DOCUMENT]
385
- }] }], propDecorators: { saveEvent: [{
386
- type: Output
387
- }], controlName: [{
388
- type: Input
389
- }], previewData: [{
390
- type: Input
391
- }], aspectRatio: [{
392
- type: Input
393
- }], title: [{
394
- type: Input
395
- }] } });
396
-
397
147
  class DemoCardsComponent extends AppBaseComponent {
398
148
  constructor(sanitizer, modalService, adminService, injector) {
399
149
  super(injector);
@@ -410,7 +160,9 @@ class DemoCardsComponent extends AppBaseComponent {
410
160
  this.subscriptionId = data?.subscriptionId;
411
161
  });
412
162
  }
413
- this.bookingLinks = (this.appConfig?.pages_config?.book_demo?.items ?? []).map(link => ({
163
+ this.bookingLinks = (this.appConfig?.pages_config?.book_demo?.items ?? [])
164
+ .filter(link => link?.url)
165
+ .map(link => ({
414
166
  ...link,
415
167
  // NOSONAR: Trusted iframe URL content is handled safely here
416
168
  url: this.sanitizer.bypassSecurityTrustResourceUrl(link.url) // NOSONAR
@@ -447,7 +199,9 @@ class DemoCardsComponent extends AppBaseComponent {
447
199
  })
448
200
  .subscribe(() => {
449
201
  this.toast.success('Booking links updated');
450
- this.bookingLinks = this.editingBookingLinks.map(link => ({
202
+ this.bookingLinks = this.editingBookingLinks
203
+ .filter(link => link?.url)
204
+ .map(link => ({
451
205
  ...link,
452
206
  // NOSONAR: Trusted iframe URL content is handled safely here
453
207
  url: this.sanitizer.bypassSecurityTrustResourceUrl(link.url) // NOSONAR
@@ -462,13 +216,13 @@ class DemoCardsComponent extends AppBaseComponent {
462
216
  canEditResources() {
463
217
  return this.canEditResourcesValue;
464
218
  }
465
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DemoCardsComponent, deps: [{ token: i1$2.DomSanitizer }, { token: i2$1.NgbModal }, { token: i1$3.AdminService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
466
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: DemoCardsComponent, selector: "pw-demo-card", inputs: { user: "user", userLoggedIn: "userLoggedIn" }, viewQueries: [{ propertyName: "editBookLinksModal", first: true, predicate: ["editBookLinksModal"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- EDIT ICON -->\n\n<!-- DEMO LINKS -->\n<div class=\"row text-center\">\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon mb-3 cursor-pointer\"\n title=\"Edit Booking Links\"\n (click)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.enter)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.space)=\"openEditBookLinks(editBookLinksModal)\">\n </i>\n <div class=\"col-md-6 col-lg-4 mb-5\" *ngFor=\"let link of bookingLinks\">\n <h5 class=\"mb-3\">{{ link?.title }}</h5>\n <iframe [src]=\"link?.url\"\n width=\"100%\"\n title=\"Booking frame\"\n height=\"600\"\n class=\"iframe-no-border\">\n </iframe>\n </div>\n</div>\n\n<!-- MODAL TEMPLATE -->\n<ng-template #editBookLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Book Demo Links</h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\" aria-label=\"Close\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div cdkDropList (cdkDropListDropped)=\"dropBookingLink($event)\">\n <div *ngFor=\"let item of editingBookingLinks; let i = index\" class=\"card p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5\">\n <label for=\"demoLinkTitle{{i}}\" class=\"form-label\">Link Title</label>\n <input id=\"demoLinkTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"demoLinkUrl{{i}}\" class=\"form-label\">Link URL</label>\n <input id=\"demoLinkUrl{{i}}\" class=\"form-control\" [(ngModel)]=\"item.url\" />\n </div>\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash in-page-trash-icon delete-icon text-danger\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n class=\"fa fa-bars in-page-bars-icon cursor-move\"\n cdkDragHandle\n ngbTooltip=\"Drag to reorder\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary mt-3\" (click)=\"addBookingLink()\">\n <i class=\"fa fa-plus me-1\"></i> Add Book Demo Link\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)=\"saveBookingLinks(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".iframe-no-border{border:0}\n"], dependencies: [{ kind: "directive", type: i2$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.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: i5.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: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DemoCardsComponent, deps: [{ token: i1$1.DomSanitizer }, { token: i3$1.NgbModal }, { token: i1$2.AdminService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
220
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: DemoCardsComponent, selector: "pw-demo-card", inputs: { user: "user", userLoggedIn: "userLoggedIn" }, viewQueries: [{ propertyName: "editBookLinksModal", first: true, predicate: ["editBookLinksModal"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- EDIT ICON -->\n\n<!-- DEMO LINKS -->\n<div class=\"row text-center\">\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon mb-3 cursor-pointer\"\n title=\"Edit Booking Links\"\n (click)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.enter)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.space)=\"openEditBookLinks(editBookLinksModal)\">\n </i>\n <div class=\"col-md-6 col-lg-4\" *ngFor=\"let link of bookingLinks\">\n <h5 class=\"mb-3\" *ngIf=\"link?.url && link?.title\">{{ link?.title }}</h5>\n <iframe *ngIf=\"link?.url\"\n [src]=\"link?.url\"\n width=\"100%\"\n title=\"Booking frame\"\n height=\"600\"\n class=\"iframe-no-border\">\n </iframe>\n </div>\n</div>\n\n<!-- MODAL TEMPLATE -->\n<ng-template #editBookLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Book Demo Links</h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\" aria-label=\"Close\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div cdkDropList (cdkDropListDropped)=\"dropBookingLink($event)\">\n <div *ngFor=\"let item of editingBookingLinks; let i = index\" class=\"card p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5\">\n <label for=\"demoLinkTitle{{i}}\" class=\"form-label\">Link Title</label>\n <input id=\"demoLinkTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"demoLinkUrl{{i}}\" class=\"form-label\">Link URL</label>\n <input id=\"demoLinkUrl{{i}}\" class=\"form-control\" [(ngModel)]=\"item.url\" />\n </div>\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash in-page-trash-icon delete-icon text-danger\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n class=\"fa fa-bars in-page-bars-icon cursor-move\"\n cdkDragHandle\n ngbTooltip=\"Drag to reorder\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary mt-3\" (click)=\"addBookingLink()\">\n <i class=\"fa fa-plus me-1\"></i> Add Book Demo Link\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)=\"saveBookingLinks(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".iframe-no-border{border:0}\n"], dependencies: [{ kind: "directive", type: i3$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "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"] }] }); }
467
221
  }
468
222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DemoCardsComponent, decorators: [{
469
223
  type: Component,
470
- args: [{ selector: 'pw-demo-card', template: "<!-- EDIT ICON -->\n\n<!-- DEMO LINKS -->\n<div class=\"row text-center\">\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon mb-3 cursor-pointer\"\n title=\"Edit Booking Links\"\n (click)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.enter)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.space)=\"openEditBookLinks(editBookLinksModal)\">\n </i>\n <div class=\"col-md-6 col-lg-4 mb-5\" *ngFor=\"let link of bookingLinks\">\n <h5 class=\"mb-3\">{{ link?.title }}</h5>\n <iframe [src]=\"link?.url\"\n width=\"100%\"\n title=\"Booking frame\"\n height=\"600\"\n class=\"iframe-no-border\">\n </iframe>\n </div>\n</div>\n\n<!-- MODAL TEMPLATE -->\n<ng-template #editBookLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Book Demo Links</h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\" aria-label=\"Close\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div cdkDropList (cdkDropListDropped)=\"dropBookingLink($event)\">\n <div *ngFor=\"let item of editingBookingLinks; let i = index\" class=\"card p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5\">\n <label for=\"demoLinkTitle{{i}}\" class=\"form-label\">Link Title</label>\n <input id=\"demoLinkTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"demoLinkUrl{{i}}\" class=\"form-label\">Link URL</label>\n <input id=\"demoLinkUrl{{i}}\" class=\"form-control\" [(ngModel)]=\"item.url\" />\n </div>\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash in-page-trash-icon delete-icon text-danger\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n class=\"fa fa-bars in-page-bars-icon cursor-move\"\n cdkDragHandle\n ngbTooltip=\"Drag to reorder\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary mt-3\" (click)=\"addBookingLink()\">\n <i class=\"fa fa-plus me-1\"></i> Add Book Demo Link\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)=\"saveBookingLinks(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".iframe-no-border{border:0}\n"] }]
471
- }], ctorParameters: () => [{ type: i1$2.DomSanitizer }, { type: i2$1.NgbModal }, { type: i1$3.AdminService }, { type: i0.Injector }], propDecorators: { user: [{
224
+ args: [{ selector: 'pw-demo-card', template: "<!-- EDIT ICON -->\n\n<!-- DEMO LINKS -->\n<div class=\"row text-center\">\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon mb-3 cursor-pointer\"\n title=\"Edit Booking Links\"\n (click)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.enter)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.space)=\"openEditBookLinks(editBookLinksModal)\">\n </i>\n <div class=\"col-md-6 col-lg-4\" *ngFor=\"let link of bookingLinks\">\n <h5 class=\"mb-3\" *ngIf=\"link?.url && link?.title\">{{ link?.title }}</h5>\n <iframe *ngIf=\"link?.url\"\n [src]=\"link?.url\"\n width=\"100%\"\n title=\"Booking frame\"\n height=\"600\"\n class=\"iframe-no-border\">\n </iframe>\n </div>\n</div>\n\n<!-- MODAL TEMPLATE -->\n<ng-template #editBookLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Book Demo Links</h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\" aria-label=\"Close\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div cdkDropList (cdkDropListDropped)=\"dropBookingLink($event)\">\n <div *ngFor=\"let item of editingBookingLinks; let i = index\" class=\"card p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5\">\n <label for=\"demoLinkTitle{{i}}\" class=\"form-label\">Link Title</label>\n <input id=\"demoLinkTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"demoLinkUrl{{i}}\" class=\"form-label\">Link URL</label>\n <input id=\"demoLinkUrl{{i}}\" class=\"form-control\" [(ngModel)]=\"item.url\" />\n </div>\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash in-page-trash-icon delete-icon text-danger\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n class=\"fa fa-bars in-page-bars-icon cursor-move\"\n cdkDragHandle\n ngbTooltip=\"Drag to reorder\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary mt-3\" (click)=\"addBookingLink()\">\n <i class=\"fa fa-plus me-1\"></i> Add Book Demo Link\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)=\"saveBookingLinks(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".iframe-no-border{border:0}\n"] }]
225
+ }], ctorParameters: () => [{ type: i1$1.DomSanitizer }, { type: i3$1.NgbModal }, { type: i1$2.AdminService }, { type: i0.Injector }], propDecorators: { user: [{
472
226
  type: Input
473
227
  }], userLoggedIn: [{
474
228
  type: Input
@@ -477,146 +231,99 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
477
231
  args: ['editBookLinksModal', { static: true }]
478
232
  }] } });
479
233
 
234
+ class DemoCardsModule {
235
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DemoCardsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
236
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: DemoCardsModule, declarations: [DemoCardsComponent], imports: [CommonModule,
237
+ FormsModule,
238
+ DragDropModule,
239
+ NgbModalModule,
240
+ DirectivesModule,
241
+ PipesModule,
242
+ AdminModuleUtilsModule], exports: [DemoCardsComponent] }); }
243
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DemoCardsModule, imports: [CommonModule,
244
+ FormsModule,
245
+ DragDropModule,
246
+ NgbModalModule,
247
+ DirectivesModule,
248
+ PipesModule,
249
+ AdminModuleUtilsModule] }); }
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DemoCardsModule, decorators: [{
252
+ type: NgModule,
253
+ args: [{
254
+ declarations: [DemoCardsComponent],
255
+ imports: [
256
+ CommonModule,
257
+ FormsModule,
258
+ DragDropModule,
259
+ NgbModalModule,
260
+ DirectivesModule,
261
+ PipesModule,
262
+ AdminModuleUtilsModule
263
+ ],
264
+ exports: [DemoCardsComponent]
265
+ }]
266
+ }] });
267
+
480
268
  class FieldErrorDisplayComponent {
481
269
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FieldErrorDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
482
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: FieldErrorDisplayComponent, selector: "pw-field-error-display", inputs: { errorMsg: "errorMsg", displayError: "displayError" }, ngImport: i0, template: "<div *ngIf=\"displayError\">\n <div class=\"text-danger\">\n {{ errorMsg }}\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
270
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: FieldErrorDisplayComponent, selector: "pw-field-error-display", inputs: { errorMsg: "errorMsg", displayError: "displayError" }, ngImport: i0, template: "<div *ngIf=\"displayError\">\n <div class=\"text-danger\">\n {{ errorMsg }}\n </div>\n</div>\n\n", dependencies: [{ kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
483
271
  }
484
272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FieldErrorDisplayComponent, decorators: [{
485
273
  type: Component,
486
- args: [{ selector: 'pw-field-error-display', template: "<div *ngIf=\"displayError\">\n <div class=\"text-danger\">\n {{ errorMsg }}\n </div>\n</div>\n" }]
274
+ args: [{ selector: 'pw-field-error-display', template: "<div *ngIf=\"displayError\">\n <div class=\"text-danger\">\n {{ errorMsg }}\n </div>\n</div>\n\n" }]
487
275
  }], propDecorators: { errorMsg: [{
488
276
  type: Input
489
277
  }], displayError: [{
490
278
  type: Input
491
279
  }] } });
492
-
493
- class GeoTemplateComponent {
494
- constructor(geoService) {
495
- this.geoService = geoService;
496
- }
497
- ngOnInit() {
498
- this.getCountryByIP();
499
- }
500
- getCountryByIP() {
501
- this.geoService.getCountryFromIP().subscribe(response => {
502
- this.data = response;
503
- });
504
- }
505
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GeoTemplateComponent, deps: [{ token: i1.GeoService }], target: i0.ɵɵFactoryTarget.Component }); }
506
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: GeoTemplateComponent, selector: "pw-geo-template", ngImport: i0, template: "<ng-content></ng-content>\n" }); }
507
- }
508
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GeoTemplateComponent, decorators: [{
509
- type: Component,
510
- args: [{ selector: 'pw-geo-template', template: "<ng-content></ng-content>\n" }]
511
- }], ctorParameters: () => [{ type: i1.GeoService }] });
512
-
513
- class HeaderComponent extends AppBaseComponent {
514
- constructor(injector, authService) {
515
- super(injector);
516
- this.authService = authService;
517
- this.landing = false;
518
- this.logo = this.appConfig?.company?.logos?.main_contrast?.url;
519
- this.authService
520
- .getToken$()
521
- .pipe()
522
- .subscribe(res => {
523
- this.loggedIn = !!res;
524
- });
525
- }
526
- navigateToLogin() {
527
- window.location.href = '/login';
528
- }
529
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HeaderComponent, deps: [{ token: i0.Injector }, { token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
530
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: HeaderComponent, selector: "pw-header", inputs: { landing: "landing" }, usesInheritance: true, ngImport: i0, template: "<div class=\"navbar navbar-expand-lg fixed-top-nav fixed-top\"\n [ngClass]=\"{ 'navbar-blue': !landing }\">\n <div class=\"container d-block\">\n <div class=\"row m-0\">\n <div class=\"col-lg-2 float-start\">\n <a href=\"/\">\n <img [src]=\"logo\"\n class=\"header-logo\"\n alt=\"site-logo\" />\n </a>\n <button type=\"button\"\n class=\"navbar-toggle\"\n data-bs-toggle=\"collapse\"\n data-bs-target=\"#myNavbar\">\n <span class=\"icon-bar\"></span> <span class=\"icon-bar\"></span>\n <span class=\"icon-bar\"></span>\n </button>\n </div>\n <div class=\"col-lg-10 nav-outer mt-2\">\n <div class=\"collapse navbar-collapse float-end\"\n id=\"myNavbar\">\n <nav class=\"navbar navbar-expand-sm bg-light\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item contact-button\">\n <a href=\"/\"\n class=\"\">{{ 'Button.Home' | transloco }}</a>\n </li>\n <li *ngIf=\"!loggedIn\" class=\"nav-item login-button\">\n <a class=\"\"\n (click)=\"navigateToLogin()\"> log in</a>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.navbar-blue{background-color:var(--first);box-shadow:2px 2px 15px 2px #0000001f;transition:width 2s,height 2s,transform 2s background-color .5s ease;z-index:9999}.fixed-top-nav{display:block!important;height:60px}.navbar-toggle{display:none}.navbar-toggle .icon-bar{color:#fff}.nav-outer{text-align:right}.nav-outer nav{background:none!important;display:inline-block;float:none;width:auto}.nav-outer li a{color:#fff;font-size:18px;margin:0 0 0 30px;text-transform:capitalize}.nav-outer li a:hover{color:#fff;text-decoration:none}.nav-outer li a:focus{color:#fff}.navbar-nav li{display:inline-block}@media screen and (max-width: 1199px){.nav-outer li a{margin:0 10px}}@media screen and (max-width: 991px){.icon-bar{background-color:#fff;border-radius:1px;display:block;height:2px;margin-top:4px;width:22px}.navbar-toggle{background-color:#ffb92b!important;background-image:none;border:1px solid rgb(255,255,255);border-radius:4px;display:block!important;float:right;margin-top:4px;padding:9px 10px;position:relative}.collapse{display:none!important}.collapse.show{display:block!important}.nav-outer nav{background:#ffb92b!important;display:inline-block;float:left;padding:20px;width:100%}.nav-outer li a{margin:0;padding:0}.navbar-expand-sm,.navbar-nav{-webkit-box-direction:normal;-webkit-box-orient:horizontal;flex-direction:column}li.nav-item{float:left;margin-bottom:12px;text-align:left;width:100%}.navbar-expand-sm{-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-box-pack:start;flex-flow:column nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{left:auto;right:0}.nav-outer li a:hover{color:#0a56d3}.contact-button a,.login-button a,.nav-item{background:none;color:#fff!important;font-weight:600}.contact-button a:hover,.login-button a:hover,.nav-item a:hover{color:#0a56d3!important}}@media screen and (max-width: 767px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 575px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 375px){.navbar .container{padding:0!important}}@media (min-width: 641px) and (max-width: 991px){.navbar-toggle{margin-top:6px}}.header-logo{height:auto!important;width:auto;max-height:40px;max-width:100%;object-fit:contain}.login-button a{background-color:var(--second);color:#fff}.login-button a:hover{background-color:#fff;color:var(--second)!important}.contact-button a{background-color:var(--third);color:#fff}.contact-button a:hover{background-color:#fff;color:var(--third)!important}.fixed-top{position:fixed!important}\n"], dependencies: [{ kind: "directive", type: i1$1.LazyImgDirective, selector: "img" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
531
- }
532
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HeaderComponent, decorators: [{
533
- type: Component,
534
- args: [{ selector: 'pw-header', template: "<div class=\"navbar navbar-expand-lg fixed-top-nav fixed-top\"\n [ngClass]=\"{ 'navbar-blue': !landing }\">\n <div class=\"container d-block\">\n <div class=\"row m-0\">\n <div class=\"col-lg-2 float-start\">\n <a href=\"/\">\n <img [src]=\"logo\"\n class=\"header-logo\"\n alt=\"site-logo\" />\n </a>\n <button type=\"button\"\n class=\"navbar-toggle\"\n data-bs-toggle=\"collapse\"\n data-bs-target=\"#myNavbar\">\n <span class=\"icon-bar\"></span> <span class=\"icon-bar\"></span>\n <span class=\"icon-bar\"></span>\n </button>\n </div>\n <div class=\"col-lg-10 nav-outer mt-2\">\n <div class=\"collapse navbar-collapse float-end\"\n id=\"myNavbar\">\n <nav class=\"navbar navbar-expand-sm bg-light\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item contact-button\">\n <a href=\"/\"\n class=\"\">{{ 'Button.Home' | transloco }}</a>\n </li>\n <li *ngIf=\"!loggedIn\" class=\"nav-item login-button\">\n <a class=\"\"\n (click)=\"navigateToLogin()\"> log in</a>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.navbar-blue{background-color:var(--first);box-shadow:2px 2px 15px 2px #0000001f;transition:width 2s,height 2s,transform 2s background-color .5s ease;z-index:9999}.fixed-top-nav{display:block!important;height:60px}.navbar-toggle{display:none}.navbar-toggle .icon-bar{color:#fff}.nav-outer{text-align:right}.nav-outer nav{background:none!important;display:inline-block;float:none;width:auto}.nav-outer li a{color:#fff;font-size:18px;margin:0 0 0 30px;text-transform:capitalize}.nav-outer li a:hover{color:#fff;text-decoration:none}.nav-outer li a:focus{color:#fff}.navbar-nav li{display:inline-block}@media screen and (max-width: 1199px){.nav-outer li a{margin:0 10px}}@media screen and (max-width: 991px){.icon-bar{background-color:#fff;border-radius:1px;display:block;height:2px;margin-top:4px;width:22px}.navbar-toggle{background-color:#ffb92b!important;background-image:none;border:1px solid rgb(255,255,255);border-radius:4px;display:block!important;float:right;margin-top:4px;padding:9px 10px;position:relative}.collapse{display:none!important}.collapse.show{display:block!important}.nav-outer nav{background:#ffb92b!important;display:inline-block;float:left;padding:20px;width:100%}.nav-outer li a{margin:0;padding:0}.navbar-expand-sm,.navbar-nav{-webkit-box-direction:normal;-webkit-box-orient:horizontal;flex-direction:column}li.nav-item{float:left;margin-bottom:12px;text-align:left;width:100%}.navbar-expand-sm{-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-box-pack:start;flex-flow:column nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{left:auto;right:0}.nav-outer li a:hover{color:#0a56d3}.contact-button a,.login-button a,.nav-item{background:none;color:#fff!important;font-weight:600}.contact-button a:hover,.login-button a:hover,.nav-item a:hover{color:#0a56d3!important}}@media screen and (max-width: 767px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 575px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 375px){.navbar .container{padding:0!important}}@media (min-width: 641px) and (max-width: 991px){.navbar-toggle{margin-top:6px}}.header-logo{height:auto!important;width:auto;max-height:40px;max-width:100%;object-fit:contain}.login-button a{background-color:var(--second);color:#fff}.login-button a:hover{background-color:#fff;color:var(--second)!important}.contact-button a{background-color:var(--third);color:#fff}.contact-button a:hover{background-color:#fff;color:var(--third)!important}.fixed-top{position:fixed!important}\n"] }]
535
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AuthService }], propDecorators: { landing: [{
536
- type: Input
537
- }] } });
538
-
539
- class InputContainerComponent {
540
- constructor(controlContainer) {
541
- this.controlContainer = controlContainer;
542
- this.required = false;
543
- this.errorMsg = 'An error occurred';
544
- this.isReadOnly = false;
545
- this.showTriangle = false;
546
- this.isLeftTooltip = false;
547
- }
548
- ngOnInit() {
549
- if (this.controlContainer) {
550
- if (this.name) {
551
- this.control = this.controlContainer.control.get(this.name);
552
- if (this.control?.validator) {
553
- const validator = this.control.validator({});
554
- if (validator?.['required']) {
555
- this.required = true;
556
- }
557
- }
558
- }
559
- else {
560
- window.console.warn('Missing FormControlName directive from host element of the component');
561
- }
562
- }
563
- else {
564
- window.console.warn("Can't find parent FormGroup directive");
565
- }
566
- }
567
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InputContainerComponent, deps: [{ token: i2$3.ControlContainer, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
568
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: InputContainerComponent, selector: "pw-input-container", inputs: { name: "name", label: "label", labelClass: "labelClass", tooltipPosition: "tooltipPosition", required: "required", errorMsg: "errorMsg", isReadOnly: "isReadOnly", showTooltip: "showTooltip", tooltipText: "tooltipText", showTriangle: "showTriangle", afterLabel: "afterLabel", showAfterLabel: "showAfterLabel", showTriangleText: "showTriangleText", isLeftTooltip: "isLeftTooltip" }, providers: [
569
- {
570
- provide: NG_VALUE_ACCESSOR,
571
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
572
- useExisting: InputContainerComponent,
573
- multi: true
574
- }
575
- ], ngImport: i0, template: "<label class=\"mb-2\" for=\"Label\">\n <span [class]=\"labelClass\"\n [ngClass]=\"{ mandatory: required && !control?.disabled }\">\n {{ label }}\n </span>\n <span [ngClass]=\"{ 'left-info-circle': isLeftTooltip }\" class=\"info-circle tooltip-wrap ms-1\" *ngIf=\"showTooltip && tooltipText\">\n <span class=\"tooltiptext gradient-custom-branding\" [ngClass]=\"{ 'left-field-tooltip': isLeftTooltip }\">\n {{ tooltipText }}\n </span>\n </span>\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTriangle\"\n [pTooltip]=\"'Last month this value was set to ' + showTriangleText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n <!-- after label -->\n <span *ngIf=\"afterLabel && showAfterLabel\"\n [innerHTML]=\"afterLabel\"></span>\n <!-- after label end -->\n</label>\n\n<div class=\"mb-3\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"control?.errors\">\n <pw-field-error-display [displayError]=\"control?.invalid && control?.touched\"\n [errorMsg]=\"errorMsg | transloco\">\n </pw-field-error-display>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.mandatory:after{color:#ff586b;content:\"*\";padding-left:2px;font-size:15px}\n"], dependencies: [{ kind: "directive", type: i2$4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FieldErrorDisplayComponent, selector: "pw-field-error-display", inputs: ["errorMsg", "displayError"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
576
- }
577
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InputContainerComponent, decorators: [{
578
- type: Component,
579
- args: [{ selector: 'pw-input-container', providers: [
580
- {
581
- provide: NG_VALUE_ACCESSOR,
582
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
583
- useExisting: InputContainerComponent,
584
- multi: true
585
- }
586
- ], template: "<label class=\"mb-2\" for=\"Label\">\n <span [class]=\"labelClass\"\n [ngClass]=\"{ mandatory: required && !control?.disabled }\">\n {{ label }}\n </span>\n <span [ngClass]=\"{ 'left-info-circle': isLeftTooltip }\" class=\"info-circle tooltip-wrap ms-1\" *ngIf=\"showTooltip && tooltipText\">\n <span class=\"tooltiptext gradient-custom-branding\" [ngClass]=\"{ 'left-field-tooltip': isLeftTooltip }\">\n {{ tooltipText }}\n </span>\n </span>\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTriangle\"\n [pTooltip]=\"'Last month this value was set to ' + showTriangleText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n <!-- after label -->\n <span *ngIf=\"afterLabel && showAfterLabel\"\n [innerHTML]=\"afterLabel\"></span>\n <!-- after label end -->\n</label>\n\n<div class=\"mb-3\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"control?.errors\">\n <pw-field-error-display [displayError]=\"control?.invalid && control?.touched\"\n [errorMsg]=\"errorMsg | transloco\">\n </pw-field-error-display>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.mandatory:after{color:#ff586b;content:\"*\";padding-left:2px;font-size:15px}\n"] }]
587
- }], ctorParameters: () => [{ type: i2$3.ControlContainer, decorators: [{
588
- type: Optional
589
- }, {
590
- type: Host
591
- }, {
592
- type: SkipSelf
593
- }] }], propDecorators: { name: [{
594
- type: Input
595
- }], label: [{
596
- type: Input
597
- }], labelClass: [{
598
- type: Input
599
- }], tooltipPosition: [{
600
- type: Input
601
- }], required: [{
602
- type: Input
603
- }], errorMsg: [{
604
- type: Input
605
- }], isReadOnly: [{
606
- type: Input
607
- }], showTooltip: [{
608
- type: Input
609
- }], tooltipText: [{
610
- type: Input
611
- }], showTriangle: [{
612
- type: Input
613
- }], afterLabel: [{
614
- type: Input
615
- }], showAfterLabel: [{
616
- type: Input
617
- }], showTriangleText: [{
618
- type: Input
619
- }], isLeftTooltip: [{
280
+
281
+ /**
282
+ * Standalone module for FieldErrorDisplayComponent.
283
+ * Import this lightweight module instead of SharedComponentsModule
284
+ * when you only need field error display functionality.
285
+ */
286
+ class FieldErrorDisplayModule {
287
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FieldErrorDisplayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
288
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: FieldErrorDisplayModule, declarations: [FieldErrorDisplayComponent], imports: [CommonModule], exports: [FieldErrorDisplayComponent] }); }
289
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FieldErrorDisplayModule, imports: [CommonModule] }); }
290
+ }
291
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FieldErrorDisplayModule, decorators: [{
292
+ type: NgModule,
293
+ args: [{
294
+ declarations: [FieldErrorDisplayComponent],
295
+ imports: [CommonModule],
296
+ exports: [FieldErrorDisplayComponent]
297
+ }]
298
+ }] });
299
+
300
+ class HeaderComponent extends AppBaseComponent {
301
+ constructor(injector, authService) {
302
+ super(injector);
303
+ this.authService = authService;
304
+ this.isMenuCollapsed = true;
305
+ this.landing = false;
306
+ this.logo = this.appConfig?.company?.logos?.main_contrast?.url;
307
+ this.authService
308
+ .getToken$()
309
+ .pipe()
310
+ .subscribe(res => {
311
+ this.loggedIn = !!res;
312
+ });
313
+ }
314
+ navigateToLogin() {
315
+ window.location.href = '/login';
316
+ }
317
+ toggleMenu() {
318
+ this.isMenuCollapsed = !this.isMenuCollapsed;
319
+ }
320
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HeaderComponent, deps: [{ token: i0.Injector }, { token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
321
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: HeaderComponent, selector: "pw-header", inputs: { landing: "landing" }, usesInheritance: true, ngImport: i0, template: "<div class=\"navbar navbar-expand-lg fixed-top-nav fixed-top\"\n [ngClass]=\"{ 'navbar-blue': !landing }\">\n <div class=\"container d-block\">\n <div class=\"row m-0\">\n <div class=\"col-lg-2 float-start\">\n <a href=\"/\">\n <img [src]=\"logo\"\n class=\"header-logo\"\n alt=\"site-logo\" />\n </a>\n <button type=\"button\"\n class=\"navbar-toggle\"\n (click)=\"toggleMenu()\"\n [attr.aria-expanded]=\"!isMenuCollapsed\">\n <span class=\"icon-bar\"></span> <span class=\"icon-bar\"></span>\n <span class=\"icon-bar\"></span>\n </button>\n </div>\n <div class=\"col-lg-10 nav-outer mt-2\">\n <div class=\"navbar-collapse float-end\"\n [class.collapse]=\"isMenuCollapsed\"\n [class.show]=\"!isMenuCollapsed\"\n id=\"myNavbar\">\n <nav class=\"navbar navbar-expand-sm bg-light\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item contact-button\">\n <a href=\"/\"\n class=\"\">{{ 'Button.Home' | transloco }}</a>\n </li>\n <li *ngIf=\"!loggedIn\" class=\"nav-item login-button\">\n <a class=\"\"\n (click)=\"navigateToLogin()\"> log in</a>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.navbar-blue{background-color:var(--first);box-shadow:2px 2px 15px 2px #0000001f;transition:width 2s,height 2s,transform 2s background-color .5s ease;z-index:9999}.fixed-top-nav{display:block!important;height:60px}.navbar-toggle{display:none}.navbar-toggle .icon-bar{color:#fff}.nav-outer{text-align:right}.nav-outer nav{background:none!important;display:inline-block;float:none;width:auto}.nav-outer li a{color:#fff;font-size:18px;margin:0 0 0 30px;text-transform:capitalize}.nav-outer li a:hover{color:#fff;text-decoration:none}.nav-outer li a:focus{color:#fff}.navbar-nav li{display:inline-block}@media screen and (max-width: 1199px){.nav-outer li a{margin:0 10px}}@media screen and (max-width: 991px){.icon-bar{background-color:#fff;border-radius:1px;display:block;height:2px;margin-top:4px;width:22px}.navbar-toggle{background-color:#ffb92b!important;background-image:none;border:1px solid rgb(255,255,255);border-radius:4px;display:block!important;float:right;margin-top:4px;padding:9px 10px;position:relative}.collapse{display:none!important}.collapse.show{display:block!important}.nav-outer nav{background:#ffb92b!important;display:inline-block;float:left;padding:20px;width:100%}.nav-outer li a{margin:0;padding:0}.navbar-expand-sm,.navbar-nav{-webkit-box-direction:normal;-webkit-box-orient:horizontal;flex-direction:column}li.nav-item{float:left;margin-bottom:12px;text-align:left;width:100%}.navbar-expand-sm{-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-box-pack:start;flex-flow:column nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{left:auto;right:0}.nav-outer li a:hover{color:#0a56d3}.contact-button a,.login-button a,.nav-item{background:none;color:#fff!important;font-weight:600}.contact-button a:hover,.login-button a:hover,.nav-item a:hover{color:#0a56d3!important}}@media screen and (max-width: 767px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 575px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 375px){.navbar .container{padding:0!important}}@media (min-width: 641px) and (max-width: 991px){.navbar-toggle{margin-top:6px}}.header-logo{height:auto!important;width:auto;max-height:40px;max-width:100%;object-fit:contain}.login-button a{background-color:var(--second);color:#fff}.login-button a:hover{background-color:#fff;color:var(--second)!important}.contact-button a{background-color:var(--third);color:#fff}.contact-button a:hover{background-color:#fff;color:var(--third)!important}.fixed-top{position:fixed!important}\n"], dependencies: [{ kind: "directive", type: i3.LazyImgDirective, selector: "img" }, { kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
322
+ }
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HeaderComponent, decorators: [{
324
+ type: Component,
325
+ args: [{ selector: 'pw-header', template: "<div class=\"navbar navbar-expand-lg fixed-top-nav fixed-top\"\n [ngClass]=\"{ 'navbar-blue': !landing }\">\n <div class=\"container d-block\">\n <div class=\"row m-0\">\n <div class=\"col-lg-2 float-start\">\n <a href=\"/\">\n <img [src]=\"logo\"\n class=\"header-logo\"\n alt=\"site-logo\" />\n </a>\n <button type=\"button\"\n class=\"navbar-toggle\"\n (click)=\"toggleMenu()\"\n [attr.aria-expanded]=\"!isMenuCollapsed\">\n <span class=\"icon-bar\"></span> <span class=\"icon-bar\"></span>\n <span class=\"icon-bar\"></span>\n </button>\n </div>\n <div class=\"col-lg-10 nav-outer mt-2\">\n <div class=\"navbar-collapse float-end\"\n [class.collapse]=\"isMenuCollapsed\"\n [class.show]=\"!isMenuCollapsed\"\n id=\"myNavbar\">\n <nav class=\"navbar navbar-expand-sm bg-light\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item contact-button\">\n <a href=\"/\"\n class=\"\">{{ 'Button.Home' | transloco }}</a>\n </li>\n <li *ngIf=\"!loggedIn\" class=\"nav-item login-button\">\n <a class=\"\"\n (click)=\"navigateToLogin()\"> log in</a>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.navbar-blue{background-color:var(--first);box-shadow:2px 2px 15px 2px #0000001f;transition:width 2s,height 2s,transform 2s background-color .5s ease;z-index:9999}.fixed-top-nav{display:block!important;height:60px}.navbar-toggle{display:none}.navbar-toggle .icon-bar{color:#fff}.nav-outer{text-align:right}.nav-outer nav{background:none!important;display:inline-block;float:none;width:auto}.nav-outer li a{color:#fff;font-size:18px;margin:0 0 0 30px;text-transform:capitalize}.nav-outer li a:hover{color:#fff;text-decoration:none}.nav-outer li a:focus{color:#fff}.navbar-nav li{display:inline-block}@media screen and (max-width: 1199px){.nav-outer li a{margin:0 10px}}@media screen and (max-width: 991px){.icon-bar{background-color:#fff;border-radius:1px;display:block;height:2px;margin-top:4px;width:22px}.navbar-toggle{background-color:#ffb92b!important;background-image:none;border:1px solid rgb(255,255,255);border-radius:4px;display:block!important;float:right;margin-top:4px;padding:9px 10px;position:relative}.collapse{display:none!important}.collapse.show{display:block!important}.nav-outer nav{background:#ffb92b!important;display:inline-block;float:left;padding:20px;width:100%}.nav-outer li a{margin:0;padding:0}.navbar-expand-sm,.navbar-nav{-webkit-box-direction:normal;-webkit-box-orient:horizontal;flex-direction:column}li.nav-item{float:left;margin-bottom:12px;text-align:left;width:100%}.navbar-expand-sm{-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-box-pack:start;flex-flow:column nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{left:auto;right:0}.nav-outer li a:hover{color:#0a56d3}.contact-button a,.login-button a,.nav-item{background:none;color:#fff!important;font-weight:600}.contact-button a:hover,.login-button a:hover,.nav-item a:hover{color:#0a56d3!important}}@media screen and (max-width: 767px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 575px){.fixed-top{padding:10px;top:0!important}}@media screen and (max-width: 375px){.navbar .container{padding:0!important}}@media (min-width: 641px) and (max-width: 991px){.navbar-toggle{margin-top:6px}}.header-logo{height:auto!important;width:auto;max-height:40px;max-width:100%;object-fit:contain}.login-button a{background-color:var(--second);color:#fff}.login-button a:hover{background-color:#fff;color:var(--second)!important}.contact-button a{background-color:var(--third);color:#fff}.contact-button a:hover{background-color:#fff;color:var(--third)!important}.fixed-top{position:fixed!important}\n"] }]
326
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AuthService }], propDecorators: { landing: [{
620
327
  type: Input
621
328
  }] } });
622
329
 
@@ -635,9 +342,11 @@ class NoDataComponent {
635
342
  <div class="no-data" [ngClass]="{ 'has-content': !this.isContentEmpty }">
636
343
  <img
637
344
  *ngIf="withImage"
638
- src="/assets/img/icons/nothing_found.png"
345
+ src="/assets/img/icons/nothing_found.webp"
639
346
  class="nothing-found-image"
640
347
  alt="No data found"
348
+ loading="lazy"
349
+ fetchpriority="low"
641
350
  />
642
351
  <span
643
352
  class="h5 message"
@@ -651,7 +360,7 @@ class NoDataComponent {
651
360
  <span *ngIf="description" class="pb-4">{{ description }}</span>
652
361
  <ng-content></ng-content>
653
362
  </div>
654
- `, isInline: true, styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;border:1px dashed rgb(204,204,204);border-radius:4px;margin:20px 0;padding:10px;background:#fafafa!important;color:oklch(from var(--text) 40% c h)!important}.no-data .message{font-weight:600;font-size:15px;color:oklch(from var(--text) 40% c h)!important}.no-data.has-content{padding-top:10px;padding-bottom:20px}.no-data .nothing-found-image{margin-top:15px;height:auto;max-width:150px}\n"], dependencies: [{ kind: "directive", type: i1$1.LazyImgDirective, selector: "img" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
363
+ `, isInline: true, styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;border:1px dashed rgb(204,204,204);border-radius:4px;margin:20px 0;padding:10px;background:#fafafa!important;color:oklch(from var(--text) 40% c h)!important}.no-data .message{font-weight:600;font-size:15px;color:oklch(from var(--text) 40% c h)!important}.no-data.has-content{padding-top:10px;padding-bottom:20px}.no-data .nothing-found-image{margin-top:15px;height:auto;max-width:150px}\n"], dependencies: [{ kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.LazyImgDirective, selector: "img" }] }); }
655
364
  }
656
365
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NoDataComponent, decorators: [{
657
366
  type: Component,
@@ -659,9 +368,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
659
368
  <div class="no-data" [ngClass]="{ 'has-content': !this.isContentEmpty }">
660
369
  <img
661
370
  *ngIf="withImage"
662
- src="/assets/img/icons/nothing_found.png"
371
+ src="/assets/img/icons/nothing_found.webp"
663
372
  class="nothing-found-image"
664
373
  alt="No data found"
374
+ loading="lazy"
375
+ fetchpriority="low"
665
376
  />
666
377
  <span
667
378
  class="h5 message"
@@ -811,13 +522,13 @@ class EntityGroupComponent extends AppBaseComponent {
811
522
  ngOnDestroy() {
812
523
  super.ngOnDestroy();
813
524
  }
814
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: EntityGroupComponent, deps: [{ token: i1.GroupService }, { token: i1.SubscriptionService }, { token: i2$1.NgbModal }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
815
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: EntityGroupComponent, selector: "pw-entity-group", viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Team View</h2>\n\n <p>\n In this section, based on your permissions, you can add/remove members from your\n teams.\n <br />\n Then, you'll be able to see powerful insight on the activities performed by your\n team's members.\n </p>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6 col-xs-12 d-flex align-items-sm-center align-items-top text-start pe-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"ms-sm-2 d-inline mt-0 card-title mb-3 mb-sm-0\">\n Team view: {{ selectedGroup?.name }}\n </h3>\n </div>\n <div class=\"col-md-6 col-xs-12 text-end justify-content-end\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"open()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Members\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-2\"\n (click)=\"navigateToCommunications()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> See Communications\n </button>\n </div>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"subscribedMembers?.length === 0\">\n <p-table #dt\n [value]=\"subscribedMembers\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.FirstName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.LastName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-member>\n <tr class=\"table-row\">\n <td data-head=\"First Name\">\n <a [routerLink]=\"['/members', member.slug]\">{{ member.first_name || null }}\n </a>\n </td>\n <td data-head=\"Last Name\">{{ member.last_name || null }}</td>\n <td data-head=\"Email\">{{ member.email }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Message\"\n class=\"me-2 me-sm-3\"\n *ngIf=\"member.id !== userId\"\n [routerLink]=\"['/message']\"\n [fragment]=\"member.slug\">\n <i\n class=\"fa fa-comments cta1-icon\"\n *rbacAllow=\"chatPermission\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Remove\"\n class=\"me-2 me-sm-3\"\n (click)=\"onDelete(member.id)\"\n (keydown.enter)=\"onDelete(member.id)\"\n (keydown.space)=\"onDelete(member.id)\"\n *ngIf=\"hasAccess\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n <pw-no-data [withImage]=\"true\" message=\"There are no members in this team yet.\"\n *ngIf=\"subscribedMembers?.length === 0 && isLoaded\">\n </pw-no-data>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Add Members</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <p>Please start typing to select the members to add to this team.</p>\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete [suggestions]=\"filteredMembers\"\n [(ngModel)]=\"selectedMembers\"\n dataKey=\"id\"\n field=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Member\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"closeModal(modal)\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"onSave()\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n</ng-template>\n", styles: ["a.previous i{line-height:23px}\n"], dependencies: [{ kind: "directive", type: i2$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$1.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i2$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: i9.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
525
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: EntityGroupComponent, deps: [{ token: i1.GroupService }, { token: i1.SubscriptionService }, { token: i3$1.NgbModal }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
526
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: EntityGroupComponent, selector: "pw-entity-group", viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Team View</h2>\n\n <p>\n In this section, based on your permissions, you can add/remove members from your\n teams.\n <br />\n Then, you'll be able to see powerful insight on the activities performed by your\n team's members.\n </p>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6 col-xs-12 d-flex align-items-sm-center align-items-top text-start pe-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"ms-sm-2 d-inline mt-0 card-title mb-3 mb-sm-0\">\n Team view: {{ selectedGroup?.name }}\n </h3>\n </div>\n <div class=\"col-md-6 col-xs-12 text-end justify-content-end\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"open()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Members\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-2\"\n (click)=\"navigateToCommunications()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> See Communications\n </button>\n </div>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"subscribedMembers?.length === 0\">\n <p-table #dt\n [value]=\"subscribedMembers\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.FirstName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.LastName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-member>\n <tr class=\"table-row\">\n <td data-head=\"First Name\">\n <a [routerLink]=\"['/members', member.slug]\">{{ member.first_name || null }}\n </a>\n </td>\n <td data-head=\"Last Name\">{{ member.last_name || null }}</td>\n <td data-head=\"Email\">{{ member.email }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Message\"\n class=\"me-2 me-sm-3\"\n *ngIf=\"member.id !== userId\"\n [routerLink]=\"['/message']\"\n [fragment]=\"member.slug\">\n <i\n class=\"fa fa-comments cta1-icon\"\n *rbacAllow=\"chatPermission\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Remove\"\n class=\"me-2 me-sm-3\"\n (click)=\"onDelete(member.id)\"\n (keydown.enter)=\"onDelete(member.id)\"\n (keydown.space)=\"onDelete(member.id)\"\n *ngIf=\"hasAccess\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n <pw-no-data [withImage]=\"true\" message=\"There are no members in this team yet.\"\n *ngIf=\"subscribedMembers?.length === 0 && isLoaded\">\n </pw-no-data>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Add Members</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <p>Please start typing to select the members to add to this team.</p>\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete [suggestions]=\"filteredMembers\"\n [(ngModel)]=\"selectedMembers\"\n dataKey=\"id\"\n field=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Member\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"closeModal(modal)\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"onSave()\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n</ng-template>\n", styles: ["a.previous i{line-height:23px}\n"], dependencies: [{ 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: "directive", type: i3.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i6$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i7.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4$1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i9.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
816
527
  }
817
528
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: EntityGroupComponent, decorators: [{
818
529
  type: Component,
819
530
  args: [{ selector: 'pw-entity-group', template: "<div>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Team View</h2>\n\n <p>\n In this section, based on your permissions, you can add/remove members from your\n teams.\n <br />\n Then, you'll be able to see powerful insight on the activities performed by your\n team's members.\n </p>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6 col-xs-12 d-flex align-items-sm-center align-items-top text-start pe-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"ms-sm-2 d-inline mt-0 card-title mb-3 mb-sm-0\">\n Team view: {{ selectedGroup?.name }}\n </h3>\n </div>\n <div class=\"col-md-6 col-xs-12 text-end justify-content-end\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"open()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Members\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-2\"\n (click)=\"navigateToCommunications()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> See Communications\n </button>\n </div>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"subscribedMembers?.length === 0\">\n <p-table #dt\n [value]=\"subscribedMembers\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.FirstName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.LastName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-member>\n <tr class=\"table-row\">\n <td data-head=\"First Name\">\n <a [routerLink]=\"['/members', member.slug]\">{{ member.first_name || null }}\n </a>\n </td>\n <td data-head=\"Last Name\">{{ member.last_name || null }}</td>\n <td data-head=\"Email\">{{ member.email }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Message\"\n class=\"me-2 me-sm-3\"\n *ngIf=\"member.id !== userId\"\n [routerLink]=\"['/message']\"\n [fragment]=\"member.slug\">\n <i\n class=\"fa fa-comments cta1-icon\"\n *rbacAllow=\"chatPermission\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Remove\"\n class=\"me-2 me-sm-3\"\n (click)=\"onDelete(member.id)\"\n (keydown.enter)=\"onDelete(member.id)\"\n (keydown.space)=\"onDelete(member.id)\"\n *ngIf=\"hasAccess\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n <pw-no-data [withImage]=\"true\" message=\"There are no members in this team yet.\"\n *ngIf=\"subscribedMembers?.length === 0 && isLoaded\">\n </pw-no-data>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Add Members</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <p>Please start typing to select the members to add to this team.</p>\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete [suggestions]=\"filteredMembers\"\n [(ngModel)]=\"selectedMembers\"\n dataKey=\"id\"\n field=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Member\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"closeModal(modal)\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"onSave()\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n</ng-template>\n", styles: ["a.previous i{line-height:23px}\n"] }]
820
- }], ctorParameters: () => [{ type: i1.GroupService }, { type: i1.SubscriptionService }, { type: i2$1.NgbModal }, { type: i0.Injector }], propDecorators: { content: [{
531
+ }], ctorParameters: () => [{ type: i1.GroupService }, { type: i1.SubscriptionService }, { type: i3$1.NgbModal }, { type: i0.Injector }], propDecorators: { content: [{
821
532
  type: ViewChild,
822
533
  args: ['content', { static: true }]
823
534
  }] } });
@@ -969,8 +680,8 @@ class GroupDefinitionComponent extends AppBaseComponent {
969
680
  ngOnDestroy() {
970
681
  super.ngOnDestroy();
971
682
  }
972
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupDefinitionComponent, deps: [{ token: i1.GroupService }, { token: i2$3.UntypedFormBuilder }, { token: i1.SubscriptionService }, { token: i1.DataService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
973
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: GroupDefinitionComponent, selector: "pw-group-definition", usesInheritance: true, ngImport: i0, template: "<section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams Categories</h2>\n\n <p>\n Here you can define the categories for your enterprise's groups. For example \"Sales\n Department\", \"Development Department\", etc.\n <br />\n Once the category created, you'll be able to add teams to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!viewDefinition\">\n <div class=\"col-6 d-flex align-items-center text-start mb-sm-3 mb-lg-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"previous()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n </div>\n <div class=\"col-6\"\n *ngIf=\"hasAccess\">\n <button class=\"float-end btn btn-sm btn-outline-primary me-2\"\n (click)=\"viewDefinitions()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Team Category\n </button>\n </div>\n </div>\n\n <div *ngIf=\"viewDefinition\">\n <h4 class=\"card-title d-inline mb-5\">\n {{ viewEdit ? 'Update the' : 'Create a new' }} category\n </h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!viewEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroupDefinition()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"name\">{{ 'Label.Name' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"is_private\">{{ 'Enterprise.Teams.IsPrivate' | transloco }}</label>\n <div class=\"display-block\">\n <ui-switch size=\"small\"\n checkedLabel=\"True\"\n uncheckedLabel=\"false\"\n formControlName=\"is_private\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"categoryBusyButton\"\n class=\"btn btn-primary\">Add Category</button>\n </div>\n </div>\n </form>\n </div>\n\n <div class=\"mt-4\"\n *ngIf=\"viewEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"name\">{{ 'Label.Name' | transloco }}: </label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}:</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"is_private\">{{ 'Enterprise.Teams.IsPrivate' | transloco }}</label>\n <div class=\"display-block\">\n <ui-switch size=\"small\"\n checkedLabel=\"True\"\n uncheckedLabel=\"false\"\n formControlName=\"is_private\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"categoryBusyButton\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <ng-container *ngIf=\"groupDefinition?.length !== 0\">\n <div class=\"row mb-last-3 group-definitions-wrapper\"\n *ngIf=\"!viewDefinition\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of groupDefinition\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"btn btn-sm btn-outline-danger me-2\"\n *ngIf=\"hasAccess\"\n (click)=\"onDelete(group.id)\">{{ 'Button.Delete' | transloco }}</a>\n <a class=\"btn btn-sm btn-outline-primary me-2\"\n *ngIf=\"hasAccess\"\n (click)=\"onGroupDefinitionEdit(group.id)\">{{ 'Button.Edit' | transloco }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"groupDefinition?.length === 0 && hasAccess && !viewDefinition && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoLabelsMessage' | transloco\"> </pw-no-data>\n </div>\n <div *ngIf=\"groupDefinition?.length === 0 && !hasAccess && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoLabelsUserMessage' | transloco\"> </pw-no-data>\n </div>\n</section>\n", styles: [".mb-last-3{margin-bottom:3rem}\n"], dependencies: [{ kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }] }); }
683
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupDefinitionComponent, deps: [{ token: i1.GroupService }, { token: i2.UntypedFormBuilder }, { token: i1.SubscriptionService }, { token: i1.DataService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
684
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: GroupDefinitionComponent, selector: "pw-group-definition", usesInheritance: true, ngImport: i0, template: "<section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams Categories</h2>\n\n <p>\n Here you can define the categories for your enterprise's groups. For example \"Sales\n Department\", \"Development Department\", etc.\n <br />\n Once the category created, you'll be able to add teams to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!viewDefinition\">\n <div class=\"col-6 d-flex align-items-center text-start mb-sm-3 mb-lg-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"previous()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n </div>\n <div class=\"col-6\"\n *ngIf=\"hasAccess\">\n <button class=\"float-end btn btn-sm btn-outline-primary me-2\"\n (click)=\"viewDefinitions()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Team Category\n </button>\n </div>\n </div>\n\n <div *ngIf=\"viewDefinition\">\n <h4 class=\"card-title d-inline mb-5\">\n {{ viewEdit ? 'Update the' : 'Create a new' }} category\n </h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!viewEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroupDefinition()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"name\">{{ 'Label.Name' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"is_private\">{{ 'Enterprise.Teams.IsPrivate' | transloco }}</label>\n <div class=\"display-block\">\n <ui-switch size=\"small\"\n checkedLabel=\"True\"\n uncheckedLabel=\"false\"\n formControlName=\"is_private\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"categoryBusyButton\"\n class=\"btn btn-primary\">Add Category</button>\n </div>\n </div>\n </form>\n </div>\n\n <div class=\"mt-4\"\n *ngIf=\"viewEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"name\">{{ 'Label.Name' | transloco }}: </label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}:</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"is_private\">{{ 'Enterprise.Teams.IsPrivate' | transloco }}</label>\n <div class=\"display-block\">\n <ui-switch size=\"small\"\n checkedLabel=\"True\"\n uncheckedLabel=\"false\"\n formControlName=\"is_private\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"categoryBusyButton\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <ng-container *ngIf=\"groupDefinition?.length !== 0\">\n <div class=\"row mb-last-3 group-definitions-wrapper\"\n *ngIf=\"!viewDefinition\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of groupDefinition\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"btn btn-sm btn-outline-danger me-2\"\n *ngIf=\"hasAccess\"\n (click)=\"onDelete(group.id)\">{{ 'Button.Delete' | transloco }}</a>\n <a class=\"btn btn-sm btn-outline-primary me-2\"\n *ngIf=\"hasAccess\"\n (click)=\"onGroupDefinitionEdit(group.id)\">{{ 'Button.Edit' | transloco }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"groupDefinition?.length === 0 && hasAccess && !viewDefinition && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoLabelsMessage' | transloco\"> </pw-no-data>\n </div>\n <div *ngIf=\"groupDefinition?.length === 0 && !hasAccess && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoLabelsUserMessage' | transloco\"> </pw-no-data>\n </div>\n</section>\n", styles: [".mb-last-3{margin-bottom:3rem}\n"], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "component", type: i4$1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i5$1.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "directive", type: i3$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i3$2.SlicePipe, name: "slice" }] }); }
974
685
  }
975
686
  __decorate([
976
687
  ValidateForm('form'),
@@ -981,7 +692,7 @@ __decorate([
981
692
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupDefinitionComponent, decorators: [{
982
693
  type: Component,
983
694
  args: [{ selector: 'pw-group-definition', template: "<section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams Categories</h2>\n\n <p>\n Here you can define the categories for your enterprise's groups. For example \"Sales\n Department\", \"Development Department\", etc.\n <br />\n Once the category created, you'll be able to add teams to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!viewDefinition\">\n <div class=\"col-6 d-flex align-items-center text-start mb-sm-3 mb-lg-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"previous()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n </div>\n <div class=\"col-6\"\n *ngIf=\"hasAccess\">\n <button class=\"float-end btn btn-sm btn-outline-primary me-2\"\n (click)=\"viewDefinitions()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Team Category\n </button>\n </div>\n </div>\n\n <div *ngIf=\"viewDefinition\">\n <h4 class=\"card-title d-inline mb-5\">\n {{ viewEdit ? 'Update the' : 'Create a new' }} category\n </h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!viewEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroupDefinition()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"name\">{{ 'Label.Name' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"is_private\">{{ 'Enterprise.Teams.IsPrivate' | transloco }}</label>\n <div class=\"display-block\">\n <ui-switch size=\"small\"\n checkedLabel=\"True\"\n uncheckedLabel=\"false\"\n formControlName=\"is_private\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"categoryBusyButton\"\n class=\"btn btn-primary\">Add Category</button>\n </div>\n </div>\n </form>\n </div>\n\n <div class=\"mt-4\"\n *ngIf=\"viewEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"name\">{{ 'Label.Name' | transloco }}: </label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}:</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"is_private\">{{ 'Enterprise.Teams.IsPrivate' | transloco }}</label>\n <div class=\"display-block\">\n <ui-switch size=\"small\"\n checkedLabel=\"True\"\n uncheckedLabel=\"false\"\n formControlName=\"is_private\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"categoryBusyButton\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <ng-container *ngIf=\"groupDefinition?.length !== 0\">\n <div class=\"row mb-last-3 group-definitions-wrapper\"\n *ngIf=\"!viewDefinition\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of groupDefinition\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"btn btn-sm btn-outline-danger me-2\"\n *ngIf=\"hasAccess\"\n (click)=\"onDelete(group.id)\">{{ 'Button.Delete' | transloco }}</a>\n <a class=\"btn btn-sm btn-outline-primary me-2\"\n *ngIf=\"hasAccess\"\n (click)=\"onGroupDefinitionEdit(group.id)\">{{ 'Button.Edit' | transloco }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"groupDefinition?.length === 0 && hasAccess && !viewDefinition && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoLabelsMessage' | transloco\"> </pw-no-data>\n </div>\n <div *ngIf=\"groupDefinition?.length === 0 && !hasAccess && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoLabelsUserMessage' | transloco\"> </pw-no-data>\n </div>\n</section>\n", styles: [".mb-last-3{margin-bottom:3rem}\n"] }]
984
- }], ctorParameters: () => [{ type: i1.GroupService }, { type: i2$3.UntypedFormBuilder }, { type: i1.SubscriptionService }, { type: i1.DataService }, { type: i0.Injector }], propDecorators: { saveGroupDefinition: [] } });
695
+ }], ctorParameters: () => [{ type: i1.GroupService }, { type: i2.UntypedFormBuilder }, { type: i1.SubscriptionService }, { type: i1.DataService }, { type: i0.Injector }], propDecorators: { saveGroupDefinition: [] } });
985
696
 
986
697
  class GroupsComponent extends AppBaseComponent {
987
698
  constructor(fb, groupService, subscriptionService, dataService, injector) {
@@ -1188,8 +899,8 @@ class GroupsComponent extends AppBaseComponent {
1188
899
  ngOnDestroy() {
1189
900
  super.ngOnDestroy();
1190
901
  }
1191
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupsComponent, deps: [{ token: i2$3.UntypedFormBuilder }, { token: i1.GroupService }, { token: i1.SubscriptionService }, { token: i1.DataService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
1192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: GroupsComponent, selector: "pw-groups", usesInheritance: true, ngImport: i0, template: "<div>\n <section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams</h2>\n\n <p>\n Here you can define the teams for your Enterprise members. For example\n \"Corporate Sales Team\", \"Frontend Dev Team\" etc.\n <br />\n Once the teams created, you'll be able to add members to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 d-flex justify-content-end align-items-center text-end mb-3\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"groupOperation()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Team\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-1\"\n [routerLink]=\"['/' + subscription?.slug + '/enterprise', 'groups', 'labels']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Manage Team Categories\n </button>\n </div>\n </div>\n\n <!-- Add Group Template -->\n <div *ngIf=\"isGroupOperations\"\n class=\"mb-4\">\n <h4 class=\"card-title d-inline\">{{ viewEdit ? 'Update the' : 'Create a new' }} team</h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroup()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <p-dropdown\n [options]=\"groupDefinition\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{'is-invalid': submitted && form.controls['group_definition_id'].errors}\"\n [placeholder]=\"'Select Team Category'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </div>\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n (click)=\"isGroupOperations = !isGroupOperations\"\n class=\"btn btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">Add</button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Edit Group Template -->\n <div class=\"mt-4\"\n *ngIf=\"isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.TeamDescription' | transloco }}</label>\n <input type=\"text\"\n value=\"{{ description }}\"\n class=\"form-control\"\n formControlName=\"description\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <p-dropdown\n [options]=\"groupDefinition\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{'is-invalid': submitted && form.controls['group_definition_id'].errors}\"\n [placeholder]=\"'Select Team Category'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"cancelUpdate()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-4 mt-2 filter\">\n <p-dropdown\n [options]=\"domainGroupDefinition\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [ngModel]=\"'0'\"\n (onChange)=\"filterDomainsList($event.value)\">\n </p-dropdown>\n\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row group_list my-4\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of allGroups; trackBy: trackByGroup\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n <span><a class=\"badge bg-primary\">{{\n group?.group_definition_name\n }}</a></span>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"me-2 my-1\"\n *ngIf=\"hasAccess\"\n aria-label=\"Delete\"\n (click)=\"onDelete(group.id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Group\"\n *ngIf=\"hasAccess\"\n (click)=\"editGroup(group.id)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Members\"\n [routerLink]=\"[group.id, 'members']\"><i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a class=\"communications me-2 my-1\"\n aria-label=\"Communications\"\n (click)=\"navigateToCommunications(group.id)\"><i class=\"fa fa-comments cta2-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"communications my-1\"\n aria-label=\"Documents\"\n (click)=\"navigateToDocumentations(group.id)\"><i class=\"fab fa-wikipedia-w cta1-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessage' | transloco\"> </pw-no-data>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && !hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessageIfUser' | transloco\"> </pw-no-data>\n</div>\n", styles: ["a.previous i{line-height:13px}.clear-both{clear:both}@media screen and (max-width: 480px){.filter{flex:none;max-width:100%!important}.communications{margin-top:2%}}\n"], dependencies: [{ kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i2$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { 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: "component", type: NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }] }); }
902
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupsComponent, deps: [{ token: i2.UntypedFormBuilder }, { token: i1.GroupService }, { token: i1.SubscriptionService }, { token: i1.DataService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
903
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: GroupsComponent, selector: "pw-groups", usesInheritance: true, ngImport: i0, template: "<div>\n <section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams</h2>\n\n <p>\n Here you can define the teams for your Enterprise members. For example\n \"Corporate Sales Team\", \"Frontend Dev Team\" etc.\n <br />\n Once the teams created, you'll be able to add members to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 d-flex justify-content-end align-items-center text-end mb-3\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"groupOperation()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Team\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-1\"\n [routerLink]=\"['/' + subscription?.slug + '/enterprise', 'groups', 'labels']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Manage Team Categories\n </button>\n </div>\n </div>\n\n <!-- Add Group Template -->\n <div *ngIf=\"isGroupOperations\"\n class=\"mb-4\">\n <h4 class=\"card-title d-inline\">{{ viewEdit ? 'Update the' : 'Create a new' }} team</h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroup()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <p-dropdown\n [options]=\"groupDefinition\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{'is-invalid': submitted && form.controls['group_definition_id'].errors}\"\n [placeholder]=\"'Select Team Category'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </div>\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n (click)=\"isGroupOperations = !isGroupOperations\"\n class=\"btn btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">Add</button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Edit Group Template -->\n <div class=\"mt-4\"\n *ngIf=\"isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.TeamDescription' | transloco }}</label>\n <input type=\"text\"\n value=\"{{ description }}\"\n class=\"form-control\"\n formControlName=\"description\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <p-dropdown\n [options]=\"groupDefinition\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{'is-invalid': submitted && form.controls['group_definition_id'].errors}\"\n [placeholder]=\"'Select Team Category'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"cancelUpdate()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-4 mt-2 filter\">\n <p-dropdown\n [options]=\"domainGroupDefinition\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [ngModel]=\"'0'\"\n (onChange)=\"filterDomainsList($event.value)\">\n </p-dropdown>\n\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row group_list my-4\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of allGroups; trackBy: trackByGroup\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n <span><a class=\"badge bg-primary\">{{\n group?.group_definition_name\n }}</a></span>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"me-2 my-1\"\n *ngIf=\"hasAccess\"\n aria-label=\"Delete\"\n (click)=\"onDelete(group.id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Group\"\n *ngIf=\"hasAccess\"\n (click)=\"editGroup(group.id)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Members\"\n [routerLink]=\"[group.id, 'members']\"><i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a class=\"communications me-2 my-1\"\n aria-label=\"Communications\"\n (click)=\"navigateToCommunications(group.id)\"><i class=\"fa fa-comments cta2-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"communications my-1\"\n aria-label=\"Documents\"\n (click)=\"navigateToDocumentations(group.id)\"><i class=\"fab fa-wikipedia-w cta1-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessage' | transloco\"> </pw-no-data>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && !hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessageIfUser' | transloco\"> </pw-no-data>\n</div>\n", styles: ["a.previous i{line-height:13px}.clear-both{clear:both}@media screen and (max-width: 480px){.filter{flex:none;max-width:100%!important}.communications{margin-top:2%}}\n"], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i5$2.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i4$1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i3$2.SlicePipe, name: "slice" }] }); }
1193
904
  }
1194
905
  __decorate([
1195
906
  ValidateForm('form'),
@@ -1200,7 +911,7 @@ __decorate([
1200
911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupsComponent, decorators: [{
1201
912
  type: Component,
1202
913
  args: [{ selector: 'pw-groups', template: "<div>\n <section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams</h2>\n\n <p>\n Here you can define the teams for your Enterprise members. For example\n \"Corporate Sales Team\", \"Frontend Dev Team\" etc.\n <br />\n Once the teams created, you'll be able to add members to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 d-flex justify-content-end align-items-center text-end mb-3\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"groupOperation()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Team\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-1\"\n [routerLink]=\"['/' + subscription?.slug + '/enterprise', 'groups', 'labels']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Manage Team Categories\n </button>\n </div>\n </div>\n\n <!-- Add Group Template -->\n <div *ngIf=\"isGroupOperations\"\n class=\"mb-4\">\n <h4 class=\"card-title d-inline\">{{ viewEdit ? 'Update the' : 'Create a new' }} team</h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroup()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <p-dropdown\n [options]=\"groupDefinition\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{'is-invalid': submitted && form.controls['group_definition_id'].errors}\"\n [placeholder]=\"'Select Team Category'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </div>\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n (click)=\"isGroupOperations = !isGroupOperations\"\n class=\"btn btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">Add</button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Edit Group Template -->\n <div class=\"mt-4\"\n *ngIf=\"isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.TeamDescription' | transloco }}</label>\n <input type=\"text\"\n value=\"{{ description }}\"\n class=\"form-control\"\n formControlName=\"description\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <p-dropdown\n [options]=\"groupDefinition\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{'is-invalid': submitted && form.controls['group_definition_id'].errors}\"\n [placeholder]=\"'Select Team Category'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"cancelUpdate()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-4 mt-2 filter\">\n <p-dropdown\n [options]=\"domainGroupDefinition\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [ngModel]=\"'0'\"\n (onChange)=\"filterDomainsList($event.value)\">\n </p-dropdown>\n\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row group_list my-4\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of allGroups; trackBy: trackByGroup\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n <span><a class=\"badge bg-primary\">{{\n group?.group_definition_name\n }}</a></span>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"me-2 my-1\"\n *ngIf=\"hasAccess\"\n aria-label=\"Delete\"\n (click)=\"onDelete(group.id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Group\"\n *ngIf=\"hasAccess\"\n (click)=\"editGroup(group.id)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Members\"\n [routerLink]=\"[group.id, 'members']\"><i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a class=\"communications me-2 my-1\"\n aria-label=\"Communications\"\n (click)=\"navigateToCommunications(group.id)\"><i class=\"fa fa-comments cta2-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"communications my-1\"\n aria-label=\"Documents\"\n (click)=\"navigateToDocumentations(group.id)\"><i class=\"fab fa-wikipedia-w cta1-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessage' | transloco\"> </pw-no-data>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && !hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessageIfUser' | transloco\"> </pw-no-data>\n</div>\n", styles: ["a.previous i{line-height:13px}.clear-both{clear:both}@media screen and (max-width: 480px){.filter{flex:none;max-width:100%!important}.communications{margin-top:2%}}\n"] }]
1203
- }], ctorParameters: () => [{ type: i2$3.UntypedFormBuilder }, { type: i1.GroupService }, { type: i1.SubscriptionService }, { type: i1.DataService }, { type: i0.Injector }], propDecorators: { saveGroup: [] } });
914
+ }], ctorParameters: () => [{ type: i2.UntypedFormBuilder }, { type: i1.GroupService }, { type: i1.SubscriptionService }, { type: i1.DataService }, { type: i0.Injector }], propDecorators: { saveGroup: [] } });
1204
915
 
1205
916
  class LandingPageFooterBComponent {
1206
917
  constructor(authService) {
@@ -1215,119 +926,13 @@ class LandingPageFooterBComponent {
1215
926
  });
1216
927
  }
1217
928
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LandingPageFooterBComponent, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
1218
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: LandingPageFooterBComponent, selector: "pw-landing-page-footer-b", ngImport: i0, template: "<a href=\"javascript:\"\n aria-label=\"Up\"\n id=\"return-to-top\">\n <i class=\"ft-arrow-up\" aria-hidden=\"true\"></i>\n</a>\n<footer class=\"footer-block\">\n <div class=\"container\">\n <h6>Building SaaS Made Easy</h6>\n </div>\n <div *ngIf=\"isBrowserAccess\">\n <span class=\"me-3\">\n <a class=\"white\"\n routerLink=\"/privacy-policy\"> Privacy Policy</a>\n </span>\n <span class=\"ms-3\">\n <a class=\"white\"\n routerLink=\"/terms-conditions\"> Terms &amp; Conditions </a>\n </span>\n </div>\n <div class=\"my-2\">\n <span>\n <a class=\"white\"\n href=\"https://www.linkedin.com/company/posiwise\"\n target=\"blank\">\n Linkedin |</a>\n <a class=\"white\"\n href=\"https://www.facebook.com/posiwise\"\n target=\"blank\"> Facebook |</a>\n <a class=\"white\"\n href=\"https://twitter.com/posiwise\"\n target=\"blank\"> Twitter</a>\n </span>\n </div>\n <p class=\"text-center text-white mb-0 mt-2\">\n Copyright &copy; {{ currentDate | date: 'yyyy' }} PosiWise. All rights reserved.\n </p>\n</footer>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.footer-block{background:#ecf5fc url(/assets/img/landing-page/footer-bg.png) center top no-repeat;background-size:cover;float:left;padding:183px 0 81px;text-align:center;width:100%}.footer-block h6{color:#f0f8fe!important;font-size:72px;font-weight:900}@media screen and (max-width: 991px){.footer-block h6{font-size:45px}}@media screen and (max-width: 575px){.footer-block{padding:96px 0 30px}.footer-block h6{font-size:30px}}\n"], dependencies: [{ kind: "directive", type: i2$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
929
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: LandingPageFooterBComponent, selector: "pw-landing-page-footer-b", ngImport: i0, template: "<a href=\"javascript:\"\n aria-label=\"Up\"\n id=\"return-to-top\">\n <i class=\"ft-arrow-up\" aria-hidden=\"true\"></i>\n</a>\n<footer class=\"footer-block\">\n <div class=\"container\">\n <h6>Building SaaS Made Easy</h6>\n </div>\n <div *ngIf=\"isBrowserAccess\">\n <span class=\"me-3\">\n <a class=\"white\"\n routerLink=\"/privacy-policy\"> Privacy Policy</a>\n </span>\n <span class=\"ms-3\">\n <a class=\"white\"\n routerLink=\"/terms-conditions\"> Terms &amp; Conditions </a>\n </span>\n </div>\n <div class=\"my-2\">\n <span>\n <a class=\"white\"\n href=\"https://www.linkedin.com/company/posiwise\"\n target=\"blank\">\n Linkedin |</a>\n <a class=\"white\"\n href=\"https://www.facebook.com/posiwise\"\n target=\"blank\"> Facebook |</a>\n <a class=\"white\"\n href=\"https://twitter.com/posiwise\"\n target=\"blank\"> Twitter</a>\n </span>\n </div>\n <p class=\"text-center text-white mb-0 mt-2\">\n Copyright &copy; {{ currentDate | date: 'yyyy' }} PosiWise. All rights reserved.\n </p>\n</footer>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.footer-block{background:#ecf5fc url(/assets/img/landing-page/footer-bg.png) center top no-repeat;background-size:cover;float:left;padding:183px 0 81px;text-align:center;width:100%}.footer-block h6{color:#f0f8fe!important;font-size:72px;font-weight:900}@media screen and (max-width: 991px){.footer-block h6{font-size:45px}}@media screen and (max-width: 575px){.footer-block{padding:96px 0 30px}.footer-block h6{font-size:30px}}\n"], dependencies: [{ kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3$2.DatePipe, name: "date" }] }); }
1219
930
  }
1220
931
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LandingPageFooterBComponent, decorators: [{
1221
932
  type: Component,
1222
933
  args: [{ selector: 'pw-landing-page-footer-b', template: "<a href=\"javascript:\"\n aria-label=\"Up\"\n id=\"return-to-top\">\n <i class=\"ft-arrow-up\" aria-hidden=\"true\"></i>\n</a>\n<footer class=\"footer-block\">\n <div class=\"container\">\n <h6>Building SaaS Made Easy</h6>\n </div>\n <div *ngIf=\"isBrowserAccess\">\n <span class=\"me-3\">\n <a class=\"white\"\n routerLink=\"/privacy-policy\"> Privacy Policy</a>\n </span>\n <span class=\"ms-3\">\n <a class=\"white\"\n routerLink=\"/terms-conditions\"> Terms &amp; Conditions </a>\n </span>\n </div>\n <div class=\"my-2\">\n <span>\n <a class=\"white\"\n href=\"https://www.linkedin.com/company/posiwise\"\n target=\"blank\">\n Linkedin |</a>\n <a class=\"white\"\n href=\"https://www.facebook.com/posiwise\"\n target=\"blank\"> Facebook |</a>\n <a class=\"white\"\n href=\"https://twitter.com/posiwise\"\n target=\"blank\"> Twitter</a>\n </span>\n </div>\n <p class=\"text-center text-white mb-0 mt-2\">\n Copyright &copy; {{ currentDate | date: 'yyyy' }} PosiWise. All rights reserved.\n </p>\n</footer>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.footer-block{background:#ecf5fc url(/assets/img/landing-page/footer-bg.png) center top no-repeat;background-size:cover;float:left;padding:183px 0 81px;text-align:center;width:100%}.footer-block h6{color:#f0f8fe!important;font-size:72px;font-weight:900}@media screen and (max-width: 991px){.footer-block h6{font-size:45px}}@media screen and (max-width: 575px){.footer-block{padding:96px 0 30px}.footer-block h6{font-size:30px}}\n"] }]
1223
934
  }], ctorParameters: () => [{ type: i1.AuthService }] });
1224
935
 
1225
- /* eslint-disable */
1226
- class LazyLoadingService {
1227
- /**
1228
- * Lazy load the Image Cropper component
1229
- */
1230
- loadImageCropper() {
1231
- return from(Promise.resolve().then(function () { return imageCropper_component; }).then(m => m.ProfileImageCropperComponent));
1232
- }
1233
- /**
1234
- * Lazy load the Date Range Picker component
1235
- */
1236
- loadDateRangePicker() {
1237
- return from(Promise.resolve().then(function () { return dateRangePicker_component; }).then(m => m.DateRangePickerComponent));
1238
- }
1239
- /**
1240
- * Lazy load the Date Range Picker module
1241
- */
1242
- loadDateRangePickerModule() {
1243
- return from(import(
1244
- /* webpackChunkName: "ngx-daterangepicker" */ 'ngx-daterangepicker-material').then(m => m.NgxDaterangepickerMd));
1245
- }
1246
- /**
1247
- * Lazy load the Image Cropper module
1248
- */
1249
- loadImageCropperModule() {
1250
- return from(import(/* webpackChunkName: "ngx-image-cropper" */ 'ngx-image-cropper').then(m => m.ImageCropperModule));
1251
- }
1252
- /**
1253
- * Lazy load PrimeNG components with static imports to avoid webpack warnings
1254
- */
1255
- loadPrimeNGComponent(componentName) {
1256
- const componentNameLower = componentName.toLowerCase();
1257
- switch (componentNameLower) {
1258
- case 'table':
1259
- return from(import(/* webpackChunkName: "primeng-table" */ 'primeng/table').then(m => m.Table));
1260
- case 'multiselect':
1261
- return from(import(
1262
- /* webpackChunkName: "primeng-multiselect" */ 'primeng/multiselect').then(m => m.MultiSelect));
1263
- case 'dropdown':
1264
- return from(import(/* webpackChunkName: "primeng-dropdown" */ 'primeng/dropdown').then(m => m.Dropdown));
1265
- case 'autocomplete':
1266
- return from(import(
1267
- /* webpackChunkName: "primeng-autocomplete" */ 'primeng/autocomplete').then(m => m.AutoComplete));
1268
- case 'button':
1269
- return from(import(/* webpackChunkName: "primeng-button" */ 'primeng/button').then(m => m.Button));
1270
- case 'progressspinner':
1271
- return from(import(
1272
- /* webpackChunkName: "primeng-progressspinner" */ 'primeng/progressspinner').then(m => m.ProgressSpinner));
1273
- case 'tabmenu':
1274
- return from(import(/* webpackChunkName: "primeng-tabmenu" */ 'primeng/tabmenu').then(m => m.TabMenu));
1275
- default:
1276
- throw new Error(`Unknown PrimeNG component: ${componentName}`);
1277
- }
1278
- }
1279
- /**
1280
- * Lazy load Quill Editor
1281
- */
1282
- loadQuillEditor() {
1283
- return from(import(/* webpackChunkName: "quill-editor" */ 'ngx-quill').then(m => m.QuillModule));
1284
- }
1285
- /**
1286
- * Lazy load Emoji Picker
1287
- */
1288
- loadEmojiPicker() {
1289
- return from(import(/* webpackChunkName: "emoji-picker" */ '@ctrl/ngx-emoji-mart').then(m => m.PickerModule));
1290
- }
1291
- /**
1292
- * Lazy load FontAwesome
1293
- */
1294
- loadFontAwesome() {
1295
- return from(import(/* webpackChunkName: "fontawesome" */ '@fortawesome/angular-fontawesome').then(m => m.FontAwesomeModule));
1296
- }
1297
- /**
1298
- * Lazy load Sentry (using the correct package)
1299
- */
1300
- loadSentry() {
1301
- return from(import(/* webpackChunkName: "sentry" */ '@sentry/angular-ivy').then(m => m));
1302
- }
1303
- /**
1304
- * Lazy load Heavy Utilities (Lodash, Crypto-js, Moment)
1305
- */
1306
- loadHeavyUtils() {
1307
- return from(import(/* webpackChunkName: "heavy-utils" */ 'lodash').then(m => m));
1308
- }
1309
- /**
1310
- * Lazy load Crypto Utils
1311
- */
1312
- loadCryptoUtils() {
1313
- return from(import(/* webpackChunkName: "crypto-utils" */ 'crypto-js').then(m => m));
1314
- }
1315
- /**
1316
- * Lazy load Moment
1317
- */
1318
- loadMoment() {
1319
- return from(import(/* webpackChunkName: "moment" */ 'moment').then(m => m));
1320
- }
1321
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LazyLoadingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1322
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LazyLoadingService, providedIn: 'root' }); }
1323
- }
1324
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LazyLoadingService, decorators: [{
1325
- type: Injectable,
1326
- args: [{
1327
- providedIn: 'root'
1328
- }]
1329
- }] });
1330
-
1331
936
  class NumberPickerComponent {
1332
937
  constructor(numberPickerService) {
1333
938
  this.numberPickerService = numberPickerService;
@@ -1562,7 +1167,7 @@ class NumberPickerComponent {
1562
1167
  this.placeholder = this.placeholder ?? '';
1563
1168
  }
1564
1169
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NumberPickerComponent, deps: [{ token: i1.NumberPickerService }], target: i0.ɵɵFactoryTarget.Component }); }
1565
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NumberPickerComponent, selector: "pw-number-picker", inputs: { min: "min", showTooltip: "showTooltip", tooltipText: "tooltipText", max: "max", step: "step", value: "value", pickStartAfter: "pickStartAfter", pickTimer: "pickTimer", prefix: "prefix", postfix: "postfix", placeholder: "placeholder", buttonsOrientation: "buttonsOrientation", size: "size", customClass: "customClass", mouseWheel: "mouseWheel", arrowKeys: "arrowKeys", inputReadOnly: "inputReadOnly", showUpButton: "showUpButton", showDownButton: "showDownButton" }, outputs: { valueChange: "valueChange", minReached: "minReached", maxReached: "maxReached", pickStarted: "pickStarted", pickStopped: "pickStopped", pickUpStarted: "pickUpStarted", pickUpStopped: "pickUpStopped", pickDownStarted: "pickDownStarted", pickDownStopped: "pickDownStopped" }, ngImport: i0, template: "<div class=\"input-group mb-3 input-{{ size }} {{ customClass.container }}\">\n <!-- Horizontal decrease button orientation -->\n <span *ngIf=\"isHorizontal() && showDownButton\"\n class=\"input-group-text decrease {{ customClass.down }}\"\n (click)=\"onDecrease($event)\"\n (keydown.enter)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n <!-- Input prefix -->\n <span *ngIf=\"prefix\"\n class=\"input-group-text {{ customClass.prefix }}\">{{ prefix }}\n </span>\n <input type=\"number\"\n class=\"form-control\"\n name=\"input-spin-val\"\n [(ngModel)]=\"value\"\n [readOnly]=\"inputReadOnly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (wheel)=\"mouseWheel && onMouseWheel($event)\"\n (keyup)=\"arrowKeys && onKeyUp($event)\"\n (keydown.enter)=\"arrowKeys && onKeyDown($event)\"\n (keydown.arrowup)=\"arrowKeys && onIncrease($event)\"\n (keydown.arrowdown)=\"arrowKeys && onDecrease($event)\"\n (change)=\"onValueChange($event)\"\n [placeholder]=\"placeholder\" />\n <!-- Input postfix -->\n\n <span *ngIf=\"postfix\"\n class=\"input-group-text {{ customClass.postfix }}\"\n [style.borderLeft]=\"'0'\">{{postfix}}\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTooltip && tooltipText\"\n [pTooltip]=\"tooltipText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </span>\n\n <!-- Horizontal increase button orientation -->\n <span *ngIf=\"isHorizontal() && showUpButton\"\n class=\"input-group-text increase {{ customClass.up }}\"\n [style.borderLeft]=\"!postfix ? '0' : ''\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <!-- Vertical buttons orientation -->\n <span *ngIf=\"!isHorizontal()\"\n class=\"input-group-text vertical p-0\">\n <span *ngIf=\"showUpButton\"\n class=\"{{ customClass.up }}\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <span *ngIf=\"showDownButton\"\n class=\"{{ customClass.down }}\"\n (keydown.enter)=\"onDecrease($event)\"\n (click)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n </span>\n</div>\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{appearance:none;margin:0}.increase:hover,.decrease:hover{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer;background-color:#d8d8d8}.increase{border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.vertical{display:flex;justify-content:center;flex-direction:column;text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.vertical span{line-height:15px}.input-md .vertical span,.input-sm .vertical span{padding:2px 10px}.input-lg .vertical span{padding:4px 10px}.input-xlg .vertical span{padding:7px 10px}.input-md,.input-medium{height:45px}.input-lg,.input-large{height:50px}.input-xlg,.input-xlarge{height:75px}.input-md input,.input-medium input,.input-md span,.input-medium span{font-size:22px}.input-lg input,.input-large input,.input-lg span,.input-large span{font-size:25px}.input-xlg input,.input-xlarge input,.input-xlg span,.input-xlarge span{font-size:38px}\n"], dependencies: [{ kind: "directive", type: i2$3.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$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1170
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NumberPickerComponent, selector: "pw-number-picker", inputs: { min: "min", showTooltip: "showTooltip", tooltipText: "tooltipText", max: "max", step: "step", value: "value", pickStartAfter: "pickStartAfter", pickTimer: "pickTimer", prefix: "prefix", postfix: "postfix", placeholder: "placeholder", buttonsOrientation: "buttonsOrientation", size: "size", customClass: "customClass", mouseWheel: "mouseWheel", arrowKeys: "arrowKeys", inputReadOnly: "inputReadOnly", showUpButton: "showUpButton", showDownButton: "showDownButton" }, outputs: { valueChange: "valueChange", minReached: "minReached", maxReached: "maxReached", pickStarted: "pickStarted", pickStopped: "pickStopped", pickUpStarted: "pickUpStarted", pickUpStopped: "pickUpStopped", pickDownStarted: "pickDownStarted", pickDownStopped: "pickDownStopped" }, ngImport: i0, template: "<div class=\"input-group mb-3 input-{{ size }} {{ customClass.container }}\">\n <!-- Horizontal decrease button orientation -->\n <span *ngIf=\"isHorizontal() && showDownButton\"\n class=\"input-group-text decrease {{ customClass.down }}\"\n (click)=\"onDecrease($event)\"\n (keydown.enter)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n <!-- Input prefix -->\n <span *ngIf=\"prefix\"\n class=\"input-group-text {{ customClass.prefix }}\">{{ prefix }}\n </span>\n <input type=\"number\"\n class=\"form-control\"\n name=\"input-spin-val\"\n [(ngModel)]=\"value\"\n [readOnly]=\"inputReadOnly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (wheel)=\"mouseWheel && onMouseWheel($event)\"\n (keyup)=\"arrowKeys && onKeyUp($event)\"\n (keydown.enter)=\"arrowKeys && onKeyDown($event)\"\n (keydown.arrowup)=\"arrowKeys && onIncrease($event)\"\n (keydown.arrowdown)=\"arrowKeys && onDecrease($event)\"\n (change)=\"onValueChange($event)\"\n [placeholder]=\"placeholder\" />\n <!-- Input postfix -->\n\n <span *ngIf=\"postfix\"\n class=\"input-group-text {{ customClass.postfix }}\"\n [style.borderLeft]=\"'0'\">{{postfix}}\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTooltip && tooltipText\"\n [pTooltip]=\"tooltipText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </span>\n\n <!-- Horizontal increase button orientation -->\n <span *ngIf=\"isHorizontal() && showUpButton\"\n class=\"input-group-text increase {{ customClass.up }}\"\n [style.borderLeft]=\"!postfix ? '0' : ''\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <!-- Vertical buttons orientation -->\n <span *ngIf=\"!isHorizontal()\"\n class=\"input-group-text vertical p-0\">\n <span *ngIf=\"showUpButton\"\n class=\"{{ customClass.up }}\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <span *ngIf=\"showDownButton\"\n class=\"{{ customClass.down }}\"\n (keydown.enter)=\"onDecrease($event)\"\n (click)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n </span>\n</div>\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{appearance:none;margin:0}.increase:hover,.decrease:hover{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer;background-color:#d8d8d8}.increase{border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.vertical{display:flex;justify-content:center;flex-direction:column;text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.vertical span{line-height:15px}.input-md .vertical span,.input-sm .vertical span{padding:2px 10px}.input-lg .vertical span{padding:4px 10px}.input-xlg .vertical span{padding:7px 10px}.input-md,.input-medium{height:45px}.input-lg,.input-large{height:50px}.input-xlg,.input-xlarge{height:75px}.input-md input,.input-medium input,.input-md span,.input-medium span{font-size:22px}.input-lg input,.input-large input,.input-lg span,.input-large span{font-size:25px}.input-xlg input,.input-xlarge input,.input-xlg span,.input-xlarge span{font-size:38px}\n"], dependencies: [{ 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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: "directive", type: i3$3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1566
1171
  }
1567
1172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NumberPickerComponent, decorators: [{
1568
1173
  type: Component,
@@ -1656,13 +1261,13 @@ class PasswordValidationComponent extends AppBaseComponent {
1656
1261
  });
1657
1262
  }
1658
1263
  }
1659
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PasswordValidationComponent, deps: [{ token: i0.Injector }, { token: i2$1.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
1660
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PasswordValidationComponent, selector: "pw-password-validation", inputs: { confirmMessage: "confirmMessage" }, outputs: { successEvent: "successEvent" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Confirm</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <strong class=\"p3\">{{ confirmMessage | transloco }}</strong>\n <div>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <input type=\"password\"\n #passwordRef\n [(ngModel)]=\"password\"\n class=\"form-control\"\n placeholder=\"Current Password\" />\n </div>\n </div>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <button [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary float-end\"\n type=\"button\"\n (click)=\"validatePassword()\">\n {{ 'Button.Confirm' | transloco }}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
1264
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PasswordValidationComponent, deps: [{ token: i0.Injector }, { token: i3$1.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
1265
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PasswordValidationComponent, selector: "pw-password-validation", inputs: { confirmMessage: "confirmMessage" }, outputs: { successEvent: "successEvent" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Confirm</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <strong class=\"p3\">{{ confirmMessage | transloco }}</strong>\n <div>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <input type=\"password\"\n #passwordRef\n [(ngModel)]=\"password\"\n class=\"form-control\"\n placeholder=\"Current Password\" />\n </div>\n </div>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <button [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary float-end\"\n type=\"button\"\n (click)=\"validatePassword()\">\n {{ 'Button.Confirm' | transloco }}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ 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: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
1661
1266
  }
1662
1267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PasswordValidationComponent, decorators: [{
1663
1268
  type: Component,
1664
1269
  args: [{ selector: 'pw-password-validation', template: "<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Confirm</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <strong class=\"p3\">{{ confirmMessage | transloco }}</strong>\n <div>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <input type=\"password\"\n #passwordRef\n [(ngModel)]=\"password\"\n class=\"form-control\"\n placeholder=\"Current Password\" />\n </div>\n </div>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <button [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary float-end\"\n type=\"button\"\n (click)=\"validatePassword()\">\n {{ 'Button.Confirm' | transloco }}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n" }]
1665
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i2$1.NgbModal }], propDecorators: { content: [{
1270
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i3$1.NgbModal }], propDecorators: { content: [{
1666
1271
  type: ViewChild,
1667
1272
  args: ['content', { static: true }]
1668
1273
  }], confirmMessage: [{
@@ -1872,16 +1477,16 @@ class PrivacyAndTosComponent extends AppBaseComponent {
1872
1477
  this.isLoaded = true;
1873
1478
  });
1874
1479
  }
1875
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrivacyAndTosComponent, deps: [{ token: i1$3.AdminService }, { token: i0.Injector }, { token: DOCUMENT }, { token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
1876
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PrivacyAndTosComponent, selector: "pw-privacy-and-tos", inputs: { productId: "productId" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isPublic\">\n <pw-header [landing]=\"false\"></pw-header>\n</ng-container>\n\n<div class=\"col-12 d-flex\"\n *ngIf=\"!isPublic\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">{{ productName }}</h3>\n</div>\n\n\n\n\n<div [ngClass]=\"{ 'container pw-tab overflow-hidden': isPublic }\" >\n <div [ngClass]=\"{ dashboard: isPublic }\">\n <div [ngClass]=\"{ 'dashboard-body': isPublic }\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <h3 *ngIf=\"isPublic\">{{ product }}</h3>\n <div>\n\n <ul ngbNav\n #nav=\"ngbNav\"\n [(activeId)]=\"tabId\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"'privacy-policy'\">\n <a ngbNavLink>Privacy policy</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body pt-1\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h3>Privacy policy</h3>\n <div class=\"clearfix\"></div>\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"data?.privacy\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"'terms-of-service'\">\n <a ngbNavLink>Terms of Services</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body pt-1\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h3>Terms of Services</h3>\n <div class=\"clearfix\"></div>\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"data?.tos\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n </ul>\n </div>\n <div class=\"w-100 text-center p-2 mt-5\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n </div>\n <div [ngbNavOutlet]=\"nav\" *ngIf=\"isLoaded\"></div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep .terms-of-service ul{list-style:disc!important;padding-left:40px!important}.ql-container{max-width:1000px;margin:0 auto;resize:none!important}\n"], dependencies: [{ kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i2$1.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i2$1.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i2$1.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i2$1.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i2$1.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i2$1.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: HeaderComponent, selector: "pw-header", inputs: ["landing"] }] }); }
1480
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrivacyAndTosComponent, deps: [{ token: i1$2.AdminService }, { token: i0.Injector }, { token: DOCUMENT }, { token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
1481
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PrivacyAndTosComponent, selector: "pw-privacy-and-tos", inputs: { productId: "productId" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isPublic\">\n <pw-header [landing]=\"false\"></pw-header>\n</ng-container>\n\n<div class=\"col-12 d-flex\"\n *ngIf=\"!isPublic\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">{{ productName }}</h3>\n</div>\n\n\n\n\n<div [ngClass]=\"{ 'container pw-tab overflow-hidden': isPublic }\" >\n <div [ngClass]=\"{ dashboard: isPublic }\">\n <div [ngClass]=\"{ 'dashboard-body': isPublic }\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <h3 *ngIf=\"isPublic\">{{ product }}</h3>\n <div>\n\n <ul ngbNav\n #nav=\"ngbNav\"\n [(activeId)]=\"tabId\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"'privacy-policy'\">\n <a ngbNavLink>Privacy policy</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body pt-1\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h3>Privacy policy</h3>\n <div class=\"clearfix\"></div>\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"data?.privacy\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"'terms-of-service'\">\n <a ngbNavLink>Terms of Services</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body pt-1\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h3>Terms of Services</h3>\n <div class=\"clearfix\"></div>\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"data?.tos\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n </ul>\n </div>\n <div class=\"w-100 text-center p-2 mt-5\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n </div>\n <div [ngbNavOutlet]=\"nav\" *ngIf=\"isLoaded\"></div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep .terms-of-service ul{list-style:disc!important;padding-left:40px!important}.ql-container{max-width:1000px;margin:0 auto;resize:none!important}\n"], dependencies: [{ kind: "directive", type: i3$1.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3$1.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3$1.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3$1.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i3$1.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3$1.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3$1.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: i4$1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: HeaderComponent, selector: "pw-header", inputs: ["landing"] }] }); }
1877
1482
  }
1878
1483
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrivacyAndTosComponent, decorators: [{
1879
1484
  type: Component,
1880
1485
  args: [{ selector: 'pw-privacy-and-tos', template: "<ng-container *ngIf=\"isPublic\">\n <pw-header [landing]=\"false\"></pw-header>\n</ng-container>\n\n<div class=\"col-12 d-flex\"\n *ngIf=\"!isPublic\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">{{ productName }}</h3>\n</div>\n\n\n\n\n<div [ngClass]=\"{ 'container pw-tab overflow-hidden': isPublic }\" >\n <div [ngClass]=\"{ dashboard: isPublic }\">\n <div [ngClass]=\"{ 'dashboard-body': isPublic }\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <h3 *ngIf=\"isPublic\">{{ product }}</h3>\n <div>\n\n <ul ngbNav\n #nav=\"ngbNav\"\n [(activeId)]=\"tabId\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"'privacy-policy'\">\n <a ngbNavLink>Privacy policy</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body pt-1\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h3>Privacy policy</h3>\n <div class=\"clearfix\"></div>\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"data?.privacy\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"'terms-of-service'\">\n <a ngbNavLink>Terms of Services</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body pt-1\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h3>Terms of Services</h3>\n <div class=\"clearfix\"></div>\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"data?.tos\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n </ul>\n </div>\n <div class=\"w-100 text-center p-2 mt-5\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n </div>\n <div [ngbNavOutlet]=\"nav\" *ngIf=\"isLoaded\"></div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep .terms-of-service ul{list-style:disc!important;padding-left:40px!important}.ql-container{max-width:1000px;margin:0 auto;resize:none!important}\n"] }]
1881
- }], ctorParameters: () => [{ type: i1$3.AdminService }, { type: i0.Injector }, { type: Document, decorators: [{
1486
+ }], ctorParameters: () => [{ type: i1$2.AdminService }, { type: i0.Injector }, { type: Document, decorators: [{
1882
1487
  type: Inject,
1883
1488
  args: [DOCUMENT]
1884
- }] }, { type: i1$2.DomSanitizer }], propDecorators: { productId: [{
1489
+ }] }, { type: i1$1.DomSanitizer }], propDecorators: { productId: [{
1885
1490
  type: Input
1886
1491
  }] } });
1887
1492
 
@@ -1895,7 +1500,7 @@ class PrivacyPolicyComponent extends AppBaseComponent {
1895
1500
  this.company_email = this.appConfig.company.email;
1896
1501
  }
1897
1502
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrivacyPolicyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1898
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PrivacyPolicyComponent, selector: "pw-privacy-policy", inputs: { isPublic: "isPublic" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isPublic\">\n <pw-landing-page-header [landing]=\"false\"></pw-landing-page-header>\n</ng-container>\n\n<div class=\"container pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h1>Privacy policy</h1>\n <div class=\"clearfix\"></div>\n <h3>Your Content</h3>\n <p>\n If you operate a {{ company_name }} User Account, and/or comment on,\n post material to, post links on or otherwise make (or allow any third\n party to make) material available by means of the Website and or\n Applications (collectively called \u201CContent\u201D), you are entirely\n responsible for that Content and any harm resulting from that Content.\n That is regardless of whether the Content in question constitutes (but\n not limited to) text, graphics, an audio file or computer software. By\n making Content available, you represent and warrant that:\n </p>\n <ol>\n <li>\n the Content is not considered to be obscene, inappropriate,\n defamatory, disparaging, indecent, seditious, offensive,\n pornographic, threatening, abusive, liable to incite racial hatred,\n discriminatory, blasphemous, in breach of confidence or in breach of\n privacy;\n </li>\n <li>\n the downloading, copying and use of the Content will not infringe\n the proprietary rights, including but not limited to the copyright,\n patent, trademark or trade secret rights, of any third party;\n </li>\n <li>\n if your employer has rights to intellectual property you create, you\n have either (i) received permission from your employer to post or\n make available the Content, including but not limited to any\n software, or (ii) secured from your employer a waiver as to all\n rights in or to the Content;\n </li>\n <li>\n you have fully complied with any third-party licenses relating to\n the Content, and have done all things necessary to successfully pass\n through to end users any required terms;\n </li>\n <li>\n the Content does not contain or install any viruses, worms, malware,\n Trojan horses or other harmful or destructive content;\n </li>\n <li>\n the Content is not spam, is not machine or randomly generated and\n does not contain unethical or unwanted commercial content designed\n to drive traffic to third party sites or further unlawful acts;\n </li>\n <li>\n your User Account is not getting advertised via unwanted electronic\n messages such as spam links on newsgroups, email lists, other blogs\n and websites, and similar unsolicited promotional methods;\n </li>\n <li>\n your User Account is not named in a manner that misleads users into\n thinking that you are another person or company;\n </li>\n <li>\n the Content will not cause you or us to breach any law, regulation,\n rule, code or other legal obligation; and\n </li>\n <li>the Content will not bring us, or the Site into disrepute.</li>\n </ol>\n <p></p>\n <p>\n By submitting Content for inclusion in your User Account or to the Site,\n you grant us a worldwide, royalty free, and non-exclusive license to\n use that content in any way (including without limitation, reproducing,\n changing and communicating the Content) and permit us to authorise any\n other person to do the same thing. If you delete any Content, we will\n use reasonable efforts to remove it from the Site, but you acknowledge\n that caching or references to the Content may not be made immediately\n unavailable.\n </p>\n <p>\n Without limiting any of those representations or warranties, we reserve\n the right (though not the obligation) to, in our sole discretion\n </p>\n <ol>\n <li>\n refuse or remove any content that, in our reasonable opinion,\n violates any of our policies or agreements or is in any way harmful\n or objectionable, or\n </li>\n <li>\n terminate or deny access to and use of the Service to any individual\n or entity for any reason, in our sole discretion.\n </li>\n </ol>\n <p></p>\n <h3>Privacy</h3>\n <p>\n We get information about you in a range of ways. We collect your&lrm;\n name,&lrm; email address and other information you directly give us on\n our Site. We may get information about you from other sources. We may\n add this to information we get from this Site. We may automatically log\n information about you and your computer. We may log information using\n \"cookies.\" Cookies are small data files stored on your hard drive by a\n website. Cookies help us make our Site and your visit better. We use\n cookies to see which parts of our Site people use and like and to count\n visits to our Site. We may store your personal information along with\n your files and data on a third party server such as Amazon Web Services;\n </p>\n <p>\n We use your personal information to operate, maintain, and improve our\n sites, products, and services. We use your personal information to\n respond to comments and questions and provide customer service. We use\n your personal information to provide and deliver products and services\n customers request. We also use your personal information to send you\n notifications about the service and to respond to customer support\n requests. You can access and change your personal information by logging\n in to your account settings page.\n </p>\n <p>\n We may share personal information with your consent. For example, you\n may let us share personal information with others for their own\n marketing uses. Those uses will be subject to their privacy policies. We\n may share personal information when we do a business deal, or negotiate\n a business deal, involving sale or transfer of all or a part of our\n business or assets. These deals can include any merger, financing,\n acquisition, or bankruptcy transaction or proceeding. We may share\n personal information for legal, protection, and safety purposes. We may\n share information to comply with laws. We may share information to\n respond to lawful requests and legal process. We may share information\n to protect the rights, property or safety of the Service, our users,\n customers, and others. This includes enforcing our agreements, policies,\n and terms of use. We may share information in an emergency. We may share\n information with those who need it to do work for us. We may also share\n aggregated and/or anonymized data with others for their own uses.\n </p>\n <p>\n Our marketing emails tell you how to \u201Copt-out.\u201D If you opt out, we may\n still send you non-marketing emails. Non-marketing emails include emails\n about your accounts and our business dealings with you.\n </p>\n <p>\n You can typically remove and reject cookies from our Site with your\n browser settings. Many browsers are set to accept cookies until you\n change your settings. If you remove or reject our cookies, it could\n affect how our Site works for you.\n </p>\n <p>\n If {{ company_name }} sells all or part of its business or makes a sale\n or transfer of its assets or is otherwise involved in a merger or\n transfer of all or a material part of its business,\n {{ company_name }} may transfer your information to the party or parties\n involved in the transaction as part of that transaction.\n </p>\n <p>\n {{ company_name }} uses a range of commercially reasonable measures to\n safeguard Personal Information in its possession against loss, theft and\n unauthorized use, disclosure or modification. However, no one can\n guarantee the complete safety of your information. Please immediately\n notify us if you believe there may be an issue or a problem regarding\n the integrity of your information by contacting us.\n </p>\n <p>\n In some cases, we may use an unaffiliated payment service to allow you\n to purchase a product or make payments (\u201CPayment Service\u201D). If you wish\n to purchase a product or make a payment in such a case, you will be\n directed to a Payment Service webpage. Any information that you provide\n to a Payment Service will be subject to the applicable Payment Service\u2019s\n privacy policy, rather than this Privacy Policy. We have no control\n over, and are not responsible for, any Payment Service\u2019s use of\n information collected through any Payment Service.\n </p>\n <p>\n The {{ company_name }} website may also be linked to sites operated by\n third parties, and may carry advertisements or offer content,\n functionality, games or applications developed and maintained by third\n parties. Some of these third party sites may be co-branded with a\n {{ company_name }} logo, even though they are not operated or maintained\n by us.\n </p>\n <p>\n {{ company_name }} is not responsible for the privacy practices of any\n such third parties, and once you leave the {{ company_name }} website,\n you should check the applicable privacy policy of the other service.\n </p>\n <h3>Questions &amp; Comments</h3>\n <p>\n If you have any questions about our Privacy Policy, please\n <a href=\"mailto:{{ company_email }}\">let us know</a>.\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}h1,h2,h3,h4,h5,h6{font-weight:600}h1{font-size:36px}.card{padding:10px 15px!important}.card ol li{padding-left:30px!important;position:relative;color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding-top:5px;padding-bottom:5px;padding-right:0}.card ol li ol.list-bullet li,.card ol li ul.list-bullet li{padding-left:0!important}.card ol li:before{font:400 16px/1.3 Roboto,sans-serif;left:0;position:absolute;top:4px}.card ol li h3{font:400 20px/1.3 Roboto,sans-serif;margin-bottom:15px}.card p{color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding:5px 0}.card p strong{font-family:Roboto,sans-serif}.banner{background:url(/assets/img/landing-page/header-bg.jpg) no-repeat center;background-size:cover;padding:0 0 130px}.terms-of-service h3{padding:5px 0 0!important}.terms-of-service ol{counter-reset:section;padding:0 5px 0 0!important}.terms-of-service ol li:before{content:counters(section,\".\") \". \";counter-increment:section;float:left;font-weight:600;padding:0 10px 0 0}.terms-of-service ol li ol li ol li:before,.terms-of-service ol li ol li ul li:before{content:\"\";counter-increment:none}li{padding:10px 0}.parent-ol>li:before{font-size:26px;margin-top:16px}ul.list-bullet,ol.list-bullet{list-style-type:disc;margin-left:20px}ul.list-bullet>li,ol.list-bullet>li{padding:0}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1503
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PrivacyPolicyComponent, selector: "pw-privacy-policy", inputs: { isPublic: "isPublic" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isPublic\">\n <pw-landing-page-header [landing]=\"false\"></pw-landing-page-header>\n</ng-container>\n\n<div class=\"container pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h1>Privacy policy</h1>\n <div class=\"clearfix\"></div>\n <h3>Your Content</h3>\n <p>\n If you operate a {{ company_name }} User Account, and/or comment on,\n post material to, post links on or otherwise make (or allow any third\n party to make) material available by means of the Website and or\n Applications (collectively called \u201CContent\u201D), you are entirely\n responsible for that Content and any harm resulting from that Content.\n That is regardless of whether the Content in question constitutes (but\n not limited to) text, graphics, an audio file or computer software. By\n making Content available, you represent and warrant that:\n </p>\n <ol>\n <li>\n the Content is not considered to be obscene, inappropriate,\n defamatory, disparaging, indecent, seditious, offensive,\n pornographic, threatening, abusive, liable to incite racial hatred,\n discriminatory, blasphemous, in breach of confidence or in breach of\n privacy;\n </li>\n <li>\n the downloading, copying and use of the Content will not infringe\n the proprietary rights, including but not limited to the copyright,\n patent, trademark or trade secret rights, of any third party;\n </li>\n <li>\n if your employer has rights to intellectual property you create, you\n have either (i) received permission from your employer to post or\n make available the Content, including but not limited to any\n software, or (ii) secured from your employer a waiver as to all\n rights in or to the Content;\n </li>\n <li>\n you have fully complied with any third-party licenses relating to\n the Content, and have done all things necessary to successfully pass\n through to end users any required terms;\n </li>\n <li>\n the Content does not contain or install any viruses, worms, malware,\n Trojan horses or other harmful or destructive content;\n </li>\n <li>\n the Content is not spam, is not machine or randomly generated and\n does not contain unethical or unwanted commercial content designed\n to drive traffic to third party sites or further unlawful acts;\n </li>\n <li>\n your User Account is not getting advertised via unwanted electronic\n messages such as spam links on newsgroups, email lists, other blogs\n and websites, and similar unsolicited promotional methods;\n </li>\n <li>\n your User Account is not named in a manner that misleads users into\n thinking that you are another person or company;\n </li>\n <li>\n the Content will not cause you or us to breach any law, regulation,\n rule, code or other legal obligation; and\n </li>\n <li>the Content will not bring us, or the Site into disrepute.</li>\n </ol>\n <p></p>\n <p>\n By submitting Content for inclusion in your User Account or to the Site,\n you grant us a worldwide, royalty free, and non-exclusive license to\n use that content in any way (including without limitation, reproducing,\n changing and communicating the Content) and permit us to authorise any\n other person to do the same thing. If you delete any Content, we will\n use reasonable efforts to remove it from the Site, but you acknowledge\n that caching or references to the Content may not be made immediately\n unavailable.\n </p>\n <p>\n Without limiting any of those representations or warranties, we reserve\n the right (though not the obligation) to, in our sole discretion\n </p>\n <ol>\n <li>\n refuse or remove any content that, in our reasonable opinion,\n violates any of our policies or agreements or is in any way harmful\n or objectionable, or\n </li>\n <li>\n terminate or deny access to and use of the Service to any individual\n or entity for any reason, in our sole discretion.\n </li>\n </ol>\n <p></p>\n <h3>Privacy</h3>\n <p>\n We get information about you in a range of ways. We collect your&lrm;\n name,&lrm; email address and other information you directly give us on\n our Site. We may get information about you from other sources. We may\n add this to information we get from this Site. We may automatically log\n information about you and your computer. We may log information using\n \"cookies.\" Cookies are small data files stored on your hard drive by a\n website. Cookies help us make our Site and your visit better. We use\n cookies to see which parts of our Site people use and like and to count\n visits to our Site. We may store your personal information along with\n your files and data on a third party server such as Amazon Web Services;\n </p>\n <p>\n We use your personal information to operate, maintain, and improve our\n sites, products, and services. We use your personal information to\n respond to comments and questions and provide customer service. We use\n your personal information to provide and deliver products and services\n customers request. We also use your personal information to send you\n notifications about the service and to respond to customer support\n requests. You can access and change your personal information by logging\n in to your account settings page.\n </p>\n <p>\n We may share personal information with your consent. For example, you\n may let us share personal information with others for their own\n marketing uses. Those uses will be subject to their privacy policies. We\n may share personal information when we do a business deal, or negotiate\n a business deal, involving sale or transfer of all or a part of our\n business or assets. These deals can include any merger, financing,\n acquisition, or bankruptcy transaction or proceeding. We may share\n personal information for legal, protection, and safety purposes. We may\n share information to comply with laws. We may share information to\n respond to lawful requests and legal process. We may share information\n to protect the rights, property or safety of the Service, our users,\n customers, and others. This includes enforcing our agreements, policies,\n and terms of use. We may share information in an emergency. We may share\n information with those who need it to do work for us. We may also share\n aggregated and/or anonymized data with others for their own uses.\n </p>\n <p>\n Our marketing emails tell you how to \u201Copt-out.\u201D If you opt out, we may\n still send you non-marketing emails. Non-marketing emails include emails\n about your accounts and our business dealings with you.\n </p>\n <p>\n You can typically remove and reject cookies from our Site with your\n browser settings. Many browsers are set to accept cookies until you\n change your settings. If you remove or reject our cookies, it could\n affect how our Site works for you.\n </p>\n <p>\n If {{ company_name }} sells all or part of its business or makes a sale\n or transfer of its assets or is otherwise involved in a merger or\n transfer of all or a material part of its business,\n {{ company_name }} may transfer your information to the party or parties\n involved in the transaction as part of that transaction.\n </p>\n <p>\n {{ company_name }} uses a range of commercially reasonable measures to\n safeguard Personal Information in its possession against loss, theft and\n unauthorized use, disclosure or modification. However, no one can\n guarantee the complete safety of your information. Please immediately\n notify us if you believe there may be an issue or a problem regarding\n the integrity of your information by contacting us.\n </p>\n <p>\n In some cases, we may use an unaffiliated payment service to allow you\n to purchase a product or make payments (\u201CPayment Service\u201D). If you wish\n to purchase a product or make a payment in such a case, you will be\n directed to a Payment Service webpage. Any information that you provide\n to a Payment Service will be subject to the applicable Payment Service\u2019s\n privacy policy, rather than this Privacy Policy. We have no control\n over, and are not responsible for, any Payment Service\u2019s use of\n information collected through any Payment Service.\n </p>\n <p>\n The {{ company_name }} website may also be linked to sites operated by\n third parties, and may carry advertisements or offer content,\n functionality, games or applications developed and maintained by third\n parties. Some of these third party sites may be co-branded with a\n {{ company_name }} logo, even though they are not operated or maintained\n by us.\n </p>\n <p>\n {{ company_name }} is not responsible for the privacy practices of any\n such third parties, and once you leave the {{ company_name }} website,\n you should check the applicable privacy policy of the other service.\n </p>\n <h3>Questions &amp; Comments</h3>\n <p>\n If you have any questions about our Privacy Policy, please\n <a href=\"mailto:{{ company_email }}\">let us know</a>.\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}h1,h2,h3,h4,h5,h6{font-weight:600}h1{font-size:36px}.card{padding:10px 15px!important}.card ol li{padding-left:30px!important;position:relative;color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding-top:5px;padding-bottom:5px;padding-right:0}.card ol li ol.list-bullet li,.card ol li ul.list-bullet li{padding-left:0!important}.card ol li:before{font:400 16px/1.3 Roboto,sans-serif;left:0;position:absolute;top:4px}.card ol li h3{font:400 20px/1.3 Roboto,sans-serif;margin-bottom:15px}.card p{color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding:5px 0}.card p strong{font-family:Roboto,sans-serif}.banner{background:url(/assets/img/landing-page/header-bg.jpg) no-repeat center;background-size:cover;padding:0 0 130px}.terms-of-service h3{padding:5px 0 0!important}.terms-of-service ol{counter-reset:section;padding:0 5px 0 0!important}.terms-of-service ol li:before{content:counters(section,\".\") \". \";counter-increment:section;float:left;font-weight:600;padding:0 10px 0 0}.terms-of-service ol li ol li ol li:before,.terms-of-service ol li ol li ul li:before{content:\"\";counter-increment:none}li{padding:10px 0}.parent-ol>li:before{font-size:26px;margin-top:16px}ul.list-bullet,ol.list-bullet{list-style-type:disc;margin-left:20px}ul.list-bullet>li,ol.list-bullet>li{padding:0}\n"], dependencies: [{ kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1899
1504
  }
1900
1505
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrivacyPolicyComponent, decorators: [{
1901
1506
  type: Component,
@@ -1932,68 +1537,365 @@ class PwTabsComponent extends AppBaseComponent {
1932
1537
  this.routeEventSubscription.unsubscribe();
1933
1538
  }
1934
1539
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PwTabsComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
1935
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PwTabsComponent, selector: "pw-tabs", inputs: { items: "items", withSubscription: "withSubscription" }, viewQueries: [{ propertyName: "tabInstance", first: true, predicate: ["tabMenu"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <p-tabMenu [model]=\"items\"\n #tabMenu></p-tabMenu>\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <router-outlet></router-outlet>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i1$4.TabMenu, selector: "p-tabMenu", inputs: ["model", "activeItem", "scrollable", "popup", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["activeItemChange"] }, { kind: "directive", type: i2$5.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
1540
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PwTabsComponent, selector: "pw-tabs", inputs: { items: "items", withSubscription: "withSubscription" }, viewQueries: [{ propertyName: "tabInstance", first: true, predicate: ["tabMenu"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <p-tabMenu [model]=\"items\"\n #tabMenu></p-tabMenu>\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <router-outlet></router-outlet>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2$1.TabMenu, selector: "p-tabMenu", inputs: ["model", "activeItem", "scrollable", "popup", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["activeItemChange"] }] }); }
1936
1541
  }
1937
1542
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PwTabsComponent, decorators: [{
1938
1543
  type: Component,
1939
1544
  args: [{ selector: 'pw-tabs', template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <p-tabMenu [model]=\"items\"\n #tabMenu></p-tabMenu>\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <router-outlet></router-outlet>\n </div>\n </div>\n</div>\n" }]
1940
1545
  }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { items: [{
1941
1546
  type: Input
1942
- }], tabInstance: [{
1943
- type: ViewChild,
1944
- args: ['tabMenu', { static: false }]
1945
- }], withSubscription: [{
1547
+ }], tabInstance: [{
1548
+ type: ViewChild,
1549
+ args: ['tabMenu', { static: false }]
1550
+ }], withSubscription: [{
1551
+ type: Input
1552
+ }] } });
1553
+
1554
+ class DateRangePickerComponent {
1555
+ constructor() {
1556
+ this.initialized = false;
1557
+ this.dateRangeChange = new EventEmitter();
1558
+ }
1559
+ onDateRangeSelect(event) {
1560
+ if (event.startDate && event.endDate) {
1561
+ this.dateRangeChange.emit(event);
1562
+ }
1563
+ }
1564
+ ngAfterViewInit() {
1565
+ setTimeout(() => {
1566
+ this.initialized = true;
1567
+ });
1568
+ }
1569
+ onClearDate() {
1570
+ if (!this.initialized) {
1571
+ return;
1572
+ }
1573
+ this.dateRangeChange.emit({ startDate: null, endDate: null });
1574
+ }
1575
+ openDatepicker() {
1576
+ setTimeout(() => {
1577
+ this.pickerDirective.open();
1578
+ }, 50);
1579
+ }
1580
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1581
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: DateRangePickerComponent, selector: "app-date-picker", inputs: { selectedDateRange: "selectedDateRange", dateRanges: "dateRanges" }, outputs: { dateRangeChange: "dateRangeChange" }, viewQueries: [{ propertyName: "pickerDirective", first: true, predicate: DaterangepickerDirective, descendants: true }], ngImport: i0, template: "<div class=\"my-3\">\n <div class=\"row\">\n <!-- start date -->\n <div class=\"col-6 col-sm-3\">\n <div class=\"\">\n <input ngxDaterangepickerMd\n class=\"form-control\"\n [(ngModel)]=\"selectedDateRange\"\n [ranges]=\"dateRanges\"\n [alwaysShowCalendars]=\"true\"\n [locale]=\"{ format: 'DD-MMM-YYYY' }\"\n [showCustomRangeLabel]=\"true\"\n [linkedCalendars]=\"true\"\n [showClearButton]=\"true\"\n (clearClicked)=\"onClearDate()\"\n placeholder=\"Select a date range (optional)\"\n opens=\"center\"\n (ngModelChange)=\"onDateRangeSelect($event)\"\n />\n </div>\n </div>\n <div class=\"col-6 col-sm-3 pop\">\n\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary ngx-daterangepicker-action\"\n (click)=\"openDatepicker()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>", styles: ["::ng-deep .md-drppicker{top:auto!important;left:auto!important;margin-top:0!important}::ng-deep .md-drppicker .clear svg{margin-right:2px;margin-bottom:10px}.pop{margin-left:-22px}\n"], dependencies: [{ 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: "directive", type: i1$3.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }] }); }
1582
+ }
1583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DateRangePickerComponent, decorators: [{
1584
+ type: Component,
1585
+ args: [{ selector: 'app-date-picker', template: "<div class=\"my-3\">\n <div class=\"row\">\n <!-- start date -->\n <div class=\"col-6 col-sm-3\">\n <div class=\"\">\n <input ngxDaterangepickerMd\n class=\"form-control\"\n [(ngModel)]=\"selectedDateRange\"\n [ranges]=\"dateRanges\"\n [alwaysShowCalendars]=\"true\"\n [locale]=\"{ format: 'DD-MMM-YYYY' }\"\n [showCustomRangeLabel]=\"true\"\n [linkedCalendars]=\"true\"\n [showClearButton]=\"true\"\n (clearClicked)=\"onClearDate()\"\n placeholder=\"Select a date range (optional)\"\n opens=\"center\"\n (ngModelChange)=\"onDateRangeSelect($event)\"\n />\n </div>\n </div>\n <div class=\"col-6 col-sm-3 pop\">\n\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary ngx-daterangepicker-action\"\n (click)=\"openDatepicker()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>", styles: ["::ng-deep .md-drppicker{top:auto!important;left:auto!important;margin-top:0!important}::ng-deep .md-drppicker .clear svg{margin-right:2px;margin-bottom:10px}.pop{margin-left:-22px}\n"] }]
1586
+ }], propDecorators: { pickerDirective: [{
1587
+ type: ViewChild,
1588
+ args: [DaterangepickerDirective, { static: false }]
1589
+ }], selectedDateRange: [{
1590
+ type: Input
1591
+ }], dateRanges: [{
1592
+ type: Input
1593
+ }], dateRangeChange: [{
1594
+ type: Output
1595
+ }] } });
1596
+
1597
+ class ProfileImageCropperComponent {
1598
+ constructor(cdr) {
1599
+ this.cdr = cdr;
1600
+ this.imageChangedEvent = '';
1601
+ this.croppedImage = '';
1602
+ this.imageSelectionEvent = new EventEmitter();
1603
+ this.closeEvent = new EventEmitter();
1604
+ this.fileChangeEvent = new EventEmitter();
1605
+ this.aspectRatio = 'auto';
1606
+ this.transform = {};
1607
+ this.canvasRotation = 0;
1608
+ this.showCropper = false;
1609
+ }
1610
+ onFileChange(event) {
1611
+ const input = event.target;
1612
+ if (input.files && input.files.length > 0) {
1613
+ this.imageChangedEvent = event;
1614
+ this.fileChangeEvent.emit(input.files[0].name);
1615
+ }
1616
+ }
1617
+ imageCropped(event) {
1618
+ const reader = new FileReader();
1619
+ reader.onloadend = () => {
1620
+ this.croppedImage = reader.result;
1621
+ this.cdr.detectChanges();
1622
+ };
1623
+ reader.readAsDataURL(event.blob);
1624
+ }
1625
+ imageLoaded() {
1626
+ this.showCropper = true;
1627
+ }
1628
+ rotateLeft() {
1629
+ this.canvasRotation--;
1630
+ this.flipAfterRotate();
1631
+ }
1632
+ rotateRight() {
1633
+ this.canvasRotation++;
1634
+ this.flipAfterRotate();
1635
+ }
1636
+ flipAfterRotate() {
1637
+ const flippedH = this.transform.flipH;
1638
+ const flippedV = this.transform.flipV;
1639
+ this.transform = {
1640
+ ...this.transform,
1641
+ flipH: flippedV,
1642
+ flipV: flippedH
1643
+ };
1644
+ }
1645
+ flipHorizontal() {
1646
+ this.transform = {
1647
+ ...this.transform,
1648
+ flipH: !this.transform.flipH
1649
+ };
1650
+ }
1651
+ flipVertical() {
1652
+ this.transform = {
1653
+ ...this.transform,
1654
+ flipV: !this.transform.flipV
1655
+ };
1656
+ }
1657
+ saveProfilePicture() {
1658
+ if (this.croppedImage) {
1659
+ this.imageSelectionEvent.emit(this.croppedImage);
1660
+ this.busy = true;
1661
+ }
1662
+ }
1663
+ onCloseModal() {
1664
+ this.closeEvent.emit();
1665
+ }
1666
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1667
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: { aspectRatio: "aspectRatio", dynamicData: "dynamicData" }, outputs: { imageSelectionEvent: "imageSelectionEvent", closeEvent: "closeEvent", fileChangeEvent: "fileChangeEvent" }, ngImport: i0, template: "<section class=\"image-cropper\">\n <div class=\"row text-start\">\n <div class=\"col-12\">\n <div class=\"card-block pb-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"file-upload my-2 float-start\">\n <label for=\"custom-input\">\n Upload Pic\n <input id=\"custom-input\"\n type=\"file\"\n (change)=\"onFileChange($event)\" />\n </label>\n </div>\n\n <div class=\"float-end m-2\">\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Left\">\n <i\n class=\"fa fa-undo-alt\"\n (click)=\"rotateLeft()\"\n (keydown.enter)=\"rotateLeft()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Right\">\n <i\n class=\"fa fa-redo-alt\"\n (click)=\"rotateRight()\"\n (keydown.enter)=\"rotateRight()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Horizontal\">\n <i\n class=\"fa fa-arrows-alt-h\"\n (click)=\"flipHorizontal()\"\n (keydown.enter)=\"flipHorizontal()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Vertical\">\n <i\n class=\"fa fa-arrows-alt-v\"\n (click)=\"flipVertical()\"\n (keydown.enter)=\"flipVertical()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-8\">\n <div *ngIf=\"aspectRatio === 'auto'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [aspectRatio]=\"4 / 4\"\n [onlyScaleDown]=\"true\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'fullLogo'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"5 / 1.1\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'rectangular'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"3 / 1\"\n [onlyScaleDown]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'dynamic'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"false\"\n [resizeToWidth]=\"0\"\n [cropperStaticWidth]=\"0\"\n [cropperStaticHeight]=\"0\"\n [cropperMinWidth]=\"10\"\n [cropperMinHeight]=\"10\"\n [onlyScaleDown]=\"false\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n imageQuality=\"100\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n [style.display]=\"showCropper ? null : 'none'\">\n </image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'custom'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [aspectRatio]=\"4 / 3\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n </div>\n <div *ngIf=\"croppedImage\" class=\"col-4 mt-2\">\n <img [src]=\"croppedImage\"\n class=\"cropped-image\"\n alt=\"cropped.png\"\n width=\"128\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-end mt-2\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCloseModal()\">\n Close\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveProfilePicture()\"\n [buttonBusy]=\"busy\">\n Save\n </button>\n </div>\n </div>\n</section>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.image-cropper label{background:var(--first);border-radius:5px;color:#fff;display:table;font-size:13px;font-weight:500;padding:7px}.image-cropper input[type=file]{display:none}.cropped-image{max-height:390px!important}.card-footer{background-color:transparent;left:0}\n"], dependencies: [{ kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "cropperFrameAriaLabel", "output", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i3.LazyImgDirective, selector: "img" }] }); }
1668
+ }
1669
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperComponent, decorators: [{
1670
+ type: Component,
1671
+ args: [{ selector: 'pw-image-cropper', template: "<section class=\"image-cropper\">\n <div class=\"row text-start\">\n <div class=\"col-12\">\n <div class=\"card-block pb-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"file-upload my-2 float-start\">\n <label for=\"custom-input\">\n Upload Pic\n <input id=\"custom-input\"\n type=\"file\"\n (change)=\"onFileChange($event)\" />\n </label>\n </div>\n\n <div class=\"float-end m-2\">\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Left\">\n <i\n class=\"fa fa-undo-alt\"\n (click)=\"rotateLeft()\"\n (keydown.enter)=\"rotateLeft()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Right\">\n <i\n class=\"fa fa-redo-alt\"\n (click)=\"rotateRight()\"\n (keydown.enter)=\"rotateRight()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Horizontal\">\n <i\n class=\"fa fa-arrows-alt-h\"\n (click)=\"flipHorizontal()\"\n (keydown.enter)=\"flipHorizontal()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Vertical\">\n <i\n class=\"fa fa-arrows-alt-v\"\n (click)=\"flipVertical()\"\n (keydown.enter)=\"flipVertical()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-8\">\n <div *ngIf=\"aspectRatio === 'auto'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [aspectRatio]=\"4 / 4\"\n [onlyScaleDown]=\"true\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'fullLogo'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"5 / 1.1\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'rectangular'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"3 / 1\"\n [onlyScaleDown]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'dynamic'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"false\"\n [resizeToWidth]=\"0\"\n [cropperStaticWidth]=\"0\"\n [cropperStaticHeight]=\"0\"\n [cropperMinWidth]=\"10\"\n [cropperMinHeight]=\"10\"\n [onlyScaleDown]=\"false\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n imageQuality=\"100\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n [style.display]=\"showCropper ? null : 'none'\">\n </image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'custom'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [aspectRatio]=\"4 / 3\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n </div>\n <div *ngIf=\"croppedImage\" class=\"col-4 mt-2\">\n <img [src]=\"croppedImage\"\n class=\"cropped-image\"\n alt=\"cropped.png\"\n width=\"128\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-end mt-2\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCloseModal()\">\n Close\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveProfilePicture()\"\n [buttonBusy]=\"busy\">\n Save\n </button>\n </div>\n </div>\n</section>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.image-cropper label{background:var(--first);border-radius:5px;color:#fff;display:table;font-size:13px;font-weight:500;padding:7px}.image-cropper input[type=file]{display:none}.cropped-image{max-height:390px!important}.card-footer{background-color:transparent;left:0}\n"] }]
1672
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { imageSelectionEvent: [{
1673
+ type: Output
1674
+ }], closeEvent: [{
1675
+ type: Output
1676
+ }], fileChangeEvent: [{
1677
+ type: Output
1678
+ }], aspectRatio: [{
1679
+ type: Input
1680
+ }], dynamicData: [{
1681
+ type: Input
1682
+ }] } });
1683
+
1684
+ class CustomUploaderComponent extends AppBaseComponent {
1685
+ constructor(injector, modalService, document) {
1686
+ super(injector);
1687
+ this.modalService = modalService;
1688
+ this.document = document;
1689
+ this.saveEvent = new EventEmitter();
1690
+ this.aspectRatio = 'auto';
1691
+ this.uploadedFile = null;
1692
+ }
1693
+ deleteExistingFile() {
1694
+ HelperService.raiseDeletePopup().then(rep => {
1695
+ if (rep.value) {
1696
+ this.previewData = null;
1697
+ this.onSaveFile();
1698
+ }
1699
+ });
1700
+ }
1701
+ onSaveFile() {
1702
+ this.buttonBusy = true;
1703
+ this.saveEvent.emit({
1704
+ file: this.previewData?.url ? this.previewData : this.uploadedFile,
1705
+ name: this.controlName
1706
+ });
1707
+ }
1708
+ // modal image cropper
1709
+ onFileChange(value) {
1710
+ this.selectedFileName = value;
1711
+ }
1712
+ dataURLtoBlob(dataUrl) {
1713
+ const arr = dataUrl?.split(',');
1714
+ // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
1715
+ const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];
1716
+ const bStr = atob(arr[1]);
1717
+ let n = bStr.length;
1718
+ const u8arr = new Uint8Array(n);
1719
+ // eslint-disable-next-line no-plusplus
1720
+ while (n--) {
1721
+ u8arr[n] = bStr.charCodeAt(n);
1722
+ }
1723
+ return new Blob([u8arr], { type: mime });
1724
+ }
1725
+ onImageSelection(event) {
1726
+ const blob = this.dataURLtoBlob(event);
1727
+ const file = new File([blob], this.selectedFileName);
1728
+ this.uploadedFile = file;
1729
+ this.onSaveFile();
1730
+ }
1731
+ openModal(content) {
1732
+ this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });
1733
+ }
1734
+ clearValues() {
1735
+ this.uploadedFile = null;
1736
+ this.selectedFileName = null;
1737
+ this.updateHeight();
1738
+ }
1739
+ onClose() {
1740
+ this.modalService.dismissAll();
1741
+ }
1742
+ updateHeight() {
1743
+ // wait for update card height
1744
+ setTimeout(() => {
1745
+ this.onImgChange();
1746
+ });
1747
+ }
1748
+ onImgChange(event) {
1749
+ if (event) {
1750
+ const target = event.target;
1751
+ target.src = 'assets/img/icons/imagenotavailable.png';
1752
+ }
1753
+ const el = this.document.querySelectorAll('pw-domain-config-interface,pw-domain-config-build div[matchheight="card"]');
1754
+ el.forEach((item) => {
1755
+ HelperService.matchHeights(item, 'card');
1756
+ });
1757
+ }
1758
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CustomUploaderComponent, deps: [{ token: i0.Injector }, { token: i3$1.NgbModal }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
1759
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: CustomUploaderComponent, selector: "pw-custom-uploader", inputs: { controlName: "controlName", previewData: "previewData", aspectRatio: "aspectRatio", title: "title" }, outputs: { saveEvent: "saveEvent" }, usesInheritance: true, ngImport: i0, template: "<div class=\"card pb-2\">\n <div class=\"card-header upload-button-bar\">\n <button pButton\n type=\"button\"\n [disabled]=\"previewData?.url || uploadedFile\"\n (click)=\"openModal(content)\"\n (keydown.enter)=\"openModal(content)\"\n icon=\"pi pi-plus\"\n label=\"Choose\"></button>\n </div>\n <div class=\"card-body\">\n <!-- no files -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"!previewData?.url\">\n <div>\n <img src=\"assets/img/icons/nofilesfound.png\"\n (load)=\"onImgChange()\"\n class=\"mx-auto img-fluid\"\n alt=\"\" />\n </div>\n </div>\n <!-- existing images -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"previewData?.url\">\n <div>\n <a [href]=\"previewData?.url\"\n target=\"_blank\">\n <img [src]=\"previewData?.url\"\n alt=\"\"\n (load)=\"onImgChange()\"\n (error)=\"onImgChange($event)\"\n class=\"img-fluid\" />\n </a>\n </div>\n <div class=\"ms-3\">\n <i\n container=\"body\"\n ngbTooltip=\"Delete\"\n (click)=\"deleteExistingFile()\"\n (keydown.enter)=\"deleteExistingFile()\"\n (keydown.space)=\"deleteExistingFile()\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n </div>\n</div>\n<!-- image cropper -->\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ title }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n [aspectRatio]=\"aspectRatio\"\n (fileChangeEvent)=\"onFileChange($event)\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.upload-button-bar{background:#efefef;padding:1rem 1.25rem}.card{min-height:270px!important;max-height:550px!important;height:auto}.preview-wrapper{align-items:center;text-align:center}.preview-wrapper div{padding:1rem;flex:1 1 auto;width:25%;word-break:break-all}button[label=Choose],button[label=Choose]:hover,button[label=Choose]:enabled:active{background-color:#616161;border-color:#616161}\n"], dependencies: [{ kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i3.LazyImgDirective, selector: "img" }, { kind: "component", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
1760
+ }
1761
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CustomUploaderComponent, decorators: [{
1762
+ type: Component,
1763
+ args: [{ selector: 'pw-custom-uploader', template: "<div class=\"card pb-2\">\n <div class=\"card-header upload-button-bar\">\n <button pButton\n type=\"button\"\n [disabled]=\"previewData?.url || uploadedFile\"\n (click)=\"openModal(content)\"\n (keydown.enter)=\"openModal(content)\"\n icon=\"pi pi-plus\"\n label=\"Choose\"></button>\n </div>\n <div class=\"card-body\">\n <!-- no files -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"!previewData?.url\">\n <div>\n <img src=\"assets/img/icons/nofilesfound.png\"\n (load)=\"onImgChange()\"\n class=\"mx-auto img-fluid\"\n alt=\"\" />\n </div>\n </div>\n <!-- existing images -->\n <div class=\"d-flex preview-wrapper\"\n *ngIf=\"previewData?.url\">\n <div>\n <a [href]=\"previewData?.url\"\n target=\"_blank\">\n <img [src]=\"previewData?.url\"\n alt=\"\"\n (load)=\"onImgChange()\"\n (error)=\"onImgChange($event)\"\n class=\"img-fluid\" />\n </a>\n </div>\n <div class=\"ms-3\">\n <i\n container=\"body\"\n ngbTooltip=\"Delete\"\n (click)=\"deleteExistingFile()\"\n (keydown.enter)=\"deleteExistingFile()\"\n (keydown.space)=\"deleteExistingFile()\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n </div>\n</div>\n<!-- image cropper -->\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ title }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n [aspectRatio]=\"aspectRatio\"\n (fileChangeEvent)=\"onFileChange($event)\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.upload-button-bar{background:#efefef;padding:1rem 1.25rem}.card{min-height:270px!important;max-height:550px!important;height:auto}.preview-wrapper{align-items:center;text-align:center}.preview-wrapper div{padding:1rem;flex:1 1 auto;width:25%;word-break:break-all}button[label=Choose],button[label=Choose]:hover,button[label=Choose]:enabled:active{background-color:#616161;border-color:#616161}\n"] }]
1764
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i3$1.NgbModal }, { type: Document, decorators: [{
1765
+ type: Inject,
1766
+ args: [DOCUMENT]
1767
+ }] }], propDecorators: { saveEvent: [{
1768
+ type: Output
1769
+ }], controlName: [{
1770
+ type: Input
1771
+ }], previewData: [{
1772
+ type: Input
1773
+ }], aspectRatio: [{
1774
+ type: Input
1775
+ }], title: [{
1946
1776
  type: Input
1947
1777
  }] } });
1948
1778
 
1949
- class DateRangePickerComponent {
1950
- constructor() {
1951
- this.initialized = false;
1952
- this.dateRangeChange = new EventEmitter();
1779
+ /**
1780
+ * Lightweight module for pw-image-cropper component
1781
+ *
1782
+ * Minimal dependencies - only CommonModule, ImageCropperModule, DirectivesModule
1783
+ * Use this instead of ResourceSharedComponentsModule when you only need image cropping
1784
+ */
1785
+ class ProfileImageCropperModule {
1786
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1787
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, declarations: [ProfileImageCropperComponent, CustomUploaderComponent], imports: [CommonModule,
1788
+ CoreTranslocoModule,
1789
+ ButtonModule,
1790
+ ImageCropperModule, // for <image-cropper>
1791
+ DirectivesModule // for [buttonBusy] directive
1792
+ ], exports: [ProfileImageCropperComponent, CustomUploaderComponent] }); }
1793
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, imports: [CommonModule,
1794
+ CoreTranslocoModule,
1795
+ ButtonModule,
1796
+ ImageCropperModule, // for <image-cropper>
1797
+ DirectivesModule // for [buttonBusy] directive
1798
+ ] }); }
1799
+ }
1800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, decorators: [{
1801
+ type: NgModule,
1802
+ args: [{
1803
+ declarations: [ProfileImageCropperComponent, CustomUploaderComponent],
1804
+ imports: [
1805
+ CommonModule,
1806
+ CoreTranslocoModule,
1807
+ ButtonModule,
1808
+ ImageCropperModule, // for <image-cropper>
1809
+ DirectivesModule // for [buttonBusy] directive
1810
+ ],
1811
+ exports: [ProfileImageCropperComponent, CustomUploaderComponent]
1812
+ }]
1813
+ }] });
1814
+
1815
+ class InputContainerComponent {
1816
+ constructor(controlContainer) {
1817
+ this.controlContainer = controlContainer;
1818
+ this.required = false;
1819
+ this.errorMsg = 'An error occurred';
1820
+ this.isReadOnly = false;
1821
+ this.showTriangle = false;
1822
+ this.isLeftTooltip = false;
1953
1823
  }
1954
- onDateRangeSelect(event) {
1955
- if (event.startDate && event.endDate) {
1956
- this.dateRangeChange.emit(event);
1824
+ ngOnInit() {
1825
+ if (this.controlContainer) {
1826
+ if (this.name) {
1827
+ this.control = this.controlContainer.control.get(this.name);
1828
+ if (this.control?.validator) {
1829
+ const validator = this.control.validator({});
1830
+ if (validator?.['required']) {
1831
+ this.required = true;
1832
+ }
1833
+ }
1834
+ }
1835
+ else {
1836
+ window.console.warn('Missing FormControlName directive from host element of the component');
1837
+ }
1957
1838
  }
1958
- }
1959
- ngAfterViewInit() {
1960
- setTimeout(() => {
1961
- this.initialized = true;
1962
- });
1963
- }
1964
- onClearDate() {
1965
- if (!this.initialized) {
1966
- return;
1839
+ else {
1840
+ window.console.warn("Can't find parent FormGroup directive");
1967
1841
  }
1968
- this.dateRangeChange.emit({ startDate: null, endDate: null });
1969
- }
1970
- openDatepicker() {
1971
- setTimeout(() => {
1972
- this.pickerDirective.open();
1973
- }, 50);
1974
1842
  }
1975
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1976
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: DateRangePickerComponent, selector: "app-date-picker", inputs: { selectedDateRange: "selectedDateRange", dateRanges: "dateRanges" }, outputs: { dateRangeChange: "dateRangeChange" }, viewQueries: [{ propertyName: "pickerDirective", first: true, predicate: DaterangepickerDirective, descendants: true }], ngImport: i0, template: "<div class=\"my-3\">\n <div class=\"row\">\n <!-- start date -->\n <div class=\"col-6 col-sm-3\">\n <div class=\"\">\n <input ngxDaterangepickerMd\n class=\"form-control\"\n [(ngModel)]=\"selectedDateRange\"\n [ranges]=\"dateRanges\"\n [alwaysShowCalendars]=\"true\"\n [locale]=\"{ format: 'DD-MMM-YYYY' }\"\n [showCustomRangeLabel]=\"true\"\n [linkedCalendars]=\"true\"\n [showClearButton]=\"true\"\n (clearClicked)=\"onClearDate()\"\n placeholder=\"Select a date range (optional)\"\n opens=\"center\"\n (ngModelChange)=\"onDateRangeSelect($event)\"\n />\n </div>\n </div>\n <div class=\"col-6 col-sm-3 pop\">\n\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary ngx-daterangepicker-action\"\n (click)=\"openDatepicker()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>", styles: ["::ng-deep .md-drppicker{top:auto!important;left:auto!important;margin-top:0!important}::ng-deep .md-drppicker .clear svg{margin-right:2px;margin-bottom:10px}.pop{margin-left:-22px}\n"], dependencies: [{ kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$6.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }] }); }
1843
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InputContainerComponent, deps: [{ token: i2.ControlContainer, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
1844
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: InputContainerComponent, selector: "pw-input-container", inputs: { name: "name", label: "label", labelClass: "labelClass", tooltipPosition: "tooltipPosition", required: "required", errorMsg: "errorMsg", isReadOnly: "isReadOnly", showTooltip: "showTooltip", tooltipText: "tooltipText", showTriangle: "showTriangle", afterLabel: "afterLabel", showAfterLabel: "showAfterLabel", showTriangleText: "showTriangleText", isLeftTooltip: "isLeftTooltip" }, providers: [
1845
+ {
1846
+ provide: NG_VALUE_ACCESSOR,
1847
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
1848
+ useExisting: InputContainerComponent,
1849
+ multi: true
1850
+ }
1851
+ ], ngImport: i0, template: "<label class=\"mb-2\" for=\"Label\">\n <span [class]=\"labelClass\"\n [ngClass]=\"{ mandatory: required && !control?.disabled }\">\n {{ label }}\n </span>\n <span [ngClass]=\"{ 'left-info-circle': isLeftTooltip }\" class=\"info-circle tooltip-wrap ms-1\" *ngIf=\"showTooltip && tooltipText\">\n <span class=\"tooltiptext gradient-custom-branding\" [ngClass]=\"{ 'left-field-tooltip': isLeftTooltip }\">\n {{ tooltipText }}\n </span>\n </span>\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTriangle\"\n [pTooltip]=\"'Last month this value was set to ' + showTriangleText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n <!-- after label -->\n <span *ngIf=\"afterLabel && showAfterLabel\"\n [innerHTML]=\"afterLabel\"></span>\n <!-- after label end -->\n</label>\n\n<div class=\"mb-3\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"control?.errors\">\n <pw-field-error-display [displayError]=\"control?.invalid && control?.touched\"\n [errorMsg]=\"errorMsg | transloco\">\n </pw-field-error-display>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.mandatory:after{color:#ff586b;content:\"*\";padding-left:2px;font-size:15px}\n"], dependencies: [{ kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FieldErrorDisplayComponent, selector: "pw-field-error-display", inputs: ["errorMsg", "displayError"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
1977
1852
  }
1978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DateRangePickerComponent, decorators: [{
1853
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InputContainerComponent, decorators: [{
1979
1854
  type: Component,
1980
- args: [{ selector: 'app-date-picker', template: "<div class=\"my-3\">\n <div class=\"row\">\n <!-- start date -->\n <div class=\"col-6 col-sm-3\">\n <div class=\"\">\n <input ngxDaterangepickerMd\n class=\"form-control\"\n [(ngModel)]=\"selectedDateRange\"\n [ranges]=\"dateRanges\"\n [alwaysShowCalendars]=\"true\"\n [locale]=\"{ format: 'DD-MMM-YYYY' }\"\n [showCustomRangeLabel]=\"true\"\n [linkedCalendars]=\"true\"\n [showClearButton]=\"true\"\n (clearClicked)=\"onClearDate()\"\n placeholder=\"Select a date range (optional)\"\n opens=\"center\"\n (ngModelChange)=\"onDateRangeSelect($event)\"\n />\n </div>\n </div>\n <div class=\"col-6 col-sm-3 pop\">\n\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary ngx-daterangepicker-action\"\n (click)=\"openDatepicker()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>", styles: ["::ng-deep .md-drppicker{top:auto!important;left:auto!important;margin-top:0!important}::ng-deep .md-drppicker .clear svg{margin-right:2px;margin-bottom:10px}.pop{margin-left:-22px}\n"] }]
1981
- }], propDecorators: { pickerDirective: [{
1982
- type: ViewChild,
1983
- args: [DaterangepickerDirective, { static: false }]
1984
- }], selectedDateRange: [{
1855
+ args: [{ selector: 'pw-input-container', providers: [
1856
+ {
1857
+ provide: NG_VALUE_ACCESSOR,
1858
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
1859
+ useExisting: InputContainerComponent,
1860
+ multi: true
1861
+ }
1862
+ ], template: "<label class=\"mb-2\" for=\"Label\">\n <span [class]=\"labelClass\"\n [ngClass]=\"{ mandatory: required && !control?.disabled }\">\n {{ label }}\n </span>\n <span [ngClass]=\"{ 'left-info-circle': isLeftTooltip }\" class=\"info-circle tooltip-wrap ms-1\" *ngIf=\"showTooltip && tooltipText\">\n <span class=\"tooltiptext gradient-custom-branding\" [ngClass]=\"{ 'left-field-tooltip': isLeftTooltip }\">\n {{ tooltipText }}\n </span>\n </span>\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTriangle\"\n [pTooltip]=\"'Last month this value was set to ' + showTriangleText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n <!-- after label -->\n <span *ngIf=\"afterLabel && showAfterLabel\"\n [innerHTML]=\"afterLabel\"></span>\n <!-- after label end -->\n</label>\n\n<div class=\"mb-3\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"control?.errors\">\n <pw-field-error-display [displayError]=\"control?.invalid && control?.touched\"\n [errorMsg]=\"errorMsg | transloco\">\n </pw-field-error-display>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.mandatory:after{color:#ff586b;content:\"*\";padding-left:2px;font-size:15px}\n"] }]
1863
+ }], ctorParameters: () => [{ type: i2.ControlContainer, decorators: [{
1864
+ type: Optional
1865
+ }, {
1866
+ type: Host
1867
+ }, {
1868
+ type: SkipSelf
1869
+ }] }], propDecorators: { name: [{
1985
1870
  type: Input
1986
- }], dateRanges: [{
1871
+ }], label: [{
1872
+ type: Input
1873
+ }], labelClass: [{
1874
+ type: Input
1875
+ }], tooltipPosition: [{
1876
+ type: Input
1877
+ }], required: [{
1878
+ type: Input
1879
+ }], errorMsg: [{
1880
+ type: Input
1881
+ }], isReadOnly: [{
1882
+ type: Input
1883
+ }], showTooltip: [{
1884
+ type: Input
1885
+ }], tooltipText: [{
1886
+ type: Input
1887
+ }], showTriangle: [{
1888
+ type: Input
1889
+ }], afterLabel: [{
1890
+ type: Input
1891
+ }], showAfterLabel: [{
1892
+ type: Input
1893
+ }], showTriangleText: [{
1894
+ type: Input
1895
+ }], isLeftTooltip: [{
1987
1896
  type: Input
1988
- }], dateRangeChange: [{
1989
- type: Output
1990
1897
  }] } });
1991
1898
 
1992
- var dateRangePicker_component = /*#__PURE__*/Object.freeze({
1993
- __proto__: null,
1994
- DateRangePickerComponent: DateRangePickerComponent
1995
- });
1996
-
1997
1899
  class ResourceHeaderComponent extends AppBaseComponent {
1998
1900
  constructor(injector, document, adminService, modalService) {
1999
1901
  super(injector);
@@ -2002,6 +1904,7 @@ class ResourceHeaderComponent extends AppBaseComponent {
2002
1904
  this.modalService = modalService;
2003
1905
  this.isScrolled = false;
2004
1906
  this.open = false;
1907
+ this.logo = '/assets/img/landing-page/site-logo.png'; // Static fallback for LCP optimization
2005
1908
  this.navbarItems = this.appConfig?.pages_config?.navbar?.items;
2006
1909
  this.domainId = this.appConfig?.domain_id;
2007
1910
  this.contrastImageUrl = this.appConfig?.company?.logos?.main_contrast?.url;
@@ -2012,10 +1915,18 @@ class ResourceHeaderComponent extends AppBaseComponent {
2012
1915
  this.canEditResourcesValue = false;
2013
1916
  }
2014
1917
  ngOnInit() {
2015
- const isAboutUs = this.router.url?.includes('/about-us');
2016
- this.logo = isAboutUs
2017
- ? this.appConfig?.company?.logos?.main_contrast?.url
2018
- : this.appConfig?.company?.logos?.main_dark?.url;
1918
+ console.log('In Header');
1919
+ // Subscribe to appConfig changes to update logo dynamically
1920
+ this.appConfigService.appConfig$.subscribe(config => {
1921
+ if (config?.company?.logos) {
1922
+ const isAboutUs = this.router.url?.includes('/about-us');
1923
+ const logos = config.company.logos;
1924
+ // Use smaller version for better performance (100x100 instead of 1200x264)
1925
+ this.logo = isAboutUs
1926
+ ? logos.main_contrast?.url || '/assets/img/landing-page/site-logo.png'
1927
+ : logos.main_dark?.url || '/assets/img/landing-page/site-logo.png';
1928
+ }
1929
+ });
2019
1930
  if (this.userLoggedIn) {
2020
1931
  this.localStorage.getItem$('product').subscribe(res => {
2021
1932
  const data = res ? JSON.parse(res) : null;
@@ -2064,7 +1975,15 @@ class ResourceHeaderComponent extends AppBaseComponent {
2064
1975
  const shouldScroll = window.scrollY > 150;
2065
1976
  this.isScrolled = shouldScroll;
2066
1977
  if (!isAboutUs) {
2067
- const newLogo = shouldScroll ? this.contrastImageUrl : this.darkImageUrl;
1978
+ // Use smaller versions for better performance
1979
+ const logos = this.appConfig?.company?.logos;
1980
+ const newLogo = shouldScroll
1981
+ ? logos?.main_contrast?.url ??
1982
+ this.contrastImageUrl ??
1983
+ '/assets/img/landing-page/site-logo.png'
1984
+ : logos?.main_dark?.url ??
1985
+ this.darkImageUrl ??
1986
+ '/assets/img/landing-page/site-logo.png';
2068
1987
  if (this.logo !== newLogo) {
2069
1988
  this.logo = newLogo;
2070
1989
  }
@@ -2168,16 +2087,19 @@ class ResourceHeaderComponent extends AppBaseComponent {
2168
2087
  canEditResources() {
2169
2088
  return this.canEditResourcesValue;
2170
2089
  }
2171
- 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$3.AdminService }, { token: i2$1.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
2172
- 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 cloudolive-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]=\"logo\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\" />\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 *ngIf=\"logo\">\n <img [src]=\"logo\"\n (load)=\"logoLoaded = true\"\n (error)=\"logoLoaded = false\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\" />\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 <button class=\"sign-btn sign-header-btn\"\n routerLink=\"/login\">Log In</button>\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 <button class=\"sign-btn sign-header-btn\"\n routerLink=\"/login\">Log In</button>\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: ["@import\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap\";:root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}*{font-family:Montserrat,sans-serif}h2{font-size:32px;font-weight:700;letter-spacing:.03em;line-height:1.1em;text-transform:uppercase}@media (max-width: 1200px){.container-wrapper{padding:0 3rem!important}}.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}.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: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.LazyImgDirective, selector: "img" }, { kind: "directive", type: i2$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.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: i5.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: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { 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: "component", type: CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }] }); }
2090
+ navigateToLogin() {
2091
+ window.location.href = '/login';
2092
+ }
2093
+ 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$2.AdminService }, { token: i3$1.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
2094
+ 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$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "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: i3.LazyImgDirective, selector: "img" }, { kind: "component", type: CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }] }); }
2173
2095
  }
2174
2096
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderComponent, decorators: [{
2175
2097
  type: Component,
2176
- args: [{ selector: 'pw-resource-header', template: "<nav class=\"navbar navbar-expand-md navbar-dark fixed-top cloudolive-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]=\"logo\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\" />\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 *ngIf=\"logo\">\n <img [src]=\"logo\"\n (load)=\"logoLoaded = true\"\n (error)=\"logoLoaded = false\"\n routerLink=\"/\"\n alt=\"logo\"\n class=\"img-fluid logo_img\" />\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 <button class=\"sign-btn sign-header-btn\"\n routerLink=\"/login\">Log In</button>\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 <button class=\"sign-btn sign-header-btn\"\n routerLink=\"/login\">Log In</button>\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: ["@import\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap\";:root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}*{font-family:Montserrat,sans-serif}h2{font-size:32px;font-weight:700;letter-spacing:.03em;line-height:1.1em;text-transform:uppercase}@media (max-width: 1200px){.container-wrapper{padding:0 3rem!important}}.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}.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"] }]
2098
+ 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"] }]
2177
2099
  }], ctorParameters: () => [{ type: i0.Injector }, { type: Document, decorators: [{
2178
2100
  type: Inject,
2179
2101
  args: [DOCUMENT]
2180
- }] }, { type: i1$3.AdminService }, { type: i2$1.NgbModal }], propDecorators: { navbarCollapse: [{
2102
+ }] }, { type: i1$2.AdminService }, { type: i3$1.NgbModal }], propDecorators: { navbarCollapse: [{
2181
2103
  type: ViewChild,
2182
2104
  args: ['collapsibleNavbar']
2183
2105
  }], editNavbarModal: [{
@@ -2198,9 +2120,139 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
2198
2120
  args: ['document:click', ['$event']]
2199
2121
  }] } });
2200
2122
 
2123
+ class ResourceHeaderModule {
2124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2125
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, declarations: [ResourceHeaderComponent], imports: [CommonModule,
2126
+ FormsModule,
2127
+ RouterModule,
2128
+ DragDropModule,
2129
+ NgbModalModule,
2130
+ NgbTooltipModule,
2131
+ CoreTranslocoModule,
2132
+ DirectivesModule,
2133
+ PipesModule,
2134
+ AdminModuleUtilsModule,
2135
+ ProfileImageCropperModule], exports: [ResourceHeaderComponent] }); }
2136
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, imports: [CommonModule,
2137
+ FormsModule,
2138
+ RouterModule,
2139
+ DragDropModule,
2140
+ NgbModalModule,
2141
+ NgbTooltipModule,
2142
+ CoreTranslocoModule,
2143
+ DirectivesModule,
2144
+ PipesModule,
2145
+ AdminModuleUtilsModule,
2146
+ ProfileImageCropperModule] }); }
2147
+ }
2148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHeaderModule, decorators: [{
2149
+ type: NgModule,
2150
+ args: [{
2151
+ declarations: [ResourceHeaderComponent],
2152
+ imports: [
2153
+ CommonModule,
2154
+ FormsModule,
2155
+ RouterModule,
2156
+ DragDropModule,
2157
+ NgbModalModule,
2158
+ NgbTooltipModule,
2159
+ CoreTranslocoModule,
2160
+ DirectivesModule,
2161
+ PipesModule,
2162
+ AdminModuleUtilsModule,
2163
+ ProfileImageCropperModule
2164
+ ],
2165
+ exports: [ResourceHeaderComponent]
2166
+ }]
2167
+ }] });
2168
+
2169
+ class ResourceSharedComponentsModule {
2170
+ constructor() {
2171
+ console.log('🚀 RESOURCE SHARED COMPONENTS MODULE LOADED! - Minimal shared components for resource module');
2172
+ }
2173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceSharedComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2174
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ResourceSharedComponentsModule, declarations: [NoDataComponent, InputContainerComponent], imports: [CommonModule,
2175
+ FormsModule,
2176
+ ReactiveFormsModule,
2177
+ AppLoaderModule,
2178
+ CoreTranslocoModule,
2179
+ DirectivesModule,
2180
+ ButtonModule,
2181
+ NgbTooltipModule,
2182
+ ProgressSpinnerModule,
2183
+ AutoCompleteModule,
2184
+ DragDropModule,
2185
+ FieldErrorDisplayModule,
2186
+ ProfileImageCropperModule, // ✅ Import the separate module
2187
+ ResourceHeaderModule // ✅ Import the separate module
2188
+ ], exports: [ProfileImageCropperModule, // ✅ Re-export module for backward compatibility
2189
+ ResourceHeaderModule, // ✅ Re-export module for backward compatibility
2190
+ InputContainerComponent,
2191
+ NoDataComponent,
2192
+ ButtonModule,
2193
+ DragDropModule,
2194
+ ProgressSpinnerModule,
2195
+ AutoCompleteModule,
2196
+ FieldErrorDisplayModule] }); }
2197
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceSharedComponentsModule, imports: [CommonModule,
2198
+ FormsModule,
2199
+ ReactiveFormsModule,
2200
+ AppLoaderModule,
2201
+ CoreTranslocoModule,
2202
+ DirectivesModule,
2203
+ ButtonModule,
2204
+ NgbTooltipModule,
2205
+ ProgressSpinnerModule,
2206
+ AutoCompleteModule,
2207
+ DragDropModule,
2208
+ FieldErrorDisplayModule,
2209
+ ProfileImageCropperModule, // ✅ Import the separate module
2210
+ ResourceHeaderModule // ✅ Import the separate module
2211
+ , ProfileImageCropperModule, // ✅ Re-export module for backward compatibility
2212
+ ResourceHeaderModule,
2213
+ ButtonModule,
2214
+ DragDropModule,
2215
+ ProgressSpinnerModule,
2216
+ AutoCompleteModule,
2217
+ FieldErrorDisplayModule] }); }
2218
+ }
2219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceSharedComponentsModule, decorators: [{
2220
+ type: NgModule,
2221
+ args: [{
2222
+ declarations: [NoDataComponent, InputContainerComponent],
2223
+ imports: [
2224
+ CommonModule,
2225
+ FormsModule,
2226
+ ReactiveFormsModule,
2227
+ AppLoaderModule,
2228
+ CoreTranslocoModule,
2229
+ DirectivesModule,
2230
+ ButtonModule,
2231
+ NgbTooltipModule,
2232
+ ProgressSpinnerModule,
2233
+ AutoCompleteModule,
2234
+ DragDropModule,
2235
+ FieldErrorDisplayModule,
2236
+ ProfileImageCropperModule, // ✅ Import the separate module
2237
+ ResourceHeaderModule // ✅ Import the separate module
2238
+ ],
2239
+ exports: [
2240
+ ProfileImageCropperModule, // ✅ Re-export module for backward compatibility
2241
+ ResourceHeaderModule, // ✅ Re-export module for backward compatibility
2242
+ InputContainerComponent,
2243
+ NoDataComponent,
2244
+ ButtonModule,
2245
+ DragDropModule,
2246
+ ProgressSpinnerModule,
2247
+ AutoCompleteModule,
2248
+ FieldErrorDisplayModule
2249
+ ]
2250
+ }]
2251
+ }], ctorParameters: () => [] });
2252
+
2201
2253
  class SplashComponent {
2202
2254
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2203
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SplashComponent, selector: "ng-component", ngImport: i0, template: "<pw-loader [isVisible]=\"true\"></pw-loader>\n", dependencies: [{ kind: "component", type: i1$5.AppLoaderComponent, selector: "pw-loader", inputs: ["isVisible", "closeOnOutsideClick", "autoCloseTimeOut"] }] }); }
2255
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SplashComponent, selector: "ng-component", ngImport: i0, template: "<pw-loader [isVisible]=\"true\"></pw-loader>\n", dependencies: [{ kind: "component", type: i1$4.AppLoaderComponent, selector: "pw-loader", inputs: ["isVisible", "closeOnOutsideClick", "autoCloseTimeOut"] }] }); }
2204
2256
  }
2205
2257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SplashComponent, decorators: [{
2206
2258
  type: Component,
@@ -2223,148 +2275,145 @@ class TermsConditionsComponent {
2223
2275
  this.company_city_code = config?.['company'].city_code;
2224
2276
  });
2225
2277
  }
2226
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TermsConditionsComponent, deps: [{ token: i1$6.AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
2227
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TermsConditionsComponent, selector: "pw-terms-conditions", inputs: { isPublic: "isPublic" }, ngImport: i0, template: "<ng-container *ngIf=\"isPublic\">\n <pw-landing-page-header [landing]=\"false\"></pw-landing-page-header>\n</ng-container>\n\n<div class=\"container pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h1>POSIWISE TERMS AND CONDITIONS</h1>\n <p>Last updated 26/10/2019</p>\n <h2>AGREEMENT TO TERMS</h2>\n <div class=\"clearfix\"></div>\n <p>\n These Terms of Use constitute a legally binding agreement made between\n you, whether personally or on behalf of an entity (\u201Cyou\u201D) and\n {{ company_name }}, {{ company_street }}, {{ company_city_code }}\n {{ company_city }}\n - {{ company_state }}, {{ company_number }} (\u201Cwe,\u201D \u201Cus\u201D or \u201Cour\u201D),\n concerning your access to and use of the {{ company_state }} website as\n well as any other media form, media channel, mobile website or mobile\n application related, linked, or otherwise connected thereto\n (collectively, the \u201CSite\u201D).\n </p>\n <p>\n You agree that by accessing the Site, you have read, understood, and\n agree to be bound by all of these Terms of Use. If you do not agree with\n all of these Terms of Use, then you are expressly prohibited from using\n the Site and you must discontinue use immediately.\n </p>\n <p>\n Supplemental terms and conditions or documents that may be posted on the\n Site from time to time are hereby expressly incorporated herein by\n reference. We reserve the right, in our sole discretion, to make changes\n or modifications to these Terms of Use at any time and for any reason.\n </p>\n <p>\n We will alert you about any changes by updating the \u201CLast updated\u201D date\n of these Terms of Use, and you waive any right to receive specific\n notice of each such change.\n </p>\n <p>\n It is your responsibility to periodically review these Terms of Use to\n stay informed of updates. You will be subject to, and will be deemed to\n have been made aware of and to have accepted, the changes in any revised\n Terms of Use by your continued use of the Site after the date such\n revised Terms of Use are posted.\n </p>\n <p>\n The information provided on the Site is not intended for distribution to\n or use by any person or entity in any jurisdiction or country where such\n distribution or use would be contrary to law or regulation or which\n would subject us to any registration requirement within such\n jurisdiction or country.\n </p>\n <p>\n Accordingly, those persons who choose to access the Site from other\n locations do so on their own initiative and are solely responsible for\n compliance with local laws, if and to the extent local laws are\n applicable.\n </p>\n <p>\n The Site is intended for users who are at least 13 years of age. All\n users who are minors in the jurisdiction in which they reside (generally\n under the age of 18) must have the permission of, and be directly\n supervised by, their parent or guardian to use the Site. If you are a\n minor, you must have your parent or guardian read and agree to these\n Terms of Use prior to you using the Site.\n </p>\n <h2>INTELLECTUAL PROPERTY RIGHTS</h2>\n <p>\n Unless otherwise indicated, the Site is our proprietary property and all\n source code, databases, functionality, software, website designs, audio,\n video, text, photographs, and graphics on the Site (collectively, the\n \u201CContent\u201D) and the trademarks, service marks, and logos contained\n therein (the \u201CMarks\u201D) are owned or controlled by us or licensed to us,\n and are protected by copyright and trademark laws and various other\n intellectual property rights and unfair competition laws of the United\n States, foreign jurisdictions, and international conventions.\n </p>\n <p>\n The Content and the Marks are provided on the Site \u201CAS IS\u201D for your\n information and personal use only. Except as expressly provided in these\n Terms of Use, no part of the Site and no Content or Marks may be copied,\n reproduced, aggregated, republished, uploaded, posted, publicly\n displayed, encoded, translated, transmitted, distributed, sold,\n licensed, or otherwise exploited for any commercial purpose whatsoever,\n without our express prior written permission.\n </p>\n <p>\n Provided that you are eligible to use the Site, you are granted a\n limited license to access and use the Site and to download or print a\n copy of any portion of the Content to which you have properly gained\n access solely for your personal, non-commercial use. We reserve all\n rights not expressly granted to you in and to the Site, the Content and\n the Marks.\n </p>\n <h1>USER REPRESENTATIONS</h1>\n <p>By using the Site, you represent and warrant that:</p>\n <ol>\n <li>\n <p class=\"m-0\">\n all registration information you submit will be true, accurate,\n current, and complete.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will maintain the accuracy of such information and promptly\n update such registration information as necessary.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you have the legal capacity and you agree to comply with these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">you are not under the age of 13.</p>\n </li>\n <li>\n <p class=\"m-0\">\n not a minor in the jurisdiction in which you reside, or if a\n minor, you have received parental permission to use the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will not access the Site through automated or non-human\n means, whether through a bot, script, or otherwise.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will not use the Site for any illegal or unauthorized\n purpose.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your use of the Site will not violate any applicable law or\n regulation.\n </p>\n </li>\n </ol>\n <p>\n If you provide any information that is untrue, inaccurate, not current,\n or incomplete, we have the right to suspend or terminate your account\n and refuse any and all current or future use of the Site (or any portion\n thereof).\n </p>\n <h2>USER REGISTRATION</h2>\n <p>\n You may be required to register with the Site. You agree to keep your\n password confidential and will be responsible for all use of your\n account and password. We reserve the right to remove, reclaim, or change\n a username you select if we determine, in our sole discretion, that such\n username is inappropriate, obscene, or otherwise objectionable.\n </p>\n <h2>PROHIBITED ACTIVITIES</h2>\n <p>\n You may not access or use the Site for any purpose other than that for\n which we make the Site available. The Site may not be used in connection\n with any commercial endeavors except those that are specifically\n endorsed or approved by us.\n </p>\n <p>As a user of the Site, you agree not to:</p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n systematically retrieve data or other content from the Site to\n create or compile, directly or indirectly, a collection,\n compilation, database, or directory without written permission\n from us.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n make any unauthorized use of the Site, including collecting\n usernames and/or email addresses of users by electronic or other\n means for the purpose of sending unsolicited email, or creating\n user accounts by automated means or under false pretenses.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use a buying agent or purchasing agent to make purchases on the\n Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site to advertise or offer to sell goods and services.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n circumvent, disable, or otherwise interfere with\n security-related features of the Site, including features that\n prevent or restrict the use or copying of any Content or enforce\n limitations on the use of the Site and/or the Content contained\n therein.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n engage in unauthorized framing of or linking to the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n trick, defraud, or mislead us and other users, especially in any\n attempt to learn sensitive account information such as user\n passwords\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n make improper use of our support services or submit false\n reports of abuse or misconduct.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n engage in any automated use of the system, such as using scripts\n to send comments or messages, or using any data mining, robots,\n or similar data gathering and extraction tools.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n interfere with, disrupt, or create an undue burden on the Site\n or the networks or services connected to the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n attempt to impersonate another user or person or use the\n username of another user.\n </p>\n </li>\n <li>\n <p class=\"m-0\">sell or otherwise transfer your profile.</p>\n </li>\n <li>\n <p class=\"m-0\">\n use any information obtained from the Site in order to harass,\n abuse, or harm another person.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site as part of any effort to compete with us or\n otherwise use the Site and/or the Content for any\n revenue-generating endeavor or commercial enterprise.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n decipher, decompile, disassemble, or reverse engineer any of the\n software comprising or in any way making up a part of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n attempt to bypass any measures of the Site designed to prevent\n or restrict access to the Site, or any portion of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n harass, annoy, intimidate, or threaten any of our employees or\n agents engaged in providing any portion of the Site to you.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n delete the copyright or other proprietary rights notice from any\n Content.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n copy or adapt the Site\u2019s software, including but not limited to\n Flash, PHP, HTML, JavaScript, or other code.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n upload or transmit (or attempt to upload or to transmit)\n viruses, Trojan horses, or other material, including excessive\n use of capital letters and spamming (continuous posting of\n repetitive text), that interferes with any party\u2019s uninterrupted\n use and enjoyment of the Site or modifies, impairs, disrupts,\n alters, or interferes with the use, features, functions,\n operation, or maintenance of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n upload or transmit (or attempt to upload or to transmit) any\n material that acts as a passive or active information collection\n or transmission mechanism, including without limitation, clear\n graphics interchange formats (\u201Cgifs\u201D), 1\u00D71 pixels, web bugs,\n cookies, or other similar devices (sometimes referred to as\n \u201Cspyware\u201D or \u201Cpassive collection mechanisms\u201D or \u201Cpcms\u201D).\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n except as may be the result of standard search engine or\n Internet browser usage, use, launch, develop, or distribute any\n automated system, including without limitation, any spider,\n robot, cheat utility, scraper, or offline reader that accesses\n the Site, or using or launching any unauthorized script or other\n software.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n disparage, tarnish, or otherwise harm, in our opinion, us and/or\n the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site in a manner inconsistent with any applicable laws\n or regulations.\n </p>\n </li>\n </ol>\n\n <h2>USER GENERATED CONTRIBUTIONS</h2>\n\n <p>\n The Site may invite you to chat, contribute to, or participate in blogs,\n message boards, online forums, and other functionality, and may provide\n you with the opportunity to create, submit, post, display, transmit,\n perform, publish, distribute, or broadcast content and materials to us\n or on the Site, including but not limited to text, writings, video,\n audio, photographs, graphics, comments, suggestions, or personal\n information or other material (collectively, \"Contributions\").\n </p>\n <p>\n Contributions may be viewable by other users of the Site and through\n third-party websites. As such, any Contributions you transmit may be\n treated as non-confidential and non-proprietary. When you create or make\n available any Contributions, you thereby represent and warrant that:\n </p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n the creation, distribution, transmission, public display, or\n performance, and the accessing, downloading, or copying of your\n Contributions do not and will not infringe the proprietary\n rights, including but not limited to the copyright, patent,\n trademark, trade secret, or moral rights of any third party.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you are the creator and owner of or have the necessary licenses,\n rights, consents, releases, and permissions to use and to\n authorize us, the Site, and other users of the Site to use your\n Contributions in any manner contemplated by the Site and these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you have the written consent, release, and/or permission of each\n and every identifiable individual person in your Contributions\n to use the name or likeness of each and every such identifiable\n individual person to enable inclusion and use of your\n Contributions in any manner contemplated by the Site and these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not false, inaccurate, or misleading.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not unsolicited or unauthorized\n advertising, promotional materials, pyramid schemes, chain\n letters, spam, mass mailings, or other forms of solicitation.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not obscene, lewd, lascivious, filthy,\n violent, harassing, libelous, slanderous, or otherwise\n objectionable (as determined by us).\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not ridicule, mock, disparage, intimidate,\n or abuse anyone.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not advocate the violent overthrow of any\n government or incite, encourage, or threaten physical harm\n against another.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate any applicable law,\n regulation, or rule.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate the privacy or publicity\n rights of any third party.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not contain any material that solicits\n personal information from anyone under the age of 18 or exploits\n people under the age of 18 in a sexual or violent manner.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate any federal or state law\n concerning child pornography, or otherwise intended to protect\n the health or well-being of minors.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not include any offensive comments that\n are connected to race, national origin, gender, sexual\n preference, or physical handicap.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not otherwise violate, or link to material\n that violates, any provision of these Terms of Use, or any\n applicable law or regulation.\n </p>\n </li>\n </ol>\n <p>\n Any use of the Site in violation of the foregoing violates these Terms\n of Use and may result in, among other things, termination or suspension\n of your rights to use the Site.\n </p>\n\n <h2>CONTRIBUTION LICENSE</h2>\n\n <p>\n By posting your Contributions to any part of the Site, or making\n Contributions accessible to the Site by linking your account from the\n Site to any of your social networking accounts, you automatically grant,\n and you represent and warrant that you have the right to grant, to us an\n unrestricted, unlimited, irrevocable, perpetual, non-exclusive,\n transferable, royalty-free, fully-paid, worldwide right, and license to\n host, use, copy, reproduce, disclose, sell, resell, publish, broadcast,\n re title, archive, store, cache, publicly perform, publicly display,\n reformat, translate, transmit, excerpt (in whole or in part), and\n distribute such Contributions (including, without limitation, your image\n and voice) for any purpose, commercial, advertising, or otherwise, and\n to prepare derivative works of, or incorporate into other works, such\n Contributions, and grant and authorize sublicense of the foregoing. The\n use and distribution may occur in any media formats and through any\n media channels.\n </p>\n <p>\n This license will apply to any form, media, or technology now known or\n hereafter developed, and includes our use of your name, company name,\n and franchise name, as applicable, and any of the trademarks, service\n marks, trade names, logos, and personal and commercial images you\n provide. You waive all moral rights in your Contributions, and you\n warrant that moral rights have not otherwise been asserted in your\n Contributions.\n </p>\n <p>\n We do not assert any ownership over your Contributions. You retain full\n ownership of all of your Contributions and any intellectual property\n rights or other proprietary rights associated with your Contributions.\n We are not liable for any statements or representations in your\n Contributions provided by you in any area on the Site.\n </p>\n <p>\n You are solely responsible for your Contributions to the Site and you\n expressly agree to exonerate us from any and all responsibility and to\n refrain from any legal action against us regarding your Contributions.\n </p>\n <p>\n We have the right, in our sole and absolute discretion, (1) to edit,\n redact, or otherwise change any Contributions; (2) to re-categorize any\n Contributions to place them in more appropriate locations on the Site;\n and (3) to pre-screen or delete any Contributions at any time and for\n any reason, without notice. We have no obligation to monitor your\n Contributions.\n </p>\n <h2>GUIDELINES FOR REVIEWS</h2>\n <ol>\n <li>\n <p class=\"m-0\">\n We may provide you areas on the Site to leave reviews or\n ratings. When posting a review, you must comply with the\n following criteria:\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should have firsthand experience with the person/entity\n being reviewed.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain offensive profanity, or abusive,\n racist, offensive, or hate language.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain discriminatory references based\n on religion, race, gender, national origin, age, marital status,\n sexual orientation, or disability.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain references to illegal activity.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should not be affiliated with competitors if posting\n negative reviews.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should not make any conclusions as to the legality of\n conduct.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you may not post any false or misleading statements.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you may not organize a campaign encouraging others to post\n reviews, whether positive or negative.\n </p>\n </li>\n </ol>\n <p>\n We may accept, reject, or remove reviews in our sole discretion. We have\n absolutely no obligation to screen reviews or to delete reviews, even if\n anyone considers reviews objectionable or inaccurate. Reviews are not\n endorsed by us, and do not necessarily represent our opinions or the\n views of any of our affiliates or partners.\n </p>\n <p>\n We do not assume liability for any review or for any claims,\n liabilities, or losses resulting from any review. By posting a review,\n you hereby grant to us a perpetual, non-exclusive, worldwide,\n royalty-free, fully-paid, assignable, and sub-licensable right and\n license to reproduce, modify, translate, transmit by any means, display,\n perform, and/or distribute all content relating to reviews.\n </p>\n <h2>MOBILE APPLICATION LICENSE</h2>\n <h3>Use License</h3>\n\n <p>\n If you access the Site via a mobile application, then we grant you a\n revocable, non-exclusive, non-transferable, limited right to install and\n use the mobile application on wireless electronic devices owned or\n controlled by you, and to access and use the mobile application on such\n devices strictly in accordance with the terms and conditions of this\n mobile application license contained in these Terms of Use.\n </p>\n <p>Use License</p>\n <p>\n (1) decompile, reverse engineer, disassemble, attempt to derive the\n source code of, or decrypt the application.\n </p>\n <p>\n (2) make any modification, adaptation, improvement, enhancement,\n translation, or derivative work from the application.\n </p>\n <p>\n (3) violate any applicable laws, rules, or regulations in connection\n with your access or use of the application.\n </p>\n <p>\n (4) remove, alter, or obscure any proprietary notice (including any\n notice of copyright or trademark) posted by us or the licensors of the\n application.\n </p>\n <p>\n (5) use the application for any revenue generating endeavor, commercial\n enterprise, or other purpose for which it is not designed or intended.\n </p>\n <p>\n (6) make the application available over a network or other environment\n permitting access or use by multiple devices or users at the same .\n </p>\n <p>\n (7) use the application for creating a product, service, or software\n that is, directly or indirectly, competitive with or in any way a\n substitute for the application.\n </p>\n <p>\n (8) use the application to send automated queries to any website or to\n send any unsolicited commercial e-mail.\n </p>\n <p>\n (9) use any proprietary information or any of our interfaces or our\n other intellectual property in the design, development, manufacture,\n licensing, or distribution of any applications, accessories, or devices\n for use with the application.\n </p>\n <h3>Apple and Android Devices</h3>\n <p>\n The following terms apply when you use a mobile application obtained\n from either the Apple Store or Google Play (each an \u201CApp Distributor\u201D)\n to access the Site:\n </p>\n <p>\n (1) the license granted to you for our mobile application is limited to\n a non-transferable license to use the application on a device that\n utilizes the Apple iOS or Android operating systems, as applicable, and\n in accordance with the usage rules set forth in the applicable\n Distributor\u2019s terms of service\n </p>\n <p>\n (2) we are responsible for providing any maintenance and support\n services with respect to the mobile application as specified in the\n terms and conditions of this mobile application contained in these Terms\n of Use or as otherwise required under applicable law, and you\n acknowledge that each App Distributor has no obligation whatsoever to\n furnish any maintenance and support services with respect to the mobile\n application.\n </p>\n <p>\n (3) in the event of any failure of the mobile application to conform to\n any applicable warranty, you may notify the applicable App Distributor,\n and the App Distributor, in accordance with its terms and policies, may\n refund the purchase price, if any, paid for the mobile application, and\n to the maximum extent permitted by applicable law, the App Distributor\n will have no other warranty obligation whatsoever with respect to the\n mobile application.\n </p>\n <p>\n (4) you represent and warrant that (i) you are not located in a country\n that is subject to a U.S. government embargo, or that has been\n designated by the U.S. government as a \u201Cterrorist supporting\u201D country\n and (ii) you are not listed on any U.S. government list of prohibited or\n restricted parties.\n </p>\n <p>\n (5) you must comply with applicable third-party terms of agreement when\n using the mobile application, e.g., if you have a VoIP application, then\n you must not be in violation of their wireless data service agreement\n when using the mobile application.\n </p>\n <p>\n (6) you acknowledge and agree that the App Distributors are third-party\n beneficiaries of the terms and conditions in this mobile application\n license contained in these Terms of Use, and that each App Distributor\n will have the right (and will be deemed to have accepted the right) to\n enforce the terms and conditions in this mobile application license\n contained in these Terms of Use against you as a third-party beneficiary\n thereof.\n </p>\n <h2>SOCIAL MEDIA</h2>\n <p>\n As part of the functionality of the Site, you may link your account with\n online accounts you have with third-party service providers (each such\n account, a \u201CThird-Party Account\u201D) by either:\n </p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n providing your Third-Party Account login information through the\n Site; or\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n allowing us to access your Third-Party Account, as is permitted\n under the applicable terms and conditions that govern your use\n of each Third-Party Account.\n </p>\n </li>\n </ol>\n\n <p>\n You represent and warrant that you are entitled to disclose your\n Third-Party Account login information to us and/or grant us access to\n your Third-Party Account, without breach by you of any of the terms and\n conditions that govern your use of the applicable Third-Party Account,\n and without obligating us to pay any fees or making us subject to any\n usage limitations imposed by the third-party service provider of the\n Third-Party Account.\n </p>\n <p>\n By granting us access to any Third-Party Accounts, you understand that\n (1) we may access, make available, and store (if applicable) any content\n that you have provided to and stored in your Third-Party Account (the\n \u201CSocial Network Content\u201D) so that it is available on and through the\n Site via your account, including without limitation any friend lists and\n (2) we may submit to and receive from your Third-Party Account\n additional information to the extent you are notified when you link your\n account with the Third-Party Account.\n </p>\n <p>\n Depending on the Third-Party Accounts you choose and subject to the\n privacy settings that you have set in such Third-Party Accounts,\n personally identifiable information that you post to your Third-Party\n Accounts may be available on and through your account on the Site.\n </p>\n <p>\n Please note that if a Third-Party Account or associated service becomes\n unavailable or our access to such Third-Party Account is terminated by\n the third-party service provider, then Social Network Content may no\n longer be available on and through the Site. You will have the ability\n to disable the connection between your account on the Site and your\n Third-Party Accounts at any time.\n </p>\n\n <p>\n PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE\n PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY\n BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS.\n </p>\n <p>\n We make no effort to review any Social Network Content for any purpose,\n including but not limited to, for accuracy, legality, or\n non-infringement, and we are not responsible for any Social Network\n Content.\n </p>\n <p>\n You acknowledge and agree that we may access your email address book\n associated with a Third-Party Account and your contacts list stored on\n your mobile device or tablet computer solely for purposes of identifying\n and informing you of those contacts who have also registered to use the\n Site.\n </p>\n <p>\n You acknowledge and agree that we may access your email address book\n associated with a Third-Party Account and your contacts list stored on\n your mobile device or tablet computer solely for purposes of identifying\n and informing you of those contacts who have also registered to use the\n Site.\n </p>\n <h2>SUBMISSIONS</h2>\n <p>\n You acknowledge and agree that any questions, comments, suggestions,\n ideas, feedback, or other information regarding the Site (\"Submissions\")\n provided by you to us are non-confidential and shall become our sole\n property. We shall own exclusive rights, including all intellectual\n property rights, and shall be entitled to the unrestricted use and\n dissemination of these Submissions for any lawful purpose, commercial or\n otherwise, without acknowledgment or compensation to you.\n </p>\n <p>\n You hereby waive all moral rights to any such Submissions, and you\n hereby warrant that any such Submissions are original with you or that\n you have the right to submit such Submissions. You agree there shall be\n no recourse against us for any alleged or actual infringement or\n misappropriation of any proprietary right in your Submissions.\n </p>\n <h2>THIRD-PARTY WEBSITES AND CONTENT</h2>\n <p>\n The Site may contain (or you may be sent via the Site) links to other\n websites (\"Third-Party Websites\") as well as articles, text, graphics,\n pictures, designs, music, sound, video, information, applications,\n software, and other content or items belonging to or originating from\n third parties (\"Third-Party Content\").\n </p>\n <p>\n Such Third-Party Websites and Third-Party Content are not investigated,\n monitored, or checked for accuracy, appropriateness, or completeness by\n us, and we are not responsible for any Third-Party Websites accessed\n through the Site or any Third-Party Content posted on, available\n through, or installed from the Site, including the content, accuracy,\n offensiveness, opinions, reliability, privacy practices, or other\n policies of or contained in the Third-Party Websites or the Third-Party\n Content.\n </p>\n <p>\n Inclusion of, linking to, or permitting the use or installation of any\n Third-Party Websites or any Third-Party Content does not imply approval\n or endorsement thereof by us. If you decide to leave the Site and access\n the Third-Party Websites or to use or install any Third-Party Content,\n you do so at your own risk, and you should be aware these Terms of Use\n no longer govern.\n </p>\n <p>\n You should review the applicable terms and policies, including privacy\n and data gathering practices, of any website to which you navigate from\n the Site or relating to any applications you use or install from the\n Site. Any purchases you make through Third-Party Websites will be\n through other websites and from other companies, and we take no\n responsibility whatsoever in relation to such purchases which are\n exclusively between you and the applicable third party.\n </p>\n <p>\n You agree and acknowledge that we do not endorse the products or\n services offered on Third-Party Websites and you shall hold us harmless\n from any harm caused by your purchase of such products or services.\n Additionally, you shall hold us harmless from any losses sustained by\n you or harm caused to you relating to or resulting in any way from any\n Third-Party Content or any contact with Third-Party Websites.\n </p>\n <h2>ADVERTISERS</h2>\n <p>\n We allow advertisers to display their advertisements and other\n information in certain areas of the Site, such as sidebar advertisements\n or banner advertisements. If you are an advertiser, you shall take full\n responsibility for any advertisements you place on the Site and any\n services provided on the Site or products sold through those\n advertisements.\n </p>\n <p>\n Further, as an advertiser, you warrant and represent that you possess\n all rights and authority to place advertisements on the Site, including,\n but not limited to, intellectual property rights, publicity rights, and\n contractual rights.\n </p>\n <p>\n As an advertiser, you agree that such advertisements are subject to our\n Digital Millennium Copyright Act (\u201CDMCA\u201D) Notice and Policy provisions\n as described below, and you understand and agree there will be no refund\n or other compensation for DMCA take down-related issues. We simply\n provide the space to place such advertisements, and we have no other\n relationship with advertisers.\n </p>\n <h2>SITE MANAGEMENT</h2>\n <p>We reserve the right, but not the obligation, to:</p>\n <p>(1) monitor the Site for violations of these Terms of Use.</p>\n <p>\n (2) take appropriate legal action against anyone who, in our sole\n discretion, violates the law or these Terms of Use, including without\n limitation, reporting such user to law enforcement authorities.\n </p>\n <p>\n (3) in our sole discretion and without limitation, refuse, restrict\n access to, limit the availability of, or disable (to the extent\n technologically feasible) any of your Contributions or any portion\n thereof\n </p>\n <p>\n (4) in\u00A0our sole discretion and without limitation, notice, or liability,\n to remove from the Site or otherwise disable all files and content that\n are excessive in size or are in any way burdensome to our systems.\n </p>\n <p>\n (5) otherwise manage the Site in a manner designed to protect our rights\n and property and to facilitate the proper functioning of the Site.\n </p>\n <h2>PRIVACY POLICY</h2>\n <p>\n We care about data privacy and security. Please review our Privacy\n Policy: <a href=\"/privacy-policy\">click here</a>. By using the Site, you\n agree to be bound by our Privacy Policy, which is incorporated into\n these Terms of Use. Please be advised the Site is hosted in the United\n States.\n </p>\n <p>\n If you access the Site from the European Union, Asia, or any other\n region of the world with laws or other requirements governing personal\n data collection, use, or disclosure that differ from applicable laws in\n the United States, then through your continued use of the Site, you are\n transferring your data to the United States, and you expressly consent\n to have your data transferred to and processed in the United States.\n </p>\n <p>\n Further, we do not knowingly accept, request, or solicit information\n from children or knowingly market to children. Therefore, in accordance\n with the U.S. Children\u2019s Online Privacy Protection Act, if we receive\n actual knowledge that anyone under the age of 13 has provided personal\n information to us without the requisite and verifiable parental consent,\n we will delete that information from the Site as quickly as is\n reasonably practical.\n </p>\n <h2>DIGITAL MILLENNIUM COPYRIGHT ACT (DMCA) NOTICE AND POLICY</h2>\n <h3>Notifications</h3>\n <p>\n We respect the intellectual property rights of others. If you believe\n that any material available on or through the Site infringes upon any\n copyright you own or control, please immediately notify our Designated\n Copyright Agent using the contact information provided below (a\n \u201CNotification\u201D).\n </p>\n <p>\n A copy of your Notification will be sent to the person who posted or\n stored the material addressed in the Notification. Please be advised\n that pursuant to federal law you may be held liable for damages if you\n make material misrepresentations in a Notification. Thus, if you are not\n sure that material located on or linked to by the Site infringes your\n copyright, you should consider first contacting an attorney.\n </p>\n <p>\n All Notifications should meet the requirements of DMCA 17 U.S.C. \u00A7\n 512(c)(3) and include the following information:\n </p>\n <p>\n (1) A physical or electronic signature of a person authorized to act on\n behalf of the owner of an exclusive right that is allegedly infringed.\n </p>\n <p>\n (2) identification of the copyrighted work claimed to have been\n infringed, or, if multiple copyrighted works on the Site are covered by\n the Notification, a representative list of such works on the Site\n </p>\n <p>\n (3) information reasonably sufficient to permit us to contact the\n complaining party, such as an address, telephone number, and, if\n available, an email address at which the complaining party may be\n contacted.\n </p>\n <p>\n (4) a statement that the complaining party has a good faith belief that\n use of the material in the manner complained of is not authorized by the\n copyright owner, its agent, or the law.\n </p>\n <p>\n (5) a statement that the information in the notification is accurate,\n and under penalty of perjury, that the complaining party is authorized\n to act on behalf of the owner of an exclusive right that is allegedly\n infringed upon.\n </p>\n <h3>Counter Notification</h3>\n <p>\n If you believe your own copyrighted material has been removed from the\n Site as a result of a mistake or mis identification, you may submit a\n written counter notification to us using the contact information\n provided below (a \u201CCounter Notification\u201D).\n </p>\n <p>\n To be an effective Counter Notification under the DMCA, your Counter\n Notification must include substantially the following:\n </p>\n <p>\n (1) identification of the material that has been removed or disabled and\n the location at which the material appeared before it was removed or\n disabled.\n </p>\n <p>\n (2) a statement that you consent to the jurisdiction of the Federal\n District Court in which your address is located, or if your address is\n outside the United States, for any judicial district in which we are\n located.\n </p>\n <p>\n (3) a statement that you will accept service of process from the party\n that filed the Notification or the party's agent.\n </p>\n <p>(4) your name, address, and telephone number.</p>\n <p>\n (5) a statement under penalty of perjury that you have a good faith\n belief that the material in question was removed or disabled as a result\n of a mistake or mis identification of the material to be removed or\n disabled\n </p>\n <p>(6) your physical or electronic signature.</p>\n <p>\n If you send us a valid, written Counter Notification meeting the\n requirements described above, we will restore your removed or disabled\n material, unless we first receive notice from the party filing the\n Notification informing us that such party has filed a court action to\n restrain you from engaging in infringing activity related to the\n material in question.\n </p>\n <p>\n Please note that if you materially misrepresent that the disabled or\n removed content was removed by mistake or mis-identification, you may be\n liable for damages, including costs and attorney's fees. Filing a false\n Counter Notification constitutes perjury.\n </p>\n <p>\n Designated Copyright Agent\n <br />\n {{ company_name }}\n <br />\n Attn: Copyright Agent\n <br />\n {{ company_email }}\n </p>\n <h2>COPYRIGHT INFRINGEMENTS</h2>\n <p>\n We respect the intellectual property rights of others. If you believe\n that any material available on or through the Site infringes upon any\n copyright you own or control, please immediately notify us using the\n contact information provided below (a \u201CNotification\u201D). A copy of your\n Notification will be sent to the person who posted or stored the\n material addressed in the Notification.\n </p>\n <p>\n Please be advised that pursuant to federal law you may be held liable\n for damages if you make material misrepresentations in a Notification.\n Thus, if you are not sure that material located on or linked to by the\n Site infringes your copyright, you should consider first contacting an\n attorney.\n </p>\n <h2>TERM AND TERMINATION</h2>\n <p>\n These Terms of Use shall remain in full force and effect while you use\n the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE\n RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR\n LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING\n CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON,\n INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY,\n OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR\n REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR\n DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT\n ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.\n </p>\n <p>\n If we terminate or suspend your account for any reason, you are\n prohibited from registering and creating a new account under your name,\n a fake or borrowed name, or the name of any third party, even if you may\n be acting on behalf of the third party.\n </p>\n <p>\n In addition to terminating or suspending your account, we reserve the\n right to take appropriate legal action, including without limitation\n pursuing civil, criminal, and injunctive redress.\n </p>\n <h2>MODIFICATIONS AND INTERRUPTIONS</h2>\n <p>\n We reserve the right to change, modify, or remove the contents of the\n Site at any time or for any reason at our sole discretion without\n notice. However, we have no obligation to update any information on our\n Site. We also reserve the right to modify or discontinue all or part of\n the Site without notice at any time.\n </p>\n <p>\n We will not be liable to you or any third party for any modification,\n price change, suspension, or discontinuance of the Site.\n </p>\n <p>\n We cannot guarantee the Site will be available at all times. We may\n experience hardware, software, or other problems or need to perform\n maintenance related to the Site, resulting in interruptions, delays, or\n errors.\n </p>\n <p>\n We reserve the right to change, revise, update, suspend, discontinue, or\n otherwise modify the Site at any time or for any reason without notice\n to you. You agree that we have no liability whatsoever for any loss,\n damage, or inconvenience caused by your inability to access or use the\n Site during any downtime or discontinuance of the Site.\n </p>\n <p>\n Nothing in these Terms of Use will be construed to obligate us to\n maintain and support the Site or to supply any corrections, updates, or\n releases in connection therewith.\n </p>\n <h2>GOVERNING LAW</h2>\n <p>\n For any dispute relating to the entering into effect, validity,\n interpretation, execution, suspension, termination and forcible\n execution of this Contract, the Courts of the judicial district of\n Brussels have jurisdiction. Belgian law governs this Contract, excluding\n provisions of private international law pertinent to the applicable law,\n and the Vienna Convention on contracts for the international sale of\n real property (Vienna, April 11, 1980).\n </p>\n <h2>DISPUTE RESOLUTION</h2>\n <p>\n The parties shall endeavour to settle any dispute arising out of or\n relating to this agreement, including with regard to its existence,\n validity or termination, by mediation before having recourse to\n arbitration or litigation.\n </p>\n <p>\n Any legal action of whatever nature brought by either you or us\n (collectively, the \u201CParties\u201D and individually, a \u201CParty\u201D) shall be\n commenced or prosecuted in the state and federal courts located in\n Brussels, Belgium, and the Parties hereby consent to, and waive all\n defenses of lack of personal jurisdiction and forum non convenient with\n respect to venue and jurisdiction in such state and federal courts.\n </p>\n <p>\n Application of the United Nations Convention on Contracts for the\n International Sale of Goods and the Uniform Computer Information\n Transaction Act (UCITA) are excluded from these Terms of Use. In no\n event shall any claim, action, or proceeding brought by either Party\n related in any way to the Site be commenced more than 2 years after the\n cause of action arose.\n </p>\n <h2>CORRECTIONS</h2>\n <p>\n There may be information on the Site that contains typographical errors,\n inaccuracies, or omissions that may relate to the Site, including\n descriptions, pricing, availability, and various other information. We\n reserve the right to correct any errors, inaccuracies, or omissions and\n to change or update the information on the Site at any time, without\n prior notice.\n </p>\n <h2>DISCLAIMER</h2>\n <p>\n THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT\n YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE\n FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR\n IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING,\n WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS\n FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR\n REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE\u2019S CONTENT\n OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO\n LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR\n INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY\n DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE\n OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS\n AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION\n STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR\n FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH\n MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6)\n ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR\n DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT\n POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT\n WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR\n SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY\n HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN\n ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY\n WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY\n THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES.\n </p>\n <p>\n AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN\n ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION\n WHERE APPROPRIATE.\n </p>\n <h2>LIMITATIONS OF LIABILITY</h2>\n <p>\n IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO\n YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL,\n EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST\n PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR\n USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH\n DAMAGES.\n </p>\n <p>\n NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY\n TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE\n ACTION, WILL AT ALL TIMES BE LIMITED TO THE LESSER OF THE AMOUNT PAID,\n IF ANY, BY YOU TO US DURING THE 6 (SIX) MONTH PERIOD PRIOR TO ANY CAUSE\n OF ACTION ARISING OR $10.000 (TEN THOUSAND DOLLARS). CERTAIN STATE LAWS\n DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR\n LIMITATION OF CERTAIN DAMAGES.\n </p>\n <p>\n IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR\n LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS.\n </p>\n <h2>INDEMNIFICATION</h2>\n <p>\n You agree to defend, indemnify, and hold us harmless, including our\n subsidiaries, affiliates, and all of our respective officers, agents,\n partners, and employees, from and against any loss, damage, liability,\n claim, or demand, including reasonable attorneys\u2019 fees and expenses,\n made by any third party due to or arising out of: (1) your\n Contributions; (2) use of the Site; (3) breach of these Terms of Use;\n (4) any breach of your representations and warranties set forth in these\n Terms of Use; (5) your violation of the rights of a third party,\n including but not limited to intellectual property rights; or (6) any\n overt harmful act toward any other user of the Site with whom you\n connected via the Site.\n </p>\n <p>\n Notwithstanding the foregoing, we reserve the right, at your expense, to\n assume the exclusive defense and control of any matter for which you are\n required to indemnify us, and you agree to cooperate, at your expense,\n with our defense of such claims. We will use reasonable efforts to\n notify you of any such claim, action, or proceeding which is subject to\n this indemnification upon becoming aware of it.\n </p>\n <h2>USER DATA</h2>\n <p>\n We will maintain certain data that you transmit to the Site for the\n purpose of managing the Site, as well as data relating to your use of\n the Site. Although we perform regular routine backups of data, you are\n solely responsible for all data that you transmit or that relates to any\n activity you have undertaken using the Site.\n </p>\n <p>\n You agree that we shall have no liability to you for any loss or\n corruption of any such data, and you hereby waive any right of action\n against us arising from any such loss or corruption of such data.\n </p>\n <h2>ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES</h2>\n <p>\n Visiting the Site, sending us emails, and completing online forms\n constitute electronic communications. You consent to receive electronic\n communications, and you agree that all agreements, notices, disclosures,\n and other communications we provide to you electronically, via email and\n on the Site, satisfy any legal requirement that such communication be in\n writing.\n </p>\n <p>\n YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS,\n AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND\n RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE.\n </p>\n <p>\n You hereby waive any rights or requirements under any statutes,\n regulations, rules, ordinances, or other laws in any jurisdiction which\n require an original signature or delivery or retention of non-electronic\n records, or to payments or the granting of credits by any means other\n than electronic means.\n </p>\n\n <h2>MISCELLANEOUS</h2>\n <p>\n These Terms of Use and any policies or operating rules posted by us on\n the Site constitute the entire agreement and understanding between you\n and us. Our failure to exercise or enforce any right or provision of\n these Terms of Use shall not operate as a waiver of such right or\n provision.\n </p>\n <p>\n These Terms of Use operate to the fullest extent permissible by law. We\n may assign any or all of our rights and obligations to others at any\n time. We shall not be responsible or liable for any loss, damage, delay,\n or failure to act caused by any cause beyond our reasonable control.\n </p>\n <p>\n If any provision or part of a provision of these Terms of Use is\n determined to be unlawful, void, or unenforceable, that provision or\n part of the provision is deemed severable from these Terms of Use and\n does not affect the validity and enforceability of any remaining\n provisions.\n </p>\n <p>\n There is no joint venture, partnership, employment or agency\n relationship created between you and us as a result of these Terms of\n Use or use of the Site. You agree that these Terms of Use will not be\n construed against us by virtue of having drafted them.\n </p>\n <p>\n You hereby waive any and all defenses you may have based on the\n electronic form of these Terms of Use and the lack of signing by the\n parties hereto to execute these Terms of Use.\n </p>\n <h2>CONTACT US</h2>\n <p>\n In order to resolve a complaint regarding the Site or to receive further\n information regarding use of the Site, please contact us at:\n <br />{{ company_name }}, {{ company_street }}, {{ company_city_code }}\n {{ company_city }} - {{ company_state }}\n </p>\n <h3>Questions and Comments</h3>\n <p>\n If you have any questions about this Agreement, please\n <a href=\"mailto:{{ company_email }}\">let us know</a>.\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<pw-landing-page-footer-b></pw-landing-page-footer-b>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}h1,h2,h3,h4,h5,h6{font-weight:600}h1{font-size:36px}.card{padding:10px 15px!important}.card ol li{padding-left:30px!important;position:relative;color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding-top:5px;padding-bottom:5px;padding-right:0}.card ol li ol.list-bullet li,.card ol li ul.list-bullet li{padding-left:0!important}.card ol li:before{font:400 16px/1.3 Roboto,sans-serif;left:0;position:absolute;top:4px}.card ol li h3{font:400 20px/1.3 Roboto,sans-serif;margin-bottom:15px}.card p{color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding:5px 0}.card p strong{font-family:Roboto,sans-serif}.banner{background:url(/assets/img/landing-page/header-bg.jpg) no-repeat center;background-size:cover;padding:0 0 130px}.terms-of-service h3{padding:5px 0 0!important}.terms-of-service ol{counter-reset:section;padding:0 5px 0 0!important}.terms-of-service ol li:before{content:counters(section,\".\") \". \";counter-increment:section;float:left;font-weight:600;padding:0 10px 0 0}.terms-of-service ol li ol li ol li:before,.terms-of-service ol li ol li ul li:before{content:\"\";counter-increment:none}li{padding:10px 0}.parent-ol>li:before{font-size:26px;margin-top:16px}ul.list-bullet,ol.list-bullet{list-style-type:disc;margin-left:20px}ul.list-bullet>li,ol.list-bullet>li{padding:0}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LandingPageFooterBComponent, selector: "pw-landing-page-footer-b" }] }); }
2278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TermsConditionsComponent, deps: [{ token: i1$5.AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
2279
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TermsConditionsComponent, selector: "pw-terms-conditions", inputs: { isPublic: "isPublic" }, ngImport: i0, template: "<ng-container *ngIf=\"isPublic\">\n <pw-landing-page-header [landing]=\"false\"></pw-landing-page-header>\n</ng-container>\n\n<div class=\"container pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h1>POSIWISE TERMS AND CONDITIONS</h1>\n <p>Last updated 26/10/2019</p>\n <h2>AGREEMENT TO TERMS</h2>\n <div class=\"clearfix\"></div>\n <p>\n These Terms of Use constitute a legally binding agreement made between\n you, whether personally or on behalf of an entity (\u201Cyou\u201D) and\n {{ company_name }}, {{ company_street }}, {{ company_city_code }}\n {{ company_city }}\n - {{ company_state }}, {{ company_number }} (\u201Cwe,\u201D \u201Cus\u201D or \u201Cour\u201D),\n concerning your access to and use of the {{ company_state }} website as\n well as any other media form, media channel, mobile website or mobile\n application related, linked, or otherwise connected thereto\n (collectively, the \u201CSite\u201D).\n </p>\n <p>\n You agree that by accessing the Site, you have read, understood, and\n agree to be bound by all of these Terms of Use. If you do not agree with\n all of these Terms of Use, then you are expressly prohibited from using\n the Site and you must discontinue use immediately.\n </p>\n <p>\n Supplemental terms and conditions or documents that may be posted on the\n Site from time to time are hereby expressly incorporated herein by\n reference. We reserve the right, in our sole discretion, to make changes\n or modifications to these Terms of Use at any time and for any reason.\n </p>\n <p>\n We will alert you about any changes by updating the \u201CLast updated\u201D date\n of these Terms of Use, and you waive any right to receive specific\n notice of each such change.\n </p>\n <p>\n It is your responsibility to periodically review these Terms of Use to\n stay informed of updates. You will be subject to, and will be deemed to\n have been made aware of and to have accepted, the changes in any revised\n Terms of Use by your continued use of the Site after the date such\n revised Terms of Use are posted.\n </p>\n <p>\n The information provided on the Site is not intended for distribution to\n or use by any person or entity in any jurisdiction or country where such\n distribution or use would be contrary to law or regulation or which\n would subject us to any registration requirement within such\n jurisdiction or country.\n </p>\n <p>\n Accordingly, those persons who choose to access the Site from other\n locations do so on their own initiative and are solely responsible for\n compliance with local laws, if and to the extent local laws are\n applicable.\n </p>\n <p>\n The Site is intended for users who are at least 13 years of age. All\n users who are minors in the jurisdiction in which they reside (generally\n under the age of 18) must have the permission of, and be directly\n supervised by, their parent or guardian to use the Site. If you are a\n minor, you must have your parent or guardian read and agree to these\n Terms of Use prior to you using the Site.\n </p>\n <h2>INTELLECTUAL PROPERTY RIGHTS</h2>\n <p>\n Unless otherwise indicated, the Site is our proprietary property and all\n source code, databases, functionality, software, website designs, audio,\n video, text, photographs, and graphics on the Site (collectively, the\n \u201CContent\u201D) and the trademarks, service marks, and logos contained\n therein (the \u201CMarks\u201D) are owned or controlled by us or licensed to us,\n and are protected by copyright and trademark laws and various other\n intellectual property rights and unfair competition laws of the United\n States, foreign jurisdictions, and international conventions.\n </p>\n <p>\n The Content and the Marks are provided on the Site \u201CAS IS\u201D for your\n information and personal use only. Except as expressly provided in these\n Terms of Use, no part of the Site and no Content or Marks may be copied,\n reproduced, aggregated, republished, uploaded, posted, publicly\n displayed, encoded, translated, transmitted, distributed, sold,\n licensed, or otherwise exploited for any commercial purpose whatsoever,\n without our express prior written permission.\n </p>\n <p>\n Provided that you are eligible to use the Site, you are granted a\n limited license to access and use the Site and to download or print a\n copy of any portion of the Content to which you have properly gained\n access solely for your personal, non-commercial use. We reserve all\n rights not expressly granted to you in and to the Site, the Content and\n the Marks.\n </p>\n <h1>USER REPRESENTATIONS</h1>\n <p>By using the Site, you represent and warrant that:</p>\n <ol>\n <li>\n <p class=\"m-0\">\n all registration information you submit will be true, accurate,\n current, and complete.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will maintain the accuracy of such information and promptly\n update such registration information as necessary.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you have the legal capacity and you agree to comply with these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">you are not under the age of 13.</p>\n </li>\n <li>\n <p class=\"m-0\">\n not a minor in the jurisdiction in which you reside, or if a\n minor, you have received parental permission to use the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will not access the Site through automated or non-human\n means, whether through a bot, script, or otherwise.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will not use the Site for any illegal or unauthorized\n purpose.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your use of the Site will not violate any applicable law or\n regulation.\n </p>\n </li>\n </ol>\n <p>\n If you provide any information that is untrue, inaccurate, not current,\n or incomplete, we have the right to suspend or terminate your account\n and refuse any and all current or future use of the Site (or any portion\n thereof).\n </p>\n <h2>USER REGISTRATION</h2>\n <p>\n You may be required to register with the Site. You agree to keep your\n password confidential and will be responsible for all use of your\n account and password. We reserve the right to remove, reclaim, or change\n a username you select if we determine, in our sole discretion, that such\n username is inappropriate, obscene, or otherwise objectionable.\n </p>\n <h2>PROHIBITED ACTIVITIES</h2>\n <p>\n You may not access or use the Site for any purpose other than that for\n which we make the Site available. The Site may not be used in connection\n with any commercial endeavors except those that are specifically\n endorsed or approved by us.\n </p>\n <p>As a user of the Site, you agree not to:</p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n systematically retrieve data or other content from the Site to\n create or compile, directly or indirectly, a collection,\n compilation, database, or directory without written permission\n from us.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n make any unauthorized use of the Site, including collecting\n usernames and/or email addresses of users by electronic or other\n means for the purpose of sending unsolicited email, or creating\n user accounts by automated means or under false pretenses.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use a buying agent or purchasing agent to make purchases on the\n Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site to advertise or offer to sell goods and services.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n circumvent, disable, or otherwise interfere with\n security-related features of the Site, including features that\n prevent or restrict the use or copying of any Content or enforce\n limitations on the use of the Site and/or the Content contained\n therein.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n engage in unauthorized framing of or linking to the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n trick, defraud, or mislead us and other users, especially in any\n attempt to learn sensitive account information such as user\n passwords\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n make improper use of our support services or submit false\n reports of abuse or misconduct.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n engage in any automated use of the system, such as using scripts\n to send comments or messages, or using any data mining, robots,\n or similar data gathering and extraction tools.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n interfere with, disrupt, or create an undue burden on the Site\n or the networks or services connected to the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n attempt to impersonate another user or person or use the\n username of another user.\n </p>\n </li>\n <li>\n <p class=\"m-0\">sell or otherwise transfer your profile.</p>\n </li>\n <li>\n <p class=\"m-0\">\n use any information obtained from the Site in order to harass,\n abuse, or harm another person.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site as part of any effort to compete with us or\n otherwise use the Site and/or the Content for any\n revenue-generating endeavor or commercial enterprise.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n decipher, decompile, disassemble, or reverse engineer any of the\n software comprising or in any way making up a part of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n attempt to bypass any measures of the Site designed to prevent\n or restrict access to the Site, or any portion of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n harass, annoy, intimidate, or threaten any of our employees or\n agents engaged in providing any portion of the Site to you.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n delete the copyright or other proprietary rights notice from any\n Content.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n copy or adapt the Site\u2019s software, including but not limited to\n Flash, PHP, HTML, JavaScript, or other code.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n upload or transmit (or attempt to upload or to transmit)\n viruses, Trojan horses, or other material, including excessive\n use of capital letters and spamming (continuous posting of\n repetitive text), that interferes with any party\u2019s uninterrupted\n use and enjoyment of the Site or modifies, impairs, disrupts,\n alters, or interferes with the use, features, functions,\n operation, or maintenance of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n upload or transmit (or attempt to upload or to transmit) any\n material that acts as a passive or active information collection\n or transmission mechanism, including without limitation, clear\n graphics interchange formats (\u201Cgifs\u201D), 1\u00D71 pixels, web bugs,\n cookies, or other similar devices (sometimes referred to as\n \u201Cspyware\u201D or \u201Cpassive collection mechanisms\u201D or \u201Cpcms\u201D).\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n except as may be the result of standard search engine or\n Internet browser usage, use, launch, develop, or distribute any\n automated system, including without limitation, any spider,\n robot, cheat utility, scraper, or offline reader that accesses\n the Site, or using or launching any unauthorized script or other\n software.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n disparage, tarnish, or otherwise harm, in our opinion, us and/or\n the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site in a manner inconsistent with any applicable laws\n or regulations.\n </p>\n </li>\n </ol>\n\n <h2>USER GENERATED CONTRIBUTIONS</h2>\n\n <p>\n The Site may invite you to chat, contribute to, or participate in blogs,\n message boards, online forums, and other functionality, and may provide\n you with the opportunity to create, submit, post, display, transmit,\n perform, publish, distribute, or broadcast content and materials to us\n or on the Site, including but not limited to text, writings, video,\n audio, photographs, graphics, comments, suggestions, or personal\n information or other material (collectively, \"Contributions\").\n </p>\n <p>\n Contributions may be viewable by other users of the Site and through\n third-party websites. As such, any Contributions you transmit may be\n treated as non-confidential and non-proprietary. When you create or make\n available any Contributions, you thereby represent and warrant that:\n </p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n the creation, distribution, transmission, public display, or\n performance, and the accessing, downloading, or copying of your\n Contributions do not and will not infringe the proprietary\n rights, including but not limited to the copyright, patent,\n trademark, trade secret, or moral rights of any third party.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you are the creator and owner of or have the necessary licenses,\n rights, consents, releases, and permissions to use and to\n authorize us, the Site, and other users of the Site to use your\n Contributions in any manner contemplated by the Site and these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you have the written consent, release, and/or permission of each\n and every identifiable individual person in your Contributions\n to use the name or likeness of each and every such identifiable\n individual person to enable inclusion and use of your\n Contributions in any manner contemplated by the Site and these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not false, inaccurate, or misleading.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not unsolicited or unauthorized\n advertising, promotional materials, pyramid schemes, chain\n letters, spam, mass mailings, or other forms of solicitation.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not obscene, lewd, lascivious, filthy,\n violent, harassing, libelous, slanderous, or otherwise\n objectionable (as determined by us).\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not ridicule, mock, disparage, intimidate,\n or abuse anyone.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not advocate the violent overthrow of any\n government or incite, encourage, or threaten physical harm\n against another.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate any applicable law,\n regulation, or rule.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate the privacy or publicity\n rights of any third party.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not contain any material that solicits\n personal information from anyone under the age of 18 or exploits\n people under the age of 18 in a sexual or violent manner.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate any federal or state law\n concerning child pornography, or otherwise intended to protect\n the health or well-being of minors.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not include any offensive comments that\n are connected to race, national origin, gender, sexual\n preference, or physical handicap.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not otherwise violate, or link to material\n that violates, any provision of these Terms of Use, or any\n applicable law or regulation.\n </p>\n </li>\n </ol>\n <p>\n Any use of the Site in violation of the foregoing violates these Terms\n of Use and may result in, among other things, termination or suspension\n of your rights to use the Site.\n </p>\n\n <h2>CONTRIBUTION LICENSE</h2>\n\n <p>\n By posting your Contributions to any part of the Site, or making\n Contributions accessible to the Site by linking your account from the\n Site to any of your social networking accounts, you automatically grant,\n and you represent and warrant that you have the right to grant, to us an\n unrestricted, unlimited, irrevocable, perpetual, non-exclusive,\n transferable, royalty-free, fully-paid, worldwide right, and license to\n host, use, copy, reproduce, disclose, sell, resell, publish, broadcast,\n re title, archive, store, cache, publicly perform, publicly display,\n reformat, translate, transmit, excerpt (in whole or in part), and\n distribute such Contributions (including, without limitation, your image\n and voice) for any purpose, commercial, advertising, or otherwise, and\n to prepare derivative works of, or incorporate into other works, such\n Contributions, and grant and authorize sublicense of the foregoing. The\n use and distribution may occur in any media formats and through any\n media channels.\n </p>\n <p>\n This license will apply to any form, media, or technology now known or\n hereafter developed, and includes our use of your name, company name,\n and franchise name, as applicable, and any of the trademarks, service\n marks, trade names, logos, and personal and commercial images you\n provide. You waive all moral rights in your Contributions, and you\n warrant that moral rights have not otherwise been asserted in your\n Contributions.\n </p>\n <p>\n We do not assert any ownership over your Contributions. You retain full\n ownership of all of your Contributions and any intellectual property\n rights or other proprietary rights associated with your Contributions.\n We are not liable for any statements or representations in your\n Contributions provided by you in any area on the Site.\n </p>\n <p>\n You are solely responsible for your Contributions to the Site and you\n expressly agree to exonerate us from any and all responsibility and to\n refrain from any legal action against us regarding your Contributions.\n </p>\n <p>\n We have the right, in our sole and absolute discretion, (1) to edit,\n redact, or otherwise change any Contributions; (2) to re-categorize any\n Contributions to place them in more appropriate locations on the Site;\n and (3) to pre-screen or delete any Contributions at any time and for\n any reason, without notice. We have no obligation to monitor your\n Contributions.\n </p>\n <h2>GUIDELINES FOR REVIEWS</h2>\n <ol>\n <li>\n <p class=\"m-0\">\n We may provide you areas on the Site to leave reviews or\n ratings. When posting a review, you must comply with the\n following criteria:\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should have firsthand experience with the person/entity\n being reviewed.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain offensive profanity, or abusive,\n racist, offensive, or hate language.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain discriminatory references based\n on religion, race, gender, national origin, age, marital status,\n sexual orientation, or disability.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain references to illegal activity.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should not be affiliated with competitors if posting\n negative reviews.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should not make any conclusions as to the legality of\n conduct.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you may not post any false or misleading statements.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you may not organize a campaign encouraging others to post\n reviews, whether positive or negative.\n </p>\n </li>\n </ol>\n <p>\n We may accept, reject, or remove reviews in our sole discretion. We have\n absolutely no obligation to screen reviews or to delete reviews, even if\n anyone considers reviews objectionable or inaccurate. Reviews are not\n endorsed by us, and do not necessarily represent our opinions or the\n views of any of our affiliates or partners.\n </p>\n <p>\n We do not assume liability for any review or for any claims,\n liabilities, or losses resulting from any review. By posting a review,\n you hereby grant to us a perpetual, non-exclusive, worldwide,\n royalty-free, fully-paid, assignable, and sub-licensable right and\n license to reproduce, modify, translate, transmit by any means, display,\n perform, and/or distribute all content relating to reviews.\n </p>\n <h2>MOBILE APPLICATION LICENSE</h2>\n <h3>Use License</h3>\n\n <p>\n If you access the Site via a mobile application, then we grant you a\n revocable, non-exclusive, non-transferable, limited right to install and\n use the mobile application on wireless electronic devices owned or\n controlled by you, and to access and use the mobile application on such\n devices strictly in accordance with the terms and conditions of this\n mobile application license contained in these Terms of Use.\n </p>\n <p>Use License</p>\n <p>\n (1) decompile, reverse engineer, disassemble, attempt to derive the\n source code of, or decrypt the application.\n </p>\n <p>\n (2) make any modification, adaptation, improvement, enhancement,\n translation, or derivative work from the application.\n </p>\n <p>\n (3) violate any applicable laws, rules, or regulations in connection\n with your access or use of the application.\n </p>\n <p>\n (4) remove, alter, or obscure any proprietary notice (including any\n notice of copyright or trademark) posted by us or the licensors of the\n application.\n </p>\n <p>\n (5) use the application for any revenue generating endeavor, commercial\n enterprise, or other purpose for which it is not designed or intended.\n </p>\n <p>\n (6) make the application available over a network or other environment\n permitting access or use by multiple devices or users at the same .\n </p>\n <p>\n (7) use the application for creating a product, service, or software\n that is, directly or indirectly, competitive with or in any way a\n substitute for the application.\n </p>\n <p>\n (8) use the application to send automated queries to any website or to\n send any unsolicited commercial e-mail.\n </p>\n <p>\n (9) use any proprietary information or any of our interfaces or our\n other intellectual property in the design, development, manufacture,\n licensing, or distribution of any applications, accessories, or devices\n for use with the application.\n </p>\n <h3>Apple and Android Devices</h3>\n <p>\n The following terms apply when you use a mobile application obtained\n from either the Apple Store or Google Play (each an \u201CApp Distributor\u201D)\n to access the Site:\n </p>\n <p>\n (1) the license granted to you for our mobile application is limited to\n a non-transferable license to use the application on a device that\n utilizes the Apple iOS or Android operating systems, as applicable, and\n in accordance with the usage rules set forth in the applicable\n Distributor\u2019s terms of service\n </p>\n <p>\n (2) we are responsible for providing any maintenance and support\n services with respect to the mobile application as specified in the\n terms and conditions of this mobile application contained in these Terms\n of Use or as otherwise required under applicable law, and you\n acknowledge that each App Distributor has no obligation whatsoever to\n furnish any maintenance and support services with respect to the mobile\n application.\n </p>\n <p>\n (3) in the event of any failure of the mobile application to conform to\n any applicable warranty, you may notify the applicable App Distributor,\n and the App Distributor, in accordance with its terms and policies, may\n refund the purchase price, if any, paid for the mobile application, and\n to the maximum extent permitted by applicable law, the App Distributor\n will have no other warranty obligation whatsoever with respect to the\n mobile application.\n </p>\n <p>\n (4) you represent and warrant that (i) you are not located in a country\n that is subject to a U.S. government embargo, or that has been\n designated by the U.S. government as a \u201Cterrorist supporting\u201D country\n and (ii) you are not listed on any U.S. government list of prohibited or\n restricted parties.\n </p>\n <p>\n (5) you must comply with applicable third-party terms of agreement when\n using the mobile application, e.g., if you have a VoIP application, then\n you must not be in violation of their wireless data service agreement\n when using the mobile application.\n </p>\n <p>\n (6) you acknowledge and agree that the App Distributors are third-party\n beneficiaries of the terms and conditions in this mobile application\n license contained in these Terms of Use, and that each App Distributor\n will have the right (and will be deemed to have accepted the right) to\n enforce the terms and conditions in this mobile application license\n contained in these Terms of Use against you as a third-party beneficiary\n thereof.\n </p>\n <h2>SOCIAL MEDIA</h2>\n <p>\n As part of the functionality of the Site, you may link your account with\n online accounts you have with third-party service providers (each such\n account, a \u201CThird-Party Account\u201D) by either:\n </p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n providing your Third-Party Account login information through the\n Site; or\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n allowing us to access your Third-Party Account, as is permitted\n under the applicable terms and conditions that govern your use\n of each Third-Party Account.\n </p>\n </li>\n </ol>\n\n <p>\n You represent and warrant that you are entitled to disclose your\n Third-Party Account login information to us and/or grant us access to\n your Third-Party Account, without breach by you of any of the terms and\n conditions that govern your use of the applicable Third-Party Account,\n and without obligating us to pay any fees or making us subject to any\n usage limitations imposed by the third-party service provider of the\n Third-Party Account.\n </p>\n <p>\n By granting us access to any Third-Party Accounts, you understand that\n (1) we may access, make available, and store (if applicable) any content\n that you have provided to and stored in your Third-Party Account (the\n \u201CSocial Network Content\u201D) so that it is available on and through the\n Site via your account, including without limitation any friend lists and\n (2) we may submit to and receive from your Third-Party Account\n additional information to the extent you are notified when you link your\n account with the Third-Party Account.\n </p>\n <p>\n Depending on the Third-Party Accounts you choose and subject to the\n privacy settings that you have set in such Third-Party Accounts,\n personally identifiable information that you post to your Third-Party\n Accounts may be available on and through your account on the Site.\n </p>\n <p>\n Please note that if a Third-Party Account or associated service becomes\n unavailable or our access to such Third-Party Account is terminated by\n the third-party service provider, then Social Network Content may no\n longer be available on and through the Site. You will have the ability\n to disable the connection between your account on the Site and your\n Third-Party Accounts at any time.\n </p>\n\n <p>\n PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE\n PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY\n BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS.\n </p>\n <p>\n We make no effort to review any Social Network Content for any purpose,\n including but not limited to, for accuracy, legality, or\n non-infringement, and we are not responsible for any Social Network\n Content.\n </p>\n <p>\n You acknowledge and agree that we may access your email address book\n associated with a Third-Party Account and your contacts list stored on\n your mobile device or tablet computer solely for purposes of identifying\n and informing you of those contacts who have also registered to use the\n Site.\n </p>\n <p>\n You acknowledge and agree that we may access your email address book\n associated with a Third-Party Account and your contacts list stored on\n your mobile device or tablet computer solely for purposes of identifying\n and informing you of those contacts who have also registered to use the\n Site.\n </p>\n <h2>SUBMISSIONS</h2>\n <p>\n You acknowledge and agree that any questions, comments, suggestions,\n ideas, feedback, or other information regarding the Site (\"Submissions\")\n provided by you to us are non-confidential and shall become our sole\n property. We shall own exclusive rights, including all intellectual\n property rights, and shall be entitled to the unrestricted use and\n dissemination of these Submissions for any lawful purpose, commercial or\n otherwise, without acknowledgment or compensation to you.\n </p>\n <p>\n You hereby waive all moral rights to any such Submissions, and you\n hereby warrant that any such Submissions are original with you or that\n you have the right to submit such Submissions. You agree there shall be\n no recourse against us for any alleged or actual infringement or\n misappropriation of any proprietary right in your Submissions.\n </p>\n <h2>THIRD-PARTY WEBSITES AND CONTENT</h2>\n <p>\n The Site may contain (or you may be sent via the Site) links to other\n websites (\"Third-Party Websites\") as well as articles, text, graphics,\n pictures, designs, music, sound, video, information, applications,\n software, and other content or items belonging to or originating from\n third parties (\"Third-Party Content\").\n </p>\n <p>\n Such Third-Party Websites and Third-Party Content are not investigated,\n monitored, or checked for accuracy, appropriateness, or completeness by\n us, and we are not responsible for any Third-Party Websites accessed\n through the Site or any Third-Party Content posted on, available\n through, or installed from the Site, including the content, accuracy,\n offensiveness, opinions, reliability, privacy practices, or other\n policies of or contained in the Third-Party Websites or the Third-Party\n Content.\n </p>\n <p>\n Inclusion of, linking to, or permitting the use or installation of any\n Third-Party Websites or any Third-Party Content does not imply approval\n or endorsement thereof by us. If you decide to leave the Site and access\n the Third-Party Websites or to use or install any Third-Party Content,\n you do so at your own risk, and you should be aware these Terms of Use\n no longer govern.\n </p>\n <p>\n You should review the applicable terms and policies, including privacy\n and data gathering practices, of any website to which you navigate from\n the Site or relating to any applications you use or install from the\n Site. Any purchases you make through Third-Party Websites will be\n through other websites and from other companies, and we take no\n responsibility whatsoever in relation to such purchases which are\n exclusively between you and the applicable third party.\n </p>\n <p>\n You agree and acknowledge that we do not endorse the products or\n services offered on Third-Party Websites and you shall hold us harmless\n from any harm caused by your purchase of such products or services.\n Additionally, you shall hold us harmless from any losses sustained by\n you or harm caused to you relating to or resulting in any way from any\n Third-Party Content or any contact with Third-Party Websites.\n </p>\n <h2>ADVERTISERS</h2>\n <p>\n We allow advertisers to display their advertisements and other\n information in certain areas of the Site, such as sidebar advertisements\n or banner advertisements. If you are an advertiser, you shall take full\n responsibility for any advertisements you place on the Site and any\n services provided on the Site or products sold through those\n advertisements.\n </p>\n <p>\n Further, as an advertiser, you warrant and represent that you possess\n all rights and authority to place advertisements on the Site, including,\n but not limited to, intellectual property rights, publicity rights, and\n contractual rights.\n </p>\n <p>\n As an advertiser, you agree that such advertisements are subject to our\n Digital Millennium Copyright Act (\u201CDMCA\u201D) Notice and Policy provisions\n as described below, and you understand and agree there will be no refund\n or other compensation for DMCA take down-related issues. We simply\n provide the space to place such advertisements, and we have no other\n relationship with advertisers.\n </p>\n <h2>SITE MANAGEMENT</h2>\n <p>We reserve the right, but not the obligation, to:</p>\n <p>(1) monitor the Site for violations of these Terms of Use.</p>\n <p>\n (2) take appropriate legal action against anyone who, in our sole\n discretion, violates the law or these Terms of Use, including without\n limitation, reporting such user to law enforcement authorities.\n </p>\n <p>\n (3) in our sole discretion and without limitation, refuse, restrict\n access to, limit the availability of, or disable (to the extent\n technologically feasible) any of your Contributions or any portion\n thereof\n </p>\n <p>\n (4) in\u00A0our sole discretion and without limitation, notice, or liability,\n to remove from the Site or otherwise disable all files and content that\n are excessive in size or are in any way burdensome to our systems.\n </p>\n <p>\n (5) otherwise manage the Site in a manner designed to protect our rights\n and property and to facilitate the proper functioning of the Site.\n </p>\n <h2>PRIVACY POLICY</h2>\n <p>\n We care about data privacy and security. Please review our Privacy\n Policy: <a href=\"/privacy-policy\">click here</a>. By using the Site, you\n agree to be bound by our Privacy Policy, which is incorporated into\n these Terms of Use. Please be advised the Site is hosted in the United\n States.\n </p>\n <p>\n If you access the Site from the European Union, Asia, or any other\n region of the world with laws or other requirements governing personal\n data collection, use, or disclosure that differ from applicable laws in\n the United States, then through your continued use of the Site, you are\n transferring your data to the United States, and you expressly consent\n to have your data transferred to and processed in the United States.\n </p>\n <p>\n Further, we do not knowingly accept, request, or solicit information\n from children or knowingly market to children. Therefore, in accordance\n with the U.S. Children\u2019s Online Privacy Protection Act, if we receive\n actual knowledge that anyone under the age of 13 has provided personal\n information to us without the requisite and verifiable parental consent,\n we will delete that information from the Site as quickly as is\n reasonably practical.\n </p>\n <h2>DIGITAL MILLENNIUM COPYRIGHT ACT (DMCA) NOTICE AND POLICY</h2>\n <h3>Notifications</h3>\n <p>\n We respect the intellectual property rights of others. If you believe\n that any material available on or through the Site infringes upon any\n copyright you own or control, please immediately notify our Designated\n Copyright Agent using the contact information provided below (a\n \u201CNotification\u201D).\n </p>\n <p>\n A copy of your Notification will be sent to the person who posted or\n stored the material addressed in the Notification. Please be advised\n that pursuant to federal law you may be held liable for damages if you\n make material misrepresentations in a Notification. Thus, if you are not\n sure that material located on or linked to by the Site infringes your\n copyright, you should consider first contacting an attorney.\n </p>\n <p>\n All Notifications should meet the requirements of DMCA 17 U.S.C. \u00A7\n 512(c)(3) and include the following information:\n </p>\n <p>\n (1) A physical or electronic signature of a person authorized to act on\n behalf of the owner of an exclusive right that is allegedly infringed.\n </p>\n <p>\n (2) identification of the copyrighted work claimed to have been\n infringed, or, if multiple copyrighted works on the Site are covered by\n the Notification, a representative list of such works on the Site\n </p>\n <p>\n (3) information reasonably sufficient to permit us to contact the\n complaining party, such as an address, telephone number, and, if\n available, an email address at which the complaining party may be\n contacted.\n </p>\n <p>\n (4) a statement that the complaining party has a good faith belief that\n use of the material in the manner complained of is not authorized by the\n copyright owner, its agent, or the law.\n </p>\n <p>\n (5) a statement that the information in the notification is accurate,\n and under penalty of perjury, that the complaining party is authorized\n to act on behalf of the owner of an exclusive right that is allegedly\n infringed upon.\n </p>\n <h3>Counter Notification</h3>\n <p>\n If you believe your own copyrighted material has been removed from the\n Site as a result of a mistake or mis identification, you may submit a\n written counter notification to us using the contact information\n provided below (a \u201CCounter Notification\u201D).\n </p>\n <p>\n To be an effective Counter Notification under the DMCA, your Counter\n Notification must include substantially the following:\n </p>\n <p>\n (1) identification of the material that has been removed or disabled and\n the location at which the material appeared before it was removed or\n disabled.\n </p>\n <p>\n (2) a statement that you consent to the jurisdiction of the Federal\n District Court in which your address is located, or if your address is\n outside the United States, for any judicial district in which we are\n located.\n </p>\n <p>\n (3) a statement that you will accept service of process from the party\n that filed the Notification or the party's agent.\n </p>\n <p>(4) your name, address, and telephone number.</p>\n <p>\n (5) a statement under penalty of perjury that you have a good faith\n belief that the material in question was removed or disabled as a result\n of a mistake or mis identification of the material to be removed or\n disabled\n </p>\n <p>(6) your physical or electronic signature.</p>\n <p>\n If you send us a valid, written Counter Notification meeting the\n requirements described above, we will restore your removed or disabled\n material, unless we first receive notice from the party filing the\n Notification informing us that such party has filed a court action to\n restrain you from engaging in infringing activity related to the\n material in question.\n </p>\n <p>\n Please note that if you materially misrepresent that the disabled or\n removed content was removed by mistake or mis-identification, you may be\n liable for damages, including costs and attorney's fees. Filing a false\n Counter Notification constitutes perjury.\n </p>\n <p>\n Designated Copyright Agent\n <br />\n {{ company_name }}\n <br />\n Attn: Copyright Agent\n <br />\n {{ company_email }}\n </p>\n <h2>COPYRIGHT INFRINGEMENTS</h2>\n <p>\n We respect the intellectual property rights of others. If you believe\n that any material available on or through the Site infringes upon any\n copyright you own or control, please immediately notify us using the\n contact information provided below (a \u201CNotification\u201D). A copy of your\n Notification will be sent to the person who posted or stored the\n material addressed in the Notification.\n </p>\n <p>\n Please be advised that pursuant to federal law you may be held liable\n for damages if you make material misrepresentations in a Notification.\n Thus, if you are not sure that material located on or linked to by the\n Site infringes your copyright, you should consider first contacting an\n attorney.\n </p>\n <h2>TERM AND TERMINATION</h2>\n <p>\n These Terms of Use shall remain in full force and effect while you use\n the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE\n RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR\n LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING\n CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON,\n INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY,\n OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR\n REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR\n DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT\n ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.\n </p>\n <p>\n If we terminate or suspend your account for any reason, you are\n prohibited from registering and creating a new account under your name,\n a fake or borrowed name, or the name of any third party, even if you may\n be acting on behalf of the third party.\n </p>\n <p>\n In addition to terminating or suspending your account, we reserve the\n right to take appropriate legal action, including without limitation\n pursuing civil, criminal, and injunctive redress.\n </p>\n <h2>MODIFICATIONS AND INTERRUPTIONS</h2>\n <p>\n We reserve the right to change, modify, or remove the contents of the\n Site at any time or for any reason at our sole discretion without\n notice. However, we have no obligation to update any information on our\n Site. We also reserve the right to modify or discontinue all or part of\n the Site without notice at any time.\n </p>\n <p>\n We will not be liable to you or any third party for any modification,\n price change, suspension, or discontinuance of the Site.\n </p>\n <p>\n We cannot guarantee the Site will be available at all times. We may\n experience hardware, software, or other problems or need to perform\n maintenance related to the Site, resulting in interruptions, delays, or\n errors.\n </p>\n <p>\n We reserve the right to change, revise, update, suspend, discontinue, or\n otherwise modify the Site at any time or for any reason without notice\n to you. You agree that we have no liability whatsoever for any loss,\n damage, or inconvenience caused by your inability to access or use the\n Site during any downtime or discontinuance of the Site.\n </p>\n <p>\n Nothing in these Terms of Use will be construed to obligate us to\n maintain and support the Site or to supply any corrections, updates, or\n releases in connection therewith.\n </p>\n <h2>GOVERNING LAW</h2>\n <p>\n For any dispute relating to the entering into effect, validity,\n interpretation, execution, suspension, termination and forcible\n execution of this Contract, the Courts of the judicial district of\n Brussels have jurisdiction. Belgian law governs this Contract, excluding\n provisions of private international law pertinent to the applicable law,\n and the Vienna Convention on contracts for the international sale of\n real property (Vienna, April 11, 1980).\n </p>\n <h2>DISPUTE RESOLUTION</h2>\n <p>\n The parties shall endeavour to settle any dispute arising out of or\n relating to this agreement, including with regard to its existence,\n validity or termination, by mediation before having recourse to\n arbitration or litigation.\n </p>\n <p>\n Any legal action of whatever nature brought by either you or us\n (collectively, the \u201CParties\u201D and individually, a \u201CParty\u201D) shall be\n commenced or prosecuted in the state and federal courts located in\n Brussels, Belgium, and the Parties hereby consent to, and waive all\n defenses of lack of personal jurisdiction and forum non convenient with\n respect to venue and jurisdiction in such state and federal courts.\n </p>\n <p>\n Application of the United Nations Convention on Contracts for the\n International Sale of Goods and the Uniform Computer Information\n Transaction Act (UCITA) are excluded from these Terms of Use. In no\n event shall any claim, action, or proceeding brought by either Party\n related in any way to the Site be commenced more than 2 years after the\n cause of action arose.\n </p>\n <h2>CORRECTIONS</h2>\n <p>\n There may be information on the Site that contains typographical errors,\n inaccuracies, or omissions that may relate to the Site, including\n descriptions, pricing, availability, and various other information. We\n reserve the right to correct any errors, inaccuracies, or omissions and\n to change or update the information on the Site at any time, without\n prior notice.\n </p>\n <h2>DISCLAIMER</h2>\n <p>\n THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT\n YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE\n FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR\n IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING,\n WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS\n FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR\n REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE\u2019S CONTENT\n OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO\n LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR\n INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY\n DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE\n OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS\n AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION\n STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR\n FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH\n MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6)\n ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR\n DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT\n POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT\n WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR\n SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY\n HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN\n ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY\n WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY\n THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES.\n </p>\n <p>\n AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN\n ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION\n WHERE APPROPRIATE.\n </p>\n <h2>LIMITATIONS OF LIABILITY</h2>\n <p>\n IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO\n YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL,\n EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST\n PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR\n USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH\n DAMAGES.\n </p>\n <p>\n NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY\n TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE\n ACTION, WILL AT ALL TIMES BE LIMITED TO THE LESSER OF THE AMOUNT PAID,\n IF ANY, BY YOU TO US DURING THE 6 (SIX) MONTH PERIOD PRIOR TO ANY CAUSE\n OF ACTION ARISING OR $10.000 (TEN THOUSAND DOLLARS). CERTAIN STATE LAWS\n DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR\n LIMITATION OF CERTAIN DAMAGES.\n </p>\n <p>\n IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR\n LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS.\n </p>\n <h2>INDEMNIFICATION</h2>\n <p>\n You agree to defend, indemnify, and hold us harmless, including our\n subsidiaries, affiliates, and all of our respective officers, agents,\n partners, and employees, from and against any loss, damage, liability,\n claim, or demand, including reasonable attorneys\u2019 fees and expenses,\n made by any third party due to or arising out of: (1) your\n Contributions; (2) use of the Site; (3) breach of these Terms of Use;\n (4) any breach of your representations and warranties set forth in these\n Terms of Use; (5) your violation of the rights of a third party,\n including but not limited to intellectual property rights; or (6) any\n overt harmful act toward any other user of the Site with whom you\n connected via the Site.\n </p>\n <p>\n Notwithstanding the foregoing, we reserve the right, at your expense, to\n assume the exclusive defense and control of any matter for which you are\n required to indemnify us, and you agree to cooperate, at your expense,\n with our defense of such claims. We will use reasonable efforts to\n notify you of any such claim, action, or proceeding which is subject to\n this indemnification upon becoming aware of it.\n </p>\n <h2>USER DATA</h2>\n <p>\n We will maintain certain data that you transmit to the Site for the\n purpose of managing the Site, as well as data relating to your use of\n the Site. Although we perform regular routine backups of data, you are\n solely responsible for all data that you transmit or that relates to any\n activity you have undertaken using the Site.\n </p>\n <p>\n You agree that we shall have no liability to you for any loss or\n corruption of any such data, and you hereby waive any right of action\n against us arising from any such loss or corruption of such data.\n </p>\n <h2>ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES</h2>\n <p>\n Visiting the Site, sending us emails, and completing online forms\n constitute electronic communications. You consent to receive electronic\n communications, and you agree that all agreements, notices, disclosures,\n and other communications we provide to you electronically, via email and\n on the Site, satisfy any legal requirement that such communication be in\n writing.\n </p>\n <p>\n YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS,\n AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND\n RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE.\n </p>\n <p>\n You hereby waive any rights or requirements under any statutes,\n regulations, rules, ordinances, or other laws in any jurisdiction which\n require an original signature or delivery or retention of non-electronic\n records, or to payments or the granting of credits by any means other\n than electronic means.\n </p>\n\n <h2>MISCELLANEOUS</h2>\n <p>\n These Terms of Use and any policies or operating rules posted by us on\n the Site constitute the entire agreement and understanding between you\n and us. Our failure to exercise or enforce any right or provision of\n these Terms of Use shall not operate as a waiver of such right or\n provision.\n </p>\n <p>\n These Terms of Use operate to the fullest extent permissible by law. We\n may assign any or all of our rights and obligations to others at any\n time. We shall not be responsible or liable for any loss, damage, delay,\n or failure to act caused by any cause beyond our reasonable control.\n </p>\n <p>\n If any provision or part of a provision of these Terms of Use is\n determined to be unlawful, void, or unenforceable, that provision or\n part of the provision is deemed severable from these Terms of Use and\n does not affect the validity and enforceability of any remaining\n provisions.\n </p>\n <p>\n There is no joint venture, partnership, employment or agency\n relationship created between you and us as a result of these Terms of\n Use or use of the Site. You agree that these Terms of Use will not be\n construed against us by virtue of having drafted them.\n </p>\n <p>\n You hereby waive any and all defenses you may have based on the\n electronic form of these Terms of Use and the lack of signing by the\n parties hereto to execute these Terms of Use.\n </p>\n <h2>CONTACT US</h2>\n <p>\n In order to resolve a complaint regarding the Site or to receive further\n information regarding use of the Site, please contact us at:\n <br />{{ company_name }}, {{ company_street }}, {{ company_city_code }}\n {{ company_city }} - {{ company_state }}\n </p>\n <h3>Questions and Comments</h3>\n <p>\n If you have any questions about this Agreement, please\n <a href=\"mailto:{{ company_email }}\">let us know</a>.\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<pw-landing-page-footer-b></pw-landing-page-footer-b>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}h1,h2,h3,h4,h5,h6{font-weight:600}h1{font-size:36px}.card{padding:10px 15px!important}.card ol li{padding-left:30px!important;position:relative;color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding-top:5px;padding-bottom:5px;padding-right:0}.card ol li ol.list-bullet li,.card ol li ul.list-bullet li{padding-left:0!important}.card ol li:before{font:400 16px/1.3 Roboto,sans-serif;left:0;position:absolute;top:4px}.card ol li h3{font:400 20px/1.3 Roboto,sans-serif;margin-bottom:15px}.card p{color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding:5px 0}.card p strong{font-family:Roboto,sans-serif}.banner{background:url(/assets/img/landing-page/header-bg.jpg) no-repeat center;background-size:cover;padding:0 0 130px}.terms-of-service h3{padding:5px 0 0!important}.terms-of-service ol{counter-reset:section;padding:0 5px 0 0!important}.terms-of-service ol li:before{content:counters(section,\".\") \". \";counter-increment:section;float:left;font-weight:600;padding:0 10px 0 0}.terms-of-service ol li ol li ol li:before,.terms-of-service ol li ol li ul li:before{content:\"\";counter-increment:none}li{padding:10px 0}.parent-ol>li:before{font-size:26px;margin-top:16px}ul.list-bullet,ol.list-bullet{list-style-type:disc;margin-left:20px}ul.list-bullet>li,ol.list-bullet>li{padding:0}\n"], dependencies: [{ kind: "directive", type: i3$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LandingPageFooterBComponent, selector: "pw-landing-page-footer-b" }] }); }
2228
2280
  }
2229
2281
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TermsConditionsComponent, decorators: [{
2230
2282
  type: Component,
2231
2283
  args: [{ selector: 'pw-terms-conditions', template: "<ng-container *ngIf=\"isPublic\">\n <pw-landing-page-header [landing]=\"false\"></pw-landing-page-header>\n</ng-container>\n\n<div class=\"container pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div [ngClass]=\"{ 'mt-5': isPublic }\">\n <div class=\"row\">\n <div class=\"col-12 terms-of-service\">\n <h1>POSIWISE TERMS AND CONDITIONS</h1>\n <p>Last updated 26/10/2019</p>\n <h2>AGREEMENT TO TERMS</h2>\n <div class=\"clearfix\"></div>\n <p>\n These Terms of Use constitute a legally binding agreement made between\n you, whether personally or on behalf of an entity (\u201Cyou\u201D) and\n {{ company_name }}, {{ company_street }}, {{ company_city_code }}\n {{ company_city }}\n - {{ company_state }}, {{ company_number }} (\u201Cwe,\u201D \u201Cus\u201D or \u201Cour\u201D),\n concerning your access to and use of the {{ company_state }} website as\n well as any other media form, media channel, mobile website or mobile\n application related, linked, or otherwise connected thereto\n (collectively, the \u201CSite\u201D).\n </p>\n <p>\n You agree that by accessing the Site, you have read, understood, and\n agree to be bound by all of these Terms of Use. If you do not agree with\n all of these Terms of Use, then you are expressly prohibited from using\n the Site and you must discontinue use immediately.\n </p>\n <p>\n Supplemental terms and conditions or documents that may be posted on the\n Site from time to time are hereby expressly incorporated herein by\n reference. We reserve the right, in our sole discretion, to make changes\n or modifications to these Terms of Use at any time and for any reason.\n </p>\n <p>\n We will alert you about any changes by updating the \u201CLast updated\u201D date\n of these Terms of Use, and you waive any right to receive specific\n notice of each such change.\n </p>\n <p>\n It is your responsibility to periodically review these Terms of Use to\n stay informed of updates. You will be subject to, and will be deemed to\n have been made aware of and to have accepted, the changes in any revised\n Terms of Use by your continued use of the Site after the date such\n revised Terms of Use are posted.\n </p>\n <p>\n The information provided on the Site is not intended for distribution to\n or use by any person or entity in any jurisdiction or country where such\n distribution or use would be contrary to law or regulation or which\n would subject us to any registration requirement within such\n jurisdiction or country.\n </p>\n <p>\n Accordingly, those persons who choose to access the Site from other\n locations do so on their own initiative and are solely responsible for\n compliance with local laws, if and to the extent local laws are\n applicable.\n </p>\n <p>\n The Site is intended for users who are at least 13 years of age. All\n users who are minors in the jurisdiction in which they reside (generally\n under the age of 18) must have the permission of, and be directly\n supervised by, their parent or guardian to use the Site. If you are a\n minor, you must have your parent or guardian read and agree to these\n Terms of Use prior to you using the Site.\n </p>\n <h2>INTELLECTUAL PROPERTY RIGHTS</h2>\n <p>\n Unless otherwise indicated, the Site is our proprietary property and all\n source code, databases, functionality, software, website designs, audio,\n video, text, photographs, and graphics on the Site (collectively, the\n \u201CContent\u201D) and the trademarks, service marks, and logos contained\n therein (the \u201CMarks\u201D) are owned or controlled by us or licensed to us,\n and are protected by copyright and trademark laws and various other\n intellectual property rights and unfair competition laws of the United\n States, foreign jurisdictions, and international conventions.\n </p>\n <p>\n The Content and the Marks are provided on the Site \u201CAS IS\u201D for your\n information and personal use only. Except as expressly provided in these\n Terms of Use, no part of the Site and no Content or Marks may be copied,\n reproduced, aggregated, republished, uploaded, posted, publicly\n displayed, encoded, translated, transmitted, distributed, sold,\n licensed, or otherwise exploited for any commercial purpose whatsoever,\n without our express prior written permission.\n </p>\n <p>\n Provided that you are eligible to use the Site, you are granted a\n limited license to access and use the Site and to download or print a\n copy of any portion of the Content to which you have properly gained\n access solely for your personal, non-commercial use. We reserve all\n rights not expressly granted to you in and to the Site, the Content and\n the Marks.\n </p>\n <h1>USER REPRESENTATIONS</h1>\n <p>By using the Site, you represent and warrant that:</p>\n <ol>\n <li>\n <p class=\"m-0\">\n all registration information you submit will be true, accurate,\n current, and complete.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will maintain the accuracy of such information and promptly\n update such registration information as necessary.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you have the legal capacity and you agree to comply with these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">you are not under the age of 13.</p>\n </li>\n <li>\n <p class=\"m-0\">\n not a minor in the jurisdiction in which you reside, or if a\n minor, you have received parental permission to use the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will not access the Site through automated or non-human\n means, whether through a bot, script, or otherwise.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you will not use the Site for any illegal or unauthorized\n purpose.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your use of the Site will not violate any applicable law or\n regulation.\n </p>\n </li>\n </ol>\n <p>\n If you provide any information that is untrue, inaccurate, not current,\n or incomplete, we have the right to suspend or terminate your account\n and refuse any and all current or future use of the Site (or any portion\n thereof).\n </p>\n <h2>USER REGISTRATION</h2>\n <p>\n You may be required to register with the Site. You agree to keep your\n password confidential and will be responsible for all use of your\n account and password. We reserve the right to remove, reclaim, or change\n a username you select if we determine, in our sole discretion, that such\n username is inappropriate, obscene, or otherwise objectionable.\n </p>\n <h2>PROHIBITED ACTIVITIES</h2>\n <p>\n You may not access or use the Site for any purpose other than that for\n which we make the Site available. The Site may not be used in connection\n with any commercial endeavors except those that are specifically\n endorsed or approved by us.\n </p>\n <p>As a user of the Site, you agree not to:</p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n systematically retrieve data or other content from the Site to\n create or compile, directly or indirectly, a collection,\n compilation, database, or directory without written permission\n from us.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n make any unauthorized use of the Site, including collecting\n usernames and/or email addresses of users by electronic or other\n means for the purpose of sending unsolicited email, or creating\n user accounts by automated means or under false pretenses.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use a buying agent or purchasing agent to make purchases on the\n Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site to advertise or offer to sell goods and services.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n circumvent, disable, or otherwise interfere with\n security-related features of the Site, including features that\n prevent or restrict the use or copying of any Content or enforce\n limitations on the use of the Site and/or the Content contained\n therein.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n engage in unauthorized framing of or linking to the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n trick, defraud, or mislead us and other users, especially in any\n attempt to learn sensitive account information such as user\n passwords\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n make improper use of our support services or submit false\n reports of abuse or misconduct.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n engage in any automated use of the system, such as using scripts\n to send comments or messages, or using any data mining, robots,\n or similar data gathering and extraction tools.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n interfere with, disrupt, or create an undue burden on the Site\n or the networks or services connected to the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n attempt to impersonate another user or person or use the\n username of another user.\n </p>\n </li>\n <li>\n <p class=\"m-0\">sell or otherwise transfer your profile.</p>\n </li>\n <li>\n <p class=\"m-0\">\n use any information obtained from the Site in order to harass,\n abuse, or harm another person.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site as part of any effort to compete with us or\n otherwise use the Site and/or the Content for any\n revenue-generating endeavor or commercial enterprise.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n decipher, decompile, disassemble, or reverse engineer any of the\n software comprising or in any way making up a part of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n attempt to bypass any measures of the Site designed to prevent\n or restrict access to the Site, or any portion of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n harass, annoy, intimidate, or threaten any of our employees or\n agents engaged in providing any portion of the Site to you.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n delete the copyright or other proprietary rights notice from any\n Content.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n copy or adapt the Site\u2019s software, including but not limited to\n Flash, PHP, HTML, JavaScript, or other code.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n upload or transmit (or attempt to upload or to transmit)\n viruses, Trojan horses, or other material, including excessive\n use of capital letters and spamming (continuous posting of\n repetitive text), that interferes with any party\u2019s uninterrupted\n use and enjoyment of the Site or modifies, impairs, disrupts,\n alters, or interferes with the use, features, functions,\n operation, or maintenance of the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n upload or transmit (or attempt to upload or to transmit) any\n material that acts as a passive or active information collection\n or transmission mechanism, including without limitation, clear\n graphics interchange formats (\u201Cgifs\u201D), 1\u00D71 pixels, web bugs,\n cookies, or other similar devices (sometimes referred to as\n \u201Cspyware\u201D or \u201Cpassive collection mechanisms\u201D or \u201Cpcms\u201D).\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n except as may be the result of standard search engine or\n Internet browser usage, use, launch, develop, or distribute any\n automated system, including without limitation, any spider,\n robot, cheat utility, scraper, or offline reader that accesses\n the Site, or using or launching any unauthorized script or other\n software.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n disparage, tarnish, or otherwise harm, in our opinion, us and/or\n the Site.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n use the Site in a manner inconsistent with any applicable laws\n or regulations.\n </p>\n </li>\n </ol>\n\n <h2>USER GENERATED CONTRIBUTIONS</h2>\n\n <p>\n The Site may invite you to chat, contribute to, or participate in blogs,\n message boards, online forums, and other functionality, and may provide\n you with the opportunity to create, submit, post, display, transmit,\n perform, publish, distribute, or broadcast content and materials to us\n or on the Site, including but not limited to text, writings, video,\n audio, photographs, graphics, comments, suggestions, or personal\n information or other material (collectively, \"Contributions\").\n </p>\n <p>\n Contributions may be viewable by other users of the Site and through\n third-party websites. As such, any Contributions you transmit may be\n treated as non-confidential and non-proprietary. When you create or make\n available any Contributions, you thereby represent and warrant that:\n </p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n the creation, distribution, transmission, public display, or\n performance, and the accessing, downloading, or copying of your\n Contributions do not and will not infringe the proprietary\n rights, including but not limited to the copyright, patent,\n trademark, trade secret, or moral rights of any third party.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you are the creator and owner of or have the necessary licenses,\n rights, consents, releases, and permissions to use and to\n authorize us, the Site, and other users of the Site to use your\n Contributions in any manner contemplated by the Site and these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you have the written consent, release, and/or permission of each\n and every identifiable individual person in your Contributions\n to use the name or likeness of each and every such identifiable\n individual person to enable inclusion and use of your\n Contributions in any manner contemplated by the Site and these\n Terms of Use.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not false, inaccurate, or misleading.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not unsolicited or unauthorized\n advertising, promotional materials, pyramid schemes, chain\n letters, spam, mass mailings, or other forms of solicitation.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions are not obscene, lewd, lascivious, filthy,\n violent, harassing, libelous, slanderous, or otherwise\n objectionable (as determined by us).\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not ridicule, mock, disparage, intimidate,\n or abuse anyone.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not advocate the violent overthrow of any\n government or incite, encourage, or threaten physical harm\n against another.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate any applicable law,\n regulation, or rule.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate the privacy or publicity\n rights of any third party.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not contain any material that solicits\n personal information from anyone under the age of 18 or exploits\n people under the age of 18 in a sexual or violent manner.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not violate any federal or state law\n concerning child pornography, or otherwise intended to protect\n the health or well-being of minors.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not include any offensive comments that\n are connected to race, national origin, gender, sexual\n preference, or physical handicap.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your Contributions do not otherwise violate, or link to material\n that violates, any provision of these Terms of Use, or any\n applicable law or regulation.\n </p>\n </li>\n </ol>\n <p>\n Any use of the Site in violation of the foregoing violates these Terms\n of Use and may result in, among other things, termination or suspension\n of your rights to use the Site.\n </p>\n\n <h2>CONTRIBUTION LICENSE</h2>\n\n <p>\n By posting your Contributions to any part of the Site, or making\n Contributions accessible to the Site by linking your account from the\n Site to any of your social networking accounts, you automatically grant,\n and you represent and warrant that you have the right to grant, to us an\n unrestricted, unlimited, irrevocable, perpetual, non-exclusive,\n transferable, royalty-free, fully-paid, worldwide right, and license to\n host, use, copy, reproduce, disclose, sell, resell, publish, broadcast,\n re title, archive, store, cache, publicly perform, publicly display,\n reformat, translate, transmit, excerpt (in whole or in part), and\n distribute such Contributions (including, without limitation, your image\n and voice) for any purpose, commercial, advertising, or otherwise, and\n to prepare derivative works of, or incorporate into other works, such\n Contributions, and grant and authorize sublicense of the foregoing. The\n use and distribution may occur in any media formats and through any\n media channels.\n </p>\n <p>\n This license will apply to any form, media, or technology now known or\n hereafter developed, and includes our use of your name, company name,\n and franchise name, as applicable, and any of the trademarks, service\n marks, trade names, logos, and personal and commercial images you\n provide. You waive all moral rights in your Contributions, and you\n warrant that moral rights have not otherwise been asserted in your\n Contributions.\n </p>\n <p>\n We do not assert any ownership over your Contributions. You retain full\n ownership of all of your Contributions and any intellectual property\n rights or other proprietary rights associated with your Contributions.\n We are not liable for any statements or representations in your\n Contributions provided by you in any area on the Site.\n </p>\n <p>\n You are solely responsible for your Contributions to the Site and you\n expressly agree to exonerate us from any and all responsibility and to\n refrain from any legal action against us regarding your Contributions.\n </p>\n <p>\n We have the right, in our sole and absolute discretion, (1) to edit,\n redact, or otherwise change any Contributions; (2) to re-categorize any\n Contributions to place them in more appropriate locations on the Site;\n and (3) to pre-screen or delete any Contributions at any time and for\n any reason, without notice. We have no obligation to monitor your\n Contributions.\n </p>\n <h2>GUIDELINES FOR REVIEWS</h2>\n <ol>\n <li>\n <p class=\"m-0\">\n We may provide you areas on the Site to leave reviews or\n ratings. When posting a review, you must comply with the\n following criteria:\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should have firsthand experience with the person/entity\n being reviewed.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain offensive profanity, or abusive,\n racist, offensive, or hate language.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain discriminatory references based\n on religion, race, gender, national origin, age, marital status,\n sexual orientation, or disability.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n your reviews should not contain references to illegal activity.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should not be affiliated with competitors if posting\n negative reviews.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you should not make any conclusions as to the legality of\n conduct.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you may not post any false or misleading statements.\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n you may not organize a campaign encouraging others to post\n reviews, whether positive or negative.\n </p>\n </li>\n </ol>\n <p>\n We may accept, reject, or remove reviews in our sole discretion. We have\n absolutely no obligation to screen reviews or to delete reviews, even if\n anyone considers reviews objectionable or inaccurate. Reviews are not\n endorsed by us, and do not necessarily represent our opinions or the\n views of any of our affiliates or partners.\n </p>\n <p>\n We do not assume liability for any review or for any claims,\n liabilities, or losses resulting from any review. By posting a review,\n you hereby grant to us a perpetual, non-exclusive, worldwide,\n royalty-free, fully-paid, assignable, and sub-licensable right and\n license to reproduce, modify, translate, transmit by any means, display,\n perform, and/or distribute all content relating to reviews.\n </p>\n <h2>MOBILE APPLICATION LICENSE</h2>\n <h3>Use License</h3>\n\n <p>\n If you access the Site via a mobile application, then we grant you a\n revocable, non-exclusive, non-transferable, limited right to install and\n use the mobile application on wireless electronic devices owned or\n controlled by you, and to access and use the mobile application on such\n devices strictly in accordance with the terms and conditions of this\n mobile application license contained in these Terms of Use.\n </p>\n <p>Use License</p>\n <p>\n (1) decompile, reverse engineer, disassemble, attempt to derive the\n source code of, or decrypt the application.\n </p>\n <p>\n (2) make any modification, adaptation, improvement, enhancement,\n translation, or derivative work from the application.\n </p>\n <p>\n (3) violate any applicable laws, rules, or regulations in connection\n with your access or use of the application.\n </p>\n <p>\n (4) remove, alter, or obscure any proprietary notice (including any\n notice of copyright or trademark) posted by us or the licensors of the\n application.\n </p>\n <p>\n (5) use the application for any revenue generating endeavor, commercial\n enterprise, or other purpose for which it is not designed or intended.\n </p>\n <p>\n (6) make the application available over a network or other environment\n permitting access or use by multiple devices or users at the same .\n </p>\n <p>\n (7) use the application for creating a product, service, or software\n that is, directly or indirectly, competitive with or in any way a\n substitute for the application.\n </p>\n <p>\n (8) use the application to send automated queries to any website or to\n send any unsolicited commercial e-mail.\n </p>\n <p>\n (9) use any proprietary information or any of our interfaces or our\n other intellectual property in the design, development, manufacture,\n licensing, or distribution of any applications, accessories, or devices\n for use with the application.\n </p>\n <h3>Apple and Android Devices</h3>\n <p>\n The following terms apply when you use a mobile application obtained\n from either the Apple Store or Google Play (each an \u201CApp Distributor\u201D)\n to access the Site:\n </p>\n <p>\n (1) the license granted to you for our mobile application is limited to\n a non-transferable license to use the application on a device that\n utilizes the Apple iOS or Android operating systems, as applicable, and\n in accordance with the usage rules set forth in the applicable\n Distributor\u2019s terms of service\n </p>\n <p>\n (2) we are responsible for providing any maintenance and support\n services with respect to the mobile application as specified in the\n terms and conditions of this mobile application contained in these Terms\n of Use or as otherwise required under applicable law, and you\n acknowledge that each App Distributor has no obligation whatsoever to\n furnish any maintenance and support services with respect to the mobile\n application.\n </p>\n <p>\n (3) in the event of any failure of the mobile application to conform to\n any applicable warranty, you may notify the applicable App Distributor,\n and the App Distributor, in accordance with its terms and policies, may\n refund the purchase price, if any, paid for the mobile application, and\n to the maximum extent permitted by applicable law, the App Distributor\n will have no other warranty obligation whatsoever with respect to the\n mobile application.\n </p>\n <p>\n (4) you represent and warrant that (i) you are not located in a country\n that is subject to a U.S. government embargo, or that has been\n designated by the U.S. government as a \u201Cterrorist supporting\u201D country\n and (ii) you are not listed on any U.S. government list of prohibited or\n restricted parties.\n </p>\n <p>\n (5) you must comply with applicable third-party terms of agreement when\n using the mobile application, e.g., if you have a VoIP application, then\n you must not be in violation of their wireless data service agreement\n when using the mobile application.\n </p>\n <p>\n (6) you acknowledge and agree that the App Distributors are third-party\n beneficiaries of the terms and conditions in this mobile application\n license contained in these Terms of Use, and that each App Distributor\n will have the right (and will be deemed to have accepted the right) to\n enforce the terms and conditions in this mobile application license\n contained in these Terms of Use against you as a third-party beneficiary\n thereof.\n </p>\n <h2>SOCIAL MEDIA</h2>\n <p>\n As part of the functionality of the Site, you may link your account with\n online accounts you have with third-party service providers (each such\n account, a \u201CThird-Party Account\u201D) by either:\n </p>\n\n <ol>\n <li>\n <p class=\"m-0\">\n providing your Third-Party Account login information through the\n Site; or\n </p>\n </li>\n <li>\n <p class=\"m-0\">\n allowing us to access your Third-Party Account, as is permitted\n under the applicable terms and conditions that govern your use\n of each Third-Party Account.\n </p>\n </li>\n </ol>\n\n <p>\n You represent and warrant that you are entitled to disclose your\n Third-Party Account login information to us and/or grant us access to\n your Third-Party Account, without breach by you of any of the terms and\n conditions that govern your use of the applicable Third-Party Account,\n and without obligating us to pay any fees or making us subject to any\n usage limitations imposed by the third-party service provider of the\n Third-Party Account.\n </p>\n <p>\n By granting us access to any Third-Party Accounts, you understand that\n (1) we may access, make available, and store (if applicable) any content\n that you have provided to and stored in your Third-Party Account (the\n \u201CSocial Network Content\u201D) so that it is available on and through the\n Site via your account, including without limitation any friend lists and\n (2) we may submit to and receive from your Third-Party Account\n additional information to the extent you are notified when you link your\n account with the Third-Party Account.\n </p>\n <p>\n Depending on the Third-Party Accounts you choose and subject to the\n privacy settings that you have set in such Third-Party Accounts,\n personally identifiable information that you post to your Third-Party\n Accounts may be available on and through your account on the Site.\n </p>\n <p>\n Please note that if a Third-Party Account or associated service becomes\n unavailable or our access to such Third-Party Account is terminated by\n the third-party service provider, then Social Network Content may no\n longer be available on and through the Site. You will have the ability\n to disable the connection between your account on the Site and your\n Third-Party Accounts at any time.\n </p>\n\n <p>\n PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE\n PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY\n BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS.\n </p>\n <p>\n We make no effort to review any Social Network Content for any purpose,\n including but not limited to, for accuracy, legality, or\n non-infringement, and we are not responsible for any Social Network\n Content.\n </p>\n <p>\n You acknowledge and agree that we may access your email address book\n associated with a Third-Party Account and your contacts list stored on\n your mobile device or tablet computer solely for purposes of identifying\n and informing you of those contacts who have also registered to use the\n Site.\n </p>\n <p>\n You acknowledge and agree that we may access your email address book\n associated with a Third-Party Account and your contacts list stored on\n your mobile device or tablet computer solely for purposes of identifying\n and informing you of those contacts who have also registered to use the\n Site.\n </p>\n <h2>SUBMISSIONS</h2>\n <p>\n You acknowledge and agree that any questions, comments, suggestions,\n ideas, feedback, or other information regarding the Site (\"Submissions\")\n provided by you to us are non-confidential and shall become our sole\n property. We shall own exclusive rights, including all intellectual\n property rights, and shall be entitled to the unrestricted use and\n dissemination of these Submissions for any lawful purpose, commercial or\n otherwise, without acknowledgment or compensation to you.\n </p>\n <p>\n You hereby waive all moral rights to any such Submissions, and you\n hereby warrant that any such Submissions are original with you or that\n you have the right to submit such Submissions. You agree there shall be\n no recourse against us for any alleged or actual infringement or\n misappropriation of any proprietary right in your Submissions.\n </p>\n <h2>THIRD-PARTY WEBSITES AND CONTENT</h2>\n <p>\n The Site may contain (or you may be sent via the Site) links to other\n websites (\"Third-Party Websites\") as well as articles, text, graphics,\n pictures, designs, music, sound, video, information, applications,\n software, and other content or items belonging to or originating from\n third parties (\"Third-Party Content\").\n </p>\n <p>\n Such Third-Party Websites and Third-Party Content are not investigated,\n monitored, or checked for accuracy, appropriateness, or completeness by\n us, and we are not responsible for any Third-Party Websites accessed\n through the Site or any Third-Party Content posted on, available\n through, or installed from the Site, including the content, accuracy,\n offensiveness, opinions, reliability, privacy practices, or other\n policies of or contained in the Third-Party Websites or the Third-Party\n Content.\n </p>\n <p>\n Inclusion of, linking to, or permitting the use or installation of any\n Third-Party Websites or any Third-Party Content does not imply approval\n or endorsement thereof by us. If you decide to leave the Site and access\n the Third-Party Websites or to use or install any Third-Party Content,\n you do so at your own risk, and you should be aware these Terms of Use\n no longer govern.\n </p>\n <p>\n You should review the applicable terms and policies, including privacy\n and data gathering practices, of any website to which you navigate from\n the Site or relating to any applications you use or install from the\n Site. Any purchases you make through Third-Party Websites will be\n through other websites and from other companies, and we take no\n responsibility whatsoever in relation to such purchases which are\n exclusively between you and the applicable third party.\n </p>\n <p>\n You agree and acknowledge that we do not endorse the products or\n services offered on Third-Party Websites and you shall hold us harmless\n from any harm caused by your purchase of such products or services.\n Additionally, you shall hold us harmless from any losses sustained by\n you or harm caused to you relating to or resulting in any way from any\n Third-Party Content or any contact with Third-Party Websites.\n </p>\n <h2>ADVERTISERS</h2>\n <p>\n We allow advertisers to display their advertisements and other\n information in certain areas of the Site, such as sidebar advertisements\n or banner advertisements. If you are an advertiser, you shall take full\n responsibility for any advertisements you place on the Site and any\n services provided on the Site or products sold through those\n advertisements.\n </p>\n <p>\n Further, as an advertiser, you warrant and represent that you possess\n all rights and authority to place advertisements on the Site, including,\n but not limited to, intellectual property rights, publicity rights, and\n contractual rights.\n </p>\n <p>\n As an advertiser, you agree that such advertisements are subject to our\n Digital Millennium Copyright Act (\u201CDMCA\u201D) Notice and Policy provisions\n as described below, and you understand and agree there will be no refund\n or other compensation for DMCA take down-related issues. We simply\n provide the space to place such advertisements, and we have no other\n relationship with advertisers.\n </p>\n <h2>SITE MANAGEMENT</h2>\n <p>We reserve the right, but not the obligation, to:</p>\n <p>(1) monitor the Site for violations of these Terms of Use.</p>\n <p>\n (2) take appropriate legal action against anyone who, in our sole\n discretion, violates the law or these Terms of Use, including without\n limitation, reporting such user to law enforcement authorities.\n </p>\n <p>\n (3) in our sole discretion and without limitation, refuse, restrict\n access to, limit the availability of, or disable (to the extent\n technologically feasible) any of your Contributions or any portion\n thereof\n </p>\n <p>\n (4) in\u00A0our sole discretion and without limitation, notice, or liability,\n to remove from the Site or otherwise disable all files and content that\n are excessive in size or are in any way burdensome to our systems.\n </p>\n <p>\n (5) otherwise manage the Site in a manner designed to protect our rights\n and property and to facilitate the proper functioning of the Site.\n </p>\n <h2>PRIVACY POLICY</h2>\n <p>\n We care about data privacy and security. Please review our Privacy\n Policy: <a href=\"/privacy-policy\">click here</a>. By using the Site, you\n agree to be bound by our Privacy Policy, which is incorporated into\n these Terms of Use. Please be advised the Site is hosted in the United\n States.\n </p>\n <p>\n If you access the Site from the European Union, Asia, or any other\n region of the world with laws or other requirements governing personal\n data collection, use, or disclosure that differ from applicable laws in\n the United States, then through your continued use of the Site, you are\n transferring your data to the United States, and you expressly consent\n to have your data transferred to and processed in the United States.\n </p>\n <p>\n Further, we do not knowingly accept, request, or solicit information\n from children or knowingly market to children. Therefore, in accordance\n with the U.S. Children\u2019s Online Privacy Protection Act, if we receive\n actual knowledge that anyone under the age of 13 has provided personal\n information to us without the requisite and verifiable parental consent,\n we will delete that information from the Site as quickly as is\n reasonably practical.\n </p>\n <h2>DIGITAL MILLENNIUM COPYRIGHT ACT (DMCA) NOTICE AND POLICY</h2>\n <h3>Notifications</h3>\n <p>\n We respect the intellectual property rights of others. If you believe\n that any material available on or through the Site infringes upon any\n copyright you own or control, please immediately notify our Designated\n Copyright Agent using the contact information provided below (a\n \u201CNotification\u201D).\n </p>\n <p>\n A copy of your Notification will be sent to the person who posted or\n stored the material addressed in the Notification. Please be advised\n that pursuant to federal law you may be held liable for damages if you\n make material misrepresentations in a Notification. Thus, if you are not\n sure that material located on or linked to by the Site infringes your\n copyright, you should consider first contacting an attorney.\n </p>\n <p>\n All Notifications should meet the requirements of DMCA 17 U.S.C. \u00A7\n 512(c)(3) and include the following information:\n </p>\n <p>\n (1) A physical or electronic signature of a person authorized to act on\n behalf of the owner of an exclusive right that is allegedly infringed.\n </p>\n <p>\n (2) identification of the copyrighted work claimed to have been\n infringed, or, if multiple copyrighted works on the Site are covered by\n the Notification, a representative list of such works on the Site\n </p>\n <p>\n (3) information reasonably sufficient to permit us to contact the\n complaining party, such as an address, telephone number, and, if\n available, an email address at which the complaining party may be\n contacted.\n </p>\n <p>\n (4) a statement that the complaining party has a good faith belief that\n use of the material in the manner complained of is not authorized by the\n copyright owner, its agent, or the law.\n </p>\n <p>\n (5) a statement that the information in the notification is accurate,\n and under penalty of perjury, that the complaining party is authorized\n to act on behalf of the owner of an exclusive right that is allegedly\n infringed upon.\n </p>\n <h3>Counter Notification</h3>\n <p>\n If you believe your own copyrighted material has been removed from the\n Site as a result of a mistake or mis identification, you may submit a\n written counter notification to us using the contact information\n provided below (a \u201CCounter Notification\u201D).\n </p>\n <p>\n To be an effective Counter Notification under the DMCA, your Counter\n Notification must include substantially the following:\n </p>\n <p>\n (1) identification of the material that has been removed or disabled and\n the location at which the material appeared before it was removed or\n disabled.\n </p>\n <p>\n (2) a statement that you consent to the jurisdiction of the Federal\n District Court in which your address is located, or if your address is\n outside the United States, for any judicial district in which we are\n located.\n </p>\n <p>\n (3) a statement that you will accept service of process from the party\n that filed the Notification or the party's agent.\n </p>\n <p>(4) your name, address, and telephone number.</p>\n <p>\n (5) a statement under penalty of perjury that you have a good faith\n belief that the material in question was removed or disabled as a result\n of a mistake or mis identification of the material to be removed or\n disabled\n </p>\n <p>(6) your physical or electronic signature.</p>\n <p>\n If you send us a valid, written Counter Notification meeting the\n requirements described above, we will restore your removed or disabled\n material, unless we first receive notice from the party filing the\n Notification informing us that such party has filed a court action to\n restrain you from engaging in infringing activity related to the\n material in question.\n </p>\n <p>\n Please note that if you materially misrepresent that the disabled or\n removed content was removed by mistake or mis-identification, you may be\n liable for damages, including costs and attorney's fees. Filing a false\n Counter Notification constitutes perjury.\n </p>\n <p>\n Designated Copyright Agent\n <br />\n {{ company_name }}\n <br />\n Attn: Copyright Agent\n <br />\n {{ company_email }}\n </p>\n <h2>COPYRIGHT INFRINGEMENTS</h2>\n <p>\n We respect the intellectual property rights of others. If you believe\n that any material available on or through the Site infringes upon any\n copyright you own or control, please immediately notify us using the\n contact information provided below (a \u201CNotification\u201D). A copy of your\n Notification will be sent to the person who posted or stored the\n material addressed in the Notification.\n </p>\n <p>\n Please be advised that pursuant to federal law you may be held liable\n for damages if you make material misrepresentations in a Notification.\n Thus, if you are not sure that material located on or linked to by the\n Site infringes your copyright, you should consider first contacting an\n attorney.\n </p>\n <h2>TERM AND TERMINATION</h2>\n <p>\n These Terms of Use shall remain in full force and effect while you use\n the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE\n RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR\n LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING\n CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON,\n INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY,\n OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR\n REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR\n DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT\n ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.\n </p>\n <p>\n If we terminate or suspend your account for any reason, you are\n prohibited from registering and creating a new account under your name,\n a fake or borrowed name, or the name of any third party, even if you may\n be acting on behalf of the third party.\n </p>\n <p>\n In addition to terminating or suspending your account, we reserve the\n right to take appropriate legal action, including without limitation\n pursuing civil, criminal, and injunctive redress.\n </p>\n <h2>MODIFICATIONS AND INTERRUPTIONS</h2>\n <p>\n We reserve the right to change, modify, or remove the contents of the\n Site at any time or for any reason at our sole discretion without\n notice. However, we have no obligation to update any information on our\n Site. We also reserve the right to modify or discontinue all or part of\n the Site without notice at any time.\n </p>\n <p>\n We will not be liable to you or any third party for any modification,\n price change, suspension, or discontinuance of the Site.\n </p>\n <p>\n We cannot guarantee the Site will be available at all times. We may\n experience hardware, software, or other problems or need to perform\n maintenance related to the Site, resulting in interruptions, delays, or\n errors.\n </p>\n <p>\n We reserve the right to change, revise, update, suspend, discontinue, or\n otherwise modify the Site at any time or for any reason without notice\n to you. You agree that we have no liability whatsoever for any loss,\n damage, or inconvenience caused by your inability to access or use the\n Site during any downtime or discontinuance of the Site.\n </p>\n <p>\n Nothing in these Terms of Use will be construed to obligate us to\n maintain and support the Site or to supply any corrections, updates, or\n releases in connection therewith.\n </p>\n <h2>GOVERNING LAW</h2>\n <p>\n For any dispute relating to the entering into effect, validity,\n interpretation, execution, suspension, termination and forcible\n execution of this Contract, the Courts of the judicial district of\n Brussels have jurisdiction. Belgian law governs this Contract, excluding\n provisions of private international law pertinent to the applicable law,\n and the Vienna Convention on contracts for the international sale of\n real property (Vienna, April 11, 1980).\n </p>\n <h2>DISPUTE RESOLUTION</h2>\n <p>\n The parties shall endeavour to settle any dispute arising out of or\n relating to this agreement, including with regard to its existence,\n validity or termination, by mediation before having recourse to\n arbitration or litigation.\n </p>\n <p>\n Any legal action of whatever nature brought by either you or us\n (collectively, the \u201CParties\u201D and individually, a \u201CParty\u201D) shall be\n commenced or prosecuted in the state and federal courts located in\n Brussels, Belgium, and the Parties hereby consent to, and waive all\n defenses of lack of personal jurisdiction and forum non convenient with\n respect to venue and jurisdiction in such state and federal courts.\n </p>\n <p>\n Application of the United Nations Convention on Contracts for the\n International Sale of Goods and the Uniform Computer Information\n Transaction Act (UCITA) are excluded from these Terms of Use. In no\n event shall any claim, action, or proceeding brought by either Party\n related in any way to the Site be commenced more than 2 years after the\n cause of action arose.\n </p>\n <h2>CORRECTIONS</h2>\n <p>\n There may be information on the Site that contains typographical errors,\n inaccuracies, or omissions that may relate to the Site, including\n descriptions, pricing, availability, and various other information. We\n reserve the right to correct any errors, inaccuracies, or omissions and\n to change or update the information on the Site at any time, without\n prior notice.\n </p>\n <h2>DISCLAIMER</h2>\n <p>\n THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT\n YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE\n FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR\n IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING,\n WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS\n FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR\n REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE\u2019S CONTENT\n OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO\n LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR\n INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY\n DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE\n OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS\n AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION\n STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR\n FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH\n MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6)\n ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR\n DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT\n POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT\n WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR\n SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY\n HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN\n ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY\n WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY\n THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES.\n </p>\n <p>\n AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN\n ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION\n WHERE APPROPRIATE.\n </p>\n <h2>LIMITATIONS OF LIABILITY</h2>\n <p>\n IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO\n YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL,\n EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST\n PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR\n USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH\n DAMAGES.\n </p>\n <p>\n NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY\n TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE\n ACTION, WILL AT ALL TIMES BE LIMITED TO THE LESSER OF THE AMOUNT PAID,\n IF ANY, BY YOU TO US DURING THE 6 (SIX) MONTH PERIOD PRIOR TO ANY CAUSE\n OF ACTION ARISING OR $10.000 (TEN THOUSAND DOLLARS). CERTAIN STATE LAWS\n DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR\n LIMITATION OF CERTAIN DAMAGES.\n </p>\n <p>\n IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR\n LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS.\n </p>\n <h2>INDEMNIFICATION</h2>\n <p>\n You agree to defend, indemnify, and hold us harmless, including our\n subsidiaries, affiliates, and all of our respective officers, agents,\n partners, and employees, from and against any loss, damage, liability,\n claim, or demand, including reasonable attorneys\u2019 fees and expenses,\n made by any third party due to or arising out of: (1) your\n Contributions; (2) use of the Site; (3) breach of these Terms of Use;\n (4) any breach of your representations and warranties set forth in these\n Terms of Use; (5) your violation of the rights of a third party,\n including but not limited to intellectual property rights; or (6) any\n overt harmful act toward any other user of the Site with whom you\n connected via the Site.\n </p>\n <p>\n Notwithstanding the foregoing, we reserve the right, at your expense, to\n assume the exclusive defense and control of any matter for which you are\n required to indemnify us, and you agree to cooperate, at your expense,\n with our defense of such claims. We will use reasonable efforts to\n notify you of any such claim, action, or proceeding which is subject to\n this indemnification upon becoming aware of it.\n </p>\n <h2>USER DATA</h2>\n <p>\n We will maintain certain data that you transmit to the Site for the\n purpose of managing the Site, as well as data relating to your use of\n the Site. Although we perform regular routine backups of data, you are\n solely responsible for all data that you transmit or that relates to any\n activity you have undertaken using the Site.\n </p>\n <p>\n You agree that we shall have no liability to you for any loss or\n corruption of any such data, and you hereby waive any right of action\n against us arising from any such loss or corruption of such data.\n </p>\n <h2>ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES</h2>\n <p>\n Visiting the Site, sending us emails, and completing online forms\n constitute electronic communications. You consent to receive electronic\n communications, and you agree that all agreements, notices, disclosures,\n and other communications we provide to you electronically, via email and\n on the Site, satisfy any legal requirement that such communication be in\n writing.\n </p>\n <p>\n YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS,\n AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND\n RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE.\n </p>\n <p>\n You hereby waive any rights or requirements under any statutes,\n regulations, rules, ordinances, or other laws in any jurisdiction which\n require an original signature or delivery or retention of non-electronic\n records, or to payments or the granting of credits by any means other\n than electronic means.\n </p>\n\n <h2>MISCELLANEOUS</h2>\n <p>\n These Terms of Use and any policies or operating rules posted by us on\n the Site constitute the entire agreement and understanding between you\n and us. Our failure to exercise or enforce any right or provision of\n these Terms of Use shall not operate as a waiver of such right or\n provision.\n </p>\n <p>\n These Terms of Use operate to the fullest extent permissible by law. We\n may assign any or all of our rights and obligations to others at any\n time. We shall not be responsible or liable for any loss, damage, delay,\n or failure to act caused by any cause beyond our reasonable control.\n </p>\n <p>\n If any provision or part of a provision of these Terms of Use is\n determined to be unlawful, void, or unenforceable, that provision or\n part of the provision is deemed severable from these Terms of Use and\n does not affect the validity and enforceability of any remaining\n provisions.\n </p>\n <p>\n There is no joint venture, partnership, employment or agency\n relationship created between you and us as a result of these Terms of\n Use or use of the Site. You agree that these Terms of Use will not be\n construed against us by virtue of having drafted them.\n </p>\n <p>\n You hereby waive any and all defenses you may have based on the\n electronic form of these Terms of Use and the lack of signing by the\n parties hereto to execute these Terms of Use.\n </p>\n <h2>CONTACT US</h2>\n <p>\n In order to resolve a complaint regarding the Site or to receive further\n information regarding use of the Site, please contact us at:\n <br />{{ company_name }}, {{ company_street }}, {{ company_city_code }}\n {{ company_city }} - {{ company_state }}\n </p>\n <h3>Questions and Comments</h3>\n <p>\n If you have any questions about this Agreement, please\n <a href=\"mailto:{{ company_email }}\">let us know</a>.\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<pw-landing-page-footer-b></pw-landing-page-footer-b>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}h1,h2,h3,h4,h5,h6{font-weight:600}h1{font-size:36px}.card{padding:10px 15px!important}.card ol li{padding-left:30px!important;position:relative;color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding-top:5px;padding-bottom:5px;padding-right:0}.card ol li ol.list-bullet li,.card ol li ul.list-bullet li{padding-left:0!important}.card ol li:before{font:400 16px/1.3 Roboto,sans-serif;left:0;position:absolute;top:4px}.card ol li h3{font:400 20px/1.3 Roboto,sans-serif;margin-bottom:15px}.card p{color:#000;font:14px/1.4 Roboto,sans-serif;margin:5px 0;padding:5px 0}.card p strong{font-family:Roboto,sans-serif}.banner{background:url(/assets/img/landing-page/header-bg.jpg) no-repeat center;background-size:cover;padding:0 0 130px}.terms-of-service h3{padding:5px 0 0!important}.terms-of-service ol{counter-reset:section;padding:0 5px 0 0!important}.terms-of-service ol li:before{content:counters(section,\".\") \". \";counter-increment:section;float:left;font-weight:600;padding:0 10px 0 0}.terms-of-service ol li ol li ol li:before,.terms-of-service ol li ol li ul li:before{content:\"\";counter-increment:none}li{padding:10px 0}.parent-ol>li:before{font-size:26px;margin-top:16px}ul.list-bullet,ol.list-bullet{list-style-type:disc;margin-left:20px}ul.list-bullet>li,ol.list-bullet>li{padding:0}\n"] }]
2232
- }], ctorParameters: () => [{ type: i1$6.AppConfigService }], propDecorators: { isPublic: [{
2284
+ }], ctorParameters: () => [{ type: i1$5.AppConfigService }], propDecorators: { isPublic: [{
2233
2285
  type: Input
2234
2286
  }] } });
2235
2287
 
2236
- const primeNgModules = [
2237
- MultiSelectModule,
2288
+ // All modules needed for both landing page and dashboard
2289
+ const allModules = [
2290
+ NgbTooltipModule,
2291
+ NgbNavModule,
2292
+ NgbModalModule,
2293
+ TableModule,
2238
2294
  TabMenuModule,
2295
+ ButtonModule,
2296
+ DropdownModule,
2297
+ MultiSelectModule,
2239
2298
  ProgressSpinnerModule,
2240
- TableModule,
2241
2299
  AutoCompleteModule,
2242
- DragDropModule
2300
+ ImageCropperModule,
2301
+ UiSwitchModule,
2302
+ NgxDaterangepickerMd.forRoot()
2243
2303
  ];
2244
2304
  class SharedComponentsModule {
2305
+ constructor() {
2306
+ console.log('🚀 SHARED COMPONENTS MODULE LOADED! - Shared UI components');
2307
+ }
2245
2308
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SharedComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2246
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SharedComponentsModule, declarations: [AbTestContainerComponent,
2247
- AbAlternativeComponent,
2248
- PasswordValidationComponent,
2249
- CustomUploaderComponent,
2250
- ProfileImageCropperComponent,
2309
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SharedComponentsModule, declarations: [PasswordValidationComponent,
2251
2310
  PwTabsComponent,
2252
- ResourceHeaderComponent,
2253
2311
  DateRangePickerComponent,
2254
2312
  PermissionTreeComponent,
2255
- InputContainerComponent,
2256
- FieldErrorDisplayComponent,
2257
- DemoCardsComponent,
2258
2313
  PrivacyAndTosComponent,
2259
2314
  PrivacyPolicyComponent,
2260
2315
  TermsConditionsComponent,
2261
2316
  SplashComponent,
2262
- GeoTemplateComponent,
2263
2317
  AuthenticatorComponent,
2264
2318
  ClearBitIconComponent,
2265
2319
  ComingSoonComponent,
2266
- NoDataComponent,
2267
2320
  EntityGroupComponent,
2268
2321
  GroupsComponent,
2269
2322
  GroupDefinitionComponent,
2270
2323
  NumberPickerComponent,
2271
2324
  HeaderComponent,
2272
- LandingPageFooterBComponent], imports: [NgbTooltipModule,
2273
- FormsModule,
2274
- ButtonModule,
2275
- DropdownModule,
2276
- NgbModalModule,
2325
+ LandingPageFooterBComponent], imports: [FormsModule,
2277
2326
  AppLoaderModule,
2278
2327
  ReactiveFormsModule,
2279
2328
  DirectivesModule,
2280
- CoreTranslocoModule, i2$6.NgxDaterangepickerMd, ImageCropperModule, MultiSelectModule,
2329
+ CoreTranslocoModule,
2330
+ RouterModule, NgbTooltipModule,
2331
+ NgbNavModule,
2332
+ NgbModalModule,
2333
+ TableModule,
2281
2334
  TabMenuModule,
2335
+ ButtonModule,
2336
+ DropdownModule,
2337
+ MultiSelectModule,
2282
2338
  ProgressSpinnerModule,
2283
- TableModule,
2284
2339
  AutoCompleteModule,
2285
- DragDropModule, PipesModule,
2340
+ ImageCropperModule,
2341
+ UiSwitchModule, i1$3.NgxDaterangepickerMd, PipesModule,
2286
2342
  CommonModule,
2287
- UiSwitchModule,
2288
2343
  NgIf,
2289
- NgbNavModule], exports: [AbTestContainerComponent,
2290
- AbAlternativeComponent,
2291
- PasswordValidationComponent,
2292
- CustomUploaderComponent,
2293
- ProfileImageCropperComponent,
2294
- ImageCropperModule,
2344
+ FieldErrorDisplayModule,
2345
+ ResourceSharedComponentsModule,
2346
+ DemoCardsModule], exports: [PasswordValidationComponent,
2295
2347
  PwTabsComponent,
2296
- ResourceHeaderComponent,
2297
- DateRangePickerComponent, MultiSelectModule,
2348
+ DateRangePickerComponent, NgbTooltipModule,
2349
+ NgbNavModule,
2350
+ NgbModalModule,
2351
+ TableModule,
2298
2352
  TabMenuModule,
2353
+ ButtonModule,
2354
+ DropdownModule,
2355
+ MultiSelectModule,
2299
2356
  ProgressSpinnerModule,
2300
- TableModule,
2301
2357
  AutoCompleteModule,
2302
- DragDropModule, PermissionTreeComponent,
2303
- InputContainerComponent,
2304
- FieldErrorDisplayComponent,
2305
- DemoCardsComponent,
2358
+ ImageCropperModule,
2359
+ UiSwitchModule, i1$3.NgxDaterangepickerMd, PermissionTreeComponent,
2360
+ DemoCardsModule,
2306
2361
  PrivacyAndTosComponent,
2307
2362
  PrivacyPolicyComponent,
2308
2363
  TermsConditionsComponent,
2309
2364
  SplashComponent,
2310
- GeoTemplateComponent,
2311
2365
  AuthenticatorComponent,
2312
2366
  ClearBitIconComponent,
2313
2367
  ComingSoonComponent,
2314
- NoDataComponent,
2315
2368
  EntityGroupComponent,
2316
2369
  GroupsComponent,
2317
2370
  GroupDefinitionComponent,
2318
2371
  NumberPickerComponent,
2319
2372
  HeaderComponent,
2320
- LandingPageFooterBComponent] }); }
2321
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SharedComponentsModule, providers: [LazyLoadingService], imports: [NgbTooltipModule,
2322
- FormsModule,
2323
- ButtonModule,
2324
- DropdownModule,
2325
- NgbModalModule,
2373
+ LandingPageFooterBComponent,
2374
+ FieldErrorDisplayModule,
2375
+ ResourceSharedComponentsModule] }); }
2376
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SharedComponentsModule, imports: [FormsModule,
2326
2377
  AppLoaderModule,
2327
2378
  ReactiveFormsModule,
2328
2379
  DirectivesModule,
2329
2380
  CoreTranslocoModule,
2330
- NgxDaterangepickerMd.forRoot(),
2331
- ImageCropperModule,
2332
- primeNgModules,
2381
+ RouterModule,
2382
+ allModules,
2333
2383
  PipesModule,
2334
2384
  CommonModule,
2335
- UiSwitchModule,
2336
- NgbNavModule, ImageCropperModule, MultiSelectModule,
2385
+ FieldErrorDisplayModule,
2386
+ ResourceSharedComponentsModule,
2387
+ DemoCardsModule, NgbTooltipModule,
2388
+ NgbNavModule,
2389
+ NgbModalModule,
2390
+ TableModule,
2337
2391
  TabMenuModule,
2392
+ ButtonModule,
2393
+ DropdownModule,
2394
+ MultiSelectModule,
2338
2395
  ProgressSpinnerModule,
2339
- TableModule,
2340
2396
  AutoCompleteModule,
2341
- DragDropModule] }); }
2397
+ ImageCropperModule,
2398
+ UiSwitchModule, i1$3.NgxDaterangepickerMd, DemoCardsModule,
2399
+ FieldErrorDisplayModule,
2400
+ ResourceSharedComponentsModule] }); }
2342
2401
  }
2343
2402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SharedComponentsModule, decorators: [{
2344
2403
  type: NgModule,
2345
2404
  args: [{
2346
2405
  declarations: [
2347
- AbTestContainerComponent,
2348
- AbAlternativeComponent,
2349
2406
  PasswordValidationComponent,
2350
- CustomUploaderComponent,
2351
- ProfileImageCropperComponent,
2352
2407
  PwTabsComponent,
2353
- ResourceHeaderComponent,
2354
2408
  DateRangePickerComponent,
2355
2409
  PermissionTreeComponent,
2356
- InputContainerComponent,
2357
- FieldErrorDisplayComponent,
2358
- DemoCardsComponent,
2359
2410
  PrivacyAndTosComponent,
2360
2411
  PrivacyPolicyComponent,
2361
2412
  TermsConditionsComponent,
2362
2413
  SplashComponent,
2363
- GeoTemplateComponent,
2364
2414
  AuthenticatorComponent,
2365
2415
  ClearBitIconComponent,
2366
2416
  ComingSoonComponent,
2367
- NoDataComponent,
2368
2417
  EntityGroupComponent,
2369
2418
  GroupsComponent,
2370
2419
  GroupDefinitionComponent,
@@ -2373,62 +2422,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
2373
2422
  LandingPageFooterBComponent
2374
2423
  ],
2375
2424
  imports: [
2376
- NgbTooltipModule,
2377
2425
  FormsModule,
2378
- ButtonModule,
2379
- DropdownModule,
2380
- NgbModalModule,
2381
2426
  AppLoaderModule,
2382
2427
  ReactiveFormsModule,
2383
2428
  DirectivesModule,
2384
2429
  CoreTranslocoModule,
2385
- NgxDaterangepickerMd.forRoot(),
2386
- ImageCropperModule,
2387
- primeNgModules,
2430
+ RouterModule,
2431
+ allModules,
2388
2432
  PipesModule,
2389
2433
  CommonModule,
2390
- UiSwitchModule,
2391
2434
  NgIf,
2392
- NgbNavModule
2435
+ FieldErrorDisplayModule,
2436
+ ResourceSharedComponentsModule,
2437
+ DemoCardsModule
2393
2438
  ],
2394
2439
  exports: [
2395
- AbTestContainerComponent,
2396
- AbAlternativeComponent,
2397
2440
  PasswordValidationComponent,
2398
- CustomUploaderComponent,
2399
- ProfileImageCropperComponent,
2400
- ImageCropperModule,
2401
2441
  PwTabsComponent,
2402
- ResourceHeaderComponent,
2403
2442
  DateRangePickerComponent,
2404
- primeNgModules,
2443
+ allModules,
2405
2444
  PermissionTreeComponent,
2406
- InputContainerComponent,
2407
- FieldErrorDisplayComponent,
2408
- DemoCardsComponent,
2445
+ DemoCardsModule,
2409
2446
  PrivacyAndTosComponent,
2410
2447
  PrivacyPolicyComponent,
2411
2448
  TermsConditionsComponent,
2412
2449
  SplashComponent,
2413
- GeoTemplateComponent,
2414
2450
  AuthenticatorComponent,
2415
2451
  ClearBitIconComponent,
2416
2452
  ComingSoonComponent,
2417
- NoDataComponent,
2418
2453
  EntityGroupComponent,
2419
2454
  GroupsComponent,
2420
2455
  GroupDefinitionComponent,
2421
2456
  NumberPickerComponent,
2422
2457
  HeaderComponent,
2423
- LandingPageFooterBComponent
2424
- ],
2425
- providers: [LazyLoadingService]
2458
+ LandingPageFooterBComponent,
2459
+ FieldErrorDisplayModule,
2460
+ ResourceSharedComponentsModule
2461
+ ]
2426
2462
  }]
2427
- }] });
2463
+ }], ctorParameters: () => [] });
2428
2464
 
2429
2465
  /**
2430
2466
  * Generated bundle index. Do not edit.
2431
2467
  */
2432
2468
 
2433
- export { AbAlternativeComponent, AbTestContainerComponent, AuthenticatorComponent, ClearBitIconComponent, ComingSoonComponent, CustomUploaderComponent, DateRangePickerComponent, DemoCardsComponent, EntityGroupComponent, FieldErrorDisplayComponent, GeoTemplateComponent, GroupDefinitionComponent, GroupsComponent, HeaderComponent, InputContainerComponent, LandingPageFooterBComponent, NoDataComponent, NumberPickerComponent, PasswordValidationComponent, PermissionTreeComponent, PrivacyAndTosComponent, PrivacyPolicyComponent, ProfileImageCropperComponent, PwTabsComponent, ResourceHeaderComponent, SharedComponentsModule, SplashComponent, TermsConditionsComponent };
2469
+ export { AuthenticatorComponent, ClearBitIconComponent, ComingSoonComponent, CustomUploaderComponent, DateRangePickerComponent, DemoCardsComponent, DemoCardsModule, EntityGroupComponent, FieldErrorDisplayComponent, FieldErrorDisplayModule, GroupDefinitionComponent, GroupsComponent, HeaderComponent, InputContainerComponent, LandingPageFooterBComponent, NoDataComponent, NumberPickerComponent, PasswordValidationComponent, PermissionTreeComponent, PrivacyAndTosComponent, PrivacyPolicyComponent, ProfileImageCropperComponent, ProfileImageCropperModule, PwTabsComponent, ResourceHeaderComponent, ResourceHeaderModule, ResourceSharedComponentsModule, SharedComponentsModule, SplashComponent, TermsConditionsComponent };
2434
2470
  //# sourceMappingURL=posiwise-shared-components.mjs.map