persagy-vant 0.0.36 → 0.0.37

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 (97) hide show
  1. package/es/cell/Cell.d.ts +9 -0
  2. package/es/cell/Cell.mjs +15 -3
  3. package/es/cell/index.css +1 -1
  4. package/es/cell/index.d.ts +5 -0
  5. package/es/cell/index.less +24 -2
  6. package/es/cell/var.less +6 -0
  7. package/es/cell-group/CellGroup.d.ts +4 -0
  8. package/es/cell-group/CellGroup.mjs +4 -2
  9. package/es/cell-group/index.css +1 -1
  10. package/es/cell-group/index.d.ts +3 -0
  11. package/es/cell-group/index.less +27 -0
  12. package/es/cell-group/var.less +3 -0
  13. package/es/collapse-item/CollapseItem.d.ts +7 -0
  14. package/es/collapse-item/index.d.ts +5 -0
  15. package/es/field/Field.d.ts +7 -0
  16. package/es/field/index.d.ts +5 -0
  17. package/es/index.d.ts +1 -1
  18. package/es/index.mjs +1 -1
  19. package/es/loading/index.css +1 -1
  20. package/es/loading/index.less +1 -1
  21. package/es/object-select/ObjectSelect.mjs +13 -1
  22. package/es/style/base.css +1 -1
  23. package/es/style/base.less +5 -0
  24. package/es/style/css-variables.css +1 -1
  25. package/es/style/css-variables.less +1 -0
  26. package/es/style/var.less +1 -0
  27. package/es/title-bar/TitleBar.d.ts +5 -1
  28. package/es/title-bar/TitleBar.mjs +5 -3
  29. package/es/title-bar/index.css +1 -1
  30. package/es/title-bar/index.d.ts +4 -1
  31. package/es/title-bar/index.less +6 -1
  32. package/es/title-bar/var.less +2 -0
  33. package/es/uploader/Uploader.d.ts +7 -0
  34. package/es/uploader/Uploader.mjs +55 -30
  35. package/es/uploader/UploaderPreviewItem.d.ts +2 -1
  36. package/es/uploader/UploaderPreviewItem.mjs +13 -6
  37. package/es/uploader/index.css +1 -1
  38. package/es/uploader/index.d.ts +5 -0
  39. package/es/uploader/index.less +30 -0
  40. package/es/uploader/types.d.ts +1 -0
  41. package/es/uploader/utils.d.ts +2 -0
  42. package/es/uploader/utils.mjs +74 -0
  43. package/es/uploader/var.less +5 -0
  44. package/lib/cell/Cell.d.ts +9 -0
  45. package/lib/cell/Cell.js +15 -3
  46. package/lib/cell/index.css +1 -1
  47. package/lib/cell/index.d.ts +5 -0
  48. package/lib/cell/index.less +24 -2
  49. package/lib/cell/var.less +6 -0
  50. package/lib/cell-group/CellGroup.d.ts +4 -0
  51. package/lib/cell-group/CellGroup.js +4 -2
  52. package/lib/cell-group/index.css +1 -1
  53. package/lib/cell-group/index.d.ts +3 -0
  54. package/lib/cell-group/index.less +27 -0
  55. package/lib/cell-group/var.less +3 -0
  56. package/lib/collapse-item/CollapseItem.d.ts +7 -0
  57. package/lib/collapse-item/index.d.ts +5 -0
  58. package/lib/field/Field.d.ts +7 -0
  59. package/lib/field/index.d.ts +5 -0
  60. package/lib/index.css +1 -1
  61. package/lib/index.d.ts +1 -1
  62. package/lib/index.js +1 -1
  63. package/lib/loading/index.css +1 -1
  64. package/lib/loading/index.less +1 -1
  65. package/lib/object-select/ObjectSelect.js +13 -1
  66. package/lib/style/base.css +1 -1
  67. package/lib/style/base.less +5 -0
  68. package/lib/style/css-variables.css +1 -1
  69. package/lib/style/css-variables.less +1 -0
  70. package/lib/style/var.less +1 -0
  71. package/lib/title-bar/TitleBar.d.ts +5 -1
  72. package/lib/title-bar/TitleBar.js +5 -3
  73. package/lib/title-bar/index.css +1 -1
  74. package/lib/title-bar/index.d.ts +4 -1
  75. package/lib/title-bar/index.less +6 -1
  76. package/lib/title-bar/var.less +2 -0
  77. package/lib/uploader/Uploader.d.ts +7 -0
  78. package/lib/uploader/Uploader.js +53 -28
  79. package/lib/uploader/UploaderPreviewItem.d.ts +2 -1
  80. package/lib/uploader/UploaderPreviewItem.js +12 -5
  81. package/lib/uploader/index.css +1 -1
  82. package/lib/uploader/index.d.ts +5 -0
  83. package/lib/uploader/index.less +30 -0
  84. package/lib/uploader/types.d.ts +1 -0
  85. package/lib/uploader/utils.d.ts +2 -0
  86. package/lib/uploader/utils.js +74 -0
  87. package/lib/uploader/var.less +5 -0
  88. package/lib/vant.cjs.js +175 -43
  89. package/lib/vant.es.js +175 -43
  90. package/lib/vant.js +175 -43
  91. package/lib/vant.min.js +1 -1
  92. package/lib/web-types.json +1 -1
  93. package/package.json +1 -1
  94. package/skills/use-persagy-vant/SKILL.md +4 -3
  95. package/skills/use-persagy-vant/references/component-documentation.md +4 -4
  96. package/skills/use-persagy-vant/references/component-variant-selection.md +53 -0
  97. package/skills/use-persagy-vant/references/reuse-policy.md +7 -4
