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.
Files changed (46) hide show
  1. package/es/action-sheet/ActionSheet.d.ts +4 -0
  2. package/es/action-sheet/ActionSheet.mjs +4 -1
  3. package/es/action-sheet/index.css +1 -1
  4. package/es/action-sheet/index.d.ts +3 -0
  5. package/es/action-sheet/index.less +4 -0
  6. package/es/index.d.ts +1 -1
  7. package/es/index.mjs +1 -1
  8. package/es/locale/lang/en-US.d.ts +6 -0
  9. package/es/locale/lang/en-US.mjs +6 -0
  10. package/es/locale/lang/zh-CN.d.ts +6 -0
  11. package/es/locale/lang/zh-CN.mjs +6 -0
  12. package/es/uploader/Uploader.d.ts +6 -1
  13. package/es/uploader/Uploader.mjs +80 -19
  14. package/es/uploader/index.css +1 -1
  15. package/es/uploader/index.d.ts +6 -2
  16. package/es/uploader/index.less +4 -0
  17. package/es/uploader/style/index.mjs +3 -0
  18. package/es/uploader/style/less.mjs +3 -0
  19. package/es/uploader/types.d.ts +2 -1
  20. package/lib/action-sheet/ActionSheet.d.ts +4 -0
  21. package/lib/action-sheet/ActionSheet.js +4 -1
  22. package/lib/action-sheet/index.css +1 -1
  23. package/lib/action-sheet/index.d.ts +3 -0
  24. package/lib/action-sheet/index.less +4 -0
  25. package/lib/index.css +1 -1
  26. package/lib/index.d.ts +1 -1
  27. package/lib/index.js +1 -1
  28. package/lib/locale/lang/en-US.d.ts +6 -0
  29. package/lib/locale/lang/en-US.js +6 -0
  30. package/lib/locale/lang/zh-CN.d.ts +6 -0
  31. package/lib/locale/lang/zh-CN.js +6 -0
  32. package/lib/uploader/Uploader.d.ts +6 -1
  33. package/lib/uploader/Uploader.js +79 -18
  34. package/lib/uploader/index.css +1 -1
  35. package/lib/uploader/index.d.ts +6 -2
  36. package/lib/uploader/index.less +4 -0
  37. package/lib/uploader/style/index.js +3 -0
  38. package/lib/uploader/style/less.js +3 -0
  39. package/lib/uploader/types.d.ts +2 -1
  40. package/lib/vant.cjs.js +89 -20
  41. package/lib/vant.es.js +89 -20
  42. package/lib/vant.js +89 -20
  43. package/lib/vant.min.js +1 -1
  44. package/lib/web-types.json +1 -1
  45. package/package.json +1 -1
  46. package/skills/use-persagy-vant/references/component-catalog.md +1 -1
package/lib/vant.es.js CHANGED
@@ -299,6 +299,12 @@ var stdin_default$29 = {
299
299
  },
300
300
  vanTabs: {
301
301
  moreTitle: "更多标签"
302
+ },
303
+ vanUploader: {
304
+ sourcePickerTitle: "选择上传方式",
305
+ takePhoto: "拍照",
306
+ recordVideo: "拍视频",
307
+ chooseFromAlbum: "从相册选择"
302
308
  }
303
309
  };
304
310
  const lang = ref("zh-CN");
