persagy-vant 0.0.42 → 0.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/action-sheet/ActionSheet.d.ts +4 -0
- package/es/action-sheet/ActionSheet.mjs +4 -1
- package/es/action-sheet/index.css +1 -1
- package/es/action-sheet/index.d.ts +3 -0
- package/es/action-sheet/index.less +4 -0
- package/es/index.d.ts +1 -1
- package/es/index.mjs +1 -1
- package/es/locale/lang/en-US.d.ts +6 -0
- package/es/locale/lang/en-US.mjs +6 -0
- package/es/locale/lang/zh-CN.d.ts +6 -0
- package/es/locale/lang/zh-CN.mjs +6 -0
- package/es/uploader/Uploader.d.ts +6 -1
- package/es/uploader/Uploader.mjs +80 -19
- package/es/uploader/index.css +1 -1
- package/es/uploader/index.d.ts +6 -2
- package/es/uploader/index.less +4 -0
- package/es/uploader/style/index.mjs +3 -0
- package/es/uploader/style/less.mjs +3 -0
- package/es/uploader/types.d.ts +2 -1
- package/lib/action-sheet/ActionSheet.d.ts +4 -0
- package/lib/action-sheet/ActionSheet.js +4 -1
- package/lib/action-sheet/index.css +1 -1
- package/lib/action-sheet/index.d.ts +3 -0
- package/lib/action-sheet/index.less +4 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/locale/lang/en-US.d.ts +6 -0
- package/lib/locale/lang/en-US.js +6 -0
- package/lib/locale/lang/zh-CN.d.ts +6 -0
- package/lib/locale/lang/zh-CN.js +6 -0
- package/lib/uploader/Uploader.d.ts +6 -1
- package/lib/uploader/Uploader.js +79 -18
- package/lib/uploader/index.css +1 -1
- package/lib/uploader/index.d.ts +6 -2
- package/lib/uploader/index.less +4 -0
- package/lib/uploader/style/index.js +3 -0
- package/lib/uploader/style/less.js +3 -0
- package/lib/uploader/types.d.ts +2 -1
- package/lib/vant.cjs.js +89 -20
- package/lib/vant.es.js +89 -20
- package/lib/vant.js +89 -20
- package/lib/vant.min.js +1 -1
- package/lib/web-types.json +1 -1
- package/package.json +1 -1
- package/skills/use-persagy-vant/references/component-catalog.md +1 -1
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -248,7 +248,7 @@ __reExport(stdin_exports, require("./uploader"), module.exports);
|
|
|
248
248
|
__reExport(stdin_exports, require("./video-preview"), module.exports);
|
|
249
249
|
__reExport(stdin_exports, require("./work-order-card"), module.exports);
|
|
250
250
|
__reExport(stdin_exports, require("./work-order-filter"), module.exports);
|
|
251
|
-
const version = "0.0.
|
|
251
|
+
const version = "0.0.43";
|
|
252
252
|
function install(app) {
|
|
253
253
|
const components = [
|
|
254
254
|
import_action_bar.ActionBar,
|
package/lib/locale/lang/en-US.js
CHANGED
package/lib/locale/lang/zh-CN.js
CHANGED
|
@@ -84,5 +84,11 @@ var stdin_default = {
|
|
|
84
84
|
},
|
|
85
85
|
vanTabs: {
|
|
86
86
|
moreTitle: "\u66F4\u591A\u6807\u7B7E"
|
|
87
|
+
},
|
|
88
|
+
vanUploader: {
|
|
89
|
+
sourcePickerTitle: "\u9009\u62E9\u4E0A\u4F20\u65B9\u5F0F",
|
|
90
|
+
takePhoto: "\u62CD\u7167",
|
|
91
|
+
recordVideo: "\u62CD\u89C6\u9891",
|
|
92
|
+
chooseFromAlbum: "\u4ECE\u76F8\u518C\u9009\u62E9"
|
|
87
93
|
}
|
|
88
94
|
};
|
|
@@ -14,6 +14,7 @@ declare const uploaderProps: {
|
|
|
14
14
|
};
|
|
15
15
|
capture: StringConstructor;
|
|
16
16
|
multiple: BooleanConstructor;
|
|
17
|
+
sourcePicker: BooleanConstructor;
|
|
17
18
|
label: StringConstructor;
|
|
18
19
|
required: BooleanConstructor;
|
|
19
20
|
disabled: BooleanConstructor;
|
|
@@ -79,6 +80,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
79
80
|
};
|
|
80
81
|
capture: StringConstructor;
|
|
81
82
|
multiple: BooleanConstructor;
|
|
83
|
+
sourcePicker: BooleanConstructor;
|
|
82
84
|
label: StringConstructor;
|
|
83
85
|
required: BooleanConstructor;
|
|
84
86
|
disabled: BooleanConstructor;
|
|
@@ -131,7 +133,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
131
133
|
type: PropType<UploaderMaxSize>;
|
|
132
134
|
default: number;
|
|
133
135
|
};
|
|
134
|
-
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview")[], "update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
136
|
+
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview" | "select-source")[], "update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview" | "select-source", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
135
137
|
name: {
|
|
136
138
|
type: (NumberConstructor | StringConstructor)[];
|
|
137
139
|
default: string;
|
|
@@ -142,6 +144,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
142
144
|
};
|
|
143
145
|
capture: StringConstructor;
|
|
144
146
|
multiple: BooleanConstructor;
|
|
147
|
+
sourcePicker: BooleanConstructor;
|
|
145
148
|
label: StringConstructor;
|
|
146
149
|
required: BooleanConstructor;
|
|
147
150
|
disabled: BooleanConstructor;
|
|
@@ -201,6 +204,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
201
204
|
"onClick-upload"?: ((...args: any[]) => any) | undefined;
|
|
202
205
|
"onClose-preview"?: ((...args: any[]) => any) | undefined;
|
|
203
206
|
"onClick-preview"?: ((...args: any[]) => any) | undefined;
|
|
207
|
+
"onSelect-source"?: ((...args: any[]) => any) | undefined;
|
|
204
208
|
}, {
|
|
205
209
|
required: boolean;
|
|
206
210
|
name: string | number;
|
|
@@ -210,6 +214,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
210
214
|
readonly: boolean;
|
|
211
215
|
multiple: boolean;
|
|
212
216
|
lazyLoad: boolean;
|
|
217
|
+
sourcePicker: boolean;
|
|
213
218
|
maxCount: string | number;
|
|
214
219
|
imageFit: ImageFit;
|
|
215
220
|
resultType: UploaderResultType;
|
package/lib/uploader/Uploader.js
CHANGED
|
@@ -56,6 +56,7 @@ var import_utils2 = require("./utils");
|
|
|
56
56
|
var import_use = require("@vant/use");
|
|
57
57
|
var import_use_expose = require("../composables/use-expose");
|
|
58
58
|
var import_icon = require("../icon");
|
|
59
|
+
var import_action_sheet = require("../action-sheet");
|
|
59
60
|
var import_image_preview = require("../image-preview");
|
|
60
61
|
var import_UploaderPreviewItem = __toESM(require("./UploaderPreviewItem"));
|
|
61
62
|
const uploaderProps = {
|
|
@@ -63,6 +64,7 @@ const uploaderProps = {
|
|
|
63
64
|
accept: (0, import_utils.makeStringProp)("image/*"),
|
|
64
65
|
capture: String,
|
|
65
66
|
multiple: Boolean,
|
|
67
|
+
sourcePicker: Boolean,
|
|
66
68
|
label: String,
|
|
67
69
|
required: Boolean,
|
|
68
70
|
disabled: Boolean,
|
|
@@ -92,21 +94,26 @@ const uploaderProps = {
|
|
|
92
94
|
var stdin_default = (0, import_vue.defineComponent)({
|
|
93
95
|
name: import_utils2.name,
|
|
94
96
|
props: uploaderProps,
|
|
95
|
-
emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "update:modelValue"],
|
|
97
|
+
emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "select-source", "update:modelValue"],
|
|
96
98
|
setup(props, {
|
|
97
99
|
emit,
|
|
98
100
|
slots
|
|
99
101
|
}) {
|
|
100
102
|
const inputRef = (0, import_vue.ref)();
|
|
103
|
+
const cameraInputRef = (0, import_vue.ref)();
|
|
104
|
+
const videoInputRef = (0, import_vue.ref)();
|
|
105
|
+
const sourcePickerVisible = (0, import_vue.ref)(false);
|
|
101
106
|
const urls = [];
|
|
102
107
|
const getDetail = (index = props.modelValue.length) => ({
|
|
103
108
|
name: props.name,
|
|
104
109
|
index
|
|
105
110
|
});
|
|
106
111
|
const resetInput = () => {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
112
|
+
[inputRef, cameraInputRef, videoInputRef].forEach((input) => {
|
|
113
|
+
if (input.value) {
|
|
114
|
+
input.value.value = "";
|
|
115
|
+
}
|
|
116
|
+
});
|
|
110
117
|
};
|
|
111
118
|
const onAfterRead = (items) => {
|
|
112
119
|
resetInput();
|
|
@@ -242,21 +249,69 @@ var stdin_default = (0, import_vue.defineComponent)({
|
|
|
242
249
|
"class": (0, import_utils2.bem)("required")
|
|
243
250
|
}, [(0, import_vue.createTextVNode)("*")]), props.label]);
|
|
244
251
|
};
|
|
245
|
-
const
|
|
252
|
+
const acceptTypes = () => props.accept.split(",").map((type) => type.trim().toLowerCase()).filter(Boolean);
|
|
253
|
+
const acceptsMediaType = (type) => acceptTypes().some((accept) => accept === `${type}/*` || accept.startsWith(`${type}/`));
|
|
254
|
+
const triggerInput = (source) => {
|
|
255
|
+
const target = source === "camera" ? cameraInputRef.value : source === "video" ? videoInputRef.value : inputRef.value;
|
|
256
|
+
if (target && !props.disabled && !props.readonly) {
|
|
257
|
+
emit("select-source", source);
|
|
258
|
+
target.click();
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
const onClickUpload = (event) => {
|
|
262
|
+
emit("click-upload", event);
|
|
263
|
+
if (props.sourcePicker && !props.disabled && !props.readonly) {
|
|
264
|
+
sourcePickerVisible.value = true;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const renderInput = (input, accept, capture, multiple = false, hidden = false) => (0, import_vue.createVNode)("input", {
|
|
268
|
+
"ref": input,
|
|
269
|
+
"type": "file",
|
|
270
|
+
"class": (0, import_utils2.bem)("input", {
|
|
271
|
+
hidden
|
|
272
|
+
}),
|
|
273
|
+
"accept": accept,
|
|
274
|
+
"capture": capture,
|
|
275
|
+
"multiple": multiple,
|
|
276
|
+
"disabled": props.disabled,
|
|
277
|
+
"onChange": onChange
|
|
278
|
+
}, null);
|
|
279
|
+
const renderSourcePicker = () => {
|
|
280
|
+
if (!props.sourcePicker)
|
|
281
|
+
return;
|
|
282
|
+
const actions = [];
|
|
283
|
+
if (acceptsMediaType("image")) {
|
|
284
|
+
actions.push({
|
|
285
|
+
name: (0, import_utils2.t)("takePhoto"),
|
|
286
|
+
callback: () => triggerInput("camera")
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
if (acceptsMediaType("video")) {
|
|
290
|
+
actions.push({
|
|
291
|
+
name: (0, import_utils2.t)("recordVideo"),
|
|
292
|
+
callback: () => triggerInput("video")
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
actions.push({
|
|
296
|
+
name: (0, import_utils2.t)("chooseFromAlbum"),
|
|
297
|
+
callback: () => triggerInput("album")
|
|
298
|
+
});
|
|
299
|
+
return (0, import_vue.createVNode)(import_action_sheet.ActionSheet, {
|
|
300
|
+
"show": sourcePickerVisible.value,
|
|
301
|
+
"title": (0, import_utils2.t)("sourcePickerTitle"),
|
|
302
|
+
"actions": actions,
|
|
303
|
+
"contentAdaptive": true,
|
|
304
|
+
"closeOnClickAction": true,
|
|
305
|
+
"onUpdate:show": (show) => {
|
|
306
|
+
sourcePickerVisible.value = show;
|
|
307
|
+
}
|
|
308
|
+
}, null);
|
|
309
|
+
};
|
|
246
310
|
const renderUpload = () => {
|
|
247
311
|
if (props.modelValue.length >= props.maxCount || !props.showUpload) {
|
|
248
312
|
return;
|
|
249
313
|
}
|
|
250
|
-
const Input = props.readonly ? null : (0,
|
|
251
|
-
"ref": inputRef,
|
|
252
|
-
"type": "file",
|
|
253
|
-
"class": (0, import_utils2.bem)("input"),
|
|
254
|
-
"accept": props.accept,
|
|
255
|
-
"capture": props.capture,
|
|
256
|
-
"multiple": props.multiple,
|
|
257
|
-
"disabled": props.disabled,
|
|
258
|
-
"onChange": onChange
|
|
259
|
-
}, null);
|
|
314
|
+
const Input = props.readonly ? null : props.sourcePicker ? [renderInput(inputRef, props.accept, void 0, props.multiple, true), acceptsMediaType("image") && renderInput(cameraInputRef, "image/*", props.capture || "environment", false, true), acceptsMediaType("video") && renderInput(videoInputRef, "video/*", props.capture || "environment", false, true)] : renderInput(inputRef, props.accept, props.capture, props.multiple);
|
|
260
315
|
if (slots.default) {
|
|
261
316
|
return (0, import_vue.createVNode)("div", {
|
|
262
317
|
"class": (0, import_utils2.bem)("input-wrapper"),
|
|
@@ -276,8 +331,14 @@ var stdin_default = (0, import_vue.defineComponent)({
|
|
|
276
331
|
"class": (0, import_utils2.bem)("upload-text")
|
|
277
332
|
}, [props.uploadText]), Input]);
|
|
278
333
|
};
|
|
279
|
-
const chooseFile = () => {
|
|
280
|
-
if (
|
|
334
|
+
const chooseFile = (source) => {
|
|
335
|
+
if (props.disabled || props.readonly)
|
|
336
|
+
return;
|
|
337
|
+
if (source) {
|
|
338
|
+
triggerInput(source);
|
|
339
|
+
} else if (props.sourcePicker) {
|
|
340
|
+
sourcePickerVisible.value = true;
|
|
341
|
+
} else if (inputRef.value) {
|
|
281
342
|
inputRef.value.click();
|
|
282
343
|
}
|
|
283
344
|
};
|
|
@@ -297,6 +358,6 @@ var stdin_default = (0, import_vue.defineComponent)({
|
|
|
297
358
|
"class": (0, import_utils2.bem)("wrapper", {
|
|
298
359
|
disabled: props.disabled
|
|
299
360
|
})
|
|
300
|
-
}, [props.uploadFirst ? (0, import_vue.createVNode)(import_vue.Fragment, null, [renderUpload(), renderPreviewList()]) : (0, import_vue.createVNode)(import_vue.Fragment, null, [renderPreviewList(), renderUpload()])])]);
|
|
361
|
+
}, [props.uploadFirst ? (0, import_vue.createVNode)(import_vue.Fragment, null, [renderUpload(), renderPreviewList()]) : (0, import_vue.createVNode)(import_vue.Fragment, null, [renderPreviewList(), renderUpload()])]), renderSourcePicker()]);
|
|
301
362
|
}
|
|
302
363
|
});
|
package/lib/uploader/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--van-uploader-size: 72px;--van-uploader-border-radius: 8px;--van-uploader-border: 1px solid var(--van-grey-50);--van-uploader-icon-size: 24px;--van-uploader-icon-color: var(--van-gray-4);--van-uploader-text-color: var(--van-text-color-2);--van-uploader-text-font-size: var(--van-font-size-sm);--van-uploader-upload-background-color: var(--van-gray-1);--van-uploader-upload-active-color: var(--van-active-color);--van-uploader-delete-color: var(--van-white);--van-uploader-delete-icon-size: 14px;--van-uploader-delete-background-color: rgba(0, 0, 0, .7);--van-uploader-file-background-color: var(--van-background-color);--van-uploader-file-icon-size: 20px;--van-uploader-file-icon-color: var(--van-gray-7);--van-uploader-file-name-padding: 0 var(--van-padding-base);--van-uploader-file-name-margin-top: var(--van-padding-xs);--van-uploader-file-name-font-size: var(--van-font-size-sm);--van-uploader-file-name-text-color: var(--van-gray-7);--van-uploader-mask-text-color: var(--van-white);--van-uploader-mask-background-color: rgba(50, 50, 51, .88);--van-uploader-mask-icon-size: 22px;--van-uploader-mask-message-font-size: var(--van-font-size-sm);--van-uploader-mask-message-line-height: var(--van-line-height-xs);--van-uploader-loading-icon-size: 22px;--van-uploader-loading-icon-color: var(--van-white);--van-uploader-disabled-opacity: var(--van-disabled-opacity);--van-uploader-required-color: var(--van-danger-color);--van-uploader-label-color: var(--van-text-color);--van-uploader-label-font-size: var(--van-font-size-md);--van-uploader-label-line-height: var(--van-line-height-md);--van-uploader-label-margin-bottom: var(--van-padding-sm)}.van-uploader{position:relative;display:inline-block}.van-uploader--required:before{position:absolute;top:0;left:calc(-1 * var(--van-padding-sm));color:var(--van-uploader-required-color);font-size:var(--van-font-size-md);line-height:var(--van-line-height-md);content:"*"}.van-uploader__label{position:relative;margin-bottom:var(--van-uploader-label-margin-bottom);color:var(--van-uploader-label-color);font-size:var(--van-uploader-label-font-size);line-height:var(--van-uploader-label-line-height)}.van-uploader__required{position:absolute;top:0;left:calc(-1 * (var(--van-padding-md) - var(--van-padding-xs)));color:var(--van-uploader-required-color)}.van-uploader__wrapper{display:flex;flex-wrap:wrap;gap:var(--van-padding-xs)}.van-uploader__wrapper--disabled{opacity:var(--van-uploader-disabled-opacity)}.van-uploader__input{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;cursor:pointer;opacity:0}.van-uploader__input-wrapper{position:relative}.van-uploader__input:disabled{cursor:not-allowed}.van-uploader__upload{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-upload-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__upload:active{background-color:var(--van-uploader-upload-active-color)}.van-uploader__upload--readonly:active{background-color:var(--van-uploader-upload-background-color)}.van-uploader__upload-icon{color:var(--van-uploader-icon-color);font-size:var(--van-uploader-icon-size)}.van-uploader__upload-text{margin-top:var(--van-padding-xs);color:var(--van-uploader-text-color);font-size:var(--van-uploader-text-font-size)}.van-uploader__preview{position:relative;cursor:pointer;border-radius:var(--van-uploader-border-radius);overflow:hidden}.van-uploader__preview-image{display:block;width:var(--van-uploader-size);height:var(--van-uploader-size);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border);overflow:hidden;box-sizing:border-box}.van-uploader__preview-delete{position:absolute;top:0;right:0}.van-uploader__preview-delete--shadow{width:var(--van-uploader-delete-icon-size);height:var(--van-uploader-delete-icon-size);background:var(--van-uploader-delete-background-color);border-radius:0 0 0 12px}.van-uploader__preview-delete-icon{position:absolute;top:0;right:0;color:var(--van-uploader-delete-color);font-size:var(--van-uploader-delete-icon-size);transform:scale(.7) translate(10%,-10%)}.van-uploader__preview-cover{position:absolute;top:0;right:0;bottom:0;left:0}.van-uploader__mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-uploader-mask-text-color);background:var(--van-uploader-mask-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__mask-icon{font-size:var(--van-uploader-mask-icon-size)}.van-uploader__mask-message{margin-top:6px;padding:0 var(--van-padding-base);font-size:var(--van-uploader-mask-message-font-size);line-height:var(--van-uploader-mask-message-line-height)}.van-uploader__loading{width:var(--van-uploader-loading-icon-size);height:var(--van-uploader-loading-icon-size);color:var(--van-uploader-loading-icon-color)}.van-uploader__file{display:flex;flex-direction:column;align-items:center;justify-content:center;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-file-background-color)}.van-uploader__file-icon{color:var(--van-uploader-file-icon-color);font-size:var(--van-uploader-file-icon-size)}.van-uploader__file-name{box-sizing:border-box;width:100%;margin-top:var(--van-uploader-file-name-margin-top);padding:var(--van-uploader-file-name-padding);color:var(--van-uploader-file-name-text-color);font-size:var(--van-uploader-file-name-font-size);text-align:center}
|
|
1
|
+
:root{--van-uploader-size: 72px;--van-uploader-border-radius: 8px;--van-uploader-border: 1px solid var(--van-grey-50);--van-uploader-icon-size: 24px;--van-uploader-icon-color: var(--van-gray-4);--van-uploader-text-color: var(--van-text-color-2);--van-uploader-text-font-size: var(--van-font-size-sm);--van-uploader-upload-background-color: var(--van-gray-1);--van-uploader-upload-active-color: var(--van-active-color);--van-uploader-delete-color: var(--van-white);--van-uploader-delete-icon-size: 14px;--van-uploader-delete-background-color: rgba(0, 0, 0, .7);--van-uploader-file-background-color: var(--van-background-color);--van-uploader-file-icon-size: 20px;--van-uploader-file-icon-color: var(--van-gray-7);--van-uploader-file-name-padding: 0 var(--van-padding-base);--van-uploader-file-name-margin-top: var(--van-padding-xs);--van-uploader-file-name-font-size: var(--van-font-size-sm);--van-uploader-file-name-text-color: var(--van-gray-7);--van-uploader-mask-text-color: var(--van-white);--van-uploader-mask-background-color: rgba(50, 50, 51, .88);--van-uploader-mask-icon-size: 22px;--van-uploader-mask-message-font-size: var(--van-font-size-sm);--van-uploader-mask-message-line-height: var(--van-line-height-xs);--van-uploader-loading-icon-size: 22px;--van-uploader-loading-icon-color: var(--van-white);--van-uploader-disabled-opacity: var(--van-disabled-opacity);--van-uploader-required-color: var(--van-danger-color);--van-uploader-label-color: var(--van-text-color);--van-uploader-label-font-size: var(--van-font-size-md);--van-uploader-label-line-height: var(--van-line-height-md);--van-uploader-label-margin-bottom: var(--van-padding-sm)}.van-uploader{position:relative;display:inline-block}.van-uploader--required:before{position:absolute;top:0;left:calc(-1 * var(--van-padding-sm));color:var(--van-uploader-required-color);font-size:var(--van-font-size-md);line-height:var(--van-line-height-md);content:"*"}.van-uploader__label{position:relative;margin-bottom:var(--van-uploader-label-margin-bottom);color:var(--van-uploader-label-color);font-size:var(--van-uploader-label-font-size);line-height:var(--van-uploader-label-line-height)}.van-uploader__required{position:absolute;top:0;left:calc(-1 * (var(--van-padding-md) - var(--van-padding-xs)));color:var(--van-uploader-required-color)}.van-uploader__wrapper{display:flex;flex-wrap:wrap;gap:var(--van-padding-xs)}.van-uploader__wrapper--disabled{opacity:var(--van-uploader-disabled-opacity)}.van-uploader__input{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;cursor:pointer;opacity:0}.van-uploader__input--hidden{display:none}.van-uploader__input-wrapper{position:relative}.van-uploader__input:disabled{cursor:not-allowed}.van-uploader__upload{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-upload-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__upload:active{background-color:var(--van-uploader-upload-active-color)}.van-uploader__upload--readonly:active{background-color:var(--van-uploader-upload-background-color)}.van-uploader__upload-icon{color:var(--van-uploader-icon-color);font-size:var(--van-uploader-icon-size)}.van-uploader__upload-text{margin-top:var(--van-padding-xs);color:var(--van-uploader-text-color);font-size:var(--van-uploader-text-font-size)}.van-uploader__preview{position:relative;cursor:pointer;border-radius:var(--van-uploader-border-radius);overflow:hidden}.van-uploader__preview-image{display:block;width:var(--van-uploader-size);height:var(--van-uploader-size);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border);overflow:hidden;box-sizing:border-box}.van-uploader__preview-delete{position:absolute;top:0;right:0}.van-uploader__preview-delete--shadow{width:var(--van-uploader-delete-icon-size);height:var(--van-uploader-delete-icon-size);background:var(--van-uploader-delete-background-color);border-radius:0 0 0 12px}.van-uploader__preview-delete-icon{position:absolute;top:0;right:0;color:var(--van-uploader-delete-color);font-size:var(--van-uploader-delete-icon-size);transform:scale(.7) translate(10%,-10%)}.van-uploader__preview-cover{position:absolute;top:0;right:0;bottom:0;left:0}.van-uploader__mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-uploader-mask-text-color);background:var(--van-uploader-mask-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__mask-icon{font-size:var(--van-uploader-mask-icon-size)}.van-uploader__mask-message{margin-top:6px;padding:0 var(--van-padding-base);font-size:var(--van-uploader-mask-message-font-size);line-height:var(--van-uploader-mask-message-line-height)}.van-uploader__loading{width:var(--van-uploader-loading-icon-size);height:var(--van-uploader-loading-icon-size);color:var(--van-uploader-loading-icon-color)}.van-uploader__file{display:flex;flex-direction:column;align-items:center;justify-content:center;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-file-background-color)}.van-uploader__file-icon{color:var(--van-uploader-file-icon-color);font-size:var(--van-uploader-file-icon-size)}.van-uploader__file-name{box-sizing:border-box;width:100%;margin-top:var(--van-uploader-file-name-margin-top);padding:var(--van-uploader-file-name-padding);color:var(--van-uploader-file-name-text-color);font-size:var(--van-uploader-file-name-font-size);text-align:center}
|
package/lib/uploader/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
10
10
|
};
|
|
11
11
|
capture: StringConstructor;
|
|
12
12
|
multiple: BooleanConstructor;
|
|
13
|
+
sourcePicker: BooleanConstructor;
|
|
13
14
|
label: StringConstructor;
|
|
14
15
|
required: BooleanConstructor;
|
|
15
16
|
disabled: BooleanConstructor;
|
|
@@ -62,7 +63,7 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
62
63
|
type: import("vue").PropType<import("./types").UploaderMaxSize>;
|
|
63
64
|
default: number;
|
|
64
65
|
};
|
|
65
|
-
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview")[], "update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
66
|
+
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview" | "select-source")[], "update:modelValue" | "delete" | "oversize" | "click-upload" | "close-preview" | "click-preview" | "select-source", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
66
67
|
name: {
|
|
67
68
|
type: (NumberConstructor | StringConstructor)[];
|
|
68
69
|
default: string;
|
|
@@ -73,6 +74,7 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
73
74
|
};
|
|
74
75
|
capture: StringConstructor;
|
|
75
76
|
multiple: BooleanConstructor;
|
|
77
|
+
sourcePicker: BooleanConstructor;
|
|
76
78
|
label: StringConstructor;
|
|
77
79
|
required: BooleanConstructor;
|
|
78
80
|
disabled: BooleanConstructor;
|
|
@@ -132,6 +134,7 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
132
134
|
"onClick-upload"?: ((...args: any[]) => any) | undefined;
|
|
133
135
|
"onClose-preview"?: ((...args: any[]) => any) | undefined;
|
|
134
136
|
"onClick-preview"?: ((...args: any[]) => any) | undefined;
|
|
137
|
+
"onSelect-source"?: ((...args: any[]) => any) | undefined;
|
|
135
138
|
}, {
|
|
136
139
|
required: boolean;
|
|
137
140
|
name: string | number;
|
|
@@ -141,6 +144,7 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
141
144
|
readonly: boolean;
|
|
142
145
|
multiple: boolean;
|
|
143
146
|
lazyLoad: boolean;
|
|
147
|
+
sourcePicker: boolean;
|
|
144
148
|
maxCount: string | number;
|
|
145
149
|
imageFit: import("..").ImageFit;
|
|
146
150
|
resultType: import("./types").UploaderResultType;
|
|
@@ -154,7 +158,7 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
154
158
|
}>>;
|
|
155
159
|
export default Uploader;
|
|
156
160
|
export type { UploaderProps };
|
|
157
|
-
export type { UploaderInstance, UploaderResultType, UploaderFileListItem, } from './types';
|
|
161
|
+
export type { UploaderInstance, UploaderResultType, UploaderSourceType, UploaderFileListItem, } from './types';
|
|
158
162
|
declare module 'vue' {
|
|
159
163
|
interface GlobalComponents {
|
|
160
164
|
VanUploader: typeof Uploader;
|
package/lib/uploader/index.less
CHANGED
|
@@ -5,6 +5,9 @@ require("../../image/index.css");
|
|
|
5
5
|
require("../../loading/index.css");
|
|
6
6
|
require("../../overlay/index.css");
|
|
7
7
|
require("../../popup/index.css");
|
|
8
|
+
require("../../popover/index.css");
|
|
9
|
+
require("../../nav-bar/index.css");
|
|
10
|
+
require("../../action-sheet/index.css");
|
|
8
11
|
require("../../swipe/index.css");
|
|
9
12
|
require("../../swipe-item/index.css");
|
|
10
13
|
require("../../image-preview/index.css");
|
|
@@ -5,6 +5,9 @@ require("../../image/index.less");
|
|
|
5
5
|
require("../../loading/index.less");
|
|
6
6
|
require("../../overlay/index.less");
|
|
7
7
|
require("../../popup/index.less");
|
|
8
|
+
require("../../popover/index.less");
|
|
9
|
+
require("../../nav-bar/index.less");
|
|
10
|
+
require("../../action-sheet/index.less");
|
|
8
11
|
require("../../swipe/index.less");
|
|
9
12
|
require("../../swipe-item/index.less");
|
|
10
13
|
require("../../image-preview/index.less");
|
package/lib/uploader/types.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { ImageFit } from '../image';
|
|
|
3
3
|
import type { Numeric, Interceptor } from '../utils';
|
|
4
4
|
import type { UploaderProps } from './Uploader';
|
|
5
5
|
export declare type UploaderResultType = 'dataUrl' | 'text' | 'file';
|
|
6
|
+
export declare type UploaderSourceType = 'camera' | 'video' | 'album';
|
|
6
7
|
export declare type UploaderFileListItem = {
|
|
7
8
|
url?: string;
|
|
8
9
|
file?: File;
|
|
@@ -26,7 +27,7 @@ export declare type UploaderAfterRead = (items: UploaderFileListItem | UploaderF
|
|
|
26
27
|
index: number;
|
|
27
28
|
}) => void;
|
|
28
29
|
export declare type UploaderExpose = {
|
|
29
|
-
chooseFile: () => void;
|
|
30
|
+
chooseFile: (source?: UploaderSourceType) => void;
|
|
30
31
|
closeImagePreview: () => void;
|
|
31
32
|
};
|
|
32
33
|
export declare type UploaderInstance = ComponentPublicInstance<UploaderProps, UploaderExpose>;
|
package/lib/vant.cjs.js
CHANGED
|
@@ -301,6 +301,12 @@ var stdin_default$29 = {
|
|
|
301
301
|
},
|
|
302
302
|
vanTabs: {
|
|
303
303
|
moreTitle: "更多标签"
|
|
304
|
+
},
|
|
305
|
+
vanUploader: {
|
|
306
|
+
sourcePickerTitle: "选择上传方式",
|
|
307
|
+
takePhoto: "拍照",
|
|
308
|
+
recordVideo: "拍视频",
|
|
309
|
+
chooseFromAlbum: "从相册选择"
|
|
304
310
|
}
|
|
305
311
|
};
|
|
306
312
|
const lang = vue.ref("zh-CN");
|
|
@@ -1786,6 +1792,7 @@ const actionSheetProps = extend({}, popupSharedProps, {
|
|
|
1786
1792
|
closeable: truthProp,
|
|
1787
1793
|
cancelText: String,
|
|
1788
1794
|
description: String,
|
|
1795
|
+
contentAdaptive: Boolean,
|
|
1789
1796
|
closeOnPopstate: truthProp,
|
|
1790
1797
|
closeOnClickAction: Boolean,
|
|
1791
1798
|
safeAreaInsetBottom: truthProp
|
|
@@ -1894,7 +1901,9 @@ var stdin_default$1W = vue.defineComponent({
|
|
|
1894
1901
|
}
|
|
1895
1902
|
};
|
|
1896
1903
|
return () => vue.createVNode(Popup, vue.mergeProps({
|
|
1897
|
-
"class": bem$1I(
|
|
1904
|
+
"class": bem$1I({
|
|
1905
|
+
"content-adaptive": props2.contentAdaptive
|
|
1906
|
+
}),
|
|
1898
1907
|
"position": "bottom",
|
|
1899
1908
|
"onUpdate:show": updateShow
|
|
1900
1909
|
}, pick(props2, popupInheritKeys$2)), {
|
|
@@ -19217,6 +19226,7 @@ const uploaderProps = {
|
|
|
19217
19226
|
accept: makeStringProp("image/*"),
|
|
19218
19227
|
capture: String,
|
|
19219
19228
|
multiple: Boolean,
|
|
19229
|
+
sourcePicker: Boolean,
|
|
19220
19230
|
label: String,
|
|
19221
19231
|
required: Boolean,
|
|
19222
19232
|
disabled: Boolean,
|
|
@@ -19246,21 +19256,26 @@ const uploaderProps = {
|
|
|
19246
19256
|
var stdin_default$7 = vue.defineComponent({
|
|
19247
19257
|
name: name$3,
|
|
19248
19258
|
props: uploaderProps,
|
|
19249
|
-
emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "update:modelValue"],
|
|
19259
|
+
emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "select-source", "update:modelValue"],
|
|
19250
19260
|
setup(props2, {
|
|
19251
19261
|
emit,
|
|
19252
19262
|
slots
|
|
19253
19263
|
}) {
|
|
19254
19264
|
const inputRef = vue.ref();
|
|
19265
|
+
const cameraInputRef = vue.ref();
|
|
19266
|
+
const videoInputRef = vue.ref();
|
|
19267
|
+
const sourcePickerVisible = vue.ref(false);
|
|
19255
19268
|
const urls = [];
|
|
19256
19269
|
const getDetail = (index = props2.modelValue.length) => ({
|
|
19257
19270
|
name: props2.name,
|
|
19258
19271
|
index
|
|
19259
19272
|
});
|
|
19260
19273
|
const resetInput = () => {
|
|
19261
|
-
|
|
19262
|
-
|
|
19263
|
-
|
|
19274
|
+
[inputRef, cameraInputRef, videoInputRef].forEach((input) => {
|
|
19275
|
+
if (input.value) {
|
|
19276
|
+
input.value.value = "";
|
|
19277
|
+
}
|
|
19278
|
+
});
|
|
19264
19279
|
};
|
|
19265
19280
|
const onAfterRead = (items) => {
|
|
19266
19281
|
resetInput();
|
|
@@ -19396,21 +19411,69 @@ var stdin_default$7 = vue.defineComponent({
|
|
|
19396
19411
|
"class": bem$3("required")
|
|
19397
19412
|
}, [vue.createTextVNode("*")]), props2.label]);
|
|
19398
19413
|
};
|
|
19399
|
-
const
|
|
19414
|
+
const acceptTypes = () => props2.accept.split(",").map((type) => type.trim().toLowerCase()).filter(Boolean);
|
|
19415
|
+
const acceptsMediaType = (type) => acceptTypes().some((accept) => accept === `${type}/*` || accept.startsWith(`${type}/`));
|
|
19416
|
+
const triggerInput = (source) => {
|
|
19417
|
+
const target = source === "camera" ? cameraInputRef.value : source === "video" ? videoInputRef.value : inputRef.value;
|
|
19418
|
+
if (target && !props2.disabled && !props2.readonly) {
|
|
19419
|
+
emit("select-source", source);
|
|
19420
|
+
target.click();
|
|
19421
|
+
}
|
|
19422
|
+
};
|
|
19423
|
+
const onClickUpload = (event) => {
|
|
19424
|
+
emit("click-upload", event);
|
|
19425
|
+
if (props2.sourcePicker && !props2.disabled && !props2.readonly) {
|
|
19426
|
+
sourcePickerVisible.value = true;
|
|
19427
|
+
}
|
|
19428
|
+
};
|
|
19429
|
+
const renderInput = (input, accept, capture, multiple = false, hidden = false) => vue.createVNode("input", {
|
|
19430
|
+
"ref": input,
|
|
19431
|
+
"type": "file",
|
|
19432
|
+
"class": bem$3("input", {
|
|
19433
|
+
hidden
|
|
19434
|
+
}),
|
|
19435
|
+
"accept": accept,
|
|
19436
|
+
"capture": capture,
|
|
19437
|
+
"multiple": multiple,
|
|
19438
|
+
"disabled": props2.disabled,
|
|
19439
|
+
"onChange": onChange
|
|
19440
|
+
}, null);
|
|
19441
|
+
const renderSourcePicker = () => {
|
|
19442
|
+
if (!props2.sourcePicker)
|
|
19443
|
+
return;
|
|
19444
|
+
const actions = [];
|
|
19445
|
+
if (acceptsMediaType("image")) {
|
|
19446
|
+
actions.push({
|
|
19447
|
+
name: t("takePhoto"),
|
|
19448
|
+
callback: () => triggerInput("camera")
|
|
19449
|
+
});
|
|
19450
|
+
}
|
|
19451
|
+
if (acceptsMediaType("video")) {
|
|
19452
|
+
actions.push({
|
|
19453
|
+
name: t("recordVideo"),
|
|
19454
|
+
callback: () => triggerInput("video")
|
|
19455
|
+
});
|
|
19456
|
+
}
|
|
19457
|
+
actions.push({
|
|
19458
|
+
name: t("chooseFromAlbum"),
|
|
19459
|
+
callback: () => triggerInput("album")
|
|
19460
|
+
});
|
|
19461
|
+
return vue.createVNode(ActionSheet, {
|
|
19462
|
+
"show": sourcePickerVisible.value,
|
|
19463
|
+
"title": t("sourcePickerTitle"),
|
|
19464
|
+
"actions": actions,
|
|
19465
|
+
"contentAdaptive": true,
|
|
19466
|
+
"closeOnClickAction": true,
|
|
19467
|
+
"onUpdate:show": (show) => {
|
|
19468
|
+
sourcePickerVisible.value = show;
|
|
19469
|
+
}
|
|
19470
|
+
}, null);
|
|
19471
|
+
};
|
|
19400
19472
|
const renderUpload = () => {
|
|
19401
19473
|
if (props2.modelValue.length >= props2.maxCount || !props2.showUpload) {
|
|
19402
19474
|
return;
|
|
19403
19475
|
}
|
|
19404
|
-
const Input = props2.readonly ? null :
|
|
19405
|
-
"ref": inputRef,
|
|
19406
|
-
"type": "file",
|
|
19407
|
-
"class": bem$3("input"),
|
|
19408
|
-
"accept": props2.accept,
|
|
19409
|
-
"capture": props2.capture,
|
|
19410
|
-
"multiple": props2.multiple,
|
|
19411
|
-
"disabled": props2.disabled,
|
|
19412
|
-
"onChange": onChange
|
|
19413
|
-
}, null);
|
|
19476
|
+
const Input = props2.readonly ? null : props2.sourcePicker ? [renderInput(inputRef, props2.accept, void 0, props2.multiple, true), acceptsMediaType("image") && renderInput(cameraInputRef, "image/*", props2.capture || "environment", false, true), acceptsMediaType("video") && renderInput(videoInputRef, "video/*", props2.capture || "environment", false, true)] : renderInput(inputRef, props2.accept, props2.capture, props2.multiple);
|
|
19414
19477
|
if (slots.default) {
|
|
19415
19478
|
return vue.createVNode("div", {
|
|
19416
19479
|
"class": bem$3("input-wrapper"),
|
|
@@ -19430,8 +19493,14 @@ var stdin_default$7 = vue.defineComponent({
|
|
|
19430
19493
|
"class": bem$3("upload-text")
|
|
19431
19494
|
}, [props2.uploadText]), Input]);
|
|
19432
19495
|
};
|
|
19433
|
-
const chooseFile = () => {
|
|
19434
|
-
if (
|
|
19496
|
+
const chooseFile = (source) => {
|
|
19497
|
+
if (props2.disabled || props2.readonly)
|
|
19498
|
+
return;
|
|
19499
|
+
if (source) {
|
|
19500
|
+
triggerInput(source);
|
|
19501
|
+
} else if (props2.sourcePicker) {
|
|
19502
|
+
sourcePickerVisible.value = true;
|
|
19503
|
+
} else if (inputRef.value) {
|
|
19435
19504
|
inputRef.value.click();
|
|
19436
19505
|
}
|
|
19437
19506
|
};
|
|
@@ -19451,7 +19520,7 @@ var stdin_default$7 = vue.defineComponent({
|
|
|
19451
19520
|
"class": bem$3("wrapper", {
|
|
19452
19521
|
disabled: props2.disabled
|
|
19453
19522
|
})
|
|
19454
|
-
}, [props2.uploadFirst ? vue.createVNode(vue.Fragment, null, [renderUpload(), renderPreviewList()]) : vue.createVNode(vue.Fragment, null, [renderPreviewList(), renderUpload()])])]);
|
|
19523
|
+
}, [props2.uploadFirst ? vue.createVNode(vue.Fragment, null, [renderUpload(), renderPreviewList()]) : vue.createVNode(vue.Fragment, null, [renderPreviewList(), renderUpload()])]), renderSourcePicker()]);
|
|
19455
19524
|
}
|
|
19456
19525
|
});
|
|
19457
19526
|
const Uploader = withInstall(stdin_default$7);
|
|
@@ -21331,7 +21400,7 @@ const Lazyload = {
|
|
|
21331
21400
|
});
|
|
21332
21401
|
}
|
|
21333
21402
|
};
|
|
21334
|
-
const version = "0.0.
|
|
21403
|
+
const version = "0.0.43";
|
|
21335
21404
|
function install(app) {
|
|
21336
21405
|
const components = [
|
|
21337
21406
|
ActionBar,
|