@arco-design/mobile-react 2.20.0 → 2.21.2

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 (304) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.en-US.md +2 -2
  3. package/README.md +2 -2
  4. package/cjs/avatar/index.d.ts +1 -1
  5. package/cjs/avatar/index.js +1 -1
  6. package/cjs/badge/index.d.ts +1 -1
  7. package/cjs/badge/index.js +1 -1
  8. package/cjs/button/style/css/index.css +64 -64
  9. package/cjs/button/style/index.less +7 -5
  10. package/cjs/carousel/index.d.ts +1 -1
  11. package/cjs/carousel/index.js +1 -1
  12. package/cjs/cell/index.d.ts +1 -1
  13. package/cjs/cell/index.js +1 -1
  14. package/cjs/checkbox/index.d.ts +1 -1
  15. package/cjs/checkbox/index.js +1 -1
  16. package/cjs/collapse/index.d.ts +1 -1
  17. package/cjs/collapse/index.js +1 -1
  18. package/cjs/count-down/index.d.ts +1 -1
  19. package/cjs/count-down/index.js +1 -1
  20. package/cjs/date-picker/index.d.ts +1 -1
  21. package/cjs/date-picker/index.js +1 -1
  22. package/cjs/dropdown/dropdown.js +36 -20
  23. package/cjs/dropdown/style/css/index.css +3 -0
  24. package/cjs/dropdown/style/index.less +2 -0
  25. package/cjs/ellipsis/components/js-ellipsis.js +2 -3
  26. package/cjs/ellipsis/index.d.ts +1 -1
  27. package/cjs/ellipsis/index.js +3 -4
  28. package/cjs/image/index.d.ts +1 -1
  29. package/cjs/image/index.js +1 -1
  30. package/cjs/image-picker/index.d.ts +4 -175
  31. package/cjs/image-picker/index.js +41 -18
  32. package/cjs/image-picker/type.d.ts +174 -0
  33. package/cjs/image-picker/type.js +3 -0
  34. package/cjs/image-preview/index.d.ts +1 -1
  35. package/cjs/image-preview/index.js +1 -1
  36. package/cjs/index.d.ts +2 -0
  37. package/cjs/index.js +9 -1
  38. package/cjs/input/hooks.js +49 -8
  39. package/cjs/input/index.d.ts +1 -1
  40. package/cjs/input/index.js +1 -1
  41. package/cjs/input/props.d.ts +8 -2
  42. package/cjs/notice-bar/index.d.ts +1 -1
  43. package/cjs/notice-bar/index.js +1 -1
  44. package/cjs/picker/index.d.ts +1 -1
  45. package/cjs/picker/index.js +1 -1
  46. package/cjs/picker-view/index.d.ts +1 -1
  47. package/cjs/picker-view/index.js +1 -1
  48. package/cjs/popover/index.d.ts +1 -1
  49. package/cjs/popover/index.js +1 -1
  50. package/cjs/popup-swiper/index.js +3 -2
  51. package/cjs/radio/index.d.ts +1 -1
  52. package/cjs/radio/index.js +1 -1
  53. package/cjs/rate/index.d.ts +1 -1
  54. package/cjs/rate/index.js +1 -1
  55. package/cjs/search-bar/association.d.ts +3 -0
  56. package/cjs/search-bar/association.js +92 -0
  57. package/cjs/search-bar/cancel-button.d.ts +10 -0
  58. package/cjs/search-bar/cancel-button.js +41 -0
  59. package/cjs/search-bar/demo/style/css/mobile.css +5 -0
  60. package/cjs/search-bar/demo/style/mobile.less +9 -0
  61. package/cjs/search-bar/highlight.d.ts +12 -0
  62. package/cjs/search-bar/highlight.js +77 -0
  63. package/cjs/search-bar/index.d.ts +13 -0
  64. package/cjs/search-bar/index.js +231 -0
  65. package/cjs/search-bar/style/css/index.css +148 -0
  66. package/cjs/search-bar/style/css/index.d.ts +2 -0
  67. package/cjs/search-bar/style/css/index.js +5 -0
  68. package/cjs/search-bar/style/index.d.ts +2 -0
  69. package/cjs/search-bar/style/index.js +5 -0
  70. package/cjs/search-bar/style/index.less +111 -0
  71. package/cjs/search-bar/type.d.ts +163 -0
  72. package/cjs/search-bar/type.js +3 -0
  73. package/cjs/slider/index.d.ts +1 -1
  74. package/cjs/slider/index.js +1 -1
  75. package/cjs/steps/index.d.ts +1 -1
  76. package/cjs/steps/index.js +1 -1
  77. package/cjs/sticky/index.d.ts +1 -1
  78. package/cjs/style.d.ts +2 -0
  79. package/cjs/style.js +4 -0
  80. package/cjs/swipe-action/demo/style/css/mobile.css +5 -0
  81. package/cjs/swipe-action/demo/style/mobile.less +9 -0
  82. package/cjs/swipe-action/index.d.ts +12 -0
  83. package/cjs/swipe-action/index.js +337 -0
  84. package/cjs/swipe-action/item.d.ts +11 -0
  85. package/cjs/swipe-action/item.js +52 -0
  86. package/cjs/swipe-action/style/css/index.css +88 -0
  87. package/cjs/swipe-action/style/css/index.d.ts +2 -0
  88. package/cjs/swipe-action/style/css/index.js +5 -0
  89. package/cjs/swipe-action/style/index.d.ts +2 -0
  90. package/cjs/swipe-action/style/index.js +5 -0
  91. package/cjs/swipe-action/style/index.less +89 -0
  92. package/cjs/swipe-action/type.d.ts +123 -0
  93. package/cjs/swipe-action/type.js +3 -0
  94. package/cjs/switch/index.d.ts +1 -1
  95. package/cjs/switch/index.js +1 -1
  96. package/cjs/tabs/tab-pane.js +5 -1
  97. package/cjs/tag/index.d.ts +1 -1
  98. package/cjs/tag/index.js +1 -1
  99. package/cjs/textarea/index.d.ts +1 -1
  100. package/cjs/textarea/index.js +1 -1
  101. package/dist/index.js +7394 -6570
  102. package/dist/index.min.js +6 -6
  103. package/dist/style.css +267 -64
  104. package/dist/style.min.css +1 -1
  105. package/esm/avatar/index.d.ts +1 -1
  106. package/esm/avatar/index.js +1 -1
  107. package/esm/badge/index.d.ts +1 -1
  108. package/esm/badge/index.js +1 -1
  109. package/esm/button/style/css/index.css +64 -64
  110. package/esm/button/style/index.less +7 -5
  111. package/esm/carousel/index.d.ts +1 -1
  112. package/esm/carousel/index.js +1 -1
  113. package/esm/cell/index.d.ts +1 -1
  114. package/esm/cell/index.js +1 -1
  115. package/esm/checkbox/index.d.ts +1 -1
  116. package/esm/checkbox/index.js +1 -1
  117. package/esm/collapse/index.d.ts +1 -1
  118. package/esm/collapse/index.js +1 -1
  119. package/esm/count-down/index.d.ts +1 -1
  120. package/esm/count-down/index.js +1 -1
  121. package/esm/date-picker/index.d.ts +1 -1
  122. package/esm/date-picker/index.js +1 -1
  123. package/esm/dropdown/dropdown.js +36 -20
  124. package/esm/dropdown/style/css/index.css +3 -0
  125. package/esm/dropdown/style/index.less +2 -0
  126. package/esm/ellipsis/components/js-ellipsis.js +2 -3
  127. package/esm/ellipsis/index.d.ts +1 -1
  128. package/esm/ellipsis/index.js +3 -4
  129. package/esm/image/index.d.ts +1 -1
  130. package/esm/image/index.js +1 -1
  131. package/esm/image-picker/index.d.ts +4 -175
  132. package/esm/image-picker/index.js +30 -17
  133. package/esm/image-picker/type.d.ts +174 -0
  134. package/esm/image-picker/type.js +1 -0
  135. package/esm/image-preview/index.d.ts +1 -1
  136. package/esm/image-preview/index.js +1 -1
  137. package/esm/index.d.ts +2 -0
  138. package/esm/index.js +2 -0
  139. package/esm/input/hooks.js +49 -8
  140. package/esm/input/index.d.ts +1 -1
  141. package/esm/input/index.js +1 -1
  142. package/esm/input/props.d.ts +8 -2
  143. package/esm/notice-bar/index.d.ts +1 -1
  144. package/esm/notice-bar/index.js +1 -1
  145. package/esm/picker/index.d.ts +1 -1
  146. package/esm/picker/index.js +1 -1
  147. package/esm/picker-view/index.d.ts +1 -1
  148. package/esm/picker-view/index.js +1 -1
  149. package/esm/popover/index.d.ts +1 -1
  150. package/esm/popover/index.js +1 -1
  151. package/esm/popup-swiper/index.js +3 -2
  152. package/esm/radio/index.d.ts +1 -1
  153. package/esm/radio/index.js +1 -1
  154. package/esm/rate/index.d.ts +1 -1
  155. package/esm/rate/index.js +1 -1
  156. package/esm/search-bar/association.d.ts +3 -0
  157. package/esm/search-bar/association.js +82 -0
  158. package/esm/search-bar/cancel-button.d.ts +10 -0
  159. package/esm/search-bar/cancel-button.js +30 -0
  160. package/esm/search-bar/demo/style/css/mobile.css +5 -0
  161. package/esm/search-bar/demo/style/mobile.less +9 -0
  162. package/esm/search-bar/highlight.d.ts +12 -0
  163. package/esm/search-bar/highlight.js +66 -0
  164. package/esm/search-bar/index.d.ts +13 -0
  165. package/esm/search-bar/index.js +212 -0
  166. package/esm/search-bar/style/css/index.css +148 -0
  167. package/esm/search-bar/style/css/index.d.ts +2 -0
  168. package/esm/search-bar/style/css/index.js +2 -0
  169. package/esm/search-bar/style/index.d.ts +2 -0
  170. package/esm/search-bar/style/index.js +2 -0
  171. package/esm/search-bar/style/index.less +111 -0
  172. package/esm/search-bar/type.d.ts +163 -0
  173. package/esm/search-bar/type.js +1 -0
  174. package/esm/slider/index.d.ts +1 -1
  175. package/esm/slider/index.js +1 -1
  176. package/esm/steps/index.d.ts +1 -1
  177. package/esm/steps/index.js +1 -1
  178. package/esm/sticky/index.d.ts +1 -1
  179. package/esm/style.d.ts +2 -0
  180. package/esm/style.js +2 -0
  181. package/esm/swipe-action/demo/style/css/mobile.css +5 -0
  182. package/esm/swipe-action/demo/style/mobile.less +9 -0
  183. package/esm/swipe-action/index.d.ts +12 -0
  184. package/esm/swipe-action/index.js +320 -0
  185. package/esm/swipe-action/item.d.ts +11 -0
  186. package/esm/swipe-action/item.js +42 -0
  187. package/esm/swipe-action/style/css/index.css +88 -0
  188. package/esm/swipe-action/style/css/index.d.ts +2 -0
  189. package/esm/swipe-action/style/css/index.js +2 -0
  190. package/esm/swipe-action/style/index.d.ts +2 -0
  191. package/esm/swipe-action/style/index.js +2 -0
  192. package/esm/swipe-action/style/index.less +89 -0
  193. package/esm/swipe-action/type.d.ts +123 -0
  194. package/esm/swipe-action/type.js +1 -0
  195. package/esm/switch/index.d.ts +1 -1
  196. package/esm/switch/index.js +1 -1
  197. package/esm/tabs/tab-pane.js +5 -1
  198. package/esm/tag/index.d.ts +1 -1
  199. package/esm/tag/index.js +1 -1
  200. package/esm/textarea/index.d.ts +1 -1
  201. package/esm/textarea/index.js +1 -1
  202. package/package.json +3 -3
  203. package/tokens/app/arcodesign/default/css-variables.less +34 -0
  204. package/tokens/app/arcodesign/default/index.d.ts +34 -0
  205. package/tokens/app/arcodesign/default/index.js +34 -0
  206. package/tokens/app/arcodesign/default/index.json +398 -0
  207. package/tokens/app/arcodesign/default/index.less +34 -0
  208. package/umd/avatar/index.d.ts +1 -1
  209. package/umd/avatar/index.js +1 -1
  210. package/umd/badge/index.d.ts +1 -1
  211. package/umd/badge/index.js +1 -1
  212. package/umd/button/style/css/index.css +64 -64
  213. package/umd/button/style/index.less +7 -5
  214. package/umd/carousel/index.d.ts +1 -1
  215. package/umd/carousel/index.js +1 -1
  216. package/umd/cell/index.d.ts +1 -1
  217. package/umd/cell/index.js +1 -1
  218. package/umd/checkbox/index.d.ts +1 -1
  219. package/umd/checkbox/index.js +1 -1
  220. package/umd/collapse/index.d.ts +1 -1
  221. package/umd/collapse/index.js +1 -1
  222. package/umd/count-down/index.d.ts +1 -1
  223. package/umd/count-down/index.js +1 -1
  224. package/umd/date-picker/index.d.ts +1 -1
  225. package/umd/date-picker/index.js +1 -1
  226. package/umd/dropdown/dropdown.js +36 -20
  227. package/umd/dropdown/style/css/index.css +3 -0
  228. package/umd/dropdown/style/index.less +2 -0
  229. package/umd/ellipsis/components/js-ellipsis.js +2 -3
  230. package/umd/ellipsis/index.d.ts +1 -1
  231. package/umd/ellipsis/index.js +3 -4
  232. package/umd/image/index.d.ts +1 -1
  233. package/umd/image/index.js +1 -1
  234. package/umd/image-picker/index.d.ts +4 -175
  235. package/umd/image-picker/index.js +40 -22
  236. package/umd/image-picker/type.d.ts +174 -0
  237. package/umd/image-picker/type.js +17 -0
  238. package/umd/image-preview/index.d.ts +1 -1
  239. package/umd/image-preview/index.js +1 -1
  240. package/umd/index.d.ts +2 -0
  241. package/umd/index.js +9 -5
  242. package/umd/input/hooks.js +48 -7
  243. package/umd/input/index.d.ts +1 -1
  244. package/umd/input/index.js +1 -1
  245. package/umd/input/props.d.ts +8 -2
  246. package/umd/notice-bar/index.d.ts +1 -1
  247. package/umd/notice-bar/index.js +1 -1
  248. package/umd/picker/index.d.ts +1 -1
  249. package/umd/picker/index.js +1 -1
  250. package/umd/picker-view/index.d.ts +1 -1
  251. package/umd/picker-view/index.js +1 -1
  252. package/umd/popover/index.d.ts +1 -1
  253. package/umd/popover/index.js +1 -1
  254. package/umd/popup-swiper/index.js +3 -2
  255. package/umd/radio/index.d.ts +1 -1
  256. package/umd/radio/index.js +1 -1
  257. package/umd/rate/index.d.ts +1 -1
  258. package/umd/rate/index.js +1 -1
  259. package/umd/search-bar/association.d.ts +3 -0
  260. package/umd/search-bar/association.js +101 -0
  261. package/umd/search-bar/cancel-button.d.ts +10 -0
  262. package/umd/search-bar/cancel-button.js +52 -0
  263. package/umd/search-bar/demo/style/css/mobile.css +5 -0
  264. package/umd/search-bar/demo/style/mobile.less +9 -0
  265. package/umd/search-bar/highlight.d.ts +12 -0
  266. package/umd/search-bar/highlight.js +87 -0
  267. package/umd/search-bar/index.d.ts +13 -0
  268. package/umd/search-bar/index.js +229 -0
  269. package/umd/search-bar/style/css/index.css +148 -0
  270. package/umd/search-bar/style/css/index.d.ts +2 -0
  271. package/umd/search-bar/style/css/index.js +15 -0
  272. package/umd/search-bar/style/index.d.ts +2 -0
  273. package/umd/search-bar/style/index.js +15 -0
  274. package/umd/search-bar/style/index.less +111 -0
  275. package/umd/search-bar/type.d.ts +163 -0
  276. package/umd/search-bar/type.js +17 -0
  277. package/umd/slider/index.d.ts +1 -1
  278. package/umd/slider/index.js +1 -1
  279. package/umd/steps/index.d.ts +1 -1
  280. package/umd/steps/index.js +1 -1
  281. package/umd/sticky/index.d.ts +1 -1
  282. package/umd/style.d.ts +2 -0
  283. package/umd/style.js +4 -4
  284. package/umd/swipe-action/demo/style/css/mobile.css +5 -0
  285. package/umd/swipe-action/demo/style/mobile.less +9 -0
  286. package/umd/swipe-action/index.d.ts +12 -0
  287. package/umd/swipe-action/index.js +342 -0
  288. package/umd/swipe-action/item.d.ts +11 -0
  289. package/umd/swipe-action/item.js +62 -0
  290. package/umd/swipe-action/style/css/index.css +88 -0
  291. package/umd/swipe-action/style/css/index.d.ts +2 -0
  292. package/umd/swipe-action/style/css/index.js +15 -0
  293. package/umd/swipe-action/style/index.d.ts +2 -0
  294. package/umd/swipe-action/style/index.js +15 -0
  295. package/umd/swipe-action/style/index.less +89 -0
  296. package/umd/swipe-action/type.d.ts +123 -0
  297. package/umd/swipe-action/type.js +17 -0
  298. package/umd/switch/index.d.ts +1 -1
  299. package/umd/switch/index.js +1 -1
  300. package/umd/tabs/tab-pane.js +5 -1
  301. package/umd/tag/index.d.ts +1 -1
  302. package/umd/tag/index.js +1 -1
  303. package/umd/textarea/index.d.ts +1 -1
  304. package/umd/textarea/index.js +1 -1