@@ -1784,6 +1790,7 @@ const actionSheetProps = extend({}, popupSharedProps, {
1784
1790
  closeable: truthProp,
1785
1791
  cancelText: String,
1786
1792
  description: String,
1793
+ contentAdaptive: Boolean,
1787
1794
  closeOnPopstate: truthProp,
1788
1795
  closeOnClickAction: Boolean,
1789
1796
  safeAreaInsetBottom: truthProp
@@ -1892,7 +1899,9 @@ var stdin_default$1W = defineComponent({
1892
1899
  }
1893
1900
  };
1894
1901
  return () => createVNode(Popup, mergeProps({
1895
- "class": bem$1I(),
1902
+ "class": bem$1I({
1903
+ "content-adaptive": props2.contentAdaptive
1904
+ }),
1896
1905
  "position": "bottom",
1897
1906
  "onUpdate:show": updateShow
1898
1907
  }, pick(props2, popupInheritKeys$2)), {
@@ -19215,6 +19224,7 @@ const uploaderProps = {
19215
19224
  accept: makeStringProp("image/*"),
19216
19225
  capture: String,
19217
19226
  multiple: Boolean,
19227
+ sourcePicker: Boolean,
19218
19228
  label: String,
19219
19229
  required: Boolean,
19220
19230
  disabled: Boolean,
@@ -19244,21 +19254,26 @@ const uploaderProps = {
19244
19254
  var stdin_default$7 = defineComponent({
19245
19255
  name: name$3,
19246
19256
  props: uploaderProps,
19247
- emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "update:modelValue"],
19257
+ emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "select-source", "update:modelValue"],
19248
19258
  setup(props2, {
19249
19259
  emit,
19250
19260
  slots
19251
19261
  }) {
19252
19262
  const inputRef = ref();
19263
+ const cameraInputRef = ref();
19264
+ const videoInputRef = ref();
19265
+ const sourcePickerVisible = ref(false);
19253
19266
  const urls = [];
19254
19267
  const getDetail = (index = props2.modelValue.length) => ({
19255
19268
  name: props2.name,
19256
19269
  index
19257
19270
  });
19258
19271
  const resetInput = () => {
19259
- if (inputRef.value) {
19260
- inputRef.value.value = "";
19261
- }
19272
+ [inputRef, cameraInputRef, videoInputRef].forEach((input) => {
19273
+ if (input.value) {
19274
+ input.value.value = "";
19275
+ }
19276
+ });
19262
19277
  };
19263
19278
  const onAfterRead = (items) => {
19264
19279
  resetInput();
@@ -19394,21 +19409,69 @@ var stdin_default$7 = defineComponent({
19394
19409
  "class": bem$3("required")
19395
19410
  }, [createTextVNode("*")]), props2.label]);
19396
19411
  };
19397
- const onClickUpload = (event) => emit("click-upload", event);
19412
+ const acceptTypes = () => props2.accept.split(",").map((type) => type.trim().toLowerCase()).filter(Boolean);
19413
+ const acceptsMediaType = (type) => acceptTypes().some((accept) => accept === `${type}/*` || accept.startsWith(`${type}/`));
19414
+ const triggerInput = (source) => {
19415
+ const target = source === "camera" ? cameraInputRef.value : source === "video" ? videoInputRef.value : inputRef.value;
19416
+ if (target && !props2.disabled && !props2.readonly) {
19417
+ emit("select-source", source);
19418
+ target.click();
19419
+ }
19420
+ };
19421
+ const onClickUpload = (event) => {
19422
+ emit("click-upload", event);
19423
+ if (props2.sourcePicker && !props2.disabled && !props2.readonly) {
19424
+ sourcePickerVisible.value = true;
19425
+ }
19426
+ };
19427
+ const renderInput = (input, accept, capture, multiple = false, hidden = false) => createVNode("input", {
19428
+ "ref": input,
19429
+ "type": "file",
19430
+ "class": bem$3("input", {
19431
+ hidden
19432
+ }),
19433
+ "accept": accept,
19434
+ "capture": capture,
19435
+ "multiple": multiple,
19436
+ "disabled": props2.disabled,
19437
+ "onChange": onChange
19438
+ }, null);
19439
+ const renderSourcePicker = () => {
19440
+ if (!props2.sourcePicker)
19441
+ return;
19442
+ const actions = [];
19443
+ if (acceptsMediaType("image")) {
19444
+ actions.push({
19445
+ name: t("takePhoto"),
19446
+ callback: () => triggerInput("camera")
19447
+ });
19448
+ }
19449
+ if (acceptsMediaType("video")) {
19450
+ actions.push({
19451
+ name: t("recordVideo"),
19452
+ callback: () => triggerInput("video")
19453
+ });
19454
+ }
19455
+ actions.push({
19456
+ name: t("chooseFromAlbum"),
19457
+ callback: () => triggerInput("album")
19458
+ });
19459
+ return createVNode(ActionSheet, {
19460
+ "show": sourcePickerVisible.value,
19461
+ "title": t("sourcePickerTitle"),
19462
+ "actions": actions,
19463
+ "contentAdaptive": true,
19464
+ "closeOnClickAction": true,
19465
+ "onUpdate:show": (show) => {
19466
+ sourcePickerVisible.value = show;
19467
+ }
19468
+ }, null);
19469
+ };
19398
19470
  const renderUpload = () => {
19399
19471
  if (props2.modelValue.length >= props2.maxCount || !props2.showUpload) {
19400
19472
  return;
19401
19473
  }
19402
- const Input = props2.readonly ? null : createVNode("input", {
19403
- "ref": inputRef,
19404
- "type": "file",
19405
- "class": bem$3("input"),
19406
- "accept": props2.accept,
19407
- "capture": props2.capture,
19408
- "multiple": props2.multiple,
19409
- "disabled": props2.disabled,
19410
- "onChange": onChange
19411
- }, null);
19474
+ 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);
19412
19475
  if (slots.default) {
19413
19476
  return createVNode("div", {
19414
19477
  "class": bem$3("input-wrapper"),
@@ -19428,8 +19491,14 @@ var stdin_default$7 = defineComponent({
19428
19491
  "class": bem$3("upload-text")
19429
19492
  }, [props2.uploadText]), Input]);
19430
19493
  };
19431
- const chooseFile = () => {
19432
- if (inputRef.value && !props2.disabled) {
19494
+ const chooseFile = (source) => {
19495
+ if (props2.disabled || props2.readonly)
19496
+ return;
19497
+ if (source) {
19498
+ triggerInput(source);
19499
+ } else if (props2.sourcePicker) {
19500
+ sourcePickerVisible.value = true;
19501
+ } else if (inputRef.value) {
19433
19502
  inputRef.value.click();
19434
19503
  }
19435
19504
  };
@@ -19449,7 +19518,7 @@ var stdin_default$7 = defineComponent({
19449
19518
  "class": bem$3("wrapper", {
19450
19519
  disabled: props2.disabled
19451
19520
  })
19452
- }, [props2.uploadFirst ? createVNode(Fragment, null, [renderUpload(), renderPreviewList()]) : createVNode(Fragment, null, [renderPreviewList(), renderUpload()])])]);
19521
+ }, [props2.uploadFirst ? createVNode(Fragment, null, [renderUpload(), renderPreviewList()]) : createVNode(Fragment, null, [renderPreviewList(), renderUpload()])]), renderSourcePicker()]);
19453
19522
  }
