{"version":3,"file":"asoftwareworld-form-builder-image-crop.mjs","sources":["../../src/components/image-crop/interfaces/cropper.settings.ts","../../src/components/image-crop/interfaces/move-start.interface.ts","../../src/components/image-crop/utils/keyboard.utils.ts","../../src/components/image-crop/utils/percentage.utils.ts","../../src/components/image-crop/utils/resize.utils.ts","../../src/components/image-crop/services/crop.service.ts","../../src/components/image-crop/services/cropper-position.service.ts","../../src/components/image-crop/utils/exif.utils.ts","../../src/components/image-crop/services/load-image.service.ts","../../src/components/image-crop/image-crop.component.ts","../../src/components/image-crop/image-crop.component.html","../../src/components/image-crop/image-crop.module.ts","../../src/components/image-crop/utils/blob.utils.ts","../../src/components/image-crop/public_api.ts","../../src/components/image-crop/asoftwareworld-form-builder-image-crop.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { SimpleChanges } from '@angular/core';\r\nimport { CropperOptions, OutputFormat } from './cropper-options.interface';\r\nimport { ImageTransform } from './image-transform.interface';\r\n\r\nexport class CropperSettings {\r\n\r\n    // From options\r\n    format: OutputFormat = 'png';\r\n    maintainAspectRatio = true;\r\n    transform: ImageTransform = {};\r\n    aspectRatio = 1;\r\n    resizeToWidth = 0;\r\n    resizeToHeight = 0;\r\n    cropperMinWidth = 0;\r\n    cropperMinHeight = 0;\r\n    cropperMaxHeight = 0;\r\n    cropperMaxWidth = 0;\r\n    cropperStaticWidth = 0;\r\n    cropperStaticHeight = 0;\r\n    canvasRotation = 0;\r\n    initialStepSize = 3;\r\n    roundCropper = false;\r\n    onlyScaleDown = false;\r\n    imageQuality = 92;\r\n    autoCrop = true;\r\n    backgroundColor: string | null = null;\r\n    containWithinAspectRatio = false;\r\n    hideResizeSquares = false;\r\n    alignImage: 'left' | 'center' = 'center';\r\n\r\n    // Internal\r\n    cropperScaledMinWidth = 20;\r\n    cropperScaledMinHeight = 20;\r\n    cropperScaledMaxWidth = 20;\r\n    cropperScaledMaxHeight = 20;\r\n    stepSize = this.initialStepSize;\r\n\r\n    setOptions(options: Partial<CropperOptions>): void {\r\n        Object.keys(options)\r\n            .filter((k) => k in this)\r\n            .forEach((k) => (this as any)[k] = (options as any)[k]);\r\n        this.validateOptions();\r\n    }\r\n\r\n    setOptionsFromChanges(changes: SimpleChanges): void {\r\n        Object.keys(changes)\r\n            .filter((k) => k in this)\r\n            .forEach((k) => (this as any)[k] = changes[k].currentValue);\r\n        this.validateOptions();\r\n    }\r\n\r\n    private validateOptions(): void {\r\n        if (this.maintainAspectRatio && !this.aspectRatio) {\r\n            throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');\r\n        }\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport interface MoveStart {\r\n    active: boolean;\r\n    type: MoveTypes | null;\r\n    position: string | null;\r\n    x1: number;\r\n    y1: number;\r\n    x2: number;\r\n    y2: number;\r\n    clientX: number;\r\n    clientY: number;\r\n}\r\n\r\nexport enum MoveTypes {\r\n    Move = 'move',\r\n    Resize = 'resize',\r\n    Pinch = 'pinch'\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport function getPositionForKey(key: string): string {\r\n    switch (key) {\r\n        case 'ArrowUp':\r\n            return 'top';\r\n        case 'ArrowRight':\r\n            return 'right';\r\n        case 'ArrowDown':\r\n            return 'bottom';\r\n        case 'ArrowLeft':\r\n        default:\r\n            return 'left';\r\n    }\r\n}\r\n\r\nexport function getInvertedPositionForKey(key: string): string {\r\n    switch (key) {\r\n        case 'ArrowUp':\r\n            return 'bottom';\r\n        case 'ArrowRight':\r\n            return 'left';\r\n        case 'ArrowDown':\r\n            return 'top';\r\n        case 'ArrowLeft':\r\n        default:\r\n            return 'right';\r\n    }\r\n}\r\n\r\nexport function getEventForKey(key: string, stepSize: number): any {\r\n    switch (key) {\r\n        case 'ArrowUp':\r\n            return { clientX: 0, clientY: stepSize * -1 };\r\n        case 'ArrowRight':\r\n            return { clientX: stepSize, clientY: 0 };\r\n        case 'ArrowDown':\r\n            return { clientX: 0, clientY: stepSize };\r\n        case 'ArrowLeft':\r\n        default:\r\n            return { clientX: stepSize * -1, clientY: 0 };\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport function percentage(percent: number, totalValue: number): number {\r\n    return (percent / 100) * totalValue;\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport function resizeCanvas(canvas: HTMLCanvasElement, width: number, height: number): void {\r\n    const WIDTH_SOURCE = canvas.width;\r\n    const HEIGHT_SOURCE = canvas.height;\r\n    width = Math.round(width);\r\n    height = Math.round(height);\r\n\r\n    const RATIO_W = WIDTH_SOURCE / width;\r\n    const RATIO_H = HEIGHT_SOURCE / height;\r\n    const RATIO_W_HALF = Math.ceil(RATIO_W / 2);\r\n    const RATIO_H_HALF = Math.ceil(RATIO_H / 2);\r\n\r\n    const ctx = canvas.getContext('2d');\r\n    if (ctx) {\r\n        const img = ctx.getImageData(0, 0, WIDTH_SOURCE, HEIGHT_SOURCE);\r\n        const img2 = ctx.createImageData(width, height);\r\n        const data = img.data;\r\n        const data2 = img2.data;\r\n\r\n        for (let j = 0; j < height; j++) {\r\n            for (let i = 0; i < width; i++) {\r\n                const x2 = (i + j * width) * 4;\r\n                const CENTER_Y = j * RATIO_H;\r\n                let weight = 0;\r\n                let weights = 0;\r\n                let WEIGHTS_ALPHA = 0;\r\n                let GX_R = 0;\r\n                let GX_G = 0;\r\n                let GX_B = 0;\r\n                let GX_A = 0;\r\n\r\n                const XX_START = Math.floor(i * RATIO_W);\r\n                const YY_START = Math.floor(j * RATIO_H);\r\n                let XX_STOP = Math.ceil((i + 1) * RATIO_W);\r\n                let YY_STOP = Math.ceil((j + 1) * RATIO_H);\r\n                XX_STOP = Math.min(XX_STOP, WIDTH_SOURCE);\r\n                YY_STOP = Math.min(YY_STOP, HEIGHT_SOURCE);\r\n\r\n                for (let yy = YY_START; yy < YY_STOP; yy++) {\r\n                    const dy = Math.abs(CENTER_Y - yy) / RATIO_H_HALF;\r\n                    const CENTER_X = i * RATIO_W;\r\n                    const w0 = dy * dy; // pre-calc part of w\r\n                    for (let xx = XX_START; xx < XX_STOP; xx++) {\r\n                        const dx = Math.abs(CENTER_X - xx) / RATIO_W_HALF;\r\n                        const w = Math.sqrt(w0 + dx * dx);\r\n                        if (w >= 1) {\r\n                            // pixel too far\r\n                            continue;\r\n                        }\r\n                        // hermite filter\r\n                        weight = 2 * w * w * w - 3 * w * w + 1;\r\n                        const POS_X = 4 * (xx + yy * WIDTH_SOURCE);\r\n                        // alpha\r\n                        GX_A += weight * data[POS_X + 3];\r\n                        WEIGHTS_ALPHA += weight;\r\n                        // colors\r\n                        if (data[POS_X + 3] < 255) {\r\n                            weight = weight * data[POS_X + 3] / 250;\r\n                        }\r\n                        GX_R += weight * data[POS_X];\r\n                        GX_G += weight * data[POS_X + 1];\r\n                        GX_B += weight * data[POS_X + 2];\r\n                        weights += weight;\r\n                    }\r\n                }\r\n                data2[x2] = GX_R / weights;\r\n                data2[x2 + 1] = GX_G / weights;\r\n                data2[x2 + 2] = GX_B / weights;\r\n                data2[x2 + 3] = GX_A / WEIGHTS_ALPHA;\r\n            }\r\n        }\r\n\r\n\r\n        canvas.width = width;\r\n        canvas.height = height;\r\n\r\n        // draw\r\n        ctx.putImageData(img2, 0, 0);\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { ElementRef, Injectable } from '@angular/core';\r\nimport { CropperPosition, ImageCroppedEvent, LoadedImage } from '../interfaces';\r\nimport { CropperSettings } from '../interfaces/cropper.settings';\r\nimport { percentage } from '../utils/percentage.utils';\r\nimport { resizeCanvas } from '../utils/resize.utils';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CropService {\r\n\r\n    crop(sourceImage: ElementRef, loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings): ImageCroppedEvent | null {\r\n        const imagePosition = this.getImagePosition(sourceImage, loadedImage, cropper, settings);\r\n        const width = imagePosition.x2 - imagePosition.x1;\r\n        const height = imagePosition.y2 - imagePosition.y1;\r\n        const cropCanvas = document.createElement('canvas') as HTMLCanvasElement;\r\n        cropCanvas.width = width;\r\n        cropCanvas.height = height;\r\n\r\n        const ctx = cropCanvas.getContext('2d');\r\n        if (!ctx) {\r\n            return null;\r\n        }\r\n        if (settings.backgroundColor != null) {\r\n            ctx.fillStyle = settings.backgroundColor;\r\n            ctx.fillRect(0, 0, width, height);\r\n        }\r\n\r\n        const scaleX = (settings.transform.scale || 1) * (settings.transform.flipH ? -1 : 1);\r\n        const scaleY = (settings.transform.scale || 1) * (settings.transform.flipV ? -1 : 1);\r\n\r\n        const transformedImage = loadedImage.transformed;\r\n        ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2, transformedImage.size.height / 2);\r\n        ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);\r\n        ctx.rotate((settings.transform.rotate || 0) * Math.PI / 180);\r\n\r\n        const translateH = settings.transform.translateH ? percentage(settings.transform.translateH, transformedImage.size.width) : 0;\r\n        const translateV = settings.transform.translateV ? percentage(settings.transform.translateV, transformedImage.size.height) : 0;\r\n\r\n        ctx.drawImage(\r\n            transformedImage.image,\r\n            translateH - transformedImage.size.width / 2,\r\n            translateV - transformedImage.size.height / 2\r\n        );\r\n\r\n        const output: ImageCroppedEvent = {\r\n            width, height,\r\n            imagePosition,\r\n            cropperPosition: { ...cropper }\r\n        };\r\n        if (settings.containWithinAspectRatio) {\r\n            output.offsetImagePosition = this.getOffsetImagePosition(sourceImage, loadedImage, cropper, settings);\r\n        }\r\n        const resizeRatio = this.getResizeRatio(width, height, settings);\r\n        if (resizeRatio !== 1) {\r\n            output.width = Math.round(width * resizeRatio);\r\n            output.height = settings.maintainAspectRatio\r\n                ? Math.round(output.width / settings.aspectRatio)\r\n                : Math.round(height * resizeRatio);\r\n            resizeCanvas(cropCanvas, output.width, output.height);\r\n        }\r\n        output.base64 = cropCanvas.toDataURL('image/' + settings.format, this.getQuality(settings));\r\n        return output;\r\n    }\r\n\r\n    private getImagePosition(\r\n        sourceImage: ElementRef,\r\n        loadedImage: LoadedImage,\r\n        cropper: CropperPosition,\r\n        settings: CropperSettings): CropperPosition {\r\n        const sourceImageElement = sourceImage.nativeElement;\r\n        const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\r\n\r\n        const out: CropperPosition = {\r\n            x1: Math.round(cropper.x1 * ratio),\r\n            y1: Math.round(cropper.y1 * ratio),\r\n            x2: Math.round(cropper.x2 * ratio),\r\n            y2: Math.round(cropper.y2 * ratio)\r\n        };\r\n\r\n        if (!settings.containWithinAspectRatio) {\r\n            out.x1 = Math.max(out.x1, 0);\r\n            out.y1 = Math.max(out.y1, 0);\r\n            out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\r\n            out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\r\n        }\r\n\r\n        return out;\r\n    }\r\n\r\n    private getOffsetImagePosition(\r\n        sourceImage: ElementRef,\r\n        loadedImage: LoadedImage,\r\n        cropper: CropperPosition,\r\n        settings: CropperSettings): CropperPosition {\r\n        const canvasRotation = settings.canvasRotation + loadedImage.exifTransform.rotate;\r\n        const sourceImageElement = sourceImage.nativeElement;\r\n        const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\r\n        let offsetX: number;\r\n        let offsetY: number;\r\n\r\n        if (canvasRotation % 2) {\r\n            offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.height) / 2;\r\n            offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.width) / 2;\r\n        } else {\r\n            offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.width) / 2;\r\n            offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.height) / 2;\r\n        }\r\n\r\n        const out: CropperPosition = {\r\n            x1: Math.round(cropper.x1 * ratio) - offsetX,\r\n            y1: Math.round(cropper.y1 * ratio) - offsetY,\r\n            x2: Math.round(cropper.x2 * ratio) - offsetX,\r\n            y2: Math.round(cropper.y2 * ratio) - offsetY\r\n        };\r\n\r\n        if (!settings.containWithinAspectRatio) {\r\n            out.x1 = Math.max(out.x1, 0);\r\n            out.y1 = Math.max(out.y1, 0);\r\n            out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\r\n            out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\r\n        }\r\n\r\n        return out;\r\n    }\r\n\r\n    getResizeRatio(width: number, height: number, settings: CropperSettings): number {\r\n        const ratioWidth = settings.resizeToWidth / width;\r\n        const ratioHeight = settings.resizeToHeight / height;\r\n        const ratios = new Array<number>();\r\n\r\n        if (settings.resizeToWidth > 0) {\r\n            ratios.push(ratioWidth);\r\n        }\r\n        if (settings.resizeToHeight > 0) {\r\n            ratios.push(ratioHeight);\r\n        }\r\n\r\n        const result = ratios.length === 0 ? 1 : Math.min(...ratios);\r\n\r\n        if (result > 1 && !settings.onlyScaleDown) {\r\n            return result;\r\n        }\r\n        return Math.min(result, 1);\r\n    }\r\n\r\n    getQuality(settings: CropperSettings): number {\r\n        return Math.min(1, Math.max(0, settings.imageQuality / 100));\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { ElementRef, Injectable } from '@angular/core';\r\nimport { CropperPosition, Dimensions, MoveStart } from '../interfaces';\r\nimport { CropperSettings } from '../interfaces/cropper.settings';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CropperPositionService {\r\n\r\n    resetCropperPosition(sourceImage: ElementRef, cropperPosition: CropperPosition, settings: CropperSettings): void {\r\n        if (!sourceImage?.nativeElement) {\r\n            return;\r\n        }\r\n        const sourceImageElement = sourceImage.nativeElement;\r\n        if (settings.cropperStaticHeight && settings.cropperStaticWidth) {\r\n            cropperPosition.x1 = 0;\r\n            cropperPosition.x2 = sourceImageElement.offsetWidth > settings.cropperStaticWidth ?\r\n                settings.cropperStaticWidth : sourceImageElement.offsetWidth;\r\n            cropperPosition.y1 = 0;\r\n            cropperPosition.y2 = sourceImageElement.offsetHeight > settings.cropperStaticHeight ?\r\n                settings.cropperStaticHeight : sourceImageElement.offsetHeight;\r\n        } else {\r\n            const cropperWidth = Math.min(settings.cropperScaledMaxWidth, sourceImageElement.offsetWidth);\r\n            const cropperHeight = Math.min(settings.cropperScaledMaxHeight, sourceImageElement.offsetHeight);\r\n            if (!settings.maintainAspectRatio) {\r\n                cropperPosition.x1 = 0;\r\n                cropperPosition.x2 = cropperWidth;\r\n                cropperPosition.y1 = 0;\r\n                cropperPosition.y2 = cropperHeight;\r\n            } else if (sourceImageElement.offsetWidth / settings.aspectRatio < sourceImageElement.offsetHeight) {\r\n                cropperPosition.x1 = 0;\r\n                cropperPosition.x2 = cropperWidth;\r\n                const cropperHeightWithAspectRatio = cropperWidth / settings.aspectRatio;\r\n                cropperPosition.y1 = (sourceImageElement.offsetHeight - cropperHeightWithAspectRatio) / 2;\r\n                cropperPosition.y2 = cropperPosition.y1 + cropperHeightWithAspectRatio;\r\n            } else {\r\n                cropperPosition.y1 = 0;\r\n                cropperPosition.y2 = cropperHeight;\r\n                const cropperWidthWithAspectRatio = cropperHeight * settings.aspectRatio;\r\n                cropperPosition.x1 = (sourceImageElement.offsetWidth - cropperWidthWithAspectRatio) / 2;\r\n                cropperPosition.x2 = cropperPosition.x1 + cropperWidthWithAspectRatio;\r\n            }\r\n        }\r\n    }\r\n\r\n    move(event: any, moveStart: MoveStart, cropperPosition: CropperPosition): void {\r\n        const diffX = this.getClientX(event) - moveStart.clientX;\r\n        const diffY = this.getClientY(event) - moveStart.clientY;\r\n\r\n        cropperPosition.x1 = moveStart.x1 + diffX;\r\n        cropperPosition.y1 = moveStart.y1 + diffY;\r\n        cropperPosition.x2 = moveStart.x2 + diffX;\r\n        cropperPosition.y2 = moveStart.y2 + diffY;\r\n    }\r\n\r\n    resize(event: any, moveStart: MoveStart, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\r\n        const moveX = this.getClientX(event) - moveStart.clientX;\r\n        const moveY = this.getClientY(event) - moveStart.clientY;\r\n        switch (moveStart.position) {\r\n            case 'left':\r\n                cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\r\n                    cropperPosition.x2 - settings.cropperScaledMinWidth);\r\n                break;\r\n            case 'topleft':\r\n                cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\r\n                    cropperPosition.x2 - settings.cropperScaledMinWidth);\r\n                cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\r\n                    cropperPosition.y2 - settings.cropperScaledMinHeight);\r\n                break;\r\n            case 'top':\r\n                cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\r\n                    cropperPosition.y2 - settings.cropperScaledMinHeight);\r\n                break;\r\n            case 'topright':\r\n                cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\r\n                    cropperPosition.x1 + settings.cropperScaledMinWidth);\r\n                cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\r\n                    cropperPosition.y2 - settings.cropperScaledMinHeight);\r\n                break;\r\n            case 'right':\r\n                cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\r\n                    cropperPosition.x1 + settings.cropperScaledMinWidth);\r\n                break;\r\n            case 'bottomright':\r\n                cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\r\n                    cropperPosition.x1 + settings.cropperScaledMinWidth);\r\n                cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\r\n                    cropperPosition.y1 + settings.cropperScaledMinHeight);\r\n                break;\r\n            case 'bottom':\r\n                cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\r\n                    cropperPosition.y1 + settings.cropperScaledMinHeight);\r\n                break;\r\n            case 'bottomleft':\r\n                cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\r\n                    cropperPosition.x2 - settings.cropperScaledMinWidth);\r\n                cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\r\n                    cropperPosition.y1 + settings.cropperScaledMinHeight);\r\n                break;\r\n            case 'center':\r\n                const scale = event.scale;\r\n                const newWidth = Math.min(\r\n                    Math.max(settings.cropperScaledMinWidth, (Math.abs(moveStart.x2 - moveStart.x1)) * scale),\r\n                    settings.cropperScaledMaxWidth);\r\n                const newHeight = Math.min(\r\n                    Math.max(settings.cropperScaledMinHeight, (Math.abs(moveStart.y2 - moveStart.y1)) * scale),\r\n                    settings.cropperScaledMaxHeight);\r\n                cropperPosition.x1 = moveStart.clientX - newWidth / 2;\r\n                cropperPosition.x2 = moveStart.clientX + newWidth / 2;\r\n                cropperPosition.y1 = moveStart.clientY - newHeight / 2;\r\n                cropperPosition.y2 = moveStart.clientY + newHeight / 2;\r\n                if (cropperPosition.x1 < 0) {\r\n                    cropperPosition.x2 -= cropperPosition.x1;\r\n                    cropperPosition.x1 = 0;\r\n                } else if (cropperPosition.x2 > maxSize.width) {\r\n                    cropperPosition.x1 -= (cropperPosition.x2 - maxSize.width);\r\n                    cropperPosition.x2 = maxSize.width;\r\n                }\r\n                if (cropperPosition.y1 < 0) {\r\n                    cropperPosition.y2 -= cropperPosition.y1;\r\n                    cropperPosition.y1 = 0;\r\n                } else if (cropperPosition.y2 > maxSize.height) {\r\n                    cropperPosition.y1 -= (cropperPosition.y2 - maxSize.height);\r\n                    cropperPosition.y2 = maxSize.height;\r\n                }\r\n                break;\r\n        }\r\n\r\n        if (settings.maintainAspectRatio) {\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            this.checkAspectRatio(moveStart.position!, cropperPosition, maxSize, settings);\r\n        }\r\n    }\r\n\r\n    checkAspectRatio(position: string, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\r\n        let overflowX = 0;\r\n        let overflowY = 0;\r\n\r\n        switch (position) {\r\n            case 'top':\r\n                cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\r\n                overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\r\n                overflowY = Math.max(0 - cropperPosition.y1, 0);\r\n                if (overflowX > 0 || overflowY > 0) {\r\n                    cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\r\n                    cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\r\n                }\r\n                break;\r\n            case 'bottom':\r\n                cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\r\n                overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\r\n                overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\r\n                if (overflowX > 0 || overflowY > 0) {\r\n                    cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\r\n                    cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : (overflowX / settings.aspectRatio);\r\n                }\r\n                break;\r\n            case 'topleft':\r\n                cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\r\n                overflowX = Math.max(0 - cropperPosition.x1, 0);\r\n                overflowY = Math.max(0 - cropperPosition.y1, 0);\r\n                if (overflowX > 0 || overflowY > 0) {\r\n                    cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\r\n                    cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\r\n                }\r\n                break;\r\n            case 'topright':\r\n                cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\r\n                overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\r\n                overflowY = Math.max(0 - cropperPosition.y1, 0);\r\n                if (overflowX > 0 || overflowY > 0) {\r\n                    cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\r\n                    cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\r\n                }\r\n                break;\r\n            case 'right':\r\n            case 'bottomright':\r\n                cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\r\n                overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\r\n                overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\r\n                if (overflowX > 0 || overflowY > 0) {\r\n                    cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\r\n                    cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\r\n                }\r\n                break;\r\n            case 'left':\r\n            case 'bottomleft':\r\n                cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\r\n                overflowX = Math.max(0 - cropperPosition.x1, 0);\r\n                overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\r\n                if (overflowX > 0 || overflowY > 0) {\r\n                    cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\r\n                    cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\r\n                }\r\n                break;\r\n            case 'center':\r\n                cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\r\n                cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\r\n                const overflowX1 = Math.max(0 - cropperPosition.x1, 0);\r\n                const overflowX2 = Math.max(cropperPosition.x2 - maxSize.width, 0);\r\n                const overflowY1 = Math.max(cropperPosition.y2 - maxSize.height, 0);\r\n                const overflowY2 = Math.max(0 - cropperPosition.y1, 0);\r\n                if (overflowX1 > 0 || overflowX2 > 0 || overflowY1 > 0 || overflowY2 > 0) {\r\n                    cropperPosition.x1 += (overflowY1 * settings.aspectRatio) > overflowX1\r\n                        ? (overflowY1 * settings.aspectRatio) : overflowX1;\r\n                    cropperPosition.x2 -= (overflowY2 * settings.aspectRatio) > overflowX2\r\n                        ? (overflowY2 * settings.aspectRatio) : overflowX2;\r\n                    cropperPosition.y1 += (overflowY2 * settings.aspectRatio) > overflowX2\r\n                        ? overflowY2 : overflowX2 / settings.aspectRatio;\r\n                    cropperPosition.y2 -= (overflowY1 * settings.aspectRatio) > overflowX1\r\n                        ? overflowY1 : overflowX1 / settings.aspectRatio;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n\r\n    getClientX(event: any): number {\r\n        return event.touches?.[0].clientX || event.clientX || 0;\r\n    }\r\n\r\n    getClientY(event: any): number {\r\n        return event.touches?.[0].clientY || event.clientY || 0;\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { ExifTransform } from '../interfaces/exif-transform.interface';\r\n\r\n// Black 2x1 JPEG, with the following meta information set:\r\n// - EXIF Orientation: 6 (Rotated 90° CCW)\r\n// Source: https://github.com/blueimp/JavaScript-Load-Image\r\nconst testAutoOrientationImageURL =\r\n    'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +\r\n    'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +\r\n    'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +\r\n    'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +\r\n    'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +\r\n    'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';\r\n\r\nexport function supportsAutomaticRotation(): Promise<boolean> {\r\n    return new Promise((resolve) => {\r\n        const img = new Image();\r\n        img.onload = () => {\r\n            // Check if browser supports automatic image orientation:\r\n            const supported = img.width === 1 && img.height === 2;\r\n            resolve(supported);\r\n        };\r\n        img.src = testAutoOrientationImageURL;\r\n    });\r\n}\r\n\r\nexport function getTransformationsFromExifData(exifRotationOrBase64Image: number | string): ExifTransform {\r\n    if (typeof exifRotationOrBase64Image === 'string') {\r\n        exifRotationOrBase64Image = getExifRotation(exifRotationOrBase64Image);\r\n    }\r\n    switch (exifRotationOrBase64Image) {\r\n        case 2:\r\n            return { rotate: 0, flip: true };\r\n        case 3:\r\n            return { rotate: 2, flip: false };\r\n        case 4:\r\n            return { rotate: 2, flip: true };\r\n        case 5:\r\n            return { rotate: 1, flip: true };\r\n        case 6:\r\n            return { rotate: 1, flip: false };\r\n        case 7:\r\n            return { rotate: 3, flip: true };\r\n        case 8:\r\n            return { rotate: 3, flip: false };\r\n        default:\r\n            return { rotate: 0, flip: false };\r\n    }\r\n}\r\n\r\nfunction getExifRotation(imageBase64: string): number {\r\n    const view = new DataView(base64ToArrayBuffer(imageBase64));\r\n    if (view.getUint16(0, false) !== 0xFFD8) {\r\n        return -2;\r\n    }\r\n    const length = view.byteLength;\r\n    let offset = 2;\r\n    while (offset < length) {\r\n        if (view.getUint16(offset + 2, false) <= 8) { return -1; }\r\n        const marker = view.getUint16(offset, false);\r\n        offset += 2;\r\n        if (marker === 0xFFE1) {\r\n            if (view.getUint32(offset += 2, false) !== 0x45786966) {\r\n                return -1;\r\n            }\r\n\r\n            const little = view.getUint16(offset += 6, false) === 0x4949;\r\n            offset += view.getUint32(offset + 4, little);\r\n            const tags = view.getUint16(offset, little);\r\n            offset += 2;\r\n            for (let i = 0; i < tags; i++) {\r\n                if (view.getUint16(offset + (i * 12), little) === 0x0112) {\r\n                    return view.getUint16(offset + (i * 12) + 8, little);\r\n                }\r\n            }\r\n            // tslint:disable-next-line:no-bitwise\r\n        } else if ((marker & 0xFF00) !== 0xFF00) {\r\n            break;\r\n        } else {\r\n            offset += view.getUint16(offset, false);\r\n        }\r\n    }\r\n    return -1;\r\n}\r\n\r\nfunction base64ToArrayBuffer(imageBase64: string): ArrayBufferLike {\r\n    imageBase64 = imageBase64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\r\n    const binaryString = atob(imageBase64);\r\n    const len = binaryString.length;\r\n    const bytes = new Uint8Array(len);\r\n    for (let i = 0; i < len; i++) {\r\n        bytes[i] = binaryString.charCodeAt(i);\r\n    }\r\n    return bytes.buffer;\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Dimensions, LoadedImage } from '../interfaces';\r\nimport { CropperSettings } from '../interfaces/cropper.settings';\r\nimport { ExifTransform } from '../interfaces/exif-transform.interface';\r\nimport { getTransformationsFromExifData, supportsAutomaticRotation } from '../utils/exif.utils';\r\n\r\ninterface LoadImageBase64 {\r\n    originalImage: HTMLImageElement;\r\n    originalBase64: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoadImageService {\r\n\r\n    private autoRotateSupported: Promise<boolean> = supportsAutomaticRotation();\r\n\r\n    loadImageFile(file: File, cropperSettings: CropperSettings): Promise<LoadedImage> {\r\n        return new Promise((resolve, reject) => {\r\n            const fileReader = new FileReader();\r\n            fileReader.onload = (event: any) => {\r\n                this.loadImage(event.target.result, file.type, cropperSettings)\r\n                    .then(resolve)\r\n                    .catch(reject);\r\n            };\r\n            fileReader.readAsDataURL(file);\r\n        });\r\n    }\r\n\r\n    private loadImage(imageBase64: string, imageType: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\r\n        if (!this.isValidImageType(imageType)) {\r\n            return Promise.reject(new Error('Invalid image type'));\r\n        }\r\n        return this.loadBase64Image(imageBase64, cropperSettings);\r\n    }\r\n\r\n    private isValidImageType(type: string): boolean {\r\n        return /image\\/(png|jpg|jpeg|bmp|gif|tiff|webp|x-icon|vnd.microsoft.icon)/.test(type);\r\n    }\r\n\r\n    loadImageFromURL(url: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\r\n        return new Promise((resolve, reject) => {\r\n            const img = new Image();\r\n            img.onerror = () => reject;\r\n            img.onload = () => {\r\n                const canvas = document.createElement('canvas');\r\n                const context = canvas.getContext('2d');\r\n                canvas.width = img.width;\r\n                canvas.height = img.height;\r\n                context?.drawImage(img, 0, 0);\r\n                this.loadBase64Image(canvas.toDataURL(), cropperSettings).then(resolve);\r\n            };\r\n            img.crossOrigin = 'anonymous';\r\n            img.src = url;\r\n        });\r\n    }\r\n\r\n    loadBase64Image(imageBase64: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\r\n        return new Promise<LoadImageBase64>((resolve, reject) => {\r\n            const originalImage = new Image();\r\n            originalImage.onload = () => resolve({\r\n                originalImage,\r\n                originalBase64: imageBase64\r\n            });\r\n            originalImage.onerror = reject;\r\n            originalImage.src = imageBase64;\r\n        }).then((res: LoadImageBase64) => this.transformImageBase64(res, cropperSettings));\r\n    }\r\n\r\n    private async transformImageBase64(res: LoadImageBase64, cropperSettings: CropperSettings): Promise<LoadedImage> {\r\n        const autoRotate = await this.autoRotateSupported;\r\n        const exifTransform = await getTransformationsFromExifData(autoRotate ? -1 : res.originalBase64);\r\n        if (!res.originalImage || !res.originalImage.complete) {\r\n            return Promise.reject(new Error('No image loaded'));\r\n        }\r\n        const loadedImage = {\r\n            original: {\r\n                base64: res.originalBase64,\r\n                image: res.originalImage,\r\n                size: {\r\n                    width: res.originalImage.naturalWidth,\r\n                    height: res.originalImage.naturalHeight\r\n                }\r\n            },\r\n            exifTransform\r\n        };\r\n        return this.transformLoadedImage(loadedImage, cropperSettings);\r\n    }\r\n\r\n    async transformLoadedImage(loadedImage: Partial<LoadedImage>, cropperSettings: CropperSettings): Promise<LoadedImage> {\r\n        // tslint:disable-next-line:no-non-null-assertion\r\n        const canvasRotation = cropperSettings.canvasRotation + loadedImage.exifTransform!.rotate;\r\n        const originalSize = {\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            width: loadedImage.original!.image.naturalWidth,\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            height: loadedImage.original!.image.naturalHeight\r\n        };\r\n        // tslint:disable-next-line:no-non-null-assertion\r\n        if (canvasRotation === 0 && !loadedImage.exifTransform!.flip && !cropperSettings.containWithinAspectRatio) {\r\n            return {\r\n                original: {\r\n                    // tslint:disable-next-line:no-non-null-assertion\r\n                    base64: loadedImage.original!.base64,\r\n                    // tslint:disable-next-line:no-non-null-assertion\r\n                    image: loadedImage.original!.image,\r\n                    size: { ...originalSize }\r\n                },\r\n                transformed: {\r\n                    // tslint:disable-next-line:no-non-null-assertion\r\n                    base64: loadedImage.original!.base64,\r\n                    // tslint:disable-next-line:no-non-null-assertion\r\n                    image: loadedImage.original!.image,\r\n                    size: { ...originalSize }\r\n                },\r\n                // tslint:disable-next-line:no-non-null-assertion\r\n                exifTransform: loadedImage.exifTransform!\r\n            };\r\n        }\r\n        // tslint:disable-next-line:no-non-null-assertion\r\n        const transformedSize = this.getTransformedSize(originalSize, loadedImage.exifTransform!, cropperSettings);\r\n        const canvas = document.createElement('canvas');\r\n        canvas.width = transformedSize.width;\r\n        canvas.height = transformedSize.height;\r\n        const ctx = canvas.getContext('2d');\r\n        ctx?.setTransform(\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            loadedImage.exifTransform!.flip ? -1 : 1,\r\n            0,\r\n            0,\r\n            1,\r\n            canvas.width / 2,\r\n            canvas.height / 2\r\n        );\r\n        ctx?.rotate(Math.PI * (canvasRotation / 2));\r\n        ctx?.drawImage(\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            loadedImage.original!.image,\r\n            -originalSize.width / 2,\r\n            -originalSize.height / 2\r\n        );\r\n        const transformedBase64 = canvas.toDataURL();\r\n        const transformedImage = await this.loadImageFromBase64(transformedBase64);\r\n        return {\r\n            original: {\r\n                // tslint:disable-next-line:no-non-null-assertion\r\n                base64: loadedImage.original!.base64,\r\n                // tslint:disable-next-line:no-non-null-assertion\r\n                image: loadedImage.original!.image,\r\n                size: { ...originalSize }\r\n            },\r\n            transformed: {\r\n                base64: transformedBase64,\r\n                image: transformedImage,\r\n                size: {\r\n                    width: transformedImage.width,\r\n                    height: transformedImage.height\r\n                }\r\n            },\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            exifTransform: loadedImage.exifTransform!\r\n        };\r\n    }\r\n\r\n    private loadImageFromBase64(imageBase64: string): Promise<HTMLImageElement> {\r\n        return new Promise<HTMLImageElement>(((resolve, reject) => {\r\n            const image = new Image();\r\n            image.onload = () => resolve(image);\r\n            image.onerror = reject;\r\n            image.src = imageBase64;\r\n        }));\r\n    }\r\n\r\n    private getTransformedSize(\r\n        originalSize: { width: number, height: number },\r\n        exifTransform: ExifTransform,\r\n        cropperSettings: CropperSettings\r\n    ): Dimensions {\r\n        const canvasRotation = cropperSettings.canvasRotation + exifTransform.rotate;\r\n        if (cropperSettings.containWithinAspectRatio) {\r\n            if (canvasRotation % 2) {\r\n                const minWidthToContain = originalSize.width * cropperSettings.aspectRatio;\r\n                const minHeightToContain = originalSize.height / cropperSettings.aspectRatio;\r\n                return {\r\n                    width: Math.max(originalSize.height, minWidthToContain),\r\n                    height: Math.max(originalSize.width, minHeightToContain)\r\n                };\r\n            } else {\r\n                const minWidthToContain = originalSize.height * cropperSettings.aspectRatio;\r\n                const minHeightToContain = originalSize.width / cropperSettings.aspectRatio;\r\n                return {\r\n                    width: Math.max(originalSize.width, minWidthToContain),\r\n                    height: Math.max(originalSize.height, minHeightToContain)\r\n                };\r\n            }\r\n        }\r\n\r\n        if (canvasRotation % 2) {\r\n            return {\r\n                height: originalSize.width,\r\n                width: originalSize.height\r\n            };\r\n        }\r\n        return {\r\n            width: originalSize.width,\r\n            height: originalSize.height\r\n        };\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    HostBinding,\r\n    HostListener,\r\n    Input,\r\n    isDevMode,\r\n    OnChanges,\r\n    OnInit,\r\n    Output,\r\n    SimpleChanges,\r\n    ViewChild\r\n} from '@angular/core';\r\nimport { DomSanitizer, SafeStyle, SafeUrl } from '@angular/platform-browser';\r\nimport { CropperPosition, Dimensions, ImageCroppedEvent, ImageTransform, LoadedImage, MoveStart } from './interfaces';\r\nimport { OutputFormat } from './interfaces/cropper-options.interface';\r\nimport { CropperSettings } from './interfaces/cropper.settings';\r\nimport { MoveTypes } from './interfaces/move-start.interface';\r\nimport { CropService } from './services/crop.service';\r\nimport { CropperPositionService } from './services/cropper-position.service';\r\nimport { LoadImageService } from './services/load-image.service';\r\nimport { HammerStatic } from './utils/hammer.utils';\r\nimport { getEventForKey, getInvertedPositionForKey, getPositionForKey } from './utils/keyboard.utils';\r\n\r\n@Component({\r\n    selector: 'asw-image-crop',\r\n    templateUrl: './image-crop.component.html',\r\n    styleUrls: ['./image-crop.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class AswImageCropComponent implements OnChanges, OnInit {\r\n    private Hammer: HammerStatic = (window as any).Hammer || null;\r\n    private settings = new CropperSettings();\r\n    private setImageMaxSizeRetries = 0;\r\n    private moveStart?: MoveStart;\r\n    private loadedImage?: LoadedImage;\r\n\r\n    safeImgDataUrl?: SafeUrl | string;\r\n    safeTransformStyle?: SafeStyle | string;\r\n    marginLeft: SafeStyle | string = '0px';\r\n    maxSize: Dimensions = {\r\n        width: 0,\r\n        height: 0\r\n    };\r\n    moveTypes = MoveTypes;\r\n    imageVisible = false;\r\n\r\n    @ViewChild('wrapper', { static: true }) wrapper!: ElementRef<HTMLDivElement>;\r\n    @ViewChild('sourceImage', { static: false }) sourceImage!: ElementRef<HTMLDivElement>;\r\n\r\n    @Input() imageChangedEvent?: any;\r\n    @Input() imageURL?: string;\r\n    @Input() imageBase64?: string;\r\n    @Input() imageFile?: File;\r\n\r\n    @Input() format: OutputFormat = this.settings.format;\r\n    @Input() transform: ImageTransform = {};\r\n    @Input() maintainAspectRatio = this.settings.maintainAspectRatio;\r\n    @Input() aspectRatio = this.settings.aspectRatio;\r\n    @Input() resizeToWidth = this.settings.resizeToWidth;\r\n    @Input() resizeToHeight = this.settings.resizeToHeight;\r\n    @Input() cropperMinWidth = this.settings.cropperMinWidth;\r\n    @Input() cropperMinHeight = this.settings.cropperMinHeight;\r\n    @Input() cropperMaxHeight = this.settings.cropperMaxHeight;\r\n    @Input() cropperMaxWidth = this.settings.cropperMaxWidth;\r\n    @Input() cropperStaticWidth = this.settings.cropperStaticWidth;\r\n    @Input() cropperStaticHeight = this.settings.cropperStaticHeight;\r\n    @Input() canvasRotation = this.settings.canvasRotation;\r\n    @Input() initialStepSize = this.settings.initialStepSize;\r\n    @Input() roundCropper = this.settings.roundCropper;\r\n    @Input() onlyScaleDown = this.settings.onlyScaleDown;\r\n    @Input() imageQuality = this.settings.imageQuality;\r\n    @Input() autoCrop = this.settings.autoCrop;\r\n    @Input() backgroundColor = this.settings.backgroundColor;\r\n    @Input() containWithinAspectRatio = this.settings.containWithinAspectRatio;\r\n    @Input() hideResizeSquares = this.settings.hideResizeSquares;\r\n    @Input() cropper: CropperPosition = {\r\n        x1: -100,\r\n        y1: -100,\r\n        x2: 10000,\r\n        y2: 10000\r\n    };\r\n    @HostBinding('style.text-align')\r\n    @Input() alignImage: 'left' | 'center' = this.settings.alignImage;\r\n    @HostBinding('class.disabled')\r\n    @Input() disabled = false;\r\n\r\n    @Output() imageCropped = new EventEmitter<ImageCroppedEvent>();\r\n    @Output() startCropImage = new EventEmitter<void>();\r\n    @Output() imageLoaded = new EventEmitter<LoadedImage>();\r\n    @Output() cropperReady = new EventEmitter<Dimensions>();\r\n    @Output() loadImageFailed = new EventEmitter<void>();\r\n\r\n    constructor(\r\n        private cropService: CropService,\r\n        private cropperPositionService: CropperPositionService,\r\n        private loadImageService: LoadImageService,\r\n        private sanitizer: DomSanitizer,\r\n        private cd: ChangeDetectorRef\r\n    ) {\r\n        this.reset();\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        this.onChangesUpdateSettings(changes);\r\n        this.onChangesInputImage(changes);\r\n\r\n        if (this.loadedImage?.original.image.complete && (changes.containWithinAspectRatio || changes.canvasRotation)) {\r\n            this.loadImageService\r\n                .transformLoadedImage(this.loadedImage, this.settings)\r\n                .then((res) => this.setLoadedImage(res))\r\n                .catch((err) => this.loadImageError(err));\r\n        }\r\n        if (changes.cropper || changes.maintainAspectRatio || changes.aspectRatio) {\r\n            this.setMaxSize();\r\n            this.setCropperScaledMinSize();\r\n            this.setCropperScaledMaxSize();\r\n            if (this.maintainAspectRatio && (changes.maintainAspectRatio || changes.aspectRatio)) {\r\n                this.resetCropperPosition();\r\n            } else if (changes.cropper) {\r\n                this.checkCropperPosition(false);\r\n                this.doAutoCrop();\r\n            }\r\n            this.cd.markForCheck();\r\n        }\r\n        if (changes.transform) {\r\n            this.transform = this.transform || {};\r\n            this.setCssTransform();\r\n            this.doAutoCrop();\r\n        }\r\n    }\r\n\r\n    private onChangesUpdateSettings(changes: SimpleChanges): void {\r\n        this.settings.setOptionsFromChanges(changes);\r\n\r\n        if (this.settings.cropperStaticHeight && this.settings.cropperStaticWidth) {\r\n            this.settings.setOptions({\r\n                hideResizeSquares: true,\r\n                cropperMinWidth: this.settings.cropperStaticWidth,\r\n                cropperMinHeight: this.settings.cropperStaticHeight,\r\n                cropperMaxHeight: this.settings.cropperStaticHeight,\r\n                cropperMaxWidth: this.settings.cropperStaticWidth,\r\n                maintainAspectRatio: false\r\n            });\r\n        }\r\n    }\r\n\r\n    private onChangesInputImage(changes: SimpleChanges): void {\r\n        if (changes.imageChangedEvent || changes.imageURL || changes.imageBase64 || changes.imageFile) {\r\n            this.reset();\r\n        }\r\n        if (changes.imageChangedEvent && this.isValidImageChangedEvent()) {\r\n            this.loadImageFile(this.imageChangedEvent.target.files[0]);\r\n        }\r\n        if (changes.imageURL && this.imageURL) {\r\n            this.loadImageFromURL(this.imageURL);\r\n        }\r\n        if (changes.imageBase64 && this.imageBase64) {\r\n            this.loadBase64Image(this.imageBase64);\r\n        }\r\n        if (changes.imageFile && this.imageFile) {\r\n            this.loadImageFile(this.imageFile);\r\n        }\r\n    }\r\n\r\n    private isValidImageChangedEvent(): boolean {\r\n        return this.imageChangedEvent?.target?.files?.length > 0;\r\n    }\r\n\r\n    private setCssTransform(): void {\r\n        this.safeTransformStyle = this.sanitizer.bypassSecurityTrustStyle(\r\n            'scaleX(' + (this.transform.scale || 1) * (this.transform.flipH ? -1 : 1) + ')' +\r\n            'scaleY(' + (this.transform.scale || 1) * (this.transform.flipV ? -1 : 1) + ')' +\r\n            'rotate(' + (this.transform.rotate || 0) + 'deg)' +\r\n            `translate(${this.transform.translateH || 0}%, ${this.transform.translateV || 0}%)`\r\n        );\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.settings.stepSize = this.initialStepSize;\r\n        this.activatePinchGesture();\r\n    }\r\n\r\n    private reset(): void {\r\n        this.imageVisible = false;\r\n        this.loadedImage = undefined;\r\n        this.safeImgDataUrl = 'data:image/png;base64,iVBORw0KGg'\r\n            + 'oAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAU'\r\n            + 'AAarVyFEAAAAASUVORK5CYII=';\r\n        this.moveStart = {\r\n            active: false,\r\n            type: null,\r\n            position: null,\r\n            x1: 0,\r\n            y1: 0,\r\n            x2: 0,\r\n            y2: 0,\r\n            clientX: 0,\r\n            clientY: 0\r\n        };\r\n        this.maxSize = {\r\n            width: 0,\r\n            height: 0\r\n        };\r\n        this.cropper.x1 = -100;\r\n        this.cropper.y1 = -100;\r\n        this.cropper.x2 = 10000;\r\n        this.cropper.y2 = 10000;\r\n    }\r\n\r\n    private loadImageFile(file: File): void {\r\n        this.loadImageService\r\n            .loadImageFile(file, this.settings)\r\n            .then((res) => this.setLoadedImage(res))\r\n            .catch((err) => this.loadImageError(err));\r\n    }\r\n\r\n    private loadBase64Image(imageBase64: string): void {\r\n        this.loadImageService\r\n            .loadBase64Image(imageBase64, this.settings)\r\n            .then((res) => this.setLoadedImage(res))\r\n            .catch((err) => this.loadImageError(err));\r\n    }\r\n\r\n    private loadImageFromURL(url: string): void {\r\n        this.loadImageService\r\n            .loadImageFromURL(url, this.settings)\r\n            .then((res) => this.setLoadedImage(res))\r\n            .catch((err) => this.loadImageError(err));\r\n    }\r\n\r\n    private setLoadedImage(loadedImage: LoadedImage): void {\r\n        this.loadedImage = loadedImage;\r\n        this.safeImgDataUrl = this.sanitizer.bypassSecurityTrustResourceUrl(loadedImage.transformed.base64);\r\n        this.cd.markForCheck();\r\n    }\r\n\r\n    private loadImageError(error: any): void {\r\n        console.error(error);\r\n        this.loadImageFailed.emit();\r\n    }\r\n\r\n    imageLoadedInView(): void {\r\n        if (this.loadedImage != null) {\r\n            this.imageLoaded.emit(this.loadedImage);\r\n            this.setImageMaxSizeRetries = 0;\r\n            setTimeout(() => this.checkImageMaxSizeRecursively());\r\n        }\r\n    }\r\n\r\n    private checkImageMaxSizeRecursively(): void {\r\n        if (this.setImageMaxSizeRetries > 40) {\r\n            this.loadImageFailed.emit();\r\n        } else if (this.sourceImageLoaded()) {\r\n            this.setMaxSize();\r\n            this.setCropperScaledMinSize();\r\n            this.setCropperScaledMaxSize();\r\n            this.resetCropperPosition();\r\n            this.cropperReady.emit({ ...this.maxSize });\r\n            this.cd.markForCheck();\r\n        } else {\r\n            this.setImageMaxSizeRetries++;\r\n            setTimeout(() => this.checkImageMaxSizeRecursively(), 50);\r\n        }\r\n    }\r\n\r\n    private sourceImageLoaded(): boolean {\r\n        return this.sourceImage?.nativeElement?.offsetWidth > 0;\r\n    }\r\n\r\n    @HostListener('window:resize')\r\n    onResize(): void {\r\n        if (!this.loadedImage) {\r\n            return;\r\n        }\r\n        this.resizeCropperPosition();\r\n        this.setMaxSize();\r\n        this.setCropperScaledMinSize();\r\n        this.setCropperScaledMaxSize();\r\n    }\r\n\r\n    private activatePinchGesture(): void {\r\n        if (this.Hammer) {\r\n            const hammer = new this.Hammer(this.wrapper.nativeElement);\r\n            hammer.get('pinch').set({ enable: true });\r\n            hammer.on('pinchmove', this.onPinch.bind(this));\r\n            hammer.on('pinchend', this.pinchStop.bind(this));\r\n            hammer.on('pinchstart', this.startPinch.bind(this));\r\n        } else if (isDevMode()) {\r\n            console.warn('[AswImageCropper] Could not find HammerJS - Pinch Gesture won\\'t work');\r\n        }\r\n    }\r\n\r\n    private resizeCropperPosition(): void {\r\n        const sourceImageElement = this.sourceImage.nativeElement;\r\n        if (this.maxSize.width !== sourceImageElement.offsetWidth || this.maxSize.height !== sourceImageElement.offsetHeight) {\r\n            this.cropper.x1 = this.cropper.x1 * sourceImageElement.offsetWidth / this.maxSize.width;\r\n            this.cropper.x2 = this.cropper.x2 * sourceImageElement.offsetWidth / this.maxSize.width;\r\n            this.cropper.y1 = this.cropper.y1 * sourceImageElement.offsetHeight / this.maxSize.height;\r\n            this.cropper.y2 = this.cropper.y2 * sourceImageElement.offsetHeight / this.maxSize.height;\r\n        }\r\n    }\r\n\r\n    resetCropperPosition(): void {\r\n        this.cropperPositionService.resetCropperPosition(this.sourceImage, this.cropper, this.settings);\r\n        this.doAutoCrop();\r\n        this.imageVisible = true;\r\n    }\r\n\r\n    keyboardAccess(event: KeyboardEvent): void {\r\n        this.changeKeyboardStepSize(event);\r\n        this.keyboardMoveCropper(event);\r\n    }\r\n\r\n    private changeKeyboardStepSize(event: KeyboardEvent): void {\r\n        const key = +event.key;\r\n        if (key >= 1 && key <= 9) {\r\n            this.settings.stepSize = key;\r\n        }\r\n    }\r\n\r\n    private keyboardMoveCropper(event: any): void {\r\n        const keyboardWhiteList: string[] = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft'];\r\n        if (!(keyboardWhiteList.includes(event.key))) {\r\n            return;\r\n        }\r\n        const moveType = event.shiftKey ? MoveTypes.Resize : MoveTypes.Move;\r\n        const position = event.altKey ? getInvertedPositionForKey(event.key) : getPositionForKey(event.key);\r\n        const moveEvent = getEventForKey(event.key, this.settings.stepSize);\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        this.startMove({ clientX: 0, clientY: 0 }, moveType, position);\r\n        this.moveImg(moveEvent);\r\n        this.moveStop();\r\n    }\r\n\r\n    startMove(event: any, moveType: MoveTypes, position: string | null = null): void {\r\n        if (this.moveStart?.active && this.moveStart?.type === MoveTypes.Pinch) {\r\n            return;\r\n        }\r\n        if (event.preventDefault) {\r\n            event.preventDefault();\r\n        }\r\n        this.moveStart = {\r\n            active: true,\r\n            type: moveType,\r\n            position,\r\n            clientX: this.cropperPositionService.getClientX(event),\r\n            clientY: this.cropperPositionService.getClientY(event),\r\n            ...this.cropper\r\n        };\r\n    }\r\n\r\n    startPinch(event: any): void {\r\n        if (!this.safeImgDataUrl) {\r\n            return;\r\n        }\r\n        if (event.preventDefault) {\r\n            event.preventDefault();\r\n        }\r\n        this.moveStart = {\r\n            active: true,\r\n            type: MoveTypes.Pinch,\r\n            position: 'center',\r\n            clientX: this.cropper.x1 + (this.cropper.x2 - this.cropper.x1) / 2,\r\n            clientY: this.cropper.y1 + (this.cropper.y2 - this.cropper.y1) / 2,\r\n            ...this.cropper\r\n        };\r\n    }\r\n\r\n    @HostListener('document:mousemove', ['$event'])\r\n    @HostListener('document:touchmove', ['$event'])\r\n    moveImg(event: any): void {\r\n        // tslint:disable-next-line:no-non-null-assertion\r\n        if (this.moveStart!.active) {\r\n            if (event.stopPropagation) {\r\n                event.stopPropagation();\r\n            }\r\n            if (event.preventDefault) {\r\n                event.preventDefault();\r\n            }\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            if (this.moveStart!.type === MoveTypes.Move) {\r\n                // tslint:disable-next-line:no-non-null-assertion\r\n                this.cropperPositionService.move(event, this.moveStart!, this.cropper);\r\n                this.checkCropperPosition(true);\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            } else if (this.moveStart!.type === MoveTypes.Resize) {\r\n                if (!this.cropperStaticWidth && !this.cropperStaticHeight) {\r\n                    // tslint:disable-next-line:no-non-null-assertion\r\n                    this.cropperPositionService.resize(event, this.moveStart!, this.cropper, this.maxSize, this.settings);\r\n                }\r\n                this.checkCropperPosition(false);\r\n            }\r\n            this.cd.detectChanges();\r\n        }\r\n    }\r\n\r\n    onPinch(event: any): void {\r\n        // tslint:disable-next-line:no-non-null-assertion\r\n        if (this.moveStart!.active) {\r\n            if (event.stopPropagation) {\r\n                event.stopPropagation();\r\n            }\r\n            if (event.preventDefault) {\r\n                event.preventDefault();\r\n            }\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            if (this.moveStart!.type === MoveTypes.Pinch) {\r\n                // tslint:disable-next-line:no-non-null-assertion\r\n                this.cropperPositionService.resize(event, this.moveStart!, this.cropper, this.maxSize, this.settings);\r\n                this.checkCropperPosition(false);\r\n            }\r\n            this.cd.detectChanges();\r\n        }\r\n    }\r\n\r\n    private setMaxSize(): void {\r\n        if (this.sourceImage) {\r\n            const sourceImageElement = this.sourceImage.nativeElement;\r\n            this.maxSize.width = sourceImageElement.offsetWidth;\r\n            this.maxSize.height = sourceImageElement.offsetHeight;\r\n            this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.maxSize.width / 2 + 'px)');\r\n        }\r\n    }\r\n\r\n    private setCropperScaledMinSize(): void {\r\n        if (this.loadedImage?.transformed?.image) {\r\n            this.setCropperScaledMinWidth();\r\n            this.setCropperScaledMinHeight();\r\n        } else {\r\n            this.settings.cropperScaledMinWidth = 20;\r\n            this.settings.cropperScaledMinHeight = 20;\r\n        }\r\n    }\r\n\r\n    private setCropperScaledMinWidth(): void {\r\n        this.settings.cropperScaledMinWidth = this.cropperMinWidth > 0\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            ? Math.max(20, this.cropperMinWidth / this.loadedImage!.transformed.image.width * this.maxSize.width)\r\n            : 20;\r\n    }\r\n\r\n    private setCropperScaledMinHeight(): void {\r\n        if (this.maintainAspectRatio) {\r\n            this.settings.cropperScaledMinHeight = Math.max(20, this.settings.cropperScaledMinWidth / this.aspectRatio);\r\n        } else if (this.cropperMinHeight > 0) {\r\n            this.settings.cropperScaledMinHeight = Math.max(\r\n                20,\r\n                // tslint:disable-next-line:no-non-null-assertion\r\n                this.cropperMinHeight / this.loadedImage!.transformed.image.height * this.maxSize.height\r\n            );\r\n        } else {\r\n            this.settings.cropperScaledMinHeight = 20;\r\n        }\r\n    }\r\n\r\n    private setCropperScaledMaxSize(): void {\r\n        if (this.loadedImage?.transformed?.image) {\r\n            const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;\r\n            this.settings.cropperScaledMaxWidth = this.cropperMaxWidth > 20 ? this.cropperMaxWidth / ratio : this.maxSize.width;\r\n            this.settings.cropperScaledMaxHeight = this.cropperMaxHeight > 20 ? this.cropperMaxHeight / ratio : this.maxSize.height;\r\n            if (this.maintainAspectRatio) {\r\n                if (this.settings.cropperScaledMaxWidth > this.settings.cropperScaledMaxHeight * this.aspectRatio) {\r\n                    this.settings.cropperScaledMaxWidth = this.settings.cropperScaledMaxHeight * this.aspectRatio;\r\n                } else if (this.settings.cropperScaledMaxWidth < this.settings.cropperScaledMaxHeight * this.aspectRatio) {\r\n                    this.settings.cropperScaledMaxHeight = this.settings.cropperScaledMaxWidth / this.aspectRatio;\r\n                }\r\n            }\r\n        } else {\r\n            this.settings.cropperScaledMaxWidth = this.maxSize.width;\r\n            this.settings.cropperScaledMaxHeight = this.maxSize.height;\r\n        }\r\n    }\r\n\r\n    private checkCropperPosition(maintainSize = false): void {\r\n        if (this.cropper.x1 < 0) {\r\n            this.cropper.x2 -= maintainSize ? this.cropper.x1 : 0;\r\n            this.cropper.x1 = 0;\r\n        }\r\n        if (this.cropper.y1 < 0) {\r\n            this.cropper.y2 -= maintainSize ? this.cropper.y1 : 0;\r\n            this.cropper.y1 = 0;\r\n        }\r\n        if (this.cropper.x2 > this.maxSize.width) {\r\n            this.cropper.x1 -= maintainSize ? (this.cropper.x2 - this.maxSize.width) : 0;\r\n            this.cropper.x2 = this.maxSize.width;\r\n        }\r\n        if (this.cropper.y2 > this.maxSize.height) {\r\n            this.cropper.y1 -= maintainSize ? (this.cropper.y2 - this.maxSize.height) : 0;\r\n            this.cropper.y2 = this.maxSize.height;\r\n        }\r\n    }\r\n\r\n    @HostListener('document:mouseup')\r\n    @HostListener('document:touchend')\r\n    moveStop(): void {\r\n        // tslint:disable-next-line:no-non-null-assertion\r\n        if (this.moveStart!.active) {\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            this.moveStart!.active = false;\r\n            this.doAutoCrop();\r\n        }\r\n    }\r\n\r\n    pinchStop(): void {\r\n        // tslint:disable-next-line:no-non-null-assertion\r\n        if (this.moveStart!.active) {\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            this.moveStart!.active = false;\r\n            this.doAutoCrop();\r\n        }\r\n    }\r\n\r\n    private doAutoCrop(): void {\r\n        if (this.autoCrop) {\r\n            this.crop();\r\n        }\r\n    }\r\n\r\n    crop(): ImageCroppedEvent | null {\r\n        if (this.loadedImage?.transformed?.image != null) {\r\n            this.startCropImage.emit();\r\n            const output = this.cropService.crop(this.sourceImage, this.loadedImage, this.cropper, this.settings);\r\n            if (output != null) {\r\n                this.imageCropped.emit(output);\r\n            }\r\n            return output;\r\n        }\r\n        return null;\r\n    }\r\n}\r\n","<div [style.background]=\"imageVisible && backgroundColor\"\r\n    #wrapper>\r\n    <img\r\n    #sourceImage\r\n    class=\"source-image\"\r\n    *ngIf=\"safeImgDataUrl\"\r\n    [src]=\"safeImgDataUrl\"\r\n    [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\r\n    [style.transform]=\"safeTransformStyle\"\r\n    (load)=\"imageLoadedInView()\"/>\r\n    <div\r\n        class=\"overlay\"\r\n        [style.width.px]=\"maxSize.width\"\r\n        [style.height.px]=\"maxSize.height\"\r\n        [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"></div>\r\n    <div class=\"cropper\"\r\n        *ngIf=\"imageVisible\"\r\n        [class.rounded]=\"roundCropper\"\r\n        [style.top.px]=\"cropper.y1\"\r\n        [style.left.px]=\"cropper.x1\"\r\n        [style.width.px]=\"cropper.x2 - cropper.x1\"\r\n        [style.height.px]=\"cropper.y2 - cropper.y1\"\r\n        [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\r\n        [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\r\n        (keydown)=\"keyboardAccess($event)\"\r\n        tabindex=\"0\">\r\n        <div\r\n            (mousedown)=\"startMove($event, moveTypes.Move)\"\r\n            (touchstart)=\"startMove($event, moveTypes.Move)\"\r\n            class=\"move\">\r\n        </div>\r\n        <ng-container *ngIf=\"!hideResizeSquares\">\r\n            <span class=\"resize topleft\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize top\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize topright\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize right\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize bottomright\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize bottom\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize bottomleft\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize left\">\r\n                <span class=\"square\"></span>\r\n            </span>\r\n            <span class=\"resize-bar top\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\r\n            </span>\r\n            <span class=\"resize-bar right\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\r\n            </span>\r\n            <span class=\"resize-bar bottom\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\r\n            </span>\r\n            <span class=\"resize-bar left\"\r\n                (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\r\n                (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\">\r\n            </span>\r\n        </ng-container>\r\n    </div>\r\n</div>","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AswImageCropComponent } from './image-crop.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        ReactiveFormsModule\r\n    ],\r\n    declarations: [\r\n        AswImageCropComponent\r\n    ],\r\n    exports: [\r\n        AswImageCropComponent\r\n    ]\r\n})\r\nexport class AswImageCropModule {}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport function base64ToFile(base64Image: string): Blob {\r\n    const split = base64Image.split(',');\r\n    const type = split[0].replace('data:', '').replace(';base64', '');\r\n    const byteString = atob(split[1]);\r\n    const ab = new ArrayBuffer(byteString.length);\r\n    const ia = new Uint8Array(ab);\r\n    for (let i = 0; i < byteString.length; i += 1) {\r\n        ia[i] = byteString.charCodeAt(i);\r\n    }\r\n    return new Blob([ab], { type });\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport * from './image-crop.module';\r\nexport * from './image-crop.component';\r\nexport * from './interfaces';\r\nexport { base64ToFile } from './utils/blob.utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.CropService","i2.CropperPositionService","i3.LoadImageService"],"mappings":"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"}