UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 7.21 kB
{"version":3,"file":"upload-list.mjs","sources":["../../../../../../packages/components/upload/src/upload-list.vue"],"sourcesContent":["<template>\n <transition-group\n tag=\"ul\"\n :class=\"[\n nsUpload.b('list'),\n nsUpload.bm('list', listType),\n nsUpload.is('disabled', disabled),\n ]\"\n :name=\"nsList.b()\"\n >\n <li\n v-for=\"file in files\"\n :key=\"file.uid || file\"\n :class=\"[\n nsUpload.be('list', 'item'),\n nsUpload.is(file.status),\n { focusing },\n ]\"\n tabindex=\"0\"\n @keydown.delete=\"!disabled && handleRemove(file)\"\n @focus=\"focusing = true\"\n @blur=\"focusing = false\"\n @click=\"onFileClicked\"\n >\n <slot :file=\"file\">\n <img\n v-if=\"\n file.status !== 'uploading' &&\n ['picture-card', 'picture'].includes(listType)\n \"\n :class=\"nsUpload.be('list', 'item-thumbnail')\"\n :src=\"file.url\"\n alt=\"\"\n />\n <a :class=\"nsUpload.be('list', 'item-name')\" @click=\"handleClick(file)\">\n <el-icon :class=\"nsIcon.m('document')\"><document /></el-icon>\n {{ file.name }}\n </a>\n <label :class=\"nsUpload.be('list', 'item-status-label')\">\n <el-icon\n v-if=\"listType === 'text'\"\n :class=\"[nsIcon.m('upload-success'), nsIcon.m('circle-check')]\"\n >\n <circle-check />\n </el-icon>\n <el-icon\n v-else-if=\"['picture-card', 'picture'].includes(listType)\"\n :class=\"[nsIcon.m('upload-success'), nsIcon.m('check')]\"\n >\n <check />\n </el-icon>\n </label>\n <el-icon\n v-if=\"!disabled\"\n :class=\"nsIcon.m('close')\"\n @click=\"handleRemove(file)\"\n >\n <close />\n </el-icon>\n <!-- Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn-->\n <!-- This is a bug which needs to be fixed -->\n <!-- TODO: Fix the incorrect navigation interaction -->\n <i v-if=\"!disabled\" :class=\"nsIcon.m('close-tip')\">{{\n t('el.upload.deleteTip')\n }}</i>\n <el-progress\n v-if=\"file.status === 'uploading'\"\n :type=\"listType === 'picture-card' ? 'circle' : 'line'\"\n :stroke-width=\"listType === 'picture-card' ? 6 : 2\"\n :percentage=\"+file.percentage\"\n style=\"margin-top: 0.5rem\"\n />\n <span\n v-if=\"listType === 'picture-card'\"\n :class=\"nsUpload.be('list', 'item-actions')\"\n >\n <span\n :class=\"nsUpload.be('list', 'item-preview')\"\n @click=\"handlePreview(file)\"\n >\n <el-icon :class=\"nsIcon.m('zoom-in')\"><zoom-in /></el-icon>\n </span>\n <span\n v-if=\"!disabled\"\n :class=\"nsUpload.be('list', 'item-delete')\"\n @click=\"handleRemove(file)\"\n >\n <el-icon :class=\"nsIcon.m('delete')\"><delete /></el-icon>\n </span>\n </span>\n </slot>\n </li>\n </transition-group>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport { ElIcon } from '@element-plus/components/icon'\nimport {\n Document,\n Delete,\n Close,\n ZoomIn,\n Check,\n CircleCheck,\n} from '@element-plus/icons-vue'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport ElProgress from '@element-plus/components/progress'\n\nimport type { PropType } from 'vue'\nimport type { UploadFile } from './upload.type'\n\nexport default defineComponent({\n name: 'ElUploadList',\n components: {\n ElProgress,\n ElIcon,\n Document,\n Delete,\n Close,\n ZoomIn,\n Check,\n CircleCheck,\n },\n props: {\n files: {\n type: Array as PropType<UploadFile[]>,\n default: () => [] as File[],\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n handlePreview: {\n type: Function as PropType<(file: UploadFile) => void>,\n default: () => NOOP,\n },\n listType: {\n type: String as PropType<'picture' | 'picture-card' | 'text'>,\n default: 'text',\n },\n },\n emits: ['remove'],\n setup(props, { emit }) {\n const { t } = useLocale()\n const nsUpload = useNamespace('upload')\n const nsIcon = useNamespace('icon')\n const nsList = useNamespace('list')\n\n const handleClick = (file: UploadFile) => {\n props.handlePreview(file)\n }\n\n const onFileClicked = (e: Event) => {\n ;(e.target as HTMLElement).focus()\n }\n\n const handleRemove = (file: UploadFile) => {\n emit('remove', file)\n }\n return {\n focusing: ref(false),\n handleClick,\n handleRemove,\n onFileClicked,\n t,\n nsUpload,\n nsIcon,\n nsList,\n }\n },\n})\n</script>\n"],"names":["_openBlock","_createBlock","_normalizeClass","_createElementBlock","_withKeys","_createCommentVNode","_withCtx"],"mappings":";;;;;;;;;;AAgHA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAEF,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM;AAAA;AAAA,IAEjB,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS,MAAM;AAAA;AAAA,IAEjB,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA,EAGb,OAAO,CAAC;AAAA,EACR,MAAM,OAAO,EAAE,QAAQ;AACrB,UAAM,EAAE,MAAM;AACd,UAAM,WAAW,aAAa;AAC9B,UAAM,SAAS,aAAa;AAC5B,UAAM,SAAS,aAAa;AAE5B,UAAM,cAAc,CAAC,SAAqB;AACxC,YAAM,cAAc;AAAA;AAGtB,UAAM,gBAAgB,CAAC,MAAa;AAClC;AAAC,MAAC,EAAE,OAAuB;AAAA;AAG7B,UAAM,eAAe,CAAC,SAAqB;AACzC,WAAK,UAAU;AAAA;AAEjB,WAAO;AAAA,MACL,UAAU,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;SAtKEA,aAAIC;AAAA,IACP,KAAK;AAAA,WAAUC,eAAU;AAAA,MAAgB,cAAS,EAAE;AAAA,MAA0B,cAAS,GAAE,aAAa;AAAA;;;;2BAOvG;AAAA,qDAiFK;eA/EGF,aAAYG,mBAAI;AAAA,UACrB,KAAK;AAAA,UAAY,sBAAW;AAAA,YAA0B,cAAS,GAAG,QAAK;AAAA,0BAAmB;AAAA;;UAM1F,UAAO;AAAA,UACP,WAAKC,uCAAE,kBAAQ;AAAA,UACf,SAAI,sCAAE,gBAAQ;AAAA,UACd,QAAK,2CAAE;AAAA;WAER;AAAA;;cAMK,KAAK;AAAA,cACL,OAAKF,eAAQ;AAAA,cACd,KAAI,KAAE;AAAA;wCAERG,mBAGI;AAAA,+BAHK,KAAE;AAAA,cAAmC,OAAKH,eAAE,cAAY,WAAI;AAAA;eACnE;AAAA,0BAAe,oBAAE;AAAA;;yBAAsBI,QAAY;AAAA;;;oBAAU;AAAA;eAG/D,IAaQ;AAAA,+BAbK,SAAE;AAAA;eAEL;AAAA,gCADR;gBAEG,KAAK;AAAA;;yBAENA,QAAgB;AAAA;;;mDAElB,oBAKU;gBAHP,KAAK;AAAA;;yBAENA,QAAS;AAAA;;;;eAIJ;AAAA;cACN,KAAK;AAAA,cACL,OAAKJ,eAAE,cAAY;AAAA;;uBAEpBI,QAAS;AAAA;;;8CAEXD;AAAA,YACAA;AAAA,YACAA;AAAA,+BACkB;AAAA;cAAG,KAAK;AAAA,oCACxB,KAAC;AAAA,qEAGKA,mBAAW;AAAA;cAChB,KAAI;AAAA,cACJ,wBAAc,iBAAQ;AAAA,cACtB,gBAAa,KAAK,aAAU;AAAA,cAC7B;AAAA;mEAGMA,mBAAQ;AAAA,8BADhB;cAEG,KAAK;AAAA;eAEN;AAAA,iCACQ,QAAE;AAAA,gBACP,OAAKH,eAAE,iBAAc,QAAI;AAAA;iBAE1B;AAAA,4BAAe,oBAAE;AAAA;;2BAAqBI,QAAW;AAAA;;;;iBAG1C,IAAQ;AAAA;gBACd,KAAK;AAAA,gBACL,OAAKJ,eAAE,cAAY,GAAC,QAAI;AAAA;iBAEzB;AAAA,4BAAe,oBAAE;AAAA;;2BAAoBI,QAAU;AAAA;;;;;;;;;;;;;;;;;"}