vxe-pc-ui 4.20.24 → 4.20.26

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 (627) hide show
  1. package/dist/all.esm.js +15151 -10366
  2. package/dist/style.css +1 -1
  3. package/dist/style.mini.css +1 -1
  4. package/es/alert/src/alert.js +61 -36
  5. package/es/anchor/src/anchor-link.js +39 -20
  6. package/es/anchor/src/anchor.js +74 -45
  7. package/es/avatar/src/avatar.js +47 -27
  8. package/es/backtop/src/backtop.js +65 -40
  9. package/es/badge/src/badge.js +32 -16
  10. package/es/breadcrumb/src/breadcrumb-item.js +52 -27
  11. package/es/breadcrumb/src/breadcrumb.js +11 -8
  12. package/es/button/src/button-group.js +24 -18
  13. package/es/button/src/button.js +284 -185
  14. package/es/calendar/src/calendar.js +571 -358
  15. package/es/card/src/card.js +123 -68
  16. package/es/carousel/src/carousel-item.js +14 -7
  17. package/es/carousel/src/carousel.js +174 -112
  18. package/es/cascader/src/cascader.js +526 -380
  19. package/es/checkbox/src/button.js +90 -55
  20. package/es/checkbox/src/checkbox.js +60 -40
  21. package/es/checkbox/src/group.js +34 -26
  22. package/es/collapse/src/collapse-pane.js +33 -16
  23. package/es/collapse/src/collapse.js +133 -79
  24. package/es/color-picker/src/color-picker.js +489 -350
  25. package/es/components.d.ts +3 -1
  26. package/es/components.js +3 -2
  27. package/es/context-menu/src/context-menu.js +190 -110
  28. package/es/countdown/src/countdown.js +91 -59
  29. package/es/date-panel/src/date-panel.js +760 -450
  30. package/es/date-picker/src/date-picker.js +331 -228
  31. package/es/date-range-picker/src/date-range-picker.js +366 -265
  32. package/es/divider/src/divider.js +26 -12
  33. package/es/drawer/src/drawer.js +254 -154
  34. package/es/dynamics/index.js +38 -25
  35. package/es/empty/src/empty.js +53 -29
  36. package/es/form/render/index.js +66 -41
  37. package/es/form/src/form-config-item.js +22 -16
  38. package/es/form/src/form-group.js +23 -14
  39. package/es/form/src/form-item.js +23 -17
  40. package/es/form/src/form.js +139 -95
  41. package/es/form/src/itemInfo.js +2 -1
  42. package/es/form/src/render.js +207 -127
  43. package/es/form/src/util.js +8 -4
  44. package/es/icon/src/icon.js +14 -10
  45. package/es/icon/style.css +1 -1
  46. package/es/icon/style.mini.css +1 -1
  47. package/es/icon-picker/src/icon-picker.js +250 -157
  48. package/es/image/src/group.js +26 -20
  49. package/es/image/src/image.js +33 -32
  50. package/es/image/src/preview.js +182 -122
  51. package/es/image/src/util.js +6 -3
  52. package/es/index.d.ts +3 -0
  53. package/es/index.esm.js +12 -0
  54. package/es/index.js +12 -0
  55. package/es/input/src/input.js +820 -507
  56. package/es/layout-aside/src/layout-aside.js +54 -38
  57. package/es/layout-body/src/layout-body.js +39 -27
  58. package/es/layout-container/src/layout-container.js +16 -9
  59. package/es/layout-footer/src/layout-footer.js +16 -7
  60. package/es/layout-header/src/layout-header.js +15 -7
  61. package/es/link/src/link.js +65 -44
  62. package/es/list/src/list.js +453 -333
  63. package/es/loading/index.js +8 -5
  64. package/es/loading/src/loading.js +60 -33
  65. package/es/mention/src/mention.js +2 -1
  66. package/es/menu/src/menu.js +341 -210
  67. package/es/modal/index.js +60 -37
  68. package/es/modal/src/modal.js +303 -205
  69. package/es/notice-bar/src/notice-bar.js +64 -37
  70. package/es/number-input/src/number-input.js +249 -172
  71. package/es/pager/src/pager.js +346 -202
  72. package/es/password-input/src/password-input.js +145 -105
  73. package/es/print/src/page-break.js +2 -1
  74. package/es/print/src/print.js +184 -99
  75. package/es/pulldown/src/pulldown.js +113 -71
  76. package/es/radio/src/button.js +92 -57
  77. package/es/radio/src/group.js +33 -25
  78. package/es/radio/src/radio.js +61 -41
  79. package/es/rate/src/rate.js +48 -36
  80. package/es/result/src/result.js +67 -35
  81. package/es/row/src/col.js +30 -16
  82. package/es/row/src/row.js +21 -14
  83. package/es/scrollbar/src/scrollbar.js +177 -145
  84. package/es/segmented/src/segmented.js +93 -60
  85. package/es/select/src/optgroup.js +7 -3
  86. package/es/select/src/select.js +483 -340
  87. package/es/select/src/util.js +6 -3
  88. package/es/slider/src/slider.js +108 -80
  89. package/es/space/src/space.js +43 -26
  90. package/es/splitter/src/splitter-panel.js +50 -25
  91. package/es/splitter/src/splitter.js +219 -144
  92. package/es/steps/src/steps.js +10 -5
  93. package/es/style.css +1 -1
  94. package/es/style.mini.css +1 -1
  95. package/es/switch/src/switch.js +115 -64
  96. package/es/table-select/src/table-select.js +232 -153
  97. package/es/table-transfer/src/table-transfer.js +10 -5
  98. package/es/tabs/src/tab-pane.js +33 -16
  99. package/es/tabs/src/tabs.js +363 -230
  100. package/es/tag/src/tag.js +61 -43
  101. package/es/text/src/text.js +89 -65
  102. package/es/text-ellipsis/src/text-ellipsis.js +82 -51
  103. package/es/textarea/src/textarea.js +116 -86
  104. package/es/timeline/src/timeline-item.js +2 -1
  105. package/es/timeline/src/timeline.js +2 -1
  106. package/es/tip/src/tip.js +53 -29
  107. package/es/tooltip/src/tooltip.js +114 -74
  108. package/es/tour/src/tour.js +2 -1
  109. package/es/transfer/src/transfer.js +42 -25
  110. package/es/tree/src/tree.js +709 -492
  111. package/es/tree-select/src/tree-select.js +320 -225
  112. package/es/ui/index.d.ts +0 -1
  113. package/es/ui/index.js +46 -3
  114. package/es/ui/src/dom.js +9 -6
  115. package/es/ui/src/log.js +1 -1
  116. package/es/ui/src/utils.d.ts +1 -1
  117. package/es/upload/src/upload.js +614 -398
  118. package/es/vxe-icon/style.css +1 -1
  119. package/es/vxe-icon/style.mini.css +1 -1
  120. package/es/watermark/src/util.js +15 -12
  121. package/es/watermark/src/watermark.js +55 -25
  122. package/lib/alert/src/alert.js +62 -37
  123. package/lib/anchor/src/anchor-link.js +39 -20
  124. package/lib/anchor/src/anchor.js +75 -46
  125. package/lib/avatar/src/avatar.js +52 -32
  126. package/lib/backtop/src/backtop.js +81 -56
  127. package/lib/badge/src/badge.js +35 -19
  128. package/lib/breadcrumb/src/breadcrumb-item.js +52 -27
  129. package/lib/breadcrumb/src/breadcrumb.js +13 -10
  130. package/lib/button/src/button-group.js +27 -21
  131. package/lib/button/src/button.js +306 -207
  132. package/lib/calendar/src/calendar.js +575 -362
  133. package/lib/card/src/card.js +133 -78
  134. package/lib/carousel/src/carousel-item.js +15 -8
  135. package/lib/carousel/src/carousel.js +182 -120
  136. package/lib/cascader/src/cascader.js +555 -409
  137. package/lib/checkbox/src/button.js +93 -58
  138. package/lib/checkbox/src/checkbox.js +63 -43
  139. package/lib/checkbox/src/group.js +37 -29
  140. package/lib/collapse/src/collapse-pane.js +34 -17
  141. package/lib/collapse/src/collapse.js +139 -85
  142. package/lib/color-picker/src/color-picker.js +516 -377
  143. package/lib/components.js +3 -2
  144. package/lib/context-menu/src/context-menu.js +212 -132
  145. package/lib/countdown/src/countdown.js +95 -63
  146. package/lib/date-panel/src/date-panel.js +776 -466
  147. package/lib/date-picker/src/date-picker.js +377 -274
  148. package/lib/date-range-picker/src/date-range-picker.js +401 -300
  149. package/lib/divider/src/divider.js +31 -17
  150. package/lib/drawer/src/drawer.js +255 -155
  151. package/lib/dynamics/index.js +38 -25
  152. package/lib/empty/src/empty.js +55 -31
  153. package/lib/form/render/index.js +68 -43
  154. package/lib/form/src/form-config-item.js +24 -18
  155. package/lib/form/src/form-group.js +25 -16
  156. package/lib/form/src/form-item.js +25 -19
  157. package/lib/form/src/form.js +140 -96
  158. package/lib/form/src/itemInfo.js +4 -3
  159. package/lib/form/src/render.js +214 -134
  160. package/lib/form/src/util.js +9 -5
  161. package/lib/icon/src/icon.js +17 -13
  162. package/lib/icon/style/style.css +1 -1
  163. package/lib/icon/style/style.mini.css +1 -1
  164. package/lib/icon-picker/src/icon-picker.js +251 -158
  165. package/lib/image/src/group.js +26 -20
  166. package/lib/image/src/image.js +41 -40
  167. package/lib/image/src/preview.js +206 -146
  168. package/lib/image/src/util.js +6 -3
  169. package/lib/index.common.js +12 -0
  170. package/lib/index.js +12 -0
  171. package/lib/index.umd.js +15359 -10558
  172. package/lib/index.umd.min.js +3 -3
  173. package/lib/input/src/input.js +878 -565
  174. package/lib/layout-aside/src/layout-aside.js +61 -45
  175. package/lib/layout-body/src/layout-body.js +47 -35
  176. package/lib/layout-container/src/layout-container.js +18 -11
  177. package/lib/layout-footer/src/layout-footer.js +17 -8
  178. package/lib/layout-header/src/layout-header.js +16 -8
  179. package/lib/link/src/link.js +69 -48
  180. package/lib/list/src/list.js +456 -336
  181. package/lib/loading/index.js +8 -5
  182. package/lib/loading/src/loading.js +69 -42
  183. package/lib/mention/src/mention.js +4 -3
  184. package/lib/menu/src/menu.js +351 -220
  185. package/lib/modal/index.js +60 -37
  186. package/lib/modal/src/modal.js +306 -208
  187. package/lib/notice-bar/src/notice-bar.js +70 -43
  188. package/lib/number-input/src/number-input.js +290 -213
  189. package/lib/pager/src/pager.js +347 -203
  190. package/lib/password-input/src/password-input.js +155 -115
  191. package/lib/print/src/page-break.js +3 -2
  192. package/lib/print/src/print.js +193 -108
  193. package/lib/pulldown/src/pulldown.js +128 -86
  194. package/lib/radio/src/button.js +96 -61
  195. package/lib/radio/src/group.js +37 -29
  196. package/lib/radio/src/radio.js +65 -45
  197. package/lib/rate/src/rate.js +50 -38
  198. package/lib/result/src/result.js +68 -36
  199. package/lib/row/src/col.js +32 -18
  200. package/lib/row/src/row.js +25 -18
  201. package/lib/scrollbar/src/scrollbar.js +178 -146
  202. package/lib/segmented/src/segmented.js +97 -64
  203. package/lib/select/src/optgroup.js +7 -3
  204. package/lib/select/src/select.js +486 -343
  205. package/lib/select/src/util.js +6 -3
  206. package/lib/slider/src/slider.js +122 -94
  207. package/lib/space/src/space.js +57 -40
  208. package/lib/splitter/src/splitter-panel.js +51 -26
  209. package/lib/splitter/src/splitter.js +233 -158
  210. package/lib/steps/src/steps.js +11 -6
  211. package/lib/style.css +1 -1
  212. package/lib/style.mini.css +1 -1
  213. package/lib/switch/src/switch.js +116 -65
  214. package/lib/table-select/src/table-select.js +234 -155
  215. package/lib/table-transfer/src/table-transfer.js +12 -7
  216. package/lib/tabs/src/tab-pane.js +34 -17
  217. package/lib/tabs/src/tabs.js +365 -232
  218. package/lib/tag/src/tag.js +67 -49
  219. package/lib/text/src/text.js +100 -76
  220. package/lib/text-ellipsis/src/text-ellipsis.js +86 -55
  221. package/lib/textarea/src/textarea.js +127 -97
  222. package/lib/timeline/src/timeline-item.js +3 -2
  223. package/lib/timeline/src/timeline.js +4 -3
  224. package/lib/tip/src/tip.js +58 -34
  225. package/lib/tooltip/src/tooltip.js +116 -76
  226. package/lib/tour/src/tour.js +4 -3
  227. package/lib/transfer/src/transfer.js +44 -27
  228. package/lib/tree/src/tree.js +717 -500
  229. package/lib/tree-select/src/tree-select.js +351 -256
  230. package/lib/ui/index.js +46 -4
  231. package/lib/ui/src/dom.js +9 -6
  232. package/lib/ui/src/log.js +1 -1
  233. package/lib/upload/src/upload.js +708 -492
  234. package/lib/vxe-icon/style/style.css +1 -1
  235. package/lib/vxe-icon/style/style.mini.css +1 -1
  236. package/lib/watermark/src/util.js +15 -12
  237. package/lib/watermark/src/watermark.js +60 -30
  238. package/package.json +10 -4
  239. package/packages/alert/index.ts +16 -16
  240. package/packages/alert/src/alert.ts +148 -126
  241. package/packages/anchor/index.ts +16 -16
  242. package/packages/anchor/src/anchor-link.ts +139 -121
  243. package/packages/anchor/src/anchor.ts +266 -237
  244. package/packages/anchor/src/util.ts +23 -23
  245. package/packages/anchor-link/index.ts +16 -16
  246. package/packages/avatar/index.ts +16 -16
  247. package/packages/avatar/src/avatar.ts +166 -149
  248. package/packages/backtop/index.ts +16 -16
  249. package/packages/backtop/src/backtop.ts +337 -313
  250. package/packages/badge/index.ts +16 -16
  251. package/packages/badge/src/badge.ts +131 -118
  252. package/packages/breadcrumb/index.ts +16 -16
  253. package/packages/breadcrumb/src/breadcrumb-item.ts +129 -106
  254. package/packages/breadcrumb/src/breadcrumb.ts +94 -92
  255. package/packages/breadcrumb-item/index.ts +16 -16
  256. package/packages/button/index.ts +16 -16
  257. package/packages/button/src/button-group.ts +116 -110
  258. package/packages/button/src/button.ts +975 -855
  259. package/packages/button-group/index.ts +16 -16
  260. package/packages/calendar/index.ts +16 -16
  261. package/packages/calendar/src/calendar.ts +1566 -1352
  262. package/packages/card/index.ts +16 -16
  263. package/packages/card/src/card.ts +285 -236
  264. package/packages/carousel/index.ts +16 -16
  265. package/packages/carousel/src/carousel-item.ts +120 -102
  266. package/packages/carousel/src/carousel.ts +475 -414
  267. package/packages/carousel/src/util.ts +21 -21
  268. package/packages/carousel-item/index.ts +16 -16
  269. package/packages/cascader/index.ts +16 -16
  270. package/packages/cascader/src/cascader.ts +2074 -1896
  271. package/packages/cascader/src/util.ts +9 -9
  272. package/packages/checkbox/index.ts +16 -16
  273. package/packages/checkbox/src/button.ts +267 -221
  274. package/packages/checkbox/src/checkbox.ts +219 -199
  275. package/packages/checkbox/src/group.ts +292 -269
  276. package/packages/checkbox-button/index.ts +16 -16
  277. package/packages/checkbox-group/index.ts +16 -16
  278. package/packages/col/index.ts +16 -16
  279. package/packages/collapse/index.ts +16 -16
  280. package/packages/collapse/src/collapse-pane.ts +142 -114
  281. package/packages/collapse/src/collapse.ts +453 -384
  282. package/packages/collapse/src/util.ts +21 -21
  283. package/packages/collapse-pane/index.ts +16 -16
  284. package/packages/color-picker/index.ts +31 -31
  285. package/packages/color-picker/src/color-picker.ts +1310 -1147
  286. package/packages/color-picker/src/util.ts +436 -423
  287. package/packages/components.ts +350 -349
  288. package/packages/context-menu/index.ts +54 -54
  289. package/packages/context-menu/src/context-menu.ts +773 -681
  290. package/packages/countdown/index.ts +16 -16
  291. package/packages/countdown/src/countdown.ts +295 -262
  292. package/packages/date-panel/index.ts +16 -16
  293. package/packages/date-panel/src/date-panel.ts +2214 -1900
  294. package/packages/date-panel/src/util.ts +354 -326
  295. package/packages/date-picker/index.ts +16 -16
  296. package/packages/date-picker/src/date-picker.ts +1884 -1752
  297. package/packages/date-range-picker/index.ts +16 -16
  298. package/packages/date-range-picker/src/date-range-picker.ts +1728 -1604
  299. package/packages/divider/index.ts +16 -16
  300. package/packages/divider/src/divider.ts +105 -93
  301. package/packages/drawer/index.ts +78 -78
  302. package/packages/drawer/src/drawer.ts +920 -802
  303. package/packages/drawer/src/store.ts +3 -3
  304. package/packages/dynamics/index.ts +124 -117
  305. package/packages/empty/index.ts +16 -16
  306. package/packages/empty/src/empty.ts +124 -103
  307. package/packages/form/index.ts +16 -16
  308. package/packages/form/render/index.ts +646 -614
  309. package/packages/form/src/form-config-item.ts +85 -80
  310. package/packages/form/src/form-group.ts +96 -86
  311. package/packages/form/src/form-item.ts +181 -174
  312. package/packages/form/src/form.ts +1122 -1069
  313. package/packages/form/src/itemInfo.ts +84 -82
  314. package/packages/form/src/render.ts +470 -387
  315. package/packages/form/src/util.ts +98 -93
  316. package/packages/form-gather/index.ts +26 -26
  317. package/packages/form-group/index.ts +16 -16
  318. package/packages/form-item/index.ts +16 -16
  319. package/packages/icon/index.ts +16 -16
  320. package/packages/icon/src/icon.ts +78 -75
  321. package/packages/icon-picker/index.ts +16 -16
  322. package/packages/icon-picker/src/icon-picker.ts +922 -809
  323. package/packages/image/index.ts +16 -16
  324. package/packages/image/src/group.ts +159 -153
  325. package/packages/image/src/image.ts +298 -298
  326. package/packages/image/src/preview.ts +749 -672
  327. package/packages/image/src/util.ts +62 -59
  328. package/packages/image-group/index.ts +16 -16
  329. package/packages/image-preview/index.ts +19 -19
  330. package/packages/index.ts +20 -4
  331. package/packages/input/index.ts +16 -16
  332. package/packages/input/src/input.ts +3201 -2863
  333. package/packages/language/fr-FR.ts +15 -15
  334. package/packages/language/it-IT.ts +4 -4
  335. package/packages/language/uk-UA.ts +1 -1
  336. package/packages/language/uz-UZ.ts +13 -13
  337. package/packages/language/zh-CN.ts +907 -907
  338. package/packages/layout-aside/index.ts +16 -16
  339. package/packages/layout-aside/src/layout-aside.ts +172 -156
  340. package/packages/layout-body/index.ts +16 -16
  341. package/packages/layout-body/src/layout-body.ts +191 -181
  342. package/packages/layout-container/index.ts +16 -16
  343. package/packages/layout-container/src/layout-container.ts +108 -92
  344. package/packages/layout-footer/index.ts +16 -16
  345. package/packages/layout-footer/src/layout-footer.ts +81 -74
  346. package/packages/layout-header/index.ts +16 -16
  347. package/packages/layout-header/src/layout-header.ts +79 -73
  348. package/packages/link/index.ts +16 -16
  349. package/packages/link/src/link.ts +180 -161
  350. package/packages/list/index.ts +16 -16
  351. package/packages/list/src/list.ts +2690 -2564
  352. package/packages/list/src/store.ts +10 -10
  353. package/packages/list/src/util.ts +10 -11
  354. package/packages/loading/index.ts +39 -36
  355. package/packages/loading/src/loading.ts +179 -152
  356. package/packages/mention/index.ts +16 -16
  357. package/packages/mention/src/mention.ts +69 -71
  358. package/packages/menu/index.ts +16 -16
  359. package/packages/menu/src/menu.ts +1000 -857
  360. package/packages/modal/index.ts +164 -141
  361. package/packages/modal/src/modal.ts +1803 -1681
  362. package/packages/modal/src/store.ts +3 -3
  363. package/packages/notice-bar/index.ts +16 -16
  364. package/packages/notice-bar/src/notice-bar.ts +207 -181
  365. package/packages/number-input/index.ts +16 -16
  366. package/packages/number-input/src/number-input.ts +1322 -1242
  367. package/packages/number-input/src/util.ts +25 -25
  368. package/packages/optgroup/index.ts +16 -16
  369. package/packages/option/index.ts +16 -16
  370. package/packages/pager/index.ts +16 -16
  371. package/packages/pager/src/pager.ts +919 -775
  372. package/packages/password-input/index.ts +16 -16
  373. package/packages/password-input/src/password-input.ts +523 -482
  374. package/packages/print/index.ts +18 -18
  375. package/packages/print/src/page-break.ts +104 -92
  376. package/packages/print/src/print.ts +366 -281
  377. package/packages/print/src/util.ts +299 -304
  378. package/packages/print-page-break/index.ts +16 -16
  379. package/packages/pulldown/index.ts +16 -16
  380. package/packages/pulldown/src/pulldown.ts +505 -445
  381. package/packages/radio/index.ts +16 -16
  382. package/packages/radio/src/button.ts +290 -243
  383. package/packages/radio/src/group.ts +275 -252
  384. package/packages/radio/src/radio.ts +237 -218
  385. package/packages/radio-button/index.ts +16 -16
  386. package/packages/radio-group/index.ts +16 -16
  387. package/packages/rate/index.ts +16 -16
  388. package/packages/rate/src/rate.ts +203 -192
  389. package/packages/result/index.ts +16 -16
  390. package/packages/result/src/result.ts +141 -112
  391. package/packages/row/index.ts +16 -16
  392. package/packages/row/src/col.ts +171 -159
  393. package/packages/row/src/row.ts +143 -138
  394. package/packages/scrollbar/index.ts +16 -16
  395. package/packages/scrollbar/src/scrollbar.ts +626 -595
  396. package/packages/segmented/index.ts +16 -16
  397. package/packages/segmented/src/segmented.ts +297 -264
  398. package/packages/select/index.ts +16 -16
  399. package/packages/select/src/optgroup.ts +53 -49
  400. package/packages/select/src/option-info.ts +20 -20
  401. package/packages/select/src/option.ts +47 -47
  402. package/packages/select/src/select.ts +2390 -2214
  403. package/packages/select/src/util.ts +50 -47
  404. package/packages/slider/index.ts +16 -16
  405. package/packages/slider/src/slider.ts +547 -506
  406. package/packages/space/index.ts +16 -16
  407. package/packages/space/src/space.ts +225 -209
  408. package/packages/split/index.ts +16 -16
  409. package/packages/split-pane/index.ts +17 -17
  410. package/packages/splitter/index.ts +16 -16
  411. package/packages/splitter/src/splitter-panel.ts +199 -163
  412. package/packages/splitter/src/splitter.ts +1110 -1020
  413. package/packages/splitter/src/util.ts +21 -21
  414. package/packages/splitter-panel/index.ts +16 -16
  415. package/packages/steps/index.ts +16 -16
  416. package/packages/steps/src/steps.ts +69 -68
  417. package/packages/switch/index.ts +16 -16
  418. package/packages/switch/src/switch.ts +300 -245
  419. package/packages/tab-pane/index.ts +16 -16
  420. package/packages/table-select/index.ts +16 -16
  421. package/packages/table-select/src/table-select.ts +1103 -999
  422. package/packages/table-transfer/index.ts +16 -16
  423. package/packages/table-transfer/src/table-transfer.ts +104 -91
  424. package/packages/tabs/index.ts +16 -16
  425. package/packages/tabs/src/tab-pane.ts +132 -117
  426. package/packages/tabs/src/tabs.ts +1137 -997
  427. package/packages/tabs/src/util.ts +21 -21
  428. package/packages/tag/index.ts +16 -16
  429. package/packages/tag/src/tag.ts +204 -187
  430. package/packages/text/index.ts +16 -16
  431. package/packages/text/src/text.ts +282 -260
  432. package/packages/text-ellipsis/index.ts +16 -16
  433. package/packages/text-ellipsis/src/text-ellipsis.ts +312 -282
  434. package/packages/textarea/index.ts +16 -16
  435. package/packages/textarea/src/textarea.ts +526 -495
  436. package/packages/timeline/index.ts +16 -16
  437. package/packages/timeline/src/timeline-item.ts +65 -67
  438. package/packages/timeline/src/timeline.ts +70 -71
  439. package/packages/timeline-item/index.ts +16 -16
  440. package/packages/tip/index.ts +19 -19
  441. package/packages/tip/src/tip.ts +150 -129
  442. package/packages/tooltip/index.ts +72 -72
  443. package/packages/tooltip/src/tooltip.ts +669 -627
  444. package/packages/tour/index.ts +16 -16
  445. package/packages/tour/src/tour.ts +70 -71
  446. package/packages/transfer/index.ts +16 -16
  447. package/packages/transfer/src/transfer.ts +130 -117
  448. package/packages/tree/index.ts +16 -16
  449. package/packages/tree/src/store.ts +10 -10
  450. package/packages/tree/src/tree.ts +4077 -3852
  451. package/packages/tree/src/util.ts +51 -51
  452. package/packages/tree-select/index.ts +16 -16
  453. package/packages/tree-select/src/tree-select.ts +1217 -1094
  454. package/packages/ui/index.ts +836 -793
  455. package/packages/ui/src/anime.ts +51 -52
  456. package/packages/ui/src/comp.ts +3 -3
  457. package/packages/ui/src/dom.ts +357 -354
  458. package/packages/ui/src/log.ts +19 -19
  459. package/packages/ui/src/utils.ts +79 -79
  460. package/packages/ui/src/vn.ts +39 -39
  461. package/packages/upload/index.ts +20 -20
  462. package/packages/upload/src/upload.ts +2271 -2021
  463. package/packages/upload/src/util.ts +109 -109
  464. package/packages/watermark/index.ts +33 -33
  465. package/packages/watermark/src/util.ts +186 -180
  466. package/packages/watermark/src/watermark.ts +196 -168
  467. package/types/all.d.ts +552 -552
  468. package/types/components/alert.d.ts +83 -87
  469. package/types/components/anchor-link.d.ts +88 -91
  470. package/types/components/anchor.d.ts +97 -104
  471. package/types/components/avatar.d.ts +85 -88
  472. package/types/components/backtop.d.ts +119 -122
  473. package/types/components/badge.d.ts +77 -80
  474. package/types/components/breadcrumb-item.d.ts +77 -80
  475. package/types/components/breadcrumb.d.ts +83 -87
  476. package/types/components/button-group.d.ts +118 -120
  477. package/types/components/button.d.ts +331 -339
  478. package/types/components/calendar.d.ts +247 -264
  479. package/types/components/card.d.ts +111 -113
  480. package/types/components/carousel-item.d.ts +73 -75
  481. package/types/components/carousel.d.ts +130 -134
  482. package/types/components/cascader.d.ts +336 -386
  483. package/types/components/checkbox-button.d.ts +109 -114
  484. package/types/components/checkbox-group.d.ts +152 -154
  485. package/types/components/checkbox.d.ts +123 -128
  486. package/types/components/col.d.ts +77 -80
  487. package/types/components/colgroup.d.ts +64 -69
  488. package/types/components/collapse-pane.d.ts +86 -89
  489. package/types/components/collapse.d.ts +123 -133
  490. package/types/components/color-picker.d.ts +275 -280
  491. package/types/components/column.d.ts +834 -851
  492. package/types/components/context-menu.d.ts +282 -289
  493. package/types/components/countdown.d.ts +108 -112
  494. package/types/components/date-panel.d.ts +319 -331
  495. package/types/components/date-picker.d.ts +361 -384
  496. package/types/components/date-range-picker.d.ts +351 -371
  497. package/types/components/divider.d.ts +72 -75
  498. package/types/components/drawer.d.ts +333 -344
  499. package/types/components/empty.d.ts +75 -78
  500. package/types/components/flow-design.d.ts +73 -85
  501. package/types/components/flow-view.d.ts +73 -85
  502. package/types/components/form-design.d.ts +370 -376
  503. package/types/components/form-gather.d.ts +120 -124
  504. package/types/components/form-group.d.ts +73 -77
  505. package/types/components/form-item.d.ts +395 -413
  506. package/types/components/form-view.d.ts +179 -183
  507. package/types/components/form.d.ts +499 -495
  508. package/types/components/gantt-module/gantt-view.d.ts +195 -200
  509. package/types/components/gantt-module/index.d.ts +1 -1
  510. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +137 -131
  511. package/types/components/gantt-plugins/index.d.ts +1 -1
  512. package/types/components/gantt.d.ts +1248 -1399
  513. package/types/components/grid.d.ts +1289 -1317
  514. package/types/components/icon-picker.d.ts +242 -253
  515. package/types/components/icon.d.ts +332 -87
  516. package/types/components/image-group.d.ts +124 -127
  517. package/types/components/image-preview.d.ts +167 -167
  518. package/types/components/image.d.ts +166 -173
  519. package/types/components/input.d.ts +429 -453
  520. package/types/components/layout-aside.d.ts +123 -123
  521. package/types/components/layout-body.d.ts +110 -113
  522. package/types/components/layout-container.d.ts +73 -75
  523. package/types/components/layout-footer.d.ts +71 -73
  524. package/types/components/layout-header.d.ts +67 -69
  525. package/types/components/link.d.ts +107 -111
  526. package/types/components/list-design.d.ts +189 -190
  527. package/types/components/list-view.d.ts +193 -199
  528. package/types/components/list.d.ts +678 -715
  529. package/types/components/loading.d.ts +98 -103
  530. package/types/components/mention.d.ts +70 -77
  531. package/types/components/menu.d.ts +284 -295
  532. package/types/components/modal.d.ts +567 -584
  533. package/types/components/notice-bar.d.ts +102 -106
  534. package/types/components/number-input.d.ts +359 -365
  535. package/types/components/optgroup.d.ts +85 -88
  536. package/types/components/option.d.ts +94 -103
  537. package/types/components/pager.d.ts +330 -335
  538. package/types/components/password-input.d.ts +143 -156
  539. package/types/components/print-page-break.d.ts +65 -69
  540. package/types/components/print.d.ts +243 -245
  541. package/types/components/pulldown.d.ts +231 -239
  542. package/types/components/radio-button.d.ts +113 -118
  543. package/types/components/radio-group.d.ts +151 -153
  544. package/types/components/radio.d.ts +129 -134
  545. package/types/components/rate.d.ts +83 -88
  546. package/types/components/result.d.ts +81 -84
  547. package/types/components/row.d.ts +77 -81
  548. package/types/components/scrollbar.d.ts +299 -305
  549. package/types/components/segmented.d.ts +119 -123
  550. package/types/components/select.d.ts +598 -616
  551. package/types/components/slider.d.ts +137 -151
  552. package/types/components/space.d.ts +120 -127
  553. package/types/components/split-pane.d.ts +126 -133
  554. package/types/components/split.d.ts +301 -312
  555. package/types/components/splitter-panel.d.ts +123 -130
  556. package/types/components/splitter.d.ts +290 -301
  557. package/types/components/steps.d.ts +63 -68
  558. package/types/components/switch.d.ts +127 -133
  559. package/types/components/tab-pane.d.ts +111 -114
  560. package/types/components/table-module/custom.d.ts +123 -123
  561. package/types/components/table-module/edit.d.ts +297 -276
  562. package/types/components/table-module/export.d.ts +88 -96
  563. package/types/components/table-module/filter.d.ts +144 -144
  564. package/types/components/table-module/index.d.ts +7 -7
  565. package/types/components/table-module/keyboard.d.ts +26 -26
  566. package/types/components/table-module/menu.d.ts +46 -46
  567. package/types/components/table-module/validator.d.ts +53 -53
  568. package/types/components/table-plugins/extend-cell-area.d.ts +781 -781
  569. package/types/components/table-plugins/extend-pivot-table.d.ts +59 -58
  570. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  571. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  572. package/types/components/table-plugins/index.d.ts +4 -4
  573. package/types/components/table-select.d.ts +268 -276
  574. package/types/components/table-transfer.d.ts +80 -84
  575. package/types/components/table.d.ts +7530 -8000
  576. package/types/components/tabs.d.ts +314 -352
  577. package/types/components/tag.d.ts +108 -114
  578. package/types/components/text-ellipsis.d.ts +107 -112
  579. package/types/components/text.d.ts +112 -122
  580. package/types/components/textarea.d.ts +261 -275
  581. package/types/components/timeline-item.d.ts +66 -75
  582. package/types/components/timeline.d.ts +70 -77
  583. package/types/components/tip.d.ts +81 -83
  584. package/types/components/toolbar.d.ts +327 -336
  585. package/types/components/tooltip.d.ts +250 -255
  586. package/types/components/tour.d.ts +70 -77
  587. package/types/components/transfer.d.ts +80 -84
  588. package/types/components/tree-select.d.ts +361 -376
  589. package/types/components/tree.d.ts +994 -1036
  590. package/types/components/upload.d.ts +477 -518
  591. package/types/components/watermark.d.ts +116 -120
  592. package/types/handles/form-design.d.ts +50 -50
  593. package/types/handles/index.d.ts +3 -3
  594. package/types/handles/list-design.d.ts +1 -2
  595. package/types/handles/table.d.ts +15 -15
  596. package/types/index.d.ts +8 -8
  597. package/types/ui/commands.d.ts +57 -57
  598. package/types/ui/formats.d.ts +62 -62
  599. package/types/ui/global-config.d.ts +269 -269
  600. package/types/ui/global-icon.d.ts +315 -315
  601. package/types/ui/hooks.d.ts +13 -13
  602. package/types/ui/index.d.ts +100 -100
  603. package/types/ui/interceptor.d.ts +52 -52
  604. package/types/ui/menus.d.ts +89 -89
  605. package/types/ui/renderer.d.ts +1033 -1047
  606. package/types/ui/validators.d.ts +37 -38
  607. /package/dist/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  608. /package/dist/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  609. /package/dist/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  610. /package/es/icon/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  611. /package/es/icon/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  612. /package/es/icon/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  613. /package/es/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  614. /package/es/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  615. /package/es/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  616. /package/es/vxe-icon/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  617. /package/es/vxe-icon/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  618. /package/es/vxe-icon/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  619. /package/lib/icon/style/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  620. /package/lib/icon/style/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  621. /package/lib/icon/style/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  622. /package/lib/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  623. /package/lib/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  624. /package/lib/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  625. /package/lib/vxe-icon/style/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  626. /package/lib/vxe-icon/style/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  627. /package/lib/vxe-icon/style/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
