@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,3 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
@@ -0,0 +1,2 @@
1
+ export * from './type';
2
+ export * from './upload';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _type = require("./type");
6
+
7
+ Object.keys(_type).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _type[key]) return;
10
+ exports[key] = _type[key];
11
+ });
12
+
13
+ var _upload = require("./upload");
14
+
15
+ Object.keys(_upload).forEach(function (key) {
16
+ if (key === "default" || key === "__esModule") return;
17
+ if (key in exports && exports[key] === _upload[key]) return;
18
+ exports[key] = _upload[key];
19
+ });
@@ -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,3 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
@@ -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,189 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.parseFile = exports.Upload = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _es6Promise = require("es6-promise");
11
+
12
+ var Upload = /*#__PURE__*/function () {
13
+ // click && longPress
14
+ function Upload(props, fileRef, cacheRef) {
15
+ var _this = this;
16
+
17
+ this.props = void 0;
18
+ this.fileRef = void 0;
19
+ this.cacheRef = void 0;
20
+ this.timeOutEvent = void 0;
21
+
22
+ this.handleFile = function (newFiles) {
23
+ _es6Promise.Promise.all(newFiles.map(function (file) {
24
+ return parseFile(file);
25
+ })).then(function (parseFiles) {
26
+ var res = parseFiles.map(function (url, index) {
27
+ return {
28
+ url: url,
29
+ status: typeof _this.props.upload === 'function' ? 'loading' : 'loaded',
30
+ file: newFiles[index]
31
+ };
32
+ });
33
+ _this.cacheRef.current = [].concat(_this.cacheRef.current, res);
34
+
35
+ _this.props.onChange([].concat(_this.cacheRef.current)); // 执行upload
36
+
37
+
38
+ if (typeof _this.props.upload === 'function') {
39
+ newFiles.forEach(function (_file) {
40
+ _this.props.upload(_this.cacheRef.current.find(function (_ref) {
41
+ var file = _ref.file;
42
+ return file === _file;
43
+ })).then(function (data) {
44
+ var index = _this.cacheRef.current.findIndex(function (_ref2) {
45
+ var file = _ref2.file;
46
+ return file === _file;
47
+ });
48
+
49
+ if (index !== -1) {
50
+ _this.cacheRef.current[index] = (0, _extends2.default)({}, _this.cacheRef.current[index], data, {
51
+ status: 'loaded'
52
+ });
53
+ }
54
+ }).catch(function () {
55
+ var index = _this.cacheRef.current.findIndex(function (_ref3) {
56
+ var file = _ref3.file;
57
+ return file === _file;
58
+ });
59
+
60
+ if (index !== -1) {
61
+ _this.cacheRef.current[index].status = 'error';
62
+ }
63
+ }).finally(function () {
64
+ _this.props.onChange([].concat(_this.cacheRef.current));
65
+ });
66
+ });
67
+ }
68
+ });
69
+ };
70
+
71
+ this.handleChange = function (event, fromAdapter) {
72
+ var newFiles = Array.prototype.filter.call(event.target.files || [], function (file) {
73
+ // 过滤maxSize
74
+ if (_this.props.maxSize && file.size > _this.props.maxSize * 1024) {
75
+ _this.props.onMaxSizeExceed && _this.props.onMaxSizeExceed(file);
76
+ return false;
77
+ }
78
+
79
+ return true;
80
+ }) || [];
81
+
82
+ if (!fromAdapter) {
83
+ event.target.value = '';
84
+ } // 截断limit
85
+
86
+
87
+ if (_this.props.limit !== 0 && newFiles.length + _this.props.files.length > _this.props.limit) {
88
+ _this.props.onLimitExceed && _this.props.onLimitExceed(newFiles);
89
+ newFiles.length = _this.props.limit - _this.props.files.length;
90
+ }
91
+
92
+ _this.handleFile(newFiles);
93
+ };
94
+
95
+ this.deleteFile = function (index) {
96
+ _this.props.onDeleteClick && _this.props.onDeleteClick(index);
97
+
98
+ _this.props.onChange(_this.props.files.filter(function (_i, j) {
99
+ return j !== index;
100
+ }));
101
+ };
102
+
103
+ this.retryUpload = function (index) {
104
+ _this.deleteFile(index);
105
+
106
+ _this.handleFile([_this.props.files[index].file]);
107
+ };
108
+
109
+ this.handleSelect = function (e) {
110
+ if (e.target !== _this.fileRef.current) {
111
+ var _this$fileRef$current;
112
+
113
+ _this.props.onUploadClick && _this.props.onUploadClick();
114
+ _this.props.selectAdapter ? _this.props.selectAdapter().then(function (value) {
115
+ return _this.handleChange({
116
+ target: {
117
+ files: value.files
118
+ }
119
+ }, true);
120
+ }) : (_this$fileRef$current = _this.fileRef.current) == null ? void 0 : _this$fileRef$current.click();
121
+ }
122
+ };
123
+
124
+ this.handleClick = function (e, file, index) {
125
+ clearTimeout(_this.timeOutEvent);
126
+
127
+ if (_this.timeOutEvent !== 0) {
128
+ _this.props.onClick == null ? void 0 : _this.props.onClick(e, file, index);
129
+ }
130
+ };
131
+
132
+ this.handleTouchStart = function (e, image, index) {
133
+ _this.timeOutEvent = setTimeout(function () {
134
+ _this.timeOutEvent = 0;
135
+ _this.props.onLongPress == null ? void 0 : _this.props.onLongPress(e, image, index);
136
+ }, 750);
137
+ };
138
+
139
+ this.props = (0, _extends2.default)({}, props);
140
+ this.fileRef = fileRef;
141
+ this.cacheRef = cacheRef;
142
+ this.init();
143
+ }
144
+
145
+ var _proto = Upload.prototype;
146
+
147
+ _proto.init = function init() {
148
+ !this.props.files && (this.props.files = []);
149
+ !this.props.limit && (this.props.limit = 0);
150
+ !this.props.onChange && (this.props.onChange = function () {
151
+ return null;
152
+ });
153
+ } // 解析文件生成预览
154
+ ;
155
+
156
+ return Upload;
157
+ }();
158
+
159
+ exports.Upload = Upload;
160
+
161
+ var parseFile = function parseFile(file) {
162
+ return new _es6Promise.Promise(function (resolve, reject) {
163
+ if (file.url) {
164
+ resolve(file.url);
165
+ } else {
166
+ var reader = new FileReader();
167
+
168
+ reader.onload = function (e) {
169
+ var _e$target;
170
+
171
+ var dataURL = (_e$target = e.target) == null ? void 0 : _e$target.result;
172
+
173
+ if (!dataURL) {
174
+ reject(new Error('file parse error'));
175
+ }
176
+
177
+ resolve(dataURL);
178
+ };
179
+
180
+ reader.onerror = function () {
181
+ reject(new Error('file parse error'));
182
+ };
183
+
184
+ reader.readAsDataURL(file);
185
+ }
186
+ });
187
+ };
188
+
189
+ exports.parseFile = parseFile;