@posiwise/shared-components 0.0.141 → 0.0.143

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.
@@ -1,92 +0,0 @@
1
- import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "ngx-image-cropper";
5
- import * as i3 from "@posiwise/directives";
6
- export class ProfileImageCropperComponent {
7
- constructor(cdr) {
8
- this.cdr = cdr;
9
- this.imageChangedEvent = '';
10
- this.croppedImage = '';
11
- this.imageSelectionEvent = new EventEmitter();
12
- this.closeEvent = new EventEmitter();
13
- this.fileChangeEvent = new EventEmitter();
14
- this.aspectRatio = 'auto';
15
- this.transform = {};
16
- this.canvasRotation = 0;
17
- this.showCropper = false;
18
- }
19
- onFileChange(event) {
20
- const input = event.target;
21
- if (input.files && input.files.length > 0) {
22
- this.imageChangedEvent = event;
23
- this.fileChangeEvent.emit(input.files[0].name);
24
- }
25
- }
26
- imageCropped(event) {
27
- const reader = new FileReader();
28
- reader.onloadend = () => {
29
- this.croppedImage = reader.result;
30
- this.cdr.detectChanges();
31
- };
32
- reader.readAsDataURL(event.blob);
33
- }
34
- imageLoaded() {
35
- this.showCropper = true;
36
- }
37
- rotateLeft() {
38
- this.canvasRotation--;
39
- this.flipAfterRotate();
40
- }
41
- rotateRight() {
42
- this.canvasRotation++;
43
- this.flipAfterRotate();
44
- }
45
- flipAfterRotate() {
46
- const flippedH = this.transform.flipH;
47
- const flippedV = this.transform.flipV;
48
- this.transform = {
49
- ...this.transform,
50
- flipH: flippedV,
51
- flipV: flippedH
52
- };
53
- }
54
- flipHorizontal() {
55
- this.transform = {
56
- ...this.transform,
57
- flipH: !this.transform.flipH
58
- };
59
- }
60
- flipVertical() {
61
- this.transform = {
62
- ...this.transform,
63
- flipV: !this.transform.flipV
64
- };
65
- }
66
- saveProfilePicture() {
67
- if (this.croppedImage) {
68
- this.imageSelectionEvent.emit(this.croppedImage);
69
- this.busy = true;
70
- }
71
- }
72
- onCloseModal() {
73
- this.closeEvent.emit();
74
- }
75
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
76
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: { aspectRatio: "aspectRatio", dynamicData: "dynamicData" }, outputs: { imageSelectionEvent: "imageSelectionEvent", closeEvent: "closeEvent", fileChangeEvent: "fileChangeEvent" }, ngImport: i0, template: "<section class=\"image-cropper\">\n <div class=\"row text-start\">\n <div class=\"col-12\">\n <div class=\"card-block pb-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"file-upload my-2 float-start\">\n <label for=\"custom-input\">\n Upload Pic\n <input id=\"custom-input\"\n type=\"file\"\n (change)=\"onFileChange($event)\" />\n </label>\n </div>\n\n <div class=\"float-end m-2\">\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Left\">\n <i\n class=\"fa fa-undo-alt\"\n (click)=\"rotateLeft()\"\n (keydown.enter)=\"rotateLeft()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Right\">\n <i\n class=\"fa fa-redo-alt\"\n (click)=\"rotateRight()\"\n (keydown.enter)=\"rotateRight()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Horizontal\">\n <i\n class=\"fa fa-arrows-alt-h\"\n (click)=\"flipHorizontal()\"\n (keydown.enter)=\"flipHorizontal()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Vertical\">\n <i\n class=\"fa fa-arrows-alt-v\"\n (click)=\"flipVertical()\"\n (keydown.enter)=\"flipVertical()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-8\">\n <div *ngIf=\"aspectRatio === 'auto'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [aspectRatio]=\"4 / 4\"\n [onlyScaleDown]=\"true\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'fullLogo'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"5 / 1.1\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'rectangular'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"3 / 1\"\n [onlyScaleDown]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'dynamic'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"false\"\n [resizeToWidth]=\"0\"\n [cropperStaticWidth]=\"0\"\n [cropperStaticHeight]=\"0\"\n [cropperMinWidth]=\"10\"\n [cropperMinHeight]=\"10\"\n [onlyScaleDown]=\"false\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n imageQuality=\"100\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n [style.display]=\"showCropper ? null : 'none'\">\n </image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'custom'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [aspectRatio]=\"4 / 3\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n </div>\n <div *ngIf=\"croppedImage\" class=\"col-4 mt-2\">\n <img [src]=\"croppedImage\"\n class=\"cropped-image\"\n alt=\"cropped.png\"\n width=\"128\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-end mt-2\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCloseModal()\">\n Close\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveProfilePicture()\"\n [buttonBusy]=\"busy\">\n Save\n </button>\n </div>\n </div>\n</section>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.image-cropper label{background:var(--first);border-radius:5px;color:#fff;display:table;font-size:13px;font-weight:500;padding:7px}.image-cropper input[type=file]{display:none}.cropped-image{max-height:390px!important}.card-footer{background-color:transparent;left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "cropperFrameAriaLabel", "output", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i3.LazyImgDirective, selector: "img" }] }); }
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperComponent, decorators: [{
79
- type: Component,
80
- args: [{ selector: 'pw-image-cropper', template: "<section class=\"image-cropper\">\n <div class=\"row text-start\">\n <div class=\"col-12\">\n <div class=\"card-block pb-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"file-upload my-2 float-start\">\n <label for=\"custom-input\">\n Upload Pic\n <input id=\"custom-input\"\n type=\"file\"\n (change)=\"onFileChange($event)\" />\n </label>\n </div>\n\n <div class=\"float-end m-2\">\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Left\">\n <i\n class=\"fa fa-undo-alt\"\n (click)=\"rotateLeft()\"\n (keydown.enter)=\"rotateLeft()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Rotate Right\">\n <i\n class=\"fa fa-redo-alt\"\n (click)=\"rotateRight()\"\n (keydown.enter)=\"rotateRight()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Horizontal\">\n <i\n class=\"fa fa-arrows-alt-h\"\n (click)=\"flipHorizontal()\"\n (keydown.enter)=\"flipHorizontal()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <button class=\"btn btn-primary btn-sm mx-2\"\n title=\"Flip Vertical\">\n <i\n class=\"fa fa-arrows-alt-v\"\n (click)=\"flipVertical()\"\n (keydown.enter)=\"flipVertical()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-8\">\n <div *ngIf=\"aspectRatio === 'auto'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [aspectRatio]=\"4 / 4\"\n [onlyScaleDown]=\"true\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'fullLogo'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"5 / 1.1\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'rectangular'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"3 / 1\"\n [onlyScaleDown]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'dynamic'\">\n <image-cropper\n [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"false\"\n [resizeToWidth]=\"0\"\n [cropperStaticWidth]=\"0\"\n [cropperStaticHeight]=\"0\"\n [cropperMinWidth]=\"10\"\n [cropperMinHeight]=\"10\"\n [onlyScaleDown]=\"false\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n imageQuality=\"100\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n [style.display]=\"showCropper ? null : 'none'\">\n </image-cropper>\n </div>\n\n <div *ngIf=\"aspectRatio === 'custom'\">\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n [maintainAspectRatio]=\"true\"\n [canvasRotation]=\"canvasRotation\"\n [transform]=\"transform\"\n [aspectRatio]=\"4 / 3\"\n [onlyScaleDown]=\"true\"\n [roundCropper]=\"false\"\n alignImage=\"center\"\n outputType=\"base64\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded()\"\n imageQuality=\"100\"\n [style.display]=\"showCropper ? null : 'none'\"></image-cropper>\n </div>\n </div>\n <div *ngIf=\"croppedImage\" class=\"col-4 mt-2\">\n <img [src]=\"croppedImage\"\n class=\"cropped-image\"\n alt=\"cropped.png\"\n width=\"128\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-end mt-2\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCloseModal()\">\n Close\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveProfilePicture()\"\n [buttonBusy]=\"busy\">\n Save\n </button>\n </div>\n </div>\n</section>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.image-cropper label{background:var(--first);border-radius:5px;color:#fff;display:table;font-size:13px;font-weight:500;padding:7px}.image-cropper input[type=file]{display:none}.cropped-image{max-height:390px!important}.card-footer{background-color:transparent;left:0}\n"] }]
81
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { imageSelectionEvent: [{
82
- type: Output
83
- }], closeEvent: [{
84
- type: Output
85
- }], fileChangeEvent: [{
86
- type: Output
87
- }], aspectRatio: [{
88
- type: Input
89
- }], dynamicData: [{
90
- type: Input
91
- }] } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvaW1hZ2UtY3JvcHBlci9pbWFnZS1jcm9wcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9pbWFnZS1jcm9wcGVyL2ltYWdlLWNyb3BwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTMUYsTUFBTSxPQUFPLDRCQUE0QjtJQWlCckMsWUFBNkIsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFoQm5ELHNCQUFpQixHQUFtQixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFUix3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN2RSxlQUFVLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDMUQsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVwRSxnQkFBVyxHQUFHLE1BQU0sQ0FBQztRQUc5QixjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUMvQixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQUlrQyxDQUFDO0lBRXZELFlBQVksQ0FBQyxLQUFZO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQy9DLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBd0I7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFnQixDQUFDO1lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLFFBQVE7U0FDbEIsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNiLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDakIsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1NBQy9CLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztTQUMvQixDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQzsrR0FuRlEsNEJBQTRCO21HQUE1Qiw0QkFBNEIsbVBDVHpDLDR0TkEyS0E7OzRGRGxLYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0ksa0JBQWtCO3NGQVFsQixtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJbWFnZUNyb3BwZWRFdmVudCwgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctaW1hZ2UtY3JvcHBlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWNyb3BwZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ltYWdlLWNyb3BwZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlSW1hZ2VDcm9wcGVyQ29tcG9uZW50IHtcbiAgICBpbWFnZUNoYW5nZWRFdmVudDogRXZlbnQgfCBzdHJpbmcgPSAnJztcbiAgICBjcm9wcGVkSW1hZ2UgPSAnJztcblxuICAgIEBPdXRwdXQoKSBpbWFnZVNlbGVjdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBjbG9zZUV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGZpbGVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBJbnB1dCgpIGFzcGVjdFJhdGlvID0gJ2F1dG8nO1xuICAgIEBJbnB1dCgpIGR5bmFtaWNEYXRhO1xuXG4gICAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHt9O1xuICAgIGNhbnZhc1JvdGF0aW9uID0gMDtcbiAgICBzaG93Q3JvcHBlciA9IGZhbHNlO1xuXG4gICAgYnVzeTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIG9uRmlsZUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VDaGFuZ2VkRXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZUV2ZW50LmVtaXQoaW5wdXQuZmlsZXNbMF0ubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbWFnZUNyb3BwZWQoZXZlbnQ6IEltYWdlQ3JvcHBlZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC5ibG9iKTtcbiAgICB9XG5cbiAgICBpbWFnZUxvYWRlZCgpIHtcbiAgICAgICAgdGhpcy5zaG93Q3JvcHBlciA9IHRydWU7XG4gICAgfVxuXG4gICAgcm90YXRlTGVmdCgpIHtcbiAgICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbi0tO1xuICAgICAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xuICAgIH1cblxuICAgIHJvdGF0ZVJpZ2h0KCkge1xuICAgICAgICB0aGlzLmNhbnZhc1JvdGF0aW9uKys7XG4gICAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGlwQWZ0ZXJSb3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm0uZmxpcEg7XG4gICAgICAgIGNvbnN0IGZsaXBwZWRWID0gdGhpcy50cmFuc2Zvcm0uZmxpcFY7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICBmbGlwSDogZmxpcHBlZFYsXG4gICAgICAgICAgICBmbGlwVjogZmxpcHBlZEhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmbGlwSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAgICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgIGZsaXBIOiAhdGhpcy50cmFuc2Zvcm0uZmxpcEhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmbGlwVmVydGljYWwoKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICBmbGlwVjogIXRoaXMudHJhbnNmb3JtLmZsaXBWXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2F2ZVByb2ZpbGVQaWN0dXJlKCkge1xuICAgICAgICBpZiAodGhpcy5jcm9wcGVkSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VTZWxlY3Rpb25FdmVudC5lbWl0KHRoaXMuY3JvcHBlZEltYWdlKTtcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNsb3NlTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJpbWFnZS1jcm9wcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1zdGFydFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHBiLTBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZCBteS0yIGZsb2F0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjdXN0b20taW5wdXRcIj5cbiAgICAgICAgICAgICAgICBVcGxvYWQgUGljXG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiY3VzdG9tLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1lbmQgbS0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG14LTJcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiUm90YXRlIExlZnRcIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS11bmRvLWFsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicm90YXRlTGVmdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJvdGF0ZUxlZnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBteC0yXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlJvdGF0ZSBSaWdodFwiPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXJlZG8tYWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJvdGF0ZVJpZ2h0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbXgtMlwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJGbGlwIEhvcml6b250YWxcIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1hcnJvd3MtYWx0LWhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZmxpcEhvcml6b250YWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbXgtMlwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJGbGlwIFZlcnRpY2FsXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtYXJyb3dzLWFsdC12XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJmbGlwVmVydGljYWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXNwZWN0UmF0aW8gPT09ICdhdXRvJ1wiPlxuICAgICAgICAgICAgICA8aW1hZ2UtY3JvcHBlciBbaW1hZ2VDaGFuZ2VkRXZlbnRdPVwiaW1hZ2VDaGFuZ2VkRXZlbnRcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiXG4gICAgICAgICAgICAgICAgW2FzcGVjdFJhdGlvXT1cIjQgLyA0XCJcbiAgICAgICAgICAgICAgICBbb25seVNjYWxlRG93bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNmb3JtXT1cInRyYW5zZm9ybVwiXG4gICAgICAgICAgICAgICAgW3JvdW5kQ3JvcHBlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgYWxpZ25JbWFnZT1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZT1cImJhc2U2NFwiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGltYWdlTG9hZGVkKT1cImltYWdlTG9hZGVkKClcIlxuICAgICAgICAgICAgICAgIGltYWdlUXVhbGl0eT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwic2hvd0Nyb3BwZXIgPyBudWxsIDogJ25vbmUnXCI+PC9pbWFnZS1jcm9wcGVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhc3BlY3RSYXRpbyA9PT0gJ2Z1bGxMb2dvJ1wiPlxuICAgICAgICAgICAgICA8aW1hZ2UtY3JvcHBlciBbaW1hZ2VDaGFuZ2VkRXZlbnRdPVwiaW1hZ2VDaGFuZ2VkRXZlbnRcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFthc3BlY3RSYXRpb109XCI1IC8gMS4xXCJcbiAgICAgICAgICAgICAgICBbb25seVNjYWxlRG93bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcm91bmRDcm9wcGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBhbGlnbkltYWdlPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlPVwiYmFzZTY0XCJcbiAgICAgICAgICAgICAgICAoaW1hZ2VDcm9wcGVkKT1cImltYWdlQ3JvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoaW1hZ2VMb2FkZWQpPVwiaW1hZ2VMb2FkZWQoKVwiXG4gICAgICAgICAgICAgICAgaW1hZ2VRdWFsaXR5PVwiMTAwXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJzaG93Q3JvcHBlciA/IG51bGwgOiAnbm9uZSdcIj48L2ltYWdlLWNyb3BwZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFzcGVjdFJhdGlvID09PSAncmVjdGFuZ3VsYXInXCI+XG4gICAgICAgICAgICAgIDxpbWFnZS1jcm9wcGVyXG4gICAgICAgICAgICAgICAgW2ltYWdlQ2hhbmdlZEV2ZW50XT1cImltYWdlQ2hhbmdlZEV2ZW50XCJcbiAgICAgICAgICAgICAgICBbbWFpbnRhaW5Bc3BlY3RSYXRpb109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiMyAvIDFcIlxuICAgICAgICAgICAgICAgIFtvbmx5U2NhbGVEb3duXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiXG4gICAgICAgICAgICAgICAgW3RyYW5zZm9ybV09XCJ0cmFuc2Zvcm1cIlxuICAgICAgICAgICAgICAgIFtyb3VuZENyb3BwZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGFsaWduSW1hZ2U9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgIG91dHB1dFR5cGU9XCJiYXNlNjRcIlxuICAgICAgICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwiaW1hZ2VDcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChpbWFnZUxvYWRlZCk9XCJpbWFnZUxvYWRlZCgpXCJcbiAgICAgICAgICAgICAgICBpbWFnZVF1YWxpdHk9XCIxMDBcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInNob3dDcm9wcGVyID8gbnVsbCA6ICdub25lJ1wiPjwvaW1hZ2UtY3JvcHBlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXNwZWN0UmF0aW8gPT09ICdkeW5hbWljJ1wiPlxuICAgICAgICAgICAgICA8aW1hZ2UtY3JvcHBlclxuICAgICAgICAgICAgICBbaW1hZ2VDaGFuZ2VkRXZlbnRdPVwiaW1hZ2VDaGFuZ2VkRXZlbnRcIlxuICAgICAgICAgICAgICBbbWFpbnRhaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtyZXNpemVUb1dpZHRoXT1cIjBcIlxuICAgICAgICAgICAgICBbY3JvcHBlclN0YXRpY1dpZHRoXT1cIjBcIlxuICAgICAgICAgICAgICBbY3JvcHBlclN0YXRpY0hlaWdodF09XCIwXCJcbiAgICAgICAgICAgICAgW2Nyb3BwZXJNaW5XaWR0aF09XCIxMFwiXG4gICAgICAgICAgICAgIFtjcm9wcGVyTWluSGVpZ2h0XT1cIjEwXCJcbiAgICAgICAgICAgICAgW29ubHlTY2FsZURvd25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbY2FudmFzUm90YXRpb25dPVwiY2FudmFzUm90YXRpb25cIlxuICAgICAgICAgICAgICBbdHJhbnNmb3JtXT1cInRyYW5zZm9ybVwiXG4gICAgICAgICAgICAgIFtyb3VuZENyb3BwZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBhbGlnbkltYWdlPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgb3V0cHV0VHlwZT1cImJhc2U2NFwiXG4gICAgICAgICAgICAgIGltYWdlUXVhbGl0eT1cIjEwMFwiXG4gICAgICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwiaW1hZ2VDcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAoaW1hZ2VMb2FkZWQpPVwiaW1hZ2VMb2FkZWQoKVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInNob3dDcm9wcGVyID8gbnVsbCA6ICdub25lJ1wiPlxuICAgICAgICAgICAgICA8L2ltYWdlLWNyb3BwZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFzcGVjdFJhdGlvID09PSAnY3VzdG9tJ1wiPlxuICAgICAgICAgICAgICA8aW1hZ2UtY3JvcHBlciBbaW1hZ2VDaGFuZ2VkRXZlbnRdPVwiaW1hZ2VDaGFuZ2VkRXZlbnRcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiXG4gICAgICAgICAgICAgICAgW3RyYW5zZm9ybV09XCJ0cmFuc2Zvcm1cIlxuICAgICAgICAgICAgICAgIFthc3BlY3RSYXRpb109XCI0IC8gM1wiXG4gICAgICAgICAgICAgICAgW29ubHlTY2FsZURvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3JvdW5kQ3JvcHBlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgYWxpZ25JbWFnZT1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZT1cImJhc2U2NFwiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGltYWdlTG9hZGVkKT1cImltYWdlTG9hZGVkKClcIlxuICAgICAgICAgICAgICAgIGltYWdlUXVhbGl0eT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwic2hvd0Nyb3BwZXIgPyBudWxsIDogJ25vbmUnXCI+PC9pbWFnZS1jcm9wcGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNyb3BwZWRJbWFnZVwiIGNsYXNzPVwiY29sLTQgbXQtMlwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImNyb3BwZWRJbWFnZVwiXG4gICAgICAgICAgICBjbGFzcz1cImNyb3BwZWQtaW1hZ2VcIlxuICAgICAgICAgICAgICBhbHQ9XCJjcm9wcGVkLnBuZ1wiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTI4XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBweC0zXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsb2F0LWVuZCBtdC0yXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAoY2xpY2spPVwib25DbG9zZU1vZGFsKClcIj5cbiAgICAgICAgQ2xvc2VcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVByb2ZpbGVQaWN0dXJlKClcIlxuICAgICAgICBbYnV0dG9uQnVzeV09XCJidXN5XCI+XG4gICAgICAgIFNhdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
@@ -1,45 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { NgModule } from '@angular/core';
3
- import { CoreTranslocoModule } from '@posiwise/core-transloco';
4
- import { DirectivesModule } from '@posiwise/directives';
5
- import { ImageCropperModule } from 'ngx-image-cropper';
6
- import { ButtonModule } from 'primeng/button';
7
- import { CustomUploaderComponent } from '../custom-uploader/custom-uploader.component';
8
- import { ProfileImageCropperComponent } from './image-cropper.component';
9
- import * as i0 from "@angular/core";
10
- /**
11
- * Lightweight module for pw-image-cropper component
12
- *
13
- * Minimal dependencies - only CommonModule, ImageCropperModule, DirectivesModule
14
- * Use this instead of ResourceSharedComponentsModule when you only need image cropping
15
- */
16
- export class ProfileImageCropperModule {
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
18
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, declarations: [ProfileImageCropperComponent, CustomUploaderComponent], imports: [CommonModule,
19
- CoreTranslocoModule,
20
- ButtonModule,
21
- ImageCropperModule, // for <image-cropper>
22
- DirectivesModule // for [buttonBusy] directive
23
- ], exports: [ProfileImageCropperComponent, CustomUploaderComponent] }); }
24
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, imports: [CommonModule,
25
- CoreTranslocoModule,
26
- ButtonModule,
27
- ImageCropperModule, // for <image-cropper>
28
- DirectivesModule // for [buttonBusy] directive
29
- ] }); }
30
- }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileImageCropperModule, decorators: [{
32
- type: NgModule,
33
- args: [{
34
- declarations: [ProfileImageCropperComponent, CustomUploaderComponent],
35
- imports: [
36
- CommonModule,
37
- CoreTranslocoModule,
38
- ButtonModule,
39
- ImageCropperModule, // for <image-cropper>
40
- DirectivesModule // for [buttonBusy] directive
41
- ],
42
- exports: [ProfileImageCropperComponent, CustomUploaderComponent]
43
- }]
44
- }] });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1pbWFnZS1jcm9wcGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9pbWFnZS1jcm9wcGVyL3Byb2ZpbGUtaW1hZ2UtY3JvcHBlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUV6RTs7Ozs7R0FLRztBQVlILE1BQU0sT0FBTyx5QkFBeUI7K0dBQXpCLHlCQUF5QjtnSEFBekIseUJBQXlCLGlCQVZuQiw0QkFBNEIsRUFBRSx1QkFBdUIsYUFFaEUsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixZQUFZO1lBQ1osa0JBQWtCLEVBQUUsc0JBQXNCO1lBQzFDLGdCQUFnQixDQUFDLDZCQUE2QjtxQkFFeEMsNEJBQTRCLEVBQUUsdUJBQXVCO2dIQUV0RCx5QkFBeUIsWUFSOUIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixZQUFZO1lBQ1osa0JBQWtCLEVBQUUsc0JBQXNCO1lBQzFDLGdCQUFnQixDQUFDLDZCQUE2Qjs7OzRGQUl6Qyx5QkFBeUI7a0JBWHJDLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsNEJBQTRCLEVBQUUsdUJBQXVCLENBQUM7b0JBQ3JFLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixrQkFBa0IsRUFBRSxzQkFBc0I7d0JBQzFDLGdCQUFnQixDQUFDLDZCQUE2QjtxQkFDakQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsdUJBQXVCLENBQUM7aUJBQ25FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvcmVUcmFuc2xvY29Nb2R1bGUgfSBmcm9tICdAcG9zaXdpc2UvY29yZS10cmFuc2xvY28nO1xuaW1wb3J0IHsgRGlyZWN0aXZlc01vZHVsZSB9IGZyb20gJ0Bwb3Npd2lzZS9kaXJlY3RpdmVzJztcblxuaW1wb3J0IHsgSW1hZ2VDcm9wcGVyTW9kdWxlIH0gZnJvbSAnbmd4LWltYWdlLWNyb3BwZXInO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuXG5pbXBvcnQgeyBDdXN0b21VcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2N1c3RvbS11cGxvYWRlci9jdXN0b20tdXBsb2FkZXIuY29tcG9uZW50JztcblxuaW1wb3J0IHsgUHJvZmlsZUltYWdlQ3JvcHBlckNvbXBvbmVudCB9IGZyb20gJy4vaW1hZ2UtY3JvcHBlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIExpZ2h0d2VpZ2h0IG1vZHVsZSBmb3IgcHctaW1hZ2UtY3JvcHBlciBjb21wb25lbnRcbiAqXG4gKiBNaW5pbWFsIGRlcGVuZGVuY2llcyAtIG9ubHkgQ29tbW9uTW9kdWxlLCBJbWFnZUNyb3BwZXJNb2R1bGUsIERpcmVjdGl2ZXNNb2R1bGVcbiAqIFVzZSB0aGlzIGluc3RlYWQgb2YgUmVzb3VyY2VTaGFyZWRDb21wb25lbnRzTW9kdWxlIHdoZW4geW91IG9ubHkgbmVlZCBpbWFnZSBjcm9wcGluZ1xuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1Byb2ZpbGVJbWFnZUNyb3BwZXJDb21wb25lbnQsIEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQ29yZVRyYW5zbG9jb01vZHVsZSxcbiAgICAgICAgQnV0dG9uTW9kdWxlLFxuICAgICAgICBJbWFnZUNyb3BwZXJNb2R1bGUsIC8vIGZvciA8aW1hZ2UtY3JvcHBlcj5cbiAgICAgICAgRGlyZWN0aXZlc01vZHVsZSAvLyBmb3IgW2J1dHRvbkJ1c3ldIGRpcmVjdGl2ZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1Byb2ZpbGVJbWFnZUNyb3BwZXJDb21wb25lbnQsIEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlSW1hZ2VDcm9wcGVyTW9kdWxlIHt9XG4iXX0=
@@ -1,34 +0,0 @@
1
- import { EventEmitter, Injector } from '@angular/core';
2
- import { AppBaseComponent } from '@posiwise/app-base-component';
3
- import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
4
- import * as i0 from "@angular/core";
5
- export declare class CustomUploaderComponent extends AppBaseComponent {
6
- private readonly modalService;
7
- private readonly document;
8
- saveEvent: EventEmitter<{
9
- file: string;
10
- name: string;
11
- }>;
12
- controlName: string;
13
- previewData: {
14
- url: string;
15
- };
16
- aspectRatio: string;
17
- title: string;
18
- uploadedFile: any;
19
- selectedFileName: string;
20
- buttonBusy: boolean;
21
- constructor(injector: Injector, modalService: NgbModal, document: Document);
22
- deleteExistingFile(): void;
23
- onSaveFile(): void;
24
- onFileChange(value: any): void;
25
- private dataURLtoBlob;
26
- onImageSelection(event: any): void;
27
- openModal(content: any): void;
28
- clearValues(): void;
29
- onClose(): void;
30
- updateHeight(): void;
31
- onImgChange(event?: Event): void;
32
- static ɵfac: i0.ɵɵFactoryDeclaration<CustomUploaderComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<CustomUploaderComponent, "pw-custom-uploader", never, { "controlName": { "alias": "controlName"; "required": false; }; "previewData": { "alias": "previewData"; "required": false; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; }; "title": { "alias": "title"; "required": false; }; }, { "saveEvent": "saveEvent"; }, never, never, false, never>;
34
- }
@@ -1,33 +0,0 @@
1
- import { Injector, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
2
- import { DomSanitizer } from '@angular/platform-browser';
3
- import { AdminService } from '@posiwise/admin-module-utils';
4
- import { AppBaseComponent } from '@posiwise/app-base-component';
5
- import { User } from '@posiwise/common-utilities';
6
- import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
7
- import { CustomUploaderComponent } from '../custom-uploader/custom-uploader.component';
8
- import * as i0 from "@angular/core";
9
- export declare class DemoCardsComponent extends AppBaseComponent implements OnInit, OnChanges {
10
- private readonly sanitizer;
11
- private readonly modalService;
12
- private readonly adminService;
13
- user: User;
14
- userLoggedIn: boolean;
15
- bookingLinks: any;
16
- editingBookingLinks: any[];
17
- domainId: any;
18
- subscriptionId: string;
19
- canEditResourcesValue: any;
20
- editBookLinksModal: TemplateRef<CustomUploaderComponent>;
21
- constructor(sanitizer: DomSanitizer, modalService: NgbModal, adminService: AdminService, injector: Injector);
22
- ngOnInit(): void;
23
- ngOnChanges(changes: SimpleChanges): void;
24
- openEditBookLinks(modal: any): void;
25
- addBookingLink(): void;
26
- removeBookDemoLink(i: number): void;
27
- dropBookingLink(event: any): void;
28
- saveBookingLinks(modal: any): void;
29
- private updateCanEditResourcesValue;
30
- canEditResources(): boolean;
31
- static ɵfac: i0.ɵɵFactoryDeclaration<DemoCardsComponent, never>;
32
- static ɵcmp: i0.ɵɵComponentDeclaration<DemoCardsComponent, "pw-demo-card", never, { "user": { "alias": "user"; "required": false; }; "userLoggedIn": { "alias": "userLoggedIn"; "required": false; }; }, {}, never, never, false, never>;
33
- }
@@ -1,14 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./demo-cards.component";
3
- import * as i2 from "@angular/common";
4
- import * as i3 from "@angular/forms";
5
- import * as i4 from "@angular/cdk/drag-drop";
6
- import * as i5 from "@ng-bootstrap/ng-bootstrap";
7
- import * as i6 from "@posiwise/directives";
8
- import * as i7 from "@posiwise/pipes";
9
- import * as i8 from "@posiwise/admin-module-utils";
10
- export declare class DemoCardsModule {
11
- static ɵfac: i0.ɵɵFactoryDeclaration<DemoCardsModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<DemoCardsModule, [typeof i1.DemoCardsComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i4.DragDropModule, typeof i5.NgbModalModule, typeof i6.DirectivesModule, typeof i7.PipesModule, typeof i8.AdminModuleUtilsModule], [typeof i1.DemoCardsComponent]>;
13
- static ɵinj: i0.ɵɵInjectorDeclaration<DemoCardsModule>;
14
- }
@@ -1,7 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class FieldErrorDisplayComponent {
3
- errorMsg: string;
4
- displayError: boolean;
5
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldErrorDisplayComponent, never>;
6
- static ɵcmp: i0.ɵɵComponentDeclaration<FieldErrorDisplayComponent, "pw-field-error-display", never, { "errorMsg": { "alias": "errorMsg"; "required": false; }; "displayError": { "alias": "displayError"; "required": false; }; }, {}, never, never, false, never>;
7
- }
@@ -1,13 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./field-error-display.component";
3
- import * as i2 from "@angular/common";
4
- /**
5
- * Standalone module for FieldErrorDisplayComponent.
6
- * Import this lightweight module instead of SharedComponentsModule
7
- * when you only need field error display functionality.
8
- */
9
- export declare class FieldErrorDisplayModule {
10
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldErrorDisplayModule, never>;
11
- static ɵmod: i0.ɵɵNgModuleDeclaration<FieldErrorDisplayModule, [typeof i1.FieldErrorDisplayComponent], [typeof i2.CommonModule], [typeof i1.FieldErrorDisplayComponent]>;
12
- static ɵinj: i0.ɵɵInjectorDeclaration<FieldErrorDisplayModule>;
13
- }
@@ -1,30 +0,0 @@
1
- import { ChangeDetectorRef, EventEmitter } from '@angular/core';
2
- import { ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper';
3
- import * as i0 from "@angular/core";
4
- export declare class ProfileImageCropperComponent {
5
- private readonly cdr;
6
- imageChangedEvent: Event | string;
7
- croppedImage: string;
8
- imageSelectionEvent: EventEmitter<string>;
9
- closeEvent: EventEmitter<void>;
10
- fileChangeEvent: EventEmitter<string>;
11
- aspectRatio: string;
12
- dynamicData: any;
13
- transform: ImageTransform;
14
- canvasRotation: number;
15
- showCropper: boolean;
16
- busy: boolean;
17
- constructor(cdr: ChangeDetectorRef);
18
- onFileChange(event: Event): void;
19
- imageCropped(event: ImageCroppedEvent): void;
20
- imageLoaded(): void;
21
- rotateLeft(): void;
22
- rotateRight(): void;
23
- private flipAfterRotate;
24
- flipHorizontal(): void;
25
- flipVertical(): void;
26
- saveProfilePicture(): void;
27
- onCloseModal(): void;
28
- static ɵfac: i0.ɵɵFactoryDeclaration<ProfileImageCropperComponent, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<ProfileImageCropperComponent, "pw-image-cropper", never, { "aspectRatio": { "alias": "aspectRatio"; "required": false; }; "dynamicData": { "alias": "dynamicData"; "required": false; }; }, { "imageSelectionEvent": "imageSelectionEvent"; "closeEvent": "closeEvent"; "fileChangeEvent": "fileChangeEvent"; }, never, never, false, never>;
30
- }
@@ -1,19 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./image-cropper.component";
3
- import * as i2 from "../custom-uploader/custom-uploader.component";
4
- import * as i3 from "@angular/common";
5
- import * as i4 from "@posiwise/core-transloco";
6
- import * as i5 from "primeng/button";
7
- import * as i6 from "ngx-image-cropper";
8
- import * as i7 from "@posiwise/directives";
9
- /**
10
- * Lightweight module for pw-image-cropper component
11
- *
12
- * Minimal dependencies - only CommonModule, ImageCropperModule, DirectivesModule
13
- * Use this instead of ResourceSharedComponentsModule when you only need image cropping
14
- */
15
- export declare class ProfileImageCropperModule {
16
- static ɵfac: i0.ɵɵFactoryDeclaration<ProfileImageCropperModule, never>;
17
- static ɵmod: i0.ɵɵNgModuleDeclaration<ProfileImageCropperModule, [typeof i1.ProfileImageCropperComponent, typeof i2.CustomUploaderComponent], [typeof i3.CommonModule, typeof i4.CoreTranslocoModule, typeof i5.ButtonModule, typeof i6.ImageCropperModule, typeof i7.DirectivesModule], [typeof i1.ProfileImageCropperComponent, typeof i2.CustomUploaderComponent]>;
18
- static ɵinj: i0.ɵɵInjectorDeclaration<ProfileImageCropperModule>;
19
- }