@arco-design/mobile-react 2.19.2-ee92494.5 → 2.20.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 (112) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.en-US.md +4 -4
  3. package/README.md +4 -4
  4. package/cjs/avatar/group.js +1 -1
  5. package/cjs/avatar/index.js +10 -13
  6. package/cjs/avatar/style/css/index.css +96 -126
  7. package/cjs/avatar/style/index.less +54 -72
  8. package/cjs/badge/index.js +6 -8
  9. package/cjs/badge/style/css/index.css +5 -5
  10. package/cjs/badge/style/index.less +5 -5
  11. package/cjs/button/demo/style/mobile.less +0 -4
  12. package/cjs/button/hooks.d.ts +1 -2
  13. package/cjs/button/hooks.js +5 -3
  14. package/cjs/button/index.d.ts +1 -1
  15. package/cjs/button/index.js +28 -33
  16. package/cjs/button/style/css/index.css +75 -310
  17. package/cjs/button/style/index.less +32 -38
  18. package/cjs/dropdown/dropdown.d.ts +3 -0
  19. package/cjs/dropdown/dropdown.js +306 -0
  20. package/cjs/dropdown/index.d.ts +3 -4
  21. package/cjs/dropdown/index.js +3 -303
  22. package/cjs/dropdown/options.js +2 -1
  23. package/cjs/dropdown/type.d.ts +20 -9
  24. package/cjs/dropdown-menu/dropdown-menu.d.ts +4 -0
  25. package/cjs/dropdown-menu/dropdown-menu.js +273 -0
  26. package/cjs/dropdown-menu/helper.d.ts +1 -1
  27. package/cjs/dropdown-menu/index.d.ts +2 -3
  28. package/cjs/dropdown-menu/index.js +2 -245
  29. package/cjs/dropdown-menu/type.d.ts +21 -20
  30. package/cjs/image/index.js +4 -1
  31. package/cjs/image/style/css/index.css +2 -1
  32. package/cjs/image/style/index.less +2 -1
  33. package/cjs/image-picker/index.d.ts +6 -6
  34. package/cjs/image-picker/index.js +4 -3
  35. package/cjs/nav-bar/index.js +7 -2
  36. package/cjs/show-monitor/index.js +31 -3
  37. package/dist/index.js +644 -604
  38. package/dist/index.min.js +3 -3
  39. package/dist/style.css +174 -438
  40. package/dist/style.min.css +1 -1
  41. package/esm/avatar/group.js +1 -1
  42. package/esm/avatar/index.js +10 -13
  43. package/esm/avatar/style/css/index.css +96 -126
  44. package/esm/avatar/style/index.less +54 -72
  45. package/esm/badge/index.js +6 -8
  46. package/esm/badge/style/css/index.css +5 -5
  47. package/esm/badge/style/index.less +5 -5
  48. package/esm/button/demo/style/mobile.less +0 -4
  49. package/esm/button/hooks.d.ts +1 -2
  50. package/esm/button/hooks.js +5 -3
  51. package/esm/button/index.d.ts +1 -1
  52. package/esm/button/index.js +30 -35
  53. package/esm/button/style/css/index.css +75 -310
  54. package/esm/button/style/index.less +32 -38
  55. package/esm/dropdown/dropdown.d.ts +3 -0
  56. package/esm/dropdown/dropdown.js +288 -0
  57. package/esm/dropdown/index.d.ts +3 -4
  58. package/esm/dropdown/index.js +3 -293
  59. package/esm/dropdown/options.js +2 -1
  60. package/esm/dropdown/type.d.ts +20 -9
  61. package/esm/dropdown-menu/dropdown-menu.d.ts +4 -0
  62. package/esm/dropdown-menu/dropdown-menu.js +256 -0
  63. package/esm/dropdown-menu/helper.d.ts +1 -1
  64. package/esm/dropdown-menu/index.d.ts +2 -3
  65. package/esm/dropdown-menu/index.js +2 -237
  66. package/esm/dropdown-menu/type.d.ts +21 -20
  67. package/esm/image/index.js +4 -1
  68. package/esm/image/style/css/index.css +2 -1
  69. package/esm/image/style/index.less +2 -1
  70. package/esm/image-picker/index.d.ts +6 -6
  71. package/esm/image-picker/index.js +4 -3
  72. package/esm/nav-bar/index.js +6 -2
  73. package/esm/show-monitor/index.js +31 -3
  74. package/package.json +3 -3
  75. package/tokens/app/arcodesign/default/css-variables.less +2 -1
  76. package/tokens/app/arcodesign/default/index.d.ts +2 -1
  77. package/tokens/app/arcodesign/default/index.js +2 -1
  78. package/tokens/app/arcodesign/default/index.json +27 -15
  79. package/tokens/app/arcodesign/default/index.less +2 -1
  80. package/umd/avatar/group.js +1 -1
  81. package/umd/avatar/index.js +10 -13
  82. package/umd/avatar/style/css/index.css +96 -126
  83. package/umd/avatar/style/index.less +54 -72
  84. package/umd/badge/index.js +6 -8
  85. package/umd/badge/style/css/index.css +5 -5
  86. package/umd/badge/style/index.less +5 -5
  87. package/umd/button/demo/style/mobile.less +0 -4
  88. package/umd/button/hooks.d.ts +1 -2
  89. package/umd/button/hooks.js +5 -3
  90. package/umd/button/index.d.ts +1 -1
  91. package/umd/button/index.js +28 -33
  92. package/umd/button/style/css/index.css +75 -310
  93. package/umd/button/style/index.less +32 -38
  94. package/umd/dropdown/dropdown.d.ts +3 -0
  95. package/umd/dropdown/dropdown.js +309 -0
  96. package/umd/dropdown/index.d.ts +3 -4
  97. package/umd/dropdown/index.js +5 -298
  98. package/umd/dropdown/options.js +2 -1
  99. package/umd/dropdown/type.d.ts +20 -9
  100. package/umd/dropdown-menu/dropdown-menu.d.ts +4 -0
  101. package/umd/dropdown-menu/dropdown-menu.js +278 -0
  102. package/umd/dropdown-menu/helper.d.ts +1 -1
  103. package/umd/dropdown-menu/index.d.ts +2 -3
  104. package/umd/dropdown-menu/index.js +5 -241
  105. package/umd/dropdown-menu/type.d.ts +21 -20
  106. package/umd/image/index.js +4 -1
  107. package/umd/image/style/css/index.css +2 -1
  108. package/umd/image/style/index.less +2 -1
  109. package/umd/image-picker/index.d.ts +6 -6
  110. package/umd/image-picker/index.js +4 -3
  111. package/umd/nav-bar/index.js +9 -6
  112. package/umd/show-monitor/index.js +31 -3
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
- import { OptionsItem, DropdownCommonProps } from '../dropdown';
2
+ import { OptionsItem, DropdownCommonProps, OptionValueType } from '../dropdown';
3
3
  export type { OptionsItem, DropdownCommonProps };
