@nutui/nutui-react-taro 2.0.18 → 2.0.19

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 (57) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/dist/esm/Audio/style/style.css +1 -1
  3. package/dist/esm/Button/style/style.css +1 -1
  4. package/dist/esm/Dialog/style/style.css +1 -1
  5. package/dist/esm/ImagePreview/style/style.css +1 -1
  6. package/dist/esm/ImagePreview.js +2 -2
  7. package/dist/esm/Indicator/style/style.css +1 -1
  8. package/dist/esm/Indicator.js +1 -1
  9. package/dist/esm/Input/style/style.css +1 -1
  10. package/dist/esm/Menu.js +2 -2
  11. package/dist/esm/MenuItem.js +1 -1
  12. package/dist/esm/Swiper/style/style.css +1 -1
  13. package/dist/esm/Swiper.js +14 -4
  14. package/dist/esm/Uploader.js +5 -3
  15. package/dist/esm/{imagepreview.taro-87d85d88.js → imagepreview.taro-78c0a7b8.js} +5 -2
  16. package/dist/esm/{indicator.taro-4ed0d6da.js → indicator.taro-092f9f4e.js} +1 -1
  17. package/dist/esm/{menu.taro-cc93f12a.js → menu.taro-cf8d7d5b.js} +8 -8
  18. package/dist/esm/{menuitem.taro-69a45abd.js → menuitem.taro-b73e5ed3.js} +5 -2
  19. package/dist/esm/nutui-react.es.js +5 -5
  20. package/dist/esm/types/src/packages/menu/index.d.ts +1 -1
  21. package/dist/esm/types/src/packages/menu/index.taro.d.ts +1 -1
  22. package/dist/esm/types/src/packages/menu/menu.d.ts +4 -2
  23. package/dist/esm/types/src/packages/menu/menu.taro.d.ts +4 -2
  24. package/dist/esm/types/src/packages/swiper/swiper.taro.d.ts +1 -0
  25. package/dist/esm/types/src/packages/uploader/demo.taro.d.ts +0 -15
  26. package/dist/esm/types/src/packages/uploader/file-item.d.ts +19 -0
  27. package/dist/esm/types/src/packages/uploader/index.d.ts +2 -1
  28. package/dist/esm/types/src/packages/uploader/index.taro.d.ts +2 -1
  29. package/dist/esm/types/src/packages/uploader/preview.d.ts +2 -0
  30. package/dist/esm/types/src/packages/uploader/preview.taro.d.ts +2 -0
  31. package/dist/esm/types/src/packages/uploader/upload.d.ts +3 -0
  32. package/dist/esm/types/src/packages/uploader/uploader.d.ts +5 -23
  33. package/dist/esm/types/src/packages/uploader/uploader.taro.d.ts +10 -26
  34. package/dist/esm/{uploader.taro-56b2ca0d.js → uploader.taro-da0414ba.js} +148 -134
  35. package/dist/locales/base.js +1 -1
  36. package/dist/locales/en-US.js +1 -1
  37. package/dist/locales/id-ID.js +1 -1
  38. package/dist/locales/tr-TR.js +1 -1
  39. package/dist/locales/zh-CN.js +1 -1
  40. package/dist/locales/zh-TW.js +1 -1
  41. package/dist/locales/zh-UG.js +1 -1
  42. package/dist/nutui.react.es.js +271 -222
  43. package/dist/nutui.react.umd.js +271 -222
  44. package/dist/packages/button/button.scss +1 -1
  45. package/dist/packages/indicator/indicator.scss +5 -0
  46. package/dist/packages/input/input.scss +1 -0
  47. package/dist/style.css +1 -1
  48. package/dist/style.mjs +1 -1
  49. package/dist/types/packages/menu/index.taro.d.ts +1 -1
  50. package/dist/types/packages/menu/menu.taro.d.ts +4 -2
  51. package/dist/types/packages/swiper/swiper.taro.d.ts +5 -0
  52. package/dist/types/packages/uploader/file-item.d.ts +19 -0
  53. package/dist/types/packages/uploader/index.taro.d.ts +2 -1
  54. package/dist/types/packages/uploader/preview.taro.d.ts +2 -0
  55. package/dist/types/packages/uploader/upload.d.ts +3 -0
  56. package/dist/types/packages/uploader/uploader.taro.d.ts +10 -26
  57. 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.18 Wed Sep 20 2023 14:56:58 GMT+0800 (China Standard Time)
