mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
1 line
300 KiB
JSON
1 line
300 KiB
JSON
{"ast":null,"code":"import { Injectable, ɵɵdefineInjectable, EventEmitter, isDevMode, Component, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, Input, HostBinding, Output, HostListener, NgModule } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { __awaiter } from 'tslib';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/interfaces/cropper.settings.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/platform-browser';\nimport * as ɵngcc2 from '@angular/common';\nconst _c0 = [\"wrapper\"];\nconst _c1 = [\"sourceImage\"];\nfunction ImageCropperComponent_img_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"img\", 4, 5);\n ɵngcc0.ɵɵlistener(\"load\", function ImageCropperComponent_img_2_Template_img_load_0_listener() {\n ɵngcc0.ɵɵrestoreView(_r5);\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n return ɵngcc0.ɵɵresetView(ctx_r4.imageLoadedInView());\n });\n ɵngcc0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r1.imageVisible ? \"visible\" : \"hidden\")(\"transform\", ctx_r1.safeTransformStyle);\n ɵngcc0.ɵɵproperty(\"src\", ctx_r1.safeImgDataUrl, ɵngcc0.ɵɵsanitizeUrl);\n }\n}\nfunction ImageCropperComponent_div_4_ng_container_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 9);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_1_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r7 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r7.startMove($event, ctx_r7.moveTypes.Resize, \"topleft\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_1_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r9 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r9.startMove($event, ctx_r9.moveTypes.Resize, \"topleft\"));\n });\n ɵngcc0.ɵɵelement(2, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 11);\n ɵngcc0.ɵɵelement(4, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 12);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_5_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r10.startMove($event, ctx_r10.moveTypes.Resize, \"topright\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_5_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r11 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r11.startMove($event, ctx_r11.moveTypes.Resize, \"topright\"));\n });\n ɵngcc0.ɵɵelement(6, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"span\", 13);\n ɵngcc0.ɵɵelement(8, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"span\", 14);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_9_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r12 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r12.startMove($event, ctx_r12.moveTypes.Resize, \"bottomright\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_9_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r13.startMove($event, ctx_r13.moveTypes.Resize, \"bottomright\"));\n });\n ɵngcc0.ɵɵelement(10, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"span\", 15);\n ɵngcc0.ɵɵelement(12, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(13, \"span\", 16);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_13_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r14.startMove($event, ctx_r14.moveTypes.Resize, \"bottomleft\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_13_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r15 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r15.startMove($event, ctx_r15.moveTypes.Resize, \"bottomleft\"));\n });\n ɵngcc0.ɵɵelement(14, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(15, \"span\", 17);\n ɵngcc0.ɵɵelement(16, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(17, \"span\", 18);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_17_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r16 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r16.startMove($event, ctx_r16.moveTypes.Resize, \"top\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_17_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r17 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r17.startMove($event, ctx_r17.moveTypes.Resize, \"top\"));\n });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(18, \"span\", 19);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_18_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r18 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r18.startMove($event, ctx_r18.moveTypes.Resize, \"right\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_18_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r19 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r19.startMove($event, ctx_r19.moveTypes.Resize, \"right\"));\n });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(19, \"span\", 20);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_19_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r20 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r20.startMove($event, ctx_r20.moveTypes.Resize, \"bottom\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_19_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r21 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r21.startMove($event, ctx_r21.moveTypes.Resize, \"bottom\"));\n });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(20, \"span\", 21);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_20_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r22 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r22.startMove($event, ctx_r22.moveTypes.Resize, \"left\"));\n })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_20_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r8);\n const ctx_r23 = ɵngcc0.ɵɵnextContext(2);\n return ɵngcc0.ɵɵresetView(ctx_r23.startMove($event, ctx_r23.moveTypes.Resize, \"left\"));\n });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n }\n}\nfunction ImageCropperComponent_div_4_Template(rf, ctx) {\n if (rf & 1) {\n const _r25 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 6);\n ɵngcc0.ɵɵlistener(\"keydown\", function ImageCropperComponent_div_4_Template_div_keydown_0_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r25);\n const ctx_r24 = ɵngcc0.ɵɵnextContext();\n return ɵngcc0.ɵɵresetView(ctx_r24.keyboardAccess($event));\n });\n ɵngcc0.ɵɵelementStart(1, \"div\", 7);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_Template_div_mousedown_1_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r25);\n const ctx_r26 = ɵngcc0.ɵɵnextContext();\n return ɵngcc0.ɵɵresetView(ctx_r26.startMove($event, ctx_r26.moveTypes.Move));\n })(\"touchstart\", function ImageCropperComponent_div_4_Template_div_touchstart_1_listener($event) {\n ɵngcc0.ɵɵrestoreView(_r25);\n const ctx_r27 = ɵngcc0.ɵɵnextContext();\n return ɵngcc0.ɵɵresetView(ctx_r27.startMove($event, ctx_r27.moveTypes.Move));\n });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ImageCropperComponent_div_4_ng_container_2_Template, 21, 0, \"ng-container\", 8);\n ɵngcc0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"top\", ctx_r2.cropper.y1, \"px\")(\"left\", ctx_r2.cropper.x1, \"px\")(\"width\", ctx_r2.cropper.x2 - ctx_r2.cropper.x1, \"px\")(\"height\", ctx_r2.cropper.y2 - ctx_r2.cropper.y1, \"px\")(\"margin-left\", ctx_r2.alignImage === \"center\" ? ctx_r2.marginLeft : null)(\"visibility\", ctx_r2.imageVisible ? \"visible\" : \"hidden\");\n ɵngcc0.ɵɵclassProp(\"ngx-ic-round\", ctx_r2.roundCropper);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r2.hideResizeSquares);\n }\n}\nclass CropperSettings {\n constructor() {\n // From options\n this.format = 'png';\n this.maintainAspectRatio = true;\n this.transform = {};\n this.aspectRatio = 1;\n this.resizeToWidth = 0;\n this.resizeToHeight = 0;\n this.cropperMinWidth = 0;\n this.cropperMinHeight = 0;\n this.cropperMaxHeight = 0;\n this.cropperMaxWidth = 0;\n this.cropperStaticWidth = 0;\n this.cropperStaticHeight = 0;\n this.canvasRotation = 0;\n this.initialStepSize = 3;\n this.roundCropper = false;\n this.onlyScaleDown = false;\n this.imageQuality = 92;\n this.autoCrop = true;\n this.backgroundColor = undefined;\n this.containWithinAspectRatio = false;\n this.hideResizeSquares = false;\n this.alignImage = 'center';\n // Internal\n this.cropperScaledMinWidth = 20;\n this.cropperScaledMinHeight = 20;\n this.cropperScaledMaxWidth = 20;\n this.cropperScaledMaxHeight = 20;\n this.stepSize = this.initialStepSize;\n }\n /**\n * @param {?} options\n * @return {?}\n */\n setOptions(options) {\n Object.keys(options).filter(\n /**\n * @param {?} k\n * @return {?}\n */\n k => k in this).forEach(\n /**\n * @param {?} k\n * @return {?}\n */\n k => this[k] = options[k]);\n this.validateOptions();\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n setOptionsFromChanges(changes) {\n Object.keys(changes).filter(\n /**\n * @param {?} k\n * @return {?}\n */\n k => k in this).forEach(\n /**\n * @param {?} k\n * @return {?}\n */\n k => this[k] = changes[k].currentValue);\n this.validateOptions();\n }\n /**\n * @private\n * @return {?}\n */\n validateOptions() {\n if (this.maintainAspectRatio && !this.aspectRatio) {\n throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');\n }\n }\n}\nif (false) {\n /** @type {?} */\n CropperSettings.prototype.format;\n /** @type {?} */\n CropperSettings.prototype.maintainAspectRatio;\n /** @type {?} */\n CropperSettings.prototype.transform;\n /** @type {?} */\n CropperSettings.prototype.aspectRatio;\n /** @type {?} */\n CropperSettings.prototype.resizeToWidth;\n /** @type {?} */\n CropperSettings.prototype.resizeToHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperMinWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperMinHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperMaxHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperMaxWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperStaticWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperStaticHeight;\n /** @type {?} */\n CropperSettings.prototype.canvasRotation;\n /** @type {?} */\n CropperSettings.prototype.initialStepSize;\n /** @type {?} */\n CropperSettings.prototype.roundCropper;\n /** @type {?} */\n CropperSettings.prototype.onlyScaleDown;\n /** @type {?} */\n CropperSettings.prototype.imageQuality;\n /** @type {?} */\n CropperSettings.prototype.autoCrop;\n /** @type {?} */\n CropperSettings.prototype.backgroundColor;\n /** @type {?} */\n CropperSettings.prototype.containWithinAspectRatio;\n /** @type {?} */\n CropperSettings.prototype.hideResizeSquares;\n /** @type {?} */\n CropperSettings.prototype.alignImage;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMinWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMinHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMaxWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMaxHeight;\n /** @type {?} */\n CropperSettings.prototype.stepSize;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/interfaces/move-start.interface.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction MoveStart() {}\nif (false) {\n /** @type {?} */\n MoveStart.prototype.active;\n /** @type {?} */\n MoveStart.prototype.type;\n /** @type {?} */\n MoveStart.prototype.position;\n /** @type {?} */\n MoveStart.prototype.x1;\n /** @type {?} */\n MoveStart.prototype.y1;\n /** @type {?} */\n MoveStart.prototype.x2;\n /** @type {?} */\n MoveStart.prototype.y2;\n /** @type {?} */\n MoveStart.prototype.clientX;\n /** @type {?} */\n MoveStart.prototype.clientY;\n}\n/** @enum {string} */\nconst MoveTypes = {\n Move: \"move\",\n Resize: \"resize\",\n Pinch: \"pinch\"\n};\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/resize.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\n/**\n * @param {?} canvas\n * @param {?} width\n * @param {?} height\n * @return {?}\n */\nfunction resizeCanvas(canvas, width, height) {\n /** @type {?} */\n const width_source = canvas.width;\n /** @type {?} */\n const height_source = canvas.height;\n width = Math.round(width);\n height = Math.round(height);\n /** @type {?} */\n const ratio_w = width_source / width;\n /** @type {?} */\n const ratio_h = height_source / height;\n /** @type {?} */\n const ratio_w_half = Math.ceil(ratio_w / 2);\n /** @type {?} */\n const ratio_h_half = Math.ceil(ratio_h / 2);\n /** @type {?} */\n const ctx = canvas.getContext('2d');\n if (ctx) {\n /** @type {?} */\n const img = ctx.getImageData(0, 0, width_source, height_source);\n /** @type {?} */\n const img2 = ctx.createImageData(width, height);\n /** @type {?} */\n const data = img.data;\n /** @type {?} */\n const data2 = img2.data;\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n /** @type {?} */\n const x2 = (i + j * width) * 4;\n /** @type {?} */\n const center_y = j * ratio_h;\n /** @type {?} */\n let weight = 0;\n /** @type {?} */\n let weights = 0;\n /** @type {?} */\n let weights_alpha = 0;\n /** @type {?} */\n let gx_r = 0;\n /** @type {?} */\n let gx_g = 0;\n /** @type {?} */\n let gx_b = 0;\n /** @type {?} */\n let gx_a = 0;\n /** @type {?} */\n const xx_start = Math.floor(i * ratio_w);\n /** @type {?} */\n const yy_start = Math.floor(j * ratio_h);\n /** @type {?} */\n let xx_stop = Math.ceil((i + 1) * ratio_w);\n /** @type {?} */\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 for (let yy = yy_start; yy < yy_stop; yy++) {\n /** @type {?} */\n const dy = Math.abs(center_y - yy) / ratio_h_half;\n /** @type {?} */\n const center_x = i * ratio_w;\n /** @type {?} */\n const w0 = dy * dy;\n for (let xx = xx_start; xx < xx_stop; xx++) {\n /** @type {?} */\n const dx = Math.abs(center_x - xx) / ratio_w_half;\n /** @type {?} */\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 /** @type {?} */\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) 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 canvas.width = width;\n canvas.height = height;\n //draw\n ctx.putImageData(img2, 0, 0);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/services/crop.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass CropService {\n /**\n * @param {?} sourceImage\n * @param {?} loadedImage\n * @param {?} cropper\n * @param {?} settings\n * @return {?}\n */\n crop(sourceImage, loadedImage, cropper, settings) {\n /** @type {?} */\n const imagePosition = this.getImagePosition(sourceImage, loadedImage, cropper, settings);\n /** @type {?} */\n const width = imagePosition.x2 - imagePosition.x1;\n /** @type {?} */\n const height = imagePosition.y2 - imagePosition.y1;\n /** @type {?} */\n const cropCanvas = /** @type {?} */document.createElement('canvas');\n cropCanvas.width = width;\n cropCanvas.height = height;\n /** @type {?} */\n const ctx = cropCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n if (settings.backgroundColor != null) {\n ctx.fillStyle = settings.backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n /** @type {?} */\n const scaleX = (settings.transform.scale || 1) * (settings.transform.flipH ? -1 : 1);\n /** @type {?} */\n const scaleY = (settings.transform.scale || 1) * (settings.transform.flipV ? -1 : 1);\n /** @type {?} */\n const transformedImage = loadedImage.transformed;\n ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2, transformedImage.size.height / 2);\n ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);\n ctx.rotate((settings.transform.rotate || 0) * Math.PI / 180);\n ctx.drawImage(transformedImage.image, -transformedImage.size.width / 2, -transformedImage.size.height / 2);\n /** @type {?} */\n const output = {\n width,\n height,\n imagePosition,\n cropperPosition: Object.assign({}, cropper)\n };\n if (settings.containWithinAspectRatio) {\n output.offsetImagePosition = this.getOffsetImagePosition(sourceImage, loadedImage, cropper, settings);\n }\n /** @type {?} */\n const resizeRatio = this.getResizeRatio(width, height, settings);\n if (resizeRatio !== 1) {\n output.width = Math.round(width * resizeRatio);\n output.height = settings.maintainAspectRatio ? Math.round(output.width / settings.aspectRatio) : Math.round(height * resizeRatio);\n resizeCanvas(cropCanvas, output.width, output.height);\n }\n output.base64 = cropCanvas.toDataURL('image/' + settings.format, this.getQuality(settings));\n return output;\n }\n /**\n * @private\n * @param {?} sourceImage\n * @param {?} loadedImage\n * @param {?} cropper\n * @param {?} settings\n * @return {?}\n */\n getImagePosition(sourceImage, loadedImage, cropper, settings) {\n /** @type {?} */\n const sourceImageElement = sourceImage.nativeElement;\n /** @type {?} */\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n /** @type {?} */\n const out = {\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 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 return out;\n }\n /**\n * @private\n * @param {?} sourceImage\n * @param {?} loadedImage\n * @param {?} cropper\n * @param {?} settings\n * @return {?}\n */\n getOffsetImagePosition(sourceImage, loadedImage, cropper, settings) {\n /** @type {?} */\n const canvasRotation = settings.canvasRotation + loadedImage.exifTransform.rotate;\n /** @type {?} */\n const sourceImageElement = sourceImage.nativeElement;\n /** @type {?} */\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n /** @type {?} */\n let offsetX;\n /** @type {?} */\n let offsetY;\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 /** @type {?} */\n const out = {\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 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 return out;\n }\n /**\n * @param {?} width\n * @param {?} height\n * @param {?} settings\n * @return {?}\n */\n getResizeRatio(width, height, settings) {\n /** @type {?} */\n const ratioWidth = settings.resizeToWidth / width;\n /** @type {?} */\n const ratioHeight = settings.resizeToHeight / height;\n /** @type {?} */\n const ratios = new Array();\n if (settings.resizeToWidth > 0) {\n ratios.push(ratioWidth);\n }\n if (settings.resizeToHeight > 0) {\n ratios.push(ratioHeight);\n }\n /** @type {?} */\n const result = ratios.length === 0 ? 1 : Math.min(...ratios);\n if (result > 1 && !settings.onlyScaleDown) {\n return result;\n }\n return Math.min(result, 1);\n }\n /**\n * @param {?} settings\n * @return {?}\n */\n getQuality(settings) {\n return Math.min(1, Math.max(0, settings.imageQuality / 100));\n }\n}\nCropService.ɵfac = function CropService_Factory(t) {\n return new (t || CropService)();\n};\n/** @nocollapse */\nCropService.ɵprov = ɵɵdefineInjectable({\n factory: function CropService_Factory() {\n return new CropService();\n },\n token: CropService,\n providedIn: \"root\"\n});\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CropService, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/services/cropper-position.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass CropperPositionService {\n /**\n * @param {?} sourceImage\n * @param {?} cropperPosition\n * @param {?} settings\n * @return {?}\n */\n resetCropperPosition(sourceImage, cropperPosition, settings) {\n if (!(sourceImage === null || sourceImage === void 0 ? void 0 : sourceImage.nativeElement)) {\n return;\n }\n /** @type {?} */\n const sourceImageElement = sourceImage.nativeElement;\n if (settings.cropperStaticHeight && settings.cropperStaticWidth) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = sourceImageElement.offsetWidth > settings.cropperStaticWidth ? settings.cropperStaticWidth : sourceImageElement.offsetWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = sourceImageElement.offsetHeight > settings.cropperStaticHeight ? settings.cropperStaticHeight : sourceImageElement.offsetHeight;\n } else {\n /** @type {?} */\n const cropperWidth = Math.min(settings.cropperScaledMaxWidth, sourceImageElement.offsetWidth);\n /** @type {?} */\n const cropperHeight = Math.min(settings.cropperScaledMaxHeight, sourceImageElement.offsetHeight);\n if (!settings.maintainAspectRatio) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n } else if (sourceImageElement.offsetWidth / settings.aspectRatio < sourceImageElement.offsetHeight) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n /** @type {?} */\n const cropperHeightWithAspectRatio = cropperWidth / settings.aspectRatio;\n cropperPosition.y1 = (sourceImageElement.offsetHeight - cropperHeightWithAspectRatio) / 2;\n cropperPosition.y2 = cropperPosition.y1 + cropperHeightWithAspectRatio;\n } else {\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n /** @type {?} */\n const cropperWidthWithAspectRatio = cropperHeight * settings.aspectRatio;\n cropperPosition.x1 = (sourceImageElement.offsetWidth - cropperWidthWithAspectRatio) / 2;\n cropperPosition.x2 = cropperPosition.x1 + cropperWidthWithAspectRatio;\n }\n }\n }\n /**\n * @param {?} event\n * @param {?} moveStart\n * @param {?} cropperPosition\n * @return {?}\n */\n move(event, moveStart, cropperPosition) {\n /** @type {?} */\n const diffX = this.getClientX(event) - moveStart.clientX;\n /** @type {?} */\n const diffY = this.getClientY(event) - moveStart.clientY;\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 * @param {?} event\n * @param {?} moveStart\n * @param {?} cropperPosition\n * @param {?} maxSize\n * @param {?} settings\n * @return {?}\n */\n resize(event, moveStart, cropperPosition, maxSize, settings) {\n /** @type {?} */\n const moveX = this.getClientX(event) - moveStart.clientX;\n /** @type {?} */\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), cropperPosition.x2 - settings.cropperScaledMinWidth);\n break;\n case 'topleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth), cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight), cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'top':\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight), cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'topright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth), cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight), cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'right':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth), cropperPosition.x1 + settings.cropperScaledMinWidth);\n break;\n case 'bottomright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth), cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight), cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottom':\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight), cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottomleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth), cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight), cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'center':\n /** @type {?} */\n const scale = event.scale;\n /** @type {?} */\n const newWidth = Math.min(Math.max(settings.cropperScaledMinWidth, Math.abs(moveStart.x2 - moveStart.x1) * scale), settings.cropperScaledMaxWidth);\n /** @type {?} */\n const newHeight = Math.min(Math.max(settings.cropperScaledMinHeight, Math.abs(moveStart.y2 - moveStart.y1) * scale), 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 if (settings.maintainAspectRatio) {\n this.checkAspectRatio(moveStart.position, cropperPosition, maxSize, settings);\n }\n }\n /**\n * @param {?} position\n * @param {?} cropperPosition\n * @param {?} maxSize\n * @param {?} settings\n * @return {?}\n */\n checkAspectRatio(position, cropperPosition, maxSize, settings) {\n /** @type {?} */\n let overflowX = 0;\n /** @type {?} */\n let overflowY = 0;\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 /** @type {?} */\n const overflowX1 = Math.max(0 - cropperPosition.x1, 0);\n /** @type {?} */\n const overflowX2 = Math.max(cropperPosition.x2 - maxSize.width, 0);\n /** @type {?} */\n const overflowY1 = Math.max(cropperPosition.y2 - maxSize.height, 0);\n /** @type {?} */\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 * @param {?} event\n * @return {?}\n */\n getClientX(event) {\n var _a;\n return ((_a = event.touches) === null || _a === void 0 ? void 0 : _a[0].clientX) || event.clientX || 0;\n }\n /**\n * @param {?} event\n * @return {?}\n */\n getClientY(event) {\n var _a;\n return ((_a = event.touches) === null || _a === void 0 ? void 0 : _a[0].clientY) || event.clientY || 0;\n }\n}\nCropperPositionService.ɵfac = function CropperPositionService_Factory(t) {\n return new (t || CropperPositionService)();\n};\n/** @nocollapse */\nCropperPositionService.ɵprov = ɵɵdefineInjectable({\n factory: function CropperPositionService_Factory() {\n return new CropperPositionService();\n },\n token: CropperPositionService,\n providedIn: \"root\"\n});\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CropperPositionService, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/exif.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\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\n/** @type {?} */\nconst testAutoOrientationImageURL = 'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' + 'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' + 'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' + 'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' + 'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' + 'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';\n/**\n * @return {?}\n */\nfunction supportsAutomaticRotation() {\n return new Promise(\n /**\n * @param {?} resolve\n * @return {?}\n */\n resolve => {\n /** @type {?} */\n const img = new Image();\n img.onload =\n /**\n * @return {?}\n */\n () => {\n // Check if browser supports automatic image orientation:\n /** @type {?} */\n const supported = img.width === 1 && img.height === 2;\n resolve(supported);\n };\n img.src = testAutoOrientationImageURL;\n });\n}\n/**\n * @param {?} exifRotationOrBase64Image\n * @return {?}\n */\nfunction getTransformationsFromExifData(exifRotationOrBase64Image) {\n if (typeof exifRotationOrBase64Image === 'string') {\n exifRotationOrBase64Image = getExifRotation(exifRotationOrBase64Image);\n }\n switch (exifRotationOrBase64Image) {\n case 2:\n return {\n rotate: 0,\n flip: true\n };\n case 3:\n return {\n rotate: 2,\n flip: false\n };\n case 4:\n return {\n rotate: 2,\n flip: true\n };\n case 5:\n return {\n rotate: 1,\n flip: true\n };\n case 6:\n return {\n rotate: 1,\n flip: false\n };\n case 7:\n return {\n rotate: 3,\n flip: true\n };\n case 8:\n return {\n rotate: 3,\n flip: false\n };\n default:\n return {\n rotate: 0,\n flip: false\n };\n }\n}\n/**\n * @param {?} imageBase64\n * @return {?}\n */\nfunction getExifRotation(imageBase64) {\n /** @type {?} */\n const view = new DataView(base64ToArrayBuffer(imageBase64));\n if (view.getUint16(0, false) !== 0xFFD8) {\n return -2;\n }\n /** @type {?} */\n const length = view.byteLength;\n /** @type {?} */\n let offset = 2;\n while (offset < length) {\n if (view.getUint16(offset + 2, false) <= 8) return -1;\n /** @type {?} */\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 /** @type {?} */\n const little = view.getUint16(offset += 6, false) == 0x4949;\n offset += view.getUint32(offset + 4, little);\n /** @type {?} */\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/**\n * @param {?} imageBase64\n * @return {?}\n */\nfunction base64ToArrayBuffer(imageBase64) {\n imageBase64 = imageBase64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\n /** @type {?} */\n const binaryString = atob(imageBase64);\n /** @type {?} */\n const len = binaryString.length;\n /** @type {?} */\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/**\n * @fileoverview added by tsickle\n * Generated from: lib/services/load-image.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction LoadImageBase64() {}\nif (false) {\n /** @type {?} */\n LoadImageBase64.prototype.originalImage;\n /** @type {?} */\n LoadImageBase64.prototype.originalBase64;\n}\nclass LoadImageService {\n constructor() {\n this.autoRotateSupported = supportsAutomaticRotation();\n }\n /**\n * @param {?} file\n * @param {?} cropperSettings\n * @return {?}\n */\n loadImageFile(file, cropperSettings) {\n return new Promise(\n /**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const fileReader = new FileReader();\n fileReader.onload =\n /**\n * @param {?} event\n * @return {?}\n */\n event => {\n this.loadImage(event.target.result, file.type, cropperSettings).then(resolve).catch(reject);\n };\n fileReader.readAsDataURL(file);\n });\n }\n /**\n * @private\n * @param {?} imageBase64\n * @param {?} imageType\n * @param {?} cropperSettings\n * @return {?}\n */\n loadImage(imageBase64, imageType, cropperSettings) {\n if (!this.isValidImageType(imageType)) {\n return Promise.reject(new Error('Invalid image type'));\n }\n return this.loadBase64Image(imageBase64, cropperSettings);\n }\n /**\n * @private\n * @param {?} type\n * @return {?}\n */\n isValidImageType(type) {\n return /image\\/(png|jpg|jpeg|bmp|gif|tiff|webp)/.test(type);\n }\n /**\n * @param {?} url\n * @param {?} cropperSettings\n * @return {?}\n */\n loadImageFromURL(url, cropperSettings) {\n return new Promise(\n /**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const img = new Image();\n img.onerror =\n /**\n * @return {?}\n */\n () => reject;\n img.onload =\n /**\n * @return {?}\n */\n () => {\n /** @type {?} */\n const canvas = document.createElement('canvas');\n /** @type {?} */\n const context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0);\n this.loadBase64Image(canvas.toDataURL(), cropperSettings).then(resolve);\n };\n img.crossOrigin = 'anonymous';\n img.src = url;\n });\n }\n /**\n * @param {?} imageBase64\n * @param {?} cropperSettings\n * @return {?}\n */\n loadBase64Image(imageBase64, cropperSettings) {\n return new Promise(\n /**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const originalImage = new Image();\n originalImage.onload =\n /**\n * @return {?}\n */\n () => resolve({\n originalImage,\n originalBase64: imageBase64\n });\n originalImage.onerror = reject;\n originalImage.src = imageBase64;\n }).then(\n /**\n * @param {?} res\n * @return {?}\n */\n res => this.transformImageBase64(res, cropperSettings));\n }\n /**\n * @private\n * @param {?} res\n * @param {?} cropperSettings\n * @return {?}\n */\n transformImageBase64(res, cropperSettings) {\n return __awaiter(this, void 0, void 0, function* () {\n /** @type {?} */\n const autoRotate = yield this.autoRotateSupported;\n /** @type {?} */\n const exifTransform = yield getTransformationsFromExifData(autoRotate ? -1 : res.originalBase64);\n if (!res.originalImage || !res.originalImage.complete) {\n return Promise.reject(new Error('No image loaded'));\n }\n /** @type {?} */\n const loadedImage = {\n original: {\n base64: res.originalBase64,\n image: res.originalImage,\n size: {\n width: res.originalImage.naturalWidth,\n height: res.originalImage.naturalHeight\n }\n },\n exifTransform\n };\n return this.transformLoadedImage(loadedImage, cropperSettings);\n });\n }\n /**\n * @param {?} loadedImage\n * @param {?} cropperSettings\n * @return {?}\n */\n transformLoadedImage(loadedImage, cropperSettings) {\n return __awaiter(this, void 0, void 0, function* () {\n /** @type {?} */\n const canvasRotation = cropperSettings.canvasRotation + loadedImage.exifTransform.rotate;\n /** @type {?} */\n const originalSize = {\n width: loadedImage.original.image.naturalWidth,\n height: loadedImage.original.image.naturalHeight\n };\n if (canvasRotation === 0 && !loadedImage.exifTransform.flip && !cropperSettings.containWithinAspectRatio) {\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: Object.assign({}, originalSize)\n },\n transformed: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: Object.assign({}, originalSize)\n },\n exifTransform: loadedImage.exifTransform\n };\n }\n /** @type {?} */\n const transformedSize = this.getTransformedSize(originalSize, loadedImage.exifTransform, cropperSettings);\n /** @type {?} */\n const canvas = document.createElement('canvas');\n canvas.width = transformedSize.width;\n canvas.height = transformedSize.height;\n /** @type {?} */\n const ctx = canvas.getContext('2d');\n ctx.setTransform(loadedImage.exifTransform.flip ? -1 : 1, 0, 0, 1, canvas.width / 2, canvas.height / 2);\n ctx.rotate(Math.PI * (canvasRotation / 2));\n ctx.drawImage(loadedImage.original.image, -originalSize.width / 2, -originalSize.height / 2);\n /** @type {?} */\n const transformedBase64 = canvas.toDataURL();\n /** @type {?} */\n const transformedImage = yield this.loadImageFromBase64(transformedBase64);\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: Object.assign({}, originalSize)\n },\n transformed: {\n base64: transformedBase64,\n image: transformedImage,\n size: {\n width: transformedImage.width,\n height: transformedImage.height\n }\n },\n exifTransform: loadedImage.exifTransform\n };\n });\n }\n /**\n * @private\n * @param {?} imageBase64\n * @return {?}\n */\n loadImageFromBase64(imageBase64) {\n return new Promise(\n /**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const image = new Image();\n image.onload =\n /**\n * @return {?}\n */\n () => resolve(image);\n image.onerror = reject;\n image.src = imageBase64;\n });\n }\n /**\n * @private\n * @param {?} originalSize\n * @param {?} exifTransform\n * @param {?} cropperSettings\n * @return {?}\n */\n getTransformedSize(originalSize, exifTransform, cropperSettings) {\n /** @type {?} */\n const canvasRotation = cropperSettings.canvasRotation + exifTransform.rotate;\n if (cropperSettings.containWithinAspectRatio) {\n if (canvasRotation % 2) {\n /** @type {?} */\n const minWidthToContain = originalSize.width * cropperSettings.aspectRatio;\n /** @type {?} */\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 /** @type {?} */\n const minWidthToContain = originalSize.height * cropperSettings.aspectRatio;\n /** @type {?} */\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 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}\nLoadImageService.ɵfac = function LoadImageService_Factory(t) {\n return new (t || LoadImageService)();\n};\n/** @nocollapse */\nLoadImageService.ɵprov = ɵɵdefineInjectable({\n factory: function LoadImageService_Factory() {\n return new LoadImageService();\n },\n token: LoadImageService,\n providedIn: \"root\"\n});\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LoadImageService, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], function () {\n return [];\n }, null);\n})();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n LoadImageService.prototype.autoRotateSupported;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/keyboard.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} key\n * @return {?}\n */\nfunction getPositionForKey(key) {\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/**\n * @param {?} key\n * @return {?}\n */\nfunction getInvertedPositionForKey(key) {\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/**\n * @param {?} key\n * @param {?} stepSize\n * @return {?}\n */\nfunction getEventForKey(key, stepSize) {\n switch (key) {\n case 'ArrowUp':\n return {\n clientX: 0,\n clientY: stepSize * -1\n };\n case 'ArrowRight':\n return {\n clientX: stepSize,\n clientY: 0\n };\n case 'ArrowDown':\n return {\n clientX: 0,\n clientY: stepSize\n };\n case 'ArrowLeft':\n default:\n return {\n clientX: stepSize * -1,\n clientY: 0\n };\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/component/image-cropper.component.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass ImageCropperComponent {\n /**\n * @param {?} cropService\n * @param {?} cropperPositionService\n * @param {?} loadImageService\n * @param {?} sanitizer\n * @param {?} cd\n */\n constructor(cropService, cropperPositionService, loadImageService, sanitizer, cd) {\n this.cropService = cropService;\n this.cropperPositionService = cropperPositionService;\n this.loadImageService = loadImageService;\n this.sanitizer = sanitizer;\n this.cd = cd;\n this.Hammer = (window === null || window === void 0 ? void 0 : window['Hammer']) || null;\n this.settings = new CropperSettings();\n this.setImageMaxSizeRetries = 0;\n this.marginLeft = '0px';\n this.moveTypes = MoveTypes;\n this.imageVisible = false;\n this.format = this.settings.format;\n this.transform = {};\n this.maintainAspectRatio = this.settings.maintainAspectRatio;\n this.aspectRatio = this.settings.aspectRatio;\n this.resizeToWidth = this.settings.resizeToWidth;\n this.resizeToHeight = this.settings.resizeToHeight;\n this.cropperMinWidth = this.settings.cropperMinWidth;\n this.cropperMinHeight = this.settings.cropperMinHeight;\n this.cropperMaxHeight = this.settings.cropperMaxHeight;\n this.cropperMaxWidth = this.settings.cropperMaxWidth;\n this.cropperStaticWidth = this.settings.cropperStaticWidth;\n this.cropperStaticHeight = this.settings.cropperStaticHeight;\n this.canvasRotation = this.settings.canvasRotation;\n this.initialStepSize = this.settings.initialStepSize;\n this.roundCropper = this.settings.roundCropper;\n this.onlyScaleDown = this.settings.onlyScaleDown;\n this.imageQuality = this.settings.imageQuality;\n this.autoCrop = this.settings.autoCrop;\n this.backgroundColor = this.settings.backgroundColor;\n this.containWithinAspectRatio = this.settings.containWithinAspectRatio;\n this.hideResizeSquares = this.settings.hideResizeSquares;\n this.cropper = {\n x1: -100,\n y1: -100,\n x2: 10000,\n y2: 10000\n };\n this.alignImage = this.settings.alignImage;\n this.disabled = false;\n this.imageCropped = new EventEmitter();\n this.startCropImage = new EventEmitter();\n this.imageLoaded = new EventEmitter();\n this.cropperReady = new EventEmitter();\n this.loadImageFailed = new EventEmitter();\n this.reset();\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n var _a;\n this.onChangesUpdateSettings(changes);\n this.onChangesInputImage(changes);\n if (((_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.original.image.complete) && (changes.containWithinAspectRatio || changes.canvasRotation)) {\n this.loadImageService.transformLoadedImage(this.loadedImage, this.settings).then(\n /**\n * @param {?} res\n * @return {?}\n */\n res => this.setLoadedImage(res)).catch(\n /**\n * @param {?} err\n * @return {?}\n */\n err => this.loadImageError(err));\n }\n if (changes.cropper || changes.maintainAspectRatio || changes.aspectRatio) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n if (this.maintainAspectRatio && (changes.maintainAspectRatio || changes.aspectRatio)) {\n this.resetCropperPosition();\n } else if (changes.cropper) {\n this.checkCropperPosition(false);\n this.doAutoCrop();\n }\n this.cd.markForCheck();\n }\n if (changes.transform) {\n this.transform = this.transform || {};\n this.setCssTransform();\n this.doAutoCrop();\n }\n }\n /**\n * @private\n * @param {?} changes\n * @return {?}\n */\n onChangesUpdateSettings(changes) {\n this.settings.setOptionsFromChanges(changes);\n if (this.settings.cropperStaticHeight && this.settings.cropperStaticWidth) {\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\n * @param {?} changes\n * @return {?}\n */\n onChangesInputImage(changes) {\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\n * @return {?}\n */\n isValidImageChangedEvent() {\n var _a, _b, _c;\n return ((_c = (_b = (_a = this.imageChangedEvent) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.files) === null || _c === void 0 ? void 0 : _c.length) > 0;\n }\n /**\n * @private\n * @return {?}\n */\n setCssTransform() {\n this.safeTransformStyle = this.sanitizer.bypassSecurityTrustStyle('scaleX(' + (this.transform.scale || 1) * (this.transform.flipH ? -1 : 1) + ')' + 'scaleY(' + (this.transform.scale || 1) * (this.transform.flipV ? -1 : 1) + ')' + 'rotate(' + (this.transform.rotate || 0) + 'deg)');\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this.settings.stepSize = this.initialStepSize;\n this.activatePinchGesture();\n }\n /**\n * @private\n * @return {?}\n */\n reset() {\n this.imageVisible = false;\n this.loadedImage = null;\n this.safeImgDataUrl = 'data:image/png;base64,iVBORw0KGg' + 'oAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAU' + '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\n * @param {?} file\n * @return {?}\n */\n loadImageFile(file) {\n this.loadImageService.loadImageFile(file, this.settings).then(\n /**\n * @param {?} res\n * @return {?}\n */\n res => this.setLoadedImage(res)).catch(\n /**\n * @param {?} err\n * @return {?}\n */\n err => this.loadImageError(err));\n }\n /**\n * @private\n * @param {?} imageBase64\n * @return {?}\n */\n loadBase64Image(imageBase64) {\n this.loadImageService.loadBase64Image(imageBase64, this.settings).then(\n /**\n * @param {?} res\n * @return {?}\n */\n res => this.setLoadedImage(res)).catch(\n /**\n * @param {?} err\n * @return {?}\n */\n err => this.loadImageError(err));\n }\n /**\n * @private\n * @param {?} url\n * @return {?}\n */\n loadImageFromURL(url) {\n this.loadImageService.loadImageFromURL(url, this.settings).then(\n /**\n * @param {?} res\n * @return {?}\n */\n res => this.setLoadedImage(res)).catch(\n /**\n * @param {?} err\n * @return {?}\n */\n err => this.loadImageError(err));\n }\n /**\n * @private\n * @param {?} loadedImage\n * @return {?}\n */\n setLoadedImage(loadedImage) {\n this.loadedImage = loadedImage;\n this.safeImgDataUrl = this.sanitizer.bypassSecurityTrustResourceUrl(loadedImage.transformed.base64);\n this.cd.markForCheck();\n }\n /**\n * @private\n * @param {?} error\n * @return {?}\n */\n loadImageError(error) {\n console.error(error);\n this.loadImageFailed.emit();\n }\n /**\n * @return {?}\n */\n imageLoadedInView() {\n if (this.loadedImage != null) {\n this.imageLoaded.emit(this.loadedImage);\n this.setImageMaxSizeRetries = 0;\n setTimeout(\n /**\n * @return {?}\n */\n () => this.checkImageMaxSizeRecursively());\n }\n }\n /**\n * @private\n * @return {?}\n */\n checkImageMaxSizeRecursively() {\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(Object.assign({}, this.maxSize));\n this.cd.markForCheck();\n } else {\n this.setImageMaxSizeRetries++;\n setTimeout(\n /**\n * @return {?}\n */\n () => this.checkImageMaxSizeRecursively(), 50);\n }\n }\n /**\n * @private\n * @return {?}\n */\n sourceImageLoaded() {\n var _a, _b;\n return ((_b = (_a = this.sourceImage) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.offsetWidth) > 0;\n }\n /**\n * @return {?}\n */\n onResize() {\n if (!this.loadedImage) {\n return;\n }\n this.resizeCropperPosition();\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n }\n /**\n * @private\n * @return {?}\n */\n activatePinchGesture() {\n if (this.Hammer) {\n /** @type {?} */\n const hammer = new this.Hammer(this.wrapper.nativeElement);\n hammer.get('pinch').set({\n enable: true\n });\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\n * @return {?}\n */\n resizeCropperPosition() {\n /** @type {?} */\n const sourceImageElement = this.sourceImage.nativeElement;\n if (this.maxSize.width !== sourceImageElement.offsetWidth || this.maxSize.height !== sourceImageElement.offsetHeight) {\n this.cropper.x1 = this.cropper.x1 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.x2 = this.cropper.x2 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.y1 = this.cropper.y1 * sourceImageElement.offsetHeight / this.maxSize.height;\n this.cropper.y2 = this.cropper.y2 * sourceImageElement.offsetHeight / this.maxSize.height;\n }\n }\n /**\n * @return {?}\n */\n resetCropperPosition() {\n this.cropperPositionService.resetCropperPosition(this.sourceImage, this.cropper, this.settings);\n this.doAutoCrop();\n this.imageVisible = true;\n }\n /**\n * @param {?} event\n * @return {?}\n */\n keyboardAccess(event) {\n this.changeKeyboardStepSize(event);\n this.keyboardMoveCropper(event);\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n changeKeyboardStepSize(event) {\n /** @type {?} */\n const key = +event.key;\n if (key >= 1 && key <= 9) {\n this.settings.stepSize = key;\n }\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n keyboardMoveCropper(event) {\n /** @type {?} */\n const keyboardWhiteList = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft'];\n if (!keyboardWhiteList.includes(event.key)) {\n return;\n }\n /** @type {?} */\n const moveType = event.shiftKey ? MoveTypes.Resize : MoveTypes.Move;\n /** @type {?} */\n const position = event.altKey ? getInvertedPositionForKey(event.key) : getPositionForKey(event.key);\n /** @type {?} */\n const moveEvent = getEventForKey(event.key, this.settings.stepSize);\n event.preventDefault();\n event.stopPropagation();\n this.startMove({\n clientX: 0,\n clientY: 0\n }, moveType, position);\n this.moveImg(moveEvent);\n this.moveStop();\n }\n /**\n * @param {?} event\n * @param {?} moveType\n * @param {?=} position\n * @return {?}\n */\n startMove(event, moveType, position = null) {\n var _a, _b;\n if (((_a = this.moveStart) === null || _a === void 0 ? void 0 : _a.active) && ((_b = this.moveStart) === null || _b === void 0 ? void 0 : _b.type) === MoveTypes.Pinch) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = Object.assign({\n active: true,\n type: moveType,\n position,\n clientX: this.cropperPositionService.getClientX(event),\n clientY: this.cropperPositionService.getClientY(event)\n }, this.cropper);\n }\n /**\n * @param {?} event\n * @return {?}\n */\n startPinch(event) {\n if (!this.safeImgDataUrl) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = Object.assign({\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 * @param {?} event\n * @return {?}\n */\n moveImg(event) {\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.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 }\n this.cd.detectChanges();\n }\n }\n /**\n * @param {?} event\n * @return {?}\n */\n onPinch(event) {\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.detectChanges();\n }\n }\n /**\n * @private\n * @return {?}\n */\n setMaxSize() {\n if (this.sourceImage) {\n /** @type {?} */\n const sourceImageElement = this.sourceImage.nativeElement;\n this.maxSize.width = sourceImageElement.offsetWidth;\n this.maxSize.height = sourceImageElement.offsetHeight;\n this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.maxSize.width / 2 + 'px)');\n }\n }\n /**\n * @private\n * @return {?}\n */\n setCropperScaledMinSize() {\n var _a, _b;\n if ((_b = (_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.transformed) === null || _b === void 0 ? void 0 : _b.image) {\n this.setCropperScaledMinWidth();\n this.setCropperScaledMinHeight();\n } else {\n this.settings.cropperScaledMinWidth = 20;\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n /**\n * @private\n * @return {?}\n */\n setCropperScaledMinWidth() {\n this.settings.cropperScaledMinWidth = this.cropperMinWidth > 0 ? Math.max(20, this.cropperMinWidth / this.loadedImage.transformed.image.width * this.maxSize.width) : 20;\n }\n /**\n * @private\n * @return {?}\n */\n setCropperScaledMinHeight() {\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(20, this.cropperMinHeight / this.loadedImage.transformed.image.height * this.maxSize.height);\n } else {\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n /**\n * @private\n * @return {?}\n */\n setCropperScaledMaxSize() {\n var _a, _b;\n if ((_b = (_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.transformed) === null || _b === void 0 ? void 0 : _b.image) {\n /** @type {?} */\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\n * @param {?=} maintainSize\n * @return {?}\n */\n checkCropperPosition(maintainSize = false) {\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 * @return {?}\n */\n moveStop() {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n /**\n * @return {?}\n */\n pinchStop() {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n /**\n * @private\n * @return {?}\n */\n doAutoCrop() {\n if (this.autoCrop) {\n this.crop();\n }\n }\n /**\n * @return {?}\n */\n crop() {\n var _a, _b;\n if (((_b = (_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.transformed) === null || _b === void 0 ? void 0 : _b.image) != null) {\n this.startCropImage.emit();\n /** @type {?} */\n const output = this.cropService.crop(this.sourceImage, this.loadedImage, this.cropper, this.settings);\n if (output != null) {\n this.imageCropped.emit(output);\n }\n return output;\n }\n return null;\n }\n}\nImageCropperComponent.ɵfac = function ImageCropperComponent_Factory(t) {\n return new (t || ImageCropperComponent)(ɵngcc0.ɵɵdirectiveInject(CropService), ɵngcc0.ɵɵdirectiveInject(CropperPositionService), ɵngcc0.ɵɵdirectiveInject(LoadImageService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DomSanitizer), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef));\n};\nImageCropperComponent.ɵcmp = /*@__PURE__*/ɵngcc0.ɵɵdefineComponent({\n type: ImageCropperComponent,\n selectors: [[\"image-cropper\"]],\n viewQuery: function ImageCropperComponent_Query(rf, ctx) {\n if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 5);\n }\n if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.sourceImage = _t.first);\n }\n },\n hostVars: 4,\n hostBindings: function ImageCropperComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"resize\", function ImageCropperComponent_resize_HostBindingHandler() {\n return ctx.onResize();\n }, false, ɵngcc0.ɵɵresolveWindow)(\"mousemove\", function ImageCropperComponent_mousemove_HostBindingHandler($event) {\n return ctx.moveImg($event);\n }, false, ɵngcc0.ɵɵresolveDocument)(\"touchmove\", function ImageCropperComponent_touchmove_HostBindingHandler($event) {\n return ctx.moveImg($event);\n }, false, ɵngcc0.ɵɵresolveDocument)(\"mouseup\", function ImageCropperComponent_mouseup_HostBindingHandler() {\n return ctx.moveStop();\n }, false, ɵngcc0.ɵɵresolveDocument)(\"touchend\", function ImageCropperComponent_touchend_HostBindingHandler() {\n return ctx.moveStop();\n }, false, ɵngcc0.ɵɵresolveDocument);\n }\n if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"text-align\", ctx.alignImage);\n ɵngcc0.ɵɵclassProp(\"disabled\", ctx.disabled);\n }\n },\n inputs: {\n format: \"format\",\n transform: \"transform\",\n maintainAspectRatio: \"maintainAspectRatio\",\n aspectRatio: \"aspectRatio\",\n resizeToWidth: \"resizeToWidth\",\n resizeToHeight: \"resizeToHeight\",\n cropperMinWidth: \"cropperMinWidth\",\n cropperMinHeight: \"cropperMinHeight\",\n cropperMaxHeight: \"cropperMaxHeight\",\n cropperMaxWidth: \"cropperMaxWidth\",\n cropperStaticWidth: \"cropperStaticWidth\",\n cropperStaticHeight: \"cropperStaticHeight\",\n canvasRotation: \"canvasRotation\",\n initialStepSize: \"initialStepSize\",\n roundCropper: \"roundCropper\",\n onlyScaleDown: \"onlyScaleDown\",\n imageQuality: \"imageQuality\",\n autoCrop: \"autoCrop\",\n backgroundColor: \"backgroundColor\",\n containWithinAspectRatio: \"containWithinAspectRatio\",\n hideResizeSquares: \"hideResizeSquares\",\n cropper: \"cropper\",\n alignImage: \"alignImage\",\n disabled: \"disabled\",\n imageChangedEvent: \"imageChangedEvent\",\n imageURL: \"imageURL\",\n imageBase64: \"imageBase64\",\n imageFile: \"imageFile\"\n },\n outputs: {\n imageCropped: \"imageCropped\",\n startCropImage: \"startCropImage\",\n imageLoaded: \"imageLoaded\",\n cropperReady: \"cropperReady\",\n loadImageFailed: \"loadImageFailed\"\n },\n features: [ɵngcc0.ɵɵNgOnChangesFeature],\n decls: 5,\n vars: 10,\n consts: [[\"wrapper\", \"\"], [\"class\", \"ngx-ic-source-image\", 3, \"src\", \"visibility\", \"transform\", \"load\", 4, \"ngIf\"], [1, \"ngx-ic-overlay\"], [\"class\", \"ngx-ic-cropper\", \"tabindex\", \"0\", 3, \"ngx-ic-round\", \"top\", \"left\", \"width\", \"height\", \"margin-left\", \"visibility\", \"keydown\", 4, \"ngIf\"], [1, \"ngx-ic-source-image\", 3, \"src\", \"load\"], [\"sourceImage\", \"\"], [\"tabindex\", \"0\", 1, \"ngx-ic-cropper\", 3, \"keydown\"], [1, \"ngx-ic-move\", 3, \"mousedown\", \"touchstart\"], [4, \"ngIf\"], [1, \"ngx-ic-resize\", \"ngx-ic-topleft\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-square\"], [1, \"ngx-ic-resize\", \"ngx-ic-top\"], [1, \"ngx-ic-resize\", \"ngx-ic-topright\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize\", \"ngx-ic-right\"], [1, \"ngx-ic-resize\", \"ngx-ic-bottomright\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize\", \"ngx-ic-bottom\"], [1, \"ngx-ic-resize\", \"ngx-ic-bottomleft\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize\", \"ngx-ic-left\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-top\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-right\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-bottom\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-left\", 3, \"mousedown\", \"touchstart\"]],\n template: function ImageCropperComponent_Template(rf, ctx) {\n if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", null, 0);\n ɵngcc0.ɵɵtemplate(2, ImageCropperComponent_img_2_Template, 2, 5, \"img\", 1);\n ɵngcc0.ɵɵelement(3, \"div\", 2);\n ɵngcc0.ɵɵtemplate(4, ImageCropperComponent_div_4_Template, 3, 15, \"div\", 3);\n ɵngcc0.ɵɵelementEnd();\n }\n if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"background\", ctx.imageVisible && ctx.backgroundColor);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.safeImgDataUrl);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.maxSize.width, \"px\")(\"height\", ctx.maxSize.height, \"px\")(\"margin-left\", ctx.alignImage === \"center\" ? ctx.marginLeft : null);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.imageVisible);\n }\n },\n dependencies: [ɵngcc2.NgIf],\n styles: [\"[_nghost-%COMP%]{display:flex;max-height:100%;max-width:100%;overflow:hidden;padding:5px;text-align:center}[_nghost-%COMP%], [_nghost-%COMP%] > div[_ngcontent-%COMP%]{position:relative;width:100%}[_nghost-%COMP%] > div[_ngcontent-%COMP%] img.ngx-ic-source-image[_ngcontent-%COMP%]{max-height:100%;max-width:100%;transform-origin:center}[_nghost-%COMP%] .ngx-ic-overlay[_ngcontent-%COMP%]{left:0;outline:var(--cropper-overlay-color,#fff) solid 100vw;pointer-events:none;position:absolute;top:0;touch-action:none}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]{background:transparent;color:#53535c;display:flex;outline:100vw solid hsla(0,0%,100%,.3);outline:var(--cropper-outline-color,hsla(0,0%,100%,.3)) solid 100vw;position:absolute;touch-action:none}@media (orientation:portrait){[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]{outline-width:100vh}}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]:after{border:1px dashed;bottom:0;color:inherit;content:\\\"\\\";left:0;opacity:.75;pointer-events:none;position:absolute;right:0;top:0;z-index:1}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-move[_ngcontent-%COMP%]{border:1px solid hsla(0,0%,100%,.5);cursor:move;width:100%}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]:focus .ngx-ic-move[_ngcontent-%COMP%]{border-color:#1e90ff;border-width:2px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize[_ngcontent-%COMP%]{display:inline-block;line-height:6px;opacity:.85;padding:8px;position:absolute;z-index:1}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize[_ngcontent-%COMP%] .ngx-ic-square[_ngcontent-%COMP%]{background:#53535c;border:1px solid hsla(0,0%,100%,.5);box-sizing:content-box;display:inline-block;height:6px;width:6px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-topleft[_ngcontent-%COMP%]{cursor:nwse-resize;left:-12px;top:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-top[_ngcontent-%COMP%]{cursor:ns-resize;left:calc(50% - 12px);top:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-topright[_ngcontent-%COMP%]{cursor:nesw-resize;right:-12px;top:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-right[_ngcontent-%COMP%]{cursor:ew-resize;right:-12px;top:calc(50% - 12px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-bottomright[_ngcontent-%COMP%]{bottom:-12px;cursor:nwse-resize;right:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-bottom[_ngcontent-%COMP%]{bottom:-12px;cursor:ns-resize;left:calc(50% - 12px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-bottomleft[_ngcontent-%COMP%]{bottom:-12px;cursor:nesw-resize;left:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-left[_ngcontent-%COMP%]{cursor:ew-resize;left:-12px;top:calc(50% - 12px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar[_ngcontent-%COMP%]{position:absolute;z-index:1}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-top[_ngcontent-%COMP%]{cursor:ns-resize;height:22px;left:11px;top:-11px;width:calc(100% - 22px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-right[_ngcontent-%COMP%]{cursor:ew-resize;height:calc(100% - 22px);right:-11px;top:11px;width:22px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-bottom[_ngcontent-%COMP%]{bottom:-11px;cursor:ns-resize;height:22px;left:11px;width:calc(100% - 22px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-left[_ngcontent-%COMP%]{cursor:ew-resize;height:calc(100% - 22px);left:-11px;top:11px;width:22px}[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%]{outline-color:transparent}[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%]:after{border-radius:100%;box-shadow:0 0 0 100vw hsla(0,0%,100%,.3);box-shadow:0 0 0 100vw var(--cropper-outline-color,hsla(0,0%,100%,.3))}@media (orientation:portrait){[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%]:after{box-shadow:0 0 0 100vh hsla(0,0%,100%,.3);box-shadow:0 0 0 100vh var(--cropper-outline-color,hsla(0,0%,100%,.3))}}[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%] .ngx-ic-move[_ngcontent-%COMP%]{border-radius:100%}.disabled[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-move[_ngcontent-%COMP%], .disabled[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize[_ngcontent-%COMP%], .disabled[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar[_ngcontent-%COMP%]{display:none}\"],\n changeDetection: 0\n});\n/** @nocollapse */\nImageCropperComponent.ctorParameters = () => [{\n type: CropService\n}, {\n type: CropperPositionService\n}, {\n type: LoadImageService\n}, {\n type: DomSanitizer\n}, {\n type: ChangeDetectorRef\n}];\nImageCropperComponent.propDecorators = {\n wrapper: [{\n type: ViewChild,\n args: ['wrapper', {\n static: true\n }]\n }],\n sourceImage: [{\n type: ViewChild,\n args: ['sourceImage', {\n static: false\n }]\n }],\n imageChangedEvent: [{\n type: Input\n }],\n imageURL: [{\n type: Input\n }],\n imageBase64: [{\n type: Input\n }],\n imageFile: [{\n type: Input\n }],\n format: [{\n type: Input\n }],\n transform: [{\n type: Input\n }],\n maintainAspectRatio: [{\n type: Input\n }],\n aspectRatio: [{\n type: Input\n }],\n resizeToWidth: [{\n type: Input\n }],\n resizeToHeight: [{\n type: Input\n }],\n cropperMinWidth: [{\n type: Input\n }],\n cropperMinHeight: [{\n type: Input\n }],\n cropperMaxHeight: [{\n type: Input\n }],\n cropperMaxWidth: [{\n type: Input\n }],\n cropperStaticWidth: [{\n type: Input\n }],\n cropperStaticHeight: [{\n type: Input\n }],\n canvasRotation: [{\n type: Input\n }],\n initialStepSize: [{\n type: Input\n }],\n roundCropper: [{\n type: Input\n }],\n onlyScaleDown: [{\n type: Input\n }],\n imageQuality: [{\n type: Input\n }],\n autoCrop: [{\n type: Input\n }],\n backgroundColor: [{\n type: Input\n }],\n containWithinAspectRatio: [{\n type: Input\n }],\n hideResizeSquares: [{\n type: Input\n }],\n cropper: [{\n type: Input\n }],\n alignImage: [{\n type: HostBinding,\n args: ['style.text-align']\n }, {\n type: Input\n }],\n disabled: [{\n type: HostBinding,\n args: ['class.disabled']\n }, {\n type: Input\n }],\n imageCropped: [{\n type: Output\n }],\n startCropImage: [{\n type: Output\n }],\n imageLoaded: [{\n type: Output\n }],\n cropperReady: [{\n type: Output\n }],\n loadImageFailed: [{\n type: Output\n }],\n onResize: [{\n type: HostListener,\n args: ['window:resize']\n }],\n moveImg: [{\n type: HostListener,\n args: ['document:mousemove', ['$event']]\n }, {\n type: HostListener,\n args: ['document:touchmove', ['$event']]\n }],\n moveStop: [{\n type: HostListener,\n args: ['document:mouseup']\n }, {\n type: HostListener,\n args: ['document:touchend']\n }]\n};\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ImageCropperComponent, [{\n type: Component,\n args: [{\n selector: 'image-cropper',\n template: \"<div [style.background]=\\\"imageVisible && backgroundColor\\\"\\n #wrapper\\n>\\n <img\\n #sourceImage\\n class=\\\"ngx-ic-source-image\\\"\\n *ngIf=\\\"safeImgDataUrl\\\"\\n [src]=\\\"safeImgDataUrl\\\"\\n [style.visibility]=\\\"imageVisible ? 'visible' : 'hidden'\\\"\\n [style.transform]=\\\"safeTransformStyle\\\"\\n (load)=\\\"imageLoadedInView()\\\"\\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 [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 </div>\\n <ng-container *ngIf=\\\"!hideResizeSquares\\\">\\n <span class=\\\"ngx-ic-resize ngx-ic-topleft\\\"\\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 (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 (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 (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 (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 (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 (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 (mousedown)=\\\"startMove($event, moveTypes.Resize, 'left')\\\"\\n (touchstart)=\\\"startMove($event, moveTypes.Resize, 'left')\\\">\\n </span>\\n </ng-container>\\n </div>\\n</div>\\n\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\":host{display:flex;max-height:100%;max-width:100%;overflow:hidden;padding:5px;text-align:center}:host,:host>div{position:relative;width:100%}:host>div img.ngx-ic-source-image{max-height:100%;max-width:100%;transform-origin:center}:host .ngx-ic-overlay{left:0;outline:var(--cropper-overlay-color,#fff) solid 100vw;pointer-events:none;position:absolute;top:0;touch-action:none}:host .ngx-ic-cropper{background:transparent;color:#53535c;display:flex;outline:100vw solid hsla(0,0%,100%,.3);outline:var(--cropper-outline-color,hsla(0,0%,100%,.3)) solid 100vw;position:absolute;touch-action:none}@media (orientation:portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{border:1px dashed;bottom:0;color:inherit;content:\\\"\\\";left:0;opacity:.75;pointer-events:none;position:absolute;right:0;top:0;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{border:1px solid hsla(0,0%,100%,.5);cursor:move;width:100%}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{display:inline-block;line-height:6px;opacity:.85;padding:8px;position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{background:#53535c;border:1px solid hsla(0,0%,100%,.5);box-sizing:content-box;display:inline-block;height:6px;width:6px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topleft{cursor:nwse-resize;left:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-top{cursor:ns-resize;left:calc(50% - 12px);top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topright{cursor:nesw-resize;right:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-right{cursor:ew-resize;right:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomright{bottom:-12px;cursor:nwse-resize;right:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottom{bottom:-12px;cursor:ns-resize;left:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomleft{bottom:-12px;cursor:nesw-resize;left:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-left{cursor:ew-resize;left:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize-bar{position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-top{cursor:ns-resize;height:22px;left:11px;top:-11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-right{cursor:ew-resize;height:calc(100% - 22px);right:-11px;top:11px;width:22px}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-bottom{bottom:-11px;cursor:ns-resize;height:22px;left:11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-left{cursor:ew-resize;height:calc(100% - 22px);left:-11px;top:11px;width:22px}: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 hsla(0,0%,100%,.3);box-shadow:0 0 0 100vw var(--cropper-outline-color,hsla(0,0%,100%,.3))}@media (orientation:portrait){:host .ngx-ic-cropper.ngx-ic-round:after{box-shadow:0 0 0 100vh hsla(0,0%,100%,.3);box-shadow:0 0 0 100vh var(--cropper-outline-color,hsla(0,0%,100%,.3))}}:host .ngx-ic-cropper.ngx-ic-round .ngx-ic-move{border-radius:100%}:host.disabled .ngx-ic-cropper .ngx-ic-move,:host.disabled .ngx-ic-cropper .ngx-ic-resize,:host.disabled .ngx-ic-cropper .ngx-ic-resize-bar{display:none}\"]\n }]\n }], function () {\n return [{\n type: CropService\n }, {\n type: CropperPositionService\n }, {\n type: LoadImageService\n }, {\n type: ɵngcc1.DomSanitizer\n }, {\n type: ɵngcc0.ChangeDetectorRef\n }];\n }, {\n format: [{\n type: Input\n }],\n transform: [{\n type: Input\n }],\n maintainAspectRatio: [{\n type: Input\n }],\n aspectRatio: [{\n type: Input\n }],\n resizeToWidth: [{\n type: Input\n }],\n resizeToHeight: [{\n type: Input\n }],\n cropperMinWidth: [{\n type: Input\n }],\n cropperMinHeight: [{\n type: Input\n }],\n cropperMaxHeight: [{\n type: Input\n }],\n cropperMaxWidth: [{\n type: Input\n }],\n cropperStaticWidth: [{\n type: Input\n }],\n cropperStaticHeight: [{\n type: Input\n }],\n canvasRotation: [{\n type: Input\n }],\n initialStepSize: [{\n type: Input\n }],\n roundCropper: [{\n type: Input\n }],\n onlyScaleDown: [{\n type: Input\n }],\n imageQuality: [{\n type: Input\n }],\n autoCrop: [{\n type: Input\n }],\n backgroundColor: [{\n type: Input\n }],\n containWithinAspectRatio: [{\n type: Input\n }],\n hideResizeSquares: [{\n type: Input\n }],\n cropper: [{\n type: Input\n }],\n alignImage: [{\n type: HostBinding,\n args: ['style.text-align']\n }, {\n type: Input\n }],\n disabled: [{\n type: HostBinding,\n args: ['class.disabled']\n }, {\n type: Input\n }],\n imageCropped: [{\n type: Output\n }],\n startCropImage: [{\n type: Output\n }],\n imageLoaded: [{\n type: Output\n }],\n cropperReady: [{\n type: Output\n }],\n loadImageFailed: [{\n type: Output\n }],\n /**\n * @return {?}\n */\n onResize: [{\n type: HostListener,\n args: ['window:resize']\n }],\n /**\n * @param {?} event\n * @return {?}\n */\n moveImg: [{\n type: HostListener,\n args: ['document:mousemove', ['$event']]\n }, {\n type: HostListener,\n args: ['document:touchmove', ['$event']]\n }],\n /**\n * @return {?}\n */\n moveStop: [{\n type: HostListener,\n args: ['document:mouseup']\n }, {\n type: HostListener,\n args: ['document:touchend']\n }],\n wrapper: [{\n type: ViewChild,\n args: ['wrapper', {\n static: true\n }]\n }],\n sourceImage: [{\n type: ViewChild,\n args: ['sourceImage', {\n static: false\n }]\n }],\n imageChangedEvent: [{\n type: Input\n }],\n imageURL: [{\n type: Input\n }],\n imageBase64: [{\n type: Input\n }],\n imageFile: [{\n type: Input\n }]\n });\n})();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.Hammer;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.settings;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.setImageMaxSizeRetries;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.moveStart;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.loadedImage;\n /** @type {?} */\n ImageCropperComponent.prototype.safeImgDataUrl;\n /** @type {?} */\n ImageCropperComponent.prototype.safeTransformStyle;\n /** @type {?} */\n ImageCropperComponent.prototype.marginLeft;\n /** @type {?} */\n ImageCropperComponent.prototype.maxSize;\n /** @type {?} */\n ImageCropperComponent.prototype.moveTypes;\n /** @type {?} */\n ImageCropperComponent.prototype.imageVisible;\n /** @type {?} */\n ImageCropperComponent.prototype.wrapper;\n /** @type {?} */\n ImageCropperComponent.prototype.sourceImage;\n /** @type {?} */\n ImageCropperComponent.prototype.imageChangedEvent;\n /** @type {?} */\n ImageCropperComponent.prototype.imageURL;\n /** @type {?} */\n ImageCropperComponent.prototype.imageBase64;\n /** @type {?} */\n ImageCropperComponent.prototype.imageFile;\n /** @type {?} */\n ImageCropperComponent.prototype.format;\n /** @type {?} */\n ImageCropperComponent.prototype.transform;\n /** @type {?} */\n ImageCropperComponent.prototype.maintainAspectRatio;\n /** @type {?} */\n ImageCropperComponent.prototype.aspectRatio;\n /** @type {?} */\n ImageCropperComponent.prototype.resizeToWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.resizeToHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMinWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMinHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMaxHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMaxWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperStaticWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperStaticHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.canvasRotation;\n /** @type {?} */\n ImageCropperComponent.prototype.initialStepSize;\n /** @type {?} */\n ImageCropperComponent.prototype.roundCropper;\n /** @type {?} */\n ImageCropperComponent.prototype.onlyScaleDown;\n /** @type {?} */\n ImageCropperComponent.prototype.imageQuality;\n /** @type {?} */\n ImageCropperComponent.prototype.autoCrop;\n /** @type {?} */\n ImageCropperComponent.prototype.backgroundColor;\n /** @type {?} */\n ImageCropperComponent.prototype.containWithinAspectRatio;\n /** @type {?} */\n ImageCropperComponent.prototype.hideResizeSquares;\n /** @type {?} */\n ImageCropperComponent.prototype.cropper;\n /** @type {?} */\n ImageCropperComponent.prototype.alignImage;\n /** @type {?} */\n ImageCropperComponent.prototype.disabled;\n /** @type {?} */\n ImageCropperComponent.prototype.imageCropped;\n /** @type {?} */\n ImageCropperComponent.prototype.startCropImage;\n /** @type {?} */\n ImageCropperComponent.prototype.imageLoaded;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperReady;\n /** @type {?} */\n ImageCropperComponent.prototype.loadImageFailed;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.cropService;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.cropperPositionService;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.loadImageService;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.sanitizer;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.cd;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/image-cropper.module.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass ImageCropperModule {}\nImageCropperModule.ɵfac = function ImageCropperModule_Factory(t) {\n return new (t || ImageCropperModule)();\n};\nImageCropperModule.ɵmod = /*@__PURE__*/ɵngcc0.ɵɵdefineNgModule({\n type: ImageCropperModule\n});\nImageCropperModule.ɵinj = /*@__PURE__*/ɵngcc0.ɵɵdefineInjector({\n imports: [CommonModule]\n});\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ImageCropperModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n declarations: [ImageCropperComponent],\n exports: [ImageCropperComponent]\n }]\n }], null, null);\n})();\n(function () {\n (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ImageCropperModule, {\n declarations: function () {\n return [ImageCropperComponent];\n },\n imports: function () {\n return [CommonModule];\n },\n exports: function () {\n return [ImageCropperComponent];\n }\n });\n})();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/interfaces/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/blob.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} base64Image\n * @return {?}\n */\nfunction base64ToFile(base64Image) {\n /** @type {?} */\n const split = base64Image.split(',');\n /** @type {?} */\n const type = split[0].replace('data:', '').replace(';base64', '');\n /** @type {?} */\n const byteString = atob(split[1]);\n /** @type {?} */\n const ab = new ArrayBuffer(byteString.length);\n /** @type {?} */\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], {\n type\n });\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: public-api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: ngx-image-cropper.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { ImageCropperComponent, ImageCropperModule, base64ToFile, resizeCanvas, CropService as ɵa, CropperPositionService as ɵb, LoadImageService as ɵc };","map":{"version":3,"names":["Injectable","ɵɵdefineInjectable","EventEmitter","isDevMode","Component","ChangeDetectionStrategy","ChangeDetectorRef","ViewChild","Input","HostBinding","Output","HostListener","NgModule","DomSanitizer","__awaiter","CommonModule","ɵngcc0","ɵngcc1","ɵngcc2","_c0","_c1","ImageCropperComponent_img_2_Template","rf","ctx","_r5","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","ImageCropperComponent_img_2_Template_img_load_0_listener","ɵɵrestoreView","ctx_r4","ɵɵnextContext","ɵɵresetView","imageLoadedInView","ɵɵelementEnd","ctx_r1","ɵɵstyleProp","imageVisible","safeTransformStyle","ɵɵproperty","safeImgDataUrl","ɵɵsanitizeUrl","ImageCropperComponent_div_4_ng_container_2_Template","_r8","ɵɵelementContainerStart","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_1_listener","$event","ctx_r7","startMove","moveTypes","Resize","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_1_listener","ctx_r9","ɵɵelement","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_5_listener","ctx_r10","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_5_listener","ctx_r11","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_9_listener","ctx_r12","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_9_listener","ctx_r13","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_13_listener","ctx_r14","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_13_listener","ctx_r15","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_17_listener","ctx_r16","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_17_listener","ctx_r17","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_18_listener","ctx_r18","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_18_listener","ctx_r19","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_19_listener","ctx_r20","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_19_listener","ctx_r21","ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_20_listener","ctx_r22","ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_20_listener","ctx_r23","ɵɵelementContainerEnd","ImageCropperComponent_div_4_Template","_r25","ImageCropperComponent_div_4_Template_div_keydown_0_listener","ctx_r24","keyboardAccess","ImageCropperComponent_div_4_Template_div_mousedown_1_listener","ctx_r26","Move","ImageCropperComponent_div_4_Template_div_touchstart_1_listener","ctx_r27","ɵɵtemplate","ctx_r2","cropper","y1","x1","x2","y2","alignImage","marginLeft","ɵɵclassProp","roundCropper","ɵɵadvance","hideResizeSquares","CropperSettings","constructor","format","maintainAspectRatio","transform","aspectRatio","resizeToWidth","resizeToHeight","cropperMinWidth","cropperMinHeight","cropperMaxHeight","cropperMaxWidth","cropperStaticWidth","cropperStaticHeight","canvasRotation","initialStepSize","onlyScaleDown","imageQuality","autoCrop","backgroundColor","undefined","containWithinAspectRatio","cropperScaledMinWidth","cropperScaledMinHeight","cropperScaledMaxWidth","cropperScaledMaxHeight","stepSize","setOptions","options","Object","keys","filter","k","forEach","validateOptions","setOptionsFromChanges","changes","currentValue","Error","prototype","MoveStart","active","type","position","clientX","clientY","MoveTypes","Pinch","resizeCanvas","canvas","width","height","width_source","height_source","Math","round","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","getContext","img","getImageData","img2","createImageData","data","data2","j","i","center_y","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","xx_start","floor","yy_start","xx_stop","yy_stop","min","yy","dy","abs","center_x","w0","xx","dx","w","sqrt","pos_x","putImageData","CropService","crop","sourceImage","loadedImage","settings","imagePosition","getImagePosition","cropCanvas","document","createElement","fillStyle","fillRect","scaleX","scale","flipH","scaleY","flipV","transformedImage","transformed","setTransform","size","translate","rotate","PI","drawImage","image","output","cropperPosition","assign","offsetImagePosition","getOffsetImagePosition","resizeRatio","getResizeRatio","base64","toDataURL","getQuality","sourceImageElement","nativeElement","ratio","offsetWidth","out","max","exifTransform","offsetX","offsetY","original","ratioWidth","ratioHeight","ratios","Array","push","result","length","ɵfac","CropService_Factory","t","ɵprov","factory","token","providedIn","ngDevMode","ɵsetClassMetadata","args","CropperPositionService","resetCropperPosition","offsetHeight","cropperWidth","cropperHeight","cropperHeightWithAspectRatio","cropperWidthWithAspectRatio","move","event","moveStart","diffX","getClientX","diffY","getClientY","resize","maxSize","moveX","moveY","newWidth","newHeight","checkAspectRatio","overflowX","overflowY","overflowX1","overflowX2","overflowY1","overflowY2","_a","touches","CropperPositionService_Factory","testAutoOrientationImageURL","supportsAutomaticRotation","Promise","resolve","Image","onload","supported","src","getTransformationsFromExifData","exifRotationOrBase64Image","getExifRotation","flip","imageBase64","view","DataView","base64ToArrayBuffer","getUint16","byteLength","offset","marker","getUint32","little","tags","replace","binaryString","atob","len","bytes","Uint8Array","charCodeAt","buffer","LoadImageBase64","originalImage","originalBase64","LoadImageService","autoRotateSupported","loadImageFile","file","cropperSettings","reject","fileReader","FileReader","loadImage","target","then","catch","readAsDataURL","imageType","isValidImageType","loadBase64Image","test","loadImageFromURL","url","onerror","context","crossOrigin","res","transformImageBase64","autoRotate","complete","naturalWidth","naturalHeight","transformLoadedImage","originalSize","transformedSize","getTransformedSize","transformedBase64","loadImageFromBase64","minWidthToContain","minHeightToContain","LoadImageService_Factory","getPositionForKey","key","getInvertedPositionForKey","getEventForKey","ImageCropperComponent","cropService","cropperPositionService","loadImageService","sanitizer","cd","Hammer","window","setImageMaxSizeRetries","disabled","imageCropped","startCropImage","imageLoaded","cropperReady","loadImageFailed","reset","ngOnChanges","onChangesUpdateSettings","onChangesInputImage","setLoadedImage","err","loadImageError","setMaxSize","setCropperScaledMinSize","setCropperScaledMaxSize","checkCropperPosition","doAutoCrop","markForCheck","setCssTransform","imageChangedEvent","imageURL","imageFile","isValidImageChangedEvent","files","_b","_c","bypassSecurityTrustStyle","ngOnInit","activatePinchGesture","bypassSecurityTrustResourceUrl","error","console","emit","setTimeout","checkImageMaxSizeRecursively","sourceImageLoaded","onResize","resizeCropperPosition","hammer","wrapper","get","set","enable","on","onPinch","bind","pinchStop","startPinch","warn","changeKeyboardStepSize","keyboardMoveCropper","keyboardWhiteList","includes","moveType","shiftKey","altKey","moveEvent","preventDefault","stopPropagation","moveImg","moveStop","detectChanges","setCropperScaledMinWidth","setCropperScaledMinHeight","maintainSize","ImageCropperComponent_Factory","ɵɵdirectiveInject","ɵcmp","ɵɵdefineComponent","selectors","viewQuery","ImageCropperComponent_Query","ɵɵviewQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","first","hostVars","hostBindings","ImageCropperComponent_HostBindings","ImageCropperComponent_resize_HostBindingHandler","ɵɵresolveWindow","ImageCropperComponent_mousemove_HostBindingHandler","ɵɵresolveDocument","ImageCropperComponent_touchmove_HostBindingHandler","ImageCropperComponent_mouseup_HostBindingHandler","ImageCropperComponent_touchend_HostBindingHandler","inputs","outputs","features","ɵɵNgOnChangesFeature","decls","vars","consts","template","ImageCropperComponent_Template","dependencies","NgIf","styles","changeDetection","ctorParameters","propDecorators","static","selector","OnPush","ImageCropperModule","ImageCropperModule_Factory","ɵmod","ɵɵdefineNgModule","ɵinj","ɵɵdefineInjector","imports","declarations","exports","ngJitMode","ɵɵsetNgModuleScope","base64ToFile","base64Image","split","byteString","ab","ArrayBuffer","ia","Blob","ɵa","ɵb","ɵc"],"sources":["C:/Users/eudes.inacio/GabineteDigital/gabinete-digital-fo/node_modules/ngx-image-cropper/__ivy_ngcc__/fesm2015/ngx-image-cropper.js"],"sourcesContent":["import { Injectable, ɵɵdefineInjectable, EventEmitter, isDevMode, Component, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, Input, HostBinding, Output, HostListener, NgModule } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { __awaiter } from 'tslib';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/interfaces/cropper.settings.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/platform-browser';\nimport * as ɵngcc2 from '@angular/common';\n\nconst _c0 = [\"wrapper\"];\nconst _c1 = [\"sourceImage\"];\nfunction ImageCropperComponent_img_2_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"img\", 4, 5);\n ɵngcc0.ɵɵlistener(\"load\", function ImageCropperComponent_img_2_Template_img_load_0_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ɵngcc0.ɵɵresetView(ctx_r4.imageLoadedInView()); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r1.imageVisible ? \"visible\" : \"hidden\")(\"transform\", ctx_r1.safeTransformStyle);\n ɵngcc0.ɵɵproperty(\"src\", ctx_r1.safeImgDataUrl, ɵngcc0.ɵɵsanitizeUrl);\n} }\nfunction ImageCropperComponent_div_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 9);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r7.startMove($event, ctx_r7.moveTypes.Resize, \"topleft\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r9 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r9.startMove($event, ctx_r9.moveTypes.Resize, \"topleft\")); });\n ɵngcc0.ɵɵelement(2, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 11);\n ɵngcc0.ɵɵelement(4, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 12);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_5_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r10 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r10.startMove($event, ctx_r10.moveTypes.Resize, \"topright\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_5_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r11 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r11.startMove($event, ctx_r11.moveTypes.Resize, \"topright\")); });\n ɵngcc0.ɵɵelement(6, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"span\", 13);\n ɵngcc0.ɵɵelement(8, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"span\", 14);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_9_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r12 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r12.startMove($event, ctx_r12.moveTypes.Resize, \"bottomright\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_9_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r13 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r13.startMove($event, ctx_r13.moveTypes.Resize, \"bottomright\")); });\n ɵngcc0.ɵɵelement(10, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"span\", 15);\n ɵngcc0.ɵɵelement(12, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(13, \"span\", 16);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_13_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r14 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r14.startMove($event, ctx_r14.moveTypes.Resize, \"bottomleft\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_13_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r15 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r15.startMove($event, ctx_r15.moveTypes.Resize, \"bottomleft\")); });\n ɵngcc0.ɵɵelement(14, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(15, \"span\", 17);\n ɵngcc0.ɵɵelement(16, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(17, \"span\", 18);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_17_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r16 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r16.startMove($event, ctx_r16.moveTypes.Resize, \"top\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_17_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r17 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r17.startMove($event, ctx_r17.moveTypes.Resize, \"top\")); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(18, \"span\", 19);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_18_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r18 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r18.startMove($event, ctx_r18.moveTypes.Resize, \"right\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_18_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r19 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r19.startMove($event, ctx_r19.moveTypes.Resize, \"right\")); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(19, \"span\", 20);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_19_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r20 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r20.startMove($event, ctx_r20.moveTypes.Resize, \"bottom\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_19_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r21 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r21.startMove($event, ctx_r21.moveTypes.Resize, \"bottom\")); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(20, \"span\", 21);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_ng_container_2_Template_span_mousedown_20_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r22 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r22.startMove($event, ctx_r22.moveTypes.Resize, \"left\")); })(\"touchstart\", function ImageCropperComponent_div_4_ng_container_2_Template_span_touchstart_20_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r23 = ɵngcc0.ɵɵnextContext(2); return ɵngcc0.ɵɵresetView(ctx_r23.startMove($event, ctx_r23.moveTypes.Resize, \"left\")); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} }\nfunction ImageCropperComponent_div_4_Template(rf, ctx) { if (rf & 1) {\n const _r25 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 6);\n ɵngcc0.ɵɵlistener(\"keydown\", function ImageCropperComponent_div_4_Template_div_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r25); const ctx_r24 = ɵngcc0.ɵɵnextContext(); return ɵngcc0.ɵɵresetView(ctx_r24.keyboardAccess($event)); });\n ɵngcc0.ɵɵelementStart(1, \"div\", 7);\n ɵngcc0.ɵɵlistener(\"mousedown\", function ImageCropperComponent_div_4_Template_div_mousedown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r25); const ctx_r26 = ɵngcc0.ɵɵnextContext(); return ɵngcc0.ɵɵresetView(ctx_r26.startMove($event, ctx_r26.moveTypes.Move)); })(\"touchstart\", function ImageCropperComponent_div_4_Template_div_touchstart_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r25); const ctx_r27 = ɵngcc0.ɵɵnextContext(); return ɵngcc0.ɵɵresetView(ctx_r27.startMove($event, ctx_r27.moveTypes.Move)); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ImageCropperComponent_div_4_ng_container_2_Template, 21, 0, \"ng-container\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"top\", ctx_r2.cropper.y1, \"px\")(\"left\", ctx_r2.cropper.x1, \"px\")(\"width\", ctx_r2.cropper.x2 - ctx_r2.cropper.x1, \"px\")(\"height\", ctx_r2.cropper.y2 - ctx_r2.cropper.y1, \"px\")(\"margin-left\", ctx_r2.alignImage === \"center\" ? ctx_r2.marginLeft : null)(\"visibility\", ctx_r2.imageVisible ? \"visible\" : \"hidden\");\n ɵngcc0.ɵɵclassProp(\"ngx-ic-round\", ctx_r2.roundCropper);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r2.hideResizeSquares);\n} }\nclass CropperSettings {\n constructor() {\n // From options\n this.format = 'png';\n this.maintainAspectRatio = true;\n this.transform = {};\n this.aspectRatio = 1;\n this.resizeToWidth = 0;\n this.resizeToHeight = 0;\n this.cropperMinWidth = 0;\n this.cropperMinHeight = 0;\n this.cropperMaxHeight = 0;\n this.cropperMaxWidth = 0;\n this.cropperStaticWidth = 0;\n this.cropperStaticHeight = 0;\n this.canvasRotation = 0;\n this.initialStepSize = 3;\n this.roundCropper = false;\n this.onlyScaleDown = false;\n this.imageQuality = 92;\n this.autoCrop = true;\n this.backgroundColor = undefined;\n this.containWithinAspectRatio = false;\n this.hideResizeSquares = false;\n this.alignImage = 'center';\n // Internal\n this.cropperScaledMinWidth = 20;\n this.cropperScaledMinHeight = 20;\n this.cropperScaledMaxWidth = 20;\n this.cropperScaledMaxHeight = 20;\n this.stepSize = this.initialStepSize;\n }\n /**\n * @param {?} options\n * @return {?}\n */\n setOptions(options) {\n Object.keys(options)\n .filter((/**\n * @param {?} k\n * @return {?}\n */\n (k) => k in this))\n .forEach((/**\n * @param {?} k\n * @return {?}\n */\n (k) => this[k] = options[k]));\n this.validateOptions();\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n setOptionsFromChanges(changes) {\n Object.keys(changes)\n .filter((/**\n * @param {?} k\n * @return {?}\n */\n (k) => k in this))\n .forEach((/**\n * @param {?} k\n * @return {?}\n */\n (k) => this[k] = changes[k].currentValue));\n this.validateOptions();\n }\n /**\n * @private\n * @return {?}\n */\n validateOptions() {\n if (this.maintainAspectRatio && !this.aspectRatio) {\n throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');\n }\n }\n}\nif (false) {\n /** @type {?} */\n CropperSettings.prototype.format;\n /** @type {?} */\n CropperSettings.prototype.maintainAspectRatio;\n /** @type {?} */\n CropperSettings.prototype.transform;\n /** @type {?} */\n CropperSettings.prototype.aspectRatio;\n /** @type {?} */\n CropperSettings.prototype.resizeToWidth;\n /** @type {?} */\n CropperSettings.prototype.resizeToHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperMinWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperMinHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperMaxHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperMaxWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperStaticWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperStaticHeight;\n /** @type {?} */\n CropperSettings.prototype.canvasRotation;\n /** @type {?} */\n CropperSettings.prototype.initialStepSize;\n /** @type {?} */\n CropperSettings.prototype.roundCropper;\n /** @type {?} */\n CropperSettings.prototype.onlyScaleDown;\n /** @type {?} */\n CropperSettings.prototype.imageQuality;\n /** @type {?} */\n CropperSettings.prototype.autoCrop;\n /** @type {?} */\n CropperSettings.prototype.backgroundColor;\n /** @type {?} */\n CropperSettings.prototype.containWithinAspectRatio;\n /** @type {?} */\n CropperSettings.prototype.hideResizeSquares;\n /** @type {?} */\n CropperSettings.prototype.alignImage;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMinWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMinHeight;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMaxWidth;\n /** @type {?} */\n CropperSettings.prototype.cropperScaledMaxHeight;\n /** @type {?} */\n CropperSettings.prototype.stepSize;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/interfaces/move-start.interface.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction MoveStart() { }\nif (false) {\n /** @type {?} */\n MoveStart.prototype.active;\n /** @type {?} */\n MoveStart.prototype.type;\n /** @type {?} */\n MoveStart.prototype.position;\n /** @type {?} */\n MoveStart.prototype.x1;\n /** @type {?} */\n MoveStart.prototype.y1;\n /** @type {?} */\n MoveStart.prototype.x2;\n /** @type {?} */\n MoveStart.prototype.y2;\n /** @type {?} */\n MoveStart.prototype.clientX;\n /** @type {?} */\n MoveStart.prototype.clientY;\n}\n/** @enum {string} */\nconst MoveTypes = {\n Move: \"move\",\n Resize: \"resize\",\n Pinch: \"pinch\",\n};\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/resize.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\n/**\n * @param {?} canvas\n * @param {?} width\n * @param {?} height\n * @return {?}\n */\nfunction resizeCanvas(canvas, width, height) {\n /** @type {?} */\n const width_source = canvas.width;\n /** @type {?} */\n const height_source = canvas.height;\n width = Math.round(width);\n height = Math.round(height);\n /** @type {?} */\n const ratio_w = width_source / width;\n /** @type {?} */\n const ratio_h = height_source / height;\n /** @type {?} */\n const ratio_w_half = Math.ceil(ratio_w / 2);\n /** @type {?} */\n const ratio_h_half = Math.ceil(ratio_h / 2);\n /** @type {?} */\n const ctx = canvas.getContext('2d');\n if (ctx) {\n /** @type {?} */\n const img = ctx.getImageData(0, 0, width_source, height_source);\n /** @type {?} */\n const img2 = ctx.createImageData(width, height);\n /** @type {?} */\n const data = img.data;\n /** @type {?} */\n const data2 = img2.data;\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n /** @type {?} */\n const x2 = (i + j * width) * 4;\n /** @type {?} */\n const center_y = j * ratio_h;\n /** @type {?} */\n let weight = 0;\n /** @type {?} */\n let weights = 0;\n /** @type {?} */\n let weights_alpha = 0;\n /** @type {?} */\n let gx_r = 0;\n /** @type {?} */\n let gx_g = 0;\n /** @type {?} */\n let gx_b = 0;\n /** @type {?} */\n let gx_a = 0;\n /** @type {?} */\n const xx_start = Math.floor(i * ratio_w);\n /** @type {?} */\n const yy_start = Math.floor(j * ratio_h);\n /** @type {?} */\n let xx_stop = Math.ceil((i + 1) * ratio_w);\n /** @type {?} */\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 for (let yy = yy_start; yy < yy_stop; yy++) {\n /** @type {?} */\n const dy = Math.abs(center_y - yy) / ratio_h_half;\n /** @type {?} */\n const center_x = i * ratio_w;\n /** @type {?} */\n const w0 = dy * dy;\n for (let xx = xx_start; xx < xx_stop; xx++) {\n /** @type {?} */\n const dx = Math.abs(center_x - xx) / ratio_w_half;\n /** @type {?} */\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 /** @type {?} */\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 canvas.width = width;\n canvas.height = height;\n //draw\n ctx.putImageData(img2, 0, 0);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/services/crop.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass CropService {\n /**\n * @param {?} sourceImage\n * @param {?} loadedImage\n * @param {?} cropper\n * @param {?} settings\n * @return {?}\n */\n crop(sourceImage, loadedImage, cropper, settings) {\n /** @type {?} */\n const imagePosition = this.getImagePosition(sourceImage, loadedImage, cropper, settings);\n /** @type {?} */\n const width = imagePosition.x2 - imagePosition.x1;\n /** @type {?} */\n const height = imagePosition.y2 - imagePosition.y1;\n /** @type {?} */\n const cropCanvas = (/** @type {?} */ (document.createElement('canvas')));\n cropCanvas.width = width;\n cropCanvas.height = height;\n /** @type {?} */\n const ctx = cropCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n if (settings.backgroundColor != null) {\n ctx.fillStyle = settings.backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n /** @type {?} */\n const scaleX = (settings.transform.scale || 1) * (settings.transform.flipH ? -1 : 1);\n /** @type {?} */\n const scaleY = (settings.transform.scale || 1) * (settings.transform.flipV ? -1 : 1);\n /** @type {?} */\n const transformedImage = loadedImage.transformed;\n ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2, transformedImage.size.height / 2);\n ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);\n ctx.rotate((settings.transform.rotate || 0) * Math.PI / 180);\n ctx.drawImage(transformedImage.image, -transformedImage.size.width / 2, -transformedImage.size.height / 2);\n /** @type {?} */\n const output = {\n width, height,\n imagePosition,\n cropperPosition: Object.assign({}, cropper)\n };\n if (settings.containWithinAspectRatio) {\n output.offsetImagePosition = this.getOffsetImagePosition(sourceImage, loadedImage, cropper, settings);\n }\n /** @type {?} */\n const resizeRatio = this.getResizeRatio(width, height, settings);\n if (resizeRatio !== 1) {\n output.width = Math.round(width * resizeRatio);\n output.height = settings.maintainAspectRatio\n ? Math.round(output.width / settings.aspectRatio)\n : Math.round(height * resizeRatio);\n resizeCanvas(cropCanvas, output.width, output.height);\n }\n output.base64 = cropCanvas.toDataURL('image/' + settings.format, this.getQuality(settings));\n return output;\n }\n /**\n * @private\n * @param {?} sourceImage\n * @param {?} loadedImage\n * @param {?} cropper\n * @param {?} settings\n * @return {?}\n */\n getImagePosition(sourceImage, loadedImage, cropper, settings) {\n /** @type {?} */\n const sourceImageElement = sourceImage.nativeElement;\n /** @type {?} */\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n /** @type {?} */\n const out = {\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 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 return out;\n }\n /**\n * @private\n * @param {?} sourceImage\n * @param {?} loadedImage\n * @param {?} cropper\n * @param {?} settings\n * @return {?}\n */\n getOffsetImagePosition(sourceImage, loadedImage, cropper, settings) {\n /** @type {?} */\n const canvasRotation = settings.canvasRotation + loadedImage.exifTransform.rotate;\n /** @type {?} */\n const sourceImageElement = sourceImage.nativeElement;\n /** @type {?} */\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n /** @type {?} */\n let offsetX;\n /** @type {?} */\n let offsetY;\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 }\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 /** @type {?} */\n const out = {\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 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 return out;\n }\n /**\n * @param {?} width\n * @param {?} height\n * @param {?} settings\n * @return {?}\n */\n getResizeRatio(width, height, settings) {\n /** @type {?} */\n const ratioWidth = settings.resizeToWidth / width;\n /** @type {?} */\n const ratioHeight = settings.resizeToHeight / height;\n /** @type {?} */\n const ratios = new Array();\n if (settings.resizeToWidth > 0) {\n ratios.push(ratioWidth);\n }\n if (settings.resizeToHeight > 0) {\n ratios.push(ratioHeight);\n }\n /** @type {?} */\n const result = ratios.length === 0 ? 1 : Math.min(...ratios);\n if (result > 1 && !settings.onlyScaleDown) {\n return result;\n }\n return Math.min(result, 1);\n }\n /**\n * @param {?} settings\n * @return {?}\n */\n getQuality(settings) {\n return Math.min(1, Math.max(0, settings.imageQuality / 100));\n }\n}\nCropService.ɵfac = function CropService_Factory(t) { return new (t || CropService)(); };\n/** @nocollapse */ CropService.ɵprov = ɵɵdefineInjectable({ factory: function CropService_Factory() { return new CropService(); }, token: CropService, providedIn: \"root\" });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CropService, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/services/cropper-position.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass CropperPositionService {\n /**\n * @param {?} sourceImage\n * @param {?} cropperPosition\n * @param {?} settings\n * @return {?}\n */\n resetCropperPosition(sourceImage, cropperPosition, settings) {\n if (!(sourceImage === null || sourceImage === void 0 ? void 0 : sourceImage.nativeElement)) {\n return;\n }\n /** @type {?} */\n const sourceImageElement = sourceImage.nativeElement;\n if (settings.cropperStaticHeight && settings.cropperStaticWidth) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = sourceImageElement.offsetWidth > settings.cropperStaticWidth ?\n settings.cropperStaticWidth : sourceImageElement.offsetWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = sourceImageElement.offsetHeight > settings.cropperStaticHeight ?\n settings.cropperStaticHeight : sourceImageElement.offsetHeight;\n }\n else {\n /** @type {?} */\n const cropperWidth = Math.min(settings.cropperScaledMaxWidth, sourceImageElement.offsetWidth);\n /** @type {?} */\n const cropperHeight = Math.min(settings.cropperScaledMaxHeight, sourceImageElement.offsetHeight);\n if (!settings.maintainAspectRatio) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n }\n else if (sourceImageElement.offsetWidth / settings.aspectRatio < sourceImageElement.offsetHeight) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n /** @type {?} */\n const cropperHeightWithAspectRatio = cropperWidth / settings.aspectRatio;\n cropperPosition.y1 = (sourceImageElement.offsetHeight - cropperHeightWithAspectRatio) / 2;\n cropperPosition.y2 = cropperPosition.y1 + cropperHeightWithAspectRatio;\n }\n else {\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n /** @type {?} */\n const cropperWidthWithAspectRatio = cropperHeight * settings.aspectRatio;\n cropperPosition.x1 = (sourceImageElement.offsetWidth - cropperWidthWithAspectRatio) / 2;\n cropperPosition.x2 = cropperPosition.x1 + cropperWidthWithAspectRatio;\n }\n }\n }\n /**\n * @param {?} event\n * @param {?} moveStart\n * @param {?} cropperPosition\n * @return {?}\n */\n move(event, moveStart, cropperPosition) {\n /** @type {?} */\n const diffX = this.getClientX(event) - moveStart.clientX;\n /** @type {?} */\n const diffY = this.getClientY(event) - moveStart.clientY;\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 * @param {?} event\n * @param {?} moveStart\n * @param {?} cropperPosition\n * @param {?} maxSize\n * @param {?} settings\n * @return {?}\n */\n resize(event, moveStart, cropperPosition, maxSize, settings) {\n /** @type {?} */\n const moveX = this.getClientX(event) - moveStart.clientX;\n /** @type {?} */\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), cropperPosition.x2 - settings.cropperScaledMinWidth);\n break;\n case 'topleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth), cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight), cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'top':\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight), cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'topright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth), cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight), cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'right':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth), cropperPosition.x1 + settings.cropperScaledMinWidth);\n break;\n case 'bottomright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth), cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight), cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottom':\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight), cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottomleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth), cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight), cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'center':\n /** @type {?} */\n const scale = event.scale;\n /** @type {?} */\n const newWidth = Math.min(Math.max(settings.cropperScaledMinWidth, (Math.abs(moveStart.x2 - moveStart.x1)) * scale), settings.cropperScaledMaxWidth);\n /** @type {?} */\n const newHeight = Math.min(Math.max(settings.cropperScaledMinHeight, (Math.abs(moveStart.y2 - moveStart.y1)) * scale), 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 }\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 }\n else if (cropperPosition.y2 > maxSize.height) {\n cropperPosition.y1 -= (cropperPosition.y2 - maxSize.height);\n cropperPosition.y2 = maxSize.height;\n }\n break;\n }\n if (settings.maintainAspectRatio) {\n this.checkAspectRatio(moveStart.position, cropperPosition, maxSize, settings);\n }\n }\n /**\n * @param {?} position\n * @param {?} cropperPosition\n * @param {?} maxSize\n * @param {?} settings\n * @return {?}\n */\n checkAspectRatio(position, cropperPosition, maxSize, settings) {\n /** @type {?} */\n let overflowX = 0;\n /** @type {?} */\n let overflowY = 0;\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 /** @type {?} */\n const overflowX1 = Math.max(0 - cropperPosition.x1, 0);\n /** @type {?} */\n const overflowX2 = Math.max(cropperPosition.x2 - maxSize.width, 0);\n /** @type {?} */\n const overflowY1 = Math.max(cropperPosition.y2 - maxSize.height, 0);\n /** @type {?} */\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 * @param {?} event\n * @return {?}\n */\n getClientX(event) {\n var _a;\n return ((_a = event.touches) === null || _a === void 0 ? void 0 : _a[0].clientX) || event.clientX || 0;\n }\n /**\n * @param {?} event\n * @return {?}\n */\n getClientY(event) {\n var _a;\n return ((_a = event.touches) === null || _a === void 0 ? void 0 : _a[0].clientY) || event.clientY || 0;\n }\n}\nCropperPositionService.ɵfac = function CropperPositionService_Factory(t) { return new (t || CropperPositionService)(); };\n/** @nocollapse */ CropperPositionService.ɵprov = ɵɵdefineInjectable({ factory: function CropperPositionService_Factory() { return new CropperPositionService(); }, token: CropperPositionService, providedIn: \"root\" });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CropperPositionService, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/exif.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\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\n/** @type {?} */\nconst testAutoOrientationImageURL = 'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +\n 'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +\n 'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +\n 'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +\n 'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +\n 'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';\n/**\n * @return {?}\n */\nfunction supportsAutomaticRotation() {\n return new Promise((/**\n * @param {?} resolve\n * @return {?}\n */\n (resolve) => {\n /** @type {?} */\n const img = new Image();\n img.onload = (/**\n * @return {?}\n */\n () => {\n // Check if browser supports automatic image orientation:\n /** @type {?} */\n const supported = img.width === 1 && img.height === 2;\n resolve(supported);\n });\n img.src = testAutoOrientationImageURL;\n }));\n}\n/**\n * @param {?} exifRotationOrBase64Image\n * @return {?}\n */\nfunction getTransformationsFromExifData(exifRotationOrBase64Image) {\n if (typeof exifRotationOrBase64Image === 'string') {\n exifRotationOrBase64Image = getExifRotation(exifRotationOrBase64Image);\n }\n switch (exifRotationOrBase64Image) {\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/**\n * @param {?} imageBase64\n * @return {?}\n */\nfunction getExifRotation(imageBase64) {\n /** @type {?} */\n const view = new DataView(base64ToArrayBuffer(imageBase64));\n if (view.getUint16(0, false) !== 0xFFD8) {\n return -2;\n }\n /** @type {?} */\n const length = view.byteLength;\n /** @type {?} */\n let offset = 2;\n while (offset < length) {\n if (view.getUint16(offset + 2, false) <= 8)\n return -1;\n /** @type {?} */\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 /** @type {?} */\n const little = view.getUint16(offset += 6, false) == 0x4949;\n offset += view.getUint32(offset + 4, little);\n /** @type {?} */\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 }\n else if ((marker & 0xFF00) !== 0xFF00) {\n break;\n }\n else {\n offset += view.getUint16(offset, false);\n }\n }\n return -1;\n}\n/**\n * @param {?} imageBase64\n * @return {?}\n */\nfunction base64ToArrayBuffer(imageBase64) {\n imageBase64 = imageBase64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\n /** @type {?} */\n const binaryString = atob(imageBase64);\n /** @type {?} */\n const len = binaryString.length;\n /** @type {?} */\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/**\n * @fileoverview added by tsickle\n * Generated from: lib/services/load-image.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction LoadImageBase64() { }\nif (false) {\n /** @type {?} */\n LoadImageBase64.prototype.originalImage;\n /** @type {?} */\n LoadImageBase64.prototype.originalBase64;\n}\nclass LoadImageService {\n constructor() {\n this.autoRotateSupported = supportsAutomaticRotation();\n }\n /**\n * @param {?} file\n * @param {?} cropperSettings\n * @return {?}\n */\n loadImageFile(file, cropperSettings) {\n return new Promise((/**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const fileReader = new FileReader();\n fileReader.onload = (/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.loadImage(event.target.result, file.type, cropperSettings)\n .then(resolve)\n .catch(reject);\n });\n fileReader.readAsDataURL(file);\n }));\n }\n /**\n * @private\n * @param {?} imageBase64\n * @param {?} imageType\n * @param {?} cropperSettings\n * @return {?}\n */\n loadImage(imageBase64, imageType, cropperSettings) {\n if (!this.isValidImageType(imageType)) {\n return Promise.reject(new Error('Invalid image type'));\n }\n return this.loadBase64Image(imageBase64, cropperSettings);\n }\n /**\n * @private\n * @param {?} type\n * @return {?}\n */\n isValidImageType(type) {\n return /image\\/(png|jpg|jpeg|bmp|gif|tiff|webp)/.test(type);\n }\n /**\n * @param {?} url\n * @param {?} cropperSettings\n * @return {?}\n */\n loadImageFromURL(url, cropperSettings) {\n return new Promise((/**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const img = new Image();\n img.onerror = (/**\n * @return {?}\n */\n () => reject);\n img.onload = (/**\n * @return {?}\n */\n () => {\n /** @type {?} */\n const canvas = document.createElement('canvas');\n /** @type {?} */\n const context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0);\n this.loadBase64Image(canvas.toDataURL(), cropperSettings).then(resolve);\n });\n img.crossOrigin = 'anonymous';\n img.src = url;\n }));\n }\n /**\n * @param {?} imageBase64\n * @param {?} cropperSettings\n * @return {?}\n */\n loadBase64Image(imageBase64, cropperSettings) {\n return new Promise((/**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const originalImage = new Image();\n originalImage.onload = (/**\n * @return {?}\n */\n () => resolve({\n originalImage,\n originalBase64: imageBase64\n }));\n originalImage.onerror = reject;\n originalImage.src = imageBase64;\n })).then((/**\n * @param {?} res\n * @return {?}\n */\n (res) => this.transformImageBase64(res, cropperSettings)));\n }\n /**\n * @private\n * @param {?} res\n * @param {?} cropperSettings\n * @return {?}\n */\n transformImageBase64(res, cropperSettings) {\n return __awaiter(this, void 0, void 0, function* () {\n /** @type {?} */\n const autoRotate = yield this.autoRotateSupported;\n /** @type {?} */\n const exifTransform = yield getTransformationsFromExifData(autoRotate ? -1 : res.originalBase64);\n if (!res.originalImage || !res.originalImage.complete) {\n return Promise.reject(new Error('No image loaded'));\n }\n /** @type {?} */\n const loadedImage = {\n original: {\n base64: res.originalBase64,\n image: res.originalImage,\n size: {\n width: res.originalImage.naturalWidth,\n height: res.originalImage.naturalHeight\n }\n },\n exifTransform\n };\n return this.transformLoadedImage(loadedImage, cropperSettings);\n });\n }\n /**\n * @param {?} loadedImage\n * @param {?} cropperSettings\n * @return {?}\n */\n transformLoadedImage(loadedImage, cropperSettings) {\n return __awaiter(this, void 0, void 0, function* () {\n /** @type {?} */\n const canvasRotation = cropperSettings.canvasRotation + loadedImage.exifTransform.rotate;\n /** @type {?} */\n const originalSize = {\n width: loadedImage.original.image.naturalWidth,\n height: loadedImage.original.image.naturalHeight\n };\n if (canvasRotation === 0 && !loadedImage.exifTransform.flip && !cropperSettings.containWithinAspectRatio) {\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: Object.assign({}, originalSize)\n },\n transformed: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: Object.assign({}, originalSize)\n },\n exifTransform: loadedImage.exifTransform\n };\n }\n /** @type {?} */\n const transformedSize = this.getTransformedSize(originalSize, loadedImage.exifTransform, cropperSettings);\n /** @type {?} */\n const canvas = document.createElement('canvas');\n canvas.width = transformedSize.width;\n canvas.height = transformedSize.height;\n /** @type {?} */\n const ctx = canvas.getContext('2d');\n ctx.setTransform(loadedImage.exifTransform.flip ? -1 : 1, 0, 0, 1, canvas.width / 2, canvas.height / 2);\n ctx.rotate(Math.PI * (canvasRotation / 2));\n ctx.drawImage(loadedImage.original.image, -originalSize.width / 2, -originalSize.height / 2);\n /** @type {?} */\n const transformedBase64 = canvas.toDataURL();\n /** @type {?} */\n const transformedImage = yield this.loadImageFromBase64(transformedBase64);\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: Object.assign({}, originalSize)\n },\n transformed: {\n base64: transformedBase64,\n image: transformedImage,\n size: {\n width: transformedImage.width,\n height: transformedImage.height\n }\n },\n exifTransform: loadedImage.exifTransform\n };\n });\n }\n /**\n * @private\n * @param {?} imageBase64\n * @return {?}\n */\n loadImageFromBase64(imageBase64) {\n return new Promise(((/**\n * @param {?} resolve\n * @param {?} reject\n * @return {?}\n */\n (resolve, reject) => {\n /** @type {?} */\n const image = new Image();\n image.onload = (/**\n * @return {?}\n */\n () => resolve(image));\n image.onerror = reject;\n image.src = imageBase64;\n })));\n }\n /**\n * @private\n * @param {?} originalSize\n * @param {?} exifTransform\n * @param {?} cropperSettings\n * @return {?}\n */\n getTransformedSize(originalSize, exifTransform, cropperSettings) {\n /** @type {?} */\n const canvasRotation = cropperSettings.canvasRotation + exifTransform.rotate;\n if (cropperSettings.containWithinAspectRatio) {\n if (canvasRotation % 2) {\n /** @type {?} */\n const minWidthToContain = originalSize.width * cropperSettings.aspectRatio;\n /** @type {?} */\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 }\n else {\n /** @type {?} */\n const minWidthToContain = originalSize.height * cropperSettings.aspectRatio;\n /** @type {?} */\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 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}\nLoadImageService.ɵfac = function LoadImageService_Factory(t) { return new (t || LoadImageService)(); };\n/** @nocollapse */ LoadImageService.ɵprov = ɵɵdefineInjectable({ factory: function LoadImageService_Factory() { return new LoadImageService(); }, token: LoadImageService, providedIn: \"root\" });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LoadImageService, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return []; }, null); })();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n LoadImageService.prototype.autoRotateSupported;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/keyboard.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} key\n * @return {?}\n */\nfunction getPositionForKey(key) {\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/**\n * @param {?} key\n * @return {?}\n */\nfunction getInvertedPositionForKey(key) {\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/**\n * @param {?} key\n * @param {?} stepSize\n * @return {?}\n */\nfunction getEventForKey(key, stepSize) {\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/**\n * @fileoverview added by tsickle\n * Generated from: lib/component/image-cropper.component.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass ImageCropperComponent {\n /**\n * @param {?} cropService\n * @param {?} cropperPositionService\n * @param {?} loadImageService\n * @param {?} sanitizer\n * @param {?} cd\n */\n constructor(cropService, cropperPositionService, loadImageService, sanitizer, cd) {\n this.cropService = cropService;\n this.cropperPositionService = cropperPositionService;\n this.loadImageService = loadImageService;\n this.sanitizer = sanitizer;\n this.cd = cd;\n this.Hammer = (window === null || window === void 0 ? void 0 : window['Hammer']) || null;\n this.settings = new CropperSettings();\n this.setImageMaxSizeRetries = 0;\n this.marginLeft = '0px';\n this.moveTypes = MoveTypes;\n this.imageVisible = false;\n this.format = this.settings.format;\n this.transform = {};\n this.maintainAspectRatio = this.settings.maintainAspectRatio;\n this.aspectRatio = this.settings.aspectRatio;\n this.resizeToWidth = this.settings.resizeToWidth;\n this.resizeToHeight = this.settings.resizeToHeight;\n this.cropperMinWidth = this.settings.cropperMinWidth;\n this.cropperMinHeight = this.settings.cropperMinHeight;\n this.cropperMaxHeight = this.settings.cropperMaxHeight;\n this.cropperMaxWidth = this.settings.cropperMaxWidth;\n this.cropperStaticWidth = this.settings.cropperStaticWidth;\n this.cropperStaticHeight = this.settings.cropperStaticHeight;\n this.canvasRotation = this.settings.canvasRotation;\n this.initialStepSize = this.settings.initialStepSize;\n this.roundCropper = this.settings.roundCropper;\n this.onlyScaleDown = this.settings.onlyScaleDown;\n this.imageQuality = this.settings.imageQuality;\n this.autoCrop = this.settings.autoCrop;\n this.backgroundColor = this.settings.backgroundColor;\n this.containWithinAspectRatio = this.settings.containWithinAspectRatio;\n this.hideResizeSquares = this.settings.hideResizeSquares;\n this.cropper = {\n x1: -100,\n y1: -100,\n x2: 10000,\n y2: 10000\n };\n this.alignImage = this.settings.alignImage;\n this.disabled = false;\n this.imageCropped = new EventEmitter();\n this.startCropImage = new EventEmitter();\n this.imageLoaded = new EventEmitter();\n this.cropperReady = new EventEmitter();\n this.loadImageFailed = new EventEmitter();\n this.reset();\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n var _a;\n this.onChangesUpdateSettings(changes);\n this.onChangesInputImage(changes);\n if (((_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.original.image.complete) && (changes.containWithinAspectRatio || changes.canvasRotation)) {\n this.loadImageService\n .transformLoadedImage(this.loadedImage, this.settings)\n .then((/**\n * @param {?} res\n * @return {?}\n */\n (res) => this.setLoadedImage(res)))\n .catch((/**\n * @param {?} err\n * @return {?}\n */\n (err) => this.loadImageError(err)));\n }\n if (changes.cropper || changes.maintainAspectRatio || changes.aspectRatio) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n if (this.maintainAspectRatio && (changes.maintainAspectRatio || changes.aspectRatio)) {\n this.resetCropperPosition();\n }\n else if (changes.cropper) {\n this.checkCropperPosition(false);\n this.doAutoCrop();\n }\n this.cd.markForCheck();\n }\n if (changes.transform) {\n this.transform = this.transform || {};\n this.setCssTransform();\n this.doAutoCrop();\n }\n }\n /**\n * @private\n * @param {?} changes\n * @return {?}\n */\n onChangesUpdateSettings(changes) {\n this.settings.setOptionsFromChanges(changes);\n if (this.settings.cropperStaticHeight && this.settings.cropperStaticWidth) {\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\n * @param {?} changes\n * @return {?}\n */\n onChangesInputImage(changes) {\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\n * @return {?}\n */\n isValidImageChangedEvent() {\n var _a, _b, _c;\n return ((_c = (_b = (_a = this.imageChangedEvent) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.files) === null || _c === void 0 ? void 0 : _c.length) > 0;\n }\n /**\n * @private\n * @return {?}\n */\n setCssTransform() {\n this.safeTransformStyle = this.sanitizer.bypassSecurityTrustStyle('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 * @return {?}\n */\n ngOnInit() {\n this.settings.stepSize = this.initialStepSize;\n this.activatePinchGesture();\n }\n /**\n * @private\n * @return {?}\n */\n reset() {\n this.imageVisible = false;\n this.loadedImage = null;\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\n * @param {?} file\n * @return {?}\n */\n loadImageFile(file) {\n this.loadImageService\n .loadImageFile(file, this.settings)\n .then((/**\n * @param {?} res\n * @return {?}\n */\n (res) => this.setLoadedImage(res)))\n .catch((/**\n * @param {?} err\n * @return {?}\n */\n (err) => this.loadImageError(err)));\n }\n /**\n * @private\n * @param {?} imageBase64\n * @return {?}\n */\n loadBase64Image(imageBase64) {\n this.loadImageService\n .loadBase64Image(imageBase64, this.settings)\n .then((/**\n * @param {?} res\n * @return {?}\n */\n (res) => this.setLoadedImage(res)))\n .catch((/**\n * @param {?} err\n * @return {?}\n */\n (err) => this.loadImageError(err)));\n }\n /**\n * @private\n * @param {?} url\n * @return {?}\n */\n loadImageFromURL(url) {\n this.loadImageService\n .loadImageFromURL(url, this.settings)\n .then((/**\n * @param {?} res\n * @return {?}\n */\n (res) => this.setLoadedImage(res)))\n .catch((/**\n * @param {?} err\n * @return {?}\n */\n (err) => this.loadImageError(err)));\n }\n /**\n * @private\n * @param {?} loadedImage\n * @return {?}\n */\n setLoadedImage(loadedImage) {\n this.loadedImage = loadedImage;\n this.safeImgDataUrl = this.sanitizer.bypassSecurityTrustResourceUrl(loadedImage.transformed.base64);\n this.cd.markForCheck();\n }\n /**\n * @private\n * @param {?} error\n * @return {?}\n */\n loadImageError(error) {\n console.error(error);\n this.loadImageFailed.emit();\n }\n /**\n * @return {?}\n */\n imageLoadedInView() {\n if (this.loadedImage != null) {\n this.imageLoaded.emit(this.loadedImage);\n this.setImageMaxSizeRetries = 0;\n setTimeout((/**\n * @return {?}\n */\n () => this.checkImageMaxSizeRecursively()));\n }\n }\n /**\n * @private\n * @return {?}\n */\n checkImageMaxSizeRecursively() {\n if (this.setImageMaxSizeRetries > 40) {\n this.loadImageFailed.emit();\n }\n else if (this.sourceImageLoaded()) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n this.resetCropperPosition();\n this.cropperReady.emit(Object.assign({}, this.maxSize));\n this.cd.markForCheck();\n }\n else {\n this.setImageMaxSizeRetries++;\n setTimeout((/**\n * @return {?}\n */\n () => this.checkImageMaxSizeRecursively()), 50);\n }\n }\n /**\n * @private\n * @return {?}\n */\n sourceImageLoaded() {\n var _a, _b;\n return ((_b = (_a = this.sourceImage) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.offsetWidth) > 0;\n }\n /**\n * @return {?}\n */\n onResize() {\n if (!this.loadedImage) {\n return;\n }\n this.resizeCropperPosition();\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n }\n /**\n * @private\n * @return {?}\n */\n activatePinchGesture() {\n if (this.Hammer) {\n /** @type {?} */\n const hammer = new this.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 }\n else if (isDevMode()) {\n console.warn('[NgxImageCropper] Could not find HammerJS - Pinch Gesture won\\'t work');\n }\n }\n /**\n * @private\n * @return {?}\n */\n resizeCropperPosition() {\n /** @type {?} */\n const sourceImageElement = this.sourceImage.nativeElement;\n if (this.maxSize.width !== sourceImageElement.offsetWidth || this.maxSize.height !== sourceImageElement.offsetHeight) {\n this.cropper.x1 = this.cropper.x1 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.x2 = this.cropper.x2 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.y1 = this.cropper.y1 * sourceImageElement.offsetHeight / this.maxSize.height;\n this.cropper.y2 = this.cropper.y2 * sourceImageElement.offsetHeight / this.maxSize.height;\n }\n }\n /**\n * @return {?}\n */\n resetCropperPosition() {\n this.cropperPositionService.resetCropperPosition(this.sourceImage, this.cropper, this.settings);\n this.doAutoCrop();\n this.imageVisible = true;\n }\n /**\n * @param {?} event\n * @return {?}\n */\n keyboardAccess(event) {\n this.changeKeyboardStepSize(event);\n this.keyboardMoveCropper(event);\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n changeKeyboardStepSize(event) {\n /** @type {?} */\n const key = +event.key;\n if (key >= 1 && key <= 9) {\n this.settings.stepSize = key;\n }\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n keyboardMoveCropper(event) {\n /** @type {?} */\n const keyboardWhiteList = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft'];\n if (!(keyboardWhiteList.includes(event.key))) {\n return;\n }\n /** @type {?} */\n const moveType = event.shiftKey ? MoveTypes.Resize : MoveTypes.Move;\n /** @type {?} */\n const position = event.altKey ? getInvertedPositionForKey(event.key) : getPositionForKey(event.key);\n /** @type {?} */\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.moveImg(moveEvent);\n this.moveStop();\n }\n /**\n * @param {?} event\n * @param {?} moveType\n * @param {?=} position\n * @return {?}\n */\n startMove(event, moveType, position = null) {\n var _a, _b;\n if (((_a = this.moveStart) === null || _a === void 0 ? void 0 : _a.active) && ((_b = this.moveStart) === null || _b === void 0 ? void 0 : _b.type) === MoveTypes.Pinch) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = Object.assign({ active: true, type: moveType, position, clientX: this.cropperPositionService.getClientX(event), clientY: this.cropperPositionService.getClientY(event) }, this.cropper);\n }\n /**\n * @param {?} event\n * @return {?}\n */\n startPinch(event) {\n if (!this.safeImgDataUrl) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = Object.assign({ active: true, type: MoveTypes.Pinch, position: 'center', clientX: this.cropper.x1 + (this.cropper.x2 - this.cropper.x1) / 2, clientY: this.cropper.y1 + (this.cropper.y2 - this.cropper.y1) / 2 }, this.cropper);\n }\n /**\n * @param {?} event\n * @return {?}\n */\n moveImg(event) {\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.Move) {\n this.cropperPositionService.move(event, this.moveStart, this.cropper);\n this.checkCropperPosition(true);\n }\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 }\n this.cd.detectChanges();\n }\n }\n /**\n * @param {?} event\n * @return {?}\n */\n onPinch(event) {\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.detectChanges();\n }\n }\n /**\n * @private\n * @return {?}\n */\n setMaxSize() {\n if (this.sourceImage) {\n /** @type {?} */\n const sourceImageElement = this.sourceImage.nativeElement;\n this.maxSize.width = sourceImageElement.offsetWidth;\n this.maxSize.height = sourceImageElement.offsetHeight;\n this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.maxSize.width / 2 + 'px)');\n }\n }\n /**\n * @private\n * @return {?}\n */\n setCropperScaledMinSize() {\n var _a, _b;\n if ((_b = (_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.transformed) === null || _b === void 0 ? void 0 : _b.image) {\n this.setCropperScaledMinWidth();\n this.setCropperScaledMinHeight();\n }\n else {\n this.settings.cropperScaledMinWidth = 20;\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n /**\n * @private\n * @return {?}\n */\n setCropperScaledMinWidth() {\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\n * @return {?}\n */\n setCropperScaledMinHeight() {\n if (this.maintainAspectRatio) {\n this.settings.cropperScaledMinHeight = Math.max(20, this.settings.cropperScaledMinWidth / this.aspectRatio);\n }\n else if (this.cropperMinHeight > 0) {\n this.settings.cropperScaledMinHeight = Math.max(20, this.cropperMinHeight / this.loadedImage.transformed.image.height * this.maxSize.height);\n }\n else {\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n /**\n * @private\n * @return {?}\n */\n setCropperScaledMaxSize() {\n var _a, _b;\n if ((_b = (_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.transformed) === null || _b === void 0 ? void 0 : _b.image) {\n /** @type {?} */\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 }\n else if (this.settings.cropperScaledMaxWidth < this.settings.cropperScaledMaxHeight * this.aspectRatio) {\n this.settings.cropperScaledMaxHeight = this.settings.cropperScaledMaxWidth / this.aspectRatio;\n }\n }\n }\n else {\n this.settings.cropperScaledMaxWidth = this.maxSize.width;\n this.settings.cropperScaledMaxHeight = this.maxSize.height;\n }\n }\n /**\n * @private\n * @param {?=} maintainSize\n * @return {?}\n */\n checkCropperPosition(maintainSize = false) {\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 * @return {?}\n */\n moveStop() {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n /**\n * @return {?}\n */\n pinchStop() {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n /**\n * @private\n * @return {?}\n */\n doAutoCrop() {\n if (this.autoCrop) {\n this.crop();\n }\n }\n /**\n * @return {?}\n */\n crop() {\n var _a, _b;\n if (((_b = (_a = this.loadedImage) === null || _a === void 0 ? void 0 : _a.transformed) === null || _b === void 0 ? void 0 : _b.image) != null) {\n this.startCropImage.emit();\n /** @type {?} */\n const output = this.cropService.crop(this.sourceImage, this.loadedImage, this.cropper, this.settings);\n if (output != null) {\n this.imageCropped.emit(output);\n }\n return output;\n }\n return null;\n }\n}\nImageCropperComponent.ɵfac = function ImageCropperComponent_Factory(t) { return new (t || ImageCropperComponent)(ɵngcc0.ɵɵdirectiveInject(CropService), ɵngcc0.ɵɵdirectiveInject(CropperPositionService), ɵngcc0.ɵɵdirectiveInject(LoadImageService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DomSanitizer), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nImageCropperComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ImageCropperComponent, selectors: [[\"image-cropper\"]], viewQuery: function ImageCropperComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.sourceImage = _t.first);\n } }, hostVars: 4, hostBindings: function ImageCropperComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"resize\", function ImageCropperComponent_resize_HostBindingHandler() { return ctx.onResize(); }, false, ɵngcc0.ɵɵresolveWindow)(\"mousemove\", function ImageCropperComponent_mousemove_HostBindingHandler($event) { return ctx.moveImg($event); }, false, ɵngcc0.ɵɵresolveDocument)(\"touchmove\", function ImageCropperComponent_touchmove_HostBindingHandler($event) { return ctx.moveImg($event); }, false, ɵngcc0.ɵɵresolveDocument)(\"mouseup\", function ImageCropperComponent_mouseup_HostBindingHandler() { return ctx.moveStop(); }, false, ɵngcc0.ɵɵresolveDocument)(\"touchend\", function ImageCropperComponent_touchend_HostBindingHandler() { return ctx.moveStop(); }, false, ɵngcc0.ɵɵresolveDocument);\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"text-align\", ctx.alignImage);\n ɵngcc0.ɵɵclassProp(\"disabled\", ctx.disabled);\n } }, inputs: { format: \"format\", transform: \"transform\", maintainAspectRatio: \"maintainAspectRatio\", aspectRatio: \"aspectRatio\", 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\", cropper: \"cropper\", alignImage: \"alignImage\", disabled: \"disabled\", imageChangedEvent: \"imageChangedEvent\", imageURL: \"imageURL\", imageBase64: \"imageBase64\", imageFile: \"imageFile\" }, outputs: { imageCropped: \"imageCropped\", startCropImage: \"startCropImage\", imageLoaded: \"imageLoaded\", cropperReady: \"cropperReady\", loadImageFailed: \"loadImageFailed\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 10, consts: [[\"wrapper\", \"\"], [\"class\", \"ngx-ic-source-image\", 3, \"src\", \"visibility\", \"transform\", \"load\", 4, \"ngIf\"], [1, \"ngx-ic-overlay\"], [\"class\", \"ngx-ic-cropper\", \"tabindex\", \"0\", 3, \"ngx-ic-round\", \"top\", \"left\", \"width\", \"height\", \"margin-left\", \"visibility\", \"keydown\", 4, \"ngIf\"], [1, \"ngx-ic-source-image\", 3, \"src\", \"load\"], [\"sourceImage\", \"\"], [\"tabindex\", \"0\", 1, \"ngx-ic-cropper\", 3, \"keydown\"], [1, \"ngx-ic-move\", 3, \"mousedown\", \"touchstart\"], [4, \"ngIf\"], [1, \"ngx-ic-resize\", \"ngx-ic-topleft\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-square\"], [1, \"ngx-ic-resize\", \"ngx-ic-top\"], [1, \"ngx-ic-resize\", \"ngx-ic-topright\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize\", \"ngx-ic-right\"], [1, \"ngx-ic-resize\", \"ngx-ic-bottomright\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize\", \"ngx-ic-bottom\"], [1, \"ngx-ic-resize\", \"ngx-ic-bottomleft\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize\", \"ngx-ic-left\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-top\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-right\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-bottom\", 3, \"mousedown\", \"touchstart\"], [1, \"ngx-ic-resize-bar\", \"ngx-ic-left\", 3, \"mousedown\", \"touchstart\"]], template: function ImageCropperComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", null, 0);\n ɵngcc0.ɵɵtemplate(2, ImageCropperComponent_img_2_Template, 2, 5, \"img\", 1);\n ɵngcc0.ɵɵelement(3, \"div\", 2);\n ɵngcc0.ɵɵtemplate(4, ImageCropperComponent_div_4_Template, 3, 15, \"div\", 3);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"background\", ctx.imageVisible && ctx.backgroundColor);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.safeImgDataUrl);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.maxSize.width, \"px\")(\"height\", ctx.maxSize.height, \"px\")(\"margin-left\", ctx.alignImage === \"center\" ? ctx.marginLeft : null);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.imageVisible);\n } }, dependencies: [ɵngcc2.NgIf], styles: [\"[_nghost-%COMP%]{display:flex;max-height:100%;max-width:100%;overflow:hidden;padding:5px;text-align:center}[_nghost-%COMP%], [_nghost-%COMP%] > div[_ngcontent-%COMP%]{position:relative;width:100%}[_nghost-%COMP%] > div[_ngcontent-%COMP%] img.ngx-ic-source-image[_ngcontent-%COMP%]{max-height:100%;max-width:100%;transform-origin:center}[_nghost-%COMP%] .ngx-ic-overlay[_ngcontent-%COMP%]{left:0;outline:var(--cropper-overlay-color,#fff) solid 100vw;pointer-events:none;position:absolute;top:0;touch-action:none}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]{background:transparent;color:#53535c;display:flex;outline:100vw solid hsla(0,0%,100%,.3);outline:var(--cropper-outline-color,hsla(0,0%,100%,.3)) solid 100vw;position:absolute;touch-action:none}@media (orientation:portrait){[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]{outline-width:100vh}}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]:after{border:1px dashed;bottom:0;color:inherit;content:\\\"\\\";left:0;opacity:.75;pointer-events:none;position:absolute;right:0;top:0;z-index:1}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-move[_ngcontent-%COMP%]{border:1px solid hsla(0,0%,100%,.5);cursor:move;width:100%}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%]:focus .ngx-ic-move[_ngcontent-%COMP%]{border-color:#1e90ff;border-width:2px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize[_ngcontent-%COMP%]{display:inline-block;line-height:6px;opacity:.85;padding:8px;position:absolute;z-index:1}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize[_ngcontent-%COMP%] .ngx-ic-square[_ngcontent-%COMP%]{background:#53535c;border:1px solid hsla(0,0%,100%,.5);box-sizing:content-box;display:inline-block;height:6px;width:6px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-topleft[_ngcontent-%COMP%]{cursor:nwse-resize;left:-12px;top:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-top[_ngcontent-%COMP%]{cursor:ns-resize;left:calc(50% - 12px);top:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-topright[_ngcontent-%COMP%]{cursor:nesw-resize;right:-12px;top:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-right[_ngcontent-%COMP%]{cursor:ew-resize;right:-12px;top:calc(50% - 12px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-bottomright[_ngcontent-%COMP%]{bottom:-12px;cursor:nwse-resize;right:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-bottom[_ngcontent-%COMP%]{bottom:-12px;cursor:ns-resize;left:calc(50% - 12px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-bottomleft[_ngcontent-%COMP%]{bottom:-12px;cursor:nesw-resize;left:-12px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize.ngx-ic-left[_ngcontent-%COMP%]{cursor:ew-resize;left:-12px;top:calc(50% - 12px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar[_ngcontent-%COMP%]{position:absolute;z-index:1}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-top[_ngcontent-%COMP%]{cursor:ns-resize;height:22px;left:11px;top:-11px;width:calc(100% - 22px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-right[_ngcontent-%COMP%]{cursor:ew-resize;height:calc(100% - 22px);right:-11px;top:11px;width:22px}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-bottom[_ngcontent-%COMP%]{bottom:-11px;cursor:ns-resize;height:22px;left:11px;width:calc(100% - 22px)}[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar.ngx-ic-left[_ngcontent-%COMP%]{cursor:ew-resize;height:calc(100% - 22px);left:-11px;top:11px;width:22px}[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%]{outline-color:transparent}[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%]:after{border-radius:100%;box-shadow:0 0 0 100vw hsla(0,0%,100%,.3);box-shadow:0 0 0 100vw var(--cropper-outline-color,hsla(0,0%,100%,.3))}@media (orientation:portrait){[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%]:after{box-shadow:0 0 0 100vh hsla(0,0%,100%,.3);box-shadow:0 0 0 100vh var(--cropper-outline-color,hsla(0,0%,100%,.3))}}[_nghost-%COMP%] .ngx-ic-cropper.ngx-ic-round[_ngcontent-%COMP%] .ngx-ic-move[_ngcontent-%COMP%]{border-radius:100%}.disabled[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-move[_ngcontent-%COMP%], .disabled[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize[_ngcontent-%COMP%], .disabled[_nghost-%COMP%] .ngx-ic-cropper[_ngcontent-%COMP%] .ngx-ic-resize-bar[_ngcontent-%COMP%]{display:none}\"], changeDetection: 0 });\n/** @nocollapse */\nImageCropperComponent.ctorParameters = () => [\n { type: CropService },\n { type: CropperPositionService },\n { type: LoadImageService },\n { type: DomSanitizer },\n { type: ChangeDetectorRef }\n];\nImageCropperComponent.propDecorators = {\n wrapper: [{ type: ViewChild, args: ['wrapper', { static: true },] }],\n sourceImage: [{ type: ViewChild, args: ['sourceImage', { static: false },] }],\n imageChangedEvent: [{ type: Input }],\n imageURL: [{ type: Input }],\n imageBase64: [{ type: Input }],\n imageFile: [{ type: Input }],\n format: [{ type: Input }],\n transform: [{ type: Input }],\n maintainAspectRatio: [{ type: Input }],\n aspectRatio: [{ type: Input }],\n resizeToWidth: [{ type: Input }],\n resizeToHeight: [{ type: Input }],\n cropperMinWidth: [{ type: Input }],\n cropperMinHeight: [{ type: Input }],\n cropperMaxHeight: [{ type: Input }],\n cropperMaxWidth: [{ type: Input }],\n cropperStaticWidth: [{ type: Input }],\n cropperStaticHeight: [{ type: Input }],\n canvasRotation: [{ type: Input }],\n initialStepSize: [{ type: Input }],\n roundCropper: [{ type: Input }],\n onlyScaleDown: [{ type: Input }],\n imageQuality: [{ type: Input }],\n autoCrop: [{ type: Input }],\n backgroundColor: [{ type: Input }],\n containWithinAspectRatio: [{ type: Input }],\n hideResizeSquares: [{ type: Input }],\n cropper: [{ type: Input }],\n alignImage: [{ type: HostBinding, args: ['style.text-align',] }, { type: Input }],\n disabled: [{ type: HostBinding, args: ['class.disabled',] }, { type: Input }],\n imageCropped: [{ type: Output }],\n startCropImage: [{ type: Output }],\n imageLoaded: [{ type: Output }],\n cropperReady: [{ type: Output }],\n loadImageFailed: [{ type: Output }],\n onResize: [{ type: HostListener, args: ['window:resize',] }],\n moveImg: [{ type: HostListener, args: ['document:mousemove', ['$event'],] }, { type: HostListener, args: ['document:touchmove', ['$event'],] }],\n moveStop: [{ type: HostListener, args: ['document:mouseup',] }, { type: HostListener, args: ['document:touchend',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ImageCropperComponent, [{\n type: Component,\n args: [{ selector: 'image-cropper', template: \"<div [style.background]=\\\"imageVisible && backgroundColor\\\"\\n #wrapper\\n>\\n <img\\n #sourceImage\\n class=\\\"ngx-ic-source-image\\\"\\n *ngIf=\\\"safeImgDataUrl\\\"\\n [src]=\\\"safeImgDataUrl\\\"\\n [style.visibility]=\\\"imageVisible ? 'visible' : 'hidden'\\\"\\n [style.transform]=\\\"safeTransformStyle\\\"\\n (load)=\\\"imageLoadedInView()\\\"\\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 [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 </div>\\n <ng-container *ngIf=\\\"!hideResizeSquares\\\">\\n <span class=\\\"ngx-ic-resize ngx-ic-topleft\\\"\\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 (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 (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 (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 (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 (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 (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 (mousedown)=\\\"startMove($event, moveTypes.Resize, 'left')\\\"\\n (touchstart)=\\\"startMove($event, moveTypes.Resize, 'left')\\\">\\n </span>\\n </ng-container>\\n </div>\\n</div>\\n\", changeDetection: ChangeDetectionStrategy.OnPush, styles: [\":host{display:flex;max-height:100%;max-width:100%;overflow:hidden;padding:5px;text-align:center}:host,:host>div{position:relative;width:100%}:host>div img.ngx-ic-source-image{max-height:100%;max-width:100%;transform-origin:center}:host .ngx-ic-overlay{left:0;outline:var(--cropper-overlay-color,#fff) solid 100vw;pointer-events:none;position:absolute;top:0;touch-action:none}:host .ngx-ic-cropper{background:transparent;color:#53535c;display:flex;outline:100vw solid hsla(0,0%,100%,.3);outline:var(--cropper-outline-color,hsla(0,0%,100%,.3)) solid 100vw;position:absolute;touch-action:none}@media (orientation:portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{border:1px dashed;bottom:0;color:inherit;content:\\\"\\\";left:0;opacity:.75;pointer-events:none;position:absolute;right:0;top:0;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{border:1px solid hsla(0,0%,100%,.5);cursor:move;width:100%}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{display:inline-block;line-height:6px;opacity:.85;padding:8px;position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{background:#53535c;border:1px solid hsla(0,0%,100%,.5);box-sizing:content-box;display:inline-block;height:6px;width:6px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topleft{cursor:nwse-resize;left:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-top{cursor:ns-resize;left:calc(50% - 12px);top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topright{cursor:nesw-resize;right:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-right{cursor:ew-resize;right:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomright{bottom:-12px;cursor:nwse-resize;right:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottom{bottom:-12px;cursor:ns-resize;left:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomleft{bottom:-12px;cursor:nesw-resize;left:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-left{cursor:ew-resize;left:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize-bar{position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-top{cursor:ns-resize;height:22px;left:11px;top:-11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-right{cursor:ew-resize;height:calc(100% - 22px);right:-11px;top:11px;width:22px}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-bottom{bottom:-11px;cursor:ns-resize;height:22px;left:11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-left{cursor:ew-resize;height:calc(100% - 22px);left:-11px;top:11px;width:22px}: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 hsla(0,0%,100%,.3);box-shadow:0 0 0 100vw var(--cropper-outline-color,hsla(0,0%,100%,.3))}@media (orientation:portrait){:host .ngx-ic-cropper.ngx-ic-round:after{box-shadow:0 0 0 100vh hsla(0,0%,100%,.3);box-shadow:0 0 0 100vh var(--cropper-outline-color,hsla(0,0%,100%,.3))}}:host .ngx-ic-cropper.ngx-ic-round .ngx-ic-move{border-radius:100%}:host.disabled .ngx-ic-cropper .ngx-ic-move,:host.disabled .ngx-ic-cropper .ngx-ic-resize,:host.disabled .ngx-ic-cropper .ngx-ic-resize-bar{display:none}\"] }]\n }], function () { return [{ type: CropService }, { type: CropperPositionService }, { type: LoadImageService }, { type: ɵngcc1.DomSanitizer }, { type: ɵngcc0.ChangeDetectorRef }]; }, { format: [{\n type: Input\n }], transform: [{\n type: Input\n }], maintainAspectRatio: [{\n type: Input\n }], aspectRatio: [{\n type: Input\n }], resizeToWidth: [{\n type: Input\n }], resizeToHeight: [{\n type: Input\n }], cropperMinWidth: [{\n type: Input\n }], cropperMinHeight: [{\n type: Input\n }], cropperMaxHeight: [{\n type: Input\n }], cropperMaxWidth: [{\n type: Input\n }], cropperStaticWidth: [{\n type: Input\n }], cropperStaticHeight: [{\n type: Input\n }], canvasRotation: [{\n type: Input\n }], initialStepSize: [{\n type: Input\n }], roundCropper: [{\n type: Input\n }], onlyScaleDown: [{\n type: Input\n }], imageQuality: [{\n type: Input\n }], autoCrop: [{\n type: Input\n }], backgroundColor: [{\n type: Input\n }], containWithinAspectRatio: [{\n type: Input\n }], hideResizeSquares: [{\n type: Input\n }], cropper: [{\n type: Input\n }], alignImage: [{\n type: HostBinding,\n args: ['style.text-align']\n }, {\n type: Input\n }], disabled: [{\n type: HostBinding,\n args: ['class.disabled']\n }, {\n type: Input\n }], imageCropped: [{\n type: Output\n }], startCropImage: [{\n type: Output\n }], imageLoaded: [{\n type: Output\n }], cropperReady: [{\n type: Output\n }], loadImageFailed: [{\n type: Output\n }], \n /**\n * @return {?}\n */\n onResize: [{\n type: HostListener,\n args: ['window:resize']\n }], \n /**\n * @param {?} event\n * @return {?}\n */\n moveImg: [{\n type: HostListener,\n args: ['document:mousemove', ['$event']]\n }, {\n type: HostListener,\n args: ['document:touchmove', ['$event']]\n }], \n /**\n * @return {?}\n */\n moveStop: [{\n type: HostListener,\n args: ['document:mouseup']\n }, {\n type: HostListener,\n args: ['document:touchend']\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }], sourceImage: [{\n type: ViewChild,\n args: ['sourceImage', { static: false }]\n }], imageChangedEvent: [{\n type: Input\n }], imageURL: [{\n type: Input\n }], imageBase64: [{\n type: Input\n }], imageFile: [{\n type: Input\n }] }); })();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.Hammer;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.settings;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.setImageMaxSizeRetries;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.moveStart;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.loadedImage;\n /** @type {?} */\n ImageCropperComponent.prototype.safeImgDataUrl;\n /** @type {?} */\n ImageCropperComponent.prototype.safeTransformStyle;\n /** @type {?} */\n ImageCropperComponent.prototype.marginLeft;\n /** @type {?} */\n ImageCropperComponent.prototype.maxSize;\n /** @type {?} */\n ImageCropperComponent.prototype.moveTypes;\n /** @type {?} */\n ImageCropperComponent.prototype.imageVisible;\n /** @type {?} */\n ImageCropperComponent.prototype.wrapper;\n /** @type {?} */\n ImageCropperComponent.prototype.sourceImage;\n /** @type {?} */\n ImageCropperComponent.prototype.imageChangedEvent;\n /** @type {?} */\n ImageCropperComponent.prototype.imageURL;\n /** @type {?} */\n ImageCropperComponent.prototype.imageBase64;\n /** @type {?} */\n ImageCropperComponent.prototype.imageFile;\n /** @type {?} */\n ImageCropperComponent.prototype.format;\n /** @type {?} */\n ImageCropperComponent.prototype.transform;\n /** @type {?} */\n ImageCropperComponent.prototype.maintainAspectRatio;\n /** @type {?} */\n ImageCropperComponent.prototype.aspectRatio;\n /** @type {?} */\n ImageCropperComponent.prototype.resizeToWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.resizeToHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMinWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMinHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMaxHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperMaxWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperStaticWidth;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperStaticHeight;\n /** @type {?} */\n ImageCropperComponent.prototype.canvasRotation;\n /** @type {?} */\n ImageCropperComponent.prototype.initialStepSize;\n /** @type {?} */\n ImageCropperComponent.prototype.roundCropper;\n /** @type {?} */\n ImageCropperComponent.prototype.onlyScaleDown;\n /** @type {?} */\n ImageCropperComponent.prototype.imageQuality;\n /** @type {?} */\n ImageCropperComponent.prototype.autoCrop;\n /** @type {?} */\n ImageCropperComponent.prototype.backgroundColor;\n /** @type {?} */\n ImageCropperComponent.prototype.containWithinAspectRatio;\n /** @type {?} */\n ImageCropperComponent.prototype.hideResizeSquares;\n /** @type {?} */\n ImageCropperComponent.prototype.cropper;\n /** @type {?} */\n ImageCropperComponent.prototype.alignImage;\n /** @type {?} */\n ImageCropperComponent.prototype.disabled;\n /** @type {?} */\n ImageCropperComponent.prototype.imageCropped;\n /** @type {?} */\n ImageCropperComponent.prototype.startCropImage;\n /** @type {?} */\n ImageCropperComponent.prototype.imageLoaded;\n /** @type {?} */\n ImageCropperComponent.prototype.cropperReady;\n /** @type {?} */\n ImageCropperComponent.prototype.loadImageFailed;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.cropService;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.cropperPositionService;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.loadImageService;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.sanitizer;\n /**\n * @type {?}\n * @private\n */\n ImageCropperComponent.prototype.cd;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/image-cropper.module.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass ImageCropperModule {\n}\nImageCropperModule.ɵfac = function ImageCropperModule_Factory(t) { return new (t || ImageCropperModule)(); };\nImageCropperModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ImageCropperModule });\nImageCropperModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [CommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ImageCropperModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule\n ],\n declarations: [\n ImageCropperComponent\n ],\n exports: [\n ImageCropperComponent\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ImageCropperModule, { declarations: function () { return [ImageCropperComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ImageCropperComponent]; } }); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/interfaces/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/utils/blob.utils.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} base64Image\n * @return {?}\n */\nfunction base64ToFile(base64Image) {\n /** @type {?} */\n const split = base64Image.split(',');\n /** @type {?} */\n const type = split[0].replace('data:', '').replace(';base64', '');\n /** @type {?} */\n const byteString = atob(split[1]);\n /** @type {?} */\n const ab = new ArrayBuffer(byteString.length);\n /** @type {?} */\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/**\n * @fileoverview added by tsickle\n * Generated from: public-api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: ngx-image-cropper.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { ImageCropperComponent, ImageCropperModule, base64ToFile, resizeCanvas, CropService as ɵa, CropperPositionService as ɵb, LoadImageService as ɵc };\n\n"],"mappings":"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"},"metadata":{},"sourceType":"module"} |