vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 44.7 kB
Source Map (JSON)
{"version":3,"file":"upload.cjs","sources":["../../../components/upload/upload.tsx"],"sourcesContent":["import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { UploadList } from '@/components/upload-list'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, defineComponent, onBeforeUnmount, ref, renderSlot, toRef, watch } from 'vue'\n\nimport {\n createIconProp,\n createStateProp,\n emitEvent,\n useIcons,\n useLocale,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { isClient, isDefined, isFalse, isPromise, noop, randomString } from '@vexip-ui/utils'\nimport { uploadProps } from './props'\nimport { upload } from './request'\nimport { StatusType, uploadListTypes } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type {\n DirectoryEntity,\n UploadFileOptions,\n UploadFileState,\n UploadHttpError,\n UploadSourceFile,\n} from './symbol'\n\nfunction getDefaultFileState(): UploadFileState {\n return {\n id: randomString(),\n name: '',\n size: 0,\n type: '',\n base64: null,\n status: StatusType.PENDING,\n percentage: 0,\n source: null,\n url: null,\n path: '',\n xhr: null,\n response: null,\n error: null,\n abort: noop,\n }\n}\n\nexport default defineComponent({\n name: 'Upload',\n props: uploadProps,\n emits: ['update:file-list'],\n setup(_props, { slots, emit, expose }) {\n const {\n idFor,\n labelId,\n state,\n disabled,\n loading,\n size,\n validateField,\n getFieldValue,\n setFieldValue,\n } = useFieldStore<UploadFileOptions[]>(focus)\n\n const props = useProps('upload', _props, {\n state: createStateProp(state),\n locale: null,\n url: {\n default: '',\n static: true,\n },\n fileList: {\n default: () => getFieldValue(),\n static: true,\n },\n multiple: false,\n tip: '',\n accept: null,\n filter: '',\n maxSize: {\n default: null,\n validator: value => value >= 0,\n },\n field: 'file',\n data: () => ({}),\n headers: () => ({}),\n withCredentials: false,\n manual: false,\n hiddenFiles: false,\n countLimit: {\n default: 0,\n validator: value => value >= 0,\n },\n allowDrag: false,\n onBeforeUpload: {\n default: null,\n isFunc: true,\n },\n onBeforeSelect: {\n default: null,\n isFunc: true,\n },\n iconRenderer: {\n default: null,\n isFunc: true,\n },\n selectToAdd: false,\n listType: {\n default: 'name',\n validator: value => uploadListTypes.includes(value),\n },\n block: false,\n loadingText: null,\n directory: false,\n pathField: 'path',\n disabledClick: false,\n buttonLabel: null,\n disabled: () => disabled.value,\n loading: () => loading.value,\n loadingIcon: createIconProp(),\n loadingLock: false,\n loadingEffect: null,\n image: false,\n defaultFiles: () => [],\n // canPreview: don't set, using UploadFile default value\n listStyle: null,\n name: {\n default: '',\n static: true,\n },\n customFetch: {\n default: null,\n isFunc: true,\n },\n slots: () => ({}),\n })\n\n const nh = useNameHelper('upload')\n const locale = useLocale('upload', toRef(props, 'locale'))\n const icons = useIcons()\n const fileStates = ref([]) as Ref<UploadFileState[]>\n const isDragOver = ref(false)\n\n const input = ref<HTMLInputElement>()\n const button = ref<InstanceType<typeof Button>>()\n const panel = ref<HTMLElement>()\n\n const readonly = computed(() => props.loading && props.loadingLock)\n const className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n nh.bm(`type-${props.listType}`),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm(props.state)]: props.state !== 'default',\n [nh.bm('multiple')]: props.multiple,\n [nh.bm('drag')]: props.allowDrag,\n [nh.bm('to-add')]: props.selectToAdd,\n [nh.bm('block')]: props.block,\n [nh.bm('drag-only')]: props.disabledClick,\n [nh.bm('image')]: props.image,\n [nh.bm('has-file')]: !props.hiddenFiles && renderFiles.value.length,\n [nh.bm('readonly')]: readonly.value,\n [nh.bm('loading')]: props.loading,\n },\n ]\n })\n const controlClass = computed(() => {\n if (props.image) {\n return {\n [nh.be('image-control')]: true,\n [nh.bem('image-control', 'drag-over')]: isDragOver.value,\n [nh.bem('image-control', 'disabled')]: props.disabled,\n }\n }\n\n return {\n [nh.be('control')]: true,\n [nh.bem('control', 'drag-over')]: isDragOver.value,\n }\n })\n const acceptString = computed(() => {\n const accept = props.image ? (props.accept?.length ? props.accept : 'image/*') : props.accept\n\n return accept && (typeof accept === 'string' ? accept : accept.join())\n })\n const defaultList = computed(() => props.defaultFiles.map(file => createFileState(file)))\n const renderFiles = computed(() => {\n return defaultList.value\n .concat(fileStates.value)\n .filter(item => item.status !== StatusType.DELETE)\n })\n\n watch(\n () => props.fileList,\n value => {\n const idMap = new Map<string | number, UploadFileState>()\n const fileMap = new Map<UploadSourceFile, UploadFileState>()\n\n for (const state of fileStates.value) {\n if (isDefined(state.id)) {\n idMap.set(state.id, state)\n }\n\n if (state.source) {\n fileMap.set(state.source, state)\n }\n }\n\n fileStates.value = (value || []).map(file =>\n createFileState(\n file,\n file.id ? idMap.get(file.id) : file.source ? fileMap.get(file.source) : undefined,\n ),\n )\n syncInputFiles()\n },\n { immediate: true, deep: true },\n )\n\n expose({\n isDragOver,\n execute,\n handleDelete,\n focus,\n blur: () => {\n button.value?.$el.blur()\n panel.value?.blur()\n },\n })\n\n function focus(options?: FocusOptions) {\n if (button.value?.$el) {\n button.value.$el.focus(options)\n } else {\n panel.value?.focus(options)\n }\n }\n\n function handleClick() {\n if (props.disabled || readonly.value) return\n\n !props.disabledClick && input.value?.click()\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n const key = event.code || event.key\n\n if (key === 'Enter' || key === 'Space') {\n handleClick()\n }\n }\n\n function handleInputChange(event: Event) {\n const target = event.target as HTMLInputElement\n\n if (target?.files) {\n handleFilesChange(target.files)\n }\n }\n\n async function handleFilesChange(inputFiles: FileList | UploadSourceFile[]) {\n const originFiles = Array.from(inputFiles || []) as UploadSourceFile[]\n const shouldAdd = props.selectToAdd\n const files = shouldAdd ? Array.from(fileStates.value) : []\n\n for (const file of originFiles) {\n if (!file.path) {\n file.path = file.webkitRelativePath\n }\n\n let fileState = getFileStateBySource(file)\n\n if (fileState) {\n if (\n fileState.status !== StatusType.SUCCESS &&\n fileState.status !== StatusType.UPLOADING\n ) {\n fileState.status = StatusType.PENDING\n }\n } else {\n fileState = createFileState({\n name: file.name,\n size: file.size,\n type: file.type,\n source: file,\n })\n }\n\n if (typeof props.onBeforeSelect === 'function') {\n let result = props.onBeforeSelect(fileState, files)\n\n if (isPromise(result)) {\n result = await result\n }\n\n if (isFalse(result)) continue\n }\n\n if (!files.includes(fileState)) {\n files.push(fileState)\n }\n }\n\n const countLimit = props.countLimit\n\n if (countLimit > 0 && files.length > countLimit) {\n const exceedFiles = files.slice(countLimit)\n\n emitEvent(props.onExceed, exceedFiles)\n fileStates.value = files.slice(0, countLimit)\n } else {\n fileStates.value = files\n }\n\n syncInputFiles()\n emitChangeEvent()\n\n if (!props.manual) {\n execute()\n }\n }\n\n function emitChangeEvent() {\n emit('update:file-list', fileStates.value)\n setFieldValue(fileStates.value)\n emitEvent(props.onChange, fileStates.value)\n validateField()\n }\n\n function getFileStateBySource(file: UploadSourceFile) {\n const { name, size, type } = file\n const path = file.path || file.webkitRelativePath\n\n return fileStates.value.find(({ source }) => {\n return (\n source &&\n (source.path || source.webkitRelativePath) === path &&\n source.name === name &&\n source.size === size &&\n source.type === type\n )\n })\n }\n\n function createFileState(\n file: UploadFileOptions,\n defaults = getDefaultFileState(),\n ): UploadFileState {\n const { id, name, size, type, base64, status, percentage, source, url, path } = file\n\n Object.assign(defaults, {\n id: id ?? defaults.id ?? randomString(),\n name: name || '',\n size: size || 0,\n type: type || '',\n base64: base64 || null,\n status: status ?? StatusType.PENDING,\n percentage: percentage || 0,\n source: source || null,\n url: url || null,\n path: path || '',\n xhr: null,\n response: null,\n error: null,\n })\n\n return defaults\n }\n\n function getFileExtension(file: UploadFileState) {\n return file.name.split('.').pop()!.toLocaleLowerCase()\n }\n\n async function execute() {\n if (!props.url || !verifyFiles()) {\n return false\n }\n\n const uploadFiles = fileStates.value.filter(\n item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\n )\n const requests: Promise<any>[] = []\n\n for (const file of uploadFiles) {\n requests.push(uploadFile(file).catch(noop))\n }\n\n return await Promise.all(requests).then(responses => responses.filter(response => response))\n }\n\n async function uploadFile(file: UploadFileState) {\n if (typeof props.onBeforeUpload === 'function') {\n let result = props.onBeforeUpload(\n file,\n fileStates.value.filter(\n item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\n ),\n )\n\n if (isPromise(result)) {\n try {\n result = await result\n } catch (e) {\n return\n }\n }\n\n if (isFalse(result)) return\n\n if (result instanceof Blob) {\n if (result instanceof File) {\n file.source = result\n } else {\n file.source = new File([result], file.name, {\n type: file.type,\n })\n }\n }\n }\n\n if (!file.source) return\n\n file.status = StatusType.UPLOADING\n\n const { url, headers, withCredentials, data, field, pathField } = props\n\n return await new Promise((resolve, reject) => {\n file.abort = (props.customFetch || upload)({\n url,\n headers,\n withCredentials,\n data,\n field,\n pathField,\n file: file.source!,\n onProgress: percent => {\n handleProgress(percent, file)\n },\n onSuccess: response => {\n handleSuccess(response, file)\n resolve(response)\n },\n onError: error => {\n handleError(error, file)\n reject(error)\n },\n onAbort: () => {\n resolve(null)\n },\n })\n })\n }\n\n function verifyFiles() {\n const limitSize = props.maxSize ? props.maxSize * 1024 : Infinity\n const filter =\n typeof props.filter === 'string'\n ? props.filter\n ? [props.filter]\n : []\n : props.filter.filter(item => item)\n\n for (let i = 0, len = fileStates.value.length; i < len; ++i) {\n const file = fileStates.value[i]\n const extension = getFileExtension(file)\n\n if (filter.length && !filter.includes(extension)) {\n emitEvent(props.onFilterError, file)\n\n return false\n }\n\n if (file.size > limitSize) {\n emitEvent(props.onSizeError, file)\n\n return false\n }\n }\n\n return true\n }\n\n function handleDelete(file: UploadFileState) {\n file.status = StatusType.DELETE\n\n file.abort?.()\n syncInputFiles()\n emitEvent(props.onDelete, file)\n emitChangeEvent()\n }\n\n function handlePreview(file: UploadFileState) {\n emitEvent(props.onPreview, file)\n }\n\n function syncInputFiles() {\n if (!isClient) return\n\n const dataTransfer = new DataTransfer()\n fileStates.value = fileStates.value.filter(item => item.status !== StatusType.DELETE)\n\n fileStates.value.forEach(item => {\n item.source && dataTransfer.items.add(item.source)\n })\n\n if (input.value) {\n input.value.files = dataTransfer.files\n }\n }\n\n function handleProgress(percent: number, file: UploadFileState) {\n if (file.status === StatusType.DELETE) return\n\n file.percentage = percent\n\n emitEvent(props.onProgress, file, percent)\n emitChangeEvent()\n }\n\n function handleSuccess(response: any, file: UploadFileState) {\n if (file.status === StatusType.DELETE) return\n\n file.status = StatusType.SUCCESS\n file.response = response\n file.error = null\n\n emitEvent(props.onSuccess, file, response)\n emitChangeEvent()\n }\n\n function handleError(error: UploadHttpError, file: UploadFileState) {\n if (file.status === StatusType.DELETE) return\n\n file.status = StatusType.FAIL\n file.error = error\n\n emitEvent(props.onError, file, error)\n emitChangeEvent()\n }\n\n let dragTimer: ReturnType<typeof setTimeout>\n\n onBeforeUnmount(() => {\n clearTimeout(dragTimer)\n })\n\n async function handleDrop(event: DragEvent) {\n if (!props.allowDrag || props.disabled || readonly.value) return\n\n clearTimeout(dragTimer)\n event.preventDefault()\n\n isDragOver.value = false\n\n if (event.dataTransfer) {\n const files = await collectDropFiles(event.dataTransfer)\n\n files.length && handleFilesChange(files)\n }\n }\n\n function handleDragEnter(event: DragEvent) {\n if (!props.allowDrag || props.disabled || readonly.value) return\n\n clearTimeout(dragTimer)\n event.preventDefault()\n\n isDragOver.value = true\n }\n\n function handleDragLeave(event: DragEvent) {\n if (!props.allowDrag || props.disabled || readonly.value) return\n\n event.preventDefault()\n\n dragTimer = setTimeout(() => {\n isDragOver.value = false\n }, 100)\n }\n\n async function collectDropFiles(dataTransfer: DataTransfer) {\n const { items, files } = dataTransfer\n\n if (!items.length) return []\n\n const collectedFiles: File[] = []\n const dirLoop: Array<{ dir: DirectoryEntity, prefix: string }> = []\n const processes: Promise<void>[] = []\n\n for (let i = 0, len = items.length; i < len; ++i) {\n const entity = items[i].webkitGetAsEntry?.()\n\n // 内核不支持\n if (!entity) return files\n\n if (entity.isFile) {\n collectedFiles.push(files[i])\n } else {\n dirLoop.push({ dir: entity as unknown as DirectoryEntity, prefix: '' })\n // directories.push(entity as unknown as DirectoryEntity)\n }\n }\n\n if (!props.directory || !dirLoop.length) return collectedFiles\n\n const fileEntries: Array<{ entry: DirectoryEntity, prefix: string }> = []\n\n let countLimit = props.countLimit - (props.selectToAdd ? fileStates.value.length : 0)\n countLimit = Math.round(countLimit) > 0 ? countLimit : 100\n\n const doProcess = () => {\n while (dirLoop.length) {\n const loop = dirLoop.shift()!\n const dir = loop.dir\n const prefix = loop.prefix ? `${loop.prefix}/${dir.name}` : dir.name\n const reader = dir.createReader()\n\n processes.push(\n new Promise<void>(resolve => {\n reader.readEntries(entries => {\n entries.forEach(entry => {\n if (entry.isFile) {\n fileEntries.push({ entry, prefix })\n } else {\n dirLoop.push({ dir: entry, prefix })\n }\n })\n\n resolve()\n })\n }),\n )\n }\n }\n\n while (true) {\n doProcess()\n await Promise.all(processes)\n\n if (!dirLoop.length || fileEntries.length >= countLimit) {\n break\n }\n }\n\n if (fileEntries.length > 0) {\n return collectedFiles.concat(\n await Promise.all(\n fileEntries.map(\n ({ entry, prefix }) =>\n new Promise<File>(resolve =>\n entry.file(file => {\n file.path = `${prefix}/${file.name}`\n resolve(file)\n }),\n ),\n ),\n ),\n )\n }\n\n return collectedFiles\n }\n\n function preventDefault(event: Event) {\n event.preventDefault()\n }\n\n function renderNormalAction() {\n return !props.allowDrag && !props.disabledClick ? (\n <>\n <Button\n ref={button}\n inherit\n size={size.value}\n type={props.state}\n disabled={props.disabled}\n loading={props.loading}\n >\n {{\n default: () => props.buttonLabel ?? locale.value.upload,\n icon: () => <Icon {...icons.value.upload} />,\n loading: () => (\n <Icon\n {...icons.value.loading}\n class={nh.be('loading-icon')}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n />\n ),\n }}\n </Button>\n {renderSlot(slots, 'tip', undefined, () => [\n <Renderer renderer={props.slots.tip}>\n {props.tip && <p class={nh.be('tip')}>{props.tip}</p>}\n </Renderer>,\n ])}\n </>\n ) : (\n <div\n ref={panel}\n class={[nh.be('drag-panel'), props.disabled && nh.bem('drag-panel', 'disabled')]}\n tabindex={0}\n >\n {renderSlot(slots, 'cloud', undefined, () => [\n <Renderer renderer={props.slots.cloud}>\n <Icon\n {...icons.value.uploadCloud}\n class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n scale={+(icons.value.uploadCloud.scale || 1) * 4}\n />\n </Renderer>,\n ])}\n {renderSlot(slots, 'tip', undefined, () => [\n <Renderer renderer={props.slots.tip}>\n <p class={nh.be('tip')}>{props.tip || locale.value.dragOrClick}</p>\n </Renderer>,\n ])}\n <Icon\n {...icons.value.loading}\n class={nh.be('loading-icon')}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n style={{ opacity: props.loading ? '100%' : '0%' }}\n />\n </div>\n )\n }\n\n function renderImageAction() {\n return (\n <button\n class={[nh.be('image-action'), props.disabled && nh.bem('image-action', 'disabled')]}\n type={'button'}\n >\n {renderSlot(\n slots,\n 'default',\n {\n isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n },\n () => [\n <Renderer\n renderer={props.slots.default}\n data={{ isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value }}\n >\n {props.loading ? (\n <Icon\n {...icons.value.loading}\n class={nh.be('loading-icon')}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n style={{ marginBottom: '6px' }}\n />\n ) : (\n <Icon\n {...icons.value.plus}\n class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n scale={+(icons.value.plus.scale || 1) * 1.2}\n style={{ marginBottom: '6px' }}\n />\n )}\n <span>{props.buttonLabel ?? locale.value.upload}</span>\n </Renderer>,\n ],\n )}\n </button>\n )\n }\n\n function renderControl() {\n const HtmlTag = props.image ? 'li' : 'div'\n\n return (\n <HtmlTag\n class={controlClass.value}\n tabindex={-1}\n onClick={handleClick}\n onDrop={handleDrop}\n onDragover={handleDragEnter}\n onDragleave={handleDragLeave}\n onKeydown={handleKeyDown}\n >\n {!props.disabledClick && (\n <input\n ref={input}\n type={'file'}\n class={nh.be('input')}\n disabled={props.disabled}\n multiple={props.multiple}\n name={props.name}\n accept={acceptString.value}\n webkitdirectory={props.directory || undefined}\n onChange={handleInputChange}\n onSubmit={preventDefault}\n />\n )}\n {props.image\n ? renderImageAction()\n : renderSlot(\n slots,\n 'default',\n {\n isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n },\n () => [\n <Renderer\n renderer={props.slots.default}\n data={{\n isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n }}\n >\n {renderNormalAction()}\n </Renderer>,\n ],\n )}\n </HtmlTag>\n )\n }\n\n function renderFileList() {\n return (\n <UploadList\n inherit\n files={renderFiles.value}\n select-to-add={props.selectToAdd}\n type={props.image ? 'thumbnail' : props.listType}\n icon-renderer={props.iconRenderer}\n loading-text={props.loadingText}\n can-preview={props.canPreview}\n style={props.listStyle}\n onDelete={handleDelete}\n onPreview={handlePreview}\n >\n {{\n item:\n slots.item || props.slots.item\n ? (params: any) =>\n renderSlot(slots, 'item', params, () => [\n <Renderer renderer={props.slots.item} data={params}></Renderer>,\n ])\n : null,\n icon:\n slots.icon || props.slots.icon\n ? (params: any) =>\n renderSlot(slots, 'icon', params, () => [\n <Renderer renderer={props.slots.icon} data={params}></Renderer>,\n ])\n : null,\n suffix: () =>\n props.image && (!props.countLimit || renderFiles.value.length < props.countLimit)\n ? renderControl()\n : null,\n }}\n </UploadList>\n )\n }\n\n return () => (\n <div id={idFor.value} class={className.value} role={'group'} aria-labelledby={labelId.value}>\n {!props.image && renderControl()}\n {!props.hiddenFiles && renderFileList()}\n </div>\n )\n },\n methods: {\n execute: noop as () => Promise<false | any[]>,\n handleDelete: noop as (file: UploadFileState) => void,\n focus: noop as (options?: FocusOptions) => void,\n blur: noop as () => void,\n },\n})\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","getDefaultFileState","id","randomString","name","size","type","base64","status","StatusType","PENDING","percentage","source","url","path","xhr","response","error","abort","noop","defineComponent","props","uploadProps","emits","setup","_props","slots","emit","expose","idFor","labelId","state","disabled","loading","validateField","getFieldValue","setFieldValue","useFieldStore","focus","useProps","createStateProp","locale","default","static","fileList","multiple","tip","accept","filter","maxSize","validator","value","field","data","headers","withCredentials","manual","hiddenFiles","countLimit","allowDrag","onBeforeUpload","isFunc","onBeforeSelect","iconRenderer","selectToAdd","listType","uploadListTypes","includes","block","loadingText","directory","pathField","disabledClick","buttonLabel","loadingIcon","createIconProp","loadingLock","loadingEffect","image","defaultFiles","listStyle","customFetch","nh","useNameHelper","useLocale","toRef","icons","useIcons","fileStates","ref","isDragOver","input","button","panel","readonly","computed","className","b","bs","bm","inherit","renderFiles","length","controlClass","be","bem","acceptString","join","defaultList","map","file","createFileState","concat","item","DELETE","watch","idMap","Map","fileMap","isDefined","set","get","undefined","syncInputFiles","immediate","deep","execute","handleDelete","blur","$el","options","handleClick","click","handleKeyDown","event","key","code","handleInputChange","target","files","handleFilesChange","inputFiles","originFiles","Array","from","webkitRelativePath","fileState","getFileStateBySource","SUCCESS","UPLOADING","result","isPromise","isFalse","push","exceedFiles","slice","emitEvent","onExceed","emitChangeEvent","onChange","find","defaults","assign","getFileExtension","split","pop","toLocaleLowerCase","verifyFiles","uploadFiles","requests","uploadFile","catch","Promise","all","then","responses","Blob","File","resolve","reject","upload","onProgress","percent","handleProgress","onSuccess","handleSuccess","onError","handleError","onAbort","limitSize","Infinity","i","len","extension","onFilterError","onSizeError","onDelete","handlePreview","onPreview","isClient","dataTransfer","DataTransfer","forEach","items","add","FAIL","dragTimer","onBeforeUnmount","clearTimeout","handleDrop","preventDefault","collectDropFiles","handleDragEnter","handleDragLeave","setTimeout","collectedFiles","dirLoop","processes","entity","webkitGetAsEntry","isFile","dir","prefix","fileEntries","Math","round","doProcess","loop","shift","reader","createReader","readEntries","entries","entry","renderNormalAction","_createVNode","_Fragment","Button","icon","Icon","_mergeProps","effect","renderSlot","Renderer","cloud","uploadCloud","scale","dragOrClick","opacity","renderImageAction","marginBottom","plus","renderControl","HtmlTag","_slot","renderFileList","UploadList","canPreview","params","suffix","methods"],"mappings":"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"}