4
4
  export interface CascadeOptions extends OptionsItem {
5
5
  /**
@@ -29,11 +29,6 @@ export interface DropdownMenuBasicProps {
29
29
  * @en The selected number of selector (controlled)
30
30
  */
31
31
  selectIndex?: number;
32
- /**
33
- * 自定义选择器
34
- * @en Custom selector
35
- */
36
- renderSelectLabel?: (op: OptionsItem, index: number) => ReactNode;
37
32
  /**
38
33
  * 选择器禁用状态
39
34
  * @en Selector disabled state
@@ -112,47 +107,53 @@ export interface SingleOptionProps {
112
107
  * 初始选择项
113
108
  * @en initial selection item
114
109
  * */
115
- defaultValues?: number[];
110
+ defaultValues?: OptionValueType[];
116
111
  /**
117
112
  * (受控) 每个选择器选中的项
118
113
  * @en (Controlled) The item selected by each selector
119
114
  * */
120
- values?: number[];
115
+ values?: OptionValueType[];
116
+ /**
117
+ * 自定义选择器
118
+ * @en Custom selector
119
+ */
120
+ renderSelectLabel?: (op: OptionsItem, index: number) => ReactNode;
121
121
  /**
122
122
  * 点击选项时触发的回调函数
123
123
  * @en Callback when clicking option
124
124
  * */
125
- onOptionClick?: (value: number, item: OptionsItem, selectIndex?: number) => void;
125
+ onOptionClick?: (value: OptionValueType, item: OptionsItem, selectIndex?: number) => void;
126
126
  /**
127
127
  * 选项改变时触发的回调函数
128
128
  * @en Callback when options change
129
129
  * */
130
- onOptionChange?: (value: number, item: OptionsItem, selectIndex?: number) => void;
130
+ onOptionChange?: (value: OptionValueType, item: OptionsItem, selectIndex?: number) => void;
131
131
  /**
132
132
  * 所有选择器选项总值改变时的回调函数
133
133
  * @en Callback when the total value of all selector options changes
134
134
  * */
135
- onValuesChange?: (values: number[]) => void;
135
+ onValuesChange?: (values: OptionValueType[]) => void;
136
136
  /**
137
137
  * 格式化传入的options
138
138
  * @en Format the input options
139
139
  * */
140
- getFormattedOptions?: (options: SingleOptionProps['options'], values?: number[]) => {
140
+ getFormattedOptions?: (options: SingleOptionProps['options'], values?: OptionValueType[]) => {
141
141
  formattedOptions: OptionsItem[][];
142
- formattedValue: number[];
142
+ formattedValue: OptionValueType[];
143
143
  };
144
144
  }
145
145
  export interface MultipleOptionProps {
146
146
  multiple: true;
147
147
  options: string[] | OptionsItem[][];
148
- defaultValues?: number[][];
149
- values?: number[][];
150
- onOptionClick?: (selected: boolean, val: number, item: OptionsItem, selectIndex?: number) => void;
151
- onOptionChange?: (vals: number[], item: OptionsItem, selectIndex?: number) => void;
152
- onValuesChange?: (values: number[][]) => void;
153
- getFormattedOptions?: (options: SingleOptionProps['options'], values?: number[][]) => {
148
+ defaultValues?: OptionValueType[][];
149
+ values?: OptionValueType[][];
150
+ renderSelectLabel?: (op: OptionsItem[], index: number) => ReactNode;
151
+ onOptionClick?: (selected: boolean, val: OptionValueType, item: OptionsItem, selectIndex?: number) => void;
152
+ onOptionChange?: (vals: OptionValueType[], item: OptionsItem, selectIndex?: number) => void;
153
+ onValuesChange?: (values: OptionValueType[][]) => void;
154
+ getFormattedOptions?: (options: SingleOptionProps['options'], values?: OptionValueType[][]) => {
154
155
  formattedOptions: OptionsItem[][];
155
- formattedValue: number[][];
156
+ formattedValue: OptionValueType[][];
156
157
  };
157
158
  }
158
159
  export declare type OptionProps = SingleOptionProps | MultipleOptionProps;
@@ -53,6 +53,7 @@ var BaseImage = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
53
53
  var wrapRef = (0, _react.useRef)(null);
54
54
  var retryCountRef = (0, _react.useRef)(0);
55
55
  var loadingImageRef = (0, _react.useRef)(null);
56
+ var hasLoadedRef = (0, _react.useRef)(false);
56
57
  var style = props.style,
57
58
  className = props.className,
58
59
  status = props.status,
@@ -176,6 +177,7 @@ var BaseImage = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
176
177
  image.onload = function (evt) {
177
178
  loadingImageRef.current = null;
178
179
  imageDomRef.current = image;
180
+ hasLoadedRef.current = true;
179
181
  changeStatus('loaded');
180
182
  var _image$width = image.width,
181
183
  imageWidth = _image$width === void 0 ? 0 : _image$width,
@@ -290,7 +292,8 @@ var BaseImage = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
290
292
  })) : null, /*#__PURE__*/_react.default.createElement("div", {
291
293
  className: (0, _mobileUtils.cls)('image-container', validStatus, {
292
294
  animate: Boolean(animateDuration),
293
- 'static-label': staticLabel
295
+ 'static-label': staticLabel,
296
+ 'has-loaded': hasLoadedRef.current
294
297
  }),
295
298
  style: (0, _helpers.getStyleWithVendor)({
296
299
  transitionDuration: animateDuration + "ms"
@@ -66,7 +66,8 @@
66
66
  }
67
67
  .arco-image .image-container.static-label,
68
68
  .arco-image .image-container.loaded,
69
- .arco-image .image-container.error {
69
+ .arco-image .image-container.error,
70
+ .arco-image .image-container.has-loaded {
70
71
  opacity: 1;
71
72
  }
72
73
  .arco-image .image-container.animate {
@@ -66,7 +66,8 @@
66
66
 
67
67
  &.static-label,
68
68
  &.loaded,
69
- &.error {
69
+ &.error,
70
+ &.has-loaded {
70
71
  opacity: 1;
71
72
  }
72
73
 
@@ -14,9 +14,10 @@ export interface ImagePickItem {
14
14
  /**
15
15
  * 图片状态
16
16
  * @en Image Status
17
- * @default 'loaded'
17
+ * @default 以图片自身加载状态而定
18
+ * @default_en According to inner status of the image
18
19
  */
19
- status: 'loaded' | 'loading' | 'error';
20
+ status?: 'loaded' | 'loading' | 'error';
20
21
  }
21
22
  export interface AdapterFile {
22
23
  url?: string;
@@ -117,7 +118,7 @@ export interface ImagePickerProps {
117
118
  * 透传给图片的属性
118
119
  * @en Attributes passed through to the image
119
120
  */
120
- imageProps?: ImageProps;
121
+ imageProps?: Partial<ImageProps>;
121
122
  /**
122
123
  * 自定义上传失败展示
123
124
  * @en Defined upload failed display
@@ -133,12 +134,11 @@ export interface ImagePickerProps {
133
134
  * @en upload function
134
135
  */
135
136
  upload?: (file: ImagePickItem) => Promise<ImagePickItem | null>;
136
- onSelect?: (...args: any[]) => void;
137
137
  /**
138
138
  * 已选图片列表发生变化
139
139
  * @en The list of selected images changes
140
140
  */
141
- onChange?: (fileList: ImagePickItem[]) => Promise<void>;
141
+ onChange?: (fileList: ImagePickItem[]) => void;
142
142
  /**
143
143
  * 图片超过限制大小
144
144
  * @en Image exceeds size limit
@@ -163,7 +163,7 @@ export interface ImagePickerProps {
163
163
  * 图片选择适配器
164
164
  * @en Select Adaptor
165
165
  */
166
- selectAdapter: () => Promise<SelectCallback>;
166
+ selectAdapter?: () => Promise<SelectCallback>;
167
167
  }
168
168
  export interface ImagePickerRef {
169
169
  /**
@@ -137,7 +137,7 @@ var ImagePicker = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
137
137
  var res = parseFiles.map(function (url, index) {
138
138
  return {
139
139
  url: url,
140
- status: upload ? 'loading' : 'loaded',
140
+ status: typeof upload === 'function' ? 'loading' : 'loaded',
141
141
  file: files[index]
142
142
  };
143
143
  });
@@ -148,11 +148,12 @@ var ImagePicker = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
148
148
  var propsImageLength = images.length;
149
149
  files.forEach(function (_file, index) {
150
150
  upload(cacheRes[propsImageLength + index]).then(function (data) {
151
- cacheRes[propsImageLength + index] = (0, _extends2.default)({}, cacheRes[propsImageLength + index], data);
151
+ cacheRes[propsImageLength + index] = (0, _extends2.default)({}, cacheRes[propsImageLength + index], data, {
152
+ status: undefined
153
+ });
152
154
  }).catch(function () {
153
155
  cacheRes[propsImageLength + index].status = 'error';
154
156
  }).finally(function () {
155
- cacheRes[propsImageLength + index].status = 'loaded';
156
157
  onChange([].concat(cacheRes));
157
158
  });
158
159
  });
@@ -15,6 +15,8 @@ var _contextProvider = require("../context-provider");
15
15
 
16
16
  var _backIcon = _interopRequireDefault(require("./back-icon"));
17
17
 
18
+ var _helpers = require("../_helpers");
19
+
18
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
21
 
20
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -66,8 +68,10 @@ var NavBar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
66
68
  customStyle = _useState2[0],
67
69
  setCustomStyle = _useState2[1];
68
70
 
71
+ var system = (0, _helpers.useSystem)();
72
+
69
73
  var onElementScroll = function onElementScroll(curOffset) {
70
- setScrollToggleHide(curOffset <= showOffset);
74
+ setScrollToggleHide(curOffset < showOffset);
71
75
 
72
76
  if (getComputedStyleByScroll) {
73
77
  var cstyle = getComputedStyleByScroll(curOffset);
@@ -93,6 +97,7 @@ var NavBar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
93
97
  (0, _react.useEffect)(function () {
94
98
  var needBind = showOffset || getComputedStyleByScroll;
95
99
  var container = (0, _mobileUtils.getValidScrollContainer)(getScrollContainer);
100
+ handleEleScroll();
96
101
 
97
102
  if (needBind && container) {
98
103
  container.addEventListener('scroll', handleEleScroll, false);
@@ -140,7 +145,7 @@ var NavBar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
140
145
  background: relBackground
141
146
  } : {})
142
147
  }, /*#__PURE__*/_react.default.createElement("div", {
143
- className: (0, _mobileUtils.cls)(className, prefixCls + "-nav-bar-wrapper", (_cls2 = {}, _cls2[prefixCls + "-nav-bar-wrapper-fixed"] = fixed, _cls2[prefixCls + "-nav-bar-wrapper-border"] = hasBottomLine, _cls2)),
148
+ className: (0, _mobileUtils.cls)(className, system, prefixCls + "-nav-bar-wrapper", (_cls2 = {}, _cls2[prefixCls + "-nav-bar-wrapper-fixed"] = fixed, _cls2[prefixCls + "-nav-bar-wrapper-border"] = hasBottomLine, _cls2)),
144
149
  style: (0, _extends2.default)({
145
150
  paddingTop: statusBarHeight ? statusBarHeight + "px" : ''
146
151
  }, customStyle)
@@ -123,6 +123,34 @@ var ShowMonitor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
123
123
  offset: offset,
124
124
  threshold: threshold
125
125
  }, true);
126
+ },
127
+
128
+ /**
129
+ * 重置元素初始可见态为false,并重新对元素可见度发起检测,优先级低于disabled(通常用在对ShowMonitor内部元素变化时发起的重新监听)
130
+ * @en Reset the initial visible state of the element to false, and re-detect the visibility of the element, the priority is lower than 'disabled'(Usually used to re-listen when elements inside ShowMonitor change)
131
+ */
132
+ flushVisibleStatus: function flushVisibleStatus() {
133
+ isVisible.current = false;
134
+
135
+ if (isSupportNativeApi && io.current && domRef.current) {
136
+ disabled ? io.current.unobserve(domRef.current) : io.current.observe(domRef.current);
137
+ } else if (listener.current) {
138
+ var _key = wrapperKey.current;
139
+
140
+ if (once && onOnceEmittedListeners != null && onOnceEmittedListeners[_key]) {
141
+ onOnceEmittedListeners[_key] = onOnceEmittedListeners[_key].filter(function (emitListener) {
142
+ return emitListener !== listener.current;
143
+ });
144
+ }
145
+
146
+ if (!disabled && !listeners[_key].find(function (_listener) {
147
+ return _listener === listener.current;
148
+ })) {
149
+ listeners[_key].push(listener.current);
150
+ }
151
+
152
+ !disabled && _checkVisible(listener.current);
153
+ }
126
154
  }
127
155
  };
128
156
  });
@@ -390,8 +418,8 @@ var ShowMonitor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
390
418
  }
391
419
  }
392
420
 
393
- var _key = wrapperKey.current;
394
- var curListeners = listeners[_key];
421
+ var _key2 = wrapperKey.current;
422
+ var curListeners = listeners[_key2];
395
423
 
396
424
  if (curListeners) {
397
425
  // 不在监听队列中,移除
@@ -401,7 +429,7 @@ var ShowMonitor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
401
429
  // @en When the listening queue is empty, unbind scroll and resize events
402
430
 
403
431
  if (curListeners.length === 0) {
404
- delete listeners[_key];
432
+ delete listeners[_key2];
405
433
 
406
434
  if (scrollPort.current) {
407
435
  scrollPort.current.removeEventListener('scroll', throttlingVisibleChange);