@nutui/nutui-react-taro 3.0.9 → 3.0.10-beta.1

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 (33) hide show
  1. package/CHANGELOG.md +10 -11
  2. package/dist/cjs/packages/pickerview/pickerroller.js +4 -3
  3. package/dist/cjs/packages/pickerview/pickerview.js +2 -1
  4. package/dist/cjs/packages/radio/radio.js +2 -2
  5. package/dist/cjs/packages/switch/switch.js +22 -9
  6. package/dist/cjs/packages/tabs/tabs.js +9 -3
  7. package/dist/cjs/packages/uploader/uploader.js +5 -3
  8. package/dist/cjs/packages/video/video.d.ts +2 -1
  9. package/dist/cjs/packages/video/video.js +17 -8
  10. package/dist/cjs/types/spec/switch/base.d.ts +2 -0
  11. package/dist/cjs/types/spec/uploader/base.d.ts +1 -0
  12. package/dist/cjs/utils/get-rect.js +1 -1
  13. package/dist/cjs/utils/supports-passive.js +1 -1
  14. package/dist/es/packages/pickerview/pickerroller.js +4 -3
  15. package/dist/es/packages/pickerview/pickerview.js +2 -1
  16. package/dist/es/packages/radio/radio.js +2 -2
  17. package/dist/es/packages/switch/switch.js +22 -9
  18. package/dist/es/packages/tabs/tabs.js +9 -3
  19. package/dist/es/packages/uploader/uploader.js +5 -3
  20. package/dist/es/packages/video/video.d.ts +2 -1
  21. package/dist/es/packages/video/video.js +17 -8
  22. package/dist/es/types/spec/switch/base.d.ts +9 -1
  23. package/dist/es/types/spec/uploader/base.d.ts +4 -0
  24. package/dist/es/utils/get-rect.js +1 -1
  25. package/dist/es/utils/supports-passive.js +1 -1
  26. package/dist/nutui.react.umd.js +61 -30
  27. package/dist/style-jmapp.css +1 -1
  28. package/dist/style-jmapp.scss +38 -38
  29. package/dist/style-jrkf.css +1 -1
  30. package/dist/style-jrkf.scss +44 -44
  31. package/dist/style.css +1 -1
  32. package/dist/style.scss +36 -36
  33. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,17 +1,16 @@
1
1
  # v3.0.9
2
- `2025-04-18`
3
-
4
2
 