@@ -1,181 +1,10 @@
1
- import React, { InputHTMLAttributes } from 'react';
2
- import { ImageProps } from '../image';
3
- export interface ImagePickItem {
4
- /**
5
- * 图片地址
6
- * @en Image Url
7
- */
8
- url: string;
9
- /**
10
- * 图片文件
11
- * @en Image File
12
- */
13
- file?: File;
14
- /**
15
- * 图片状态
16
- * @en Image Status
17
- * @default 以图片自身加载状态而定
18
- * @default_en According to inner status of the image
19
- */
20
- status?: 'loaded' | 'loading' | 'error';
21
- }
22
- export interface AdapterFile {
23
- url?: string;
24
- size: number;
25
- name: string;
26
- }
27
- export interface SelectCallback {
28
- files: AdapterFile[];
29
- }
30
- export interface ImagePickerProps {
31
- /**
32
- * 自定义类名
33
- * @en Custom className
34
- */
35
- className?: string;
36
- /**
37
- * 自定义样式
38
- * @en Custom stylesheet
39
- */
40
- style?: React.CSSProperties;
41
- /**
42
- * 已选择图片列表
43
- * @en selected images list
44
- */
45
- images: ImagePickItem[];
46
- /**
47
- * 可以选择的文件类型
48
- * @en Available File Types
49
- * @default 'image/*'
50
- */
51
- accept?: string;
52
- /**
53
- * 是否支持多选
54
- * @en Whether To Support Multiple Selection
55
- */
56
- multiple?: boolean;
57
- /**
58
- * 图片选取模式 Image selection mode [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
59
- * @en Whether To Support Multiple Selection [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
60
- */
61
- capture?: InputHTMLAttributes<unknown>['capture'];
62
- /**
63
- * 一行展示图片张数
64
- * @en The Number Of Pictures Displayed In A Row
65
- * @default 3
66
- */
67
- columns?: number;
68
- /**
69
- * 格子间的间距
70
- * @en spacing between grids
71
- * @default 8
72
- */
73
- gutter?: number;
74
- /**
75
- * 最多选择图片张数,超出数量自动隐藏上传按钮,0表示不做限制
76
- * @en max Pictures Can Choose
77
- */
78
- limit?: number;
79
- /**
80
- * 文件大小限制,单位为K
81
- * @en File size limit, in K
82
- */
83
- maxSize?: number;
84
- /**
85
- * 是否隐藏删除Icon
86
- * @en Whether to hide delete Icon
87
- * @default false
88
- */
89
- hideDelete?: boolean;
90
- /**
91
- * 是否隐藏选择Icon
92
- * @en Whether to hide Select Icon
93
- * @default false
94
- */
95
- hideSelect?: boolean;
96
- /**
97
- * 是否总是展示选择Icon,默认情况下当图片数量超出limit值时会自动隐藏选择Icon
98
- * @en Whether to always show Select Icon
99
- * @default false
100
- */
101
- alwaysShowSelect?: boolean;
102
- /**
103
- * 禁用选择和删除图片
104
- * @en Disable Select & Delete Image
105
- */
106
- disabled?: boolean;
107
- /**
108
- * 自定义删除图标
109
- * @en Defined Delete Icon
110
- */
111
- deleteIcon?: React.ReactNode;
112
- /**
113
- * 自定义选择图标
114
- * @en Defined Select Icon
115
- */
116
- selectIcon?: React.ReactNode;
117
- /**
118
- * 透传给图片的属性
119
- * @en Attributes passed through to the image
120
- */
121
- imageProps?: Partial<ImageProps>;
122
- /**
123
- * 自定义上传失败展示
124
- * @en Defined upload failed display
125
- */
126
- renderError?: (index?: number) => React.ReactNode | React.ReactNode;
127
- /**
128
- * 自定义上传中展示
129
- * @en Defined uploading display
130
- */
131
- renderLoading?: (index?: number) => React.ReactNode | React.ReactNode;
132
- /**
133
- * 上传方法
134
- * @en upload function
135
- */
136
- upload?: (file: ImagePickItem) => Promise<ImagePickItem | null>;
137
- /**
138
- * 已选图片列表发生变化
139
- * @en The list of selected images changes
140
- */
141
- onChange?: (fileList: ImagePickItem[]) => void;
142
- /**
143
- * 图片超过限制大小
144
- * @en Image exceeds size limit
145
- */
146
- onMaxSizeExceed?: (file: File) => void;
147
- /**
148
- * 选择张数超过限制
149
- * @en The number of pictures exceeds the limit
150
- */
151
- onLimitExceed?: (files: File[]) => void;
152
- /**
153
- * 图片点击
154
- * @en click event
155
- */
156
- onClick?: (e: React.MouseEvent<HTMLElement, MouseEvent>, image: ImagePickItem, index: number) => void;
157
- /**
158
- * 图片长按事件
159
- * @en long press event
160
- */
161
- onLongPress?: (e: React.TouchEvent<HTMLElement>, image: ImagePickItem, index: number) => void;
162
- /**
163
- * 图片选择适配器
164
- * @en Select Adaptor
165
- */
166
- selectAdapter?: () => Promise<SelectCallback>;
167
- }
168
- export interface ImagePickerRef {
169
- /**
170
- * 最外层 DOM 元素
171
- * @en The outer DOM element of the component
172
- */
173
- dom: HTMLDivElement | null;
174
- }
1
+ import React from 'react';
2
+ import { ImagePickerProps, ImagePickerRef } from './type';
3
+ export * from './type';
175
4
  /**
176
5
  * 图片选择器组件
177
6
  * @en ImagePicker Component
178
- * @type 数据输入
7
+ * @type 数据录入
179
8
  * @type_en Data Entry
180
9
  * @name 图片选择器
181
10
  * @name_en ImagePicker
@@ -1,20 +1,22 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import React, { useRef, forwardRef, useImperativeHandle } from 'react';
3
+ import { Promise } from 'es6-promise';
3
4
  import { cls, defaultLocale } from '@arco-design/mobile-utils';
4
5
  import { ContextLayout } from '../context-provider';
5
6
  import { IconClose } from '../icon';
6
7
  import Image from '../image';
7
8
  import Grid from '../grid';
8
9
  import AddIcon from './add-icon';
9
-
10
+ export * from './type';
10
11
  /**
11
12
  * 图片选择器组件
12
13
  * @en ImagePicker Component
13
- * @type 数据输入
14
+ * @type 数据录入
14
15
  * @type_en Data Entry
15
16
  * @name 图片选择器
16
17
  * @name_en ImagePicker
17
18
  */
