{"version":3,"file":"kadung-image-editor.mjs","sources":["../../../projects/image-editor/_directives/resizer/resizer.directive.ts","../../../projects/image-editor/_directives/square/square.directive.ts","../../../projects/image-editor/_directives/save-generated-image/save-generated-image.directive.ts","../../../projects/image-editor/_interfaces/image-upload-handler.interface.ts","../../../projects/image-editor/_directives/file-upload-handler/file-upload-handler.directive.ts","../../../projects/image-editor/config/image-editor-config-token.ts","../../../projects/image-editor/_services/translate/translate.service.ts","../../../projects/image-editor/_pipes/translate/translate.pipe.ts","../../../projects/image-editor/util.ts","../../../projects/image-editor/_services/image-editor/image-editor.service.ts","../../../projects/image-editor/_services/platform/platform.service.ts","../../../projects/image-editor/_services/image-generator/image-generator.service.ts","../../../projects/image-editor/component/image-editor.component.ts","../../../projects/image-editor/component/image-editor.component.html","../../../projects/image-editor/component/image-editor.module.ts","../../../projects/image-editor/public-api.ts","../../../projects/image-editor/kadung-image-editor.ts"],"sourcesContent":["import { Directive, ElementRef, Renderer2, HostListener, PLATFORM_ID, Inject } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n@Directive({\r\n  selector: '[appResizer]'\r\n})\r\nexport class ResizerDirective {\r\n\r\n  @HostListener('window:resize')\r\n  onResize() {\r\n    if(isPlatformBrowser(this.platformId)) {\r\n      this.renderer.setStyle(this.el.nativeElement, 'height', this.el.nativeElement.clientWidth + 'px');\r\n    }\r\n  }\r\n\r\n  constructor(private el: ElementRef, private renderer: Renderer2, @Inject(PLATFORM_ID) private platformId: Object) {}\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  Renderer2,\r\n  AfterViewInit,\r\n  Input,\r\n  HostListener,\r\n  RendererStyleFlags2,\r\n  Output,\r\n  EventEmitter,\r\n  Inject,\r\n  PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n@Directive({\r\n  selector: '[duloSquare]',\r\n})\r\nexport class SquareDirective implements AfterViewInit {\r\n  @Input('duloSquareProperty') property: 'height' | 'width' = 'height';\r\n  @Input('duloSquareDeviation') deviation = 0;\r\n  @Input('duloSquareResponsive') responsive = false;\r\n  @Output('duloSquareResizeHandler') resizeHandler = new EventEmitter();\r\n  constructor(private elRef: ElementRef, private renderer: Renderer2, @Inject(PLATFORM_ID) private platformId: Object) {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.squarify();\r\n  }\r\n\r\n  @HostListener('window:resize', ['$event'])\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  onResize(event: Event): void {\r\n    this.squarify();\r\n  }\r\n\r\n  squarify(): void {\r\n    if(isPlatformBrowser(this.platformId)) {\r\n      if (this.responsive) {\r\n        if (\r\n          this.elRef.nativeElement.clientWidth >\r\n          this.elRef.nativeElement.clientHeight\r\n        ) {\r\n          this.renderer.setStyle(\r\n            this.elRef.nativeElement,\r\n            'width',\r\n            `${this.elRef.nativeElement.clientHeight}px`,\r\n          );\r\n          this.renderer.setStyle(\r\n            this.elRef.nativeElement,\r\n            'height',\r\n            `${this.elRef.nativeElement.clientHeight}px`,\r\n          );\r\n        } else {\r\n          this.renderer.setStyle(\r\n            this.elRef.nativeElement,\r\n            'height',\r\n            `${this.elRef.nativeElement.clientWidth}px`,\r\n          );\r\n          this.renderer.setStyle(\r\n            this.elRef.nativeElement,\r\n            'width',\r\n            `${this.elRef.nativeElement.clientWidth}px`,\r\n          );\r\n        }\r\n      } else {\r\n        this.renderer.setStyle(\r\n          this.elRef.nativeElement,\r\n          this.property,\r\n          `${this.elRef.nativeElement.clientWidth + +this.deviation}px`,\r\n          RendererStyleFlags2.DashCase | RendererStyleFlags2.Important,\r\n        );\r\n      }\r\n      this.resizeHandler.emit();\r\n    }\r\n  }\r\n}\r\n","import { Directive, Host, HostListener, Input } from '@angular/core';\nimport { ImageEditorComponent } from '../../component/image-editor.component';\n\n@Directive({\n  selector: '[saveGeneratedImage]',\n})\nexport class SaveGeneratedImageDirective {\n  @Input('saveGeneratedImage') imageEditor: ImageEditorComponent;\n  constructor() {}\n\n  @HostListener('click')\n  onSave(): void {\n    this.imageEditor.save();\n  }\n}\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Interface for components that can handle file uploads.\r\n * This interface breaks the circular dependency between\r\n * FileUploadHandlerDirective and ImageEditorComponent.\r\n */\r\nexport interface IImageUploadHandler {\r\n  uploadHandler(fileUpload: any, event: { files: File[] }): void;\r\n}\r\n\r\n/**\r\n * Injection token for ImageUploadHandler.\r\n * This allows the directive to inject the component without\r\n * creating a circular dependency.\r\n */\r\nexport const IMAGE_UPLOAD_HANDLER_TOKEN = new InjectionToken<IImageUploadHandler>('ImageUploadHandler');\r\n\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  HostListener,\r\n  Inject,\r\n  Optional,\r\n  OnDestroy,\r\n  Renderer2,\r\n  Output,\r\n  EventEmitter,\r\n  ViewContainerRef,\r\n  ComponentRef,\r\n  AfterViewInit,\r\n  ComponentFactoryResolver,\r\n  Injector,\r\n  SkipSelf,\r\n} from '@angular/core';\r\nimport { IImageUploadHandler, IMAGE_UPLOAD_HANDLER_TOKEN } from '../../_interfaces/image-upload-handler.interface';\r\n\r\n// Try to import the component - this might fail if it's not exported\r\n// We'll handle it in the try-catch\r\nlet KaduFileUploadComponentClass: any = null;\r\ntry {\r\n  // Try to import the component directly\r\n  // The actual import path and name might vary\r\n  // This is a best-effort attempt\r\n  import('@kadung/kadung/kadu-file-upload').then((module) => {\r\n    KaduFileUploadComponentClass =\r\n      module.KaduFileUploadComponent ||\r\n      module['KaduFileUploadComponent'] ||\r\n      null;\r\n  }).catch(() => {\r\n    // Component not available for static import\r\n    KaduFileUploadComponentClass = null;\r\n  });\r\n} catch {\r\n  // Static import failed, will use dynamic import\r\n  KaduFileUploadComponentClass = null;\r\n}\r\n\r\n@Directive({\r\n  selector: '[kaduFileUploadHandler]',\r\n})\r\nexport class FileUploadHandlerDirective implements OnDestroy, AfterViewInit {\r\n  @Output() filesSelected = new EventEmitter<{ files: File[] }>();\r\n\r\n  private fileUploadComponentRef: ComponentRef<any> | null = null;\r\n  private hiddenFileUploadElement: HTMLElement | null = null;\r\n\r\n  constructor(\r\n    private elementRef: ElementRef,\r\n    private renderer: Renderer2,\r\n    private viewContainerRef: ViewContainerRef,\r\n    private componentFactoryResolver: ComponentFactoryResolver,\r\n    private injector: Injector,\r\n    @Optional() @Inject(IMAGE_UPLOAD_HANDLER_TOKEN) private imageEditorComponent: IImageUploadHandler\r\n  ) {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.createFileUploadComponent();\r\n  }\r\n\r\n  @HostListener('click')\r\n  onClick(): void {\r\n    this.triggerFileUpload();\r\n  }\r\n\r\n  private async createFileUploadComponent(): Promise<void> {\r\n    try {\r\n      // Try to get the component class\r\n      let KaduFileUploadComponent: any = KaduFileUploadComponentClass;\r\n\r\n      // If static import didn't work, try dynamic import\r\n      if (!KaduFileUploadComponent) {\r\n        const componentModule = await import('@kadung/kadung/kadu-file-upload');\r\n        // Try different possible export names\r\n        KaduFileUploadComponent =\r\n          componentModule.KaduFileUploadComponent ||\r\n          componentModule['KaduFileUploadComponent'] ||\r\n          componentModule.default;\r\n      }\r\n\r\n      if (!KaduFileUploadComponent) {\r\n        throw new Error('Could not find KaduFileUploadComponent');\r\n      }\r\n\r\n      // Create a container element for the hidden file upload\r\n      this.hiddenFileUploadElement = this.renderer.createElement('div');\r\n      this.renderer.setStyle(this.hiddenFileUploadElement, 'display', 'none');\r\n      this.renderer.setStyle(this.hiddenFileUploadElement, 'position', 'absolute');\r\n      this.renderer.setStyle(this.hiddenFileUploadElement, 'visibility', 'hidden');\r\n      this.renderer.setStyle(this.hiddenFileUploadElement, 'width', '0');\r\n      this.renderer.setStyle(this.hiddenFileUploadElement, 'height', '0');\r\n      this.renderer.setStyle(this.hiddenFileUploadElement, 'overflow', 'hidden');\r\n      this.renderer.setStyle(this.hiddenFileUploadElement, 'pointer-events', 'none');\r\n\r\n      // Append to body\r\n      const parentElement = this.elementRef.nativeElement.parentElement || document.body;\r\n      this.renderer.appendChild(parentElement, this.hiddenFileUploadElement);\r\n\r\n      // Create component factory\r\n      const componentFactory = this.componentFactoryResolver.resolveComponentFactory(KaduFileUploadComponent);\r\n\r\n      // Create component using ViewContainerRef\r\n      this.fileUploadComponentRef = this.viewContainerRef.createComponent(\r\n        componentFactory,\r\n        undefined,\r\n        this.injector\r\n      );\r\n\r\n      // Set component inputs\r\n      const instance = this.fileUploadComponentRef.instance;\r\n      if (instance.multiple !== undefined) {\r\n        instance.multiple = true;\r\n      }\r\n      if (instance.accept !== undefined) {\r\n        instance.accept = 'image/png,image/jpeg,image/webp';\r\n      }\r\n      if (instance.auto !== undefined) {\r\n        instance.auto = true;\r\n      }\r\n\r\n      // Subscribe to customUploadHandler event\r\n      // customUploadHandler is an EventEmitter, so we subscribe to it\r\n      if (instance.customUploadHandler) {\r\n        instance.customUploadHandler.subscribe((event: any) => {\r\n          this.handleFileSelection(event);\r\n        });\r\n      }\r\n\r\n      // Move component to hidden container\r\n      const componentElement = this.fileUploadComponentRef.location.nativeElement;\r\n      this.renderer.appendChild(this.hiddenFileUploadElement, componentElement);\r\n\r\n      // Trigger change detection\r\n      this.fileUploadComponentRef.changeDetectorRef.detectChanges();\r\n    } catch (error) {\r\n      console.error('Failed to create kadu-file-upload component:', error);\r\n      // Fallback: create a simple hidden file input\r\n      this.createHiddenFileInput();\r\n    }\r\n  }\r\n\r\n  private createHiddenFileInput(): void {\r\n    // Fallback: Create a hidden file input element\r\n    this.hiddenFileUploadElement = this.renderer.createElement('div');\r\n    this.renderer.setStyle(this.hiddenFileUploadElement, 'display', 'none');\r\n    this.renderer.setStyle(this.hiddenFileUploadElement, 'position', 'absolute');\r\n    this.renderer.setStyle(this.hiddenFileUploadElement, 'visibility', 'hidden');\r\n    this.renderer.setStyle(this.hiddenFileUploadElement, 'width', '0');\r\n    this.renderer.setStyle(this.hiddenFileUploadElement, 'height', '0');\r\n    this.renderer.setStyle(this.hiddenFileUploadElement, 'overflow', 'hidden');\r\n\r\n    const fileInput = this.renderer.createElement('input') as HTMLInputElement;\r\n    this.renderer.setAttribute(fileInput, 'type', 'file');\r\n    this.renderer.setAttribute(fileInput, 'multiple', 'true');\r\n    this.renderer.setAttribute(fileInput, 'accept', 'image/png,image/jpeg,image/webp');\r\n    this.renderer.listen(fileInput, 'change', (event: Event) => {\r\n      const input = event.target as HTMLInputElement;\r\n      if (input && input.files && input.files.length > 0) {\r\n        const files = Array.from(input.files);\r\n        const uploadEvent = { files: files };\r\n        this.handleFileSelection(uploadEvent);\r\n        input.value = '';\r\n      }\r\n    });\r\n\r\n    this.renderer.appendChild(this.hiddenFileUploadElement, fileInput);\r\n\r\n    const parentElement = this.elementRef.nativeElement.parentElement || document.body;\r\n    this.renderer.appendChild(parentElement, this.hiddenFileUploadElement);\r\n  }\r\n\r\n  private triggerFileUpload(): void {\r\n    if (this.fileUploadComponentRef && this.fileUploadComponentRef.instance) {\r\n      // Trigger file selection by accessing the component's file input\r\n      const instance = this.fileUploadComponentRef.instance;\r\n\r\n      // Try different ways to trigger file selection\r\n      if (typeof instance.triggerFileSelection === 'function') {\r\n        instance.triggerFileSelection();\r\n      } else if (instance.fileInput) {\r\n        // Try to access fileInput and click it\r\n        const fileInput = instance.fileInput.nativeElement || instance.fileInput;\r\n        if (fileInput && typeof fileInput.click === 'function') {\r\n          fileInput.click();\r\n        }\r\n      } else if (instance.input) {\r\n        // Alternative property name\r\n        const fileInput = instance.input.nativeElement || instance.input;\r\n        if (fileInput && typeof fileInput.click === 'function') {\r\n          fileInput.click();\r\n        }\r\n      } else {\r\n        // Try to find file input in the component's DOM\r\n        const componentElement = this.fileUploadComponentRef.location.nativeElement;\r\n        const fileInput = componentElement.querySelector('input[type=\"file\"]') as HTMLInputElement;\r\n        if (fileInput) {\r\n          fileInput.click();\r\n        } else {\r\n          // Last resort: try to trigger click on the component's button\r\n          const button = componentElement.querySelector('button') ||\r\n                        componentElement.querySelector('[role=\"button\"]') ||\r\n                        componentElement;\r\n          if (button && typeof button.click === 'function') {\r\n            button.click();\r\n          }\r\n        }\r\n      }\r\n    } else if (this.hiddenFileUploadElement) {\r\n      // Fallback: use the hidden file input\r\n      const fileInput = this.hiddenFileUploadElement.querySelector('input[type=\"file\"]') as HTMLInputElement;\r\n      if (fileInput) {\r\n        fileInput.click();\r\n      }\r\n    }\r\n  }\r\n\r\n  private handleFileSelection(event: { files: File[] }): void {\r\n    // Create event object similar to kadu-file-upload\r\n    const uploadEvent = {\r\n      files: event.files,\r\n    };\r\n\r\n    // Always emit event - the parent component will listen via @ContentChild\r\n    // This works better than DI injection when directive is projected via ng-content\r\n    this.filesSelected.emit(uploadEvent);\r\n\r\n    // Also try to call uploadHandler if ImageEditorComponent is available via DI\r\n    // (this works when directive is used inside the component template, not projected)\r\n    if (this.imageEditorComponent) {\r\n      const mockFileUpload = {\r\n        files: [],\r\n      };\r\n      this.imageEditorComponent.uploadHandler(mockFileUpload, uploadEvent);\r\n    }\r\n\r\n    // Reset the file upload component if it exists\r\n    if (this.fileUploadComponentRef && this.fileUploadComponentRef.instance) {\r\n      if (this.fileUploadComponentRef.instance.files !== undefined) {\r\n        this.fileUploadComponentRef.instance.files = [];\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.fileUploadComponentRef) {\r\n      this.fileUploadComponentRef.destroy();\r\n      this.fileUploadComponentRef = null;\r\n    }\r\n    if (this.hiddenFileUploadElement && this.hiddenFileUploadElement.parentElement) {\r\n      this.renderer.removeChild(\r\n        this.hiddenFileUploadElement.parentElement,\r\n        this.hiddenFileUploadElement\r\n      );\r\n    }\r\n    this.hiddenFileUploadElement = null;\r\n  }\r\n}\r\n","import { Inject, InjectionToken } from '@angular/core';\r\nimport { ImageEditorEnvironmentConfig } from './image-editor-environment-config';\r\n\r\nexport const IMAGE_EDITOR_ENVIRONMENT_CONFIG =\r\n  new InjectionToken<ImageEditorEnvironmentConfig>(\r\n    'ImageEditorEnvironmentConfig'\r\n  );\r\n\r\nexport const LOADER_SERVICE_TOKEN = new InjectionToken<any>('LoaderService');\r\nexport const TRANSLATE_CONFIG = new InjectionToken<any>('TranslateConfig');\r\nexport const IMAGE_EDITOR_SERVICE = new InjectionToken<any>(\r\n  'ImageEditorService'\r\n);\r\n","import { Inject, Injectable } from '@angular/core';\nimport { TRANSLATE_CONFIG } from '../../config';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TranslateService {\n  constructor(@Inject(TRANSLATE_CONFIG) private translateConfig: any) {}\n\n  translate(...args: any): any {\n    const method = this.translateConfig.service[this.translateConfig.method];\n\n    if (method) {\n      return method.apply(this.translateConfig.service, args);\n    }\n    throw new Error(\n      `Method ${this.translateConfig.method} not found in service for translation`\n    );\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../../_services/translate/translate.service';\n\n@Pipe({\n  name: 'translate',\n})\nexport class TranslatePipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  transform(value: string, ...args: any[]): any {\n    if (this.translateService) {\n      return this.translateService.translate(value, args);\n    }\n    return value;\n  }\n}\n","import { Color } from './_models/color';\r\n\r\nexport function createBackgroundColor(color: Color): any {\r\n  return 'rgba(' + color.red + ',' + color.green + ',' + color.blue + ',1)';\r\n}\r\n\r\nexport function firstDivisibleByBiggerThan(\r\n  denominator: number,\r\n  numberOver: number\r\n): number {\r\n  return denominator * (Math.floor(numberOver / denominator) + 1);\r\n}\r\n","import { ElementRef, Injectable } from '@angular/core';\r\nimport { Image } from '../../_models/image';\r\nimport { Subject } from 'rxjs';\r\nimport { firstDivisibleByBiggerThan } from '../../util';\r\n\r\n@Injectable()\r\nexport class ImageEditorService {\r\n  visibleBoxPaintOccupation$ = new Subject<any>();\r\n  calculateVisibleEdditingBoxPaintSubject = new Subject();\r\n\r\n  emitVisibleBoxPaintOccupation(info: any): void {\r\n    this.visibleBoxPaintOccupation$.next(info);\r\n  }\r\n\r\n  calculateVisibleEdditingBoxPaintOccupation(\r\n    canvas: any,\r\n    canvasWithTransparentObjectsEl: ElementRef<HTMLCanvasElement>,\r\n    rect: any,\r\n    image: Image,\r\n    devEnvironment: any,\r\n    debugCanvasEl: any\r\n  ): void {\r\n    const canvasWithTransparentObjectsContextImageData =\r\n      canvasWithTransparentObjectsEl.nativeElement\r\n        .getContext('2d', { willReadFrequently: true })\r\n        ?.getImageData(\r\n          0,\r\n          0,\r\n          Math.floor(canvas.width * canvas.getRetinaScaling()),\r\n          Math.floor(canvas.height * canvas.getRetinaScaling()),\r\n          { colorSpace: 'srgb' }\r\n        );\r\n    let data: any = {\r\n      canvasWithTransparentObjectsContextImageData: Array.from(\r\n        canvasWithTransparentObjectsContextImageData?.data || []\r\n      ),\r\n      image: {\r\n        referentSizePrintAreaWidth:\r\n          image.partColorImages[0].referentSizePrintAreaWidth,\r\n        referentSizePrintAreaHeight:\r\n          image.partColorImages[0].referentSizePrintAreaHeight,\r\n      },\r\n      rect: {\r\n        width: rect.width,\r\n        height: rect.height,\r\n        top: rect.top,\r\n        left: rect.left,\r\n        scaleX: rect.scaleX,\r\n        scaleY: rect.scaleY,\r\n      },\r\n      canvas: {\r\n        width: canvas.width,\r\n        height: canvas.height,\r\n        retinaScaling: canvas.getRetinaScaling(),\r\n      },\r\n    };\r\n\r\n    const differentPixels = [];\r\n\r\n    for (\r\n      let y = firstDivisibleByBiggerThan(\r\n        data.canvas.retinaScaling,\r\n        data.rect.top * data.canvas.retinaScaling\r\n      );\r\n      y <\r\n      (data.rect.top + Math.floor(data.rect.height * data.rect.scaleY)) *\r\n        data.canvas.retinaScaling;\r\n      y += data.canvas.retinaScaling\r\n    ) {\r\n      for (\r\n        let x = firstDivisibleByBiggerThan(\r\n          data.canvas.retinaScaling,\r\n          data.rect.left * data.canvas.retinaScaling\r\n        );\r\n        x <\r\n        (data.rect.left + Math.floor(data.rect.width * data.rect.scaleX)) *\r\n          data.canvas.retinaScaling;\r\n        x += data.canvas.retinaScaling\r\n      ) {\r\n        // const canvasReds = [];\r\n        // const canvasGreens = [];\r\n        // const canvasBlues = [];\r\n        // const canvasAlphas = [];\r\n\r\n        // const canvasWithTransparentObjectsReds = [];\r\n        // const canvasWithTransparentObjectsGreens = [];\r\n        // const canvasWithTransparentObjectsBlues = [];\r\n        const canvasWithTransparentObjectsAlphas = [];\r\n\r\n        for (\r\n          let j = 0;\r\n          j < data.canvas.retinaScaling &&\r\n          y + j < Math.floor(data.canvas.height * data.canvas.retinaScaling);\r\n          j++\r\n        ) {\r\n          for (\r\n            let i = 0;\r\n            i < data.canvas.retinaScaling &&\r\n            x + i < Math.floor(data.canvas.width * data.canvas.retinaScaling);\r\n            i++\r\n          ) {\r\n            const canvasIndex =\r\n              (Math.ceil(y + j) *\r\n                Math.floor(data.canvas.width * data.canvas.retinaScaling) +\r\n                Math.floor(x + i)) *\r\n              4;\r\n            // const canvasRed = data.canvasContextImageData[canvasIndex];\r\n            // const canvasGreen = data.canvasContextImageData[canvasIndex + 1];\r\n            // const canvasBlue = data.canvasContextImageData[canvasIndex + 2];\r\n            // const canvasAlpha = data.canvasContextImageData[canvasIndex + 3];\r\n\r\n            // const canvasWithTransparentObjectsRed =\r\n            //   data.canvasWithTransparentObjectsContextImageData[canvasIndex];\r\n            // const canvasWithTransparentObjectsGreen =\r\n            //   data.canvasWithTransparentObjectsContextImageData[\r\n            //     canvasIndex + 1\r\n            //   ];\r\n            // const canvasWithTransparentObjectsBlue =\r\n            //   data.canvasWithTransparentObjectsContextImageData[\r\n            //     canvasIndex + 2\r\n            //   ];\r\n            const canvasWithTransparentObjectsAlpha =\r\n              data.canvasWithTransparentObjectsContextImageData[\r\n                canvasIndex + 3\r\n              ];\r\n\r\n            // canvasReds.push(canvasRed);\r\n            // canvasGreens.push(canvasGreen);\r\n            // canvasBlues.push(canvasBlue);\r\n            // canvasAlphas.push(canvasAlpha);\r\n\r\n            // canvasWithTransparentObjectsReds.push(\r\n            //   canvasWithTransparentObjectsRed,\r\n            // );\r\n            // canvasWithTransparentObjectsGreens.push(\r\n            //   canvasWithTransparentObjectsGreen,\r\n            // );\r\n            // canvasWithTransparentObjectsBlues.push(\r\n            //   canvasWithTransparentObjectsBlue,\r\n            // );\r\n            canvasWithTransparentObjectsAlphas.push(\r\n              canvasWithTransparentObjectsAlpha\r\n            );\r\n          }\r\n        }\r\n\r\n        // const canvasRed = Math.floor(\r\n        //   canvasReds.reduce((sum, curr) => (sum += curr), 0) /\r\n        //     canvasReds.length,\r\n        // );\r\n\r\n        // const canvasGreen = Math.floor(\r\n        //   canvasGreens.reduce((sum, curr) => (sum += curr), 0) /\r\n        //     canvasGreens.length,\r\n        // );\r\n\r\n        // const canvasBlue = Math.floor(\r\n        //   canvasBlues.reduce((sum, curr) => (sum += curr), 0) /\r\n        //     canvasBlues.length,\r\n        // );\r\n\r\n        // const canvasAlpha = Math.floor(\r\n        //   canvasAlphas.reduce((sum, curr) => (sum += curr), 0) /\r\n        //     canvasAlphas.length,\r\n        // );\r\n\r\n        // const canvasWithTransparentObjectsRed = Math.floor(\r\n        //   canvasWithTransparentObjectsReds.reduce(\r\n        //     (sum, curr) => (sum += curr),\r\n        //     0,\r\n        //   ) / canvasWithTransparentObjectsReds.length,\r\n        // );\r\n        // const canvasWithTransparentObjectsGreen = Math.floor(\r\n        //   canvasWithTransparentObjectsGreens.reduce(\r\n        //     (sum, curr) => (sum += curr),\r\n        //     0,\r\n        //   ) / canvasWithTransparentObjectsGreens.length,\r\n        // );\r\n        // const canvasWithTransparentObjectsBlue = Math.floor(\r\n        //   canvasWithTransparentObjectsBlues.reduce(\r\n        //     (sum, curr) => (sum += curr),\r\n        //     0,\r\n        //   ) / canvasWithTransparentObjectsBlues.length,\r\n        // );\r\n        const canvasWithTransparentObjectsAlpha = Math.floor(\r\n          canvasWithTransparentObjectsAlphas.reduce(\r\n            (sum, curr) => (sum += curr),\r\n            0\r\n          ) / canvasWithTransparentObjectsAlphas.length\r\n        );\r\n\r\n        if (canvasWithTransparentObjectsAlpha !== 0) {\r\n          differentPixels.push({\r\n            x: x / data.canvas.retinaScaling,\r\n            y: y / data.canvas.retinaScaling,\r\n            // canvasRed,\r\n            // canvasReds,\r\n            // canvasGreen,\r\n            // canvasGreens,\r\n            // canvasBlue,\r\n            // canvasBlues,\r\n            // canvasAlpha,\r\n            // canvasAlphas,\r\n            // canvasWithTransparentObjectsRed,\r\n            // canvasWithTransparentObjectsReds,\r\n            // canvasWithTransparentObjectsGreen,\r\n            // canvasWithTransparentObjectsGreens,\r\n            // canvasWithTransparentObjectsBlue,\r\n            // canvasWithTransparentObjectsBlues,\r\n            // canvasWithTransparentObjectsAlpha,\r\n            // canvasWithTransparentObjectsAlphas,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    const left = differentPixels.sort((a, b) => (a.x <= b.x ? -1 : 1))[0];\r\n    const right = differentPixels.sort((a, b) => (a.x >= b.x ? -1 : 1))[0];\r\n    const top = differentPixels.sort((a, b) => (a.y <= b.y ? -1 : 1))[0];\r\n    const bottom = differentPixels.sort((a, b) => (a.y >= b.y ? -1 : 1))[0];\r\n\r\n    const paintWidth = differentPixels.length > 0 ? right.x - left.x + 1 : 0;\r\n    const paintHeight = differentPixels.length > 0 ? bottom.y - top.y + 1 : 0;\r\n\r\n    const paintArea = paintWidth * paintHeight;\r\n\r\n    const paintAreaBorders =\r\n      differentPixels.length > 0\r\n        ? {\r\n            top: top.y,\r\n            bottom: bottom.y,\r\n            left: left.x,\r\n            right: right.x,\r\n          }\r\n        : null;\r\n\r\n    const visibleBoxArea =\r\n      Math.floor(data.rect.width * data.rect.scaleX) *\r\n      Math.floor(data.rect.height * data.rect.scaleY);\r\n\r\n    const referentSizePrintAreaWidth = data.image.referentSizePrintAreaWidth;\r\n    const referentSizePrintAreaHeight = data.image.referentSizePrintAreaHeight;\r\n    const referentSizePrintAreaArea =\r\n      referentSizePrintAreaWidth * referentSizePrintAreaHeight;\r\n\r\n    data = {\r\n      differentPixels,\r\n      paintArea,\r\n      paintWidth,\r\n      paintHeight,\r\n      paintAreaBorders,\r\n      visibleBoxArea,\r\n      referentSizePrintAreaArea,\r\n      referentSizePrintAreaWidth,\r\n      referentSizePrintAreaHeight,\r\n    };\r\n\r\n    if (devEnvironment) {\r\n      const debugContext = debugCanvasEl.nativeElement.getContext('2d');\r\n\r\n      if (debugContext) {\r\n        debugContext.clearRect(0, 0, canvas.width, canvas.height);\r\n        debugContext.fillStyle = 'red';\r\n      }\r\n\r\n      data.differentPixels.forEach((sp: any) => {\r\n        debugContext?.fillRect(\r\n          sp.x,\r\n          sp.y,\r\n          canvas.getRetinaScaling(),\r\n          canvas.getRetinaScaling()\r\n        );\r\n      });\r\n    }\r\n\r\n    this.emitVisibleBoxPaintOccupation({\r\n      paintAreaOccupation: data.paintArea / data.visibleBoxArea,\r\n      visibleBox: {\r\n        area: data.referentSizePrintAreaArea,\r\n        width: data.referentSizePrintAreaWidth,\r\n        height: data.referentSizePrintAreaHeight,\r\n      },\r\n      screenVisibleBox: {\r\n        area: data.visibleBoxArea,\r\n        width: Math.floor(rect.width * rect.scaleX),\r\n        height: Math.floor(rect.height * rect.scaleY),\r\n      },\r\n      paint: {\r\n        area:\r\n          (data.paintArea * data.referentSizePrintAreaArea) /\r\n          data.visibleBoxArea,\r\n        borders: data.paintAreaBorders\r\n          ? {\r\n              top:\r\n                (data.paintAreaBorders.top * data.referentSizePrintAreaHeight) /\r\n                Math.floor(rect.height * rect.scaleY),\r\n              bottom:\r\n                (data.paintAreaBorders.bottom *\r\n                  data.referentSizePrintAreaHeight) /\r\n                Math.floor(rect.height * rect.scaleY),\r\n              left:\r\n                (data.paintAreaBorders.left * data.referentSizePrintAreaWidth) /\r\n                Math.floor(rect.width * rect.scaleX),\r\n              right:\r\n                (data.paintAreaBorders.right *\r\n                  data.referentSizePrintAreaWidth) /\r\n                Math.floor(rect.width * rect.scaleX),\r\n            }\r\n          : null,\r\n        width:\r\n          (data.paintWidth * data.referentSizePrintAreaWidth) /\r\n          Math.floor(rect.width * rect.scaleX),\r\n        height:\r\n          (data.paintHeight * data.referentSizePrintAreaHeight) /\r\n          Math.floor(rect.height * rect.scaleY),\r\n      },\r\n      screenPaint: {\r\n        area: data.paintArea,\r\n        borders: data.paintAreaBorders,\r\n        width: data.paintWidth,\r\n        height: data.paintHeight,\r\n      },\r\n    });\r\n  }\r\n}\r\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser, isPlatformServer } from '@angular/common';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PlatformService {\r\n  constructor(@Inject(PLATFORM_ID) private readonly platformId: object) {}\r\n\r\n  isBrowser(): boolean {\r\n    return isPlatformBrowser(this.platformId);\r\n  }\r\n\r\n  isServer(): boolean {\r\n    return isPlatformServer(this.platformId);\r\n  }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { filter, map, skip, take, tap } from 'rxjs/operators';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport moment from 'moment';\r\nimport { changeDpiBlob, changeDpiDataUrl } from 'changedpi';\r\nimport jsPDF from 'jspdf';\r\nimport { GeneratedImageResult } from '../../_models/generated-image-result';\r\nimport { PlatformService } from '../platform/platform.service';\r\n\r\ntype FabricNamespace = (typeof import('fabric'))['fabric'];\r\n\r\nlet fabric: FabricNamespace | undefined;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ImageGeneratorService {\r\n  filterMap = {};\r\n  filterIndexMap = {};\r\n\r\n  private readonly isBrowser: boolean;\r\n\r\n  canvasDim = {\r\n    height: 4096,\r\n    width: 4096,\r\n  };\r\n\r\n  canvasImageDim = {\r\n    height: 1000,\r\n    width: 1000,\r\n  };\r\n\r\n  rect;\r\n\r\n  constructor(\r\n    private http: HttpClient,\r\n    private platformService: PlatformService,\r\n  ) {\r\n    this.isBrowser = this.platformService.isBrowser();\r\n  }\r\n\r\n  private ensureFabric(): FabricNamespace | undefined {\r\n    if (fabric) {\r\n      return fabric;\r\n    }\r\n\r\n    if (!this.isBrowser) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof window !== 'undefined') {\r\n      const globalFabric = (window as { fabric?: FabricNamespace }).fabric;\r\n      if (globalFabric) {\r\n        fabric = globalFabric;\r\n      }\r\n    }\r\n\r\n    return fabric;\r\n  }\r\n\r\n  private createNoopGenerateResponse(): {\r\n    getResult: () => GeneratedImageResult | null;\r\n    getImageData: () => Observable<{ files: File[] }>;\r\n  } {\r\n    const emptyResult: GeneratedImageResult = {\r\n      imageVariants: [],\r\n      textObjects: [],\r\n      imageObjects: [],\r\n      imageSuffixUrls: [],\r\n      images: [],\r\n      canvas: null,\r\n    };\r\n\r\n    return {\r\n      getResult: () => emptyResult,\r\n      getImageData: () =>\r\n        new Observable<{ files: File[] }>((subscriber) =>\r\n          subscriber.complete(),\r\n        ),\r\n    };\r\n  }\r\n\r\n  public generateImages(\r\n    canvasElement: HTMLElement,\r\n    allColors: any[],\r\n    canvasImage: any,\r\n  ): any {\r\n    if (!this.isBrowser || !canvasElement) {\r\n      return this.createNoopGenerateResponse();\r\n    }\r\n\r\n    const fabricNamespace = this.ensureFabric();\r\n    if (!fabricNamespace) {\r\n      console.warn('Fabric is not available. Skipping image generation.');\r\n      return this.createNoopGenerateResponse();\r\n    }\r\n\r\n    fabric = fabricNamespace;\r\n\r\n    if (!fabric) {\r\n      return this.createNoopGenerateResponse();\r\n    }\r\n\r\n    try {\r\n      const colors = canvasImage.colors ?? allColors;\r\n      this.defineFilters();\r\n\r\n      let requestsCount = 0;\r\n      const files: File[] = [];\r\n      // const blobs: Blob[] = [];\r\n      const loadedCount = new BehaviorSubject(0);\r\n      let result: GeneratedImageResult = {\r\n        imageVariants: [],\r\n        textObjects: [],\r\n        imageObjects: [],\r\n        imageSuffixUrls: [],\r\n        images: [],\r\n        canvas: null,\r\n      };\r\n\r\n      if (canvasImage.objects.length === 0) {\r\n        colors.forEach((c) => {\r\n          result.imageVariants.push({\r\n            imageUrl: c.canvasImage,\r\n            colorId: c.id,\r\n            id: +canvasImage.id,\r\n          });\r\n        });\r\n      } else {\r\n        const oldRect = {\r\n          top:\r\n            (canvasImage.drawableRectangle.top * this.canvasImageDim.height) /\r\n            this.canvasDim.height,\r\n          left:\r\n            (canvasImage.drawableRectangle.left * this.canvasImageDim.width) /\r\n            this.canvasDim.width,\r\n          height: canvasImage.drawableRectangle.height,\r\n          width: canvasImage.drawableRectangle.width,\r\n        };\r\n\r\n        this.setTextureSize(2048);\r\n\r\n        const canvas = new fabric.Canvas(canvasElement, {\r\n          ...this.canvasImageDim,\r\n          backgroundColor: '#fff',\r\n        });\r\n\r\n        result.canvas = canvas;\r\n\r\n        this.setTextureSize(4096);\r\n\r\n        const workingCanvas = new fabric.Canvas(canvasElement, {\r\n          height: oldRect.height,\r\n          width: oldRect.width,\r\n        });\r\n        const workingRect = this.addWorkingEditingBox(\r\n          canvasImage.backgroundColor,\r\n          workingCanvas,\r\n        );\r\n\r\n        this.rect = this.addEditingBox(\r\n          canvasImage.backgroundColor,\r\n          canvasImage.drawableRectangle,\r\n          canvas,\r\n          canvasImage.drawableRectangle.scaleX,\r\n          canvasImage.drawableRectangle.scaleY,\r\n        );\r\n\r\n        requestsCount += colors.length + 1;\r\n\r\n        const objects = canvasImage.objects.map((o) => {\r\n          return {\r\n            object: fabric.util.object.clone(o),\r\n            workingObject: fabric.util.object.clone(o),\r\n            saveObject: fabric.util.object.clone(o),\r\n          };\r\n        });\r\n        const retinaScalling = canvas.getRetinaScaling();\r\n\r\n        objects.forEach((o) => {\r\n          if (\r\n            o.object.id === 'VERTICAL-LINE' ||\r\n            o.object.id === 'HORIZONTAL-LINE'\r\n          ) {\r\n            return;\r\n          }\r\n          o.object.left =\r\n            (o.object.left * this.canvasImageDim.width) / o.object.canvasX;\r\n          o.object.top =\r\n            (o.object.top * this.canvasImageDim.height) / o.object.canvasY;\r\n          o.object.scaleY =\r\n            (o.object.scaleY * this.canvasImageDim.height) / o.object.canvasY;\r\n          o.object.scaleX =\r\n            (o.object.scaleX * this.canvasImageDim.height) / o.object.canvasX;\r\n          o.saveObject.left =\r\n            (o.saveObject.left * this.canvasDim.width) / o.object.canvasX;\r\n          o.saveObject.top =\r\n            (o.saveObject.top * this.canvasDim.height) / o.object.canvasY;\r\n          o.saveObject.scaleX =\r\n            (o.saveObject.scaleX * this.canvasDim.width) / o.object.canvasX;\r\n          o.saveObject.scaleY =\r\n            (o.saveObject.scaleY * this.canvasDim.height) / o.object.canvasY;\r\n\r\n          if (o.saveObject.type === 'textbox') {\r\n            result.textObjects.push({\r\n              index: o.saveObject.index,\r\n              angle: o.saveObject.angle,\r\n              height: o.saveObject.height,\r\n              width: o.saveObject.width,\r\n              scaleX: o.saveObject.scaleX,\r\n              scaleY: o.saveObject.scaleY,\r\n              top: o.saveObject.top,\r\n              left: o.saveObject.left,\r\n              objectItem: {\r\n                opacity: o.saveObject.opacity,\r\n                fill: o.saveObject.fill,\r\n                font: o.saveObject.fontFamily,\r\n                fontWeight: o.saveObject.fontWeight,\r\n                fontStyle: o.saveObject.fontStyle,\r\n                fontSize: o.saveObject.fontSize,\r\n                textAlignment: o.saveObject.textAlign,\r\n                underline: o.saveObject.underline,\r\n                overline: o.saveObject.overline,\r\n                lineThrough: o.saveObject.linethrough,\r\n                lineHeight: o.saveObject.lineHeight,\r\n                charSpacing: o.saveObject.charSpacing,\r\n                value: o.saveObject.text,\r\n              },\r\n            });\r\n          } else if (o.saveObject.type === 'image') {\r\n            const obj = o.object.originalUrl\r\n              ? o.object\r\n              : o.saveObject.toObject();\r\n\r\n            if (obj.existing) {\r\n              result.imageObjects.push({\r\n                id: +canvasImage.id,\r\n                index: o.saveObject.index,\r\n                angle: o.saveObject.angle,\r\n                height: o.saveObject.height,\r\n                width: o.saveObject.width,\r\n                scaleX: o.saveObject.scaleX,\r\n                scaleY: o.saveObject.scaleY,\r\n                top: o.saveObject.top,\r\n                left: o.saveObject.left,\r\n                objectItem: {\r\n                  ...o.object['_meta'],\r\n                  objectImageUrl: obj.originalUrl,\r\n                  filters: JSON.stringify(o.saveObject.filters),\r\n                },\r\n              });\r\n            } else {\r\n              const fileName = Math.floor(Math.random() * 1000000000);\r\n              result.imageObjects.push({\r\n                id: +canvasImage.id,\r\n                index: o.saveObject.index,\r\n                angle: o.saveObject.angle,\r\n                height: o.saveObject.height,\r\n                width: o.saveObject.width,\r\n                scaleX: o.saveObject.scaleX,\r\n                scaleY: o.saveObject.scaleY,\r\n                top: o.saveObject.top,\r\n                left: o.saveObject.left,\r\n                objectItem: {\r\n                  filters: JSON.stringify(o.saveObject.filters),\r\n                  objectImageUrl: 'objects/' + fileName + '.png',\r\n                  ...o.object['_meta'],\r\n                },\r\n              });\r\n\r\n              const image = o.saveObject.image;\r\n\r\n              // blobs.push(image);\r\n              files.push(new File([image], 'objects/' + fileName + '.png'));\r\n\r\n              result.imageSuffixUrls.push('objects/' + fileName + '.png');\r\n            }\r\n          }\r\n          o.object.clipTo = (ctx): any => {\r\n            ctx.save();\r\n            ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n            this.rect.render(ctx);\r\n            ctx.restore();\r\n          };\r\n\r\n          this.setTextureSize(2048);\r\n          canvas.add(o.object);\r\n        });\r\n        this.applyBackgroundColor(\r\n          canvas,\r\n          this.rect,\r\n          canvasImage.backgroundColor,\r\n        );\r\n        canvas.renderAll();\r\n\r\n        colors.forEach((c) => {\r\n          const colorName = JSON.parse(JSON.stringify(c.name));\r\n          const canvasImageId = JSON.parse(JSON.stringify(canvasImage.id));\r\n\r\n          result.imageVariants.push({\r\n            imageUrl: 'pictures/' + canvasImageId + '/' + colorName + '.jpg',\r\n            colorId: c.id,\r\n            id: +canvasImageId,\r\n          });\r\n\r\n          result.imageSuffixUrls.push(\r\n            'pictures/' + canvasImageId + '/' + colorName + '.jpg',\r\n          );\r\n\r\n          fabric.Image.fromURL(\r\n            c.canvasImage,\r\n            (img) => {\r\n              let fileURLs = [];\r\n\r\n              this.setTextureSize(2048);\r\n              canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas), {\r\n                scaleX: canvas.width / img.width,\r\n                scaleY: canvas.height / img.height,\r\n              });\r\n              fetch(canvas.toDataURL({ format: 'jpeg', quality: 0.82 }))\r\n                .then((res) => res.blob())\r\n                .then((res) => {\r\n                  // blobs.push(res);\r\n\r\n                  files.push(\r\n                    new File(\r\n                      [res],\r\n                      'pictures/' + canvasImageId + '/' + colorName + '.jpg',\r\n                    ),\r\n                  );\r\n\r\n                  files.forEach((file) => {\r\n                    const url = URL.createObjectURL(file);\r\n                    fileURLs.push(url);\r\n                  });\r\n\r\n                  loadedCount.next(loadedCount.value + 1);\r\n                });\r\n            },\r\n            {\r\n              crossOrigin: 'anonymous',\r\n            },\r\n          );\r\n        });\r\n\r\n        result.images.push({\r\n          id: +canvasImage.id,\r\n          canvasImageUrl:\r\n            canvasImage.printType === 'cmyk_raster_pdf'\r\n              ? 'canvas/' + canvasImage.id + '.pdf'\r\n              : 'canvas/' + canvasImage.id + '.png',\r\n          printBackgroundColor: canvasImage.backgroundColor,\r\n          designApplied: true,\r\n        });\r\n\r\n        objects.forEach((o) => {\r\n          if (\r\n            o.object.id === 'VERTICAL-LINE' ||\r\n            o.object.id === 'HORIZONTAL-LINE'\r\n          ) {\r\n            return;\r\n          }\r\n          const x =\r\n            (canvasImage.drawableRectangle.width * o.workingObject.canvasX) /\r\n            this.canvasDim.width;\r\n          const y =\r\n            (canvasImage.drawableRectangle.height * o.workingObject.canvasY) /\r\n            this.canvasDim.height;\r\n\r\n          o.workingObject.left =\r\n            ((o.workingObject.left * this.canvasDim.width) /\r\n              o.workingObject.canvasX -\r\n              (oldRect.left * this.canvasDim.width) /\r\n                this.canvasImageDim.width -\r\n              (((x * (1 - canvasImage.drawableRectangle.scaleX)) / 2) *\r\n                this.canvasDim.width) /\r\n                o.workingObject.canvasX) /\r\n            canvasImage.drawableRectangle.scaleX;\r\n          o.workingObject.top =\r\n            ((o.workingObject.top * this.canvasDim.height) /\r\n              o.workingObject.canvasY -\r\n              (oldRect.top * this.canvasDim.height) /\r\n                this.canvasImageDim.height -\r\n              (((y * (1 - canvasImage.drawableRectangle.scaleY)) / 2) *\r\n                this.canvasDim.height) /\r\n                o.workingObject.canvasY) /\r\n            canvasImage.drawableRectangle.scaleY;\r\n          o.workingObject.scaleY =\r\n            (o.workingObject.scaleY * this.canvasDim.height) /\r\n            o.workingObject.canvasY /\r\n            canvasImage.drawableRectangle.scaleY;\r\n          o.workingObject.scaleX =\r\n            (o.workingObject.scaleX * this.canvasDim.width) /\r\n            o.workingObject.canvasX /\r\n            canvasImage.drawableRectangle.scaleX;\r\n\r\n          o.workingObject.clipTo = (ctx): any => {\r\n            ctx.save();\r\n            ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\r\n            workingRect.render(ctx);\r\n            ctx.restore();\r\n          };\r\n          this.setTextureSize(4096);\r\n          workingCanvas.add(o.workingObject);\r\n        });\r\n        this.applyBackgroundColor(\r\n          workingCanvas,\r\n          workingRect,\r\n          canvasImage.backgroundColor,\r\n        );\r\n        this.setTextureSize(4096);\r\n        workingCanvas.renderAll();\r\n\r\n        result.imageSuffixUrls.push(\r\n          'canvas/' +\r\n            canvasImage.id +\r\n            (canvasImage.printType === 'cmyk_raster_pdf' ? '.pdf' : '.png'),\r\n        );\r\n\r\n        if (canvasImage.printType === 'cmyk_raster_pdf') {\r\n          const imagePdf = new jsPDF({\r\n            orientation:\r\n              canvasImage.drawableRectangle.height >=\r\n              canvasImage.drawableRectangle.width\r\n                ? 'portrait'\r\n                : 'landscape',\r\n            unit: 'px',\r\n            format: [\r\n              canvasImage.drawableRectangle.height,\r\n              canvasImage.drawableRectangle.width,\r\n            ],\r\n          });\r\n\r\n          imagePdf.addImage(\r\n            changeDpiDataUrl(\r\n              workingCanvas.toDataURL({ format: 'image/png' }),\r\n              300,\r\n            ),\r\n            'image/png',\r\n            0,\r\n            0,\r\n            canvasImage.drawableRectangle.width,\r\n            canvasImage.drawableRectangle.height,\r\n          );\r\n          imagePdf.setProperties({ title: canvasImage.id });\r\n          files.push(\r\n            new File(\r\n              [imagePdf.output('blob')],\r\n              'canvas/' + canvasImage.id + '.pdf',\r\n            ),\r\n          );\r\n\r\n          loadedCount.next(loadedCount.value + 1);\r\n        } else if (canvasImage.printType === 'rgb_raster_png') {\r\n          fetch(workingCanvas.toDataURL({ format: 'image/png' }))\r\n            .then((res) => res.blob())\r\n            .then((res) => {\r\n              changeDpiBlob(res, 300).then((newRes) => {\r\n                files.push(\r\n                  new File([newRes], 'canvas/' + canvasImage.id + '.png'),\r\n                );\r\n\r\n                loadedCount.next(loadedCount.value + 1);\r\n              });\r\n            });\r\n        }\r\n      }\r\n\r\n      this.setTextureSize(2048);\r\n      const getResult = (): GeneratedImageResult => result;\r\n\r\n      const getImageData = (): Observable<{ files: File[] }> =>\r\n        loadedCount.pipe(\r\n          filter((loadedCountValue) => loadedCountValue === requestsCount),\r\n          take(1),\r\n          map(() => ({ files })),\r\n        );\r\n\r\n      return { getResult, getImageData };\r\n    } catch (error) {\r\n      console.log(error);\r\n    }\r\n  }\r\n\r\n  logError(message: string): Observable<any> {\r\n    return this.http.post('log-error', {\r\n      message,\r\n    });\r\n  }\r\n\r\n  loadObjects(canvasImage: any, canvasElement: HTMLCanvasElement): any {\r\n    if (!this.isBrowser || !canvasElement) {\r\n      return new Observable<any>((subscriber) => subscriber.complete());\r\n    }\r\n\r\n    const fabricNamespace = this.ensureFabric();\r\n    if (!fabricNamespace) {\r\n      return new Observable<any>((subscriber) => subscriber.complete());\r\n    }\r\n\r\n    fabric = fabricNamespace;\r\n\r\n    if (!fabric) {\r\n      return new Observable<any>((subscriber) => subscriber.complete());\r\n    }\r\n\r\n    const helperCanvas = new fabric.Canvas(canvasElement, this.canvasImageDim);\r\n    const loadedObjects = new BehaviorSubject<any>([]);\r\n    return loadedObjects.pipe(\r\n      tap(() => {\r\n        canvasImage.objects.forEach((o) => {\r\n          if (o.objectItem.objectImageUrl) {\r\n            this.addNotLoadedImage(o, helperCanvas, this.rect, loadedObjects);\r\n          } else {\r\n            this.addNotLoadedText(o, helperCanvas, this.rect, loadedObjects);\r\n          }\r\n        });\r\n      }),\r\n      skip(canvasImage.objects.length),\r\n      take(1),\r\n      map((objects: any) => {\r\n        this.setTextureSize(4096);\r\n        objects = objects.sort((a, b) => (a.index > b.index ? 1 : -1));\r\n        objects.forEach((o) => {\r\n          helperCanvas.add(o);\r\n        });\r\n\r\n        return helperCanvas.getObjects();\r\n      }),\r\n    );\r\n  }\r\n\r\n  applyBackgroundColor(canvas, rect, backgroundColor): void {\r\n    if (!fabric) {\r\n      return;\r\n    }\r\n    const rectDuplicate = new fabric.Rect({\r\n      left: rect.left,\r\n      top: rect.top,\r\n      opacity: 1,\r\n      width: rect.width,\r\n      height: rect.height,\r\n      scaleX: rect.scaleX,\r\n      scaleY: rect.scaleY,\r\n      fill: backgroundColor,\r\n    });\r\n    canvas.add(rectDuplicate);\r\n    canvas.sendToBack(rectDuplicate);\r\n  }\r\n\r\n  addNotLoadedText(text, canvas, rect, loadedObjects): void {\r\n    if (!fabric) {\r\n      return;\r\n    }\r\n    const textbox = new fabric.Textbox('', {\r\n      left: (text.left * this.canvasImageDim.width) / this.canvasDim.width,\r\n      top: (text.top * this.canvasImageDim.height) / this.canvasDim.height,\r\n      scaleX: (text.scale_x * this.canvasImageDim.width) / this.canvasDim.width,\r\n      scaleY:\r\n        (text.scale_y * this.canvasImageDim.height) / this.canvasDim.height,\r\n      editingBorderColor: '#f3364c',\r\n      canvasX: this.canvasImageDim.width,\r\n      canvasY: this.canvasImageDim.height,\r\n      height: text.height,\r\n      width: text.width,\r\n      angle: text.angle,\r\n      fontSize: text.object_item.font_size,\r\n      text: text.object_item.value,\r\n      textAlign: text.object_item.text_alignment\r\n        ? text.object_item.text_alignment\r\n        : '',\r\n      opacity: text.object_item.opacity,\r\n      fill: text.object_item.fill,\r\n      lineHeight: text.object_item.line_height,\r\n      charSpacing: text.object_item.char_spacing,\r\n      fontWeight: text.object_item.font_weight\r\n        ? text.object_item.font_weight\r\n        : '',\r\n      fontStyle: text.object_item.font_style ? text.object_item.font_style : '',\r\n      fontFamily: text.object_item.font ? text.object_item.font : '',\r\n      underline: text.object_item.underline,\r\n      overline: text.object_item.overline,\r\n      linethrough: text.object_item.line_through,\r\n      index: text.index,\r\n    });\r\n    const retinaScalling = canvas.getRetinaScaling();\r\n    textbox.clipTo = (ctx): void => {\r\n      ctx.save();\r\n      ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\r\n      rect.render(ctx);\r\n      ctx.restore();\r\n    };\r\n    loadedObjects.next([...loadedObjects.getValue(), textbox]);\r\n  }\r\n\r\n  addNotLoadedImage(image, canvas, rect, loadedObjects): void {\r\n    if (!fabric) {\r\n      return;\r\n    }\r\n    this.http\r\n      .get(image.objectItem.objectImageUrl, {\r\n        headers: new HttpHeaders().set(\r\n          'SKIP_INTERCEPTORS',\r\n          'SKIP_INTERCEPTORS',\r\n        ),\r\n        responseType: 'blob',\r\n        params: {\r\n          updated: moment().format('YYYY-MM-DD-HH-mm-ss'),\r\n        },\r\n      })\r\n      .subscribe((res) => {\r\n        const reader = new FileReader();\r\n        reader.onload = (event: any): void => {\r\n          const originalImg = new Image();\r\n          originalImg.src = event.target.result;\r\n\r\n          const CANVAS_SIZE = 4096;\r\n\r\n          originalImg.onload = (): void => {\r\n            let url;\r\n            if (Math.max(originalImg.width, originalImg.height) > CANVAS_SIZE) {\r\n              //create canvas\r\n              const canvas = document.createElement('canvas');\r\n              //scale image\r\n              if (originalImg.height >= originalImg.width) {\r\n                canvas.height = CANVAS_SIZE;\r\n                canvas.width =\r\n                  (CANVAS_SIZE / originalImg.height) * originalImg.width;\r\n              } else {\r\n                canvas.width = CANVAS_SIZE;\r\n                canvas.height =\r\n                  (CANVAS_SIZE / originalImg.width) * originalImg.height;\r\n              }\r\n              //draw to canvas\r\n              const context = canvas.getContext('2d');\r\n              context.drawImage(originalImg, 0, 0, canvas.width, canvas.height);\r\n              //assign new image url\r\n              url = context.canvas.toDataURL();\r\n            } else {\r\n              url = URL.createObjectURL(res);\r\n            }\r\n\r\n            fabric.Image.fromURL(\r\n              url,\r\n              (img) => {\r\n                const oImg = img.set({\r\n                  left:\r\n                    (image.left * this.canvasImageDim.width) /\r\n                    this.canvasDim.width,\r\n                  top:\r\n                    (image.top * this.canvasImageDim.height) /\r\n                    this.canvasDim.height,\r\n                  scaleX:\r\n                    (image.scaleX * this.canvasImageDim.width) /\r\n                    this.canvasDim.width,\r\n                  scaleY:\r\n                    (image.scaleY * this.canvasImageDim.height) /\r\n                    this.canvasDim.height,\r\n                  height: image.height,\r\n                  width: image.width,\r\n                  angle: image.angle,\r\n                  transparentCorners: false,\r\n                  cornerColor: 'black',\r\n                  index: image.index,\r\n                  canvasX: this.canvasImageDim.width,\r\n                  canvasY: this.canvasImageDim.height,\r\n                  originalUrl: image.objectItem.objectImageUrl,\r\n                  _meta: image.objectItem['_meta'],\r\n                  existing: true,\r\n                });\r\n                for (const f of JSON.parse(image.objectItem.filters)) {\r\n                  if (f.type !== 'Convolute') {\r\n                    oImg.filters[this.filterIndexMap[f.type]] =\r\n                      this.filterMap[this.filterIndexMap[f.type]];\r\n                  } else {\r\n                    if (f.matrix[0] === 0) {\r\n                      oImg.filters[this.filterIndexMap['Convolute-Sharpen']] =\r\n                        this.filterMap[\r\n                          this.filterIndexMap['Convolute-Sharpen']\r\n                        ];\r\n                    } else {\r\n                      oImg.filters[this.filterIndexMap['Convolute-Emboss']] =\r\n                        this.filterMap[this.filterIndexMap['Convolute-Emboss']];\r\n                    }\r\n                  }\r\n                }\r\n                oImg.applyFilters();\r\n                const retinaScalling = canvas.getRetinaScaling();\r\n                oImg.clipTo = (ctx): void => {\r\n                  ctx.save();\r\n                  ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\r\n                  rect.render(ctx);\r\n                  ctx.restore();\r\n                };\r\n                loadedObjects.next([...loadedObjects.getValue(), oImg]);\r\n              },\r\n              {\r\n                crossOrigin: 'anonymous',\r\n              },\r\n            );\r\n          };\r\n        };\r\n        reader.readAsDataURL(res);\r\n      });\r\n  }\r\n\r\n  addEditingBox(backgroundColor, rect, canvas, scaleX, scaleY): any {\r\n    if (!fabric) {\r\n      return;\r\n    }\r\n    this.setTextureSize(2048);\r\n    const x = (rect.width * this.canvasImageDim.width) / this.canvasDim.width;\r\n    const y =\r\n      (rect.height * this.canvasImageDim.height) / this.canvasDim.height;\r\n    const rectangle = new fabric.Rect({\r\n      left:\r\n        (rect.left * this.canvasImageDim.width) / this.canvasDim.width +\r\n        (x * (1 - scaleX)) / 2,\r\n      top:\r\n        (rect.top * this.canvasImageDim.height) / this.canvasDim.height +\r\n        (y * (1 - scaleY)) / 2,\r\n      stroke: '#98a6ad',\r\n      strokeWidth: 0,\r\n      strokeDashArray: [500, 500],\r\n      opacity: 1,\r\n      width: (rect.width * this.canvasImageDim.width) / this.canvasDim.width,\r\n      height:\r\n        (rect.height * this.canvasImageDim.height) / this.canvasDim.height,\r\n      selectable: false,\r\n      backgroundColor: backgroundColor,\r\n      id: 'DEFAULT',\r\n      preserveObjectStacking: true,\r\n      objectCaching: false,\r\n      middleX: 0,\r\n      scaleX: scaleX,\r\n      scaleY: scaleY,\r\n    });\r\n    const retinaScalling = canvas.getRetinaScaling();\r\n    rectangle.clipTo = (ctx): any => {\r\n      ctx.save();\r\n      ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\r\n      ctx.restore();\r\n    };\r\n    canvas.add(rectangle);\r\n    canvas.renderAll();\r\n    return rectangle;\r\n  }\r\n\r\n  addWorkingEditingBox(backgroundColor, canvas): any {\r\n    if (!fabric) {\r\n      return;\r\n    }\r\n    this.setTextureSize(4096);\r\n    const rectangle = new fabric.Rect({\r\n      left: 0,\r\n      top: 0,\r\n      stroke: '#98a6ad',\r\n      strokeWidth: 0,\r\n      strokeDashArray: [500, 500],\r\n      opacity: 1,\r\n      width: canvas.width,\r\n      height: canvas.height,\r\n      backgroundColor: backgroundColor,\r\n      selectable: false,\r\n      id: 'DEFAULT',\r\n      preserveObjectStacking: true,\r\n      objectCaching: false,\r\n      middleX: 0,\r\n    });\r\n    const retinaScalling = canvas.getRetinaScaling();\r\n    rectangle.clipTo = (ctx): any => {\r\n      ctx.save();\r\n      ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\r\n      ctx.restore();\r\n    };\r\n    canvas.add(rectangle);\r\n    canvas.renderAll();\r\n    return rectangle;\r\n  }\r\n\r\n  defineFilters(): void {\r\n    if (!fabric) {\r\n      return;\r\n    }\r\n    this.filterMap[0] = new fabric.Image.filters.Grayscale();\r\n    this.filterIndexMap['Grayscale'] = 0;\r\n    this.filterMap[1] = new fabric.Image.filters.Invert();\r\n    this.filterIndexMap['Invert'] = 1;\r\n    this.filterMap[2] = new fabric.Image.filters.RemoveColor({\r\n      distance: '',\r\n      color: '',\r\n    });\r\n    this.filterIndexMap['RemoveColor'] = 2;\r\n    this.filterMap[3] = new fabric.Image.filters.Sepia();\r\n    this.filterIndexMap['Sepia'] = 3;\r\n    this.filterMap[4] = new fabric.Image.filters.Brownie();\r\n    this.filterIndexMap['Brownie'] = 4;\r\n    this.filterMap[5] = new fabric.Image.filters.Brightness({});\r\n    this.filterIndexMap['Brightness'] = 5;\r\n    this.filterMap[6] = new fabric.Image.filters.Contrast({\r\n      constrast: '',\r\n    });\r\n    this.filterIndexMap['Contrast'] = 6;\r\n    this.filterMap[7] = new fabric.Image.filters.Saturation({});\r\n    this.filterIndexMap['Saturation'] = 7;\r\n    this.filterMap[8] = new fabric.Image.filters.Noise({\r\n      noise: '',\r\n    });\r\n    this.filterIndexMap['Noise'] = 8;\r\n    this.filterMap[9] = new fabric.Image.filters.Vintage();\r\n    this.filterIndexMap['Vintage'] = 9;\r\n    this.filterMap[10] = new fabric.Image.filters.Pixelate({\r\n      blocksize: '',\r\n    });\r\n    this.filterIndexMap['Pixelate'] = 10;\r\n    this.filterMap[11] = new fabric.Image.filters.Blur({\r\n      value: '',\r\n    });\r\n    this.filterIndexMap['Blur'] = 11;\r\n    this.filterMap[12] = new fabric.Image.filters.Convolute({\r\n      matrix: [0, -1, 0, -1, 5, -1, 0, -1, 0],\r\n    });\r\n    this.filterIndexMap['Convolute-Sharpen'] = 12;\r\n    this.filterMap[13] = new fabric.Image.filters.Convolute({\r\n      matrix: [1, 1, 1, 1, 0.7, -1, -1, -1, -1],\r\n    });\r\n    this.filterIndexMap['Convolute-Emboss'] = 13;\r\n    this.filterMap[14] = new fabric.Image.filters.Technicolor();\r\n    this.filterIndexMap['Technicolor'] = 14;\r\n    this.filterMap[15] = new fabric.Image.filters.Polaroid();\r\n    this.filterIndexMap['Polaroid'] = 15;\r\n    this.filterMap[16] = new fabric.Image.filters.BlendColor({\r\n      color: '',\r\n      mode: '',\r\n      alpha: '',\r\n    });\r\n    this.filterIndexMap['BlendColor'] = 16;\r\n    this.filterMap[17] = new fabric.Image.filters.Gamma({\r\n      gamma: ['', '', ''],\r\n    });\r\n    this.filterIndexMap['Gamma'] = 17;\r\n    this.filterMap[18] = new fabric.Image.filters.Kodachrome();\r\n    this.filterIndexMap['Kodachrome'] = 18;\r\n    this.filterMap[19] = new fabric.Image.filters.BlackWhite();\r\n    this.filterIndexMap['BlackWhite'] = 19;\r\n    this.filterMap[20] = new fabric.Image.filters.BlendImage({\r\n      image: '',\r\n    });\r\n    this.filterIndexMap['BlendImage'] = 20;\r\n    this.filterMap[21] = new fabric.Image.filters.HueRotation({\r\n      rotation: '',\r\n    });\r\n    this.filterIndexMap['HueRotation'] = 21;\r\n  }\r\n\r\n  setTextureSize(size: 4096 | 2048): void {\r\n    if (!fabric) {\r\n      return;\r\n    }\r\n    fabric.textureSize = size;\r\n    fabric.filterBackend = null;\r\n  }\r\n}\r\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n  ContentChild,\n  ContentChildren,\n  QueryList,\n  AfterContentInit,\n} from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport moment from 'moment';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { debounceTime, skip, take } from 'rxjs/operators';\nimport { SubSink } from 'subsink';\nimport { BoxPaintOccupation } from '../_models/box-paint-occupation';\nimport { BrendlyImage } from '../_models/brendly-image';\nimport { Color } from '../_models/color';\nimport { Image } from '../_models/image';\nimport { ImageEditorService } from '../_services/image-editor/image-editor.service';\nimport {\n  IMAGE_EDITOR_ENVIRONMENT_CONFIG,\n  IMAGE_EDITOR_SERVICE,\n  LOADER_SERVICE_TOKEN,\n} from '../config/image-editor-config-token';\nimport { ImageEditorEnvironmentConfig } from '../config/image-editor-environment-config';\nimport { createBackgroundColor } from '../util';\nimport { EditingBox } from '../_models/editing-box';\nimport {\n  ImageGeneratorService,\n  TranslateService,\n  PlatformService,\n} from '../_services';\nimport { GeneratedImageResult } from '../_models/generated-image-result';\nimport { FileUploadHandlerDirective } from '../_directives/file-upload-handler/file-upload-handler.directive';\nimport {\n  IImageUploadHandler,\n  IMAGE_UPLOAD_HANDLER_TOKEN,\n} from '../_interfaces/image-upload-handler.interface';\n\ntype FabricNamespace = (typeof import('fabric'))['fabric'];\ntype FontFaceObserverConstructor = typeof import('fontfaceobserver');\n\nlet fabric: FabricNamespace | undefined;\nlet fabricCustomiseLoaded = false;\nlet FontFaceObserverCtor: FontFaceObserverConstructor | undefined;\n\n@Component({\n  selector: 'image-editor',\n  templateUrl: './image-editor.component.html',\n  styleUrls: ['./image-editor.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: IMAGE_UPLOAD_HANDLER_TOKEN,\n      useExisting: ImageEditorComponent,\n    },\n  ],\n})\nexport class ImageEditorComponent\n  implements OnInit, OnChanges, OnDestroy, AfterContentInit, IImageUploadHandler\n{\n  @Input() image!: Image;\n  @Input() objects = [];\n  @Input() colors!: Color[];\n  @Input() backgroundColor!: string;\n  @Input() btnClass: string;\n  @Input() customTemplate: TemplateRef<any>;\n  @Input() editingBox: EditingBox;\n  @Input() activeColor$: BehaviorSubject<Color>;\n  @Input() showCustomUploadButton = true;\n  @Input() setObjectMeta: (image: any) => any = (image) => image;\n\n  @Input() formTemplate: TemplateRef<any>;\n  @Output() generatedImageHandler = new EventEmitter();\n  @Output() generatedFilesHandler = new EventEmitter();\n\n  moment = moment();\n  private readonly isBrowser: boolean;\n  private fabricReady = false;\n  private fabricLoadingPromise: Promise<void> | null = null;\n\n  @ViewChild('canvasWrapper', { static: true }) canvasWrapper!: ElementRef;\n  @ViewChild('canvas', { static: true })\n  canvasEl!: ElementRef<HTMLCanvasElement>;\n  @ViewChild('canvasWithTransparentObjects', { static: true })\n  canvasWithTransparentObjectsEl!: ElementRef<HTMLCanvasElement>;\n  @ViewChild('debugCanvas', { static: false })\n  debugCanvasEl!: ElementRef<HTMLCanvasElement>;\n  @ViewChild('fileUpload', { static: false }) fileUpload: any;\n  @ContentChild(FileUploadHandlerDirective, { static: false })\n  customFileUploadButton: FileUploadHandlerDirective | null = null;\n  @ContentChildren(FileUploadHandlerDirective, { descendants: true })\n  customFileUploadButtons!: QueryList<FileUploadHandlerDirective>;\n\n  screen: 'mobile' | 'desktop' = 'mobile';\n  hasCustomFileUploadButton = false;\n  canvasProperties$ = new BehaviorSubject<any>(null);\n\n  chosenGalleryImage$: Subject<any> = new Subject();\n  subs = new SubSink();\n  NODE_CANVAS_SIZE = 4096;\n  selected$ = new BehaviorSubject<boolean>(false);\n  canvasLoading$ = new BehaviorSubject<boolean>(false);\n  private pendingCanvasLoads = 0;\n  imageSelected = false;\n  textSelected = false;\n  isImageJPG = false;\n  isCanvasChanged = false;\n\n  environment = this.config.environment;\n  devEnvironment = false;\n  // devEnvironment =\n  //   environment.environment === 'dev' || environment.environment === 'stage';\n  // devEnvironment = environment.environment === 'dev';\n\n  backgroundImage: any;\n  canvas: any;\n  canvasWithTransparentObjects: any;\n  debugCanvas: any;\n  rect: any;\n  rectInitialized$ = new BehaviorSubject<boolean>(false);\n  activeObject: any;\n  activeObjectOncanvasWithTransparentObjects: any;\n  filterMap: { [key: string]: any } = {};\n  filterIndexMap: { [key: string]: any } = {};\n  verticalLineVisible!: boolean;\n  horizontalLineVisible!: boolean;\n  @Output() canvasChanged = new EventEmitter<boolean>();\n  @Output() objectsLoaded = new EventEmitter<boolean>();\n  loadedObjects = new BehaviorSubject<any>([]);\n  loadedObjects$ = this.loadedObjects.asObservable();\n  areObjectsLoaded = false;\n  unloadingObjects = false;\n  loadingObjects = false;\n  canvasPadding = 50;\n  visibleEditingBox: any;\n  currentImageDPI$ = new BehaviorSubject<number>(0);\n  currentImageDPIState!: string;\n\n  visibleEditingBoxPaintOccupation$ =\n    new BehaviorSubject<BoxPaintOccupation | null>(null);\n\n  @HostListener('window:resize', [])\n  setScreen(): void {\n    if (!this.isBrowser || typeof window === 'undefined') {\n      return;\n    }\n    this.screen = window.innerWidth > 991 ? 'desktop' : 'mobile';\n    if (this.canvas) {\n      this.onResize();\n    }\n  }\n\n  createBackgroundColor = createBackgroundColor;\n\n  constructor(\n    @Optional() @Inject(LOADER_SERVICE_TOKEN) private loaderService: any,\n    @Inject(IMAGE_EDITOR_ENVIRONMENT_CONFIG)\n    private config: ImageEditorEnvironmentConfig,\n    private http: HttpClient,\n    @Optional()\n    @Inject(IMAGE_EDITOR_SERVICE)\n    private imageEditorService: ImageEditorService,\n    private cdr: ChangeDetectorRef,\n    private translateService: TranslateService,\n    private imageGeneratorService: ImageGeneratorService,\n    private platformService: PlatformService,\n  ) {\n    this.isBrowser = this.platformService.isBrowser();\n    if (this.isBrowser && typeof window !== 'undefined') {\n      this.screen = window.innerWidth > 991 ? 'desktop' : 'mobile';\n    }\n  }\n\n  private async ensureFabricReady(): Promise<void> {\n    if (!this.isBrowser) {\n      return;\n    }\n    if (this.fabricReady) {\n      return;\n    }\n    if (this.fabricLoadingPromise) {\n      await this.fabricLoadingPromise;\n      return;\n    }\n\n    this.fabricLoadingPromise = (async () => {\n      const fabricModule = await import('fabric');\n      const resolvedFabric =\n        (fabricModule as { fabric?: FabricNamespace }).fabric ??\n        (fabricModule as { default?: FabricNamespace }).default;\n\n      if (!resolvedFabric) {\n        throw new Error('Failed to resolve fabric export.');\n      }\n      fabric = resolvedFabric;\n\n      if (typeof window !== 'undefined') {\n        (window as unknown as { fabric?: FabricNamespace }).fabric = fabric;\n      }\n\n      if (!fabricCustomiseLoaded) {\n        await import('fabric-customise-controls');\n        fabricCustomiseLoaded = true;\n      }\n\n      this.configureFabricDefaults();\n      this.fabricReady = true;\n    })()\n      .catch((error) => {\n        console.error('Failed to load fabric', error);\n      })\n      .finally(() => {\n        this.fabricLoadingPromise = null;\n      });\n\n    await this.fabricLoadingPromise;\n  }\n\n  private configureFabricDefaults(): void {\n    if (!fabric) {\n      return;\n    }\n    fabric.textureSize = 2048;\n    fabric.filterBackend = null;\n  }\n\n  private get canUseCanvas(): boolean {\n    return this.isBrowser && this.fabricReady && !!fabric;\n  }\n\n  private startCanvasLoading(): void {\n    this.pendingCanvasLoads++;\n    if (this.pendingCanvasLoads === 1) {\n      this.canvasLoading$.next(true);\n      this.cdr.markForCheck();\n    }\n  }\n\n  private stopCanvasLoading(): void {\n    this.pendingCanvasLoads = Math.max(0, this.pendingCanvasLoads - 1);\n    if (this.pendingCanvasLoads === 0) {\n      this.canvasLoading$.next(false);\n      this.cdr.markForCheck();\n    }\n  }\n\n  uploadHandler(fileUpload: any, event: any): void {\n    event.files.forEach((file: any) => {\n      this.chosenGalleryImage$.next(file);\n    });\n    if (fileUpload && fileUpload.files) {\n      fileUpload.files = [];\n    }\n  }\n\n  ngOnInit(): void {\n    if (!this.isBrowser) {\n      return;\n    }\n\n    if (this.imageEditorService) {\n      this.subs.add(\n        this.imageEditorService.calculateVisibleEdditingBoxPaintSubject\n          .pipe(debounceTime(42 * 1.5))\n          .subscribe(() => {\n            if (!this.canUseCanvas || !this.canvas || !this.canvas.vptCoords) {\n              return;\n            }\n            if (Object.keys(this.canvas.vptCoords).length === 0) return;\n            if (!this.canvasWithTransparentObjects) {\n              return;\n            }\n            this.canvasWithTransparentObjects.renderAll();\n            this.imageEditorService?.calculateVisibleEdditingBoxPaintOccupation(\n              this.canvas,\n              this.canvasWithTransparentObjectsEl,\n              this.rect,\n              this.image,\n              this.devEnvironment,\n              this.debugCanvasEl,\n            );\n          }),\n      );\n    }\n  }\n\n  ngAfterContentInit(): void {\n    // Check if custom file upload button exists\n    // Use @ContentChild for direct children, or @ContentChildren with descendants for projected content\n    // This works even when directive is projected through multiple ng-content levels\n    const directive =\n      this.customFileUploadButton || this.customFileUploadButtons?.first;\n    this.hasCustomFileUploadButton = !!directive;\n\n    // Subscribe to filesSelected event if custom button exists\n    if (directive) {\n      this.subs.add(\n        directive.filesSelected.subscribe((event: { files: File[] }) => {\n          const mockFileUpload = { files: [] };\n          this.uploadHandler(mockFileUpload, event);\n        }),\n      );\n    }\n\n    // Also subscribe to changes in the QueryList in case directive is added dynamically\n    if (this.customFileUploadButtons) {\n      this.subs.add(\n        this.customFileUploadButtons.changes.subscribe(\n          (queryList: QueryList<FileUploadHandlerDirective>) => {\n            if (queryList.length > 0 && !this.hasCustomFileUploadButton) {\n              const firstDirective = queryList.first;\n              this.hasCustomFileUploadButton = true;\n              this.subs.add(\n                firstDirective.filesSelected.subscribe(\n                  (event: { files: File[] }) => {\n                    const mockFileUpload = { files: [] };\n                    this.uploadHandler(mockFileUpload, event);\n                  },\n                ),\n              );\n              this.cdr.detectChanges();\n            }\n          },\n        ),\n      );\n    }\n\n    this.cdr.detectChanges();\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    if (!this.isBrowser) {\n      return;\n    }\n\n    await this.ensureFabricReady();\n\n    if (!this.canUseCanvas) {\n      return;\n    }\n\n    this.canvasProperties$.next(this.setCanvasProperties());\n    this.initCanvas();\n\n    this.defineFilters();\n    this.customizeControls();\n\n    this.subs.add(\n      this.chosenGalleryImage$.subscribe((galleryImage: any) => {\n        if (galleryImage) {\n          this.uploadPhoto(galleryImage);\n        }\n      }),\n    );\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['colors']?.currentValue) {\n      this.colors = changes['colors'].currentValue.map((color) => ({\n        ...color,\n        backgroundColor: createBackgroundColor(color),\n      }));\n    }\n\n    if (changes['image'] && !changes['image']?.firstChange) {\n      const objects = this.canvas.getObjects();\n      const objectsWithoutBackground =\n        this.canvasWithTransparentObjects.getObjects();\n      this.unloadingObjects = true;\n\n      objectsWithoutBackground.forEach((o: any) => {\n        this.canvasWithTransparentObjects.remove(o);\n      });\n      objects.forEach((o: any) => {\n        this.canvas.remove(o);\n      });\n      this.canvas.dispose();\n      this.canvasWithTransparentObjects.dispose();\n      this.unloadingObjects = false;\n\n      this.initCanvas();\n    }\n  }\n\n  performanceChecker = [];\n  performanceCheckStarted = false;\n\n  testImages = [];\n\n  generateImageRequest(image: any): any {\n    if (!this.isBrowser) {\n      return {\n        getResult: () => null,\n        getImageData: () =>\n          new Observable<{ files: File[] }>((subscriber) =>\n            subscriber.complete(),\n          ),\n      };\n    }\n\n    const canvasElement = document.getElementById('canvas-image-generator');\n    if (!canvasElement) {\n      return {\n        getResult: () => null,\n        getImageData: () =>\n          new Observable<{ files: File[] }>((subscriber) =>\n            subscriber.complete(),\n          ),\n      };\n    }\n\n    const { getResult, getImageData } =\n      this.imageGeneratorService.generateImages(\n        canvasElement,\n        this.colors,\n        image,\n      );\n\n    const result = getResult();\n    this.generatedImageHandler.emit(result);\n\n    getImageData().subscribe({\n      next: (files) => {\n        this.generatedFilesHandler.emit(files);\n      },\n    });\n\n    return { getResult, getImageData };\n  }\n\n  loadObjects(image: any): Observable<any> {\n    if (!this.isBrowser) {\n      return new Observable<any>((subscriber) => subscriber.complete());\n    }\n\n    const canvasElement = document.getElementById('canvas-image-generator');\n    if (!canvasElement) {\n      return new Observable<any>((subscriber) => subscriber.complete());\n    }\n\n    return this.imageGeneratorService.loadObjects(\n      image,\n      canvasElement as HTMLCanvasElement,\n    );\n  }\n\n  save(): any {\n    this.generateImageRequest({\n      ...this.image,\n      objects: this.getObjects(),\n      hasBeenLoaded: true,\n      backgroundColor: this.editingBox.backgroundColor\n        ? this.editingBox.backgroundColor\n        : 'transparent',\n      drawableRectangle: {\n        left: this.editingBox.left,\n        top: this.editingBox.top,\n        width: this.editingBox.width,\n        height: this.editingBox.height,\n        angle: this.editingBox.angle,\n        scaleX: this.editingBox.scaleX,\n        scaleY: this.editingBox.scaleY,\n      },\n    });\n  }\n\n  togglePerformance(): void {\n    this.performanceCheckStarted = !this.performanceCheckStarted;\n    if (!this.performanceCheckStarted) {\n      console.log(this.performanceChecker);\n      const renderTimes = [];\n\n      for (let index = 0; index < this.performanceChecker.length - 1; index++) {\n        renderTimes.push(\n          this.performanceChecker[index + 1] - this.performanceChecker[index],\n        );\n      }\n\n      console.log(renderTimes);\n\n      const avg =\n        renderTimes.reduce((acc, sum) => sum + acc, 0) / renderTimes.length;\n      console.log('Avg:', avg);\n      console.log('Max:', Math.max(...renderTimes));\n      console.log('Min:', Math.min(...renderTimes));\n      console.log(\n        'Std:',\n        Math.sqrt(\n          renderTimes.reduce((acc, curr) => acc + Math.pow(curr - avg, 2), 0) /\n            renderTimes.length,\n        ),\n      );\n\n      this.performanceChecker = [];\n    }\n  }\n\n  initCanvas(): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    this.isCanvasChanged = false;\n    const canvasProperties = {\n      ...this.canvasProperties$.value,\n    };\n\n    this.canvas = new fabric.Canvas(this.canvasEl.nativeElement, {\n      canvasProperties,\n      imageSmoothingEnabled: false,\n      objectCaching: false,\n      renderOnAddRemove: false,\n    });\n\n    this.canvasWithTransparentObjects = new fabric.Canvas(\n      this.canvasWithTransparentObjectsEl.nativeElement,\n      {\n        canvasProperties,\n        imageSmoothingEnabled: false,\n        objectCaching: false,\n        renderOnAddRemove: false,\n      },\n    );\n\n    if (this.devEnvironment) {\n      this.debugCanvas = new fabric.Canvas(this.debugCanvasEl.nativeElement, {\n        canvasProperties,\n        imageSmoothingEnabled: false,\n        objectCaching: false,\n        renderOnAddRemove: false,\n      });\n    }\n\n    this.objectsLoaded.emit(false);\n    const selectedImage = { ...this.image };\n    this.changeColor(\n      this.colors.filter((c) => +c.id === +this.activeColor$.value.id)[0],\n    );\n    fabric.Image.fromURL(\n      this.image.imageUrl,\n      (img: any): void => {\n        if (selectedImage.id !== this.image.id) {\n          return;\n        }\n        img.resizeFilter = new fabric.Image.filters.Resize({\n          scaleX: this.canvas.width / img.width,\n          scaleY: this.canvas.height / img.height,\n          resizeType: 'sliceHack',\n        });\n        img.applyResizeFilters();\n\n        const canvasProperties = this.canvasProperties$.value;\n\n        this.canvas.setBackgroundImage(\n          img,\n          this.canvas.requestRenderAll.bind(this.canvas),\n          {\n            scaleX: this.canvas.width / img.width,\n            scaleY: this.canvas.height / img.height,\n          },\n        );\n\n        this.canvasWithTransparentObjects.scaleX =\n          this.canvas.width / img.width;\n        this.canvasWithTransparentObjects.scaleY =\n          this.canvas.height / img.height;\n\n        this.canvas.setDimensions(canvasProperties);\n        this.canvasWithTransparentObjects.setDimensions(canvasProperties);\n\n        if (this.devEnvironment) {\n          this.debugCanvas.setDimensions(canvasProperties);\n        }\n\n        this.onResize();\n        this.addEditingBox();\n        this.addVisibleEditingBox();\n        this.canvas.requestRenderAll();\n\n        if (this.image.objects) {\n          // When loading an existing design via `image.objects` (edit mode),\n          // show the same canvas overlay loader as in \"Dodaj dizajn\".\n          this.startCanvasLoading();\n          this.loaderService?.show();\n\n          this.canvas.on('after:render', () => {\n            // Ensure loader is turned off after the first render with objects.\n            this.objectsLoaded.emit(true);\n            this.loaderService?.hide();\n            this.stopCanvasLoading();\n            this.canvas.off('after:render');\n          });\n\n          this.image.objects.forEach((o: any) => {\n            if (o.id === 'VERTICAL-LINE' || o.id === 'HORIZONTAL-LINE') {\n              return;\n            }\n\n            o.left = (o.left * this.canvasProperties$.value.width) / o.canvasX;\n            o.top = (o.top * this.canvasProperties$.value.height) / o.canvasY;\n            o.scaleY =\n              (o.scaleY * this.canvasProperties$.value.height) / o.canvasY;\n            o.scaleX =\n              (o.scaleX * this.canvasProperties$.value.height) / o.canvasX;\n            o.canvasX = this.canvasProperties$.value.width;\n            o.canvasY = this.canvasProperties$.value.height;\n\n            const clone = fabric.util.object.clone(o).set({\n              canvas: this.canvasWithTransparentObjects,\n              hasBorders: false,\n              hasControls: false,\n            });\n            this.canvasWithTransparentObjects.add(clone);\n            this.canvas.add(o);\n          });\n        } else {\n          if (this.objects && this.objects.length > 0) {\n            this.objects.forEach((o) => (o.existing = true));\n\n            this.loadedObjects = new BehaviorSubject<any>([]);\n            this.loadedObjects$ = this.loadedObjects.asObservable();\n            this.canvas.on('after:render', (event: any) => {\n              if (this.areObjectsLoaded) {\n                this.objectsLoaded.emit(true);\n                this.areObjectsLoaded = false;\n                this.loaderService?.hide();\n                this.stopCanvasLoading();\n                this.canvas.off('after:render');\n              }\n            });\n            this.subs.add(\n              this.loadedObjects$\n                .pipe(skip(this.objects.length), take(1))\n                .subscribe((objects) => {\n                  this.loadingObjects = true;\n\n                  objects = objects.sort((a: any, b: any) =>\n                    a.index > b.index ? 1 : -1,\n                  );\n                  objects.forEach((o: any) => {\n                    const retinaScalling = this.canvas.getRetinaScaling();\n                    o.clipTo = (ctx: any): void => {\n                      ctx.save();\n                      ctx.setTransform(\n                        retinaScalling,\n                        0,\n                        0,\n                        retinaScalling,\n                        0,\n                        0,\n                      );\n\n                      this.rect.render(ctx);\n                      ctx.restore();\n                    };\n\n                    this.canvas.add(o);\n                    const clone = fabric.util.object.clone(o).set({\n                      canvas: this.canvasWithTransparentObjects,\n                      hasBorders: false,\n                      hasControls: false,\n                    });\n\n                    this.canvasWithTransparentObjects.add(clone);\n                  });\n\n                  this.areObjectsLoaded = true;\n\n                  this.canvasWithTransparentObjects.requestRenderAll();\n                  this.canvas.requestRenderAll();\n\n                  this.onCanvasChanged(false);\n                  this.loadingObjects = false;\n                }),\n            );\n            this.areObjectsLoaded = false;\n            this.loaderService?.show();\n            this.startCanvasLoading();\n            this.objects.forEach((o: any) => {\n              if (o.objectItem.objectImageUrl) {\n                this.addExistingPhoto(o);\n              } else {\n                this.addExistingText(o);\n              }\n            });\n          } else {\n            this.objectsLoaded.emit(true);\n          }\n        }\n\n        this.onCanvasChanged(false);\n        this.setEventHandlers();\n      },\n      {\n        crossOrigin: 'anonymous',\n      },\n    );\n  }\n\n  resizeCanvas(width: number, height: number): void {\n    if (!this.canvas.backgroundImage) {\n      return;\n    }\n    const oldScaleX = this.canvas.backgroundImage.scaleX;\n    const oldScaleY = this.canvas.backgroundImage.scaleY;\n    this.canvas.backgroundImage.scaleX =\n      width / this.canvas.backgroundImage.width;\n    this.canvas.backgroundImage.scaleY =\n      height / this.canvas.backgroundImage.height;\n    const objects = this.canvas.getObjects();\n    const objectsWithoutBackground =\n      this.canvasWithTransparentObjects.getObjects();\n    this.canvas.setDimensions({ width: width, height: height });\n    this.canvasWithTransparentObjects.setDimensions({\n      width: width,\n      height: height,\n    });\n\n    if (this.devEnvironment) {\n      this.debugCanvas.setDimensions({\n        width: width,\n        height: height,\n      });\n    }\n\n    objects.forEach((o: any) => {\n      o.left *= this.canvas.backgroundImage.scaleX / oldScaleX;\n      o.top *= this.canvas.backgroundImage.scaleY / oldScaleY;\n      o.scaleX *= this.canvas.backgroundImage.scaleX / oldScaleX;\n      o.scaleY *= this.canvas.backgroundImage.scaleY / oldScaleY;\n      o.canvasX = width;\n      o.canvasY = height;\n      if (o.id === 'DEFAULT') {\n        o.middleX = Math.round(o.left + (o.width * o.scaleX) / 2);\n        o.middleY = Math.round(o.top + (o.height * o.scaleY) / 2);\n        this.rect = o;\n      }\n      o.setCoords();\n    });\n\n    objectsWithoutBackground.forEach((o: any) => {\n      o.left *= this.canvas.backgroundImage.scaleX / oldScaleX;\n      o.top *= this.canvas.backgroundImage.scaleY / oldScaleY;\n      o.scaleX *= this.canvas.backgroundImage.scaleX / oldScaleX;\n      o.scaleY *= this.canvas.backgroundImage.scaleY / oldScaleY;\n      o.canvasX = width;\n      o.canvasY = height;\n      if (o.id === 'DEFAULT') {\n        o.middleX = Math.round(o.left + (o.width * o.scaleX) / 2);\n        o.middleY = Math.round(o.top + (o.height * o.scaleY) / 2);\n      }\n      o.setCoords();\n    });\n\n    this.currentImageDPI$.next(this.calculateImageDPI());\n  }\n\n  onResize(): void {\n    this.canvasProperties$.next(this.setCanvasProperties());\n\n    const canvasProperties = this.canvasProperties$.value;\n\n    if (this.devEnvironment) {\n      this.debugCanvas.setDimensions(canvasProperties);\n    }\n\n    this.canvasWithTransparentObjects.setDimensions(canvasProperties);\n    this.canvas.setDimensions(canvasProperties);\n\n    this.resizeCanvas(\n      this.canvasProperties$.value.width,\n      this.canvasProperties$.value.width,\n    );\n  }\n\n  setEventHandlers(): void {\n    // this.canvas.on('after:render', (event) => {\n    //   console.log('Duka');\n    //   if (this.performanceCheckStarted) {\n    //     this.performanceChecker.push(performance.now());\n    //   }\n    // });\n    this.canvas.on('selection:created', (event: any) => {\n      const type: string = event.target.type;\n      this.activeObject = event.target;\n\n      if (type === 'image') {\n        const src = event.target.getSrc();\n        this.setSelected(true, true, false, src.startsWith('data:image/jpeg'));\n        this.currentImageDPI$.next(this.calculateImageDPI());\n      } else if (type === 'textbox') {\n        this.setSelected(true, false, true);\n      }\n\n      this.activeObjectOncanvasWithTransparentObjects =\n        this.canvasWithTransparentObjects\n          .getObjects()\n          .filter(\n            (o: any) => o.customObjectId === event.target.customObjectId,\n          )[0];\n      if (this.activeObjectOncanvasWithTransparentObjects) {\n        this.activeObjectOncanvasWithTransparentObjects.set({\n          ...this.activeObjectOncanvasWithTransparentObjects,\n          ...event.target,\n        });\n      }\n\n      this.canvas.bringToFront(event.target);\n      this.canvasWithTransparentObjects.setActiveObject(\n        this.activeObjectOncanvasWithTransparentObjects,\n      );\n      this.canvasWithTransparentObjects.bringToFront(\n        this.activeObjectOncanvasWithTransparentObjects,\n      );\n    });\n    this.canvas.on('selection:updated', (event: any) => {\n      const type: string = event.target.type;\n      this.activeObject = event.target;\n      if (type === 'image') {\n        const src = event.target.getSrc();\n        this.setSelected(true, true, false, src.startsWith('data:image/jpeg'));\n        this.currentImageDPI$.next(this.calculateImageDPI());\n      } else if (type === 'textbox') {\n        this.setSelected(true, false, true);\n      }\n\n      this.activeObjectOncanvasWithTransparentObjects =\n        this.canvasWithTransparentObjects\n          .getObjects()\n          .filter(\n            (o: any) => o.customObjectId === event.target.customObjectId,\n          )[0];\n      if (this.activeObjectOncanvasWithTransparentObjects) {\n        this.activeObjectOncanvasWithTransparentObjects.set({\n          ...this.activeObjectOncanvasWithTransparentObjects,\n          ...event.target,\n        });\n      }\n\n      this.canvas.bringToFront(event.target);\n      this.canvasWithTransparentObjects.setActiveObject(\n        this.activeObjectOncanvasWithTransparentObjects,\n      );\n      this.canvasWithTransparentObjects.bringToFront(\n        this.activeObjectOncanvasWithTransparentObjects,\n      );\n    });\n    this.canvas.on('selection:cleared', () => {\n      this.activeObject = null;\n      this.setSelected(false, false, false);\n      this.canvasWithTransparentObjects.discardActiveObject();\n      this.activeObjectOncanvasWithTransparentObjects = null;\n    });\n    this.canvas.on('object:modified', (event: any) => {\n      if (event.target !== null && event.target.id) {\n        return;\n      }\n      this.hideEditingBox();\n      this.removeVerticalLine();\n      this.removeHorizontalLine();\n    });\n\n    this.canvas.on('object:moving', (event: any) => {\n      this.showEditingBox();\n      this.resolveVerticalLine(event.target);\n      this.resolveHorizontalLine(event.target);\n\n      const updatingObject = this.canvasWithTransparentObjects\n        .getObjects()\n        .filter(\n          (o: any) => o.customObjectId === event.target.customObjectId,\n        )[0];\n      if (updatingObject) {\n        updatingObject.set({\n          ...updatingObject,\n          ...event.target,\n        });\n      }\n      this.onCanvasChanged(true);\n    });\n    this.canvas.on('object:rotating', (event: any) => {\n      this.showEditingBox();\n      this.resolveVerticalLine(event.target);\n      this.resolveHorizontalLine(event.target);\n\n      const updatingObject = this.canvasWithTransparentObjects\n        .getObjects()\n        .filter(\n          (o: any) => o.customObjectId === event.target.customObjectId,\n        )[0];\n      if (updatingObject) {\n        updatingObject.set({\n          ...updatingObject,\n          ...event.target,\n        });\n      }\n      this.onCanvasChanged(true);\n    });\n    this.canvas.on('object:scaling', (event: any) => {\n      this.showEditingBox();\n      this.currentImageDPI$.next(this.calculateImageDPI());\n      this.resolveVerticalLine(event.target);\n      this.resolveHorizontalLine(event.target);\n\n      const updatingObject = this.canvasWithTransparentObjects\n        .getObjects()\n        .filter(\n          (o: any) => o.customObjectId === event.target.customObjectId,\n        )[0];\n      if (updatingObject) {\n        updatingObject.set({\n          ...updatingObject,\n          ...event.target,\n        });\n      }\n      this.onCanvasChanged(true);\n    });\n    this.canvas.on('object:skewing', (event: any) => {\n      this.showEditingBox();\n      this.resolveVerticalLine(event.target);\n      this.resolveHorizontalLine(event.target);\n\n      const updatingObject = this.canvasWithTransparentObjects\n        .getObjects()\n        .filter(\n          (o: any) => o.customObjectId === event.target.customObjectId,\n        )[0];\n      if (updatingObject) {\n        updatingObject.set({\n          ...updatingObject,\n          ...event.target,\n        });\n      }\n\n      this.onCanvasChanged(true);\n    });\n    this.canvas.on('object:removed', (event: any) => {\n      if (event.target !== null && event.target.id) {\n        return;\n      }\n      if (!this.unloadingObjects) {\n        const removedObject = this.canvasWithTransparentObjects\n          .getObjects()\n          .filter(\n            (o: any) => o.customObjectId === event.target.customObjectId,\n          )[0];\n        this.canvasWithTransparentObjects.remove(removedObject);\n\n        this.canvasWithTransparentObjects.requestRenderAll();\n        this.canvas.requestRenderAll();\n\n        this.onCanvasChanged(true);\n      }\n    });\n    this.canvas.on('object:added', (event: any) => {\n      if (event.target !== null && event.target.id) {\n        return;\n      }\n      if (!this.loadingObjects) {\n        this.canvasWithTransparentObjects.requestRenderAll();\n        this.canvas.requestRenderAll();\n\n        this.onCanvasChanged(true);\n      }\n    });\n  }\n\n  onCanvasChanged(changed: boolean): void {\n    this.imageEditorService?.calculateVisibleEdditingBoxPaintSubject.next({});\n    if (changed && !this.isCanvasChanged) {\n      this.canvasChanged.emit(true);\n      this.isCanvasChanged = true;\n    }\n  }\n\n  changeColor(color: Color): void {\n    this.activeColor$.next(color);\n\n    this.image.imageUrl = this.colors.find(\n      (ci) => ci.id === color.id,\n    ).canvasImage;\n  }\n\n  changeColorAndBackground(color: Color): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    this.changeColor(color);\n    const selectedImage = { ...this.image };\n    fabric.Image.fromURL(\n      this.image.imageUrl,\n      (img: any) => {\n        if (selectedImage.id !== this.image.id) {\n          return;\n        }\n        img.resizeFilter = new fabric.Image.filters.Resize({\n          scaleX: this.canvas.width / img.width,\n          scaleY: this.canvas.height / img.height,\n          resizeType: 'sliceHack',\n        });\n        img.applyResizeFilters();\n        this.canvas.setBackgroundImage(\n          img,\n          this.canvas.requestRenderAll.bind(this.canvas),\n          {\n            scaleX: this.canvas.width / img.width,\n            scaleY: this.canvas.height / img.height,\n          },\n        );\n\n        this.canvasWithTransparentObjects.scaleX =\n          this.canvas.width / img.width;\n        this.canvasWithTransparentObjects.scaleY =\n          this.canvas.height / img.height;\n      },\n      {\n        crossOrigin: 'anonymous',\n      },\n    );\n  }\n\n  getObjects(): any {\n    return this.canvas\n      .getObjects()\n      .filter(\n        (o: any) =>\n          o.id !== 'DEFAULT' &&\n          o.id !== 'VISIBLE-DEFAULT' &&\n          o.id !== 'VERTICAL-LINE' &&\n          o.id !== 'HORIZONTAL-LINE',\n      )\n      .map((o: any, index: number) => {\n        o.index = index;\n        return o;\n      });\n  }\n\n  getObjectsWithoutIndex(): [] {\n    return this.canvas\n      .getObjects()\n      .filter(\n        (o: any) =>\n          o.id !== 'DEFAULT' &&\n          o.id !== 'VISIBLE-DEFAULT' &&\n          o.id !== 'VERTICAL-LINE' &&\n          o.id !== 'HORIZONTAL-LINE',\n      );\n  }\n\n  setCanvasProperties(): any {\n    switch (this.screen) {\n      case 'desktop': {\n        const height =\n          +this.canvasWrapper.nativeElement.parentElement.clientHeight;\n        const width =\n          +this.canvasWrapper.nativeElement.parentElement.clientWidth;\n        if (width) {\n          return {\n            height: Math.min(height, width),\n            width: Math.min(height, width),\n          };\n        } else {\n          return {\n            height: height,\n            width: height,\n          };\n        }\n      }\n      case 'mobile': {\n        return {\n          height: this.canvasWrapper.nativeElement.clientWidth,\n          width: this.canvasWrapper.nativeElement.clientWidth,\n        };\n      }\n    }\n  }\n\n  addText(): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    this.canvas.discardActiveObject();\n    const textbox = new fabric.Textbox('', {\n      left: this.rect.left + 20,\n      top: this.rect.top + 20,\n      scaleX: this.canvasProperties$.value.width / this.NODE_CANVAS_SIZE,\n      scaleY: this.canvasProperties$.value.height / this.NODE_CANVAS_SIZE,\n      editingBorderColor: '#f3364c',\n      canvasX: this.canvasProperties$.value.width,\n      canvasY: this.canvasProperties$.value.height,\n      height: 1000,\n      width: 800,\n      fontSize:\n        Math.floor(\n          (2 * this.NODE_CANVAS_SIZE) / this.canvasProperties$.value.height,\n        ) * 10,\n      text: 'Unesi tekst',\n      textAlign: 'center',\n      selectionStart: 0,\n      opacity: 1,\n      fill: '#000000',\n      lineHeight: 1.16,\n      charSpacing: 28,\n      fontWeight: '',\n      fontStyle: '',\n      fontFamily: 'Times New Roman',\n      underline: false,\n      overline: false,\n      linethrough: false,\n      customObjectId: Math.floor(Math.random() * 1_000_000),\n    });\n    textbox.selectionEnd = textbox.text.length;\n    const retinaScalling = this.canvas.getRetinaScaling();\n    textbox.clipTo = (ctx: any): void => {\n      ctx.save();\n      ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\n      this.rect.render(ctx);\n      ctx.restore();\n    };\n\n    this.canvas.add(textbox).setActiveObject(textbox);\n\n    textbox.enterEditing();\n    this.loadFont();\n    this.setSelected(true, false, true);\n  }\n\n  addExistingText(text: any): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    const textbox = new fabric.Textbox('', {\n      left:\n        (text.left * this.canvasProperties$.value.width) /\n        this.NODE_CANVAS_SIZE,\n      top:\n        (text.top * this.canvasProperties$.value.height) /\n        this.NODE_CANVAS_SIZE,\n      scaleX:\n        (text.scaleX * this.canvasProperties$.value.width) /\n        this.NODE_CANVAS_SIZE,\n      scaleY:\n        (text.scaleY * this.canvasProperties$.value.height) /\n        this.NODE_CANVAS_SIZE,\n      editingBorderColor: '#f3364c',\n      canvasX: this.canvasProperties$.value.width,\n      canvasY: this.canvasProperties$.value.height,\n      height: text.height,\n      width: text.width,\n      angle: text.angle,\n      fontSize: text.object_item.font_size,\n      text: text.object_item.value,\n      textAlign: text.object_item.text_alignment\n        ? text.object_item.text_alignment\n        : '',\n      opacity: text.object_item.opacity,\n      fill: text.object_item.fill,\n      lineHeight: text.object_item.line_height,\n      charSpacing: text.object_item.char_spacing,\n      fontWeight: text.object_item.font_weight\n        ? text.object_item.font_weight\n        : '',\n      fontStyle: text.object_item.font_style ? text.object_item.font_style : '',\n      fontFamily: text.object_item.font ? text.object_item.font : '',\n      underline: text.object_item.underline,\n      overline: text.object_item.overline,\n      linethrough: text.object_item.line_through,\n      index: text.index,\n    });\n\n    this.loadedObjects.next([...this.loadedObjects.getValue(), textbox]);\n  }\n\n  processAndAddImage(\n    image: any,\n    isImageFetched: boolean,\n    uploadedImage = null,\n  ) {\n    if (!this.canUseCanvas || !fabric) {\n      this.loaderService?.hide();\n      this.stopCanvasLoading();\n      return;\n    }\n\n    if (!this.isBrowser || typeof FileReader === 'undefined') {\n      this.loaderService?.hide();\n      this.stopCanvasLoading();\n      return;\n    }\n\n    const reader = new FileReader();\n    reader.onerror = (): void => {\n      this.loaderService?.hide();\n      this.stopCanvasLoading();\n    };\n    reader.onload = (event: any): void => {\n      const originalImg = new Image();\n      originalImg.src = event.target.result;\n\n      const CANVAS_SIZE = 4096;\n\n      originalImg.onerror = (): void => {\n        this.loaderService?.hide();\n        this.stopCanvasLoading();\n      };\n      originalImg.onload = (): void => {\n        let url;\n        if (Math.max(originalImg.width, originalImg.height) > CANVAS_SIZE) {\n          //create canvas\n          const canvas = document.createElement('canvas');\n          //scale image\n          if (originalImg.height >= originalImg.width) {\n            canvas.height = CANVAS_SIZE;\n            canvas.width =\n              (CANVAS_SIZE / originalImg.height) * originalImg.width;\n          } else {\n            canvas.width = CANVAS_SIZE;\n            canvas.height =\n              (CANVAS_SIZE / originalImg.width) * originalImg.height;\n          }\n          //draw to canvas\n          const context = canvas.getContext('2d');\n\n          if (context) {\n            context.drawImage(originalImg, 0, 0, canvas.width, canvas.height);\n            //assign new image url\n            url = context.canvas.toDataURL();\n          }\n        } else {\n          url = URL.createObjectURL(image);\n        }\n\n        fabric.Image.fromURL(\n          url,\n          (img: any) => {\n            try {\n              this.loaderService?.hide();\n\n              const landscape = img.width >= img.height;\n              const scale = landscape\n                ? img.width > this.rect.width * this.rect.scaleX\n                  ? (((this.rect.width * this.rect.scaleX) / img.width) * 3) / 4\n                  : Math.min(\n                      0.25,\n                      (((this.rect.width * this.rect.scaleX) / img.width) * 3) /\n                        4,\n                    )\n                : img.height > this.rect.height * this.rect.scaleY\n                  ? (((this.rect.height * this.rect.scaleY) / img.height) * 3) /\n                    4\n                  : Math.min(\n                      0.25,\n                      (((this.rect.height * this.rect.scaleY) / img.height) *\n                        3) /\n                        4,\n                    );\n              const oImg = img.set({\n                left: this.rect.left,\n                top: this.rect.top,\n                transparentCorners: false,\n                cornerColor: 'black',\n                canvasX: this.canvasProperties$.value.width,\n                canvasY: this.canvasProperties$.value.height,\n                image: image,\n                originalUrl: uploadedImage?.url ?? image.url,\n                customObjectId: Math.floor(Math.random() * 1_000_000),\n                _meta: uploadedImage?.['_meta'] ?? image['_meta'],\n              });\n\n              const retinaScalling = this.canvas.getRetinaScaling();\n              oImg.clipTo = (ctx: any): void => {\n                ctx.save();\n                ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\n                this.rect.render(ctx);\n                ctx.restore();\n              };\n              oImg.scale(scale);\n              oImg.resizeFilter = new fabric.Image.filters.Resize({\n                scaleX: scale,\n                scaleY: scale,\n                resizeType: 'sliceHack',\n              });\n\n              const clone = fabric.util.object.clone(oImg).set({\n                canvas: this.canvasWithTransparentObjects,\n                hasBorders: false,\n                hasControls: false,\n              });\n\n              oImg.applyResizeFilters();\n              clone.applyResizeFilters();\n\n              this.canvasWithTransparentObjects\n                .add(clone)\n                .setActiveObject(clone);\n\n              this.canvas.add(oImg).setActiveObject(oImg);\n            } finally {\n              this.stopCanvasLoading();\n            }\n          },\n          {\n            crossOrigin: 'anonymous',\n          },\n        );\n      };\n    };\n    reader.readAsDataURL(isImageFetched ? image : new Blob([image]));\n  }\n\n  uploadPhoto(uploadedImage: BrendlyImage | any): void {\n    this.startCanvasLoading();\n    this.canvas.discardActiveObject();\n\n    this.showEditingBox();\n\n    this.loaderService?.show();\n\n    uploadedImage['_meta'] = this.setObjectMeta(uploadedImage);\n\n    if (!uploadedImage.url) {\n      this.processAndAddImage(uploadedImage, false);\n    } else {\n      this.http\n        .get(uploadedImage.url, {\n          headers: new HttpHeaders().set(\n            'SKIP_INTERCEPTORS',\n            'SKIP_INTERCEPTORS',\n          ),\n          responseType: 'blob',\n          params: {\n            updated: this.moment.format('YYYY-MM-DD-HH-mm-ss'),\n          },\n        })\n        .subscribe({\n          next: (fetchedImage: Blob) => {\n            try {\n              fetchedImage['_meta'] = this.setObjectMeta(uploadedImage);\n              this.processAndAddImage(fetchedImage, true, uploadedImage);\n            } catch (err) {\n              console.error('Greška u processAndAddImage:', err);\n            }\n          },\n          error: (err) => {\n            console.error('Fetch greška:', err);\n\n            this.loaderService?.hide();\n            this.stopCanvasLoading();\n          },\n        });\n    }\n  }\n\n  addExistingPhoto(image: any): void {\n    if (!this.canUseCanvas || !fabric || !this.isBrowser) {\n      return;\n    }\n\n    this.http\n      .get(image.objectItem.objectImageUrl, {\n        responseType: 'blob',\n        params: {\n          updated: this.moment.format('YYYY-MM-DD-HH-mm-ss'),\n        },\n        headers: new HttpHeaders().set('SkipRouteUrl', 'SkipRouteUrl'),\n      })\n      .subscribe((res) => {\n        const reader = new FileReader();\n        reader.onload = (event: any): void => {\n          const originalImg = new Image();\n          originalImg.src = event.target.result;\n\n          const CANVAS_SIZE = 4096;\n\n          originalImg.onload = (): void => {\n            let url;\n            if (Math.max(originalImg.width, originalImg.height) > CANVAS_SIZE) {\n              //create canvas\n              const canvas = document.createElement('canvas');\n              //scale image\n              if (originalImg.height >= originalImg.width) {\n                canvas.height = CANVAS_SIZE;\n                canvas.width =\n                  (CANVAS_SIZE / originalImg.height) * originalImg.width;\n              } else {\n                canvas.width = CANVAS_SIZE;\n                canvas.height =\n                  (CANVAS_SIZE / originalImg.width) * originalImg.height;\n              }\n              //draw to canvas\n              const context = canvas.getContext('2d');\n\n              if (context) {\n                context.drawImage(\n                  originalImg,\n                  0,\n                  0,\n                  canvas.width,\n                  canvas.height,\n                );\n                //assign new image url\n                url = context.canvas.toDataURL();\n              }\n            } else {\n              url = URL.createObjectURL(res);\n            }\n\n            fabric.Image.fromURL(\n              url,\n              (img: any) => {\n                const oImg = img.set({\n                  left:\n                    (image.left * this.canvasProperties$.value.width) /\n                    this.NODE_CANVAS_SIZE,\n                  top:\n                    (image.top * this.canvasProperties$.value.height) /\n                    this.NODE_CANVAS_SIZE,\n                  scaleX:\n                    (image.scaleX * this.canvasProperties$.value.width) /\n                    this.NODE_CANVAS_SIZE,\n                  scaleY:\n                    (image.scaleY * this.canvasProperties$.value.height) /\n                    this.NODE_CANVAS_SIZE,\n                  height: image.height,\n                  width: image.width,\n                  angle: image.angle,\n                  transparentCorners: false,\n                  cornerColor: 'black',\n                  index: image.index,\n                  canvasX: this.canvasProperties$.value.width,\n                  canvasY: this.canvasProperties$.value.height,\n                  originalUrl: image.objectItem.objectImageUrl,\n                  existing: image.existing,\n                  customObjectId: Math.floor(Math.random() * 1_000_000),\n                  _meta: image.objectItem['_meta'],\n                });\n                for (const f of JSON.parse(image.objectItem.filters)) {\n                  if (!f) {\n                    continue;\n                  }\n                  if (f.type !== 'Convolute') {\n                    oImg.filters[this.filterIndexMap[f.type]] =\n                      this.filterMap[this.filterIndexMap[f.type]];\n                  } else {\n                    if (f.matrix[0] === 0) {\n                      oImg.filters[this.filterIndexMap['Convolute-Sharpen']] =\n                        this.filterMap[\n                          this.filterIndexMap['Convolute-Sharpen']\n                        ];\n                    } else {\n                      oImg.filters[this.filterIndexMap['Convolute-Emboss']] =\n                        this.filterMap[this.filterIndexMap['Convolute-Emboss']];\n                    }\n                  }\n                }\n\n                oImg.applyFilters();\n                oImg.resizeFilter = new fabric.Image.filters.Resize({\n                  scaleX: oImg.scaleX,\n                  scaleY: oImg.scaleY,\n                  resizeType: 'sliceHack',\n                });\n\n                oImg.applyResizeFilters();\n\n                this.loadedObjects.next([\n                  ...this.loadedObjects.getValue(),\n                  oImg,\n                ]);\n              },\n              {\n                crossOrigin: 'anonymous',\n              },\n            );\n          };\n        };\n        reader.readAsDataURL(res);\n      });\n  }\n\n  // #region verticalLine and centering\n  addVerticalLine(): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    const line = new fabric.Line(\n      [\n        this.rect.middleX,\n        0,\n        this.rect.middleX,\n        this.rect.top + this.rect.height / this.rect.scaleY,\n      ],\n      {\n        stroke: '#47bcc7',\n        strokeWidth: 10,\n        strokeDashArray: [10, 10],\n        selectable: false,\n        evented: false,\n        id: 'VERTICAL-LINE',\n        scaleX: this.canvasProperties$.value.width / this.NODE_CANVAS_SIZE,\n        scaleY: this.canvasProperties$.value.height / this.NODE_CANVAS_SIZE,\n      },\n    );\n    const retinaScalling = this.canvas.getRetinaScaling();\n    line.clipTo = (ctx: any): void => {\n      ctx.save();\n      ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\n      this.rect.render(ctx);\n      ctx.restore();\n    };\n    this.verticalLineVisible = true;\n\n    this.canvas.add(line);\n  }\n\n  removeVerticalLine(): void {\n    const objects = this.canvas.getObjects();\n    for (let i = 0; i < objects.length; i++) {\n      if (objects[i].id === 'VERTICAL-LINE') {\n        this.canvas.remove(objects[i]);\n        break;\n      }\n    }\n    this.verticalLineVisible = false;\n  }\n\n  resolveVerticalLine(object: any): void {\n    const offset =\n      (object.width *\n        object.scaleX *\n        Math.cos((object.angle * 2 * Math.PI) / 360)) /\n        2 -\n      (object.height *\n        object.scaleY *\n        Math.sin((object.angle * 2 * Math.PI) / 360)) /\n        2;\n    const middle = Math.round(object.left + offset);\n    const epsilonNeighborhood = 10;\n    if (\n      middle >= this.rect.middleX - epsilonNeighborhood &&\n      middle <= this.rect.middleX + epsilonNeighborhood\n    ) {\n      this.centerObject(object, offset, 'vertical');\n      if (!this.verticalLineVisible) {\n        this.addVerticalLine();\n      }\n    } else {\n      if (this.verticalLineVisible) {\n        this.removeVerticalLine();\n      }\n    }\n  }\n\n  addHorizontalLine(): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    const line = new fabric.Line(\n      [\n        0,\n        this.rect.middleY,\n        this.rect.left + this.rect.width / this.rect.scaleX,\n        this.rect.middleY,\n      ],\n      {\n        stroke: '#47bcc7',\n        strokeWidth: 10,\n        strokeDashArray: [10, 10],\n        selectable: false,\n        evented: false,\n        id: 'HORIZONTAL-LINE',\n        scaleX: this.canvasProperties$.value.width / this.NODE_CANVAS_SIZE,\n        scaleY: this.canvasProperties$.value.height / this.NODE_CANVAS_SIZE,\n      },\n    );\n    const retinaScalling = this.canvas.getRetinaScaling();\n    line.clipTo = (ctx: any): void => {\n      ctx.save();\n      ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\n      this.rect.render(ctx);\n      ctx.restore();\n    };\n    this.horizontalLineVisible = true;\n\n    this.canvas.add(line);\n  }\n\n  removeHorizontalLine(): void {\n    const objects = this.canvas.getObjects();\n    for (let i = 0; i < objects.length; i++) {\n      if (objects[i].id === 'HORIZONTAL-LINE') {\n        this.canvas.remove(objects[i]);\n        break;\n      }\n    }\n    this.horizontalLineVisible = false;\n  }\n\n  resolveHorizontalLine(object: any): void {\n    const offset =\n      (object.height *\n        object.scaleY *\n        Math.cos((object.angle * 2 * Math.PI) / 360)) /\n        2 -\n      (object.width *\n        object.scaleX *\n        Math.sin((object.angle * 2 * Math.PI) / 360)) /\n        2;\n    const middle = Math.round(object.top + offset);\n    const epsilonNeighborhood = 10;\n    if (\n      middle >= this.rect.middleY - epsilonNeighborhood &&\n      middle <= this.rect.middleY + epsilonNeighborhood\n    ) {\n      this.centerObject(object, offset, 'horizontal');\n      if (!this.horizontalLineVisible) {\n        this.addHorizontalLine();\n      }\n    } else {\n      if (this.horizontalLineVisible) {\n        this.removeHorizontalLine();\n      }\n    }\n  }\n\n  centerObject(\n    object: any,\n    offset: number,\n    type: 'horizontal' | 'vertical',\n  ): void {\n    if (type === 'vertical') {\n      object.set('left', this.rect.middleX - offset);\n    } else {\n      object.set('top', this.rect.middleY - offset);\n    }\n    object.setCoords();\n  }\n  // #endregion\n  // #region editingBox\n  addEditingBox(): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    // fabric.loadSVGFromURL('assets/spomenik.svg', (objects, options) => {\n    //   this.rect = new fabric.Path(objects[0].d, {});\n    //   // this.rect = fabric.util.groupSVGElements(objects, options);\n\n    //   const x =\n    //     (this.image.width * this.canvasProperties$.value.width) /\n    //     this.NODE_CANVAS_SIZE;\n    //   const y =\n    //     (this.image.height * this.canvasProperties$.value.height) /\n    //     this.NODE_CANVAS_SIZE;\n\n    //   (this.rect.left =\n    //     (this.image.left * this.canvasProperties$.value.width) /\n    //       this.NODE_CANVAS_SIZE +\n    //     (x * (1 - this.image.scaleX)) / 2),\n    //     (this.rect.top =\n    //       (this.image.top * this.canvasProperties$.value.width) /\n    //         this.NODE_CANVAS_SIZE +\n    //       (y * (1 - this.image.scaleY)) / 2),\n    //     (this.rect.opacity = 1);\n    //   this.rect.scaleX =\n    //     (this.canvasProperties$.value.width / this.NODE_CANVAS_SIZE) *\n    //     this.image.scaleX;\n    //   this.rect.scaleY =\n    //     (this.canvasProperties$.value.height / this.NODE_CANVAS_SIZE) *\n    //     this.image.scaleY;\n    //   this.rect.fill = this.backgroundColor;\n    //   this.rect.backgroundColor = this.backgroundColor;\n    //   this.rect.width = this.image.width;\n    //   this.rect.height = this.image.height;\n    //   // this.rect.selectable = false;\n    //   this.rect.id = 'DEFAULT';\n    //   this.rect.customObjectId = 'DEFAULT';\n    //   this.rect.preserveObjectStacking = true;\n    //   this.rect.objectCaching = false;\n    //   this.rect.middleX = Math.round(\n    //     this.rect.left + (this.rect.width * this.rect.scaleX) / 2,\n    //   );\n    //   this.rect.middleY = Math.round(\n    //     this.rect.top + (this.rect.height * this.rect.scaleY) / 2,\n    //   );\n\n    //   const retinaScalling = this.canvas.getRetinaScaling();\n    //   this.rect.clipTo = (ctx): void => {\n    //     ctx.save();\n    //     ctx.setTransform(retinaScalling, 0, 0, retinaScalling, 0, 0);\n    //     ctx.restore();\n    //   };\n\n    //   const clone = fabric.util.object.clone(this.rect).set({\n    //     opacity: 0,\n    //     canvas: this.canvasWithTransparentObjects,\n    //   });\n\n    //   this.canvasWithTransparentObjects.add(clone);\n    //   this.canvasWithTransparentObjects.sendToBack(clone);\n\n    //   this.canvas.add(this.rect);\n    //   this.canvas.sendToBack(this.rect);\n    // });\n\n    const x =\n      (this.editingBox.width * this.canvasProperties$.value.width) /\n      this.NODE_CANVAS_SIZE;\n    const y =\n      (this.editingBox.height * this.canvasProperties$.value.height) /\n      this.NODE_CANVAS_SIZE;\n    this.rect = new fabric.Rect({\n      left:\n        (this.editingBox.left * this.canvasProperties$.value.width) /\n          this.NODE_CANVAS_SIZE +\n        (x * (1 - this.editingBox.scaleX)) / 2,\n      top:\n        (this.editingBox.top * this.canvasProperties$.value.width) /\n          this.NODE_CANVAS_SIZE +\n        (y * (1 - this.editingBox.scaleY)) / 2,\n      opacity: 1,\n      scaleX:\n        (this.canvasProperties$.value.width / this.NODE_CANVAS_SIZE) *\n        this.editingBox.scaleX,\n      scaleY:\n        (this.canvasProperties$.value.height / this.NODE_CANVAS_SIZE) *\n        this.editingBox.scaleY,\n      fill: this.backgroundColor,\n      backgroundColor: this.backgroundColor,\n      width: this.editingBox.width,\n      height: this.editingBox.height,\n      selectable: false,\n      id: 'DEFAULT',\n      customObjectId: 'DEFAULT',\n      preserveObjectStacking: true,\n      objectCaching: false,\n      middleX: 0,\n      middleY: 0,\n    });\n    this.rect.middleX = Math.round(\n      this.rect.left + (this.rect.width * this.rect.scaleX) / 2,\n    );\n    this.rect.middleY = Math.round(\n      this.rect.top + (this.rect.height * this.rect.scaleY) / 2,\n    );\n\n    const clone = fabric.util.object.clone(this.rect).set({\n      opacity: 0,\n      canvas: this.canvasWithTransparentObjects,\n    });\n\n    this.canvasWithTransparentObjects.add(clone);\n    this.canvasWithTransparentObjects.sendToBack(clone);\n\n    this.canvas.add(this.rect);\n    this.canvas.sendToBack(this.rect);\n  }\n\n  addVisibleEditingBox(): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    const x =\n      (this.editingBox.width * this.canvasProperties$.value.width) /\n      this.NODE_CANVAS_SIZE;\n    const y =\n      (this.editingBox.height * this.canvasProperties$.value.height) /\n      this.NODE_CANVAS_SIZE;\n    this.visibleEditingBox = new fabric.Rect({\n      left:\n        (this.editingBox.left * this.canvasProperties$.value.width) /\n          this.NODE_CANVAS_SIZE +\n        (x * (1 - this.editingBox.scaleX)) / 2,\n      top:\n        (this.editingBox.top * this.canvasProperties$.value.width) /\n          this.NODE_CANVAS_SIZE +\n        (y * (1 - this.editingBox.scaleY)) / 2,\n      stroke: '#47bcc7',\n      strokeWidth: 0,\n      strokeDashArray: [10, 10],\n      opacity: 1,\n      scaleX:\n        (this.canvasProperties$.value.width / this.NODE_CANVAS_SIZE) *\n        this.editingBox.scaleX,\n      scaleY:\n        (this.canvasProperties$.value.height / this.NODE_CANVAS_SIZE) *\n        this.editingBox.scaleY,\n      fill: this.backgroundColor,\n      backgroundColor: this.backgroundColor,\n      width: this.editingBox.width,\n      height: this.editingBox.height,\n      selectable: false,\n      id: 'VISIBLE-DEFAULT',\n      customObjectId: 'VISIBLE-DEFAULT',\n      preserveObjectStacking: true,\n      objectCaching: false,\n      middleX: 0,\n      middleY: 0,\n    });\n\n    this.cdr.detectChanges();\n\n    // fabric.loadSVGFromURL('assets/spomenik.svg', (objects, options) => {\n    //   this.visibleEditingBox = new fabric.Path(objects[0].d, {});\n    //   // this.visibleEditingBox = fabric.util.groupSVGElements(objects, options);\n\n    //   (this.visibleEditingBox.left =\n    //     (this.image.left * this.canvasProperties$.value.width) /\n    //       this.NODE_CANVAS_SIZE +\n    //     (x * (1 - this.image.scaleX)) / 2),\n    //     (this.visibleEditingBox.top =\n    //       (this.image.top * this.canvasProperties$.value.width) /\n    //         this.NODE_CANVAS_SIZE +\n    //       (y * (1 - this.image.scaleY)) / 2),\n    //     (this.visibleEditingBox.opacity = 1);\n\n    //   this.visibleEditingBox.scaleX =\n    //     (this.canvasProperties$.value.width / this.NODE_CANVAS_SIZE) *\n    //     this.image.scaleX;\n\n    //   (this.visibleEditingBox.scaleY =\n    //     (this.canvasProperties$.value.height / this.NODE_CANVAS_SIZE) *\n    //     this.image.scaleY),\n    //     (this.visibleEditingBox.fill = this.backgroundColor),\n    //     (this.visibleEditingBox.backgroundColor = this.backgroundColor),\n    //     (this.visibleEditingBox.width = this.image.width),\n    //     (this.visibleEditingBox.height = this.image.height),\n    //     // (this.visibleEditingBox.selectable = false),\n    //     (this.visibleEditingBox.id = 'VISIBLE-DEFAULT'),\n    //     (this.visibleEditingBox.customObjectId = 'VISIBLE-DEFAULT'),\n    //     (this.visibleEditingBox.preserveObjectStacking = true),\n    //     (this.visibleEditingBox.objectCaching = false),\n    //     (this.visibleEditingBox.middleX = Math.round(\n    //       this.visibleEditingBox.left +\n    //         (this.visibleEditingBox.width * this.visibleEditingBox.scaleX) / 2,\n    //     ));\n    //   this.visibleEditingBox.middleY = Math.round(\n    //     this.visibleEditingBox.top +\n    //       (this.visibleEditingBox.height * this.visibleEditingBox.scaleY) / 2,\n    //   );\n\n    //   this.canvas.add(this.visibleEditingBox);\n    //   this.canvas.sendToBack(this.visibleEditingBox);\n    // });\n\n    this.visibleEditingBox.middleX = Math.round(\n      this.visibleEditingBox.left +\n        (this.visibleEditingBox.width * this.visibleEditingBox.scaleX) / 2,\n    );\n    this.visibleEditingBox.middleY = Math.round(\n      this.visibleEditingBox.top +\n        (this.visibleEditingBox.height * this.visibleEditingBox.scaleY) / 2,\n    );\n\n    const clone = fabric.util.object.clone(this.visibleEditingBox).set({\n      canvas: this.canvasWithTransparentObjects,\n    });\n\n    this.canvasWithTransparentObjects.add(clone);\n    this.canvasWithTransparentObjects.sendToBack(clone);\n\n    this.canvas.add(this.visibleEditingBox);\n    this.canvas.sendToBack(this.visibleEditingBox);\n  }\n\n  showEditingBox(): void {\n    this.visibleEditingBox.fill = 'rgba(0,0,0,0.05)';\n    this.visibleEditingBox.strokeWidth = 1 / this.visibleEditingBox.scaleX;\n  }\n\n  hideEditingBox(): void {\n    this.visibleEditingBox.fill = 'transparent';\n    this.visibleEditingBox.strokeWidth = 0;\n  }\n\n  setBackgroundColor(): void {\n    this.image.backgroundColor = this.visibleEditingBox.backgroundColor;\n    this.editingBox.backgroundColor = this.visibleEditingBox.backgroundColor;\n    this.visibleEditingBox.fill = this.visibleEditingBox.backgroundColor;\n\n    const visibleEditingBoxOnCanvasWIthTransparentObjects =\n      this.canvasWithTransparentObjects\n        .getObjects()\n        .filter(\n          (o) => o.customObjectId === this.visibleEditingBox.customObjectId,\n        )[0];\n\n    visibleEditingBoxOnCanvasWIthTransparentObjects.backgroundColor =\n      this.visibleEditingBox.backgroundColor;\n    visibleEditingBoxOnCanvasWIthTransparentObjects.fill =\n      this.visibleEditingBox.backgroundColor;\n\n    this.canvasWithTransparentObjects.requestRenderAll();\n    this.canvas.requestRenderAll();\n    this.onCanvasChanged(true);\n  }\n  // #endregion\n  // #region filters and controls\n  setSelected(\n    selected: boolean,\n    imageSelected: boolean,\n    textSelected: boolean,\n    isImageJPG = false,\n  ): void {\n    this.imageSelected = imageSelected;\n    this.textSelected = textSelected;\n    this.isImageJPG = isImageJPG;\n    this.selected$.next(selected);\n  }\n\n  toggleFilter(checked: boolean, index: number): void {\n    if (checked) {\n      this.applyFilter(index, this.filterMap[index]);\n    } else {\n      this.applyFilter(index, false);\n    }\n  }\n\n  applyFilter(index: number, filter: any): void {\n    const object = this.canvas.getActiveObject();\n    object.filters[index] = filter;\n    object.applyFilters();\n  }\n\n  closeFilters(): void {\n    this.canvas.discardActiveObject();\n  }\n\n  defineFilters(): void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    this.filterMap[0] = new fabric.Image.filters.Grayscale();\n    this.filterIndexMap['Grayscale'] = 0;\n    this.filterMap[1] = new fabric.Image.filters.Invert();\n    this.filterIndexMap['Invert'] = 1;\n    this.filterMap[2] = new fabric.Image.filters.RemoveColor({\n      distance: '',\n      color: '',\n    });\n    this.filterIndexMap['RemoveColor'] = 2;\n    this.filterMap[3] = new fabric.Image.filters.Sepia();\n    this.filterIndexMap['Sepia'] = 3;\n    this.filterMap[4] = new fabric.Image.filters.Brownie();\n    this.filterIndexMap['Brownie'] = 4;\n    this.filterMap[5] = new fabric.Image.filters.Brightness({});\n    this.filterIndexMap['Brightness'] = 5;\n    this.filterMap[6] = new fabric.Image.filters.Contrast({\n      constrast: '',\n    });\n    this.filterIndexMap['Contrast'] = 6;\n    this.filterMap[7] = new fabric.Image.filters.Saturation({});\n    this.filterIndexMap['Saturation'] = 7;\n    this.filterMap[8] = new fabric.Image.filters.Noise({\n      noise: '',\n    });\n    this.filterIndexMap['Noise'] = 8;\n    this.filterMap[9] = new fabric.Image.filters.Vintage();\n    this.filterIndexMap['Vintage'] = 9;\n    this.filterMap[10] = new fabric.Image.filters.Pixelate({\n      blocksize: '',\n    });\n    this.filterIndexMap['Pixelate'] = 10;\n    this.filterMap[11] = new fabric.Image.filters.Blur({\n      value: '',\n    });\n    this.filterIndexMap['Blur'] = 11;\n    this.filterMap[12] = new fabric.Image.filters.Convolute({\n      matrix: [0, -1, 0, -1, 5, -1, 0, -1, 0],\n    });\n    this.filterIndexMap['Convolute-Sharpen'] = 12;\n    this.filterMap[13] = new fabric.Image.filters.Convolute({\n      matrix: [1, 1, 1, 1, 0.7, -1, -1, -1, -1],\n    });\n    this.filterIndexMap['Convolute-Emboss'] = 13;\n    this.filterMap[14] = new fabric.Image.filters.Technicolor();\n    this.filterIndexMap['Technicolor'] = 14;\n    this.filterMap[15] = new fabric.Image.filters.Polaroid();\n    this.filterIndexMap['Polaroid'] = 15;\n    this.filterMap[16] = new fabric.Image.filters.BlendColor({\n      color: '',\n      mode: '',\n      alpha: '',\n    });\n    this.filterIndexMap['BlendColor'] = 16;\n    this.filterMap[17] = new fabric.Image.filters.Gamma({\n      gamma: ['', '', ''],\n    });\n    this.filterIndexMap['Gamma'] = 17;\n    this.filterMap[18] = new fabric.Image.filters.Kodachrome();\n    this.filterIndexMap['Kodachrome'] = 18;\n    this.filterMap[19] = new fabric.Image.filters.BlackWhite();\n    this.filterIndexMap['BlackWhite'] = 19;\n    this.filterMap[20] = new fabric.Image.filters.BlendImage({\n      image: '',\n    });\n    this.filterIndexMap['BlendImage'] = 20;\n    this.filterMap[21] = new fabric.Image.filters.HueRotation({\n      rotation: '',\n    });\n    this.filterIndexMap['HueRotation'] = 21;\n  }\n\n  customizeControls(): void {\n    if (!this.isBrowser || !fabric) {\n      return;\n    }\n\n    fabric.Canvas.prototype.customiseControls(\n      {\n        tr: {\n          action: 'rotate',\n          cursor: 'pointer',\n        },\n        br: {\n          action: 'scale',\n        },\n        bl: {\n          action: 'remove',\n          cursor: 'pointer',\n        },\n      },\n      () => {},\n    );\n    fabric.Object.prototype.customiseCornerIcons(\n      {\n        settings: {\n          borderColor: 'black',\n          cornerSize: 25,\n          cornerShape: 'circle',\n          cornerBackgroundColor: '#f3364c',\n          cornerPadding: 10,\n        },\n        tr: {\n          icon: 'src/assets/editor-icons/rotate.svg',\n        },\n        br: {\n          icon: 'src/assets/editor-icons/resize.svg',\n        },\n        bl: {\n          icon: 'src/assets/editor-icons/remove.svg',\n        },\n      },\n      () => {},\n    );\n    fabric.Object.prototype.setControlsVisibility({\n      mt: false,\n      mb: false,\n      ms: false,\n      mr: false,\n      ml: false,\n      bl: true,\n      br: true,\n      tl: false,\n      tr: true,\n      mtr: false,\n    });\n  }\n\n  loadFont(): void {\n    if (!this.isBrowser || !this.activeObject?.fontFamily) {\n      return;\n    }\n\n    const ensureFontObserver = async (): Promise<void> => {\n      try {\n        if (!FontFaceObserverCtor) {\n          const module: any = await import('fontfaceobserver');\n          const observerCtor: FontFaceObserverConstructor | undefined =\n            module?.default ?? module?.FontFaceObserver ?? module;\n\n          if (!observerCtor) {\n            return;\n          }\n\n          FontFaceObserverCtor = observerCtor;\n        }\n\n        if (!FontFaceObserverCtor) {\n          return;\n        }\n\n        const canvasFont = new FontFaceObserverCtor(\n          this.activeObject.fontFamily,\n        );\n\n        canvasFont\n          .load()\n          .then(() => {\n            this.setFontFamily();\n          })\n          .catch(() => {});\n      } catch (error) {\n        console.error('Failed to load font', error);\n      }\n    };\n\n    void ensureFontObserver();\n  }\n\n  calculateImageDPI(): number {\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n    const imageWidth = editingBox.width;\n    const currentImageWidth = editingBox.width * editingBox.scaleX;\n    const canvasWidth = this.canvasProperties$.value.width;\n\n    const proportion =\n      (this.editingBox.width * this.editingBox.scaleX) / this.NODE_CANVAS_SIZE;\n    const rectWidth = canvasWidth * proportion;\n\n    const imageInches = ((30 / 2.54) * currentImageWidth) / rectWidth;\n\n    const dpi = imageWidth / imageInches;\n    this.currentImageDPIState =\n      dpi > 85\n        ? dpi > 135\n          ? this.translateService.translate('dashboard.editor.good')\n          : this.translateService.translate('dashboard.editor.average')\n        : this.translateService.translate('dashboard.editor.bad');\n    return Math.round(dpi);\n  }\n\n  triggerCanvasChange(): void {\n    this.canvas.requestRenderAll();\n    this.canvas.fire('object:modified', { target: this.activeObject });\n  }\n\n  alignVertical(): number | void {\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n\n    editingBox.top =\n      this.visibleEditingBox.middleY -\n      (editingBox.height * editingBox.scaleY) / 2;\n    editingBox.setCoords();\n\n    this.triggerCanvasChange();\n  }\n\n  alignHorizontal(): number | void {\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n\n    editingBox.left =\n      this.visibleEditingBox.middleX -\n      (editingBox.width * editingBox.scaleX) / 2;\n    editingBox.setCoords();\n\n    this.triggerCanvasChange();\n  }\n\n  alignLeft(): number | void {\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n\n    const safeArea = 4 * this.visibleEditingBox.scaleX;\n\n    editingBox.left = this.visibleEditingBox.left + safeArea;\n    editingBox.setCoords();\n\n    this.triggerCanvasChange();\n  }\n\n  alignTop(): number | void {\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n\n    const safeArea = 4 * this.visibleEditingBox.scaleY;\n\n    editingBox.top = this.visibleEditingBox.top + safeArea;\n    editingBox.setCoords();\n\n    this.triggerCanvasChange();\n  }\n\n  alignRight(): number | void {\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n\n    const safeArea = 4 * this.visibleEditingBox.scaleX;\n\n    editingBox.left =\n      this.visibleEditingBox.left +\n      this.visibleEditingBox.width * this.visibleEditingBox.scaleX -\n      editingBox.width * editingBox.scaleX -\n      safeArea;\n    editingBox.setCoords();\n\n    this.triggerCanvasChange();\n  }\n\n  alignBottom(): number | void {\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n\n    const safeArea = 4 * this.visibleEditingBox.scaleY;\n\n    editingBox.top =\n      this.visibleEditingBox.top +\n      this.visibleEditingBox.height * this.visibleEditingBox.scaleY -\n      editingBox.height * editingBox.scaleY -\n      safeArea;\n    editingBox.setCoords();\n\n    this.triggerCanvasChange();\n  }\n\n  expand(): number | void {\n    if (!this.canUseCanvas || !fabric) {\n      return;\n    }\n\n    const editingBox = this.canvas.getActiveObject();\n    if (!editingBox) {\n      return 0;\n    }\n\n    const safeAreaX = 4 * this.visibleEditingBox.scaleX;\n    const safeAreaY = 4 * this.visibleEditingBox.scaleY;\n\n    const k = Math.min(\n      (this.rect.width * this.rect.scaleX - 2 * safeAreaX) /\n        (editingBox.width * editingBox.scaleX),\n      (this.rect.height * this.rect.scaleY - 2 * safeAreaY) /\n        (editingBox.height * editingBox.scaleY),\n    );\n\n    editingBox.scale(editingBox.scaleX * k);\n    editingBox.left =\n      this.rect.left +\n      (this.rect.width * this.rect.scaleX -\n        editingBox.width * editingBox.scaleX) /\n        2;\n    editingBox.top =\n      this.rect.top +\n      (this.rect.height * this.rect.scaleY -\n        editingBox.height * editingBox.scaleY) /\n        2;\n    if (fabric.Image?.filters?.Resize) {\n      editingBox.resizeFilter = new fabric.Image.filters.Resize({\n        scaleX: editingBox.scaleX * k,\n        scaleY: editingBox.scaleX * k,\n        resizeType: 'sliceHack',\n      });\n      editingBox.applyResizeFilters();\n    }\n    editingBox.setCoords();\n\n    this.currentImageDPI$.next(this.calculateImageDPI());\n\n    this.triggerCanvasChange();\n  }\n  // #endregion\n  // #region textEditing\n  setActiveStyle(styleName: string, value: any, object: any): void {\n    object = object || this.canvas.getActiveObject();\n    if (!object) {\n      return;\n    }\n    if (object.selectionEnd === object.selectionStart) {\n      object.selectionStart = 0;\n      object.selectionEnd = object.text.length;\n    }\n    const style: { [key: string]: any } = {};\n    style[styleName] = value;\n    object.setSelectionStyles(style);\n    object.setCoords();\n  }\n\n  setActiveProp(name: any, value: any): void {\n    const object = this.canvas.getActiveObject();\n    if (!object) {\n      return;\n    }\n    object.set(name, value).setCoords();\n  }\n\n  setTextAlign(align: string): void {\n    this.activeObject.textAlign = align;\n    this.setActiveStyle('textAlign', align, null);\n  }\n\n  setOpacity(): void {\n    this.setActiveProp('opacity', this.activeObject.opacity);\n  }\n\n  setFill(): void {\n    this.setActiveStyle('fill', this.activeObject.fill, null);\n  }\n\n  setLineHeight(): void {\n    this.setActiveStyle('lineHeight', this.activeObject.lineHeight, null);\n  }\n\n  setCharSpacing(): void {\n    this.setActiveStyle('charSpacing', this.activeObject.charSpacing, null);\n  }\n\n  setFontSize(): void {\n    this.setActiveStyle('fontSize', this.activeObject.fontSize, null);\n  }\n\n  setBold(): void {\n    this.activeObject.fontWeight =\n      this.activeObject.fontWeight === '' ? 'bold' : '';\n    this.setActiveStyle('fontWeight', this.activeObject.fontWeight, null);\n  }\n\n  setFontStyle(): void {\n    this.activeObject.fontStyle =\n      this.activeObject.fontStyle === '' ? 'italic' : '';\n    this.setActiveStyle('fontStyle', this.activeObject.fontStyle, null);\n  }\n\n  setUnderline(): void {\n    this.activeObject.underline = !this.activeObject.underline;\n    this.setActiveStyle('underline', this.activeObject.underline, null);\n  }\n\n  setOverline(): void {\n    this.activeObject.overline = !this.activeObject.overline;\n    this.setActiveStyle('overline', this.activeObject.overline, null);\n  }\n\n  setLineThrough(): void {\n    this.activeObject.linethrough = !this.activeObject.linethrough;\n    this.setActiveStyle('linethrough', this.activeObject.linethrough, null);\n  }\n\n  setFontFamily(): void {\n    const object = this.canvas.getActiveObject();\n    this.canvas.discardActiveObject();\n    this.canvas.setActiveObject(object);\n  }\n  // #endregion\n\n  ngOnDestroy(): void {\n    this.subs.unsubscribe();\n  }\n}\n","<ng-container\r\n  *ngTemplateOutlet=\"customTemplate ? customTemplate : null\"\r\n></ng-container>\r\n\r\n<div\r\n  class=\"d-flex flex-lg-row flex-column justify-content-between\"\r\n  style=\"height: calc(100% - 40px)\"\r\n>\r\n  <div\r\n    style=\"min-width: 135px; flex-basis: 135px\"\r\n    class=\"d-flex flex-column align-items-center justify-content-start p-2\"\r\n  >\r\n    <div\r\n      *ngIf=\"(selected$ | async) && imageSelected\"\r\n      style=\"flex: 1 1 100%\"\r\n      class=\"align-items-end\"\r\n    >\r\n      <ng-content select=\"[currentImagePrintSize]\"></ng-content>\r\n\r\n      <p class=\"fw-bold mt-2 p3 mb-0 text-wrap text-center\">\r\n        {{ \"dashboard.editor.printQuality\" | translate }}:\r\n      </p>\r\n      <ng-container *ngIf=\"currentImageDPI$ | async as currentImageDPI\">\r\n        <p\r\n          class=\"fw-bold text-wrap text-center p3\"\r\n          [ngClass]=\"{\r\n            'text-success': currentImageDPI > 135,\r\n            'text-warning': currentImageDPI <= 135 && currentImageDPI > 85,\r\n            'text-danger': currentImageDPI <= 85\r\n          }\"\r\n        >\r\n          {{ currentImageDPIState }}: {{ currentImageDPI }} DPI\r\n        </p>\r\n      </ng-container>\r\n      <!-- <button (click)=\"togglePerformance()\">\r\n          {{ performanceCheckStarted ? \"Zaustavi merenje\" : \"Zapocni merenje\" }}\r\n        </button> -->\r\n      <div\r\n        class=\"d-flex justify-content-center align-items-center flex-row flex-lg-column\"\r\n        id=\"editIcons\"\r\n      >\r\n        <div\r\n          class=\"position-relative h-px-25 w-px-25 p-1 m-1 circle-shadow bg-brendly-red d-flex justify-content-center align-items-center\"\r\n          (click)=\"expand()\"\r\n        >\r\n          <img\r\n            src=\"src/assets/editor-icons/fit.svg\"\r\n            height=\"16\"\r\n            width=\"16\"\r\n            alt=\"\"\r\n          />\r\n        </div>\r\n        <div\r\n          class=\"position-relative h-px-25 w-px-25 p-1 m-1 circle-shadow bg-brendly-red d-flex justify-content-center align-items-center\"\r\n          (click)=\"alignVertical()\"\r\n        >\r\n          <img\r\n            src=\"src/assets/editor-icons/align_vertical_center.svg\"\r\n            height=\"16\"\r\n            width=\"16\"\r\n            alt=\"\"\r\n          />\r\n        </div>\r\n        <div\r\n          class=\"position-relative h-px-25 w-px-25 p-1 m-1 circle-shadow bg-brendly-red d-flex justify-content-center align-items-center\"\r\n          (click)=\"alignHorizontal()\"\r\n        >\r\n          <img\r\n            src=\"src/assets/editor-icons/align_horizontal_center.svg\"\r\n            height=\"16\"\r\n            width=\"16\"\r\n            alt=\"\"\r\n          />\r\n        </div>\r\n        <div\r\n          class=\"position-relative h-px-25 w-px-25 p-1 m-1 circle-shadow bg-brendly-red d-flex justify-content-center align-items-center\"\r\n          (click)=\"alignTop()\"\r\n        >\r\n          <img\r\n            src=\"src/assets/editor-icons/align_top.svg\"\r\n            height=\"16\"\r\n            width=\"16\"\r\n            alt=\"\"\r\n          />\r\n        </div>\r\n        <div\r\n          class=\"position-relative h-px-25 w-px-25 p-1 m-1 circle-shadow bg-brendly-red d-flex justify-content-center align-items-center\"\r\n          (click)=\"alignBottom()\"\r\n        >\r\n          <img\r\n            src=\"src/assets/editor-icons/align_bottom.svg\"\r\n            height=\"16\"\r\n            width=\"16\"\r\n            alt=\"\"\r\n          />\r\n        </div>\r\n        <div\r\n          class=\"position-relative h-px-25 w-px-25 p-1 m-1 circle-shadow bg-brendly-red d-flex justify-content-center align-items-center\"\r\n          (click)=\"alignRight()\"\r\n        >\r\n          <img\r\n            src=\"src/assets/editor-icons/align_right.svg\"\r\n            height=\"16\"\r\n            width=\"16\"\r\n            alt=\"\"\r\n          />\r\n        </div>\r\n        <div\r\n          class=\"position-relative h-px-25 w-px-25 p-1 m-1 circle-shadow bg-brendly-red d-flex justify-content-center align-items-center\"\r\n          (click)=\"alignLeft()\"\r\n        >\r\n          <img\r\n            src=\"src/assets/editor-icons/align_left.svg\"\r\n            height=\"16\"\r\n            width=\"16\"\r\n            alt=\"\"\r\n          />\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <kadu-button\r\n      *ngIf=\"\r\n        !imageSelected && image.allowBackgroundColorChooser && visibleEditingBox\r\n      \"\r\n      type=\"button\"\r\n      class=\"w-100\"\r\n      [elClass]=\"btnClass\"\r\n      [cpPosition]=\"'bottom'\"\r\n      [(colorPicker)]=\"visibleEditingBox.backgroundColor\"\r\n      [cpCmykEnabled]=\"true\"\r\n      (colorPickerChange)=\"setBackgroundColor()\"\r\n      id=\"chooseBgColor\"\r\n    >\r\n      {{ \"dashboard.editor.chooseBgColor\" | translate }}:\r\n    </kadu-button>\r\n  </div>\r\n  <div style=\"flex: 1\" class=\"position-relative\">\r\n    <div\r\n      class=\"h-100 position-relative\"\r\n      [class.position-absolute]=\"screen === 'desktop'\"\r\n      #canvasWrapper\r\n    >\r\n      <canvas class=\"w-100 h-100\" #canvas> </canvas>\r\n      <div class=\"canvas-loading-overlay\" *ngIf=\"canvasLoading$ | async\">\r\n        <div class=\"canvas-loading-spinner\"></div>\r\n      </div>\r\n      <div class=\"d-flex\">\r\n        <div class=\"\" *ngIf=\"devEnvironment\">\r\n          <canvas class=\"position-absolute\" #debugCanvas></canvas>\r\n        </div>\r\n        <div\r\n          class=\"position-absolute\"\r\n          [class.d-none]=\"!devEnvironment\"\r\n          style=\"left: 100%\"\r\n        >\r\n          <canvas\r\n            class=\"position-absolute\"\r\n            #canvasWithTransparentObjects\r\n          ></canvas>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <div\r\n    class=\"d-inline-flex flex-row flex-lg-column justify-content-center justify-content-lg-start align-items-center\"\r\n    style=\"min-width: 65px; flex-basis: 40px; flex-wrap: wrap\"\r\n    [ngStyle]=\"{ height: screen === 'desktop' ? '400px' : '65px' }\"\r\n  >\r\n    <div\r\n      [kaduTooltip]=\"color.name\"\r\n      *ngFor=\"let color of colors\"\r\n      class=\"color circle-shadow w-lg-100 mx-2 mx-lg-0\"\r\n      (click)=\"changeColorAndBackground(color)\"\r\n      [ngStyle]=\"{ 'background-color': color.backgroundColor }\"\r\n    >\r\n      <i\r\n        class=\"fas fa-circle\"\r\n        *ngIf=\"color.id === (activeColor$ | async).id\"\r\n      ></i>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"d-flex flex-column\">\r\n    <kadu-file-upload\r\n      *ngIf=\"showCustomUploadButton\"\r\n      #fileUpload\r\n      style=\"\r\n        --button-padding-top: 8px;\r\n        --button-padding-bottom: 8px;\r\n        --button-direction: row;\r\n        height: fit-content;\r\n      \"\r\n      [multiple]=\"true\"\r\n      [chooseLabel]=\"'dashboard.editor.addYourDesign' | translate\"\r\n      (customUploadHandler)=\"uploadHandler(fileUpload, $event)\"\r\n      accept=\"image/png,image/jpeg,image/webp\"\r\n      [auto]=\"true\"\r\n    ></kadu-file-upload>\r\n\r\n    <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\r\n  </div>\r\n</div>\r\n\r\n<ng-content></ng-content>\r\n\r\n<!-- filters -->\r\n<!-- <div style=\"flex-basis: 400px\" class=\"flex-grow-0 flex-shrink-0\">\r\n      <div class=\"w-100\" *ngIf=\"false\">\r\n        <div class=\"col-12\" *ngIf=\"imageSelected\">\r\n          <div *ngIf=\"isImageJPG\" class=\"col-12\">\r\n            <p>\r\n              {{ \"dashboard.editor.filterOnPng\" | transloco }}\r\n            </p>\r\n          </div>\r\n          <div *ngIf=\"!isImageJPG\" class=\"col-12\">\r\n            <div class=\"row\">\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[4]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(brownie.checked, 4)\"\r\n                  #brownie\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[4]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(brownie.checked, 4)\"\r\n                  #brownie\r\n                  >Brownie</kadu-input\r\n                >\r\n              </div>\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[3]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(sepia.checked, 3)\"\r\n                  #sepia\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[3]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(sepia.checked, 3)\"\r\n                  #sepia\r\n                  >Sepia</kadu-input\r\n                >\r\n              </div>\r\n            </div>\r\n            <div class=\"row\">\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[19]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(blackwhite.checked, 19)\"\r\n                  #blackwhite\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[19]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(blackwhite.checked, 19)\"\r\n                  #blackwhite\r\n                  >Black/white</kadu-input\r\n                >\r\n              </div>\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[1]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(invert.checked, 1)\"\r\n                  #invert\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[1]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(invert.checked, 1)\"\r\n                  #invert\r\n                  >Invert</kadu-input\r\n                >\r\n              </div>\r\n            </div>\r\n            <div class=\"row\">\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[9]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(vintage.checked, 9)\"\r\n                  #vintage\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[9]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(vintage.checked, 9)\"\r\n                  #vintage\r\n                  >Vintage</kadu-input\r\n                >\r\n              </div>\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[18]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(kodachrome.checked, 18)\"\r\n                  #kodachrome\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[18]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(kodachrome.checked, 18)\"\r\n                  #kodachrome\r\n                  >Kodachrome</kadu-input\r\n                >\r\n              </div>\r\n            </div>\r\n            <div class=\"row\">\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[14]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(technicolor.checked, 14)\"\r\n                  #technicolor\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[14]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(technicolor.checked, 14)\"\r\n                  #technicolor\r\n                  >Technicolor</kadu-input\r\n                >\r\n              </div>\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[15]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(polaroid.checked, 15)\"\r\n                  #polaroid\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[15]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(polaroid.checked, 15)\"\r\n                  #polaroid\r\n                  >Polaroid</kadu-input\r\n                >\r\n              </div>\r\n            </div>\r\n            <div class=\"row\">\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[12]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(sharpen.checked, 12)\"\r\n                  #sharpen\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[12]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(sharpen.checked, 12)\"\r\n                  #sharpen\r\n                  >Sharpen</kadu-input\r\n                >\r\n              </div>\r\n              <div class=\"col-6\">\r\n                <kadu-input\r\n                  *ngIf=\"!activeObject?.filters[13]\"\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(emboss.checked, 13)\"\r\n                  #emboss\r\n                ></kadu-input>\r\n                <kadu-input\r\n                  *ngIf=\"activeObject?.filters[13]\"\r\n                  checked\r\n                  type=\"checkbox\"\r\n                  (clickHandler)=\"toggleFilter(emboss.checked, 13)\"\r\n                  #emboss\r\n                  >Emboss</kadu-input\r\n                >\r\n              </div>\r\n            </div>\r\n            <div class=\"col-7\">\r\n              <div class=\"row\">\r\n                <div class=\"col-6\">\r\n                  <div class=\"col-12\">\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      (click)=\"toggleFilter(removeColor.checked, 2)\"\r\n                      #removeColor\r\n                    />Remove color>\r\n                  </div>\r\n                  <div class=\"col-12\">\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      (click)=\"toggleFilter(contrast.checked, 6)\"\r\n                      #contrast\r\n                    />Contrast>\r\n                  </div>\r\n                  <div class=\"col-12\">\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      (click)=\"toggleFilter(grayscale.checked, 0)\"\r\n                      #grayscale\r\n                    />Grayscale>\r\n                  </div>\r\n                </div>\r\n                <div class=\"col-6\">\r\n                  <div class=\"col-12\">\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      (click)=\"toggleFilter(brightness.checked, 5)\"\r\n                      #brightness\r\n                    />Brightness>\r\n                  </div>\r\n                  <div class=\"col-12\">\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      (click)=\"toggleFilter(noise.checked, 8)\"\r\n                      #noise\r\n                    />Noise>\r\n                  </div>\r\n                  <div class=\"col-12\">\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      (click)=\"toggleFilter(pixelate.checked, 10)\"\r\n                      #pixelate\r\n                    />Pixelate>\r\n                  </div>\r\n                  <div class=\"col-12\">\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      (click)=\"toggleFilter(colorFilter.checked, 0)\"\r\n                      #colorFilter\r\n                    />Color filter>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n            <div class=\"col-1\">\r\n              <input\r\n                class=\"color-picker col-12\"\r\n                [(colorPicker)]=\"color\"\r\n                appResizer\r\n                [style.background]=\"color\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"finish col-12\">\r\n            <kadu-button\r\n              elClass=\"btn btn-submit\"\r\n              (clickHandler)=\"closeFilters()\"\r\n            >\r\n              {{ \"dashboard.editor.finish\" | transloco }}\r\n            </kadu-button>\r\n          </div>\r\n        </div>\r\n        <div class=\"col-12\" *ngIf=\"textSelected\">\r\n          <div class=\"col-12\">\r\n            <div>Opacity</div>\r\n            <div>\r\n              <input\r\n                type=\"number\"\r\n                class=\"editor-margin-top-low form-control\"\r\n                [(ngModel)]=\"activeObject.opacity\"\r\n                (change)=\"setOpacity()\"\r\n                min=\"0\"\r\n                max=\"1\"\r\n                step=\"0.01\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-12\">\r\n            <div class=\"editor-margin-top-low\">Fill</div>\r\n\r\n            <div class=\"color-picker-wrapper\">\r\n              <input\r\n                type=\"text\"\r\n                class=\"form-control editor-margin-top-low\"\r\n                [cpPosition]=\"'bottom'\"\r\n                [(colorPicker)]=\"activeObject.fill\"\r\n                [value]=\"activeObject.fill\"\r\n                (colorPickerChange)=\"setFill()\"\r\n              />\r\n              <span\r\n                [style.background]=\"activeObject.fill\"\r\n                class=\"color-picker-value editor-margin-top-low\"\r\n              ></span>\r\n            </div>\r\n          </div>\r\n          <div class=\"col-12\">\r\n            <div class=\"editor-margin-top-low\">Font family</div>\r\n            <div>\r\n              <select\r\n                [(ngModel)]=\"activeObject.fontFamily\"\r\n                class=\"form-control editor-margin-top-low\"\r\n                (change)=\"loadFont()\"\r\n              >\r\n                <option value=\"arial\">Arial</option>\r\n                <option value=\"helvetica\" selected>Helvetica</option>\r\n                <option value=\"Helvetica Neue\">Helvetica Neue</option>\r\n                <option value=\"verdana\">Verdana</option>\r\n                <option value=\"Times New Roman\">Times New Roman</option>\r\n                <option value=\"Garamond\">Garamond</option>\r\n                <option value=\"Trajan\">Trajan</option>\r\n                <option value=\"Timothy\">Timothy</option>\r\n                <option value=\"Tomato Soup\">Tomato Soup</option>\r\n                <option value=\"Nature Spirit\">Nature Spirit</option>\r\n                <option value=\"Jocker Extrude\">Jocker Extrude</option>\r\n                <option value=\"courier\">Courier</option>\r\n                <option value=\"Roboto\">Roboto</option>\r\n                <option value=\"Open Sans\">Open Sans</option>\r\n                <option value=\"Zilla Slab\">Zilla Slab</option>\r\n                <option value=\"Lato\">Lato</option>\r\n                <option value=\"Bellefair\">Bellefair</option>\r\n                <option value=\"Fresca\">Fresca</option>\r\n                <option value=\"Raleway\">Raleway</option>\r\n                <option value=\"Open Sans Condensed\">Open Sans Condensed</option>\r\n                <option value=\"Indie Flower\">Indie Flower</option>\r\n                <option value=\"Josefin Sans\">Josefin Sans</option>\r\n                <option value=\"Inconsolata\">Inconsolata</option>\r\n                <option value=\"Pacifico\">Pacifico</option>\r\n                <option value=\"Gloria Hallelujah\">Gloria Hallelujah</option>\r\n              </select>\r\n            </div>\r\n          </div>\r\n          <div class=\"col-12\">\r\n            <div class=\"custom-item-body text-center editor-margin-top-high\">\r\n              <div class=\"btn-group\" role=\"group\" aria-label=\"...\">\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-submit btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.fontWeight }\"\r\n                  (clickHandler)=\"setBold()\"\r\n                >\r\n                  <i class=\"fa fa-bold\"></i>\r\n                </kadu-button>\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-submit btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.fontStyle === 'italic' }\"\r\n                  (clickHandler)=\"setFontStyle()\"\r\n                >\r\n                  <i class=\"fa fa-italic\"></i>\r\n                </kadu-button>\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-submit btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.underline }\"\r\n                  (clickHandler)=\"setUnderline()\"\r\n                >\r\n                  <i class=\"fa fa-underline\"></i>\r\n                </kadu-button>\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-submit btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.overline }\"\r\n                  (clickHandler)=\"setOverline()\"\r\n                >\r\n                  <i class=\"fa fa-underline fa-flip-vertical\"></i>\r\n                </kadu-button>\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-submit btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.linethrough }\"\r\n                  (clickHandler)=\"setLineThrough()\"\r\n                >\r\n                  <i class=\"fa fa-strikethrough\"></i>\r\n                </kadu-button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div class=\"col-12\">\r\n            <div class=\"custom-item-body text-center editor-margin-top-high\">\r\n              <div class=\"btn-group\" role=\"group\" aria-label=\"...\">\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-submit btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.textAlign === 'left' }\"\r\n                  (clickHandler)=\"setTextAlign('left')\"\r\n                >\r\n                  <i class=\"fa fa-align-left\"></i>\r\n                </kadu-button>\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-primary btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.textAlign === 'center' }\"\r\n                  (clickHandler)=\"setTextAlign('center')\"\r\n                >\r\n                  <i class=\"fa fa-align-center\"></i>\r\n                </kadu-button>\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-primary btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.textAlign === 'right' }\"\r\n                  (clickHandler)=\"setTextAlign('right')\"\r\n                >\r\n                  <i class=\"fa fa-align-right\"></i>\r\n                </kadu-button>\r\n                <kadu-button\r\n                  type=\"button\"\r\n                  elClass=\"btn btn-primary btn-sm\"\r\n                  [ngClass]=\"{ active: activeObject.textAlign === 'justify' }\"\r\n                  (clickHandler)=\"setTextAlign('justify')\"\r\n                >\r\n                  <i class=\"fa fa-align-justify\"></i>\r\n                </kadu-button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div class=\"col-12\">\r\n            <div>\r\n              <div class=\"editor-margin-top-low\">Font Size</div>\r\n              <div>\r\n                <kadu-input\r\n                  elClass=\"form-control editor-margin-top-low\"\r\n                  type=\"number\"\r\n                  [(ngModel)]=\"activeObject.fontSize\"\r\n                  (inputHandler)=\"setFontSize()\"\r\n                  step=\"10\"\r\n                  min=\"10\"\r\n                  max=\"3000\"\r\n                ></kadu-input>\r\n              </div>\r\n            </div>\r\n            <div>\r\n              <div class=\"editor-margin-top-low\">Line Height</div>\r\n              <div>\r\n                <kadu-input\r\n                  elClass=\"form-control editor-margin-top-low\"\r\n                  type=\"number\"\r\n                  [(ngModel)]=\"activeObject.lineHeight\"\r\n                  (inputHandler)=\"setLineHeight()\"\r\n                  step=\"0.01\"\r\n                  min=\"0.1\"\r\n                  max=\"10\"\r\n                ></kadu-input>\r\n              </div>\r\n            </div>\r\n            <div>\r\n              <div class=\"editor-margin-top-low\">Char Spacing</div>\r\n              <div>\r\n                <kadu-input\r\n                  elClass=\"form-control editor-margin-top-low\"\r\n                  type=\"number\"\r\n                  [(ngModel)]=\"activeObject.charSpacing\"\r\n                  (inputHandler)=\"setCharSpacing()\"\r\n                  step=\"1\"\r\n                  min=\"-20\"\r\n                  max=\"80\"\r\n                ></kadu-input>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div class=\"finish col-12\">\r\n            <kadu-button\r\n              elClass=\"btn btn-submit\"\r\n              (clickHandler)=\"closeFilters()\"\r\n            >\r\n              {{ \"dashboard.editor.finish\" | transloco }}\r\n            </kadu-button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div> -->\r\n<!-- filters end -->\r\n\r\n<span class=\"canvas-image-generator-wrapper\">\r\n  <canvas id=\"canvas-image-generator\"> </canvas>\r\n</span>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { KaduButtonModule } from '@kadung/kadung/kadu-button';\r\nimport { KaduFileUploadModule } from '@kadung/kadung/kadu-file-upload';\r\nimport { KaduInputModule } from '@kadung/kadung/kadu-input';\r\nimport { KaduScrollPanelModule } from '@kadung/kadung/kadu-scroll-panel';\r\nimport { KaduTabsModule } from '@kadung/kadung/kadu-tabs';\r\nimport { KaduTooltipModule } from '@kadung/kadung/kadu-tooltip';\r\nimport { ColorPickerModule } from 'ngx-color-picker';\r\nimport { ResizerDirective } from '../_directives/resizer/resizer.directive';\r\nimport { SaveGeneratedImageDirective } from '../_directives/save-generated-image/save-generated-image.directive';\r\nimport { SquareDirective } from '../_directives/square/square.directive';\r\nimport { FileUploadHandlerDirective } from '../_directives/file-upload-handler/file-upload-handler.directive';\r\nimport { TranslatePipe } from '../_pipes';\r\nimport { ImageGeneratorService, TranslateService } from '../_services';\r\nimport { ImageEditorService } from '../_services/image-editor/image-editor.service';\r\nimport { LOADER_SERVICE_TOKEN } from '../config';\r\nimport { ImageEditorComponent } from './image-editor.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    ImageEditorComponent,\r\n    ResizerDirective,\r\n    SquareDirective,\r\n    TranslatePipe,\r\n    SaveGeneratedImageDirective,\r\n    FileUploadHandlerDirective,\r\n  ],\r\n  imports: [\r\n    FormsModule,\r\n    CommonModule,\r\n    ColorPickerModule,\r\n    KaduFileUploadModule,\r\n    KaduButtonModule,\r\n    KaduInputModule,\r\n    KaduTabsModule,\r\n    KaduScrollPanelModule,\r\n    KaduTooltipModule,\r\n  ],\r\n  providers: [ImageEditorService, TranslateService, ImageGeneratorService],\r\n  exports: [\r\n    ImageEditorComponent,\r\n    ResizerDirective,\r\n    SquareDirective,\r\n    TranslatePipe,\r\n    SaveGeneratedImageDirective,\r\n    FileUploadHandlerDirective,\r\n  ],\r\n})\r\nexport class ImageEditorModule {\r\n  static forRoot(services: any): ModuleWithProviders<ImageEditorModule> {\r\n    return {\r\n      ngModule: ImageEditorModule,\r\n      providers: [\r\n        {\r\n          provide: LOADER_SERVICE_TOKEN,\r\n          useClass: services.loaderService,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n","/*\n * Public API Surface of image-editor\n */\n\nexport * from './_directives';\nexport * from './component';\nexport * from './_services';\nexport * from './config';\nexport * from './_pipes';\nexport * from './util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslateService","fabric","i2.PlatformService","i2.TranslateService","i2.ImageGeneratorService","i8.TranslatePipe"],"mappings":"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"}