5
- * :sparkles: feat(form): 增加 taro components 属性的支持,抽象类型 (#3182)
6
- * :sparkles: feat(input): 增加 taro components 属性的支持 (#3181)
7
- * :sparkles: feat(button): 兼容 taro components (#3188)
8
- * :bug: fix(image): update image props tsType (#3178)
9
- * 🪵 refactor: 打包组件不同主题的 css 文件 (#3189)
10
- * 🪵 refactor(loading): 移除内置的 lottie,可通过 icon 属性加载 lottie (#3184)
11
- * 📖 docs(audio): 修订audio taro 端文档,不再支持taro多端 (#3187)
12
- * 🏡 chore: update taro version (#3186)
13
- * 🏡 chore: 调整 utils 和 hooks 的导出方式 (#3162)
3
+ `2025-04-18`
14
4
 
5
+ - :sparkles: feat(form): 增加 taro components 属性的支持,抽象类型 (#3182)
6
+ - :sparkles: feat(input): 增加 taro components 属性的支持 (#3181)
7
+ - :sparkles: feat(button): 兼容 taro components (#3188)
8
+ - :bug: fix(image): update image props tsType (#3178)
9
+ - 🪵 refactor: 打包组件不同主题的 css 文件 (#3189)
10
+ - 🪵 refactor(loading): 移除内置的 lottie,可通过 icon 属性加载 lottie (#3184)
11
+ - 📖 docs(audio): 修订audio taro 端文档,不再支持taro多端 (#3187)
12
+ - 🏡 chore: update taro version (#3186)
13
+ - 🏡 chore: 调整 utils 和 hooks 的导出方式 (#3162)
15
14
 
16
15
  # v3.0.8
17
16
 
@@ -239,10 +239,11 @@ var InternalPickerRoller = function InternalPickerRoller(props, ref) {
239
239
  }, threeDimensional && options.map(function(item, index) {
240
240
  var _item_value;
241
241
  var _obj;
242
- return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, isGetLineSpacing ? /*#__PURE__*/ _react.default.createElement(_components.View, {
243
- className: (0, _classnames.default)("".concat(classPrefix, "-item"), (_obj = {}, (0, _define_property._)(_obj, "".concat(classPrefix, "-item-hidden"), isItemHidden(index + 1)), (0, _define_property._)(_obj, "".concat(classPrefix, "-item-active"), index + 1 === currentIndex), _obj)),
244
- style: rollerStyle(index),
242
+ return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, {
245
243
  key: (_item_value = item.value) !== null && _item_value !== void 0 ? _item_value : index
244
+ }, isGetLineSpacing ? /*#__PURE__*/ _react.default.createElement(_components.View, {
245
+ className: (0, _classnames.default)("".concat(classPrefix, "-item"), (_obj = {}, (0, _define_property._)(_obj, "".concat(classPrefix, "-item-hidden"), isItemHidden(index + 1)), (0, _define_property._)(_obj, "".concat(classPrefix, "-item-active"), index + 1 === currentIndex), _obj)),
246
+ style: rollerStyle(index)
246
247
  }, renderLabel(item)) : null);
247
248
  }), !threeDimensional && options.map(function(item, index) {
248
249
  var _item_value;
@@ -21,6 +21,7 @@ var _reactfastcompare = /*#__PURE__*/ _interop_require_default._(require("react-
21
21
  var _typings = require("../../utils/typings");
22
22
  var _usepropsvalue = require("../../hooks/use-props-value");
23
23
  var _pickerroller = /*#__PURE__*/ _interop_require_default._(require("./pickerroller"));
24
+ var _isempty = require("../../utils/is-empty");
24
25
  var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typings.ComponentDefaults), {
25
26
  options: [],
26
27
  defaultValue: [],
@@ -117,7 +118,7 @@ var InternalPickerView = function InternalPickerView(props, ref) {
117
118
  ]);
118
119
  var handleSelect = (0, _react.useCallback)(function(option, index) {
119
120
  var newValue = option === null || option === void 0 ? void 0 : option.value;
120
- if (!newValue || innerValue[index] === newValue) return;
121
+ if ((0, _isempty.isEmpty)(newValue) || innerValue[index] === newValue) return;
121
122
  changeIndex.current = index;
122
123
  if (columnsType === 'multiple') {
123
124
  setInnerValue(function(prev) {
@@ -84,13 +84,13 @@ var Radio = function Radio(props) {
84
84
  }
85
85
  if (checkedStatement) {
86
86
  return /*#__PURE__*/ _react.default.isValidElement(activeIcon) ? /*#__PURE__*/ _react.default.cloneElement(activeIcon, (0, _object_spread_props._)((0, _object_spread._)({}, activeIcon.props), {
87
- className: (0, _classnames.default)(color())
87
+ className: (0, _classnames.default)(activeIcon.props.className, color())
88
88
  })) : /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.CheckChecked, {
89
89
  className: (0, _classnames.default)(color())
90
90
  });
91
91
  }
92
92
  return /*#__PURE__*/ _react.default.isValidElement(icon) ? /*#__PURE__*/ _react.default.cloneElement(icon, (0, _object_spread_props._)((0, _object_spread._)({}, icon.props), {
93
- className: (0, _classnames.default)(color())
93
+ className: (0, _classnames.default)(icon.props.className, color())
94
94
  })) : /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.CheckNormal, {
95
95
  className: (0, _classnames.default)(color())
96
96
  });
@@ -28,10 +28,12 @@ var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typing
28
28
  disabled: false,
29
29
  activeText: '',
30
30
  inactiveText: '',
31
- loadingIcon: /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Loading1, null)
31
+ loadingIcon: /*#__PURE__*/ _react.default.createElement(_iconsreacttaro.Loading1, null),
32
+ loading: undefined,
33
+ onLoadingChange: function onLoadingChange(loading) {}
32
34
  });
33
35
  var Switch = function Switch(props) {
34
- var _ref = (0, _object_spread._)({}, defaultProps, props), checked = _ref.checked, defaultChecked = _ref.defaultChecked, disabled = _ref.disabled, activeText = _ref.activeText, inactiveText = _ref.inactiveText, loadingIcon = _ref.loadingIcon, className = _ref.className, style = _ref.style, onChange = _ref.onChange, rest = (0, _object_without_properties._)(_ref, [
36
+ var _ref = (0, _object_spread._)({}, defaultProps, props), checked = _ref.checked, defaultChecked = _ref.defaultChecked, disabled = _ref.disabled, activeText = _ref.activeText, inactiveText = _ref.inactiveText, loadingIcon = _ref.loadingIcon, className = _ref.className, style = _ref.style, onChange = _ref.onChange, propLoading = _ref.loading, onLoadingChange = _ref.onLoadingChange, rest = (0, _object_without_properties._)(_ref, [
35
37
  "checked",
36
38
  "defaultChecked",
37
39
  "disabled",
@@ -40,7 +42,9 @@ var Switch = function Switch(props) {
40
42
  "loadingIcon",
41
43
  "className",
42
44
  "style",
43
- "onChange"
45
+ "onChange",
46
+ "loading",
47
+ "onLoadingChange"
44
48
  ]);
45
49
  var classPrefix = 'nut-switch';
46
50
  var rtl = (0, _index.useRtl)();
@@ -48,12 +52,20 @@ var Switch = function Switch(props) {
48
52
  value: checked,
49
53
  defaultValue: defaultChecked
50
54
  }), 2), value = _usePropsValue[0], setValue = _usePropsValue[1];
55
+ var _useState = (0, _sliced_to_array._)((0, _react.useState)(false), 2), internalLoading = _useState[0], setInternalLoading = _useState[1];
56
+ var loading = propLoading !== undefined ? propLoading : internalLoading;
57
+ var setLoading = function setLoading(val) {
58
+ if (propLoading !== undefined) {
59
+ onLoadingChange(val);
60
+ } else {
61
+ setInternalLoading(val);
62
+ }
63
+ };
51
64
  (0, _react.useEffect)(function() {
52
- changing && setChanging(false);
65
+ loading && setLoading(false);
53
66
  }, [
54
67
  value
55
68
  ]);
56
- var _useState = (0, _sliced_to_array._)((0, _react.useState)(false), 2), changing = _useState[0], setChanging = _useState[1];
57
69
  var classes = function classes() {
58
70
  var _obj;
59
71
  return (0, _classnames.default)([
@@ -68,14 +80,15 @@ var Switch = function Switch(props) {
68
80
  return (0, _ts_generator._)(this, function(_state) {
69
81
  switch(_state.label){
70
82
  case 0:
71
- if (disabled || changing) return [
83
+ if (disabled || loading) return [
72
84
  2
73
85
  ];
74
86
  if (!onChange) return [
75
87
  3,
76
88
  4
77
89
  ];
78
- setChanging(true);
90
+ loadingIcon && setLoading(true);
91
+ onChange(!value);
79
92
  _state.label = 1;
80
93
  case 1:
81
94
  _state.trys.push([
@@ -96,7 +109,7 @@ var Switch = function Switch(props) {
96
109
  ];
97
110
  case 3:
98
111
  e = _state.sent();
99
- setChanging(false);
112
+ setLoading(false);
100
113
  return [
101
114
  3,
102
115
  4
@@ -128,7 +141,7 @@ var Switch = function Switch(props) {
128
141
  ],
129
142
  (_obj = {}, (0, _define_property._)(_obj, "".concat(classPrefix, "-button-open-rtl"), rtl && value), (0, _define_property._)(_obj, "".concat(classPrefix, "-button-close-rtl"), rtl && !value), _obj)
130
143
  ])
131
- }, changing && loadingIcon ? /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, loadingIcon) : /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, !value && !activeText && /*#__PURE__*/ _react.default.createElement(_components.View, {
144
+ }, loading && loadingIcon ? /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, loadingIcon) : /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, !value && !activeText && /*#__PURE__*/ _react.default.createElement(_components.View, {
132
145
  className: "".concat(classPrefix, "-close-line")
133
146
  }))), activeText && /*#__PURE__*/ _react.default.createElement(_components.View, {
134
147
  className: (0, _classnames.default)("".concat(classPrefix, "-label"), (_obj1 = {}, (0, _define_property._)(_obj1, "".concat(classPrefix, "-label-open"), value), (0, _define_property._)(_obj1, "".concat(classPrefix, "-label-close"), !value), (0, _define_property._)(_obj1, "".concat(classPrefix, "-label-open-rtl"), rtl && value), (0, _define_property._)(_obj1, "".concat(classPrefix, "-label-close-rtl"), rtl && !value), (0, _define_property._)(_obj1, "".concat(classPrefix, "-label-close-disabled"), disabled && !value), _obj1))
@@ -126,7 +126,7 @@ var Tabs = function Tabs(props) {
126
126
  var scrollIntoView = function scrollIntoView(index) {
127
127
  (0, _raf.default)(function() {
128
128
  Promise.all([
129
- getRect("#nut-tabs-titles-".concat(name || uuid, " .nut-tabs-list")),
129
+ getRect("#nut-tabs-titles-".concat(name || uuid)),
130
130
  getAllRect("#nut-tabs-titles-".concat(name || uuid, " .nut-tabs-titles-item"))
131
131
  ]).then(function(param) {
132
132
  var _param = (0, _sliced_to_array._)(param, 2), navRect = _param[0], titleRects = _param[1];
@@ -134,15 +134,21 @@ var Tabs = function Tabs(props) {
134
134
  if (!titleRect) return;
135
135
  var to = 0;
136
136
  if (direction === 'vertical') {
137
+ var totalHeight = titleRects.reduce(function(sum, curr) {
138
+ return sum + curr.height;
139
+ }, 0);
137
140
  var top = titleRects.slice(0, index).reduce(function(prev, curr) {
138
141
  return prev + curr.height;
139
142
  }, 0);
140
- to = top - (navRect.height - titleRect.height) / 2;
143
+ to = Math.min(Math.max(0, top - (navRect.height - titleRect.height) / 2), totalHeight - navRect.height);
141
144
  } else {
145
+ var totalWidth = titleRects.reduce(function(sum, curr) {
146
+ return sum + curr.width;
147
+ }, 0);
142
148
  var left = titleRects.slice(0, index).reduce(function(prev, curr) {
143
149
  return prev + curr.width;
144
150
  }, 0);
145
- to = left - (navRect.width - titleRect.width) / 2;
151
+ to = Math.min(Math.max(0, left - (navRect.width - titleRect.width) / 2), totalWidth - navRect.width);
146
152
  }
147
153
  scrollDirection(to, direction);
148
154
  (0, _taro.nextTick)(function() {
@@ -69,11 +69,12 @@ var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typing
69
69
  });
70
70
  var InternalUploader = function InternalUploader(props, ref) {
71
71
  var locale = (0, _index1.useConfig)().locale;
72
- var _ref = (0, _object_spread._)({}, defaultProps, props), children = _ref.children, uploadIcon = _ref.uploadIcon, deleteIcon = _ref.deleteIcon, uploadLabel = _ref.uploadLabel, accept = _ref.accept, name = _ref.name, camera = _ref.camera, defaultValue = _ref.defaultValue, value = _ref.value, previewType = _ref.previewType, fit = _ref.fit, disabled = _ref.disabled, multiple = _ref.multiple, previewUrl = _ref.previewUrl, preview = _ref.preview, deletable = _ref.deletable, maxCount = _ref.maxCount, maxFileSize = _ref.maxFileSize, mediaType = _ref.mediaType, className = _ref.className, autoUpload = _ref.autoUpload, sizeType = _ref.sizeType, sourceType = _ref.sourceType, maxDuration = _ref.maxDuration, onDelete = _ref.onDelete, onChange = _ref.onChange, onFileItemClick = _ref.onFileItemClick, onOversize = _ref.onOversize, onOverCount = _ref.onOverCount, beforeUpload = _ref.beforeUpload, upload = _ref.upload, beforeDelete = _ref.beforeDelete, onUploadQueueChange = _ref.onUploadQueueChange, restProps = (0, _object_without_properties._)(_ref, [
72
+ var _ref = (0, _object_spread._)({}, defaultProps, props), children = _ref.children, uploadIcon = _ref.uploadIcon, deleteIcon = _ref.deleteIcon, uploadLabel = _ref.uploadLabel, listUploadRender = _ref.listUploadRender, accept = _ref.accept, name = _ref.name, camera = _ref.camera, defaultValue = _ref.defaultValue, value = _ref.value, previewType = _ref.previewType, fit = _ref.fit, disabled = _ref.disabled, multiple = _ref.multiple, previewUrl = _ref.previewUrl, preview = _ref.preview, deletable = _ref.deletable, maxCount = _ref.maxCount, maxFileSize = _ref.maxFileSize, mediaType = _ref.mediaType, className = _ref.className, autoUpload = _ref.autoUpload, sizeType = _ref.sizeType, sourceType = _ref.sourceType, maxDuration = _ref.maxDuration, onDelete = _ref.onDelete, onChange = _ref.onChange, onFileItemClick = _ref.onFileItemClick, onOversize = _ref.onOversize, onOverCount = _ref.onOverCount, beforeUpload = _ref.beforeUpload, upload = _ref.upload, beforeDelete = _ref.beforeDelete, onUploadQueueChange = _ref.onUploadQueueChange, restProps = (0, _object_without_properties._)(_ref, [
73
73
  "children",
74
74
  "uploadIcon",
75
75
  "deleteIcon",
76
76
  "uploadLabel",
77
+ "listUploadRender",
77
78
  "accept",
78
79
  "name",
79
80
  "camera",
@@ -451,9 +452,10 @@ var InternalUploader = function InternalUploader(props, ref) {
451
452
  onFileItemClick === null || onFileItemClick === void 0 ? void 0 : onFileItemClick(file, index);
452
453
  };
453
454
  var renderListUploader = function renderListUploader() {
454
- return previewType === 'list' && /*#__PURE__*/ _react.default.createElement(_components.View, {
455
+ if (previewType !== 'list') return null;
456
+ return /*#__PURE__*/ _react.default.createElement(_components.View, {
455
457
  className: "nut-uploader-slot"
456
- }, /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_index.default, {
458
+ }, listUploadRender || /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_index.default, {
457
459
  size: "small",
458
460
  type: "primary"
459
461
  }, locale.uploader.list), Number(maxCount) > fileList.length && /*#__PURE__*/ _react.default.createElement(_index.default, {
@@ -1,3 +1,4 @@
1
1
  import { FunctionComponent } from 'react';
2
+ import { VideoProps } from '@tarojs/components';
2
3
  import { TaroVideoProps } from "../../types";
3
- export declare const Video: FunctionComponent<Partial<TaroVideoProps>>;
4
+ export declare const Video: FunctionComponent<Partial<TaroVideoProps & VideoProps>>;
@@ -29,29 +29,38 @@ var defaultProps = {
29
29
  loop: false
30
30
  }
31
31
  };
32
- var classPrefix = "nut-video";
32
+ var classPrefix = 'nut-video';
33
33
  var Video = function Video(props) {
34
- var _mergeProps = (0, _mergeprops.mergeProps)(defaultProps, props), source = _mergeProps.source, options = _mergeProps.options, className = _mergeProps.className, style = _mergeProps.style, onPlay = _mergeProps.onPlay, onPause = _mergeProps.onPause, onPlayEnd = _mergeProps.onPlayEnd, restProps = (0, _object_without_properties._)(_mergeProps, [
34
+ var _props_options;
35
+ var _mergeProps = (0, _mergeprops.mergeProps)(defaultProps, props), source = _mergeProps.source, options = _mergeProps.options, className = _mergeProps.className, style = _mergeProps.style, src = _mergeProps.src, muted = _mergeProps.muted, loop = _mergeProps.loop, poster = _mergeProps.poster, controls = _mergeProps.controls, autoplay = _mergeProps.autoplay, onPlay = _mergeProps.onPlay, onPause = _mergeProps.onPause, onPlayEnd = _mergeProps.onPlayEnd, restProps = (0, _object_without_properties._)(_mergeProps, [
35
36
  "source",
36
37
  "options",
37
38
  "className",
38
39
  "style",
40
+ "src",
41
+ "muted",
42
+ "loop",
43
+ "poster",
44
+ "controls",
45
+ "autoplay",
39
46
  "onPlay",
40
47
  "onPause",
41
48
  "onPlayEnd"
42
49
  ]);
43
50
  var classes = (0, _classnames.default)(classPrefix, className);
51
+ var _props_options_controls, _ref;
52
+ var effectiveControls = (_ref = (_props_options_controls = (_props_options = props.options) === null || _props_options === void 0 ? void 0 : _props_options.controls) !== null && _props_options_controls !== void 0 ? _props_options_controls : controls) !== null && _ref !== void 0 ? _ref : options.controls;
44
53
  return /*#__PURE__*/ _react.default.createElement(_components.View, {
45
54
  className: classes,
46
55
  style: style
47
56
  }, /*#__PURE__*/ _react.default.createElement(_components.Video, (0, _object_spread._)({
48
57
  className: "".concat(classPrefix, "-player"),
49
- muted: options.muted,
50
- autoplay: options.autoplay,
51
- loop: options.loop,
52
- poster: options.poster,
53
- controls: options.controls,
54
- src: source.src,
58
+ muted: options.muted || muted,
59
+ autoplay: options.autoplay || autoplay,
60
+ loop: options.loop || loop,
61
+ poster: options.poster || poster,
62
+ controls: effectiveControls,
63
+ src: source.src || src,
55
64
  onPlay: onPlay,
56
65
  onPause: onPause,
57
66
  onEnded: onPlayEnd
@@ -7,5 +7,7 @@ export interface BaseSwitch extends BaseProps {
7
7
  activeText: ReactNode;
8
8
  inactiveText: ReactNode;
9
9
  loadingIcon: ReactNode;
10
+ loading: boolean | undefined;
11
+ onLoadingChange: (loading: boolean) => void;
10
12
  onChange: (val: boolean) => void;
11
13
  }
@@ -28,6 +28,7 @@ export interface BaseUploader extends BaseProps {
28
28
  uploadIcon?: React.ReactNode;
29
29
  deleteIcon?: React.ReactNode;
30
30
  uploadLabel?: React.ReactNode;
31
+ listUploadRender?: React.ReactNode;
31
32
  name: string;
32
33
  accept: string;
33
34
  disabled: boolean;
@@ -38,7 +38,7 @@ var getRect = function getRect(elementRef) {
38
38
  };
39
39
  }
40
40
  if (element && element.getBoundingClientRect) {
41
- console.log(element, element.getBoundingClientRect());
41
+ // console.log(element, element.getBoundingClientRect())
42
42
  return element.getBoundingClientRect();
43
43
  }
44
44
  return {
@@ -19,6 +19,6 @@ if (_canusedom.canUseDom) {
19
19
  });
20
20
  window.addEventListener('test-passive-supported', null, opts);
21
21
  } catch (e) {
22
- console.log(e);
22
+ console.log('supported passive error', e);
23
23
  }
24
24
  }
@@ -227,10 +227,11 @@ var InternalPickerRoller = function(props, ref) {
227
227
  }, threeDimensional && options.map(function(item, index) {
228
228
  var _item_value;
229
229
  var _obj;
230
- return /*#__PURE__*/ React.createElement(React.Fragment, null, isGetLineSpacing ? /*#__PURE__*/ React.createElement(View, {
231
- className: classNames("".concat(classPrefix, "-item"), (_obj = {}, _define_property(_obj, "".concat(classPrefix, "-item-hidden"), isItemHidden(index + 1)), _define_property(_obj, "".concat(classPrefix, "-item-active"), index + 1 === currentIndex), _obj)),
232
- style: rollerStyle(index),
230
+ return /*#__PURE__*/ React.createElement(React.Fragment, {
233
231
  key: (_item_value = item.value) !== null && _item_value !== void 0 ? _item_value : index
232
+ }, isGetLineSpacing ? /*#__PURE__*/ React.createElement(View, {
233
+ className: classNames("".concat(classPrefix, "-item"), (_obj = {}, _define_property(_obj, "".concat(classPrefix, "-item-hidden"), isItemHidden(index + 1)), _define_property(_obj, "".concat(classPrefix, "-item-active"), index + 1 === currentIndex), _obj)),
234
+ style: rollerStyle(index)
234
235
  }, renderLabel(item)) : null);
235
236
  }), !threeDimensional && options.map(function(item, index) {
236
237
  var _item_value;
@@ -9,6 +9,7 @@ import isEqual from "react-fast-compare";
9
9
  import { ComponentDefaults } from "../../utils/typings";
10
10
  import { usePropsValue } from "../../hooks/use-props-value";
11
11
  import PickerRoller from "./pickerroller";
12
+ import { isEmpty } from "../../utils/is-empty";
12
13
  var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
13
14
  options: [],
14
15
  defaultValue: [],
@@ -105,7 +106,7 @@ var InternalPickerView = function(props, ref) {
105
106
  ]);
106
107
  var handleSelect = useCallback(function(option, index) {
107
108
  var newValue = option === null || option === void 0 ? void 0 : option.value;
108
- if (!newValue || innerValue[index] === newValue) return;
109
+ if (isEmpty(newValue) || innerValue[index] === newValue) return;
109
110
  changeIndex.current = index;
110
111
  if (columnsType === 'multiple') {
111
112
  setInnerValue(function(prev) {
@@ -72,13 +72,13 @@ export var Radio = function(props) {
72
72
  }
73
73
  if (checkedStatement) {
74
74
  return /*#__PURE__*/ React.isValidElement(activeIcon) ? /*#__PURE__*/ React.cloneElement(activeIcon, _object_spread_props(_object_spread({}, activeIcon.props), {
75
- className: classNames(color())
75
+ className: classNames(activeIcon.props.className, color())
76
76
  })) : /*#__PURE__*/ React.createElement(CheckChecked, {
77
77
  className: classNames(color())
78
78
  });
79
79
  }
80
80
  return /*#__PURE__*/ React.isValidElement(icon) ? /*#__PURE__*/ React.cloneElement(icon, _object_spread_props(_object_spread({}, icon.props), {
81
- className: classNames(color())
81
+ className: classNames(icon.props.className, color())
82
82
  })) : /*#__PURE__*/ React.createElement(CheckNormal, {
83
83
  className: classNames(color())
84
84
  });
@@ -16,10 +16,12 @@ var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
16
16
  disabled: false,
17
17
  activeText: '',
18
18
  inactiveText: '',
19
- loadingIcon: /*#__PURE__*/ React.createElement(Loading1, null)
19
+ loadingIcon: /*#__PURE__*/ React.createElement(Loading1, null),
20
+ loading: undefined,
21
+ onLoadingChange: function(loading) {}
20
22
  });
21
23
  export var Switch = function(props) {
22
- var _ref = _object_spread({}, defaultProps, props), checked = _ref.checked, defaultChecked = _ref.defaultChecked, disabled = _ref.disabled, activeText = _ref.activeText, inactiveText = _ref.inactiveText, loadingIcon = _ref.loadingIcon, className = _ref.className, style = _ref.style, onChange = _ref.onChange, rest = _object_without_properties(_ref, [
24
+ var _ref = _object_spread({}, defaultProps, props), checked = _ref.checked, defaultChecked = _ref.defaultChecked, disabled = _ref.disabled, activeText = _ref.activeText, inactiveText = _ref.inactiveText, loadingIcon = _ref.loadingIcon, className = _ref.className, style = _ref.style, onChange = _ref.onChange, propLoading = _ref.loading, onLoadingChange = _ref.onLoadingChange, rest = _object_without_properties(_ref, [
23
25
  "checked",
24
26
  "defaultChecked",
25
27
  "disabled",
@@ -28,7 +30,9 @@ export var Switch = function(props) {
28
30
  "loadingIcon",
29
31
  "className",
30
32
  "style",
31
- "onChange"
33
+ "onChange",
34
+ "loading",
35
+ "onLoadingChange"
32
36
  ]);
33
37
  var classPrefix = 'nut-switch';
34
38
  var rtl = useRtl();
@@ -36,12 +40,20 @@ export var Switch = function(props) {
36
40
  value: checked,
37
41
  defaultValue: defaultChecked
38
42
  }), 2), value = _usePropsValue[0], setValue = _usePropsValue[1];
43
+ var _useState = _sliced_to_array(useState(false), 2), internalLoading = _useState[0], setInternalLoading = _useState[1];
44
+ var loading = propLoading !== undefined ? propLoading : internalLoading;
45
+ var setLoading = function(val) {
46
+ if (propLoading !== undefined) {
47
+ onLoadingChange(val);
48
+ } else {
49
+ setInternalLoading(val);
50
+ }
51
+ };
39
52
  useEffect(function() {
40
- changing && setChanging(false);
53
+ loading && setLoading(false);
41
54
  }, [
42
55
  value
43
56
  ]);
44
- var _useState = _sliced_to_array(useState(false), 2), changing = _useState[0], setChanging = _useState[1];
45
57
  var classes = function() {
46
58
  var _obj;
47
59
  return classNames([
@@ -56,14 +68,15 @@ export var Switch = function(props) {
56
68
  return _ts_generator(this, function(_state) {
57
69
  switch(_state.label){
58
70
  case 0:
59
- if (disabled || changing) return [
71
+ if (disabled || loading) return [
60
72
  2
61
73
  ];
62
74
  if (!onChange) return [
63
75
  3,
64
76
  4
65
77
  ];
66
- setChanging(true);
78
+ loadingIcon && setLoading(true);
79
+ onChange(!value);
67
80
  _state.label = 1;
68
81
  case 1:
69
82
  _state.trys.push([
@@ -84,7 +97,7 @@ export var Switch = function(props) {
84
97
  ];
85
98
  case 3:
86
99
  e = _state.sent();
87
- setChanging(false);
100
+ setLoading(false);
88
101
  return [
89
102
  3,
90
103
  4
@@ -116,7 +129,7 @@ export var Switch = function(props) {
116
129
  ],
117
130
  (_obj = {}, _define_property(_obj, "".concat(classPrefix, "-button-open-rtl"), rtl && value), _define_property(_obj, "".concat(classPrefix, "-button-close-rtl"), rtl && !value), _obj)
118
131
  ])
119
- }, changing && loadingIcon ? /*#__PURE__*/ React.createElement(React.Fragment, null, loadingIcon) : /*#__PURE__*/ React.createElement(React.Fragment, null, !value && !activeText && /*#__PURE__*/ React.createElement(View, {
132
+ }, loading && loadingIcon ? /*#__PURE__*/ React.createElement(React.Fragment, null, loadingIcon) : /*#__PURE__*/ React.createElement(React.Fragment, null, !value && !activeText && /*#__PURE__*/ React.createElement(View, {
120
133
  className: "".concat(classPrefix, "-close-line")
121
134
  }))), activeText && /*#__PURE__*/ React.createElement(View, {
122
135
  className: classNames("".concat(classPrefix, "-label"), (_obj1 = {}, _define_property(_obj1, "".concat(classPrefix, "-label-open"), value), _define_property(_obj1, "".concat(classPrefix, "-label-close"), !value), _define_property(_obj1, "".concat(classPrefix, "-label-open-rtl"), rtl && value), _define_property(_obj1, "".concat(classPrefix, "-label-close-rtl"), rtl && !value), _define_property(_obj1, "".concat(classPrefix, "-label-close-disabled"), disabled && !value), _obj1))
@@ -114,7 +114,7 @@ export var Tabs = function(props) {
114
114
  var scrollIntoView = function(index) {
115
115
  raf(function() {
116
116
  Promise.all([
117
- getRect("#nut-tabs-titles-".concat(name || uuid, " .nut-tabs-list")),
117
+ getRect("#nut-tabs-titles-".concat(name || uuid)),
118
118
  getAllRect("#nut-tabs-titles-".concat(name || uuid, " .nut-tabs-titles-item"))
119
119
  ]).then(function(param) {
120
120
  var _param = _sliced_to_array(param, 2), navRect = _param[0], titleRects = _param[1];
@@ -122,15 +122,21 @@ export var Tabs = function(props) {
122
122
  if (!titleRect) return;
123
123
  var to = 0;
124
124
  if (direction === 'vertical') {
125
+ var totalHeight = titleRects.reduce(function(sum, curr) {
126
+ return sum + curr.height;
127
+ }, 0);
125
128
  var top = titleRects.slice(0, index).reduce(function(prev, curr) {
126
129
  return prev + curr.height;
127
130
  }, 0);
128
- to = top - (navRect.height - titleRect.height) / 2;
131
+ to = Math.min(Math.max(0, top - (navRect.height - titleRect.height) / 2), totalHeight - navRect.height);
129
132
  } else {
133
+ var totalWidth = titleRects.reduce(function(sum, curr) {
134
+ return sum + curr.width;
135
+ }, 0);
130
136
  var left = titleRects.slice(0, index).reduce(function(prev, curr) {
131
137
  return prev + curr.width;
132
138
  }, 0);
133
- to = left - (navRect.width - titleRect.width) / 2;
139
+ to = Math.min(Math.max(0, left - (navRect.width - titleRect.width) / 2), totalWidth - navRect.width);
134
140
  }
135
141
  scrollDirection(to, direction);
136
142
  nextTick(function() {
@@ -57,11 +57,12 @@ var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
57
57
  });
58
58
  var InternalUploader = function(props, ref) {
59
59
  var locale = useConfig().locale;
60
- var _ref = _object_spread({}, defaultProps, props), children = _ref.children, uploadIcon = _ref.uploadIcon, deleteIcon = _ref.deleteIcon, uploadLabel = _ref.uploadLabel, accept = _ref.accept, name = _ref.name, camera = _ref.camera, defaultValue = _ref.defaultValue, value = _ref.value, previewType = _ref.previewType, fit = _ref.fit, disabled = _ref.disabled, multiple = _ref.multiple, previewUrl = _ref.previewUrl, preview = _ref.preview, deletable = _ref.deletable, maxCount = _ref.maxCount, maxFileSize = _ref.maxFileSize, mediaType = _ref.mediaType, className = _ref.className, autoUpload = _ref.autoUpload, sizeType = _ref.sizeType, sourceType = _ref.sourceType, maxDuration = _ref.maxDuration, onDelete = _ref.onDelete, onChange = _ref.onChange, onFileItemClick = _ref.onFileItemClick, onOversize = _ref.onOversize, onOverCount = _ref.onOverCount, beforeUpload = _ref.beforeUpload, upload = _ref.upload, beforeDelete = _ref.beforeDelete, onUploadQueueChange = _ref.onUploadQueueChange, restProps = _object_without_properties(_ref, [
60
+ var _ref = _object_spread({}, defaultProps, props), children = _ref.children, uploadIcon = _ref.uploadIcon, deleteIcon = _ref.deleteIcon, uploadLabel = _ref.uploadLabel, listUploadRender = _ref.listUploadRender, accept = _ref.accept, name = _ref.name, camera = _ref.camera, defaultValue = _ref.defaultValue, value = _ref.value, previewType = _ref.previewType, fit = _ref.fit, disabled = _ref.disabled, multiple = _ref.multiple, previewUrl = _ref.previewUrl, preview = _ref.preview, deletable = _ref.deletable, maxCount = _ref.maxCount, maxFileSize = _ref.maxFileSize, mediaType = _ref.mediaType, className = _ref.className, autoUpload = _ref.autoUpload, sizeType = _ref.sizeType, sourceType = _ref.sourceType, maxDuration = _ref.maxDuration, onDelete = _ref.onDelete, onChange = _ref.onChange, onFileItemClick = _ref.onFileItemClick, onOversize = _ref.onOversize, onOverCount = _ref.onOverCount, beforeUpload = _ref.beforeUpload, upload = _ref.upload, beforeDelete = _ref.beforeDelete, onUploadQueueChange = _ref.onUploadQueueChange, restProps = _object_without_properties(_ref, [
61
61
  "children",
62
62
  "uploadIcon",
63
63
  "deleteIcon",
64
64
  "uploadLabel",
65
+ "listUploadRender",
65
66
  "accept",
66
67
  "name",
67
68
  "camera",
@@ -439,9 +440,10 @@ var InternalUploader = function(props, ref) {
439
440
  onFileItemClick === null || onFileItemClick === void 0 ? void 0 : onFileItemClick(file, index);
440
441
  };
441
442
  var renderListUploader = function() {
442
- return previewType === 'list' && /*#__PURE__*/ React.createElement(View, {
443
+ if (previewType !== 'list') return null;
444
+ return /*#__PURE__*/ React.createElement(View, {
443
445
  className: "nut-uploader-slot"
444
- }, /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(Button, {
446
+ }, listUploadRender || /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(Button, {
445
447
  size: "small",
446
448
  type: "primary"
447
449
  }, locale.uploader.list), Number(maxCount) > fileList.length && /*#__PURE__*/ React.createElement(Button, {
@@ -1,3 +1,4 @@
1
1
  import { FunctionComponent } from 'react';
2
+ import { VideoProps } from '@tarojs/components';
2
3
  import { TaroVideoProps } from "../../types";
3
- export declare const Video: FunctionComponent<Partial<TaroVideoProps>>;
4
+ export declare const Video: FunctionComponent<Partial<TaroVideoProps & VideoProps>>;
@@ -18,29 +18,38 @@ var defaultProps = {
18
18
  loop: false
19
19
  }
20
20
  };
21
- var classPrefix = "nut-video";
21
+ var classPrefix = 'nut-video';
22
22
  export var Video = function(props) {
23
- var _mergeProps = mergeProps(defaultProps, props), source = _mergeProps.source, options = _mergeProps.options, className = _mergeProps.className, style = _mergeProps.style, onPlay = _mergeProps.onPlay, onPause = _mergeProps.onPause, onPlayEnd = _mergeProps.onPlayEnd, restProps = _object_without_properties(_mergeProps, [
23
+ var _props_options;
24
+ var _mergeProps = mergeProps(defaultProps, props), source = _mergeProps.source, options = _mergeProps.options, className = _mergeProps.className, style = _mergeProps.style, src = _mergeProps.src, muted = _mergeProps.muted, loop = _mergeProps.loop, poster = _mergeProps.poster, controls = _mergeProps.controls, autoplay = _mergeProps.autoplay, onPlay = _mergeProps.onPlay, onPause = _mergeProps.onPause, onPlayEnd = _mergeProps.onPlayEnd, restProps = _object_without_properties(_mergeProps, [
24
25
  "source",
25
26
  "options",
26
27
  "className",
27
28
  "style",
29
+ "src",
30
+ "muted",
31
+ "loop",
32
+ "poster",
33
+ "controls",
34
+ "autoplay",
28
35
  "onPlay",
29
36
  "onPause",
30
37
  "onPlayEnd"
31
38
  ]);
32
39
  var classes = classNames(classPrefix, className);
40
+ var _props_options_controls, _ref;
41
+ var effectiveControls = (_ref = (_props_options_controls = (_props_options = props.options) === null || _props_options === void 0 ? void 0 : _props_options.controls) !== null && _props_options_controls !== void 0 ? _props_options_controls : controls) !== null && _ref !== void 0 ? _ref : options.controls;
33
42
  return /*#__PURE__*/ React.createElement(View, {
34
43
  className: classes,
35
44
  style: style
36
45
  }, /*#__PURE__*/ React.createElement(VideoTaro, _object_spread({
37
46
  className: "".concat(classPrefix, "-player"),
38
- muted: options.muted,
39
- autoplay: options.autoplay,
40
- loop: options.loop,
41
- poster: options.poster,
42
- controls: options.controls,
43
- src: source.src,
47
+ muted: options.muted || muted,
48
+ autoplay: options.autoplay || autoplay,
49
+ loop: options.loop || loop,
50
+ poster: options.poster || poster,
51
+ controls: effectiveControls,
52
+ src: source.src || src,
44
53
  onPlay: onPlay,
45
54
  onPause: onPause,
46
55
  onEnded: onPlayEnd
@@ -22,10 +22,18 @@ export interface BaseSwitch extends BaseProps {
22
22
  */
23
23
  inactiveText: ReactNode
24
24
  /**
25
- * 受控 loading 态图标
25
+ * 控制加载状态的图标,传入空值时禁用 loading
26
26
  */
27
27
  loadingIcon: ReactNode
28
28
  /**
29
+ * loading 态,受控
30
+ */
31
+ loading: boolean | undefined
32
+ /**
33
+ * 切换 loading 态时触发
34
+ */
35
+ onLoadingChange: (loading: boolean) => void
36
+ /**
29
37
  * 切换开关时触发
30
38
  */
31
39
  onChange: (val: boolean) => void
@@ -59,6 +59,10 @@ export interface BaseUploader extends BaseProps {
59
59
  */
60
60
  uploadLabel?: React.ReactNode
61
61
  /**
62
+ * 自定义列表模式的上传区域
63
+ */
64
+ listUploadRender?: React.ReactNode
65
+ /**
62
66
  * input 标签 name 的名称,发到后台的文件参数名
63
67
  */
64
68
  name: string
@@ -25,7 +25,7 @@ export function isWindow(val) {
25
25
  };
26
26
  }
27
27
  if (element && element.getBoundingClientRect) {
28
- console.log(element, element.getBoundingClientRect());
28
+ // console.log(element, element.getBoundingClientRect())
29
29
  return element.getBoundingClientRect();
30
30
  }
31
31
  return {
@@ -9,6 +9,6 @@ if (canUseDom) {
9
9
  });
10
10
  window.addEventListener('test-passive-supported', null, opts);
11
11
  } catch (e) {
12
- console.log(e);
12
+ console.log('supported passive error', e);
13
13
  }
14
14
  }