{"version":3,"file":"upload.mjs","sources":["../../src/upload/upload.tsx"],"sourcesContent":["import { defineComponent, ref, computed } from 'vue';\nimport type { InputHTMLAttributes } from 'vue';\nimport {\n  AddIcon,\n  LoadingIcon,\n  CloseIcon,\n  CloseCircleIcon,\n  UploadIcon,\n  DeleteIcon,\n  ErrorCircleFilledIcon,\n  File1Icon,\n  FileZipFilledIcon,\n  FileExcelFilledIcon,\n  FilePdfFilledIcon,\n  FileWordFilledIcon,\n  FilePowerpointFilledIcon,\n  VideoFilledIcon,\n} from 'tdesign-icons-vue-next';\nimport { isBoolean } from 'lodash-es';\nimport TImage from '../image';\nimport TImageViewer from '../image-viewer';\nimport TButton from '../button';\nimport { TdUploadProps, UploadFile } from './type';\nimport UploadProps from './props';\nimport config from '../config';\nimport useUpload from './hooks/useUpload';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../hooks/useClass';\nimport {\n  FILE_PDF_REGEXP,\n  FILE_EXCEL_REGEXP,\n  FILE_WORD_REGEXP,\n  FILE_PPT_REGEXP,\n  VIDEO_REGEXP,\n  AUDIO_REGEXP,\n  returnFileSize,\n} from '../_common/js/upload/utils';\n\nconst { prefix } = config;\n\nconst FILE_ZIP_REGEXP = /(\\.zip|\\.rar|\\.7z|\\.tar|\\.gz|\\.bz2|\\.xz)/i;\n\nexport default defineComponent({\n  name: `${prefix}-upload`,\n  components: {\n    TImage,\n  },\n  props: UploadProps,\n  emits: [\n    'update:files',\n    'update:modelValue',\n    'change',\n    'fail',\n    'preview',\n    'progress',\n    'remove',\n    'success',\n    'select-change',\n    'validate',\n    'click-upload',\n  ],\n  setup(props, { expose }) {\n    const uploadClass = usePrefixClass('upload');\n    const { globalConfig } = useConfig('upload');\n\n    const {\n      disabled,\n      displayFiles,\n      uploading,\n      inputRef,\n      uploadFilePercent,\n      uploadFiles,\n      isImageFile,\n      onNormalFileChange,\n      onInnerRemove,\n      cancelUpload,\n    } = useUpload(props);\n\n    const renderTNodeJSX = useTNodeJSX();\n\n    const showViewer = ref(false);\n    const initialIndex = ref(0);\n\n    const rootClass = computed(() => [\n      uploadClass.value,\n      `${uploadClass.value}--${props.theme || 'grid'}`,\n      { [`${uploadClass.value}--disabled`]: props.disabled },\n    ]);\n\n    const previewImgs = computed(() =>\n      displayFiles.value.filter((item) => isImageFile(item)).map((item) => item.url as string),\n    );\n\n    const handlePreview = (e: MouseEvent, file: UploadFile, index: number) => {\n      props.onPreview?.({ e, file, index });\n      if (!isImageFile(file)) return;\n      const imageIndex = displayFiles.value.filter((item, i) => isImageFile(item) && i <= index).length - 1;\n      initialIndex.value = Math.max(0, imageIndex);\n      showViewer.value = props.preview;\n    };\n\n    const triggerUpload = (e: MouseEvent) => {\n      if (disabled?.value) return;\n      inputRef.value?.click();\n      props.onClickUpload?.({ e });\n    };\n\n    const handleImageClose = ({ visible }: { visible: boolean }) => {\n      showViewer.value = visible;\n    };\n\n    const getFileTypeIcon = (file: UploadFile) => {\n      const mime = file.raw?.type || file.type || '';\n      const fileType = `${file.name || ''} ${file.url || ''} ${mime}`;\n      const baseClass = `${uploadClass.value}__file-type`;\n      if (FILE_PDF_REGEXP.test(fileType)) return <FilePdfFilledIcon class={[baseClass, `${baseClass}--pdf`]} />;\n      if (FILE_EXCEL_REGEXP.test(fileType) || /spreadsheetml/i.test(mime))\n        return <FileExcelFilledIcon class={[baseClass, `${baseClass}--excel`]} />;\n      if (FILE_PPT_REGEXP.test(fileType) || /presentationml/i.test(mime))\n        return <FilePowerpointFilledIcon class={[baseClass, `${baseClass}--ppt`]} />;\n      if (FILE_WORD_REGEXP.test(fileType) || /wordprocessingml/i.test(mime))\n        return <FileWordFilledIcon class={[baseClass, `${baseClass}--word`]} />;\n      if (VIDEO_REGEXP.test(fileType) || AUDIO_REGEXP.test(fileType))\n        return <VideoFilledIcon class={[baseClass, `${baseClass}--media`]} />;\n      if (FILE_ZIP_REGEXP.test(fileType) || /zip|compressed/i.test(mime))\n        return <FileZipFilledIcon class={[baseClass, `${baseClass}--zip`]} />;\n      return <File1Icon class={[baseClass, `${baseClass}--other`]} />;\n    };\n\n    const renderStatus = (file: UploadFile) => {\n      if (file.status !== 'fail' && file.status !== 'progress') return null;\n      return (\n        <div class={`${uploadClass.value}__progress-mask`}>\n          {file.status === 'progress' ? (\n            <>\n              <LoadingIcon class={`${uploadClass.value}__progress-loading`} />\n              <div class={`${uploadClass.value}__progress-text`}>\n                {file.percent ? `${file.percent}%` : globalConfig.value.progress.uploadingText}\n              </div>\n            </>\n          ) : (\n            <>\n              <CloseCircleIcon class={`${uploadClass.value}__progress-fail-icon`} />\n              <div class={`${uploadClass.value}__progress-text`}>{globalConfig.value.progress.failText}</div>\n            </>\n          )}\n        </div>\n      );\n    };\n\n    const reachMax = computed(() => props.max > 0 && displayFiles.value?.length >= props.max);\n\n    const renderAddContent = () => {\n      if (!props.addBtn || reachMax.value) return null;\n\n      const addBtnNode = renderTNodeJSX('addBtn', <AddIcon />);\n      const addContentNode = renderTNodeJSX('addContent');\n      return (\n        <div class={`${uploadClass.value}__item ${uploadClass.value}__item--add`} onClick={triggerUpload}>\n          <div class={`${uploadClass.value}__add-icon`}>{addContentNode || addBtnNode}</div>\n        </div>\n      );\n    };\n\n    const renderGridLayout = () => (\n      <>\n        {displayFiles.value.map((file, index) => {\n          const isFileItem = !isImageFile(file) && !file.url;\n          const showFileContent = isFileItem && file.status !== 'progress' && file.status !== 'fail';\n          const showRemoveBtn = isBoolean(file.removeBtn) ? file.removeBtn : props.removeBtn;\n          const showDisabledMask =\n            disabled?.value && !isFileItem && file.status !== 'progress' && file.status !== 'fail';\n          return (\n            <div\n              key={index}\n              class={[`${uploadClass.value}__item`, { [`${uploadClass.value}__item--file`]: isFileItem }]}\n            >\n              {file.url && (\n                <t-image\n                  class={`${uploadClass.value}__image`}\n                  shape=\"round\"\n                  {...(props.imageProps as TdUploadProps['imageProps'])}\n                  src={file.url}\n                  onClick={(e: MouseEvent) => handlePreview(e, file, index)}\n                />\n              )}\n              {showFileContent && (\n                <div\n                  class={`${uploadClass.value}__file-content`}\n                  onClick={(e: MouseEvent) => handlePreview(e, file, index)}\n                >\n                  <div class={`${uploadClass.value}__file-icon`}>{getFileTypeIcon(file)}</div>\n                  <div class={`${uploadClass.value}__file-name`}>{file.name}</div>\n                </div>\n              )}\n              {renderStatus(file)}\n              {showDisabledMask && <div class={`${uploadClass.value}__disabled-mask`} />}\n              {showRemoveBtn && (\n                <CloseIcon\n                  class={`${uploadClass.value}__delete-btn`}\n                  onClick={({ e }: any) => onInnerRemove({ e, file, index })}\n                />\n              )}\n            </div>\n          );\n        })}\n        {renderAddContent()}\n      </>\n    );\n\n    const renderListItemIcon = (file: UploadFile) => {\n      if (file.status === 'progress') {\n        return <LoadingIcon class={`${uploadClass.value}__list-item-loading`} />;\n      }\n      if (file.status === 'fail') {\n        return <ErrorCircleFilledIcon class={`${uploadClass.value}__list-item-error-icon`} />;\n      }\n      if (isImageFile(file) && file.url) {\n        return (\n          <div style={{ position: 'relative', flexShrink: 0 }}>\n            <t-image\n              class={`${uploadClass.value}__list-item-thumbnail`}\n              shape=\"round\"\n              {...(props.imageProps as TdUploadProps['imageProps'])}\n              src={file.url}\n            />\n            {disabled?.value && <div class={`${uploadClass.value}__disabled-mask`} />}\n          </div>\n        );\n      }\n      return <span class={`${uploadClass.value}__list-item-icon`}>{getFileTypeIcon(file)}</span>;\n    };\n\n    const renderListItemSubText = (file: UploadFile) => {\n      if (file.status === 'progress') {\n        const percentText = file.percent ? ` ${file.percent}%` : '';\n        return `${globalConfig.value.progress.uploadingText}${percentText}`;\n      }\n      if (file.status === 'fail') {\n        return file.response?.error || globalConfig.value.progress.failText;\n      }\n      if (file.size != null) return returnFileSize(file.size);\n      return '';\n    };\n\n    const renderListLayout = () => {\n      const addContentNode = renderTNodeJSX('addContent');\n      const addBtnNode = renderTNodeJSX('addBtn');\n      const defaultTriggerBtn = (\n        <TButton theme=\"primary\" size=\"medium\" disabled={disabled?.value}>\n          {{\n            icon: () => <UploadIcon />,\n            default: () => 'Upload',\n          }}\n        </TButton>\n      );\n      const triggerNode = addContentNode || addBtnNode || defaultTriggerBtn;\n      const showTrigger = props.addBtn && !reachMax.value;\n\n      return (\n        <>\n          {showTrigger && (\n            <div class={`${uploadClass.value}__list-trigger`} onClick={triggerUpload}>\n              {triggerNode}\n            </div>\n          )}\n          {displayFiles.value.length > 0 && (\n            <div class={`${uploadClass.value}__list`}>\n              {displayFiles.value.map((file, index) => {\n                const itemClass = [\n                  `${uploadClass.value}__list-item`,\n                  {\n                    [`${uploadClass.value}__list-item--fail`]: file.status === 'fail',\n                    [`${uploadClass.value}__list-item--progress`]: file.status === 'progress',\n                  },\n                ];\n                const showRemoveBtn = isBoolean(file.removeBtn) ? file.removeBtn : props.removeBtn;\n                return (\n                  <div key={index} class={itemClass} onClick={(e: MouseEvent) => handlePreview(e, file, index)}>\n                    {renderListItemIcon(file)}\n                    <div class={`${uploadClass.value}__list-item-content`}>\n                      <div class={`${uploadClass.value}__list-item-name`}>{file.name}</div>\n                      <div class={`${uploadClass.value}__list-item-size`}>{renderListItemSubText(file)}</div>\n                    </div>\n                    <div class={`${uploadClass.value}__list-item-action`}>\n                      {showRemoveBtn && (\n                        <DeleteIcon\n                          class={`${uploadClass.value}__list-item-delete`}\n                          onClick={({ e }: any) => {\n                            e?.stopPropagation?.();\n                            onInnerRemove({ e, file, index });\n                          }}\n                        />\n                      )}\n                    </div>\n                  </div>\n                );\n              })}\n            </div>\n          )}\n        </>\n      );\n    };\n\n    expose({\n      upload: inputRef.value,\n      uploading,\n      triggerUpload,\n      uploadFiles,\n      cancelUpload,\n      uploadFilePercent,\n    });\n\n    return () => (\n      <div class={rootClass.value}>\n        {props.theme === 'list' ? renderListLayout() : renderGridLayout()}\n        <input\n          ref={inputRef}\n          type=\"file\"\n          multiple={props.multiple}\n          hidden\n          {...(props.capture ? { capture: props.capture as InputHTMLAttributes['capture'] } : {})}\n          accept={props.accept}\n          onChange={onNormalFileChange}\n        />\n        <TImageViewer\n          visible={showViewer.value}\n          images={previewImgs.value}\n          index={initialIndex.value}\n          onClose={handleImageClose}\n        />\n      </div>\n    );\n  },\n});\n"],"names":["prefix","config","FILE_ZIP_REGEXP","defineComponent","name","components","TImage","props","UploadProps","emits","setup","_ref","expose","uploadClass","usePrefixClass","_useConfig","useConfig","globalConfig","_useUpload","useUpload","disabled","displayFiles","uploading","inputRef","uploadFilePercent","uploadFiles","isImageFile","onNormalFileChange","onInnerRemove","cancelUpload","renderTNodeJSX","useTNodeJSX","showViewer","ref","initialIndex","rootClass","computed","value","concat","theme","_defineProperty","previewImgs","filter","item","map","url","handlePreview","e","file","index","_props$onPreview","onPreview","call","imageIndex","i","length","Math","max","preview","triggerUpload","_inputRef$value","_props$onClickUpload","click","onClickUpload","handleImageClose","_ref3","visible","getFileTypeIcon","_file$raw","mime","raw","type","fileType","baseClass","FILE_PDF_REGEXP","test","_createVNode","FilePdfFilledIcon","FILE_EXCEL_REGEXP","FileExcelFilledIcon","FILE_PPT_REGEXP","FilePowerpointFilledIcon","FILE_WORD_REGEXP","FileWordFilledIcon","VIDEO_REGEXP","AUDIO_REGEXP","VideoFilledIcon","FileZipFilledIcon","File1Icon","renderStatus","status","_Fragment","LoadingIcon","percent","progress","uploadingText","failText","reachMax","_displayFiles$value","renderAddContent","addBtn","addBtnNode","AddIcon","addContentNode","renderGridLayout","isFileItem","showFileContent","showRemoveBtn","isBoolean","removeBtn","showDisabledMask","imageProps","onClick","_ref5","renderListItemIcon","ErrorCircleFilledIcon","position","flexShrink","_resolveComponent","_mergeProps","renderListItemSubText","percentText","_file$response","response","error","size","returnFileSize","renderListLayout","defaultTriggerBtn","TButton","icon","UploadIcon","default","triggerNode","showTrigger","itemClass","DeleteIcon","_ref7","_e$stopPropagation","stopPropagation","upload","multiple","capture","accept","TImageViewer"],"mappings":"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"}