@nutui/nutui-react-taro 2.0.19-beta.0 → 2.0.20-beta.0

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 (75) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/esm/ActionSheet.js +2 -2
  3. package/dist/esm/Address.js +3 -3
  4. package/dist/esm/Avatar.js +3 -2
  5. package/dist/esm/Calendar.js +2 -2
  6. package/dist/esm/Cascader.js +2 -2
  7. package/dist/esm/DatePicker.js +3 -3
  8. package/dist/esm/Form.js +21 -45
  9. package/dist/esm/Grid.js +3 -2
  10. package/dist/esm/GridItem.js +2 -1
  11. package/dist/esm/Image.js +3 -1
  12. package/dist/esm/ImagePreview.js +4 -2
  13. package/dist/esm/Menu.js +2 -2
  14. package/dist/esm/MenuItem.js +1 -1
  15. package/dist/esm/NumberKeyboard.js +2 -2
  16. package/dist/esm/Picker.js +2 -2
  17. package/dist/esm/Popover.js +2 -2
  18. package/dist/esm/Popup.js +1 -1
  19. package/dist/esm/ShortPassword.js +2 -2
  20. package/dist/esm/SideNavBar.js +2 -2
  21. package/dist/esm/Skeleton.js +4 -3
  22. package/dist/esm/Swiper.js +14 -7
  23. package/dist/esm/TimeSelect.js +2 -2
  24. package/dist/esm/Tour.js +3 -3
  25. package/dist/esm/Uploader.js +5 -3
  26. package/dist/esm/{actionsheet.taro-374745a3.js → actionsheet.taro-4ce9962a.js} +1 -1
  27. package/dist/esm/{address.taro-7b3ad807.js → address.taro-33910001.js} +2 -2
  28. package/dist/esm/{avatar.taro-0e574535.js → avatar.taro-1743c7c3.js} +1 -1
  29. package/dist/esm/{calendar.taro-2c342d6b.js → calendar.taro-45a9c705.js} +1 -1
  30. package/dist/esm/{cascader.taro-6ee25349.js → cascader.taro-505e8467.js} +1 -1
  31. package/dist/esm/{datepicker.taro-de668a19.js → datepicker.taro-725e96f0.js} +1 -1
  32. package/dist/esm/{grid.taro-f72acab8.js → grid.taro-13674639.js} +2 -1
  33. package/dist/esm/{griditem.taro-b7abc653.js → griditem.taro-9e1c493c.js} +2 -5
  34. package/dist/esm/{image.taro-a7ad2272.js → image.taro-fa4a92a1.js} +6 -5
  35. package/dist/esm/{imagepreview.taro-78c0a7b8.js → imagepreview.taro-fcd29363.js} +4 -3
  36. package/dist/esm/{menu.taro-f419b9ef.js → menu.taro-cf8d7d5b.js} +1 -1
  37. package/dist/esm/{menuitem.taro-d598a86e.js → menuitem.taro-b73e5ed3.js} +2 -0
  38. package/dist/esm/{numberkeyboard.taro-bd6a9439.js → numberkeyboard.taro-ec8f8435.js} +1 -1
  39. package/dist/esm/nutui-react.es.js +23 -22
  40. package/dist/esm/{picker.taro-e08d99a3.js → picker.taro-5f86e72b.js} +1 -1
  41. package/dist/esm/{popover.taro-6b946803.js → popover.taro-539d15e4.js} +1 -1
  42. package/dist/esm/{popup.taro-1636100a.js → popup.taro-3273aa87.js} +3 -1
  43. package/dist/esm/px-check-f83a9dc3.js +6 -0
  44. package/dist/esm/{shortpassword.taro-331d270c.js → shortpassword.taro-8e8c4102.js} +1 -1
  45. package/dist/esm/{sidenavbar.taro-39fb8ac6.js → sidenavbar.taro-97230c40.js} +1 -1
  46. package/dist/esm/{skeleton.taro-1f829d87.js → skeleton.taro-5a621338.js} +1 -1
  47. package/dist/esm/{timeselect.taro-e02f6bf9.js → timeselect.taro-892ca807.js} +1 -1
  48. package/dist/esm/{tour.taro-88cf1ba9.js → tour.taro-b38e06a5.js} +1 -1
  49. package/dist/esm/types/src/packages/uploader/demo.taro.d.ts +0 -15
  50. package/dist/esm/types/src/packages/uploader/file-item.d.ts +19 -0
  51. package/dist/esm/types/src/packages/uploader/index.d.ts +2 -1
  52. package/dist/esm/types/src/packages/uploader/index.taro.d.ts +2 -1
  53. package/dist/esm/types/src/packages/uploader/preview.d.ts +2 -0
  54. package/dist/esm/types/src/packages/uploader/preview.taro.d.ts +2 -0
  55. package/dist/esm/types/src/packages/uploader/upload.d.ts +3 -0
  56. package/dist/esm/types/src/packages/uploader/uploader.d.ts +5 -23
  57. package/dist/esm/types/src/packages/uploader/uploader.taro.d.ts +10 -26
  58. package/dist/esm/{uploader.taro-56b2ca0d.js → uploader.taro-da0414ba.js} +148 -134
  59. package/dist/locales/base.js +1 -1
  60. package/dist/locales/en-US.js +1 -1
  61. package/dist/locales/id-ID.js +1 -1
  62. package/dist/locales/tr-TR.js +1 -1
  63. package/dist/locales/zh-CN.js +1 -1
  64. package/dist/locales/zh-TW.js +1 -1
  65. package/dist/locales/zh-UG.js +1 -1
  66. package/dist/nutui.react.es.js +291 -273
  67. package/dist/nutui.react.umd.js +291 -273
  68. package/dist/style.mjs +1 -1
  69. package/dist/types/packages/calendar/calendar.taro.d.ts +4 -4
  70. package/dist/types/packages/uploader/file-item.d.ts +19 -0
  71. package/dist/types/packages/uploader/index.taro.d.ts +2 -1
  72. package/dist/types/packages/uploader/preview.taro.d.ts +2 -0
  73. package/dist/types/packages/uploader/upload.d.ts +3 -0
  74. package/dist/types/packages/uploader/uploader.taro.d.ts +10 -26
  75. package/package.json +1 -1
