@cloudbase/weda-ui 0.2.11 → 0.2.15

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 (322) hide show
  1. package/CHANGELOG.md +240 -0
  2. package/README.md +7 -2
  3. package/package.json +85 -42
  4. package/src/.DS_Store +0 -0
  5. package/src/configs/.DS_Store +0 -0
  6. package/src/configs/components/button.json +7 -3
  7. package/src/configs/components/form/richText.json +1 -1
  8. package/src/configs/components/form/uploader.json +29 -1
  9. package/src/configs/components/form/uploaderFile.json +158 -0
  10. package/src/configs/components/image.json +16 -3
  11. package/src/configs/components/link.json +3 -3
  12. package/src/configs/components/richtextview.json +2 -2
  13. package/src/configs/components/scrollVeiw.json +5 -5
  14. package/src/configs/components/swiper.json +6 -6
  15. package/src/configs/components/tabs.json +3 -3
  16. package/src/configs/components/text.json +39 -4
  17. package/src/configs/index.js +5 -3
  18. package/src/mp/.gitignore +10 -0
  19. package/src/mp/components/button/index.js +1 -0
  20. package/src/mp/components/button/index.wxss +8 -0
  21. package/src/mp/components/container/index.js +4 -0
  22. package/src/mp/components/form/select/index.js +18 -0
  23. package/src/mp/components/form/uploader/index.js +26 -29
  24. package/src/mp/components/form/uploaderFile/index.js +233 -0
  25. package/src/mp/components/form/uploaderFile/index.json +9 -0
  26. package/src/mp/components/form/uploaderFile/index.wxml +46 -0
  27. package/src/mp/components/form/uploaderFile/index.wxss +105 -0
  28. package/src/mp/components/image/index.js +54 -52
  29. package/src/mp/components/text/index.js +33 -0
  30. package/src/mp/components/text/index.wxml +1 -1
  31. package/src/mp/components/text/index.wxss +18 -0
  32. package/src/mp/index.json +1 -0
  33. package/src/mp/utils/platform.js +20 -0
  34. package/src/mp/utils/tcb.js +11 -0
  35. package/src/web/.DS_Store +0 -0
  36. package/src/web/actions/showModal/{index.jsx → index.tsx} +53 -3
  37. package/src/web/components/auth/index.js +2 -2
  38. package/src/web/components/button/index.css +9 -0
  39. package/src/web/components/button/{index.jsx → index.tsx} +27 -41
  40. package/src/web/components/container/{index.jsx → index.tsx} +6 -10
  41. package/src/web/components/drawer/index.tsx +57 -0
  42. package/src/web/components/form/checkbox/{index.jsx → index.tsx} +24 -48
  43. package/src/web/components/form/enumSelect/{NormalSelect.jsx → NormalSelect.tsx} +2 -9
  44. package/src/web/components/form/form/index.tsx +48 -0
  45. package/src/web/components/form/formcell/{index.jsx → index.tsx} +6 -13
  46. package/src/web/components/form/input/index.css +41 -0
  47. package/src/web/components/form/input/{index.jsx → index.tsx} +34 -67
  48. package/src/web/components/form/radio/{index.jsx → index.tsx} +19 -42
  49. package/src/web/components/form/{renderDecorator.jsx → renderDecorator.tsx} +1 -3
  50. package/src/web/components/form/select/{h5.jsx → h5.tsx} +18 -62
  51. package/src/web/components/form/select/{index.jsx → index.tsx} +51 -94
  52. package/src/web/components/form/select/region/{cities.js → cities.ts} +1 -1
  53. package/src/web/components/form/select/region/{index.js → index.ts} +3 -3
  54. package/src/web/components/form/select/region/{provinces.js → provinces.ts} +1 -1
  55. package/src/web/components/form/select/region/{regions.js → regions.ts} +1 -1
  56. package/src/web/components/form/select/time.jsx +2 -2
  57. package/src/web/components/form/switch/{index.jsx → index.tsx} +30 -47
  58. package/src/web/components/form/textarea/{index.jsx → index.tsx} +22 -55
  59. package/src/web/components/form/tips/{index.jsx → index.tsx} +8 -22
  60. package/src/web/components/form/types.d.ts +12 -0
  61. package/src/web/components/form/uploader/{index.jsx → index.tsx} +16 -14
  62. package/src/web/components/form/uploader/{uploader.h5.jsx → uploader.h5.tsx} +67 -57
  63. package/src/web/components/form/uploader/{uploader.pc.jsx → uploader.pc.tsx} +26 -43
  64. package/src/web/components/form/uploaderFile/fail.svg +12 -0
  65. package/src/web/components/form/uploaderFile/index.css +423 -0
  66. package/src/web/components/form/uploaderFile/index.jsx +30 -0
  67. package/src/web/components/form/uploaderFile/pending.svg +18 -0
  68. package/src/web/components/form/uploaderFile/success.svg +12 -0
  69. package/src/web/components/form/uploaderFile/uploadFile.h5.tsx +578 -0
  70. package/src/web/components/form/uploaderFile/uploadFile.pc.tsx +507 -0
  71. package/src/web/components/image/image.tsx +188 -0
  72. package/src/web/components/image/{index.jsx → index.tsx} +22 -37
  73. package/src/web/components/index.js +37 -2
  74. package/src/web/components/link/{index.jsx → index.tsx} +19 -36
  75. package/src/web/components/modal/{index.jsx → index.tsx} +22 -9
  76. package/src/web/components/picker/{datePicker.jsx → datePicker.tsx} +11 -12
  77. package/src/web/components/picker/{picker.jsx → picker.tsx} +7 -10
  78. package/src/web/components/picker/{timePicker.jsx → timePicker.tsx} +8 -16
  79. package/src/web/components/richText/{const.js → const.ts} +0 -0
  80. package/src/web/components/richText/index.jsx +5 -2
  81. package/src/web/components/richTextView/index.tsx +67 -0
  82. package/src/web/components/scrollView/{index.jsx → index.tsx} +18 -33
  83. package/src/web/components/slot/{index.jsx → index.tsx} +8 -9
  84. package/src/web/components/swiper/index.css +5 -1
  85. package/src/web/components/swiper/{index.jsx → index.tsx} +79 -79
  86. package/src/web/components/tabs/index.tsx +33 -0
  87. package/src/web/components/tabs/{tabs.h5.jsx → tabs.h5.tsx} +4 -33
  88. package/src/web/components/tabs/{tabs.pc.jsx → tabs.pc.tsx} +5 -39
  89. package/src/web/components/text/index.css +18 -0
  90. package/src/web/components/text/index.tsx +69 -0
  91. package/src/web/components/uploaderFileView/index.css +11 -0
  92. package/src/web/components/uploaderFileView/index.jsx +75 -0
  93. package/src/web/components/uploaderView/{index.jsx → index.tsx} +12 -15
  94. package/src/web/types.d.ts +20 -0
  95. package/src/web/utils/constant.js +2 -0
  96. package/src/web/utils/loading-fallback.tsx +2 -0
  97. package/src/web/utils/platform.js +77 -6
  98. package/src/web/utils/useSetState.ts +14 -0
  99. package/src/web/utils/useSyncValue.ts +17 -0
  100. package/src/configs/components/button.svg +0 -18
  101. package/src/web/components/drawer/index.jsx +0 -64
  102. package/src/web/components/form/form/index.jsx +0 -76
  103. package/src/web/components/image/image.jsx +0 -187
  104. package/src/web/components/link/test/__snapshots__/storybook.test.js.snap +0 -754
  105. package/src/web/components/richTextView/index.jsx +0 -89
  106. package/src/web/components/tabs/index.jsx +0 -10
  107. package/src/web/components/text/index.jsx +0 -71
  108. package/src/web/utils/useSyncValue.js +0 -14
  109. package/src/web/wedatheme/.code.yml +0 -16
  110. package/src/web/wedatheme/.editorconfig +0 -9
  111. package/src/web/wedatheme/.eslintrc +0 -20
  112. package/src/web/wedatheme/.orange-ci.yml +0 -55
  113. package/src/web/wedatheme/.vscode/extensions.json +0 -3
  114. package/src/web/wedatheme/.vscode/settings.json +0 -11
  115. package/src/web/wedatheme/README.md +0 -50
  116. package/src/web/wedatheme/i18n/README.md +0 -4
  117. package/src/web/wedatheme/i18n/translation/index.js +0 -10
  118. package/src/web/wedatheme/i18n/translation/zh.js +0 -15
  119. package/src/web/wedatheme/jsconfig.json +0 -15
  120. package/src/web/wedatheme/mock/app.js +0 -42
  121. package/src/web/wedatheme/mock/history-context.js +0 -8
  122. package/src/web/wedatheme/mock/index.js +0 -3
  123. package/src/web/wedatheme/mock/layout/AppLayout.jsx +0 -28
  124. package/src/web/wedatheme/mock/layout/MenuWithRouter.jsx +0 -50
  125. package/src/web/wedatheme/mock/layout/index.js +0 -1
  126. package/src/web/wedatheme/package.json +0 -61
  127. package/src/web/wedatheme/public/index.html +0 -19
  128. package/src/web/wedatheme/src/app.js +0 -22
  129. package/src/web/wedatheme/src/components/README.md +0 -4
  130. package/src/web/wedatheme/src/configs/menu.js +0 -9
  131. package/src/web/wedatheme/src/routes/wedatheme-index/Component.jsx +0 -402
  132. package/src/web/wedatheme/src/routes/wedatheme-index/Form.jsx +0 -729
  133. package/src/web/wedatheme/src/routes/wedatheme-index/FormItem.jsx +0 -18
  134. package/src/web/wedatheme/src/routes/wedatheme-index/WedathemeIndex.jsx +0 -1276
  135. package/src/web/wedatheme/src/routes/wedatheme-index/index.js +0 -1
  136. package/src/web/wedatheme/src/routes/weui2td/WEUI2TD.jsx +0 -3
  137. package/src/web/wedatheme/src/routes/weui2td/index.js +0 -1
  138. package/src/web/wedatheme/src/styles/_btn.scss +0 -24
  139. package/src/web/wedatheme/src/styles/_icon.scss +0 -653
  140. package/src/web/wedatheme/src/styles/_map.scss +0 -12
  141. package/src/web/wedatheme/src/styles/_middle.scss +0 -340
  142. package/src/web/wedatheme/src/styles/_upload.scss +0 -47
  143. package/src/web/wedatheme/src/styles/assets/alert-close.svg +0 -3
  144. package/src/web/wedatheme/src/styles/assets/and.svg +0 -12
  145. package/src/web/wedatheme/src/styles/assets/arrowdown--line.svg +0 -12
  146. package/src/web/wedatheme/src/styles/assets/arrowdown.svg +0 -12
  147. package/src/web/wedatheme/src/styles/assets/arrowleft--line.svg +0 -12
  148. package/src/web/wedatheme/src/styles/assets/arrowleft.svg +0 -12
  149. package/src/web/wedatheme/src/styles/assets/arrowright--line.svg +0 -12
  150. package/src/web/wedatheme/src/styles/assets/arrowright-blue--line.svg +0 -12
  151. package/src/web/wedatheme/src/styles/assets/arrowright.svg +0 -12
  152. package/src/web/wedatheme/src/styles/assets/arrowup--line.svg +0 -12
  153. package/src/web/wedatheme/src/styles/assets/arrowup.svg +0 -12
  154. package/src/web/wedatheme/src/styles/assets/bell-warning.svg +0 -3
  155. package/src/web/wedatheme/src/styles/assets/btnback.svg +0 -12
  156. package/src/web/wedatheme/src/styles/assets/calendar.svg +0 -12
  157. package/src/web/wedatheme/src/styles/assets/chartcolumn-1.svg +0 -12
  158. package/src/web/wedatheme/src/styles/assets/chartcolumn.svg +0 -12
  159. package/src/web/wedatheme/src/styles/assets/chartline-1.svg +0 -9
  160. package/src/web/wedatheme/src/styles/assets/chartline.svg +0 -9
  161. package/src/web/wedatheme/src/styles/assets/chartpie-1.svg +0 -12
  162. package/src/web/wedatheme/src/styles/assets/chartpie.svg +0 -12
  163. package/src/web/wedatheme/src/styles/assets/check-1.svg +0 -8
  164. package/src/web/wedatheme/src/styles/assets/check-2.svg +0 -1
  165. package/src/web/wedatheme/src/styles/assets/check.svg +0 -8
  166. package/src/web/wedatheme/src/styles/assets/close-1.svg +0 -8
  167. package/src/web/wedatheme/src/styles/assets/close.svg +0 -8
  168. package/src/web/wedatheme/src/styles/assets/consult.svg +0 -8
  169. package/src/web/wedatheme/src/styles/assets/convertip--blue.svg +0 -12
  170. package/src/web/wedatheme/src/styles/assets/convertip.svg +0 -12
  171. package/src/web/wedatheme/src/styles/assets/copy.svg +0 -12
  172. package/src/web/wedatheme/src/styles/assets/cur-active.svg +0 -12
  173. package/src/web/wedatheme/src/styles/assets/cur.svg +0 -12
  174. package/src/web/wedatheme/src/styles/assets/daily.svg +0 -13
  175. package/src/web/wedatheme/src/styles/assets/database.svg +0 -12
  176. package/src/web/wedatheme/src/styles/assets/datasheet.svg +0 -12
  177. package/src/web/wedatheme/src/styles/assets/delete-white.svg +0 -8
  178. package/src/web/wedatheme/src/styles/assets/delete.svg +0 -8
  179. package/src/web/wedatheme/src/styles/assets/detail.svg +0 -13
  180. package/src/web/wedatheme/src/styles/assets/dismiss.svg +0 -8
  181. package/src/web/wedatheme/src/styles/assets/download.svg +0 -12
  182. package/src/web/wedatheme/src/styles/assets/drop.svg +0 -15
  183. package/src/web/wedatheme/src/styles/assets/email-error.svg +0 -14
  184. package/src/web/wedatheme/src/styles/assets/email-warning.svg +0 -12
  185. package/src/web/wedatheme/src/styles/assets/email.svg +0 -14
  186. package/src/web/wedatheme/src/styles/assets/emailv.svg +0 -12
  187. package/src/web/wedatheme/src/styles/assets/error-1.svg +0 -8
  188. package/src/web/wedatheme/src/styles/assets/error-filled.svg +0 -3
  189. package/src/web/wedatheme/src/styles/assets/error.svg +0 -8
  190. package/src/web/wedatheme/src/styles/assets/externallink.svg +0 -12
  191. package/src/web/wedatheme/src/styles/assets/favorable.svg +0 -9
  192. package/src/web/wedatheme/src/styles/assets/filter.svg +0 -12
  193. package/src/web/wedatheme/src/styles/assets/firstpage.svg +0 -13
  194. package/src/web/wedatheme/src/styles/assets/folderclose.svg +0 -8
  195. package/src/web/wedatheme/src/styles/assets/folderopen.svg +0 -8
  196. package/src/web/wedatheme/src/styles/assets/fullscreenquit.svg +0 -12
  197. package/src/web/wedatheme/src/styles/assets/fullsreen.svg +0 -12
  198. package/src/web/wedatheme/src/styles/assets/globe-gray.svg +0 -12
  199. package/src/web/wedatheme/src/styles/assets/guide.svg +0 -9
  200. package/src/web/wedatheme/src/styles/assets/help.svg +0 -8
  201. package/src/web/wedatheme/src/styles/assets/hide.svg +0 -8
  202. package/src/web/wedatheme/src/styles/assets/info.svg +0 -8
  203. package/src/web/wedatheme/src/styles/assets/infoblue-1.svg +0 -8
  204. package/src/web/wedatheme/src/styles/assets/infoblue-filled.svg +0 -3
  205. package/src/web/wedatheme/src/styles/assets/infoblue.svg +0 -8
  206. package/src/web/wedatheme/src/styles/assets/jump-black.svg +0 -12
  207. package/src/web/wedatheme/src/styles/assets/jump.svg +0 -12
  208. package/src/web/wedatheme/src/styles/assets/lastpage.svg +0 -13
  209. package/src/web/wedatheme/src/styles/assets/loading.svg +0 -12
  210. package/src/web/wedatheme/src/styles/assets/local.svg +0 -10
  211. package/src/web/wedatheme/src/styles/assets/menu-fold-white.svg +0 -6
  212. package/src/web/wedatheme/src/styles/assets/menu-fold.svg +0 -6
  213. package/src/web/wedatheme/src/styles/assets/minus.svg +0 -12
  214. package/src/web/wedatheme/src/styles/assets/monitor.svg +0 -12
  215. package/src/web/wedatheme/src/styles/assets/more.svg +0 -8
  216. package/src/web/wedatheme/src/styles/assets/multi-line.svg +0 -12
  217. package/src/web/wedatheme/src/styles/assets/news.svg +0 -3
  218. package/src/web/wedatheme/src/styles/assets/not.svg +0 -12
  219. package/src/web/wedatheme/src/styles/assets/notice.svg +0 -8
  220. package/src/web/wedatheme/src/styles/assets/pencil.svg +0 -12
  221. package/src/web/wedatheme/src/styles/assets/pending-1.svg +0 -8
  222. package/src/web/wedatheme/src/styles/assets/pending-gray.svg +0 -8
  223. package/src/web/wedatheme/src/styles/assets/pending.svg +0 -8
  224. package/src/web/wedatheme/src/styles/assets/percent-blue.svg +0 -16
  225. package/src/web/wedatheme/src/styles/assets/percent.svg +0 -16
  226. package/src/web/wedatheme/src/styles/assets/phone-error.svg +0 -11
  227. package/src/web/wedatheme/src/styles/assets/phone-warning.svg +0 -9
  228. package/src/web/wedatheme/src/styles/assets/phone.svg +0 -12
  229. package/src/web/wedatheme/src/styles/assets/phonev.svg +0 -9
  230. package/src/web/wedatheme/src/styles/assets/plus.svg +0 -12
  231. package/src/web/wedatheme/src/styles/assets/qq.svg +0 -11
  232. package/src/web/wedatheme/src/styles/assets/realname.svg +0 -8
  233. package/src/web/wedatheme/src/styles/assets/realnamev.svg +0 -9
  234. package/src/web/wedatheme/src/styles/assets/refresh-blue.svg +0 -12
  235. package/src/web/wedatheme/src/styles/assets/refresh.svg +0 -12
  236. package/src/web/wedatheme/src/styles/assets/relationship-1.svg +0 -12
  237. package/src/web/wedatheme/src/styles/assets/relationship.svg +0 -12
  238. package/src/web/wedatheme/src/styles/assets/remind.svg +0 -8
  239. package/src/web/wedatheme/src/styles/assets/search.svg +0 -8
  240. package/src/web/wedatheme/src/styles/assets/setting.svg +0 -12
  241. package/src/web/wedatheme/src/styles/assets/shopcart.svg +0 -8
  242. package/src/web/wedatheme/src/styles/assets/show.svg +0 -8
  243. package/src/web/wedatheme/src/styles/assets/sort.svg +0 -12
  244. package/src/web/wedatheme/src/styles/assets/sortdown.svg +0 -12
  245. package/src/web/wedatheme/src/styles/assets/sortup.svg +0 -12
  246. package/src/web/wedatheme/src/styles/assets/success-1.svg +0 -8
  247. package/src/web/wedatheme/src/styles/assets/success-filled.svg +0 -3
  248. package/src/web/wedatheme/src/styles/assets/success.svg +0 -8
  249. package/src/web/wedatheme/src/styles/assets/table-1.svg +0 -12
  250. package/src/web/wedatheme/src/styles/assets/table.svg +0 -12
  251. package/src/web/wedatheme/src/styles/assets/tag.svg +0 -12
  252. package/src/web/wedatheme/src/styles/assets/time.svg +0 -12
  253. package/src/web/wedatheme/src/styles/assets/transfer.svg +0 -8
  254. package/src/web/wedatheme/src/styles/assets/trenddown.svg +0 -12
  255. package/src/web/wedatheme/src/styles/assets/trendup.svg +0 -12
  256. package/src/web/wedatheme/src/styles/assets/viewgrid.svg +0 -12
  257. package/src/web/wedatheme/src/styles/assets/viewlist.svg +0 -12
  258. package/src/web/wedatheme/src/styles/assets/warning-1.svg +0 -8
  259. package/src/web/wedatheme/src/styles/assets/warning-filled.svg +0 -3
  260. package/src/web/wedatheme/src/styles/assets/warning.svg +0 -8
  261. package/src/web/wedatheme/src/styles/assets/wechat-error.svg +0 -14
  262. package/src/web/wedatheme/src/styles/assets/wechat-warning.svg +0 -12
  263. package/src/web/wedatheme/src/styles/assets/wechat.svg +0 -12
  264. package/src/web/wedatheme/src/styles/assets/wechatv.svg +0 -12
  265. package/src/web/wedatheme/src/styles/assets/zoom-in-white.svg +0 -4
  266. package/src/web/wedatheme/src/styles/assets/zoom-in.svg +0 -4
  267. package/src/web/wedatheme/src/styles/assets/zoom-out-white.svg +0 -4
  268. package/src/web/wedatheme/src/styles/assets/zoom-out.svg +0 -4
  269. package/src/web/wedatheme/src/styles/index.scss +0 -18
  270. package/src/web/wedatheme/src/styles/main.css +0 -166
  271. package/src/web/wedatheme/src/styles/theme/_alert.scss +0 -73
  272. package/src/web/wedatheme/src/styles/theme/_badge.scss +0 -38
  273. package/src/web/wedatheme/src/styles/theme/_blank-page-v2.scss +0 -7
  274. package/src/web/wedatheme/src/styles/theme/_breadcrumb.scss +0 -8
  275. package/src/web/wedatheme/src/styles/theme/_bubble.scss +0 -24
  276. package/src/web/wedatheme/src/styles/theme/_button.scss +0 -212
  277. package/src/web/wedatheme/src/styles/theme/_card.scss +0 -12
  278. package/src/web/wedatheme/src/styles/theme/_cascader.scss +0 -43
  279. package/src/web/wedatheme/src/styles/theme/_checkbox&radio.scss +0 -83
  280. package/src/web/wedatheme/src/styles/theme/_datepicker.scss +0 -36
  281. package/src/web/wedatheme/src/styles/theme/_dialog.scss +0 -39
  282. package/src/web/wedatheme/src/styles/theme/_divider.scss +0 -1
  283. package/src/web/wedatheme/src/styles/theme/_drawer.scss +0 -15
  284. package/src/web/wedatheme/src/styles/theme/_dropdown.scss +0 -53
  285. package/src/web/wedatheme/src/styles/theme/_form.scss +0 -38
  286. package/src/web/wedatheme/src/styles/theme/_icon.scss +0 -0
  287. package/src/web/wedatheme/src/styles/theme/_input&textarea&select.scss +0 -85
  288. package/src/web/wedatheme/src/styles/theme/_inputnumber.scss +0 -16
  289. package/src/web/wedatheme/src/styles/theme/_link.scss +0 -14
  290. package/src/web/wedatheme/src/styles/theme/_list.scss +0 -41
  291. package/src/web/wedatheme/src/styles/theme/_metrics-board.scss +0 -14
  292. package/src/web/wedatheme/src/styles/theme/_notification.scss +0 -27
  293. package/src/web/wedatheme/src/styles/theme/_pagination.scss +0 -22
  294. package/src/web/wedatheme/src/styles/theme/_popconfirm.scss +0 -4
  295. package/src/web/wedatheme/src/styles/theme/_progress.scss +0 -28
  296. package/src/web/wedatheme/src/styles/theme/_region-select.scss +0 -17
  297. package/src/web/wedatheme/src/styles/theme/_search.scss +0 -18
  298. package/src/web/wedatheme/src/styles/theme/_segment.scss +0 -69
  299. package/src/web/wedatheme/src/styles/theme/_slider.scss +0 -18
  300. package/src/web/wedatheme/src/styles/theme/_status.scss +0 -4
  301. package/src/web/wedatheme/src/styles/theme/_steps.scss +0 -68
  302. package/src/web/wedatheme/src/styles/theme/_switch.scss +0 -11
  303. package/src/web/wedatheme/src/styles/theme/_table.scss +0 -44
  304. package/src/web/wedatheme/src/styles/theme/_tabs.scss +0 -44
  305. package/src/web/wedatheme/src/styles/theme/_tag-search.scss +0 -9
  306. package/src/web/wedatheme/src/styles/theme/_tag.scss +0 -48
  307. package/src/web/wedatheme/src/styles/theme/_timeline.scss +0 -0
  308. package/src/web/wedatheme/src/styles/theme/_toast.scss +0 -3
  309. package/src/web/wedatheme/src/styles/theme/_transfer.scss +0 -9
  310. package/src/web/wedatheme/src/styles/theme/_tree.scss +0 -11
  311. package/src/web/wedatheme/src/styles/theme/_upload.scss +0 -14
  312. package/src/web/wedatheme/src/styles/theme/_variables.scss +0 -140
  313. package/src/web/wedatheme/src/styles/theme/index.scss +0 -91
  314. package/src/web/wedatheme/style-package/README.md +0 -31
  315. package/src/web/wedatheme/style-package/ef6fa527e24e354765d806b826b41391.svg +0 -627
  316. package/src/web/wedatheme/style-package/index.css +0 -3
  317. package/src/web/wedatheme/style-package/package.json +0 -15
  318. package/src/web/wedatheme/tea.config.js +0 -66
  319. package/src/web/wedatheme/webpack/css.config.js +0 -114
  320. package/src/web/wedatheme/webpack/plugins/css-package-plugin.js +0 -23
  321. package/src/web/wedatheme/webpack/plugins/inject-assets-plugin.js +0 -32
  322. package/src/web/wedatheme/webpack/plugins/package-json-plugin.js +0 -66
