@gm-pc/react 1.27.0 → 1.27.1-beta.0

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 (399) hide show
  1. package/package.json +3 -3
  2. package/src/common/hooks/index.ts +5 -5
  3. package/src/common/hooks/use_form/index.ts +2 -2
  4. package/src/common/hooks/use_form/use_form.ts +184 -184
  5. package/src/common/hooks/use_form/utils.ts +23 -23
  6. package/src/common/hooks/use_mutation_observer.ts +19 -19
  7. package/src/common/utils/date.ts +28 -28
  8. package/src/common/utils/get_record_partical_object.ts +4 -4
  9. package/src/common/utils/index.ts +3 -3
  10. package/src/common/utils/utils.ts +16 -16
  11. package/src/component/affix/affix.tsx +31 -31
  12. package/src/component/affix/index.ts +2 -2
  13. package/src/component/affix/stories.tsx +16 -16
  14. package/src/component/affix/style.less +3 -3
  15. package/src/component/auto_complete/auto_complete.tsx +202 -202
  16. package/src/component/auto_complete/index.ts +6 -6
  17. package/src/component/auto_complete/stories.tsx +37 -37
  18. package/src/component/auto_full/auto_full.tsx +36 -36
  19. package/src/component/auto_full/index.ts +1 -1
  20. package/src/component/box/box.tsx +29 -29
  21. package/src/component/box/box_form.tsx +83 -83
  22. package/src/component/box/box_pagination.tsx +12 -12
  23. package/src/component/box/box_panel.tsx +91 -91
  24. package/src/component/box/box_table.tsx +57 -57
  25. package/src/component/box/index.ts +10 -10
  26. package/src/component/box/stories.tsx +119 -119
  27. package/src/component/box/style.less +41 -41
  28. package/src/component/button/button.tsx +94 -94
  29. package/src/component/button/button_text.tsx +33 -33
  30. package/src/component/button/index.ts +4 -4
  31. package/src/component/button/stories.tsx +131 -131
  32. package/src/component/button/style.less +158 -158
  33. package/src/component/calendar/calendar.tsx +25 -25
  34. package/src/component/calendar/content.tsx +87 -87
  35. package/src/component/calendar/day.tsx +106 -106
  36. package/src/component/calendar/head.tsx +244 -244
  37. package/src/component/calendar/index.ts +4 -4
  38. package/src/component/calendar/range_calendar.tsx +121 -121
  39. package/src/component/calendar/stories.tsx +54 -54
  40. package/src/component/calendar/style.less +136 -136
  41. package/src/component/calendar/types.ts +56 -56
  42. package/src/component/calendar/week.tsx +27 -27
  43. package/src/component/card/card.tsx +148 -148
  44. package/src/component/card/form_card.tsx +42 -42
  45. package/src/component/card/index.ts +2 -2
  46. package/src/component/card/stories.tsx +90 -90
  47. package/src/component/card/style.less +125 -125
  48. package/src/component/checkbox/checkbox.tsx +75 -75
  49. package/src/component/checkbox/checkbox_group.tsx +51 -51
  50. package/src/component/checkbox/index.ts +5 -5
  51. package/src/component/checkbox/stories.tsx +152 -152
  52. package/src/component/checkbox/style.less +73 -73
  53. package/src/component/checkbox/util.ts +19 -19
  54. package/src/component/collapse/collapse.tsx +27 -27
  55. package/src/component/collapse/index.ts +2 -2
  56. package/src/component/collapse/stories.tsx +21 -21
  57. package/src/component/color_picker/color_list.ts +34 -34
  58. package/src/component/color_picker/color_picker.tsx +43 -43
  59. package/src/component/color_picker/color_select.tsx +97 -97
  60. package/src/component/color_picker/index.ts +2 -2
  61. package/src/component/color_picker/stories.tsx +20 -20
  62. package/src/component/color_picker/style.less +41 -41
  63. package/src/component/config_provider/config_provider.tsx +16 -16
  64. package/src/component/config_provider/context.ts +10 -10
  65. package/src/component/config_provider/index.ts +3 -3
  66. package/src/component/controlled_form/context.tsx +18 -18
  67. package/src/component/controlled_form/controlled_form.tsx +141 -141
  68. package/src/component/controlled_form/index.ts +8 -8
  69. package/src/component/controlled_form/items/index.tsx +115 -115
  70. package/src/component/controlled_form/items/utils.ts +132 -132
  71. package/src/component/controlled_form/stories/components/date_range_filter.tsx +83 -83
  72. package/src/component/controlled_form/stories/components/index.ts +2 -2
  73. package/src/component/controlled_form/stories/components/search_filter.tsx +52 -52
  74. package/src/component/controlled_form/stories/stories.tsx +372 -372
  75. package/src/component/date_picker/date_picker.tsx +187 -187
  76. package/src/component/date_picker/index.ts +2 -2
  77. package/src/component/date_picker/overlay.tsx +115 -115
  78. package/src/component/date_picker/stories.tsx +109 -109
  79. package/src/component/date_picker/style.less +23 -23
  80. package/src/component/date_picker/time_select.tsx +58 -58
  81. package/src/component/date_picker/types.ts +7 -7
  82. package/src/component/date_range_picker/date_range_picker.tsx +144 -144
  83. package/src/component/date_range_picker/index.ts +2 -2
  84. package/src/component/date_range_picker/left.tsx +107 -107
  85. package/src/component/date_range_picker/overlay.tsx +204 -204
  86. package/src/component/date_range_picker/stories.tsx +181 -181
  87. package/src/component/date_range_picker/style.less +41 -41
  88. package/src/component/date_range_picker/time_range_select.tsx +144 -144
  89. package/src/component/date_range_picker/two.tsx +108 -108
  90. package/src/component/date_range_picker/types.ts +42 -42
  91. package/src/component/date_range_picker/util.ts +11 -11
  92. package/src/component/dialog/alert.tsx +38 -38
  93. package/src/component/dialog/confirm.tsx +120 -120
  94. package/src/component/dialog/delete_com.tsx +27 -27
  95. package/src/component/dialog/dialog.tsx +70 -70
  96. package/src/component/dialog/index.ts +16 -16
  97. package/src/component/dialog/prompt.tsx +95 -95
  98. package/src/component/dialog/stories.tsx +195 -195
  99. package/src/component/dialog/types.ts +70 -70
  100. package/src/component/divider/divider.tsx +25 -25
  101. package/src/component/divider/index.ts +2 -2
  102. package/src/component/divider/stories.tsx +14 -14
  103. package/src/component/divider/style.less +29 -29
  104. package/src/component/flex/flex.tsx +133 -133
  105. package/src/component/flex/index.ts +2 -2
  106. package/src/component/flex/stories.tsx +17 -17
  107. package/src/component/flex/style.less +105 -105
  108. package/src/component/flip_number/flip_number.tsx +209 -209
  109. package/src/component/flip_number/index.ts +2 -2
  110. package/src/component/flip_number/stories.tsx +28 -28
  111. package/src/component/flip_number/utils.ts +58 -58
  112. package/src/component/form/context.tsx +15 -15
  113. package/src/component/form/form.tsx +142 -142
  114. package/src/component/form/form_block.tsx +39 -39
  115. package/src/component/form/form_button.tsx +28 -28
  116. package/src/component/form/form_group.tsx +157 -157
  117. package/src/component/form/form_item.tsx +141 -141
  118. package/src/component/form/form_panel.tsx +63 -63
  119. package/src/component/form/index.ts +15 -15
  120. package/src/component/form/stories.tsx +448 -448
  121. package/src/component/form/style.less +159 -159
  122. package/src/component/form/types.ts +110 -110
  123. package/src/component/function_set/function_set.tsx +84 -84
  124. package/src/component/function_set/index.ts +2 -2
  125. package/src/component/function_set/overlay.tsx +41 -41
  126. package/src/component/function_set/stories.tsx +71 -71
  127. package/src/component/function_set/types.ts +15 -15
  128. package/src/component/function_set/utils.ts +21 -21
  129. package/src/component/grid/col.tsx +55 -55
  130. package/src/component/grid/index.ts +3 -3
  131. package/src/component/grid/mixin.less +48 -48
  132. package/src/component/grid/row.tsx +27 -27
  133. package/src/component/grid/stories.tsx +65 -65
  134. package/src/component/grid/style.less +27 -27
  135. package/src/component/grid/types.ts +35 -35
  136. package/src/component/grid/util.ts +12 -12
  137. package/src/component/icon_down_up/icon_down_up.tsx +22 -22
  138. package/src/component/icon_down_up/index.ts +2 -2
  139. package/src/component/icon_down_up/stories.tsx +21 -21
  140. package/src/component/icon_down_up/style.less +10 -10
  141. package/src/component/icon_expand/icon_expand.tsx +22 -22
  142. package/src/component/icon_expand/index.ts +1 -1
  143. package/src/component/img_uploader/img_uploader.tsx +168 -168
  144. package/src/component/img_uploader/index.ts +2 -2
  145. package/src/component/img_uploader/stories.tsx +58 -58
  146. package/src/component/img_uploader/style.less +22 -22
  147. package/src/component/input/index.ts +5 -5
  148. package/src/component/input/input.tsx +24 -24
  149. package/src/component/input/input_close.tsx +51 -51
  150. package/src/component/input/stories.tsx +56 -56
  151. package/src/component/input/style.less +33 -33
  152. package/src/component/input_number/index.ts +2 -2
  153. package/src/component/input_number/input_number.tsx +115 -115
  154. package/src/component/input_number/stories.tsx +27 -27
  155. package/src/component/input_number/style.less +10 -10
  156. package/src/component/input_number/utils.ts +44 -44
  157. package/src/component/label/index.tsx +19 -19
  158. package/src/component/label/stories.tsx +26 -26
  159. package/src/component/label/style.less +34 -34
  160. package/src/component/layout_root/index.ts +2 -2
  161. package/src/component/layout_root/layout_root.tsx +116 -116
  162. package/src/component/layout_root/types.ts +38 -38
  163. package/src/component/level_list/index.ts +2 -2
  164. package/src/component/level_list/level_item.tsx +79 -79
  165. package/src/component/level_list/level_list.tsx +123 -123
  166. package/src/component/level_list/stories/constants.ts +72 -72
  167. package/src/component/level_list/stories/stories.tsx +87 -87
  168. package/src/component/level_list/style.less +41 -41
  169. package/src/component/level_list/types.ts +36 -36
  170. package/src/component/level_list/utils.ts +19 -19
  171. package/src/component/level_select/index.ts +7 -7
  172. package/src/component/level_select/level_select.tsx +216 -216
  173. package/src/component/level_select/multiple_level_select.tsx +104 -104
  174. package/src/component/level_select/stories.tsx +102 -102
  175. package/src/component/level_select/types.ts +38 -38
  176. package/src/component/level_select/util.ts +20 -20
  177. package/src/component/list/base.tsx +129 -129
  178. package/src/component/list/index.ts +3 -3
  179. package/src/component/list/list.tsx +61 -61
  180. package/src/component/list/stories.tsx +113 -113
  181. package/src/component/list/style.less +58 -58
  182. package/src/component/list/types.ts +37 -37
  183. package/src/component/loading/index.ts +10 -10
  184. package/src/component/loading/loading.tsx +26 -26
  185. package/src/component/loading/loading_chunk.tsx +37 -37
  186. package/src/component/loading/loading_full_screen.tsx +45 -45
  187. package/src/component/loading/stories.tsx +43 -43
  188. package/src/component/loading/style.less +69 -69
  189. package/src/component/loading/types.ts +30 -30
  190. package/src/component/mask/index.ts +2 -2
  191. package/src/component/mask/mask.tsx +22 -22
  192. package/src/component/mask/style.less +10 -10
  193. package/src/component/modal/clean_modal.tsx +14 -14
  194. package/src/component/modal/index.ts +5 -5
  195. package/src/component/modal/modal.tsx +145 -145
  196. package/src/component/modal/right_side_modal.tsx +22 -22
  197. package/src/component/modal/stories.tsx +132 -132
  198. package/src/component/modal/style.less +138 -138
  199. package/src/component/modal/types.ts +27 -27
  200. package/src/component/more_select/base.tsx +408 -408
  201. package/src/component/more_select/index.ts +6 -6
  202. package/src/component/more_select/more_select.tsx +137 -137
  203. package/src/component/more_select/render_list_filter.ts +39 -39
  204. package/src/component/more_select/stories.tsx +323 -323
  205. package/src/component/more_select/style.less +72 -72
  206. package/src/component/more_select/types.ts +114 -114
  207. package/src/component/multiple_selection/index.ts +2 -2
  208. package/src/component/multiple_selection/multiple_selection.tsx +118 -118
  209. package/src/component/multiple_selection/stories.tsx +37 -37
  210. package/src/component/multiple_selection/style.less +57 -57
  211. package/src/component/n_progress/index.ts +1 -1
  212. package/src/component/n_progress/n_progress.tsx +39 -39
  213. package/src/component/n_progress/stories.tsx +25 -25
  214. package/src/component/n_progress/style.less +39 -39
  215. package/src/component/nav/a.tsx +7 -7
  216. package/src/component/nav/index.ts +10 -10
  217. package/src/component/nav/nav.tsx +114 -114
  218. package/src/component/nav/nav_item.tsx +98 -98
  219. package/src/component/nav/nav_single_item.tsx +28 -28
  220. package/src/component/nav/popup.tsx +100 -100
  221. package/src/component/nav/portal.ts +17 -17
  222. package/src/component/nav/stories.tsx +152 -152
  223. package/src/component/nav/style.less +246 -246
  224. package/src/component/nav/types.ts +93 -93
  225. package/src/component/pagination/index.ts +2 -2
  226. package/src/component/pagination/left.tsx +56 -56
  227. package/src/component/pagination/page_with_count.tsx +115 -115
  228. package/src/component/pagination/page_without_count.tsx +64 -64
  229. package/src/component/pagination/pagination.tsx +23 -23
  230. package/src/component/pagination/right.tsx +79 -79
  231. package/src/component/pagination/stories.tsx +63 -63
  232. package/src/component/pagination/style.less +51 -51
  233. package/src/component/pagination/types.ts +18 -18
  234. package/src/component/pagination/util.ts +7 -7
  235. package/src/component/popover/index.ts +2 -2
  236. package/src/component/popover/popover.tsx +279 -279
  237. package/src/component/popover/stories.tsx +104 -104
  238. package/src/component/popover/types.ts +25 -25
  239. package/src/component/popover/utils.ts +22 -22
  240. package/src/component/popup/element_in_viewport.ts +33 -33
  241. package/src/component/popup/index.ts +4 -4
  242. package/src/component/popup/popup.tsx +149 -149
  243. package/src/component/popup/popup_content_confirm.tsx +106 -106
  244. package/src/component/popup/style.less +107 -107
  245. package/src/component/price/constant.ts +4 -4
  246. package/src/component/price/event_bus.ts +13 -13
  247. package/src/component/price/index.ts +2 -2
  248. package/src/component/price/price.tsx +154 -154
  249. package/src/component/price/stories.tsx +22 -22
  250. package/src/component/progress/index.ts +2 -2
  251. package/src/component/progress/progress.tsx +53 -53
  252. package/src/component/progress/stories.tsx +20 -20
  253. package/src/component/progress/style.less +35 -35
  254. package/src/component/progress_circle/index.ts +2 -2
  255. package/src/component/progress_circle/progress_circle.tsx +85 -85
  256. package/src/component/progress_circle/stories.tsx +31 -31
  257. package/src/component/progress_circle/style.less +21 -21
  258. package/src/component/radio/index.ts +5 -5
  259. package/src/component/radio/radio.tsx +72 -72
  260. package/src/component/radio/radio_group.tsx +48 -48
  261. package/src/component/radio/stories.tsx +103 -103
  262. package/src/component/radio/style.less +56 -56
  263. package/src/component/radio/util.ts +19 -19
  264. package/src/component/recommend_input/index.ts +2 -2
  265. package/src/component/recommend_input/recommend_input.tsx +100 -100
  266. package/src/component/recommend_input/stories.tsx +47 -47
  267. package/src/component/recommend_input/style.less +25 -25
  268. package/src/component/select/index.ts +2 -2
  269. package/src/component/select/select.tsx +172 -172
  270. package/src/component/select/stories.tsx +140 -140
  271. package/src/component/select/style.less +4 -4
  272. package/src/component/select/types.ts +29 -29
  273. package/src/component/selection/index.ts +2 -2
  274. package/src/component/selection/selection.tsx +162 -162
  275. package/src/component/selection/stories.tsx +45 -45
  276. package/src/component/selection/style.less +65 -65
  277. package/src/component/steps/index.ts +2 -2
  278. package/src/component/steps/steps.tsx +61 -61
  279. package/src/component/steps/stories.tsx +18 -18
  280. package/src/component/steps/style.less +39 -39
  281. package/src/component/storage/index.ts +1 -1
  282. package/src/component/storage/storage.ts +7 -7
  283. package/src/component/storage/stories.tsx +7 -7
  284. package/src/component/switch/index.ts +2 -2
  285. package/src/component/switch/stories.tsx +39 -39
  286. package/src/component/switch/style.less +60 -60
  287. package/src/component/switch/switch.tsx +127 -127
  288. package/src/component/table_select/index.ts +2 -2
  289. package/src/component/table_select/stories.tsx +97 -97
  290. package/src/component/table_select/style.less +20 -20
  291. package/src/component/table_select/table_select.tsx +92 -92
  292. package/src/component/table_select/types.ts +30 -30
  293. package/src/component/table_select/util.ts +15 -15
  294. package/src/component/tabs/index.ts +2 -2
  295. package/src/component/tabs/stories.tsx +172 -172
  296. package/src/component/tabs/style.less +149 -149
  297. package/src/component/tabs/tabs.tsx +232 -232
  298. package/src/component/textarea/index.ts +3 -3
  299. package/src/component/textarea/stories.tsx +37 -37
  300. package/src/component/textarea/style.less +12 -12
  301. package/src/component/textarea/textarea.tsx +22 -22
  302. package/src/component/time_span/index.ts +4 -4
  303. package/src/component/time_span/stories.tsx +87 -87
  304. package/src/component/time_span/style.less +45 -45
  305. package/src/component/time_span/time_span.tsx +129 -129
  306. package/src/component/time_span/time_span_picker.tsx +71 -71
  307. package/src/component/time_span/types.ts +58 -58
  308. package/src/component/time_span/util.ts +18 -18
  309. package/src/component/tip/index.ts +2 -2
  310. package/src/component/tip/stories.tsx +44 -44
  311. package/src/component/tip/style.less +53 -53
  312. package/src/component/tip/tip.tsx +95 -95
  313. package/src/component/tip/types.ts +20 -20
  314. package/src/component/tooltip/index.ts +2 -2
  315. package/src/component/tooltip/stories.tsx +32 -32
  316. package/src/component/tooltip/tooltip.tsx +40 -40
  317. package/src/component/transfer/index.ts +2 -2
  318. package/src/component/transfer/stories.tsx +140 -140
  319. package/src/component/transfer/transfer.tsx +147 -147
  320. package/src/component/transfer/types.ts +42 -42
  321. package/src/component/tree/bottom.tsx +34 -34
  322. package/src/component/tree/find.tsx +73 -73
  323. package/src/component/tree/index.ts +2 -2
  324. package/src/component/tree/item.tsx +75 -75
  325. package/src/component/tree/list.tsx +123 -123
  326. package/src/component/tree/search.tsx +29 -29
  327. package/src/component/tree/stories.tsx +309 -309
  328. package/src/component/tree/style.less +35 -35
  329. package/src/component/tree/tree.tsx +238 -238
  330. package/src/component/tree/types.ts +155 -155
  331. package/src/component/tree/util.ts +208 -208
  332. package/src/component/uploader/default_container.tsx +24 -24
  333. package/src/component/uploader/default_image.tsx +15 -15
  334. package/src/component/uploader/index.ts +10 -10
  335. package/src/component/uploader/stories.tsx +53 -53
  336. package/src/component/uploader/style.less +22 -22
  337. package/src/component/uploader/types.ts +25 -25
  338. package/src/component/uploader/uploader.tsx +62 -62
  339. package/src/component/v_browser/context/browser.ts +7 -7
  340. package/src/component/v_browser/context/browserWindow.ts +7 -7
  341. package/src/component/v_browser/hooks/useWindowEffect.ts +53 -53
  342. package/src/component/v_browser/index.ts +4 -4
  343. package/src/component/v_browser/types.ts +46 -46
  344. package/src/component/v_browser/ui/iframe_portal.tsx +28 -28
  345. package/src/component/v_browser/ui/index.tsx +213 -213
  346. package/src/component/v_browser/ui/style.less +113 -113
  347. package/src/component/v_browser/ui/window_wrapper.tsx +74 -74
  348. package/src/component/v_browser/v_browser.stories.mdx +128 -128
  349. package/src/component/v_browser/v_browser.tsx +287 -287
  350. package/src/css/base.less +64 -64
  351. package/src/css/bg.less +52 -52
  352. package/src/css/border.less +40 -40
  353. package/src/css/cursor.less +19 -19
  354. package/src/css/display.less +16 -16
  355. package/src/css/distance.less +93 -93
  356. package/src/css/error.less +8 -8
  357. package/src/css/other.less +15 -15
  358. package/src/css/overflow.less +23 -23
  359. package/src/css/position.less +11 -11
  360. package/src/css/svg.less +48 -48
  361. package/src/css/text.less +127 -127
  362. package/src/css/var/mixin.less +75 -75
  363. package/src/css/var/variables.less +125 -125
  364. package/src/event_type.ts +11 -11
  365. package/src/index.less +64 -64
  366. package/src/index.ts +61 -61
  367. package/src/svg/calendar-month.svg +8 -8
  368. package/src/svg/calendar-year.svg +13 -13
  369. package/src/svg/calendar.svg +17 -17
  370. package/src/svg/check-detail.svg +18 -18
  371. package/src/svg/close-circle.svg +13 -13
  372. package/src/svg/close-square.svg +12 -12
  373. package/src/svg/closeup.svg +20 -20
  374. package/src/svg/delete.svg +10 -10
  375. package/src/svg/down-small.svg +1 -1
  376. package/src/svg/down.svg +1 -1
  377. package/src/svg/edit-box.svg +17 -17
  378. package/src/svg/edit-pen.svg +17 -17
  379. package/src/svg/empty.svg +27 -27
  380. package/src/svg/expand.svg +21 -21
  381. package/src/svg/left-small.svg +1 -1
  382. package/src/svg/more.svg +10 -10
  383. package/src/svg/next.svg +40 -40
  384. package/src/svg/pen.svg +12 -12
  385. package/src/svg/remove.svg +1 -1
  386. package/src/svg/right-small.svg +1 -1
  387. package/src/svg/search.svg +8 -8
  388. package/src/svg/setting.svg +17 -17
  389. package/src/svg/up-small.svg +1 -1
  390. package/src/svg/up.svg +1 -1
  391. package/src/svg/vbrowser-tab-delete.svg +8 -8
  392. package/src/svg/vbrowser-tab-left.svg +8 -8
  393. package/src/svg/vbrowser-tab-right.svg +8 -8
  394. package/src/types.ts +33 -33
  395. package/src/validator/index.ts +16 -16
  396. package/src/validator/rules.ts +61 -61
  397. package/src/validator/types.ts +10 -10
  398. package/src/validator/validator.ts +95 -95
  399. package/src/var.less +2 -2