package/lib/vant.es.js CHANGED
@@ -2720,6 +2720,8 @@ const cellSharedProps = {
2720
2720
  title: numericProp,
2721
2721
  value: numericProp,
2722
2722
  label: numericProp,
2723
+ description: numericProp,
2724
+ threeLine: Boolean,
2723
2725
  labelSize: numericProp,
2724
2726
  avatar: String,
2725
2727
  rightAvatar: String,
@@ -2819,6 +2821,14 @@ var stdin_default$1O = defineComponent({
2819
2821
  }, [slots.label ? slots.label() : props2.label]);
2820
2822
  }
2821
2823
  };
2824
+ const renderDescription = () => {
2825
+ const showDescription = slots.description || isDef(props2.description);
2826
+ if (showDescription) {
2827
+ return createVNode("div", {
2828
+ "class": bem$1B("description")
2829
+ }, [slots.description ? slots.description() : props2.description]);
2830
+ }
2831
+ };
2822
2832
  const renderTitle = () => {
2823
2833
  if (slots.title || isDef(props2.title)) {
2824
2834
  return createVNode("div", {
@@ -2826,7 +2836,7 @@ var stdin_default$1O = defineComponent({
2826
2836
  "style": props2.titleStyle
2827
2837
  }, [createVNode("div", {
2828
2838
  "class": bem$1B("title-row")
2829
- }, [slots.title ? slots.title() : createVNode("span", null, [props2.title]), renderTags(), renderTitleIcon()]), renderLabel()]);
2839
+ }, [slots.title ? slots.title() : createVNode("span", null, [props2.title]), renderTags(), renderTitleIcon()]), renderLabel(), props2.threeLine && renderDescription()]);
2830
2840
  }
2831
2841
  };