@@ -5,7 +5,7 @@ var __publicField = (obj, key, value) => {
5
5
  return value;
6
6
  };
7
7
  /*!
8
- * @nutui/nutui-react-taro v2.0.19-beta.0 Mon Sep 25 2023 18:03:38 GMT+0800 (China Standard Time)
8
+ * @nutui/nutui-react-taro v2.0.20 Fri Oct 13 2023 13:54:07 GMT+0800 (China Standard Time)
9
9
  * (c) 2023 @jdf2e.
10
10
  * Released under the MIT License.
11
11
  */
@@ -3222,6 +3222,9 @@ const ConfigProvider = (props) => {
3222
3222
  ));
3223
3223
  };
3224
3224
  ConfigProvider.displayName = "NutConfigProvider";
3225
+ const pxCheck = (value) => {
3226
+ return Number.isNaN(Number(value)) ? String(value) : `${value}px`;
3227
+ };
3225
3228
  const defaultProps$1r = {
3226
3229
  src: "",
3227
3230
  error: true,
@@ -3256,14 +3259,13 @@ const Image$1 = (props) => {
3256
3259
  onError && onError(e);
3257
3260
  }
3258
3261
  };
3259
- const pxCheck2 = (value) => {
3260
- return Number.isNaN(Number(value)) ? String(value) : `${value}px`;
3261
- };
3262
3262
  const containerStyle = {
3263
- height: height ? pxCheck2(height) : "",
3264
- width: width ? pxCheck2(width) : "",
3263
+ // eslint-disable-next-line no-nested-ternary
3264
+ height: height ? pxCheck(height) : Taro.getEnv() === "WEB" ? "" : "100px",
3265
+ // eslint-disable-next-line no-nested-ternary
3266
+ width: width ? pxCheck(width) : Taro.getEnv() === "WEB" ? "" : "100%",
3265
3267
  overflow: radius !== void 0 && radius !== null ? "hidden" : "",
3266
- borderRadius: radius !== void 0 && radius !== null ? pxCheck2(radius) : ""
3268
+ borderRadius: radius !== void 0 && radius !== null ? pxCheck(radius) : ""
3267
3269
  };
3268
3270
  const imgStyle = {
3269
3271
  ...style
@@ -5208,9 +5210,6 @@ const gridContext = {
5208
5210
  }
5209
5211
  };
5210
5212
  const GridContext = React__default.createContext(gridContext);
