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