@rangertechnologies/ngnxt 2.1.253 → 2.1.255-beta
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/fesm2022/rangertechnologies-ngnxt.mjs +258 -433
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/datatable/datatable.component.d.ts +0 -1
- package/lib/components/pick-location/pick-location.component.d.ts +0 -1
- package/lib/model/bookletWrapper.d.ts +0 -1
- package/lib/pages/booklet/booklet.component.d.ts +0 -2
- package/lib/pages/builder/element/element.component.d.ts +0 -3
- package/lib/pages/builder/properties/properties.component.d.ts +6 -2
- package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +0 -3
- package/lib/pages/questionbook/questionbook.component.d.ts +0 -1
- package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -1
- package/lib/pipe/custom-translate.pipe.d.ts +1 -1
- package/lib/pipe/svg/svg.pipe.d.ts +10 -0
- package/lib/services/form-builder/form-builder.service.d.ts +1 -0
- package/lib/services/translation/translation.service.d.ts +1 -1
- package/package.json +4 -6
- package/rangertechnologies-ngnxt-2.1.255-beta.tgz +0 -0
- package/esm2022/environments/version.mjs +0 -15
- package/esm2022/lib/components/button/nxt-button.component.mjs +0 -154
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -360
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -263
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -53
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -156
- package/esm2022/lib/components/datatable/datatable.component.mjs +0 -1757
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -292
- package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +0 -105
- package/esm2022/lib/components/image-cropper/component/cropper.state.mjs +0 -208
- package/esm2022/lib/components/image-cropper/component/image-cropper.component.mjs +0 -562
- package/esm2022/lib/components/image-cropper/interfaces/basic-event.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/cropper-options.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/cropper-position.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/dimensions.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/exif-transform.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/image-cropped-event.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/image-transform.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/index.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/loaded-image.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/move-start.interface.mjs +0 -8
- package/esm2022/lib/components/image-cropper/services/crop.service.mjs +0 -139
- package/esm2022/lib/components/image-cropper/services/load-image.service.mjs +0 -194
- package/esm2022/lib/components/image-cropper/utils/cropper-position.utils.mjs +0 -239
- package/esm2022/lib/components/image-cropper/utils/exif.utils.mjs +0 -79
- package/esm2022/lib/components/image-cropper/utils/keyboard.utils.mjs +0 -40
- package/esm2022/lib/components/image-cropper/utils/percentage.utils.mjs +0 -4
- package/esm2022/lib/components/image-cropper/utils/resize.utils.mjs +0 -75
- package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +0 -392
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +0 -2972
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -105
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -220
- package/esm2022/lib/components/search-box/search-box.component.mjs +0 -470
- package/esm2022/lib/country.json +0 -43237
- package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
- package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
- package/esm2022/lib/model/bookletWrapper.mjs +0 -9
- package/esm2022/lib/model/changeWrapper.mjs +0 -10
- package/esm2022/lib/model/errorWrapper.mjs +0 -6
- package/esm2022/lib/nxt-app.component.mjs +0 -22
- package/esm2022/lib/nxt-app.module.mjs +0 -115
- package/esm2022/lib/nxt-app.service.mjs +0 -14
- package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -658
- package/esm2022/lib/pages/builder/element/element.component.mjs +0 -508
- package/esm2022/lib/pages/builder/form/form.component.mjs +0 -48
- package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +0 -97
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -1089
- package/esm2022/lib/pages/builder/templates/templates.component.mjs +0 -35
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +0 -681
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +0 -1118
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -801
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2219
- package/esm2022/lib/pipe/button-styles.pipe.mjs +0 -26
- package/esm2022/lib/pipe/custom-translate.pipe.mjs +0 -36
- package/esm2022/lib/pipe/get-value.pipe.mjs +0 -54
- package/esm2022/lib/pipe/question-by-row.pipe.mjs +0 -51
- package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -40
- package/esm2022/lib/sample.mjs +0 -3715
- package/esm2022/lib/services/change/change.service.mjs +0 -46
- package/esm2022/lib/services/country/country.service.mjs +0 -135
- package/esm2022/lib/services/data/data.service.mjs +0 -100
- package/esm2022/lib/services/form-builder/form-builder.service.mjs +0 -500
- package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +0 -398
- package/esm2022/lib/services/salesforce/salesforce.service.mjs +0 -41
- package/esm2022/lib/services/shared/shared.service.mjs +0 -100
- package/esm2022/lib/services/storage/storage.service.mjs +0 -59
- package/esm2022/lib/services/template/template.service.mjs +0 -351
- package/esm2022/lib/services/translation/translation.service.mjs +0 -121
- package/esm2022/lib/wrapper.mjs +0 -175
- package/esm2022/public-api.mjs +0 -22
- package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
- package/rangertechnologies-ngnxt-2.1.253.tgz +0 -0
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
//MSM10JUL25
|
|
2
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { FormsModule } from '@angular/forms';
|
|
5
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
6
|
-
import { NxtCustomTranslatePipe } from "../../pipe/custom-translate.pipe";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/platform-browser";
|
|
9
|
-
import * as i2 from "@angular/common";
|
|
10
|
-
import * as i3 from "@angular/forms";
|
|
11
|
-
import * as i4 from "@angular/material/tooltip";
|
|
12
|
-
export class IconSelectorComponent {
|
|
13
|
-
sanitizer;
|
|
14
|
-
allIcons;
|
|
15
|
-
themeColor = '#ff0000'; // Default theme color
|
|
16
|
-
height = '300px'; // Default height
|
|
17
|
-
tooltipPosition = "above"; // above, below, left, right, before, after
|
|
18
|
-
selectedIcon; // Selected icon name
|
|
19
|
-
cdnIconURL = ""; // CDN URL for icons
|
|
20
|
-
label = ''; // Input label
|
|
21
|
-
labelFont = ''; // Input label font
|
|
22
|
-
labelWeight = ''; // Input label Weight
|
|
23
|
-
inputWeight = ''; // Input Weight
|
|
24
|
-
labelSize = ''; // Input label Size
|
|
25
|
-
labelColor = ''; // Input label Color
|
|
26
|
-
showLabel = ''; // Input label Color
|
|
27
|
-
required = false; // Required validation
|
|
28
|
-
mode = 'edit'; // New mode input
|
|
29
|
-
question = {};
|
|
30
|
-
options = []; // For radio buttons
|
|
31
|
-
iconSelected = new EventEmitter(); // Event emitter for selected icon
|
|
32
|
-
filteredIcons = [];
|
|
33
|
-
searchQuery = '';
|
|
34
|
-
showDropdown = false;
|
|
35
|
-
constructor(sanitizer) {
|
|
36
|
-
this.sanitizer = sanitizer;
|
|
37
|
-
}
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];
|
|
40
|
-
}
|
|
41
|
-
filterIcons() {
|
|
42
|
-
if (!this.searchQuery) {
|
|
43
|
-
this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
this.filteredIcons = this.allIcons?.filter((icon) => icon?.name?.toLowerCase().includes(this.searchQuery?.toLowerCase()));
|
|
47
|
-
}
|
|
48
|
-
selectIcon(icon) {
|
|
49
|
-
const iconSVG = this.getSVG(icon.svg);
|
|
50
|
-
this.selectedIcon = iconSVG;
|
|
51
|
-
this.iconSelected.emit(icon);
|
|
52
|
-
}
|
|
53
|
-
toggleDropdown() {
|
|
54
|
-
this.showDropdown = !this.showDropdown;
|
|
55
|
-
}
|
|
56
|
-
getSVG(icon) {
|
|
57
|
-
if (typeof icon === 'object') {
|
|
58
|
-
return this.sanitizer.bypassSecurityTrustHtml(icon.changingThisBreaksApplicationSecurity || '');
|
|
59
|
-
}
|
|
60
|
-
return this.sanitizer.bypassSecurityTrustHtml(icon);
|
|
61
|
-
}
|
|
62
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconSelectorComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
63
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: IconSelectorComponent, isStandalone: true, selector: "nxt-icon-selector", inputs: { allIcons: "allIcons", themeColor: "themeColor", height: "height", tooltipPosition: "tooltipPosition", selectedIcon: "selectedIcon", cdnIconURL: "cdnIconURL", label: "label", labelFont: "labelFont", labelWeight: "labelWeight", inputWeight: "inputWeight", labelSize: "labelSize", labelColor: "labelColor", showLabel: "showLabel", required: "required", mode: "mode", question: "question", options: "options" }, outputs: { iconSelected: "iconSelected" }, ngImport: i0, template: "<!-- MSM10JUL25 for icon selector UI -->\n<div class=\"icon-selector\">\n <div class=\"selected-icon\" (click)=\"toggleDropdown()\">\n <span *ngIf=\"!selectedIcon\">{{ 'CHOOSE_ICON' | nxtCustomTranslate : 'Choose Icon' }}</span>\n <div *ngIf=\"selectedIcon\" [innerHTML]=\"selectedIcon\" class=\"svg-container\"></div><span\n class=\"material-icons\">arrow_drop_down</span>\n </div>\n\n <div class=\"icon-selector-container\" [style.height]=\"height\" *ngIf=\"showDropdown\">\n <div class=\"search-container\">\n <div class=\"search-box\">\n <input type=\"text\" [(ngModel)]=\"searchQuery\" (input)=\"filterIcons()\" [placeholder]=\"('SEARCH_ICONS' | nxtCustomTranslate : 'Search icons...')\"\n class=\"search-input\">\n </div>\n </div>\n\n <div class=\"icon-grid-container\" [style.max-height]=\"'calc(' + height + ' - 120px)'\">\n <div *ngIf=\"filteredIcons.length === 0\" class=\"no-results\">\n {{ 'NO_ICONS_FOUND' | nxtCustomTranslate : 'No icons found matching' }} \"{{searchQuery}}\"\n </div>\n\n <div class=\"icon-grid\">\n <div *ngFor=\"let icon of filteredIcons\" class=\"icon-option\" [matTooltip]=icon.name\n [matTooltipPosition]=tooltipPosition>\n <div class=\"icon-option\">\n <div class=\"click-overlay\" (click)=\"selectIcon(icon); toggleDropdown()\"></div>\n <div [innerHTML]=\"getSVG(icon.svg)\" class=\"svg-container\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".icon-item svg{color:red}.icon-selector-container{padding:16px;max-width:400px;margin:0 auto;display:flex;flex-direction:column;border-radius:8px;box-shadow:0 2px 10px #0000001a;background-color:#fff;overflow:hidden}.search-container{margin:8px 0 16px}.icon-grid-container{overflow-y:scroll!important;padding-right:4px}.icon-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:5px}.icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:#f5f5f5;aspect-ratio:1/1}.icon-option:hover{background-color:#e0e0e0;transform:scale(1.05)}.icon-option.selected{background-color:#e3f2fd;border:2px solid #2196f3}.no-results{text-align:center;padding:20px;color:#757575;font-style:italic}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}::-webkit-scrollbar-thumb{background:#888;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#555}.icon-selector{position:relative;display:inline-block}.selected-icon{display:flex;align-items:center;gap:4px;cursor:pointer;padding:3px;border:1px solid #ccc;border-radius:4px}.icon-dropdown{position:absolute;top:100%;left:0;z-index:1000;background:#fff;border:1px solid #ccc;border-radius:4px;max-height:200px;overflow-y:auto;display:grid;grid-template-columns:repeat(8,1fr);gap:5px;padding:3px}.icon-option{padding:3px;cursor:pointer;border-radius:4px;display:flex;justify-content:center}.icon-option:hover{background-color:#f0f0f0}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1}svg{width:20px!important;height:20px!important}.click-overlay{position:absolute;inset:0;z-index:1}.icon-option{position:relative;cursor:pointer}.svg-container{display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }] });
|
|
64
|
-
}
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconSelectorComponent, decorators: [{
|
|
66
|
-
type: Component,
|
|
67
|
-
args: [{ selector: 'nxt-icon-selector', imports: [CommonModule, FormsModule, MatTooltipModule, NxtCustomTranslatePipe], standalone: true, template: "<!-- MSM10JUL25 for icon selector UI -->\n<div class=\"icon-selector\">\n <div class=\"selected-icon\" (click)=\"toggleDropdown()\">\n <span *ngIf=\"!selectedIcon\">{{ 'CHOOSE_ICON' | nxtCustomTranslate : 'Choose Icon' }}</span>\n <div *ngIf=\"selectedIcon\" [innerHTML]=\"selectedIcon\" class=\"svg-container\"></div><span\n class=\"material-icons\">arrow_drop_down</span>\n </div>\n\n <div class=\"icon-selector-container\" [style.height]=\"height\" *ngIf=\"showDropdown\">\n <div class=\"search-container\">\n <div class=\"search-box\">\n <input type=\"text\" [(ngModel)]=\"searchQuery\" (input)=\"filterIcons()\" [placeholder]=\"('SEARCH_ICONS' | nxtCustomTranslate : 'Search icons...')\"\n class=\"search-input\">\n </div>\n </div>\n\n <div class=\"icon-grid-container\" [style.max-height]=\"'calc(' + height + ' - 120px)'\">\n <div *ngIf=\"filteredIcons.length === 0\" class=\"no-results\">\n {{ 'NO_ICONS_FOUND' | nxtCustomTranslate : 'No icons found matching' }} \"{{searchQuery}}\"\n </div>\n\n <div class=\"icon-grid\">\n <div *ngFor=\"let icon of filteredIcons\" class=\"icon-option\" [matTooltip]=icon.name\n [matTooltipPosition]=tooltipPosition>\n <div class=\"icon-option\">\n <div class=\"click-overlay\" (click)=\"selectIcon(icon); toggleDropdown()\"></div>\n <div [innerHTML]=\"getSVG(icon.svg)\" class=\"svg-container\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".icon-item svg{color:red}.icon-selector-container{padding:16px;max-width:400px;margin:0 auto;display:flex;flex-direction:column;border-radius:8px;box-shadow:0 2px 10px #0000001a;background-color:#fff;overflow:hidden}.search-container{margin:8px 0 16px}.icon-grid-container{overflow-y:scroll!important;padding-right:4px}.icon-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:5px}.icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:#f5f5f5;aspect-ratio:1/1}.icon-option:hover{background-color:#e0e0e0;transform:scale(1.05)}.icon-option.selected{background-color:#e3f2fd;border:2px solid #2196f3}.no-results{text-align:center;padding:20px;color:#757575;font-style:italic}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}::-webkit-scrollbar-thumb{background:#888;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#555}.icon-selector{position:relative;display:inline-block}.selected-icon{display:flex;align-items:center;gap:4px;cursor:pointer;padding:3px;border:1px solid #ccc;border-radius:4px}.icon-dropdown{position:absolute;top:100%;left:0;z-index:1000;background:#fff;border:1px solid #ccc;border-radius:4px;max-height:200px;overflow-y:auto;display:grid;grid-template-columns:repeat(8,1fr);gap:5px;padding:3px}.icon-option{padding:3px;cursor:pointer;border-radius:4px;display:flex;justify-content:center}.icon-option:hover{background-color:#f0f0f0}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1}svg{width:20px!important;height:20px!important}.click-overlay{position:absolute;inset:0;z-index:1}.icon-option{position:relative;cursor:pointer}.svg-container{display:flex;align-items:center;justify-content:center}\n"] }]
|
|
68
|
-
}], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { allIcons: [{
|
|
69
|
-
type: Input
|
|
70
|
-
}], themeColor: [{
|
|
71
|
-
type: Input
|
|
72
|
-
}], height: [{
|
|
73
|
-
type: Input
|
|
74
|
-
}], tooltipPosition: [{
|
|
75
|
-
type: Input
|
|
76
|
-
}], selectedIcon: [{
|
|
77
|
-
type: Input
|
|
78
|
-
}], cdnIconURL: [{
|
|
79
|
-
type: Input
|
|
80
|
-
}], label: [{
|
|
81
|
-
type: Input
|
|
82
|
-
}], labelFont: [{
|
|
83
|
-
type: Input
|
|
84
|
-
}], labelWeight: [{
|
|
85
|
-
type: Input
|
|
86
|
-
}], inputWeight: [{
|
|
87
|
-
type: Input
|
|
88
|
-
}], labelSize: [{
|
|
89
|
-
type: Input
|
|
90
|
-
}], labelColor: [{
|
|
91
|
-
type: Input
|
|
92
|
-
}], showLabel: [{
|
|
93
|
-
type: Input
|
|
94
|
-
}], required: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}], mode: [{
|
|
97
|
-
type: Input
|
|
98
|
-
}], question: [{
|
|
99
|
-
type: Input
|
|
100
|
-
}], options: [{
|
|
101
|
-
type: Input
|
|
102
|
-
}], iconSelected: [{
|
|
103
|
-
type: Output
|
|
104
|
-
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9pY29uLXNlbGVjdG9yL2ljb24tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvaWNvbi1zZWxlY3Rvci9pY29uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQVMxRSxNQUFNLE9BQU8scUJBQXFCO0lBeUJ0QjtJQXhCRCxRQUFRLENBQUs7SUFDYixVQUFVLEdBQVcsU0FBUyxDQUFDLENBQUMsc0JBQXNCO0lBQ3RELE1BQU0sR0FBVyxPQUFPLENBQUMsQ0FBQyxpQkFBaUI7SUFDM0MsZUFBZSxHQUFXLE9BQU8sQ0FBQyxDQUFDLDJDQUEyQztJQUM5RSxZQUFZLENBQU0sQ0FBQyxxQkFBcUI7SUFDeEMsVUFBVSxHQUFXLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtJQUU3QyxLQUFLLEdBQVcsRUFBRSxDQUFDLENBQUUsY0FBYztJQUNuQyxTQUFTLEdBQVcsRUFBRSxDQUFDLENBQUUsbUJBQW1CO0lBQzVDLFdBQVcsR0FBVyxFQUFFLENBQUMsQ0FBRSxxQkFBcUI7SUFDaEQs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QUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy9NU00xMEpVTDI1XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOeHRDdXN0b21UcmFuc2xhdGVQaXBlIH0gZnJvbSBcIi4uLy4uL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1pY29uLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ljb24tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZSwgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZV0sXG4gIHN0eWxlVXJsczogWycuL2ljb24tc2VsZWN0b3IuY29tcG9uZW50LmNzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJY29uU2VsZWN0b3JDb21wb25lbnQge1xuICBASW5wdXQoKSBhbGxJY29uczogW107XG4gIEBJbnB1dCgpIHRoZW1lQ29sb3I6IHN0cmluZyA9ICcjZmYwMDAwJzsgLy8gRGVmYXVsdCB0aGVtZSBjb2xvclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICczMDBweCc7IC8vIERlZmF1bHQgaGVpZ2h0XG4gIEBJbnB1dCgpIHRvb2x0aXBQb3NpdGlvbjogc3RyaW5nID0gXCJhYm92ZVwiOyAvLyBhYm92ZSwgYmVsb3csIGxlZnQsIHJpZ2h0LCBiZWZvcmUsIGFmdGVyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSWNvbjogYW55OyAvLyBTZWxlY3RlZCBpY29uIG5hbWVcbiAgQElucHV0KCkgY2RuSWNvblVSTDogc3RyaW5nID0gXCJcIjsgLy8gQ0ROIFVSTCBmb3IgaWNvbnNcblxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbFxuICBASW5wdXQoKSBsYWJlbEZvbnQ6IHN0cmluZyA9ICcnOyAgLy8gSW5wdXQgbGFiZWwgZm9udFxuICBASW5wdXQoKSBsYWJlbFdlaWdodDogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbCBXZWlnaHRcbiAgQElucHV0KCkgaW5wdXRXZWlnaHQ6IHN0cmluZyA9ICcnOyAgLy8gSW5wdXQgV2VpZ2h0XG4gIEBJbnB1dCgpIGxhYmVsU2l6ZTogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbCBTaXplXG4gIEBJbnB1dCgpIGxhYmVsQ29sb3I6IHN0cmluZyA9ICcnOyAgLy8gSW5wdXQgbGFiZWwgQ29sb3JcbiAgQElucHV0KCkgc2hvd0xhYmVsOiBzdHJpbmcgPSAnJzsgIC8vIElucHV0IGxhYmVsIENvbG9yXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7ICAvLyBSZXF1aXJlZCB2YWxpZGF0aW9uXG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7IC8vIE5ldyBtb2RlIGlucHV0XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fVxuICBASW5wdXQoKSBvcHRpb25zOiBhbnlbXSA9IFtdOyAvLyBGb3IgcmFkaW8gYnV0dG9uc1xuXG4gIEBPdXRwdXQoKSBpY29uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gRXZlbnQgZW1pdHRlciBmb3Igc2VsZWN0ZWQgaWNvblxuICBmaWx0ZXJlZEljb25zOiBhbnlbXSA9IFtdO1xuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBzaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSB0aGlzLmFsbEljb25zICE9IG51bGwgJiYgdGhpcy5hbGxJY29ucy5sZW5ndGggPiAwID8gWy4uLnRoaXMuYWxsSWNvbnNdIDogW107XG4gIH1cbiAgZmlsdGVySWNvbnMoKSB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFF1ZXJ5KSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSB0aGlzLmFsbEljb25zICE9IG51bGwgJiYgdGhpcy5hbGxJY29ucy5sZW5ndGggPiAwID8gWy4uLnRoaXMuYWxsSWNvbnNdIDogW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyZWRJY29ucyA9IHRoaXMuYWxsSWNvbnM/LmZpbHRlcigoaWNvbjogYW55KSA9PlxuICAgICAgaWNvbj8ubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFF1ZXJ5Py50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RJY29uKGljb246IGFueSkge1xuICAgIGNvbnN0IGljb25TVkcgPSB0aGlzLmdldFNWRyhpY29uLnN2Zyk7XG4gICAgdGhpcy5zZWxlY3RlZEljb24gPSBpY29uU1ZHO1xuICAgIHRoaXMuaWNvblNlbGVjdGVkLmVtaXQoaWNvbik7XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEcm9wZG93biA9ICF0aGlzLnNob3dEcm9wZG93bjtcbiAgfVxuXG4gIGdldFNWRyhpY29uOiBhbnkpIHtcbiAgICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgICAgaWNvbi5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5IHx8ICcnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaWNvbik7XG4gIH1cbn1cbiIsIjwhLS0gTVNNMTBKVUwyNSBmb3IgaWNvbiBzZWxlY3RvciBVSSAtLT5cbjxkaXYgY2xhc3M9XCJpY29uLXNlbGVjdG9yXCI+XG4gIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1pY29uXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIj5cbiAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZEljb25cIj57eyAnQ0hPT1NFX0lDT04nIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ0Nob29zZSBJY29uJyB9fTwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRJY29uXCIgW2lubmVySFRNTF09XCJzZWxlY3RlZEljb25cIiBjbGFzcz1cInN2Zy1jb250YWluZXJcIj48L2Rpdj48c3BhblxuICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmFycm93X2Ryb3BfZG93bjwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImljb24tc2VsZWN0b3ItY29udGFpbmVyXCIgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIiAqbmdJZj1cInNob3dEcm9wZG93blwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJveFwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFF1ZXJ5XCIgKGlucHV0KT1cImZpbHRlckljb25zKClcIiBbcGxhY2Vob2xkZXJdPVwiKCdTRUFSQ0hfSUNPTlMnIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ1NlYXJjaCBpY29ucy4uLicpXCJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ncmlkLWNvbnRhaW5lclwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIidjYWxjKCcgKyBoZWlnaHQgKyAnIC0gMTIwcHgpJ1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkSWNvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAgICAgIHt7ICdOT19JQ09OU19GT1VORCcgfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnTm8gaWNvbnMgZm91bmQgbWF0Y2hpbmcnIH19IFwie3tzZWFyY2hRdWVyeX19XCJcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ncmlkXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGljb24gb2YgZmlsdGVyZWRJY29uc1wiIGNsYXNzPVwiaWNvbi1vcHRpb25cIiBbbWF0VG9vbHRpcF09aWNvbi5uYW1lXG4gICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09dG9vbHRpcFBvc2l0aW9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLW9wdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrLW92ZXJsYXlcIiAoY2xpY2spPVwic2VsZWN0SWNvbihpY29uKTsgdG9nZ2xlRHJvcGRvd24oKVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFNWRyhpY29uLnN2ZylcIiBjbGFzcz1cInN2Zy1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { checkCropperPosition } from '../utils/cropper-position.utils';
|
|
2
|
-
export class CropperState {
|
|
3
|
-
options = {
|
|
4
|
-
format: 'png',
|
|
5
|
-
output: 'blob',
|
|
6
|
-
autoCrop: true,
|
|
7
|
-
maintainAspectRatio: true,
|
|
8
|
-
aspectRatio: 1,
|
|
9
|
-
resetCropOnAspectRatioChange: true,
|
|
10
|
-
resizeToWidth: 0,
|
|
11
|
-
resizeToHeight: 0,
|
|
12
|
-
cropperMinWidth: 0,
|
|
13
|
-
cropperMinHeight: 0,
|
|
14
|
-
cropperMaxHeight: 0,
|
|
15
|
-
cropperMaxWidth: 0,
|
|
16
|
-
cropperStaticWidth: 0,
|
|
17
|
-
cropperStaticHeight: 0,
|
|
18
|
-
canvasRotation: 0,
|
|
19
|
-
roundCropper: false,
|
|
20
|
-
onlyScaleDown: false,
|
|
21
|
-
imageQuality: 92,
|
|
22
|
-
backgroundColor: null,
|
|
23
|
-
containWithinAspectRatio: false,
|
|
24
|
-
hideResizeSquares: false,
|
|
25
|
-
alignImage: 'center',
|
|
26
|
-
cropperFrameAriaLabel: undefined,
|
|
27
|
-
checkImageType: true,
|
|
28
|
-
};
|
|
29
|
-
loadedImage;
|
|
30
|
-
maxSize;
|
|
31
|
-
cropper = { x1: 0, x2: 0, y1: 0, y2: 0 };
|
|
32
|
-
transform = {};
|
|
33
|
-
// Internal
|
|
34
|
-
cropperScaledMinWidth = 20;
|
|
35
|
-
cropperScaledMinHeight = 20;
|
|
36
|
-
cropperScaledMaxWidth = 20;
|
|
37
|
-
cropperScaledMaxHeight = 20;
|
|
38
|
-
stepSize = 3;
|
|
39
|
-
setOptionsFromChanges(changes) {
|
|
40
|
-
if (changes['options']?.currentValue) {
|
|
41
|
-
this.setOptions(changes['options'].currentValue);
|
|
42
|
-
}
|
|
43
|
-
const options = Object.entries(changes)
|
|
44
|
-
.filter(([key]) => key in this.options)
|
|
45
|
-
.reduce((acc, [key, change]) => ({
|
|
46
|
-
...acc,
|
|
47
|
-
[key]: change.currentValue,
|
|
48
|
-
}), {});
|
|
49
|
-
if (Object.keys(options).length > 0) {
|
|
50
|
-
this.setOptions(options);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
setOptions(options) {
|
|
54
|
-
this.options = {
|
|
55
|
-
...this.options,
|
|
56
|
-
...(options || {}),
|
|
57
|
-
};
|
|
58
|
-
this.validateOptions();
|
|
59
|
-
if (!this.loadedImage?.transformed.image.complete || !this.maxSize) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
let positionPossiblyChanged = false;
|
|
63
|
-
if ((this.options.maintainAspectRatio && options['aspectRatio']) ||
|
|
64
|
-
options['maintainAspectRatio']) {
|
|
65
|
-
this.setCropperScaledMinSize();
|
|
66
|
-
this.setCropperScaledMaxSize();
|
|
67
|
-
if (this.options.maintainAspectRatio &&
|
|
68
|
-
(this.options.resetCropOnAspectRatioChange ||
|
|
69
|
-
!this.aspectRatioIsCorrect())) {
|
|
70
|
-
this.cropper = this.maxSizeCropperPosition();
|
|
71
|
-
positionPossiblyChanged = true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
if (options['cropperMinWidth'] || options['cropperMinHeight']) {
|
|
76
|
-
this.setCropperScaledMinSize();
|
|
77
|
-
positionPossiblyChanged = true;
|
|
78
|
-
}
|
|
79
|
-
if (options['cropperMaxWidth'] || options['cropperMaxHeight']) {
|
|
80
|
-
this.setCropperScaledMaxSize();
|
|
81
|
-
positionPossiblyChanged = true;
|
|
82
|
-
}
|
|
83
|
-
if (options['cropperStaticWidth'] || options['cropperStaticHeight']) {
|
|
84
|
-
positionPossiblyChanged = true;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (positionPossiblyChanged) {
|
|
88
|
-
this.cropper = checkCropperPosition(this.cropper, this, false);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
validateOptions() {
|
|
92
|
-
if (this.options.maintainAspectRatio && !this.options.aspectRatio) {
|
|
93
|
-
throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
setMaxSize(width, height) {
|
|
97
|
-
this.maxSize = { width, height };
|
|
98
|
-
this.setCropperScaledMinSize();
|
|
99
|
-
this.setCropperScaledMaxSize();
|
|
100
|
-
}
|
|
101
|
-
setCropperScaledMinSize() {
|
|
102
|
-
if (this.loadedImage?.transformed.size) {
|
|
103
|
-
this.setCropperScaledMinWidth();
|
|
104
|
-
this.setCropperScaledMinHeight();
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
this.cropperScaledMinWidth = 20;
|
|
108
|
-
this.cropperScaledMinHeight = 20;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
setCropperScaledMinWidth() {
|
|
112
|
-
this.cropperScaledMinWidth =
|
|
113
|
-
this.options.cropperMinWidth > 0
|
|
114
|
-
? Math.max(20, (this.options.cropperMinWidth /
|
|
115
|
-
this.loadedImage.transformed.size.width) *
|
|
116
|
-
this.maxSize.width)
|
|
117
|
-
: 20;
|
|
118
|
-
}
|
|
119
|
-
setCropperScaledMinHeight() {
|
|
120
|
-
if (this.options.maintainAspectRatio) {
|
|
121
|
-
this.cropperScaledMinHeight = Math.max(20, this.cropperScaledMinWidth / this.options.aspectRatio);
|
|
122
|
-
}
|
|
123
|
-
else if (this.options.cropperMinHeight > 0) {
|
|
124
|
-
this.cropperScaledMinHeight = Math.max(20, (this.options.cropperMinHeight /
|
|
125
|
-
this.loadedImage.transformed.size.height) *
|
|
126
|
-
this.maxSize.height);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
this.cropperScaledMinHeight = 20;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
setCropperScaledMaxSize() {
|
|
133
|
-
if (this.loadedImage?.transformed.size) {
|
|
134
|
-
const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;
|
|
135
|
-
this.cropperScaledMaxWidth =
|
|
136
|
-
this.options.cropperMaxWidth > 20
|
|
137
|
-
? this.options.cropperMaxWidth / ratio
|
|
138
|
-
: this.maxSize.width;
|
|
139
|
-
this.cropperScaledMaxHeight =
|
|
140
|
-
this.options.cropperMaxHeight > 20
|
|
141
|
-
? this.options.cropperMaxHeight / ratio
|
|
142
|
-
: this.maxSize.height;
|
|
143
|
-
if (this.options.maintainAspectRatio) {
|
|
144
|
-
if (this.cropperScaledMaxWidth >
|
|
145
|
-
this.cropperScaledMaxHeight * this.options.aspectRatio) {
|
|
146
|
-
this.cropperScaledMaxWidth =
|
|
147
|
-
this.cropperScaledMaxHeight * this.options.aspectRatio;
|
|
148
|
-
}
|
|
149
|
-
else if (this.cropperScaledMaxWidth <
|
|
150
|
-
this.cropperScaledMaxHeight * this.options.aspectRatio) {
|
|
151
|
-
this.cropperScaledMaxHeight =
|
|
152
|
-
this.cropperScaledMaxWidth / this.options.aspectRatio;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
this.cropperScaledMaxWidth = this.maxSize.width;
|
|
158
|
-
this.cropperScaledMaxHeight = this.maxSize.height;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
equalsCropperPosition(cropper) {
|
|
162
|
-
return ((this.cropper == null && cropper == null) ||
|
|
163
|
-
(this.cropper != null &&
|
|
164
|
-
cropper != null &&
|
|
165
|
-
this.cropper.x1.toFixed(3) === cropper.x1.toFixed(3) &&
|
|
166
|
-
this.cropper.y1.toFixed(3) === cropper.y1.toFixed(3) &&
|
|
167
|
-
this.cropper.x2.toFixed(3) === cropper.x2.toFixed(3) &&
|
|
168
|
-
this.cropper.y2.toFixed(3) === cropper.y2.toFixed(3)));
|
|
169
|
-
}
|
|
170
|
-
equalsTransformTranslate(transform) {
|
|
171
|
-
return ((this.transform.translateH ?? 0) === (transform.translateH ?? 0) &&
|
|
172
|
-
(this.transform.translateV ?? 0) === (transform.translateV ?? 0));
|
|
173
|
-
}
|
|
174
|
-
equalsTransform(transform) {
|
|
175
|
-
return (this.equalsTransformTranslate(transform) &&
|
|
176
|
-
(this.transform.scale ?? 1) === (transform.scale ?? 1) &&
|
|
177
|
-
(this.transform.rotate ?? 0) === (transform.rotate ?? 0) &&
|
|
178
|
-
(this.transform.flipH ?? false) === (transform.flipH ?? false) &&
|
|
179
|
-
(this.transform.flipV ?? false) === (transform.flipV ?? false));
|
|
180
|
-
}
|
|
181
|
-
aspectRatioIsCorrect() {
|
|
182
|
-
const currentCropAspectRatio = (this.cropper.x2 - this.cropper.x1) / (this.cropper.y2 - this.cropper.y1);
|
|
183
|
-
return currentCropAspectRatio === this.options.aspectRatio;
|
|
184
|
-
}
|
|
185
|
-
resizeCropperPosition(oldMaxSize) {
|
|
186
|
-
if (!this.cropper) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
if (oldMaxSize.width !== this.maxSize.width ||
|
|
190
|
-
oldMaxSize.height !== this.maxSize.height) {
|
|
191
|
-
this.cropper = {
|
|
192
|
-
x1: (this.cropper.x1 * this.maxSize.width) / oldMaxSize.width,
|
|
193
|
-
x2: (this.cropper.x2 * this.maxSize.width) / oldMaxSize.width,
|
|
194
|
-
y1: (this.cropper.y1 * this.maxSize.height) / oldMaxSize.height,
|
|
195
|
-
y2: (this.cropper.y2 * this.maxSize.height) / oldMaxSize.height,
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
maxSizeCropperPosition() {
|
|
200
|
-
return {
|
|
201
|
-
x1: 0,
|
|
202
|
-
y1: 0,
|
|
203
|
-
x2: this.maxSize.width,
|
|
204
|
-
y2: this.maxSize.height,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2Nyb3BwZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsT0FBTyxHQUFtQjtRQUN4QixNQUFNLEVBQUUsS0FBSztRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxDQUFDO1FBQ2QsNEJBQTRCLEVBQUUsSUFBSTtRQUNsQyxhQUFhLEVBQUUsQ0FBQztRQUNoQixjQUFjLEVBQUUsQ0FBQztRQUNqQixlQUFlLEVBQUUsQ0FBQztRQUNsQixnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsZUFBZSxFQUFFLENBQUM7UUFDbEIsa0JBQWtCLEVBQUUsQ0FBQztRQUNyQixtQkFBbUIsRUFBRSxDQUFDO1FBQ3RCLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLFlBQVksRUFBRSxLQUFLO1FBQ25CLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFlBQVksRUFBRSxFQUFFO1FBQ2hCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLHdCQUF3QixFQUFFLEtBQUs7UUFDL0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixVQUFVLEVBQUUsUUFBUTtRQUNwQixxQkFBcUIsRUFBRSxTQUFTO1FBQ2hDLGNBQWMsRUFBRSxJQUFJO0tBQ3JCLENBQUM7SUFFRixXQUFXLENBQWU7SUFDMUIsT0FBTyxDQUFjO0lBQ3JCLE9BQU8sR0FBb0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxF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QUFDLE9BQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSztnQkFDOUQsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSztnQkFDOUQsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTTtnQkFDaEUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTTthQUNqRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsRUFBRSxFQUFFLENBQUM7WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxLQUFLO1lBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENyb3BwZXJPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jcm9wcGVyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENyb3BwZXJQb3NpdGlvbixcbiAgRGltZW5zaW9ucyxcbiAgSW1hZ2VUcmFuc2Zvcm0sXG4gIExvYWRlZEltYWdlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNoZWNrQ3JvcHBlclBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvY3JvcHBlci1wb3NpdGlvbi51dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDcm9wcGVyU3RhdGUge1xuICBvcHRpb25zOiBDcm9wcGVyT3B0aW9ucyA9IHtcbiAgICBmb3JtYXQ6ICdwbmcnLFxuICAgIG91dHB1dDogJ2Jsb2InLFxuICAgIGF1dG9Dcm9wOiB0cnVlLFxuICAgIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUsXG4gICAgYXNwZWN0UmF0aW86IDEsXG4gICAgcmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZTogdHJ1ZSxcbiAgICByZXNpemVUb1dpZHRoOiAwLFxuICAgIHJlc2l6ZVRvSGVpZ2h0OiAwLFxuICAgIGNyb3BwZXJNaW5XaWR0aDogMCxcbiAgICBjcm9wcGVyTWluSGVpZ2h0OiAwLFxuICAgIGNyb3BwZXJNYXhIZWlnaHQ6IDAsXG4gICAgY3JvcHBlck1heFdpZHRoOiAwLFxuICAgIGNyb3BwZXJTdGF0aWNXaWR0aDogMCxcbiAgICBjcm9wcGVyU3RhdGljSGVpZ2h0OiAwLFxuICAgIGNhbnZhc1JvdGF0aW9uOiAwLFxuICAgIHJvdW5kQ3JvcHBlcjogZmFsc2UsXG4gICAgb25seVNjYWxlRG93bjogZmFsc2UsXG4gICAgaW1hZ2VRdWFsaXR5OiA5MixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG4gICAgY29udGFpbldpdGhpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICBoaWRlUmVzaXplU3F1YXJlczogZmFsc2UsXG4gICAgYWxpZ25JbWFnZTogJ2NlbnRlcicsXG4gICAgY3JvcHBlckZyYW1lQXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gICAgY2hlY2tJbWFnZVR5cGU6IHRydWUsXG4gIH07XG5cbiAgbG9hZGVkSW1hZ2U/OiBMb2FkZWRJbWFnZTtcbiAgbWF4U2l6ZT86IERpbWVuc2lvbnM7XG4gIGNyb3BwZXI6IENyb3BwZXJQb3NpdGlvbiA9IHsgeDE6IDAsIHgyOiAwLCB5MTogMCwgeTI6IDAgfTtcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHt9O1xuXG4gIC8vIEludGVybmFsXG4gIGNyb3BwZXJTY2FsZWRNaW5XaWR0aCA9IDIwO1xuICBjcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNYXhXaWR0aCA9IDIwO1xuICBjcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID0gMjA7XG4gIHN0ZXBTaXplID0gMztcblxuICBzZXRPcHRpb25zRnJvbUNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKGNoYW5nZXNbJ29wdGlvbnMnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmVudHJpZXMoY2hhbmdlcylcbiAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgaW4gdGhpcy5vcHRpb25zKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2tleSwgY2hhbmdlXSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2tleV06IGNoYW5nZS5jdXJyZW50VmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7fSBhcyBQYXJ0aWFsPENyb3BwZXJPcHRpb25zPlxuICAgICAgKTtcbiAgICBpZiAoT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogUGFydGlhbDxDcm9wcGVyT3B0aW9ucz4pOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAuLi4ob3B0aW9ucyB8fCB7fSksXG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlT3B0aW9ucygpO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5pbWFnZS5jb21wbGV0ZSB8fCAhdGhpcy5tYXhTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmIG9wdGlvbnNbJ2FzcGVjdFJhdGlvJ10pIHx8XG4gICAgICBvcHRpb25zWydtYWludGFpbkFzcGVjdFJhdGlvJ11cbiAgICApIHtcbiAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8gJiZcbiAgICAgICAgKHRoaXMub3B0aW9ucy5yZXNldENyb3BPbkFzcGVjdFJhdGlvQ2hhbmdlIHx8XG4gICAgICAgICAgIXRoaXMuYXNwZWN0UmF0aW9Jc0NvcnJlY3QoKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNyb3BwZXIgPSB0aGlzLm1heFNpemVDcm9wcGVyUG9zaXRpb24oKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9uc1snY3JvcHBlck1pbldpZHRoJ10gfHwgb3B0aW9uc1snY3JvcHBlck1pbkhlaWdodCddKSB7XG4gICAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnNbJ2Nyb3BwZXJNYXhXaWR0aCddIHx8IG9wdGlvbnNbJ2Nyb3BwZXJNYXhIZWlnaHQnXSkge1xuICAgICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk7XG4gICAgICAgIHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zWydjcm9wcGVyU3RhdGljV2lkdGgnXSB8fCBvcHRpb25zWydjcm9wcGVyU3RhdGljSGVpZ2h0J10pIHtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvblBvc3NpYmx5Q2hhbmdlZCkge1xuICAgICAgdGhpcy5jcm9wcGVyID0gY2hlY2tDcm9wcGVyUG9zaXRpb24odGhpcy5jcm9wcGVyLCB0aGlzLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmICF0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2Bhc3BlY3RSYXRpb2Agc2hvdWxkID4gMCB3aGVuIGBtYWludGFpbkFzcGVjdFJhdGlvYCBpcyBlbmFibGVkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZXRNYXhTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXhTaXplID0geyB3aWR0aCwgaGVpZ2h0IH07XG4gICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluU2l6ZSgpO1xuICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTtcbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNaW5TaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNaW5XaWR0aCgpO1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluSGVpZ2h0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbldpZHRoID0gMjA7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSAyMDtcbiAgICB9XG4gIH1cblxuICBzZXRDcm9wcGVyU2NhbGVkTWluV2lkdGgoKTogdm9pZCB7XG4gICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluV2lkdGggPVxuICAgICAgdGhpcy5vcHRpb25zLmNyb3BwZXJNaW5XaWR0aCA+IDBcbiAgICAgICAgPyBNYXRoLm1heChcbiAgICAgICAgICAgIDIwLFxuICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5jcm9wcGVyTWluV2lkdGggL1xuICAgICAgICAgICAgICB0aGlzLmxvYWRlZEltYWdlIS50cmFuc2Zvcm1lZC5zaXplLndpZHRoKSAqXG4gICAgICAgICAgICAgIHRoaXMubWF4U2l6ZSEud2lkdGhcbiAgICAgICAgICApXG4gICAgICAgIDogMjA7XG4gIH1cblxuICBzZXRDcm9wcGVyU2NhbGVkTWluSGVpZ2h0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbykge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIDIwLFxuICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5XaWR0aCAvIHRoaXMub3B0aW9ucy5hc3BlY3RSYXRpb1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jcm9wcGVyTWluSGVpZ2h0ID4gMCkge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIDIwLFxuICAgICAgICAodGhpcy5vcHRpb25zLmNyb3BwZXJNaW5IZWlnaHQgL1xuICAgICAgICAgIHRoaXMubG9hZGVkSW1hZ2UhLnRyYW5zZm9ybWVkLnNpemUuaGVpZ2h0KSAqXG4gICAgICAgICAgdGhpcy5tYXhTaXplIS5oZWlnaHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbkhlaWdodCA9IDIwO1xuICAgIH1cbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICBjb25zdCByYXRpbyA9XG4gICAgICAgIHRoaXMubG9hZGVkSW1hZ2UudHJhbnNmb3JtZWQuc2l6ZS53aWR0aCAvIHRoaXMubWF4U2l6ZSEud2lkdGg7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhXaWR0aCA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5jcm9wcGVyTWF4V2lkdGggPiAyMFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhXaWR0aCAvIHJhdGlvXG4gICAgICAgICAgOiB0aGlzLm1heFNpemUhLndpZHRoO1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhIZWlnaHQgPiAyMFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhIZWlnaHQgLyByYXRpb1xuICAgICAgICAgIDogdGhpcy5tYXhTaXplIS5oZWlnaHQ7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID5cbiAgICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW9cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggPVxuICAgICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ICogdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoIDxcbiAgICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW9cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID1cbiAgICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoIC8gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID0gdGhpcy5tYXhTaXplIS53aWR0aDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heEhlaWdodCA9IHRoaXMubWF4U2l6ZSEuaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIGVxdWFsc0Nyb3BwZXJQb3NpdGlvbihjcm9wcGVyPzogQ3JvcHBlclBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmNyb3BwZXIgPT0gbnVsbCAmJiBjcm9wcGVyID09IG51bGwpIHx8XG4gICAgICAodGhpcy5jcm9wcGVyICE9IG51bGwgJiZcbiAgICAgICAgY3JvcHBlciAhPSBudWxsICYmXG4gICAgICAgIHRoaXMuY3JvcHBlci54MS50b0ZpeGVkKDMpID09PSBjcm9wcGVyLngxLnRvRml4ZWQoMykgJiZcbiAgICAgICAgdGhpcy5jcm9wcGVyLnkxLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueTEudG9GaXhlZCgzKSAmJlxuICAgICAgICB0aGlzLmNyb3BwZXIueDIudG9GaXhlZCgzKSA9PT0gY3JvcHBlci54Mi50b0ZpeGVkKDMpICYmXG4gICAgICAgIHRoaXMuY3JvcHBlci55Mi50b0ZpeGVkKDMpID09PSBjcm9wcGVyLnkyLnRvRml4ZWQoMykpXG4gICAgKTtcbiAgfVxuXG4gIGVxdWFsc1RyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZUggPz8gMCkgJiZcbiAgICAgICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZVYgPz8gMClcbiAgICApO1xuICB9XG5cbiAgZXF1YWxzVHJhbnNmb3JtKHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lcXVhbHNUcmFuc2Zvcm1UcmFuc2xhdGUodHJhbnNmb3JtKSAmJlxuICAgICAgKHRoaXMudHJhbnNmb3JtLnNjYWxlID8/IDEpID09PSAodHJhbnNmb3JtLnNjYWxlID8/IDEpICYmXG4gICAgICAodGhpcy50cmFuc2Zvcm0ucm90YXRlID8/IDApID09PSAodHJhbnNmb3JtLnJvdGF0ZSA/PyAwKSAmJlxuICAgICAgKHRoaXMudHJhbnNmb3JtLmZsaXBIID8/IGZhbHNlKSA9PT0gKHRyYW5zZm9ybS5mbGlwSCA/PyBmYWxzZSkgJiZcbiAgICAgICh0aGlzLnRyYW5zZm9ybS5mbGlwViA/PyBmYWxzZSkgPT09ICh0cmFuc2Zvcm0uZmxpcFYgPz8gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIGFzcGVjdFJhdGlvSXNDb3JyZWN0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRDcm9wQXNwZWN0UmF0aW8gPVxuICAgICAgKHRoaXMuY3JvcHBlci54MiAtIHRoaXMuY3JvcHBlci54MSkgLyAodGhpcy5jcm9wcGVyLnkyIC0gdGhpcy5jcm9wcGVyLnkxKTtcbiAgICByZXR1cm4gY3VycmVudENyb3BBc3BlY3RSYXRpbyA9PT0gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICB9XG5cbiAgcmVzaXplQ3JvcHBlclBvc2l0aW9uKG9sZE1heFNpemU6IERpbWVuc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY3JvcHBlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBvbGRNYXhTaXplLndpZHRoICE9PSB0aGlzLm1heFNpemUhLndpZHRoIHx8XG4gICAgICBvbGRNYXhTaXplLmhlaWdodCAhPT0gdGhpcy5tYXhTaXplIS5oZWlnaHRcbiAgICApIHtcbiAgICAgIHRoaXMuY3JvcHBlciA9IHtcbiAgICAgICAgeDE6ICh0aGlzLmNyb3BwZXIueDEgKiB0aGlzLm1heFNpemUhLndpZHRoKSAvIG9sZE1heFNpemUud2lkdGgsXG4gICAgICAgIHgyOiAodGhpcy5jcm9wcGVyLngyICogdGhpcy5tYXhTaXplIS53aWR0aCkgLyBvbGRNYXhTaXplLndpZHRoLFxuICAgICAgICB5MTogKHRoaXMuY3JvcHBlci55MSAqIHRoaXMubWF4U2l6ZSEuaGVpZ2h0KSAvIG9sZE1heFNpemUuaGVpZ2h0LFxuICAgICAgICB5MjogKHRoaXMuY3JvcHBlci55MiAqIHRoaXMubWF4U2l6ZSEuaGVpZ2h0KSAvIG9sZE1heFNpemUuaGVpZ2h0LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBtYXhTaXplQ3JvcHBlclBvc2l0aW9uKCk6IENyb3BwZXJQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHgxOiAwLFxuICAgICAgeTE6IDAsXG4gICAgICB4MjogdGhpcy5tYXhTaXplIS53aWR0aCxcbiAgICAgIHkyOiB0aGlzLm1heFNpemUhLmhlaWdodCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|