@arco-design/mobile-react 2.19.1 → 2.19.2-ee92494.5

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 (99) hide show
  1. package/README.en-US.md +2 -2
  2. package/README.md +2 -2
  3. package/cjs/_helpers/type.d.ts +1 -1
  4. package/cjs/button/demo/style/mobile.less +4 -0
  5. package/cjs/button/index.d.ts +6 -0
  6. package/cjs/button/index.js +12 -2
  7. package/cjs/count-down/demo/style/mobile.less +1 -1
  8. package/cjs/grid/index.js +13 -12
  9. package/cjs/image/index.d.ts +0 -1
  10. package/cjs/image/index.js +9 -7
  11. package/cjs/image-picker/add-icon.d.ts +2 -0
  12. package/cjs/image-picker/add-icon.js +22 -0
  13. package/cjs/image-picker/demo/style/css/mobile.css +40 -0
  14. package/cjs/image-picker/demo/style/mobile.less +42 -0
  15. package/cjs/image-picker/index.d.ts +184 -0
  16. package/cjs/image-picker/index.js +307 -0
  17. package/cjs/image-picker/style/css/index.css +147 -0
  18. package/cjs/image-picker/style/css/index.d.ts +2 -0
  19. package/cjs/image-picker/style/css/index.js +5 -0
  20. package/cjs/image-picker/style/index.d.ts +2 -0
  21. package/cjs/image-picker/style/index.js +5 -0
  22. package/cjs/image-picker/style/index.less +116 -0
  23. package/cjs/image-preview/index.d.ts +2 -2
  24. package/cjs/index.d.ts +1 -0
  25. package/cjs/index.js +5 -1
  26. package/cjs/steps/demo/style/css/mobile.css +1 -1
  27. package/cjs/steps/demo/style/mobile.less +1 -1
  28. package/cjs/steps/style/css/index.css +5 -15
  29. package/cjs/steps/style/index.less +6 -10
  30. package/cjs/style.d.ts +1 -0
  31. package/cjs/style.js +2 -0
  32. package/dist/index.js +534 -218
  33. package/dist/index.min.js +3 -4
  34. package/dist/style.css +120 -9
  35. package/dist/style.min.css +1 -1
  36. package/esm/_helpers/type.d.ts +1 -1
  37. package/esm/button/demo/style/mobile.less +4 -0
  38. package/esm/button/index.d.ts +6 -0
  39. package/esm/button/index.js +12 -2
  40. package/esm/count-down/demo/style/mobile.less +1 -1
  41. package/esm/grid/index.js +13 -12
  42. package/esm/image/index.d.ts +0 -1
  43. package/esm/image/index.js +10 -8
  44. package/esm/image-picker/add-icon.d.ts +2 -0
  45. package/esm/image-picker/add-icon.js +14 -0
  46. package/esm/image-picker/demo/style/css/mobile.css +40 -0
  47. package/esm/image-picker/demo/style/mobile.less +42 -0
  48. package/esm/image-picker/index.d.ts +184 -0
  49. package/esm/image-picker/index.js +288 -0
  50. package/esm/image-picker/style/css/index.css +147 -0
  51. package/esm/image-picker/style/css/index.d.ts +2 -0
  52. package/esm/image-picker/style/css/index.js +2 -0
  53. package/esm/image-picker/style/index.d.ts +2 -0
  54. package/esm/image-picker/style/index.js +2 -0
  55. package/esm/image-picker/style/index.less +116 -0
  56. package/esm/image-preview/index.d.ts +2 -2
  57. package/esm/index.d.ts +1 -0
  58. package/esm/index.js +1 -0
  59. package/esm/steps/demo/style/css/mobile.css +1 -1
  60. package/esm/steps/demo/style/mobile.less +1 -1
  61. package/esm/steps/style/css/index.css +5 -15
  62. package/esm/steps/style/index.less +6 -10
  63. package/esm/style.d.ts +1 -0
  64. package/esm/style.js +1 -0
  65. package/package.json +2 -2
  66. package/tokens/app/arcodesign/default/css-variables.less +17 -2
  67. package/tokens/app/arcodesign/default/index.d.ts +17 -2
  68. package/tokens/app/arcodesign/default/index.js +18 -3
  69. package/tokens/app/arcodesign/default/index.json +204 -24
  70. package/tokens/app/arcodesign/default/index.less +17 -2
  71. package/umd/_helpers/type.d.ts +1 -1
  72. package/umd/button/demo/style/mobile.less +4 -0
  73. package/umd/button/index.d.ts +6 -0
  74. package/umd/button/index.js +12 -2
  75. package/umd/count-down/demo/style/mobile.less +1 -1
  76. package/umd/grid/index.js +13 -12
  77. package/umd/image/index.d.ts +0 -1
  78. package/umd/image/index.js +9 -7
  79. package/umd/image-picker/add-icon.d.ts +2 -0
  80. package/umd/image-picker/add-icon.js +35 -0
  81. package/umd/image-picker/demo/style/css/mobile.css +40 -0
  82. package/umd/image-picker/demo/style/mobile.less +42 -0
  83. package/umd/image-picker/index.d.ts +184 -0
  84. package/umd/image-picker/index.js +310 -0
  85. package/umd/image-picker/style/css/index.css +147 -0
  86. package/umd/image-picker/style/css/index.d.ts +2 -0
  87. package/umd/image-picker/style/css/index.js +15 -0
  88. package/umd/image-picker/style/index.d.ts +2 -0
  89. package/umd/image-picker/style/index.js +15 -0
  90. package/umd/image-picker/style/index.less +116 -0
  91. package/umd/image-preview/index.d.ts +2 -2
  92. package/umd/index.d.ts +1 -0
  93. package/umd/index.js +7 -5
  94. package/umd/steps/demo/style/css/mobile.css +1 -1
  95. package/umd/steps/demo/style/mobile.less +1 -1
  96. package/umd/steps/style/css/index.css +5 -15
  97. package/umd/steps/style/index.less +6 -10
  98. package/umd/style.d.ts +1 -0
  99. package/umd/style.js +4 -4