8
+ * @nutui/nutui-react-taro v2.0.19 Wed Sep 27 2023 18:15:02 GMT+0800 (China Standard Time)
9
9
  * (c) 2023 @jdf2e.
10
10
  * Released under the MIT License.
11
11
  */
@@ -11794,6 +11794,8 @@ const MenuItem = forwardRef((props, ref) => {
11794
11794
  }, [showPopup]);
11795
11795
  const windowHeight = useMemo$1(() => getSystemInfoSync().windowHeight, []);
11796
11796
  const updateItemOffset = useCallback(() => {
11797
+ if (!parent.lockScroll)
11798
+ return;
11797
11799
  const p = parent.menuRef.current;
11798
11800
  p.getBoundingClientRect().then((rect) => {
11799
11801
  if (rect) {
@@ -11807,7 +11809,8 @@ const MenuItem = forwardRef((props, ref) => {
11807
11809
  usePageScroll(updateItemOffset);
11808
11810
  useImperativeHandle(ref, () => ({
11809
11811
  toggle: (s) => {
11810
- s ? parent.toggleMenuItem(index) : parent.hideMenuItem(index);
11812
+ const from = "REF";
11813
+ s ? parent.toggleMenuItem(index, from) : parent.hideMenuItem(index, from);
11811
11814
  }
11812
11815
  }));
11813
11816
  const getIconCName = (optionVal, value2) => {
@@ -11887,7 +11890,7 @@ const MenuItem = forwardRef((props, ref) => {
11887
11890
  visible: showPopup,
11888
11891
  closeOnOverlayClick: parent.closeOnOverlayClick,
11889
11892
  onClick: () => {
11890
- parent.closeOnOverlayClick && parent.toggleMenuItem(index);
11893
+ parent.closeOnOverlayClick && parent.hideMenuItem(index);
11891
11894
  }
11892
11895
  }
11893
11896
  ) : null, /* @__PURE__ */ React__default.createElement(
@@ -11957,9 +11960,9 @@ const defaultProps$T = {
11957
11960
  lockScroll: true,
11958
11961
  overlay: true,
11959
11962
  icon: null,
11960
- onOpen: (index) => {
11963
+ onOpen: (index, from) => {
11961
11964
  },
11962
- onClose: (index) => {
11965
+ onClose: (index, from) => {
11963
11966
  }
11964
11967
  };
11965
11968
  const Menu = (props) => {
@@ -11998,22 +12001,22 @@ const Menu = (props) => {
11998
12001
  }, []);
11999
12002
  const [showMenuItem, setShowMenuItem] = useState([]);
12000
12003
  const [menuItemTitle, setMenuItemTitle] = useState([]);
12001
- const toggleMenuItem = (index) => {
12004
+ const toggleMenuItem = (index, from = "NORMAL") => {
12002
12005
  showMenuItem[index] = !showMenuItem[index];
12003
12006
  if (showMenuItem[index]) {
12004
- onOpen && onOpen(index);
12007
+ onOpen && onOpen(index, from);
12005
12008
  } else {
12006
- onClose && onClose(index);
12009
+ onClose && onClose(index, from);
12007
12010
  }
12008
12011
  const temp = showMenuItem.map(
12009
12012
  (i, idx) => idx === index ? i : false
12010
12013
  );
12011
12014
  setShowMenuItem([...temp]);
12012
12015
  };
12013
- const hideMenuItem = (index) => {
12016
+ const hideMenuItem = (index, from = "NORMAL") => {
12014
12017
  showMenuItem[index] = false;
12015
12018
  setShowMenuItem([...showMenuItem]);
12016
- onClose && onClose(index);
12019
+ onClose && onClose(index, from);
12017
12020
  };
12018
12021
  const updateTitle = (text, index) => {
12019
12022
  menuItemTitle[index] = text;
@@ -13440,80 +13443,6 @@ const TextArea = (props) => {
13440
13443
  };
13441
13444
  TextArea.defaultProps = defaultProps$J;
13442
13445
  TextArea.displayName = "NutTextArea";
13443
- const defaultProps$I = {
13444
- ...ComponentDefaults,
13445
- percent: 0,
13446
- showText: false,
13447
- animated: false,
13448
- delay: 0
13449
- };
13450
- const Progress = (props) => {
13451
- const {
13452
- className,
13453
- style,
13454
- percent,
13455
- background,
13456
- color,
13457
- strokeWidth,
13458
- showText,
13459
- animated,
13460
- children,
13461
- delay,
13462
- ...rest
13463
- } = {
13464
- ...defaultProps$I,
13465
- ...props
13466
- };
13467
- const classPrefix2 = "nut-progress";
13468
- const classesInner = classNames({
13469
- [`${classPrefix2}-inner`]: true,
13470
- [`${classPrefix2}-active`]: animated
13471
- });
13472
- const stylesOuter = {
13473
- height: `${strokeWidth}px`,
13474
- background
13475
- };
13476
- const [displayPercent, setDispalyPercent] = useState(0);
13477
- const stylesInner = {
13478
- width: `${displayPercent}%`,
13479
- background: color
13480
- };
13481
- useEffect(() => {
13482
- setDispalyPercent(percent);
13483
- }, [percent]);
13484
- useEffect(() => {
13485
- let timer = null;
13486
- if (delay) {
13487
- setDispalyPercent(0);
13488
- timer = setTimeout(() => {
13489
- setDispalyPercent(percent);
13490
- }, delay);
13491
- }
13492
- return () => {
13493
- timer && clearTimeout(timer);
13494
- };
13495
- }, []);
13496
- 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(
13497
- "div",
13498
- {
13499
- className: `${classPrefix2}-text`,
13500
- style: { left: `${displayPercent}%` }
13501
- },
13502
- children || /* @__PURE__ */ React__default.createElement(
13503
- "div",
13504
- {
13505
- className: `${classPrefix2}-text__inner`,
13506
- style: {
13507
- background: color
13508
- }
13509
- },
13510
- percent,
13511
- "%"
13512
- )
13513
- ))));
13514
- };
13515
- Progress.defaultProps = defaultProps$I;
13516
- Progress.displayName = "NutProgress";
13517
13446
  class UploadOptions {
13518
13447
  constructor() {
13519
13448
  __publicField(this, "url", "");
@@ -13534,6 +13463,9 @@ class UploadOptions {
13534
13463
  __publicField(this, "beforeXhrUpload");
13535
13464
  }
13536
13465
  }
13466
+ const UPLOADING = "uploading";
13467
+ const SUCCESS = "success";
13468
+ const ERROR = "error";
13537
13469
  class Upload {
13538
13470
  constructor(options) {
13539
13471
  __publicField(this, "options");
@@ -13655,6 +13587,179 @@ const funcInterceptor = (interceptor, {
13655
13587
  done();
13656
13588
  }
13657
13589
  };
13590
+ class FileItem {
13591
+ constructor() {
13592
+ __publicField(this, "status", "ready");
13593
+ __publicField(this, "message", "准备中..");
13594
+ __publicField(this, "uid", (/* @__PURE__ */ new Date()).getTime().toString());
13595
+ __publicField(this, "name");
13596
+ __publicField(this, "url");
13597
+ __publicField(this, "type");
13598
+ __publicField(this, "path");
13599
+ __publicField(this, "percentage", 0);
13600
+ __publicField(this, "formData", {});
13601
+ __publicField(this, "responseText");
13602
+ __publicField(this, "loadingIcon");
13603
+ __publicField(this, "failIcon");
13604
+ }
13605
+ }
13606
+ const defaultProps$I = {
13607
+ ...ComponentDefaults,
13608
+ percent: 0,
13609
+ showText: false,
13610
+ animated: false,
13611
+ delay: 0
13612
+ };
13613
+ const Progress = (props) => {
13614
+ const {
13615
+ className,
13616
+ style,
13617
+ percent,
13618
+ background,
13619
+ color,
13620
+ strokeWidth,
13621
+ showText,
13622
+ animated,
13623
+ children,
13624
+ delay,
13625
+ ...rest
13626
+ } = {
13627
+ ...defaultProps$I,
13628
+ ...props
13629
+ };
13630
+ const classPrefix2 = "nut-progress";
13631
+ const classesInner = classNames({
13632
+ [`${classPrefix2}-inner`]: true,
13633
+ [`${classPrefix2}-active`]: animated
13634
+ });
13635
+ const stylesOuter = {
13636
+ height: `${strokeWidth}px`,
13637
+ background
13638
+ };
13639
+ const [displayPercent, setDispalyPercent] = useState(0);
13640
+ const stylesInner = {
13641
+ width: `${displayPercent}%`,
13642
+ background: color
13643
+ };
13644
+ useEffect(() => {
13645
+ setDispalyPercent(percent);
13646
+ }, [percent]);
13647
+ useEffect(() => {
13648
+ let timer = null;
13649
+ if (delay) {
13650
+ setDispalyPercent(0);
13651
+ timer = setTimeout(() => {
13652
+ setDispalyPercent(percent);
13653
+ }, delay);
13654
+ }
13655
+ return () => {
13656
+ timer && clearTimeout(timer);
13657
+ };
13658
+ }, []);
13659
+ 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(
13660
+ "div",
13661
+ {
13662
+ className: `${classPrefix2}-text`,
13663
+ style: { left: `${displayPercent}%` }
13664
+ },
13665
+ children || /* @__PURE__ */ React__default.createElement(
13666
+ "div",
13667
+ {
13668
+ className: `${classPrefix2}-text__inner`,
13669
+ style: {
13670
+ background: color
13671
+ }
13672
+ },
13673
+ percent,
13674
+ "%"
13675
+ )
13676
+ ))));
13677
+ };
13678
+ Progress.defaultProps = defaultProps$I;
13679
+ Progress.displayName = "NutProgress";
13680
+ const Preview = ({
13681
+ fileList,
13682
+ previewType,
13683
+ deletable,
13684
+ onDeleteItem,
13685
+ handleItemClick,
13686
+ previewUrl,
13687
+ children
13688
+ }) => {
13689
+ const renderIcon = (item) => {
13690
+ if (item.status === ERROR) {
13691
+ return item.failIcon || /* @__PURE__ */ React__default.createElement(a$n, { color: "#fff" });
13692
+ }
13693
+ return item.loadingIcon || /* @__PURE__ */ React__default.createElement(r$h, { className: "nut-icon-loading", color: "#fff" });
13694
+ };
13695
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, fileList.length !== 0 && fileList.map((item, index) => {
13696
+ var _a;
13697
+ return /* @__PURE__ */ React__default.createElement(
13698
+ "div",
13699
+ {
13700
+ className: `nut-uploader__preview ${previewType}`,
13701
+ key: item.uid
13702
+ },
13703
+ previewType === "picture" && deletable && /* @__PURE__ */ React__default.createElement(
13704
+ a$n,
13705
+ {
13706
+ color: "rgba(0,0,0,0.6)",
13707
+ className: "close",
13708
+ onClick: () => onDeleteItem(item, index)
13709
+ }
13710
+ ),
13711
+ 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(
13712
+ Image$2,
13713
+ {
13714
+ className: "nut-uploader__preview-img__c",
13715
+ style: { objectFit: "fill" },
13716
+ mode: "aspectFit",
13717
+ src: item.url,
13718
+ onClick: () => handleItemClick(item)
13719
+ }
13720
+ )) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, previewUrl ? /* @__PURE__ */ React__default.createElement(
13721
+ Image$2,
13722
+ {
13723
+ className: "nut-uploader__preview-img__c",
13724
+ mode: "aspectFit",
13725
+ src: previewUrl,
13726
+ onClick: () => handleItemClick(item)
13727
+ }
13728
+ ) : /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-img__file" }, /* @__PURE__ */ React__default.createElement(
13729
+ "div",
13730
+ {
13731
+ onClick: () => handleItemClick(item),
13732
+ className: "nut-uploader__preview-img__file__name"
13733
+ },
13734
+ /* @__PURE__ */ React__default.createElement(a$i, { color: "#808080" }),
13735
+ /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
13736
+ ))), item.status === "success" ? /* @__PURE__ */ React__default.createElement("div", { className: "tips" }, item.name) : null),
13737
+ previewType === "list" && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-list" }, /* @__PURE__ */ React__default.createElement(
13738
+ "div",
13739
+ {
13740
+ className: `nut-uploader__preview-img__file__name ${item.status}`,
13741
+ onClick: () => handleItemClick(item)
13742
+ },
13743
+ /* @__PURE__ */ React__default.createElement(a$i, null),
13744
+ /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
13745
+ ), deletable && /* @__PURE__ */ React__default.createElement(
13746
+ a$p,
13747
+ {
13748
+ color: "#808080",
13749
+ className: "nut-uploader__preview-img__file__del",
13750
+ onClick: () => onDeleteItem(item, index)
13751
+ }
13752
+ ), item.status === "uploading" && /* @__PURE__ */ React__default.createElement(
13753
+ Progress,
13754
+ {
13755
+ percent: item.percentage,
13756
+ color: "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)",
13757
+ showText: false
13758
+ }
13759
+ ))
13760
+ );
13761
+ }));
13762
+ };
13658
13763
  const defaultProps$H = {
13659
13764
  ...ComponentDefaults,
13660
13765
  url: "",
@@ -13663,7 +13768,7 @@ const defaultProps$H = {
13663
13768
  sourceType: ["album", "camera"],
13664
13769
  mediaType: ["image", "video"],
13665
13770
  camera: "back",
13666
- uploadIcon: null,
13771
+ uploadIcon: /* @__PURE__ */ React__default.createElement(a$a, { size: "20px", color: "#808080" }),
13667
13772
  uploadLabel: "",
13668
13773
  previewType: "picture",
13669
13774
  fit: "cover",
@@ -13686,19 +13791,6 @@ const defaultProps$H = {
13686
13791
  return true;
13687
13792
  }
13688
13793
  };
13689
- class FileItem {
13690
- constructor() {
13691
- __publicField(this, "status", "ready");
13692
- __publicField(this, "message", "准备中..");
13693
- __publicField(this, "uid", Date.now().toString());
13694
- __publicField(this, "name");
13695
- __publicField(this, "url");
13696
- __publicField(this, "type");
13697
- __publicField(this, "path");
13698
- __publicField(this, "percentage", 0);
13699
- __publicField(this, "formData", {});
13700
- }
13701
- }
13702
13794
  const InternalUploader = (props, ref) => {
13703
13795
  const { locale } = useConfig$1();
13704
13796
  const {
@@ -13744,13 +13836,15 @@ const InternalUploader = (props, ref) => {
13744
13836
  beforeDelete,
13745
13837
  ...restProps
13746
13838
  } = { ...defaultProps$H, ...props };
13747
- const [fileList, setFileList] = useState(defaultValue || []);
13748
- const [uploadQueue, setUploadQueue] = useState([]);
13749
- useEffect(() => {
13750
- if (value) {
13751
- setFileList(value);
13839
+ const [fileList, setFileList] = usePropsValue({
13840
+ value,
13841
+ defaultValue,
13842
+ finalValue: [],
13843
+ onChange: (v) => {
13844
+ onChange == null ? void 0 : onChange(v);
13752
13845
  }
13753
- }, [value]);
13846
+ });
13847
+ const [uploadQueue, setUploadQueue] = useState([]);
13754
13848
  const classes = classNames(className, "nut-uploader");
13755
13849
  useImperativeHandle(ref, () => ({
13756
13850
  submit: () => {
@@ -13841,63 +13935,60 @@ const InternalUploader = (props, ref) => {
13841
13935
  uploadOption.beforeXhrUpload = beforeXhrUpload;
13842
13936
  uploadOption.onStart = (option) => {
13843
13937
  clearUploadQueue(index);
13844
- setFileList((fileList2) => {
13845
- fileList2.forEach((item) => {
13938
+ setFileList(
13939
+ fileList.map((item) => {
13846
13940
  if (item.uid === fileItem.uid) {
13847
13941
  item.status = "ready";
13848
13942
  item.message = locale.uploader.readyUpload;
13849
13943
  }
13850
- });
13851
- return [...fileList2];
13852
- });
13944
+ return item;
13945
+ })
13946
+ );
13853
13947
  onStart && onStart(option);
13854
13948
  };
13855
13949
  uploadOption.onProgress = (e, option) => {
13856
- setFileList((fileList2) => {
13857
- fileList2.forEach((item) => {
13950
+ setFileList(
13951
+ fileList.map((item) => {
13858
13952
  if (item.uid === fileItem.uid) {
13859
- item.status = "uploading";
13953
+ item.status = UPLOADING;
13860
13954
  item.message = locale.uploader.uploading;
13861
13955
  item.percentage = e.progress;
13862
13956
  onProgress && onProgress({ e, option, percentage: item.percentage });
13863
13957
  }
13864
- });
13865
- return [...fileList2];
13866
- });
13958
+ return item;
13959
+ })
13960
+ );
13867
13961
  };
13868
13962
  uploadOption.onSuccess = (responseText, option) => {
13869
- setFileList((fileList2) => {
13870
- onUpdate && onUpdate(fileList2);
13871
- fileList2.forEach((item) => {
13872
- if (item.uid === fileItem.uid) {
13873
- item.status = "success";
13874
- item.message = locale.uploader.success;
13875
- item.responseText = responseText;
13876
- }
13877
- });
13878
- return [...fileList2];
13963
+ const list = fileList.map((item) => {
13964
+ if (item.uid === fileItem.uid) {
13965
+ item.status = SUCCESS;
13966
+ item.message = locale.uploader.success;
13967
+ item.responseText = responseText;
13968
+ }
13969
+ return item;
13879
13970
  });
13880
- onSuccess && onSuccess({
13971
+ setFileList(list);
13972
+ onSuccess == null ? void 0 : onSuccess({
13881
13973
  responseText,
13882
13974
  option,
13883
- fileList
13975
+ fileList: list
13884
13976
  });
13885
13977
  };
13886
13978
  uploadOption.onFailure = (responseText, option) => {
13887
- setFileList((fileList2) => {
13888
- fileList2.forEach((item) => {
13889
- if (item.uid === fileItem.uid) {
13890
- item.status = "error";
13891
- item.message = locale.uploader.error;
13892
- item.responseText = responseText;
13893
- }
13894
- });
13895
- return [...fileList2];
13979
+ const list = fileList.map((item) => {
13980
+ if (item.uid === fileItem.uid) {
13981
+ item.status = ERROR;
13982
+ item.message = locale.uploader.error;
13983
+ item.responseText = responseText;
13984
+ }
13985
+ return item;
13896
13986
  });
13897
- onFailure && onFailure({
13987
+ setFileList(list);
13988
+ onFailure == null ? void 0 : onFailure({
13898
13989
  responseText,
13899
13990
  option,
13900
- fileList
13991
+ fileList: list
13901
13992
  });
13902
13993
  };
13903
13994
  const task = new UploaderTaro(uploadOption);
@@ -13931,11 +14022,7 @@ const InternalUploader = (props, ref) => {
13931
14022
  fileItem.status = "ready";
13932
14023
  fileItem.type = fileType;
13933
14024
  fileItem.uid = `${fileItem.uid}_${index}`;
13934
- if (autoUpload) {
13935
- fileItem.message = locale.uploader.readyUpload;
13936
- } else {
13937
- fileItem.message = locale.uploader.waitingUpload;
13938
- }
14025
+ fileItem.message = autoUpload ? locale.uploader.readyUpload : locale.uploader.waitingUpload;
13939
14026
  if (getEnv() === "WEB") {
13940
14027
  const formData = new FormData();
13941
14028
  for (const [key, value2] of Object.entries(data)) {
@@ -13952,7 +14039,7 @@ const InternalUploader = (props, ref) => {
13952
14039
  fileItem.url = fileType === "video" ? file.thumbTempFilePath : filepath;
13953
14040
  }
13954
14041
  fileList.push(fileItem);
13955
- setFileList([...fileList]);
14042
+ setFileList(fileList);
13956
14043
  executeUpload(fileItem, index);
13957
14044
  });
13958
14045
  };
@@ -13977,9 +14064,9 @@ const InternalUploader = (props, ref) => {
13977
14064
  return filterFile;
13978
14065
  };
13979
14066
  const deleted = (file, index) => {
13980
- fileList.splice(index, 1);
13981
- onDelete && onDelete(file, fileList);
13982
- setFileList([...fileList]);
14067
+ const deletedFileList = fileList.filter((file2, idx) => idx !== index);
14068
+ onDelete == null ? void 0 : onDelete(file, deletedFileList);
14069
+ setFileList(deletedFileList);
13983
14070
  };
13984
14071
  const onDeleteItem = (file, index) => {
13985
14072
  clearUploadQueue(index);
@@ -13992,88 +14079,34 @@ const InternalUploader = (props, ref) => {
13992
14079
  const { tempFiles } = res;
13993
14080
  const _files = filterFiles(tempFiles);
13994
14081
  readFile(_files);
13995
- onChange && onChange({ fileList });
13996
14082
  };
13997
14083
  const onChangeImage = (res) => {
13998
14084
  const { tempFiles } = res;
13999
14085
  const _files = filterFiles(tempFiles);
14000
14086
  readFile(_files);
14001
- onChange && onChange({ fileList });
14002
14087
  };
14003
14088
  const handleItemClick = (file) => {
14004
- onFileItemClick && onFileItemClick(file);
14089
+ onFileItemClick == null ? void 0 : onFileItemClick(file);
14005
14090
  };
14006
- 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) => {
14007
- return /* @__PURE__ */ React__default.createElement(
14008
- "div",
14009
- {
14010
- className: `nut-uploader__preview ${previewType}`,
14011
- key: item.uid
14012
- },
14013
- previewType === "picture" && deletable && /* @__PURE__ */ React__default.createElement(
14014
- a$n,
14015
- {
14016
- color: "rgba(0,0,0,0.6)",
14017
- className: "close",
14018
- onClick: () => onDeleteItem(item, index)
14019
- }
14020
- ),
14021
- 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(
14022
- Image$2,
14023
- {
14024
- className: "nut-uploader__preview-img__c",
14025
- style: { objectFit: fit },
14026
- mode: "aspectFit",
14027
- src: item.url,
14028
- onClick: () => handleItemClick(item)
14029
- }
14030
- )) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, previewUrl ? /* @__PURE__ */ React__default.createElement(
14031
- Image$2,
14032
- {
14033
- className: "nut-uploader__preview-img__c",
14034
- mode: "aspectFit",
14035
- src: previewUrl,
14036
- onClick: () => handleItemClick(item)
14037
- }
14038
- ) : /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-img__file" }, /* @__PURE__ */ React__default.createElement(
14039
- "div",
14040
- {
14041
- onClick: () => handleItemClick(item),
14042
- className: "nut-uploader__preview-img__file__name"
14043
- },
14044
- /* @__PURE__ */ React__default.createElement(a$i, { color: "#808080" }),
14045
- /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
14046
- ))), item.status === "success" ? /* @__PURE__ */ React__default.createElement("div", { className: "tips" }, item.name) : null),
14047
- previewType === "list" && /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__preview-list" }, /* @__PURE__ */ React__default.createElement(
14048
- "div",
14049
- {
14050
- className: `nut-uploader__preview-img__file__name ${item.status}`,
14051
- onClick: () => handleItemClick(item)
14052
- },
14053
- /* @__PURE__ */ React__default.createElement(a$i, null),
14054
- /* @__PURE__ */ React__default.createElement("span", null, " ", item.name)
14055
- ), deletable && /* @__PURE__ */ React__default.createElement(
14056
- a$p,
14057
- {
14058
- color: "#808080",
14059
- className: "nut-uploader__preview-img__file__del",
14060
- onClick: () => onDeleteItem(item, index)
14061
- }
14062
- ), item.status === "uploading" && /* @__PURE__ */ React__default.createElement(
14063
- Progress,
14064
- {
14065
- percent: item.percentage,
14066
- color: "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)",
14067
- showText: false
14068
- }
14069
- ))
14070
- );
14071
- }), maxCount > fileList.length && previewType === "picture" && !children && /* @__PURE__ */ React__default.createElement(
14091
+ 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(
14092
+ Preview,
14093
+ {
14094
+ ...{
14095
+ fileList,
14096
+ previewType,
14097
+ deletable,
14098
+ onDeleteItem,
14099
+ handleItemClick,
14100
+ previewUrl,
14101
+ children
14102
+ }
14103
+ }
14104
+ ), maxCount > fileList.length && previewType === "picture" && !children && /* @__PURE__ */ React__default.createElement(
14072
14105
  "div",
14073
14106
  {
14074
14107
  className: `nut-uploader__upload ${previewType} ${disabled ? "nut-uploader__upload-disabled" : ""}`
14075
14108
  },
14076
- /* @__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)),
14109
+ /* @__PURE__ */ React__default.createElement("div", { className: "nut-uploader__icon" }, uploadIcon, /* @__PURE__ */ React__default.createElement("span", { className: "nut-uploader__icon-tip" }, uploadLabel)),
14077
14110
  /* @__PURE__ */ React__default.createElement(Button, { className: "nut-uploader__input", onClick: _chooseImage })
14078
14111
  ));
14079
14112
  };
@@ -17464,7 +17497,7 @@ const Indicator = (props) => {
17464
17497
  }
17465
17498
  return childs;
17466
17499
  };
17467
- return /* @__PURE__ */ React__default.createElement("div", { className: classNames(classes, className), ...rest }, renderElement());
17500
+ return /* @__PURE__ */ React__default.createElement("div", { className: classNames(classPrefix$4, classes, className), ...rest }, renderElement());
17468
17501
  };
17469
17502
  Indicator.defaultProps = defaultProps$i;
17470
17503
  Indicator.displayName = "NutIndicator";
@@ -17488,6 +17521,7 @@ const Swiper = forwardRef((props, ref) => {
17488
17521
  duration,
17489
17522
  direction,
17490
17523
  defaultValue,
17524
+ onChange,
17491
17525
  ...rest
17492
17526
  } = {
17493
17527
  ...defaultProps$h,
@@ -17572,14 +17606,24 @@ const Swiper = forwardRef((props, ref) => {
17572
17606
  autoplay: autoPlay,
17573
17607
  vertical: direction === "vertical",
17574
17608
  indicatorDots: false,
17575
- onChange: handleOnChange,
17609
+ onChange: (e) => {
17610
+ var _a;
17611
+ handleOnChange(e);
17612
+ (_a = props.onChange) == null ? void 0 : _a.call(props, e);
17613
+ },
17576
17614
  style: {
17577
17615
  width: !width ? "100%" : `${width}px`,
17578
17616
  height: !height ? "150px" : `${height}px`
17579
17617
  },
17580
17618
  ...rest
17581
17619
  },
17582
- Children.toArray(children).map((child, index) => /* @__PURE__ */ React__default.createElement(SwiperItem$1, { key: index }, child))
17620
+ Children.toArray(children).map((child, index) => {
17621
+ let className2;
17622
+ if (React__default.isValidElement(child)) {
17623
+ className2 = child.props.className;
17624
+ }
17625
+ return /* @__PURE__ */ React__default.createElement(SwiperItem$1, { className: className2, key: index }, child);
17626
+ })
17583
17627
  )
17584
17628
  ),
17585
17629
  renderIndicator()
@@ -17641,7 +17685,9 @@ const ImagePreview = (props) => {
17641
17685
  });
17642
17686
  const [showPop, setShowPop] = useState(visible);
17643
17687
  const [active, setActive] = useState(0);
17644
- const [maxNo] = useState((images == null ? void 0 : images.length) || 0 + ((videos == null ? void 0 : videos.length) || 0));
17688
+ const [maxNo, setMaxNo] = useState(
17689
+ (images == null ? void 0 : images.length) || 0 + ((videos == null ? void 0 : videos.length) || 0)
17690
+ );
17645
17691
  const [store, setStore] = useState({
17646
17692
  scale: 1,
17647
17693
  moveable: false
@@ -17730,6 +17776,9 @@ const ImagePreview = (props) => {
17730
17776
  useEffect(() => {
17731
17777
  setActive(innerNo);
17732
17778
  }, [innerNo]);
17779
+ useEffect(() => {
17780
+ setMaxNo((images == null ? void 0 : images.length) || 0 + ((videos == null ? void 0 : videos.length) || 0));
17781
+ }, [images, videos]);
17733
17782
  const scaleNow = () => {
17734
17783
  if (ref.current) {
17735
17784
  ref.current.style.transform = `scale(${store.scale})`;
@@ -17746,7 +17795,7 @@ const ImagePreview = (props) => {
17746
17795
  };
17747
17796
  const onCloseInner = () => {
17748
17797
  setShowPop(false);
17749
- setActive(1);
17798
+ setActive(innerNo);
17750
17799
  scaleNow();
17751
17800
  onClose && onClose();
17752
17801
  setStore({