{"version":3,"file":"uploader-preview-item.mjs","sources":["../../../../../../../packages/components/upload/src/uploader-preview-item.tsx"],"sourcesContent":["import { type PropType, defineComponent } from 'vue'\n\n// Utils\nimport {\n  type Interceptor,\n  type Numeric,\n  callInterceptor,\n  extend,\n  getSizeStyle,\n  isDef,\n  makeRequiredProp,\n  numericProp,\n} from '@xzx-design/utils'\n\n// Components\nimport { Icon, Image, Loading } from '@xzx-design/components'\nimport { Close } from '@xzx-design/icons-vue'\nimport { bem, isImageFile, t } from './utils'\n\nimport type { ImageFit } from '@xzx-design/components'\n// Types\nimport type { UploadFileListItem } from './types'\n\nexport default defineComponent({\n  props: {\n    name: numericProp,\n    item: makeRequiredProp<PropType<UploadFileListItem>>(Object),\n    index: Number,\n    imageFit: String as PropType<ImageFit>,\n    lazyLoad: Boolean,\n    deletable: Boolean,\n    reupload: Boolean,\n    previewSize: [Number, String, Array] as PropType<\n      Numeric | [Numeric, Numeric]\n    >,\n    beforeDelete: Function as PropType<Interceptor>,\n  },\n\n  emits: ['delete', 'preview', 'reupload'],\n\n  setup(props, { emit, slots }) {\n    const renderMask = () => {\n      const { status, message } = props.item\n\n      if (status === 'uploading' || status === 'failed') {\n        const MaskIcon =\n          status === 'failed' ? (\n            <Icon name=\"close\" class={bem('mask-icon')} />\n          ) : (\n            <Loading class={bem('loading')} />\n          )\n\n        const showMessage = isDef(message) && message !== ''\n\n        return (\n          <div class={bem('mask')}>\n            {MaskIcon}\n            {showMessage && <div class={bem('mask-message')}>{message}</div>}\n          </div>\n        )\n      }\n    }\n\n    const onDelete = (event: MouseEvent) => {\n      const { name, item, index, beforeDelete } = props\n      event.stopPropagation()\n      callInterceptor(beforeDelete, {\n        args: [item, { name, index }],\n        done: () => emit('delete'),\n      })\n    }\n\n    const onPreview = () => emit('preview')\n\n    const onReupload = () => emit('reupload')\n\n    const renderDeleteIcon = () => {\n      if (props.deletable && props.item.status !== 'uploading') {\n        const slot = slots['preview-delete']\n        return (\n          <div\n            role=\"button\"\n            class={bem('preview-delete', { shadow: !slot })}\n            tabindex={0}\n            aria-label={t('delete')}\n            onClick={onDelete}\n          >\n            {slot ? (\n              slot()\n            ) : (\n              <Icon class={bem('preview-delete-icon')}>\n                <Close />\n              </Icon>\n            )}\n          </div>\n        )\n      }\n    }\n\n    const renderCover = () => {\n      if (slots['preview-cover']) {\n        const { index, item } = props\n        return (\n          <div class={bem('preview-cover')}>\n            {slots['preview-cover'](extend({ index }, item))}\n          </div>\n        )\n      }\n    }\n\n    const renderPreview = () => {\n      const { item, lazyLoad, imageFit, previewSize, reupload } = props\n\n      if (isImageFile(item)) {\n        return (\n          <Image\n            v-slots={{ default: renderCover }}\n            fit={imageFit}\n            src={item.objectUrl || item.content || item.url}\n            class={bem('preview-image')}\n            width={Array.isArray(previewSize) ? previewSize[0] : previewSize}\n            height={Array.isArray(previewSize) ? previewSize[1] : previewSize}\n            lazyLoad={lazyLoad}\n            onClick={reupload ? onReupload : onPreview}\n          />\n        )\n      }\n\n      return (\n        <div class={bem('file')} style={getSizeStyle(props.previewSize)}>\n          <Icon class={bem('file-icon')} name=\"description\" />\n          <div class={[bem('file-name'), 'van-ellipsis']}>\n            {item.file ? item.file.name : item.url}\n          </div>\n          {renderCover()}\n        </div>\n      )\n    }\n\n    return () => (\n      <div class={bem('preview')}>\n        {renderPreview()}\n        {renderMask()}\n        {renderDeleteIcon()}\n      </div>\n    )\n  },\n})\n"],"names":["defineComponent","props","name","numericProp","item","makeRequiredProp","Object","index","Number","imageFit","String","lazyLoad","Boolean","deletable","reupload","previewSize","Array","beforeDelete","Function","emits","setup","emit","slots","renderMask","status","message","MaskIcon","_createVNode","Icon","bem","Loading","showMessage","isDef","onDelete","event","stopPropagation","callInterceptor","args","done","onPreview","onReupload","renderDeleteIcon","slot","shadow","t","default","Close","renderCover","extend","renderPreview","isImageFile","Image","objectUrl","content","url","isArray","getSizeStyle","file"],"mappings":"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"}