19454
19523
  });
19455
19524
  const Uploader = withInstall(stdin_default$7);
@@ -21329,7 +21398,7 @@ const Lazyload = {
21329
21398
  });
21330
21399
  }
21331
21400
  };
21332
- const version = "0.0.42";
21401
+ const version = "0.0.43";
21333
21402
  function install(app) {
21334
21403
  const components = [
21335
21404
  ActionBar,
package/lib/vant.js CHANGED
@@ -656,6 +656,12 @@
656
656
  },
657
657
  vanTabs: {
658
658
  moreTitle: "更多标签"
659
+ },
660
+ vanUploader: {
661
+ sourcePickerTitle: "选择上传方式",
662
+ takePhoto: "拍照",
663
+ recordVideo: "拍视频",
664
+ chooseFromAlbum: "从相册选择"
659
665
  }
660
666
  };
661
667
  const lang = vue.ref("zh-CN");
@@ -3035,6 +3041,7 @@
3035
3041
  closeable: truthProp,
3036
3042
  cancelText: String,
3037
3043
  description: String,
3044
+ contentAdaptive: Boolean,
3038
3045
  closeOnPopstate: truthProp,
3039
3046
  closeOnClickAction: Boolean,
3040
3047
  safeAreaInsetBottom: truthProp
@@ -3143,7 +3150,9 @@
3143
3150
  }
