{"version":3,"file":"cm-image-cropper.mjs","sources":["../../../projects/cm-image-cropper/src/lib/cm-image-cropper/cm-image-cropper.component.ts","../../../projects/cm-image-cropper/src/public-api.ts","../../../projects/cm-image-cropper/src/cm-image-cropper.ts"],"sourcesContent":["import { Component, ViewChild, ElementRef, AfterViewInit, HostListener, Output, EventEmitter, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\ninterface CropperConfig {\n  showCrop?: boolean;\n  showRotate?: boolean;\n  showFlip?: boolean;\n  showZoom?: boolean;\n  showBrightness?: boolean;\n  showContrast?: boolean;\n  showSaturation?: boolean;\n}\n\ninterface AspectRatioOption {\n  label: string;\n  value: number;\n}\n\n@Component({\n  selector: 'cm-image-cropper',\n  standalone: true,\n  imports: [CommonModule, FormsModule],\n  template: `\n    <div class=\"image-cropper-container\">\n      <div class=\"image-cropper-card\">\n        <div class=\"image-cropper-body\">\n          <ng-container *ngIf=\"!imageUrl; else cropperTemplate\">\n            <div class=\"upload-container\">\n              <label for=\"image-upload\" class=\"upload-label\">Upload Image</label>\n              <input id=\"image-upload\" type=\"file\" (change)=\"onFileSelected($event)\" accept=\"image/*\" class=\"upload-input\">\n            </div>\n          </ng-container>\n          \n          <ng-template #cropperTemplate>\n            <div class=\"tabs\">\n              <button *ngIf=\"config.showCrop\" class=\"tab-button\" [class.active]=\"activeTab === 'crop'\" (click)=\"activeTab = 'crop'\">Crop</button>\n              <button *ngIf=\"config.showRotate\" class=\"tab-button\" [class.active]=\"activeTab === 'rotate'\" (click)=\"activeTab = 'rotate'\">Rotate</button>\n              <button *ngIf=\"config.showFlip\" class=\"tab-button\" [class.active]=\"activeTab === 'flip'\" (click)=\"activeTab = 'flip'\">Flip</button>\n              <button *ngIf=\"config.showBrightness || config.showContrast || config.showSaturation\" class=\"tab-button\" [class.active]=\"activeTab === 'adjust'\" (click)=\"activeTab = 'adjust'\">Adjust</button>\n            </div>\n            \n            <div class=\"tab-content\">\n              <div *ngIf=\"activeTab === 'crop'\" class=\"tab-pane\">\n                <div class=\"control-group\">\n                  <label>Aspect Ratio</label>\n                  <div class=\"button-group\">\n                    <button *ngFor=\"let ratio of aspectRatioOptions\" \n                            class=\"aspect-ratio-button\" \n                            [class.active]=\"aspectRatio === ratio.value\"\n                            (click)=\"setAspectRatio(ratio.value)\">\n                      {{ratio.label}}\n                    </button>\n                  </div>\n                </div>\n                <div *ngIf=\"config.showZoom\" class=\"control-group\">\n                  <label for=\"zoom\">Zoom</label>\n                  <input id=\"zoom\" type=\"range\" min=\"1\" max=\"3\" step=\"0.1\" [(ngModel)]=\"zoom\" (input)=\"updateCrop()\">\n                </div>\n              </div>\n              <div *ngIf=\"activeTab === 'rotate'\" class=\"tab-pane\">\n                <div class=\"control-group\">\n                  <label for=\"rotation\">Rotation</label>\n                  <input id=\"rotation\" type=\"range\" min=\"0\" max=\"360\" step=\"1\" [(ngModel)]=\"rotation\" (input)=\"updateCrop()\">\n                </div>\n              </div>\n              <div *ngIf=\"activeTab === 'flip'\" class=\"tab-pane\">\n                <div class=\"control-group\">\n                  <button class=\"flip-button\" (click)=\"flipHorizontal()\">Flip Horizontal</button>\n                  <button class=\"flip-button\" (click)=\"flipVertical()\">Flip Vertical</button>\n                </div>\n              </div>\n              <div *ngIf=\"activeTab === 'adjust'\" class=\"tab-pane\">\n                <div *ngIf=\"config.showBrightness\" class=\"control-group\">\n                  <label for=\"brightness\">Brightness</label>\n                  <input id=\"brightness\" type=\"range\" min=\"0\" max=\"2\" step=\"0.1\" [(ngModel)]=\"brightness\" (input)=\"updateCrop()\">\n                </div>\n                <div *ngIf=\"config.showContrast\" class=\"control-group\">\n                  <label for=\"contrast\">Contrast</label>\n                  <input id=\"contrast\" type=\"range\" min=\"0\" max=\"2\" step=\"0.1\" [(ngModel)]=\"contrast\" (input)=\"updateCrop()\">\n                </div>\n                <div *ngIf=\"config.showSaturation\" class=\"control-group\">\n                  <label for=\"saturation\">Saturation</label>\n                  <input id=\"saturation\" type=\"range\" min=\"0\" max=\"2\" step=\"0.1\" [(ngModel)]=\"saturation\" (input)=\"updateCrop()\">\n                </div>\n              </div>\n            </div>\n            \n            <div class=\"crop-container\">\n              <div class=\"image-container\" #imageContainer>\n                <canvas #sourceCanvas (mousedown)=\"onImageMouseDown($event)\"></canvas>\n                <div #cropBox class=\"crop-box\" [style.width.px]=\"cropWidth\" [style.height.px]=\"cropHeight\"\n                     [style.left.px]=\"cropX\" [style.top.px]=\"cropY\" (mousedown)=\"onCropBoxMouseDown($event)\">\n                  <div class=\"resize-handle top-left\" (mousedown)=\"onResizeStart($event, 'top-left')\"></div>\n                  <div class=\"resize-handle top-right\" (mousedown)=\"onResizeStart($event, 'top-right')\"></div>\n                  <div class=\"resize-handle bottom-left\" (mousedown)=\"onResizeStart($event, 'bottom-left')\"></div>\n                  <div class=\"resize-handle bottom-right\" (mousedown)=\"onResizeStart($event, 'bottom-right')\"></div>\n                  <div *ngIf=\"aspectRatio === 0\" class=\"resize-handle top\" (mousedown)=\"onResizeStart($event, 'top')\"></div>\n                  <div *ngIf=\"aspectRatio === 0\" class=\"resize-handle right\" (mousedown)=\"onResizeStart($event, 'right')\"></div>\n                  <div *ngIf=\"aspectRatio === 0\" class=\"resize-handle bottom\" (mousedown)=\"onResizeStart($event, 'bottom')\"></div>\n                  <div *ngIf=\"aspectRatio === 0\" class=\"resize-handle left\" (mousedown)=\"onResizeStart($event, 'left')\"></div>\n                </div>\n              </div>\n            </div>\n            \n            <div class=\"button-group\">\n              <button class=\"action-button secondary\" (click)=\"cancelCrop()\">Cancel</button>\n              <button class=\"action-button warning\" (click)=\"resetChanges()\">Reset Changes</button>\n              <button class=\"action-button primary\" (click)=\"applyChanges()\">Apply Changes</button>\n            </div>\n            \n            <div *ngIf=\"croppedImageUrl\" class=\"preview-container\">\n              <h5>Preview</h5>\n              <img [src]=\"croppedImageUrl\" alt=\"Cropped image\" class=\"preview-image\">\n            </div>\n            \n            <div class=\"upload-container\">\n              <button class=\"upload-button\" (click)=\"uploadImage()\">Upload Image</button>\n            </div>\n          </ng-template>\n        </div>\n      </div>\n    </div>\n  `,\n  styles: [`\n    .image-cropper-container {\n      font-family: Arial, sans-serif;\n      max-width: 600px;\n      margin: 0 auto;\n      padding: 20px;\n    }\n    .image-cropper-card {\n      background-color: #fff;\n      border-radius: 8px;\n      box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n      overflow: hidden;\n    }\n    .image-cropper-body {\n      padding: 20px;\n    }\n    .upload-container {\n      text-align: center;\n      margin-bottom: 20px;\n    }\n    .upload-label {\n      display: inline-block;\n      padding: 10px 20px;\n      background-color: #007bff;\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n    .upload-input {\n      display: none;\n    }\n    .tabs {\n      display: flex;\n      margin-bottom: 20px;\n      border-bottom: 1px solid #dee2e6;\n    }\n    .tab-button {\n      padding: 10px 15px;\n      border: none;\n      background: none;\n      cursor: pointer;\n      opacity: 0.6;\n    }\n    .tab-button.active {\n      opacity: 1;\n      border-bottom: 2px solid #007bff;\n    }\n    .tab-content {\n      margin-bottom: 20px;\n    }\n    .tab-pane {\n      display: flex;\n      flex-direction: column;\n      gap: 10px;\n    }\n    .control-group {\n      display: flex;\n      flex-direction: column;\n      gap: 5px;\n    }\n    .button-group {\n      display: flex;\n      gap: 10px;\n      justify-content: center;\n      margin-top: 20px;\n    }\n    .aspect-ratio-button, .flip-button {\n      padding: 5px 10px;\n      border: 1px solid #007bff;\n      background-color: #fff;\n      color: #007bff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n    .aspect-ratio-button.active {\n      background-color: #007bff;\n      color: #fff;\n    }\n    .crop-container {\n      position: relative;\n      width: 100%;\n      height: 400px;\n      overflow: hidden;\n      margin-bottom: 20px;\n      background-color: #f8f9fa;\n      border: 1px solid #dee2e6;\n      border-radius: 4px;\n    }\n    .image-container {\n      position: relative;\n      width: 100%;\n      height: 100%;\n      overflow: hidden;\n    }\n    .crop-box {\n      position: absolute;\n      border: 2px solid #fff;\n      box-shadow: 0 0 0 9999em rgba(0, 0, 0, 0.5);\n      cursor: move;\n    }\n    .resize-handle {\n      position: absolute;\n      width: 10px;\n      height: 10px;\n      background-color: #fff;\n      border: 1px solid #007bff;\n    }\n    .top-left { top: -5px; left: -5px; cursor: nwse-resize; }\n    .top-right { top: -5px; right: -5px; cursor: nesw-resize; }\n    .bottom-left { bottom: -5px; left: -5px; cursor: nesw-resize; }\n    .bottom-right { bottom: -5px; right: -5px; cursor: nwse-resize; }\n    .top { top: -5px; left: 50%; transform: translateX(-50%); cursor: ns-resize; }\n    .right { top: 50%; right: -5px; transform: translateY(-50%); cursor: ew-resize; }\n    .bottom { bottom: -5px; left: 50%; transform: translateX(-50%); cursor: ns-resize; }\n    .left { top: 50%; left: -5px; transform: translateY(-50%); cursor: ew-resize; }\n    .action-button {\n      padding: 10px 20px;\n      border: none;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n    .action-button.primary {\n      background-color: #007bff;\n      color: #fff;\n    }\n    .action-button.secondary {\n      background-color: #6c757d;\n      color: #fff;\n    }\n    .action-button.warning {\n      background-color: #ffc107;\n      color: #000;\n    }\n    .preview-container {\n      margin-top: 20px;\n      text-align: center;\n    }\n    .preview-image {\n      max-width: 100%;\n      border-radius: 4px;\n    }\n    .upload-button {\n      padding: 10px 20px;\n      background-color: #28a745;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n    @media (max-width: 480px) {\n      .image-cropper-container {\n        padding: 10px;\n      }\n      .button-group {\n        flex-direction: column;\n      }\n      .action-button {\n        width: 100%;\n      }\n    }\n  `]\n})\nexport class CmImageCropperComponent implements AfterViewInit {\n  @ViewChild('sourceCanvas') sourceCanvas!: ElementRef<HTMLCanvasElement>;\n  @ViewChild('cropBox') cropBox!: ElementRef<HTMLDivElement>;\n  @ViewChild('imageContainer') imageContainer!: ElementRef<HTMLDivElement>;\n  @Output() imageUploaded = new EventEmitter<File>();\n  @Input() config: CropperConfig = {\n    showCrop: true,\n    showRotate: true,\n    showFlip: true,\n    showZoom: true,\n    showBrightness: true,\n    showContrast: true,\n    showSaturation: true\n  };\n  @Input() aspectRatioOptions: AspectRatioOption[] = [\n    { label: 'Free', value: 0 },\n    { label: '1:1', value: 1 },\n    { label: '4:3', value: 4/3 },\n    { label: '16:9', value: 16/9 }\n  ];\n\n  imageUrl: string | null = null;\n  croppedImageUrl: string | null = null;\n  aspectRatio: number = 0;\n  zoom: number = 1;\n  rotation: number = 0;\n  brightness: number = 1;\n  contrast: number = 1;\n  saturation: number = 1;\n  cropWidth: number = 300;\n  cropHeight: number = 300;\n  cropX: number = 0;\n  cropY: number = 0;\n  imageWidth: number = 0;\n  imageHeight: number = 0;\n  flipX: boolean = false;\n  flipY: boolean = false;\n  activeTab: string = 'crop';\n  \n  private originalImage: HTMLImageElement | null = null;\n  private isDragging: boolean = false;\n  private isResizing: boolean = false;\n  private dragStartX: number = 0;\n  private dragStartY: number = 0;\n  private resizeHandle: string = '';\n  private originalCropBox = { width: 0, height: 0, x: 0, y: 0 };\n  private imageX: number = 0;\n  private imageY: number = 0;\n  private isDraggingImage: boolean = false;\n\n  ngAfterViewInit() {\n    // Initialization if needed\n  }\n\n  onFileSelected(event: Event) {\n    const file = (event.target as HTMLInputElement).files?.[0];\n    if (file) {\n      const reader = new FileReader();\n      reader.onload = (e: any) => {\n        this.imageUrl = e.target.result;\n        this.loadImage();\n      };\n      reader.readAsDataURL(file);\n    }\n  }\n\n  loadImage() {\n    if (!this.imageUrl) return;\n    \n    this.originalImage = new Image();\n    this.originalImage.onload = () => {\n      this.imageWidth = this.originalImage!.width;\n      this.imageHeight = this.originalImage!.height;\n      this.resetCropBox();\n      this.updateCanvas();\n    };\n    this.originalImage.src = this.imageUrl;\n  }\n\n  resetCropBox() {\n    const containerRect = this.imageContainer.nativeElement.getBoundingClientRect();\n    const containerAspectRatio = containerRect.width / containerRect.height;\n    const imageAspectRatio = this.imageWidth / this.imageHeight;\n\n    if (imageAspectRatio > containerAspectRatio) {\n      this.cropWidth = containerRect.width;\n      this.cropHeight = this.cropWidth / imageAspectRatio;\n    } else {\n      this.cropHeight = containerRect.height;\n      this.cropWidth = this.cropHeight * imageAspectRatio;\n    }\n\n    this.cropX = (containerRect.width - this.cropWidth) / 2;\n    this.cropY = (containerRect.height - this.cropHeight) / 2;\n    \n    // Set initial zoom to fit the image in the container\n    this.zoom = Math.min(containerRect.width / this.imageWidth, containerRect.height / this.imageHeight);\n    this.imageX = 0;\n    this.imageY = 0;\n\n    this.updateCropBoxStyle();\n    this.updateCanvas();\n  }\n\n  updateCanvas() {\n    if (!this.originalImage || !this.sourceCanvas) return;\n    \n    const canvas = this.sourceCanvas.nativeElement;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) return;\n\n    const containerRect = this.imageContainer.nativeElement.getBoundingClientRect();\n    canvas.width = containerRect.width;\n    canvas.height = containerRect.height;\n\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    ctx.save();\n\n    // Calculate the scaled dimensions\n    const scaledWidth = this.imageWidth * this.zoom;\n    const scaledHeight = this.imageHeight * this.zoom;\n\n    // Calculate the maximum allowed panning\n    const maxPanX = Math.max(0, (scaledWidth - containerRect.width) / 2);\n    const maxPanY = Math.max(0, (scaledHeight - containerRect.height) / 2);\n\n    // Limit panning to allow image edges\n    this.imageX = Math.max(-maxPanX, Math.min(maxPanX, this.imageX));\n    this.imageY = Math.max(-maxPanY, Math.min(maxPanY, this.imageY));\n\n    // Center the image\n    ctx.translate(canvas.width / 2 + this.imageX, canvas.height / 2 + this.imageY);\n\n    // Apply zoom\n    ctx.scale(this.zoom, this.zoom);\n\n    // Apply rotation\n    ctx.rotate((this.rotation * Math.PI) / 180);\n\n    // Apply flip\n    ctx.scale(this.flipX ? -1 : 1, this.flipY ? -1 : 1);\n\n    // Draw the image centered\n    ctx.drawImage(\n      this.originalImage,\n      -this.imageWidth / 2,\n      -this.imageHeight / 2,\n      this.imageWidth,\n      this.imageHeight\n    );\n\n    ctx.restore();\n\n    // Apply color adjustments\n    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    this.applyColorAdjustments(imageData);\n    ctx.putImageData(imageData, 0, 0);\n  }\n\n  setAspectRatio(ratio: number) {\n    this.aspectRatio = ratio;\n    if (ratio > 0) {\n      const newHeight = this.cropWidth / ratio;\n      if (newHeight <= this.cropHeight) {\n        this.cropHeight = newHeight;\n      } else {\n        this.cropWidth = this.cropHeight * ratio;\n      }\n      this.centerCropBox();\n    }\n    this.updateCropBoxStyle();\n  }\n\n  centerCropBox() {\n    const containerRect = this.imageContainer.nativeElement.getBoundingClientRect();\n    this.cropX = (containerRect.width - this.cropWidth) / 2;\n    this.cropY = (containerRect.height - this.cropHeight) / 2;\n  }\n\n  updateCropBoxStyle() {\n    if (this.cropBox) {\n      this.cropBox.nativeElement.style.width = `${this.cropWidth}px`;\n      this.cropBox.nativeElement.style.height = `${this.cropHeight}px`;\n      this.cropBox.nativeElement.style.left = `${this.cropX}px`;\n      this.cropBox.nativeElement.style.top = `${this.cropY}px`;\n    }\n  }\n\n  flipHorizontal() {\n    this.flipX = !this.flipX;\n    this.updateCanvas();\n  }\n\n  flipVertical() {\n    this.flipY = !this.flipY;\n    this.updateCanvas();\n  }\n\n  cancelCrop() {\n    this.imageUrl = null;\n    this.croppedImageUrl = null;\n    this.resetChanges();\n  }\n\n  resetChanges() {\n    this.aspectRatio = 0;\n    this.zoom = 1;\n    this.rotation = 0;\n    this.brightness = 1;\n    this.contrast = 1;\n    this.saturation = 1;\n    this.flipX = false;\n    this.flipY = false;\n    this.resetCropBox();\n    this.updateCanvas();\n  }\n\n  applyChanges() {\n    if (this.sourceCanvas && this.cropBox) {\n      const sourceCanvas = this.sourceCanvas.nativeElement;\n      const cropBox = this.cropBox.nativeElement;\n      const tempCanvas = document.createElement('canvas');\n      const tempCtx = tempCanvas.getContext('2d');\n      \n      if (tempCtx) {\n        const cropRect = cropBox.getBoundingClientRect();\n        const sourceRect = sourceCanvas.getBoundingClientRect();\n        \n        // Set canvas size to match crop dimensions\n        tempCanvas.width = cropRect.width;\n        tempCanvas.height = cropRect.height;\n        \n        // Calculate source coordinates\n        const sx = cropRect.left - sourceRect.left;\n        const sy = cropRect.top - sourceRect.top;\n        \n        // Draw the cropped portion\n        tempCtx.drawImage(\n          sourceCanvas,\n          sx, sy, cropRect.width, cropRect.height,\n          0, 0, tempCanvas.width, tempCanvas.height\n        );\n        \n        this.croppedImageUrl = tempCanvas.toDataURL('image/jpeg');\n      }\n    }\n  }\n\n  uploadImage() {\n    if (this.croppedImageUrl) {\n      fetch(this.croppedImageUrl)\n        .then(res => res.blob())\n        .then(blob => {\n          const file = new File([blob], 'cropped_image.jpg', { type: 'image/jpeg' });\n          this.imageUploaded.emit(file);\n        });\n    }\n  }\n\n  applyColorAdjustments(imageData: ImageData) {\n    const data = imageData.data;\n    for (let i = 0; i < data.length; i += 4) {\n      // Apply brightness\n      data[i] = Math.min(255, data[i] * this.brightness);\n      data[i + 1] = Math.min(255, data[i + 1] * this.brightness);\n      data[i + 2] = Math.min(255, data[i + 2] * this.brightness);\n\n      // Apply contrast\n      for (let j = 0; j < 3; j++) {\n        const channel = i + j;\n        data[channel] = ((data[channel] / 255 - 0.5) * this.contrast + 0.5) * 255;\n        data[channel] = Math.max(0, Math.min(255, data[channel]));\n      }\n\n      // Apply saturation\n      const gray = 0.2989 * data[i] + 0.5870 * data[i + 1] + 0.1140 * data[i + 2];\n      data[i] = Math.max(0, Math.min(255, gray + (data[i] - gray) * this.saturation));\n      data[i + 1] = Math.max(0, Math.min(255, gray + (data[i + 1] - gray) * this.saturation));\n      data[i + 2] = Math.max(0, Math.min(255, gray + (data[i + 2] - gray) * this.saturation));\n    }\n  }\n\n  onResizeStart(event: MouseEvent, handle: string) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.isResizing = true;\n    this.resizeHandle = handle;\n    this.originalCropBox = {\n      width: this.cropWidth,\n      height: this.cropHeight,\n      x: this.cropX,\n      y: this.cropY\n    };\n    this.dragStartX = event.clientX;\n    this.dragStartY = event.clientY;\n  }\n\n  onCropBoxMouseDown(event: MouseEvent) {\n    if (event.target === this.cropBox.nativeElement) {\n      this.isDragging = true;\n      this.dragStartX = event.clientX - this.cropX;\n      this.dragStartY = event.clientY - this.cropY;\n    }\n  }\n\n  onImageMouseDown(event: MouseEvent) {\n    if (this.zoom > 1) {\n      this.isDraggingImage = true;\n    }\n  }\n\n  onImagePan(event: MouseEvent) {\n    if (this.zoom > 1 && this.isDraggingImage) {\n      const deltaX = event.movementX;\n      const deltaY = event.movementY;\n      \n      this.imageX += deltaX;\n      this.imageY += deltaY;\n      \n      this.updateCanvas();\n    }\n  }\n\n  @HostListener('mousemove', ['$event'])\n  onMouseMove(event: MouseEvent) {\n    if (this.isDragging) {\n      const containerRect = this.imageContainer.nativeElement.getBoundingClientRect();\n      this.cropX = Math.max(0, Math.min(containerRect.width - this.cropWidth, event.clientX - this.dragStartX));\n      this.cropY = Math.max(0, Math.min(containerRect.height - this.cropHeight, event.clientY - this.dragStartY));\n      this.updateCropBoxStyle();\n    } else if (this.isResizing) {\n      const deltaX = event.clientX - this.dragStartX;\n      const deltaY = event.clientY - this.dragStartY;\n      this.resizeCropBox(deltaX, deltaY);\n    } else {\n      this.onImagePan(event);\n    }\n  }\n\n  @HostListener('mouseup')\n  @HostListener('mouseleave')\n  onMouseUp() {\n    this.isDragging = false;\n    this.isResizing = false;\n    this.isDraggingImage = false;\n  }\n\n  resizeCropBox(deltaX: number, deltaY: number) {\n    const containerRect = this.imageContainer.nativeElement.getBoundingClientRect();\n    const maxWidth = containerRect.width - this.originalCropBox.x;\n    const maxHeight = containerRect.height - this.originalCropBox.y;\n\n    switch (this.resizeHandle) {\n      case 'top-left':\n        if (this.aspectRatio === 0) {\n          this.cropWidth = Math.max(20, this.originalCropBox.width - deltaX);\n          this.cropHeight = Math.max(20, this.originalCropBox.height - deltaY);\n          this.cropX = this.originalCropBox.x + (this.originalCropBox.width - this.cropWidth);\n          this.cropY = this.originalCropBox.y + (this.originalCropBox.height - this.cropHeight);\n        } else {\n          const newWidth = Math.max(20, this.originalCropBox.width - deltaX);\n          this.cropWidth = Math.min(newWidth, this.originalCropBox.height * this.aspectRatio);\n          this.cropHeight = this.cropWidth / this.aspectRatio;\n          this.cropX = this.originalCropBox.x + (this.originalCropBox.width - this.cropWidth);\n          this.cropY = this.originalCropBox.y + (this.originalCropBox.height - this.cropHeight);\n        }\n        break;\n      case 'top-right':\n        if (this.aspectRatio === 0) {\n          this.cropWidth = Math.min(maxWidth, Math.max(20, this.originalCropBox.width + deltaX));\n          this.cropHeight = Math.max(20, this.originalCropBox.height - deltaY);\n          this.cropY = this.originalCropBox.y + (this.originalCropBox.height - this.cropHeight);\n        } else {\n          this.cropWidth = Math.min(maxWidth, Math.max(20, this.originalCropBox.width + deltaX));\n          this.cropHeight = this.cropWidth / this.aspectRatio;\n          this.cropY = this.originalCropBox.y + (this.originalCropBox.height - this.cropHeight);\n        }\n        break;\n      case 'bottom-left':\n        if (this.aspectRatio === 0) {\n          this.cropWidth = Math.max(20, this.originalCropBox.width - deltaX);\n          this.cropHeight = Math.min(maxHeight, Math.max(20, this.originalCropBox.height + deltaY));\n          this.cropX = this.originalCropBox.x + (this.originalCropBox.width - this.cropWidth);\n        } else {\n          const newHeight = Math.min(maxHeight, Math.max(20, this.originalCropBox.height + deltaY));\n          this.cropHeight = Math.min(newHeight, this.originalCropBox.width / this.aspectRatio);\n          this.cropWidth = this.cropHeight * this.aspectRatio;\n          this.cropX = this.originalCropBox.x + (this.originalCropBox.width - this.cropWidth);\n        }\n        break;\n      case 'bottom-right':\n        if (this.aspectRatio === 0) {\n          this.cropWidth = Math.min(maxWidth, Math.max(20, this.originalCropBox.width + deltaX));\n          this.cropHeight = Math.min(maxHeight, Math.max(20, this.originalCropBox.height + deltaY));\n        } else {\n          const newWidth = Math.min(maxWidth, Math.max(20, this.originalCropBox.width + deltaX));\n          const newHeight = Math.min(maxHeight, Math.max(20, this.originalCropBox.height + deltaY));\n          if (newWidth / newHeight > this.aspectRatio) {\n            this.cropWidth = newHeight * this.aspectRatio;\n            this.cropHeight = newHeight;\n          } else {\n            this.cropWidth = newWidth;\n            this.cropHeight = newWidth / this.aspectRatio;\n          }\n        }\n        break;\n      case 'top':\n        if (this.aspectRatio === 0) {\n          this.cropHeight = Math.max(20, this.originalCropBox.height - deltaY);\n          this.cropY = this.originalCropBox.y + (this.originalCropBox.height - this.cropHeight);\n        }\n        break;\n      case 'right':\n        if (this.aspectRatio === 0) {\n          this.cropWidth = Math.min(maxWidth, Math.max(20, this.originalCropBox.width + deltaX));\n        }\n        break;\n      case 'bottom':\n        if (this.aspectRatio === 0) {\n          this.cropHeight = Math.min(maxHeight, Math.max(20, this.originalCropBox.height + deltaY));\n        }\n        break;\n      case 'left':\n        if (this.aspectRatio === 0) {\n          this.cropWidth = Math.max(20, this.originalCropBox.width - deltaX);\n          this.cropX = this.originalCropBox.x + (this.originalCropBox.width - this.cropWidth);\n        }\n        break;\n    }\n\n    this.updateCropBoxStyle();\n  }\n\n  @HostListener('window:resize')\n  onResize() {\n    this.resetCropBox();\n    this.updateCanvas();\n  }\n\n  updateCrop() {\n    this.updateCanvas();\n  }\n}","/*\n * Public API Surface of cm-image-cropper\n */\n\n\nexport * from './lib/cm-image-cropper/cm-image-cropper.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}