@libs-ui/components-image-editor 0.2.161

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-components-image-editor.mjs","sources":["../../../../../libs-ui/components/image-editor/src/defines/image-editor.define.ts","../../../../../libs-ui/components/image-editor/src/resize/resize.component.ts","../../../../../libs-ui/components/image-editor/src/resize/resize.component.html","../../../../../libs-ui/components/image-editor/src/image-editor.component.ts","../../../../../libs-ui/components/image-editor/src/image-editor.component.html","../../../../../libs-ui/components/image-editor/src/libs-ui-components-image-editor.ts"],"sourcesContent":["import { get } from \"@libs-ui/utils\";\nimport { ICropRatioItem } from \"../interfaces/image-editor.interface\";\n\nexport const cropRationItems = (): Array<ICropRatioItem> => {\n return [\n {\n key: 'free',\n icon: 'libs-ui-icon-customize-image-outline'\n },\n {\n key: '1:1',\n value: 1,\n icon: 'libs-ui-icon-ratio-1-1'\n },\n {\n key: '2:3',\n value: 2 / 3,\n icon: 'libs-ui-icon-ratio-2-3'\n },\n {\n key: '3:2',\n value: 3 / 2,\n icon: 'libs-ui-icon-ratio-3-2'\n },\n {\n key: '3:4',\n value: 3 / 4,\n icon: 'libs-ui-icon-ratio-3-4'\n },\n {\n key: '4:3',\n value: 4 / 3,\n icon: 'libs-ui-icon-ratio-4-3'\n },\n {\n key: '9:16',\n value: 9 / 16,\n icon: 'libs-ui-icon-ratio-9-16'\n },\n {\n key: '16:9',\n value: 16 / 9,\n icon: 'libs-ui-icon-ratio-16-9'\n }\n ];\n};\n\nconst getMimeTypeFromSrc = (src?: string) => {\n if (!src) {\n return undefined;\n }\n const match = /^data:(.*?);/.exec(src);\n\n if (match) {\n return match[1];\n }\n const srcSplit = src.split('.');\n const mineType = srcSplit[srcSplit.length - 1];\n\n return `image/${(mineType.toLowerCase()) === 'jpg' ? 'jpeg' : mineType}`;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getDataUrl = (canvas: any, mimetype?: string, src?: string) => {\n const mimeTypeBySrc = getMimeTypeFromSrc(src);\n\n if (mimetype || mimeTypeBySrc) {\n return canvas.toDataURL(mimetype || mimeTypeBySrc);\n }\n\n return canvas.toDataURL();\n};\n\nexport const getWidthHeightResizeCropFollow = (ratioValue: number | undefined, width: number, height: number, maxWidth: number, maxHeight: number, minWidth: number, minHeight: number) => {\n height = Math.min(height, maxHeight);\n height = Math.max(minHeight, height);\n if (ratioValue) {\n width = height * ratioValue;\n width = Math.min(maxWidth, width);\n width = Math.max(minWidth, width);\n height = width / ratioValue;\n }\n width = Math.min(maxWidth, width);\n width = Math.max(minWidth, width);\n\n return [width, height];\n};\n\nexport const getCropRectImage = (rectClip: { left: number; top: number; width: number; height: number; }, imgWidth: number, imgHeight: number, scale: number) => {\n return {\n left: Math.max(rectClip.left * scale, 0),\n top: Math.max(rectClip.top * scale, 0),\n width: rectClip.width * scale,\n height: rectClip.height * scale\n };\n};\n\nexport const getStylesOfElement = <T>(element: HTMLElement, fields: Array<string>): Array<T> => {\n return fields?.map<T>(field => parseFloat(get(element, field) || '0') as T);\n};","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { getDataUrl } from \"../defines/image-editor.define\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { IButton } from \"@libs-ui/components-buttons-button\";\nimport { IInputValidFunctionControlEvent } from \"@libs-ui/components-inputs-valid\";\nimport { IResizeData } from \"../interfaces/image-editor.interface\";\nimport { LibsUiComponentsModalComponent, TYPE_MODAL_EVENT } from \"@libs-ui/components-modal\";\nimport { LibsUiComponentsInputsValidComponent } from \"@libs-ui/components-inputs-valid\";\nimport { convertBase64ToBlob, convertBlobToFile, getLabelBySizeFile } from \"@libs-ui/utils\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs-ui-components-image_editor-resize',\n templateUrl: './resize.component.html',\n standalone: true,\n imports: [\n TranslateModule, LibsUiComponentsModalComponent, LibsUiComponentsInputsValidComponent\n ]\n})\nexport class LibsUiComponentsImageEditorResizeComponent implements OnInit {\n\n protected buttonsFooter: Array<IButton>;\n protected image = new Image();\n protected originFileSize!: string;\n protected currentFileSize!: string;\n\n private inputValidFunctionControl: Array<IInputValidFunctionControlEvent>;\n\n @Input({ required: true }) resizeData!: IResizeData;\n @Input({ required: true }) originWidth!: number;\n @Input({ required: true }) originHeight!: number;\n @Input({ required: true }) src!: string;\n @Input() zIndex?: number;\n @Input() mimetype?: string;\n\n @Output() readonly outClose = new EventEmitter<void>();\n @Output() readonly outSave = new EventEmitter<IResizeData>();\n\n constructor() {\n this.buttonsFooter = [{\n type: 'button-third',\n label: 'i18n_cancel',\n action: async () => this.outClose.emit()\n }, {\n label: 'i18n_save',\n action: async () => {\n this.outSave.emit(this.resizeData);\n this.outClose.emit();\n }\n }];\n this.inputValidFunctionControl = [];\n }\n\n async ngOnInit(): Promise<void> {\n const fileSize = await this.getFileSize();\n\n this.currentFileSize = fileSize;\n this.originFileSize = fileSize;\n }\n\n protected async handlerResizeRatio() {\n let ratio = parseInt(`${this.resizeData.ratio}`);\n\n if (!ratio || ratio < 0) {\n return;\n }\n if (ratio > 100) {\n ratio = 100;\n this.resizeData.ratio = ratio;\n }\n this.resizeData.width = Math.max(parseInt(`${this.originWidth * ratio / 100}`), 1);\n this.resizeData.height = Math.max(parseInt(`${this.originHeight * ratio / 100}`), 1);\n // this.inputValidFunctionControl.forEach(item => item.detectChanges());\n this.currentFileSize = await this.getFileSize();\n }\n\n private getFileSize() {\n return new Promise<string>((resolve) => {\n this.image.onload = () => {\n const canvas = document.createElement('canvas');\n\n canvas.width = this.resizeData.width;\n canvas.height = this.resizeData.height;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(this.image, 0, 0, canvas.width, canvas.height);\n }\n const src = getDataUrl(canvas, this.mimetype, this.src);\n const file = convertBase64ToBlob(src);\n\n resolve(getLabelBySizeFile(convertBlobToFile(file, Date.now().toLocaleString()).size));\n };\n this.image.src = this.src;\n });\n }\n\n protected handlerResizeWidth() {\n this.processResizeWidthOrHeight('width', 'height', this.originWidth, this.originHeight);\n }\n\n protected handlerResizeHeight() {\n this.processResizeWidthOrHeight('height', 'width', this.originHeight, this.originWidth);\n }\n\n private async processResizeWidthOrHeight(resizeBy: 'width' | 'height', fieldResize: 'width' | 'height', originByValue: number, originOtherValue: number) {\n const value = parseInt(`${this.resizeData[resizeBy]}`);\n\n if (!value || value > originByValue) {\n return;\n }\n this.resizeData[fieldResize] = Math.max(parseInt(`${originOtherValue * value / originByValue}`), 1);\n this.resizeData.ratio = Math.max(parseInt(`${100 * value / originByValue}`), 1);\n this.currentFileSize = await this.getFileSize();\n }\n\n protected handlerInputValidFunctionControl(event: IInputValidFunctionControlEvent) {\n this.inputValidFunctionControl.push(event);\n }\n\n protected handlerEvent(event: TYPE_MODAL_EVENT) {\n if (event === 'close') {\n this.outClose.emit();\n }\n }\n\n}","<libs_ui-components-modal [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [mode]=\"'center'\"\n [width]=\"'500px'\"\n [height]=\"'auto'\"\n [title]=\"'i18n_resize' | translate\"\n [zIndex]=\"zIndex\"\n [buttonsFooter]=\"buttonsFooter\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom w-full h-full\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_ratio_size' | translate }} (%)\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[132px]'\"\n [dataType]=\"'int'\"\n [fieldNameBind]=\"'ratio'\"\n [(item)]=\"resizeData\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"100\"\n [valueUpDownNumber]=\"1\"\n [validRequired]=\"{isRequired: true}\"\n [ignoreShowError]=\"true\"\n (outValueChange)=\"handlerResizeRatio()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"mt-[16px] relative\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_width' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [maxValueNumber]=\"originWidth\"\n [minValueNumber]=\"1\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeWidth()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"flex items-center mt-[8px]\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_length' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"originHeight\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeHeight()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"absolute flex items-center left-[236px] top-[14px]\">\n <div\n class=\"w-[20px] h-[44px] libs-ui-border-top-general libs-ui-border-right-general libs-ui-border-bottom-general\">\n </div>\n <div class=\"ml-[6px] text-[#9ca2ad] libs-ui-icon-lock\"></div>\n </div>\n </div>\n <div class=\"mt-[16px]\">\n <div class=\"libs-ui-font-h6m text-[#6a7383] mb-[8px]\">{{ 'i18n_size_photo' | translate }}</div>\n <div class=\"libs-ui-font-h5r rounded-[4px] py-[8px] px-[16px] bg-[#f8f9fa] text-[#9ca2ad]\">\n {{ 'i18n_file_size_compare_when_resize' | translate:{current_size: currentFileSize, original_size: originFileSize} }}\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, Inject, inject, input, model, OnDestroy, Optional, output, signal, viewChild } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';\nimport { LibsUiComponentsModalComponent } from '@libs-ui/components-modal';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { LibsUiComponentsSpinnerComponent } from '@libs-ui/components-spinner';\nimport { IBoundingClientRect, IEvent } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { convertBase64ToBlob, get, isNil, LINK_IMAGE_ERROR_TOKEN_INJECT } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { fromEvent, Observable, Subject } from 'rxjs';\nimport { mergeMap, takeUntil, tap } from 'rxjs/operators';\nimport { cropRationItems, getCropRectImage, getDataUrl, getStylesOfElement, getWidthHeightResizeCropFollow } from './defines/image-editor.define';\nimport { IImageEditorFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { IAspectRatio, ICropRatioItem, ICropSize, ISaveFile, IRectClip, IResizeData, IStartMouseDim, IStyles, MODE_EDIT, TYPE_RESIZE_STATE, TYPE_MODE_SAVE } from './interfaces/image-editor.interface';\nimport { LibsUiComponentsImageEditorResizeComponent } from './resize/resize.component';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-image_editor',\n templateUrl: './image-editor.component.html',\n styleUrls: ['./image-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgTemplateOutlet, TranslateModule, LibsUiComponentsPopoverComponent, LibsUiComponentsModalComponent,\n LibsUiComponentsInputsValidComponent, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsSpinnerComponent,\n ]\n})\nexport class LibsUiComponentsImageEditorComponent implements AfterViewInit, OnDestroy {\n protected loading = signal(false);\n protected loadingImage = signal(true);\n protected changed = signal(false);\n protected originWidth = signal<number>(0);\n protected originHeight = signal<number>(0);\n protected cropRatioItems = signal<Array<ICropRatioItem>>(cropRationItems());\n protected cropRatioItemSelected = signal<string>('');\n protected cropSize = signal<ICropSize>({ width: 20, height: 20 });\n protected resizeData = signal<IResizeData>({ ratio: 100, width: 600, height: 800 });\n protected dragGridCrop = signal(false);\n\n private image = new Image();\n private canvas = document.createElement('canvas');\n private containerHeight = signal(800);\n private containerWidth = signal(1200);\n private imgContainerRect = signal<IBoundingClientRect>({ top: 0, left: 0, width: 0, height: 0 });\n private rectClip = signal<IRectClip>({ top: 0, left: 0, right: 0, bottom: 0, width: 0, height: 0 });\n private resizeState = signal<TYPE_RESIZE_STATE>('none');\n private moveState = signal<'clip' | 'image' | 'none'>('none');\n private startMouseDim = signal<IStartMouseDim>({ clientX: 0, clientY: 0, width: 0, height: 0, top: 0, left: 0, imageTop: 0, imageLeft: 0, imageWidth: 0, imageHeight: 0 });\n private dataUrlOrigin = signal<string>('');\n private ratioValue = signal<number>(0);\n private readonly minHeight = 20;\n private readonly minWidth = 20;\n private readonly onDestroy = new Subject<void>();\n private resizeComponentRef?: ComponentRef<LibsUiComponentsImageEditorResizeComponent>;\n\n\n readonly modeShowButton = input<MODE_EDIT>('save-file');\n readonly mimetype = input<string>();\n readonly zIndex = input<number>(1200);\n readonly imgSrc = model.required<string>();\n readonly originUrl = input<string>();\n readonly nameFile = input<string>();\n readonly hasZoom = input<boolean>(false);\n readonly aspectRatio = model<IAspectRatio>();\n readonly requiredCropFollowRatio = input<boolean>(false);\n\n readonly imageOrigin = viewChild.required<ElementRef>('imageOrigin');\n readonly imageClip = viewChild.required<ElementRef>('imageClip');\n readonly imageEditorContainer = viewChild.required<ElementRef>('imageEditorContainer');\n readonly imageContainer = viewChild.required<ElementRef>('imageContainer');\n readonly cropArea = viewChild.required<ElementRef>('cropArea');\n readonly cropTL = viewChild.required<ElementRef>('cropTL');\n readonly cropBL = viewChild.required<ElementRef>('cropBL');\n readonly cropBR = viewChild.required<ElementRef>('cropBR');\n readonly cropTR = viewChild.required<ElementRef>('cropTR');\n readonly cropLineVL = viewChild.required<ElementRef>('cropLineVL');\n readonly cropLineVR = viewChild.required<ElementRef>('cropLineVR');\n readonly cropLineHT = viewChild.required<ElementRef>('cropLineHT');\n readonly cropLineHB = viewChild.required<ElementRef>('cropLineHB');\n readonly circleTL = viewChild.required<ElementRef>('circleTL');\n readonly circleTR = viewChild.required<ElementRef>('circleTR');\n readonly circleBL = viewChild.required<ElementRef>('circleBL');\n readonly circleBR = viewChild.required<ElementRef>('circleBR');\n\n readonly outClose = output<{ isClickButtonClose: boolean }>();\n readonly outSaveFile = output<ISaveFile>();\n readonly outFunctionsControl = output<IImageEditorFunctionControlEvent>();\n\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n\n constructor(@Optional() @Inject(LINK_IMAGE_ERROR_TOKEN_INJECT) private linkImageError: string) {\n }\n\n ngAfterViewInit() {\n if (this.aspectRatio()) {\n this.dragGridCrop.set(true);\n const aspectRatioFound = this.cropRatioItems().find(item => item.key === this.aspectRatio()?.key);\n\n this.cropRatioItemSelected.set(aspectRatioFound?.key || this.cropRatioItems()[0].key);\n this.updateOriginImageSize();\n this.changedImage(true);\n }\n\n this.updateModalSize();\n this.initData();\n this.initMouseEvent();\n this.outFunctionsControl.emit({\n cropImage: this.cropImage.bind(this),\n setLoadingState: (loading: boolean) => this.loading.set(loading)\n });\n }\n\n protected handlerImageLoaded() {\n setTimeout(() => {\n this.updateModalSize();\n this.loadingImage.set(false);\n }, 500);\n }\n\n protected handlerImageError(e: ErrorEvent) {\n console.log('e', e);\n (e as IEvent).target.src = this.linkImageError;\n }\n\n private updateModalSize() {\n const maxHeight = window.innerHeight - 100;\n const maxWidth = window.innerWidth - 400;\n\n this.containerHeight.set(maxHeight - 124);\n this.containerWidth.set(maxWidth - 384);\n this.updateOriginImageSize();\n }\n\n private initData() {\n this.imgContainerRect.set(this.imageContainer().nativeElement.getBoundingClientRect());\n this.image.setAttribute('crossorigin', 'anonymous');\n this.image.onload = () => {\n this.imgContainerRect.set(this.imageContainer().nativeElement.getBoundingClientRect());\n this.canvas.height = this.image.height;\n this.canvas.width = this.image.width;\n this.originHeight.set(this.image.height);\n this.originWidth.set(this.image.width);\n\n this.updateOriginImageSize();\n this.canvas.getContext('2d')?.drawImage(this.image, 0, 0, this.canvas.width, this.canvas.height);\n this.dataUrlOrigin.set(getDataUrl(this.canvas, this.mimetype(), this.image.src));\n this.imgSrc.set(this.dataUrlOrigin());\n };\n this.image.src = this.imgSrc();\n }\n\n private initMouseEvent() {\n const mouseUp = this.initEvent({ nativeElement: document }, 'mouseup', { callStopPropagation: true, callPreventDefault: true }, undefined, () => this.handlerMouseup());\n const mouseMove = this.initEvent({ nativeElement: document }, 'mousemove', { callStopPropagation: true, callPreventDefault: true }).pipe(takeUntil(mouseUp));\n\n this.initEvent({ nativeElement: document }, 'wheel', { callStopPropagation: true }, undefined, (e: Event) => this.handlerMousewheel(e)).subscribe();\n this.initEvent({ nativeElement: window }, 'resize', {}, undefined, () => this.updateModalSize()).subscribe();\n this.initEvent(this.imageContainer(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => this.handlerImageContainerMousedown(e)).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropTL(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'TL') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropBL(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'BL') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropBR(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'BR') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropTR(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'TR') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropLineVL(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'VL') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropLineVR(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'VR') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropLineHT(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'HT') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropLineHB(), 'mousedown', { callStopPropagation: true, callPreventDefault: true }, mouseMove, (e: Event) => { this.handlerCropResize(e, 'HB') }).subscribe((e: Event) => this.handlerMousemove(e));\n this.initEvent(this.cropArea(), 'mousedown', {}, undefined, (e: Event) => this.handlerMousedownCropArea(e)).subscribe((e: Event) => this.handlerMousemove(e));\n }\n\n private initEvent(element: ElementRef, eventName: string, flag: { callStopPropagation?: boolean, callPreventDefault?: boolean }, obsMerge?: Observable<Event>, callback?: (e: Event) => void): Observable<Event> {\n const obs = fromEvent<Event>(element.nativeElement, eventName).pipe(\n tap((e: Event) => {\n if (flag.callStopPropagation && e?.stopPropagation) {\n e.stopPropagation();\n }\n if (flag.callPreventDefault && e?.preventDefault) {\n e.preventDefault();\n }\n if (callback) {\n callback(e);\n }\n }),\n takeUntil(this.onDestroy));\n\n if (obsMerge) {\n return obs.pipe(mergeMap(() => obsMerge), (takeUntil(this.onDestroy)));\n }\n\n return obs;\n };\n\n private updateOriginImageSize() {\n let width = this.originWidth();\n let height = this.originHeight();\n const ratio = width / height;\n\n if (width >= height) {\n width = Math.min(this.containerWidth(), width);\n height = Math.min(width / ratio, this.containerHeight());\n width = height * ratio;\n } else {\n height = Math.min(this.containerHeight(), height);\n width = height * ratio;\n }\n this.setImagePosition(width, height);\n this.updateCropAreaPos();\n this.updateRectClipPos();\n }\n\n private setImagePosition(width: number, height: number) {\n const left = this.containerWidth() / 2 - width / 2;\n const top = this.containerHeight() / 2 - height / 2;\n const styles = { width, height, top, left, display: 'block' };\n\n this.setStylesElements(this.imageOrigin(), styles);\n this.setStylesElements(this.imageClip(), styles);\n this.setCirclePosition(styles);\n }\n\n private setCirclePosition(styles: IStyles) {\n this.setStylesElements(this.circleTL(), { top: (styles.top || 0) - 5, left: (styles.left || 0) - 5 });\n this.setStylesElements(this.circleTR(), { top: (styles.top || 0) - 5, left: (styles.left || 0) + (styles.width || 0) - 10 });\n this.setStylesElements(this.circleBL(), { top: (styles.top || 0) + (styles.height || 0) - 10, left: (styles.left || 0) - 5 });\n this.setStylesElements(this.circleBR(), { top: (styles.top || 0) + (styles.height || 0) - 10, left: (styles.left || 0) + (styles.width || 0) - 10 });\n }\n\n private updateCropAreaPos() {\n const [imgTop, imgLeft, imgWidth, imgHeight] = getStylesOfElement<number>(this.imageClip().nativeElement, ['style.top', 'style.left', 'offsetWidth', 'offsetHeight']);\n\n const rectImg: IBoundingClientRect = {\n top: Math.max(0, imgTop),\n left: Math.max(0, imgLeft),\n width: imgWidth,\n height: imgHeight\n };\n\n rectImg.width = Math.min(imgWidth, this.containerWidth() - imgLeft);\n if (imgLeft < 0) {\n rectImg.width = Math.min(imgWidth + imgLeft, this.containerWidth());\n }\n rectImg.height = Math.min(imgHeight, this.containerHeight() - imgTop);\n if (imgTop < 0) {\n rectImg.height = Math.min(imgTop + imgHeight, this.containerHeight());\n }\n this.ratioValue.set(this.getCropRatioValue());\n if (!this.ratioValue()) {\n this.setStylesElements(this.cropArea(), rectImg);\n\n return;\n }\n let width = rectImg.width;\n let height = width / this.ratioValue();\n\n width = Math.min(rectImg.width, width);\n height = width / this.ratioValue();\n height = Math.min(rectImg.height, height);\n width = height * this.ratioValue();\n const top = rectImg.top + (rectImg.height - height) / 2;\n const left = rectImg.left + (rectImg.width - width) / 2;\n\n this.setStylesElements(this.cropArea(), { width, height, top, left });\n }\n\n private getCropRatioValue() {\n const cropRatio = this.aspectRatio() || this.cropRatioItems().find(item => item.key === this.cropRatioItemSelected());\n\n if (!cropRatio) {\n return this.originWidth() / this.originHeight();\n }\n\n return cropRatio.value ?? 0;\n }\n\n private updateRectClipPos() {\n const reactClip = this.getRectClipImage();\n\n this.imageClip().nativeElement.style.clip = `rect(${reactClip.top}px, ${reactClip.right}px, ${reactClip.bottom}px, ${reactClip.left}px)`;\n }\n\n private getRectClipImage() {\n\n const imageRect = this.imageClip().nativeElement.getBoundingClientRect();\n if (!imageRect.width) {\n\n return this.rectClip();\n }\n const cropRect = this.cropArea().nativeElement.getBoundingClientRect();\n const width = Math.round(cropRect.width);\n const height = Math.round(cropRect.height);\n const left = cropRect.left - imageRect.left;\n const top = cropRect.top - imageRect.top;\n const right = Math.round(left + width);\n const bottom = Math.round(top + height);\n const ratio = this.originWidth() / imageRect.width;\n\n\n this.rectClip.set({ left, top, right, bottom, width, height });\n this.cropSize.set({\n height: top >= 0 ? (Math.round((bottom - top) * ratio)) : (Math.floor((bottom - top) * ratio)),\n width: top >= 0 ? (Math.round(((right - left) * (this.ratioValue() ?? 1)) * ratio)) : (Math.floor(((right - left) * (this.ratioValue() ?? 1)) * ratio))\n });\n\n return this.rectClip();\n }\n\n private handlerMousemove(e: any) {\n const typeState = ['BL', 'TL', 'TR', 'BR', 'VL', 'VR', 'HT', 'HB'];\n const methodName = `resizeCropFollow${this.resizeState()}Dir`; // resizeCropFollowBLDir, resizeCropFollowTLDir, resizeCropFollowTRDir, resizeCropFollowBRDir, resizeCropFollowVLDir, resizeCropFollowVRDir, resizeCropFollowHTDir, resizeCropFollowHBDir\n\n if (typeState.includes(this.resizeState())) {\n (this as any)[methodName](e);\n }\n switch (this.moveState()) {\n case 'clip':\n this.moveClipArea(e);\n break;\n\n case 'image':\n this.moveImage(e);\n break;\n }\n this.changedImage(true);\n }\n\n protected resizeCropFollowBLDir = (e: IEvent) => {\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = this.ratioValue() ? -momentY * this.ratioValue() : e.clientX - this.startMouseDim().clientX;\n const maxHeight = this.startMouseDim().imageTop + this.startMouseDim().imageHeight - this.startMouseDim().top;\n const maxWidth = this.startMouseDim().left + this.startMouseDim().width - this.startMouseDim().imageLeft;\n let { width, height, left } = this.getRectResizeCropFollow({ width: -1, height: 1, left: 1, top: 0 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n left = this.startMouseDim().left + this.startMouseDim().width - width;\n this.setStylesElements(this.cropArea(), { left, height, width }, true);\n };\n\n protected resizeCropFollowTLDir = (e: IEvent) => {\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = this.ratioValue() ? this.ratioValue() * momentY : e.clientX - this.startMouseDim().clientX;\n const maxHeight = this.startMouseDim().top + this.startMouseDim().height - this.startMouseDim().imageTop;\n const maxWidth = this.startMouseDim().left + this.startMouseDim().width - this.startMouseDim().imageLeft;\n let { width, height, top, left } = this.getRectResizeCropFollow({ width: -1, height: -1, left: 1, top: 1 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n left = this.startMouseDim().left + this.startMouseDim().width - width;\n top = this.startMouseDim().top + this.startMouseDim().height - height;\n this.setStylesElements(this.cropArea(), { top, left, height, width }, true);\n };\n\n protected resizeCropFollowTRDir = (e: IEvent) => {\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = this.ratioValue() ? -momentY * this.ratioValue() : e.clientX - this.startMouseDim().clientX;\n const maxHeight = this.startMouseDim().top + this.startMouseDim().height - this.startMouseDim().imageTop;\n const maxWidth = this.startMouseDim().imageLeft + this.startMouseDim().imageWidth - this.startMouseDim().left;\n let { width, height, top } = this.getRectResizeCropFollow({ width: 1, height: -1, left: 0, top: 1 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n top = this.startMouseDim().top + this.startMouseDim().height - height;\n this.setStylesElements(this.cropArea(), { top, height, width }, true);\n };\n\n protected resizeCropFollowBRDir(e: IEvent) {\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = this.ratioValue() ? momentY * this.ratioValue() : e.clientX - this.startMouseDim().clientX;\n const maxHeight = this.startMouseDim().imageTop + this.startMouseDim().imageHeight - this.startMouseDim().top;\n const maxWidth = this.startMouseDim().imageLeft + this.startMouseDim().imageWidth - this.startMouseDim().left;\n let { width, height } = this.getRectResizeCropFollow({ width: 1, height: 1, left: 0, top: 0 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n this.setStylesElements(this.cropArea(), { height, width }, true);\n }\n\n protected resizeCropFollowVLDir = (e: IEvent) => {\n const momentX = e.clientX - this.startMouseDim().clientX;\n const momentY = this.ratioValue() ? momentX / this.ratioValue() : 0;\n const maxHeight = this.startMouseDim().top + this.startMouseDim().height - this.startMouseDim().imageTop;\n const maxWidth = this.startMouseDim().left + this.startMouseDim().width - this.startMouseDim().imageLeft;\n let { width, height, top, left } = this.getRectResizeCropFollow({ width: -1, height: -1, left: 1, top: 1 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n left = this.startMouseDim().left + this.startMouseDim().width - width;\n top = this.startMouseDim().top + this.startMouseDim().height - height;\n this.setStylesElements(this.cropArea(), { top, left, height, width }, true);\n };\n\n protected resizeCropFollowVRDir = (e: IEvent) => {\n const momentX = e.clientX - this.startMouseDim().clientX;\n const momentY = this.ratioValue() ? -momentX / this.ratioValue() : 0;\n const maxHeight = this.startMouseDim().top + this.startMouseDim().height - this.startMouseDim().imageTop;\n const maxWidth = this.startMouseDim().imageLeft + this.startMouseDim().imageWidth - this.startMouseDim().left;\n let { width, height, top } = this.getRectResizeCropFollow({ width: 1, height: -1, left: 0, top: 1 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n top = this.startMouseDim().top + this.startMouseDim().height - height;\n this.setStylesElements(this.cropArea(), { top, height, width }, true);\n };\n\n protected resizeCropFollowHTDir = (e: IEvent) => {\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = this.ratioValue() ? momentY * this.ratioValue() : 0;\n const maxWidth = this.startMouseDim().width + this.startMouseDim().left - this.startMouseDim().imageLeft;\n const maxHeight = this.startMouseDim().top + this.startMouseDim().height - this.startMouseDim().imageTop;\n let { width, height, top, left } = this.getRectResizeCropFollow({ width: -1, height: -1, left: 1, top: 1 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n top = this.startMouseDim().top + this.startMouseDim().height - height;\n left = this.startMouseDim().left + this.startMouseDim().width - width;\n this.setStylesElements(this.cropArea(), { top, left, height, width }, true);\n };\n\n protected resizeCropFollowHBDir = (e: IEvent) => {\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = this.ratioValue() ? momentY * this.ratioValue() : 0;\n const maxHeight = this.startMouseDim().imageTop + this.startMouseDim().imageHeight - this.startMouseDim().top;\n const maxWidth = this.startMouseDim().width + this.startMouseDim().left - this.startMouseDim().imageLeft;\n let { width, height, left } = this.getRectResizeCropFollow({ width: 1, height: 1, left: -1, top: 0 }, momentX, momentY);\n\n [width, height] = getWidthHeightResizeCropFollow(this.ratioValue(), width, height, maxWidth, maxHeight, this.minWidth, this.minHeight);\n left = this.startMouseDim().left + this.startMouseDim().width - width;\n this.setStylesElements(this.cropArea(), { height, left, width }, true);\n };\n\n private getRectResizeCropFollow(ratio: { width: number; height: number; top: number; left: number }, momentX: number, momentY: number) {\n const width = this.startMouseDim().width + momentX * ratio.width;\n const height = this.startMouseDim().height + momentY * ratio.height;\n const top = this.startMouseDim().top + momentY * ratio.top;\n const left = this.startMouseDim().left + momentX * ratio.left;\n\n return { width, height, left, top };\n }\n\n private handlerMouseup() {\n this.imageContainer().nativeElement.classList.remove('cursor-move');\n this.cropArea().nativeElement.classList.remove('cursor-move');\n this.resizeState.set('none');\n this.moveState.set('none');\n }\n\n private handlerMousewheel(event: any) {\n if (!this.hasZoom()) {\n return;\n }\n if (event.deltaY < 0) {\n this.zoomImage(1 / 1.1);\n\n return;\n }\n this.zoomImage(1.1);\n }\n\n private handlerImageContainerMousedown(e: any) {\n if (this.resizeState() === 'none' && this.moveState() === 'none') {\n this.moveState.set('image');\n this.handlerMousedown(e);\n }\n\n return false;\n }\n\n private handlerCropResize(e: any, resizeType: TYPE_RESIZE_STATE) {\n this.resizeState.set(resizeType);\n this.dragGridCrop.set(true);\n this.handlerMousedown(e);\n }\n\n private handlerMousedownCropArea(e: any) {\n this.moveState.set('clip');\n this.handlerMousedown(e);\n }\n\n private handlerMousedown(e: IEvent) {\n const [width, height, top, left] = getStylesOfElement<number>(this.cropArea().nativeElement, ['offsetWidth', 'offsetHeight', 'style.top', 'style.left']);\n const [imageWidth, imageHeight, imageTop, imageLeft] = getStylesOfElement<number>(this.imageOrigin().nativeElement, ['offsetWidth', 'offsetHeight', 'style.top', 'style.left']);\n switch (this.moveState()) {\n case 'image':\n this.imageContainer().nativeElement.classList.add('cursor-move');\n break;\n case 'clip':\n if (width === imageWidth && height === imageHeight) {\n return;\n }\n this.cropArea().nativeElement.classList.add('cursor-move');\n break;\n\n default:\n break;\n }\n\n this.startMouseDim.set({\n clientX: e.clientX,\n clientY: e.clientY,\n width: width,\n height: height,\n top: top,\n left: left,\n imageTop: imageTop,\n imageLeft: imageLeft,\n imageWidth: imageWidth,\n imageHeight: imageHeight\n });\n this.ratioValue.set(this.getCropRatioValue());\n }\n\n private moveImage(e: IEvent) {\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = e.clientX - this.startMouseDim().clientX;\n const imgTop = this.startMouseDim().imageTop + momentY;\n const imgLeft = this.startMouseDim().imageLeft + momentX;\n const top = this.startMouseDim().top + momentY;\n const left = this.startMouseDim().left + momentX;\n\n\n this.setStylesElements(this.imageOrigin(), { top: imgTop, left: imgLeft });\n this.setStylesElements(this.imageClip(), { top: imgTop, left: imgLeft });\n this.setStylesElements(this.cropArea(), { top, left });\n this.setCirclePosition({ top: imgTop, left: imgLeft, width: this.startMouseDim().imageWidth, height: this.startMouseDim().imageHeight });\n }\n\n private moveClipArea(e: IEvent) {\n const [imgWidth, imgHeight, imgTop, imgLeft] = getStylesOfElement<number>(this.imageClip().nativeElement, ['offsetWidth', 'offsetHeight', 'style.top', 'style.left']);\n const [cropWidth, cropHeight] = getStylesOfElement<number>(this.cropArea().nativeElement, ['offsetWidth', 'offsetHeight']);\n const momentY = e.clientY - this.startMouseDim().clientY;\n const momentX = e.clientX - this.startMouseDim().clientX;\n let top = Math.max(imgTop, this.startMouseDim().top + momentY);\n let left = Math.max(imgLeft, this.startMouseDim().left + momentX);\n\n top = Math.min(top, imgTop + imgHeight - cropHeight);\n left = Math.min(left, imgLeft + imgWidth - cropWidth);\n\n this.setStylesElements(this.cropArea(), { top, left }, true);\n }\n\n private zoomImage(scale: number) {\n const [currWidth, currHeight, currTop, currLeft] = getStylesOfElement<number>(this.imageOrigin().nativeElement, ['offsetWidth', 'offsetHeight', 'style.top', 'style.left']);\n const width = Math.max(currWidth * scale, 50);\n const height = this.imageOrigin().nativeElement.offsetHeight * width / this.imageOrigin().nativeElement.offsetWidth;\n const top = currTop + (currHeight - height) / 2;\n const left = currLeft + (currWidth - width) / 2;\n let [cropWidth, cropHeight] = getStylesOfElement<number>(this.cropArea().nativeElement, ['offsetWidth', 'offsetHeight']);\n const [cropTop, cropLeft] = getStylesOfElement<number>(this.cropArea().nativeElement, ['style.top', 'style.left']);\n const maxCropWidth = width + left - cropLeft;\n const maxCropHeight = height + top - cropTop;\n const minWidth = 20;\n const minHeight = 20;\n\n cropWidth = Math.min(cropWidth, maxCropWidth);\n cropHeight = Math.min(cropHeight, maxCropHeight);\n cropWidth = Math.max(cropWidth, minWidth);\n cropHeight = Math.max(cropHeight, minHeight);\n this.ratioValue.set(this.getCropRatioValue());\n if (this.ratioValue()) {\n cropHeight = cropWidth / this.ratioValue();\n cropHeight = Math.min(cropHeight, maxCropHeight);\n cropHeight = Math.max(cropHeight, minHeight);\n cropWidth = cropHeight * this.ratioValue();\n }\n this.rectClip.update(rect => {\n const rectTop = cropTop - top;\n const rectLeft = cropLeft - left;\n return {\n ...rect,\n top: rectTop,\n left: rectLeft,\n right: rectLeft + cropWidth,\n bottom: rectTop + cropHeight\n };\n });\n const clip = `rect(${this.rectClip().top}px, ${this.rectClip().right}px, ${this.rectClip().bottom}px, ${this.rectClip().left}px)`;\n\n this.setStylesElements(this.cropArea(), { top: cropTop, left: cropLeft, width: cropWidth, height: cropHeight });\n this.setStylesElements(this.imageOrigin(), { top, left, width, height });\n this.setCirclePosition({ top, left, width, height });\n this.setStylesElements(this.imageClip(), { clip, top, left, width, height });\n this.getRectClipImage();\n }\n\n protected handlerRotateImage(event: Event) {\n event.stopPropagation();\n this.image.src = this.imgSrc();\n this.image.onload = () => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext(\"2d\");\n\n const [width, height] = getStylesOfElement<number>(this.imageOrigin().nativeElement, ['offsetWidth', 'offsetHeight']);\n const originWidth = this.image.width;\n const originHeight = this.image.height;\n let top = parseInt(this.imageOrigin().nativeElement.style.top);\n let left = parseInt(this.imageOrigin().nativeElement.style.left);\n let newHeight = width;\n let newWidth = height;\n const ratio = newWidth / newHeight;\n\n canvas.height = originWidth;\n canvas.width = originHeight;\n ctx?.translate(originHeight / 2, originWidth / 2);\n ctx?.rotate(Math.PI / 2);\n ctx?.drawImage(this.image, -originWidth / 2, -originHeight / 2);\n const src = getDataUrl(canvas, this.mimetype(), this.image.src);\n\n this.imgSrc.set(src);\n newWidth = Math.max(newWidth, originHeight);\n newWidth = Math.min(newWidth, this.containerWidth());\n newHeight = newWidth / ratio;\n newHeight = Math.max(newHeight, originWidth);\n newHeight = Math.min(newHeight, this.containerHeight());\n newWidth = newHeight * ratio;\n top = top - (newHeight / 2 - height / 2);\n left = left - (newWidth / 2 - width / 2);\n this.setStylesElements(this.imageOrigin(), { src, top, left, width: newWidth, height: newHeight });\n this.setCirclePosition({ top, left, width: newWidth, height: newHeight });\n this.setStylesElements(this.imageClip(), { src, top, left, width: newWidth, height: newHeight });\n this.getOriginalImageSize(() => {\n this.cropSize.set({ width: this.originWidth(), height: this.originHeight() });\n this.updateOriginImageSize();\n });\n this.changedImage(true);\n };\n }\n\n protected getOriginalImageSize(callback?: () => void) {\n this.image.src = this.imgSrc();\n this.image.onload = () => {\n this.originWidth.set(this.image.width);\n this.originHeight.set(this.image.height);\n if (callback) {\n return callback();\n }\n };\n }\n\n protected changedImage(status: boolean) {\n this.changed.set(status);\n }\n\n protected handlerFlipImage(event: Event, mode: 'horizontal' | 'vertical') {\n event.stopPropagation();\n this.image.src = this.imgSrc();\n this.image.onload = () => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext(\"2d\");\n const width = this.image.width;\n const height = this.image.height;\n\n canvas.height = height;\n canvas.width = width;\n if (ctx) {\n ctx.drawImage(this.image, 0, 0, width, height);\n if (mode === 'horizontal') {\n ctx.translate(width, 0);\n ctx.scale(-1, 1);\n }\n if (mode === 'vertical') {\n ctx.translate(0, height);\n ctx.scale(1, -1);\n }\n ctx.clearRect(0, 0, width, height);\n ctx.drawImage(this.image, 0, 0);\n }\n const dataUrl = getDataUrl(canvas, this.mimetype(), this.image.src);\n\n this.imgSrc.set(dataUrl);\n this.imageOrigin().nativeElement.src = dataUrl;\n this.imageClip().nativeElement.src = dataUrl;\n this.updateCropAreaPos();\n this.updateRectClipPos();\n this.changedImage(true);\n };\n }\n\n protected handlerRestoreImage(event: Event) {\n event.stopPropagation();\n this.imgSrc.set(this.dataUrlOrigin());\n this.dragGridCrop.set(false);\n this.getOriginalImageSize(() => {\n this.updateOriginImageSize();\n this.changedImage(false);\n this.cropRatioItemSelected.set('');\n this.updateCropAreaPos();\n this.updateRectClipPos();\n });\n }\n\n private cropImage(): Promise<string> {\n return new Promise((resolve) => {\n this.image.src = this.imgSrc();\n this.image.onload = () => {\n const canvas = document.createElement('canvas');\n const originWidth = this.image.width;\n const width = parseInt(this.imageClip().nativeElement.offsetWidth);\n const height = parseInt(this.imageClip().nativeElement.offsetHeight);\n const scale = originWidth / width;\n const rectClip = this.getRectClipImage();\n const cropRect = getCropRectImage(rectClip, width, height, scale);\n\n canvas.height = cropRect.height;\n canvas.width = cropRect.width;\n this.originHeight.set(canvas.height);\n this.originWidth.set(canvas.width);\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(this.image, cropRect.left, cropRect.top, cropRect.width, cropRect.height, 0, 0, cropRect.width, cropRect.height);\n }\n const dataUrl = getDataUrl(canvas, this.mimetype(), this.image.src);\n\n this.changedImage(true);\n resolve(dataUrl);\n };\n });\n }\n\n protected async handlerSaveFile(event: Event, modeSave: TYPE_MODE_SAVE) {\n event.stopPropagation();\n const dataUrl = await this.cropImage();\n const file = convertBase64ToBlob(dataUrl);\n\n this.outSaveFile.emit({ file: file, url: dataUrl, mode: modeSave });\n }\n\n\n protected async handlerClose(event: Event): Promise<void> {\n event.stopPropagation();\n this.outClose.emit({ isClickButtonClose: true });\n }\n\n protected handlerSelectCropRatioItem(event: Event, key: string) {\n event.stopPropagation();\n this.cropRatioItemSelected.set(key);\n this.aspectRatio.set(undefined);\n this.changed.set(true);\n this.dragGridCrop.set(true);\n this.updateOriginImageSize();\n }\n\n protected handlerResize(event: Event) {\n event.stopPropagation();\n if (this.resizeComponentRef) {\n return;\n }\n this.resizeComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsImageEditorResizeComponent);\n const instance = this.resizeComponentRef.instance;\n const subs = instance.outClose.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n this.dynamicComponentService.remove(this.resizeComponentRef);\n this.resizeComponentRef = undefined;\n subs.unsubscribe();\n });\n\n instance.src = this.imgSrc();\n instance.mimetype = this.mimetype();\n instance.zIndex = this.zIndex();\n subs.add(instance.outSave.pipe(takeUntil(this.onDestroy)).subscribe(event => {\n this.resizeData.set(event);\n this.saveResize();\n }));\n instance.resizeData = { ratio: 100, width: this.originWidth(), height: this.originHeight() };\n instance.originWidth = this.originWidth();\n instance.originHeight = this.originHeight();\n this.dynamicComponentService.addToBody(this.resizeComponentRef);\n }\n\n protected saveResize() {\n this.image.src = this.imgSrc();\n this.image.onload = () => {\n const canvas = document.createElement('canvas');\n\n canvas.width = this.resizeData().width;\n canvas.height = this.resizeData().height;\n const ctx = canvas.getContext('2d');\n\n if (ctx) {\n ctx.drawImage(this.image, 0, 0, canvas.width, canvas.height);\n }\n const src = getDataUrl(canvas, this.mimetype(), this.image.src);\n const [currWidth, currHeight, currTop, currLeft] = getStylesOfElement<number>(this.imageOrigin().nativeElement, ['offsetWidth', 'offsetHeight', 'style.top', 'style.left']);\n const ratio = currWidth / currHeight;\n let newWidth = Math.min(this.resizeData().width, this.containerWidth());\n let newHeight = newWidth / ratio;\n\n newHeight = Math.min(this.resizeData().height, this.containerHeight());\n newWidth = newHeight * ratio;\n Math.min(this.resizeData().height, this.containerHeight());\n const top = currTop + (currHeight - newHeight) / 2;\n const left = currLeft + (currWidth - newWidth) / 2;\n const movementY = currTop - top;\n const movementX = currLeft - left;\n\n this.rectClip.update(rect => {\n const rectTop = rect.top + movementY;\n const rectLeft = rect.left + movementX;\n return {\n ...rect,\n top: rectTop,\n left: rectLeft,\n right: rectLeft + newWidth,\n bottom: rectTop + newHeight\n };\n });\n const clip = `rect(${this.rectClip().top}px, ${this.rectClip().right}px, ${this.rectClip().bottom}px, ${this.rectClip().left}px)`;\n\n this.setStylesElements(this.imageOrigin(), { src, top, left, width: newWidth, height: newHeight });\n this.setCirclePosition({ top, left, width: newWidth, height: newHeight });\n this.setStylesElements(this.imageClip(), { src, clip, top, left, width: newWidth, height: newHeight });\n this.imgSrc.set(src);\n this.originWidth.set(this.resizeData().width);\n this.originHeight.set(this.resizeData().height);\n this.updateCropAreaPos();\n this.updateRectClipPos();\n this.changedImage(true);\n };\n }\n\n protected handlerCropWidth() {\n this.processCropWidthOrHeight('width');\n }\n\n protected handlerCropHeight() {\n this.processCropWidthOrHeight('height');\n }\n\n private processCropWidthOrHeight(cropBy: 'width' | 'height') {\n this.ratioValue.set(this.getCropRatioValue());\n const [currImgWidth, currImgHeight, currImgTop, currImgLeft] = getStylesOfElement<number>(this.imageOrigin().nativeElement, ['offsetWidth', 'offsetHeight', 'style.top', 'style.left']);\n let [cropWidth, cropHeight] = getStylesOfElement<number>(this.cropArea().nativeElement, ['offsetWidth', 'offsetHeight']);\n const [cropTop, cropLeft] = getStylesOfElement<number>(this.cropArea().nativeElement, ['style.top', 'style.left']);\n const maxCropWidth = currImgLeft + currImgWidth - cropLeft;\n const maxCropHeight = currImgHeight + currImgTop - cropTop;\n const ratio = this.originWidth() / currImgWidth;\n let cropValue = get(this.cropSize, cropBy) / ratio;\n\n cropValue = Math.min(cropValue, cropBy === 'width' ? maxCropWidth : maxCropHeight);\n cropValue = Math.max(1, cropValue);\n if (this.ratioValue()) {\n if (cropBy === 'width') {\n cropHeight = cropValue / this.ratioValue();\n cropHeight = Math.min(cropHeight, maxCropHeight);\n cropValue = cropHeight * this.ratioValue();\n this.cropSize.update(cropSize => ({ ...cropSize, height: Math.round(cropHeight * ratio) }));\n this.cropArea().nativeElement.style.height = `${cropHeight}px`;\n }\n if (cropBy === 'height') {\n cropWidth = cropValue * this.ratioValue();\n cropWidth = Math.min(cropWidth, maxCropWidth);\n cropValue = cropWidth / this.ratioValue();\n this.cropSize.update(cropSize => ({ ...cropSize, width: Math.round(cropWidth * ratio) }));\n this.cropArea().nativeElement.style.width = `${cropWidth}px`;\n }\n }\n this.cropSize.update(cropSize => ({ ...cropSize, [cropBy]: Math.round(cropValue * ratio) }));\n this.cropArea().nativeElement.style[cropBy] = `${cropValue}px`;\n const imageRect = this.imageClip().nativeElement.getBoundingClientRect();\n const cropRect = this.cropArea().nativeElement.getBoundingClientRect();\n const { width, height } = cropRect;\n const left = cropRect.left - imageRect.left;\n const top = cropRect.top - imageRect.top;\n const right = left + width;\n const bottom = top + height;\n\n this.imageClip().nativeElement.style.clip = `rect(${top}px, ${right}px, ${bottom}px, ${left}px)`;\n }\n\n private setStylesElements(element: ElementRef, styles: IStyles, isUpdateRectClipPos?: boolean) {\n if (!isNil(styles.top)) {\n element.nativeElement.style.top = `${styles.top}px`;\n }\n if (!isNil(styles.left)) {\n element.nativeElement.style.left = `${styles.left}px`;\n }\n if (!isNil(styles.width)) {\n element.nativeElement.style.width = `${styles.width}px`;\n }\n if (!isNil(styles.height)) {\n element.nativeElement.style.height = `${styles.height}px`;\n }\n if (!isNil(styles.display)) {\n element.nativeElement.style.display = styles.display;\n }\n if (!isNil(styles.src)) {\n element.nativeElement.src = styles.src;\n }\n if (!isNil(styles.clip)) {\n element.nativeElement.style.clip = styles.clip;\n }\n if (isUpdateRectClipPos) {\n this.updateRectClipPos();\n }\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n this.dynamicComponentService.remove(this.resizeComponentRef);\n // this.dynamicComponentService.remove(this.forwardComponentRef);\n }\n}\n","<libs_ui-components-modal [width]=\"'calc(100vw - 400px)'\"\n [height]=\"'calc(100vh - 100px)'\"\n [minWidth]=\"'1200px'\"\n [headerConfig]=\"{ignoreHeaderTheme: true, removeButtonClose: true}\"\n [bodyConfig]=\"{classInclude: '!p-0', scrollOverlayOptions: {scrollX: 'hidden', scrollY: 'hidden'}}\"\n [footerConfig]=\"{hidden: true}\"\n [zIndex]=\"zIndex()\"\n [buttonsFooter]=\"[]\"\n [mode]=\"'center'\">\n <div class=\"libs-ui-modal-header-custom w-full flex items-center justify-between\">\n <div class=\"w-full relative mx-[24px] h-[16px]\">\n <div class=\"flex w-full libs-ui-font-h4s absolute\">\n <libs_ui-components-popover [type]=\"'text'\"\n [config]=\"{zIndex: zIndex()}\">\n {{ 'i18n_edit_file_name' | translate:{file_name: nameFile()} }}\n </libs_ui-components-popover>\n </div>\n </div>\n <div class=\"flex items-center\">\n @if (modeShowButton() === 'save-file') {\n <libs_ui-components-buttons-button [type]=\"'button-third'\"\n [label]=\"'i18n_cancel'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px] mr-[16px]'\"\n (outClick)=\"handlerClose($event)\" />\n\n <libs_ui-components-buttons-button class=\"mr-[24px]\"\n [label]=\"'i18n_save'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n (outClick)=\"handlerSaveFile($event,'save-file')\" />\n }\n @else {\n <libs_ui-components-buttons-button [label]=\"'i18n_save_to_new_file'\"\n [type]=\"'button-outline'\"\n [classInclude]=\"'mx-[16px] py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event,'save-api-as-new-file')\" />\n <libs_ui-components-buttons-button [type]=\"'button-secondary'\"\n [label]=\"'i18n_save'\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event,'save-api')\" />\n <div class=\"h-[12px] libs-ui-border-left-general mx-[16px]\"></div>\n <libs_ui-components-buttons-button class=\"mr-[24px]\"\n [classInclude]=\"'p-[6px]'\"\n [type]=\"'button-third-hover-danger'\"\n [iconOnlyType]=\"true\"\n [disable]=\"loading()\"\n [popover]=\"{config: {content: 'i18n_exit_edit_mode', zIndex: zIndex()}}\"\n [classIconLeft]=\"'libs-ui-icon-close'\"\n (outClick)=\"handlerClose($event)\" />\n }\n </div>\n </div>\n <div class=\"libs-ui-modal-body-custom h-full w-full flex\">\n <div #imageEditorContainer\n class=\"relative w-full h-full bg-[#e6e7ea] border-radius-bottom-left-8px p-[32px]\">\n @if (loadingImage()) {\n <div class=\"absolute h-full w-full bg-[#e6e7ea] top-0 left-0 z-[5]\">\n <libs_ui-components-spinner [size]=\"'medium'\" />\n </div>\n }\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] top-0 left-[32px] z-[1]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] left-0 top-0 z-[1] rounded-bl-[8px]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] right-0 top-0 z-[1]\">\n </div>\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] bottom-0 left-[32px] z-[1]\">\n </div>\n <div #imageContainer\n class=\"relative w-full h-full rounded-bl-[8px] min-h-0\">\n <div #circleTL\n class=\"absolute z-[5]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleTR\n class=\"absolute z-[5]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBL\n class=\"absolute z-[5]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBR\n class=\"absolute z-[5]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <img #imageOrigin\n class=\"absolute border-[4px] border-[#8e61ee] rounded-[4px] w-0 h-0\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (load)=\"handlerImageLoaded()\"\n (error)=\"handlerImageError($event)\" />\n <img #imageClip\n class=\"absolute z-[1] w-0 h-0\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (error)=\"handlerImageError($event)\" />\n <div class=\"absolute top-0 left-0 right-0 bottom-0 bg-[#e6e7eab8]\">\n </div>\n <div #cropArea\n class=\"absolute z-[2] border-[4px] border-[#8e61ee] rounded-[4px]\">\n <div class=\"relative w-full h-full\">\n <div #cropTL\n class=\"absolute z-[2] left-[-18px] top-[-17px] libs-ui-image-editor-edit-cursor-nwse-resize\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBL\n class=\"absolute z-[2] left-[-17px] bottom-[-18px] libs-ui-image-editor-edit-cursor-nesw-resize rotate-[270deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropTR\n class=\"absolute z-[2] right-[-17px] top-[-17px] libs-ui-image-editor-edit-cursor-nesw-resize rotate-[90deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBR\n class=\"absolute z-[2] right-[-18px] bottom-[-17px] libs-ui-image-editor-edit-cursor-nwse-resize rotate-[180deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropLineVL\n class=\"absolute z-[1] w-[12px] left-[-6px] top-0 bottom-0 libs-ui-image-editor-edit-cursor-ew-resize\">\n </div>\n <div #cropLineVR\n class=\"absolute z-[1] w-[12px] right-[-6px] top-0 bottom-0 libs-ui-image-editor-edit-cursor-ew-resize\">\n </div>\n <div #cropLineHT\n class=\"absolute z-[1] h-[12px] left-0 top-[-6px] right-0 libs-ui-image-editor-edit-cursor-ns-resize\">\n </div>\n <div #cropLineHB\n class=\"absolute z-[1] h-[12px] left-0 right-0 bottom-[-6px] libs-ui-image-editor-edit-cursor-ns-resize\">\n </div>\n <div class=\"absolute z-[1] h-[1px] top-0 left-0 right-0\">\n </div>\n <div class=\"absolute z-[1] h-[1px] bottom-0 left-0 right-0\">\n </div>\n <div class=\"absolute z-[1] w-[1px] top-0 left-0 bottom-0\">\n </div>\n <div class=\"absolute z-[1] w-[1px] top-0 right-0 bottom-0\">\n </div>\n <div class=\"absolute z-[1] h-[2px] top-[33px] left-0 right-0\">\n </div>\n <div class=\"absolute z-[1] h-[2px] top-[66px] left-0 right-0\">\n </div>\n <div class=\"absolute z-[1] w-[2px] top-0 bottom-0 left-[33px]\">\n </div>\n <div class=\"absolute z-[1] w-[2px] top-0 bottom-0 left-[66px]\">\n </div>\n </div>\n </div>\n </div>\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n <div class=\"w-[320px] shrink-0 p-[16px] bg-[#ffffff] rounded-br-[8px] z-[2]\">\n <div class=\"flex items-center justify-between mb-[16px]\">\n <div class=\"libs-ui-font-h4m\">{{ 'i18n_cutting_ratio' | translate }}</div>\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [type]=\"'button-third'\"\n [classIconLeft]=\"'libs-ui-icon-refresh'\"\n [classInclude]=\"'p-[6px] mr-[8px]'\"\n [popover]=\"{config: {content: 'i18n_restore_the_original_state', zIndex: zIndex()}}\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerRestoreImage($event)\" />\n </div>\n <div class=\"mb-[16px] libs-ui-image-editor-edit-display-grid-gap-16\">\n @for (item of cropRatioItems(); track item.key) {\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage() || requiredCropFollowRatio()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"item.icon+' !text-[20px]'\"\n (outClick)=\"handlerSelectCropRatioItem($event, item.key)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ (item.key === 'free' ? 'i18n_custom' : item.key) | translate }}\n </div>\n </div>\n }\n </div>\n <div class=\"mb-[16px] flex\">\n <libs_ui-components-inputs-valid class=\"mr-[16px]\"\n [dataType]=\"'int'\"\n [labelConfig]=\"{labelLeft: 'i18n_width', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r'}\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originWidth()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropWidth()\" />\n <libs_ui-components-inputs-valid [dataType]=\"'int'\"\n [labelConfig]=\"{labelLeft: 'i18n_length', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r'}\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originHeight()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropHeight()\" />\n </div>\n <div class=\"libs-ui-font-h4m mb-[16px]\">{{ 'i18n_rotate_photos' | translate }}</div>\n <div class=\"flex libs-ui-image-editor-edit-display-grid-gap-16\">\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-rotate-image-outline !text-[20px]'\"\n (outClick)=\"handlerRotateImage($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_rotate_ninety_degrees' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-vertical !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'vertical')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_vertical_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-horizontal !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'horizontal')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_horizontal_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-scale !text-[20px]'\"\n (outClick)=\"handlerResize($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_resize' | translate }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n\n<ng-template #svgArrow>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\">\n <path d=\"M33.6987 14.6969L18.3309 14.6969C16.516 14.6969 15.0311 16.1818 15.0311 17.9967L15.0311 33.3645\"\n stroke=\"white\"\n stroke-width=\"5.83333\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n</ng-template>\n\n<ng-template #svgCircle>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\">\n <circle cx=\"7.5\"\n cy=\"7.5\"\n r=\"7.5\"\n fill=\"white\" />\n </svg>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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AAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,C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"}
@@ -0,0 +1,117 @@
1
+ import { AfterViewInit, ElementRef, OnDestroy } from '@angular/core';
2
+ import { IEvent } from '@libs-ui/interfaces-types';
3
+ import { IImageEditorFunctionControlEvent } from './interfaces/function-control-event.interface';
4
+ import { IAspectRatio, ICropRatioItem, ICropSize, ISaveFile, IResizeData, MODE_EDIT, TYPE_MODE_SAVE } from './interfaces/image-editor.interface';
5
+ import * as i0 from "@angular/core";
6
+ export declare class LibsUiComponentsImageEditorComponent implements AfterViewInit, OnDestroy {
7
+ private linkImageError;
8
+ protected loading: import("@angular/core").WritableSignal<boolean>;
9
+ protected loadingImage: import("@angular/core").WritableSignal<boolean>;
10
+ protected changed: import("@angular/core").WritableSignal<boolean>;
11
+ protected originWidth: import("@angular/core").WritableSignal<number>;
12
+ protected originHeight: import("@angular/core").WritableSignal<number>;
13
+ protected cropRatioItems: import("@angular/core").WritableSignal<ICropRatioItem[]>;
14
+ protected cropRatioItemSelected: import("@angular/core").WritableSignal<string>;
15
+ protected cropSize: import("@angular/core").WritableSignal<ICropSize>;
16
+ protected resizeData: import("@angular/core").WritableSignal<IResizeData>;
17
+ protected dragGridCrop: import("@angular/core").WritableSignal<boolean>;
18
+ private image;
19
+ private canvas;
20
+ private containerHeight;
21
+ private containerWidth;
22
+ private imgContainerRect;
23
+ private rectClip;
24
+ private resizeState;
25
+ private moveState;
26
+ private startMouseDim;
27
+ private dataUrlOrigin;
28
+ private ratioValue;
29
+ private readonly minHeight;
30
+ private readonly minWidth;
31
+ private readonly onDestroy;
32
+ private resizeComponentRef?;
33
+ readonly modeShowButton: import("@angular/core").InputSignal<MODE_EDIT>;
34
+ readonly mimetype: import("@angular/core").InputSignal<string | undefined>;
35
+ readonly zIndex: import("@angular/core").InputSignal<number>;
36
+ readonly imgSrc: import("@angular/core").ModelSignal<string>;
37
+ readonly originUrl: import("@angular/core").InputSignal<string | undefined>;
38
+ readonly nameFile: import("@angular/core").InputSignal<string | undefined>;
39
+ readonly hasZoom: import("@angular/core").InputSignal<boolean>;
40
+ readonly aspectRatio: import("@angular/core").ModelSignal<IAspectRatio | undefined>;
41
+ readonly requiredCropFollowRatio: import("@angular/core").InputSignal<boolean>;
42
+ readonly imageOrigin: import("@angular/core").Signal<ElementRef<any>>;
43
+ readonly imageClip: import("@angular/core").Signal<ElementRef<any>>;
44
+ readonly imageEditorContainer: import("@angular/core").Signal<ElementRef<any>>;
45
+ readonly imageContainer: import("@angular/core").Signal<ElementRef<any>>;
46
+ readonly cropArea: import("@angular/core").Signal<ElementRef<any>>;
47
+ readonly cropTL: import("@angular/core").Signal<ElementRef<any>>;
48
+ readonly cropBL: import("@angular/core").Signal<ElementRef<any>>;
49
+ readonly cropBR: import("@angular/core").Signal<ElementRef<any>>;
50
+ readonly cropTR: import("@angular/core").Signal<ElementRef<any>>;
51
+ readonly cropLineVL: import("@angular/core").Signal<ElementRef<any>>;
52
+ readonly cropLineVR: import("@angular/core").Signal<ElementRef<any>>;
53
+ readonly cropLineHT: import("@angular/core").Signal<ElementRef<any>>;
54
+ readonly cropLineHB: import("@angular/core").Signal<ElementRef<any>>;
55
+ readonly circleTL: import("@angular/core").Signal<ElementRef<any>>;
56
+ readonly circleTR: import("@angular/core").Signal<ElementRef<any>>;
57
+ readonly circleBL: import("@angular/core").Signal<ElementRef<any>>;
58
+ readonly circleBR: import("@angular/core").Signal<ElementRef<any>>;
59
+ readonly outClose: import("@angular/core").OutputEmitterRef<{
60
+ isClickButtonClose: boolean;
61
+ }>;
62
+ readonly outSaveFile: import("@angular/core").OutputEmitterRef<ISaveFile>;
63
+ readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IImageEditorFunctionControlEvent>;
64
+ private dynamicComponentService;
65
+ constructor(linkImageError: string);
66
+ ngAfterViewInit(): void;
67
+ protected handlerImageLoaded(): void;
68
+ protected handlerImageError(e: ErrorEvent): void;
69
+ private updateModalSize;
70
+ private initData;
71
+ private initMouseEvent;
72
+ private initEvent;
73
+ private updateOriginImageSize;
74
+ private setImagePosition;
75
+ private setCirclePosition;
76
+ private updateCropAreaPos;
77
+ private getCropRatioValue;
78
+ private updateRectClipPos;
79
+ private getRectClipImage;
80
+ private handlerMousemove;
81
+ protected resizeCropFollowBLDir: (e: IEvent) => void;
82
+ protected resizeCropFollowTLDir: (e: IEvent) => void;
83
+ protected resizeCropFollowTRDir: (e: IEvent) => void;
84
+ protected resizeCropFollowBRDir(e: IEvent): void;
85
+ protected resizeCropFollowVLDir: (e: IEvent) => void;
86
+ protected resizeCropFollowVRDir: (e: IEvent) => void;
87
+ protected resizeCropFollowHTDir: (e: IEvent) => void;
88
+ protected resizeCropFollowHBDir: (e: IEvent) => void;
89
+ private getRectResizeCropFollow;
90
+ private handlerMouseup;
91
+ private handlerMousewheel;
92
+ private handlerImageContainerMousedown;
93
+ private handlerCropResize;
94
+ private handlerMousedownCropArea;
95
+ private handlerMousedown;
96
+ private moveImage;
97
+ private moveClipArea;
98
+ private zoomImage;
99
+ protected handlerRotateImage(event: Event): void;
100
+ protected getOriginalImageSize(callback?: () => void): void;
101
+ protected changedImage(status: boolean): void;
102
+ protected handlerFlipImage(event: Event, mode: 'horizontal' | 'vertical'): void;
103
+ protected handlerRestoreImage(event: Event): void;
104
+ private cropImage;
105
+ protected handlerSaveFile(event: Event, modeSave: TYPE_MODE_SAVE): Promise<void>;
106
+ protected handlerClose(event: Event): Promise<void>;
107
+ protected handlerSelectCropRatioItem(event: Event, key: string): void;
108
+ protected handlerResize(event: Event): void;
109
+ protected saveResize(): void;
110
+ protected handlerCropWidth(): void;
111
+ protected handlerCropHeight(): void;
112
+ private processCropWidthOrHeight;
113
+ private setStylesElements;
114
+ ngOnDestroy(): void;
115
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsImageEditorComponent, [{ optional: true; }]>;
116
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsImageEditorComponent, "libs_ui-components-image_editor", never, { "modeShowButton": { "alias": "modeShowButton"; "required": false; "isSignal": true; }; "mimetype": { "alias": "mimetype"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "imgSrc": { "alias": "imgSrc"; "required": true; "isSignal": true; }; "originUrl": { "alias": "originUrl"; "required": false; "isSignal": true; }; "nameFile": { "alias": "nameFile"; "required": false; "isSignal": true; }; "hasZoom": { "alias": "hasZoom"; "required": false; "isSignal": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; "requiredCropFollowRatio": { "alias": "requiredCropFollowRatio"; "required": false; "isSignal": true; }; }, { "imgSrc": "imgSrcChange"; "aspectRatio": "aspectRatioChange"; "outClose": "outClose"; "outSaveFile": "outSaveFile"; "outFunctionsControl": "outFunctionsControl"; }, never, never, true, never>;
117
+ }
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './image-editor.component';
2
+ export * from './interfaces/image-editor.interface';
3
+ export * from './interfaces/function-control-event.interface';
4
+ export * from './resize/resize.component';
@@ -0,0 +1,4 @@
1
+ export interface IImageEditorFunctionControlEvent {
2
+ cropImage: () => Promise<string>;
3
+ setLoadingState: (loading: boolean) => void;
4
+ }
@@ -0,0 +1,55 @@
1
+ export interface ISaveFile {
2
+ file: Blob;
3
+ url: string;
4
+ mode: TYPE_MODE_SAVE;
5
+ }
6
+ export type TYPE_MODE_SAVE = 'save-file' | 'save-api' | 'save-api-as-new-file';
7
+ export interface ICropRatioItem {
8
+ key: 'free' | '1:1' | '2:3' | '3:2' | '3:4' | '4:3' | '9:16' | '16:9';
9
+ icon: string;
10
+ value?: number;
11
+ }
12
+ export interface IAspectRatio {
13
+ key: string;
14
+ value: number;
15
+ }
16
+ export interface ICropSize {
17
+ width: number;
18
+ height: number;
19
+ }
20
+ export interface IRectClip {
21
+ top: number;
22
+ left: number;
23
+ width: number;
24
+ height: number;
25
+ right: number;
26
+ bottom: number;
27
+ }
28
+ export interface IResizeData {
29
+ ratio: number;
30
+ width: number;
31
+ height: number;
32
+ }
33
+ export type TYPE_RESIZE_STATE = 'TL' | 'BL' | 'TR' | 'BR' | 'VL' | 'VR' | 'HT' | 'HB' | 'none';
34
+ export interface IStartMouseDim {
35
+ clientX: number;
36
+ clientY: number;
37
+ width: number;
38
+ height: number;
39
+ top: number;
40
+ left: number;
41
+ imageTop: number;
42
+ imageLeft: number;
43
+ imageWidth: number;
44
+ imageHeight: number;
45
+ }
46
+ export interface IStyles {
47
+ width?: number;
48
+ height?: number;
49
+ top?: number;
50
+ left?: number;
51
+ display?: string;
52
+ src?: string;
53
+ clip?: string;
54
+ }
55
+ export type MODE_EDIT = 'save-file' | 'save-api';
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@libs-ui/components-image-editor",
3
+ "version": "0.2.161",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.0",
6
+ "@angular/core": "^18.2.0"
7
+ },
8
+ "sideEffects": false,
9
+ "module": "fesm2022/libs-ui-components-image-editor.mjs",
10
+ "typings": "index.d.ts",
11
+ "exports": {
12
+ "./package.json": {
13
+ "default": "./package.json"
14
+ },
15
+ ".": {
16
+ "types": "./index.d.ts",
17
+ "esm2022": "./esm2022/libs-ui-components-image-editor.mjs",
18
+ "esm": "./esm2022/libs-ui-components-image-editor.mjs",
19
+ "default": "./fesm2022/libs-ui-components-image-editor.mjs"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ }
25
+ }
@@ -0,0 +1,32 @@
1
+ import { EventEmitter, OnInit } from "@angular/core";
2
+ import { IButton } from "@libs-ui/components-buttons-button";
3
+ import { IInputValidFunctionControlEvent } from "@libs-ui/components-inputs-valid";
4
+ import { IResizeData } from "../interfaces/image-editor.interface";
5
+ import { TYPE_MODAL_EVENT } from "@libs-ui/components-modal";
6
+ import * as i0 from "@angular/core";
7
+ export declare class LibsUiComponentsImageEditorResizeComponent implements OnInit {
8
+ protected buttonsFooter: Array<IButton>;
9
+ protected image: HTMLImageElement;
10
+ protected originFileSize: string;
11
+ protected currentFileSize: string;
12
+ private inputValidFunctionControl;
13
+ resizeData: IResizeData;
14
+ originWidth: number;
15
+ originHeight: number;
16
+ src: string;
17
+ zIndex?: number;
18
+ mimetype?: string;
19
+ readonly outClose: EventEmitter<void>;
20
+ readonly outSave: EventEmitter<IResizeData>;
21
+ constructor();
22
+ ngOnInit(): Promise<void>;
23
+ protected handlerResizeRatio(): Promise<void>;
24
+ private getFileSize;
25
+ protected handlerResizeWidth(): void;
26
+ protected handlerResizeHeight(): void;
27
+ private processResizeWidthOrHeight;
28
+ protected handlerInputValidFunctionControl(event: IInputValidFunctionControlEvent): void;
29
+ protected handlerEvent(event: TYPE_MODAL_EVENT): void;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsImageEditorResizeComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsImageEditorResizeComponent, "libs-ui-components-image_editor-resize", never, { "resizeData": { "alias": "resizeData"; "required": true; }; "originWidth": { "alias": "originWidth"; "required": true; }; "originHeight": { "alias": "originHeight"; "required": true; }; "src": { "alias": "src"; "required": true; }; "zIndex": { "alias": "zIndex"; "required": false; }; "mimetype": { "alias": "mimetype"; "required": false; }; }, { "outClose": "outClose"; "outSave": "outSave"; }, never, never, true, never>;
32
+ }