@@ -0,0 +1,507 @@
1
+ import * as React from 'react';
2
+ import {
3
+ Upload,
4
+ ConfigProvider,
5
+ Button,
6
+ message,
7
+ Icon,
8
+ Text,
9
+ List,
10
+ } from 'tea-component';
11
+ import { v4 } from 'uuid';
12
+ import {
13
+ filterStrList,
14
+ isCloudFileID,
15
+ isHttpFileID,
16
+ transSize,
17
+ downloadFile,
18
+ cutFileTitle,
19
+ } from '../../../utils/platform';
20
+ import { getCloudInstance, getTempFileURL } from '../../../utils/tcb';
21
+ import classNames from '../../../utils/classnames';
22
+ import { renderDecorator } from '../renderDecorator';
23
+ import { CommonFormPropsType } from '../types';
24
+
25
+ // 默认组件类前缀
26
+ const CLASS_PREFIX = 'weda-upload-file-pc';
27
+
28
+ // 上传状态字典
29
+ const statusMap = {
30
+ 0: { title: '待上传', icon: 'pending-gray' },
31
+ 1: { title: '上传 ...', icon: 'loading' },
32
+ 2: { title: '上传成功', icon: 'success' },
33
+ 3: { title: '上传失败', icon: 'error' },
34
+ };
35
+
36
+ // 上传文件Context
37
+ const FileContext = React.createContext(null);
38
+
39
+ /**
40
+ * 上传文件 PC 版本
41
+ */
42
+ export function UploadFilePc({
43
+ // 系统属性
44
+ layout,
45
+ id = '',
46
+ style = {},
47
+ labelVisible = true,
48
+ label = '上传文件',
49
+ requiredFlag = false,
50
+ disabled = false,
51
+ className = '',
52
+ events = { success: null, error: null, change: null },
53
+ // 组件属性
54
+ decorator,
55
+ tips = '',
56
+ btnTitle = '点击上传',
57
+ maxUploadCount = 9,
58
+ maxSize = 1024,
59
+ single = true,
60
+ defaultValue = [], // 组件默认初始化值
61
+ value = [], // 用于模型组件中 formily 的值管理
62
+ acceptTypes = [],
63
+ downloadVisible = true,
64
+ deleteVisible = true,
65
+ uploadPath = 'weda-uploader',
66
+ onChange = null,
67
+ isEdit = true,
68
+ }: IUploaderFilePc) {
69
+ const [fileIDList, setfileIDList] = React.useState(
70
+ filterStrList([].concat(defaultValue, value))
71
+ ); // 上传成功文件ID列表,fileID[]
72
+ const [fileList, setFileList] = React.useState([]); // 上传中的文件列表,file[],file为原始文件 + uuid属性
73
+ const [fileSizeObj, setFileSizeObj] = React.useState({}); // 管理上传文件大小 {uuid:size}
74
+
75
+ React.useEffect(() => {
76
+ // 外部 onChange 事件
77
+ const pureFileIDList = fileIDList.filter(
78
+ (d) => isCloudFileID(d) || isHttpFileID(d)
79
+ );
80
+ if (single) {
81
+ const file = pureFileIDList[0] || '';
82
+ onChange?.(file);
83
+ events?.change?.({ value: file });
84
+ events?.success?.({ value: file });
85
+ } else {
86
+ onChange?.(pureFileIDList);
87
+ events?.change?.({ value: pureFileIDList });
88
+ events?.success?.({ value: pureFileIDList });
89
+ }
90
+ }, [fileIDList]);
91
+
92
+ // 外层组件类
93
+ const cls = classNames({
94
+ 'weda-ui': true,
95
+ [className]: className,
96
+ });
97
+
98
+ // 批量上传文件前置事件
99
+ const handleBefore = (file, fileList, isAccepted, error) => {
100
+ if (fileList.length + fileIDList.length > maxUploadCount) {
101
+ message.warning({ content: `上传文件总数不能超过${maxUploadCount}个` });
102
+ return false;
103
+ }
104
+ if (!isAccepted) {
105
+ try {
106
+ const errorList = [];
107
+ if (error.find((item) => item?.code === 'file-invalid-type')) {
108
+ errorList.push('上传文件类型错误');
109
+ }
110
+ if (error.find((item) => item?.code === 'file-too-large')) {
111
+ errorList.push(`上传文件大小不能超过${maxSize}M`);
112
+ }
113
+ message.error({ content: errorList.join(', ') });
114
+ } catch (e) {}
115
+ return false;
116
+ }
117
+ file['_uuid'] = v4();
118
+ setFileList((list) => [...list, file]);
119
+ return false;
120
+ };
121
+
122
+ // 上传后文件列表 fileIDList 改变事件,'add'|'delete'
123
+ const handleChange = ({ fileID, uuid, type, size }) => {
124
+ // 上传时新增事件
125
+ if (type === 'add') {
126
+ fileID && setFileSizeObj((obj) => ({ ...obj, [fileID]: size }));
127
+ fileID && setfileIDList((list) => [...list, fileID]);
128
+ } else {
129
+ fileID && setfileIDList((list) => list.filter((d) => d !== fileID));
130
+ }
131
+ uuid && setFileList((list) => list.filter((item) => uuid !== item?._uuid));
132
+ };
133
+
134
+ // 上传组件属性
135
+ const uploadProps = { multiple: !single };
136
+ if (
137
+ !(
138
+ !acceptTypes?.length ||
139
+ acceptTypes?.includes('*') ||
140
+ acceptTypes?.includes('')
141
+ )
142
+ ) {
143
+ uploadProps['accept'] = Array.from(new Set(acceptTypes));
144
+ }
145
+ tips && (uploadProps['title'] = tips);
146
+ maxSize && (uploadProps['maxSize'] = maxSize * 1024 * 1024);
147
+ const btnDisabled =
148
+ fileIDList.length >= maxUploadCount || (single && fileIDList.length > 0);
149
+
150
+ return renderDecorator(
151
+ <ConfigProvider classPrefix="wedatea2td">
152
+ <FileContext.Provider
153
+ value={{
154
+ uploadPath,
155
+ downloadVisible,
156
+ deleteVisible,
157
+ onChange: handleChange,
158
+ isEdit,
159
+ events,
160
+ fileSizeObj,
161
+ }}
162
+ >
163
+ <div className={`${CLASS_PREFIX}`}>
164
+ {isEdit && (
165
+ <div className={`${CLASS_PREFIX}__input-box`}>
166
+ {disabled || btnDisabled ? (
167
+ <Button type="weak" disabled={true}>
168
+ {btnTitle}
169
+ </Button>
170
+ ) : (
171
+ <Upload {...uploadProps} beforeUpload={handleBefore}>
172
+ <Button type="weak" className={`${CLASS_PREFIX}__btn--weak`}>
173
+ {btnTitle}
174
+ </Button>
175
+ {!single && (
176
+ <Text
177
+ theme="weak"
178
+ className={`${CLASS_PREFIX}__btn-descripe`}
179
+ >
180
+ 支持批量上传
181
+ </Text>
182
+ )}
183
+ </Upload>
184
+ )}
185
+ </div>
186
+ )}
187
+ <List split="divide">
188
+ <List.Item>
189
+ <div
190
+ className={`${CLASS_PREFIX}--item ${CLASS_PREFIX}--item-header`}
191
+ >
192
+ <div
193
+ className={`${CLASS_PREFIX}--item-title ${CLASS_PREFIX}--item-label`}
194
+ >
195
+ 文件名
196
+ </div>
197
+ <div
198
+ className={`${CLASS_PREFIX}--item-size ${CLASS_PREFIX}--item-label`}
199
+ >
200
+ 大小
201
+ </div>
202
+ <div
203
+ className={`${CLASS_PREFIX}--item-status ${CLASS_PREFIX}--item-label`}
204
+ >
205
+ 状态
206
+ </div>
207
+ <div className={`${CLASS_PREFIX}--item-action`}>操作</div>
208
+ </div>
209
+ </List.Item>
210
+
211
+ {fileIDList.map((d) => (
212
+ <List.Item key={d}>{<TcbFileEcho fileID={d} />}</List.Item>
213
+ ))}
214
+
215
+ {fileList.map((item) => (
216
+ <List.Item key={item?._uuid}>
217
+ {<TcbFileUpload file={item} />}
218
+ </List.Item>
219
+ ))}
220
+
221
+ {isEdit && fileIDList.length === 0 && fileList.length === 0 && (
222
+ <List.Item className={`${CLASS_PREFIX}--item-empty`}>
223
+ <div className={`${CLASS_PREFIX}--item`}>
224
+ 点击上方“{btnTitle}”按钮
225
+ </div>
226
+ </List.Item>
227
+ )}
228
+ </List>
229
+ </div>
230
+ </FileContext.Provider>
231
+ </ConfigProvider>,
232
+ decorator
233
+ )({
234
+ id,
235
+ className: cls,
236
+ style,
237
+ label: labelVisible ? label : null,
238
+ layout,
239
+ multiCell: false,
240
+ requiredFlag,
241
+ });
242
+ }
243
+
244
+ export interface IUploaderFilePc extends CommonFormPropsType {
245
+ btnTitle?: string;
246
+ maxUploadCount?: number;
247
+ downloadVisible?: boolean;
248
+ deleteVisible?: boolean;
249
+ defaultValue?: string | string[];
250
+ maxSize?: number;
251
+ single?: boolean;
252
+ acceptTypes?: any[];
253
+ tips?: string;
254
+ value?: string | string[];
255
+ uploadPath?: string;
256
+ isEdit?: boolean;
257
+ onChange?: Function;
258
+ }
259
+
260
+ interface ITcbFileEcho {
261
+ fileID?: string;
262
+ }
263
+
264
+ /**
265
+ * 基于 FileID 回显文件表格行组件
266
+ */
267
+ const TcbFileEcho = ({ fileID }: ITcbFileEcho) => {
268
+ const [src, setSrc] = React.useState('');
269
+ const { fileSizeObj } = React.useContext(FileContext) || {};
270
+ React.useEffect(() => {
271
+ const fetchFileId = async (id) => {
272
+ if (isCloudFileID(id)) {
273
+ try {
274
+ const fileSrc = await getTempFileURL(id);
275
+ setSrc(fileSrc);
276
+ } catch (e) {}
277
+ } else {
278
+ setSrc(id);
279
+ }
280
+ };
281
+ fetchFileId(fileID);
282
+ }, [fileID]);
283
+
284
+ const title = React.useMemo(() => {
285
+ if (isCloudFileID(fileID)) {
286
+ const uuidReg = /file-[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}-/;
287
+ const lastIndex = `${fileID}`.lastIndexOf('/');
288
+ const name = `${fileID}`.slice(lastIndex + 1);
289
+ const title = name.replace(uuidReg, '');
290
+ return title;
291
+ } else {
292
+ return fileID;
293
+ }
294
+ }, [fileID]);
295
+
296
+ return (
297
+ <div className={`${CLASS_PREFIX}--item ${CLASS_PREFIX}--item-body`}>
298
+ <div className={`${CLASS_PREFIX}--item-title`} title={title}>
299
+ {cutFileTitle(title)}
300
+ </div>
301
+ <div className={`${CLASS_PREFIX}--item-size`}>
302
+ {fileSizeObj[fileID] || '--'}
303
+ </div>
304
+ <div className={`${CLASS_PREFIX}--item-status`}>
305
+ <UploadFileStatus />
306
+ </div>
307
+ <div className={`${CLASS_PREFIX}--item-action`}>
308
+ <UploadFileAction status="2" fileID={fileID} src={src} />
309
+ </div>
310
+ </div>
311
+ );
312
+ };
313
+
314
+ interface ITcbFileUpload {
315
+ file?: any;
316
+ }
317
+
318
+ /**
319
+ * 基于 File 上传文件过程表格行组件
320
+ */
321
+ const TcbFileUpload = ({ file }: ITcbFileUpload) => {
322
+ const { uploadPath, onChange, events } = React.useContext(FileContext) || {};
323
+ const [percent, setPercent] = React.useState(0); // 上传进度
324
+ const [status, setStatus] = React.useState('0'); // 上传状态
325
+ const cancleRef = React.useRef(''); // 取消的uuid
326
+
327
+ // 上传文件相关属性
328
+ const { size, title, uuid } = React.useMemo(() => {
329
+ const size = transSize(file?.size);
330
+ const title = file?.name || '';
331
+ const uuid = file?._uuid;
332
+ return { size, title, uuid };
333
+ }, [file?._uuid]);
334
+
335
+ React.useEffect(() => {
336
+ handleUpload(file);
337
+ }, [file?._uuid]);
338
+
339
+ // 上传过程
340
+ const handleUpload = async (file) => {
341
+ const tcb = await getCloudInstance();
342
+ try {
343
+ setStatus('0');
344
+ const { fileID } = await tcb.uploadFile({
345
+ cloudPath: `${uploadPath}/${`file-${uuid}-${title}`}`,
346
+ filePath: file,
347
+ onUploadProgress: (progressEvent) => {
348
+ let percent = 0;
349
+ percent = Math.round(
350
+ (progressEvent.loaded * 100) / progressEvent.total
351
+ );
352
+ setStatus('1');
353
+ setPercent(percent < 100 ? percent : 100);
354
+ },
355
+ });
356
+ !cancleRef.current && onChange?.({ fileID, type: 'add', uuid, size });
357
+ setStatus('2');
358
+ } catch (e) {
359
+ setStatus('3');
360
+ events.error && events.error(e);
361
+ }
362
+ };
363
+
364
+ return (
365
+ <div className={`${CLASS_PREFIX}--item ${CLASS_PREFIX}--item-body`}>
366
+ <div className={`${CLASS_PREFIX}--item-title`} title={title}>
367
+ {cutFileTitle(title)}
368
+ </div>
369
+ <div className={`${CLASS_PREFIX}--item-size`}>{size}</div>
370
+ <div className={`${CLASS_PREFIX}--item-status`}>
371
+ <UploadFileStatus status={status} percent={percent} />
372
+ </div>
373
+ <div className={`${CLASS_PREFIX}--item-action`}>
374
+ <UploadFileAction
375
+ file={file}
376
+ uuid={file?._uuid}
377
+ status={status}
378
+ onCancel={(uuid) => {
379
+ cancleRef.current = uuid;
380
+ onChange?.({ type: 'delete', uuid });
381
+ }}
382
+ onReLoad={handleUpload}
383
+ />
384
+ </div>
385
+ </div>
386
+ );
387
+ };
388
+
389
+ interface IUploadFileStatus {
390
+ status?: string;
391
+ percent?: number;
392
+ }
393
+
394
+ /**
395
+ * 上传文件状态组件
396
+ */
397
+ const UploadFileStatus = ({ status = '2', percent = 0 }: IUploadFileStatus) => {
398
+ if (status == '1' && percent) {
399
+ return (
400
+ <>
401
+ <Icon type="loading" />
402
+ 上传{percent}% ...
403
+ </>
404
+ );
405
+ }
406
+ return (
407
+ <>
408
+ <Icon type={statusMap[status]?.icon || statusMap['0'].icon} />
409
+ {statusMap[status]?.title || statusMap['0'].title}
410
+ </>
411
+ );
412
+ };
413
+
414
+ interface IUploadFileAction {
415
+ status?: string;
416
+ fileID?: string;
417
+ uuid?: string;
418
+ src?: string;
419
+ file?: any;
420
+ onReLoad?: any;
421
+ onCancel?: any;
422
+ }
423
+
424
+ /**
425
+ * 操作列组件, onChange 从最外层 UploadFilePc 传进来
426
+ * props: { status, fileID, uuid, src, onChange }
427
+ */
428
+ const UploadFileAction = ({
429
+ status = '0',
430
+ fileID = '',
431
+ uuid = '',
432
+ src = '',
433
+ file = null,
434
+ onReLoad = null,
435
+ onCancel = null,
436
+ }: IUploadFileAction) => {
437
+ const { onChange, downloadVisible, deleteVisible, isEdit } =
438
+ React.useContext(FileContext) || {};
439
+
440
+ // 操作列按钮-删除
441
+ const renderDelete = () =>
442
+ isEdit &&
443
+ deleteVisible && (
444
+ <Button
445
+ type="link"
446
+ onClick={() => onChange?.({ fileID, uuid, type: 'delete' })}
447
+ >
448
+ 删除
449
+ </Button>
450
+ );
451
+
452
+ // 操作列按钮-取消
453
+ const renderCancel = () =>
454
+ isEdit && (
455
+ <Button onClick={() => onCancel?.(uuid)} type="link">
456
+ 取消
457
+ </Button>
458
+ );
459
+
460
+ // 操作列按钮-重新上传
461
+ const renderReLoad = () =>
462
+ isEdit && (
463
+ <Button
464
+ type="link"
465
+ onClick={() => {
466
+ onReLoad?.(file);
467
+ }}
468
+ >
469
+ 重新上传
470
+ </Button>
471
+ );
472
+
473
+ // 操作列按钮-下载
474
+ const renderDownLoad = () =>
475
+ downloadVisible && (
476
+ <Button
477
+ type="link"
478
+ title="点击下载文件"
479
+ onClick={() => downloadFile(src)}
480
+ >
481
+ 下载
482
+ </Button>
483
+ );
484
+
485
+ switch (status) {
486
+ case '0':
487
+ return renderCancel();
488
+ case '1':
489
+ return renderCancel();
490
+ case '2':
491
+ return (
492
+ <>
493
+ {renderDelete()}
494
+ {renderDownLoad()}
495
+ </>
496
+ );
497
+ case '3':
498
+ return (
499
+ <>
500
+ {renderDelete()}
501
+ {renderReLoad()}
502
+ </>
503
+ );
504
+ default:
505
+ return null;
506
+ }
507
+ };
@@ -0,0 +1,188 @@
1
+ import * as React from 'react';
2
+ import * as PropTypes from 'prop-types';
3
+ import { ConfigProvider, ImagePreview } from 'tea-component';
4
+ import { usePlatform } from '../../utils/platform';
5
+ import { useGesture } from '@use-gesture/react';
6
+ import { PropsType } from './index';
7
+ interface ImageInnerPropsType extends Omit<PropsType, 'fit' | 'mode'> {
8
+ objectFit: React.CSSProperties['objectFit'];
9
+ isError: boolean;
10
+ setIsError: React.Dispatch<React.SetStateAction<boolean>>;
11
+ }
12
+ export function ImageInner({
13
+ objectFit,
14
+ style,
15
+ className,
16
+ alt,
17
+ src,
18
+ isError,
19
+ setIsError,
20
+ events,
21
+ lazyLoad,
22
+ maskClosable,
23
+ imgPreview,
24
+ }: ImageInnerPropsType) {
25
+ const platform = usePlatform();
26
+ const [imgShow, setImgShow] = React.useState(false);
27
+ const onMaskClick = () => {
28
+ if (maskClosable) {
29
+ setImgShow(false);
30
+ }
31
+ };
32
+
33
+ const [showHeight, setShowHeight] = React.useState(0);
34
+ const realWidth = React.useRef(0);
35
+ const realHeight = React.useRef(0);
36
+ const [offsetHeight, setOffsetHeight] = React.useState(0);
37
+ const [translateX, setTranslateX] = React.useState(0);
38
+ const [translateY, setTranslateY] = React.useState(0);
39
+ const [previewScale, setPreviewScale] = React.useState(1);
40
+ React.useEffect(() => {
41
+ // 防止触发浏览器的放大缩小
42
+ const handler = (e) => e.preventDefault();
43
+ document.addEventListener('gesturestart', handler);
44
+ document.addEventListener('gesturechange', handler);
45
+ return () => {
46
+ document.removeEventListener('gesturestart', handler);
47
+ document.removeEventListener('gesturechange', handler);
48
+ };
49
+ }, []);
50
+
51
+ const bind = useGesture(
52
+ {
53
+ onClick: ({ event }) => {
54
+ // 防止冒泡出发关闭预览
55
+ event.stopPropagation();
56
+ },
57
+ onPinch: ({ offset }) => {
58
+ const [s] = offset;
59
+ setPreviewScale(s);
60
+ },
61
+ onDrag: ({ offset, event }) => {
62
+ event.stopPropagation();
63
+ const [x, y] = offset;
64
+ setTranslateX(x);
65
+ setTranslateY(y);
66
+ },
67
+ },
68
+ {
69
+ drag: {
70
+ delay: true,
71
+ preventDefault: true,
72
+ },
73
+ pinch: {
74
+ scaleBounds: { min: 0.6, max: 5 },
75
+ pointer: {
76
+ touch: true,
77
+ },
78
+ },
79
+ }
80
+ );
81
+
82
+ if (platform === 'h5' || !imgPreview || isError) {
83
+ return (
84
+ <>
85
+ <img
86
+ style={{
87
+ objectFit,
88
+ ...style,
89
+ }}
90
+ className={className}
91
+ alt={alt}
92
+ src={src}
93
+ onLoad={(e) => {
94
+ const img = e.target as HTMLImageElement;
95
+ const { naturalHeight, naturalWidth } = img;
96
+ realHeight.current = naturalHeight;
97
+ realWidth.current = naturalWidth;
98
+ setIsError(false);
99
+ events.load && events.load({}, { originEvent: e });
100
+ }}
101
+ onError={(e) => {
102
+ setIsError(true);
103
+ events.error && events.error({}, { originEvent: e });
104
+ }}
105
+ onClick={(e) => {
106
+ if (imgPreview && !isError) {
107
+ setTranslateX(0);
108
+ setTranslateY(0);
109
+ setPreviewScale(1);
110
+ const windowHeight = window.innerHeight;
111
+ const windowWidth = window.innerWidth;
112
+ let ratio = realWidth.current / realHeight.current;
113
+ if(Number.isNaN(ratio)) {
114
+ ratio = 1;
115
+ }
116
+ const height = windowWidth / ratio;
117
+ setOffsetHeight(windowHeight / 2 - height / 2);
118
+ setShowHeight(height);
119
+ setImgShow(true);
120
+ }
121
+ events.tap && events.tap({}, { originEvent: e });
122
+ }}
123
+ loading={lazyLoad ? 'lazy' : undefined}
124
+ />
125
+ {imgShow && (
126
+ <div className="weda-img-mask" onClick={onMaskClick}>
127
+ <div
128
+ onClick={() => setImgShow(false)}
129
+ className="weda-img-modal-close-btn"
130
+ >
131
+ <i className="weui-icon-clear" style={{ color: 'white' }}></i>
132
+ </div>
133
+ <div
134
+ // eslint-disable-next-line react/jsx-props-no-spreading
135
+ {...bind()}
136
+ className="weda-img-preview"
137
+ style={{
138
+ touchAction: 'none',
139
+ backgroundImage: `url(${src})`,
140
+ width: '100%',
141
+ height: showHeight,
142
+ marginTop: offsetHeight,
143
+ transform: `translate(${translateX}px, ${translateY}px) scale(${previewScale})`,
144
+ }}
145
+ ></div>
146
+ </div>
147
+ )}
148
+ </>
149
+ );
150
+ } else {
151
+ return (
152
+ <ConfigProvider classPrefix="wedatea2td">
153
+ <ImagePreview
154
+ previewSrc={src}
155
+ maskClosable={maskClosable}
156
+ className={className}
157
+ style={{ ...style, objectFit }}
158
+ >
159
+ {(open) => (
160
+ <img
161
+ style={{
162
+ objectFit,
163
+ cursor: 'zoom-in',
164
+ ...style,
165
+ }}
166
+ className={className}
167
+ alt={alt}
168
+ src={src}
169
+ onLoad={(e) => {
170
+ setIsError(false);
171
+ events.load && events.load({}, { originEvent: e });
172
+ }}
173
+ onError={(e) => {
174
+ setIsError(true);
175
+ events.error && events.error({}, { originEvent: e });
176
+ }}
177
+ loading={lazyLoad ? 'lazy' : undefined}
178
+ onClick={(e) => {
179
+ open();
180
+ events.tap && events.tap({}, { originEvent: e });
181
+ }}
182
+ />
183
+ )}
184
+ </ImagePreview>
185
+ </ConfigProvider>
186
+ );
187
+ }
188
+ }