import type Cropper from 'cropperjs'; import type { ButtonProps } from 'tdesign-vue-next'; import type { CSSProperties } from 'vue'; export interface apiFunParams { file: Blob; filename: string; name: string; } export interface CropendResult { imgBase64: string; imgInfo: Cropper.Data; } export interface CropperProps { src?: string; alt?: string; circled?: boolean; realTimePreview?: boolean; height?: number | string; crossorigin?: '' | 'anonymous' | 'use-credentials' | undefined; imageStyle?: CSSProperties; options?: Cropper.Options; } export interface CropperAvatarProps { width?: number | string; value?: string; showBtn?: boolean; btnProps?: ButtonProps; btnText?: string; uploadApi?: (params: apiFunParams) => Promise; size?: number; } export interface CropperModalProps { circled?: boolean; uploadApi?: (params: apiFunParams) => Promise; src?: string; size?: number; } export const defaultOptions: Cropper.Options = { aspectRatio: 1, zoomable: true, zoomOnTouch: true, zoomOnWheel: true, cropBoxMovable: true, cropBoxResizable: true, toggleDragModeOnDblclick: true, autoCrop: true, background: true, highlight: true, center: true, responsive: true, restore: true, checkCrossOrigin: true, checkOrientation: true, scalable: true, modal: true, guides: true, movable: true, rotatable: true, }; export type { Cropper as CropperType };