@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,213 +1,213 @@
1
- /* eslint-disable dot-notation */
2
- import React, { createRef, FC, useContext, useEffect, useRef, useState } from 'react'
3
- import { createPortal } from 'react-dom'
4
- import { observer } from 'mobx-react'
5
- import classNames from 'classnames'
6
- import Context from '../context/browser'
7
- import { pages } from '../v_browser'
8
- import WindowWrapper from './window_wrapper'
9
- import Delete from '../../../svg/vbrowser-tab-delete.svg'
10
- import Left from '../../../svg/vbrowser-tab-left.svg'
11
- import Right from '../../../svg/vbrowser-tab-right.svg'
12
- import { clamp, throttle } from 'lodash'
13
- import BrowserWindowContext from '../context/browserWindow'
14
- import './style.less'
15
-
16
- const VBrowserContainer: FC<{ className?: string }> = observer(
17
- ({ className, ...props }) => {
18
- const containerRef = createRef<HTMLDivElement>()
19
- const browser = useContext(Context)
20
- // const leftInterval = useRef<number>()
21
- // const rightInterval = useRef<number>()
22
-
23
- const [state, setState] = useState({ scrollLeft: 0, scrollWidth: 0, width: 0 })
24
-
25
- useEffect(() => {
26
- const container = containerRef.current
27
- if (container) {
28
- container.appendChild(browser['_portal'])
29
- }
30
- browser.mounted = true
31
- }, [])
32
-
33
- // #region Tabs滚动处理
34
- useEffect(() => {
35
- const wrapper: HTMLDivElement | null = document.querySelector(
36
- '.v-browser-tabs-items'
37
- )
38
- if (!wrapper) return
39
- const onScroll = throttle(() => {
40
- setState({
41
- width: wrapper.getBoundingClientRect().width,
42
- scrollWidth: wrapper.scrollWidth,
43
- scrollLeft: wrapper.scrollLeft,
44
- })
45
- }, 20)
46
- wrapper.addEventListener('scroll', onScroll)
47
- onScroll()
48
- return () => {
49
- wrapper.removeEventListener('scroll', onScroll)
50
- }
51
- }, [browser.windows.length])
52
-
53
- const _handleScroll = (offset: number) => {
54
- const wrapper = document.querySelector('.v-browser-tabs-items')
55
- if (!wrapper) return
56
- wrapper.scrollTo({
57
- left: clamp(wrapper.scrollLeft + offset, 0, wrapper.scrollWidth),
58
- behavior: 'smooth',
59
- })
60
- }
61
- // #endregion
62
-
63
- const portal = useRef(
64
- createPortal(
65
- pages.map((page, i) => {
66
- return (
67
- <BrowserWindowContext.Provider key={i} value={page}>
68
- <WindowWrapper key={i} path={page.path} />
69
- </BrowserWindowContext.Provider>
70
- )
71
- }),
72
- browser['_portal']
73
- )
74
- )
75
- const ignored = browser.props.ignoredPath?.find((p) =>
76
- typeof p === 'string'
77
- ? p === browser.activeWindow?.path
78
- : p.test(browser.activeWindow?.path!)
79
- )
80
- return (
81
- <div
82
- className={classNames('v-browser tw-relative', {
83
- 'hiding-tabs': browser['_hidingTabs'] || ignored,
84
- })}
85
- >
86
- <div
87
- className={classNames(
88
- 'v-browser-tabs tw-w-full tw-flex tw-items-center tw-overflow-x-auto tw-shadow',
89
- { 'tw-hidden': browser['_hidingTabs'] || ignored }
90
- )}
91
- >
92
- <div
93
- className={classNames('v-browser-tabs-left tw-font-sm tw-px-2.5', {
94
- disabled: state.scrollLeft === 0,
95
- 'tw-hidden': state.width === state.scrollWidth,
96
- })}
97
- onClick={(e) => {
98
- e.stopPropagation()
99
- _handleScroll(-160)
100
- }}
101
- // onMouseEnter={() => {
102
- // leftInterval.current = setInterval(() => {
103
- // _handleScroll(-1)
104
- // }, 0) as any
105
- // }}
106
- // onMouseLeave={() => {
107
- // clearInterval(leftInterval.current)
108
- // }}
109
- >
110
- <Left
111
- className={classNames(
112
- 'v-browser-tabs-arrow tw-w-3.5 tw-h-3.5 tw-text-gray-500',
113
- {}
114
- )}
115
- />
116
- </div>
117
- <div className='v-browser-tabs-items tw-w-full tw-h-full tw-flex tw-items-center'>
118
- {browser.windows.map((w, i) => {
119
- return (
120
- <>
121
- <div
122
- key={i}
123
- className={classNames(
124
- 'v-browser-tabs-items-item tw-font-sm tw-px-2.5 tw-flex-shrink-0 tw-flex tw-items-center tw-truncate tw-w-min',
125
- {
126
- active: i === browser.activeIndex,
127
- border:
128
- i !== browser.activeIndex && i !== browser.activeIndex - 1,
129
- }
130
- )}
131
- data-tab-id={w.path}
132
- onClick={() => browser.switchWindow(w)}
133
- >
134
- <div
135
- className='tw-flex-grow tw-text-sm'
136
- style={{ minWidth: typeof w.title !== 'string' ? 'auto' : '100px' }}
137
- >
138
- <div className='tw-flex tw-items-center'>
139
- {w.faviconURL && (
140
- <img
141
- src={w.faviconURL}
142
- className={classNames('tw-w-3.5 tw-h-3.5 tw-mr-0.5', {
143
- 'tw-opacity-70': i !== browser.activeIndex,
144
- })}
145
- />
146
- )}
147
- <span>{w.title || '-'}</span>
148
- </div>
149
- </div>
150
-
151
- <div className='tw-pl-2 tw-flex tw-items-center'>
152
- <Delete
153
- className={classNames(
154
- 'v-browser-tabs-items-item-close tw-w-3.5 tw-h-3.5',
155
- {
156
- 'tw-hidden': !w.closeable,
157
- }
158
- )}
159
- onClick={(e) => {
160
- e.stopPropagation()
161
- browser.close(w)
162
- }}
163
- />
164
- </div>
165
- </div>
166
- <div key={`divider-${i}`} className='v-browser-tabs-items-divider' />
167
- </>
168
- )
169
- })}
170
- </div>
171
-
172
- <div
173
- className={classNames('v-browser-tabs-right tw-font-sm tw-px-2.5', {
174
- disabled: state.scrollWidth - state.width - state.scrollLeft < 1,
175
- 'tw-hidden': state.width === state.scrollWidth,
176
- })}
177
- onClick={(e) => {
178
- e.stopPropagation()
179
- _handleScroll(160)
180
- }}
181
- // onMouseEnter={() => {
182
- // rightInterval.current = setInterval(() => {
183
- // _handleScroll(+1)
184
- // }, 0) as any
185
- // }}
186
- // onMouseLeave={() => {
187
- // clearInterval(rightInterval.current)
188
- // }}
189
- >
190
- <Right
191
- className={classNames(
192
- 'v-browser-tabs-arrow tw-w-3.5 tw-h-3.5 tw-text-gray-500'
193
- )}
194
- />
195
- </div>
196
- </div>
197
-
198
- <div className='v-browser-window-wrapper'>
199
- <div
200
- className={classNames('v-browser-window', className, {
201
- 'hiding-tabs': browser['_hidingTabs'] || ignored,
202
- })}
203
- ref={containerRef}
204
- {...props}
205
- />
206
- {portal.current}
207
- </div>
208
- </div>
209
- )
210
- }
211
- )
212
-
213
- export default VBrowserContainer
1
+ /* eslint-disable dot-notation */
2
+ import React, { createRef, FC, useContext, useEffect, useRef, useState } from 'react'
3
+ import { createPortal } from 'react-dom'
4
+ import { observer } from 'mobx-react'
5
+ import classNames from 'classnames'
6
+ import Context from '../context/browser'
7
+ import { pages } from '../v_browser'
8
+ import WindowWrapper from './window_wrapper'
9
+ import Delete from '../../../svg/vbrowser-tab-delete.svg'
10
+ import Left from '../../../svg/vbrowser-tab-left.svg'
11
+ import Right from '../../../svg/vbrowser-tab-right.svg'
12
+ import { clamp, throttle } from 'lodash'
13
+ import BrowserWindowContext from '../context/browserWindow'
14
+ import './style.less'
15
+
16
+ const VBrowserContainer: FC<{ className?: string }> = observer(
17
+ ({ className, ...props }) => {
18
+ const containerRef = createRef<HTMLDivElement>()
19
+ const browser = useContext(Context)
20
+ // const leftInterval = useRef<number>()
21
+ // const rightInterval = useRef<number>()
22
+
23
+ const [state, setState] = useState({ scrollLeft: 0, scrollWidth: 0, width: 0 })
24
+
25
+ useEffect(() => {
26
+ const container = containerRef.current
27
+ if (container) {
28
+ container.appendChild(browser['_portal'])
29
+ }
30
+ browser.mounted = true
31
+ }, [])
32
+
33
+ // #region Tabs滚动处理
34
+ useEffect(() => {
35
+ const wrapper: HTMLDivElement | null = document.querySelector(
36
+ '.v-browser-tabs-items'
37
+ )
38
+ if (!wrapper) return
39
+ const onScroll = throttle(() => {
40
+ setState({
41
+ width: wrapper.getBoundingClientRect().width,
42
+ scrollWidth: wrapper.scrollWidth,
43
+ scrollLeft: wrapper.scrollLeft,
44
+ })
45
+ }, 20)
46
+ wrapper.addEventListener('scroll', onScroll)
47
+ onScroll()
48
+ return () => {
49
+ wrapper.removeEventListener('scroll', onScroll)
50
+ }
51
+ }, [browser.windows.length])
52
+
53
+ const _handleScroll = (offset: number) => {
54
+ const wrapper = document.querySelector('.v-browser-tabs-items')
55
+ if (!wrapper) return
56
+ wrapper.scrollTo({
57
+ left: clamp(wrapper.scrollLeft + offset, 0, wrapper.scrollWidth),
58
+ behavior: 'smooth',
59
+ })
60
+ }
61
+ // #endregion
62
+
63
+ const portal = useRef(
64
+ createPortal(
65
+ pages.map((page, i) => {
66
+ return (
67
+ <BrowserWindowContext.Provider key={i} value={page}>
68
+ <WindowWrapper key={i} path={page.path} />
69
+ </BrowserWindowContext.Provider>
70
+ )
71
+ }),
72
+ browser['_portal']
73
+ )
74
+ )
75
+ const ignored = browser.props.ignoredPath?.find((p) =>
76
+ typeof p === 'string'
77
+ ? p === browser.activeWindow?.path
78
+ : p.test(browser.activeWindow?.path!)
79
+ )
80
+ return (
81
+ <div
82
+ className={classNames('v-browser tw-relative', {
83
+ 'hiding-tabs': browser['_hidingTabs'] || ignored,
84
+ })}
85
+ >
86
+ <div
87
+ className={classNames(
88
+ 'v-browser-tabs tw-w-full tw-flex tw-items-center tw-overflow-x-auto tw-shadow',
89
+ { 'tw-hidden': browser['_hidingTabs'] || ignored }
90
+ )}
91
+ >
92
+ <div
93
+ className={classNames('v-browser-tabs-left tw-font-sm tw-px-2.5', {
94
+ disabled: state.scrollLeft === 0,
95
+ 'tw-hidden': state.width === state.scrollWidth,
96
+ })}
97
+ onClick={(e) => {
98
+ e.stopPropagation()
99
+ _handleScroll(-160)
100
+ }}
101
+ // onMouseEnter={() => {
102
+ // leftInterval.current = setInterval(() => {
103
+ // _handleScroll(-1)
104
+ // }, 0) as any
105
+ // }}
106
+ // onMouseLeave={() => {
107
+ // clearInterval(leftInterval.current)
108
+ // }}
109
+ >
110
+ <Left
111
+ className={classNames(
112
+ 'v-browser-tabs-arrow tw-w-3.5 tw-h-3.5 tw-text-gray-500',
113
+ {}
114
+ )}
115
+ />
116
+ </div>
117
+ <div className='v-browser-tabs-items tw-w-full tw-h-full tw-flex tw-items-center'>
118
+ {browser.windows.map((w, i) => {
119
+ return (
120
+ <>
121
+ <div
122
+ key={i}
123
+ className={classNames(
124
+ 'v-browser-tabs-items-item tw-font-sm tw-px-2.5 tw-flex-shrink-0 tw-flex tw-items-center tw-truncate tw-w-min',
125
+ {
126
+ active: i === browser.activeIndex,
127
+ border:
128
+ i !== browser.activeIndex && i !== browser.activeIndex - 1,
129
+ }
130
+ )}
131
+ data-tab-id={w.path}
132
+ onClick={() => browser.switchWindow(w)}
133
+ >
134
+ <div
135
+ className='tw-flex-grow tw-text-sm'
136
+ style={{ minWidth: typeof w.title !== 'string' ? 'auto' : '100px' }}
137
+ >
138
+ <div className='tw-flex tw-items-center'>
139
+ {w.faviconURL && (
140
+ <img
141
+ src={w.faviconURL}
142
+ className={classNames('tw-w-3.5 tw-h-3.5 tw-mr-0.5', {
143
+ 'tw-opacity-70': i !== browser.activeIndex,
144
+ })}
145
+ />
146
+ )}
147
+ <span>{w.title || '-'}</span>
148
+ </div>
149
+ </div>
150
+
151
+ <div className='tw-pl-2 tw-flex tw-items-center'>
152
+ <Delete
153
+ className={classNames(
154
+ 'v-browser-tabs-items-item-close tw-w-3.5 tw-h-3.5',
155
+ {
156
+ 'tw-hidden': !w.closeable,
157
+ }
158
+ )}
159
+ onClick={(e) => {
160
+ e.stopPropagation()
161
+ browser.close(w)
162
+ }}
163
+ />
164
+ </div>
165
+ </div>
166
+ <div key={`divider-${i}`} className='v-browser-tabs-items-divider' />
167
+ </>
168
+ )
169
+ })}
170
+ </div>
171
+
172
+ <div
173
+ className={classNames('v-browser-tabs-right tw-font-sm tw-px-2.5', {
174
+ disabled: state.scrollWidth - state.width - state.scrollLeft < 1,
175
+ 'tw-hidden': state.width === state.scrollWidth,
176
+ })}
177
+ onClick={(e) => {
178
+ e.stopPropagation()
179
+ _handleScroll(160)
180
+ }}
181
+ // onMouseEnter={() => {
182
+ // rightInterval.current = setInterval(() => {
183
+ // _handleScroll(+1)
184
+ // }, 0) as any
185
+ // }}
186
+ // onMouseLeave={() => {
187
+ // clearInterval(rightInterval.current)
188
+ // }}
189
+ >
190
+ <Right
191
+ className={classNames(
192
+ 'v-browser-tabs-arrow tw-w-3.5 tw-h-3.5 tw-text-gray-500'
193
+ )}
194
+ />
195
+ </div>
196
+ </div>
197
+
198
+ <div className='v-browser-window-wrapper'>
199
+ <div
200
+ className={classNames('v-browser-window', className, {
201
+ 'hiding-tabs': browser['_hidingTabs'] || ignored,
202
+ })}
203
+ ref={containerRef}
204
+ {...props}
205
+ />
206
+ {portal.current}
207
+ </div>
208
+ </div>
209
+ )
210
+ }
211
+ )
212
+
213
+ export default VBrowserContainer
@@ -1,113 +1,113 @@
1
- :root {
2
- --v-browser-tabs-bg: white;
3
- --v-browser-tabs-text-color: #333;
4
- --v-browser-tabs-height: 40px;
5
- }
6
-
7
- .v-browser {
8
- height: calc(100vh - var(--gm-framework-size-top-right-height));
9
- overflow: hidden;
10
-
11
- &-tabs {
12
- position: relative;
13
- height: var(--v-browser-tabs-height);
14
- background-color: var(--v-browser-tabs-bg);
15
- z-index: 100;
16
- color: var(--v-browser-tabs-text-color);
17
- user-select: none;
18
- padding: 0;
19
-
20
- &::-webkit-scrollbar {
21
- display: none;
22
- }
23
-
24
- &-left,
25
- &-right {
26
- width: 40px;
27
- cursor: pointer;
28
- // position: absolute;
29
- background-color: var(--v-browser-tabs-bg);
30
- height: var(--v-browser-tabs-height);
31
- display: flex;
32
- justify-content: center;
33
- align-items: center;
34
- }
35
-
36
- &-left {
37
- left: 0;
38
- }
39
-
40
- &-right {
41
- right: 0;
42
- }
43
-
44
- &-items {
45
- overflow-x: auto;
46
-
47
- &::-webkit-scrollbar {
48
- display: none;
49
- }
50
-
51
- &-item {
52
- height: 100%;
53
- cursor: pointer;
54
- position: relative;
55
-
56
- &.active {
57
- background-color: #dae7ff !important;
58
- }
59
-
60
- &-close:hover {
61
- filter: brightness(0);
62
- }
63
- }
64
-
65
- &-divider {
66
- width: 1px;
67
- height: 24px;
68
- background-color: #e8ecf3;
69
- flex-shrink: 0;
70
- }
71
- }
72
-
73
- &-left,
74
- &-right,
75
- &-items-item {
76
- &:hover {
77
- background-color: #f7f7f7;
78
-
79
- .v-browser-tabs-arrow {
80
- filter: brightness(0);
81
- }
82
- }
83
-
84
- &.disabled {
85
- opacity: 0.25;
86
- }
87
- }
88
- }
89
-
90
- &.hiding-tabs {
91
- height: 100vh;
92
- }
93
-
94
- &-window {
95
- .v-browser-window-content {
96
- height:
97
- calc(
98
- 100vh - var(--gm-framework-size-top-right-height) - var(--v-browser-tabs-height)
99
- );
100
- overflow: auto;
101
- background-color: white;
102
- position: relative;
103
- }
104
-
105
- &.hiding-tabs {
106
- height: 100vh;
107
-
108
- .v-browser-window-content {
109
- height: 100vh;
110
- }
111
- }
112
- }
113
- }
1
+ :root {
2
+ --v-browser-tabs-bg: white;
3
+ --v-browser-tabs-text-color: #333;
4
+ --v-browser-tabs-height: 40px;
5
+ }
6
+
7
+ .v-browser {
8
+ height: calc(100vh - var(--gm-framework-size-top-right-height));
9
+ overflow: hidden;
10
+
11
+ &-tabs {
12
+ position: relative;
13
+ height: var(--v-browser-tabs-height);
14
+ background-color: var(--v-browser-tabs-bg);
15
+ z-index: 100;
16
+ color: var(--v-browser-tabs-text-color);
17
+ user-select: none;
18
+ padding: 0;
19
+
20
+ &::-webkit-scrollbar {
21
+ display: none;
22
+ }
23
+
24
+ &-left,
25
+ &-right {
26
+ width: 40px;
27
+ cursor: pointer;
28
+ // position: absolute;
29
+ background-color: var(--v-browser-tabs-bg);
30
+ height: var(--v-browser-tabs-height);
31
+ display: flex;
32
+ justify-content: center;
33
+ align-items: center;
34
+ }
35
+
36
+ &-left {
37
+ left: 0;
38
+ }
39
+
40
+ &-right {
41
+ right: 0;
42
+ }
43
+
44
+ &-items {
45
+ overflow-x: auto;
46
+
47
+ &::-webkit-scrollbar {
48
+ display: none;
49
+ }
50
+
51
+ &-item {
52
+ height: 100%;
53
+ cursor: pointer;
54
+ position: relative;
55
+
56
+ &.active {
57
+ background-color: #dae7ff !important;
58
+ }
59
+
60
+ &-close:hover {
61
+ filter: brightness(0);
62
+ }
63
+ }
64
+
65
+ &-divider {
66
+ width: 1px;
67
+ height: 24px;
68
+ background-color: #e8ecf3;
69
+ flex-shrink: 0;
70
+ }
71
+ }
72
+
73
+ &-left,
74
+ &-right,
75
+ &-items-item {
76
+ &:hover {
77
+ background-color: #f7f7f7;
78
+
79
+ .v-browser-tabs-arrow {
80
+ filter: brightness(0);
81
+ }
82
+ }
83
+
84
+ &.disabled {
85
+ opacity: 0.25;
86
+ }
87
+ }
88
+ }
89
+
90
+ &.hiding-tabs {
91
+ height: 100vh;
92
+ }
93
+
94
+ &-window {
95
+ .v-browser-window-content {
96
+ height:
97
+ calc(
98
+ 100vh - var(--gm-framework-size-top-right-height) - var(--v-browser-tabs-height)
99
+ );
100
+ overflow: auto;
101
+ background-color: white;
102
+ position: relative;
103
+ }
104
+
105
+ &.hiding-tabs {
106
+ height: 100vh;
107
+
108
+ .v-browser-window-content {
109
+ height: 100vh;
110
+ }
111
+ }
112
+ }
113
+ }