{"version":3,"file":"upload-dragger.mjs","sources":["../../../../../../packages/components/upload/src/upload-dragger.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[ns.b('dragger'), ns.is('dragover', dragover)]\"\n    @drop.prevent=\"onDrop\"\n    @dragover.prevent=\"onDragover\"\n    @dragleave.prevent=\"dragover = false\"\n  >\n    <slot></slot>\n  </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, inject } from 'vue'\nimport { useNamespace } from '@element-plus/hooks'\n\nimport type { ElUpload } from './upload.type'\n\nexport default defineComponent({\n  name: 'ElUploadDrag',\n  props: {\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: ['file'],\n  setup(props, { emit }) {\n    const uploader = inject('uploader', {} as ElUpload)\n    const ns = useNamespace('upload')\n    const dragover = ref(false)\n\n    function onDrop(e: DragEvent) {\n      if (props.disabled || !uploader) return\n      const accept = uploader.props?.accept || uploader.accept\n      dragover.value = false\n      if (!accept) {\n        emit('file', e.dataTransfer.files)\n        return\n      }\n      emit(\n        'file',\n        Array.from(e.dataTransfer.files).filter((file) => {\n          const { type, name } = file\n          const extension =\n            name.indexOf('.') > -1 ? `.${name.split('.').pop()}` : ''\n          const baseType = type.replace(/\\/.*$/, '')\n          return accept\n            .split(',')\n            .map((type) => type.trim())\n            .filter((type) => type)\n            .some((acceptedType) => {\n              if (acceptedType.startsWith('.')) {\n                return extension === acceptedType\n              }\n              if (/\\/\\*$/.test(acceptedType)) {\n                return baseType === acceptedType.replace(/\\/\\*$/, '')\n              }\n              if (/^[^/]+\\/[^/]+$/.test(acceptedType)) {\n                return type === acceptedType\n              }\n              return false\n            })\n        })\n      )\n    }\n\n    function onDragover() {\n      if (!props.disabled) dragover.value = true\n    }\n\n    return {\n      ns,\n      dragover,\n      onDrop,\n      onDragover,\n    }\n  },\n})\n</script>\n"],"names":[],"mappings":";;;;;AAgBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA,EAGb,OAAO,CAAC;AAAA,EACR,MAAM,OAAO,EAAE,QAAQ;AACrB,UAAM,WAAW,OAAO,YAAY;AACpC,UAAM,KAAK,aAAa;AACxB,UAAM,WAAW,IAAI;AAErB,oBAAgB,GAAc;AAC5B,UAAI;AAA6B;AACjC;AACA,uBAAiB;AACjB;AACE;AACA;AAAA;AAEF;AAGI,+BAAuB;AACvB,cAAM,YACJ,KAAK;AACP,cAAM,gBAAgB,QAAQ,SAAS;AACvC,sBACG,eACI,CAAC;AAGJ,2BAAiB,WAAW;AAC1B;AAAqB;AAEvB;AACE;AAAkD;AAEpD;AACE;AAAgB;AAElB;AAAO;AAAA;AAAA;AAMjB;AACE;AAAqB,iBAAS,QAAQ;AAAA;AAGxC;AAAO;AACL,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;SAvEI,kCAAO;AAAa;AACX,IACd,kEAAkB;AAAA,IAClB,iEAAmB;AAAQ;;AAE5B;;;;;;;;"}