3144
3151
  };
3145
3152
  return () => vue.createVNode(Popup, vue.mergeProps({
3146
- "class": bem$1I(),
3153
+ "class": bem$1I({
3154
+ "content-adaptive": props2.contentAdaptive
3155
+ }),
3147
3156
  "position": "bottom",
3148
3157
  "onUpdate:show": updateShow
3149
3158
  }, pick(props2, popupInheritKeys$2)), {
@@ -20404,6 +20413,7 @@
20404
20413
  accept: makeStringProp("image/*"),
20405
20414
  capture: String,
20406
20415
  multiple: Boolean,
20416
+ sourcePicker: Boolean,
20407
20417
  label: String,
20408
20418
  required: Boolean,
20409
20419
  disabled: Boolean,
@@ -20433,21 +20443,26 @@
20433
20443
  var stdin_default$7 = vue.defineComponent({
20434
20444
  name: name$3,
20435
20445
  props: uploaderProps,
20436
- emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "update:modelValue"],
20446
+ emits: ["delete", "oversize", "click-upload", "close-preview", "click-preview", "select-source", "update:modelValue"],
20437
20447
  setup(props2, {
20438
20448
  emit,
20439
20449
  slots
20440
20450
  }) {
20441
20451
  const inputRef = vue.ref();
20452
+ const cameraInputRef = vue.ref();
20453
+ const videoInputRef = vue.ref();
20454
+ const sourcePickerVisible = vue.ref(false);
20442
20455
  const urls = [];
20443
20456
  const getDetail = (index = props2.modelValue.length) => ({
20444
20457
  name: props2.name,
20445
20458
  index
20446
20459
  });
20447
20460
  const resetInput = () => {
20448
- if (inputRef.value) {
20449
- inputRef.value.value = "";
20450
- }
20461
+ [inputRef, cameraInputRef, videoInputRef].forEach((input) => {
20462
+ if (input.value) {
20463
+ input.value.value = "";
20464
+ }
20465
+ });
20451
20466
  };
20452
20467
  const onAfterRead = (items) => {
20453
20468
  resetInput();
@@ -20583,21 +20598,69 @@
20583
20598
  "class": bem$3("required")
20584
20599
  }, [vue.createTextVNode("*")]), props2.label]);
20585
20600
  };
