{"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          <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          {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","uploadCloud","scale","dragOrClick","opacity","renderImageAction","marginBottom","plus","renderControl","HtmlTag","_slot","renderFileList","UploadList","canPreview","params","suffix","methods"],"mappings":"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"}