19
+
18
20
  var ImagePicker = /*#__PURE__*/forwardRef(function (props, ref) {
19
21
  var _props$className = props.className,
20
22
  className = _props$className === void 0 ? '' : _props$className,
@@ -57,6 +59,7 @@ var ImagePicker = /*#__PURE__*/forwardRef(function (props, ref) {
57
59
  selectAdapter = props.selectAdapter;
58
60
  var domRef = useRef(null);
59
61
  var fileRef = useRef(null);
62
+ var cacheRef = useRef([]);
60
63
  useImperativeHandle(ref, function () {
61
64
  return {
62
65
  dom: domRef.current
@@ -92,7 +95,7 @@ var ImagePicker = /*#__PURE__*/forwardRef(function (props, ref) {
92
95
  };
93
96
 
94
97
  var handleChange = function handleChange(event, fromAdapter) {
95
- var files = [].concat(event.target.files || []).filter(function (file) {
98
+ var files = Array.prototype.filter.call(event.target.files || [], function (file) {
96
99
  // 过滤maxSize
97
100
  if (maxSize && file.size > maxSize * 1024) {
98
101
  onMaxSizeExceed && onMaxSizeExceed(file);
@@ -123,20 +126,30 @@ var ImagePicker = /*#__PURE__*/forwardRef(function (props, ref) {
123
126
  file: files[index]
124
127
  };
125
128
  });
126
- var cacheRes = [].concat(images, res);
127
- onChange(cacheRes); // 执行upload
129
+ cacheRef.current = [].concat(images, res);
130
+ onChange([].concat(cacheRef.current)); // 执行upload
128
131
 
129
132
  if (typeof upload === 'function') {
130
- var propsImageLength = images.length;
131
- files.forEach(function (_file, index) {
132
- upload(cacheRes[propsImageLength + index]).then(function (data) {
133
- cacheRes[propsImageLength + index] = _extends({}, cacheRes[propsImageLength + index], data, {
133
+ files.forEach(function (_file) {
134
+ upload(cacheRef.current.find(function (_ref) {
135
+ var file = _ref.file;
136
+ return file === _file;
137
+ })).then(function (data) {
138
+ var index = cacheRef.current.findIndex(function (_ref2) {
139
+ var file = _ref2.file;
140
+ return file === _file;
141
+ });
142
+ cacheRef.current[index] = _extends({}, cacheRef.current[index], data, {
134
143
  status: undefined
135
144
  });
136
145
  }).catch(function () {
137
- cacheRes[propsImageLength + index].status = 'error';
146
+ var index = cacheRef.current.findIndex(function (_ref3) {
147
+ var file = _ref3.file;
148
+ return file === _file;
149
+ });
150
+ cacheRef.current[index].status = 'error';
138
151
  }).finally(function () {
139
- onChange([].concat(cacheRes));
152
+ onChange([].concat(cacheRef.current));
140
153
  });
141
154
  });
142
155
  }
@@ -171,8 +184,8 @@ var ImagePicker = /*#__PURE__*/forwardRef(function (props, ref) {
171
184
  var handleSelect = function handleSelect() {
172
185
  var _fileRef$current;
173
186
 
174
- selectAdapter ? selectAdapter().then(function (_ref) {
175
- var files = _ref.files;
187
+ selectAdapter ? selectAdapter().then(function (_ref4) {
188
+ var files = _ref4.files;
176
189
  return handleChange({
177
190
  target: {
178
191
  files: files
@@ -267,12 +280,12 @@ var ImagePicker = /*#__PURE__*/forwardRef(function (props, ref) {
267
280
  return data;
268
281
  };
269
282
 
270
- return /*#__PURE__*/React.createElement(ContextLayout, null, function (_ref2) {
283
+ return /*#__PURE__*/React.createElement(ContextLayout, null, function (_ref5) {
271
284
  var _cls2;
272
285
 
273
- var prefixCls = _ref2.prefixCls,
274
- _ref2$locale = _ref2.locale,
275
- locale = _ref2$locale === void 0 ? defaultLocale : _ref2$locale;
286
+ var prefixCls = _ref5.prefixCls,
287
+ _ref5$locale = _ref5.locale,
288
+ locale = _ref5$locale === void 0 ? defaultLocale : _ref5$locale;
276
289
  return /*#__PURE__*/React.createElement("div", {
277
290
  className: cls(prefixCls + "-image-picker", className, (_cls2 = {}, _cls2[prefixCls + "-image-picker-disabled"] = disabled, _cls2)),
278
291
  style: style,
@@ -0,0 +1,174 @@
1
+ import { InputHTMLAttributes } from 'react';
2
+ import { ImageProps } from '../image';
3
+ export interface ImagePickItem {
4
+ /**
5
+ * 图片地址
6
+ * @en Image Url
7
+ */
8
+ url: string;
9
+ /**
10
+ * 图片文件
11
+ * @en Image File
12
+ */
13
+ file?: File;
14
+ /**
15
+ * 图片状态
16
+ * @en Image Status
17
+ * @default 以图片自身加载状态而定
18
+ * @default_en According to inner status of the image
19
+ */
20
+ status?: 'loaded' | 'loading' | 'error';
21
+ }
22
+ export interface AdapterFile {
23
+ url?: string;
24
+ size: number;
25
+ name: string;
26
+ }
27
+ export interface SelectCallback {
28
+ files: AdapterFile[];
29
+ }
30
+ export interface ImagePickerProps {
31
+ /**
32
+ * 自定义类名
33
+ * @en Custom className
34
+ */
35
+ className?: string;
36
+ /**
37
+ * 自定义样式
38
+ * @en Custom stylesheet
39
+ */
40
+ style?: React.CSSProperties;
41
+ /**
42
+ * 已选择图片列表
43
+ * @en selected images list
44
+ */
45
+ images: ImagePickItem[];
46
+ /**
47
+ * 可以选择的文件类型
48
+ * @en Available File Types
49
+ * @default 'image/*'
50
+ */
51
+ accept?: string;
52
+ /**
53
+ * 是否支持多选
54
+ * @en Whether To Support Multiple Selection
55
+ */
56
+ multiple?: boolean;
57
+ /**
58
+ * 图片选取模式 Image selection mode [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
59
+ * @en Whether To Support Multiple Selection [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
60
+ */
61
+ capture?: InputHTMLAttributes<unknown>['capture'];
62
+ /**
63
+ * 一行展示图片张数
64
+ * @en The Number Of Pictures Displayed In A Row
65
+ * @default 3
66
+ */
67
+ columns?: number;
68
+ /**
69
+ * 格子间的间距
70
+ * @en spacing between grids
71
+ * @default 8
72
+ */
73
+ gutter?: number;
74
+ /**
75
+ * 最多选择图片张数,超出数量自动隐藏上传按钮,0表示不做限制
76
+ * @en max Pictures Can Choose
77
+ */
78
+ limit?: number;
79
+ /**
80
+ * 文件大小限制,单位为K
81
+ * @en File size limit, in K
82
+ */
83
+ maxSize?: number;
84
+ /**
85
+ * 是否隐藏删除Icon
86
+ * @en Whether to hide delete Icon
87
+ * @default false
88
+ */
89
+ hideDelete?: boolean;
90
+ /**
91
+ * 是否隐藏选择Icon
92
+ * @en Whether to hide Select Icon
93
+ * @default false
94
+ */
95
+ hideSelect?: boolean;
96
+ /**
97
+ * 是否总是展示选择Icon,默认情况下当图片数量超出limit值时会自动隐藏选择Icon
98
+ * @en Whether to always show Select Icon
99
+ * @default false
100
+ */
101
+ alwaysShowSelect?: boolean;
102
+ /**
103
+ * 禁用选择和删除图片
104
+ * @en Disable Select & Delete Image
105
+ */
106
+ disabled?: boolean;
107
+ /**
108
+ * 自定义删除图标
109
+ * @en Defined Delete Icon
110
+ */
111
+ deleteIcon?: React.ReactNode;
112
+ /**
113
+ * 自定义选择图标
114
+ * @en Defined Select Icon
115
+ */
116
+ selectIcon?: React.ReactNode;
117
+ /**
118
+ * 透传给图片的属性
119
+ * @en Attributes passed through to the image
120
+ */
121
+ imageProps?: Partial<ImageProps>;
122
+ /**
123
+ * 自定义上传失败展示
124
+ * @en Defined upload failed display
125
+ */
126
+ renderError?: (index?: number) => React.ReactNode | React.ReactNode;
127
+ /**
128
+ * 自定义上传中展示
129
+ * @en Defined uploading display
130
+ */
131
+ renderLoading?: (index?: number) => React.ReactNode | React.ReactNode;
132
+ /**
133
+ * 上传方法
134
+ * @en upload function
135
+ */
136
+ upload?: (file: ImagePickItem) => Promise<ImagePickItem | null>;
137
+ /**
138
+ * 已选图片列表发生变化
139
+ * @en The list of selected images changes
140
+ */
141
+ onChange?: (fileList: ImagePickItem[]) => void;
142
+ /**
143
+ * 图片超过限制大小
144
+ * @en Image exceeds size limit
145
+ */
146
+ onMaxSizeExceed?: (file: File) => void;
147
+ /**
148
+ * 选择张数超过限制
149
+ * @en The number of pictures exceeds the limit
150
+ */
151
+ onLimitExceed?: (files: File[]) => void;
152
+ /**
153
+ * 图片点击
154
+ * @en click event
155
+ */
156
+ onClick?: (e: React.MouseEvent<HTMLElement, MouseEvent>, image: ImagePickItem, index: number) => void;
157
+ /**
158
+ * 图片长按事件
159
+ * @en long press event
160
+ */
161
+ onLongPress?: (e: React.TouchEvent<HTMLElement>, image: ImagePickItem, index: number) => void;
162
+ /**
163
+ * 图片选择适配器
164
+ * @en Select Adaptor
165
+ */
166
+ selectAdapter?: () => Promise<SelectCallback>;
167
+ }
168
+ export interface ImagePickerRef {
169
+ /**
170
+ * 最外层 DOM 元素
171
+ * @en The outer DOM element of the component
172
+ */
173
+ dom: HTMLDivElement | null;
174
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -280,7 +280,7 @@ declare const _default: React.ForwardRefExoticComponent<ImagePreviewProps & Reac
280
280
  /**
281
281
  * 图片预览组件,支持循环轮播、双指/双击缩放、缩略图放大效果。
282
282
  * @en The image preview, supports circular rotation, two-finger/double-tap zoom, and thumbnail zoom effects.
283
- * @type 数据展示
283
+ * @type 信息展示
284
284
  * @type_en Data Display
285
285
  * @name 图片预览
286
286
  * @name_en ImagePreview
@@ -983,7 +983,7 @@ export function methodsGenerator(Comp) {
983
983
  /**
984
984
  * 图片预览组件,支持循环轮播、双指/双击缩放、缩略图放大效果。
985
985
  * @en The image preview, supports circular rotation, two-finger/double-tap zoom, and thumbnail zoom effects.
986
- * @type 数据展示
986
+ * @type 信息展示
987
987
  * @type_en Data Display
988
988
  * @name 图片预览
989
989
  * @name_en ImagePreview
package/esm/index.d.ts CHANGED
@@ -41,8 +41,10 @@ export { default as PullRefresh } from './pull-refresh';
41
41
  export { default as Radio } from './radio';
42
42
  export { default as Rate } from './rate';
43
43
  export { default as Slider } from './slider';
44
+ export { default as SearchBar } from './search-bar';
44
45
  export { default as Steps } from './steps';
45
46
  export { default as Sticky } from './sticky';
47
+ export { default as SwipeAction } from './swipe-action';
46
48
  export { default as SwipeLoad } from './swipe-load';
47
49
  export { default as TabBar } from './tab-bar';
48
50
  export { default as Tag } from './tag';
package/esm/index.js CHANGED
@@ -41,8 +41,10 @@ export { default as PullRefresh } from './pull-refresh';
41
41
  export { default as Radio } from './radio';
42
42
  export { default as Rate } from './rate';
43
43
  export { default as Slider } from './slider';
44
+ export { default as SearchBar } from './search-bar';
44
45
  export { default as Steps } from './steps';
45
46
  export { default as Sticky } from './sticky';
47
+ export { default as SwipeAction } from './swipe-action';
46
48
  export { default as SwipeLoad } from './swipe-load';
47
49
  export { default as TabBar } from './tab-bar';
48
50
  export { default as Tag } from './tag';
@@ -30,6 +30,8 @@ export function useInputLogic(props, inputRef) {
30
30
  clearShowType = _props$clearShowType === void 0 ? 'focus' : _props$clearShowType,
31
31
  _props$clearIcon = props.clearIcon,
32
32
  clearIcon = _props$clearIcon === void 0 ? /*#__PURE__*/React.createElement(IconClear, null) : _props$clearIcon,
33
+ _props$preventEventWh = props.preventEventWhenClearing,
34
+ preventEventWhenClearing = _props$preventEventWh === void 0 ? true : _props$preventEventWh,
33
35
  onClear = props.onClear,
34
36
  autoFocus = props.autoFocus;
35
37
 
@@ -42,8 +44,30 @@ export function useInputLogic(props, inputRef) {
42
44
  }),
43
45
  showClear = _useState2[0],
44
46
  toggleClear = _useState2[1];
45
-
46
- var focusingRef = useRef(false);
47
+ /**
48
+ * clear相关问题背景
49
+ * 如果点击clear按钮之前已经是focusing状态了,那么在点完clear按钮之后会手动聚焦一下
50
+ * 该行为将导致onClear事件触发时,也会触发一次onBlur和onFocus事件,可能影响一些组件外的代码逻辑
51
+ *
52
+ * e.g. 假设input按钮右侧有一个按钮仅在聚焦时展示
53
+ * 实现代码大致是:onBlur设置其visible为false,onFocus设置其visible为true
54
+ * 那么这个按钮就会因为clear的点击造成一瞬的闪烁
55
+ *
56
+ * 解决思路
57
+ * 先来看一下,在输入框已激活的状态时,点击清除按钮后,组件的一些事件的触发顺序
58
+ * handleBlur -> handleClear -> handleFocus -> onBlur(外部回调) -> onFocus(外部回调)
59
+ * 可以看到外部的onBlur和onFocus回调都是在handleClear函数之后被调用
60
+ * 因此可以在handleClear中设置一个shouldPreventEvent的boolean标志
61
+ * 如果这个标志为true,则跳过调用外部的onBlur和onFocus,并在最后再将标志置回false
62
+ *
63
+ */
64
+
65
+
66
+ var _useState3 = useState(false),
67
+ isFocusing = _useState3[0],
68
+ setIsFocusing = _useState3[1];
69
+
70
+ var shouldPreventEvent = useRef(false);
47
71
  var actualInputValue = value !== void 0 ? value : inputValue;
48
72
  var system = useSystem();
49
73
  var wrapRef = useRef(null);
@@ -111,7 +135,12 @@ export function useInputLogic(props, inputRef) {
111
135
 
112
136
  function handleFocus(e) {
113
137
  nextTick(function () {
114
- focusingRef.current = true;
138
+ if (preventEventWhenClearing && shouldPreventEvent.current) {
139
+ shouldPreventEvent.current = false;
140
+ return;
141
+ }
142
+
143
+ setIsFocusing(true);
115
144
  clearShowType === 'focus' && toggleClear(true);
116
145
  onFocus && onFocus(e);
117
146
  });
@@ -119,7 +148,11 @@ export function useInputLogic(props, inputRef) {
119
148
 
120
149
  function handleBlur(e) {
121
150
  nextTick(function () {
122
- focusingRef.current = false;
151
+ if (preventEventWhenClearing && shouldPreventEvent.current) {
152
+ return;
153
+ }
154
+
155
+ setIsFocusing(false);
123
156
  clearShowType === 'focus' && toggleClear(false);
124
157
  onBlur && onBlur(e);
125
158
  });
@@ -128,7 +161,7 @@ export function useInputLogic(props, inputRef) {
128
161
  function handleClick(e) {
129
162
  // 安卓才会有键盘切换不过来的问题,ios不开启此项,因为blur之后不能再自动focus
130
163
  // @en Android will have the problem that the keyboard cannot be switched. iOS does not enable this, because it can no longer automatically focus after blur.
131
- if (blurBeforeFocus && system === 'android' && !focusingRef.current) {
164
+ if (blurBeforeFocus && system === 'android' && !isFocusing) {
132
165
  inputRef.current && inputRef.current.blur();
133
166
  nextTick(function () {
134
167
  inputRef.current && inputRef.current.focus();
@@ -151,18 +184,26 @@ export function useInputLogic(props, inputRef) {
151
184
  onClear && onClear(e); // 当点击clear前是focus时强制执行focus
152
185
  // @en Enforce focus when focus is before clicking clear
153
186
 
154
- if (focusingRef.current) {
187
+ if (isFocusing) {
188
+ if (preventEventWhenClearing) {
189
+ shouldPreventEvent.current = true;
190
+ }
191
+
155
192
  inputRef.current && inputRef.current.focus();
156
193
  }
157
194
  });
158
195
  }
159
196
 
197
+ function renderPendNode(pend) {
198
+ return typeof pend === 'function' ? pend(isFocusing, actualInputValue) : pend;
199
+ }
200
+
160
201
  function renderWrapper(prefixCls, type, children) {
161
202
  return /*#__PURE__*/React.createElement("div", {
162
203
  className: prefixCls + "-container all-border-box " + (className || ''),
163
204
  style: style,
164
205
  ref: wrapRef
165
- }, prepend, /*#__PURE__*/React.createElement("div", {
206
+ }, renderPendNode(prepend), /*#__PURE__*/React.createElement("div", {
166
207
  className: cls(prefixCls + "-wrap", type, "border-" + border, system, {
167
208
  disabled: disabled
168
209
  }, {
@@ -181,7 +222,7 @@ export function useInputLogic(props, inputRef) {
181
222
  onClick: handleClear
182
223
  }, clearIcon) : null, suffix ? /*#__PURE__*/React.createElement("div", {
183
224
  className: prefixCls + "-suffix"
184
- }, suffix) : null), append);
225
+ }, suffix) : null), renderPendNode(append));
185
226
  }
186
227
 
187
228
  return {
@@ -43,7 +43,7 @@ export interface InputRef {
43
43
  /**
44
44
  * 输入框组件,支持添加前后缀。
45
45
  * @en The input box, supports adding prefixes and suffixes.
46
- * @type 数据输入
46
+ * @type 数据录入
47
47
  * @type_en Data Entry
48
48
  * @name 输入框
49
49
  * @name_en Input
@@ -7,7 +7,7 @@ import { useInputLogic } from './hooks';
7
7
  /**
8
8
  * 输入框组件,支持添加前后缀。
9
9
  * @en The input box, supports adding prefixes and suffixes.
10
- * @type 数据输入
10
+ * @type 数据录入
11
11
  * @type_en Data Entry
12
12
  * @name 输入框
13
13
  * @name_en Input
@@ -80,12 +80,12 @@ export interface BasicInputProps<T = HTMLInputElement> {
80
80
  * 输入框头部内容,在输入框外部
81
81
  * @en The content of the header of the input box, outside the input box
82
82
  */
83
- prepend?: React.ReactNode;
83
+ prepend?: React.ReactNode | ((focusing: boolean, inputValue: string) => React.ReactNode);
84
84
  /**
85
85
  * 输入框尾部内容,在输入框外部
86
86
  * @en The content at the end of the input box, outside the input box
87
87
  */
88
- append?: React.ReactNode;
88
+ append?: React.ReactNode | ((focusing: boolean, inputValue: string) => React.ReactNode);
89
89
  /**
90
90
  * 在聚焦之前blur掉,即切换不同input时会重新弹起键盘,常用于input type切换时重新加载键盘,安卓上有效
91
91
  * @en Blur before focusing, that is, the keyboard will be re-bounced when switching between different inputs. It is often used to reload the keyboard when the input type is switched. It is valid on Android.
@@ -102,6 +102,12 @@ export interface BasicInputProps<T = HTMLInputElement> {
102
102
  * @default "focus"
103
103
  */
104
104
  clearShowType?: 'focus' | 'value' | 'always';
105
+ /**
106
+ * 在聚焦模式下点击清除按钮时,是否要屏蔽对应产生的onBlur和onFocus事件
107
+ * @en Whether to block the onBlur and onFocus events generated when the clear button is clicked in focus mode
108
+ * @default true
109
+ */
110
+ preventEventWhenClearing?: boolean;
105
111
  /**
106
112
  * 清除按钮类型,也可自定义
107
113
  * @en Clear button type, also customizable
@@ -98,7 +98,7 @@ export interface NoticeBarRef {
98
98
  /**
99
99
  * 可自定义换行或滚动效果,支持循环滚动。
100
100
  * @en Line wrapping or scrolling effects can be customized, and circular scrolling is supported.
101
- * @type 数据展示
101
+ * @type 信息展示
102
102
  * @type_en Data Display
103
103
  * @name 通知栏
104
104
  * @name_en NoticeBar