fix(api): use bcrypt directly instead of passlib for compatibility

This commit is contained in:
bwstudio
2026-05-21 22:18:36 +08:00
parent 7f51d200f1
commit 4651781bc3
23511 changed files with 2587254 additions and 8 deletions
+13
View File
@@ -0,0 +1,13 @@
import { UploadRequestHandler } from "./upload.js";
//#region ../../packages/components/upload/src/ajax.d.ts
declare class UploadAjaxError extends Error {
name: string;
status: number;
method: string;
url: string;
constructor(message: string, status: number, method: string, url: string);
}
declare const ajaxUpload: UploadRequestHandler;
//#endregion
export { UploadAjaxError, ajaxUpload };
+71
View File
@@ -0,0 +1,71 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../_virtual/_rolldown/runtime.js");
const require_error = require("../../../utils/error.js");
let lodash_unified = require("lodash-unified");
let _vue_shared = require("@vue/shared");
//#region ../../packages/components/upload/src/ajax.ts
const SCOPE = "ElUpload";
var UploadAjaxError = class extends Error {
constructor(message, status, method, url) {
super(message);
this.name = "UploadAjaxError";
this.status = status;
this.method = method;
this.url = url;
}
};
function getError(action, option, xhr) {
let msg;
if (xhr.response) msg = `${xhr.response.error || xhr.response}`;
else if (xhr.responseText) msg = `${xhr.responseText}`;
else msg = `fail to ${option.method} ${action} ${xhr.status}`;
return new UploadAjaxError(msg, xhr.status, option.method, action);
}
function getBody(xhr) {
const text = xhr.responseText || xhr.response;
if (!text) return text;
try {
return JSON.parse(text);
} catch {
return text;
}
}
const ajaxUpload = (option) => {
if (typeof XMLHttpRequest === "undefined") require_error.throwError(SCOPE, "XMLHttpRequest is undefined");
const xhr = new XMLHttpRequest();
const action = option.action;
if (xhr.upload) xhr.upload.addEventListener("progress", (evt) => {
const progressEvt = evt;
progressEvt.percent = evt.total > 0 ? evt.loaded / evt.total * 100 : 0;
option.onProgress(progressEvt);
});
const formData = new FormData();
if (option.data) for (const [key, value] of Object.entries(option.data)) if ((0, _vue_shared.isArray)(value)) if (value.length === 2 && value[0] instanceof Blob && (0, _vue_shared.isString)(value[1])) formData.append(key, value[0], value[1]);
else value.forEach((item) => {
formData.append(key, item);
});
else formData.append(key, value);
formData.append(option.filename, option.file, option.file.name);
xhr.addEventListener("error", () => {
option.onError(getError(action, option, xhr));
});
xhr.addEventListener("load", () => {
if (xhr.status < 200 || xhr.status >= 300) return option.onError(getError(action, option, xhr));
option.onSuccess(getBody(xhr));
});
xhr.open(option.method, action, true);
if (option.withCredentials && "withCredentials" in xhr) xhr.withCredentials = true;
const headers = option.headers || {};
if (headers instanceof Headers) headers.forEach((value, key) => xhr.setRequestHeader(key, value));
else for (const [key, value] of Object.entries(headers)) {
if ((0, lodash_unified.isNil)(value)) continue;
xhr.setRequestHeader(key, String(value));
}
xhr.send(formData);
return xhr;
};
//#endregion
exports.UploadAjaxError = UploadAjaxError;
exports.ajaxUpload = ajaxUpload;
//# sourceMappingURL=ajax.js.map
@@ -0,0 +1 @@
{"version":3,"file":"ajax.js","names":[],"sources":["../../../../../../packages/components/upload/src/ajax.ts"],"sourcesContent":["import { isNil } from 'lodash-unified'\nimport { isArray, isString, throwError } from '@element-plus/utils'\n\nimport type {\n UploadProgressEvent,\n UploadRequestHandler,\n UploadRequestOptions,\n} from './upload'\n\nconst SCOPE = 'ElUpload'\n\nexport class UploadAjaxError extends Error {\n name = 'UploadAjaxError'\n status: number\n method: string\n url: string\n\n constructor(message: string, status: number, method: string, url: string) {\n super(message)\n this.status = status\n this.method = method\n this.url = url\n }\n}\n\nfunction getError(\n action: string,\n option: UploadRequestOptions,\n xhr: XMLHttpRequest\n) {\n let msg: string\n if (xhr.response) {\n msg = `${xhr.response.error || xhr.response}`\n } else if (xhr.responseText) {\n msg = `${xhr.responseText}`\n } else {\n msg = `fail to ${option.method} ${action} ${xhr.status}`\n }\n\n return new UploadAjaxError(msg, xhr.status, option.method, action)\n}\n\nfunction getBody(xhr: XMLHttpRequest): XMLHttpRequestResponseType {\n const text = xhr.responseText || xhr.response\n if (!text) {\n return text\n }\n\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nexport const ajaxUpload: UploadRequestHandler = (option) => {\n if (typeof XMLHttpRequest === 'undefined')\n throwError(SCOPE, 'XMLHttpRequest is undefined')\n\n const xhr = new XMLHttpRequest()\n const action = option.action\n\n if (xhr.upload) {\n xhr.upload.addEventListener('progress', (evt) => {\n const progressEvt = evt as UploadProgressEvent\n progressEvt.percent = evt.total > 0 ? (evt.loaded / evt.total) * 100 : 0\n option.onProgress(progressEvt)\n })\n }\n\n const formData = new FormData()\n if (option.data) {\n for (const [key, value] of Object.entries(option.data)) {\n if (isArray(value)) {\n if (\n value.length === 2 &&\n value[0] instanceof Blob &&\n isString(value[1])\n ) {\n formData.append(key, value[0], value[1])\n } else {\n value.forEach((item) => {\n formData.append(key, item)\n })\n }\n } else formData.append(key, value)\n }\n }\n formData.append(option.filename, option.file, option.file.name)\n\n xhr.addEventListener('error', () => {\n option.onError(getError(action, option, xhr))\n })\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError(getError(action, option, xhr))\n }\n option.onSuccess(getBody(xhr))\n })\n\n xhr.open(option.method, action, true)\n\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true\n }\n\n const headers = option.headers || {}\n if (headers instanceof Headers) {\n headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n } else {\n for (const [key, value] of Object.entries(headers)) {\n if (isNil(value)) continue\n xhr.setRequestHeader(key, String(value))\n }\n }\n\n xhr.send(formData)\n return xhr\n}\n"],"mappings":";;;;;;AASA,MAAM,QAAQ;AAEd,IAAa,kBAAb,cAAqC,MAAM;CAMzC,YAAY,SAAiB,QAAgB,QAAgB,KAAa;EACxE,MAAM,QAAQ;cANT;EAOL,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,MAAM;;;AAIf,SAAS,SACP,QACA,QACA,KACA;CACA,IAAI;CACJ,IAAI,IAAI,UACN,MAAM,GAAG,IAAI,SAAS,SAAS,IAAI;MAC9B,IAAI,IAAI,cACb,MAAM,GAAG,IAAI;MAEb,MAAM,WAAW,OAAO,OAAO,GAAG,OAAO,GAAG,IAAI;CAGlD,OAAO,IAAI,gBAAgB,KAAK,IAAI,QAAQ,OAAO,QAAQ,OAAO;;AAGpE,SAAS,QAAQ,KAAiD;CAChE,MAAM,OAAO,IAAI,gBAAgB,IAAI;CACrC,IAAI,CAAC,MACH,OAAO;CAGT,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;SACjB;EACN,OAAO;;;AAIX,MAAa,cAAoC,WAAW;CAC1D,IAAI,OAAO,mBAAmB,aAC5B,cAAA,WAAW,OAAO,8BAA8B;CAElD,MAAM,MAAM,IAAI,gBAAgB;CAChC,MAAM,SAAS,OAAO;CAEtB,IAAI,IAAI,QACN,IAAI,OAAO,iBAAiB,aAAa,QAAQ;EAC/C,MAAM,cAAc;EACpB,YAAY,UAAU,IAAI,QAAQ,IAAK,IAAI,SAAS,IAAI,QAAS,MAAM;EACvE,OAAO,WAAW,YAAY;GAC9B;CAGJ,MAAM,WAAW,IAAI,UAAU;CAC/B,IAAI,OAAO,MACT,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,KAAK,EACpD,KAAA,GAAA,YAAA,SAAY,MAAM,EAChB,IACE,MAAM,WAAW,KACjB,MAAM,cAAc,SAAA,GAAA,YAAA,UACX,MAAM,GAAG,EAElB,SAAS,OAAO,KAAK,MAAM,IAAI,MAAM,GAAG;MAExC,MAAM,SAAS,SAAS;EACtB,SAAS,OAAO,KAAK,KAAK;GAC1B;MAEC,SAAS,OAAO,KAAK,MAAM;CAGtC,SAAS,OAAO,OAAO,UAAU,OAAO,MAAM,OAAO,KAAK,KAAK;CAE/D,IAAI,iBAAiB,eAAe;EAClC,OAAO,QAAQ,SAAS,QAAQ,QAAQ,IAAI,CAAC;GAC7C;CAEF,IAAI,iBAAiB,cAAc;EACjC,IAAI,IAAI,SAAS,OAAO,IAAI,UAAU,KACpC,OAAO,OAAO,QAAQ,SAAS,QAAQ,QAAQ,IAAI,CAAC;EAEtD,OAAO,UAAU,QAAQ,IAAI,CAAC;GAC9B;CAEF,IAAI,KAAK,OAAO,QAAQ,QAAQ,KAAK;CAErC,IAAI,OAAO,mBAAmB,qBAAqB,KACjD,IAAI,kBAAkB;CAGxB,MAAM,UAAU,OAAO,WAAW,EAAE;CACpC,IAAI,mBAAmB,SACrB,QAAQ,SAAS,OAAO,QAAQ,IAAI,iBAAiB,KAAK,MAAM,CAAC;MAEjE,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE;EAClD,KAAA,GAAA,eAAA,OAAU,MAAM,EAAE;EAClB,IAAI,iBAAiB,KAAK,OAAO,MAAM,CAAC;;CAI5C,IAAI,KAAK,SAAS;CAClB,OAAO"}
@@ -0,0 +1,9 @@
import { InjectionKey, Ref } from "vue";
//#region ../../packages/components/upload/src/constants.d.ts
interface UploadContext {
accept: Ref<string>;
}
declare const uploadContextKey: InjectionKey<UploadContext>;
//#endregion
export { UploadContext, uploadContextKey };
@@ -0,0 +1,7 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
//#region ../../packages/components/upload/src/constants.ts
const uploadContextKey = Symbol("uploadContextKey");
//#endregion
exports.uploadContextKey = uploadContextKey;
//# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
{"version":3,"file":"constants.js","names":[],"sources":["../../../../../../packages/components/upload/src/constants.ts"],"sourcesContent":["import type { InjectionKey, Ref } from 'vue'\n\nexport interface UploadContext {\n accept: Ref<string>\n}\n\nexport const uploadContextKey: InjectionKey<UploadContext> =\n Symbol('uploadContextKey')\n"],"mappings":";;AAMA,MAAa,mBACX,OAAO,mBAAmB"}
@@ -0,0 +1,143 @@
import { EpPropFinalized, EpPropMergeType } from "../../../utils/vue/props/types.js";
import { Awaitable, Mutable } from "../../../utils/typescript.js";
import { UploadAjaxError } from "./ajax.js";
import { UploadBaseProps, UploadData, UploadFile, UploadHooks, UploadProgressEvent, UploadRawFile, UploadRequestHandler, UploadUserFile } from "./upload.js";
import _default from "./upload-content.vue.js";
import * as _$vue from "vue";
import { ExtractPublicPropTypes } from "vue";
//#region ../../packages/components/upload/src/upload-content.d.ts
interface UploadContentProps extends UploadBaseProps {
beforeUpload?: UploadHooks['beforeUpload'];
onRemove?: (file: UploadFile | UploadRawFile) => void;
onStart?: (rawFile: UploadRawFile) => void;
onSuccess?: (response: any, rawFile: UploadRawFile) => unknown;
onProgress?: (evt: UploadProgressEvent, rawFile: UploadRawFile) => void;
onError?: (err: UploadAjaxError, rawFile: UploadRawFile) => void;
onExceed?: UploadHooks['onExceed'];
}
/**
* @deprecated Removed after 3.0.0, Use `UploadContentProps` instead.
*/
declare const uploadContentProps: {
readonly beforeUpload: EpPropFinalized<(new (...args: any[]) => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | (() => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | {
(): (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | (() => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | {
(): (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onRemove: EpPropFinalized<(new (...args: any[]) => (file: UploadFile | UploadRawFile) => void) | (() => (file: UploadFile | UploadRawFile) => void) | {
(): (file: UploadFile | UploadRawFile) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (file: UploadFile | UploadRawFile) => void) | (() => (file: UploadFile | UploadRawFile) => void) | {
(): (file: UploadFile | UploadRawFile) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onStart: EpPropFinalized<(new (...args: any[]) => (rawFile: UploadRawFile) => void) | (() => (rawFile: UploadRawFile) => void) | {
(): (rawFile: UploadRawFile) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (rawFile: UploadRawFile) => void) | (() => (rawFile: UploadRawFile) => void) | {
(): (rawFile: UploadRawFile) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onSuccess: EpPropFinalized<(new (...args: any[]) => (response: any, rawFile: UploadRawFile) => unknown) | (() => (response: any, rawFile: UploadRawFile) => unknown) | {
(): (response: any, rawFile: UploadRawFile) => unknown;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (response: any, rawFile: UploadRawFile) => unknown) | (() => (response: any, rawFile: UploadRawFile) => unknown) | {
(): (response: any, rawFile: UploadRawFile) => unknown;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onProgress: EpPropFinalized<(new (...args: any[]) => (evt: UploadProgressEvent, rawFile: UploadRawFile) => void) | (() => (evt: UploadProgressEvent, rawFile: UploadRawFile) => void) | {
(): (evt: UploadProgressEvent, rawFile: UploadRawFile) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (evt: UploadProgressEvent, rawFile: UploadRawFile) => void) | (() => (evt: UploadProgressEvent, rawFile: UploadRawFile) => void) | {
(): (evt: UploadProgressEvent, rawFile: UploadRawFile) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onError: EpPropFinalized<(new (...args: any[]) => (err: UploadAjaxError, rawFile: UploadRawFile) => void) | (() => (err: UploadAjaxError, rawFile: UploadRawFile) => void) | {
(): (err: UploadAjaxError, rawFile: UploadRawFile) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (err: UploadAjaxError, rawFile: UploadRawFile) => void) | (() => (err: UploadAjaxError, rawFile: UploadRawFile) => void) | {
(): (err: UploadAjaxError, rawFile: UploadRawFile) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onExceed: EpPropFinalized<(new (...args: any[]) => (files: File[], uploadFiles: UploadUserFile[]) => void) | (() => (files: File[], uploadFiles: UploadUserFile[]) => void) | {
(): (files: File[], uploadFiles: UploadUserFile[]) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (files: File[], uploadFiles: UploadUserFile[]) => void) | (() => (files: File[], uploadFiles: UploadUserFile[]) => void) | {
(): (files: File[], uploadFiles: UploadUserFile[]) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly action: EpPropFinalized<StringConstructor, unknown, unknown, "#", boolean>;
readonly headers: {
readonly type: _$vue.PropType<EpPropMergeType<(new (...args: any[]) => Record<string, any> | Headers) | (() => Record<string, any> | Headers) | (((new (...args: any[]) => Record<string, any> | Headers) | (() => Record<string, any> | Headers)) | null)[], unknown, unknown>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly method: EpPropFinalized<StringConstructor, unknown, unknown, "post", boolean>;
readonly data: EpPropFinalized<(new (...args: any[]) => Mutable<Record<string, any>> | Promise<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (() => Awaitable<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (((new (...args: any[]) => Mutable<Record<string, any>> | Promise<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (() => Awaitable<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>))) | null)[], unknown, unknown, () => Mutable<{}>, boolean>;
readonly multiple: BooleanConstructor;
readonly name: EpPropFinalized<StringConstructor, unknown, unknown, "file", boolean>;
readonly drag: BooleanConstructor;
readonly withCredentials: BooleanConstructor;
readonly showFileList: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly accept: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
readonly fileList: EpPropFinalized<(new (...args: any[]) => UploadUserFile[]) | (() => UploadUserFile[]) | (((new (...args: any[]) => UploadUserFile[]) | (() => UploadUserFile[])) | null)[], unknown, unknown, () => [], boolean>;
readonly autoUpload: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly listType: EpPropFinalized<StringConstructor, "text" | "picture" | "picture-card", unknown, "text", boolean>;
readonly httpRequest: EpPropFinalized<(new (...args: any[]) => UploadRequestHandler) | (() => UploadRequestHandler) | {
(): UploadRequestHandler;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => UploadRequestHandler) | (() => UploadRequestHandler) | {
(): UploadRequestHandler;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, UploadRequestHandler, boolean>;
readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
readonly limit: NumberConstructor;
readonly directory: BooleanConstructor;
};
/**
* @deprecated Removed after 3.0.0, Use `UploadContentProps` instead.
*/
type UploadContentPropsPublic = ExtractPublicPropTypes<typeof uploadContentProps>;
type UploadContentInstance = InstanceType<typeof _default> & unknown;
declare const uploadContentPropsDefaults: {
readonly beforeUpload: () => void;
readonly onRemove: () => void;
readonly onStart: () => void;
readonly onSuccess: () => void;
readonly onProgress: () => void;
readonly onError: () => void;
readonly onExceed: () => void;
readonly action: "#";
readonly method: "post";
readonly data: () => Mutable<{}>;
readonly name: "file";
readonly showFileList: true;
readonly accept: "";
readonly fileList: () => never[];
readonly autoUpload: true;
readonly listType: "text";
readonly httpRequest: UploadRequestHandler;
readonly disabled: undefined;
};
//#endregion
export { UploadContentInstance, UploadContentProps, UploadContentPropsPublic, uploadContentProps, uploadContentPropsDefaults };
@@ -0,0 +1,55 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../_virtual/_rolldown/runtime.js");
const require_runtime$1 = require("../../../utils/vue/props/runtime.js");
const require_upload = require("./upload.js");
let _vue_shared = require("@vue/shared");
//#region ../../packages/components/upload/src/upload-content.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadContentProps` instead.
*/
const uploadContentProps = require_runtime$1.buildProps({
...require_upload.uploadBaseProps,
beforeUpload: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
onRemove: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
onStart: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
onSuccess: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
onProgress: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
onError: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
onExceed: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
}
});
const uploadContentPropsDefaults = {
...require_upload.uploadBasePropsDefaults,
beforeUpload: _vue_shared.NOOP,
onRemove: _vue_shared.NOOP,
onStart: _vue_shared.NOOP,
onSuccess: _vue_shared.NOOP,
onProgress: _vue_shared.NOOP,
onError: _vue_shared.NOOP,
onExceed: _vue_shared.NOOP
};
//#endregion
exports.uploadContentProps = uploadContentProps;
exports.uploadContentPropsDefaults = uploadContentPropsDefaults;
//# sourceMappingURL=upload-content.js.map
@@ -0,0 +1 @@
{"version":3,"file":"upload-content.js","names":["buildProps","uploadBaseProps","definePropType","NOOP","uploadBasePropsDefaults"],"sources":["../../../../../../packages/components/upload/src/upload-content.ts"],"sourcesContent":["import { NOOP, buildProps, definePropType } from '@element-plus/utils'\nimport { uploadBaseProps, uploadBasePropsDefaults } from './upload'\n\nimport type { ExtractPublicPropTypes } from 'vue'\nimport type {\n UploadBaseProps,\n UploadFile,\n UploadHooks,\n UploadProgressEvent,\n UploadRawFile,\n} from './upload'\nimport type UploadContent from './upload-content.vue'\nimport type { UploadAjaxError } from './ajax'\n\nexport interface UploadContentProps extends UploadBaseProps {\n beforeUpload?: UploadHooks['beforeUpload']\n onRemove?: (file: UploadFile | UploadRawFile) => void\n onStart?: (rawFile: UploadRawFile) => void\n onSuccess?: (response: any, rawFile: UploadRawFile) => unknown\n onProgress?: (evt: UploadProgressEvent, rawFile: UploadRawFile) => void\n onError?: (err: UploadAjaxError, rawFile: UploadRawFile) => void\n onExceed?: UploadHooks['onExceed']\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `UploadContentProps` instead.\n */\nexport const uploadContentProps = buildProps({\n ...uploadBaseProps,\n\n beforeUpload: {\n type: definePropType<UploadHooks['beforeUpload']>(Function),\n default: NOOP,\n },\n onRemove: {\n type: definePropType<(file: UploadFile | UploadRawFile) => void>(Function),\n default: NOOP,\n },\n onStart: {\n type: definePropType<(rawFile: UploadRawFile) => void>(Function),\n default: NOOP,\n },\n onSuccess: {\n type: definePropType<(response: any, rawFile: UploadRawFile) => unknown>(\n Function\n ),\n default: NOOP,\n },\n onProgress: {\n type: definePropType<\n (evt: UploadProgressEvent, rawFile: UploadRawFile) => void\n >(Function),\n default: NOOP,\n },\n onError: {\n type: definePropType<\n (err: UploadAjaxError, rawFile: UploadRawFile) => void\n >(Function),\n default: NOOP,\n },\n onExceed: {\n type: definePropType<UploadHooks['onExceed']>(Function),\n default: NOOP,\n },\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `UploadContentProps` instead.\n */\nexport type UploadContentPropsPublic = ExtractPublicPropTypes<\n typeof uploadContentProps\n>\n\nexport type UploadContentInstance = InstanceType<typeof UploadContent> & unknown\n\nexport const uploadContentPropsDefaults = {\n ...uploadBasePropsDefaults,\n beforeUpload: NOOP,\n onRemove: NOOP,\n onStart: NOOP,\n onSuccess: NOOP,\n onProgress: NOOP,\n onError: NOOP,\n onExceed: NOOP,\n} as const\n"],"mappings":";;;;;;;;;AA2BA,MAAa,qBAAqBA,kBAAAA,WAAW;CAC3C,GAAGC,eAAAA;CAEH,cAAc;EACZ,MAAMC,kBAAAA,eAA4C,SAAS;EAC3D,SAASC,YAAAA;EACV;CACD,UAAU;EACR,MAAMD,kBAAAA,eAA2D,SAAS;EAC1E,SAASC,YAAAA;EACV;CACD,SAAS;EACP,MAAMD,kBAAAA,eAAiD,SAAS;EAChE,SAASC,YAAAA;EACV;CACD,WAAW;EACT,MAAMD,kBAAAA,eACJ,SACD;EACD,SAASC,YAAAA;EACV;CACD,YAAY;EACV,MAAMD,kBAAAA,eAEJ,SAAS;EACX,SAASC,YAAAA;EACV;CACD,SAAS;EACP,MAAMD,kBAAAA,eAEJ,SAAS;EACX,SAASC,YAAAA;EACV;CACD,UAAU;EACR,MAAMD,kBAAAA,eAAwC,SAAS;EACvD,SAASC,YAAAA;EACV;CACF,CAAU;AAWX,MAAa,6BAA6B;CACxC,GAAGC,eAAAA;CACH,cAAcD,YAAAA;CACd,UAAUA,YAAAA;CACV,SAASA,YAAAA;CACT,WAAWA,YAAAA;CACX,YAAYA,YAAAA;CACZ,SAASA,YAAAA;CACT,UAAUA,YAAAA;CACX"}
@@ -0,0 +1,45 @@
import { Awaitable } from "../../../utils/typescript.js";
import { UploadAjaxError } from "./ajax.js";
import { ListType, UploadData, UploadFile, UploadHooks, UploadProgressEvent, UploadRawFile, UploadRequestHandler, UploadUserFile } from "./upload.js";
import { UploadContentProps } from "./upload-content.js";
import * as _$vue from "vue";
//#region ../../packages/components/upload/src/upload-content.vue.d.ts
declare var __VLS_9: {}, __VLS_11: {};
type __VLS_Slots = {} & {
default?: (props: typeof __VLS_9) => any;
} & {
default?: (props: typeof __VLS_11) => any;
};
declare const __VLS_base: _$vue.DefineComponent<UploadContentProps, {
abort: (file?: UploadFile) => void;
upload: (rawFile: UploadRawFile) => Promise<void>;
}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<UploadContentProps> & Readonly<{}>, {
name: string;
disabled: boolean;
onError: (err: UploadAjaxError, rawFile: UploadRawFile) => void;
onProgress: (evt: UploadProgressEvent, rawFile: UploadRawFile) => void;
data: Awaitable<UploadData> | ((rawFile: UploadRawFile) => Awaitable<UploadData>);
beforeUpload: UploadHooks["beforeUpload"];
onRemove: (file: UploadFile | UploadRawFile) => void;
onSuccess: (response: any, rawFile: UploadRawFile) => unknown;
onExceed: UploadHooks["onExceed"];
action: string;
method: string;
showFileList: boolean;
accept: string;
fileList: UploadUserFile[];
autoUpload: boolean;
listType: ListType;
httpRequest: UploadRequestHandler;
onStart: (rawFile: UploadRawFile) => void;
}, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
declare const _default: typeof __VLS_export;
type __VLS_WithSlots<T, S> = T & {
new (): {
$slots: S;
};
};
//#endregion
export { _default as default };
@@ -0,0 +1,174 @@
require("../../../_virtual/_rolldown/runtime.js");
const require_objects = require("../../../utils/objects.js");
const require_index = require("../../../hooks/use-namespace/index.js");
const require_use_form_common_props = require("../../form/src/hooks/use-form-common-props.js");
const require_upload = require("./upload.js");
const require_upload_content = require("./upload-content.js");
const require_upload_dragger = require("./upload-dragger2.js");
let lodash_unified = require("lodash-unified");
let vue = require("vue");
let _vue_shared = require("@vue/shared");
//#region ../../packages/components/upload/src/upload-content.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1 = [
"tabindex",
"aria-disabled",
"onKeydown"
];
const _hoisted_2 = [
"name",
"disabled",
"multiple",
"accept",
"webkitdirectory"
];
var upload_content_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElUploadContent",
inheritAttrs: false,
__name: "upload-content",
props: require_upload_content.uploadContentProps,
setup(__props, { expose: __expose }) {
const props = __props;
const ns = require_index.useNamespace("upload");
const disabled = require_use_form_common_props.useFormDisabled();
const requests = (0, vue.shallowRef)({});
const inputRef = (0, vue.shallowRef)();
const uploadFiles = (files) => {
if (files.length === 0) return;
const { autoUpload, limit, fileList, multiple, onStart, onExceed } = props;
if (limit && fileList.length + files.length > limit) {
onExceed(files, fileList);
return;
}
if (!multiple) files = files.slice(0, 1);
for (const file of files) {
const rawFile = file;
rawFile.uid = require_upload.genFileId();
onStart(rawFile);
if (autoUpload) upload(rawFile);
}
};
const upload = async (rawFile) => {
inputRef.value.value = "";
if (!props.beforeUpload) return doUpload(rawFile);
let hookResult;
let beforeData = {};
try {
const originData = props.data;
const beforeUploadPromise = props.beforeUpload(rawFile);
beforeData = (0, _vue_shared.isPlainObject)(props.data) ? (0, lodash_unified.cloneDeep)(props.data) : props.data;
hookResult = await beforeUploadPromise;
if ((0, _vue_shared.isPlainObject)(props.data) && (0, lodash_unified.isEqual)(originData, beforeData)) beforeData = (0, lodash_unified.cloneDeep)(props.data);
} catch {
hookResult = false;
}
if (hookResult === false) {
props.onRemove(rawFile);
return;
}
let file = rawFile;
if (hookResult instanceof Blob) if (hookResult instanceof File) file = hookResult;
else file = new File([hookResult], rawFile.name, { type: rawFile.type });
doUpload(Object.assign(file, { uid: rawFile.uid }), beforeData);
};
const resolveData = async (data, rawFile) => {
if ((0, _vue_shared.isFunction)(data)) return data(rawFile);
return data;
};
const doUpload = async (rawFile, beforeData) => {
const { headers, data, method, withCredentials, name: filename, action, onProgress, onSuccess, onError, httpRequest } = props;
try {
beforeData = await resolveData(beforeData ?? data, rawFile);
} catch {
props.onRemove(rawFile);
return;
}
const { uid } = rawFile;
const options = {
headers: headers || {},
withCredentials,
file: rawFile,
data: beforeData,
method,
filename,
action,
onProgress: (evt) => {
onProgress(evt, rawFile);
},
onSuccess: (res) => {
onSuccess(res, rawFile);
delete requests.value[uid];
},
onError: (err) => {
onError(err, rawFile);
delete requests.value[uid];
}
};
const request = httpRequest(options);
requests.value[uid] = request;
if (request instanceof Promise) request.then(options.onSuccess, options.onError);
};
const handleChange = (e) => {
const files = e.target.files;
if (!files) return;
uploadFiles(Array.from(files));
};
const handleClick = () => {
if (!disabled.value) {
inputRef.value.value = "";
inputRef.value.click();
}
};
const handleKeydown = () => {
handleClick();
};
const abort = (file) => {
require_objects.entriesOf(requests.value).filter(file ? ([uid]) => String(file.uid) === uid : () => true).forEach(([uid, req]) => {
if (req instanceof XMLHttpRequest) req.abort();
delete requests.value[uid];
});
};
__expose({
abort,
upload
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([
(0, vue.unref)(ns).b(),
(0, vue.unref)(ns).m(__props.listType),
(0, vue.unref)(ns).is("drag", __props.drag),
(0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled))
]),
tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
"aria-disabled": (0, vue.unref)(disabled),
role: "button",
onClick: handleClick,
onKeydown: (0, vue.withKeys)((0, vue.withModifiers)(handleKeydown, ["self"]), ["enter", "space"])
}, [__props.drag ? ((0, vue.openBlock)(), (0, vue.createBlock)(require_upload_dragger.default, {
key: 0,
disabled: (0, vue.unref)(disabled),
directory: __props.directory,
onFile: uploadFiles
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
_: 3
}, 8, ["disabled", "directory"])) : (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }), (0, vue.createElementVNode)("input", {
ref_key: "inputRef",
ref: inputRef,
class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
name: __props.name,
disabled: (0, vue.unref)(disabled),
multiple: __props.multiple,
accept: __props.accept,
webkitdirectory: __props.directory || void 0,
type: "file",
onChange: handleChange,
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
}, null, 42, _hoisted_2)], 42, _hoisted_1);
};
}
});
//#endregion
exports.default = upload_content_vue_vue_type_script_setup_true_lang_default;
//# sourceMappingURL=upload-content.vue_vue_type_script_setup_true_lang.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
//#region ../../packages/components/upload/src/upload-content.vue
var upload_content_default = require("./upload-content.vue_vue_type_script_setup_true_lang.js").default;
//#endregion
exports.default = upload_content_default;
//# sourceMappingURL=upload-content2.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,27 @@
import { EpPropFinalized } from "../../../utils/vue/props/types.js";
import _default from "./upload-dragger.vue.js";
import { ExtractPublicPropTypes } from "vue";
//#region ../../packages/components/upload/src/upload-dragger.d.ts
interface UploadDraggerProps {
disabled?: boolean;
directory?: boolean;
}
/**
* @deprecated Removed after 3.0.0, Use `UploadDraggerProps` instead.
*/
declare const uploadDraggerProps: {
readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
readonly directory: BooleanConstructor;
};
/**
* @deprecated Removed after 3.0.0, Use `UploadDraggerProps` instead.
*/
type UploadDraggerPropsPublic = ExtractPublicPropTypes<typeof uploadDraggerProps>;
declare const uploadDraggerEmits: {
file: (file: File[]) => boolean;
};
type UploadDraggerEmits = typeof uploadDraggerEmits;
type UploadDraggerInstance = InstanceType<typeof _default> & unknown;
//#endregion
export { UploadDraggerEmits, UploadDraggerInstance, UploadDraggerProps, UploadDraggerPropsPublic, uploadDraggerEmits, uploadDraggerProps };
@@ -0,0 +1,21 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../_virtual/_rolldown/runtime.js");
const require_runtime$1 = require("../../../utils/vue/props/runtime.js");
let _vue_shared = require("@vue/shared");
//#region ../../packages/components/upload/src/upload-dragger.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadDraggerProps` instead.
*/
const uploadDraggerProps = require_runtime$1.buildProps({
disabled: {
type: Boolean,
default: void 0
},
directory: Boolean
});
const uploadDraggerEmits = { file: (file) => (0, _vue_shared.isArray)(file) };
//#endregion
exports.uploadDraggerEmits = uploadDraggerEmits;
exports.uploadDraggerProps = uploadDraggerProps;
//# sourceMappingURL=upload-dragger.js.map
@@ -0,0 +1 @@
{"version":3,"file":"upload-dragger.js","names":["buildProps"],"sources":["../../../../../../packages/components/upload/src/upload-dragger.ts"],"sourcesContent":["import { buildProps, isArray } from '@element-plus/utils'\n\nimport type { ExtractPublicPropTypes } from 'vue'\nimport type UploadDragger from './upload-dragger.vue'\n\nexport interface UploadDraggerProps {\n disabled?: boolean\n directory?: boolean\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `UploadDraggerProps` instead.\n */\nexport const uploadDraggerProps = buildProps({\n disabled: {\n type: Boolean,\n default: undefined,\n },\n directory: Boolean,\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `UploadDraggerProps` instead.\n */\nexport type UploadDraggerPropsPublic = ExtractPublicPropTypes<\n typeof uploadDraggerProps\n>\n\nexport const uploadDraggerEmits = {\n file: (file: File[]) => isArray(file),\n}\nexport type UploadDraggerEmits = typeof uploadDraggerEmits\n\nexport type UploadDraggerInstance = InstanceType<typeof UploadDragger> & unknown\n"],"mappings":";;;;;;;;AAaA,MAAa,qBAAqBA,kBAAAA,WAAW;CAC3C,UAAU;EACR,MAAM;EACN,SAAS,KAAA;EACV;CACD,WAAW;CACZ,CAAU;AASX,MAAa,qBAAqB,EAChC,OAAO,UAAA,GAAA,YAAA,SAAyB,KAAK,EACtC"}
@@ -0,0 +1,24 @@
import { UploadDraggerProps } from "./upload-dragger.js";
import * as _$vue from "vue";
//#region ../../packages/components/upload/src/upload-dragger.vue.d.ts
declare var __VLS_1: {};
type __VLS_Slots = {} & {
default?: (props: typeof __VLS_1) => any;
};
declare const __VLS_base: _$vue.DefineComponent<UploadDraggerProps, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {
file: (file: File[]) => void;
}, string, _$vue.PublicProps, Readonly<UploadDraggerProps> & Readonly<{
onFile?: ((file: File[]) => any) | undefined;
}>, {
disabled: boolean;
}, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
declare const _default: typeof __VLS_export;
type __VLS_WithSlots<T, S> = T & {
new (): {
$slots: S;
};
};
//#endregion
export { _default as default };
@@ -0,0 +1,92 @@
require("../../../_virtual/_rolldown/runtime.js");
const require_error = require("../../../utils/error.js");
const require_index = require("../../../hooks/use-namespace/index.js");
const require_use_form_common_props = require("../../form/src/hooks/use-form-common-props.js");
const require_constants = require("./constants.js");
const require_upload_dragger = require("./upload-dragger.js");
let lodash_unified = require("lodash-unified");
let vue = require("vue");
//#region ../../packages/components/upload/src/upload-dragger.vue?vue&type=script&setup=true&lang.ts
const COMPONENT_NAME = "ElUploadDrag";
var upload_dragger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: COMPONENT_NAME,
__name: "upload-dragger",
props: require_upload_dragger.uploadDraggerProps,
emits: require_upload_dragger.uploadDraggerEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
if (!(0, vue.inject)(require_constants.uploadContextKey)) require_error.throwError(COMPONENT_NAME, "usage: <el-upload><el-upload-dragger /></el-upload>");
const ns = require_index.useNamespace("upload");
const dragover = (0, vue.ref)(false);
const disabled = require_use_form_common_props.useFormDisabled();
const getFile = (entry) => {
return new Promise((resolve, reject) => entry.file(resolve, reject));
};
const getAllFiles = async (entry) => {
try {
if (entry.isFile) {
const file = await getFile(entry);
file.isDirectory = false;
return [file];
}
if (entry.isDirectory) {
const dirReader = entry.createReader();
const getEntries = () => {
return new Promise((resolve, reject) => dirReader.readEntries(resolve, reject));
};
const entries = [];
let readEntries = await getEntries();
/**
* In Chromium-based browsers, readEntries() will only return the first 100 FileSystemEntry instances.
* https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries#:~:text=In%20Chromium%2Dbased%20browsers%2C%20readEntries()%20will%20only%20return%20the%20first%20100%20FileSystemEntry%20instances.%20In%20order%20to%20obtain%20all%20of%20the%20instances%2C%20readEntries()%20must%20be%20called%20multiple%20times.
*/
while (readEntries.length > 0) {
entries.push(...readEntries);
readEntries = await getEntries();
}
const filePromises = entries.map((entry) => getAllFiles(entry).catch(() => []));
return (0, lodash_unified.flatten)(await Promise.all(filePromises));
}
} catch {
return [];
}
return [];
};
const onDrop = async (e) => {
if (disabled.value) return;
dragover.value = false;
e.stopPropagation();
const files = Array.from(e.dataTransfer.files);
const items = e.dataTransfer.items || [];
if (props.directory) {
const entries = Array.from(items).map((item) => item?.webkitGetAsEntry?.()).filter((entry) => entry);
emit("file", (0, lodash_unified.flatten)(await Promise.all(entries.map(getAllFiles))));
return;
}
files.forEach((file, index) => {
const entry = items[index]?.webkitGetAsEntry?.();
if (entry) file.isDirectory = entry.isDirectory;
});
emit("file", files);
};
const onDragover = () => {
if (!disabled.value) dragover.value = true;
};
const onDragleave = (e) => {
if (!e.currentTarget.contains(e.relatedTarget)) dragover.value = false;
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("dragger"), (0, vue.unref)(ns).is("dragover", dragover.value)]),
onDrop: (0, vue.withModifiers)(onDrop, ["prevent"]),
onDragover: (0, vue.withModifiers)(onDragover, ["prevent"]),
onDragleave: (0, vue.withModifiers)(onDragleave, ["prevent"])
}, [(0, vue.renderSlot)(_ctx.$slots, "default")], 34);
};
}
});
//#endregion
exports.default = upload_dragger_vue_vue_type_script_setup_true_lang_default;
//# sourceMappingURL=upload-dragger.vue_vue_type_script_setup_true_lang.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
//#region ../../packages/components/upload/src/upload-dragger.vue
var upload_dragger_default = require("./upload-dragger.vue_vue_type_script_setup_true_lang.js").default;
//#endregion
exports.default = upload_dragger_default;
//# sourceMappingURL=upload-dragger2.js.map
@@ -0,0 +1 @@
{"version":3,"file":"upload-dragger2.js","names":[],"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=\"onDragleave\"\n >\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject, ref } from 'vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { useFormDisabled } from '@element-plus/components/form'\nimport { throwError } from '@element-plus/utils/error'\nimport { flatten } from 'lodash-unified'\nimport { uploadContextKey } from './constants'\nimport { uploadDraggerEmits } from './upload-dragger'\n\nimport type { UploadDraggerProps } from './upload-dragger'\nimport type { UploadRawFile } from './upload'\n\nconst COMPONENT_NAME = 'ElUploadDrag'\n\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = withDefaults(defineProps<UploadDraggerProps>(), {\n disabled: undefined,\n})\nconst emit = defineEmits(uploadDraggerEmits)\n\nconst uploaderContext = inject(uploadContextKey)\nif (!uploaderContext) {\n throwError(\n COMPONENT_NAME,\n 'usage: <el-upload><el-upload-dragger /></el-upload>'\n )\n}\n\nconst ns = useNamespace('upload')\nconst dragover = ref(false)\nconst disabled = useFormDisabled()\n\nconst getFile = (entry: FileSystemFileEntry): Promise<File> => {\n return new Promise((resolve, reject) => entry.file(resolve, reject))\n}\n\nconst getAllFiles = async (\n entry: FileSystemEntry\n): Promise<UploadRawFile[]> => {\n try {\n if (entry.isFile) {\n const file = (await getFile(\n entry as FileSystemFileEntry\n )) as UploadRawFile\n file.isDirectory = false\n return [file]\n }\n if (entry.isDirectory) {\n const dirReader = (entry as FileSystemDirectoryEntry).createReader()\n const getEntries = (): Promise<FileSystemEntry[]> => {\n return new Promise((resolve, reject) =>\n dirReader.readEntries(resolve, reject)\n )\n }\n\n const entries: FileSystemEntry[] = []\n let readEntries = await getEntries()\n /**\n * In Chromium-based browsers, readEntries() will only return the first 100 FileSystemEntry instances.\n * https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries#:~:text=In%20Chromium%2Dbased%20browsers%2C%20readEntries()%20will%20only%20return%20the%20first%20100%20FileSystemEntry%20instances.%20In%20order%20to%20obtain%20all%20of%20the%20instances%2C%20readEntries()%20must%20be%20called%20multiple%20times.\n */\n while (readEntries.length > 0) {\n entries.push(...readEntries)\n readEntries = await getEntries()\n }\n\n const filePromises = entries.map((entry) =>\n getAllFiles(entry).catch(() => [])\n )\n\n const files = await Promise.all(filePromises)\n return flatten(files)\n }\n } catch {\n return []\n }\n return []\n}\n\nconst onDrop = async (e: DragEvent) => {\n if (disabled.value) return\n dragover.value = false\n\n e.stopPropagation()\n\n const files = Array.from(e.dataTransfer!.files) as UploadRawFile[]\n const items = e.dataTransfer!.items || []\n\n if (props.directory) {\n const entries = Array.from(items)\n .map((item) => item?.webkitGetAsEntry?.())\n .filter((entry) => entry) as FileSystemEntry[]\n\n const allFiles = await Promise.all(entries.map(getAllFiles))\n emit('file', flatten(allFiles))\n return\n }\n\n files.forEach((file, index) => {\n const item = items[index]\n const entry = item?.webkitGetAsEntry?.()\n if (entry) {\n file.isDirectory = entry.isDirectory\n }\n })\n emit('file', files)\n}\n\nconst onDragover = () => {\n if (!disabled.value) dragover.value = true\n}\n\nconst onDragleave = (e: DragEvent) => {\n if (!(e.currentTarget as Element).contains(e.relatedTarget as Element))\n dragover.value = false\n}\n</script>\n"],"mappings":""}
@@ -0,0 +1,51 @@
import { EpPropFinalized, EpPropMergeType } from "../../../utils/vue/props/types.js";
import { Crossorigin, ListType, UploadFile, UploadFiles, UploadHooks } from "./upload.js";
import _default from "./upload-list.vue.js";
import * as _$vue from "vue";
import { ExtractPublicPropTypes } from "vue";
//#region ../../packages/components/upload/src/upload-list.d.ts
interface UploadListProps {
files?: UploadFiles;
disabled?: boolean;
handlePreview?: UploadHooks['onPreview'];
listType?: ListType;
/**
* @description set HTML attribute: crossorigin.
*/
crossorigin?: Crossorigin;
}
/**
* @deprecated Removed after 3.0.0, Use `UploadListProps` instead.
*/
declare const uploadListProps: {
readonly files: EpPropFinalized<(new (...args: any[]) => UploadFiles) | (() => UploadFiles) | (((new (...args: any[]) => UploadFiles) | (() => UploadFiles)) | null)[], unknown, unknown, () => never[], boolean>;
readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
readonly handlePreview: EpPropFinalized<(new (...args: any[]) => (uploadFile: UploadFile) => void) | (() => (uploadFile: UploadFile) => void) | {
(): (uploadFile: UploadFile) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (uploadFile: UploadFile) => void) | (() => (uploadFile: UploadFile) => void) | {
(): (uploadFile: UploadFile) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly listType: EpPropFinalized<StringConstructor, "text" | "picture" | "picture-card", unknown, "text", boolean>;
readonly crossorigin: {
readonly type: _$vue.PropType<EpPropMergeType<(new (...args: any[]) => "" | "anonymous" | "use-credentials") | (() => "" | "anonymous" | "use-credentials") | (((new (...args: any[]) => "" | "anonymous" | "use-credentials") | (() => "" | "anonymous" | "use-credentials")) | null)[], unknown, unknown>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
};
/**
* @deprecated Removed after 3.0.0, Use `UploadListProps` instead.
*/
type UploadListPropsPublic = ExtractPublicPropTypes<typeof uploadListProps>;
declare const uploadListEmits: {
remove: (file: UploadFile) => boolean;
};
type UploadListEmits = typeof uploadListEmits;
type UploadListInstance = InstanceType<typeof _default> & unknown;
//#endregion
export { UploadListEmits, UploadListInstance, UploadListProps, UploadListPropsPublic, uploadListEmits, uploadListProps };
@@ -0,0 +1,39 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../_virtual/_rolldown/runtime.js");
const require_runtime$1 = require("../../../utils/vue/props/runtime.js");
const require_typescript = require("../../../utils/typescript.js");
const require_upload = require("./upload.js");
let _vue_shared = require("@vue/shared");
//#region ../../packages/components/upload/src/upload-list.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadListProps` instead.
*/
const uploadListProps = require_runtime$1.buildProps({
files: {
type: require_runtime$1.definePropType(Array),
default: () => require_typescript.mutable([])
},
disabled: {
type: Boolean,
default: void 0
},
handlePreview: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
listType: {
type: String,
values: require_upload.uploadListTypes,
default: "text"
},
/**
* @description set HTML attribute: crossorigin.
*/
crossorigin: { type: require_runtime$1.definePropType(String) }
});
const uploadListEmits = { remove: (file) => !!file };
//#endregion
exports.uploadListEmits = uploadListEmits;
exports.uploadListProps = uploadListProps;
//# sourceMappingURL=upload-list.js.map
@@ -0,0 +1 @@
{"version":3,"file":"upload-list.js","names":["buildProps","definePropType","mutable","NOOP","uploadListTypes"],"sources":["../../../../../../packages/components/upload/src/upload-list.ts"],"sourcesContent":["import { NOOP, buildProps, definePropType, mutable } from '@element-plus/utils'\nimport { uploadListTypes } from './upload'\n\nimport type { ExtractPublicPropTypes } from 'vue'\nimport type {\n Crossorigin,\n ListType,\n UploadFile,\n UploadFiles,\n UploadHooks,\n} from './upload'\nimport type UploadList from './upload-list.vue'\n\nexport interface UploadListProps {\n files?: UploadFiles\n disabled?: boolean\n handlePreview?: UploadHooks['onPreview']\n listType?: ListType\n /**\n * @description set HTML attribute: crossorigin.\n */\n crossorigin?: Crossorigin\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `UploadListProps` instead.\n */\nexport const uploadListProps = buildProps({\n files: {\n type: definePropType<UploadFiles>(Array),\n default: () => mutable([]),\n },\n disabled: {\n type: Boolean,\n default: undefined,\n },\n handlePreview: {\n type: definePropType<UploadHooks['onPreview']>(Function),\n default: NOOP,\n },\n listType: {\n type: String,\n values: uploadListTypes,\n default: 'text',\n },\n /**\n * @description set HTML attribute: crossorigin.\n */\n crossorigin: {\n type: definePropType<'anonymous' | 'use-credentials' | ''>(String),\n },\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `UploadListProps` instead.\n */\nexport type UploadListPropsPublic = ExtractPublicPropTypes<\n typeof uploadListProps\n>\nexport const uploadListEmits = {\n remove: (file: UploadFile) => !!file,\n}\nexport type UploadListEmits = typeof uploadListEmits\nexport type UploadListInstance = InstanceType<typeof UploadList> & unknown\n"],"mappings":";;;;;;;;;;AA2BA,MAAa,kBAAkBA,kBAAAA,WAAW;CACxC,OAAO;EACL,MAAMC,kBAAAA,eAA4B,MAAM;EACxC,eAAeC,mBAAAA,QAAQ,EAAE,CAAC;EAC3B;CACD,UAAU;EACR,MAAM;EACN,SAAS,KAAA;EACV;CACD,eAAe;EACb,MAAMD,kBAAAA,eAAyC,SAAS;EACxD,SAASE,YAAAA;EACV;CACD,UAAU;EACR,MAAM;EACN,QAAQC,eAAAA;EACR,SAAS;EACV;;;;CAID,aAAa,EACX,MAAMH,kBAAAA,eAAqD,OAAO,EACnE;CACF,CAAU;AAQX,MAAa,kBAAkB,EAC7B,SAAS,SAAqB,CAAC,CAAC,MACjC"}
@@ -0,0 +1,33 @@
import { ListType, UploadFile, UploadFiles, UploadHooks } from "./upload.js";
import { UploadListProps } from "./upload-list.js";
import * as _$vue from "vue";
//#region ../../packages/components/upload/src/upload-list.vue.d.ts
declare var __VLS_8: {
file: UploadFile;
index: number;
}, __VLS_84: {};
type __VLS_Slots = {} & {
default?: (props: typeof __VLS_8) => any;
} & {
append?: (props: typeof __VLS_84) => any;
};
declare const __VLS_base: _$vue.DefineComponent<UploadListProps, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {
remove: (file: UploadFile) => void;
}, string, _$vue.PublicProps, Readonly<UploadListProps> & Readonly<{
onRemove?: ((file: UploadFile) => any) | undefined;
}>, {
disabled: boolean;
listType: ListType;
files: UploadFiles;
handlePreview: UploadHooks["onPreview"];
}, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
declare const _default: typeof __VLS_export;
type __VLS_WithSlots<T, S> = T & {
new (): {
$slots: S;
};
};
//#endregion
export { _default as default };
@@ -0,0 +1,160 @@
require("../../../_virtual/_rolldown/runtime.js");
const require_index = require("../../../hooks/use-locale/index.js");
const require_index$1 = require("../../../hooks/use-namespace/index.js");
const require_index$2 = require("../../icon/index.js");
const require_use_form_common_props = require("../../form/src/hooks/use-form-common-props.js");
const require_index$3 = require("../../progress/index.js");
const require_upload_list = require("./upload-list.js");
let _element_plus_icons_vue = require("@element-plus/icons-vue");
let vue = require("vue");
//#region ../../packages/components/upload/src/upload-list.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1 = [
"tabindex",
"aria-disabled",
"onKeydown"
];
const _hoisted_2 = ["src", "crossorigin"];
const _hoisted_3 = ["onClick"];
const _hoisted_4 = ["title"];
const _hoisted_5 = ["onClick"];
const _hoisted_6 = ["onClick"];
var upload_list_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElUploadList",
__name: "upload-list",
props: require_upload_list.uploadListProps,
emits: require_upload_list.uploadListEmits,
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = require_index.useLocale();
const nsUpload = require_index$1.useNamespace("upload");
const nsIcon = require_index$1.useNamespace("icon");
const nsList = require_index$1.useNamespace("list");
const disabled = require_use_form_common_props.useFormDisabled();
const focusing = (0, vue.ref)(false);
const containerKls = (0, vue.computed)(() => [
nsUpload.b("list"),
nsUpload.bm("list", props.listType),
nsUpload.is("disabled", disabled.value)
]);
const handleRemove = (file) => {
emit("remove", file);
};
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)(vue.TransitionGroup, {
tag: "ul",
class: (0, vue.normalizeClass)(containerKls.value),
name: (0, vue.unref)(nsList).b()
}, {
default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.files, (file, index) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
key: file.uid || file.name,
class: (0, vue.normalizeClass)([
(0, vue.unref)(nsUpload).be("list", "item"),
(0, vue.unref)(nsUpload).is(file.status),
{ focusing: focusing.value }
]),
tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
"aria-disabled": (0, vue.unref)(disabled),
role: "button",
onKeydown: (0, vue.withKeys)(($event) => !(0, vue.unref)(disabled) && handleRemove(file), ["delete"]),
onFocus: _cache[0] || (_cache[0] = ($event) => focusing.value = true),
onBlur: _cache[1] || (_cache[1] = ($event) => focusing.value = false),
onClick: _cache[2] || (_cache[2] = ($event) => focusing.value = false)
}, [(0, vue.renderSlot)(_ctx.$slots, "default", {
file,
index
}, () => [
__props.listType === "picture" || file.status !== "uploading" && __props.listType === "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-thumbnail")),
src: file.url,
crossorigin: __props.crossorigin,
alt: ""
}, null, 10, _hoisted_2)) : (0, vue.createCommentVNode)("v-if", true),
file.status === "uploading" || __props.listType !== "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
key: 1,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-info"))
}, [(0, vue.createElementVNode)("a", {
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-name")),
onClick: (0, vue.withModifiers)(($event) => __props.handlePreview(file), ["prevent"])
}, [(0, vue.createVNode)((0, vue.unref)(require_index$2.ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("document")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.Document))]),
_: 1
}, 8, ["class"]), (0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-file-name")),
title: file.name
}, (0, vue.toDisplayString)(file.name), 11, _hoisted_4)], 10, _hoisted_3), file.status === "uploading" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$3.ElProgress), {
key: 0,
type: __props.listType === "picture-card" ? "circle" : "line",
"stroke-width": __props.listType === "picture-card" ? 6 : 2,
percentage: Number(file.percentage),
style: (0, vue.normalizeStyle)(__props.listType === "picture-card" ? "" : "margin-top: 0.5rem")
}, null, 8, [
"type",
"stroke-width",
"percentage",
"style"
])) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.createElementVNode)("label", { class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-status-label")) }, [__props.listType === "text" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$2.ElIcon), {
key: 0,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsIcon).m("upload-success"), (0, vue.unref)(nsIcon).m("circle-check")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.CircleCheck))]),
_: 1
}, 8, ["class"])) : ["picture-card", "picture"].includes(__props.listType) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$2.ElIcon), {
key: 1,
class: (0, vue.normalizeClass)([(0, vue.unref)(nsIcon).m("upload-success"), (0, vue.unref)(nsIcon).m("check")])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.Check))]),
_: 1
}, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 2),
!(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$2.ElIcon), {
key: 2,
class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("close")),
"aria-label": (0, vue.unref)(t)("el.upload.delete"),
role: "button",
tabindex: "0",
onClick: ($event) => handleRemove(file),
onKeydown: (0, vue.withKeys)((0, vue.withModifiers)(($event) => handleRemove(file), ["prevent"]), ["enter", "space"])
}, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.Close))]),
_: 1
}, 8, [
"class",
"aria-label",
"onClick",
"onKeydown"
])) : (0, vue.createCommentVNode)("v-if", true),
!(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("i", {
key: 3,
class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("close-tip"))
}, (0, vue.toDisplayString)((0, vue.unref)(t)("el.upload.deleteTip")), 3)) : (0, vue.createCommentVNode)("v-if", true),
__props.listType === "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 4,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-actions"))
}, [(0, vue.createElementVNode)("span", {
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-preview")),
onClick: ($event) => __props.handlePreview(file)
}, [(0, vue.createVNode)((0, vue.unref)(require_index$2.ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("zoom-in")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.ZoomIn))]),
_: 1
}, 8, ["class"])], 10, _hoisted_5), !(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
key: 0,
class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-delete")),
onClick: ($event) => handleRemove(file)
}, [(0, vue.createVNode)((0, vue.unref)(require_index$2.ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("delete")) }, {
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.Delete))]),
_: 1
}, 8, ["class"])], 10, _hoisted_6)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)
])], 42, _hoisted_1);
}), 128)), (0, vue.renderSlot)(_ctx.$slots, "append")]),
_: 3
}, 8, ["class", "name"]);
};
}
});
//#endregion
exports.default = upload_list_vue_vue_type_script_setup_true_lang_default;
//# sourceMappingURL=upload-list.vue_vue_type_script_setup_true_lang.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
//#region ../../packages/components/upload/src/upload-list.vue
var upload_list_default = require("./upload-list.vue_vue_type_script_setup_true_lang.js").default;
//#endregion
exports.default = upload_list_default;
//# sourceMappingURL=upload-list2.js.map
File diff suppressed because one or more lines are too long
+367
View File
@@ -0,0 +1,367 @@
import { EpPropFinalized, EpPropMergeType } from "../../../utils/vue/props/types.js";
import { Awaitable, Mutable } from "../../../utils/typescript.js";
import { UploadAjaxError } from "./ajax.js";
import _default from "./upload.vue.js";
import * as _$vue from "vue";
import { ExtractPublicPropTypes } from "vue";
//#region ../../packages/components/upload/src/upload.d.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadProps` instead.
*/
declare const uploadListTypes: readonly ["text", "picture", "picture-card"];
declare const genFileId: () => number;
type UploadStatus = 'ready' | 'uploading' | 'success' | 'fail';
interface UploadProgressEvent extends ProgressEvent {
percent: number;
}
interface UploadRequestOptions {
action: string;
method: string;
data: Record<string, string | Blob | [string | Blob, string] | string[]>;
filename: string;
file: UploadRawFile;
headers: Headers | Record<string, string | number | null | undefined>;
onError: (evt: UploadAjaxError) => void;
onProgress: (evt: UploadProgressEvent) => void;
onSuccess: (response: any) => void;
withCredentials: boolean;
}
interface UploadFile {
name: string;
percentage?: number;
status: UploadStatus;
size?: number;
response?: unknown;
uid: number;
url?: string;
raw?: UploadRawFile;
}
type UploadUserFile = Omit<UploadFile, 'status' | 'uid'> & Partial<Pick<UploadFile, 'status' | 'uid'>>;
type UploadFiles = UploadFile[];
interface UploadRawFile extends File {
uid: number;
isDirectory?: boolean;
}
type UploadRequestHandler = (options: UploadRequestOptions) => XMLHttpRequest | Promise<unknown>;
interface UploadHooks {
beforeUpload: (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>;
beforeRemove: (uploadFile: UploadFile, uploadFiles: UploadFiles) => Awaitable<boolean>;
onRemove: (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
onChange: (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
onPreview: (uploadFile: UploadFile) => void;
onSuccess: (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
onProgress: (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
onError: (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
onExceed: (files: File[], uploadFiles: UploadUserFile[]) => void;
}
type UploadData = Mutable<Record<string, any>>;
type ListType = 'text' | 'picture' | 'picture-card';
type Crossorigin = 'anonymous' | 'use-credentials' | '';
interface UploadBaseProps {
/**
* @description request URL
*/
action?: string;
/**
* @description request headers
*/
headers?: Headers | Record<string, any>;
/**
* @description set upload request method
*/
method?: string;
/**
* @description additions options of request
*/
data?: Awaitable<UploadData> | ((rawFile: UploadRawFile) => Awaitable<UploadData>);
/**
* @description whether uploading multiple files is permitted
*/
multiple?: boolean;
/**
* @description key name for uploaded file
*/
name?: string;
/**
* @description whether to activate drag and drop mode
*/
drag?: boolean;
/**
* @description whether cookies are sent
*/
withCredentials?: boolean;
/**
* @description whether to show the uploaded file list
*/
showFileList?: boolean;
/**
* @description accepted [file types](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept), will not work when `thumbnail-mode === true`
*/
accept?: string;
/**
* @description default uploaded files
*/
fileList?: UploadUserFile[];
/**
* @description whether to auto upload file
*/
autoUpload?: boolean;
/**
* @description type of file list
*/
listType?: ListType;
/**
* @description override default xhr behavior, allowing you to implement your own upload-file's request
*/
httpRequest?: UploadRequestHandler;
/**
* @description whether to disable upload
*/
disabled?: boolean;
/**
* @description maximum number of uploads allowed
*/
limit?: number;
/**
* @description whether to support uploading directory
*/
directory?: boolean;
}
interface UploadProps extends UploadBaseProps {
/**
* @description hook function before uploading with the file to be uploaded as its parameter. If `false` is returned or a `Promise` is returned and then is rejected, uploading will be aborted
*/
beforeUpload?: UploadHooks['beforeUpload'];
/**
* @description hook function before removing a file with the file and file list as its parameters. If `false` is returned or a `Promise` is returned and then is rejected, removing will be aborted
*/
beforeRemove?: UploadHooks['beforeRemove'];
/**
* @description hook function when files are removed
*/
onRemove?: UploadHooks['onRemove'];
/**
* @description hook function when select file or upload file success or upload file fail
*/
onChange?: UploadHooks['onChange'];
/**
* @description hook function when clicking the uploaded files
*/
onPreview?: UploadHooks['onPreview'];
/**
* @description hook function when uploaded successfully
*/
onSuccess?: UploadHooks['onSuccess'];
/**
* @description hook function when some progress occurs
*/
onProgress?: UploadHooks['onProgress'];
/**
* @description hook function when some errors occurs
*/
onError?: UploadHooks['onError'];
/**
* @description hook function when limit is exceeded
*/
onExceed?: UploadHooks['onExceed'];
/**
* @description set HTML attribute: crossorigin.
*/
crossorigin?: Crossorigin;
}
/**
* @deprecated Removed after 3.0.0, Use `UploadBaseProps` instead.
*/
declare const uploadBaseProps: {
readonly action: EpPropFinalized<StringConstructor, unknown, unknown, "#", boolean>;
readonly headers: {
readonly type: _$vue.PropType<EpPropMergeType<(new (...args: any[]) => Record<string, any> | Headers) | (() => Record<string, any> | Headers) | (((new (...args: any[]) => Record<string, any> | Headers) | (() => Record<string, any> | Headers)) | null)[], unknown, unknown>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly method: EpPropFinalized<StringConstructor, unknown, unknown, "post", boolean>;
readonly data: EpPropFinalized<(new (...args: any[]) => Mutable<Record<string, any>> | Promise<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (() => Awaitable<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (((new (...args: any[]) => Mutable<Record<string, any>> | Promise<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (() => Awaitable<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>))) | null)[], unknown, unknown, () => Mutable<{}>, boolean>;
readonly multiple: BooleanConstructor;
readonly name: EpPropFinalized<StringConstructor, unknown, unknown, "file", boolean>;
readonly drag: BooleanConstructor;
readonly withCredentials: BooleanConstructor;
readonly showFileList: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly accept: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
readonly fileList: EpPropFinalized<(new (...args: any[]) => UploadUserFile[]) | (() => UploadUserFile[]) | (((new (...args: any[]) => UploadUserFile[]) | (() => UploadUserFile[])) | null)[], unknown, unknown, () => [], boolean>;
readonly autoUpload: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly listType: EpPropFinalized<StringConstructor, "text" | "picture" | "picture-card", unknown, "text", boolean>;
readonly httpRequest: EpPropFinalized<(new (...args: any[]) => UploadRequestHandler) | (() => UploadRequestHandler) | {
(): UploadRequestHandler;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => UploadRequestHandler) | (() => UploadRequestHandler) | {
(): UploadRequestHandler;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, UploadRequestHandler, boolean>;
readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
readonly limit: NumberConstructor;
readonly directory: BooleanConstructor;
};
/**
* @deprecated Removed after 3.0.0, Use `UploadProps` instead.
*/
declare const uploadProps: {
readonly beforeUpload: EpPropFinalized<(new (...args: any[]) => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | (() => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | {
(): (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | (() => (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>) | {
(): (rawFile: UploadRawFile) => Awaitable<void | undefined | null | boolean | File | Blob>;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly beforeRemove: {
readonly type: _$vue.PropType<(uploadFile: UploadFile, uploadFiles: UploadFiles) => Awaitable<boolean>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly onRemove: EpPropFinalized<(new (...args: any[]) => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onChange: EpPropFinalized<(new (...args: any[]) => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onPreview: EpPropFinalized<(new (...args: any[]) => (uploadFile: UploadFile) => void) | (() => (uploadFile: UploadFile) => void) | {
(): (uploadFile: UploadFile) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (uploadFile: UploadFile) => void) | (() => (uploadFile: UploadFile) => void) | {
(): (uploadFile: UploadFile) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onSuccess: EpPropFinalized<(new (...args: any[]) => (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onProgress: EpPropFinalized<(new (...args: any[]) => (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (evt: UploadProgressEvent, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onError: EpPropFinalized<(new (...args: any[]) => (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
(): (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly onExceed: EpPropFinalized<(new (...args: any[]) => (files: File[], uploadFiles: UploadUserFile[]) => void) | (() => (files: File[], uploadFiles: UploadUserFile[]) => void) | {
(): (files: File[], uploadFiles: UploadUserFile[]) => void;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => (files: File[], uploadFiles: UploadUserFile[]) => void) | (() => (files: File[], uploadFiles: UploadUserFile[]) => void) | {
(): (files: File[], uploadFiles: UploadUserFile[]) => void;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, () => void, boolean>;
readonly crossorigin: {
readonly type: _$vue.PropType<EpPropMergeType<(new (...args: any[]) => "" | "anonymous" | "use-credentials") | (() => "" | "anonymous" | "use-credentials") | (((new (...args: any[]) => "" | "anonymous" | "use-credentials") | (() => "" | "anonymous" | "use-credentials")) | null)[], unknown, unknown>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly action: EpPropFinalized<StringConstructor, unknown, unknown, "#", boolean>;
readonly headers: {
readonly type: _$vue.PropType<EpPropMergeType<(new (...args: any[]) => Record<string, any> | Headers) | (() => Record<string, any> | Headers) | (((new (...args: any[]) => Record<string, any> | Headers) | (() => Record<string, any> | Headers)) | null)[], unknown, unknown>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly method: EpPropFinalized<StringConstructor, unknown, unknown, "post", boolean>;
readonly data: EpPropFinalized<(new (...args: any[]) => Mutable<Record<string, any>> | Promise<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (() => Awaitable<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (((new (...args: any[]) => Mutable<Record<string, any>> | Promise<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>)) | (() => Awaitable<Mutable<Record<string, any>>> | ((rawFile: UploadRawFile) => Awaitable<UploadData>))) | null)[], unknown, unknown, () => Mutable<{}>, boolean>;
readonly multiple: BooleanConstructor;
readonly name: EpPropFinalized<StringConstructor, unknown, unknown, "file", boolean>;
readonly drag: BooleanConstructor;
readonly withCredentials: BooleanConstructor;
readonly showFileList: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly accept: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
readonly fileList: EpPropFinalized<(new (...args: any[]) => UploadUserFile[]) | (() => UploadUserFile[]) | (((new (...args: any[]) => UploadUserFile[]) | (() => UploadUserFile[])) | null)[], unknown, unknown, () => [], boolean>;
readonly autoUpload: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly listType: EpPropFinalized<StringConstructor, "text" | "picture" | "picture-card", unknown, "text", boolean>;
readonly httpRequest: EpPropFinalized<(new (...args: any[]) => UploadRequestHandler) | (() => UploadRequestHandler) | {
(): UploadRequestHandler;
new (): any;
readonly prototype: any;
} | (((new (...args: any[]) => UploadRequestHandler) | (() => UploadRequestHandler) | {
(): UploadRequestHandler;
new (): any;
readonly prototype: any;
}) | null)[], unknown, unknown, UploadRequestHandler, boolean>;
readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
readonly limit: NumberConstructor;
readonly directory: BooleanConstructor;
};
/**
* @deprecated Removed after 3.0.0, Use `UploadProps` instead.
*/
type UploadPropsPublic = ExtractPublicPropTypes<typeof uploadProps>;
type UploadInstance = InstanceType<typeof _default> & unknown;
declare const uploadBasePropsDefaults: {
readonly action: "#";
readonly method: "post";
readonly data: () => Mutable<{}>;
readonly name: "file";
readonly showFileList: true;
readonly accept: "";
readonly fileList: () => never[];
readonly autoUpload: true;
readonly listType: "text";
readonly httpRequest: UploadRequestHandler;
readonly disabled: undefined;
};
declare const uploadPropsDefaults: {
readonly beforeUpload: () => void;
readonly onRemove: () => void;
readonly onChange: () => void;
readonly onPreview: () => void;
readonly onSuccess: () => void;
readonly onProgress: () => void;
readonly onError: () => void;
readonly onExceed: () => void;
readonly action: "#";
readonly method: "post";
readonly data: () => Mutable<{}>;
readonly name: "file";
readonly showFileList: true;
readonly accept: "";
readonly fileList: () => never[];
readonly autoUpload: true;
readonly listType: "text";
readonly httpRequest: UploadRequestHandler;
readonly disabled: undefined;
};
//#endregion
export { Crossorigin, ListType, UploadBaseProps, UploadData, UploadFile, UploadFiles, UploadHooks, UploadInstance, UploadProgressEvent, UploadProps, UploadPropsPublic, UploadRawFile, UploadRequestHandler, UploadRequestOptions, UploadStatus, UploadUserFile, genFileId, uploadBaseProps, uploadBasePropsDefaults, uploadListTypes, uploadProps, uploadPropsDefaults };
+231
View File
@@ -0,0 +1,231 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../_virtual/_rolldown/runtime.js");
const require_runtime$1 = require("../../../utils/vue/props/runtime.js");
const require_typescript = require("../../../utils/typescript.js");
const require_ajax = require("./ajax.js");
let _vue_shared = require("@vue/shared");
//#region ../../packages/components/upload/src/upload.ts
/**
* @deprecated Removed after 3.0.0, Use `UploadProps` instead.
*/
const uploadListTypes = [
"text",
"picture",
"picture-card"
];
let fileId = 1;
const genFileId = () => Date.now() + fileId++;
/**
* @deprecated Removed after 3.0.0, Use `UploadBaseProps` instead.
*/
const uploadBaseProps = require_runtime$1.buildProps({
/**
* @description request URL
*/
action: {
type: String,
default: "#"
},
/**
* @description request headers
*/
headers: { type: require_runtime$1.definePropType(Object) },
/**
* @description set upload request method
*/
method: {
type: String,
default: "post"
},
/**
* @description additions options of request
*/
data: {
type: require_runtime$1.definePropType([
Object,
Function,
Promise
]),
default: () => require_typescript.mutable({})
},
/**
* @description whether uploading multiple files is permitted
*/
multiple: Boolean,
/**
* @description key name for uploaded file
*/
name: {
type: String,
default: "file"
},
/**
* @description whether to activate drag and drop mode
*/
drag: Boolean,
/**
* @description whether cookies are sent
*/
withCredentials: Boolean,
/**
* @description whether to show the uploaded file list
*/
showFileList: {
type: Boolean,
default: true
},
/**
* @description accepted [file types](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept), will not work when `thumbnail-mode === true`
*/
accept: {
type: String,
default: ""
},
/**
* @description default uploaded files
*/
fileList: {
type: require_runtime$1.definePropType(Array),
default: () => require_typescript.mutable([])
},
/**
* @description whether to auto upload file
*/
autoUpload: {
type: Boolean,
default: true
},
/**
* @description type of file list
*/
listType: {
type: String,
values: uploadListTypes,
default: "text"
},
/**
* @description override default xhr behavior, allowing you to implement your own upload-file's request
*/
httpRequest: {
type: require_runtime$1.definePropType(Function),
default: require_ajax.ajaxUpload
},
/**
* @description whether to disable upload
*/
disabled: {
type: Boolean,
default: void 0
},
/**
* @description maximum number of uploads allowed
*/
limit: Number,
/**
* @description whether to support uploading directory
*/
directory: Boolean
});
/**
* @deprecated Removed after 3.0.0, Use `UploadProps` instead.
*/
const uploadProps = require_runtime$1.buildProps({
...uploadBaseProps,
/**
* @description hook function before uploading with the file to be uploaded as its parameter. If `false` is returned or a `Promise` is returned and then is rejected, uploading will be aborted
*/
beforeUpload: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description hook function before removing a file with the file and file list as its parameters. If `false` is returned or a `Promise` is returned and then is rejected, removing will be aborted
*/
beforeRemove: { type: require_runtime$1.definePropType(Function) },
/**
* @description hook function when files are removed
*/
onRemove: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description hook function when select file or upload file success or upload file fail
*/
onChange: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description hook function when clicking the uploaded files
*/
onPreview: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description hook function when uploaded successfully
*/
onSuccess: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description hook function when some progress occurs
*/
onProgress: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description hook function when some errors occurs
*/
onError: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description hook function when limit is exceeded
*/
onExceed: {
type: require_runtime$1.definePropType(Function),
default: _vue_shared.NOOP
},
/**
* @description set HTML attribute: crossorigin.
*/
crossorigin: { type: require_runtime$1.definePropType(String) }
});
const uploadBasePropsDefaults = {
action: "#",
method: "post",
data: () => require_typescript.mutable({}),
name: "file",
showFileList: true,
accept: "",
fileList: () => require_typescript.mutable([]),
autoUpload: true,
listType: "text",
httpRequest: require_ajax.ajaxUpload,
disabled: void 0
};
const uploadPropsDefaults = {
...uploadBasePropsDefaults,
beforeUpload: _vue_shared.NOOP,
onRemove: _vue_shared.NOOP,
onChange: _vue_shared.NOOP,
onPreview: _vue_shared.NOOP,
onSuccess: _vue_shared.NOOP,
onProgress: _vue_shared.NOOP,
onError: _vue_shared.NOOP,
onExceed: _vue_shared.NOOP
};
//#endregion
exports.genFileId = genFileId;
exports.uploadBaseProps = uploadBaseProps;
exports.uploadBasePropsDefaults = uploadBasePropsDefaults;
exports.uploadListTypes = uploadListTypes;
exports.uploadProps = uploadProps;
exports.uploadPropsDefaults = uploadPropsDefaults;
//# sourceMappingURL=upload.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,65 @@
import { Awaitable } from "../../../utils/typescript.js";
import { ListType, UploadData, UploadFile, UploadHooks, UploadProps, UploadRawFile, UploadRequestHandler, UploadStatus, UploadUserFile } from "./upload.js";
import * as _$vue from "vue";
//#region ../../packages/components/upload/src/upload.vue.d.ts
declare var __VLS_10: {
file: UploadFile;
index: number;
}, __VLS_21: {}, __VLS_23: {}, __VLS_33: {}, __VLS_35: {}, __VLS_37: {}, __VLS_39: {}, __VLS_50: {
file: UploadFile;
index: number;
};
type __VLS_Slots = {} & {
file?: (props: typeof __VLS_10) => any;
} & {
trigger?: (props: typeof __VLS_21) => any;
} & {
default?: (props: typeof __VLS_23) => any;
} & {
trigger?: (props: typeof __VLS_33) => any;
} & {
default?: (props: typeof __VLS_35) => any;
} & {
default?: (props: typeof __VLS_37) => any;
} & {
tip?: (props: typeof __VLS_39) => any;
} & {
file?: (props: typeof __VLS_50) => any;
};
declare const __VLS_base: _$vue.DefineComponent<UploadProps, {
/** @description cancel upload request */abort: (file?: UploadFile) => void; /** @description upload the file list manually */
submit: () => void; /** @description clear the file list */
clearFiles: (states?: UploadStatus[]) => void; /** @description select the file manually */
handleStart: (rawFile: UploadRawFile) => void; /** @description remove the file manually */
handleRemove: (file: UploadFile | UploadRawFile) => void;
}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<UploadProps> & Readonly<{}>, {
name: string;
disabled: boolean;
onChange: UploadHooks["onChange"];
onError: UploadHooks["onError"];
onProgress: UploadHooks["onProgress"];
data: Awaitable<UploadData> | ((rawFile: UploadRawFile) => Awaitable<UploadData>);
beforeUpload: UploadHooks["beforeUpload"];
onRemove: UploadHooks["onRemove"];
onPreview: UploadHooks["onPreview"];
onSuccess: UploadHooks["onSuccess"];
onExceed: UploadHooks["onExceed"];
action: string;
method: string;
showFileList: boolean;
accept: string;
fileList: UploadUserFile[];
autoUpload: boolean;
listType: ListType;
httpRequest: UploadRequestHandler;
}, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
declare const _default: typeof __VLS_export;
type __VLS_WithSlots<T, S> = T & {
new (): {
$slots: S;
};
};
//#endregion
export { _default as default };
@@ -0,0 +1,119 @@
require("../../../_virtual/_rolldown/runtime.js");
const require_use_form_common_props = require("../../form/src/hooks/use-form-common-props.js");
const require_upload = require("./upload.js");
const require_constants = require("./constants.js");
const require_upload_list = require("./upload-list2.js");
const require_upload_content = require("./upload-content2.js");
const require_use_handlers = require("./use-handlers.js");
let vue = require("vue");
//#region ../../packages/components/upload/src/upload.vue?vue&type=script&setup=true&lang.ts
var upload_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
name: "ElUpload",
__name: "upload",
props: require_upload.uploadProps,
setup(__props, { expose: __expose }) {
const props = __props;
const disabled = require_use_form_common_props.useFormDisabled();
const uploadRef = (0, vue.shallowRef)();
const { abort, submit, clearFiles, uploadFiles, handleStart, handleError, handleRemove, handleSuccess, handleProgress, revokeFileObjectURL } = require_use_handlers.useHandlers(props, uploadRef);
const isPictureCard = (0, vue.computed)(() => props.listType === "picture-card");
const uploadContentProps = (0, vue.computed)(() => ({
...props,
fileList: uploadFiles.value,
onStart: handleStart,
onProgress: handleProgress,
onSuccess: handleSuccess,
onError: handleError,
onRemove: handleRemove
}));
(0, vue.onBeforeUnmount)(() => {
uploadFiles.value.forEach(revokeFileObjectURL);
});
(0, vue.provide)(require_constants.uploadContextKey, { accept: (0, vue.toRef)(props, "accept") });
__expose({
/** @description cancel upload request */
abort,
/** @description upload the file list manually */
submit,
/** @description clear the file list */
clearFiles,
/** @description select the file manually */
handleStart,
/** @description remove the file manually */
handleRemove
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", null, [
isPictureCard.value && __props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(require_upload_list.default, {
key: 0,
disabled: (0, vue.unref)(disabled),
"list-type": __props.listType,
files: (0, vue.unref)(uploadFiles),
crossorigin: __props.crossorigin,
"handle-preview": __props.onPreview,
onRemove: (0, vue.unref)(handleRemove)
}, (0, vue.createSlots)({
append: (0, vue.withCtx)(() => [(0, vue.createVNode)(require_upload_content.default, (0, vue.mergeProps)({
ref_key: "uploadRef",
ref: uploadRef
}, uploadContentProps.value), {
default: (0, vue.withCtx)(() => [_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "trigger", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true), !_ctx.$slots.trigger && _ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 16)]),
_: 2
}, [_ctx.$slots.file ? {
name: "default",
fn: (0, vue.withCtx)(({ file, index }) => [(0, vue.renderSlot)(_ctx.$slots, "file", {
file,
index
})]),
key: "0"
} : void 0]), 1032, [
"disabled",
"list-type",
"files",
"crossorigin",
"handle-preview",
"onRemove"
])) : (0, vue.createCommentVNode)("v-if", true),
!isPictureCard.value || isPictureCard.value && !__props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(require_upload_content.default, (0, vue.mergeProps)({
key: 1,
ref_key: "uploadRef",
ref: uploadRef
}, uploadContentProps.value), {
default: (0, vue.withCtx)(() => [_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "trigger", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true), !_ctx.$slots.trigger && _ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }) : (0, vue.createCommentVNode)("v-if", true)]),
_: 3
}, 16)) : (0, vue.createCommentVNode)("v-if", true),
_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 2 }) : (0, vue.createCommentVNode)("v-if", true),
(0, vue.renderSlot)(_ctx.$slots, "tip"),
!isPictureCard.value && __props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(require_upload_list.default, {
key: 3,
disabled: (0, vue.unref)(disabled),
"list-type": __props.listType,
files: (0, vue.unref)(uploadFiles),
crossorigin: __props.crossorigin,
"handle-preview": __props.onPreview,
onRemove: (0, vue.unref)(handleRemove)
}, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots.file ? {
name: "default",
fn: (0, vue.withCtx)(({ file, index }) => [(0, vue.renderSlot)(_ctx.$slots, "file", {
file,
index
})]),
key: "0"
} : void 0]), 1032, [
"disabled",
"list-type",
"files",
"crossorigin",
"handle-preview",
"onRemove"
])) : (0, vue.createCommentVNode)("v-if", true)
]);
};
}
});
//#endregion
exports.default = upload_vue_vue_type_script_setup_true_lang_default;
//# sourceMappingURL=upload.vue_vue_type_script_setup_true_lang.js.map
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
//#region ../../packages/components/upload/src/upload.vue
var upload_default = require("./upload.vue_vue_type_script_setup_true_lang.js").default;
//#endregion
exports.default = upload_default;
//# sourceMappingURL=upload2.js.map
@@ -0,0 +1 @@
{"version":3,"file":"upload2.js","names":[],"sources":["../../../../../../packages/components/upload/src/upload.vue"],"sourcesContent":["<template>\n <div>\n <upload-list\n v-if=\"isPictureCard && showFileList\"\n :disabled=\"disabled\"\n :list-type=\"listType\"\n :files=\"uploadFiles\"\n :crossorigin=\"crossorigin\"\n :handle-preview=\"onPreview\"\n @remove=\"handleRemove\"\n >\n <template v-if=\"$slots.file\" #default=\"{ file, index }\">\n <slot name=\"file\" :file=\"file\" :index=\"index\" />\n </template>\n <template #append>\n <upload-content ref=\"uploadRef\" v-bind=\"uploadContentProps\">\n <slot v-if=\"$slots.trigger\" name=\"trigger\" />\n <slot v-if=\"!$slots.trigger && $slots.default\" />\n </upload-content>\n </template>\n </upload-list>\n\n <upload-content\n v-if=\"!isPictureCard || (isPictureCard && !showFileList)\"\n ref=\"uploadRef\"\n v-bind=\"uploadContentProps\"\n >\n <slot v-if=\"$slots.trigger\" name=\"trigger\" />\n <slot v-if=\"!$slots.trigger && $slots.default\" />\n </upload-content>\n\n <slot v-if=\"$slots.trigger\" />\n <slot name=\"tip\" />\n <upload-list\n v-if=\"!isPictureCard && showFileList\"\n :disabled=\"disabled\"\n :list-type=\"listType\"\n :files=\"uploadFiles\"\n :crossorigin=\"crossorigin\"\n :handle-preview=\"onPreview\"\n @remove=\"handleRemove\"\n >\n <template v-if=\"$slots.file\" #default=\"{ file, index }\">\n <slot name=\"file\" :file=\"file\" :index=\"index\" />\n </template>\n </upload-list>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, provide, shallowRef, toRef } from 'vue'\nimport { useFormDisabled } from '@element-plus/components/form'\nimport { uploadContextKey } from './constants'\nimport UploadList from './upload-list.vue'\nimport UploadContent from './upload-content.vue'\nimport { useHandlers } from './use-handlers'\nimport { uploadPropsDefaults } from './upload'\n\nimport type { UploadProps } from './upload'\nimport type {\n UploadContentInstance,\n UploadContentProps,\n} from './upload-content'\n\ndefineOptions({\n name: 'ElUpload',\n})\n\nconst props = withDefaults(defineProps<UploadProps>(), uploadPropsDefaults)\n\nconst disabled = useFormDisabled()\n\nconst uploadRef = shallowRef<UploadContentInstance>()\nconst {\n abort,\n submit,\n clearFiles,\n uploadFiles,\n handleStart,\n handleError,\n handleRemove,\n handleSuccess,\n handleProgress,\n revokeFileObjectURL,\n} = useHandlers(props, uploadRef)\n\nconst isPictureCard = computed(() => props.listType === 'picture-card')\n\nconst uploadContentProps = computed<UploadContentProps>(() => ({\n ...props,\n fileList: uploadFiles.value,\n onStart: handleStart,\n onProgress: handleProgress,\n onSuccess: handleSuccess,\n onError: handleError,\n onRemove: handleRemove,\n}))\n\nonBeforeUnmount(() => {\n uploadFiles.value.forEach(revokeFileObjectURL)\n})\n\nprovide(uploadContextKey, {\n accept: toRef(props, 'accept'),\n})\n\ndefineExpose({\n /** @description cancel upload request */\n abort,\n /** @description upload the file list manually */\n submit,\n /** @description clear the file list */\n clearFiles,\n /** @description select the file manually */\n handleStart,\n /** @description remove the file manually */\n handleRemove,\n})\n</script>\n"],"mappings":""}
@@ -0,0 +1,65 @@
import { UploadAjaxError } from "./ajax.js";
import { UploadFile, UploadProgressEvent, UploadProps, UploadRawFile, UploadStatus } from "./upload.js";
import { UploadContentInstance } from "./upload-content.js";
import * as _$vue from "vue";
import { ShallowRef } from "vue";
//#region ../../packages/components/upload/src/use-handlers.d.ts
declare const useHandlers: (props: UploadProps & Required<Pick<UploadProps, "listType" | "onChange" | "onError" | "onProgress" | "onSuccess" | "onRemove">>, uploadRef: ShallowRef<UploadContentInstance | undefined>) => {
/** @description two-way binding ref from props `fileList` */uploadFiles: _$vue.Ref<{
name: string;
percentage?: number | undefined;
status: UploadStatus;
size?: number | undefined;
response?: unknown;
uid: number;
url?: string | undefined;
raw?: {
uid: number;
isDirectory?: boolean | undefined;
readonly lastModified: number;
readonly name: string;
readonly webkitRelativePath: string;
readonly size: number;
readonly type: string;
arrayBuffer: () => Promise<ArrayBuffer>;
bytes: () => Promise<Uint8Array<ArrayBuffer>>;
slice: (start?: number, end?: number, contentType?: string) => Blob;
stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
text: () => Promise<string>;
} | undefined;
}[], {
name: string;
percentage?: number | undefined;
status: UploadStatus;
size?: number | undefined;
response?: unknown;
uid: number;
url?: string | undefined;
raw?: {
uid: number;
isDirectory?: boolean | undefined;
readonly lastModified: number;
readonly name: string;
readonly webkitRelativePath: string;
readonly size: number;
readonly type: string;
arrayBuffer: () => Promise<ArrayBuffer>;
bytes: () => Promise<Uint8Array<ArrayBuffer>>;
slice: (start?: number, end?: number, contentType?: string) => Blob;
stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
text: () => Promise<string>;
} | undefined;
}[]>;
abort: (file?: UploadFile) => void;
clearFiles: (states?: UploadStatus[]) => void;
handleError: (err: UploadAjaxError, rawFile: UploadRawFile) => void;
handleProgress: (evt: UploadProgressEvent, rawFile: UploadRawFile) => void;
handleStart: (rawFile: UploadRawFile) => void;
handleSuccess: (response: any, rawFile: UploadRawFile) => unknown;
handleRemove: (file: UploadFile | UploadRawFile) => void;
submit: () => void;
revokeFileObjectURL: (file: UploadFile) => void;
};
//#endregion
export { useHandlers };
@@ -0,0 +1,130 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../_virtual/_rolldown/runtime.js");
const require_error = require("../../../utils/error.js");
const require_upload = require("./upload.js");
let _vueuse_core = require("@vueuse/core");
let lodash_unified = require("lodash-unified");
let vue = require("vue");
//#region ../../packages/components/upload/src/use-handlers.ts
const SCOPE = "ElUpload";
const revokeFileObjectURL = (file) => {
if (file.url?.startsWith("blob:")) URL.revokeObjectURL(file.url);
};
const useHandlers = (props, uploadRef) => {
const uploadFiles = (0, _vueuse_core.useVModel)(props, "fileList", void 0, { passive: true });
const getFile = (rawFile) => uploadFiles.value.find((file) => file.uid === rawFile.uid);
function abort(file) {
uploadRef.value?.abort(file);
}
function clearFiles(states = [
"ready",
"uploading",
"success",
"fail"
]) {
uploadFiles.value = uploadFiles.value.filter((row) => !states.includes(row.status));
}
function removeFile(file) {
uploadFiles.value = uploadFiles.value.filter((uploadFile) => uploadFile.uid !== file.uid);
}
const emitChange = (file) => {
(0, vue.nextTick)(() => props.onChange(file, uploadFiles.value));
};
const handleError = (err, rawFile) => {
const file = getFile(rawFile);
if (!file) return;
console.error(err);
file.status = "fail";
removeFile(file);
props.onError(err, file, uploadFiles.value);
emitChange(file);
};
const handleProgress = (evt, rawFile) => {
const file = getFile(rawFile);
if (!file) return;
props.onProgress(evt, file, uploadFiles.value);
file.status = "uploading";
file.percentage = Math.round(evt.percent);
};
const handleSuccess = (response, rawFile) => {
const file = getFile(rawFile);
if (!file) return;
file.status = "success";
file.response = response;
props.onSuccess(response, file, uploadFiles.value);
emitChange(file);
};
const handleStart = (file) => {
if ((0, lodash_unified.isNil)(file.uid)) file.uid = require_upload.genFileId();
const uploadFile = {
name: file.name,
percentage: 0,
status: "ready",
size: file.size,
raw: file,
uid: file.uid
};
if (props.listType === "picture-card" || props.listType === "picture") try {
uploadFile.url = URL.createObjectURL(file);
} catch (err) {
require_error.debugWarn(SCOPE, err.message);
props.onError(err, uploadFile, uploadFiles.value);
}
uploadFiles.value = [...uploadFiles.value, uploadFile];
emitChange(uploadFile);
};
const handleRemove = async (file) => {
const uploadFile = file instanceof File ? getFile(file) : file;
if (!uploadFile) require_error.throwError(SCOPE, "file to be removed not found");
const doRemove = (file) => {
abort(file);
removeFile(file);
props.onRemove(file, uploadFiles.value);
revokeFileObjectURL(file);
};
if (props.beforeRemove) {
if (await props.beforeRemove(uploadFile, uploadFiles.value) !== false) doRemove(uploadFile);
} else doRemove(uploadFile);
};
function submit() {
uploadFiles.value.filter(({ status }) => status === "ready").forEach(({ raw }) => raw && uploadRef.value?.upload(raw));
}
(0, vue.watch)(() => props.listType, (val) => {
if (val !== "picture-card" && val !== "picture") return;
uploadFiles.value = uploadFiles.value.map((file) => {
const { raw, url } = file;
if (!url && raw) try {
file.url = URL.createObjectURL(raw);
} catch (err) {
props.onError(err, file, uploadFiles.value);
}
return file;
});
});
(0, vue.watch)(uploadFiles, (files) => {
for (const file of files) {
file.uid ||= require_upload.genFileId();
file.status ||= "success";
}
}, {
immediate: true,
deep: true
});
return {
/** @description two-way binding ref from props `fileList` */
uploadFiles,
abort,
clearFiles,
handleError,
handleProgress,
handleStart,
handleSuccess,
handleRemove,
submit,
revokeFileObjectURL
};
};
//#endregion
exports.useHandlers = useHandlers;
//# sourceMappingURL=use-handlers.js.map
File diff suppressed because one or more lines are too long