5211
- const pxCheck = (value) => {
5212
- return Number.isNaN(Number(value)) ? String(value) : `${value}px`;
5213
- };
5214
5213
  const defaultProps$1o = {
5215
5214
  text: "",
5216
5215
  columns: 4,
@@ -6175,7 +6174,9 @@ const Popup = (props) => {
6175
6174
  const open2 = () => {
6176
6175
  if (!innerVisible) {
6177
6176
  setInnerVisible(true);
6178
- setIndex(++_zIndex);
6177
+ if (props.zIndex === void 0) {
6178
+ setIndex(++_zIndex);
6179
+ }
6179
6180
  }
6180
6181
  if (destroyOnClose) {
6181
6182
  setShowChildren(true);
@@ -10926,11 +10927,11 @@ class FormStore {
10926
10927
  ...this.store,
10927
10928
  ...newStore
10928
10929
  };
10929
- this.fieldEntities.forEach((enetity) => {
10930
- const { name } = enetity.props;
10930
+ this.fieldEntities.forEach((entity) => {
10931
+ const { name } = entity.props;
10931
10932
  Object.keys(newStore).forEach((key) => {
10932
10933
  if (key === name) {
10933
- enetity.onStoreChange("update");
10934
+ entity.onStoreChange("update");
10934
10935
  }
10935
10936
  });
10936
10937
  });
@@ -10941,44 +10942,19 @@ class FormStore {
10941
10942
  ...callback
10942
10943
  };
10943
10944
  });
10944
- __publicField(this, "validate", () => {
10945
- const err = [];
10945
+ __publicField(this, "validateFields", async (nameList) => {
10946
+ var _a;
10947
+ let filterEntitys = [];
10948
+ const errs = [];
10946
10949
  this.errors.length = 0;
10947
- this.fieldEntities.forEach((entity) => {
10948
- var _a;
10949
- const { name, rules: rules2 = [] } = entity.props;
10950
- const descriptor = {};
10951
- if (rules2.length) {
10952
- if (rules2.length > 1) {
10953
- descriptor[name] = [];
10954
- rules2.forEach((v) => {
10955
- descriptor[name].push(v);
10956
- });
10957
- } else {
10958
- descriptor[name] = rules2[0];
10959
- }
10960
- }
10961
- const validator = new Schema(descriptor);
10962
- validator.messages();
10963
- validator.validate({ [name]: (_a = this.store) == null ? void 0 : _a[name] }, (errors) => {
10964
- if (errors) {
10965
- err.push(...errors);
10966
- this.errors[name] = errors;
10967
- }
10968
- entity.onStoreChange("validate");
10969
- });
10970
- });
10971
- return err;
10972
- });
10973
- __publicField(this, "validateFields", (nameList) => {
10974
10950
  if (!nameList || nameList.length === 0) {
10975
- this.validate();
10976
- return;
10951
+ filterEntitys = this.fieldEntities;
10952
+ } else {
10953
+ filterEntitys = this.fieldEntities.filter(
10954
+ ({ props: { name } }) => nameList.includes(name)
10955
+ );
10977
10956
  }
10978
- this.fieldEntities.filter(({ props: { name } }) => {
10979
- return nameList.includes(name);
10980
- }).forEach((entity) => {
10981
- var _a;
10957
+ for (const entity of filterEntitys) {
10982
10958
  const { name, rules: rules2 = [] } = entity.props;
10983
10959
  const descriptor = {};
10984
10960
  if (rules2.length) {
@@ -10992,19 +10968,22 @@ class FormStore {
10992
10968
  }
10993
10969
  }
10994
10970
  const validator = new Schema(descriptor);
10995
- validator.messages();
10996
- validator.validate({ [name]: (_a = this.store) == null ? void 0 : _a[name] }, (errors) => {
10971
+ try {
10997
10972
  this.errors[name] = [];
10973
+ await validator.validate({ [name]: (_a = this.store) == null ? void 0 : _a[name] });
10974
+ } catch ({ errors }) {
10998
10975
  if (errors) {
10976
+ errs.push(...errors);
10999
10977
  this.errors[name] = errors;
11000
10978
  }
11001
- entity.onStoreChange("validate");
11002
- });
11003
- });
10979
+ }
10980
+ entity.onStoreChange("validate");
10981
+ }
10982
+ return errs;
11004
10983
  });
11005
- __publicField(this, "submit", () => {
10984
+ __publicField(this, "submit", async () => {
11006
10985
  var _a, _b, _c, _d;
11007
- const errors = this.validate();
10986
+ const errors = await this.validateFields();
11008
10987
  if (errors.length === 0) {
11009
10988
  (_b = (_a = this.callbacks).onFinish) == null ? void 0 : _b.call(_a, this.store);
11010
10989
  } else if (errors.length > 0) {
@@ -11794,6 +11773,8 @@ const MenuItem = forwardRef((props, ref) => {
11794
11773
  }, [showPopup]);
11795
11774
  const windowHeight = useMemo$1(() => getSystemInfoSync().windowHeight, []);
11796
11775
  const updateItemOffset = useCallback(() => {
11776
+ if (!parent.lockScroll)
11777
+ return;
11797
11778
  const p = parent.menuRef.current;
11798
11779
  p.getBoundingClientRect().then((rect) => {
11799
11780
  if (rect) {
@@ -13441,80 +13422,6 @@ const TextArea = (props) => {
13441
13422
  };
13442
13423
  TextArea.defaultProps = defaultProps$J;
13443
13424
  TextArea.displayName = "NutTextArea";
13444
- const defaultProps$I = {
13445
- ...ComponentDefaults,
13446
- percent: 0,
13447
- showText: false,
13448
- animated: false,
13449
- delay: 0
13450
- };
13451
- const Progress = (props) => {
13452
- const {
13453
- className,
13454
- style,
13455
- percent,
13456
- background,
13457
- color,
13458
- strokeWidth,
13459
- showText,
13460
- animated,
13461
- children,
13462
- delay,
13463
- ...rest
13464
- } = {
13465
- ...defaultProps$I,
13466
- ...props
13467
- };
13468
- const classPrefix2 = "nut-progress";
13469
- const classesInner = classNames({
13470
- [`${classPrefix2}-inner`]: true,
13471
- [`${classPrefix2}-active`]: animated
13472
- });
13473
- const stylesOuter = {
13474
- height: `${strokeWidth}px`,
13475
- background
13476
- };
13477
- const [displayPercent, setDispalyPercent] = useState(0);
13478
- const stylesInner = {
13479
- width: `${displayPercent}%`,
13480
- background: color
13481
- };
13482
- useEffect(() => {
13483
- setDispalyPercent(percent);
13484
- }, [percent]);
13485
- useEffect(() => {
13486
- let timer = null;
13487
- if (delay) {
13488
- setDispalyPercent(0);
13489
- timer = setTimeout(() => {
13490
- setDispalyPercent(percent);
13491
- }, delay);
13492
- }
13493
- return () => {
13494
- timer && clearTimeout(timer);
13495
- };
13496
- }, []);
13497
- return /* @__PURE__ */ React__default.createElement("div", { className: classNames(classPrefix2, className), style, ...rest }, /* @__PURE__ */ React__default.createElement("div", { className: `${classPrefix2}-outer`, style: stylesOuter }, /* @__PURE__ */ React__default.createElement("div", { className: classesInner, style: stylesInner }, showText && /* @__PURE__ */ React__default.createElement(
13498
- "div",
13499
- {
13500
- className: `${classPrefix2}-text`,
13501
- style: { left: `${displayPercent}%` }
13502
- },
13503
- children || /* @__PURE__ */ React__default.createElement(
13504
- "div",
13505
- {
13506
- className: `${classPrefix2}-text__inner`,
13507
- style: {
13508
- background: color
13509
- }
13510
- },
13511
- percent,
13512
- "%"
13513
- )
13514
- ))));
13515
- };
13516
- Progress.defaultProps = defaultProps$I;
13517
- Progress.displayName = "NutProgress";
13518
13425
  class UploadOptions {
13519
13426
  constructor() {
13520
13427
  __publicField(this, "url", "");
@@ -13535,6 +13442,9 @@ class UploadOptions {
13535
13442
  __publicField(this, "beforeXhrUpload");
13536
13443
  }
13537
13444
  }
13445
+ const UPLOADING = "uploading";
13446
+ const SUCCESS = "success";
13447
+ const ERROR = "error";
13538
13448
  class Upload {
13539
13449
  constructor(options) {
13540
13450
  __publicField(this, "options");
@@ -13656,6 +13566,179 @@ const funcInterceptor = (interceptor, {
13656
13566
  done();
13657
13567
  }
13658
13568
  };
13569
+ class FileItem {
13570
+ constructor() {
13571
+ __publicField(this, "status", "ready");
13572
+ __publicField(this, "message", "准备中..");
13573
+ __publicField(this, "uid", (/* @__PURE__ */ new Date()).getTime().toString());
13574
+ __publicField(this, "name");
13575
+ __publicField(this, "url");
13576
+ __publicField(this, "type");
13577
+ __publicField(this, "path");
13578
+ __publicField(this, "percentage", 0);
13579
+ __publicField(this, "formData", {});
13580
+ __publicField(this, "responseText");
13581
+ __publicField(this, "loadingIcon");
13582
+ __publicField(this, "failIcon");
13583
+ }
13584
+ }
13585
+ const defaultProps$I = {
13586
+ ...ComponentDefaults,
13587
+ percent: 0,
13588
+ showText: false,
13589
+ animated: false,
13590
+ delay: 0
13591
+ };
13592
+ const Progress = (props) => {
13593
+ const {
13594
+ className,
13595
+ style,
13596
+ percent,
13597
+ background,
13598
+ color,
13599
+ strokeWidth,
13600
+ showText,
13601
+ animated,
13602
+ children,
13603
+ delay,
13604
+ ...rest
13605
+ } = {
13606
+ ...defaultProps$I,
13607
+ ...props
13608
+ };
13609
+ const classPrefix2 = "nut-progress";
13610
+ const classesInner = classNames({
13611
+ [`${classPrefix2}-inner`]: true,
13612
+ [`${classPrefix2}-active`]: animated
13613
+ });
13614
+ const stylesOuter = {
13615
+ height: `${strokeWidth}px`,
13616
+ background
13617
+ };
13618
+ const [displayPercent, setDispalyPercent] = useState(0);
13619
+ const stylesInner = {
13620
+ width: `${displayPercent}%`,
13621
+ background: color
13622
+ };
13623
+ useEffect(() => {
13624
+ setDispalyPercent(percent);
13625
+ }, [percent]);
13626
+ useEffect(() => {
13627
+ let timer = null;
13628
+ if (delay) {
13629
+ setDispalyPercent(0);
13630
+ timer = setTimeout(() => {
13631
+ setDispalyPercent(percent);
13632
+ }, delay);
13633
+ }
13634
+ return () => {
13635
+ timer && clearTimeout(timer);
13636
+ };
13637
+ }, []);
13638
+ return /* @__PURE__ */ React__default.createElement("div", { className: classNames(classPrefix2, className), style, ...rest }, /* @__PURE__ */ React__default.createElement("div", { className: `${classPrefix2}-outer`, style: stylesOuter }, /* @__PURE__ */ React__default.createElement("div", { className: classesInner, style: stylesInner }, showText && /* @__PURE__ */ React__default.createElement(
13639
+ "div",
13640
+ {
13641
+ className: `${classPrefix2}-text`,
13642
+ style: { left: `${displayPercent}%` }
13643
+ },
13644
+ children || /* @__PURE__ */ React__default.createElement(
13645
+ "div",
13646
+ {
13647
+ className: `${classPrefix2}-text__inner`,
13648
+ style: {
13649
+ background: color
13650
+ }
13651
+ },
13652
+ percent,
13653
+ "%"
13654
+ )
13655
+ ))));
13656
+ };
13657
+ Progress.defaultProps = defaultProps$I;
13658
+ Progress.displayName = "NutProgress";
13659
+ const Preview = ({
13660
+ fileList,
13661
+ previewType,
13662
+ deletable,
13663
+ onDeleteItem,
13664
+ handleItemClick,
13665
+ previewUrl,
13666
+ children
13667
+ }) => {
13668
+ const renderIcon = (item) => {
13669
+ if (item.status === ERROR) {
13670
+ return item.failIcon || /* @__PURE__ */ React__default.createElement(a$n, { color: "#fff" });
13671
+ }
13672
+ return item.loadingIcon || /* @__PURE__ */ React__default.createElement(r$h, { className: "nut-icon-loading", color: "#fff" });
13673
+ };
13674
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, fileList.length !== 0 && fileList.map((item, index) => {
13675
+ var _a;
13676
+ return /* @__PURE__ */ React__default.createElement(
13677
+ "div",
13678
+ {
13679
+ className: `nut-uploader__preview ${previewType}`,
13680
+ key: item.uid
13681
+ },
13682
+ previewType === "picture" && deletable && /* @__PURE__ */ React__default.createElement(
13683
+ a$n,
13684
+ {
13685
+ color: "rgba(0,0,0,0.6)",
13686
+ className: "close",
13687
+ onClick: () => onDeleteItem(item, index)
13688
+ }
13689
+ ),
13690
+ previewType === "picture" && !children && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-img" }, item.status === "ready" ? /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress" }, /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress__msg" }, item.message)) : item.status !== "success" && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress" }, renderIcon(item), /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress__msg" }, item.message)), ((_a = item.type) == null ? void 0 : _a.includes("image")) ? /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, item.url && /* @__PURE__ */ React__default.createElement(
13691
+ Image$2,
13692
+ {
13693
+ className: "nut-uploader__preview-img__c",
13694
+ style: { objectFit: "fill" },
13695
+ mode: "aspectFit",
13696
+ src: item.url,
13697
+ onClick: () => handleItemClick(item)
13698
+ }
13699
+ )) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, previewUrl ? /* @__PURE__ */ React__default.createElement(
13700
+ Image$2,
13701
+ {
13702
+ className: "nut-uploader__preview-img__c",
13703
+ mode: "aspectFit",
13704
+ src: previewUrl,
13705
+ onClick: () => handleItemClick(item)
13706
+ }
13707
+ ) : /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-img__file" }, /* @__PURE__ */ React__default.createElement(
13708
+ "div",
13709
+ {
13710
+ onClick: () => handleItemClick(item),
13711
+ className: "nut-uploader__preview-img__file__name"
13712
+ },
13713
+ /* @__PURE__ */ React__default.createElement(a$i, { color: "#808080" }),
13714
+ /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
13715
+ ))), item.status === "success" ? /* @__PURE__ */ React__default.createElement("div", { className: "tips" }, item.name) : null),
13716
+ previewType === "list" && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-list" }, /* @__PURE__ */ React__default.createElement(
13717
+ "div",
13718
+ {
13719
+ className: `nut-uploader__preview-img__file__name ${item.status}`,
13720
+ onClick: () => handleItemClick(item)
13721
+ },
13722
+ /* @__PURE__ */ React__default.createElement(a$i, null),
13723
+ /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
13724
+ ), deletable && /* @__PURE__ */ React__default.createElement(
13725
+ a$p,
13726
+ {
13727
+ color: "#808080",
13728
+ className: "nut-uploader__preview-img__file__del",
13729
+ onClick: () => onDeleteItem(item, index)
13730
+ }
13731
+ ), item.status === "uploading" && /* @__PURE__ */ React__default.createElement(
13732
+ Progress,
13733
+ {
13734
+ percent: item.percentage,
13735
+ color: "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)",
13736
+ showText: false
13737
+ }
13738
+ ))
13739
+ );
13740
+ }));
13741
+ };
13659
13742
  const defaultProps$H = {
13660
13743
  ...ComponentDefaults,
13661
13744
  url: "",
@@ -13664,7 +13747,7 @@ const defaultProps$H = {
13664
13747
  sourceType: ["album", "camera"],
13665
13748
  mediaType: ["image", "video"],
13666
13749
  camera: "back",
13667
- uploadIcon: null,
13750
+ uploadIcon: /* @__PURE__ */ React__default.createElement(a$a, { size: "20px", color: "#808080" }),
13668
13751
  uploadLabel: "",
13669
13752
  previewType: "picture",
13670
13753
  fit: "cover",
@@ -13687,19 +13770,6 @@ const defaultProps$H = {
13687
13770
  return true;
13688
13771
  }
13689
13772
  };
13690
- class FileItem {
13691
- constructor() {
13692
- __publicField(this, "status", "ready");
13693
- __publicField(this, "message", "准备中..");
13694
- __publicField(this, "uid", Date.now().toString());
13695
- __publicField(this, "name");
13696
- __publicField(this, "url");
13697
- __publicField(this, "type");
13698
- __publicField(this, "path");
13699
- __publicField(this, "percentage", 0);
13700
- __publicField(this, "formData", {});
13701
- }
13702
- }
13703
13773
  const InternalUploader = (props, ref) => {
13704
13774
  const { locale } = useConfig$1();
13705
13775
  const {
@@ -13745,13 +13815,15 @@ const InternalUploader = (props, ref) => {
13745
13815
  beforeDelete,
13746
13816
  ...restProps
13747
13817
  } = { ...defaultProps$H, ...props };
13748
- const [fileList, setFileList] = useState(defaultValue || []);
13749
- const [uploadQueue, setUploadQueue] = useState([]);
13750
- useEffect(() => {
13751
- if (value) {
13752
- setFileList(value);
13818
+ const [fileList, setFileList] = usePropsValue({
13819
+ value,
13820
+ defaultValue,
13821
+ finalValue: [],
13822
+ onChange: (v) => {
13823
+ onChange == null ? void 0 : onChange(v);
13753
13824
  }
13754
- }, [value]);
13825
+ });
13826
+ const [uploadQueue, setUploadQueue] = useState([]);
13755
13827
  const classes = classNames(className, "nut-uploader");
13756
13828
  useImperativeHandle(ref, () => ({
13757
13829
  submit: () => {
@@ -13842,63 +13914,60 @@ const InternalUploader = (props, ref) => {
13842
13914
  uploadOption.beforeXhrUpload = beforeXhrUpload;
13843
13915
  uploadOption.onStart = (option) => {
13844
13916
  clearUploadQueue(index);
13845
- setFileList((fileList2) => {
13846
- fileList2.forEach((item) => {
13917
+ setFileList(
13918
+ fileList.map((item) => {
13847
13919
  if (item.uid === fileItem.uid) {
13848
13920
  item.status = "ready";
13849
13921
  item.message = locale.uploader.readyUpload;
13850
13922
  }
13851
- });
13852
- return [...fileList2];
13853
- });
13923
+ return item;
13924
+ })
13925
+ );
13854
13926
  onStart && onStart(option);
13855
13927
  };
13856
13928
  uploadOption.onProgress = (e, option) => {
13857
- setFileList((fileList2) => {
13858
- fileList2.forEach((item) => {
13929
+ setFileList(
13930
+ fileList.map((item) => {
13859
13931
  if (item.uid === fileItem.uid) {
13860
- item.status = "uploading";
13932
+ item.status = UPLOADING;
13861
13933
  item.message = locale.uploader.uploading;
13862
13934
  item.percentage = e.progress;
13863
13935
  onProgress && onProgress({ e, option, percentage: item.percentage });
13864
13936
  }
13865
- });
13866
- return [...fileList2];
13867
- });
13937
+ return item;
13938
+ })
13939
+ );
13868
13940
  };
13869
13941
  uploadOption.onSuccess = (responseText, option) => {
13870
- setFileList((fileList2) => {
13871
- onUpdate && onUpdate(fileList2);
13872
- fileList2.forEach((item) => {
13873
- if (item.uid === fileItem.uid) {
13874
- item.status = "success";
13875
- item.message = locale.uploader.success;
13876
- item.responseText = responseText;
13877
- }
13878
- });
13879
- return [...fileList2];
13942
+ const list = fileList.map((item) => {
13943
+ if (item.uid === fileItem.uid) {
13944
+ item.status = SUCCESS;
13945
+ item.message = locale.uploader.success;
13946
+ item.responseText = responseText;
13947
+ }
13948
+ return item;
13880
13949
  });
13881
- onSuccess && onSuccess({
13950
+ setFileList(list);
13951
+ onSuccess == null ? void 0 : onSuccess({
13882
13952
  responseText,
13883
13953
  option,
13884
- fileList
13954
+ fileList: list
13885
13955
  });
13886
13956
  };
13887
13957
  uploadOption.onFailure = (responseText, option) => {
13888
- setFileList((fileList2) => {
13889
- fileList2.forEach((item) => {
13890
- if (item.uid === fileItem.uid) {
13891
- item.status = "error";
13892
- item.message = locale.uploader.error;
13893
- item.responseText = responseText;
13894
- }
13895
- });
13896
- return [...fileList2];
13958
+ const list = fileList.map((item) => {
13959
+ if (item.uid === fileItem.uid) {
13960
+ item.status = ERROR;
13961
+ item.message = locale.uploader.error;
13962
+ item.responseText = responseText;
13963
+ }
13964
+ return item;
13897
13965
  });
13898
- onFailure && onFailure({
13966
+ setFileList(list);
13967
+ onFailure == null ? void 0 : onFailure({
13899
13968
  responseText,
13900
13969
  option,
13901
- fileList
13970
+ fileList: list
13902
13971
  });
13903
13972
  };
13904
13973
  const task = new UploaderTaro(uploadOption);
@@ -13932,11 +14001,7 @@ const InternalUploader = (props, ref) => {
13932
14001
  fileItem.status = "ready";
13933
14002
  fileItem.type = fileType;
13934
14003
  fileItem.uid = `${fileItem.uid}_${index}`;
13935
- if (autoUpload) {
13936
- fileItem.message = locale.uploader.readyUpload;
13937
- } else {
13938
- fileItem.message = locale.uploader.waitingUpload;
13939
- }
14004
+ fileItem.message = autoUpload ? locale.uploader.readyUpload : locale.uploader.waitingUpload;
13940
14005
  if (getEnv() === "WEB") {
13941
14006
  const formData = new FormData();
13942
14007
  for (const [key, value2] of Object.entries(data)) {
@@ -13953,7 +14018,7 @@ const InternalUploader = (props, ref) => {
13953
14018
  fileItem.url = fileType === "video" ? file.thumbTempFilePath : filepath;
13954
14019
  }
13955
14020
  fileList.push(fileItem);
13956
- setFileList([...fileList]);
14021
+ setFileList(fileList);
13957
14022
  executeUpload(fileItem, index);
13958
14023
  });
13959
14024
  };
@@ -13978,9 +14043,9 @@ const InternalUploader = (props, ref) => {
13978
14043
  return filterFile;
13979
14044
  };
13980
14045
  const deleted = (file, index) => {
13981
- fileList.splice(index, 1);
13982
- onDelete && onDelete(file, fileList);
13983
- setFileList([...fileList]);
14046
+ const deletedFileList = fileList.filter((file2, idx) => idx !== index);
14047
+ onDelete == null ? void 0 : onDelete(file, deletedFileList);
14048
+ setFileList(deletedFileList);
13984
14049
  };
13985
14050
  const onDeleteItem = (file, index) => {
13986
14051
  clearUploadQueue(index);
@@ -13993,88 +14058,34 @@ const InternalUploader = (props, ref) => {
13993
14058
  const { tempFiles } = res;
13994
14059
  const _files = filterFiles(tempFiles);
13995
14060
  readFile(_files);
13996
- onChange && onChange({ fileList });
13997
14061
  };
13998
14062
  const onChangeImage = (res) => {
13999
14063
  const { tempFiles } = res;
14000
14064
  const _files = filterFiles(tempFiles);
14001
14065
  readFile(_files);
14002
- onChange && onChange({ fileList });
14003
14066
  };
14004
14067
  const handleItemClick = (file) => {
14005
- onFileItemClick && onFileItemClick(file);
14068
+ onFileItemClick == null ? void 0 : onFileItemClick(file);
14006
14069
  };
14007
- return /* @__PURE__ */ React__default.createElement("div", { className: classes, ...restProps }, (children || previewType === "list") && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__slot" }, /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children || /* @__PURE__ */ React__default.createElement(Button, { size: "small", type: "primary" }, "上传文件"), maxCount > fileList.length && /* @__PURE__ */ React__default.createElement(Button, { className: "nut-uploader__input", onClick: _chooseImage }))), fileList.length !== 0 && Array.isArray(fileList) && fileList.map((item, index) => {
14008
- return /* @__PURE__ */ React__default.createElement(
14009
- "div",
14010
- {
14011
- className: `nut-uploader__preview ${previewType}`,
14012
- key: item.uid
14013
- },
14014
- previewType === "picture" && deletable && /* @__PURE__ */ React__default.createElement(
14015
- a$n,
14016
- {
14017
- color: "rgba(0,0,0,0.6)",
14018
- className: "close",
14019
- onClick: () => onDeleteItem(item, index)
14020
- }
14021
- ),
14022
- previewType === "picture" && !children && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-img" }, item.status === "ready" ? /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress" }, /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress__msg" }, item.message)) : item.status !== "success" && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress" }, item.failIcon !== " " && item.loadingIcon !== " " && (item.status === "error" ? item.failIcon || /* @__PURE__ */ React__default.createElement(a$n, { color: "#fff" }) : item.loadingIcon || /* @__PURE__ */ React__default.createElement(r$h, { color: "#fff" })), /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview__progress__msg" }, item.message)), item.type.includes("image") ? /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, item.url && /* @__PURE__ */ React__default.createElement(
14023
- Image$2,
14024
- {
14025
- className: "nut-uploader__preview-img__c",
14026
- style: { objectFit: fit },
14027
- mode: "aspectFit",
14028
- src: item.url,
14029
- onClick: () => handleItemClick(item)
14030
- }
14031
- )) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, previewUrl ? /* @__PURE__ */ React__default.createElement(
14032
- Image$2,
14033
- {
14034
- className: "nut-uploader__preview-img__c",
14035
- mode: "aspectFit",
14036
- src: previewUrl,
14037
- onClick: () => handleItemClick(item)
14038
- }
14039
- ) : /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-img__file" }, /* @__PURE__ */ React__default.createElement(
14040
- "div",
14041
- {
14042
- onClick: () => handleItemClick(item),
14043
- className: "nut-uploader__preview-img__file__name"
14044
- },
14045
- /* @__PURE__ */ React__default.createElement(a$i, { color: "#808080" }),
14046
- /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
14047
- ))), item.status === "success" ? /* @__PURE__ */ React__default.createElement("div", { className: "tips" }, item.name) : null),
14048
- previewType === "list" && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-list" }, /* @__PURE__ */ React__default.createElement(
14049
- "div",
14050
- {
14051
- className: `nut-uploader__preview-img__file__name ${item.status}`,
14052
- onClick: () => handleItemClick(item)
14053
- },
14054
- /* @__PURE__ */ React__default.createElement(a$i, null),
14055
- /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
14056
- ), deletable && /* @__PURE__ */ React__default.createElement(
14057
- a$p,
14058
- {
14059
- color: "#808080",
14060
- className: "nut-uploader__preview-img__file__del",
14061
- onClick: () => onDeleteItem(item, index)
14062
- }
14063
- ), item.status === "uploading" && /* @__PURE__ */ React__default.createElement(
14064
- Progress,
14065
- {
14066
- percent: item.percentage,
14067
- color: "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)",
14068
- showText: false
14069
- }
14070
- ))
14071
- );
14072
- }), maxCount > fileList.length && previewType === "picture" && !children && /* @__PURE__ */ React__default.createElement(
14070
+ return /* @__PURE__ */ React__default.createElement("div", { className: classes, ...restProps }, (children || previewType === "list") && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__slot" }, /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children || /* @__PURE__ */ React__default.createElement(Button, { size: "small", type: "primary" }, "上传文件"), maxCount > fileList.length && /* @__PURE__ */ React__default.createElement(Button, { className: "nut-uploader__input", onClick: _chooseImage }))), /* @__PURE__ */ React__default.createElement(
14071
+ Preview,
14072
+ {
14073
+ ...{
14074
+ fileList,
14075
+ previewType,
14076
+ deletable,
14077
+ onDeleteItem,
14078
+ handleItemClick,
14079
+ previewUrl,
14080
+ children
14081
+ }
14082
+ }
14083
+ ), maxCount > fileList.length && previewType === "picture" && !children && /* @__PURE__ */ React__default.createElement(
14073
14084
  "div",
14074
14085
  {
14075
14086
  className: `nut-uploader__upload ${previewType} ${disabled ? "nut-uploader__upload-disabled" : ""}`
14076
14087
  },
14077
- /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__icon" }, uploadIcon || /* @__PURE__ */ React__default.createElement(a$a, { size: "20px", color: "#808080" }), /* @__PURE__ */ React__default.createElement("span", { className: "nut-uploader__icon-tip" }, uploadLabel)),
14088
+ /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__icon" }, uploadIcon, /* @__PURE__ */ React__default.createElement("span", { className: "nut-uploader__icon-tip" }, uploadLabel)),
14078
14089
  /* @__PURE__ */ React__default.createElement(Button, { className: "nut-uploader__input", onClick: _chooseImage })
14079
14090
  ));
14080
14091
  };
@@ -17553,8 +17564,8 @@ const Swiper = forwardRef((props, ref) => {
17553
17564
  {
17554
17565
  className: classNames(classPrefix$3, className),
17555
17566
  style: {
17556
- width: !width ? "100%" : `${width}px`,
17557
- height: !height ? "150px" : `${height}px`
17567
+ width: !width ? "100%" : pxCheck(width),
17568
+ height: !height ? "150px" : pxCheck(height)
17558
17569
  }
17559
17570
  },
17560
17571
  /* @__PURE__ */ React__default.createElement(
@@ -17562,8 +17573,8 @@ const Swiper = forwardRef((props, ref) => {
17562
17573
  {
17563
17574
  className: "nut-swiper__inner",
17564
17575
  style: {
17565
- width: !width ? "100%" : `${width}px`,
17566
- height: !height ? "150px" : `${height}px`
17576
+ width: !width ? "100%" : pxCheck(width),
17577
+ height: !height ? "150px" : pxCheck(height)
17567
17578
  }
17568
17579
  },
17569
17580
  /* @__PURE__ */ React__default.createElement(
@@ -17580,12 +17591,18 @@ const Swiper = forwardRef((props, ref) => {
17580
17591
  (_a = props.onChange) == null ? void 0 : _a.call(props, e);
17581
17592
  },
17582
17593
  style: {
17583
- width: !width ? "100%" : `${width}px`,
17584
- height: !height ? "150px" : `${height}px`
17594
+ width: !width ? "100%" : pxCheck(width),
17595
+ height: !height ? "150px" : pxCheck(height)
17585
17596
  },
17586
17597
  ...rest
17587
17598
  },
17588
- Children.toArray(children).map((child, index) => /* @__PURE__ */ React__default.createElement(SwiperItem$1, { key: index }, child))
17599
+ Children.toArray(children).map((child, index) => {
17600
+ let className2;
17601
+ if (React__default.isValidElement(child)) {
17602
+ className2 = child.props.className;
17603
+ }
17604
+ return /* @__PURE__ */ React__default.createElement(SwiperItem$1, { className: className2, key: index }, child);
17605
+ })
17589
17606
  )
17590
17607
  ),
17591
17608
  renderIndicator()
@@ -17815,13 +17832,14 @@ const ImagePreview = (props) => {
17815
17832
  ));
17816
17833
  }) : []).concat(
17817
17834
  images && images.length > 0 ? images.map((item, index) => {
17818
- return /* @__PURE__ */ React__default.createElement(SwiperItem, { key: index }, Taro.getEnv() === "WEB" ? /* @__PURE__ */ React__default.createElement("img", { src: item.src, alt: "" }) : /* @__PURE__ */ React__default.createElement(
17819
- Image$2,
17835
+ return /* @__PURE__ */ React__default.createElement(SwiperItem, { key: index }, Taro.getEnv() === "WEB" ? /* @__PURE__ */ React__default.createElement(Image$1, { src: item.src, mode: "aspectFit" }) : /* @__PURE__ */ React__default.createElement(
17836
+ Image$1,
17820
17837
  {
17821
17838
  src: item.src,
17822
17839
  mode: "aspectFit",
17823
17840
  showMenuByLongpress: true,
17824
- style: { width: "100%", height: "100%" }
17841
+ width: "100%",
17842
+ height: "100%"
17825
17843
  }
17826
17844
  ));
17827
17845
  }) : []