@@ -59,8 +59,7 @@
59
59
  var loadingImageRef = (0, _react.useRef)(null);
60
60
  var style = props.style,
61
61
  className = props.className,
62
- _props$status = props.status,
63
- status = _props$status === void 0 ? 'init' : _props$status,
62
+ status = props.status,
64
63
  src = props.src,
65
64
  width = props.width,
66
65
  height = props.height,
@@ -100,6 +99,7 @@
100
99
  var isPreview = Boolean(fit.indexOf('preview') >= 0);
101
100
  var actualBoxWidth = boxWidth || windowWidth;
102
101
  var actualBoxHeight = boxHeight || windowHeight;
102
+ var validStatus = status === undefined ? imageStatus : status;
103
103
  var attrs = (0, _react.useMemo)(function () {
104
104
  var imageStyle = {};
105
105
 
@@ -275,7 +275,9 @@
275
275
  }
276
276
 
277
277
  return /*#__PURE__*/_react.default.createElement(_contextProvider.ContextLayout, null, function (_ref) {
278
- var prefixCls = _ref.prefixCls;
278
+ var prefixCls = _ref.prefixCls,
279
+ _ref$locale = _ref.locale,
280
+ locale = _ref$locale === void 0 ? _mobileUtils.defaultLocale : _ref$locale;
279
281
  return /*#__PURE__*/_react.default.createElement("div", {
280
282
  className: (0, _mobileUtils.cls)(prefixCls + "-image all-border-box", {
281
283
  preview: isPreview
@@ -290,7 +292,7 @@
290
292
  }, bottomOverlap || /*#__PURE__*/_react.default.createElement("div", {
291
293
  className: "image-placeholder"
292
294
  })) : null, /*#__PURE__*/_react.default.createElement("div", {
293
- className: (0, _mobileUtils.cls)('image-container', imageStatus, {
295
+ className: (0, _mobileUtils.cls)('image-container', validStatus, {
294
296
  animate: Boolean(animateDuration),
295
297
  'static-label': staticLabel
296
298
  }),
@@ -305,7 +307,7 @@
305
307
  return _onLoad && _onLoad(e.nativeEvent, imageDomRef.current);
306
308
  },
307
309
  onError: handleStaticImageError
308
- })) : null), showLoading && (status === 'loading' || imageStatus === 'loading') ? /*#__PURE__*/_react.default.createElement("div", {
310
+ })) : null), showLoading && validStatus === 'loading' ? /*#__PURE__*/_react.default.createElement("div", {
309
311
  className: "image-content image-loading-container",
310
312
  style: {
311
313
  borderRadius: radius
@@ -317,7 +319,7 @@
317
319
  className: "loading-icon",
318
320
  radius: 8.5,
319
321
  stroke: 3
320
- }))) : null, showError && (status === 'error' || imageStatus === 'error') ? /*#__PURE__*/_react.default.createElement("div", {
322
+ }))) : null, showError && validStatus === 'error' ? /*#__PURE__*/_react.default.createElement("div", {
321
323
  className: "image-content image-error-container",
322
324
  onClick: function onClick(e) {
323
325
  e.stopPropagation();
@@ -328,7 +330,7 @@
328
330
  }
329
331
  }, errorArea || /*#__PURE__*/_react.default.createElement("div", {
330
332
  className: "image-retry-load"
331
- }, "\u91CD\u8BD5")) : null, topOverlap ? /*#__PURE__*/_react.default.createElement("div", {
333
+ }, locale.Image.loadError)) : null, topOverlap ? /*#__PURE__*/_react.default.createElement("div", {
332
334
  className: "image-content image-top-overlap",
333
335
  style: {
334
336
  borderRadius: radius
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export default function AddIcon(): JSX.Element;
@@ -0,0 +1,35 @@
1
+ (function (global, factory) {
2
+ if (typeof define === "function" && define.amd) {
3
+ define(["exports", "react"], factory);
4
+ } else if (typeof exports !== "undefined") {
5
+ factory(exports, require("react"));
6
+ } else {
7
+ var mod = {
8
+ exports: {}
9
+ };
10
+ factory(mod.exports, global.react);
11
+ global.addIcon = mod.exports;
12
+ }
13
+ })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _react) {
14
+ "use strict";
15
+
16
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
17
+
18
+ _exports.__esModule = true;
19
+ _exports.default = AddIcon;
20
+ _react = _interopRequireDefault(_react);
21
+
22
+ function AddIcon() {
23
+ return /*#__PURE__*/_react.default.createElement("svg", {
24
+ width: "30",
25
+ height: "30",
26
+ viewBox: "0 0 30 30",
27
+ fill: "none"
28
+ }, /*#__PURE__*/_react.default.createElement("path", {
29
+ fillRule: "evenodd",
30
+ clipRule: "evenodd",
31
+ d: "M14.5 0C14.2239 0 14 0.223857 14 0.5V14H0.5C0.223858 14 0 14.2239 0 14.5V15.5C0 15.7761 0.223857 16 0.5 16H14V29.5C14 29.7761 14.2239 30 14.5 30H15.5C15.7761 30 16 29.7761 16 29.5V16H29.5C29.7761 16 30 15.7761 30 15.5V14.5C30 14.2239 29.7761 14 29.5 14H16V0.5C16 0.223858 15.7761 0 15.5 0H14.5Z",
32
+ fill: "#C9CDD4"
33
+ }));
34
+ }
35
+ });
@@ -0,0 +1,40 @@
1
+ #demo-image-picker .demo-space {
2
+ font-size: 14px;
3
+ line-height: 1;
4
+ margin: 8px 0;
5
+ }
6
+ #demo-image-picker #demo-order-5 .custom-delete {
7
+ top: 4px;
8
+ right: 4px;
9
+ font-size: 18px;
10
+ position: absolute;
11
+ border-radius: 50%;
12
+ width: 18px;
13
+ height: 18px;
14
+ line-height: 16px;
15
+ text-align: center;
16
+ }
17
+ #demo-image-picker #demo-order-5 .custom-delete-bg {
18
+ background-color: #0000004d;
19
+ }
20
+ #demo-image-picker #demo-order-6 .loading,
21
+ #demo-image-picker #demo-order-6 .loading1,
22
+ #demo-image-picker #demo-order-6 .load-error,
23
+ #demo-image-picker #demo-order-6 .load-error1 {
24
+ background: rgba(0, 0, 0, 0.5);
25
+ text-align: center;
26
+ line-height: 1.5;
27
+ font-size: 14px;
28
+ color: #fff;
29
+ width: 100%;
30
+ height: 100%;
31
+ display: -webkit-box;
32
+ display: -webkit-flex;
33
+ display: flex;
34
+ -webkit-box-align: center;
35
+ -webkit-align-items: center;
36
+ align-items: center;
37
+ -webkit-box-pack: center;
38
+ -webkit-justify-content: center;
39
+ justify-content: center;
40
+ }
@@ -0,0 +1,42 @@
1
+ @import '../../../../style/mixin.less';
2
+
3
+ #demo-image-picker {
4
+ .demo-space{
5
+ font-size: 14px;
6
+ line-height: 1;
7
+ margin: 8px 0;
8
+ }
9
+ #demo-order-5 {
10
+ .custom-delete {
11
+ top: 4px;
12
+ right: 4px;
13
+ font-size: 18px;
14
+ position: absolute;
15
+ border-radius: 50%;
16
+ width: 18px;
17
+ height: 18px;
18
+ line-height: 16px;
19
+ text-align: center;
20
+ }
21
+ .custom-delete-bg {
22
+ background-color: #0000004d;
23
+ }
24
+ }
25
+ #demo-order-6 {
26
+ .loading,
27
+ .loading1,
28
+ .load-error,
29
+ .load-error1 {
30
+ background: rgba(0, 0, 0, 0.5);
31
+ text-align: center;
32
+ line-height: 1.5;
33
+ font-size: 14px;
34
+ color: #fff;
35
+ width: 100%;
36
+ height: 100%;
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,184 @@
1
+ import React, { InputHTMLAttributes } from 'react';
2
+ import { ImageProps } from '../image';
3
+ export interface ImagePickItem {
4
+ /**
5
+ * 图片地址
6
+ * @en Image Url
7
+ */
8
+ url: string;
9
+ /**
10
+ * 图片文件
11
+ * @en Image File
12
+ */
13
+ file?: File;
14
+ /**
15
+ * 图片状态
16
+ * @en Image Status
17
+ * @default 'loaded'
18
+ */
19
+ status: 'loaded' | 'loading' | 'error';
20
+ }
21
+ export interface AdapterFile {
22
+ url?: string;
23
+ size: number;
24
+ name: string;
25
+ }
26
+ export interface SelectCallback {
27
+ files: AdapterFile[];
28
+ }
29
+ export interface ImagePickerProps {
30
+ /**
31
+ * 自定义类名
32
+ * @en Custom className
33
+ */
34
+ className?: string;
35
+ /**
36
+ * 自定义样式
37
+ * @en Custom stylesheet
38
+ */
39
+ style?: React.CSSProperties;
40
+ /**
41
+ * 已选择图片列表
42
+ * @en selected images list
43
+ */
44
+ images: ImagePickItem[];
45
+ /**
46
+ * 可以选择的文件类型
47
+ * @en Available File Types
48
+ * @default 'image/*'
49
+ */
50
+ accept?: string;
51
+ /**
52
+ * 是否支持多选
53
+ * @en Whether To Support Multiple Selection
54
+ */
55
+ multiple?: boolean;
56
+ /**
57
+ * 图片选取模式 Image selection mode [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
58
+ * @en Whether To Support Multiple Selection [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
59
+ */
60
+ capture?: InputHTMLAttributes<unknown>['capture'];
61
+ /**
62
+ * 一行展示图片张数
63
+ * @en The Number Of Pictures Displayed In A Row
64
+ * @default 3
65
+ */
66
+ columns?: number;
67
+ /**
68
+ * 格子间的间距
69
+ * @en spacing between grids
70
+ * @default 8
71
+ */
72
+ gutter?: number;
73
+ /**
74
+ * 最多选择图片张数,超出数量自动隐藏上传按钮,0表示不做限制
75
+ * @en max Pictures Can Choose
76
+ */
77
+ limit?: number;
78
+ /**
79
+ * 文件大小限制,单位为K
80
+ * @en File size limit, in K
81
+ */
82
+ maxSize?: number;
83
+ /**
84
+ * 是否隐藏删除Icon
85
+ * @en Whether to hide delete Icon
86
+ * @default false
87
+ */
88
+ hideDelete?: boolean;
89
+ /**
90
+ * 是否隐藏选择Icon
91
+ * @en Whether to hide Select Icon
92
+ * @default false
93
+ */
94
+ hideSelect?: boolean;
95
+ /**
96
+ * 是否总是展示选择Icon,默认情况下当图片数量超出limit值时会自动隐藏选择Icon
97
+ * @en Whether to always show Select Icon
98
+ * @default false
99
+ */
100
+ alwaysShowSelect?: boolean;
101
+ /**
102
+ * 禁用选择和删除图片
103
+ * @en Disable Select & Delete Image
104
+ */
105
+ disabled?: boolean;
106
+ /**
107
+ * 自定义删除图标
108
+ * @en Defined Delete Icon
109
+ */
110
+ deleteIcon?: React.ReactNode;
111
+ /**
112
+ * 自定义选择图标
113
+ * @en Defined Select Icon
114
+ */
115
+ selectIcon?: React.ReactNode;
116
+ /**
117
+ * 透传给图片的属性
118
+ * @en Attributes passed through to the image
119
+ */
120
+ imageProps?: ImageProps;
121
+ /**
122
+ * 自定义上传失败展示
123
+ * @en Defined upload failed display
124
+ */
125
+ renderError?: (index?: number) => React.ReactNode | React.ReactNode;
126
+ /**
127
+ * 自定义上传中展示
128
+ * @en Defined uploading display
129
+ */
130
+ renderLoading?: (index?: number) => React.ReactNode | React.ReactNode;
131
+ /**
132
+ * 上传方法
133
+ * @en upload function
134
+ */
135
+ upload?: (file: ImagePickItem) => Promise<ImagePickItem | null>;
136
+ onSelect?: (...args: any[]) => void;
137
+ /**
138
+ * 已选图片列表发生变化
139
+ * @en The list of selected images changes
140
+ */
141
+ onChange?: (fileList: ImagePickItem[]) => Promise<void>;
142
+ /**
143
+ * 图片超过限制大小
144
+ * @en Image exceeds size limit
145
+ */
146
+ onMaxSizeExceed?: (file: File) => void;
147
+ /**
148
+ * 选择张数超过限制
149
+ * @en The number of pictures exceeds the limit
150
+ */
151
+ onLimitExceed?: (files: File[]) => void;
152
+ /**
153
+ * 图片点击
154
+ * @en click event
155
+ */
156
+ onClick?: (e: React.MouseEvent<HTMLElement, MouseEvent>, image: ImagePickItem, index: number) => void;
157
+ /**
158
+ * 图片长按事件
159
+ * @en long press event
160
+ */
161
+ onLongPress?: (e: React.TouchEvent<HTMLElement>, image: ImagePickItem, index: number) => void;
162
+ /**
163
+ * 图片选择适配器
164
+ * @en Select Adaptor
165
+ */
166
+ selectAdapter: () => Promise<SelectCallback>;
167
+ }
168
+ export interface ImagePickerRef {
169
+ /**
170
+ * 最外层 DOM 元素
171
+ * @en The outer DOM element of the component
172
+ */
173
+ dom: HTMLDivElement | null;
174
+ }
175
+ /**
176
+ * 图片选择器组件
177
+ * @en ImagePicker Component
178
+ * @type 数据输入
179
+ * @type_en Data Entry
180
+ * @name 图片选择器
181
+ * @name_en ImagePicker
182
+ */
183
+ declare const ImagePicker: React.ForwardRefExoticComponent<ImagePickerProps & React.RefAttributes<ImagePickerRef>>;
184
+ export default ImagePicker;
@@ -0,0 +1,310 @@
1
+ (function (global, factory) {
2
+ if (typeof define === "function" && define.amd) {
3
+ define(["exports", "@babel/runtime/helpers/extends", "react", "@arco-design/mobile-utils", "../context-provider", "../icon", "../image", "../grid", "./add-icon"], factory);
4
+ } else if (typeof exports !== "undefined") {
5
+ factory(exports, require("@babel/runtime/helpers/extends"), require("react"), require("@arco-design/mobile-utils"), require("../context-provider"), require("../icon"), require("../image"), require("../grid"), require("./add-icon"));
6
+ } else {
7
+ var mod = {
8
+ exports: {}
9
+ };
10
+ factory(mod.exports, global._extends, global.react, global.mobileUtils, global.contextProvider, global.icon, global.image, global.grid, global.addIcon);
11
+ global.index = mod.exports;
12
+ }
13
+ })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _extends2, _react, _mobileUtils, _contextProvider, _icon, _image, _grid, _addIcon) {
14
+ "use strict";
15
+
16
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
17
+
18
+ _exports.__esModule = true;
19
+ _exports.default = void 0;
20
+ _extends2 = _interopRequireDefault(_extends2);
21
+ _react = _interopRequireWildcard(_react);
22
+ _image = _interopRequireDefault(_image);
23
+ _grid = _interopRequireDefault(_grid);
24
+ _addIcon = _interopRequireDefault(_addIcon);
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ /**
31
+ * 图片选择器组件
32
+ * @en ImagePicker Component
33
+ * @type 数据输入
34
+ * @type_en Data Entry
35
+ * @name 图片选择器
36
+ * @name_en ImagePicker
37
+ */
38
+ var ImagePicker = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
39
+ var _props$className = props.className,
40
+ className = _props$className === void 0 ? '' : _props$className,
41
+ style = props.style,
42
+ _props$accept = props.accept,
43
+ accept = _props$accept === void 0 ? 'image/*' : _props$accept,
44
+ _props$multiple = props.multiple,
45
+ multiple = _props$multiple === void 0 ? false : _props$multiple,
46
+ capture = props.capture,
47
+ _props$columns = props.columns,
48
+ columns = _props$columns === void 0 ? 3 : _props$columns,
49
+ _props$gutter = props.gutter,
50
+ gutter = _props$gutter === void 0 ? 8 : _props$gutter,
51
+ _props$limit = props.limit,
52
+ limit = _props$limit === void 0 ? 0 : _props$limit,
53
+ _props$images = props.images,
54
+ images = _props$images === void 0 ? [] : _props$images,
55
+ maxSize = props.maxSize,
56
+ disabled = props.disabled,
57
+ deleteIcon = props.deleteIcon,
58
+ selectIcon = props.selectIcon,
59
+ _props$hideDelete = props.hideDelete,
60
+ hideDelete = _props$hideDelete === void 0 ? false : _props$hideDelete,
61
+ _props$hideSelect = props.hideSelect,
62
+ hideSelect = _props$hideSelect === void 0 ? false : _props$hideSelect,
63
+ _props$alwaysShowSele = props.alwaysShowSelect,
64
+ alwaysShowSelect = _props$alwaysShowSele === void 0 ? false : _props$alwaysShowSele,
65
+ imageProps = props.imageProps,
66
+ renderLoading = props.renderLoading,
67
+ renderError = props.renderError,
68
+ onLongPress = props.onLongPress,
69
+ onClick = props.onClick,
70
+ _props$onChange = props.onChange,
71
+ onChange = _props$onChange === void 0 ? function () {
72
+ return null;
73
+ } : _props$onChange,
74
+ onMaxSizeExceed = props.onMaxSizeExceed,
75
+ onLimitExceed = props.onLimitExceed,
76
+ upload = props.upload,
77
+ selectAdapter = props.selectAdapter;
78
+ var domRef = (0, _react.useRef)(null);
79
+ var fileRef = (0, _react.useRef)(null);
80
+ (0, _react.useImperativeHandle)(ref, function () {
81
+ return {
82
+ dom: domRef.current
83
+ };
84
+ });
85
+
86
+ var parseFile = function parseFile(file) {
87
+ return new Promise(function (resolve, reject) {
88
+ if (file.url) {
89
+ resolve(file.url);
90
+ } else {
91
+ var reader = new FileReader();
92
+
93
+ reader.onload = function (e) {
94
+ var _e$target;
95
+
96
+ var dataURL = (_e$target = e.target) == null ? void 0 : _e$target.result;
97
+
98
+ if (!dataURL) {
99
+ reject(new Error('file parse error'));
100
+ }
101
+
102
+ resolve(dataURL);
103
+ };
104
+
105
+ reader.onerror = function () {
106
+ reject(new Error('file parse error'));
107
+ };
108
+
109
+ reader.readAsDataURL(file);
110
+ }
111
+ });
112
+ };
113
+
114
+ var handleChange = function handleChange(event, fromAdapter) {
115
+ var files = [].concat(event.target.files || []).filter(function (file) {
116
+ // 过滤maxSize
117
+ if (maxSize && file.size > maxSize * 1024) {
118
+ onMaxSizeExceed && onMaxSizeExceed(file);
119
+ return false;
120
+ }
121
+
122
+ return true;
123
+ }) || [];
124
+
125
+ if (!fromAdapter) {
126
+ event.target.value = '';
127
+ } // 截断limit
128
+
129
+
130
+ if (limit !== 0 && files.length + images.length > limit) {
131
+ onLimitExceed && onLimitExceed(files);
132
+ files.length = limit - images.length;
133
+ } // 解析文件生成预览
134
+
135
+
136
+ Promise.all(files.map(function (file) {
137
+ return parseFile(file);
138
+ })).then(function (parseFiles) {
139
+ var res = parseFiles.map(function (url, index) {
140
+ return {
141
+ url: url,
142
+ status: upload ? 'loading' : 'loaded',
143
+ file: files[index]
144
+ };
145
+ });
146
+ var cacheRes = [].concat(images, res);
147
+ onChange(cacheRes); // 执行upload
148
+
149
+ if (typeof upload === 'function') {
150
+ var propsImageLength = images.length;
151
+ files.forEach(function (_file, index) {
152
+ upload(cacheRes[propsImageLength + index]).then(function (data) {
153
+ cacheRes[propsImageLength + index] = (0, _extends2.default)({}, cacheRes[propsImageLength + index], data);
154
+ }).catch(function () {
155
+ cacheRes[propsImageLength + index].status = 'error';
156
+ }).finally(function () {
157
+ cacheRes[propsImageLength + index].status = 'loaded';
158
+ onChange([].concat(cacheRes));
159
+ });
160
+ });
161
+ }
162
+ });
163
+ };
164
+
165
+ var handleDelete = function handleDelete(index) {
166
+ onChange(images.filter(function (_i, j) {
167
+ return j !== index;
168
+ }));
169
+ }; // click && longPress
170
+
171
+
172
+ var timeOutEvent;
173
+
174
+ var handleTouchStart = function handleTouchStart(e, image, index) {
175
+ e.preventDefault();
176
+ timeOutEvent = setTimeout(function () {
177
+ timeOutEvent = 0;
178
+ onLongPress == null ? void 0 : onLongPress(e, image, index);
179
+ }, 750);
180
+ };
181
+
182
+ var handleClick = function handleClick(e, image, index) {
183
+ clearTimeout(timeOutEvent);
184
+
185
+ if (timeOutEvent !== 0) {
186
+ onClick == null ? void 0 : onClick(e, image, index);
187
+ }
188
+ };
189
+
190
+ var handleSelect = function handleSelect() {
191
+ var _fileRef$current;
192
+
193
+ selectAdapter ? selectAdapter().then(function (_ref) {
194
+ var files = _ref.files;
195
+ return handleChange({
196
+ target: {
197
+ files: files
198
+ }
199
+ }, true);
200
+ }) : (_fileRef$current = fileRef.current) == null ? void 0 : _fileRef$current.click();
201
+ };
202
+
203
+ var getGridData = function getGridData(prefixCls, locale) {
204
+ var errorNode = function errorNode(index) {
205
+ if (renderError) {
206
+ return typeof renderError === 'function' ? renderError(index) : renderError;
207
+ }
208
+
209
+ return /*#__PURE__*/_react.default.createElement("div", {
210
+ className: prefixCls + "-image-picker-error"
211
+ }, /*#__PURE__*/_react.default.createElement("p", null, locale.ImagePicker.loadError));
212
+ };
213
+
214
+ var loadingNode = function loadingNode(index) {
215
+ if (renderLoading) {
216
+ return typeof renderLoading === 'function' ? renderLoading(index) : renderLoading;
217
+ }
218
+
219
+ return null;
220
+ };
221
+
222
+ var data = (limit && limit < images.length ? images.slice(0, limit) : images).map(function (image, index) {
223
+ var url = image.url,
224
+ status = image.status;
225
+ return {
226
+ img: /*#__PURE__*/_react.default.createElement("div", {
227
+ key: index + "-" + url,
228
+ className: prefixCls + "-image-picker-image"
229
+ }, /*#__PURE__*/_react.default.createElement("div", {
230
+ onTouchStart: function onTouchStart(e) {
231
+ return handleTouchStart(e, image, index);
232
+ },
233
+ onClick: function onClick(e) {
234
+ return handleClick(e, image, index);
235
+ },
236
+ className: prefixCls + "-image-picker-image-container"
237
+ }, /*#__PURE__*/_react.default.createElement(_image.default, (0, _extends2.default)({
238
+ showLoading: true,
239
+ showError: true
240
+ }, imageProps || {}, {
241
+ src: url,
242
+ errorArea: errorNode(index),
243
+ loadingArea: loadingNode(index),
244
+ status: status || (imageProps == null ? void 0 : imageProps.status)
245
+ })), /*#__PURE__*/_react.default.createElement("div", {
246
+ className: prefixCls + "-image-picker-image-mask"
247
+ })), !hideDelete && /*#__PURE__*/_react.default.createElement("div", {
248
+ className: prefixCls + "-image-picker-close",
249
+ onClick: function onClick() {
250
+ return handleDelete(index);
251
+ }
252
+ }, deleteIcon || /*#__PURE__*/_react.default.createElement("div", {
253
+ className: prefixCls + "-image-picker-close-icon"
254
+ }, /*#__PURE__*/_react.default.createElement(_icon.IconClose, null)))),
255
+ title: ''
256
+ };
257
+ });
258
+ var showSelect = !hideSelect && images.length < (limit || Infinity);
259
+ var disableSelect = disabled || alwaysShowSelect && !showSelect;
260
+
261
+ if (showSelect || alwaysShowSelect) {
262
+ var _cls;
263
+
264
+ data.push({
265
+ img: /*#__PURE__*/_react.default.createElement("div", {
266
+ className: (0, _mobileUtils.cls)(prefixCls + "-image-picker-add", (_cls = {}, _cls[prefixCls + "-image-picker-add-disabled"] = disableSelect, _cls)),
267
+ onClick: handleSelect
268
+ }, /*#__PURE__*/_react.default.createElement("div", {
269
+ className: prefixCls + "-image-picker-add-container"
270
+ }, selectIcon || /*#__PURE__*/_react.default.createElement("div", {
271
+ className: prefixCls + "-image-picker-add-icon"
272
+ }, /*#__PURE__*/_react.default.createElement(_addIcon.default, null)), !selectAdapter ? /*#__PURE__*/_react.default.createElement("input", {
273
+ capture: capture,
274
+ accept: accept,
275
+ multiple: multiple,
276
+ type: "file",
277
+ onChange: function onChange(e) {
278
+ return handleChange(e);
279
+ },
280
+ ref: fileRef
281
+ }) : null)),
282
+ title: ''
283
+ });
284
+ }
285
+
286
+ return data;
287
+ };
288
+
289
+ return /*#__PURE__*/_react.default.createElement(_contextProvider.ContextLayout, null, function (_ref2) {
290
+ var _cls2;
291
+
292
+ var prefixCls = _ref2.prefixCls,
293
+ _ref2$locale = _ref2.locale,
294
+ locale = _ref2$locale === void 0 ? _mobileUtils.defaultLocale : _ref2$locale;
295
+ return /*#__PURE__*/_react.default.createElement("div", {
296
+ className: (0, _mobileUtils.cls)(prefixCls + "-image-picker", className, (_cls2 = {}, _cls2[prefixCls + "-image-picker-disabled"] = disabled, _cls2)),
297
+ style: style,
298
+ ref: domRef
299
+ }, /*#__PURE__*/_react.default.createElement("div", {
300
+ className: prefixCls + "-image-picker-container"
301
+ }, /*#__PURE__*/_react.default.createElement(_grid.default, {
302
+ data: getGridData(prefixCls, locale),
303
+ gutter: gutter,
304
+ columns: columns
305
+ })));
306
+ });
307
+ });
308
+ var _default = ImagePicker;
309
+ _exports.default = _default;
310
+ });