@@ -1,168 +1,168 @@
1
- import React, {
2
- CSSProperties,
3
- FC,
4
- PropsWithChildren,
5
- ReactNode,
6
- MouseEvent,
7
- useCallback,
8
- } from 'react'
9
- import classNames from 'classnames'
10
- import { Uploader, UploaderFile, DefaultImage } from '../uploader'
11
- import { Flex } from '../flex'
12
- import SvgCloseCircle from '../../svg/close-circle.svg'
13
-
14
- // tip: 为了兼容特殊情况,设置 url 属性,提示调用方。
15
- type CheckType<T> = T extends String ? string : T & { url: string }
16
-
17
- export interface ImgUploaderProps<T> {
18
- /** 已上传图片 URL 集合 */
19
- data: CheckType<T>[]
20
- /** 图片修改回调 */
21
- onChange(lists: CheckType<T>[]): void
22
- /** 上传按钮回调函数 */
23
- onUpload(data: UploaderFile[]): Promise<CheckType<T>[]>
24
- disabled?: boolean
25
- accept?: string
26
- /** 注意,这是添加按钮选择单图还是多图 */
27
- multiple?: boolean
28
- /** 图片的尺寸 */
29
- contentSize?: {
30
- width: string
31
- height: string
32
- }
33
- desc?: string
34
- /** 自定义图片展示 */
35
- imgRender?(item: CheckType<T>): ReactNode
36
- /** max 最大图片数 */
37
- max?: number
38
- className?: string
39
- style?: CSSProperties
40
- }
41
-
42
- const ImgUploader = <T,>(
43
- props: PropsWithChildren<ImgUploaderProps<T>>
44
- ): ReturnType<FC<ImgUploaderProps<T>>> => {
45
- let {
46
- data,
47
- onChange,
48
- onUpload,
49
- disabled,
50
- accept,
51
- multiple,
52
- contentSize,
53
- desc,
54
- className,
55
- children,
56
- imgRender,
57
- max,
58
- ...rest
59
- } = props
60
-
61
- if (!imgRender) {
62
- imgRender = (item: any) => (
63
- <img
64
- src={item?.url || item}
65
- alt=''
66
- style={{
67
- width: '100%',
68
- height: '100%',
69
- objectFit: 'contain',
70
- }}
71
- />
72
- )
73
- }
74
-
75
- const handleUploader = useCallback(
76
- (files: UploaderFile[]): void => {
77
- const result = onUpload(files)
78
- if (result && result.then) {
79
- result.then((urls) => {
80
- onChange(data.concat(urls))
81
- return urls
82
- })
83
- }
84
- },
85
- [onUpload, onChange, data]
86
- )
87
-
88
- const handleReplace = useCallback(
89
- (files: UploaderFile[], index: number): void => {
90
- const result = onUpload(files)
91
- if (result && result.then) {
92
- result.then((urls) => {
93
- const newData = [...data]
94
- newData[index] = urls[0]
95
-
96
- onChange(newData)
97
-
98
- return urls
99
- })
100
- }
101
- },
102
- [onUpload, onChange, data]
103
- )
104
-
105
- const handleRemove = useCallback(
106
- (index: number): void => {
107
- const newData = data.filter((_, i) => i !== index)
108
- onChange(newData)
109
- },
110
- [data, onChange]
111
- )
112
-
113
- return (
114
- <div {...rest} className={classNames('gm-img-uploader', className)}>
115
- <Flex wrap>
116
- {data.map((item, index) => (
117
- <Uploader
118
- onUpload={(files) => handleReplace(files, index)}
119
- key={index}
120
- accept={accept}
121
- disabled={disabled}
122
- className='gm-img-uploader-item'
123
- >
124
- <DefaultImage
125
- style={{ width: contentSize!.width, height: contentSize!.height }}
126
- >
127
- {imgRender!(item)}
128
- </DefaultImage>
129
- {!disabled && (
130
- <SvgCloseCircle
131
- className='gm-img-uploader-close'
132
- onClick={(event: MouseEvent) => {
133
- event.stopPropagation()
134
- handleRemove(index)
135
- }}
136
- />
137
- )}
138
- </Uploader>
139
- ))}
140
- {children ?? (
141
- <Uploader
142
- disabled={disabled || (max ? data.length >= max : false)}
143
- accept={accept}
144
- onUpload={handleUploader}
145
- multiple={multiple}
146
- >
147
- <DefaultImage
148
- style={{
149
- width: contentSize!.width,
150
- height: contentSize!.height,
151
- }}
152
- />
153
- </Uploader>
154
- )}
155
- </Flex>
156
- {desc && <div className='gm-text-desc gm-margin-5'>{desc}</div>}
157
- </div>
158
- )
159
- }
160
-
161
- ImgUploader.defaultProps = {
162
- contentSize: {
163
- width: '64px',
164
- height: '64px',
165
- },
166
- accept: 'image/*',
167
- }
168
- export default ImgUploader
1
+ import React, {
2
+ CSSProperties,
3
+ FC,
4
+ PropsWithChildren,
5
+ ReactNode,
6
+ MouseEvent,
7
+ useCallback,
8
+ } from 'react'
9
+ import classNames from 'classnames'
10
+ import { Uploader, UploaderFile, DefaultImage } from '../uploader'
11
+ import { Flex } from '../flex'
12
+ import SvgCloseCircle from '../../svg/close-circle.svg'
13
+
14
+ // tip: 为了兼容特殊情况,设置 url 属性,提示调用方。
15
+ type CheckType<T> = T extends String ? string : T & { url: string }
16
+
17
+ export interface ImgUploaderProps<T> {
18
+ /** 已上传图片 URL 集合 */
19
+ data: CheckType<T>[]
20
+ /** 图片修改回调 */
21
+ onChange(lists: CheckType<T>[]): void
22
+ /** 上传按钮回调函数 */
23
+ onUpload(data: UploaderFile[]): Promise<CheckType<T>[]>
24
+ disabled?: boolean
25
+ accept?: string
26
+ /** 注意,这是添加按钮选择单图还是多图 */
27
+ multiple?: boolean
28
+ /** 图片的尺寸 */
29
+ contentSize?: {
30
+ width: string
31
+ height: string
32
+ }
33
+ desc?: string
34
+ /** 自定义图片展示 */
35
+ imgRender?(item: CheckType<T>): ReactNode
36
+ /** max 最大图片数 */
37
+ max?: number
38
+ className?: string
39
+ style?: CSSProperties
40
+ }
41
+
42
+ const ImgUploader = <T,>(
43
+ props: PropsWithChildren<ImgUploaderProps<T>>
44
+ ): ReturnType<FC<ImgUploaderProps<T>>> => {
45
+ let {
46
+ data,
47
+ onChange,
48
+ onUpload,
49
+ disabled,
50
+ accept,
51
+ multiple,
52
+ contentSize,
53
+ desc,
54
+ className,
55
+ children,
56
+ imgRender,
57
+ max,
58
+ ...rest
59
+ } = props
60
+
61
+ if (!imgRender) {
62
+ imgRender = (item: any) => (
63
+ <img
64
+ src={item?.url || item}
65
+ alt=''
66
+ style={{
67
+ width: '100%',
68
+ height: '100%',
69
+ objectFit: 'contain',
70
+ }}
71
+ />
72
+ )
73
+ }
74
+
75
+ const handleUploader = useCallback(
76
+ (files: UploaderFile[]): void => {
77
+ const result = onUpload(files)
78
+ if (result && result.then) {
79
+ result.then((urls) => {
80
+ onChange(data.concat(urls))
81
+ return urls
82
+ })
83
+ }
84
+ },
85
+ [onUpload, onChange, data]
86
+ )
87
+
88
+ const handleReplace = useCallback(
89
+ (files: UploaderFile[], index: number): void => {
90
+ const result = onUpload(files)
91
+ if (result && result.then) {
92
+ result.then((urls) => {
93
+ const newData = [...data]
94
+ newData[index] = urls[0]
95
+
96
+ onChange(newData)
97
+
98
+ return urls
99
+ })
100
+ }
101
+ },
102
+ [onUpload, onChange, data]
103
+ )
104
+
105
+ const handleRemove = useCallback(
106
+ (index: number): void => {
107
+ const newData = data.filter((_, i) => i !== index)
108
+ onChange(newData)
109
+ },
110
+ [data, onChange]
111
+ )
112
+
113
+ return (
114
+ <div {...rest} className={classNames('gm-img-uploader', className)}>
115
+ <Flex wrap>
116
+ {data.map((item, index) => (
117
+ <Uploader
118
+ onUpload={(files) => handleReplace(files, index)}
119
+ key={index}
120
+ accept={accept}
121
+ disabled={disabled}
122
+ className='gm-img-uploader-item'
123
+ >
124
+ <DefaultImage
125
+ style={{ width: contentSize!.width, height: contentSize!.height }}
126
+ >
127
+ {imgRender!(item)}
128
+ </DefaultImage>
129
+ {!disabled && (
130
+ <SvgCloseCircle
131
+ className='gm-img-uploader-close'
132
+ onClick={(event: MouseEvent) => {
133
+ event.stopPropagation()
134
+ handleRemove(index)
135
+ }}
136
+ />
137
+ )}
138
+ </Uploader>
139
+ ))}
140
+ {children ?? (
141
+ <Uploader
142
+ disabled={disabled || (max ? data.length >= max : false)}
143
+ accept={accept}
144
+ onUpload={handleUploader}
145
+ multiple={multiple}
146
+ >
147
+ <DefaultImage
148
+ style={{
149
+ width: contentSize!.width,
150
+ height: contentSize!.height,
151
+ }}
152
+ />
153
+ </Uploader>
154
+ )}
155
+ </Flex>
156
+ {desc && <div className='gm-text-desc gm-margin-5'>{desc}</div>}
157
+ </div>
158
+ )
159
+ }
160
+
161
+ ImgUploader.defaultProps = {
162
+ contentSize: {
163
+ width: '64px',
164
+ height: '64px',
165
+ },
166
+ accept: 'image/*',
167
+ }
168
+ export default ImgUploader
@@ -1,2 +1,2 @@
1
- export { default as ImgUploader } from './img_uploader'
2
- export type { ImgUploaderProps } from './img_uploader'
1
+ export { default as ImgUploader } from './img_uploader'
2
+ export type { ImgUploaderProps } from './img_uploader'
@@ -1,58 +1,58 @@
1
- import React from 'react'
2
- import ImgUploader from './img_uploader'
3
- import { observable } from 'mobx'
4
- import { UploaderFile } from '../uploader'
5
-
6
- const store = observable({
7
- data: ['https://js.guanmai.cn/static_storage/json/common/logo/default/logo.pure.png'],
8
- setData(newData: string[]) {
9
- this.data = newData
10
- },
11
- })
12
-
13
- const handleUpload = (files: UploaderFile[]) => {
14
- console.log(files)
15
- // 调用方做突破尺寸和文件大小判断
16
-
17
- return Promise.resolve([
18
- 'https://js.guanmai.cn/static_storage/json/common/logo/default/logo.pure.png',
19
- ])
20
- }
21
-
22
- export const ComImgUploader = () => (
23
- <div>
24
- <div style={{ height: '100px' }} />
25
- <ImgUploader
26
- data={store.data}
27
- onUpload={handleUpload}
28
- onChange={(data) => {
29
- store.setData(data)
30
- }}
31
- accept='image/*'
32
- desc='图片尺寸720*720像素,大小小于1M'
33
- multiple
34
- max={2}
35
- />
36
- </div>
37
- )
38
-
39
- export const ComImgUploaderWithDisabled = () => (
40
- <div>
41
- <div style={{ height: '100px' }} />
42
- <ImgUploader
43
- disabled
44
- data={store.data}
45
- onUpload={handleUpload}
46
- onChange={(data) => {
47
- store.setData(data)
48
- }}
49
- accept='image/*'
50
- desc='图片尺寸720*720像素,大小小于1M'
51
- multiple
52
- />
53
- </div>
54
- )
55
-
56
- export default {
57
- title: '表单/ImgUploader',
58
- }
1
+ import React from 'react'
2
+ import ImgUploader from './img_uploader'
3
+ import { observable } from 'mobx'
4
+ import { UploaderFile } from '../uploader'
5
+
6
+ const store = observable({
7
+ data: ['https://js.guanmai.cn/static_storage/json/common/logo/default/logo.pure.png'],
8
+ setData(newData: string[]) {
9
+ this.data = newData
10
+ },
11
+ })
12
+
13
+ const handleUpload = (files: UploaderFile[]) => {
14
+ console.log(files)
15
+ // 调用方做突破尺寸和文件大小判断
16
+
17
+ return Promise.resolve([
18
+ 'https://js.guanmai.cn/static_storage/json/common/logo/default/logo.pure.png',
19
+ ])
20
+ }
21
+
22
+ export const ComImgUploader = () => (
23
+ <div>
24
+ <div style={{ height: '100px' }} />
25
+ <ImgUploader
26
+ data={store.data}
27
+ onUpload={handleUpload}
28
+ onChange={(data) => {
29
+ store.setData(data)
30
+ }}
31
+ accept='image/*'
32
+ desc='图片尺寸720*720像素,大小小于1M'
33
+ multiple
34
+ max={2}
35
+ />
36
+ </div>
37
+ )
38
+
39
+ export const ComImgUploaderWithDisabled = () => (
40
+ <div>
41
+ <div style={{ height: '100px' }} />
42
+ <ImgUploader
43
+ disabled
44
+ data={store.data}
45
+ onUpload={handleUpload}
46
+ onChange={(data) => {
47
+ store.setData(data)
48
+ }}
49
+ accept='image/*'
50
+ desc='图片尺寸720*720像素,大小小于1M'
51
+ multiple
52
+ />
53
+ </div>
54
+ )
55
+
56
+ export default {
57
+ title: '表单/ImgUploader',
58
+ }
@@ -1,22 +1,22 @@
1
- .gm-img-uploader {
2
- display: inline-block;
3
-
4
- .gm-img-uploader-item {
5
- position: relative;
6
- margin-right: 10px;
7
-
8
- .gm-img-uploader-close {
9
- position: absolute;
10
- cursor: pointer;
11
- display: none;
12
- right: -0.5em;
13
- top: -0.5em;
14
- }
15
-
16
- &:hover {
17
- .gm-img-uploader-close {
18
- display: block;
19
- }
20
- }
21
- }
22
- }
1
+ .gm-img-uploader {
2
+ display: inline-block;
3
+
4
+ .gm-img-uploader-item {
5
+ position: relative;
6
+ margin-right: 10px;
7
+
8
+ .gm-img-uploader-close {
9
+ position: absolute;
10
+ cursor: pointer;
11
+ display: none;
12
+ right: -0.5em;
13
+ top: -0.5em;
14
+ }
15
+
16
+ &:hover {
17
+ .gm-img-uploader-close {
18
+ display: block;
19
+ }
20
+ }
21
+ }
22
+ }
@@ -1,5 +1,5 @@
1
- export { default as Input } from './input'
2
- export { default as InputClose } from './input_close'
3
-
4
- export type { InputProps } from './input'
5
- export type { InputCloseProps } from './input_close'
1
+ export { default as Input } from './input'
2
+ export { default as InputClose } from './input_close'
3
+
4
+ export type { InputProps } from './input'
5
+ export type { InputCloseProps } from './input_close'
@@ -1,24 +1,24 @@
1
- import React, { forwardRef, InputHTMLAttributes, useContext } from 'react'
2
- import classNames from 'classnames'
3
- import { ConfigContext } from '../config_provider'
4
-
5
- type InputProps = InputHTMLAttributes<HTMLInputElement>
6
-
7
- /** 没什么,就一个input,多了个类名 gm-input 用来和库配合做UI */
8
- const Input = forwardRef<HTMLInputElement, InputProps>((props, ref) => {
9
- const { className, value = '', ...rest } = props
10
- const { fontSize } = useContext(ConfigContext)
11
- return (
12
- <input
13
- ref={ref}
14
- {...rest}
15
- value={value}
16
- className={classNames('gm-input', className, {
17
- [`gm-input-${fontSize}`]: fontSize,
18
- })}
19
- />
20
- )
21
- })
22
-
23
- export default Input
24
- export type { InputProps }
1
+ import React, { forwardRef, InputHTMLAttributes, useContext } from 'react'
2
+ import classNames from 'classnames'
3
+ import { ConfigContext } from '../config_provider'
4
+
5
+ type InputProps = InputHTMLAttributes<HTMLInputElement>
6
+
7
+ /** 没什么,就一个input,多了个类名 gm-input 用来和库配合做UI */
8
+ const Input = forwardRef<HTMLInputElement, InputProps>((props, ref) => {
9
+ const { className, value = '', ...rest } = props
10
+ const { fontSize } = useContext(ConfigContext)
11
+ return (
12
+ <input
13
+ ref={ref}
14
+ {...rest}
15
+ value={value}
16
+ className={classNames('gm-input', className, {
17
+ [`gm-input-${fontSize}`]: fontSize,
18
+ })}
19
+ />
20
+ )
21
+ })
22
+
23
+ export default Input
24
+ export type { InputProps }
@@ -1,51 +1,51 @@
1
- import React, { ChangeEvent, forwardRef, InputHTMLAttributes, useRef } from 'react'
2
- import classNames from 'classnames'
3
- import SVGCloseCircle from '../../svg/close-circle.svg'
4
- import { findDOMNode } from 'react-dom'
5
- import Input, { InputProps } from './input'
6
-
7
- interface InputCloseProps
8
- extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
9
- onChange?(value: string): void
10
- }
11
-
12
- const InputClose = forwardRef<HTMLInputElement, InputCloseProps>((props, ref) => {
13
- const { value, onChange, disabled, className, style, ...rest } = props
14
-
15
- const refWrap = useRef<HTMLDivElement>(null)
16
-
17
- const handleClose = () => {
18
- onChange && onChange('')
19
- const dom = findDOMNode(refWrap.current) as Element
20
- if (dom) {
21
- const input = dom.querySelector('input')
22
- if (input) {
23
- input.focus()
24
- }
25
- }
26
- }
27
-
28
- const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
29
- onChange && onChange(e.target.value)
30
- }
31
-
32
- return (
33
- <div
34
- ref={refWrap}
35
- className={classNames('gm-input-close', className, { disabled })}
36
- style={style}
37
- >
38
- <Input
39
- ref={ref}
40
- {...(rest as InputProps)}
41
- value={value}
42
- onChange={handleChange}
43
- disabled={disabled}
44
- />
45
- {value && <SVGCloseCircle onClick={handleClose} className='gm-input-close-icon' />}
46
- </div>
47
- )
48
- })
49
-
50
- export default InputClose
51
- export type { InputCloseProps }
1
+ import React, { ChangeEvent, forwardRef, InputHTMLAttributes, useRef } from 'react'
2
+ import classNames from 'classnames'
3
+ import SVGCloseCircle from '../../svg/close-circle.svg'
4
+ import { findDOMNode } from 'react-dom'
5
+ import Input, { InputProps } from './input'
6
+
7
+ interface InputCloseProps
8
+ extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
9
+ onChange?(value: string): void
10
+ }
11
+
12
+ const InputClose = forwardRef<HTMLInputElement, InputCloseProps>((props, ref) => {
13
+ const { value, onChange, disabled, className, style, ...rest } = props
14
+
15
+ const refWrap = useRef<HTMLDivElement>(null)
16
+
17
+ const handleClose = () => {
18
+ onChange && onChange('')
19
+ const dom = findDOMNode(refWrap.current) as Element
20
+ if (dom) {
21
+ const input = dom.querySelector('input')
22
+ if (input) {
23
+ input.focus()
24
+ }
25
+ }
26
+ }
27
+
28
+ const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
29
+ onChange && onChange(e.target.value)
30
+ }
31
+
32
+ return (
33
+ <div
34
+ ref={refWrap}
35
+ className={classNames('gm-input-close', className, { disabled })}
36
+ style={style}
37
+ >
38
+ <Input
39
+ ref={ref}
40
+ {...(rest as InputProps)}
41
+ value={value}
42
+ onChange={handleChange}
43
+ disabled={disabled}
44
+ />
45
+ {value && <SVGCloseCircle onClick={handleClose} className='gm-input-close-icon' />}
46
+ </div>
47
+ )
48
+ })
49
+
50
+ export default InputClose
51
+ export type { InputCloseProps }