@posiwise/shared-components 0.0.13 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/index.mjs +2 -1
- package/esm2020/lib/custom-uploader/custom-uploader.component.mjs +5 -4
- package/esm2020/lib/image-cropper/image-cropper.component.mjs +1 -1
- package/esm2020/lib/permission-tree/permission-tree.component.mjs +113 -0
- package/esm2020/lib/shared-components.module.mjs +14 -12
- package/fesm2015/shared-components.mjs +126 -14
- package/fesm2015/shared-components.mjs.map +1 -1
- package/fesm2020/shared-components.mjs +126 -14
- package/fesm2020/shared-components.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/permission-tree/permission-tree.component.d.ts +15 -0
- package/lib/shared-components.module.d.ts +7 -6
- package/package.json +4 -4
|
@@ -8,7 +8,7 @@ import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
|
8
8
|
import * as i1$1 from '@ng-bootstrap/ng-bootstrap';
|
|
9
9
|
import * as i2 from '@angular/forms';
|
|
10
10
|
import { FormsModule } from '@angular/forms';
|
|
11
|
-
import * as
|
|
11
|
+
import * as i1$2 from '@posiwise/directives';
|
|
12
12
|
import { DirectivesModule } from '@posiwise/directives';
|
|
13
13
|
import * as i4 from '@ngneat/transloco';
|
|
14
14
|
import { CoreTranslocoModule } from '@posiwise/core-transloco';
|
|
@@ -18,8 +18,9 @@ import * as i2$1 from 'ngx-image-cropper';
|
|
|
18
18
|
import { ImageCropperModule } from 'ngx-image-cropper';
|
|
19
19
|
import * as i2$2 from '@angular/router';
|
|
20
20
|
import { NavigationEnd } from '@angular/router';
|
|
21
|
-
import * as i1$
|
|
21
|
+
import * as i1$3 from 'primeng/tabmenu';
|
|
22
22
|
import { TabMenuModule } from 'primeng/tabmenu';
|
|
23
|
+
import map from 'lodash/map';
|
|
23
24
|
|
|
24
25
|
class AbTestContainerComponent {
|
|
25
26
|
constructor(service) {
|
|
@@ -116,7 +117,7 @@ class PasswordValidationComponent extends AppBaseComponent {
|
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
PasswordValidationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PasswordValidationComponent, deps: [{ token: i0.Injector }, { token: i1$1.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
119
|
-
PasswordValidationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: PasswordValidationComponent, selector: "pw-password-validation", 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\">{{ 'User.Account.Message.EnterPassword' | 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:
|
|
120
|
+
PasswordValidationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: PasswordValidationComponent, selector: "pw-password-validation", 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\">{{ 'User.Account.Message.EnterPassword' | 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: i1$2.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] });
|
|
120
121
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PasswordValidationComponent, decorators: [{
|
|
121
122
|
type: Component,
|
|
122
123
|
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\">{{ 'User.Account.Message.EnterPassword' | 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" }]
|
|
@@ -182,7 +183,7 @@ class ProfileImageCropperComponent {
|
|
|
182
183
|
}
|
|
183
184
|
}
|
|
184
185
|
ProfileImageCropperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: ProfileImageCropperComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
185
|
-
ProfileImageCropperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: { aspectRatio: "aspectRatio" }, 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>\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 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 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 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 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 === '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 class=\"col-4\">\n <img [src]=\"croppedImage\"\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_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}.card-footer{background-color:transparent;left:0}\n"], dependencies: [{ kind: "directive", type:
|
|
186
|
+
ProfileImageCropperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: { aspectRatio: "aspectRatio" }, 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>\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 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 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 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 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 === '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 class=\"col-4\">\n <img [src]=\"croppedImage\"\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_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}.card-footer{background-color:transparent;left:0}\n"], dependencies: [{ kind: "directive", type: i1$2.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i1$2.LazyImgDirective, selector: "img" }, { kind: "component", type: i2$1.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "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"] }] });
|
|
186
187
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: ProfileImageCropperComponent, decorators: [{
|
|
187
188
|
type: Component,
|
|
188
189
|
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>\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 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 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 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 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 === '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 class=\"col-4\">\n <img [src]=\"croppedImage\"\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_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}.card-footer{background-color:transparent;left:0}\n"] }]
|
|
@@ -272,7 +273,7 @@ class CustomUploaderComponent extends AppBaseComponent {
|
|
|
272
273
|
}
|
|
273
274
|
}
|
|
274
275
|
CustomUploaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: CustomUploaderComponent, deps: [{ token: i0.Injector }, { token: i1$1.NgbModal }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
275
|
-
CustomUploaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", 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 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 <!-- exising 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 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_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:170px}.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: "component", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] });
|
|
276
|
+
CustomUploaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", 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 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 <!-- exising 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 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_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:170px}.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: i1$2.LazyImgDirective, selector: "img" }, { kind: "component", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] });
|
|
276
277
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: CustomUploaderComponent, decorators: [{
|
|
277
278
|
type: Component,
|
|
278
279
|
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 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 <!-- exising 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 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_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:170px}.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"] }]
|
|
@@ -323,7 +324,7 @@ class PwTabsComponent extends AppBaseComponent {
|
|
|
323
324
|
}
|
|
324
325
|
}
|
|
325
326
|
PwTabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PwTabsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
326
|
-
PwTabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", 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$
|
|
327
|
+
PwTabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", 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$3.TabMenu, selector: "p-tabMenu", inputs: ["model", "activeItem", "scrollable", "popup", "style", "styleClass"], outputs: ["activeItemChange"] }, { kind: "directive", type: i2$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
|
|
327
328
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PwTabsComponent, decorators: [{
|
|
328
329
|
type: Component,
|
|
329
330
|
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" }]
|
|
@@ -336,9 +337,117 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
336
337
|
type: Input
|
|
337
338
|
}] } });
|
|
338
339
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
340
|
+
class PermissionTreeComponent {
|
|
341
|
+
constructor(_element) {
|
|
342
|
+
this._element = _element;
|
|
343
|
+
}
|
|
344
|
+
ngOnChanges(simple) {
|
|
345
|
+
if (simple['data'] &&
|
|
346
|
+
simple['data'].currentValue &&
|
|
347
|
+
simple['data'].currentValue.grantedPermissionNames) {
|
|
348
|
+
this.refreshTree();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
ngAfterViewInit() {
|
|
352
|
+
this._$tree = $(this._element.nativeElement);
|
|
353
|
+
this.refreshTree();
|
|
354
|
+
}
|
|
355
|
+
getGrantedPermissionNames() {
|
|
356
|
+
if (!this._$tree || !this._createdTreeBefore) {
|
|
357
|
+
return [];
|
|
358
|
+
}
|
|
359
|
+
const permissionNames = [];
|
|
360
|
+
const selectedPermissions = this._$tree.jstree('get_selected', true);
|
|
361
|
+
for (let i = 0; i < selectedPermissions.length; i++) {
|
|
362
|
+
permissionNames.push(selectedPermissions[i].original.id);
|
|
363
|
+
}
|
|
364
|
+
return permissionNames;
|
|
365
|
+
}
|
|
366
|
+
refreshTree() {
|
|
367
|
+
if (this._createdTreeBefore) {
|
|
368
|
+
this._$tree.jstree('destroy');
|
|
369
|
+
}
|
|
370
|
+
this._createdTreeBefore = false;
|
|
371
|
+
if (!this.data || !this._$tree) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
const treeData = map(this.data.permissions, item => {
|
|
375
|
+
return {
|
|
376
|
+
id: item.name,
|
|
377
|
+
parent: item.parentName ? item.parentName : '#',
|
|
378
|
+
text: item.displayName,
|
|
379
|
+
state: {
|
|
380
|
+
opened: true,
|
|
381
|
+
selected: this.data.grantedPermissionNames.includes(item.name)
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
});
|
|
385
|
+
this._$tree.jstree({
|
|
386
|
+
core: {
|
|
387
|
+
data: treeData
|
|
388
|
+
},
|
|
389
|
+
types: {
|
|
390
|
+
default: {
|
|
391
|
+
icon: 'fa fa-folder-open tree-item-icon-color icon-lg'
|
|
392
|
+
},
|
|
393
|
+
file: {
|
|
394
|
+
icon: 'fa fa-file tree-item-icon-color icon-lg'
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
checkbox: {
|
|
398
|
+
keep_selected_style: false,
|
|
399
|
+
three_state: false,
|
|
400
|
+
cascade: ''
|
|
401
|
+
},
|
|
402
|
+
plugins: ['checkbox', 'types']
|
|
403
|
+
});
|
|
404
|
+
this._createdTreeBefore = true;
|
|
405
|
+
let inTreeChangeEvent = false;
|
|
406
|
+
function selectNodeAndAllParents(node) {
|
|
407
|
+
this._$tree.jstree('select_node', node, true);
|
|
408
|
+
const parent = this._$tree.jstree('get_parent', node);
|
|
409
|
+
if (parent) {
|
|
410
|
+
selectNodeAndAllParents(parent);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
this._$tree.on('changed.jstree', (_e, data) => {
|
|
414
|
+
if (!data.node) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const wasInTreeChangeEvent = inTreeChangeEvent;
|
|
418
|
+
if (!wasInTreeChangeEvent) {
|
|
419
|
+
inTreeChangeEvent = true;
|
|
420
|
+
}
|
|
421
|
+
let childrenNodes;
|
|
422
|
+
if (data.node.state.selected) {
|
|
423
|
+
selectNodeAndAllParents(this._$tree.jstree('get_parent', data.node));
|
|
424
|
+
childrenNodes = $.makeArray(this._$tree.jstree('get_children_dom', data.node));
|
|
425
|
+
this._$tree.jstree('select_node', childrenNodes);
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
childrenNodes = $.makeArray(this._$tree.jstree('get_children_dom', data.node));
|
|
429
|
+
this._$tree.jstree('deselect_node', childrenNodes);
|
|
430
|
+
}
|
|
431
|
+
if (!wasInTreeChangeEvent) {
|
|
432
|
+
inTreeChangeEvent = false;
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
PermissionTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PermissionTreeComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
438
|
+
PermissionTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: PermissionTreeComponent, selector: "permission-tree", inputs: { data: "data" }, usesOnChanges: true, ngImport: i0, template: ` <div class="permission-tree"></div> `, isInline: true });
|
|
439
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PermissionTreeComponent, decorators: [{
|
|
440
|
+
type: Component,
|
|
441
|
+
args: [{
|
|
442
|
+
// eslint-disable-next-line @angular-eslint/component-selector
|
|
443
|
+
selector: 'permission-tree',
|
|
444
|
+
template: ` <div class="permission-tree"></div> `
|
|
445
|
+
}]
|
|
446
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { data: [{
|
|
447
|
+
type: Input
|
|
448
|
+
}] } });
|
|
449
|
+
|
|
450
|
+
const primeNgModules = [TabMenuModule];
|
|
342
451
|
class SharedComponentsModule {
|
|
343
452
|
}
|
|
344
453
|
SharedComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SharedComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -347,7 +456,8 @@ SharedComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0",
|
|
|
347
456
|
PasswordValidationComponent,
|
|
348
457
|
CustomUploaderComponent,
|
|
349
458
|
ProfileImageCropperComponent,
|
|
350
|
-
PwTabsComponent
|
|
459
|
+
PwTabsComponent,
|
|
460
|
+
PermissionTreeComponent], imports: [FormsModule,
|
|
351
461
|
DirectivesModule,
|
|
352
462
|
CoreTranslocoModule,
|
|
353
463
|
ImageCropperModule, TabMenuModule], exports: [AbTestContainerComponent,
|
|
@@ -356,7 +466,7 @@ SharedComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0",
|
|
|
356
466
|
CustomUploaderComponent,
|
|
357
467
|
ProfileImageCropperComponent,
|
|
358
468
|
ImageCropperModule,
|
|
359
|
-
PwTabsComponent, TabMenuModule] });
|
|
469
|
+
PwTabsComponent, TabMenuModule, PermissionTreeComponent] });
|
|
360
470
|
SharedComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SharedComponentsModule, imports: [FormsModule,
|
|
361
471
|
DirectivesModule,
|
|
362
472
|
CoreTranslocoModule,
|
|
@@ -371,7 +481,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
371
481
|
PasswordValidationComponent,
|
|
372
482
|
CustomUploaderComponent,
|
|
373
483
|
ProfileImageCropperComponent,
|
|
374
|
-
PwTabsComponent
|
|
484
|
+
PwTabsComponent,
|
|
485
|
+
PermissionTreeComponent
|
|
375
486
|
],
|
|
376
487
|
imports: [
|
|
377
488
|
FormsModule,
|
|
@@ -388,7 +499,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
388
499
|
ProfileImageCropperComponent,
|
|
389
500
|
ImageCropperModule,
|
|
390
501
|
PwTabsComponent,
|
|
391
|
-
primeNgModules
|
|
502
|
+
primeNgModules,
|
|
503
|
+
PermissionTreeComponent
|
|
392
504
|
]
|
|
393
505
|
}]
|
|
394
506
|
}] });
|
|
@@ -397,5 +509,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
397
509
|
* Generated bundle index. Do not edit.
|
|
398
510
|
*/
|
|
399
511
|
|
|
400
|
-
export { AbAlternativeComponent, AbTestContainerComponent, CustomUploaderComponent, PasswordValidationComponent, ProfileImageCropperComponent, PwTabsComponent, SharedComponentsModule };
|
|
512
|
+
export { AbAlternativeComponent, AbTestContainerComponent, CustomUploaderComponent, PasswordValidationComponent, PermissionTreeComponent, ProfileImageCropperComponent, PwTabsComponent, SharedComponentsModule };
|
|
401
513
|
//# sourceMappingURL=shared-components.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-components.mjs","sources":["../../../../libs/shared-components/src/lib/ab-test/ab-test-container/ab-test-container.component.ts","../../../../libs/shared-components/src/lib/ab-test/ab-alternative/ab-alternative.component.ts","../../../../libs/shared-components/src/lib/ab-test/ab-alternative/ab-alternative.component.html","../../../../libs/shared-components/src/lib/password-validation/password-validation.component.ts","../../../../libs/shared-components/src/lib/password-validation/password-validation.component.html","../../../../libs/shared-components/src/lib/image-cropper/image-cropper.component.ts","../../../../libs/shared-components/src/lib/image-cropper/image-cropper.component.html","../../../../libs/shared-components/src/lib/custom-uploader/custom-uploader.component.ts","../../../../libs/shared-components/src/lib/custom-uploader/custom-uploader.component.html","../../../../libs/shared-components/src/lib/pw-tabs/pw-tabs.component.ts","../../../../libs/shared-components/src/lib/pw-tabs/pw-tabs.component.html","../../../../libs/shared-components/src/lib/shared-components.module.ts","../../../../libs/shared-components/src/shared-components.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\n\nimport { AB_TEST_ACTIONS } from '@posiwise/common-utilities';\nimport { Experiment } from '../ab-test.interface';\nimport { AbTestService } from '@posiwise/common-services';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'pw-ab-test-container',\n template: '<ng-content></ng-content>'\n})\nexport class AbTestContainerComponent implements OnInit {\n @Input()\n experimentName: string;\n\n @Input()\n serviceName: string;\n\n data: Experiment;\n\n /**\n * Specifies boolean to show the experiment as fallback\n */\n showDefaultExperiment = false;\n\n constructor(private service: AbTestService) {}\n\n ngOnInit(): void {\n this.getExperiment();\n }\n\n private getExperiment() {\n this.service\n .getExperiment(this.experimentName, AB_TEST_ACTIONS.START, this.serviceName)\n .subscribe({\n next: (response: Experiment) => {\n this.showDefaultExperiment = false;\n this.data = response || ({} as Experiment);\n },\n error: () => {\n // in case the api for experiment fails, we show the default experiment\n this.showDefaultExperiment = true;\n }\n });\n }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { AbTestContainerComponent } from '../ab-test-container/ab-test-container.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'ab-alternative',\n templateUrl: './ab-alternative.component.html'\n})\nexport class AbAlternativeComponent {\n @Input()\n name: string;\n\n /**\n * Specficies AbTestContainerComponent instance template reference\n */\n @Input()\n ref: AbTestContainerComponent;\n\n /**\n * If the getExperiment call fails, it can be set to show the experiment\n * as fallback\n */\n @Input()\n default = false;\n}\n","<!-- 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","import { Component, EventEmitter, Injector, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { StatusCodes } from 'http-status-codes';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-password-validation',\n templateUrl: './password-validation.component.html'\n})\nexport class PasswordValidationComponent extends AppBaseComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<any>;\n\n @Output()\n successEvent: EventEmitter<boolean> = new EventEmitter();\n\n password: string;\n\n buttonBusy: boolean;\n\n constructor(injector: Injector, private modal: NgbModal) {\n super(injector);\n }\n\n open() {\n this.modal.open(this.content, { centered: true, windowClass: 'modal-holder' });\n }\n\n validatePassword() {\n if (this.password) {\n this.buttonBusy = true;\n this.userService\n .checkPassword({ password: this.password })\n .subscribe(data => {\n if (data && data?.status === StatusCodes.OK) {\n this.successEvent.emit(true);\n this.modal.dismissAll();\n this.password = null;\n } else {\n this.successEvent.emit(false);\n this.password = null;\n }\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n }\n}\n","<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\">{{ 'User.Account.Message.EnterPassword' | 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","import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper';\n\n@Component({\n selector: 'pw-image-cropper',\n templateUrl: './image-cropper.component.html',\n styleUrls: ['./image-cropper.component.scss']\n})\nexport class ProfileImageCropperComponent {\n imageChangedEvent = '';\n\n croppedImage = '';\n\n @Output() imageSelectionEvent: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() closeEvent: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() fileChangeEvent: EventEmitter<any> = new EventEmitter<any>();\n\n busy: boolean;\n\n @Input() aspectRatio = 'auto';\n\n transform: ImageTransform = {};\n\n canvasRotation = 0;\n\n showCropper = false;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n onFileChange(event: any): void {\n this.imageChangedEvent = event;\n this.fileChangeEvent.emit(event.target.files[0]?.name);\n }\n\n imageCropped(event: ImageCroppedEvent) {\n this.croppedImage = event.base64;\n this.cdr.detectChanges();\n }\n\n imageLoaded() {\n this.showCropper = true;\n }\n\n rotateLeft() {\n this.canvasRotation--;\n this.flipAfterRotate();\n }\n\n rotateRight() {\n this.canvasRotation++;\n this.flipAfterRotate();\n }\n\n private flipAfterRotate() {\n const flippedH = this.transform.flipH;\n const flippedV = this.transform.flipV;\n this.transform = {\n ...this.transform,\n flipH: flippedV,\n flipV: flippedH\n };\n }\n\n flipHorizontal() {\n this.transform = {\n ...this.transform,\n flipH: !this.transform.flipH\n };\n }\n\n flipVertical() {\n this.transform = {\n ...this.transform,\n flipV: !this.transform.flipV\n };\n }\n\n saveProfilePicture() {\n if (this.croppedImage) {\n this.imageSelectionEvent.emit(this.croppedImage);\n this.busy = true;\n }\n }\n\n onCloseModal() {\n this.closeEvent.emit();\n }\n}\n","<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>\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 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 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 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 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 === '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 class=\"col-4\">\n <img [src]=\"croppedImage\"\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","import { DOCUMENT } from '@angular/common';\nimport { Component, EventEmitter, Inject, Injector, Input, Output } from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-custom-uploader',\n templateUrl: './custom-uploader.component.html',\n styleUrls: ['./custom-uploader.component.scss']\n})\nexport class CustomUploaderComponent extends AppBaseComponent {\n @Output() saveEvent: EventEmitter<{ file: string; name: string }> = new EventEmitter<{\n file: string;\n name: string;\n }>();\n\n @Input() controlName: string;\n\n @Input() previewData: any;\n\n @Input() aspectRatio = 'auto';\n\n @Input() title: string;\n\n uploadedFile = null;\n\n selectedFileName: string;\n\n buttonBusy: boolean;\n\n constructor(\n injector: Injector,\n private modalService: NgbModal,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n }\n\n deleteExistingFile() {\n HelperService.raiseDeletePopup().then(rep => {\n if (rep.value) {\n this.previewData = null;\n this.onSaveFile();\n }\n });\n }\n\n onSaveFile() {\n this.buttonBusy = true;\n this.saveEvent.emit({\n file: this.previewData?.url ? this.previewData : this.uploadedFile,\n name: this.controlName\n });\n }\n\n // modal image cropper\n\n onFileChange(value) {\n this.selectedFileName = value;\n }\n\n private dataURLtoBlob(dataurl: string) {\n const arr = dataurl?.split(',');\n // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n const mime = arr[0].match(/^[A-Z]*[a-z]*:(.*?);[A-Z]*/)[1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n // eslint-disable-next-line no-plusplus\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const file: File = new File([blob], this.selectedFileName);\n this.uploadedFile = file;\n this.onSaveFile();\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n clearValues() {\n this.uploadedFile = null;\n this.selectedFileName = null;\n this.updateHeight();\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n updateHeight() {\n // wait for update card height\n setTimeout(() => {\n this.onImgChange();\n });\n }\n\n onImgChange(event?: any) {\n if (event) {\n event.target.src = 'assets/img/icons/imagenotavailable.png';\n }\n const el = this.document.querySelectorAll(\n 'pw-domain-config-interface,pw-domain-config-build div[matchheight=\"card\"]'\n );\n el.forEach((item: Element) => {\n HelperService.matchHeights(item as HTMLElement, 'card');\n });\n }\n}\n","<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 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 <!-- exising 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 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","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { NavigationEnd } from '@angular/router';\nimport { MenuItem } from 'primeng/api';\nimport { TabMenu } from 'primeng/tabmenu';\nimport { Subscription as RxSubscription } from 'rxjs';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { PermissionService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-tabs',\n templateUrl: './pw-tabs.component.html'\n})\nexport class PwTabsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @Input()\n items: MenuItem[] = [];\n\n @ViewChild('tabMenu', { static: false })\n tabInstance: TabMenu;\n\n @Input()\n withSubscription = false;\n\n activeTab: MenuItem;\n\n private routeEventSubscription: RxSubscription;\n\n ngOnInit() {\n if (this.withSubscription) {\n this.getUserSubscription().subscribe((subscription: Subscription) => {\n this.items.forEach(item => {\n // prepends the subscription slug to the route\n item.routerLink = `/${subscription?.slug}${item.routerLink[0]}`;\n item.visible = item?.state\n ? this.permissionService.evaluatePermissions(\n item.state['permission'],\n PermissionService.selectedProduct?.feature_key,\n PermissionService.selectedProduct?.permission_key\n )\n : item.visible;\n });\n });\n }\n\n this.routeEventSubscription = this.router.events.subscribe(e => {\n if (e instanceof NavigationEnd) {\n this.tabInstance.activeItem = this.items.find(\n item => item.routerLink === this.router.url\n );\n }\n });\n }\n\n override ngOnDestroy() {\n this.routeEventSubscription.unsubscribe();\n }\n}\n","<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","import { NgModule } from '@angular/core';\nimport { AbTestContainerComponent } from './ab-test/ab-test-container/ab-test-container.component';\nimport { AbAlternativeComponent } from './ab-test/ab-alternative/ab-alternative.component';\nimport { PasswordValidationComponent } from './password-validation/password-validation.component';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { CustomUploaderComponent } from \"./custom-uploader/custom-uploader.component\";\nimport {ProfileImageCropperComponent} from \"./image-cropper/image-cropper.component\";\nimport { PwTabsComponent } from \"./pw-tabs/pw-tabs.component\";\n\n\nimport { FormsModule } from '@angular/forms';\nimport { ImageCropperModule } from 'ngx-image-cropper';\nimport {TabMenuModule} from \"primeng/tabmenu\";\n\n\nconst primeNgModules = [\n TabMenuModule,\n];\n\n@NgModule({\n declarations: [\n AbTestContainerComponent,\n AbAlternativeComponent,\n PasswordValidationComponent,\n CustomUploaderComponent,\n ProfileImageCropperComponent,\n PwTabsComponent\n ],\n imports: [\n FormsModule,\n DirectivesModule,\n CoreTranslocoModule,\n ImageCropperModule,\n primeNgModules\n ],\n exports: [\n AbTestContainerComponent,\n AbAlternativeComponent,\n PasswordValidationComponent,\n CustomUploaderComponent,\n ProfileImageCropperComponent,\n ImageCropperModule,\n PwTabsComponent,\n primeNgModules\n ]\n})\nexport class SharedComponentsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i2.ProfileImageCropperComponent","i3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;MAWa,wBAAwB,CAAA;AAcjC,IAAA,WAAA,CAAoB,OAAsB,EAAA;AAAtB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;AAL1C;;AAEG;AACH,QAAA,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;KAEgB;IAE9C,QAAQ,GAAA;QACJ,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO;AACP,aAAA,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3E,aAAA,SAAS,CAAC;AACP,YAAA,IAAI,EAAE,CAAC,QAAoB,KAAI;AAC3B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAK,EAAiB,CAAC;aAC9C;YACD,KAAK,EAAE,MAAK;;AAER,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;aACrC;AACJ,SAAA,CAAC,CAAC;KACV;;qHAjCQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,sIAFvB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAE5B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,2BAA2B;iBACxC,CAAA;oGAGG,cAAc,EAAA,CAAA;sBADb,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,KAAK;;;MCNG,sBAAsB,CAAA;AALnC,IAAA,WAAA,GAAA;AAeI;;;AAGG;AAEH,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;KACnB;;mHAhBY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,gHCTnC,+SAOA,EAAA,CAAA,CAAA;2FDEa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BAEI,gBAAgB,EAAA,QAAA,EAAA,+SAAA,EAAA,CAAA;8BAK1B,IAAI,EAAA,CAAA;sBADH,KAAK;gBAON,GAAG,EAAA,CAAA;sBADF,KAAK;gBAQN,OAAO,EAAA,CAAA;sBADN,KAAK;;;AEbJ,MAAO,2BAA4B,SAAQ,gBAAgB,CAAA;IAU7D,WAAY,CAAA,QAAkB,EAAU,KAAe,EAAA;QACnD,KAAK,CAAC,QAAQ,CAAC,CAAC;AADoB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;AANvD,QAAA,IAAA,CAAA,YAAY,GAA0B,IAAI,YAAY,EAAE,CAAC;KAQxD;IAED,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;KAClF;IAED,gBAAgB,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW;iBACX,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;iBAC1C,SAAS,CAAC,IAAI,IAAG;AACd,gBAAA,IAAI,IAAI,IAAI,CAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,MAAK,WAAW,CAAC,EAAE,EAAE;AACzC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AACxB,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxB,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxB,iBAAA;AACL,aAAC,CAAC;iBACD,GAAG,CAAC,MAAK;AACN,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B,aAAC,CAAC,CAAC;AACV,SAAA;KACJ;;wHArCQ,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,kPCVxC,ihCAoCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD1Ba,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;+BACI,wBAAwB,EAAA,QAAA,EAAA,ihCAAA,EAAA,CAAA;wHAIM,OAAO,EAAA,CAAA;sBAA9C,SAAS;gBAAC,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGtC,YAAY,EAAA,CAAA;sBADX,MAAM;;;MELE,4BAA4B,CAAA;AAqBrC,IAAA,WAAA,CAAoB,GAAsB,EAAA;AAAtB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AApB1C,QAAA,IAAiB,CAAA,iBAAA,GAAG,EAAE,CAAC;AAEvB,QAAA,IAAY,CAAA,YAAA,GAAG,EAAE,CAAC;AAER,QAAA,IAAA,CAAA,mBAAmB,GAAsB,IAAI,YAAY,EAAO,CAAC;AAEjE,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAO,CAAC;AAExD,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAO,CAAC;AAI9D,QAAA,IAAW,CAAA,WAAA,GAAG,MAAM,CAAC;AAE9B,QAAA,IAAS,CAAA,SAAA,GAAmB,EAAE,CAAC;AAE/B,QAAA,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;AAEnB,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;KAE0B;AAE9C,IAAA,YAAY,CAAC,KAAU,EAAA;;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAA,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,CAAC;KAC1D;AAED,IAAA,YAAY,CAAC,KAAwB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC5B;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;IAED,UAAU,GAAA;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,WAAW,GAAA;QACP,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAEO,eAAe,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACtC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,GACP,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,SAAS,CAAA,EAAA,EACjB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,QAAQ,GAClB,CAAC;KACL;IAED,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACP,IAAI,CAAC,SAAS,CACjB,EAAA,EAAA,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAC/B,CAAC;KACL;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACP,IAAI,CAAC,SAAS,CACjB,EAAA,EAAA,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAC/B,CAAC;KACL;IAED,kBAAkB,GAAA;QACd,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACpB,SAAA;KACJ;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KAC1B;;yHAhFQ,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,4BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,uNCRzC,uwJA+HA,EAAA,MAAA,EAAA,CAAA,2dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvHa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACI,kBAAkB,EAAA,QAAA,EAAA,uwJAAA,EAAA,MAAA,EAAA,CAAA,2dAAA,CAAA,EAAA,CAAA;wGASlB,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAIE,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;AETJ,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AAoBzD,IAAA,WAAA,CACI,QAAkB,EACV,YAAsB,EACJ,QAAkB,EAAA;QAE5C,KAAK,CAAC,QAAQ,CAAC,CAAC;AAHR,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAU;AACJ,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAtBtC,QAAA,IAAA,CAAA,SAAS,GAAiD,IAAI,YAAY,EAGhF,CAAC;AAMI,QAAA,IAAW,CAAA,WAAA,GAAG,MAAM,CAAC;AAI9B,QAAA,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;KAYnB;IAED,kBAAkB,GAAA;QACd,aAAa,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,IAAG;YACxC,IAAI,GAAG,CAAC,KAAK,EAAE;AACX,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,aAAA;AACL,SAAC,CAAC,CAAC;KACN;IAED,UAAU,GAAA;;AACN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChB,YAAA,IAAI,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,0CAAE,GAAG,IAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;YAClE,IAAI,EAAE,IAAI,CAAC,WAAW;AACzB,SAAA,CAAC,CAAC;KACN;;AAID,IAAA,YAAY,CAAC,KAAK,EAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KACjC;AAEO,IAAA,aAAa,CAAC,OAAe,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEhC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;;QAEhC,OAAO,CAAC,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACjC,SAAA;AAED,QAAA,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAC5C;AAED,IAAA,gBAAgB,CAAC,KAAK,EAAA;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;AAED,IAAA,SAAS,CAAC,OAAO,EAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;KACpF;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;KAClC;IAED,YAAY,GAAA;;QAER,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACN;AAED,IAAA,WAAW,CAAC,KAAW,EAAA;AACnB,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,wCAAwC,CAAC;AAC/D,SAAA;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CACrC,2EAA2E,CAC9E,CAAC;AACF,QAAA,EAAE,CAAC,OAAO,CAAC,CAAC,IAAa,KAAI;AACzB,YAAA,aAAa,CAAC,YAAY,CAAC,IAAmB,EAAE,MAAM,CAAC,CAAC;AAC5D,SAAC,CAAC,CAAC;KACN;;AAxGQ,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,oEAuBpB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAvBX,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,sOCZpC,8nEAuEA,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,4BAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD3Da,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACI,oBAAoB,EAAA,QAAA,EAAA,8nEAAA,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA,CAAA;;;8BA2BzB,MAAM;+BAAC,QAAQ,CAAA;;yBAtBV,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAKE,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;;;AEVJ,MAAO,eAAgB,SAAQ,gBAAgB,CAAA;AAJrD,IAAA,WAAA,GAAA;;AAMI,QAAA,IAAK,CAAA,KAAA,GAAe,EAAE,CAAC;AAMvB,QAAA,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;KAmC5B;IA7BG,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,CAAC,YAA0B,KAAI;AAChE,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;;;AAEtB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,IAAI,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,IAAI,CAAC,OAAO,GAAG,CAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK;0BACpB,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CACtC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EACxB,CAAA,EAAA,GAAA,iBAAiB,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAC9C,CAAA,EAAA,GAAA,iBAAiB,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAc,CACpD;AACH,0BAAE,IAAI,CAAC,OAAO,CAAC;AACvB,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACN,SAAA;AAED,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;YAC3D,IAAI,CAAC,YAAY,aAAa,EAAE;gBAC5B,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACzC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAC9C,CAAC;AACL,aAAA;AACL,SAAC,CAAC,CAAC;KACN;IAEQ,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;KAC7C;;4GA1CQ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,gPCd5B,2PASA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDKa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,SAAS;+BACI,SAAS,EAAA,QAAA,EAAA,2PAAA,EAAA,CAAA;8BAKnB,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,SAAS;gBAAC,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAIvC,gBAAgB,EAAA,CAAA;sBADf,KAAK;;;AELV,MAAM,cAAc,GAAG;IACnB,aAAa;CAChB,CAAC;MA6BW,sBAAsB,CAAA;;mHAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAzB7B,wBAAwB;QACxB,sBAAsB;QACtB,2BAA2B;QAC3B,uBAAuB;QACvB,4BAA4B;AAC5B,QAAA,eAAe,aAGf,WAAW;QACX,gBAAgB;QAChB,mBAAmB;AACnB,QAAA,kBAAkB,EAhBpB,aAAa,CAAA,EAAA,OAAA,EAAA,CAoBX,wBAAwB;QACxB,sBAAsB;QACtB,2BAA2B;QAC3B,uBAAuB;QACvB,4BAA4B;QAC5B,kBAAkB;AAClB,QAAA,eAAe,EA1BjB,aAAa,CAAA,EAAA,CAAA,CAAA;AA8BJ,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAjB7B,WAAW;QACX,gBAAgB;QAChB,mBAAmB;QACnB,kBAAkB;AAClB,QAAA,cAAc,EAQd,kBAAkB,EAzBpB,aAAa,CAAA,EAAA,CAAA,CAAA;2FA8BJ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA3BlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;wBACZ,wBAAwB;wBACxB,sBAAsB;wBACtB,2BAA2B;wBAC3B,uBAAuB;wBACvB,4BAA4B;wBAC5B,eAAe;AAChB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,gBAAgB;wBAChB,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,wBAAwB;wBACxB,sBAAsB;wBACtB,2BAA2B;wBAC3B,uBAAuB;wBACvB,4BAA4B;wBAC5B,kBAAkB;wBAClB,eAAe;wBACf,cAAc;AACf,qBAAA;iBACJ,CAAA;;;AC9CD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"shared-components.mjs","sources":["../../../../libs/shared-components/src/lib/ab-test/ab-test-container/ab-test-container.component.ts","../../../../libs/shared-components/src/lib/ab-test/ab-alternative/ab-alternative.component.ts","../../../../libs/shared-components/src/lib/ab-test/ab-alternative/ab-alternative.component.html","../../../../libs/shared-components/src/lib/password-validation/password-validation.component.ts","../../../../libs/shared-components/src/lib/password-validation/password-validation.component.html","../../../../libs/shared-components/src/lib/image-cropper/image-cropper.component.ts","../../../../libs/shared-components/src/lib/image-cropper/image-cropper.component.html","../../../../libs/shared-components/src/lib/custom-uploader/custom-uploader.component.ts","../../../../libs/shared-components/src/lib/custom-uploader/custom-uploader.component.html","../../../../libs/shared-components/src/lib/pw-tabs/pw-tabs.component.ts","../../../../libs/shared-components/src/lib/pw-tabs/pw-tabs.component.html","../../../../libs/shared-components/src/lib/permission-tree/permission-tree.component.ts","../../../../libs/shared-components/src/lib/shared-components.module.ts","../../../../libs/shared-components/src/shared-components.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\n\nimport { AB_TEST_ACTIONS } from '@posiwise/common-utilities';\nimport { Experiment } from '../ab-test.interface';\nimport { AbTestService } from '@posiwise/common-services';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'pw-ab-test-container',\n template: '<ng-content></ng-content>'\n})\nexport class AbTestContainerComponent implements OnInit {\n @Input()\n experimentName: string;\n\n @Input()\n serviceName: string;\n\n data: Experiment;\n\n /**\n * Specifies boolean to show the experiment as fallback\n */\n showDefaultExperiment = false;\n\n constructor(private service: AbTestService) {}\n\n ngOnInit(): void {\n this.getExperiment();\n }\n\n private getExperiment() {\n this.service\n .getExperiment(this.experimentName, AB_TEST_ACTIONS.START, this.serviceName)\n .subscribe({\n next: (response: Experiment) => {\n this.showDefaultExperiment = false;\n this.data = response || ({} as Experiment);\n },\n error: () => {\n // in case the api for experiment fails, we show the default experiment\n this.showDefaultExperiment = true;\n }\n });\n }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { AbTestContainerComponent } from '../ab-test-container/ab-test-container.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'ab-alternative',\n templateUrl: './ab-alternative.component.html'\n})\nexport class AbAlternativeComponent {\n @Input()\n name: string;\n\n /**\n * Specficies AbTestContainerComponent instance template reference\n */\n @Input()\n ref: AbTestContainerComponent;\n\n /**\n * If the getExperiment call fails, it can be set to show the experiment\n * as fallback\n */\n @Input()\n default = false;\n}\n","<!-- 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","import { Component, EventEmitter, Injector, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { StatusCodes } from 'http-status-codes';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-password-validation',\n templateUrl: './password-validation.component.html'\n})\nexport class PasswordValidationComponent extends AppBaseComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<any>;\n\n @Output()\n successEvent: EventEmitter<boolean> = new EventEmitter();\n\n password: string;\n\n buttonBusy: boolean;\n\n constructor(injector: Injector, private modal: NgbModal) {\n super(injector);\n }\n\n open() {\n this.modal.open(this.content, { centered: true, windowClass: 'modal-holder' });\n }\n\n validatePassword() {\n if (this.password) {\n this.buttonBusy = true;\n this.userService\n .checkPassword({ password: this.password })\n .subscribe(data => {\n if (data && data?.status === StatusCodes.OK) {\n this.successEvent.emit(true);\n this.modal.dismissAll();\n this.password = null;\n } else {\n this.successEvent.emit(false);\n this.password = null;\n }\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n }\n}\n","<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\">{{ 'User.Account.Message.EnterPassword' | 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","import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper';\n\n@Component({\n selector: 'pw-image-cropper',\n templateUrl: './image-cropper.component.html',\n styleUrls: ['./image-cropper.component.scss']\n})\nexport class ProfileImageCropperComponent {\n imageChangedEvent = '';\n\n croppedImage = '';\n\n @Output() imageSelectionEvent: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() closeEvent: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() fileChangeEvent: EventEmitter<any> = new EventEmitter<any>();\n\n busy: boolean;\n\n @Input() aspectRatio = 'auto';\n\n transform: ImageTransform = {};\n\n canvasRotation = 0;\n\n showCropper = false;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n onFileChange(event: any): void {\n this.imageChangedEvent = event;\n this.fileChangeEvent.emit(event.target.files[0]?.name);\n }\n\n imageCropped(event: ImageCroppedEvent) {\n this.croppedImage = event.base64;\n this.cdr.detectChanges();\n }\n\n imageLoaded() {\n this.showCropper = true;\n }\n\n rotateLeft() {\n this.canvasRotation--;\n this.flipAfterRotate();\n }\n\n rotateRight() {\n this.canvasRotation++;\n this.flipAfterRotate();\n }\n\n private flipAfterRotate() {\n const flippedH = this.transform.flipH;\n const flippedV = this.transform.flipV;\n this.transform = {\n ...this.transform,\n flipH: flippedV,\n flipV: flippedH\n };\n }\n\n flipHorizontal() {\n this.transform = {\n ...this.transform,\n flipH: !this.transform.flipH\n };\n }\n\n flipVertical() {\n this.transform = {\n ...this.transform,\n flipV: !this.transform.flipV\n };\n }\n\n saveProfilePicture() {\n if (this.croppedImage) {\n this.imageSelectionEvent.emit(this.croppedImage);\n this.busy = true;\n }\n }\n\n onCloseModal() {\n this.closeEvent.emit();\n }\n}\n","<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>\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 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 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 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 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 === '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 class=\"col-4\">\n <img [src]=\"croppedImage\"\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","import { DOCUMENT } from '@angular/common';\nimport { Component, EventEmitter, Inject, Injector, Input, Output } from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-custom-uploader',\n templateUrl: './custom-uploader.component.html',\n styleUrls: ['./custom-uploader.component.scss']\n})\nexport class CustomUploaderComponent extends AppBaseComponent {\n @Output() saveEvent: EventEmitter<{ file: string; name: string }> = new EventEmitter<{\n file: string;\n name: string;\n }>();\n\n @Input() controlName: string;\n\n @Input() previewData: any;\n\n @Input() aspectRatio = 'auto';\n\n @Input() title: string;\n\n uploadedFile = null;\n\n selectedFileName: string;\n\n buttonBusy: boolean;\n\n constructor(\n injector: Injector,\n private modalService: NgbModal,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n }\n\n deleteExistingFile() {\n HelperService.raiseDeletePopup().then(rep => {\n if (rep.value) {\n this.previewData = null;\n this.onSaveFile();\n }\n });\n }\n\n onSaveFile() {\n this.buttonBusy = true;\n this.saveEvent.emit({\n file: this.previewData?.url ? this.previewData : this.uploadedFile,\n name: this.controlName\n });\n }\n\n // modal image cropper\n\n onFileChange(value) {\n this.selectedFileName = value;\n }\n\n private dataURLtoBlob(dataurl: string) {\n const arr = dataurl?.split(',');\n // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n const mime = arr[0].match(/^[A-Z]*[a-z]*:(.*?);[A-Z]*/)[1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n // eslint-disable-next-line no-plusplus\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const file: File = new File([blob], this.selectedFileName);\n this.uploadedFile = file;\n this.onSaveFile();\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n clearValues() {\n this.uploadedFile = null;\n this.selectedFileName = null;\n this.updateHeight();\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n updateHeight() {\n // wait for update card height\n setTimeout(() => {\n this.onImgChange();\n });\n }\n\n onImgChange(event?: any) {\n if (event) {\n event.target.src = 'assets/img/icons/imagenotavailable.png';\n }\n const el = this.document.querySelectorAll(\n 'pw-domain-config-interface,pw-domain-config-build div[matchheight=\"card\"]'\n );\n el.forEach((item: Element) => {\n HelperService.matchHeights(item as HTMLElement, 'card');\n });\n }\n}\n","<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 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 <!-- exising 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 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","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { NavigationEnd } from '@angular/router';\nimport { MenuItem } from 'primeng/api';\nimport { TabMenu } from 'primeng/tabmenu';\nimport { Subscription as RxSubscription } from 'rxjs';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { PermissionService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-tabs',\n templateUrl: './pw-tabs.component.html'\n})\nexport class PwTabsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @Input()\n items: MenuItem[] = [];\n\n @ViewChild('tabMenu', { static: false })\n tabInstance: TabMenu;\n\n @Input()\n withSubscription = false;\n\n activeTab: MenuItem;\n\n private routeEventSubscription: RxSubscription;\n\n ngOnInit() {\n if (this.withSubscription) {\n this.getUserSubscription().subscribe((subscription: Subscription) => {\n this.items.forEach(item => {\n // prepends the subscription slug to the route\n item.routerLink = `/${subscription?.slug}${item.routerLink[0]}`;\n item.visible = item?.state\n ? this.permissionService.evaluatePermissions(\n item.state['permission'],\n PermissionService.selectedProduct?.feature_key,\n PermissionService.selectedProduct?.permission_key\n )\n : item.visible;\n });\n });\n }\n\n this.routeEventSubscription = this.router.events.subscribe(e => {\n if (e instanceof NavigationEnd) {\n this.tabInstance.activeItem = this.items.find(\n item => item.routerLink === this.router.url\n );\n }\n });\n }\n\n override ngOnDestroy() {\n this.routeEventSubscription.unsubscribe();\n }\n}\n","<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","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport map from 'lodash/map';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'permission-tree',\n template: ` <div class=\"permission-tree\"></div> `\n})\nexport class PermissionTreeComponent implements AfterViewInit, OnChanges {\n @Input() data: any;\n\n private _$tree: any;\n\n private _createdTreeBefore;\n\n constructor(private _element: ElementRef) {}\n\n ngOnChanges(simple: SimpleChanges) {\n if (\n simple['data'] &&\n simple['data'].currentValue &&\n simple['data'].currentValue.grantedPermissionNames\n ) {\n this.refreshTree();\n }\n }\n\n ngAfterViewInit(): void {\n this._$tree = $(this._element.nativeElement);\n\n this.refreshTree();\n }\n\n getGrantedPermissionNames(): string[] {\n if (!this._$tree || !this._createdTreeBefore) {\n return [];\n }\n\n const permissionNames = [];\n\n const selectedPermissions = this._$tree.jstree('get_selected', true);\n for (let i = 0; i < selectedPermissions.length; i++) {\n permissionNames.push(selectedPermissions[i].original.id);\n }\n\n return permissionNames;\n }\n\n private refreshTree(): void {\n if (this._createdTreeBefore) {\n this._$tree.jstree('destroy');\n }\n\n this._createdTreeBefore = false;\n\n if (!this.data || !this._$tree) {\n return;\n }\n\n const treeData = map(this.data.permissions, item => {\n return {\n id: item.name,\n parent: item.parentName ? item.parentName : '#',\n text: item.displayName,\n state: {\n opened: true,\n selected: this.data.grantedPermissionNames.includes(item.name)\n }\n };\n });\n\n this._$tree.jstree({\n core: {\n data: treeData\n },\n types: {\n default: {\n icon: 'fa fa-folder-open tree-item-icon-color icon-lg'\n },\n file: {\n icon: 'fa fa-file tree-item-icon-color icon-lg'\n }\n },\n checkbox: {\n keep_selected_style: false,\n three_state: false,\n cascade: ''\n },\n plugins: ['checkbox', 'types']\n });\n\n this._createdTreeBefore = true;\n\n let inTreeChangeEvent = false;\n\n function selectNodeAndAllParents(node) {\n this._$tree.jstree('select_node', node, true);\n const parent = this._$tree.jstree('get_parent', node);\n if (parent) {\n selectNodeAndAllParents(parent);\n }\n }\n\n this._$tree.on('changed.jstree', (_e, data) => {\n if (!data.node) {\n return;\n }\n\n const wasInTreeChangeEvent = inTreeChangeEvent;\n if (!wasInTreeChangeEvent) {\n inTreeChangeEvent = true;\n }\n\n let childrenNodes;\n\n if (data.node.state.selected) {\n selectNodeAndAllParents(this._$tree.jstree('get_parent', data.node));\n\n childrenNodes = $.makeArray(this._$tree.jstree('get_children_dom', data.node));\n this._$tree.jstree('select_node', childrenNodes);\n } else {\n childrenNodes = $.makeArray(this._$tree.jstree('get_children_dom', data.node));\n this._$tree.jstree('deselect_node', childrenNodes);\n }\n\n if (!wasInTreeChangeEvent) {\n inTreeChangeEvent = false;\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AbTestContainerComponent } from './ab-test/ab-test-container/ab-test-container.component';\nimport { AbAlternativeComponent } from './ab-test/ab-alternative/ab-alternative.component';\nimport { PasswordValidationComponent } from './password-validation/password-validation.component';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { CustomUploaderComponent } from './custom-uploader/custom-uploader.component';\nimport { ProfileImageCropperComponent } from './image-cropper/image-cropper.component';\nimport { PwTabsComponent } from './pw-tabs/pw-tabs.component';\n\nimport { FormsModule } from '@angular/forms';\nimport { ImageCropperModule } from 'ngx-image-cropper';\nimport { TabMenuModule } from 'primeng/tabmenu';\nimport { PermissionTreeComponent } from './permission-tree/permission-tree.component';\n\nconst primeNgModules = [TabMenuModule];\n\n@NgModule({\n declarations: [\n AbTestContainerComponent,\n AbAlternativeComponent,\n PasswordValidationComponent,\n CustomUploaderComponent,\n ProfileImageCropperComponent,\n PwTabsComponent,\n PermissionTreeComponent\n ],\n imports: [\n FormsModule,\n DirectivesModule,\n CoreTranslocoModule,\n ImageCropperModule,\n primeNgModules\n ],\n exports: [\n AbTestContainerComponent,\n AbAlternativeComponent,\n PasswordValidationComponent,\n CustomUploaderComponent,\n ProfileImageCropperComponent,\n ImageCropperModule,\n PwTabsComponent,\n primeNgModules,\n PermissionTreeComponent\n ]\n})\nexport class SharedComponentsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i2","i3.ProfileImageCropperComponent"],"mappings":"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"}
|