{"version":3,"file":"cropper-image.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-image.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\r\n\r\nimport type Cropper from 'cropperjs'\r\nimport type { CSSProperties, ExtractPropTypes } from 'vue'\r\nimport { borderType } from '../../upload-image'\r\nimport type CropperImage from './cropper-image.vue'\r\nimport type CropperModal from './cropper-modal.vue'\r\n\r\nexport interface CropendResult {\r\n  imgBase64: string\r\n  imgInfo: Cropper.Data\r\n}\r\n\r\nexport const defaultCropperOptions: Cropper.Options = {\r\n  aspectRatio: 1,\r\n  zoomable: true,\r\n  zoomOnTouch: true,\r\n  zoomOnWheel: true,\r\n  cropBoxMovable: true,\r\n  cropBoxResizable: true,\r\n  toggleDragModeOnDblclick: true,\r\n  autoCrop: true,\r\n  autoCropArea: 1,\r\n  background: true,\r\n  highlight: true,\r\n  center: true,\r\n  responsive: true,\r\n  restore: true,\r\n  checkCrossOrigin: true,\r\n  checkOrientation: true,\r\n  scalable: true,\r\n  modal: true,\r\n  guides: true,\r\n  movable: true,\r\n  rotatable: true,\r\n}\r\n\r\nexport const cropperImageProps = buildProps({\r\n  src: {\r\n    type: String,\r\n    required: true,\r\n  },\r\n  alt: {\r\n    type: String,\r\n  },\r\n  circled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  loading: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  realTimePreview: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n  height: {\r\n    type: [String, Number],\r\n    default: '360px',\r\n  },\r\n  crossorigin: {\r\n    type: definePropType<'' | 'anonymous' | 'use-credentials' | undefined>(\r\n      String\r\n    ),\r\n    default: undefined,\r\n  },\r\n  imageStyle: {\r\n    type: definePropType<CSSProperties>(Object),\r\n    default: () => ({}),\r\n  },\r\n  options: {\r\n    type: definePropType<Cropper.Options>(Object),\r\n    default: () => ({}),\r\n  },\r\n} as const)\r\n\r\nexport const cropperImageEmits = {\r\n  cropend: (params: CropendResult) => !!params,\r\n  onReady: (cropper: Cropper) => !!cropper,\r\n  cropendError: () => true,\r\n} as const\r\n\r\nexport const maskMode = ['fade-in', 'default'] as const\r\n\r\nexport const cropperModalProps = buildProps({\r\n  circled: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  loading: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  avatar: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  avatarSize: {\r\n    type: [String, Number],\r\n    default: 64,\r\n  },\r\n  avatarType: {\r\n    type: definePropType<'square' | 'circle'>(String),\r\n    default: () => 'circle',\r\n  },\r\n  hideDelete: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  title: {\r\n    type: String,\r\n    default: '图片裁剪',\r\n  },\r\n\r\n  // 边框形态\r\n  borderType: {\r\n    type: String,\r\n    values: borderType,\r\n    default: 'dashed',\r\n  },\r\n\r\n  // 图片圆角\r\n  borderRadius: {\r\n    type: String,\r\n    default: '6px',\r\n  },\r\n  // 上传图标\r\n  uploadIcon: {\r\n    type: String,\r\n    default: 'icon-add',\r\n  },\r\n  // 上传图标大小\r\n  uploadIconSize: {\r\n    type: Number,\r\n    default: 24,\r\n  },\r\n  // 上传标题\r\n  uploadTitle: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  // 上传描述\r\n  uploadTip: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n\r\n  // 蒙层展示方式\r\n  maskMode: {\r\n    type: String,\r\n    values: maskMode,\r\n    default: 'default',\r\n  },\r\n\r\n  // 蒙层文本\r\n  maskText: {\r\n    type: String,\r\n    default: '修改',\r\n  },\r\n\r\n  // 蒙层高度\r\n  maskHeight: {\r\n    type: String,\r\n    default: '24px',\r\n  },\r\n\r\n  // 蒙层高度\r\n  maskTextSize: {\r\n    type: String,\r\n    default: '14px',\r\n  },\r\n} as const)\r\n\r\nexport const cropperModalEmits = {\r\n  confirm: (params: { blob: Blob; previewSource: string }) => !!params,\r\n  'update:avatar': (avatar: string) => !!avatar || typeof avatar === 'string',\r\n} as const\r\n\r\n// props\r\nexport type CropperImageProps = ExtractPropTypes<typeof cropperImageProps>\r\nexport type CropperModalProps = ExtractPropTypes<typeof cropperModalProps>\r\n\r\n// emits\r\nexport type CropperImageEmits = typeof cropperImageEmits\r\nexport type CropperModalEmits = typeof cropperModalEmits\r\n\r\n// instance\r\nexport type CropperImageInstance = InstanceType<typeof CropperImage>\r\nexport type CropperModalInstance = InstanceType<typeof CropperModal>\r\n"],"names":[],"mappings":"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"}