2832
2842
  const renderValue = () => {
@@ -3014,7 +3024,8 @@ var stdin_default$1O = defineComponent({
3014
3024
  isLink,
3015
3025
  required,
3016
3026
  rightIcon,
3017
- titleBold
3027
+ titleBold,
3028
+ threeLine
3018
3029
  } = props2;
3019
3030
  const clickable = (_a2 = props2.clickable) != null ? _a2 : isLink || rightIcon === "arrow" || hasSelect("left") || hasSelect("right");
3020
3031
  const hasBadge = !!slots.badge || isDef(props2.badge);
@@ -3024,7 +3035,8 @@ var stdin_default$1O = defineComponent({
3024
3035
  required,
3025
3036
  "title-bold": titleBold,
3026
3037
  clickable,
3027
- borderless: !border
3038
+ borderless: !border,
3039
+ "three-line": threeLine
3028
3040
  };
3029
3041
  if (cellSize) {
3030
3042
  classes[cellSize] = !!cellSize;
@@ -8002,6 +8014,7 @@ const [name$1a, bem$19] = createNamespace("cell-group");
8002
8014
  const cellGroupProps = {
8003
8015
  title: String,
8004
8016
  inset: Boolean,
8017
+ grayCard: Boolean,
8005
8018
  border: truthProp
8006
8019
  };
8007
8020
  var stdin_default$1j = defineComponent({
@@ -8016,9 +8029,10 @@ var stdin_default$1j = defineComponent({
8016
8029
  var _a;
8017
8030
  return createVNode("div", mergeProps({
8018
8031
  "class": [bem$19({
8019
- inset: props2.inset
8032
+ inset: props2.inset,
8033
+ "gray-card": props2.grayCard
8020
8034
  }), {
8021
- [BORDER_TOP_BOTTOM]: props2.border && !props2.inset
8035
+ [BORDER_TOP_BOTTOM]: props2.border && !props2.inset && !props2.grayCard
8022
8036
  }]
8023
8037
  }, attrs), [(_a = slots.default) == null ? void 0 : _a.call(slots)]);
8024
8038
  };
@@ -15574,6 +15588,15 @@ var stdin_default$s = defineComponent({
15574
15588
  const expandedSelected = ref(false);
15575
15589
  const searching = ref(false);
15576
15590
  const keyword = ref("");
15591
+ const currentSpecialtyItems = (specialty) => specialtyType.value === 0 ? specialty.deviceItems : specialty.systemItems;
15592
+ const expandOnlySpecialty = () => {
15593
+ if (props2.specialties.length === 1) {
15594
+ const [specialty] = props2.specialties;
15595
+ expandedSpecialties.value = extend({}, expandedSpecialties.value, {
15596
+ [specialty.id]: true
15597
+ });
15598
+ }
15599
+ };
15577
15600
  const reset = () => {
15578
15601
  view.value = 0;
15579
15602
  specialtyType.value = 0;
@@ -15583,6 +15606,7 @@ var stdin_default$s = defineComponent({
15583
15606
  expandedSpecialties.value = {
15584
15607
  "strong-electricity": true
15585
15608
  };
15609
+ expandOnlySpecialty();
15586
15610
  };
15587
15611
  watch(() => props2.show, (show) => show && reset(), {
15588
15612
  immediate: true
@@ -15650,7 +15674,7 @@ var stdin_default$s = defineComponent({
15650
15674
  const renderSpecialty = (specialty) => {
15651
15675
  var _a;
15652
15676
  const expanded = (_a = expandedSpecialties.value[specialty.id]) != null ? _a : false;
15653
- const items = specialtyType.value === 0 ? specialty.deviceItems : specialty.systemItems;
15677
+ const items = currentSpecialtyItems(specialty);
15654
15678
  return createVNode("section", {
15655
15679
  "class": bem$n("specialty"),
15656
15680
  "key": specialty.id
@@ -15738,6 +15762,7 @@ var stdin_default$s = defineComponent({
15738
15762
  "selected": specialtyType.value === 0,
15739
15763
  "onClick": () => {
15740
15764
  specialtyType.value = 0;
15765
+ expandOnlySpecialty();
15741
15766
  }
15742
15767
  }, {
15743
15768
  default: () => [createTextVNode("设备")]
@@ -15745,6 +15770,7 @@ var stdin_default$s = defineComponent({
15745
15770
  "selected": specialtyType.value === 1,
15746
15771
  "onClick": () => {
15747
15772
  specialtyType.value = 1;
15773
+ expandOnlySpecialty();
15748
15774
  }
15749
15775
  }, {
15750
15776
  default: () => [createTextVNode("系统")]
@@ -18025,7 +18051,8 @@ const titleBarProps = {
18025
18051
  showAction: Boolean,
18026
18052
  size: makeStringProp("default"),
18027
18053
  expandable: Boolean,
18028
- modelValue: truthProp
18054
+ modelValue: truthProp,
18055
+ required: Boolean
18029
18056
  };
18030
18057
  var stdin_default$9 = defineComponent({
18031
18058
  name: name$4,
@@ -18062,7 +18089,8 @@ var stdin_default$9 = defineComponent({
18062
18089
  return createVNode("section", {
18063
18090
  "class": bem$4({
18064
18091
  mini: props2.size === "mini",
18065
- expandable: props2.expandable
18092
+ expandable: props2.expandable,
18093
+ required: props2.required
18066
18094
  })
18067
18095
  }, [createVNode("div", {
18068
18096
  "class": bem$4("header"),
@@ -18084,7 +18112,7 @@ var stdin_default$9 = defineComponent({
18084
18112
  "class": bem$4("action-divider")
18085
18113
  }, null), createVNode(Button, {
18086
18114
  "type": "text",
18087
- "size": "small",
18115
+ "size": "normal",
18088
18116
  "text": props2.actionText,
18089
18117
  "onClick": onActionClick
18090
18118
  }, null)])]), props2.size !== "mini" && props2.showDescription && props2.description && createVNode("span", {
@@ -18141,6 +18169,7 @@ function filterFiles(items, maxSize) {
18141
18169
  return { valid, invalid };
18142
18170
  }
18143
18171
  const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
18172
+ const VIDEO_REGEXP = /\.(mp4|webm|ogg|mov)(?:$|\?)/i;
18144
18173
  const isImageUrl = (url) => IMAGE_REGEXP.test(url);
18145
18174
  function isImageFile(item) {
18146
18175
  if (item.isImage) {
@@ -18157,6 +18186,77 @@ function isImageFile(item) {
18157
18186
  }
18158
18187
  return false;
18159
18188
  }
18189
+ function isVideoFile(item) {
18190
+ var _a;
18191
+ if ((_a = item.file) == null ? void 0 : _a.type) {
18192
+ return item.file.type.indexOf("video/") === 0;
18193
+ }
18194
+ if (item.url) {
18195
+ return VIDEO_REGEXP.test(item.url);
18196
+ }
18197
+ return typeof item.content === "string" && item.content.indexOf("data:video") === 0;
18198
+ }
18199
+ function createVideoThumbnail(file) {
18200
+ if (typeof document === "undefined" || typeof URL === "undefined" || typeof URL.createObjectURL !== "function") {
18201
+ return Promise.resolve(void 0);
18202
+ }
18203
+ return new Promise((resolve) => {
18204
+ const video = document.createElement("video");
18205
+ const objectUrl = URL.createObjectURL(file);
18206
+ let settled = false;
18207
+ let timeout;
18208
+ const cleanup = () => {
18209
+ if (timeout !== void 0) {
18210
+ window.clearTimeout(timeout);
18211
+ }
18212
+ URL.revokeObjectURL(objectUrl);
18213
+ video.removeAttribute("src");
18214
+ try {
18215
+ video.load();
18216
+ } catch (e) {
18217
+ }
18218
+ };
18219
+ const done = (thumbnail) => {
18220
+ if (settled)
18221
+ return;
18222
+ settled = true;
18223
+ cleanup();
18224
+ resolve(thumbnail);
18225
+ };
18226
+ const captureFrame = () => {
18227
+ if (!video.videoWidth || !video.videoHeight) {
18228
+ done();
18229
+ return;
18230
+ }
18231
+ const canvas = document.createElement("canvas");
18232
+ canvas.width = video.videoWidth;
18233
+ canvas.height = video.videoHeight;
18234
+ const context = canvas.getContext("2d");
18235
+ if (!context) {
18236
+ done();
18237
+ return;
18238
+ }
18239
+ context.drawImage(video, 0, 0, canvas.width, canvas.height);
18240
+ done(canvas.toDataURL("image/jpeg", 0.8));
18241
+ };
18242
+ video.muted = true;
18243
+ video.playsInline = true;
18244
+ video.preload = "auto";
18245
+ video.onloadedmetadata = () => {
18246
+ const duration = Number.isFinite(video.duration) ? video.duration : 0.1;
18247
+ const frameTime = Math.min(0.1, Math.max(duration - 0.01, 0));
18248
+ if (frameTime) {
18249
+ video.currentTime = frameTime;
18250
+ } else {
18251
+ captureFrame();
18252
+ }
18253
+ };
18254
+ video.onseeked = captureFrame;
18255
+ video.onerror = () => done();
18256
+ video.src = objectUrl;
18257
+ timeout = window.setTimeout(() => done(), 3e3);
18258
+ });
18259
+ }
18160
18260
  var stdin_default$8 = defineComponent({
18161
18261
  props: {
18162
18262
  name: numericProp,
@@ -18168,7 +18268,7 @@ var stdin_default$8 = defineComponent({
18168
18268
  previewSize: [Number, String, Array],
18169
18269
  beforeDelete: Function
18170
18270
  },
18171
- emits: ["delete", "preview"],
18271
+ emits: ["delete", "preview", "click"],
18172
18272
  setup(props2, {
18173
18273
  emit,
18174
18274
  slots
@@ -18209,7 +18309,11 @@ var stdin_default$8 = defineComponent({
18209
18309
  done: () => emit("delete")
18210
18310
  });
18211
18311
  };
18212
- const onPreview = () => emit("preview");
18312
+ const onPreview = () => {
18313
+ emit("preview");
18314
+ emit("click");
18315
+ };
18316
+ const onFilePreview = () => emit("click");
18213
18317
  const renderDeleteIcon = () => {
18214
18318
  if (props2.deletable && props2.item.status !== "uploading") {
18215
18319
  const slot = slots["preview-delete"];
@@ -18247,10 +18351,12 @@ var stdin_default$8 = defineComponent({
18247
18351
  imageFit,
18248
18352
  previewSize
18249
18353
  } = props2;
18250
- if (isImageFile(item)) {
18354
+ const isImage2 = isImageFile(item);
18355
+ const isVideo = isVideoFile(item);
18356
+ if (isImage2 || isVideo && item.videoThumbnail) {
18251
18357
  return createVNode(Image$1, {
18252
18358
  "fit": imageFit,
18253
- "src": item.content || item.url,
18359
+ "src": isVideo ? item.videoThumbnail : item.content || item.url,
18254
18360
  "class": bem$3("preview-image"),
18255
18361
  "width": Array.isArray(previewSize) ? previewSize[0] : previewSize,
18256
18362
  "height": Array.isArray(previewSize) ? previewSize[1] : previewSize,
@@ -18262,7 +18368,8 @@ var stdin_default$8 = defineComponent({
18262
18368
  }
18263
18369
  return createVNode("div", {
18264
18370
  "class": bem$3("file"),
18265
- "style": getSizeStyle(props2.previewSize)
18371
+ "style": getSizeStyle(props2.previewSize),
18372
+ "onClick": onFilePreview
18266
18373
  }, [createVNode(Icon, {
18267
18374
  "class": bem$3("file-icon"),
18268
18375
  "name": "description"
@@ -18275,11 +18382,33 @@ var stdin_default$8 = defineComponent({
18275
18382
  }, [renderPreview(), renderMask(), renderDeleteIcon()]);
18276
18383
  }
18277
18384
  });
18385
+ var __async$1 = (__this, __arguments, generator) => {
18386
+ return new Promise((resolve, reject) => {
18387
+ var fulfilled = (value) => {
18388
+ try {
18389
+ step(generator.next(value));
18390
+ } catch (e) {
18391
+ reject(e);
18392
+ }
18393
+ };
18394
+ var rejected = (value) => {
18395
+ try {
18396
+ step(generator.throw(value));
18397
+ } catch (e) {
18398
+ reject(e);
18399
+ }
18400
+ };
18401
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18402
+ step((generator = generator.apply(__this, __arguments)).next());
18403
+ });
18404
+ };
18278
18405
  const uploaderProps = {
18279
18406
  name: makeNumericProp(""),
18280
18407
  accept: makeStringProp("image/*"),
18281
18408
  capture: String,
18282
18409
  multiple: Boolean,
18410
+ label: String,
18411
+ required: Boolean,
18283
18412
  disabled: Boolean,
18284
18413
  readonly: Boolean,
18285
18414
  lazyLoad: Boolean,
@@ -18349,37 +18478,29 @@ var stdin_default$7 = defineComponent({
18349
18478
  modelValue,
18350
18479
  resultType
18351
18480
  } = props2;
18481
+ const createFileItem = (file) => __async$1(this, null, function* () {
18482
+ const content = yield readFileContent(file, resultType);
18483
+ const result = {
18484
+ file,
18485
+ status: "",
18486
+ message: ""
18487
+ };
18488
+ if (content) {
18489
+ result.content = content;
18490
+ }
18491
+ if (isVideoFile(result)) {
18492
+ result.videoThumbnail = yield createVideoThumbnail(file);
18493
+ }
18494
+ return result;
18495
+ });
18352
18496
  if (Array.isArray(files)) {
18353
18497
  const remainCount = +maxCount - modelValue.length;
18354
18498
  if (files.length > remainCount) {
18355
18499
  files = files.slice(0, remainCount);
18356
18500
  }
18357
- Promise.all(files.map((file) => readFileContent(file, resultType))).then((contents) => {
18358
- const fileList = files.map((file, index) => {
18359
- const result = {
18360
- file,
18361
- status: "",
18362
- message: ""
18363
- };
18364
- if (contents[index]) {
18365
- result.content = contents[index];
18366
- }
18367
- return result;
18368
- });
18369
- onAfterRead(fileList);
18370
- });
18501
+ Promise.all(files.map(createFileItem)).then(onAfterRead);
18371
18502
  } else {
18372
- readFileContent(files, resultType).then((content) => {
18373
- const result = {
18374
- file: files,
18375
- status: "",
18376
- message: ""
18377
- };
18378
- if (content) {
18379
- result.content = content;
18380
- }
18381
- onAfterRead(result);
18382
- });
18503
+ createFileItem(files).then(onAfterRead);
18383
18504
  }
18384
18505
  };
18385
18506
  const onChange = (event) => {
@@ -18412,7 +18533,7 @@ var stdin_default$7 = defineComponent({
18412
18533
  let imagePreview;
18413
18534
  const onClosePreview = () => emit("close-preview");
18414
18535
  const previewImage = (item) => {
18415
- if (props2.previewFullImage) {
18536
+ if (props2.previewFullImage && isImageFile(item)) {
18416
18537
  const imageFiles = props2.modelValue.filter(isImageFile);
18417
18538
  const images = imageFiles.map((item2) => {
18418
18539
  if (item2.file && !item2.url && item2.status !== "failed") {
@@ -18455,6 +18576,15 @@ var stdin_default$7 = defineComponent({
18455
18576
  return props2.modelValue.map(renderPreviewItem);
18456
18577
  }
18457
18578
  };
18579
+ const renderLabel = () => {
18580
+ if (!props2.label)
18581
+ return;
18582
+ return createVNode("div", {
18583
+ "class": bem$3("label")
18584
+ }, [props2.required && createVNode("span", {
18585
+ "class": bem$3("required")
18586
+ }, [createTextVNode("*")]), props2.label]);
18587
+ };
18458
18588
  const onClickUpload = (event) => emit("click-upload", event);
18459
18589
  const renderUpload = () => {
18460
18590
  if (props2.modelValue.length >= props2.maxCount || !props2.showUpload) {
@@ -18503,8 +18633,10 @@ var stdin_default$7 = defineComponent({
18503
18633
  });
18504
18634
  useCustomFieldValue(() => props2.modelValue);
18505
18635
  return () => createVNode("div", {
18506
- "class": bem$3()
18507
- }, [createVNode("div", {
18636
+ "class": bem$3({
18637
+ required: props2.required && !props2.label
18638
+ })
18639
+ }, [renderLabel(), createVNode("div", {
18508
18640
  "class": bem$3("wrapper", {
18509
18641
  disabled: props2.disabled
18510
18642
  })
@@ -20348,7 +20480,7 @@ const Lazyload = {
20348
20480
  });
20349
20481
  }
20350
20482
  };
20351
- const version = "0.0.36";
20483
+ const version = "0.0.37";
20352
20484
  function install(app) {
20353
20485
  const components = [
20354
20486
  ActionBar,