{"version":3,"file":"upload.mjs","sources":["../../src/upload/upload.tsx"],"sourcesContent":["import { computed, defineComponent } from 'vue';\nimport props from './props';\nimport NormalFile from './themes/normal-file';\nimport DraggerFile from './themes/dragger-file';\nimport ImageCard from './themes/image-card';\nimport MultipleFlowList from './themes/multiple-flow-list';\nimport useUpload from './hooks/useUpload';\nimport Button from '../button';\nimport { CommonDisplayFileProps, UploadProps } from './interface';\nimport { UploadDragEvents } from './hooks/useDrag';\nimport CustomFile from './themes/custom-file';\nimport { useContent, useTNodeJSX } from '../hooks/tnode';\nimport { useFormDisabled } from '../form/hooks';\n\nexport default defineComponent({\n  name: 'XUpload',\n\n  props,\n\n  setup(props: UploadProps, { slots, expose }) {\n    const renderContent = useContent();\n    const renderTNodeJSX = useTNodeJSX();\n    const {\n      locale,\n      classPrefix,\n      triggerUploadText,\n      toUploadFiles,\n      displayFiles,\n      uploadValue,\n      sizeOverLimitMessage,\n      uploading,\n      tipsClasses,\n      errorClasses,\n      placeholderClass,\n      inputRef,\n      onInnerRemove,\n      uploadFiles,\n      onNormalFileChange,\n      onDragFileChange,\n      onPasteFileChange,\n      triggerUpload,\n      cancelUpload,\n      uploadFilePercent,\n    } = useUpload(props);\n    const disabled = useFormDisabled();\n\n    expose({\n      upload: inputRef.value,\n      uploading,\n      triggerUpload,\n      uploadFiles,\n      cancelUpload,\n      uploadFilePercent,\n    });\n\n    const renderTrigger = () => {\n      const getDefaultTrigger = () => {\n        if (props.theme === 'file-input') {\n          return (\n            <Button disabled={disabled.value} variant=\"outline\" {...props.triggerButtonProps}>\n              {triggerUploadText.value}\n            </Button>\n          );\n        }\n        return (\n          <Button disabled={disabled.value} variant=\"outline\" icon={() => <icon-ri-upload-2-line />} {...props.triggerButtonProps}>\n            {triggerUploadText.value}\n          </Button>\n        );\n      };\n      return (\n        renderContent('default', 'trigger', {\n          params: { dragActive: false, files: uploadValue.value },\n        }) || getDefaultTrigger()\n      );\n    };\n\n    const commonDisplayFileProps = computed<CommonDisplayFileProps>(() => ({\n      accept: props.accept,\n      files: uploadValue.value,\n      toUploadFiles: toUploadFiles.value,\n      displayFiles: displayFiles.value,\n      theme: props.theme,\n      placeholder: props.placeholder,\n      disabled: disabled.value,\n      tips: props.tips,\n      status: props.status,\n      sizeOverLimitMessage: sizeOverLimitMessage.value,\n      uploading: uploading.value,\n      classPrefix: classPrefix.value,\n      tipsClasses,\n      errorClasses,\n      placeholderClass,\n      locale: locale.value,\n      autoUpload: props.autoUpload,\n      abridgeName: props.abridgeName,\n      showUploadProgress: props.showUploadProgress,\n      fileListDisplay: props.fileListDisplay,\n      onRemove: onInnerRemove,\n      uploadPastedFiles: props.uploadPastedFiles,\n      onPasteFileChange: onPasteFileChange,\n    }));\n\n    const dragProps: UploadDragEvents = {\n      onDragFileChange,\n      onDragenter: props.onDragenter,\n      onDragleave: props.onDragleave,\n      onDrop: props.onDrop,\n    };\n\n    const getNormalFileNode = () => (\n      <NormalFile\n        {...commonDisplayFileProps.value}\n        multiple={props.multiple}\n        v-slots={{\n          fileListDisplay: slots.fileListDisplay,\n          'file-list-display': slots['file-list-display'],\n        }}\n      >\n        <div class={`${classPrefix.value}-upload__trigger`} onClick={triggerUpload}>\n          {renderTrigger()}\n        </div>\n      </NormalFile>\n    );\n\n    const getSingleFileDraggerUploadNode = () => (\n      <DraggerFile\n        {...commonDisplayFileProps.value}\n        dragEvents={dragProps}\n        trigger={props.trigger}\n        cancelUpload={cancelUpload}\n        triggerUpload={triggerUpload}\n        uploadFiles={uploadFiles}\n        onCancelUpload={props.onCancelUpload}\n        v-slots={{\n          fileListDisplay: slots.fileListDisplay,\n          'file-list-display': slots['file-list-display'],\n        }}\n      />\n    );\n\n    const getImageCardUploadNode = () => (\n      <ImageCard\n        {...commonDisplayFileProps.value}\n        multiple={props.multiple}\n        max={props.max}\n        showUploadProgress={props.showUploadProgress}\n        triggerUpload={triggerUpload}\n        uploadFiles={uploadFiles}\n        cancelUpload={cancelUpload}\n        onPreview={props.onPreview}\n        v-slots={{\n          fileListDisplay: slots.fileListDisplay,\n          'file-list-display': slots['file-list-display'],\n        }}\n      />\n    );\n\n    const getFlowListNode = () => (\n      <MultipleFlowList\n        {...commonDisplayFileProps.value}\n        isBatchUpload={props.isBatchUpload}\n        draggable={props.draggable}\n        dragEvents={dragProps}\n        uploadFiles={uploadFiles}\n        cancelUpload={cancelUpload}\n        onPreview={props.onPreview}\n        showThumbnail={props.showThumbnail}\n        v-slots={{\n          fileListDisplay: slots.fileListDisplay,\n          'file-list-display': slots['file-list-display'],\n        }}\n      >\n        <div class={`${classPrefix.value}-upload__trigger`} onClick={triggerUpload}>\n          {!props.draggable && renderTrigger()}\n        </div>\n      </MultipleFlowList>\n    );\n\n    const getCustomFile = () => (\n      <CustomFile\n        {...commonDisplayFileProps.value}\n        draggable={props.draggable}\n        dragContent={props.dragContent}\n        dragEvents={dragProps}\n        triggerUpload={triggerUpload}\n        trigger={props.trigger}\n        childrenNode={slots.default}\n        v-slots={{\n          dragContent: slots.dragContent,\n          'drag-content': slots['drag-content'],\n          trigger: slots.trigger,\n        }}\n      >\n        {renderTrigger()}\n      </CustomFile>\n    );\n\n    return () => (\n      <div class={`${classPrefix.value}-upload`} onPaste={props.uploadPastedFiles && onPasteFileChange}>\n        <input\n          ref={inputRef}\n          type=\"file\"\n          disabled={disabled.value}\n          onChange={onNormalFileChange}\n          multiple={props.multiple}\n          accept={props.accept}\n          hidden\n          {...(props.inputAttributes ? { ...props.inputAttributes } : {})}\n        />\n        {['file', 'file-input'].includes(props.theme) && !props.draggable && getNormalFileNode()}\n        {['file', 'image'].includes(props.theme) && props.draggable && getSingleFileDraggerUploadNode()}\n        {props.theme === 'image' && !props.draggable && getImageCardUploadNode()}\n        {['image-flow', 'file-flow'].includes(props.theme) && getFlowListNode()}\n        {props.theme === 'custom' && getCustomFile()}\n\n        {Boolean(props.tips || slots.tips) && (\n          <small class={[tipsClasses, { [`${classPrefix.value}-upload__tips-${props.status}`]: props.status }]}>\n            {renderTNodeJSX('tips')}\n          </small>\n        )}\n      </div>\n    );\n  },\n});\n"],"names":["name","props","setup","expose","uploading","triggerUpload","uploadFiles","cancelUpload","uploadFilePercent","_createVNode","_mergeProps","_resolveComponent","params","dragActive","tipsClasses","errorClasses","placeholderClass","onRemove","onPasteFileChange","onDragFileChange"],"mappings":"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"}