@arco-design/mobile-react 2.30.10 → 2.31.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 (331) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.en-US.md +2 -2
  3. package/README.md +2 -2
  4. package/cjs/action-sheet/style/css/index.css +50 -34
  5. package/cjs/avatar/style/css/index.css +50 -34
  6. package/cjs/badge/style/css/index.css +50 -34
  7. package/cjs/button/style/css/index.css +50 -34
  8. package/cjs/carousel/style/css/index.css +50 -34
  9. package/cjs/cell/style/css/index.css +50 -34
  10. package/cjs/cell/style/index.less +2 -2
  11. package/cjs/checkbox/style/css/index.css +50 -34
  12. package/cjs/circle-progress/style/css/index.css +50 -34
  13. package/cjs/collapse/style/css/index.css +50 -34
  14. package/cjs/count-down/style/css/index.css +50 -34
  15. package/cjs/date-picker/style/css/index.css +50 -34
  16. package/cjs/dialog/style/css/index.css +50 -34
  17. package/cjs/divider/style/css/index.css +50 -34
  18. package/cjs/dropdown/style/css/index.css +50 -34
  19. package/cjs/dropdown-menu/style/css/index.css +50 -34
  20. package/cjs/ellipsis/style/css/index.css +50 -34
  21. package/cjs/form/form-item.d.ts +3 -0
  22. package/cjs/form/form-item.js +38 -10
  23. package/cjs/form/style/css/index.css +63 -34
  24. package/cjs/form/style/index.less +18 -0
  25. package/cjs/grid/style/css/index.css +50 -34
  26. package/cjs/icon/IconCheck/index.js +1 -2
  27. package/cjs/icon/IconDownload/index.d.ts +7 -0
  28. package/cjs/icon/IconDownload/index.js +41 -0
  29. package/cjs/icon/IconFile/index.d.ts +7 -0
  30. package/cjs/icon/IconFile/index.js +41 -0
  31. package/cjs/icon/IconKeyboard/index.js +1 -0
  32. package/cjs/icon/IconQuestionCircle/index.js +1 -2
  33. package/cjs/icon/IconUpload/index.js +6 -4
  34. package/cjs/icon/IconUserFill/index.js +1 -2
  35. package/cjs/icon/index.d.ts +3 -1
  36. package/cjs/icon/index.js +17 -7
  37. package/cjs/icon/type.d.ts +3 -1
  38. package/cjs/image/style/css/index.css +50 -34
  39. package/cjs/image-picker/index.js +15 -161
  40. package/cjs/image-picker/style/css/index.css +50 -34
  41. package/cjs/image-picker/type.d.ts +4 -73
  42. package/cjs/image-preview/style/css/index.css +50 -34
  43. package/cjs/index-bar/style/css/index.css +50 -34
  44. package/cjs/index.d.ts +1 -0
  45. package/cjs/index.js +6 -2
  46. package/cjs/input/hooks.js +2 -2
  47. package/cjs/input/props.d.ts +2 -2
  48. package/cjs/input/style/css/index.css +50 -34
  49. package/cjs/keyboard/style/css/index.css +50 -34
  50. package/cjs/load-more/style/css/index.css +50 -34
  51. package/cjs/loading/style/css/index.css +50 -34
  52. package/cjs/masking/style/css/index.css +50 -34
  53. package/cjs/nav-bar/style/css/index.css +50 -34
  54. package/cjs/notice-bar/style/css/index.css +50 -34
  55. package/cjs/notice-bar/style/index.less +2 -2
  56. package/cjs/notify/style/css/index.css +50 -34
  57. package/cjs/pagination/style/css/index.css +50 -34
  58. package/cjs/pagination/style/index.less +4 -4
  59. package/cjs/picker/index.js +59 -19
  60. package/cjs/picker/style/css/index.css +50 -34
  61. package/cjs/picker/type.d.ts +6 -1
  62. package/cjs/picker-view/style/css/index.css +50 -34
  63. package/cjs/popover/style/css/index.css +50 -34
  64. package/cjs/popover/style/css/menu.css +50 -34
  65. package/cjs/popup/style/css/index.css +50 -34
  66. package/cjs/popup-swiper/style/css/index.css +50 -34
  67. package/cjs/progress/style/css/index.css +50 -34
  68. package/cjs/pull-refresh/style/css/index.css +50 -34
  69. package/cjs/radio/style/css/index.css +50 -34
  70. package/cjs/rate/style/css/index.css +50 -34
  71. package/cjs/rate/style/index.less +2 -2
  72. package/cjs/search-bar/style/css/index.css +50 -34
  73. package/cjs/skeleton/style/css/index.css +50 -34
  74. package/cjs/skeleton/style/index.less +2 -2
  75. package/cjs/slider/style/css/index.css +50 -34
  76. package/cjs/slider/style/index.less +6 -6
  77. package/cjs/stepper/style/css/index.css +50 -34
  78. package/cjs/steps/style/css/index.css +50 -34
  79. package/cjs/sticky/style/css/index.css +50 -34
  80. package/cjs/style.d.ts +1 -0
  81. package/cjs/style.js +3 -1
  82. package/cjs/swipe-action/style/css/index.css +50 -34
  83. package/cjs/swipe-load/style/css/index.css +50 -34
  84. package/cjs/switch/style/css/index.css +50 -34
  85. package/cjs/switch/style/index.less +8 -8
  86. package/cjs/tab-bar/style/css/index.css +50 -34
  87. package/cjs/tabs/style/css/index.css +50 -34
  88. package/cjs/tabs/tab-cell.js +1 -1
  89. package/cjs/tag/style/css/index.css +50 -34
  90. package/cjs/textarea/style/css/index.css +50 -34
  91. package/cjs/toast/style/css/index.css +50 -34
  92. package/cjs/transition/style/css/index.css +50 -34
  93. package/cjs/uploader/index.d.ts +16 -0
  94. package/cjs/uploader/index.js +180 -0
  95. package/cjs/uploader/style/css/index.css +666 -0
  96. package/cjs/uploader/style/css/index.d.ts +4 -0
  97. package/cjs/uploader/style/css/index.js +9 -0
  98. package/cjs/uploader/style/index.d.ts +4 -0
  99. package/cjs/uploader/style/index.js +9 -0
  100. package/cjs/uploader/style/index.less +161 -0
  101. package/cjs/uploader/type.d.ts +108 -0
  102. package/cjs/uploader/type.js +3 -0
  103. package/cjs/uploader/upload/index.d.ts +2 -0
  104. package/cjs/uploader/upload/index.js +19 -0
  105. package/cjs/uploader/upload/type.d.ts +107 -0
  106. package/cjs/uploader/upload/type.js +3 -0
  107. package/cjs/uploader/upload/upload.d.ts +20 -0
  108. package/cjs/uploader/upload/upload.js +189 -0
  109. package/dist/index.js +589 -273
  110. package/dist/index.min.js +5 -5
  111. package/dist/style.css +3811 -2306
  112. package/dist/style.min.css +1 -1
  113. package/esm/action-sheet/style/css/index.css +50 -34
  114. package/esm/avatar/style/css/index.css +50 -34
  115. package/esm/badge/style/css/index.css +50 -34
  116. package/esm/button/style/css/index.css +50 -34
  117. package/esm/carousel/style/css/index.css +50 -34
  118. package/esm/cell/style/css/index.css +50 -34
  119. package/esm/cell/style/index.less +2 -2
  120. package/esm/checkbox/style/css/index.css +50 -34
  121. package/esm/circle-progress/style/css/index.css +50 -34
  122. package/esm/collapse/style/css/index.css +50 -34
  123. package/esm/count-down/style/css/index.css +50 -34
  124. package/esm/date-picker/style/css/index.css +50 -34
  125. package/esm/dialog/style/css/index.css +50 -34
  126. package/esm/divider/style/css/index.css +50 -34
  127. package/esm/dropdown/style/css/index.css +50 -34
  128. package/esm/dropdown-menu/style/css/index.css +50 -34
  129. package/esm/ellipsis/style/css/index.css +50 -34
  130. package/esm/form/form-item.d.ts +3 -0
  131. package/esm/form/form-item.js +36 -10
  132. package/esm/form/style/css/index.css +63 -34
  133. package/esm/form/style/index.less +18 -0
  134. package/esm/grid/style/css/index.css +50 -34
  135. package/esm/icon/IconCheck/index.js +1 -2
  136. package/esm/icon/IconDownload/index.d.ts +7 -0
  137. package/esm/icon/IconDownload/index.js +30 -0
  138. package/esm/icon/IconFile/index.d.ts +7 -0
  139. package/esm/icon/IconFile/index.js +30 -0
  140. package/esm/icon/IconKeyboard/index.js +1 -0
  141. package/esm/icon/IconQuestionCircle/index.js +1 -2
  142. package/esm/icon/IconUpload/index.js +6 -4
  143. package/esm/icon/IconUserFill/index.js +1 -2
  144. package/esm/icon/index.d.ts +3 -1
  145. package/esm/icon/index.js +3 -1
  146. package/esm/icon/type.d.ts +3 -1
  147. package/esm/image/style/css/index.css +50 -34
  148. package/esm/image-picker/index.js +14 -160
  149. package/esm/image-picker/style/css/index.css +50 -34
  150. package/esm/image-picker/type.d.ts +4 -73
  151. package/esm/image-preview/style/css/index.css +50 -34
  152. package/esm/index-bar/style/css/index.css +50 -34
  153. package/esm/index.d.ts +1 -0
  154. package/esm/index.js +2 -1
  155. package/esm/input/hooks.js +2 -2
  156. package/esm/input/props.d.ts +2 -2
  157. package/esm/input/style/css/index.css +50 -34
  158. package/esm/keyboard/style/css/index.css +50 -34
  159. package/esm/load-more/style/css/index.css +50 -34
  160. package/esm/loading/style/css/index.css +50 -34
  161. package/esm/masking/style/css/index.css +50 -34
  162. package/esm/nav-bar/style/css/index.css +50 -34
  163. package/esm/notice-bar/style/css/index.css +50 -34
  164. package/esm/notice-bar/style/index.less +2 -2
  165. package/esm/notify/style/css/index.css +50 -34
  166. package/esm/pagination/style/css/index.css +50 -34
  167. package/esm/pagination/style/index.less +4 -4
  168. package/esm/picker/index.js +60 -20
  169. package/esm/picker/style/css/index.css +50 -34
  170. package/esm/picker/type.d.ts +6 -1
  171. package/esm/picker-view/style/css/index.css +50 -34
  172. package/esm/popover/style/css/index.css +50 -34
  173. package/esm/popover/style/css/menu.css +50 -34
  174. package/esm/popup/style/css/index.css +50 -34
  175. package/esm/popup-swiper/style/css/index.css +50 -34
  176. package/esm/progress/style/css/index.css +50 -34
  177. package/esm/pull-refresh/style/css/index.css +50 -34
  178. package/esm/radio/style/css/index.css +50 -34
  179. package/esm/rate/style/css/index.css +50 -34
  180. package/esm/rate/style/index.less +2 -2
  181. package/esm/search-bar/style/css/index.css +50 -34
  182. package/esm/skeleton/style/css/index.css +50 -34
  183. package/esm/skeleton/style/index.less +2 -2
  184. package/esm/slider/style/css/index.css +50 -34
  185. package/esm/slider/style/index.less +6 -6
  186. package/esm/stepper/style/css/index.css +50 -34
  187. package/esm/steps/style/css/index.css +50 -34
  188. package/esm/sticky/style/css/index.css +50 -34
  189. package/esm/style.d.ts +1 -0
  190. package/esm/style.js +2 -1
  191. package/esm/swipe-action/style/css/index.css +50 -34
  192. package/esm/swipe-load/style/css/index.css +50 -34
  193. package/esm/switch/style/css/index.css +50 -34
  194. package/esm/switch/style/index.less +8 -8
  195. package/esm/tab-bar/style/css/index.css +50 -34
  196. package/esm/tabs/style/css/index.css +50 -34
  197. package/esm/tabs/tab-cell.js +2 -2
  198. package/esm/tag/style/css/index.css +50 -34
  199. package/esm/textarea/style/css/index.css +50 -34
  200. package/esm/toast/style/css/index.css +50 -34
  201. package/esm/transition/style/css/index.css +50 -34
  202. package/esm/uploader/index.d.ts +16 -0
  203. package/esm/uploader/index.js +150 -0
  204. package/esm/uploader/style/css/index.css +666 -0
  205. package/esm/uploader/style/css/index.d.ts +4 -0
  206. package/esm/uploader/style/css/index.js +4 -0
  207. package/esm/uploader/style/index.d.ts +4 -0
  208. package/esm/uploader/style/index.js +4 -0
  209. package/esm/uploader/style/index.less +161 -0
  210. package/esm/uploader/type.d.ts +108 -0
  211. package/esm/uploader/type.js +1 -0
  212. package/esm/uploader/upload/index.d.ts +2 -0
  213. package/esm/uploader/upload/index.js +2 -0
  214. package/esm/uploader/upload/type.d.ts +107 -0
  215. package/esm/uploader/upload/type.js +1 -0
  216. package/esm/uploader/upload/upload.d.ts +20 -0
  217. package/esm/uploader/upload/upload.js +175 -0
  218. package/package.json +3 -6
  219. package/style/css/public.css +50 -34
  220. package/tokens/app/arcodesign/default/css-variables.less +27 -0
  221. package/tokens/app/arcodesign/default/index.d.ts +27 -0
  222. package/tokens/app/arcodesign/default/index.js +28 -1
  223. package/tokens/app/arcodesign/default/index.json +292 -0
  224. package/tokens/app/arcodesign/default/index.less +27 -0
  225. package/tokens/mixin/index.less +80 -3
  226. package/tokens/mixin/vars-switch.less +1 -0
  227. package/umd/action-sheet/style/css/index.css +50 -34
  228. package/umd/avatar/style/css/index.css +50 -34
  229. package/umd/badge/style/css/index.css +50 -34
  230. package/umd/button/style/css/index.css +50 -34
  231. package/umd/carousel/style/css/index.css +50 -34
  232. package/umd/cell/style/css/index.css +50 -34
  233. package/umd/cell/style/index.less +2 -2
  234. package/umd/checkbox/style/css/index.css +50 -34
  235. package/umd/circle-progress/style/css/index.css +50 -34
  236. package/umd/collapse/style/css/index.css +50 -34
  237. package/umd/count-down/style/css/index.css +50 -34
  238. package/umd/date-picker/style/css/index.css +50 -34
  239. package/umd/dialog/style/css/index.css +50 -34
  240. package/umd/divider/style/css/index.css +50 -34
  241. package/umd/dropdown/style/css/index.css +50 -34
  242. package/umd/dropdown-menu/style/css/index.css +50 -34
  243. package/umd/ellipsis/style/css/index.css +50 -34
  244. package/umd/form/form-item.d.ts +3 -0
  245. package/umd/form/form-item.js +38 -10
  246. package/umd/form/style/css/index.css +63 -34
  247. package/umd/form/style/index.less +18 -0
  248. package/umd/grid/style/css/index.css +50 -34
  249. package/umd/icon/IconCheck/index.js +1 -2
  250. package/umd/icon/IconDownload/index.d.ts +7 -0
  251. package/umd/icon/IconDownload/index.js +49 -0
  252. package/umd/icon/IconFile/index.d.ts +7 -0
  253. package/umd/icon/IconFile/index.js +49 -0
  254. package/umd/icon/IconKeyboard/index.js +1 -0
  255. package/umd/icon/IconQuestionCircle/index.js +1 -2
  256. package/umd/icon/IconUpload/index.js +6 -4
  257. package/umd/icon/IconUserFill/index.js +1 -2
  258. package/umd/icon/index.d.ts +3 -1
  259. package/umd/icon/index.js +15 -9
  260. package/umd/icon/type.d.ts +3 -1
  261. package/umd/image/style/css/index.css +50 -34
  262. package/umd/image-picker/index.js +17 -163
  263. package/umd/image-picker/style/css/index.css +50 -34
  264. package/umd/image-picker/type.d.ts +4 -73
  265. package/umd/image-preview/style/css/index.css +50 -34
  266. package/umd/index-bar/style/css/index.css +50 -34
  267. package/umd/index.d.ts +1 -0
  268. package/umd/index.js +7 -5
  269. package/umd/input/hooks.js +2 -2
  270. package/umd/input/props.d.ts +2 -2
  271. package/umd/input/style/css/index.css +50 -34
  272. package/umd/keyboard/style/css/index.css +50 -34
  273. package/umd/load-more/style/css/index.css +50 -34
  274. package/umd/loading/style/css/index.css +50 -34
  275. package/umd/masking/style/css/index.css +50 -34
  276. package/umd/nav-bar/style/css/index.css +50 -34
  277. package/umd/notice-bar/style/css/index.css +50 -34
  278. package/umd/notice-bar/style/index.less +2 -2
  279. package/umd/notify/style/css/index.css +50 -34
  280. package/umd/pagination/style/css/index.css +50 -34
  281. package/umd/pagination/style/index.less +4 -4
  282. package/umd/picker/index.js +59 -19
  283. package/umd/picker/style/css/index.css +50 -34
  284. package/umd/picker/type.d.ts +6 -1
  285. package/umd/picker-view/style/css/index.css +50 -34
  286. package/umd/popover/style/css/index.css +50 -34
  287. package/umd/popover/style/css/menu.css +50 -34
  288. package/umd/popup/style/css/index.css +50 -34
  289. package/umd/popup-swiper/style/css/index.css +50 -34
  290. package/umd/progress/style/css/index.css +50 -34
  291. package/umd/pull-refresh/style/css/index.css +50 -34
  292. package/umd/radio/style/css/index.css +50 -34
  293. package/umd/rate/style/css/index.css +50 -34
  294. package/umd/rate/style/index.less +2 -2
  295. package/umd/search-bar/style/css/index.css +50 -34
  296. package/umd/skeleton/style/css/index.css +50 -34
  297. package/umd/skeleton/style/index.less +2 -2
  298. package/umd/slider/style/css/index.css +50 -34
  299. package/umd/slider/style/index.less +6 -6
  300. package/umd/stepper/style/css/index.css +50 -34
  301. package/umd/steps/style/css/index.css +50 -34
  302. package/umd/sticky/style/css/index.css +50 -34
  303. package/umd/style.d.ts +1 -0
  304. package/umd/style.js +4 -4
  305. package/umd/swipe-action/style/css/index.css +50 -34
  306. package/umd/swipe-load/style/css/index.css +50 -34
  307. package/umd/switch/style/css/index.css +50 -34
  308. package/umd/switch/style/index.less +8 -8
  309. package/umd/tab-bar/style/css/index.css +50 -34
  310. package/umd/tabs/style/css/index.css +50 -34
  311. package/umd/tabs/tab-cell.js +1 -1
  312. package/umd/tag/style/css/index.css +50 -34
  313. package/umd/textarea/style/css/index.css +50 -34
  314. package/umd/toast/style/css/index.css +50 -34
  315. package/umd/transition/style/css/index.css +50 -34
  316. package/umd/uploader/index.d.ts +16 -0
  317. package/umd/uploader/index.js +178 -0
  318. package/umd/uploader/style/css/index.css +666 -0
  319. package/umd/uploader/style/css/index.d.ts +4 -0
  320. package/umd/uploader/style/css/index.js +15 -0
  321. package/umd/uploader/style/index.d.ts +4 -0
  322. package/umd/uploader/style/index.js +15 -0
  323. package/umd/uploader/style/index.less +161 -0
  324. package/umd/uploader/type.d.ts +108 -0
  325. package/umd/uploader/type.js +17 -0
  326. package/umd/uploader/upload/index.d.ts +2 -0
  327. package/umd/uploader/upload/index.js +27 -0
  328. package/umd/uploader/upload/type.d.ts +107 -0
  329. package/umd/uploader/upload/type.js +17 -0
  330. package/umd/uploader/upload/upload.d.ts +20 -0
  331. package/umd/uploader/upload/upload.js +200 -0
