@gm-pc/react 1.24.9-beta.7 → 1.24.9-beta.9

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 +54 -54
  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 +183 -183
  76. package/src/component/date_picker/index.ts +2 -2
  77. package/src/component/date_picker/overlay.tsx +106 -106
  78. package/src/component/date_picker/stories.tsx +108 -108
  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 +45 -45
  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 +78 -78
  231. package/src/component/pagination/stories.tsx +62 -62
  232. package/src/component/pagination/style.less +51 -51
  233. package/src/component/pagination/types.ts +16 -16
  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 +152 -152
  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 +171 -171
  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,232 +1,232 @@
1
- import React, {
2
- CSSProperties,
3
- ReactNode,
4
- useState,
5
- useRef,
6
- useEffect,
7
- useMemo,
8
- } from 'react'
9
- import classNames from 'classnames'
10
- import _ from 'lodash'
11
- import { Flex, FlexProps } from '../flex'
12
- import SVGCloseSquare from '../../svg/close-square.svg'
13
- import PopupContentConfirm from '../popup/popup_content_confirm'
14
- import Popover from '../popover/popover'
15
- import { anyCallback } from '../../types'
16
- import { judgeFunction } from '../../common/utils/utils'
17
- interface TabsItem<V extends string | number> {
18
- text: string
19
- value: V
20
- children: ReactNode
21
- disabled?: boolean
22
- /* 是否可关闭 */
23
- closable?: boolean
24
- ref?: HTMLDivElement | null
25
- /** 是否隐藏 */
26
- hide?: boolean
27
- }
28
-
29
- interface TabsProps<V extends string | number> extends Omit<FlexProps, 'onChange'> {
30
- tabs: TabsItem<V>[]
31
- defaultActive?: V
32
- active?: V
33
- onChange?(value: V): void
34
- onClose?(value: V): void
35
- onChangeValidate?(): boolean
36
- keep?: boolean
37
- light?: boolean
38
- /* didMount之后不再重新渲染 */
39
- activeOnce?: boolean
40
- /* 是否全屏 */
41
- full?: boolean
42
- className?: string
43
- column?: boolean
44
- /* 卡片类型 editable-card 可以编辑的卡片 */
45
- type?: 'editable-card'
46
- style?: CSSProperties
47
- /* 而外操作,比如新增tab的操作 */
48
- extraAction?: ReactNode
49
- popup?(value: V, closePopup: anyCallback): ReactNode
50
- isPopover?: boolean
51
- popoverContent?: ReactNode
52
- popverTitle?: string
53
- }
54
-
55
- function Tabs<V extends string | number = string>({
56
- tabs,
57
- light,
58
- active,
59
- defaultActive,
60
- keep,
61
- onChange,
62
- onClose,
63
- onChangeValidate,
64
- className,
65
- column = true,
66
- activeOnce,
67
- full,
68
- type,
69
- extraAction,
70
- isPopover,
71
- popup,
72
- popoverContent,
73
- popverTitle,
74
- ...rest
75
- }: TabsProps<V>) {
76
- tabs = useMemo(() => tabs.filter((tab) => !tab.hide), [tabs])
77
- const editableCard: boolean = type === 'editable-card'
78
-
79
- const baseTabClassName = `gm-${full ? 'framework-full-' : ''}tabs`
80
- if (active !== undefined && defaultActive !== undefined) {
81
- console.warn('prop `active` and prop `defaultActive` can not exist at the same time!')
82
- }
83
-
84
- if (active !== undefined && !onChange) {
85
- console.warn('prop `active` `onChange` must exist at the same time!')
86
- }
87
- const [selected, setSelected] = useState(defaultActive || active)
88
- const hasSelectedsRef = useRef<Set<V>>(new Set())
89
-
90
- // tab滚动使用
91
- const tabRef = useRef(null)
92
-
93
- useEffect(() => {
94
- defaultActive === undefined && active !== undefined && setSelected(active)
95
- }, [active, defaultActive])
96
-
97
- // 增加切换tab的校验
98
- const handleClick = (value: V) => {
99
- if (typeof onChangeValidate === 'function' && !onChangeValidate()) return
100
- setSelected(value)
101
- judgeFunction(onChange, value)
102
- }
103
-
104
- const tabsChildrenKeep = (tabs: TabsItem<V>[]) => (
105
- <>
106
- {_.map(tabs, (tab: TabsItem<V>) => (
107
- <div
108
- key={tab.value}
109
- className={classNames(`${baseTabClassName}-content-item`, {
110
- 'gm-hidden': selected !== tab.value,
111
- })}
112
- >
113
- {tab.children}
114
- </div>
115
- ))}
116
- </>
117
- )
118
-
119
- const tabsChildren = () => {
120
- if (activeOnce && selected) {
121
- hasSelectedsRef.current.add(selected)
122
- }
123
- let items: typeof tabs = []
124
- if (activeOnce) {
125
- items = _.filter(tabs, (tab) => hasSelectedsRef.current.has(tab.value))
126
- } else {
127
- const item = _.find(tabs, (tab) => tab.value === selected)
128
- if (item) {
129
- items = [item]
130
- }
131
- }
132
- return tabsChildrenKeep(items)
133
- }
134
-
135
- const handleClose = (value: V) => {
136
- judgeFunction(onClose, value)
137
- }
138
-
139
- const handleDelete = (value: V) => {
140
- handleClose(value)
141
- }
142
-
143
- const innerPopup: TabsProps<V>['popup'] = (value, closePopover) => {
144
- if (popup) {
145
- return popup(value, closePopover)
146
- }
147
-
148
- return (
149
- <PopupContentConfirm
150
- type='delete'
151
- title={popverTitle}
152
- onCancel={closePopover}
153
- onDelete={() => handleDelete(value)}
154
- >
155
- {popoverContent}
156
- </PopupContentConfirm>
157
- )
158
- }
159
-
160
- return (
161
- <Flex
162
- {...rest}
163
- column={column}
164
- className={classNames(
165
- baseTabClassName,
166
- {
167
- 'gm-tabs-light': light,
168
- 'gm-tabs-edit': editableCard,
169
- },
170
- className
171
- )}
172
- >
173
- <div className={`${baseTabClassName}-head-fix`}>
174
- <Flex alignEnd className={`${baseTabClassName}-head`}>
175
- <Flex ref={tabRef} alignEnd className='gm-tabs-max-head-scroll'>
176
- {_.map(tabs, (tab) => {
177
- const isClose = tab.closable === false ? false : editableCard
178
- return (
179
- <Flex
180
- alignCenter
181
- id={`#gm-tabs-${tab.value}`}
182
- ref={(ref) => (tab.ref = ref)}
183
- key={tab.value}
184
- className={classNames(`${baseTabClassName}-head-item`, {
185
- active: !tab.disabled && selected === tab.value,
186
- 'gm-tabs-head-disabled': tab.disabled,
187
- 'gm-tabs-closable': isClose,
188
- })}
189
- >
190
- <span
191
- title={tab.text}
192
- className={classNames({
193
- 'gm-tabs-text-overflow-ellipsis': editableCard,
194
- })}
195
- onClick={tab.disabled ? _.noop : () => handleClick(tab.value)}
196
- >
197
- {tab.text}
198
- </span>
199
-
200
- {isClose && isPopover && (
201
- <Popover
202
- center
203
- popup={(closePopover) => innerPopup(tab.value, closePopover)}
204
- >
205
- <div>
206
- <SVGCloseSquare
207
- className='tw-ml-1'
208
- style={{ width: '10px', height: '10px', marginBottom: '2px' }}
209
- />
210
- </div>
211
- </Popover>
212
- )}
213
- </Flex>
214
- )
215
- })}
216
- </Flex>
217
- {extraAction && (
218
- <Flex style={{ minWidth: '80px' }} className='tw-h-6 tw-ml-2'>
219
- {extraAction}
220
- </Flex>
221
- )}
222
- </Flex>
223
- </div>
224
- <Flex flex column className={`${baseTabClassName}-content`}>
225
- {keep ? tabsChildrenKeep(tabs) : tabsChildren()}
226
- </Flex>
227
- </Flex>
228
- )
229
- }
230
-
231
- export default Tabs
232
- export type { TabsProps, TabsItem }
1
+ import React, {
2
+ CSSProperties,
3
+ ReactNode,
4
+ useState,
5
+ useRef,
6
+ useEffect,
7
+ useMemo,
8
+ } from 'react'
9
+ import classNames from 'classnames'
10
+ import _ from 'lodash'
11
+ import { Flex, FlexProps } from '../flex'
12
+ import SVGCloseSquare from '../../svg/close-square.svg'
13
+ import PopupContentConfirm from '../popup/popup_content_confirm'
14
+ import Popover from '../popover/popover'
15
+ import { anyCallback } from '../../types'
16
+ import { judgeFunction } from '../../common/utils/utils'
17
+ interface TabsItem<V extends string | number> {
18
+ text: string
19
+ value: V
20
+ children: ReactNode
21
+ disabled?: boolean
22
+ /* 是否可关闭 */
23
+ closable?: boolean
24
+ ref?: HTMLDivElement | null
25
+ /** 是否隐藏 */
26
+ hide?: boolean
27
+ }
28
+
29
+ interface TabsProps<V extends string | number> extends Omit<FlexProps, 'onChange'> {
30
+ tabs: TabsItem<V>[]
31
+ defaultActive?: V
32
+ active?: V
33
+ onChange?(value: V): void
34
+ onClose?(value: V): void
35
+ onChangeValidate?(): boolean
36
+ keep?: boolean
37
+ light?: boolean
38
+ /* didMount之后不再重新渲染 */
39
+ activeOnce?: boolean
40
+ /* 是否全屏 */
41
+ full?: boolean
42
+ className?: string
43
+ column?: boolean
44
+ /* 卡片类型 editable-card 可以编辑的卡片 */
45
+ type?: 'editable-card'
46
+ style?: CSSProperties
47
+ /* 而外操作,比如新增tab的操作 */
48
+ extraAction?: ReactNode
49
+ popup?(value: V, closePopup: anyCallback): ReactNode
50
+ isPopover?: boolean
51
+ popoverContent?: ReactNode
52
+ popverTitle?: string
53
+ }
54
+
55
+ function Tabs<V extends string | number = string>({
56
+ tabs,
57
+ light,
58
+ active,
59
+ defaultActive,
60
+ keep,
61
+ onChange,
62
+ onClose,
63
+ onChangeValidate,
64
+ className,
65
+ column = true,
66
+ activeOnce,
67
+ full,
68
+ type,
69
+ extraAction,
70
+ isPopover,
71
+ popup,
72
+ popoverContent,
73
+ popverTitle,
74
+ ...rest
75
+ }: TabsProps<V>) {
76
+ tabs = useMemo(() => tabs.filter((tab) => !tab.hide), [tabs])
77
+ const editableCard: boolean = type === 'editable-card'
78
+
79
+ const baseTabClassName = `gm-${full ? 'framework-full-' : ''}tabs`
80
+ if (active !== undefined && defaultActive !== undefined) {
81
+ console.warn('prop `active` and prop `defaultActive` can not exist at the same time!')
82
+ }
83
+
84
+ if (active !== undefined && !onChange) {
85
+ console.warn('prop `active` `onChange` must exist at the same time!')
86
+ }
87
+ const [selected, setSelected] = useState(defaultActive || active)
88
+ const hasSelectedsRef = useRef<Set<V>>(new Set())
89
+
90
+ // tab滚动使用
91
+ const tabRef = useRef(null)
92
+
93
+ useEffect(() => {
94
+ defaultActive === undefined && active !== undefined && setSelected(active)
95
+ }, [active, defaultActive])
96
+
97
+ // 增加切换tab的校验
98
+ const handleClick = (value: V) => {
99
+ if (typeof onChangeValidate === 'function' && !onChangeValidate()) return
100
+ setSelected(value)
101
+ judgeFunction(onChange, value)
102
+ }
103
+
104
+ const tabsChildrenKeep = (tabs: TabsItem<V>[]) => (
105
+ <>
106
+ {_.map(tabs, (tab: TabsItem<V>) => (
107
+ <div
108
+ key={tab.value}
109
+ className={classNames(`${baseTabClassName}-content-item`, {
110
+ 'gm-hidden': selected !== tab.value,
111
+ })}
112
+ >
113
+ {tab.children}
114
+ </div>
115
+ ))}
116
+ </>
117
+ )
118
+
119
+ const tabsChildren = () => {
120
+ if (activeOnce && selected) {
121
+ hasSelectedsRef.current.add(selected)
122
+ }
123
+ let items: typeof tabs = []
124
+ if (activeOnce) {
125
+ items = _.filter(tabs, (tab) => hasSelectedsRef.current.has(tab.value))
126
+ } else {
127
+ const item = _.find(tabs, (tab) => tab.value === selected)
128
+ if (item) {
129
+ items = [item]
130
+ }
131
+ }
132
+ return tabsChildrenKeep(items)
133
+ }
134
+
135
+ const handleClose = (value: V) => {
136
+ judgeFunction(onClose, value)
137
+ }
138
+
139
+ const handleDelete = (value: V) => {
140
+ handleClose(value)
141
+ }
142
+
143
+ const innerPopup: TabsProps<V>['popup'] = (value, closePopover) => {
144
+ if (popup) {
145
+ return popup(value, closePopover)
146
+ }
147
+
148
+ return (
149
+ <PopupContentConfirm
150
+ type='delete'
151
+ title={popverTitle}
152
+ onCancel={closePopover}
153
+ onDelete={() => handleDelete(value)}
154
+ >
155
+ {popoverContent}
156
+ </PopupContentConfirm>
157
+ )
158
+ }
159
+
160
+ return (
161
+ <Flex
162
+ {...rest}
163
+ column={column}
164
+ className={classNames(
165
+ baseTabClassName,
166
+ {
167
+ 'gm-tabs-light': light,
168
+ 'gm-tabs-edit': editableCard,
169
+ },
170
+ className
171
+ )}
172
+ >
173
+ <div className={`${baseTabClassName}-head-fix`}>
174
+ <Flex alignEnd className={`${baseTabClassName}-head`}>
175
+ <Flex ref={tabRef} alignEnd className='gm-tabs-max-head-scroll'>
176
+ {_.map(tabs, (tab) => {
177
+ const isClose = tab.closable === false ? false : editableCard
178
+ return (
179
+ <Flex
180
+ alignCenter
181
+ id={`#gm-tabs-${tab.value}`}
182
+ ref={(ref) => (tab.ref = ref)}
183
+ key={tab.value}
184
+ className={classNames(`${baseTabClassName}-head-item`, {
185
+ active: !tab.disabled && selected === tab.value,
186
+ 'gm-tabs-head-disabled': tab.disabled,
187
+ 'gm-tabs-closable': isClose,
188
+ })}
189
+ >
190
+ <span
191
+ title={tab.text}
192
+ className={classNames({
193
+ 'gm-tabs-text-overflow-ellipsis': editableCard,
194
+ })}
195
+ onClick={tab.disabled ? _.noop : () => handleClick(tab.value)}
196
+ >
197
+ {tab.text}
198
+ </span>
199
+
200
+ {isClose && isPopover && (
201
+ <Popover
202
+ center
203
+ popup={(closePopover) => innerPopup(tab.value, closePopover)}
204
+ >
205
+ <div>
206
+ <SVGCloseSquare
207
+ className='tw-ml-1'
208
+ style={{ width: '10px', height: '10px', marginBottom: '2px' }}
209
+ />
210
+ </div>
211
+ </Popover>
212
+ )}
213
+ </Flex>
214
+ )
215
+ })}
216
+ </Flex>
217
+ {extraAction && (
218
+ <Flex style={{ minWidth: '80px' }} className='tw-h-6 tw-ml-2'>
219
+ {extraAction}
220
+ </Flex>
221
+ )}
222
+ </Flex>
223
+ </div>
224
+ <Flex flex column className={`${baseTabClassName}-content`}>
225
+ {keep ? tabsChildrenKeep(tabs) : tabsChildren()}
226
+ </Flex>
227
+ </Flex>
228
+ )
229
+ }
230
+
231
+ export default Tabs
232
+ export type { TabsProps, TabsItem }
@@ -1,3 +1,3 @@
1
- export { default as TextArea } from './textarea'
2
-
3
- export type { TextAreaProps } from './textarea'
1
+ export { default as TextArea } from './textarea'
2
+
3
+ export type { TextAreaProps } from './textarea'
@@ -1,37 +1,37 @@
1
- import React from 'react'
2
- import TextArea from './textarea'
3
- import { observable } from 'mobx'
4
-
5
- const store = observable({
6
- value: 'a',
7
- })
8
-
9
- export const ComInput = () => {
10
- return (
11
- <div>
12
- <div className='gm-padding-10' style={{ width: '200px' }}>
13
- <TextArea
14
- placeholder='请输入'
15
- value={store.value}
16
- onChange={(e) => {
17
- store.value = e.target.value
18
- }}
19
- />
20
- </div>
21
- <div className='gm-padding-10' style={{ width: '200px' }}>
22
- <TextArea
23
- disabled
24
- placeholder='请输入'
25
- value={store.value}
26
- onChange={(e) => {
27
- store.value = e.target.value
28
- }}
29
- />
30
- </div>
31
- </div>
32
- )
33
- }
34
-
35
- export default {
36
- title: '表单/TextArea',
37
- }
1
+ import React from 'react'
2
+ import TextArea from './textarea'
3
+ import { observable } from 'mobx'
4
+
5
+ const store = observable({
6
+ value: 'a',
7
+ })
8
+
9
+ export const ComInput = () => {
10
+ return (
11
+ <div>
12
+ <div className='gm-padding-10' style={{ width: '200px' }}>
13
+ <TextArea
14
+ placeholder='请输入'
15
+ value={store.value}
16
+ onChange={(e) => {
17
+ store.value = e.target.value
18
+ }}
19
+ />
20
+ </div>
21
+ <div className='gm-padding-10' style={{ width: '200px' }}>
22
+ <TextArea
23
+ disabled
24
+ placeholder='请输入'
25
+ value={store.value}
26
+ onChange={(e) => {
27
+ store.value = e.target.value
28
+ }}
29
+ />
30
+ </div>
31
+ </div>
32
+ )
33
+ }
34
+
35
+ export default {
36
+ title: '表单/TextArea',
37
+ }
@@ -1,12 +1,12 @@
1
- .gm-textarea {
2
- .gmFormControl();
3
-
4
- height: 8em;
5
- line-height: normal;
6
-
7
- .gmDisabledBgWith();
8
-
9
- &.gm-textarea-text-sm {
10
- font-size: var(--gm-size-text-sm);
11
- }
12
- }
1
+ .gm-textarea {
2
+ .gmFormControl();
3
+
4
+ height: 8em;
5
+ line-height: normal;
6
+
7
+ .gmDisabledBgWith();
8
+
9
+ &.gm-textarea-text-sm {
10
+ font-size: var(--gm-size-text-sm);
11
+ }
12
+ }
@@ -1,22 +1,22 @@
1
- import React, { forwardRef, TextareaHTMLAttributes, useContext } from 'react'
2
- import classNames from 'classnames'
3
- import { ConfigContext } from '../config_provider'
4
-
5
- type TextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement>
6
-
7
- const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>((props, ref) => {
8
- const { fontSize } = useContext(ConfigContext)
9
- const { className, ...rest } = props
10
- return (
11
- <textarea
12
- ref={ref}
13
- {...rest}
14
- className={classNames('gm-textarea', className, {
15
- [`gm-textarea-text-${fontSize}`]: fontSize,
16
- })}
17
- />
18
- )
19
- })
20
-
21
- export default TextArea
22
- export type { TextAreaProps }
1
+ import React, { forwardRef, TextareaHTMLAttributes, useContext } from 'react'
2
+ import classNames from 'classnames'
3
+ import { ConfigContext } from '../config_provider'
4
+
5
+ type TextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement>
6
+
7
+ const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>((props, ref) => {
8
+ const { fontSize } = useContext(ConfigContext)
9
+ const { className, ...rest } = props
10
+ return (
11
+ <textarea
12
+ ref={ref}
13
+ {...rest}
14
+ className={classNames('gm-textarea', className, {
15
+ [`gm-textarea-text-${fontSize}`]: fontSize,
16
+ })}
17
+ />
18
+ )
19
+ })
20
+
21
+ export default TextArea
22
+ export type { TextAreaProps }
@@ -1,4 +1,4 @@
1
- export { default as TimeSpan } from './time_span'
2
- export { default as TimeSpanPicker } from './time_span_picker'
3
-
4
- export type { TimeSpanProps, TimeSpanPickerProps } from './types'
1
+ export { default as TimeSpan } from './time_span'
2
+ export { default as TimeSpanPicker } from './time_span_picker'
3
+
4
+ export type { TimeSpanProps, TimeSpanPickerProps } from './types'