20586
- const onClickUpload = (event) => emit("click-upload", event);
20601
+ const acceptTypes = () => props2.accept.split(",").map((type) => type.trim().toLowerCase()).filter(Boolean);
20602
+ const acceptsMediaType = (type) => acceptTypes().some((accept) => accept === `${type}/*` || accept.startsWith(`${type}/`));
20603
+ const triggerInput = (source2) => {
20604
+ const target = source2 === "camera" ? cameraInputRef.value : source2 === "video" ? videoInputRef.value : inputRef.value;
20605
+ if (target && !props2.disabled && !props2.readonly) {
20606
+ emit("select-source", source2);
20607
+ target.click();
20608
+ }
20609
+ };
20610
+ const onClickUpload = (event) => {
20611
+ emit("click-upload", event);
20612
+ if (props2.sourcePicker && !props2.disabled && !props2.readonly) {
20613
+ sourcePickerVisible.value = true;
20614
+ }
20615
+ };
20616
+ const renderInput = (input, accept, capture, multiple = false, hidden = false) => vue.createVNode("input", {
20617
+ "ref": input,
20618
+ "type": "file",
20619
+ "class": bem$3("input", {
20620
+ hidden
20621
+ }),
20622
+ "accept": accept,
20623
+ "capture": capture,
20624
+ "multiple": multiple,
20625
+ "disabled": props2.disabled,
20626
+ "onChange": onChange
20627
+ }, null);
20628
+ const renderSourcePicker = () => {
20629
+ if (!props2.sourcePicker)
20630
+ return;
20631
+ const actions = [];
20632
+ if (acceptsMediaType("image")) {
20633
+ actions.push({
20634
+ name: t("takePhoto"),
20635
+ callback: () => triggerInput("camera")
20636
+ });
20637
+ }
20638
+ if (acceptsMediaType("video")) {
20639
+ actions.push({
20640
+ name: t("recordVideo"),
20641
+ callback: () => triggerInput("video")
20642
+ });
20643
+ }
20644
+ actions.push({
20645
+ name: t("chooseFromAlbum"),
20646
+ callback: () => triggerInput("album")
20647
+ });
20648
+ return vue.createVNode(ActionSheet, {
20649
+ "show": sourcePickerVisible.value,
20650
+ "title": t("sourcePickerTitle"),
20651
+ "actions": actions,
20652
+ "contentAdaptive": true,
20653
+ "closeOnClickAction": true,
20654
+ "onUpdate:show": (show) => {
20655
+ sourcePickerVisible.value = show;
20656
+ }
20657
+ }, null);
20658
+ };
20587
20659
  const renderUpload = () => {
20588
20660
  if (props2.modelValue.length >= props2.maxCount || !props2.showUpload) {
20589
20661
  return;
20590
20662
  }
20591
- const Input = props2.readonly ? null : vue.createVNode("input", {
20592
- "ref": inputRef,
20593
- "type": "file",
20594
- "class": bem$3("input"),
20595
- "accept": props2.accept,
20596
- "capture": props2.capture,
20597
- "multiple": props2.multiple,
20598
- "disabled": props2.disabled,
20599
- "onChange": onChange
20600
- }, null);
20663
+ 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);
20601
20664
  if (slots.default) {
20602
20665
  return vue.createVNode("div", {
20603
20666
  "class": bem$3("input-wrapper"),
@@ -20617,8 +20680,14 @@
20617
20680
  "class": bem$3("upload-text")
20618
20681
  }, [props2.uploadText]), Input]);
20619
20682
  };
20620
- const chooseFile = () => {
20621
- if (inputRef.value && !props2.disabled) {
20683
+ const chooseFile = (source2) => {
20684
+ if (props2.disabled || props2.readonly)
20685
+ return;
20686
+ if (source2) {
20687
+ triggerInput(source2);
20688
+ } else if (props2.sourcePicker) {
20689
+ sourcePickerVisible.value = true;
20690
+ } else if (inputRef.value) {
20622
20691
  inputRef.value.click();
20623
20692
  }
20624
20693
  };
@@ -20638,7 +20707,7 @@
20638
20707
  "class": bem$3("wrapper", {
20639
20708
  disabled: props2.disabled
20640
20709
  })
20641
- }, [props2.uploadFirst ? vue.createVNode(vue.Fragment, null, [renderUpload(), renderPreviewList()]) : vue.createVNode(vue.Fragment, null, [renderPreviewList(), renderUpload()])])]);
20710
+ }, [props2.uploadFirst ? vue.createVNode(vue.Fragment, null, [renderUpload(), renderPreviewList()]) : vue.createVNode(vue.Fragment, null, [renderPreviewList(), renderUpload()])]), renderSourcePicker()]);
20642
20711
  }
20643
20712
  });
20644
20713
  const Uploader = withInstall(stdin_default$7);
@@ -24918,7 +24987,7 @@
24918
24987
  });
24919
24988
  }
24920
24989
  };
24921
- const version = "0.0.42";
24990
+ const version = "0.0.43";
24922
24991
  function install(app) {
24923
24992
  const components = [
24924
24993
  ActionBar,