{"version":3,"file":"tethys-pro-image-cropper.mjs","sources":["../../../../packages/components/image-cropper/cropper.component.ts","../../../../packages/components/image-cropper/cropper.component.html","../../../../packages/components/image-cropper/cropper.pipe.ts","../../../../packages/components/image-cropper/dialog.component.ts","../../../../packages/components/image-cropper/dialog.component.html","../../../../packages/components/image-cropper/module.ts","../../../../packages/components/image-cropper/tethys-pro-image-cropper.ts"],"sourcesContent":["import {\n    Component,\n    ElementRef,\n    HostBinding,\n    OnInit,\n    ViewEncapsulation,\n    effect,\n    input,\n    numberAttribute,\n    output,\n    signal,\n    viewChild\n} from '@angular/core';\nimport { isString } from '@tethys/cdk';\nimport Cropper from 'cropperjs';\nimport { ThyCropperOptions, ThyCropperShape, ThyCropperViewMode, thyCropDataChangeEvent } from './cropper.entity';\n\nimport { injectLocale } from '@tethys/pro/i18n';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\n\n@Component({\n    selector: 'thy-image-cropper',\n    templateUrl: './cropper.component.html',\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        '[class.thy-image-cropper-round]': 'thyShape() === \"round\"'\n    },\n    imports: [ThyLoadingModule]\n})\nexport class ThyImageCropperComponent implements OnInit {\n    @HostBinding('class.thy-image-cropper') cropperClass = true;\n\n    readonly image = viewChild.required<ElementRef>('image');\n\n    locale = injectLocale();\n\n    /**\n     * 图片资源\n     */\n    readonly thyImage = input.required<File | string>();\n\n    /**\n     * 图片加载的错误提示\n     * @default 图片加载错误\n     */\n    readonly thyImageErrorMessage = input<string>(this.locale().imageErrorMessage);\n\n    /**\n     * 图片裁剪模式\n     */\n    readonly thyViewMode = input<ThyCropperViewMode>();\n\n    /**\n     * 图片裁剪宽高比\n     */\n    readonly thyAspectRatio = input<number, unknown>(undefined, { transform: numberAttribute });\n\n    /**\n     * 设置裁剪形状\n     */\n    readonly thyShape = input<ThyCropperShape>('rect');\n\n    /**\n     * 设置放大缩小\n     */\n    readonly thyScale = input<number, unknown>(1, { transform: numberAttribute });\n\n    /**\n     * 设置旋转角度\n     */\n    readonly thyRotate = input<number, unknown>(undefined, { transform: numberAttribute });\n\n    /**\n     * 图片裁剪的数据更改(blob)\n     */\n    readonly thyCropDataChanged = output<thyCropDataChangeEvent>();\n\n    /**\n     * 图片加载完毕事件\n     */\n    readonly thyImageReady = output<boolean>();\n\n    public loadingDone = signal(false);\n\n    public cropper: Cropper | undefined;\n\n    public loadError: boolean = false;\n\n    // 图片文件\n    private imageFile!: File;\n\n    // 图片资源的url\n    public imageSrc!: string;\n\n    defaultCropperOptions: ThyCropperOptions = {\n        viewMode: 1,\n        aspectRatio: 1,\n        movable: false,\n        scalable: true,\n        dragMode: 'move' as Cropper.DragMode,\n        cropBoxResizable: false,\n        zoomable: true,\n        guides: false,\n        autoCrop: false,\n        zoomOnWheel: true,\n        checkCrossOrigin: true,\n        preview: '.preview-image-warp',\n        ready: (event) => {\n            this.loadingDone.set(true);\n            (this.cropper as Cropper).crop();\n            return;\n        }\n    };\n\n    cropperOptions!: ThyCropperOptions;\n\n    constructor() {\n        effect(() => {\n            const scale = this.thyScale();\n            (this.cropper as Cropper)?.scale(scale);\n        });\n\n        effect(() => {\n            const rotate = this.thyRotate();\n            (this.cropper as Cropper)?.rotateTo(rotate as number);\n        });\n\n        effect(() => {\n            const image = this.thyImage();\n            if (image) {\n                if (!isString(image)) {\n                    this.imageFile = image;\n                    this.setImageSrc();\n                } else {\n                    this.imageSrc = image;\n                }\n            } else {\n                this.onError();\n            }\n        });\n    }\n\n    ngOnInit() {}\n\n    onLoad(event: Event) {\n        this.loadError = false;\n\n        const image = event.target as HTMLImageElement;\n\n        image.addEventListener('ready', () => {\n            this.thyImageReady.emit(true);\n        });\n\n        const { viewMode, aspectRatio } = this.defaultCropperOptions;\n\n        const thyViewMode = this.thyViewMode();\n        const thyAspectRatio = this.thyAspectRatio();\n        const customCropperOptions = {\n            viewMode: thyViewMode || thyViewMode === 0 ? thyViewMode : viewMode,\n            aspectRatio: thyAspectRatio ? thyAspectRatio : aspectRatio\n        };\n\n        this.cropperOptions = Object.assign(\n            {\n                ...this.defaultCropperOptions,\n                crop: (event: any) => {\n                    this.crop();\n                }\n            },\n            customCropperOptions\n        );\n\n        if (this.cropperOptions?.checkCrossOrigin) {\n            image.crossOrigin = 'anonymous';\n        }\n\n        if (this.cropper) {\n            this.cropper.destroy();\n            this.cropper = undefined;\n        }\n        this.cropper = new Cropper(image, this.cropperOptions);\n    }\n\n    onError(event?: Event) {\n        this.loadError = true;\n        this.loadingDone.set(true);\n    }\n\n    crop = () => {\n        const cropper = this.cropper as Cropper;\n        const canvas = cropper.getCroppedCanvas();\n        const promise = new Promise((resolve) => {\n            canvas.toBlob((blob) => resolve({ blob }));\n        });\n\n        promise.then((res) => {\n            return this.thyCropDataChanged.emit(res as thyCropDataChangeEvent);\n        });\n    };\n\n    setImageSrc() {\n        this.loadingDone.set(false);\n        const reader = new FileReader();\n        reader.onloadend = () => {\n            const cropperRef = this.cropper;\n            if (cropperRef) {\n                cropperRef.destroy();\n                cropperRef.replace((reader.result as ArrayBuffer).toString(), true);\n                cropperRef.reset();\n            }\n            this.imageSrc = (reader.result as ArrayBuffer).toString();\n        };\n        if (this.imageFile) {\n            reader.readAsDataURL(this.imageFile);\n        } else {\n            this.imageSrc = '';\n        }\n    }\n}\n","<thy-loading [thyDone]=\"loadingDone()\"></thy-loading>\n\n@if (loadError) {\n  <div class=\"alert alert-warning\">{{ thyImageErrorMessage() }}</div>\n}\n\n<div class=\"cropper-content\" [class.image-ready]=\"loadingDone()\">\n  @if (imageSrc) {\n    <img #image alt=\"image\" [src]=\"imageSrc\" (load)=\"onLoad($event)\" (error)=\"onError($event)\" />\n  }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isString } from '@tethys/cdk/is';\nimport { ThyCropperImageSize } from './cropper.entity';\n\n@Pipe({\n    name: 'thyCropperSizeText',\n    standalone: true\n})\nexport class ThyCropperSizeTextPipe implements PipeTransform {\n    transform(size: ThyCropperImageSize, previewSizes?: ThyCropperImageSize[]): string {\n        if (size || previewSizes) {\n            const currentSize = previewSizes ? previewSizes[0] : size;\n            const width = parseFloat(currentSize.width as string);\n            const height = parseFloat(currentSize.height as string);\n            return width + ' x ' + height;\n        } else {\n            return '';\n        }\n    }\n}\n\n@Pipe({\n    name: 'thyCropperSizeStyle',\n    standalone: true\n})\nexport class ThyCropperSizeStylePipe implements PipeTransform {\n    transform(size: ThyCropperImageSize) {\n        if (size) {\n            const { width, height } = size;\n            if (width && height) {\n                const stringWidth = isString(width) ? width : `${width}px`;\n                const stringHeight = isString(height) ? height : `${height}px`;\n                return { width: `${stringWidth}`, height: `${stringHeight}` };\n            } else {\n                return { width: '100%', height: '100%' };\n            }\n        } else {\n            return { width: '100%', height: '100%' };\n        }\n    }\n}\n","import { NgStyle } from '@angular/common';\nimport { Component, inject, input, model, NgZone, numberAttribute, OnInit, Optional, output, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { injectLocale } from '@tethys/pro/i18n';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyDialog, ThyDialogContainer, ThyDialogModule } from 'ngx-tethys/dialog';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { ThySliderModule, ThySliderType } from 'ngx-tethys/slider';\nimport { ThyUploadModule } from 'ngx-tethys/upload';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { ThyImageCropperComponent } from './cropper.component';\nimport { ThyCropperImageSize, ThyCropperShape, ThyCropperViewMode } from './cropper.entity';\nimport { ThyCropperSizeStylePipe, ThyCropperSizeTextPipe } from './cropper.pipe';\n\n@Component({\n    selector: 'thy-image-cropper-dialog',\n    templateUrl: './dialog.component.html',\n    host: {\n        class: 'thy-dialog-content thy-image-cropper-dialog',\n        '[class.thy-image-cropper-dialog-round]': 'shape() === \"round\"'\n    },\n    imports: [\n        ThyDialogModule,\n        ThyImageCropperComponent,\n        ThySliderModule,\n        FormsModule,\n        ThyButtonModule,\n        ThyUploadModule,\n        ThyIcon,\n        NgStyle,\n        ThyCropperSizeTextPipe,\n        ThyCropperSizeStylePipe\n    ]\n})\nexport class ThyImageCropperDialogComponent implements OnInit {\n    locale = injectLocale();\n\n    /**\n     * 标题\n     * @default 图片\n     */\n    readonly title = input<string>(this.locale().image, { alias: 'thyTitle' });\n\n    /**\n     * 预览大小（支持多个预览）\n     */\n    readonly previewSizes = input.required<ThyCropperImageSize[]>({ alias: 'thyPreviewSizes' });\n\n    /**\n     * 图片资源\n     */\n    readonly image = model<File | string>('', { alias: 'thyImage' });\n\n    /**\n     * 上传提示文案\n     */\n    readonly uploadTips = input<string>(this.locale().uploadTips, { alias: 'thyUploadTips' });\n\n    /**\n     * 上传指定文件后缀类型\n     */\n    readonly uploadAcceptType = input('.jpg,.png,.jpeg', { alias: 'thyUploadAcceptType' });\n\n    /**\n     * 上传,单位`kb`，`0`表示没有任何限制\n     */\n    readonly uploadSizeThreshold = input<number, unknown>(0, { alias: 'thyUploadSizeThreshold', transform: numberAttribute });\n\n    /**\n     * 图片裁剪模式\n     */\n    readonly viewMode = input<ThyCropperViewMode>(1, { alias: 'thyViewMode' });\n\n    /**\n     * 图片裁剪宽高比\n     */\n    readonly aspectRatio = input<number | undefined>(undefined, { alias: 'thyAspectRatio' });\n\n    /**\n     * 设置裁剪形状\n     */\n    readonly shape = input<ThyCropperShape>('rect', { alias: 'thyShape' });\n\n    /**\n     * 确定按钮回调方法\n     */\n    readonly confirmAction = input.required<(file: File) => Observable<any>>({ alias: 'thyConfirmAction' });\n\n    /**\n     * 确定事件\n     */\n    readonly thyConfirm = output<File | undefined>();\n\n    readonly cropperRef = viewChild.required<ThyImageCropperComponent>('cropper');\n\n    saving = false;\n\n    notifyService = inject(ThyNotifyService);\n\n    scale = 1;\n\n    rotate = 0;\n\n    scaleConfig = {\n        maxScale: 3,\n        minScale: 0.6,\n        step: 0.1\n    };\n\n    sliderType: ThySliderType = 'primary';\n\n    constructor(\n        public dialog: ThyDialog,\n        @Optional() public dialogContainer: ThyDialogContainer,\n        private ngZone: NgZone\n    ) {}\n\n    ngOnInit(): void {}\n\n    selectImage(image: { files: File[] }) {\n        if (image.files.length > 0) {\n            this.image.set(image.files[0]);\n        }\n        this.scale = 1;\n        this.rotate = 0;\n    }\n\n    save() {\n        const cropper = (this.cropperRef() as ThyImageCropperComponent).cropper;\n        if (cropper) {\n            this.saving = true;\n            (cropper as Cropper).getCroppedCanvas().toBlob((blob) => {\n                const file = new File([blob as Blob], 'avatar.png', { type: 'image/jpeg' });\n                const confirmAction = this.confirmAction();\n                if (confirmAction) {\n                    confirmAction(file)\n                        .pipe(\n                            finalize(() => {\n                                this.saving = false;\n                            })\n                        )\n                        .subscribe(\n                            () => {\n                                this.close();\n                            },\n                            (error) => {\n                                this.notifyService.error(error);\n                            }\n                        );\n                } else {\n                    this.thyConfirm.emit(file);\n                    this.saving = false;\n                }\n            });\n        } else {\n            this.thyConfirm.emit(undefined);\n        }\n    }\n\n    close() {\n        if (this.dialogContainer) {\n            this.ngZone.run(() => {\n                this.dialog.close();\n            });\n        }\n    }\n\n    setRotate() {\n        this.rotate = this.rotate + 90;\n    }\n}\n","<thy-dialog-header [thyTitle]=\"locale().upload + title()\"></thy-dialog-header>\n<thy-dialog-body class=\"cropper-dialog-body\">\n  <div class=\"cropper-content-container\">\n    <thy-image-cropper\n      #cropper\n      [thyImage]=\"image()\"\n      [thyAspectRatio]=\"aspectRatio()\"\n      [thyViewMode]=\"viewMode()\"\n      [thyShape]=\"shape()\"\n      [thyScale]=\"scale\"\n      [thyRotate]=\"rotate\"\n    ></thy-image-cropper>\n    <div class=\"zoom-container d-flex align-items-center mt-4 mb-4\">\n      <thy-slider\n        class=\"zoom-slider\"\n        [thyType]=\"sliderType\"\n        [thyMax]=\"scaleConfig.maxScale\"\n        [thyMin]=\"scaleConfig.minScale\"\n        [thyStep]=\"scaleConfig.step\"\n        [(ngModel)]=\"scale\"\n        thySize=\"sm\"\n      ></thy-slider>\n      <div><button thyButtonIcon=\"rotate-right\" class=\"pl-2\" (click)=\"setRotate()\"></button></div>\n    </div>\n    <div class=\"avatar-text-desc\">\n      <thy-file-select\n        thyStopPropagation\n        [thySizeThreshold]=\"uploadSizeThreshold()\"\n        [thyAcceptType]=\"uploadAcceptType()\"\n        (thyOnFileSelect)=\"selectImage($event)\"\n      >\n        <a href=\"javascript:;\" class=\"link-has-icon pl-0\"><thy-icon thyIconName=\"upload\" class=\"mr-1\"></thy-icon>{{ locale().reupload }}</a>\n      </thy-file-select>\n      <span class=\"text-desc\">{{ uploadTips() }}</span>\n    </div>\n  </div>\n  <div class=\"preview-container\">\n    {{ locale().preview }}\n    <div class=\"text-center\">\n      @if (previewSizes() && previewSizes().length) {\n        @for (size of previewSizes(); track $index) {\n          <div class=\"preview-image-warp\" [ngStyle]=\"size | thyCropperSizeStyle\"></div>\n          <div class=\"preview-image-size\">{{ size | thyCropperSizeText }}</div>\n        }\n      }\n    </div>\n  </div>\n</thy-dialog-body>\n\n<thy-dialog-footer thyShowBorderTop=\"true\" [thyAlign]=\"'right'\">\n  <button class=\"cancel\" thyButton=\"link-secondary\" (click)=\"close()\">{{ locale().cancel }}</button>\n  <button thyButton=\"primary\" [thyLoading]=\"saving\" [thyLoadingText]=\"locale().uploading\" (click)=\"save()\">{{ locale().ok }}</button>\n</thy-dialog-footer>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyDialogModule } from 'ngx-tethys/dialog';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyNotifyModule } from 'ngx-tethys/notify';\nimport { ThySliderModule } from 'ngx-tethys/slider';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyUploadModule } from 'ngx-tethys/upload';\nimport { ThyImageCropperComponent } from './cropper.component';\nimport { ThyCropperSizeStylePipe, ThyCropperSizeTextPipe } from './cropper.pipe';\nimport { ThyImageCropperDialogComponent } from './dialog.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        ThyLoadingModule,\n        ThyUploadModule,\n        ThyButtonModule,\n        ThyDialogModule,\n        ThyNotifyModule,\n        ThySliderModule,\n        ThyIconModule,\n        ThyTooltipModule,\n        ThyImageCropperComponent,\n        ThyImageCropperDialogComponent,\n        ThyCropperSizeTextPipe,\n        ThyCropperSizeStylePipe\n    ],\n    exports: [ThyImageCropperComponent, ThyImageCropperDialogComponent],\n    providers: []\n})\nexport class ThyImageCropperModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isString","i1"],"mappings":"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"}