@@ -0,0 +1,161 @@
1
+ @import '../../../style/mixin.less';
2
+
3
+ .@{prefix}-uploader {
4
+ &-container {
5
+ display: flex;
6
+ flex-wrap: wrap;
7
+ }
8
+ &-add {
9
+ position: relative;
10
+ input {
11
+ position: absolute;
12
+ opacity: 0;
13
+ left: 0;
14
+ top: 0;
15
+ width: 100%;
16
+ height: 100%;
17
+ display: none;
18
+ }
19
+ }
20
+ &-list {
21
+ width: 100%;
22
+ &-item {
23
+ display: flex;
24
+ align-items: center;
25
+ .use-var(height, uploader-item-height);
26
+ .use-var(margin-top, uploader-item-margin-top);
27
+ &-container {
28
+ flex: 1;
29
+ display: flex;
30
+ align-items: center;
31
+ height: 100%;
32
+ .use-var(border-radius, uploader-item-border-radius);
33
+ .use-var(background-color, uploader-item-background-color);
34
+ .use-var(padding, uploader-item-padding);
35
+ }
36
+ &-wrapper {
37
+ display: flex;
38
+ flex: 1;
39
+ align-items: center;
40
+ }
41
+ &-file {
42
+ display: flex;
43
+ .use-var(font-size, uploader-file-icon-font-size);
44
+ .use-var-with-rtl(margin-right, uploader-file-icon-margin-right);
45
+ &-icon {
46
+ .use-var(color, uploader-file-icon-color);
47
+ }
48
+ }
49
+ &-text {
50
+ font-weight: 400;
51
+ .use-var(font-size, uploader-item-text-font-size);
52
+ .use-var(color, uploader-item-text-color);
53
+ &-error {
54
+ .use-var(color, uploader-item-text-error-color);
55
+ }
56
+ }
57
+ &-loaded {
58
+ display: flex;
59
+ .use-var(font-size, uploader-loaded-icon-font-size);
60
+ .use-var(color, uploader-loaded-icon-color);
61
+ }
62
+ &-error {
63
+ font-weight: 400;
64
+ .use-var(font-size, uploader-error-text-font-size);
65
+ .use-var(color, uploader-error-text-color);
66
+ }
67
+ &-delete {
68
+ display: flex;
69
+ height: 100%;
70
+ align-items: center;
71
+ .use-var-with-rtl(padding-left, uploader-delete-icon-padding-left);
72
+ .use-var(font-size, uploader-delete-icon-font-size);
73
+ &-icon {
74
+ .use-var(color, uploader-delete-icon-color);
75
+ &-disabled {
76
+ .use-var(color, uploader-disabled-delete-icon-color);
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+
84
+ .@{prefix}-uploader-disabled {
85
+ pointer-events: none;
86
+ }
87
+
88
+ /***************************************************
89
+ * *
90
+ * Arco Theme Style *
91
+ * *
92
+ ***************************************************/
93
+ & when (@use-dark-mode = 1) {
94
+
95
+ .process-bg-color-with-config,
96
+ .process-custom-icon-bg-color-with-config {
97
+ @{arco-dark-mode-selector} & {
98
+ .use-var(color, dark-steps-process-with-config-item-icon-color);
99
+ .use-var(color, dark-steps-process-with-config-item-icon-color);
100
+ }
101
+ }
102
+ .wait-custom-icon-bg-color-with-config {
103
+ @{arco-dark-mode-selector} & {
104
+ .use-var(background, dark-steps-wait-icon-num-background);
105
+ .use-var(color, dark-sub-info-font-color);
106
+ .use-var(background, dark-steps-wait-icon-num-background);
107
+ .use-var(color, dark-sub-info-font-color);
108
+ }
109
+ }
110
+ .@{prefix}-uploader {
111
+ &-list {
112
+ &-item {
113
+ &-container {
114
+ @{arco-dark-mode-selector} & {
115
+ .use-var(background-color, dark-uploader-item-background-color);
116
+ }
117
+ }
118
+ &-file {
119
+ &-icon {
120
+ @{arco-dark-mode-selector} & {
121
+ .use-var(color, dark-uploader-file-icon-color);
122
+ }
123
+ }
124
+ }
125
+ &-text {
126
+ @{arco-dark-mode-selector} & {
127
+ .use-var(color, dark-uploader-item-text-color);
128
+ }
129
+ &-error {
130
+ @{arco-dark-mode-selector} & {
131
+ .use-var(color, dark-uploader-item-text-error-color);
132
+ }
133
+ }
134
+ }
135
+ &-loaded {
136
+ @{arco-dark-mode-selector} & {
137
+ .use-var(color, dark-uploader-loaded-icon-color);
138
+ }
139
+ }
140
+ &-error {
141
+ @{arco-dark-mode-selector} & {
142
+ .use-var(color, dark-uploader-error-text-color);
143
+ }
144
+ }
145
+ &-delete {
146
+ &-icon {
147
+ @{arco-dark-mode-selector} & {
148
+ .use-var(color, dark-uploader-delete-icon-color);
149
+ }
150
+ &-disabled {
151
+ @{arco-dark-mode-selector} & {
152
+ .use-var(color, dark-uploader-disabled-delete-icon-color);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ /********************* End *************************/
@@ -0,0 +1,108 @@
1
+ import { InputHTMLAttributes } from 'react';
2
+ import { UploadCommonProps, CommonFileItem } from './upload/type';
3
+ export interface FileItem extends CommonFileItem {
4
+ /**
5
+ * 文件
6
+ * @en File
7
+ */
8
+ file: File;
9
+ }
10
+ export interface UploaderProps extends UploadCommonProps {
11
+ /**
12
+ * 自定义类名
13
+ * @en Custom className
14
+ */
15
+ className?: string;
16
+ /**
17
+ * 自定义样式
18
+ * @en Custom stylesheet
19
+ */
20
+ style?: React.CSSProperties;
21
+ /**
22
+ * 可以选择的文件类型
23
+ * @en Available file types
24
+ * @default undefined
25
+ */
26
+ accept?: InputHTMLAttributes<unknown>['accept'];
27
+ /**
28
+ * 是否支持多选
29
+ * @en Whether to support multiple selection
30
+ */
31
+ multiple?: boolean;
32
+ /**
33
+ * 文件选取模式 File selection mode [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
34
+ * @en Whether To Support Multiple Selection [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
35
+ */
36
+ capture?: InputHTMLAttributes<unknown>['capture'];
37
+ /**
38
+ * 是否隐藏文件上传状态
39
+ * @en Whether to hide file upload status
40
+ * @default false
41
+ */
42
+ hideStatus?: boolean;
43
+ /**
44
+ * 是否总是展示选择Icon,默认情况下当文件数量超出limit值时会自动隐藏选择Icon
45
+ * @en Whether to always show Select Icon
46
+ * @default false
47
+ */
48
+ alwaysShowSelect?: boolean;
49
+ /**
50
+ * 禁用选择和删除图片
51
+ * @en Disable select & delete image
52
+ */
53
+ disabled?: boolean;
54
+ /**
55
+ * 自定义删除区域
56
+ * @en Defined delete area
57
+ */
58
+ renderDeleteArea?: (fileItem: FileItem, index: number) => React.ReactNode;
59
+ /**
60
+ * 自定义上传成功区域
61
+ * @en Defined loaded area
62
+ */
63
+ renderLoadedArea?: (fileItem: FileItem, index: number) => React.ReactNode;
64
+ /**
65
+ * 自定义上传中区域
66
+ * @en Defined loading area
67
+ */
68
+ renderLoadingArea?: (fileItem: FileItem, index: number) => React.ReactNode;
69
+ /**
70
+ * 自定义上传失败区域
71
+ * @en Defined error area
72
+ */
73
+ renderErrorArea?: (fileItem: FileItem, index: number) => React.ReactNode;
74
+ /**
75
+ * 自定义文件索引区域
76
+ * @en Defined file index area
77
+ */
78
+ renderFileIndexArea?: (fileItem: FileItem, index: number) => React.ReactNode;
79
+ /**
80
+ * 自定义上传按钮区域
81
+ * @en Defined upload button area
82
+ */
83
+ renderUploadArea?: () => React.ReactNode;
84
+ /**
85
+ * 自定义上传文件列表展示
86
+ * @en Defined file list display
87
+ */
88
+ renderFileList?: (methods: FileListMethods) => React.ReactNode;
89
+ }
90
+ export interface UploaderRef {
91
+ /**
92
+ * 最外层 DOM 元素
93
+ * @en The outer DOM element of the component
94
+ */
95
+ dom: HTMLDivElement | null;
96
+ }
97
+ export interface FileListMethods {
98
+ /**
99
+ * 重新上传
100
+ * @en Retry to upload
101
+ */
102
+ retryUpload: (index: number) => void;
103
+ /**
104
+ * 删除文件
105
+ * @en Delete file
106
+ */
107
+ deleteFile: (index: number) => void;
108
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './type';
2
+ export * from './upload';
@@ -0,0 +1,2 @@
1
+ export * from './type';
2
+ export * from './upload';
@@ -0,0 +1,107 @@
1
+ /// <reference types="react" />
2
+ export interface AdapterFile {
3
+ /**
4
+ * 文件 url
5
+ * @en Url of file
6
+ */
7
+ url?: string;
8
+ /**
9
+ * 文件大小
10
+ * @en File size
11
+ */
12
+ size: number;
13
+ /**
14
+ * 文件名
15
+ * @en File name
16
+ */
17
+ name: string;
18
+ }
19
+ export interface SelectCallback {
20
+ /**
21
+ * 文件列表
22
+ * @en File list
23
+ */
24
+ files: AdapterFile[];
25
+ }
26
+ export interface CommonFileItem {
27
+ /**
28
+ * 文件地址
29
+ * @en file Url
30
+ */
31
+ url?: string;
32
+ /**
33
+ * 文件
34
+ * @en File
35
+ */
36
+ file?: File;
37
+ /**
38
+ * 文件状态
39
+ * @en Image Status
40
+ * @default 以文件自身加载状态而定
41
+ * @default_en According to inner status of the image
42
+ */
43
+ status?: 'loaded' | 'loading' | 'error';
44
+ }
45
+ export interface UploadCommonProps<FileItem extends CommonFileItem = CommonFileItem> {
46
+ /**
47
+ * 上传方法
48
+ * @en Upload function
49
+ */
50
+ upload?: (file: FileItem) => Promise<FileItem | null>;
51
+ /**
52
+ * 已选文件列表发生变化
53
+ * @en The list of selected files changes
54
+ */
55
+ onChange?: (fileList: FileItem[]) => void;
56
+ /**
57
+ * 文件大小限制,单位为K
58
+ * @en File size limit, in K
59
+ */
60
+ maxSize?: number;
61
+ /**
62
+ * 文件超过限制大小
63
+ * @en Image exceeds size limit
64
+ */
65
+ onMaxSizeExceed?: (file: File) => void;
66
+ /**
67
+ * 最多选择文件数,超出数量自动隐藏上传按钮,0表示不做限制
68
+ * @en Max pictures can choose, 0 means no restriction
69
+ * @default 0
70
+ */
71
+ limit?: number;
72
+ /**
73
+ * 选择文件数超过限制
74
+ * @en The number of pictures exceeds the limit
75
+ */
76
+ onLimitExceed?: (files: File[]) => void;
77
+ /**
78
+ * 已选择文件列表
79
+ * @en Selected files list
80
+ */
81
+ files: FileItem[];
82
+ /**
83
+ * 删除点击事件
84
+ * @en Delete area click event
85
+ */
86
+ onDeleteClick?: (index: number) => void;
87
+ /**
88
+ * 上传文件点击事件
89
+ * @en Upload area click event
90
+ */
91
+ onUploadClick?: () => void;
92
+ /**
93
+ * 文件选择适配器
94
+ * @en Select adaptor
95
+ */
96
+ selectAdapter?: () => Promise<SelectCallback>;
97
+ /**
98
+ * 文件点击
99
+ * @en click event
100
+ */
101
+ onClick?: (e: React.MouseEvent<HTMLElement, MouseEvent>, file: FileItem, index: number) => void;
102
+ /**
103
+ * 文件长按事件
104
+ * @en long press event
105
+ */
106
+ onLongPress?: (e: React.TouchEvent<HTMLElement>, file: FileItem, index: number) => void;
107
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ /// <reference types="node" />
2
+ import React from 'react';
3
+ import { Promise } from 'es6-promise';
4
+ import { AdapterFile, CommonFileItem, UploadCommonProps } from './type';
5
+ export declare class Upload<FileItem extends CommonFileItem = CommonFileItem> {
6
+ props: UploadCommonProps<FileItem>;
7
+ fileRef: React.MutableRefObject<HTMLInputElement | null>;
8
+ cacheRef: React.MutableRefObject<FileItem[]>;
9
+ timeOutEvent: NodeJS.Timeout | number;
10
+ constructor(props: UploadCommonProps<FileItem>, fileRef: React.MutableRefObject<HTMLInputElement | null>, cacheRef: React.MutableRefObject<FileItem[]>);
11
+ init(): void;
12
+ handleFile: (newFiles: File[]) => void;
13
+ handleChange: (event: any, fromAdapter?: boolean | undefined) => void;
14
+ deleteFile: (index: number) => void;
15
+ retryUpload: (index: number) => void;
16
+ handleSelect: (e: React.MouseEvent) => void;
17
+ handleClick: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, file: FileItem, index: number) => void;
18
+ handleTouchStart: (e: React.TouchEvent<HTMLDivElement>, image: FileItem, index: number) => void;
19
+ }
20
+ export declare const parseFile: (file: AdapterFile) => Promise<unknown>;
@@ -0,0 +1,175 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import { Promise } from 'es6-promise';
3
+ export var Upload = /*#__PURE__*/function () {
4
+ // click && longPress
5
+ function Upload(props, fileRef, cacheRef) {
6
+ var _this = this;
7
+
8
+ this.props = void 0;
9
+ this.fileRef = void 0;
10
+ this.cacheRef = void 0;
11
+ this.timeOutEvent = void 0;
12
+
13
+ this.handleFile = function (newFiles) {
14
+ Promise.all(newFiles.map(function (file) {
15
+ return parseFile(file);
16
+ })).then(function (parseFiles) {
17
+ var res = parseFiles.map(function (url, index) {
18
+ return {
19
+ url: url,
20
+ status: typeof _this.props.upload === 'function' ? 'loading' : 'loaded',
21
+ file: newFiles[index]
22
+ };
23
+ });
24
+ _this.cacheRef.current = [].concat(_this.cacheRef.current, res);
25
+
26
+ _this.props.onChange([].concat(_this.cacheRef.current)); // 执行upload
27
+
28
+
29
+ if (typeof _this.props.upload === 'function') {
30
+ newFiles.forEach(function (_file) {
31
+ _this.props.upload(_this.cacheRef.current.find(function (_ref) {
32
+ var file = _ref.file;
33
+ return file === _file;
34
+ })).then(function (data) {
35
+ var index = _this.cacheRef.current.findIndex(function (_ref2) {
36
+ var file = _ref2.file;
37
+ return file === _file;
38
+ });
39
+
40
+ if (index !== -1) {
41
+ _this.cacheRef.current[index] = _extends({}, _this.cacheRef.current[index], data, {
42
+ status: 'loaded'
43
+ });
44
+ }
45
+ }).catch(function () {
46
+ var index = _this.cacheRef.current.findIndex(function (_ref3) {
47
+ var file = _ref3.file;
48
+ return file === _file;
49
+ });
50
+
51
+ if (index !== -1) {
52
+ _this.cacheRef.current[index].status = 'error';
53
+ }
54
+ }).finally(function () {
55
+ _this.props.onChange([].concat(_this.cacheRef.current));
56
+ });
57
+ });
58
+ }
59
+ });
60
+ };
61
+
62
+ this.handleChange = function (event, fromAdapter) {
63
+ var newFiles = Array.prototype.filter.call(event.target.files || [], function (file) {
64
+ // 过滤maxSize
65
+ if (_this.props.maxSize && file.size > _this.props.maxSize * 1024) {
66
+ _this.props.onMaxSizeExceed && _this.props.onMaxSizeExceed(file);
67
+ return false;
68
+ }
69
+
70
+ return true;
71
+ }) || [];
72
+
73
+ if (!fromAdapter) {
74
+ event.target.value = '';
75
+ } // 截断limit
76
+
77
+
78
+ if (_this.props.limit !== 0 && newFiles.length + _this.props.files.length > _this.props.limit) {
79
+ _this.props.onLimitExceed && _this.props.onLimitExceed(newFiles);
80
+ newFiles.length = _this.props.limit - _this.props.files.length;
81
+ }
82
+
83
+ _this.handleFile(newFiles);
84
+ };
85
+
86
+ this.deleteFile = function (index) {
87
+ _this.props.onDeleteClick && _this.props.onDeleteClick(index);
88
+
89
+ _this.props.onChange(_this.props.files.filter(function (_i, j) {
90
+ return j !== index;
91
+ }));
92
+ };
93
+
94
+ this.retryUpload = function (index) {
95
+ _this.deleteFile(index);
96
+
97
+ _this.handleFile([_this.props.files[index].file]);
98
+ };
99
+
100
+ this.handleSelect = function (e) {
101
+ if (e.target !== _this.fileRef.current) {
102
+ var _this$fileRef$current;
103
+
104
+ _this.props.onUploadClick && _this.props.onUploadClick();
105
+ _this.props.selectAdapter ? _this.props.selectAdapter().then(function (value) {
106
+ return _this.handleChange({
107
+ target: {
108
+ files: value.files
109
+ }
110
+ }, true);
111
+ }) : (_this$fileRef$current = _this.fileRef.current) == null ? void 0 : _this$fileRef$current.click();
112
+ }
113
+ };
114
+
115
+ this.handleClick = function (e, file, index) {
116
+ clearTimeout(_this.timeOutEvent);
117
+
118
+ if (_this.timeOutEvent !== 0) {
119
+ _this.props.onClick == null ? void 0 : _this.props.onClick(e, file, index);
120
+ }
121
+ };
122
+
123
+ this.handleTouchStart = function (e, image, index) {
124
+ _this.timeOutEvent = setTimeout(function () {
125
+ _this.timeOutEvent = 0;
126
+ _this.props.onLongPress == null ? void 0 : _this.props.onLongPress(e, image, index);
127
+ }, 750);
128
+ };
129
+
130
+ this.props = _extends({}, props);
131
+ this.fileRef = fileRef;
132
+ this.cacheRef = cacheRef;
133
+ this.init();
134
+ }
135
+
136
+ var _proto = Upload.prototype;
137
+
138
+ _proto.init = function init() {
139
+ !this.props.files && (this.props.files = []);
140
+ !this.props.limit && (this.props.limit = 0);
141
+ !this.props.onChange && (this.props.onChange = function () {
142
+ return null;
143
+ });
144
+ } // 解析文件生成预览
145
+ ;
146
+
147
+ return Upload;
148
+ }();
149
+ export var parseFile = function parseFile(file) {
150
+ return new Promise(function (resolve, reject) {
151
+ if (file.url) {
152
+ resolve(file.url);
153
+ } else {
154
+ var reader = new FileReader();
155
+
156
+ reader.onload = function (e) {
157
+ var _e$target;
158
+
159
+ var dataURL = (_e$target = e.target) == null ? void 0 : _e$target.result;
160
+
161
+ if (!dataURL) {
162
+ reject(new Error('file parse error'));
163
+ }
164
+
165
+ resolve(dataURL);
166
+ };
167
+
168
+ reader.onerror = function () {
169
+ reject(new Error('file parse error'));
170
+ };
171
+
172
+ reader.readAsDataURL(file);
173
+ }
174
+ });
175
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arco-design/mobile-react",
3
- "version": "2.30.10",
3
+ "version": "2.31.1",
4
4
  "description": "",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -15,16 +15,13 @@
15
15
  "author": "taoyiyue@bytedance.com",
16
16
  "license": "ISC",
17
17
  "dependencies": {
18
- "@arco-design/mobile-utils": "2.17.10",
18
+ "@arco-design/mobile-utils": "2.18.1",
19
19
  "@arco-design/transformable": "^1.0.0",
20
20
  "lodash.throttle": "^4.1.1",
21
21
  "resize-observer-polyfill": "^1.5.1"
22
22
  },
23
23
  "devDependencies": {
24
24
  "babel-jest": "^25.3.0",
25
- "enzyme": "^3.11.0",
26
- "enzyme-adapter-react-16": "^1.15.2",
27
- "enzyme-to-json": "^3.4.4",
28
25
  "jest": "^25.3.0"
29
26
  },
30
27
  "peerDependencies": {
@@ -49,5 +46,5 @@
49
46
  "publishConfig": {
50
47
  "access": "public"
51
48
  },
52
- "gitHead": "70e0f287b7e294b0d2d8e1516e4ff614f212f7dd"
49
+ "gitHead": "8cc54e96718590f82149dcdca12a7480b39c0ed2"
53
50
  }