ngx-image-cropper 7.2.1 → 8.0.0
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/README.md +10 -29
- package/esm2022/lib/component/image-cropper.component.mjs +636 -0
- package/esm2022/lib/interfaces/basic-event.interface.mjs +2 -0
- package/{esm2020 → esm2022}/lib/services/crop.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/cropper-position.service.mjs +16 -6
- package/{esm2020 → esm2022}/lib/services/load-image.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/utils/keyboard.utils.mjs +1 -1
- package/esm2022/public-api.mjs +7 -0
- package/{fesm2020 → fesm2022}/ngx-image-cropper.mjs +33 -45
- package/fesm2022/ngx-image-cropper.mjs.map +1 -0
- package/index.d.ts +5 -7
- package/lib/component/image-cropper.component.d.ts +5 -4
- package/lib/interfaces/basic-event.interface.d.ts +4 -0
- package/lib/interfaces/cropper-options.interface.d.ts +2 -2
- package/lib/services/cropper-position.service.d.ts +5 -4
- package/lib/utils/hammer.utils.d.ts +1 -1
- package/lib/utils/keyboard.utils.d.ts +2 -1
- package/package.json +9 -18
- package/public-api.d.ts +6 -1
- package/esm2020/index.mjs +0 -8
- package/esm2020/lib/component/image-cropper.component.mjs +0 -635
- package/esm2020/lib/image-cropper.module.mjs +0 -26
- package/esm2020/public-api.mjs +0 -2
- package/fesm2015/ngx-image-cropper.mjs +0 -1484
- package/fesm2015/ngx-image-cropper.mjs.map +0 -1
- package/fesm2020/ngx-image-cropper.mjs.map +0 -1
- package/lib/image-cropper.module.d.ts +0 -8
- package/ngx-image-cropper.d.ts +0 -5
- /package/{esm2020 → esm2022}/lib/interfaces/cropper-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/cropper-position.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/cropper.settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/dimensions.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/exif-transform.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/image-cropped-event.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/image-transform.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/loaded-image.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/move-start.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/blob.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/exif.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/hammer.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/percentage.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/resize.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-image-cropper.mjs +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, EventEmitter, isDevMode, Component, ChangeDetectionStrategy, Optional, Inject, ViewChild, Input, HostBinding, Output, HostListener
|
|
2
|
+
import { Injectable, EventEmitter, isDevMode, Component, ChangeDetectionStrategy, Optional, Inject, ViewChild, Input, HostBinding, Output, HostListener } from '@angular/core';
|
|
3
3
|
import * as i4 from '@angular/platform-browser';
|
|
4
4
|
import { HAMMER_LOADER } from '@angular/platform-browser';
|
|
5
5
|
import { takeUntil, first } from 'rxjs/operators';
|
|
6
6
|
import { merge, fromEvent } from 'rxjs';
|
|
7
|
-
import
|
|
8
|
-
import { CommonModule } from '@angular/common';
|
|
7
|
+
import { NgIf } from '@angular/common';
|
|
9
8
|
|
|
10
9
|
class CropperSettings {
|
|
11
10
|
constructor() {
|
|
@@ -323,10 +322,10 @@ class CropService {
|
|
|
323
322
|
getQuality(settings) {
|
|
324
323
|
return Math.min(1, Math.max(0, settings.imageQuality / 100));
|
|
325
324
|
}
|
|
325
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
326
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CropService, providedIn: 'root' }); }
|
|
326
327
|
}
|
|
327
|
-
|
|
328
|
-
CropService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CropService, providedIn: 'root' });
|
|
329
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CropService, decorators: [{
|
|
328
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CropService, decorators: [{
|
|
330
329
|
type: Injectable,
|
|
331
330
|
args: [{ providedIn: 'root' }]
|
|
332
331
|
}] });
|
|
@@ -516,15 +515,25 @@ class CropperPositionService {
|
|
|
516
515
|
}
|
|
517
516
|
}
|
|
518
517
|
getClientX(event) {
|
|
519
|
-
|
|
518
|
+
if ('touches' in event && event.touches[0])
|
|
519
|
+
return event.touches[0].clientX;
|
|
520
|
+
else if ('clientX' in event) {
|
|
521
|
+
return event.clientX;
|
|
522
|
+
}
|
|
523
|
+
return 0;
|
|
520
524
|
}
|
|
521
525
|
getClientY(event) {
|
|
522
|
-
|
|
526
|
+
if ('touches' in event && event.touches[0])
|
|
527
|
+
return event.touches[0].clientY;
|
|
528
|
+
else if ('clientX' in event) {
|
|
529
|
+
return event.clientY;
|
|
530
|
+
}
|
|
531
|
+
return 0;
|
|
523
532
|
}
|
|
533
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CropperPositionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
534
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CropperPositionService, providedIn: 'root' }); }
|
|
524
535
|
}
|
|
525
|
-
|
|
526
|
-
CropperPositionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CropperPositionService, providedIn: 'root' });
|
|
527
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CropperPositionService, decorators: [{
|
|
536
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CropperPositionService, decorators: [{
|
|
528
537
|
type: Injectable,
|
|
529
538
|
args: [{ providedIn: 'root' }]
|
|
530
539
|
}] });
|
|
@@ -798,10 +807,10 @@ class LoadImageService {
|
|
|
798
807
|
height: originalSize.height
|
|
799
808
|
};
|
|
800
809
|
}
|
|
810
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadImageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
811
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadImageService, providedIn: 'root' }); }
|
|
801
812
|
}
|
|
802
|
-
|
|
803
|
-
LoadImageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LoadImageService, providedIn: 'root' });
|
|
804
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LoadImageService, decorators: [{
|
|
813
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadImageService, decorators: [{
|
|
805
814
|
type: Injectable,
|
|
806
815
|
args: [{ providedIn: 'root' }]
|
|
807
816
|
}] });
|
|
@@ -934,7 +943,8 @@ class ImageCropperComponent {
|
|
|
934
943
|
}
|
|
935
944
|
}
|
|
936
945
|
isValidImageChangedEvent() {
|
|
937
|
-
|
|
946
|
+
const files = this.imageChangedEvent?.target?.files;
|
|
947
|
+
return files instanceof FileList && files.length > 0;
|
|
938
948
|
}
|
|
939
949
|
setCssTransform() {
|
|
940
950
|
const translateUnit = this.transform?.translateUnit || '%';
|
|
@@ -1100,7 +1110,7 @@ class ImageCropperComponent {
|
|
|
1100
1110
|
|| moveType === MoveTypes.Drag && !this.allowMoveImage) {
|
|
1101
1111
|
return;
|
|
1102
1112
|
}
|
|
1103
|
-
if (event
|
|
1113
|
+
if ('preventDefault' in event) {
|
|
1104
1114
|
event.preventDefault();
|
|
1105
1115
|
}
|
|
1106
1116
|
this.moveStart = {
|
|
@@ -1145,10 +1155,10 @@ class ImageCropperComponent {
|
|
|
1145
1155
|
}
|
|
1146
1156
|
handleMouseMove(event) {
|
|
1147
1157
|
if (this.moveStart.active) {
|
|
1148
|
-
if (event
|
|
1158
|
+
if ('stopPropagation' in event) {
|
|
1149
1159
|
event.stopPropagation();
|
|
1150
1160
|
}
|
|
1151
|
-
if (event
|
|
1161
|
+
if ('preventDefault' in event) {
|
|
1152
1162
|
event.preventDefault();
|
|
1153
1163
|
}
|
|
1154
1164
|
if (this.moveStart.type === MoveTypes.Move) {
|
|
@@ -1317,12 +1327,12 @@ class ImageCropperComponent {
|
|
|
1317
1327
|
const currentCropAspectRatio = (this.cropper.x2 - this.cropper.x1) / (this.cropper.y2 - this.cropper.y1);
|
|
1318
1328
|
return currentCropAspectRatio === this.aspectRatio;
|
|
1319
1329
|
}
|
|
1330
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ImageCropperComponent, deps: [{ token: CropService }, { token: CropperPositionService }, { token: LoadImageService }, { token: i4.DomSanitizer }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: HAMMER_LOADER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1331
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ImageCropperComponent, isStandalone: true, selector: "image-cropper", inputs: { imageChangedEvent: "imageChangedEvent", imageURL: "imageURL", imageBase64: "imageBase64", imageFile: "imageFile", imageAltText: "imageAltText", cropperFrameAriaLabel: "cropperFrameAriaLabel", output: "output", format: "format", transform: "transform", maintainAspectRatio: "maintainAspectRatio", aspectRatio: "aspectRatio", resetCropOnAspectRatioChange: "resetCropOnAspectRatioChange", resizeToWidth: "resizeToWidth", resizeToHeight: "resizeToHeight", cropperMinWidth: "cropperMinWidth", cropperMinHeight: "cropperMinHeight", cropperMaxHeight: "cropperMaxHeight", cropperMaxWidth: "cropperMaxWidth", cropperStaticWidth: "cropperStaticWidth", cropperStaticHeight: "cropperStaticHeight", canvasRotation: "canvasRotation", initialStepSize: "initialStepSize", roundCropper: "roundCropper", onlyScaleDown: "onlyScaleDown", imageQuality: "imageQuality", autoCrop: "autoCrop", backgroundColor: "backgroundColor", containWithinAspectRatio: "containWithinAspectRatio", hideResizeSquares: "hideResizeSquares", allowMoveImage: "allowMoveImage", cropper: "cropper", alignImage: "alignImage", disabled: "disabled", hidden: "hidden" }, outputs: { imageCropped: "imageCropped", startCropImage: "startCropImage", imageLoaded: "imageLoaded", cropperReady: "cropperReady", loadImageFailed: "loadImageFailed", transformChange: "transformChange" }, host: { listeners: { "window:resize": "onResize()" }, properties: { "style.text-align": "this.alignImage", "class.disabled": "this.disabled", "class.ngx-ix-hidden": "this.hidden" } }, viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, static: true }, { propertyName: "sourceImage", first: true, predicate: ["sourceImage"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [style.background]=\"imageVisible && backgroundColor\"\n #wrapper\n>\n <img\n #sourceImage\n class=\"ngx-ic-source-image\"\n role=\"presentation\"\n *ngIf=\"safeImgDataUrl\"\n [src]=\"safeImgDataUrl\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n [style.transform]=\"safeTransformStyle\"\n [class.ngx-ic-draggable]=\"!disabled && allowMoveImage\"\n [attr.alt]=\"imageAltText\"\n (load)=\"imageLoadedInView()\"\n (mousedown)=\"startMove($event, moveTypes.Drag)\"\n (touchstart)=\"startMove($event, moveTypes.Drag)\"\n (error)=\"loadImageError($event)\"\n >\n <div\n class=\"ngx-ic-overlay\"\n [style.width.px]=\"maxSize.width\"\n [style.height.px]=\"maxSize.height\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n ></div>\n <div class=\"ngx-ic-cropper\"\n *ngIf=\"imageVisible\"\n [class.ngx-ic-round]=\"roundCropper\"\n [attr.aria-label]=\"cropperFrameAriaLabel\"\n [style.top.px]=\"cropper.y1\"\n [style.left.px]=\"cropper.x1\"\n [style.width.px]=\"cropper.x2 - cropper.x1\"\n [style.height.px]=\"cropper.y2 - cropper.y1\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n (keydown)=\"keyboardAccess($event)\"\n tabindex=\"0\"\n >\n <div\n (mousedown)=\"startMove($event, moveTypes.Move)\"\n (touchstart)=\"startMove($event, moveTypes.Move)\"\n class=\"ngx-ic-move\"\n role=\"presentation\">\n </div>\n <ng-container *ngIf=\"!hideResizeSquares\">\n <span class=\"ngx-ic-resize ngx-ic-topleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-top\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-topright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-right\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottom\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-left\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-top\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-right\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-bottom\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-left\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\">\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;position:relative;width:100%;max-width:100%;max-height:100%;overflow:hidden;padding:5px;text-align:center}:host>div{width:100%;position:relative}:host>div img.ngx-ic-source-image{max-width:100%;max-height:100%;transform-origin:center}:host>div img.ngx-ic-source-image.ngx-ic-draggable{user-drag:none;-webkit-user-drag:none;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;cursor:grab}:host .ngx-ic-overlay{position:absolute;pointer-events:none;touch-action:none;outline:var(--cropper-overlay-color, white) solid 100vw;top:0;left:0}:host .ngx-ic-cropper{position:absolute;display:flex;color:#53535c;background:transparent;outline:rgba(255,255,255,.3) solid 100vw;outline:var(--cropper-outline-color, rgba(255, 255, 255, .3)) solid 100vw;touch-action:none}@media (orientation: portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{position:absolute;content:\"\";inset:0;pointer-events:none;border:dashed 1px;opacity:.75;color:inherit;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{width:100%;cursor:move;border:1px solid rgba(255,255,255,.5)}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{position:absolute;display:inline-block;line-height:6px;padding:8px;opacity:.85;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{display:inline-block;background:#53535c;width:6px;height:6px;border:1px solid rgba(255,255,255,.5);box-sizing:content-box}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topleft{top:-12px;left:-12px;cursor:nwse-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-top{top:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topright{top:-12px;right:-12px;cursor:nesw-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-right{top:calc(50% - 12px);right:-12px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomright{bottom:-12px;right:-12px;cursor:nwse-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottom{bottom:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomleft{bottom:-12px;left:-12px;cursor:nesw-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-left{top:calc(50% - 12px);left:-12px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar{position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-top{top:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-right{top:11px;right:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-bottom{bottom:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-left{top:11px;left:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .ngx-ic-cropper.ngx-ic-round{outline-color:transparent}:host .ngx-ic-cropper.ngx-ic-round:after{border-radius:100%;box-shadow:0 0 0 100vw #ffffff4d;box-shadow:0 0 0 100vw var(--cropper-outline-color, rgba(255, 255, 255, .3))}@media (orientation: portrait){:host .ngx-ic-cropper.ngx-ic-round:after{box-shadow:0 0 0 100vh #ffffff4d;box-shadow:0 0 0 100vh var(--cropper-outline-color, rgba(255, 255, 255, .3))}}:host .ngx-ic-cropper.ngx-ic-round .ngx-ic-move{border-radius:100%}:host.disabled .ngx-ic-cropper .ngx-ic-resize,:host.disabled .ngx-ic-cropper .ngx-ic-resize-bar,:host.disabled .ngx-ic-cropper .ngx-ic-move{display:none}:host.ngx-ix-hidden{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1320
1332
|
}
|
|
1321
|
-
|
|
1322
|
-
ImageCropperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ImageCropperComponent, selector: "image-cropper", inputs: { imageChangedEvent: "imageChangedEvent", imageURL: "imageURL", imageBase64: "imageBase64", imageFile: "imageFile", imageAltText: "imageAltText", cropperFrameAriaLabel: "cropperFrameAriaLabel", output: "output", format: "format", transform: "transform", maintainAspectRatio: "maintainAspectRatio", aspectRatio: "aspectRatio", resetCropOnAspectRatioChange: "resetCropOnAspectRatioChange", resizeToWidth: "resizeToWidth", resizeToHeight: "resizeToHeight", cropperMinWidth: "cropperMinWidth", cropperMinHeight: "cropperMinHeight", cropperMaxHeight: "cropperMaxHeight", cropperMaxWidth: "cropperMaxWidth", cropperStaticWidth: "cropperStaticWidth", cropperStaticHeight: "cropperStaticHeight", canvasRotation: "canvasRotation", initialStepSize: "initialStepSize", roundCropper: "roundCropper", onlyScaleDown: "onlyScaleDown", imageQuality: "imageQuality", autoCrop: "autoCrop", backgroundColor: "backgroundColor", containWithinAspectRatio: "containWithinAspectRatio", hideResizeSquares: "hideResizeSquares", allowMoveImage: "allowMoveImage", cropper: "cropper", alignImage: "alignImage", disabled: "disabled", hidden: "hidden" }, outputs: { imageCropped: "imageCropped", startCropImage: "startCropImage", imageLoaded: "imageLoaded", cropperReady: "cropperReady", loadImageFailed: "loadImageFailed", transformChange: "transformChange" }, host: { listeners: { "window:resize": "onResize()" }, properties: { "style.text-align": "this.alignImage", "class.disabled": "this.disabled", "class.ngx-ix-hidden": "this.hidden" } }, viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, static: true }, { propertyName: "sourceImage", first: true, predicate: ["sourceImage"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [style.background]=\"imageVisible && backgroundColor\"\n #wrapper\n>\n <img\n #sourceImage\n class=\"ngx-ic-source-image\"\n role=\"presentation\"\n *ngIf=\"safeImgDataUrl\"\n [src]=\"safeImgDataUrl\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n [style.transform]=\"safeTransformStyle\"\n [class.ngx-ic-draggable]=\"!disabled && allowMoveImage\"\n [attr.alt]=\"imageAltText\"\n (load)=\"imageLoadedInView()\"\n (mousedown)=\"startMove($event, moveTypes.Drag)\"\n (touchstart)=\"startMove($event, moveTypes.Drag)\"\n (error)=\"loadImageError($event)\"\n >\n <div\n class=\"ngx-ic-overlay\"\n [style.width.px]=\"maxSize.width\"\n [style.height.px]=\"maxSize.height\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n ></div>\n <div class=\"ngx-ic-cropper\"\n *ngIf=\"imageVisible\"\n [class.ngx-ic-round]=\"roundCropper\"\n [attr.aria-label]=\"cropperFrameAriaLabel\"\n [style.top.px]=\"cropper.y1\"\n [style.left.px]=\"cropper.x1\"\n [style.width.px]=\"cropper.x2 - cropper.x1\"\n [style.height.px]=\"cropper.y2 - cropper.y1\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n (keydown)=\"keyboardAccess($event)\"\n tabindex=\"0\"\n >\n <div\n (mousedown)=\"startMove($event, moveTypes.Move)\"\n (touchstart)=\"startMove($event, moveTypes.Move)\"\n class=\"ngx-ic-move\"\n role=\"presentation\">\n </div>\n <ng-container *ngIf=\"!hideResizeSquares\">\n <span class=\"ngx-ic-resize ngx-ic-topleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-top\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-topright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-right\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottom\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-left\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-top\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-right\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-bottom\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-left\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\">\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;position:relative;width:100%;max-width:100%;max-height:100%;overflow:hidden;padding:5px;text-align:center}:host>div{width:100%;position:relative}:host>div img.ngx-ic-source-image{max-width:100%;max-height:100%;transform-origin:center}:host>div img.ngx-ic-source-image.ngx-ic-draggable{user-drag:none;-webkit-user-drag:none;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;cursor:grab}:host .ngx-ic-overlay{position:absolute;pointer-events:none;touch-action:none;outline:var(--cropper-overlay-color, white) solid 100vw;top:0;left:0}:host .ngx-ic-cropper{position:absolute;display:flex;color:#53535c;background:transparent;outline:rgba(255,255,255,.3) solid 100vw;outline:var(--cropper-outline-color, rgba(255, 255, 255, .3)) solid 100vw;touch-action:none}@media (orientation: portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{position:absolute;content:\"\";inset:0;pointer-events:none;border:dashed 1px;opacity:.75;color:inherit;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{width:100%;cursor:move;border:1px solid rgba(255,255,255,.5)}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{position:absolute;display:inline-block;line-height:6px;padding:8px;opacity:.85;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{display:inline-block;background:#53535C;width:6px;height:6px;border:1px solid rgba(255,255,255,.5);box-sizing:content-box}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topleft{top:-12px;left:-12px;cursor:nwse-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-top{top:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topright{top:-12px;right:-12px;cursor:nesw-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-right{top:calc(50% - 12px);right:-12px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomright{bottom:-12px;right:-12px;cursor:nwse-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottom{bottom:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomleft{bottom:-12px;left:-12px;cursor:nesw-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-left{top:calc(50% - 12px);left:-12px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar{position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-top{top:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-right{top:11px;right:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-bottom{bottom:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-left{top:11px;left:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .ngx-ic-cropper.ngx-ic-round{outline-color:transparent}:host .ngx-ic-cropper.ngx-ic-round:after{border-radius:100%;box-shadow:0 0 0 100vw #ffffff4d;box-shadow:0 0 0 100vw var(--cropper-outline-color, rgba(255, 255, 255, .3))}@media (orientation: portrait){:host .ngx-ic-cropper.ngx-ic-round:after{box-shadow:0 0 0 100vh #ffffff4d;box-shadow:0 0 0 100vh var(--cropper-outline-color, rgba(255, 255, 255, .3))}}:host .ngx-ic-cropper.ngx-ic-round .ngx-ic-move{border-radius:100%}:host.disabled .ngx-ic-cropper .ngx-ic-resize,:host.disabled .ngx-ic-cropper .ngx-ic-resize-bar,:host.disabled .ngx-ic-cropper .ngx-ic-move{display:none}:host.ngx-ix-hidden{display:none}\n"], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1323
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImageCropperComponent, decorators: [{
|
|
1333
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ImageCropperComponent, decorators: [{
|
|
1324
1334
|
type: Component,
|
|
1325
|
-
args: [{ selector: 'image-cropper', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [style.background]=\"imageVisible && backgroundColor\"\n #wrapper\n>\n <img\n #sourceImage\n class=\"ngx-ic-source-image\"\n role=\"presentation\"\n *ngIf=\"safeImgDataUrl\"\n [src]=\"safeImgDataUrl\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n [style.transform]=\"safeTransformStyle\"\n [class.ngx-ic-draggable]=\"!disabled && allowMoveImage\"\n [attr.alt]=\"imageAltText\"\n (load)=\"imageLoadedInView()\"\n (mousedown)=\"startMove($event, moveTypes.Drag)\"\n (touchstart)=\"startMove($event, moveTypes.Drag)\"\n (error)=\"loadImageError($event)\"\n >\n <div\n class=\"ngx-ic-overlay\"\n [style.width.px]=\"maxSize.width\"\n [style.height.px]=\"maxSize.height\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n ></div>\n <div class=\"ngx-ic-cropper\"\n *ngIf=\"imageVisible\"\n [class.ngx-ic-round]=\"roundCropper\"\n [attr.aria-label]=\"cropperFrameAriaLabel\"\n [style.top.px]=\"cropper.y1\"\n [style.left.px]=\"cropper.x1\"\n [style.width.px]=\"cropper.x2 - cropper.x1\"\n [style.height.px]=\"cropper.y2 - cropper.y1\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n (keydown)=\"keyboardAccess($event)\"\n tabindex=\"0\"\n >\n <div\n (mousedown)=\"startMove($event, moveTypes.Move)\"\n (touchstart)=\"startMove($event, moveTypes.Move)\"\n class=\"ngx-ic-move\"\n role=\"presentation\">\n </div>\n <ng-container *ngIf=\"!hideResizeSquares\">\n <span class=\"ngx-ic-resize ngx-ic-topleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-top\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-topright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-right\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottom\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-left\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-top\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-right\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-bottom\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-left\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\">\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;position:relative;width:100%;max-width:100%;max-height:100%;overflow:hidden;padding:5px;text-align:center}:host>div{width:100%;position:relative}:host>div img.ngx-ic-source-image{max-width:100%;max-height:100%;transform-origin:center}:host>div img.ngx-ic-source-image.ngx-ic-draggable{user-drag:none;-webkit-user-drag:none;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;cursor:grab}:host .ngx-ic-overlay{position:absolute;pointer-events:none;touch-action:none;outline:var(--cropper-overlay-color, white) solid 100vw;top:0;left:0}:host .ngx-ic-cropper{position:absolute;display:flex;color:#53535c;background:transparent;outline:rgba(255,255,255,.3) solid 100vw;outline:var(--cropper-outline-color, rgba(255, 255, 255, .3)) solid 100vw;touch-action:none}@media (orientation: portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{position:absolute;content:\"\";inset:0;pointer-events:none;border:dashed 1px;opacity:.75;color:inherit;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{width:100%;cursor:move;border:1px solid rgba(255,255,255,.5)}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{position:absolute;display:inline-block;line-height:6px;padding:8px;opacity:.85;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{display:inline-block;background:#
|
|
1335
|
+
args: [{ selector: 'image-cropper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf], template: "<div\n [style.background]=\"imageVisible && backgroundColor\"\n #wrapper\n>\n <img\n #sourceImage\n class=\"ngx-ic-source-image\"\n role=\"presentation\"\n *ngIf=\"safeImgDataUrl\"\n [src]=\"safeImgDataUrl\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n [style.transform]=\"safeTransformStyle\"\n [class.ngx-ic-draggable]=\"!disabled && allowMoveImage\"\n [attr.alt]=\"imageAltText\"\n (load)=\"imageLoadedInView()\"\n (mousedown)=\"startMove($event, moveTypes.Drag)\"\n (touchstart)=\"startMove($event, moveTypes.Drag)\"\n (error)=\"loadImageError($event)\"\n >\n <div\n class=\"ngx-ic-overlay\"\n [style.width.px]=\"maxSize.width\"\n [style.height.px]=\"maxSize.height\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n ></div>\n <div class=\"ngx-ic-cropper\"\n *ngIf=\"imageVisible\"\n [class.ngx-ic-round]=\"roundCropper\"\n [attr.aria-label]=\"cropperFrameAriaLabel\"\n [style.top.px]=\"cropper.y1\"\n [style.left.px]=\"cropper.x1\"\n [style.width.px]=\"cropper.x2 - cropper.x1\"\n [style.height.px]=\"cropper.y2 - cropper.y1\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n (keydown)=\"keyboardAccess($event)\"\n tabindex=\"0\"\n >\n <div\n (mousedown)=\"startMove($event, moveTypes.Move)\"\n (touchstart)=\"startMove($event, moveTypes.Move)\"\n class=\"ngx-ic-move\"\n role=\"presentation\">\n </div>\n <ng-container *ngIf=\"!hideResizeSquares\">\n <span class=\"ngx-ic-resize ngx-ic-topleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-top\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-topright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-right\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottom\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-left\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-top\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-right\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-bottom\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-left\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\">\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;position:relative;width:100%;max-width:100%;max-height:100%;overflow:hidden;padding:5px;text-align:center}:host>div{width:100%;position:relative}:host>div img.ngx-ic-source-image{max-width:100%;max-height:100%;transform-origin:center}:host>div img.ngx-ic-source-image.ngx-ic-draggable{user-drag:none;-webkit-user-drag:none;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;cursor:grab}:host .ngx-ic-overlay{position:absolute;pointer-events:none;touch-action:none;outline:var(--cropper-overlay-color, white) solid 100vw;top:0;left:0}:host .ngx-ic-cropper{position:absolute;display:flex;color:#53535c;background:transparent;outline:rgba(255,255,255,.3) solid 100vw;outline:var(--cropper-outline-color, rgba(255, 255, 255, .3)) solid 100vw;touch-action:none}@media (orientation: portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{position:absolute;content:\"\";inset:0;pointer-events:none;border:dashed 1px;opacity:.75;color:inherit;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{width:100%;cursor:move;border:1px solid rgba(255,255,255,.5)}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{position:absolute;display:inline-block;line-height:6px;padding:8px;opacity:.85;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{display:inline-block;background:#53535c;width:6px;height:6px;border:1px solid rgba(255,255,255,.5);box-sizing:content-box}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topleft{top:-12px;left:-12px;cursor:nwse-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-top{top:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topright{top:-12px;right:-12px;cursor:nesw-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-right{top:calc(50% - 12px);right:-12px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomright{bottom:-12px;right:-12px;cursor:nwse-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottom{bottom:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomleft{bottom:-12px;left:-12px;cursor:nesw-resize}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-left{top:calc(50% - 12px);left:-12px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar{position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-top{top:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-right{top:11px;right:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-bottom{bottom:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-left{top:11px;left:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .ngx-ic-cropper.ngx-ic-round{outline-color:transparent}:host .ngx-ic-cropper.ngx-ic-round:after{border-radius:100%;box-shadow:0 0 0 100vw #ffffff4d;box-shadow:0 0 0 100vw var(--cropper-outline-color, rgba(255, 255, 255, .3))}@media (orientation: portrait){:host .ngx-ic-cropper.ngx-ic-round:after{box-shadow:0 0 0 100vh #ffffff4d;box-shadow:0 0 0 100vh var(--cropper-outline-color, rgba(255, 255, 255, .3))}}:host .ngx-ic-cropper.ngx-ic-round .ngx-ic-move{border-radius:100%}:host.disabled .ngx-ic-cropper .ngx-ic-resize,:host.disabled .ngx-ic-cropper .ngx-ic-resize-bar,:host.disabled .ngx-ic-cropper .ngx-ic-move{display:none}:host.ngx-ix-hidden{display:none}\n"] }]
|
|
1326
1336
|
}], ctorParameters: function () { return [{ type: CropService }, { type: CropperPositionService }, { type: LoadImageService }, { type: i4.DomSanitizer }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
|
|
1327
1337
|
type: Optional
|
|
1328
1338
|
}, {
|
|
@@ -1428,28 +1438,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
1428
1438
|
args: ['window:resize']
|
|
1429
1439
|
}] } });
|
|
1430
1440
|
|
|
1431
|
-
class ImageCropperModule {
|
|
1432
|
-
}
|
|
1433
|
-
ImageCropperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImageCropperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1434
|
-
ImageCropperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImageCropperModule, declarations: [ImageCropperComponent], imports: [CommonModule], exports: [ImageCropperComponent] });
|
|
1435
|
-
ImageCropperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImageCropperModule, imports: [[
|
|
1436
|
-
CommonModule
|
|
1437
|
-
]] });
|
|
1438
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImageCropperModule, decorators: [{
|
|
1439
|
-
type: NgModule,
|
|
1440
|
-
args: [{
|
|
1441
|
-
imports: [
|
|
1442
|
-
CommonModule
|
|
1443
|
-
],
|
|
1444
|
-
declarations: [
|
|
1445
|
-
ImageCropperComponent,
|
|
1446
|
-
],
|
|
1447
|
-
exports: [
|
|
1448
|
-
ImageCropperComponent
|
|
1449
|
-
]
|
|
1450
|
-
}]
|
|
1451
|
-
}] });
|
|
1452
|
-
|
|
1453
1441
|
function base64ToFile(base64Image) {
|
|
1454
1442
|
const split = base64Image.split(',');
|
|
1455
1443
|
const type = split[0].replace('data:', '').replace(';base64', '');
|
|
@@ -1466,5 +1454,5 @@ function base64ToFile(base64Image) {
|
|
|
1466
1454
|
* Generated bundle index. Do not edit.
|
|
1467
1455
|
*/
|
|
1468
1456
|
|
|
1469
|
-
export { CropService, CropperSettings, ImageCropperComponent,
|
|
1457
|
+
export { CropService, CropperSettings, ImageCropperComponent, LoadImageService, base64ToFile, resizeCanvas };
|
|
1470
1458
|
//# sourceMappingURL=ngx-image-cropper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-image-cropper.mjs","sources":["../../../projects/ngx-image-cropper/src/lib/interfaces/cropper.settings.ts","../../../projects/ngx-image-cropper/src/lib/interfaces/move-start.interface.ts","../../../projects/ngx-image-cropper/src/lib/utils/keyboard.utils.ts","../../../projects/ngx-image-cropper/src/lib/utils/resize.utils.ts","../../../projects/ngx-image-cropper/src/lib/utils/percentage.utils.ts","../../../projects/ngx-image-cropper/src/lib/services/crop.service.ts","../../../projects/ngx-image-cropper/src/lib/services/cropper-position.service.ts","../../../projects/ngx-image-cropper/src/lib/utils/exif.utils.ts","../../../projects/ngx-image-cropper/src/lib/services/load-image.service.ts","../../../projects/ngx-image-cropper/src/lib/component/image-cropper.component.ts","../../../projects/ngx-image-cropper/src/lib/component/image-cropper.component.html","../../../projects/ngx-image-cropper/src/lib/utils/blob.utils.ts","../../../projects/ngx-image-cropper/src/ngx-image-cropper.ts"],"sourcesContent":["import { CropperOptions, OutputFormat, OutputType } from './cropper-options.interface';\nimport { ImageTransform } from './image-transform.interface';\nimport { SimpleChanges } from '@angular/core';\n\nexport class CropperSettings {\n\n // From options\n format: OutputFormat = 'png';\n output: OutputType = 'blob';\n maintainAspectRatio = true;\n transform: ImageTransform = {};\n aspectRatio = 1;\n resetCropOnAspectRatioChange = true;\n resizeToWidth = 0;\n resizeToHeight = 0;\n cropperMinWidth = 0;\n cropperMinHeight = 0;\n cropperMaxHeight = 0;\n cropperMaxWidth = 0;\n cropperStaticWidth = 0;\n cropperStaticHeight = 0;\n canvasRotation = 0;\n initialStepSize = 3;\n roundCropper = false;\n onlyScaleDown = false;\n imageQuality = 92;\n autoCrop = true;\n backgroundColor: string | null = null;\n containWithinAspectRatio = false;\n hideResizeSquares = false;\n alignImage: 'left' | 'center' = 'center';\n cropperFrameAriaLabel = 'Crop photo';\n\n // Internal\n cropperScaledMinWidth = 20;\n cropperScaledMinHeight = 20;\n cropperScaledMaxWidth = 20;\n cropperScaledMaxHeight = 20;\n stepSize = this.initialStepSize;\n\n setOptions(options: Partial<CropperOptions>): void {\n Object.keys(options)\n .filter((k) => k in this)\n .forEach((k) => (this as any)[k] = (options as any)[k]);\n this.validateOptions();\n }\n\n setOptionsFromChanges(changes: SimpleChanges): void {\n Object.keys(changes)\n .filter((k) => k in this)\n .forEach((k) => (this as any)[k] = changes[k].currentValue);\n this.validateOptions();\n }\n\n private validateOptions(): void {\n if (this.maintainAspectRatio && !this.aspectRatio) {\n throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');\n }\n }\n}\n","import { ImageTransform } from './image-transform.interface';\n\nexport interface MoveStart {\n active: boolean;\n type: MoveTypes | null;\n position: string | null;\n transform?: ImageTransform;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clientX: number;\n clientY: number;\n}\n\nexport enum MoveTypes {\n Drag = 'drag',\n Move = 'move',\n Resize = 'resize',\n Pinch = 'pinch'\n}\n","import {BasicEvent} from \"../interfaces/basic-event.interface\";\n\nexport function getPositionForKey(key: string): string {\n switch (key) {\n case 'ArrowUp':\n return 'top';\n case 'ArrowRight':\n return 'right';\n case 'ArrowDown':\n return 'bottom';\n case 'ArrowLeft':\n default:\n return 'left';\n }\n}\n\nexport function getInvertedPositionForKey(key: string): string {\n switch (key) {\n case 'ArrowUp':\n return 'bottom';\n case 'ArrowRight':\n return 'left';\n case 'ArrowDown':\n return 'top';\n case 'ArrowLeft':\n default:\n return 'right';\n }\n}\n\nexport function getEventForKey(key: string, stepSize: number): BasicEvent {\n switch (key) {\n case 'ArrowUp':\n return {clientX: 0, clientY: stepSize * -1};\n case 'ArrowRight':\n return {clientX: stepSize, clientY: 0};\n case 'ArrowDown':\n return {clientX: 0, clientY: stepSize};\n case 'ArrowLeft':\n default:\n return {clientX: stepSize * -1, clientY: 0};\n }\n}\n","/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\n\nexport function resizeCanvas(canvas: HTMLCanvasElement, width: number, height: number) {\n const width_source = canvas.width;\n const height_source = canvas.height;\n width = Math.round(width);\n height = Math.round(height);\n\n const ratio_w = width_source / width;\n const ratio_h = height_source / height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const img = ctx.getImageData(0, 0, width_source, height_source);\n const img2 = ctx.createImageData(width, height);\n const data = img.data;\n const data2 = img2.data;\n\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n const x2 = (i + j * width) * 4;\n const center_y = j * ratio_h;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n\n const xx_start = Math.floor(i * ratio_w);\n const yy_start = Math.floor(j * ratio_h);\n let xx_stop = Math.ceil((i + 1) * ratio_w);\n let yy_stop = Math.ceil((j + 1) * ratio_h);\n xx_stop = Math.min(xx_stop, width_source);\n yy_stop = Math.min(yy_stop, height_source);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n const dy = Math.abs(center_y - yy) / ratio_h_half;\n const center_x = i * ratio_w;\n const w0 = dy * dy; //pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n const dx = Math.abs(center_x - xx) / ratio_w_half;\n const w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n //pixel too far\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n const pos_x = 4 * (xx + yy * width_source);\n //alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n //colors\n if (data[pos_x + 3] < 255)\n weight = weight * data[pos_x + 3] / 250;\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n\n\n canvas.width = width;\n canvas.height = height;\n\n //draw\n ctx.putImageData(img2, 0, 0);\n }\n}\n","export function percentage(percent: number, totalValue: number) {\n return (percent / 100) * totalValue;\n} ","import { ElementRef, Injectable } from '@angular/core';\nimport { CropperPosition, Dimensions, ImageCroppedEvent, LoadedImage } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { resizeCanvas } from '../utils/resize.utils';\nimport { percentage } from '../utils/percentage.utils';\nimport { OutputType } from '../interfaces/cropper-options.interface';\n\n@Injectable({providedIn: 'root'})\nexport class CropService {\n\n crop(loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings, output: 'blob', maxSize: Dimensions): Promise<ImageCroppedEvent> | null;\n crop(loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings, output: 'base64', maxSize: Dimensions): ImageCroppedEvent | null;\n crop(loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings, output: OutputType, maxSize: Dimensions): Promise<ImageCroppedEvent> | ImageCroppedEvent | null {\n const imagePosition = this.getImagePosition(loadedImage, cropper, settings, maxSize);\n const width = imagePosition.x2 - imagePosition.x1;\n const height = imagePosition.y2 - imagePosition.y1;\n const cropCanvas = document.createElement('canvas') as HTMLCanvasElement;\n cropCanvas.width = width;\n cropCanvas.height = height;\n\n const ctx = cropCanvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n if (settings.backgroundColor != null) {\n ctx.fillStyle = settings.backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n const scaleX = (settings.transform.scale || 1) * (settings.transform.flipH ? -1 : 1);\n const scaleY = (settings.transform.scale || 1) * (settings.transform.flipV ? -1 : 1);\n const {translateH, translateV} = this.getCanvasTranslate(loadedImage, settings, maxSize);\n\n const transformedImage = loadedImage.transformed;\n ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2 + translateH, transformedImage.size.height / 2 + translateV);\n ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);\n ctx.rotate((settings.transform.rotate || 0) * Math.PI / 180);\n\n ctx.drawImage(\n transformedImage.image,\n -transformedImage.size.width / 2,\n -transformedImage.size.height / 2\n );\n\n const result: ImageCroppedEvent = {\n width, height,\n imagePosition,\n cropperPosition: {...cropper}\n };\n if (settings.containWithinAspectRatio) {\n result.offsetImagePosition = this.getOffsetImagePosition(loadedImage, cropper, settings, maxSize);\n }\n const resizeRatio = this.getResizeRatio(width, height, settings);\n if (resizeRatio !== 1) {\n result.width = Math.round(width * resizeRatio);\n result.height = settings.maintainAspectRatio\n ? Math.round(result.width / settings.aspectRatio)\n : Math.round(height * resizeRatio);\n resizeCanvas(cropCanvas, result.width, result.height);\n }\n if (output === 'blob') {\n return this.cropToBlob(result, cropCanvas, settings);\n } else {\n result.base64 = cropCanvas.toDataURL('image/' + settings.format, this.getQuality(settings));\n return result;\n }\n }\n\n private async cropToBlob(output: ImageCroppedEvent, cropCanvas: HTMLCanvasElement, settings: CropperSettings): Promise<ImageCroppedEvent> {\n output.blob = await new Promise<Blob | null>(resolve => cropCanvas.toBlob(resolve, 'image/' + settings.format, this.getQuality(settings)));\n if (output.blob) {\n output.objectUrl = URL.createObjectURL(output.blob);\n }\n return output;\n }\n\n private getCanvasTranslate(loadedImage: LoadedImage, settings: CropperSettings, maxSize: Dimensions): { translateH: number, translateV: number } {\n if (settings.transform.translateUnit === 'px') {\n const ratio = this.getRatio(loadedImage, maxSize);\n return {\n translateH: (settings.transform.translateH || 0) * ratio,\n translateV: (settings.transform.translateV || 0) * ratio\n };\n } else {\n return {\n translateH: settings.transform.translateH ? percentage(settings.transform.translateH, loadedImage.transformed.size.width) : 0,\n translateV: settings.transform.translateV ? percentage(settings.transform.translateV, loadedImage.transformed.size.height) : 0\n };\n }\n }\n\n private getRatio(loadedImage: LoadedImage, maxSize: Dimensions): number {\n return loadedImage.transformed.size.width / maxSize.width;\n }\n\n private getImagePosition(loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings, maxSize: Dimensions): CropperPosition {\n const ratio = this.getRatio(loadedImage, maxSize);\n const out: CropperPosition = {\n x1: Math.round(cropper.x1 * ratio),\n y1: Math.round(cropper.y1 * ratio),\n x2: Math.round(cropper.x2 * ratio),\n y2: Math.round(cropper.y2 * ratio)\n };\n\n if (!settings.containWithinAspectRatio) {\n out.x1 = Math.max(out.x1, 0);\n out.y1 = Math.max(out.y1, 0);\n out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\n out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\n }\n\n return out;\n }\n\n private getOffsetImagePosition(loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings, maxSize: Dimensions): CropperPosition {\n const canvasRotation = settings.canvasRotation + loadedImage.exifTransform.rotate;\n const ratio = this.getRatio(loadedImage, maxSize);\n let offsetX: number;\n let offsetY: number;\n\n if (canvasRotation % 2) {\n offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.height) / 2;\n offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.width) / 2;\n } else {\n offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.width) / 2;\n offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.height) / 2;\n }\n\n const out: CropperPosition = {\n x1: Math.round(cropper.x1 * ratio) - offsetX,\n y1: Math.round(cropper.y1 * ratio) - offsetY,\n x2: Math.round(cropper.x2 * ratio) - offsetX,\n y2: Math.round(cropper.y2 * ratio) - offsetY\n };\n\n if (!settings.containWithinAspectRatio) {\n out.x1 = Math.max(out.x1, 0);\n out.y1 = Math.max(out.y1, 0);\n out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\n out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\n }\n\n return out;\n }\n\n getResizeRatio(width: number, height: number, settings: CropperSettings): number {\n const ratioWidth = settings.resizeToWidth / width;\n const ratioHeight = settings.resizeToHeight / height;\n const ratios = new Array<number>();\n\n if (settings.resizeToWidth > 0) {\n ratios.push(ratioWidth);\n }\n if (settings.resizeToHeight > 0) {\n ratios.push(ratioHeight);\n }\n\n const result = ratios.length === 0 ? 1 : Math.min(...ratios);\n\n if (result > 1 && !settings.onlyScaleDown) {\n return result;\n }\n return Math.min(result, 1);\n }\n\n getQuality(settings: CropperSettings): number {\n return Math.min(1, Math.max(0, settings.imageQuality / 100));\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { CropperPosition, Dimensions, MoveStart } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport {BasicEvent} from \"../interfaces/basic-event.interface\";\n\n@Injectable({ providedIn: 'root' })\nexport class CropperPositionService {\n\n resetCropperPosition(sourceImage: ElementRef, cropperPosition: CropperPosition, settings: CropperSettings, maxSize: Dimensions): void {\n if (!sourceImage?.nativeElement) {\n return;\n }\n if (settings.cropperStaticHeight && settings.cropperStaticWidth) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = maxSize.width > settings.cropperStaticWidth ?\n settings.cropperStaticWidth : maxSize.width;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = maxSize.height > settings.cropperStaticHeight ?\n settings.cropperStaticHeight : maxSize.height;\n } else {\n const cropperWidth = Math.min(settings.cropperScaledMaxWidth, maxSize.width);\n const cropperHeight = Math.min(settings.cropperScaledMaxHeight, maxSize.height);\n if (!settings.maintainAspectRatio) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n } else if (maxSize.width / settings.aspectRatio < maxSize.height) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n const cropperHeightWithAspectRatio = cropperWidth / settings.aspectRatio;\n cropperPosition.y1 = (maxSize.height - cropperHeightWithAspectRatio) / 2;\n cropperPosition.y2 = cropperPosition.y1 + cropperHeightWithAspectRatio;\n } else {\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n const cropperWidthWithAspectRatio = cropperHeight * settings.aspectRatio;\n cropperPosition.x1 = (maxSize.width - cropperWidthWithAspectRatio) / 2;\n cropperPosition.x2 = cropperPosition.x1 + cropperWidthWithAspectRatio;\n }\n }\n }\n\n move(event: Event | BasicEvent, moveStart: MoveStart, cropperPosition: CropperPosition) {\n const diffX = this.getClientX(event) - moveStart.clientX;\n const diffY = this.getClientY(event) - moveStart.clientY;\n\n cropperPosition.x1 = moveStart.x1 + diffX;\n cropperPosition.y1 = moveStart.y1 + diffY;\n cropperPosition.x2 = moveStart.x2 + diffX;\n cropperPosition.y2 = moveStart.y2 + diffY;\n }\n\n resize(event: Event | BasicEvent, moveStart: MoveStart, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\n const moveX = this.getClientX(event) - moveStart.clientX;\n const moveY = this.getClientY(event) - moveStart.clientY;\n switch (moveStart.position) {\n case 'left':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n break;\n case 'topleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'top':\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'topright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'right':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n break;\n case 'bottomright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottom':\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottomleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'center':\n const scale = (event as any).scale;\n const newWidth = Math.min(\n Math.max(settings.cropperScaledMinWidth, (Math.abs(moveStart.x2 - moveStart.x1)) * scale),\n settings.cropperScaledMaxWidth);\n const newHeight = Math.min(\n Math.max(settings.cropperScaledMinHeight, (Math.abs(moveStart.y2 - moveStart.y1)) * scale),\n settings.cropperScaledMaxHeight);\n cropperPosition.x1 = moveStart.clientX - newWidth / 2;\n cropperPosition.x2 = moveStart.clientX + newWidth / 2;\n cropperPosition.y1 = moveStart.clientY - newHeight / 2;\n cropperPosition.y2 = moveStart.clientY + newHeight / 2;\n if (cropperPosition.x1 < 0) {\n cropperPosition.x2 -= cropperPosition.x1;\n cropperPosition.x1 = 0;\n } else if (cropperPosition.x2 > maxSize.width) {\n cropperPosition.x1 -= (cropperPosition.x2 - maxSize.width);\n cropperPosition.x2 = maxSize.width;\n }\n if (cropperPosition.y1 < 0) {\n cropperPosition.y2 -= cropperPosition.y1;\n cropperPosition.y1 = 0;\n } else if (cropperPosition.y2 > maxSize.height) {\n cropperPosition.y1 -= (cropperPosition.y2 - maxSize.height);\n cropperPosition.y2 = maxSize.height;\n }\n break;\n }\n\n if (settings.maintainAspectRatio) {\n this.checkAspectRatio(moveStart.position!, cropperPosition, maxSize, settings);\n }\n }\n\n checkAspectRatio(position: string, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\n let overflowX = 0;\n let overflowY = 0;\n\n switch (position) {\n case 'top':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'bottom':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : (overflowX / settings.aspectRatio);\n }\n break;\n case 'topleft':\n cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(0 - cropperPosition.x1, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'topright':\n cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'right':\n case 'bottomright':\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'left':\n case 'bottomleft':\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(0 - cropperPosition.x1, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'center':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n const overflowX1 = Math.max(0 - cropperPosition.x1, 0);\n const overflowX2 = Math.max(cropperPosition.x2 - maxSize.width, 0);\n const overflowY1 = Math.max(cropperPosition.y2 - maxSize.height, 0);\n const overflowY2 = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX1 > 0 || overflowX2 > 0 || overflowY1 > 0 || overflowY2 > 0) {\n cropperPosition.x1 += (overflowY1 * settings.aspectRatio) > overflowX1 ? (overflowY1 * settings.aspectRatio) : overflowX1;\n cropperPosition.x2 -= (overflowY2 * settings.aspectRatio) > overflowX2 ? (overflowY2 * settings.aspectRatio) : overflowX2;\n cropperPosition.y1 += (overflowY2 * settings.aspectRatio) > overflowX2 ? overflowY2 : overflowX2 / settings.aspectRatio;\n cropperPosition.y2 -= (overflowY1 * settings.aspectRatio) > overflowX1 ? overflowY1 : overflowX1 / settings.aspectRatio;\n }\n break;\n }\n }\n\n getClientX(event: Event | BasicEvent | TouchEvent): number {\n if ('touches' in event && event.touches[0])\n return event.touches[0].clientX;\n else if ('clientX' in event) {\n return event.clientX\n }\n\n return 0;\n }\n\n getClientY(event: Event | BasicEvent | TouchEvent): number {\n if ('touches' in event && event.touches[0])\n return event.touches[0].clientY;\n else if ('clientX' in event) {\n return event.clientY\n }\n\n return 0;\n }\n}\n","import { ExifTransform } from '../interfaces/exif-transform.interface';\n\n// Black 2x1 JPEG, with the following meta information set:\n// - EXIF Orientation: 6 (Rotated 90° CCW)\n// Source: https://github.com/blueimp/JavaScript-Load-Image\nconst testAutoOrientationImageURL =\n 'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +\n 'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +\n 'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +\n 'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +\n 'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +\n 'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';\n\nexport function supportsAutomaticRotation(): Promise<boolean> {\n return new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n // Check if browser supports automatic image orientation:\n const supported = img.width === 1 && img.height === 2;\n resolve(supported);\n };\n img.src = testAutoOrientationImageURL;\n });\n}\n\nexport function getTransformationsFromExifData(exifRotationOrArrayBuffer: number | ArrayBufferLike): ExifTransform {\n if (typeof exifRotationOrArrayBuffer === 'object') {\n exifRotationOrArrayBuffer = getExifRotation(exifRotationOrArrayBuffer);\n }\n switch (exifRotationOrArrayBuffer) {\n case 2:\n return { rotate: 0, flip: true };\n case 3:\n return { rotate: 2, flip: false };\n case 4:\n return { rotate: 2, flip: true };\n case 5:\n return { rotate: 1, flip: true };\n case 6:\n return { rotate: 1, flip: false };\n case 7:\n return { rotate: 3, flip: true };\n case 8:\n return { rotate: 3, flip: false };\n default:\n return { rotate: 0, flip: false };\n }\n}\n\nfunction getExifRotation(arrayBuffer: ArrayBufferLike): number {\n const view = new DataView(arrayBuffer);\n if (view.getUint16(0, false) !== 0xFFD8) {\n return -2;\n }\n const length = view.byteLength;\n let offset = 2;\n while (offset < length) {\n if (view.getUint16(offset + 2, false) <= 8) return -1;\n const marker = view.getUint16(offset, false);\n offset += 2;\n if (marker == 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) {\n return -1;\n }\n\n const little = view.getUint16(offset += 6, false) == 0x4949;\n offset += view.getUint32(offset + 4, little);\n const tags = view.getUint16(offset, little);\n offset += 2;\n for (let i = 0; i < tags; i++) {\n if (view.getUint16(offset + (i * 12), little) == 0x0112) {\n return view.getUint16(offset + (i * 12) + 8, little);\n }\n }\n } else if ((marker & 0xFF00) !== 0xFF00) {\n break;\n } else {\n offset += view.getUint16(offset, false);\n }\n }\n return -1;\n}\n","import { Injectable } from '@angular/core';\nimport { Dimensions, LoadedImage } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { ExifTransform } from '../interfaces/exif-transform.interface';\nimport { getTransformationsFromExifData, supportsAutomaticRotation } from '../utils/exif.utils';\n\ninterface LoadImageArrayBuffer {\n originalImage: HTMLImageElement;\n originalArrayBuffer: ArrayBufferLike;\n originalObjectUrl: string;\n originalImageSize?: { width: number; height: number; } | null;\n}\n\n@Injectable({providedIn: 'root'})\nexport class LoadImageService {\n\n private autoRotateSupported: Promise<boolean> = supportsAutomaticRotation();\n\n async loadImageFile(file: File, cropperSettings: CropperSettings): Promise<LoadedImage> {\n const arrayBuffer = await file.arrayBuffer();\n return await this.checkImageTypeAndLoadImageFromArrayBuffer(arrayBuffer, file.type, cropperSettings);\n }\n\n private checkImageTypeAndLoadImageFromArrayBuffer(arrayBuffer: ArrayBufferLike, imageType: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n if (!this.isValidImageType(imageType)) {\n return Promise.reject(new Error('Invalid image type'));\n }\n return this.loadImageFromArrayBuffer(arrayBuffer, cropperSettings, imageType);\n }\n\n private isValidImageType(type: string): boolean {\n return /image\\/(png|jpg|jpeg|bmp|gif|tiff|svg|webp|x-icon|vnd.microsoft.icon)/.test(type);\n }\n\n async loadImageFromURL(url: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n const res = await fetch(url);\n const blob = await res.blob();\n const buffer = await blob.arrayBuffer();\n return await this.loadImageFromArrayBuffer(buffer, cropperSettings, blob.type);\n }\n\n loadBase64Image(imageBase64: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n const arrayBuffer = this.base64ToArrayBuffer(imageBase64);\n return this.loadImageFromArrayBuffer(arrayBuffer, cropperSettings);\n }\n\n private base64ToArrayBuffer(imageBase64: string): ArrayBufferLike {\n imageBase64 = imageBase64.replace(/^data:([^;]+);base64,/gmi, '');\n const binaryString = atob(imageBase64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n }\n\n private async loadImageFromArrayBuffer(arrayBuffer: ArrayBufferLike, cropperSettings: CropperSettings, imageType?: string): Promise<LoadedImage> {\n const res = await new Promise<LoadImageArrayBuffer>(async (resolve, reject) => {\n try {\n const blob = new Blob([arrayBuffer], imageType ? {type: imageType} : undefined);\n const objectUrl = URL.createObjectURL(blob);\n const originalImage = new Image();\n const isSvg = imageType === 'image/svg+xml';\n const originalImageSize = isSvg ? await this.getSvgImageSize(blob) : undefined;\n originalImage.onload = () => resolve({\n originalImage,\n originalImageSize,\n originalObjectUrl: objectUrl,\n originalArrayBuffer: arrayBuffer\n });\n originalImage.onerror = reject;\n originalImage.src = objectUrl;\n } catch (e) {\n reject(e);\n }\n });\n return await this.transformImageFromArrayBuffer(res, cropperSettings, res.originalImageSize != null);\n }\n\n private async getSvgImageSize(blob: Blob): Promise<{ width: number; height: number; } | null> {\n const parser = new DOMParser();\n const doc = parser.parseFromString(await blob.text(), 'image/svg+xml');\n const svgElement = doc.querySelector('svg');\n if (!svgElement) {\n throw Error('Failed to parse SVG image');\n }\n const widthAttr = svgElement.getAttribute('width');\n const heightAttr = svgElement.getAttribute('height');\n if (widthAttr && heightAttr) {\n return null;\n }\n const viewBoxAttr = svgElement.getAttribute('viewBox')\n || svgElement.getAttribute('viewbox');\n if (viewBoxAttr) {\n const viewBox = viewBoxAttr.split(' ');\n return {\n width: +viewBox[2],\n height: +viewBox[3]\n };\n }\n throw Error('Failed to load SVG image. SVG must have width + height or viewBox definition.');\n }\n\n private async transformImageFromArrayBuffer(res: LoadImageArrayBuffer, cropperSettings: CropperSettings, forceTransform = false): Promise<LoadedImage> {\n const autoRotate = await this.autoRotateSupported;\n const exifTransform = getTransformationsFromExifData(autoRotate ? -1 : res.originalArrayBuffer);\n if (!res.originalImage || !res.originalImage.complete) {\n return Promise.reject(new Error('No image loaded'));\n }\n const loadedImage = {\n original: {\n objectUrl: res.originalObjectUrl,\n image: res.originalImage,\n size: res.originalImageSize ?? {\n width: res.originalImage.naturalWidth,\n height: res.originalImage.naturalHeight\n }\n },\n exifTransform\n };\n return this.transformLoadedImage(loadedImage, cropperSettings, forceTransform);\n }\n\n async transformLoadedImage(loadedImage: Partial<LoadedImage>, cropperSettings: CropperSettings, forceTransform = false): Promise<LoadedImage> {\n const canvasRotation = cropperSettings.canvasRotation + loadedImage.exifTransform!.rotate;\n const originalSize = loadedImage.original!.size;\n if (!forceTransform && canvasRotation === 0 && !loadedImage.exifTransform!.flip && !cropperSettings.containWithinAspectRatio) {\n return {\n original: {\n objectUrl: loadedImage.original!.objectUrl,\n image: loadedImage.original!.image,\n size: {...originalSize}\n },\n transformed: {\n objectUrl: loadedImage.original!.objectUrl,\n image: loadedImage.original!.image,\n size: {...originalSize}\n },\n exifTransform: loadedImage.exifTransform!\n };\n }\n\n const transformedSize = this.getTransformedSize(originalSize, loadedImage.exifTransform!, cropperSettings);\n const canvas = document.createElement('canvas');\n canvas.width = transformedSize.width;\n canvas.height = transformedSize.height;\n const ctx = canvas.getContext('2d');\n ctx?.setTransform(\n loadedImage.exifTransform!.flip ? -1 : 1,\n 0,\n 0,\n 1,\n canvas.width / 2,\n canvas.height / 2\n );\n ctx?.rotate(Math.PI * (canvasRotation / 2));\n ctx?.drawImage(\n loadedImage.original!.image,\n -originalSize.width / 2,\n -originalSize.height / 2\n );\n const blob = await new Promise<Blob | null>(resolve => canvas.toBlob(resolve, cropperSettings.format));\n if (!blob) {\n throw new Error('Failed to get Blob for transformed image.');\n }\n const objectUrl = URL.createObjectURL(blob);\n const transformedImage = await this.loadImageFromObjectUrl(objectUrl);\n return {\n original: {\n objectUrl: loadedImage.original!.objectUrl,\n image: loadedImage.original!.image,\n size: {...originalSize}\n },\n transformed: {\n objectUrl: objectUrl,\n image: transformedImage,\n size: {\n width: transformedImage.width,\n height: transformedImage.height\n }\n },\n exifTransform: loadedImage.exifTransform!\n };\n }\n\n private loadImageFromObjectUrl(objectUrl: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>(((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = reject;\n image.src = objectUrl;\n }));\n }\n\n private getTransformedSize(\n originalSize: { width: number, height: number },\n exifTransform: ExifTransform,\n cropperSettings: CropperSettings\n ): Dimensions {\n const canvasRotation = cropperSettings.canvasRotation + exifTransform.rotate;\n if (cropperSettings.containWithinAspectRatio) {\n if (canvasRotation % 2) {\n const minWidthToContain = originalSize.width * cropperSettings.aspectRatio;\n const minHeightToContain = originalSize.height / cropperSettings.aspectRatio;\n return {\n width: Math.max(originalSize.height, minWidthToContain),\n height: Math.max(originalSize.width, minHeightToContain)\n };\n } else {\n const minWidthToContain = originalSize.height * cropperSettings.aspectRatio;\n const minHeightToContain = originalSize.width / cropperSettings.aspectRatio;\n return {\n width: Math.max(originalSize.width, minWidthToContain),\n height: Math.max(originalSize.height, minHeightToContain)\n };\n }\n }\n\n if (canvasRotation % 2) {\n return {\n height: originalSize.width,\n width: originalSize.height\n };\n }\n return {\n width: originalSize.width,\n height: originalSize.height\n };\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n isDevMode,\n NgZone,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer, HAMMER_LOADER, HammerLoader, SafeStyle, SafeUrl } from '@angular/platform-browser';\nimport { CropperPosition, Dimensions, ImageCroppedEvent, ImageTransform, LoadedImage, MoveStart } from '../interfaces';\nimport { OutputFormat, OutputType } from '../interfaces/cropper-options.interface';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { MoveTypes } from '../interfaces/move-start.interface';\nimport { CropService } from '../services/crop.service';\nimport { CropperPositionService } from '../services/cropper-position.service';\nimport { LoadImageService } from '../services/load-image.service';\nimport { HammerStatic } from '../utils/hammer.utils';\nimport { getEventForKey, getInvertedPositionForKey, getPositionForKey } from '../utils/keyboard.utils';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { fromEvent, merge } from 'rxjs';\nimport { NgIf } from '@angular/common';\nimport {BasicEvent} from \"../interfaces/basic-event.interface\";\n\n@Component({\n selector: 'image-cropper',\n templateUrl: './image-cropper.component.html',\n styleUrls: ['./image-cropper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgIf],\n})\nexport class ImageCropperComponent implements OnChanges, OnInit {\n private settings = new CropperSettings();\n private setImageMaxSizeRetries = 0;\n private moveStart?: MoveStart;\n private loadedImage?: LoadedImage;\n private resizedWhileHidden = false;\n\n safeImgDataUrl?: SafeUrl | string;\n safeTransformStyle?: SafeStyle | string;\n marginLeft: SafeStyle | string = '0px';\n maxSize: Dimensions = {\n width: 0,\n height: 0\n };\n moveTypes = MoveTypes;\n imageVisible = false;\n\n @ViewChild('wrapper', {static: true}) wrapper!: ElementRef<HTMLDivElement>;\n @ViewChild('sourceImage', {static: false}) sourceImage!: ElementRef<HTMLDivElement>;\n\n @Input() imageChangedEvent?: Event | null;\n @Input() imageURL?: string;\n @Input() imageBase64?: string;\n @Input() imageFile?: File;\n @Input() imageAltText?: string;\n @Input() cropperFrameAriaLabel = this.settings.cropperFrameAriaLabel;\n @Input() output: 'blob' | 'base64' = this.settings.output;\n @Input() format: OutputFormat = this.settings.format;\n @Input() transform: ImageTransform = {};\n @Input() maintainAspectRatio = this.settings.maintainAspectRatio;\n @Input() aspectRatio = this.settings.aspectRatio;\n @Input() resetCropOnAspectRatioChange = this.settings.resetCropOnAspectRatioChange;\n @Input() resizeToWidth = this.settings.resizeToWidth;\n @Input() resizeToHeight = this.settings.resizeToHeight;\n @Input() cropperMinWidth = this.settings.cropperMinWidth;\n @Input() cropperMinHeight = this.settings.cropperMinHeight;\n @Input() cropperMaxHeight = this.settings.cropperMaxHeight;\n @Input() cropperMaxWidth = this.settings.cropperMaxWidth;\n @Input() cropperStaticWidth = this.settings.cropperStaticWidth;\n @Input() cropperStaticHeight = this.settings.cropperStaticHeight;\n @Input() canvasRotation = this.settings.canvasRotation;\n @Input() initialStepSize = this.settings.initialStepSize;\n @Input() roundCropper = this.settings.roundCropper;\n @Input() onlyScaleDown = this.settings.onlyScaleDown;\n @Input() imageQuality = this.settings.imageQuality;\n @Input() autoCrop = this.settings.autoCrop;\n @Input() backgroundColor = this.settings.backgroundColor;\n @Input() containWithinAspectRatio = this.settings.containWithinAspectRatio;\n @Input() hideResizeSquares = this.settings.hideResizeSquares;\n @Input() allowMoveImage = false;\n @Input() cropper: CropperPosition = {\n x1: -100,\n y1: -100,\n x2: 10000,\n y2: 10000\n };\n @HostBinding('style.text-align')\n @Input() alignImage: 'left' | 'center' = this.settings.alignImage;\n @HostBinding('class.disabled')\n @Input() disabled = false;\n @HostBinding('class.ngx-ix-hidden')\n @Input() hidden = false;\n\n @Output() imageCropped = new EventEmitter<ImageCroppedEvent>();\n @Output() startCropImage = new EventEmitter<void>();\n @Output() imageLoaded = new EventEmitter<LoadedImage>();\n @Output() cropperReady = new EventEmitter<Dimensions>();\n @Output() loadImageFailed = new EventEmitter<void>();\n @Output() transformChange = new EventEmitter<ImageTransform>();\n\n\n constructor(\n private cropService: CropService,\n private cropperPositionService: CropperPositionService,\n private loadImageService: LoadImageService,\n private sanitizer: DomSanitizer,\n private cd: ChangeDetectorRef,\n private zone: NgZone,\n @Optional() @Inject(HAMMER_LOADER) private readonly hammerLoader: HammerLoader | null\n ) {\n this.reset();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.onChangesUpdateSettings(changes);\n this.onChangesInputImage(changes);\n\n if (this.loadedImage?.original.image.complete && (changes['containWithinAspectRatio'] || changes['canvasRotation'])) {\n this.loadImageService\n .transformLoadedImage(this.loadedImage, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n if (changes['cropper'] || changes['maintainAspectRatio'] || changes['aspectRatio']) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n if (\n this.maintainAspectRatio &&\n (this.resetCropOnAspectRatioChange || !this.aspectRatioIsCorrect()) &&\n (changes['maintainAspectRatio'] || changes['aspectRatio'])\n ) {\n this.resetCropperPosition();\n } else if (changes['cropper']) {\n this.checkCropperPosition(false);\n this.doAutoCrop();\n }\n }\n if (changes['transform']) {\n this.transform = this.transform || {};\n this.setCssTransform();\n this.doAutoCrop();\n }\n if (changes['hidden'] && this.resizedWhileHidden && !this.hidden) {\n setTimeout(() => {\n this.onResize();\n this.resizedWhileHidden = false;\n });\n }\n }\n\n private onChangesUpdateSettings(changes: SimpleChanges) {\n this.settings.setOptionsFromChanges(changes);\n\n if (this.settings.cropperStaticHeight && this.settings.cropperStaticWidth) {\n this.hideResizeSquares = true;\n this.settings.setOptions({\n hideResizeSquares: true,\n cropperMinWidth: this.settings.cropperStaticWidth,\n cropperMinHeight: this.settings.cropperStaticHeight,\n cropperMaxHeight: this.settings.cropperStaticHeight,\n cropperMaxWidth: this.settings.cropperStaticWidth,\n maintainAspectRatio: false\n });\n }\n }\n\n private onChangesInputImage(changes: SimpleChanges): void {\n if (changes['imageChangedEvent'] || changes['imageURL'] || changes['imageBase64'] || changes['imageFile']) {\n this.reset();\n }\n if (changes['imageChangedEvent'] && this.isValidImageChangedEvent()) {\n this.loadImageFile(this.imageChangedEvent.target.files[0]);\n }\n if (changes['imageURL'] && this.imageURL) {\n this.loadImageFromURL(this.imageURL);\n }\n if (changes['imageBase64'] && this.imageBase64) {\n this.loadBase64Image(this.imageBase64);\n }\n if (changes['imageFile'] && this.imageFile) {\n this.loadImageFile(this.imageFile);\n }\n }\n\n private isValidImageChangedEvent(): this is {\n imageChangedEvent: Event & {\n target: { files: FileList };\n }\n } {\n const files = (this.imageChangedEvent as any)?.target?.files;\n return files instanceof FileList && files.length > 0;\n }\n\n private setCssTransform() {\n const translateUnit = this.transform?.translateUnit || '%';\n this.safeTransformStyle = this.sanitizer.bypassSecurityTrustStyle(\n `translate(${this.transform.translateH || 0}${translateUnit}, ${this.transform.translateV || 0}${translateUnit})` +\n ' scaleX(' + (this.transform.scale || 1) * (this.transform.flipH ? -1 : 1) + ')' +\n ' scaleY(' + (this.transform.scale || 1) * (this.transform.flipV ? -1 : 1) + ')' +\n ' rotate(' + (this.transform.rotate || 0) + 'deg)'\n );\n }\n\n ngOnInit(): void {\n this.settings.stepSize = this.initialStepSize;\n this.activatePinchGesture();\n }\n\n private reset(): void {\n this.imageVisible = false;\n this.loadedImage = undefined;\n this.safeImgDataUrl = 'data:image/png;base64,iVBORw0KGg'\n + 'oAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAU'\n + 'AAarVyFEAAAAASUVORK5CYII=';\n this.moveStart = {\n active: false,\n type: null,\n position: null,\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n clientX: 0,\n clientY: 0\n };\n this.maxSize = {\n width: 0,\n height: 0\n };\n this.cropper.x1 = -100;\n this.cropper.y1 = -100;\n this.cropper.x2 = 10000;\n this.cropper.y2 = 10000;\n }\n\n private loadImageFile(file: File): void {\n this.loadImageService\n .loadImageFile(file, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private loadBase64Image(imageBase64: string): void {\n this.loadImageService\n .loadBase64Image(imageBase64, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private loadImageFromURL(url: string): void {\n this.loadImageService\n .loadImageFromURL(url, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private setLoadedImage(loadedImage: LoadedImage): void {\n this.loadedImage = loadedImage;\n this.safeImgDataUrl = this.sanitizer.bypassSecurityTrustResourceUrl(loadedImage.transformed.objectUrl);\n this.cd.markForCheck();\n }\n\n public loadImageError(error: unknown): void {\n console.error(error);\n this.loadImageFailed.emit();\n }\n\n imageLoadedInView(): void {\n if (this.loadedImage != null) {\n this.imageLoaded.emit(this.loadedImage);\n this.setImageMaxSizeRetries = 0;\n setTimeout(() => this.checkImageMaxSizeRecursively());\n }\n }\n\n private checkImageMaxSizeRecursively(): void {\n if (this.setImageMaxSizeRetries > 40) {\n this.loadImageFailed.emit();\n } else if (this.sourceImageLoaded()) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n this.resetCropperPosition();\n this.cropperReady.emit({...this.maxSize});\n this.cd.markForCheck();\n } else {\n this.setImageMaxSizeRetries++;\n setTimeout(() => this.checkImageMaxSizeRecursively(), 50);\n }\n }\n\n private sourceImageLoaded(): boolean {\n return this.sourceImage?.nativeElement?.offsetWidth > 0;\n }\n\n @HostListener('window:resize')\n onResize(): void {\n if (!this.loadedImage) {\n return;\n }\n if (this.hidden) {\n this.resizedWhileHidden = true;\n } else {\n const oldMaxSize = {...this.maxSize};\n this.setMaxSize();\n this.resizeCropperPosition(oldMaxSize);\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n }\n }\n\n private async activatePinchGesture() {\n // Loads HammerJS via angular APIs if configured\n await this.hammerLoader?.();\n\n const Hammer = (window as unknown as (Window & { Hammer?: HammerStatic }))?.['Hammer'] || null;\n\n if (Hammer) {\n const hammer = new Hammer(this.wrapper.nativeElement);\n hammer.get('pinch').set({enable: true});\n hammer.on('pinchmove', this.onPinch.bind(this));\n hammer.on('pinchend', this.pinchStop.bind(this));\n hammer.on('pinchstart', this.startPinch.bind(this));\n } else if (isDevMode()) {\n console.warn('[NgxImageCropper] Could not find HammerJS - Pinch Gesture won\\'t work');\n }\n }\n\n private resizeCropperPosition(oldMaxSize: Dimensions): void {\n if (oldMaxSize.width !== this.maxSize.width || oldMaxSize.height !== this.maxSize.height) {\n this.cropper.x1 = this.cropper.x1 * this.maxSize.width / oldMaxSize.width;\n this.cropper.x2 = this.cropper.x2 * this.maxSize.width / oldMaxSize.width;\n this.cropper.y1 = this.cropper.y1 * this.maxSize.height / oldMaxSize.height;\n this.cropper.y2 = this.cropper.y2 * this.maxSize.height / oldMaxSize.height;\n }\n }\n\n resetCropperPosition(): void {\n this.cropperPositionService.resetCropperPosition(this.sourceImage, this.cropper, this.settings, this.maxSize);\n this.doAutoCrop();\n this.imageVisible = true;\n }\n\n keyboardAccess(event: KeyboardEvent) {\n this.changeKeyboardStepSize(event);\n this.keyboardMoveCropper(event);\n }\n\n private changeKeyboardStepSize(event: KeyboardEvent): void {\n const key = +event.key;\n if (key >= 1 && key <= 9) {\n this.settings.stepSize = key;\n }\n }\n\n private keyboardMoveCropper(event: KeyboardEvent) {\n const keyboardWhiteList: string[] = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft'];\n if (!(keyboardWhiteList.includes(event.key))) {\n return;\n }\n const moveType = event.shiftKey ? MoveTypes.Resize : MoveTypes.Move;\n const position = event.altKey ? getInvertedPositionForKey(event.key) : getPositionForKey(event.key);\n const moveEvent = getEventForKey(event.key, this.settings.stepSize);\n event.preventDefault();\n event.stopPropagation();\n this.startMove({clientX: 0, clientY: 0}, moveType, position);\n this.handleMouseMove(moveEvent);\n this.handleMouseUp();\n }\n\n startMove(event: Event | BasicEvent, moveType: MoveTypes, position: string | null = null): void {\n if (this.disabled\n || this.moveStart?.active && this.moveStart?.type === MoveTypes.Pinch\n || moveType === MoveTypes.Drag && !this.allowMoveImage) {\n return;\n }\n if ('preventDefault' in event) {\n event.preventDefault();\n }\n this.moveStart = {\n active: true,\n type: moveType,\n position,\n transform: {...this.transform},\n clientX: this.cropperPositionService.getClientX(event),\n clientY: this.cropperPositionService.getClientY(event),\n ...this.cropper\n };\n this.initMouseMove();\n }\n\n private initMouseMove(): void {\n merge(\n fromEvent(document, 'mousemove'),\n fromEvent(document, 'touchmove')\n ).pipe(\n takeUntil(merge(\n fromEvent(document, 'mouseup'),\n fromEvent(document, 'touchend')\n ).pipe(first()))\n )\n .subscribe({\n next: (event) => this.zone.run(() => {\n this.handleMouseMove(event);\n this.cd.markForCheck();\n }),\n complete: () => this.zone.run(() => {\n this.handleMouseUp();\n this.cd.markForCheck();\n })\n });\n }\n\n startPinch(event: any) {\n if (!this.safeImgDataUrl) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = {\n active: true,\n type: MoveTypes.Pinch,\n position: 'center',\n clientX: this.cropper.x1 + (this.cropper.x2 - this.cropper.x1) / 2,\n clientY: this.cropper.y1 + (this.cropper.y2 - this.cropper.y1) / 2,\n ...this.cropper\n };\n }\n\n private handleMouseMove(event: Event | BasicEvent): void {\n if (this.moveStart!.active) {\n if ('stopPropagation' in event) {\n event.stopPropagation();\n }\n if ('preventDefault' in event) {\n event.preventDefault();\n }\n if (this.moveStart!.type === MoveTypes.Move) {\n this.cropperPositionService.move(event, this.moveStart!, this.cropper);\n this.checkCropperPosition(true);\n } else if (this.moveStart!.type === MoveTypes.Resize) {\n if (!this.cropperStaticWidth && !this.cropperStaticHeight) {\n this.cropperPositionService.resize(event, this.moveStart!, this.cropper, this.maxSize, this.settings);\n }\n this.checkCropperPosition(false);\n } else if (this.moveStart!.type === MoveTypes.Drag) {\n const diffX = this.cropperPositionService.getClientX(event) - this.moveStart!.clientX;\n const diffY = this.cropperPositionService.getClientY(event) - this.moveStart!.clientY;\n this.transform = {\n ...this.transform,\n translateH: (this.moveStart!.transform?.translateH || 0) + diffX,\n translateV: (this.moveStart!.transform?.translateV || 0) + diffY\n };\n this.setCssTransform();\n }\n }\n }\n\n onPinch(event: any) {\n if (this.moveStart!.active) {\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (this.moveStart!.type === MoveTypes.Pinch) {\n this.cropperPositionService.resize(event, this.moveStart!, this.cropper, this.maxSize, this.settings);\n this.checkCropperPosition(false);\n }\n this.cd.markForCheck();\n }\n }\n\n private setMaxSize(): void {\n if (this.sourceImage) {\n const sourceImageStyle = getComputedStyle(this.sourceImage.nativeElement);\n this.maxSize.width = parseFloat(sourceImageStyle.width);\n this.maxSize.height = parseFloat(sourceImageStyle.height);\n this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.maxSize.width / 2 + 'px)');\n }\n }\n\n private setCropperScaledMinSize(): void {\n if (this.loadedImage?.transformed?.image) {\n this.setCropperScaledMinWidth();\n this.setCropperScaledMinHeight();\n } else {\n this.settings.cropperScaledMinWidth = 20;\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n\n private setCropperScaledMinWidth(): void {\n this.settings.cropperScaledMinWidth = this.cropperMinWidth > 0\n ? Math.max(20, this.cropperMinWidth / this.loadedImage!.transformed.image.width * this.maxSize.width)\n : 20;\n }\n\n private setCropperScaledMinHeight(): void {\n if (this.maintainAspectRatio) {\n this.settings.cropperScaledMinHeight = Math.max(20, this.settings.cropperScaledMinWidth / this.aspectRatio);\n } else if (this.cropperMinHeight > 0) {\n this.settings.cropperScaledMinHeight = Math.max(\n 20,\n this.cropperMinHeight / this.loadedImage!.transformed.image.height * this.maxSize.height\n );\n } else {\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n\n private setCropperScaledMaxSize(): void {\n if (this.loadedImage?.transformed?.image) {\n const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;\n this.settings.cropperScaledMaxWidth = this.cropperMaxWidth > 20 ? this.cropperMaxWidth / ratio : this.maxSize.width;\n this.settings.cropperScaledMaxHeight = this.cropperMaxHeight > 20 ? this.cropperMaxHeight / ratio : this.maxSize.height;\n if (this.maintainAspectRatio) {\n if (this.settings.cropperScaledMaxWidth > this.settings.cropperScaledMaxHeight * this.aspectRatio) {\n this.settings.cropperScaledMaxWidth = this.settings.cropperScaledMaxHeight * this.aspectRatio;\n } else if (this.settings.cropperScaledMaxWidth < this.settings.cropperScaledMaxHeight * this.aspectRatio) {\n this.settings.cropperScaledMaxHeight = this.settings.cropperScaledMaxWidth / this.aspectRatio;\n }\n }\n } else {\n this.settings.cropperScaledMaxWidth = this.maxSize.width;\n this.settings.cropperScaledMaxHeight = this.maxSize.height;\n }\n }\n\n private checkCropperPosition(maintainSize = false): void {\n if (this.cropper.x1 < 0) {\n this.cropper.x2 -= maintainSize ? this.cropper.x1 : 0;\n this.cropper.x1 = 0;\n }\n if (this.cropper.y1 < 0) {\n this.cropper.y2 -= maintainSize ? this.cropper.y1 : 0;\n this.cropper.y1 = 0;\n }\n if (this.cropper.x2 > this.maxSize.width) {\n this.cropper.x1 -= maintainSize ? (this.cropper.x2 - this.maxSize.width) : 0;\n this.cropper.x2 = this.maxSize.width;\n }\n if (this.cropper.y2 > this.maxSize.height) {\n this.cropper.y1 -= maintainSize ? (this.cropper.y2 - this.maxSize.height) : 0;\n this.cropper.y2 = this.maxSize.height;\n }\n }\n\n private handleMouseUp(): void {\n if (this.moveStart!.active) {\n this.moveStart!.active = false;\n if (this.moveStart?.type === MoveTypes.Drag) {\n this.transformChange.emit(this.transform);\n } else {\n this.doAutoCrop();\n }\n }\n }\n\n pinchStop(): void {\n if (this.moveStart!.active) {\n this.moveStart!.active = false;\n this.doAutoCrop();\n }\n }\n\n private doAutoCrop(): void {\n if (this.autoCrop) {\n void this.crop();\n }\n }\n\n crop(): ImageCroppedEvent | null;\n crop(output: 'base64'): ImageCroppedEvent | null;\n crop(output: 'blob'): Promise<ImageCroppedEvent> | null;\n crop(output: OutputType = this.settings.output): Promise<ImageCroppedEvent> | ImageCroppedEvent | null {\n if (this.loadedImage?.transformed?.image != null) {\n this.startCropImage.emit();\n if (output === 'blob') {\n return this.cropToBlob();\n } else if (output === 'base64') {\n return this.cropToBase64();\n }\n }\n return null;\n }\n\n private cropToBlob(): Promise<ImageCroppedEvent> | null {\n return new Promise((resolve, reject) => this.zone.run(async () => {\n const result = await this.cropService.crop(this.loadedImage!, this.cropper, this.settings, 'blob', this.maxSize);\n if (result) {\n this.imageCropped.emit(result);\n resolve(result);\n } else {\n reject('Crop image failed');\n }\n }));\n }\n\n private cropToBase64(): ImageCroppedEvent | null {\n const result = this.cropService.crop(this.loadedImage!, this.cropper, this.settings, 'base64', this.maxSize);\n if (result) {\n this.imageCropped.emit(result);\n return result;\n }\n return null;\n }\n\n private aspectRatioIsCorrect(): boolean {\n const currentCropAspectRatio = (this.cropper.x2 - this.cropper.x1) / (this.cropper.y2 - this.cropper.y1);\n return currentCropAspectRatio === this.aspectRatio;\n }\n}\n","<div\n [style.background]=\"imageVisible && backgroundColor\"\n #wrapper\n>\n <img\n #sourceImage\n class=\"ngx-ic-source-image\"\n role=\"presentation\"\n *ngIf=\"safeImgDataUrl\"\n [src]=\"safeImgDataUrl\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n [style.transform]=\"safeTransformStyle\"\n [class.ngx-ic-draggable]=\"!disabled && allowMoveImage\"\n [attr.alt]=\"imageAltText\"\n (load)=\"imageLoadedInView()\"\n (mousedown)=\"startMove($event, moveTypes.Drag)\"\n (touchstart)=\"startMove($event, moveTypes.Drag)\"\n (error)=\"loadImageError($event)\"\n >\n <div\n class=\"ngx-ic-overlay\"\n [style.width.px]=\"maxSize.width\"\n [style.height.px]=\"maxSize.height\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n ></div>\n <div class=\"ngx-ic-cropper\"\n *ngIf=\"imageVisible\"\n [class.ngx-ic-round]=\"roundCropper\"\n [attr.aria-label]=\"cropperFrameAriaLabel\"\n [style.top.px]=\"cropper.y1\"\n [style.left.px]=\"cropper.x1\"\n [style.width.px]=\"cropper.x2 - cropper.x1\"\n [style.height.px]=\"cropper.y2 - cropper.y1\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n (keydown)=\"keyboardAccess($event)\"\n tabindex=\"0\"\n >\n <div\n (mousedown)=\"startMove($event, moveTypes.Move)\"\n (touchstart)=\"startMove($event, moveTypes.Move)\"\n class=\"ngx-ic-move\"\n role=\"presentation\">\n </div>\n <ng-container *ngIf=\"!hideResizeSquares\">\n <span class=\"ngx-ic-resize ngx-ic-topleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-top\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-topright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-right\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomright\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottom\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomleft\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-left\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-top\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-right\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-bottom\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-left\"\n role=\"presentation\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\">\n </span>\n </ng-container>\n </div>\n</div>\n","export function base64ToFile(base64Image: string): Blob {\n const split = base64Image.split(',');\n const type = split[0].replace('data:', '').replace(';base64', '');\n const byteString = atob(split[1]);\n const ab = new ArrayBuffer(byteString.length);\n const ia = new Uint8Array(ab);\n for (let i = 0; i < byteString.length; i += 1) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ab], {type});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export * from './
|
|
6
|
-
export { base64ToFile } from './lib/utils/blob.utils';
|
|
7
|
-
export { resizeCanvas } from './lib/utils/resize.utils';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
/// <amd-module name="ngx-image-cropper" />
|
|
5
|
+
export * from './public-api';
|