@@ -1,1020 +1,1110 @@
1
- import { PropType, ref, h, reactive, provide, VNode, computed, watch, nextTick, onMounted, onUnmounted, onActivated } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import { getConfig, getIcon, createEvent, globalEvents, globalResize, useSize, renderEmptyElement } from '../../ui'
4
- import { getSlotVNs } from '../../ui/src/vn'
5
- import { toCssUnit, isScale, addClass, removeClass } from '../../ui/src/dom'
6
- import { getGlobalDefaultConfig } from '../../ui/src/utils'
7
- import { createComponentLog } from '../../ui/src/log'
8
- import XEUtils from 'xe-utils'
9
-
10
- import type { SplitterReactData, SplitterPrivateRef, VxeSplitterPropTypes, SplitterInternalData, SplitterMethods, VxeSplitterPanelPropTypes, VxeSplitterDefines, VxeSplitterPanelProps, VxeSplitterPrivateComputed, SplitterPrivateMethods, VxeSplitterEmits, VxeSplitterConstructor, ValueOf, VxeSplitterPrivateMethods } from '../../../types'
11
-
12
- const { warnLog, errLog } = createComponentLog('splitter')
13
-
14
- export default defineVxeComponent({
15
- name: 'VxeSplitter',
16
- props: {
17
- width: [Number, String] as PropType<VxeSplitterPropTypes.Width>,
18
- height: [Number, String] as PropType<VxeSplitterPropTypes.Height>,
19
- vertical: {
20
- type: Boolean as PropType<VxeSplitterPropTypes.Vertical>,
21
- default: () => getConfig().splitter.vertical
22
- },
23
- border: {
24
- type: Boolean as PropType<VxeSplitterPropTypes.Border>,
25
- default: () => getConfig().splitter.border
26
- },
27
- padding: {
28
- type: Boolean as PropType<VxeSplitterPropTypes.Padding>,
29
- default: () => getConfig().splitter.padding
30
- },
31
- resize: {
32
- type: Boolean as PropType<VxeSplitterPropTypes.Resize>,
33
- default: () => getConfig().splitter.resize
34
- },
35
- items: Array as PropType<VxeSplitterPropTypes.Items>,
36
- itemConfig: Object as PropType<VxeSplitterPropTypes.ItemConfig>,
37
- barConfig: Object as PropType<VxeSplitterPropTypes.BarConfig>,
38
- resizeConfig: Object as PropType<VxeSplitterPropTypes.ResizeConfig>,
39
- actionConfig: Object as PropType<VxeSplitterPropTypes.ActionConfig>,
40
- size: {
41
- type: String as PropType<VxeSplitterPropTypes.Size>,
42
- default: () => getConfig().splitter.size || getConfig().size
43
- }
44
- },
45
- emits: [
46
- 'action-dblclick',
47
- 'action-click',
48
- 'toggle-expand',
49
- 'resize-start',
50
- 'resize-drag',
51
- 'resize-end'
52
- ] as VxeSplitterEmits,
53
- setup (props, context) {
54
- const { emit, slots } = context
55
-
56
- const xID = XEUtils.uniqueId()
57
-
58
- const refElem = ref<HTMLDivElement>()
59
- const refBarInfoElem = ref<HTMLDivElement>()
60
- const refResizableSplitterTip = ref<HTMLDivElement>()
61
-
62
- const { computeSize } = useSize(props)
63
-
64
- const reactData = reactive<SplitterReactData>({
65
- staticItems: [],
66
- itemList: [],
67
- barWidth: 0,
68
- barHeight: 0,
69
- resizeFlag: 0
70
- })
71
-
72
- const internalData: SplitterInternalData = {
73
- wrapperWidth: 0,
74
- wrapperHeight: 0
75
- }
76
-
77
- const computeItemOpts = computed(() => {
78
- return Object.assign({}, getConfig().splitter.itemConfig, props.itemConfig)
79
- })
80
-
81
- const computeBarOpts = computed(() => {
82
- return Object.assign({}, getConfig().splitter.barConfig, props.barConfig)
83
- })
84
-
85
- const computeResizeOpts = computed(() => {
86
- return Object.assign({}, getConfig().splitter.resizeConfig, props.resizeConfig)
87
- })
88
-
89
- const computeActionOpts = computed(() => {
90
- return Object.assign({}, getConfig().splitter.actionConfig, props.actionConfig)
91
- })
92
-
93
- const computeVisibleItems = computed(() => {
94
- return reactData.itemList.filter(item => item.isExpand)
95
- })
96
-
97
- const computeAutoItems = computed(() => {
98
- const { vertical } = props
99
- const autoItems: VxeSplitterDefines.PaneConfig[] = []
100
- let heightCount = 0
101
- let widthCount = 0
102
- reactData.itemList.forEach(vertical
103
- ? item => {
104
- const { renderHeight, resizeHeight, foldHeight, isExpand, height } = item
105
- const itemHeight = isExpand ? (foldHeight || resizeHeight || renderHeight) : 0
106
- if (!height) {
107
- autoItems.push(item)
108
- }
109
- heightCount += itemHeight
110
- }
111
- : item => {
112
- const { renderWidth, resizeWidth, foldWidth, isExpand, width } = item
113
- const itemWidth = isExpand ? (foldWidth || resizeWidth || renderWidth) : 0
114
- if (!width) {
115
- autoItems.push(item)
116
- }
117
- widthCount += itemWidth
118
- })
119
- return {
120
- autoItems,
121
- heightCount,
122
- heightRatio: heightCount / 100,
123
- widthCount,
124
- widthRatio: widthCount / 100
125
- }
126
- })
127
-
128
- const computeWrapperStyle = computed(() => {
129
- const { width, height } = props
130
- const barOpts = computeBarOpts.value
131
- const { width: barWidth, height: barHeight } = barOpts
132
- const stys: Record<string, string | number> = {}
133
- if (height) {
134
- stys.height = toCssUnit(height)
135
- }
136
- if (width) {
137
- stys.width = toCssUnit(width)
138
- }
139
- if (barHeight) {
140
- stys['--vxe-ui-splitter-handle-bar-vertical-height'] = toCssUnit(barHeight)
141
- }
142
- if (barWidth) {
143
- stys['--vxe-ui-splitter-handle-bar-horizontal-width'] = toCssUnit(barWidth)
144
- }
145
- return stys
146
- })
147
-
148
- const computeMaps: VxeSplitterPrivateComputed = {
149
- computeItemOpts,
150
- computeBarOpts,
151
- computeActionOpts
152
- }
153
-
154
- const refMaps: SplitterPrivateRef = {
155
- refElem
156
- }
157
-
158
- const $xeSplitter = {
159
- xID,
160
- props,
161
- context,
162
- reactData,
163
- internalData,
164
-
165
- getRefMaps: () => refMaps,
166
- getComputeMaps: () => computeMaps
167
- } as unknown as VxeSplitterConstructor & VxeSplitterPrivateMethods
168
-
169
- const dispatchEvent = (type: ValueOf<VxeSplitterEmits>, params: Record<string, any>, evnt: Event | null) => {
170
- emit(type, createEvent(evnt, { $splitter: $xeSplitter }, params))
171
- }
172
-
173
- const callSlot = (slotFunc: any, params: any) => {
174
- if (slotFunc) {
175
- if (XEUtils.isString(slotFunc)) {
176
- slotFunc = slots[slotFunc] || null
177
- }
178
- if (XEUtils.isFunction(slotFunc)) {
179
- return getSlotVNs(slotFunc(params))
180
- }
181
- }
182
- return []
183
- }
184
-
185
- const getActionIcon = (prevItem: VxeSplitterDefines.PaneConfig, nextItem: VxeSplitterDefines.PaneConfig, isNext: boolean) => {
186
- const { vertical } = props
187
- const topIcon = 'SPLIT_TOP_ACTION'
188
- const bottomIcon = 'SPLIT_BOTTOM_ACTION'
189
- const leftIcon = 'SPLIT_LEFT_ACTION'
190
- const rightIcon = 'SPLIT_RIGHT_ACTION'
191
- let iconName: 'SPLIT_TOP_ACTION' | 'SPLIT_BOTTOM_ACTION' | 'SPLIT_LEFT_ACTION' | 'SPLIT_RIGHT_ACTION' | '' = ''
192
- if (vertical) {
193
- if (isNext) {
194
- iconName = nextItem.isExpand ? bottomIcon : topIcon
195
- } else {
196
- iconName = prevItem.isExpand ? topIcon : bottomIcon
197
- }
198
- } else {
199
- if (isNext) {
200
- iconName = nextItem.isExpand ? rightIcon : leftIcon
201
- } else {
202
- iconName = prevItem.isExpand ? leftIcon : rightIcon
203
- }
204
- }
205
- if (iconName) {
206
- return getIcon()[iconName]
207
- }
208
- return ''
209
- }
210
-
211
- const reset = () => {
212
- const { itemList } = reactData
213
- itemList.forEach(item => {
214
- item.isExpand = true
215
- item.foldHeight = 0
216
- item.foldWidth = 0
217
- item.resizeHeight = 0
218
- item.resizeWidth = 0
219
- })
220
- return nextTick()
221
- }
222
-
223
- const handleLoadItem = (list: VxeSplitterPanelProps[], isReset: boolean) => {
224
- const { staticItems } = reactData
225
- const actionOpts = computeActionOpts.value
226
- const { showPrevButton, showNextButton } = actionOpts
227
- const itemDef = {
228
- isExpand: true,
229
- renderWidth: 0,
230
- resizeWidth: 0,
231
- foldWidth: 0,
232
- renderHeight: 0,
233
- resizeHeight: 0,
234
- foldHeight: 0
235
- }
236
- reactData.itemList = list.map(item => {
237
- if (item.showAction) {
238
- warnLog('vxe.error.removeProp', ['show-action'])
239
- }
240
- if (item.slots) {
241
- XEUtils.each(item.slots, (func) => {
242
- if (func && !XEUtils.isFunction(func)) {
243
- if (!slots[func]) {
244
- errLog('vxe.error.notSlot', [func])
245
- }
246
- }
247
- })
248
- }
249
- return Object.assign({}, isReset ? null : itemDef, item, isReset ? itemDef : null, {
250
- id: XEUtils.uniqueId()
251
- })
252
- })
253
- if (staticItems.length) {
254
- errLog('vxe.error.errConflicts', ['<vxe-splitter-panel ...>', 'items'])
255
- }
256
- if ((showPrevButton || showNextButton) && reactData.itemList.length > 2) {
257
- errLog('vxe.error.errConflicts', ['action-config.showPrevButton | action-config.showNextButton', 'Only supports 2 item'])
258
- }
259
- return recalculate()
260
- }
261
-
262
- const loadItem = (list: VxeSplitterPanelProps[]) => {
263
- return handleLoadItem(list || [], false)
264
- }
265
-
266
- const reloadItem = (list: VxeSplitterPanelProps[]) => {
267
- return handleLoadItem(list || [], true)
268
- }
269
-
270
- const handleItemByName = (name: VxeSplitterPanelPropTypes.Name) => {
271
- const { itemList } = reactData
272
- let index = -1
273
- let currItem: VxeSplitterDefines.PaneConfig | null = null
274
- let prevItem: VxeSplitterDefines.PaneConfig | null = null
275
- let nextItem: VxeSplitterDefines.PaneConfig | null = null
276
- for (let i = 0; i < itemList.length; i++) {
277
- const item = itemList[i]
278
- if (item.name === name) {
279
- index = i
280
- currItem = item
281
- prevItem = itemList[i - 1] || null
282
- nextItem = itemList[i + 1] || null
283
- break
284
- }
285
- }
286
- return {
287
- index,
288
- currItem,
289
- prevItem,
290
- nextItem
291
- }
292
- }
293
-
294
- const setItemExpand = (name: VxeSplitterPanelPropTypes.Name, expanded: boolean) => {
295
- const restItem = handleItemByName(name)
296
- if (restItem) {
297
- const { currItem, prevItem, nextItem } = restItem
298
- if (currItem) {
299
- if (expanded ? !currItem.isExpand : currItem.isExpand) {
300
- if (nextItem) {
301
- if (nextItem.isExpand) {
302
- handleItemActionEvent(null, currItem, nextItem, false)
303
- }
304
- } else if (prevItem) {
305
- if (prevItem.isExpand) {
306
- handleItemActionEvent(null, prevItem, currItem, true)
307
- }
308
- }
309
- }
310
- }
311
- }
312
- return nextTick()
313
- }
314
-
315
- const toggleItemExpand = (name: VxeSplitterPanelPropTypes.Name) => {
316
- const restItem = handleItemByName(name)
317
- if (restItem) {
318
- const { currItem } = restItem
319
- if (currItem) {
320
- return setItemExpand(name, !currItem.isExpand)
321
- }
322
- }
323
- return nextTick()
324
- }
325
-
326
- const getItemExpand = (name: VxeSplitterPanelPropTypes.Name) => {
327
- const restItem = handleItemByName(name)
328
- if (restItem) {
329
- const { currItem } = restItem
330
- if (currItem) {
331
- return currItem.isExpand
332
- }
333
- }
334
- return false
335
- }
336
-
337
- const recalculate = () => {
338
- return nextTick().then(() => {
339
- const { vertical } = props
340
- const { itemList } = reactData
341
- const el = refElem.value
342
- const barInfoElem = refBarInfoElem.value
343
- if (!el) {
344
- return
345
- }
346
- const wWidth = el.clientWidth
347
- const wHeight = el.clientHeight
348
- if (!wWidth || !wHeight) {
349
- return
350
- }
351
- if (barInfoElem) {
352
- reactData.barWidth = barInfoElem.offsetWidth
353
- reactData.barHeight = barInfoElem.offsetHeight
354
- }
355
- const contentWidth = wWidth - (vertical ? 0 : reactData.barWidth * (itemList.length - 1))
356
- const contentHeight = wHeight - (vertical ? reactData.barHeight * (itemList.length - 1) : 0)
357
- const itemOpts = computeItemOpts.value
358
- const allMinWidth = XEUtils.toNumber(itemOpts.minWidth)
359
- const allMinHeight = XEUtils.toNumber(itemOpts.minHeight)
360
- const residueItems: VxeSplitterDefines.PaneConfig[] = []
361
- if (vertical) {
362
- let countHeight = 0
363
- itemList.forEach(item => {
364
- const { height } = item
365
- let itemHeight = 0
366
- if (height) {
367
- if (isScale(height)) {
368
- itemHeight = contentHeight * XEUtils.toNumber(height) / 100
369
- } else {
370
- itemHeight = XEUtils.toNumber(height)
371
- }
372
- item.renderHeight = itemHeight
373
- } else {
374
- residueItems.push(item)
375
- }
376
- countHeight += itemHeight
377
- })
378
- if (residueItems.length) {
379
- const reMeanHeight = (contentHeight - countHeight) / residueItems.length
380
- residueItems.forEach(item => {
381
- item.renderHeight = Math.max(XEUtils.toNumber(getGlobalDefaultConfig(item.minHeight, allMinHeight)), reMeanHeight)
382
- })
383
- }
384
- } else {
385
- let countWidth = 0
386
- itemList.forEach(item => {
387
- const { width } = item
388
- let itemWidth = 0
389
- if (width) {
390
- if (isScale(width)) {
391
- itemWidth = contentWidth * XEUtils.toNumber(width) / 100
392
- } else {
393
- itemWidth = XEUtils.toNumber(width)
394
- }
395
- item.renderWidth = itemWidth
396
- } else {
397
- residueItems.push(item)
398
- }
399
- countWidth += itemWidth
400
- })
401
- if (residueItems.length) {
402
- const reMeanWidth = (contentWidth - countWidth) / residueItems.length
403
- residueItems.forEach(item => {
404
- item.renderWidth = Math.max(XEUtils.toNumber(getGlobalDefaultConfig(item.minWidth, allMinWidth)), reMeanWidth)
405
- })
406
- }
407
- }
408
- internalData.wrapperWidth = contentWidth
409
- internalData.wrapperHeight = contentHeight
410
- })
411
- }
412
-
413
- const dragEvent = (evnt: MouseEvent) => {
414
- const { resize, vertical } = props
415
- const { itemList } = reactData
416
- if (!resize) {
417
- return
418
- }
419
- evnt.preventDefault()
420
- const barEl = evnt.currentTarget as HTMLDivElement
421
- const handleEl = barEl.parentElement as HTMLDivElement
422
- const el = refElem.value
423
- if (!el) {
424
- return
425
- }
426
- const prevEl = handleEl.previousElementSibling as HTMLDivElement
427
- const nextEl = handleEl.nextElementSibling as HTMLDivElement
428
- if (!prevEl || !nextEl) {
429
- return
430
- }
431
- const prevId = prevEl.getAttribute('itemid')
432
- const nextId = nextEl.getAttribute('itemid')
433
- const prevItem = itemList.find(item => item.id === prevId)
434
- const nextItem = itemList.find(item => item.id === nextId)
435
- if (!prevItem || !nextItem) {
436
- return
437
- }
438
- const containerRect = el.getBoundingClientRect()
439
- const barRect = barEl.getBoundingClientRect()
440
- const rsSplitterLineEl = refResizableSplitterTip.value
441
- const rsSplitterTipEl = rsSplitterLineEl ? rsSplitterLineEl.children[0] as HTMLDivElement : null
442
- const itemOpts = computeItemOpts.value
443
- const resizeOpts = computeResizeOpts.value
444
- const { immediate } = resizeOpts
445
- const allMinWidth = XEUtils.toNumber(itemOpts.minWidth)
446
- const allMinHeight = XEUtils.toNumber(itemOpts.minHeight)
447
-
448
- const barOffsetX = Math.ceil(barRect.width - (evnt.clientX - barRect.left))
449
- const barOffsetY = Math.ceil(evnt.clientY - barRect.top)
450
-
451
- const prevWidth = prevEl.offsetWidth
452
- const nextWidth = nextEl.offsetWidth
453
- const prevMinWidth = XEUtils.toNumber(prevItem ? getGlobalDefaultConfig(prevItem.minWidth, allMinWidth) : allMinWidth)
454
- const nextMinWidth = XEUtils.toNumber(nextItem ? getGlobalDefaultConfig(nextItem.minWidth, allMinWidth) : allMinWidth)
455
- const minOffsetLeft = prevEl.offsetLeft + prevMinWidth - barOffsetX
456
- const maxOffsetLeft = nextEl.offsetLeft + nextEl.offsetWidth - nextMinWidth - barOffsetX
457
- const startOffsetLeft = evnt.clientX - containerRect.left
458
- let targetOffsetWidth = -1
459
- let prevResizeWidth = 0
460
- let nextResizeWidth = 0
461
- let offsetLeft = startOffsetLeft
462
-
463
- const prevHeight = prevEl.offsetHeight
464
- const nextHeight = nextEl.offsetHeight
465
- const prevMinHeight = XEUtils.toNumber(prevItem ? getGlobalDefaultConfig(prevItem.minHeight, allMinHeight) : allMinHeight)
466
- const nextMinHeight = XEUtils.toNumber(nextItem ? getGlobalDefaultConfig(nextItem.minHeight, allMinHeight) : allMinHeight)
467
- const minOffsetTop = prevEl.offsetTop + prevMinHeight + barOffsetY
468
- const maxOffsetTop = nextEl.offsetTop + nextEl.offsetHeight - nextMinHeight + barOffsetY
469
- const startOffsetTop = evnt.clientY - containerRect.top
470
- let targetOffsetHeight = -1
471
- let prevResizeHeight = 0
472
- let nextResizeHeight = 0
473
- let offsetTop = startOffsetTop
474
-
475
- const handleReStyle = (evnt: MouseEvent) => {
476
- if (!rsSplitterLineEl) {
477
- return
478
- }
479
- const rsNumPrevEl = rsSplitterTipEl ? rsSplitterTipEl.children[0] as HTMLDivElement : null
480
- const rsNumNextEl = rsSplitterTipEl ? rsSplitterTipEl.children[1] as HTMLDivElement : null
481
- if (vertical) {
482
- let tipWidth = 0
483
- if (rsNumPrevEl) {
484
- if (targetOffsetHeight < 0) {
485
- rsNumPrevEl.style.display = 'none'
486
- } else {
487
- rsNumPrevEl.textContent = `${Math.floor(prevResizeHeight)}px`
488
- rsNumPrevEl.style.display = 'block'
489
- tipWidth = rsNumPrevEl.offsetWidth
490
- }
491
- }
492
- if (rsNumNextEl) {
493
- if (targetOffsetHeight < 0) {
494
- rsNumNextEl.textContent = `${Math.floor(nextResizeHeight)}px`
495
- rsNumNextEl.style.display = 'block'
496
- tipWidth = rsNumNextEl.offsetWidth
497
- } else {
498
- rsNumNextEl.style.display = 'none'
499
- }
500
- }
501
- let rsLeft = Math.max(1, evnt.clientX - containerRect.left - tipWidth / 2)
502
- if (rsLeft > containerRect.width - tipWidth - 1) {
503
- rsLeft = containerRect.width - tipWidth - 1
504
- }
505
- rsSplitterLineEl.style.left = '0'
506
- rsSplitterLineEl.style.top = `${offsetTop}px`
507
- if (rsSplitterTipEl) {
508
- rsSplitterTipEl.style.left = `${rsLeft}px`
509
- }
510
- } else {
511
- let tipHeight = 0
512
- if (rsNumPrevEl) {
513
- if (targetOffsetWidth < 0) {
514
- rsNumPrevEl.style.display = 'none'
515
- } else {
516
- rsNumPrevEl.textContent = `${Math.floor(prevResizeWidth)}px`
517
- rsNumPrevEl.style.display = 'block'
518
- tipHeight = rsNumPrevEl.offsetHeight
519
- }
520
- }
521
- if (rsNumNextEl) {
522
- if (targetOffsetWidth < 0) {
523
- rsNumNextEl.textContent = `${Math.floor(nextResizeWidth)}px`
524
- rsNumNextEl.style.display = 'block'
525
- tipHeight = rsNumNextEl.offsetHeight
526
- } else {
527
- rsNumNextEl.style.display = 'none'
528
- }
529
- }
530
- let rsTop = Math.max(1, evnt.clientY - containerRect.top - tipHeight / 2)
531
- if (rsTop > containerRect.height - tipHeight - 1) {
532
- rsTop = containerRect.height - tipHeight - 1
533
- }
534
- rsSplitterLineEl.style.top = '0'
535
- rsSplitterLineEl.style.left = `${offsetLeft}px`
536
- if (rsSplitterTipEl) {
537
- rsSplitterTipEl.style.top = `${rsTop}px`
538
- }
539
- }
540
- }
541
-
542
- const handleUpdate = () => {
543
- if (vertical) {
544
- prevItem.resizeHeight = prevResizeHeight
545
- nextItem.resizeHeight = nextResizeHeight
546
- } else {
547
- prevItem.resizeWidth = prevResizeWidth
548
- nextItem.resizeWidth = nextResizeWidth
549
- }
550
- }
551
-
552
- const handleDrag = (evnt: MouseEvent) => {
553
- if (vertical) {
554
- offsetTop = evnt.clientY - containerRect.top
555
- if (offsetTop < minOffsetTop) {
556
- offsetTop = minOffsetTop
557
- }
558
- if (offsetTop > maxOffsetTop) {
559
- offsetTop = maxOffsetTop
560
- }
561
- targetOffsetHeight = offsetTop - startOffsetTop
562
- prevResizeHeight = prevHeight + targetOffsetHeight
563
- nextResizeHeight = nextHeight - targetOffsetHeight
564
- } else {
565
- offsetLeft = evnt.clientX - containerRect.left
566
- if (offsetLeft < minOffsetLeft) {
567
- offsetLeft = minOffsetLeft
568
- }
569
- if (offsetLeft > maxOffsetLeft) {
570
- offsetLeft = maxOffsetLeft
571
- }
572
- targetOffsetWidth = offsetLeft - startOffsetLeft
573
- prevResizeWidth = prevWidth + targetOffsetWidth
574
- nextResizeWidth = nextWidth - targetOffsetWidth
575
- }
576
- if (immediate) {
577
- if (vertical) {
578
- prevEl.style.height = toCssUnit(prevResizeHeight)
579
- nextEl.style.height = toCssUnit(nextResizeHeight)
580
- } else {
581
- prevEl.style.width = toCssUnit(prevResizeWidth)
582
- nextEl.style.width = toCssUnit(nextResizeWidth)
583
- }
584
- }
585
- if (rsSplitterLineEl) {
586
- handleReStyle(evnt)
587
- }
588
- dispatchEvent('resize-drag', { prevItem, nextItem, offsetHeight: targetOffsetHeight, offsetWidth: targetOffsetWidth }, evnt)
589
- }
590
-
591
- document.onmousemove = (evnt) => {
592
- evnt.preventDefault()
593
- handleDrag(evnt)
594
- reactData.resizeFlag++
595
- }
596
- document.onmouseup = (evnt) => {
597
- document.onmousemove = null
598
- document.onmouseup = null
599
- if (rsSplitterLineEl) {
600
- rsSplitterLineEl.style.display = ''
601
- }
602
- handleUpdate()
603
- removeClass(el, 'is--drag')
604
- dispatchEvent('resize-end', { prevItem, nextItem, offsetHeight: targetOffsetHeight, offsetWidth: targetOffsetWidth }, evnt)
605
- recalculate()
606
- reactData.resizeFlag++
607
- }
608
-
609
- if (rsSplitterLineEl) {
610
- rsSplitterLineEl.style.display = 'block'
611
- handleReStyle(evnt)
612
- }
613
- handleDrag(evnt)
614
- addClass(el, 'is--drag')
615
- dispatchEvent('resize-start', { prevItem, nextItem }, evnt)
616
- }
617
-
618
- const handleItemActionEvent = (evnt: MouseEvent | null, prevItem: VxeSplitterDefines.PaneConfig, nextItem: VxeSplitterDefines.PaneConfig, isNext: boolean) => {
619
- const { vertical } = props
620
- let expanded = false
621
- let item = prevItem
622
- if (isNext) {
623
- item = nextItem
624
- expanded = !nextItem.isExpand
625
- nextItem.isExpand = expanded
626
- } else {
627
- expanded = !prevItem.isExpand
628
- prevItem.isExpand = expanded
629
- }
630
- if (vertical) {
631
- if (prevItem.isExpand && nextItem.isExpand) {
632
- prevItem.foldHeight = 0
633
- nextItem.foldHeight = 0
634
- } else if (prevItem.isExpand) {
635
- nextItem.foldHeight = 0
636
- prevItem.foldHeight = (prevItem.resizeHeight || prevItem.renderHeight) + (nextItem.resizeHeight || nextItem.renderHeight)
637
- } else {
638
- prevItem.foldHeight = 0
639
- nextItem.foldHeight = (prevItem.resizeHeight || prevItem.renderHeight) + (nextItem.resizeHeight || nextItem.renderHeight)
640
- }
641
- } else {
642
- if (prevItem.isExpand && nextItem.isExpand) {
643
- prevItem.foldWidth = 0
644
- nextItem.foldWidth = 0
645
- } else if (prevItem.isExpand) {
646
- nextItem.foldWidth = 0
647
- prevItem.foldWidth = (prevItem.resizeWidth || prevItem.renderWidth) + (nextItem.resizeWidth || nextItem.renderWidth)
648
- } else {
649
- prevItem.foldWidth = 0
650
- nextItem.foldWidth = (prevItem.resizeWidth || prevItem.renderWidth) + (nextItem.resizeWidth || nextItem.renderWidth)
651
- }
652
- }
653
- if (evnt) {
654
- dispatchEvent('toggle-expand', { prevItem, nextItem, expanded, item }, evnt)
655
- }
656
- recalculate()
657
- reactData.resizeFlag++
658
- }
659
-
660
- const handlePrevActionDblclickEvent = (evnt: MouseEvent) => {
661
- const { itemList } = reactData
662
- const actionOpts = computeActionOpts.value
663
- const btnEl = evnt.currentTarget as HTMLDivElement
664
- const btnWrapperEl = btnEl.parentElement as HTMLDivElement
665
- const handleEl = btnWrapperEl.parentElement as HTMLDivElement
666
- const prevEl = handleEl.previousElementSibling as HTMLDivElement
667
- const prevId = prevEl.getAttribute('itemid')
668
- const prevItem = itemList.find(item => item.id === prevId)
669
- const nextEl = handleEl.nextElementSibling as HTMLDivElement
670
- const nextId = nextEl.getAttribute('itemid')
671
- const nextItem = itemList.find(item => item.id === nextId)
672
-
673
- if (actionOpts.trigger === 'dblclick') {
674
- if (prevItem && nextItem && nextItem.isExpand) {
675
- handleItemActionEvent(evnt, prevItem, nextItem, false)
676
- }
677
- }
678
- dispatchEvent('action-dblclick', { prevItem, nextItem }, evnt)
679
- }
680
-
681
- const handlePrevActionClickEvent = (evnt: MouseEvent) => {
682
- const { itemList } = reactData
683
- const actionOpts = computeActionOpts.value
684
- const btnEl = evnt.currentTarget as HTMLDivElement
685
- const btnWrapperEl = btnEl.parentElement as HTMLDivElement
686
- const handleEl = btnWrapperEl.parentElement as HTMLDivElement
687
- const prevEl = handleEl.previousElementSibling as HTMLDivElement
688
- const prevId = prevEl.getAttribute('itemid')
689
- const prevItem = itemList.find(item => item.id === prevId)
690
- const nextEl = handleEl.nextElementSibling as HTMLDivElement
691
- const nextId = nextEl.getAttribute('itemid')
692
- const nextItem = itemList.find(item => item.id === nextId)
693
-
694
- if (actionOpts.trigger !== 'dblclick') {
695
- if (prevItem && nextItem && nextItem.isExpand) {
696
- handleItemActionEvent(evnt, prevItem, nextItem, false)
697
- }
698
- }
699
- dispatchEvent('action-click', { prevItem, nextItem }, evnt)
700
- }
701
-
702
- const handleNextActionDblclickEvent = (evnt: MouseEvent) => {
703
- const { itemList } = reactData
704
- const actionOpts = computeActionOpts.value
705
- const btnEl = evnt.currentTarget as HTMLDivElement
706
- const btnWrapperEl = btnEl.parentElement as HTMLDivElement
707
- const handleEl = btnWrapperEl.parentElement as HTMLDivElement
708
- const prevEl = handleEl.previousElementSibling as HTMLDivElement
709
- const prevId = prevEl.getAttribute('itemid')
710
- const prevItem = itemList.find(item => item.id === prevId)
711
- const nextEl = handleEl.nextElementSibling as HTMLDivElement
712
- const nextId = nextEl.getAttribute('itemid')
713
- const nextItem = itemList.find(item => item.id === nextId)
714
-
715
- if (actionOpts.trigger === 'dblclick') {
716
- if (prevItem && nextItem && prevItem.isExpand) {
717
- handleItemActionEvent(evnt, prevItem, nextItem, true)
718
- }
719
- }
720
- dispatchEvent('action-dblclick', { prevItem, nextItem }, evnt)
721
- }
722
-
723
- const handleNextActionClickEvent = (evnt: MouseEvent) => {
724
- const { itemList } = reactData
725
- const actionOpts = computeActionOpts.value
726
- const btnEl = evnt.currentTarget as HTMLDivElement
727
- const btnWrapperEl = btnEl.parentElement as HTMLDivElement
728
- const handleEl = btnWrapperEl.parentElement as HTMLDivElement
729
- const prevEl = handleEl.previousElementSibling as HTMLDivElement
730
- const prevId = prevEl.getAttribute('itemid')
731
- const prevItem = itemList.find(item => item.id === prevId)
732
- const nextEl = handleEl.nextElementSibling as HTMLDivElement
733
- const nextId = nextEl.getAttribute('itemid')
734
- const nextItem = itemList.find(item => item.id === nextId)
735
-
736
- if (actionOpts.trigger !== 'dblclick') {
737
- if (prevItem && nextItem && prevItem.isExpand) {
738
- handleItemActionEvent(evnt, prevItem, nextItem, true)
739
- }
740
- }
741
- dispatchEvent('action-click', { prevItem, nextItem }, evnt)
742
- }
743
-
744
- const handleGlobalResizeEvent = () => {
745
- recalculate()
746
- }
747
-
748
- const splitterMethods: SplitterMethods = {
749
- dispatchEvent,
750
- setItemExpand,
751
- toggleItemExpand,
752
- getItemExpand,
753
- recalculate,
754
- reset,
755
- loadItem,
756
- reloadItem
757
- }
758
-
759
- const splitterPrivateMethods: SplitterPrivateMethods = {
760
- }
761
-
762
- Object.assign($xeSplitter, splitterMethods, splitterPrivateMethods)
763
-
764
- const renderHandleBar = (prevItem: VxeSplitterDefines.PaneConfig, nextItem: VxeSplitterDefines.PaneConfig) => {
765
- const { border, resize, vertical } = props
766
- const { itemList } = reactData
767
- const actionOpts = computeActionOpts.value
768
- const { direction } = actionOpts
769
- const showPrevButton = XEUtils.isBoolean(actionOpts.showPrevButton) ? actionOpts.showPrevButton : (itemList.some(item => item.showAction))
770
- const showNextButton = XEUtils.isBoolean(actionOpts.showNextButton) ? actionOpts.showNextButton : (direction === 'next' && itemList.some(item => item.showAction))
771
- const resizeOpts = computeResizeOpts.value
772
- const { immediate } = resizeOpts
773
- return h('div', {
774
- class: ['vxe-splitter-panel-handle', vertical ? 'is--vertical' : 'is--horizontal', immediate ? 'is-resize--immediate' : 'is-resize--lazy', {
775
- 'is--resize': resize,
776
- 'is--border': border
777
- }]
778
- }, [
779
- h('div', {
780
- class: 'vxe-splitter-panel-handle-bar',
781
- onMousedown: dragEvent
782
- }),
783
- itemList.length === 2
784
- ? h('div', {
785
- class: 'vxe-splitter-panel-action-btn-wrapper'
786
- }, [
787
- showPrevButton && nextItem.isExpand
788
- ? h('div', {
789
- class: ['vxe-splitter-panel-action-btn', prevItem.isExpand ? 'is--prev' : 'is--next'],
790
- onDblclick: handlePrevActionDblclickEvent,
791
- onClick: handlePrevActionClickEvent
792
- }, [
793
- h('i', {
794
- class: getActionIcon(prevItem, nextItem, false)
795
- })
796
- ])
797
- : renderEmptyElement($xeSplitter),
798
- showNextButton && prevItem.isExpand
799
- ? h('div', {
800
- class: ['vxe-splitter-panel-action-btn', nextItem.isExpand ? 'is--next' : 'is--prev'],
801
- onDblclick: handleNextActionDblclickEvent,
802
- onClick: handleNextActionClickEvent
803
- }, [
804
- h('i', {
805
- class: getActionIcon(prevItem, nextItem, true)
806
- })
807
- ])
808
- : renderEmptyElement($xeSplitter)
809
- ])
810
- : renderEmptyElement($xeSplitter)
811
- ])
812
- }
813
-
814
- const renderItems = () => {
815
- const { border, padding, resize, vertical } = props
816
- const { itemList } = reactData
817
- const vSize = computeSize.value
818
- const actionOpts = computeActionOpts.value
819
- const { autoHideButton } = actionOpts
820
- const resizeOpts = computeResizeOpts.value
821
- const { immediate } = resizeOpts
822
- const visibleItems = computeVisibleItems.value
823
- const { autoItems } = computeAutoItems.value
824
- const isOnlyView = visibleItems.length <= 1
825
- const itemVNs: VNode[] = []
826
- itemList.forEach((prevItem, index) => {
827
- const { id, name, slots, renderHeight, resizeHeight, foldHeight, renderWidth, resizeWidth, foldWidth, isExpand } = prevItem
828
- const nextItem = itemList[index + 1]
829
- const defaultSlot = slots ? slots.default : null
830
- const stys: Record<string, string | number> = {}
831
- let itemWidth = isExpand ? (foldWidth || resizeWidth || renderWidth) : 0
832
- let itemHeight = isExpand ? (foldHeight || resizeHeight || renderHeight) : 0
833
- // 至少存在一个自适应
834
- if (autoItems.length === 1) {
835
- if (vertical) {
836
- if (!prevItem.height) {
837
- itemHeight = 0
838
- }
839
- } else {
840
- if (!prevItem.width) {
841
- itemWidth = 0
842
- }
843
- }
844
- }
845
- let isFill = true
846
- if (vertical) {
847
- if (itemHeight && visibleItems.length > 1) {
848
- isFill = false
849
- stys.height = toCssUnit(itemHeight)
850
- }
851
- } else {
852
- if (itemWidth && visibleItems.length > 1) {
853
- isFill = false
854
- stys.width = toCssUnit(itemWidth)
855
- }
856
- }
857
-
858
- itemVNs.push(
859
- h('div', {
860
- itemid: id,
861
- class: ['vxe-splitter-panel', vertical ? 'is--vertical' : 'is--horizontal', immediate ? 'is-resize--immediate' : 'is-resize--lazy', {
862
- [`size--${vSize}`]: vSize,
863
- 'is--resize': resize,
864
- 'is--padding': padding,
865
- 'is--border': border,
866
- 'is--height': itemHeight,
867
- 'is--width': itemWidth,
868
- 'is--visible': isExpand,
869
- 'is--hidden': !isExpand,
870
- 'is--fill': isExpand && isFill
871
- }],
872
- style: stys
873
- }, [
874
- h('div', {
875
- itemid: id,
876
- class: 'vxe-splitter-panel--wrapper'
877
- }, [
878
- h('div', {
879
- class: 'vxe-splitter-panel--inner'
880
- }, defaultSlot ? callSlot(defaultSlot, { name, isExpand }) : [])
881
- ])
882
- ])
883
- )
884
-
885
- if (nextItem) {
886
- itemVNs.push(renderHandleBar(prevItem, nextItem))
887
- }
888
- })
889
- return h('div', {
890
- class: ['vxe-splitter-wrapper', {
891
- 'is--ah-btn': autoHideButton,
892
- 'is--only-view': isOnlyView
893
- }]
894
- }, itemVNs)
895
- }
896
-
897
- const renderVN = () => {
898
- const { vertical } = props
899
- const vSize = computeSize.value
900
- const resizeOpts = computeResizeOpts.value
901
- const wrapperStyle = computeWrapperStyle.value
902
- const { immediate, showTip } = resizeOpts
903
- const defaultSlot = slots.default
904
- return h('div', {
905
- ref: refElem,
906
- class: ['vxe-splitter', vertical ? 'is--vertical' : 'is--horizontal', immediate ? 'is-resize--immediate' : 'is-resize--lazy', {
907
- [`size--${vSize}`]: vSize
908
- }],
909
- style: wrapperStyle
910
- }, [
911
- h('div', {
912
- class: 'vxe-splitter-slots'
913
- }, defaultSlot ? defaultSlot({}) : []),
914
- renderItems(),
915
- h('div', {
916
- ref: refResizableSplitterTip,
917
- class: ['vxe-splitter--resizable-splitter-tip', vertical ? 'is--vertical' : 'is--horizontal', immediate ? 'is-resize--immediate' : 'is-resize--lazy']
918
- }, showTip
919
- ? [
920
- h('div', {
921
- class: 'vxe-splitter--resizable-splitter-tip-number'
922
- }, [
923
- h('div', {
924
- class: 'vxe-splitter--resizable-splitter-number-prev'
925
- }),
926
- h('div', {
927
- class: 'vxe-splitter--resizable-splitter-number-next'
928
- })
929
- ])
930
- ]
931
- : []),
932
- h('div', {
933
- class: 'vxe-splitter--render-vars'
934
- }, [
935
- h('div', {
936
- ref: refBarInfoElem,
937
- class: 'vxe-splitter--handle-bar-info'
938
- })
939
- ])
940
- ])
941
- }
942
-
943
- const itemFlag = ref(0)
944
- watch(() => props.items ? props.items.length : -1, () => {
945
- itemFlag.value++
946
- })
947
- watch(() => props.items, () => {
948
- itemFlag.value++
949
- })
950
- watch(itemFlag, () => {
951
- loadItem(props.items || [])
952
- })
953
-
954
- watch(() => reactData.staticItems, (val) => {
955
- const actionOpts = computeActionOpts.value
956
- const { showPrevButton, showNextButton } = actionOpts
957
- if (props.items && props.items.length) {
958
- errLog('vxe.error.errConflicts', ['<vxe-splitter-panel ...>', 'items'])
959
- }
960
- reactData.itemList = val || []
961
-
962
- if ((showPrevButton || showNextButton) && reactData.itemList.length > 2) {
963
- errLog('vxe.error.modelConflicts', ['action-config.showPrevButton | action-config.showNextButton', '<vxe-splitter-panel ...> Only supports 2 panel'])
964
- }
965
- reactData.itemList.forEach(item => {
966
- if (item.showAction) {
967
- warnLog('vxe.error.removeProp', ['showAction'])
968
- }
969
- })
970
- recalculate()
971
- })
972
-
973
- let resizeObserver: ResizeObserver
974
-
975
- onMounted(() => {
976
- nextTick(() => {
977
- recalculate()
978
- })
979
-
980
- const el = refElem.value
981
- if (el) {
982
- resizeObserver = globalResize.create(() => {
983
- recalculate()
984
- })
985
- resizeObserver.observe(el)
986
- }
987
-
988
- const actionOpts = computeActionOpts.value
989
- if (actionOpts.direction) {
990
- errLog('vxe.error.delProp', ['action-config.direction', 'action-config.showPrevButton | action-config.showNextButton'])
991
- }
992
-
993
- globalEvents.on($xeSplitter, 'resize', handleGlobalResizeEvent)
994
- })
995
-
996
- onUnmounted(() => {
997
- if (resizeObserver) {
998
- resizeObserver.disconnect()
999
- }
1000
- globalEvents.off($xeSplitter, 'resize')
1001
- })
1002
-
1003
- onActivated(() => {
1004
- recalculate()
1005
- })
1006
-
1007
- if (props.items) {
1008
- loadItem(props.items)
1009
- }
1010
-
1011
- provide('$xeSplitter', $xeSplitter)
1012
-
1013
- $xeSplitter.renderVN = renderVN
1014
-
1015
- return $xeSplitter
1016
- },
1017
- render () {
1018
- return this.renderVN()
1019
- }
1020
- })
1
+ import { PropType, ref, h, reactive, provide, VNode, computed, watch, nextTick, onMounted, onUnmounted, onActivated } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import { VxeUI } from '@vxe-ui/core'
4
+ import { getSlotVNs } from '../../ui/src/vn'
5
+ import { toCssUnit, isScale, addClass, removeClass } from '../../ui/src/dom'
6
+ import { getGlobalDefaultConfig } from '../../ui/src/utils'
7
+ import { createComponentLog } from '../../ui/src/log'
8
+ import XEUtils from 'xe-utils'
9
+
10
+ import type {
11
+ SplitterReactData,
12
+ SplitterPrivateRef,
13
+ VxeSplitterPropTypes,
14
+ SplitterInternalData,
15
+ SplitterMethods,
16
+ VxeSplitterPanelPropTypes,
17
+ VxeSplitterDefines,
18
+ VxeSplitterPanelProps,
19
+ VxeSplitterPrivateComputed,
20
+ SplitterPrivateMethods,
21
+ VxeSplitterEmits,
22
+ VxeSplitterConstructor,
23
+ ValueOf,
24
+ VxeSplitterPrivateMethods
25
+ } from '../../../types'
26
+
27
+ const { getConfig, getIcon, createEvent, globalEvents, globalResize, useFns, renderEmptyElement } = VxeUI
28
+
29
+ const { warnLog, errLog } = createComponentLog('splitter')
30
+
31
+ export default defineVxeComponent({
32
+ name: 'VxeSplitter',
33
+ props: {
34
+ width: [Number, String] as PropType<VxeSplitterPropTypes.Width>,
35
+ height: [Number, String] as PropType<VxeSplitterPropTypes.Height>,
36
+ vertical: {
37
+ type: Boolean as PropType<VxeSplitterPropTypes.Vertical>,
38
+ default: () => getConfig().splitter.vertical
39
+ },
40
+ border: {
41
+ type: Boolean as PropType<VxeSplitterPropTypes.Border>,
42
+ default: () => getConfig().splitter.border
43
+ },
44
+ padding: {
45
+ type: Boolean as PropType<VxeSplitterPropTypes.Padding>,
46
+ default: () => getConfig().splitter.padding
47
+ },
48
+ resize: {
49
+ type: Boolean as PropType<VxeSplitterPropTypes.Resize>,
50
+ default: () => getConfig().splitter.resize
51
+ },
52
+ items: Array as PropType<VxeSplitterPropTypes.Items>,
53
+ itemConfig: Object as PropType<VxeSplitterPropTypes.ItemConfig>,
54
+ barConfig: Object as PropType<VxeSplitterPropTypes.BarConfig>,
55
+ resizeConfig: Object as PropType<VxeSplitterPropTypes.ResizeConfig>,
56
+ actionConfig: Object as PropType<VxeSplitterPropTypes.ActionConfig>,
57
+ size: {
58
+ type: String as PropType<VxeSplitterPropTypes.Size>,
59
+ default: () => getConfig().splitter.size || getConfig().size
60
+ }
61
+ },
62
+ emits: ['action-dblclick', 'action-click', 'toggle-expand', 'resize-start', 'resize-drag', 'resize-end'] as VxeSplitterEmits,
63
+ setup(props, context) {
64
+ const { emit, slots } = context
65
+
66
+ const xID = XEUtils.uniqueId()
67
+
68
+ const refElem = ref<HTMLDivElement>()
69
+ const refBarInfoElem = ref<HTMLDivElement>()
70
+ const refResizableSplitterTip = ref<HTMLDivElement>()
71
+
72
+ const { computeSize } = useFns.useSize(props)
73
+
74
+ const reactData = reactive<SplitterReactData>({
75
+ staticItems: [],
76
+ itemList: [],
77
+ barWidth: 0,
78
+ barHeight: 0,
79
+ resizeFlag: 0
80
+ })
81
+
82
+ const internalData: SplitterInternalData = {
83
+ wrapperWidth: 0,
84
+ wrapperHeight: 0
85
+ }
86
+
87
+ const computeItemOpts = computed(() => {
88
+ return Object.assign({}, getConfig().splitter.itemConfig, props.itemConfig)
89
+ })
90
+
91
+ const computeBarOpts = computed(() => {
92
+ return Object.assign({}, getConfig().splitter.barConfig, props.barConfig)
93
+ })
94
+
95
+ const computeResizeOpts = computed(() => {
96
+ return Object.assign({}, getConfig().splitter.resizeConfig, props.resizeConfig)
97
+ })
98
+
99
+ const computeActionOpts = computed(() => {
100
+ return Object.assign({}, getConfig().splitter.actionConfig, props.actionConfig)
101
+ })
102
+
103
+ const computeVisibleItems = computed(() => {
104
+ return reactData.itemList.filter((item) => item.isExpand)
105
+ })
106
+
107
+ const computeAutoItems = computed(() => {
108
+ const { vertical } = props
109
+ const autoItems: VxeSplitterDefines.PaneConfig[] = []
110
+ let heightCount = 0
111
+ let widthCount = 0
112
+ reactData.itemList.forEach(
113
+ vertical
114
+ ? (item) => {
115
+ const { renderHeight, resizeHeight, foldHeight, isExpand, height } = item
116
+ const itemHeight = isExpand ? foldHeight || resizeHeight || renderHeight : 0
117
+ if (!height) {
118
+ autoItems.push(item)
119
+ }
120
+ heightCount += itemHeight
121
+ }
122
+ : (item) => {
123
+ const { renderWidth, resizeWidth, foldWidth, isExpand, width } = item
124
+ const itemWidth = isExpand ? foldWidth || resizeWidth || renderWidth : 0
125
+ if (!width) {
126
+ autoItems.push(item)
127
+ }
128
+ widthCount += itemWidth
129
+ }
130
+ )
131
+ return {
132
+ autoItems,
133
+ heightCount,
134
+ heightRatio: heightCount / 100,
135
+ widthCount,
136
+ widthRatio: widthCount / 100
137
+ }
138
+ })
139
+
140
+ const computeWrapperStyle = computed(() => {
141
+ const { width, height } = props
142
+ const barOpts = computeBarOpts.value
143
+ const { width: barWidth, height: barHeight } = barOpts
144
+ const stys: Record<string, string | number> = {}
145
+ if (height) {
146
+ stys.height = toCssUnit(height)
147
+ }
148
+ if (width) {
149
+ stys.width = toCssUnit(width)
150
+ }
151
+ if (barHeight) {
152
+ stys['--vxe-ui-splitter-handle-bar-vertical-height'] = toCssUnit(barHeight)
153
+ }
154
+ if (barWidth) {
155
+ stys['--vxe-ui-splitter-handle-bar-horizontal-width'] = toCssUnit(barWidth)
156
+ }
157
+ return stys
158
+ })
159
+
160
+ const computeMaps: VxeSplitterPrivateComputed = {
161
+ computeItemOpts,
162
+ computeBarOpts,
163
+ computeActionOpts
164
+ }
165
+
166
+ const refMaps: SplitterPrivateRef = {
167
+ refElem
168
+ }
169
+
170
+ const $xeSplitter = {
171
+ xID,
172
+ props,
173
+ context,
174
+ reactData,
175
+ internalData,
176
+
177
+ getRefMaps: () => refMaps,
178
+ getComputeMaps: () => computeMaps
179
+ } as unknown as VxeSplitterConstructor & VxeSplitterPrivateMethods
180
+
181
+ const dispatchEvent = (type: ValueOf<VxeSplitterEmits>, params: Record<string, any>, evnt: Event | null) => {
182
+ emit(type, createEvent(evnt, { $splitter: $xeSplitter }, params))
183
+ }
184
+
185
+ const callSlot = (slotFunc: any, params: any) => {
186
+ if (slotFunc) {
187
+ if (XEUtils.isString(slotFunc)) {
188
+ slotFunc = slots[slotFunc] || null
189
+ }
190
+ if (XEUtils.isFunction(slotFunc)) {
191
+ return getSlotVNs(slotFunc(params))
192
+ }
193
+ }
194
+ return []
195
+ }
196
+
197
+ const getActionIcon = (prevItem: VxeSplitterDefines.PaneConfig, nextItem: VxeSplitterDefines.PaneConfig, isNext: boolean) => {
198
+ const { vertical } = props
199
+ const topIcon = 'SPLIT_TOP_ACTION'
200
+ const bottomIcon = 'SPLIT_BOTTOM_ACTION'
201
+ const leftIcon = 'SPLIT_LEFT_ACTION'
202
+ const rightIcon = 'SPLIT_RIGHT_ACTION'
203
+ let iconName: 'SPLIT_TOP_ACTION' | 'SPLIT_BOTTOM_ACTION' | 'SPLIT_LEFT_ACTION' | 'SPLIT_RIGHT_ACTION' | '' = ''
204
+ if (vertical) {
205
+ if (isNext) {
206
+ iconName = nextItem.isExpand ? bottomIcon : topIcon
207
+ } else {
208
+ iconName = prevItem.isExpand ? topIcon : bottomIcon
209
+ }
210
+ } else {
211
+ if (isNext) {
212
+ iconName = nextItem.isExpand ? rightIcon : leftIcon
213
+ } else {
214
+ iconName = prevItem.isExpand ? leftIcon : rightIcon
215
+ }
216
+ }
217
+ if (iconName) {
218
+ return getIcon()[iconName]
219
+ }
220
+ return ''
221
+ }
222
+
223
+ const reset = () => {
224
+ const { itemList } = reactData
225
+ itemList.forEach((item) => {
226
+ item.isExpand = true
227
+ item.foldHeight = 0
228
+ item.foldWidth = 0
229
+ item.resizeHeight = 0
230
+ item.resizeWidth = 0
231
+ })
232
+ return nextTick()
233
+ }
234
+
235
+ const handleLoadItem = (list: VxeSplitterPanelProps[], isReset: boolean) => {
236
+ const { staticItems } = reactData
237
+ const actionOpts = computeActionOpts.value
238
+ const { showPrevButton, showNextButton } = actionOpts
239
+ const itemDef = {
240
+ isExpand: true,
241
+ renderWidth: 0,
242
+ resizeWidth: 0,
243
+ foldWidth: 0,
244
+ renderHeight: 0,
245
+ resizeHeight: 0,
246
+ foldHeight: 0
247
+ }
248
+ reactData.itemList = list.map((item) => {
249
+ if (item.showAction) {
250
+ warnLog('vxe.error.removeProp', ['show-action'])
251
+ }
252
+ if (item.slots) {
253
+ XEUtils.each(item.slots, (func) => {
254
+ if (func && !XEUtils.isFunction(func)) {
255
+ if (!slots[func]) {
256
+ errLog('vxe.error.notSlot', [func])
257
+ }
258
+ }
259
+ })
260
+ }
261
+ return Object.assign({}, isReset ? null : itemDef, item, isReset ? itemDef : null, {
262
+ id: XEUtils.uniqueId()
263
+ })
264
+ })
265
+ if (staticItems.length) {
266
+ errLog('vxe.error.errConflicts', ['<vxe-splitter-panel ...>', 'items'])
267
+ }
268
+ if ((showPrevButton || showNextButton) && reactData.itemList.length > 2) {
269
+ errLog('vxe.error.errConflicts', ['action-config.showPrevButton | action-config.showNextButton', 'Only supports 2 item'])
270
+ }
271
+ return recalculate()
272
+ }
273
+
274
+ const loadItem = (list: VxeSplitterPanelProps[]) => {
275
+ return handleLoadItem(list || [], false)
276
+ }
277
+
278
+ const reloadItem = (list: VxeSplitterPanelProps[]) => {
279
+ return handleLoadItem(list || [], true)
280
+ }
281
+
282
+ const handleItemByName = (name: VxeSplitterPanelPropTypes.Name) => {
283
+ const { itemList } = reactData
284
+ let index = -1
285
+ let currItem: VxeSplitterDefines.PaneConfig | null = null
286
+ let prevItem: VxeSplitterDefines.PaneConfig | null = null
287
+ let nextItem: VxeSplitterDefines.PaneConfig | null = null
288
+ for (let i = 0; i < itemList.length; i++) {
289
+ const item = itemList[i]
290
+ if (item.name === name) {
291
+ index = i
292
+ currItem = item
293
+ prevItem = itemList[i - 1] || null
294
+ nextItem = itemList[i + 1] || null
295
+ break
296
+ }
297
+ }
298
+ return {
299
+ index,
300
+ currItem,
301
+ prevItem,
302
+ nextItem
303
+ }
304
+ }
305
+
306
+ const setItemExpand = (name: VxeSplitterPanelPropTypes.Name, expanded: boolean) => {
307
+ const restItem = handleItemByName(name)
308
+ if (restItem) {
309
+ const { currItem, prevItem, nextItem } = restItem
310
+ if (currItem) {
311
+ if (expanded ? !currItem.isExpand : currItem.isExpand) {
312
+ if (nextItem) {
313
+ if (nextItem.isExpand) {
314
+ handleItemActionEvent(null, currItem, nextItem, false)
315
+ }
316
+ } else if (prevItem) {
317
+ if (prevItem.isExpand) {
318
+ handleItemActionEvent(null, prevItem, currItem, true)
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+ return nextTick()
325
+ }
326
+
327
+ const toggleItemExpand = (name: VxeSplitterPanelPropTypes.Name) => {
328
+ const restItem = handleItemByName(name)
329
+ if (restItem) {
330
+ const { currItem } = restItem
331
+ if (currItem) {
332
+ return setItemExpand(name, !currItem.isExpand)
333
+ }
334
+ }
335
+ return nextTick()
336
+ }
337
+
338
+ const getItemExpand = (name: VxeSplitterPanelPropTypes.Name) => {
339
+ const restItem = handleItemByName(name)
340
+ if (restItem) {
341
+ const { currItem } = restItem
342
+ if (currItem) {
343
+ return currItem.isExpand
344
+ }
345
+ }
346
+ return false
347
+ }
348
+
349
+ const recalculate = () => {
350
+ return nextTick().then(() => {
351
+ const { vertical } = props
352
+ const { itemList } = reactData
353
+ const el = refElem.value
354
+ const barInfoElem = refBarInfoElem.value
355
+ if (!el) {
356
+ return
357
+ }
358
+ const wWidth = el.clientWidth
359
+ const wHeight = el.clientHeight
360
+ if (!wWidth || !wHeight) {
361
+ return
362
+ }
363
+ if (barInfoElem) {
364
+ reactData.barWidth = barInfoElem.offsetWidth
365
+ reactData.barHeight = barInfoElem.offsetHeight
366
+ }
367
+ const contentWidth = wWidth - (vertical ? 0 : reactData.barWidth * (itemList.length - 1))
368
+ const contentHeight = wHeight - (vertical ? reactData.barHeight * (itemList.length - 1) : 0)
369
+ const itemOpts = computeItemOpts.value
370
+ const allMinWidth = XEUtils.toNumber(itemOpts.minWidth)
371
+ const allMinHeight = XEUtils.toNumber(itemOpts.minHeight)
372
+ const residueItems: VxeSplitterDefines.PaneConfig[] = []
373
+ if (vertical) {
374
+ let countHeight = 0
375
+ itemList.forEach((item) => {
376
+ const { height } = item
377
+ let itemHeight = 0
378
+ if (height) {
379
+ if (isScale(height)) {
380
+ itemHeight = (contentHeight * XEUtils.toNumber(height)) / 100
381
+ } else {
382
+ itemHeight = XEUtils.toNumber(height)
383
+ }
384
+ item.renderHeight = itemHeight
385
+ } else {
386
+ residueItems.push(item)
387
+ }
388
+ countHeight += itemHeight
389
+ })
390
+ if (residueItems.length) {
391
+ const reMeanHeight = (contentHeight - countHeight) / residueItems.length
392
+ residueItems.forEach((item) => {
393
+ item.renderHeight = Math.max(XEUtils.toNumber(getGlobalDefaultConfig(item.minHeight, allMinHeight)), reMeanHeight)
394
+ })
395
+ }
396
+ } else {
397
+ let countWidth = 0
398
+ itemList.forEach((item) => {
399
+ const { width } = item
400
+ let itemWidth = 0
401
+ if (width) {
402
+ if (isScale(width)) {
403
+ itemWidth = (contentWidth * XEUtils.toNumber(width)) / 100
404
+ } else {
405
+ itemWidth = XEUtils.toNumber(width)
406
+ }
407
+ item.renderWidth = itemWidth
408
+ } else {
409
+ residueItems.push(item)
410
+ }
411
+ countWidth += itemWidth
412
+ })
413
+ if (residueItems.length) {
414
+ const reMeanWidth = (contentWidth - countWidth) / residueItems.length
415
+ residueItems.forEach((item) => {
416
+ item.renderWidth = Math.max(XEUtils.toNumber(getGlobalDefaultConfig(item.minWidth, allMinWidth)), reMeanWidth)
417
+ })
418
+ }
419
+ }
420
+ internalData.wrapperWidth = contentWidth
421
+ internalData.wrapperHeight = contentHeight
422
+ })
423
+ }
424
+
425
+ const dragEvent = (evnt: MouseEvent) => {
426
+ const { resize, vertical } = props
427
+ const { itemList } = reactData
428
+ if (!resize) {
429
+ return
430
+ }
431
+ evnt.preventDefault()
432
+ const barEl = evnt.currentTarget as HTMLDivElement
433
+ const handleEl = barEl.parentElement as HTMLDivElement
434
+ const el = refElem.value
435
+ if (!el) {
436
+ return
437
+ }
438
+ const prevEl = handleEl.previousElementSibling as HTMLDivElement
439
+ const nextEl = handleEl.nextElementSibling as HTMLDivElement
440
+ if (!prevEl || !nextEl) {
441
+ return
442
+ }
443
+ const prevId = prevEl.getAttribute('itemid')
444
+ const nextId = nextEl.getAttribute('itemid')
445
+ const prevItem = itemList.find((item) => item.id === prevId)
446
+ const nextItem = itemList.find((item) => item.id === nextId)
447
+ if (!prevItem || !nextItem) {
448
+ return
449
+ }
450
+ const containerRect = el.getBoundingClientRect()
451
+ const barRect = barEl.getBoundingClientRect()
452
+ const rsSplitterLineEl = refResizableSplitterTip.value
453
+ const rsSplitterTipEl = rsSplitterLineEl ? (rsSplitterLineEl.children[0] as HTMLDivElement) : null
454
+ const itemOpts = computeItemOpts.value
455
+ const resizeOpts = computeResizeOpts.value
456
+ const { immediate } = resizeOpts
457
+ const allMinWidth = XEUtils.toNumber(itemOpts.minWidth)
458
+ const allMinHeight = XEUtils.toNumber(itemOpts.minHeight)
459
+
460
+ const barOffsetX = Math.ceil(barRect.width - (evnt.clientX - barRect.left))
461
+ const barOffsetY = Math.ceil(evnt.clientY - barRect.top)
462
+
463
+ const prevWidth = prevEl.offsetWidth
464
+ const nextWidth = nextEl.offsetWidth
465
+ const prevMinWidth = XEUtils.toNumber(prevItem ? getGlobalDefaultConfig(prevItem.minWidth, allMinWidth) : allMinWidth)
466
+ const nextMinWidth = XEUtils.toNumber(nextItem ? getGlobalDefaultConfig(nextItem.minWidth, allMinWidth) : allMinWidth)
467
+ const minOffsetLeft = prevEl.offsetLeft + prevMinWidth - barOffsetX
468
+ const maxOffsetLeft = nextEl.offsetLeft + nextEl.offsetWidth - nextMinWidth - barOffsetX
469
+ const startOffsetLeft = evnt.clientX - containerRect.left
470
+ let targetOffsetWidth = -1
471
+ let prevResizeWidth = 0
472
+ let nextResizeWidth = 0
473
+ let offsetLeft = startOffsetLeft
474
+
475
+ const prevHeight = prevEl.offsetHeight
476
+ const nextHeight = nextEl.offsetHeight
477
+ const prevMinHeight = XEUtils.toNumber(prevItem ? getGlobalDefaultConfig(prevItem.minHeight, allMinHeight) : allMinHeight)
478
+ const nextMinHeight = XEUtils.toNumber(nextItem ? getGlobalDefaultConfig(nextItem.minHeight, allMinHeight) : allMinHeight)
479
+ const minOffsetTop = prevEl.offsetTop + prevMinHeight + barOffsetY
480
+ const maxOffsetTop = nextEl.offsetTop + nextEl.offsetHeight - nextMinHeight + barOffsetY
481
+ const startOffsetTop = evnt.clientY - containerRect.top
482
+ let targetOffsetHeight = -1
483
+ let prevResizeHeight = 0
484
+ let nextResizeHeight = 0
485
+ let offsetTop = startOffsetTop
486
+
487
+ const handleReStyle = (evnt: MouseEvent) => {
488
+ if (!rsSplitterLineEl) {
489
+ return
490
+ }
491
+ const rsNumPrevEl = rsSplitterTipEl ? (rsSplitterTipEl.children[0] as HTMLDivElement) : null
492
+ const rsNumNextEl = rsSplitterTipEl ? (rsSplitterTipEl.children[1] as HTMLDivElement) : null
493
+ if (vertical) {
494
+ let tipWidth = 0
495
+ if (rsNumPrevEl) {
496
+ if (targetOffsetHeight < 0) {
497
+ rsNumPrevEl.style.display = 'none'
498
+ } else {
499
+ rsNumPrevEl.textContent = `${Math.floor(prevResizeHeight)}px`
500
+ rsNumPrevEl.style.display = 'block'
501
+ tipWidth = rsNumPrevEl.offsetWidth
502
+ }
503
+ }
504
+ if (rsNumNextEl) {
505
+ if (targetOffsetHeight < 0) {
506
+ rsNumNextEl.textContent = `${Math.floor(nextResizeHeight)}px`
507
+ rsNumNextEl.style.display = 'block'
508
+ tipWidth = rsNumNextEl.offsetWidth
509
+ } else {
510
+ rsNumNextEl.style.display = 'none'
511
+ }
512
+ }
513
+ let rsLeft = Math.max(1, evnt.clientX - containerRect.left - tipWidth / 2)
514
+ if (rsLeft > containerRect.width - tipWidth - 1) {
515
+ rsLeft = containerRect.width - tipWidth - 1
516
+ }
517
+ rsSplitterLineEl.style.left = '0'
518
+ rsSplitterLineEl.style.top = `${offsetTop}px`
519
+ if (rsSplitterTipEl) {
520
+ rsSplitterTipEl.style.left = `${rsLeft}px`
521
+ }
522
+ } else {
523
+ let tipHeight = 0
524
+ if (rsNumPrevEl) {
525
+ if (targetOffsetWidth < 0) {
526
+ rsNumPrevEl.style.display = 'none'
527
+ } else {
528
+ rsNumPrevEl.textContent = `${Math.floor(prevResizeWidth)}px`
529
+ rsNumPrevEl.style.display = 'block'
530
+ tipHeight = rsNumPrevEl.offsetHeight
531
+ }
532
+ }
533
+ if (rsNumNextEl) {
534
+ if (targetOffsetWidth < 0) {
535
+ rsNumNextEl.textContent = `${Math.floor(nextResizeWidth)}px`
536
+ rsNumNextEl.style.display = 'block'
537
+ tipHeight = rsNumNextEl.offsetHeight
538
+ } else {
539
+ rsNumNextEl.style.display = 'none'
540
+ }
541
+ }
542
+ let rsTop = Math.max(1, evnt.clientY - containerRect.top - tipHeight / 2)
543
+ if (rsTop > containerRect.height - tipHeight - 1) {
544
+ rsTop = containerRect.height - tipHeight - 1
545
+ }
546
+ rsSplitterLineEl.style.top = '0'
547
+ rsSplitterLineEl.style.left = `${offsetLeft}px`
548
+ if (rsSplitterTipEl) {
549
+ rsSplitterTipEl.style.top = `${rsTop}px`
550
+ }
551
+ }
552
+ }
553
+
554
+ const handleUpdate = () => {
555
+ if (vertical) {
556
+ prevItem.resizeHeight = prevResizeHeight
557
+ nextItem.resizeHeight = nextResizeHeight
558
+ } else {
559
+ prevItem.resizeWidth = prevResizeWidth
560
+ nextItem.resizeWidth = nextResizeWidth
561
+ }
562
+ }
563
+
564
+ const handleDrag = (evnt: MouseEvent) => {
565
+ if (vertical) {
566
+ offsetTop = evnt.clientY - containerRect.top
567
+ if (offsetTop < minOffsetTop) {
568
+ offsetTop = minOffsetTop
569
+ }
570
+ if (offsetTop > maxOffsetTop) {
571
+ offsetTop = maxOffsetTop
572
+ }
573
+ targetOffsetHeight = offsetTop - startOffsetTop
574
+ prevResizeHeight = prevHeight + targetOffsetHeight
575
+ nextResizeHeight = nextHeight - targetOffsetHeight
576
+ } else {
577
+ offsetLeft = evnt.clientX - containerRect.left
578
+ if (offsetLeft < minOffsetLeft) {
579
+ offsetLeft = minOffsetLeft
580
+ }
581
+ if (offsetLeft > maxOffsetLeft) {
582
+ offsetLeft = maxOffsetLeft
583
+ }
584
+ targetOffsetWidth = offsetLeft - startOffsetLeft
585
+ prevResizeWidth = prevWidth + targetOffsetWidth
586
+ nextResizeWidth = nextWidth - targetOffsetWidth
587
+ }
588
+ if (immediate) {
589
+ if (vertical) {
590
+ prevEl.style.height = toCssUnit(prevResizeHeight)
591
+ nextEl.style.height = toCssUnit(nextResizeHeight)
592
+ } else {
593
+ prevEl.style.width = toCssUnit(prevResizeWidth)
594
+ nextEl.style.width = toCssUnit(nextResizeWidth)
595
+ }
596
+ }
597
+ if (rsSplitterLineEl) {
598
+ handleReStyle(evnt)
599
+ }
600
+ dispatchEvent('resize-drag', { prevItem, nextItem, offsetHeight: targetOffsetHeight, offsetWidth: targetOffsetWidth }, evnt)
601
+ }
602
+
603
+ document.onmousemove = (evnt) => {
604
+ evnt.preventDefault()
605
+ handleDrag(evnt)
606
+ reactData.resizeFlag++
607
+ }
608
+ document.onmouseup = (evnt) => {
609
+ document.onmousemove = null
610
+ document.onmouseup = null
611
+ if (rsSplitterLineEl) {
612
+ rsSplitterLineEl.style.display = ''
613
+ }
614
+ handleUpdate()
615
+ removeClass(el, 'is--drag')
616
+ dispatchEvent('resize-end', { prevItem, nextItem, offsetHeight: targetOffsetHeight, offsetWidth: targetOffsetWidth }, evnt)
617
+ recalculate()
618
+ reactData.resizeFlag++
619
+ }
620
+
621
+ if (rsSplitterLineEl) {
622
+ rsSplitterLineEl.style.display = 'block'
623
+ handleReStyle(evnt)
624
+ }
625
+ handleDrag(evnt)
626
+ addClass(el, 'is--drag')
627
+ dispatchEvent('resize-start', { prevItem, nextItem }, evnt)
628
+ }
629
+
630
+ const handleItemActionEvent = (evnt: MouseEvent | null, prevItem: VxeSplitterDefines.PaneConfig, nextItem: VxeSplitterDefines.PaneConfig, isNext: boolean) => {
631
+ const { vertical } = props
632
+ let expanded = false
633
+ let item = prevItem
634
+ if (isNext) {
635
+ item = nextItem
636
+ expanded = !nextItem.isExpand
637
+ nextItem.isExpand = expanded
638
+ } else {
639
+ expanded = !prevItem.isExpand
640
+ prevItem.isExpand = expanded
641
+ }
642
+ if (vertical) {
643
+ if (prevItem.isExpand && nextItem.isExpand) {
644
+ prevItem.foldHeight = 0
645
+ nextItem.foldHeight = 0
646
+ } else if (prevItem.isExpand) {
647
+ nextItem.foldHeight = 0
648
+ prevItem.foldHeight = (prevItem.resizeHeight || prevItem.renderHeight) + (nextItem.resizeHeight || nextItem.renderHeight)
649
+ } else {
650
+ prevItem.foldHeight = 0
651
+ nextItem.foldHeight = (prevItem.resizeHeight || prevItem.renderHeight) + (nextItem.resizeHeight || nextItem.renderHeight)
652
+ }
653
+ } else {
654
+ if (prevItem.isExpand && nextItem.isExpand) {
655
+ prevItem.foldWidth = 0
656
+ nextItem.foldWidth = 0
657
+ } else if (prevItem.isExpand) {
658
+ nextItem.foldWidth = 0
659
+ prevItem.foldWidth = (prevItem.resizeWidth || prevItem.renderWidth) + (nextItem.resizeWidth || nextItem.renderWidth)
660
+ } else {
661
+ prevItem.foldWidth = 0
662
+ nextItem.foldWidth = (prevItem.resizeWidth || prevItem.renderWidth) + (nextItem.resizeWidth || nextItem.renderWidth)
663
+ }
664
+ }
665
+ if (evnt) {
666
+ dispatchEvent('toggle-expand', { prevItem, nextItem, expanded, item }, evnt)
667
+ }
668
+ recalculate()
669
+ reactData.resizeFlag++
670
+ }
671
+
672
+ const handlePrevActionDblclickEvent = (evnt: MouseEvent) => {
673
+ const { itemList } = reactData
674
+ const actionOpts = computeActionOpts.value
675
+ const btnEl = evnt.currentTarget as HTMLDivElement
676
+ const btnWrapperEl = btnEl.parentElement as HTMLDivElement
677
+ const handleEl = btnWrapperEl.parentElement as HTMLDivElement
678
+ const prevEl = handleEl.previousElementSibling as HTMLDivElement
679
+ const prevId = prevEl.getAttribute('itemid')
680
+ const prevItem = itemList.find((item) => item.id === prevId)
681
+ const nextEl = handleEl.nextElementSibling as HTMLDivElement
682
+ const nextId = nextEl.getAttribute('itemid')
683
+ const nextItem = itemList.find((item) => item.id === nextId)
684
+
685
+ if (actionOpts.trigger === 'dblclick') {
686
+ if (prevItem && nextItem && nextItem.isExpand) {
687
+ handleItemActionEvent(evnt, prevItem, nextItem, false)
688
+ }
689
+ }
690
+ dispatchEvent('action-dblclick', { prevItem, nextItem }, evnt)
691
+ }
692
+
693
+ const handlePrevActionClickEvent = (evnt: MouseEvent) => {
694
+ const { itemList } = reactData
695
+ const actionOpts = computeActionOpts.value
696
+ const btnEl = evnt.currentTarget as HTMLDivElement
697
+ const btnWrapperEl = btnEl.parentElement as HTMLDivElement
698
+ const handleEl = btnWrapperEl.parentElement as HTMLDivElement
699
+ const prevEl = handleEl.previousElementSibling as HTMLDivElement
700
+ const prevId = prevEl.getAttribute('itemid')
701
+ const prevItem = itemList.find((item) => item.id === prevId)
702
+ const nextEl = handleEl.nextElementSibling as HTMLDivElement
703
+ const nextId = nextEl.getAttribute('itemid')
704
+ const nextItem = itemList.find((item) => item.id === nextId)
705
+
706
+ if (actionOpts.trigger !== 'dblclick') {
707
+ if (prevItem && nextItem && nextItem.isExpand) {
708
+ handleItemActionEvent(evnt, prevItem, nextItem, false)
709
+ }
710
+ }
711
+ dispatchEvent('action-click', { prevItem, nextItem }, evnt)
712
+ }
713
+
714
+ const handleNextActionDblclickEvent = (evnt: MouseEvent) => {
715
+ const { itemList } = reactData
716
+ const actionOpts = computeActionOpts.value
717
+ const btnEl = evnt.currentTarget as HTMLDivElement
718
+ const btnWrapperEl = btnEl.parentElement as HTMLDivElement
719
+ const handleEl = btnWrapperEl.parentElement as HTMLDivElement
720
+ const prevEl = handleEl.previousElementSibling as HTMLDivElement
721
+ const prevId = prevEl.getAttribute('itemid')
722
+ const prevItem = itemList.find((item) => item.id === prevId)
723
+ const nextEl = handleEl.nextElementSibling as HTMLDivElement
724
+ const nextId = nextEl.getAttribute('itemid')
725
+ const nextItem = itemList.find((item) => item.id === nextId)
726
+
727
+ if (actionOpts.trigger === 'dblclick') {
728
+ if (prevItem && nextItem && prevItem.isExpand) {
729
+ handleItemActionEvent(evnt, prevItem, nextItem, true)
730
+ }
731
+ }
732
+ dispatchEvent('action-dblclick', { prevItem, nextItem }, evnt)
733
+ }
734
+
735
+ const handleNextActionClickEvent = (evnt: MouseEvent) => {
736
+ const { itemList } = reactData
737
+ const actionOpts = computeActionOpts.value
738
+ const btnEl = evnt.currentTarget as HTMLDivElement
739
+ const btnWrapperEl = btnEl.parentElement as HTMLDivElement
740
+ const handleEl = btnWrapperEl.parentElement as HTMLDivElement
741
+ const prevEl = handleEl.previousElementSibling as HTMLDivElement
742
+ const prevId = prevEl.getAttribute('itemid')
743
+ const prevItem = itemList.find((item) => item.id === prevId)
744
+ const nextEl = handleEl.nextElementSibling as HTMLDivElement
745
+ const nextId = nextEl.getAttribute('itemid')
746
+ const nextItem = itemList.find((item) => item.id === nextId)
747
+
748
+ if (actionOpts.trigger !== 'dblclick') {
749
+ if (prevItem && nextItem && prevItem.isExpand) {
750
+ handleItemActionEvent(evnt, prevItem, nextItem, true)
751
+ }
752
+ }
753
+ dispatchEvent('action-click', { prevItem, nextItem }, evnt)
754
+ }
755
+
756
+ const handleGlobalResizeEvent = () => {
757
+ recalculate()
758
+ }
759
+
760
+ const splitterMethods: SplitterMethods = {
761
+ dispatchEvent,
762
+ setItemExpand,
763
+ toggleItemExpand,
764
+ getItemExpand,
765
+ recalculate,
766
+ reset,
767
+ loadItem,
768
+ reloadItem
769
+ }
770
+
771
+ const splitterPrivateMethods: SplitterPrivateMethods = {}
772
+
773
+ Object.assign($xeSplitter, splitterMethods, splitterPrivateMethods)
774
+
775
+ const renderHandleBar = (prevItem: VxeSplitterDefines.PaneConfig, nextItem: VxeSplitterDefines.PaneConfig) => {
776
+ const { border, resize, vertical } = props
777
+ const { itemList } = reactData
778
+ const actionOpts = computeActionOpts.value
779
+ const { direction } = actionOpts
780
+ const showPrevButton = XEUtils.isBoolean(actionOpts.showPrevButton) ? actionOpts.showPrevButton : itemList.some((item) => item.showAction)
781
+ const showNextButton = XEUtils.isBoolean(actionOpts.showNextButton) ? actionOpts.showNextButton : direction === 'next' && itemList.some((item) => item.showAction)
782
+ const resizeOpts = computeResizeOpts.value
783
+ const { immediate } = resizeOpts
784
+ return h(
785
+ 'div',
786
+ {
787
+ class: [
788
+ 'vxe-splitter-panel-handle',
789
+ vertical ? 'is--vertical' : 'is--horizontal',
790
+ immediate ? 'is-resize--immediate' : 'is-resize--lazy',
791
+ {
792
+ 'is--resize': resize,
793
+ 'is--border': border
794
+ }
795
+ ]
796
+ },
797
+ [
798
+ h('div', {
799
+ class: 'vxe-splitter-panel-handle-bar',
800
+ onMousedown: dragEvent
801
+ }),
802
+ itemList.length === 2
803
+ ? h(
804
+ 'div',
805
+ {
806
+ class: 'vxe-splitter-panel-action-btn-wrapper'
807
+ },
808
+ [
809
+ showPrevButton && nextItem.isExpand
810
+ ? h(
811
+ 'div',
812
+ {
813
+ class: ['vxe-splitter-panel-action-btn', prevItem.isExpand ? 'is--prev' : 'is--next'],
814
+ onDblclick: handlePrevActionDblclickEvent,
815
+ onClick: handlePrevActionClickEvent
816
+ },
817
+ [
818
+ h('i', {
819
+ class: getActionIcon(prevItem, nextItem, false)
820
+ })
821
+ ]
822
+ )
823
+ : renderEmptyElement($xeSplitter),
824
+ showNextButton && prevItem.isExpand
825
+ ? h(
826
+ 'div',
827
+ {
828
+ class: ['vxe-splitter-panel-action-btn', nextItem.isExpand ? 'is--next' : 'is--prev'],
829
+ onDblclick: handleNextActionDblclickEvent,
830
+ onClick: handleNextActionClickEvent
831
+ },
832
+ [
833
+ h('i', {
834
+ class: getActionIcon(prevItem, nextItem, true)
835
+ })
836
+ ]
837
+ )
838
+ : renderEmptyElement($xeSplitter)
839
+ ]
840
+ )
841
+ : renderEmptyElement($xeSplitter)
842
+ ]
843
+ )
844
+ }
845
+
846
+ const renderItems = () => {
847
+ const { border, padding, resize, vertical } = props
848
+ const { itemList } = reactData
849
+ const vSize = computeSize.value
850
+ const actionOpts = computeActionOpts.value
851
+ const { autoHideButton } = actionOpts
852
+ const resizeOpts = computeResizeOpts.value
853
+ const { immediate } = resizeOpts
854
+ const visibleItems = computeVisibleItems.value
855
+ const { autoItems } = computeAutoItems.value
856
+ const isOnlyView = visibleItems.length <= 1
857
+ const itemVNs: VNode[] = []
858
+ itemList.forEach((prevItem, index) => {
859
+ const { id, name, slots, renderHeight, resizeHeight, foldHeight, renderWidth, resizeWidth, foldWidth, isExpand } = prevItem
860
+ const nextItem = itemList[index + 1]
861
+ const defaultSlot = slots ? slots.default : null
862
+ const stys: Record<string, string | number> = {}
863
+ let itemWidth = isExpand ? foldWidth || resizeWidth || renderWidth : 0
864
+ let itemHeight = isExpand ? foldHeight || resizeHeight || renderHeight : 0
865
+ // 至少存在一个自适应
866
+ if (autoItems.length === 1) {
867
+ if (vertical) {
868
+ if (!prevItem.height) {
869
+ itemHeight = 0
870
+ }
871
+ } else {
872
+ if (!prevItem.width) {
873
+ itemWidth = 0
874
+ }
875
+ }
876
+ }
877
+ let isFill = true
878
+ if (vertical) {
879
+ if (itemHeight && visibleItems.length > 1) {
880
+ isFill = false
881
+ stys.height = toCssUnit(itemHeight)
882
+ }
883
+ } else {
884
+ if (itemWidth && visibleItems.length > 1) {
885
+ isFill = false
886
+ stys.width = toCssUnit(itemWidth)
887
+ }
888
+ }
889
+
890
+ itemVNs.push(
891
+ h(
892
+ 'div',
893
+ {
894
+ itemid: id,
895
+ class: [
896
+ 'vxe-splitter-panel',
897
+ vertical ? 'is--vertical' : 'is--horizontal',
898
+ immediate ? 'is-resize--immediate' : 'is-resize--lazy',
899
+ {
900
+ [`size--${vSize}`]: vSize,
901
+ 'is--resize': resize,
902
+ 'is--padding': padding,
903
+ 'is--border': border,
904
+ 'is--height': itemHeight,
905
+ 'is--width': itemWidth,
906
+ 'is--visible': isExpand,
907
+ 'is--hidden': !isExpand,
908
+ 'is--fill': isExpand && isFill
909
+ }
910
+ ],
911
+ style: stys
912
+ },
913
+ [
914
+ h(
915
+ 'div',
916
+ {
917
+ itemid: id,
918
+ class: 'vxe-splitter-panel--wrapper'
919
+ },
920
+ [
921
+ h(
922
+ 'div',
923
+ {
924
+ class: 'vxe-splitter-panel--inner'
925
+ },
926
+ defaultSlot ? callSlot(defaultSlot, { name, isExpand }) : []
927
+ )
928
+ ]
929
+ )
930
+ ]
931
+ )
932
+ )
933
+
934
+ if (nextItem) {
935
+ itemVNs.push(renderHandleBar(prevItem, nextItem))
936
+ }
937
+ })
938
+ return h(
939
+ 'div',
940
+ {
941
+ class: [
942
+ 'vxe-splitter-wrapper',
943
+ {
944
+ 'is--ah-btn': autoHideButton,
945
+ 'is--only-view': isOnlyView
946
+ }
947
+ ]
948
+ },
949
+ itemVNs
950
+ )
951
+ }
952
+
953
+ const renderVN = () => {
954
+ const { vertical } = props
955
+ const vSize = computeSize.value
956
+ const resizeOpts = computeResizeOpts.value
957
+ const wrapperStyle = computeWrapperStyle.value
958
+ const { immediate, showTip } = resizeOpts
959
+ const defaultSlot = slots.default
960
+ return h(
961
+ 'div',
962
+ {
963
+ ref: refElem,
964
+ class: [
965
+ 'vxe-splitter',
966
+ vertical ? 'is--vertical' : 'is--horizontal',
967
+ immediate ? 'is-resize--immediate' : 'is-resize--lazy',
968
+ {
969
+ [`size--${vSize}`]: vSize
970
+ }
971
+ ],
972
+ style: wrapperStyle
973
+ },
974
+ [
975
+ h(
976
+ 'div',
977
+ {
978
+ class: 'vxe-splitter-slots'
979
+ },
980
+ defaultSlot ? defaultSlot({}) : []
981
+ ),
982
+ renderItems(),
983
+ h(
984
+ 'div',
985
+ {
986
+ ref: refResizableSplitterTip,
987
+ class: ['vxe-splitter--resizable-splitter-tip', vertical ? 'is--vertical' : 'is--horizontal', immediate ? 'is-resize--immediate' : 'is-resize--lazy']
988
+ },
989
+ showTip
990
+ ? [
991
+ h(
992
+ 'div',
993
+ {
994
+ class: 'vxe-splitter--resizable-splitter-tip-number'
995
+ },
996
+ [
997
+ h('div', {
998
+ class: 'vxe-splitter--resizable-splitter-number-prev'
999
+ }),
1000
+ h('div', {
1001
+ class: 'vxe-splitter--resizable-splitter-number-next'
1002
+ })
1003
+ ]
1004
+ )
1005
+ ]
1006
+ : []
1007
+ ),
1008
+ h(
1009
+ 'div',
1010
+ {
1011
+ class: 'vxe-splitter--render-vars'
1012
+ },
1013
+ [
1014
+ h('div', {
1015
+ ref: refBarInfoElem,
1016
+ class: 'vxe-splitter--handle-bar-info'
1017
+ })
1018
+ ]
1019
+ )
1020
+ ]
1021
+ )
1022
+ }
1023
+
1024
+ const itemFlag = ref(0)
1025
+ watch(
1026
+ () => (props.items ? props.items.length : -1),
1027
+ () => {
1028
+ itemFlag.value++
1029
+ }
1030
+ )
1031
+ watch(
1032
+ () => props.items,
1033
+ () => {
1034
+ itemFlag.value++
1035
+ }
1036
+ )
1037
+ watch(itemFlag, () => {
1038
+ loadItem(props.items || [])
1039
+ })
1040
+
1041
+ watch(
1042
+ () => reactData.staticItems,
1043
+ (val) => {
1044
+ const actionOpts = computeActionOpts.value
1045
+ const { showPrevButton, showNextButton } = actionOpts
1046
+ if (props.items && props.items.length) {
1047
+ errLog('vxe.error.errConflicts', ['<vxe-splitter-panel ...>', 'items'])
1048
+ }
1049
+ reactData.itemList = val || []
1050
+
1051
+ if ((showPrevButton || showNextButton) && reactData.itemList.length > 2) {
1052
+ errLog('vxe.error.modelConflicts', ['action-config.showPrevButton | action-config.showNextButton', '<vxe-splitter-panel ...> Only supports 2 panel'])
1053
+ }
1054
+ reactData.itemList.forEach((item) => {
1055
+ if (item.showAction) {
1056
+ warnLog('vxe.error.removeProp', ['showAction'])
1057
+ }
1058
+ })
1059
+ recalculate()
1060
+ }
1061
+ )
1062
+
1063
+ let resizeObserver: ResizeObserver
1064
+
1065
+ onMounted(() => {
1066
+ nextTick(() => {
1067
+ recalculate()
1068
+ })
1069
+
1070
+ const el = refElem.value
1071
+ if (el) {
1072
+ resizeObserver = globalResize.create(() => {
1073
+ recalculate()
1074
+ })
1075
+ resizeObserver.observe(el)
1076
+ }
1077
+
1078
+ const actionOpts = computeActionOpts.value
1079
+ if (actionOpts.direction) {
1080
+ errLog('vxe.error.delProp', ['action-config.direction', 'action-config.showPrevButton | action-config.showNextButton'])
1081
+ }
1082
+
1083
+ globalEvents.on($xeSplitter, 'resize', handleGlobalResizeEvent)
1084
+ })
1085
+
1086
+ onUnmounted(() => {
1087
+ if (resizeObserver) {
1088
+ resizeObserver.disconnect()
1089
+ }
1090
+ globalEvents.off($xeSplitter, 'resize')
1091
+ })
1092
+
1093
+ onActivated(() => {
1094
+ recalculate()
1095
+ })
1096
+
1097
+ if (props.items) {
1098
+ loadItem(props.items)
1099
+ }
1100
+
1101
+ provide('$xeSplitter', $xeSplitter)
1102
+
1103
+ $xeSplitter.renderVN = renderVN
1104
+
1105
+ return $xeSplitter
1106
+ },
1107
+ render() {
1108
+ return this.renderVN()
1109
+ }
1110
+ })