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,802 +1,920 @@
1
- import { h, Teleport, ref, Ref, inject, reactive, nextTick, provide, watch, PropType, onMounted, onUnmounted, computed, VNode } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { VxeUI } from '../../ui'
5
- import { getLastZIndex, nextZIndex, getFuncText, getDefaultConfig } from '../../ui/src/utils'
6
- import { getPopupContainer, getPopupWrapperElement, toCssUnit } from '../../ui/src/dom'
7
- import { allActiveDrawers } from './store'
8
- import { getSlotVNs } from '../../ui/src/vn'
9
- import VxeButtonComponent from '../../button'
10
- import VxeLoadingComponent from '../../loading'
11
- import VxeScrollbarComponent from '../../scrollbar'
12
-
13
- import type { VxeDrawerPropTypes, DrawerReactData, VxeDrawerEmits, DrawerPrivateRef, DrawerMethods, DrawerPrivateMethods, VxeDrawerPrivateComputed, VxeDrawerConstructor, VxeDrawerMethods, VxeButtonInstance, DrawerEventTypes, ValueOf, VxeModalConstructor, VxeModalMethods, VxeFormConstructor, VxeFormPrivateMethods } from '../../../types'
14
- import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
15
-
16
- const { getIcon, getConfig, getI18n, useFns, globalEvents, GLOBAL_EVENT_KEYS, createEvent, renderEmptyElement } = VxeUI
17
-
18
- export default defineVxeComponent({
19
- name: 'VxeDrawer',
20
- props: {
21
- modelValue: Boolean as PropType<VxeDrawerPropTypes.ModelValue>,
22
- id: String as PropType<VxeDrawerPropTypes.ID>,
23
- title: String as PropType<VxeDrawerPropTypes.Title>,
24
- loading: {
25
- type: Boolean as PropType<VxeDrawerPropTypes.Loading>,
26
- default: null
27
- },
28
- className: String as PropType<VxeDrawerPropTypes.ClassName>,
29
- position: {
30
- type: [String, Object] as PropType<VxeDrawerPropTypes.Position>,
31
- default: () => getConfig().drawer.position
32
- },
33
- lockView: {
34
- type: Boolean as PropType<VxeDrawerPropTypes.LockView>,
35
- default: () => getConfig().drawer.lockView
36
- },
37
- lockScroll: Boolean as PropType<VxeDrawerPropTypes.LockScroll>,
38
- mask: {
39
- type: Boolean as PropType<VxeDrawerPropTypes.Mask>,
40
- default: () => getConfig().drawer.mask
41
- },
42
- maskClosable: {
43
- type: Boolean as PropType<VxeDrawerPropTypes.MaskClosable>,
44
- default: () => getConfig().drawer.maskClosable
45
- },
46
- escClosable: {
47
- type: Boolean as PropType<VxeDrawerPropTypes.EscClosable>,
48
- default: () => getConfig().drawer.escClosable
49
- },
50
- cancelClosable: {
51
- type: Boolean as PropType<VxeDrawerPropTypes.CancelClosable>,
52
- default: () => getConfig().drawer.cancelClosable
53
- },
54
- confirmClosable: {
55
- type: Boolean as PropType<VxeDrawerPropTypes.ConfirmClosable>,
56
- default: () => getConfig().drawer.confirmClosable
57
- },
58
- showHeader: {
59
- type: Boolean as PropType<VxeDrawerPropTypes.ShowHeader>,
60
- default: () => getConfig().drawer.showHeader
61
- },
62
- showFooter: {
63
- type: Boolean as PropType<VxeDrawerPropTypes.ShowFooter>,
64
- default: () => getConfig().drawer.showFooter
65
- },
66
- showClose: {
67
- type: Boolean as PropType<VxeDrawerPropTypes.ShowClose>,
68
- default: () => getConfig().drawer.showClose
69
- },
70
- content: [Number, String] as PropType<VxeDrawerPropTypes.Content>,
71
- useHtml: {
72
- type: Boolean as PropType<VxeDrawerPropTypes.UseHtml>,
73
- default: () => getConfig().drawer.useHtml
74
- },
75
- showCancelButton: {
76
- type: Boolean as PropType<VxeDrawerPropTypes.ShowCancelButton>,
77
- default: null
78
- },
79
- cancelButtonText: {
80
- type: String as PropType<VxeDrawerPropTypes.CancelButtonText>,
81
- default: () => getConfig().drawer.cancelButtonText
82
- },
83
- showConfirmButton: {
84
- type: Boolean as PropType<VxeDrawerPropTypes.ShowConfirmButton>,
85
- default: () => getConfig().drawer.showConfirmButton
86
- },
87
- confirmButtonText: {
88
- type: String as PropType<VxeDrawerPropTypes.ConfirmButtonText>,
89
- default: () => getConfig().drawer.confirmButtonText
90
- },
91
- destroyOnClose: {
92
- type: Boolean as PropType<VxeDrawerPropTypes.DestroyOnClose>,
93
- default: () => getConfig().drawer.destroyOnClose
94
- },
95
- showTitleOverflow: {
96
- type: Boolean as PropType<VxeDrawerPropTypes.ShowTitleOverflow>,
97
- default: () => getConfig().drawer.showTitleOverflow
98
- },
99
- preload: Boolean as PropType<VxeDrawerPropTypes.Preload>,
100
- width: {
101
- type: [Number, String] as PropType<VxeDrawerPropTypes.Width>,
102
- default: () => getConfig().drawer.width
103
- },
104
- height: {
105
- type: [Number, String] as PropType<VxeDrawerPropTypes.Height>,
106
- default: () => getConfig().drawer.height
107
- },
108
- minWidth: {
109
- type: [Number, String] as PropType<VxeDrawerPropTypes.MinWidth>,
110
- default: () => getConfig().drawer.minWidth
111
- },
112
- minHeight: {
113
- type: [Number, String] as PropType<VxeDrawerPropTypes.MinHeight>,
114
- default: () => getConfig().drawer.minHeight
115
- },
116
- resize: {
117
- type: Boolean as PropType<VxeDrawerPropTypes.Resize>,
118
- default: () => getConfig().drawer.resize
119
- },
120
- border: {
121
- type: Boolean as PropType<VxeDrawerPropTypes.Border>,
122
- default: () => getConfig().drawer.border
123
- },
124
- showTitleBackground: {
125
- type: Boolean as PropType<VxeDrawerPropTypes.ShowTitleBackground>,
126
- default: () => getConfig().drawer.showTitleBackground
127
- },
128
- zIndex: Number as PropType<VxeDrawerPropTypes.ZIndex>,
129
- transfer: {
130
- type: Boolean as PropType<VxeDrawerPropTypes.Transfer>,
131
- default: () => getConfig().drawer.transfer
132
- },
133
- appendTo: {
134
- type: [String, Function] as PropType<VxeDrawerPropTypes.AppendTo>,
135
- default: () => getConfig().drawer.appendTo
136
- },
137
- isWithinAppendTo: {
138
- type: Boolean as PropType<VxeDrawerPropTypes.IsWithinAppendTo>,
139
- default: () => getConfig().drawer.isWithinAppendTo
140
- },
141
- padding: {
142
- type: Boolean as PropType<VxeDrawerPropTypes.Padding>,
143
- default: () => getConfig().drawer.padding
144
- },
145
- size: {
146
- type: String as PropType<VxeDrawerPropTypes.Size>,
147
- default: () => getConfig().drawer.size || getConfig().size
148
- },
149
- beforeHideMethod: Function as PropType<VxeDrawerPropTypes.BeforeHideMethod>,
150
- slots: Object as PropType<VxeDrawerPropTypes.Slots>,
151
- useScrollbar: {
152
- type: Boolean as PropType<VxeDrawerPropTypes.UseScrollbar>,
153
- default: () => getDefaultConfig(getConfig().drawer.useScrollbar, getConfig().useScrollbar)
154
- },
155
- scrollbarConfig: Object as PropType<VxeDrawerPropTypes.ScrollbarConfig>
156
- },
157
- emits: [
158
- 'update:modelValue',
159
- 'show',
160
- 'hide',
161
- 'before-hide',
162
- 'close',
163
- 'confirm',
164
- 'cancel',
165
- 'resize'
166
- ] as VxeDrawerEmits,
167
- setup (props, context) {
168
- const { slots, emit } = context
169
-
170
- const xID = XEUtils.uniqueId()
171
-
172
- const $xeModal = inject<(VxeModalConstructor & VxeModalMethods)| null>('$xeModal', null)
173
- const $xeParentDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
174
- const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
175
- const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods)| null>('$xeForm', null)
176
-
177
- const { computeSize } = useFns.useSize(props)
178
- const { computeIsVScrollbar } = useFns.useVScrollbar(props)
179
-
180
- const refElem = ref<HTMLDivElement>()
181
- const refDrawerBox = ref() as Ref<HTMLDivElement>
182
- const refConfirmBtn = ref<VxeButtonInstance>()
183
- const refCancelBtn = ref<VxeButtonInstance>()
184
-
185
- const reactData = reactive<DrawerReactData>({
186
- initialized: false,
187
- visible: false,
188
- contentVisible: false,
189
- drawerZIndex: 0,
190
- resizeFlag: 1
191
- })
192
-
193
- const defaultFuncProps = {
194
- beforeHideMethod: getConfig().drawer.beforeHideMethod
195
- }
196
-
197
- const refMaps: DrawerPrivateRef = {
198
- refElem
199
- }
200
-
201
- const computeBtnTransfer = computed(() => {
202
- const { transfer } = props
203
- if (transfer === null) {
204
- const globalTransfer = getConfig().modal.transfer
205
- if (XEUtils.isBoolean(globalTransfer)) {
206
- return globalTransfer
207
- }
208
- if ($xeTable || $xeModal || $xeParentDrawer || $xeForm) {
209
- return true
210
- }
211
- }
212
- return transfer
213
- })
214
-
215
- const computeDragType = computed(() => {
216
- switch (props.position) {
217
- case 'top':
218
- return 'sb'
219
- case 'bottom':
220
- return 'st'
221
- case 'left':
222
- return 'wr'
223
- }
224
- return 'wl'
225
- })
226
-
227
- const computeScrollbarOpts = computed(() => {
228
- return Object.assign({}, getConfig().modal.scrollbarConfig, props.scrollbarConfig)
229
- })
230
-
231
- const computeScrollbarProps = computed(() => {
232
- const scrollbarOpts = computeScrollbarOpts.value
233
- const { viewClassName, viewInnerClassName } = scrollbarOpts
234
- return {
235
- width: scrollbarOpts.width,
236
- height: scrollbarOpts.height,
237
- autoHide: scrollbarOpts.autoHide,
238
- visible: scrollbarOpts.visible,
239
- xConfig: scrollbarOpts.xConfig,
240
- yConfig: scrollbarOpts.yConfig,
241
- className: scrollbarOpts.className,
242
- viewAttrs: scrollbarOpts.viewAttrs,
243
- viewClassName: 'vxe-drawer--scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''),
244
- viewInnerClassName: 'vxe-drawer--scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
245
- }
246
- })
247
-
248
- const computeMaps: VxeDrawerPrivateComputed = {
249
- }
250
-
251
- const $xeDrawer = {
252
- xID,
253
- props,
254
- context,
255
- reactData,
256
-
257
- getRefMaps: () => refMaps,
258
- getComputeMaps: () => computeMaps
259
- } as unknown as VxeDrawerConstructor & VxeDrawerMethods
260
-
261
- const getBox = () => {
262
- const boxElem = refDrawerBox.value
263
- return boxElem
264
- }
265
-
266
- const recalculate = () => {
267
- const { position, width, height } = props
268
- const boxElem = getBox()
269
- if (boxElem) {
270
- const isTb = position === 'top' || position === 'bottom'
271
- boxElem.style.height = isTb ? toCssUnit(height) : ''
272
- boxElem.style.width = isTb ? '' : toCssUnit(width)
273
- }
274
- return nextTick()
275
- }
276
-
277
- const updateZindex = () => {
278
- const { zIndex } = props
279
- const { drawerZIndex } = reactData
280
- if (zIndex) {
281
- reactData.drawerZIndex = zIndex
282
- } else if (drawerZIndex < getLastZIndex()) {
283
- reactData.drawerZIndex = nextZIndex()
284
- }
285
- }
286
-
287
- const removeActiveQueue = () => {
288
- if (allActiveDrawers.indexOf($xeDrawer) > -1) {
289
- XEUtils.remove(allActiveDrawers, item => item === $xeDrawer)
290
- }
291
- }
292
-
293
- const closeDrawer = (type: DrawerEventTypes) => {
294
- const { visible } = reactData
295
- const beHideMethod = props.beforeHideMethod || defaultFuncProps.beforeHideMethod
296
- const params = { type }
297
- if (visible) {
298
- Promise.resolve(beHideMethod ? beHideMethod(params) : null).then((rest) => {
299
- if (!XEUtils.isError(rest)) {
300
- const el = refElem.value
301
- if (el) {
302
- el.setAttribute('data-effect', 'y')
303
- }
304
- reactData.contentVisible = false
305
- removeActiveQueue()
306
- dispatchEvent('before-hide', params, null)
307
- setTimeout(() => {
308
- reactData.visible = false
309
- emit('update:modelValue', false)
310
- dispatchEvent('hide', params, null)
311
- }, 200)
312
- setTimeout(() => {
313
- const el = refElem.value
314
- if (el) {
315
- el.removeAttribute('data-effect')
316
- }
317
- }, 350)
318
- }
319
- }).catch(e => e)
320
- }
321
- return nextTick()
322
- }
323
-
324
- const closeEvent = (evnt: Event) => {
325
- const type = 'close'
326
- dispatchEvent(type, { type }, evnt)
327
- closeDrawer(type)
328
- }
329
-
330
- const confirmEvent = (evnt: Event) => {
331
- const { confirmClosable } = props
332
- const type = 'confirm'
333
- dispatchEvent(type, { type }, evnt)
334
- if (confirmClosable) {
335
- closeDrawer(type)
336
- }
337
- }
338
-
339
- const cancelEvent = (evnt: Event) => {
340
- const { cancelClosable } = props
341
- const type = 'cancel'
342
- dispatchEvent(type, { type }, evnt)
343
- if (cancelClosable) {
344
- closeDrawer(type)
345
- }
346
- }
347
-
348
- const openDrawer = () => {
349
- const { showFooter } = props
350
- const { initialized, visible } = reactData
351
- if (!initialized) {
352
- reactData.initialized = true
353
- }
354
- if (!visible) {
355
- reactData.visible = true
356
- reactData.contentVisible = false
357
- updateZindex()
358
- allActiveDrawers.push($xeDrawer)
359
- nextTick(() => {
360
- const el = refElem.value
361
- if (el) {
362
- el.setAttribute('data-effect', 'y')
363
- }
364
- })
365
- setTimeout(() => {
366
- recalculate()
367
- reactData.contentVisible = true
368
- nextTick(() => {
369
- if (showFooter) {
370
- const confirmBtn = refConfirmBtn.value
371
- const cancelBtn = refCancelBtn.value
372
- const operBtn = confirmBtn || cancelBtn
373
- if (operBtn) {
374
- operBtn.focus()
375
- }
376
- }
377
- const type = ''
378
- const params = { type }
379
- emit('update:modelValue', true)
380
- dispatchEvent('show', params, null)
381
- })
382
- }, 10)
383
- setTimeout(() => {
384
- const el = refElem.value
385
- if (el) {
386
- el.removeAttribute('data-effect')
387
- }
388
- }, 350)
389
- }
390
- return nextTick()
391
- }
392
-
393
- const dispatchEvent = (type: ValueOf<VxeDrawerEmits>, params: Record<string, any>, evnt: Event | null) => {
394
- emit(type, createEvent(evnt, { $drawer: $xeDrawer }, params))
395
- }
396
-
397
- const drawerMethods: DrawerMethods = {
398
- dispatchEvent,
399
- open: openDrawer,
400
- close () {
401
- return closeDrawer('close')
402
- },
403
- getBox
404
- }
405
-
406
- const selfClickEvent = (evnt: Event) => {
407
- const el = refElem.value
408
- if (props.maskClosable && evnt.target === el) {
409
- const type = 'mask'
410
- closeDrawer(type)
411
- }
412
- }
413
-
414
- const handleGlobalKeydownEvent = (evnt: KeyboardEvent) => {
415
- const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE)
416
- if (isEsc) {
417
- const lastDrawer = XEUtils.max(allActiveDrawers, (item) => item.reactData.drawerZIndex)
418
- // 多个时,只关掉最上层的窗口
419
- if (lastDrawer) {
420
- setTimeout(() => {
421
- if (lastDrawer === $xeDrawer && lastDrawer.props.escClosable) {
422
- const type = 'exit'
423
- dispatchEvent('close', { type }, evnt)
424
- closeDrawer(type)
425
- }
426
- }, 10)
427
- }
428
- }
429
- }
430
-
431
- const boxMousedownEvent = () => {
432
- const { drawerZIndex } = reactData
433
- if (allActiveDrawers.some(comp => comp.reactData.visible && comp.reactData.drawerZIndex > drawerZIndex)) {
434
- updateZindex()
435
- }
436
- }
437
-
438
- const dragEvent = (evnt: MouseEvent) => {
439
- evnt.preventDefault()
440
- const { resize, isWithinAppendTo } = props
441
- const el = refElem.value
442
- const parentWrapperEl = getPopupWrapperElement(isWithinAppendTo ? el : document.body)
443
- if (!parentWrapperEl) {
444
- return
445
- }
446
- const visibleWidth = parentWrapperEl.clientWidth - (resize && isWithinAppendTo ? 8 : 0)
447
- const visibleHeight = parentWrapperEl.clientHeight - (resize && isWithinAppendTo ? 8 : 0)
448
- const marginSize = 0
449
- const targetElem = evnt.target as HTMLSpanElement
450
- const type = targetElem.getAttribute('type')
451
- const minWidth = XEUtils.toNumber(props.minWidth)
452
- const minHeight = XEUtils.toNumber(props.minHeight)
453
- const maxWidth = visibleWidth
454
- const maxHeight = visibleHeight
455
- const boxElem = getBox()
456
- const clientWidth = boxElem.clientWidth
457
- const clientHeight = boxElem.clientHeight
458
- const disX = evnt.clientX
459
- const disY = evnt.clientY
460
- const offsetTop = boxElem.offsetTop
461
- const offsetLeft = boxElem.offsetLeft
462
- const params = { type: 'resize' }
463
- document.onmousemove = evnt => {
464
- evnt.preventDefault()
465
- let dragLeft
466
- let dragTop
467
- let width
468
- let height
469
- switch (type) {
470
- case 'wl':
471
- dragLeft = disX - evnt.clientX
472
- width = dragLeft + clientWidth
473
- if (offsetLeft - dragLeft > marginSize) {
474
- if (width > minWidth) {
475
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
476
- }
477
- }
478
- break
479
- case 'st':
480
- dragTop = disY - evnt.clientY
481
- height = clientHeight + dragTop
482
- if (offsetTop - dragTop > marginSize) {
483
- if (height > minHeight) {
484
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
485
- }
486
- }
487
- break
488
- case 'wr':
489
- dragLeft = evnt.clientX - disX
490
- width = dragLeft + clientWidth
491
- if (offsetLeft + width + marginSize < visibleWidth) {
492
- if (width > minWidth) {
493
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
494
- }
495
- }
496
- break
497
- case 'sb':
498
- dragTop = evnt.clientY - disY
499
- height = dragTop + clientHeight
500
- if (offsetTop + height + marginSize < visibleHeight) {
501
- if (height > minHeight) {
502
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
503
- }
504
- }
505
- break
506
- }
507
- boxElem.className = boxElem.className.replace(/\s?is--drag/, '') + ' is--drag'
508
- dispatchEvent('resize', params, evnt)
509
- reactData.resizeFlag++
510
- }
511
- document.onmouseup = () => {
512
- document.onmousemove = null
513
- document.onmouseup = null
514
- reactData.resizeFlag++
515
- setTimeout(() => {
516
- boxElem.className = boxElem.className.replace(/\s?is--drag/, '')
517
- }, 50)
518
- }
519
- }
520
-
521
- const formDesignPrivateMethods: DrawerPrivateMethods = {}
522
-
523
- Object.assign($xeDrawer, drawerMethods, formDesignPrivateMethods)
524
-
525
- const renderTitles = () => {
526
- const { slots: propSlots = {}, showClose, title } = props
527
- const titleSlot = slots.title || propSlots.title
528
- const cornerSlot = slots.corner || propSlots.corner
529
- return [
530
- h('div', {
531
- class: 'vxe-drawer--header-title'
532
- }, titleSlot ? getSlotVNs(titleSlot({ $drawer: $xeDrawer })) : (title ? getFuncText(title) : getI18n('vxe.alert.title'))),
533
- h('div', {
534
- class: 'vxe-drawer--header-right'
535
- }, [
536
- cornerSlot
537
- ? h('div', {
538
- class: 'vxe-drawer--corner-wrapper'
539
- }, getSlotVNs(cornerSlot({ $drawer: $xeDrawer })))
540
- : renderEmptyElement($xeDrawer),
541
- showClose
542
- ? h('div', {
543
- class: ['vxe-drawer--close-btn', 'trigger--btn'],
544
- title: getI18n('vxe.drawer.close'),
545
- onClick: closeEvent
546
- }, [
547
- h('i', {
548
- class: getIcon().DRAWER_CLOSE
549
- })
550
- ])
551
- : renderEmptyElement($xeDrawer)
552
- ])
553
- ]
554
- }
555
-
556
- const renderHeader = () => {
557
- const { slots: propSlots = {}, showTitleOverflow } = props
558
- const headerSlot = slots.header || propSlots.header
559
- if (props.showHeader) {
560
- return h('div', {
561
- class: ['vxe-drawer--header', {
562
- 'is--ellipsis': showTitleOverflow
563
- }]
564
- }, headerSlot ? getSlotVNs(headerSlot({ $drawer: $xeDrawer })) : renderTitles())
565
- }
566
- return renderEmptyElement($xeDrawer)
567
- }
568
-
569
- const renderBody = () => {
570
- const { slots: propSlots = {}, content, useHtml } = props
571
- const isVScrollbar = computeIsVScrollbar.value
572
- const scrollbarProps = computeScrollbarProps.value
573
- const defaultSlot = slots.default || propSlots.default
574
- const leftSlot = slots.left || propSlots.left
575
- const rightSlot = slots.right || propSlots.right
576
- const contVNs: VNode[] = []
577
- if (useHtml && !defaultSlot) {
578
- contVNs.push(
579
- isVScrollbar
580
- ? h(VxeScrollbarComponent, {
581
- key: 'shc',
582
- class: 'vxe-drawer--scrollbar-content',
583
- ...scrollbarProps
584
- }, {
585
- default () {
586
- return [
587
- h('div', {
588
- class: 'vxe-drawer--scrollbar-content-html',
589
- innerHTML: getFuncText(content)
590
- })
591
- ]
592
- }
593
- })
594
- : h('div', {
595
- key: 'hc',
596
- class: 'vxe-drawer--content',
597
- innerHTML: getFuncText(content)
598
- })
599
- )
600
- } else {
601
- contVNs.push(
602
- isVScrollbar
603
- ? h(VxeScrollbarComponent, {
604
- key: 'sdc',
605
- class: 'vxe-drawer--scrollbar-content',
606
- ...scrollbarProps
607
- }, {
608
- default: () => defaultSlot ? getSlotVNs(defaultSlot({ $drawer: $xeDrawer })) : getFuncText(content)
609
- })
610
- : h('div', {
611
- key: 'dc',
612
- class: 'vxe-drawer--content'
613
- }, defaultSlot ? getSlotVNs(defaultSlot({ $drawer: $xeDrawer })) : getFuncText(content))
614
- )
615
- }
616
- return h('div', {
617
- class: 'vxe-drawer--body'
618
- }, [
619
- leftSlot
620
- ? h('div', {
621
- class: 'vxe-drawer--body-left'
622
- }, getSlotVNs(leftSlot({ $drawer: $xeDrawer })))
623
- : renderEmptyElement($xeDrawer),
624
- h('div', {
625
- class: 'vxe-drawer--body-default'
626
- }, contVNs),
627
- rightSlot
628
- ? h('div', {
629
- class: 'vxe-drawer--body-right'
630
- }, getSlotVNs(rightSlot({ $drawer: $xeDrawer })))
631
- : renderEmptyElement($xeDrawer),
632
- h(VxeLoadingComponent, {
633
- class: 'vxe-drawer--loading',
634
- modelValue: props.loading
635
- })
636
- ])
637
- }
638
-
639
- const renderDefaultFooter = () => {
640
- const { slots: propSlots = {}, showCancelButton, showConfirmButton, loading } = props
641
- const lfSlot = slots.leftfoot || propSlots.leftfoot
642
- const rfSlot = slots.rightfoot || propSlots.rightfoot
643
- const btnVNs = []
644
- if (showCancelButton) {
645
- btnVNs.push(
646
- h(VxeButtonComponent, {
647
- key: 1,
648
- ref: refCancelBtn,
649
- content: props.cancelButtonText || getI18n('vxe.button.cancel'),
650
- onClick: cancelEvent
651
- })
652
- )
653
- }
654
- if (showConfirmButton) {
655
- btnVNs.push(
656
- h(VxeButtonComponent, {
657
- key: 2,
658
- ref: refConfirmBtn,
659
- loading: loading,
660
- status: 'primary',
661
- content: props.confirmButtonText || getI18n('vxe.button.confirm'),
662
- onClick: confirmEvent
663
- })
664
- )
665
- }
666
- return h('div', {
667
- class: 'vxe-drawer--footer-wrapper'
668
- }, [
669
- h('div', {
670
- class: 'vxe-drawer--footer-left'
671
- }, lfSlot ? getSlotVNs(lfSlot({ $drawer: $xeDrawer })) : []),
672
- h('div', {
673
- class: 'vxe-drawer--footer-right'
674
- }, rfSlot ? getSlotVNs(rfSlot({ $drawer: $xeDrawer })) : btnVNs)
675
- ])
676
- }
677
-
678
- const renderFooter = () => {
679
- const { slots: propSlots = {} } = props
680
- const footerSlot = slots.footer || propSlots.footer
681
- if (props.showFooter) {
682
- return h('div', {
683
- class: 'vxe-drawer--footer'
684
- }, footerSlot ? getSlotVNs(footerSlot({ $drawer: $xeDrawer })) : [renderDefaultFooter()])
685
- }
686
- return renderEmptyElement($xeDrawer)
687
- }
688
-
689
- const renderVN = () => {
690
- const { border, showTitleBackground, slots: propSlots = {}, className, position, loading, lockScroll, padding, lockView, mask, resize, appendTo, destroyOnClose, isWithinAppendTo } = props
691
- const { initialized, contentVisible, visible } = reactData
692
- const asideSlot = slots.aside || propSlots.aside
693
- const vSize = computeSize.value
694
- const dragType = computeDragType.value
695
- const btnTransfer = computeBtnTransfer.value
696
- return h(Teleport, {
697
- to: getPopupContainer(appendTo),
698
- disabled: btnTransfer ? !initialized : true
699
- }, [
700
- h('div', {
701
- ref: refElem,
702
- class: ['vxe-drawer--wrapper', `pos--${position}`, isWithinAppendTo ? 'ctx--within' : 'ctx--free', className || '', {
703
- [`size--${vSize}`]: vSize,
704
- 'is--padding': padding,
705
- 'is--border': border,
706
- 'is--title-bg': showTitleBackground,
707
- 'lock--scroll': lockScroll,
708
- 'lock--view': lockView,
709
- 'is--resize': resize,
710
- 'is--mask': mask,
711
- 'is--visible': contentVisible,
712
- 'is--active': visible,
713
- 'is--loading': loading
714
- }],
715
- style: {
716
- zIndex: reactData.drawerZIndex
717
- },
718
- onClick: selfClickEvent
719
- }, [
720
- h('div', {
721
- ref: refDrawerBox,
722
- class: 'vxe-drawer--box',
723
- onMousedown: boxMousedownEvent
724
- }, [
725
- asideSlot
726
- ? h('div', {
727
- class: 'vxe-drawer--aside'
728
- }, getSlotVNs(asideSlot({ $drawer: $xeDrawer })))
729
- : renderEmptyElement($xeDrawer),
730
- h('div', {
731
- class: 'vxe-drawer--container'
732
- }, !reactData.initialized || (destroyOnClose && !reactData.visible)
733
- ? []
734
- : [
735
- renderHeader(),
736
- renderBody(),
737
- renderFooter(),
738
- resize
739
- ? h('span', {
740
- class: 'vxe-drawer--resize'
741
- }, [
742
- h('span', {
743
- class: `${dragType}-resize`,
744
- type: dragType,
745
- onMousedown: dragEvent
746
- })
747
- ])
748
- : renderEmptyElement($xeDrawer)
749
- ])
750
- ])
751
- ])
752
- ])
753
- }
754
-
755
- const reFlag = ref(0)
756
- watch(() => props.width, () => {
757
- reFlag.value++
758
- })
759
- watch(() => props.height, () => {
760
- reFlag.value++
761
- })
762
- watch(() => props.position, () => {
763
- reFlag.value++
764
- })
765
- watch(reFlag, recalculate)
766
-
767
- watch(() => props.modelValue, (value) => {
768
- if (value) {
769
- openDrawer()
770
- } else {
771
- closeDrawer('model')
772
- }
773
- })
774
-
775
- onMounted(() => {
776
- reactData.initialized = !!props.preload
777
- nextTick(() => {
778
- if (props.modelValue) {
779
- openDrawer()
780
- }
781
- recalculate()
782
- })
783
- if (props.escClosable) {
784
- globalEvents.on($xeDrawer, 'keydown', handleGlobalKeydownEvent)
785
- }
786
- })
787
-
788
- onUnmounted(() => {
789
- globalEvents.off($xeDrawer, 'keydown')
790
- removeActiveQueue()
791
- })
792
-
793
- provide('$xeDrawer', $xeDrawer)
794
-
795
- $xeDrawer.renderVN = renderVN
796
-
797
- return $xeDrawer
798
- },
799
- render () {
800
- return this.renderVN()
801
- }
802
- })
1
+ import { h, Teleport, ref, Ref, inject, reactive, nextTick, provide, watch, PropType, onMounted, onUnmounted, computed, VNode } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { VxeUI } from '@vxe-ui/core'
5
+ import { getLastZIndex, nextZIndex, getFuncText, getDefaultConfig } from '../../ui/src/utils'
6
+ import { getPopupContainer, getPopupWrapperElement, toCssUnit } from '../../ui/src/dom'
7
+ import { allActiveDrawers } from './store'
8
+ import { getSlotVNs } from '../../ui/src/vn'
9
+ import VxeButtonComponent from '../../button'
10
+ import VxeLoadingComponent from '../../loading'
11
+ import VxeScrollbarComponent from '../../scrollbar'
12
+
13
+ import type {
14
+ VxeDrawerPropTypes,
15
+ DrawerReactData,
16
+ VxeDrawerEmits,
17
+ DrawerPrivateRef,
18
+ DrawerMethods,
19
+ DrawerPrivateMethods,
20
+ VxeDrawerPrivateComputed,
21
+ VxeDrawerConstructor,
22
+ VxeDrawerMethods,
23
+ VxeButtonInstance,
24
+ DrawerEventTypes,
25
+ ValueOf,
26
+ VxeModalConstructor,
27
+ VxeModalMethods,
28
+ VxeFormConstructor,
29
+ VxeFormPrivateMethods
30
+ } from '../../../types'
31
+ import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
32
+
33
+ const { getIcon, getConfig, getI18n, useFns, globalEvents, GLOBAL_EVENT_KEYS, createEvent, renderEmptyElement } = VxeUI
34
+
35
+ export default defineVxeComponent({
36
+ name: 'VxeDrawer',
37
+ props: {
38
+ modelValue: Boolean as PropType<VxeDrawerPropTypes.ModelValue>,
39
+ id: String as PropType<VxeDrawerPropTypes.ID>,
40
+ title: String as PropType<VxeDrawerPropTypes.Title>,
41
+ loading: {
42
+ type: Boolean as PropType<VxeDrawerPropTypes.Loading>,
43
+ default: null
44
+ },
45
+ className: String as PropType<VxeDrawerPropTypes.ClassName>,
46
+ position: {
47
+ type: [String, Object] as PropType<VxeDrawerPropTypes.Position>,
48
+ default: () => getConfig().drawer.position
49
+ },
50
+ lockView: {
51
+ type: Boolean as PropType<VxeDrawerPropTypes.LockView>,
52
+ default: () => getConfig().drawer.lockView
53
+ },
54
+ lockScroll: Boolean as PropType<VxeDrawerPropTypes.LockScroll>,
55
+ mask: {
56
+ type: Boolean as PropType<VxeDrawerPropTypes.Mask>,
57
+ default: () => getConfig().drawer.mask
58
+ },
59
+ maskClosable: {
60
+ type: Boolean as PropType<VxeDrawerPropTypes.MaskClosable>,
61
+ default: () => getConfig().drawer.maskClosable
62
+ },
63
+ escClosable: {
64
+ type: Boolean as PropType<VxeDrawerPropTypes.EscClosable>,
65
+ default: () => getConfig().drawer.escClosable
66
+ },
67
+ cancelClosable: {
68
+ type: Boolean as PropType<VxeDrawerPropTypes.CancelClosable>,
69
+ default: () => getConfig().drawer.cancelClosable
70
+ },
71
+ confirmClosable: {
72
+ type: Boolean as PropType<VxeDrawerPropTypes.ConfirmClosable>,
73
+ default: () => getConfig().drawer.confirmClosable
74
+ },
75
+ showHeader: {
76
+ type: Boolean as PropType<VxeDrawerPropTypes.ShowHeader>,
77
+ default: () => getConfig().drawer.showHeader
78
+ },
79
+ showFooter: {
80
+ type: Boolean as PropType<VxeDrawerPropTypes.ShowFooter>,
81
+ default: () => getConfig().drawer.showFooter
82
+ },
83
+ showClose: {
84
+ type: Boolean as PropType<VxeDrawerPropTypes.ShowClose>,
85
+ default: () => getConfig().drawer.showClose
86
+ },
87
+ content: [Number, String] as PropType<VxeDrawerPropTypes.Content>,
88
+ useHtml: {
89
+ type: Boolean as PropType<VxeDrawerPropTypes.UseHtml>,
90
+ default: () => getConfig().drawer.useHtml
91
+ },
92
+ showCancelButton: {
93
+ type: Boolean as PropType<VxeDrawerPropTypes.ShowCancelButton>,
94
+ default: null
95
+ },
96
+ cancelButtonText: {
97
+ type: String as PropType<VxeDrawerPropTypes.CancelButtonText>,
98
+ default: () => getConfig().drawer.cancelButtonText
99
+ },
100
+ showConfirmButton: {
101
+ type: Boolean as PropType<VxeDrawerPropTypes.ShowConfirmButton>,
102
+ default: () => getConfig().drawer.showConfirmButton
103
+ },
104
+ confirmButtonText: {
105
+ type: String as PropType<VxeDrawerPropTypes.ConfirmButtonText>,
106
+ default: () => getConfig().drawer.confirmButtonText
107
+ },
108
+ destroyOnClose: {
109
+ type: Boolean as PropType<VxeDrawerPropTypes.DestroyOnClose>,
110
+ default: () => getConfig().drawer.destroyOnClose
111
+ },
112
+ showTitleOverflow: {
113
+ type: Boolean as PropType<VxeDrawerPropTypes.ShowTitleOverflow>,
114
+ default: () => getConfig().drawer.showTitleOverflow
115
+ },
116
+ preload: Boolean as PropType<VxeDrawerPropTypes.Preload>,
117
+ width: {
118
+ type: [Number, String] as PropType<VxeDrawerPropTypes.Width>,
119
+ default: () => getConfig().drawer.width
120
+ },
121
+ height: {
122
+ type: [Number, String] as PropType<VxeDrawerPropTypes.Height>,
123
+ default: () => getConfig().drawer.height
124
+ },
125
+ minWidth: {
126
+ type: [Number, String] as PropType<VxeDrawerPropTypes.MinWidth>,
127
+ default: () => getConfig().drawer.minWidth
128
+ },
129
+ minHeight: {
130
+ type: [Number, String] as PropType<VxeDrawerPropTypes.MinHeight>,
131
+ default: () => getConfig().drawer.minHeight
132
+ },
133
+ resize: {
134
+ type: Boolean as PropType<VxeDrawerPropTypes.Resize>,
135
+ default: () => getConfig().drawer.resize
136
+ },
137
+ border: {
138
+ type: Boolean as PropType<VxeDrawerPropTypes.Border>,
139
+ default: () => getConfig().drawer.border
140
+ },
141
+ showTitleBackground: {
142
+ type: Boolean as PropType<VxeDrawerPropTypes.ShowTitleBackground>,
143
+ default: () => getConfig().drawer.showTitleBackground
144
+ },
145
+ zIndex: Number as PropType<VxeDrawerPropTypes.ZIndex>,
146
+ transfer: {
147
+ type: Boolean as PropType<VxeDrawerPropTypes.Transfer>,
148
+ default: () => getConfig().drawer.transfer
149
+ },
150
+ appendTo: {
151
+ type: [String, Function] as PropType<VxeDrawerPropTypes.AppendTo>,
152
+ default: () => getConfig().drawer.appendTo
153
+ },
154
+ isWithinAppendTo: {
155
+ type: Boolean as PropType<VxeDrawerPropTypes.IsWithinAppendTo>,
156
+ default: () => getConfig().drawer.isWithinAppendTo
157
+ },
158
+ padding: {
159
+ type: Boolean as PropType<VxeDrawerPropTypes.Padding>,
160
+ default: () => getConfig().drawer.padding
161
+ },
162
+ size: {
163
+ type: String as PropType<VxeDrawerPropTypes.Size>,
164
+ default: () => getConfig().drawer.size || getConfig().size
165
+ },
166
+ beforeHideMethod: Function as PropType<VxeDrawerPropTypes.BeforeHideMethod>,
167
+ slots: Object as PropType<VxeDrawerPropTypes.Slots>,
168
+ useScrollbar: {
169
+ type: Boolean as PropType<VxeDrawerPropTypes.UseScrollbar>,
170
+ default: () => getDefaultConfig(getConfig().drawer.useScrollbar, getConfig().useScrollbar)
171
+ },
172
+ scrollbarConfig: Object as PropType<VxeDrawerPropTypes.ScrollbarConfig>
173
+ },
174
+ emits: ['update:modelValue', 'show', 'hide', 'before-hide', 'close', 'confirm', 'cancel', 'resize'] as VxeDrawerEmits,
175
+ setup(props, context) {
176
+ const { slots, emit } = context
177
+
178
+ const xID = XEUtils.uniqueId()
179
+
180
+ const $xeModal = inject<(VxeModalConstructor & VxeModalMethods) | null>('$xeModal', null)
181
+ const $xeParentDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
182
+ const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
183
+ const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods) | null>('$xeForm', null)
184
+
185
+ const { computeSize } = useFns.useSize(props)
186
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props)
187
+
188
+ const refElem = ref<HTMLDivElement>()
189
+ const refDrawerBox = ref() as Ref<HTMLDivElement>
190
+ const refConfirmBtn = ref<VxeButtonInstance>()
191
+ const refCancelBtn = ref<VxeButtonInstance>()
192
+
193
+ const reactData = reactive<DrawerReactData>({
194
+ initialized: false,
195
+ visible: false,
196
+ contentVisible: false,
197
+ drawerZIndex: 0,
198
+ resizeFlag: 1
199
+ })
200
+
201
+ const defaultFuncProps = {
202
+ beforeHideMethod: getConfig().drawer.beforeHideMethod
203
+ }
204
+
205
+ const refMaps: DrawerPrivateRef = {
206
+ refElem
207
+ }
208
+
209
+ const computeBtnTransfer = computed(() => {
210
+ const { transfer } = props
211
+ if (transfer === null) {
212
+ const globalTransfer = getConfig().modal.transfer
213
+ if (XEUtils.isBoolean(globalTransfer)) {
214
+ return globalTransfer
215
+ }
216
+ if ($xeTable || $xeModal || $xeParentDrawer || $xeForm) {
217
+ return true
218
+ }
219
+ }
220
+ return transfer
221
+ })
222
+
223
+ const computeDragType = computed(() => {
224
+ switch (props.position) {
225
+ case 'top':
226
+ return 'sb'
227
+ case 'bottom':
228
+ return 'st'
229
+ case 'left':
230
+ return 'wr'
231
+ }
232
+ return 'wl'
233
+ })
234
+
235
+ const computeScrollbarOpts = computed(() => {
236
+ return Object.assign({}, getConfig().modal.scrollbarConfig, props.scrollbarConfig)
237
+ })
238
+
239
+ const computeScrollbarProps = computed(() => {
240
+ const scrollbarOpts = computeScrollbarOpts.value
241
+ const { viewClassName, viewInnerClassName } = scrollbarOpts
242
+ return {
243
+ width: scrollbarOpts.width,
244
+ height: scrollbarOpts.height,
245
+ autoHide: scrollbarOpts.autoHide,
246
+ visible: scrollbarOpts.visible,
247
+ xConfig: scrollbarOpts.xConfig,
248
+ yConfig: scrollbarOpts.yConfig,
249
+ className: scrollbarOpts.className,
250
+ viewAttrs: scrollbarOpts.viewAttrs,
251
+ viewClassName: 'vxe-drawer--scrollbar-content-view' + (viewClassName ? ' ' + viewClassName : ''),
252
+ viewInnerClassName: 'vxe-drawer--scrollbar-content-inner' + (viewClassName ? ' ' + viewInnerClassName : '')
253
+ }
254
+ })
255
+
256
+ const computeMaps: VxeDrawerPrivateComputed = {}
257
+
258
+ const $xeDrawer = {
259
+ xID,
260
+ props,
261
+ context,
262
+ reactData,
263
+
264
+ getRefMaps: () => refMaps,
265
+ getComputeMaps: () => computeMaps
266
+ } as unknown as VxeDrawerConstructor & VxeDrawerMethods
267
+
268
+ const getBox = () => {
269
+ const boxElem = refDrawerBox.value
270
+ return boxElem
271
+ }
272
+
273
+ const recalculate = () => {
274
+ const { position, width, height } = props
275
+ const boxElem = getBox()
276
+ if (boxElem) {
277
+ const isTb = position === 'top' || position === 'bottom'
278
+ boxElem.style.height = isTb ? toCssUnit(height) : ''
279
+ boxElem.style.width = isTb ? '' : toCssUnit(width)
280
+ }
281
+ return nextTick()
282
+ }
283
+
284
+ const updateZindex = () => {
285
+ const { zIndex } = props
286
+ const { drawerZIndex } = reactData
287
+ if (zIndex) {
288
+ reactData.drawerZIndex = zIndex
289
+ } else if (drawerZIndex < getLastZIndex()) {
290
+ reactData.drawerZIndex = nextZIndex()
291
+ }
292
+ }
293
+
294
+ const removeActiveQueue = () => {
295
+ if (allActiveDrawers.indexOf($xeDrawer) > -1) {
296
+ XEUtils.remove(allActiveDrawers, (item) => item === $xeDrawer)
297
+ }
298
+ }
299
+
300
+ const closeDrawer = (type: DrawerEventTypes) => {
301
+ const { visible } = reactData
302
+ const beHideMethod = props.beforeHideMethod || defaultFuncProps.beforeHideMethod
303
+ const params = { type }
304
+ if (visible) {
305
+ Promise.resolve(beHideMethod ? beHideMethod(params) : null)
306
+ .then((rest) => {
307
+ if (!XEUtils.isError(rest)) {
308
+ const el = refElem.value
309
+ if (el) {
310
+ el.setAttribute('data-effect', 'y')
311
+ }
312
+ reactData.contentVisible = false
313
+ removeActiveQueue()
314
+ dispatchEvent('before-hide', params, null)
315
+ setTimeout(() => {
316
+ reactData.visible = false
317
+ emit('update:modelValue', false)
318
+ dispatchEvent('hide', params, null)
319
+ }, 200)
320
+ setTimeout(() => {
321
+ const el = refElem.value
322
+ if (el) {
323
+ el.removeAttribute('data-effect')
324
+ }
325
+ }, 350)
326
+ }
327
+ })
328
+ .catch((e) => e)
329
+ }
330
+ return nextTick()
331
+ }
332
+
333
+ const closeEvent = (evnt: Event) => {
334
+ const type = 'close'
335
+ dispatchEvent(type, { type }, evnt)
336
+ closeDrawer(type)
337
+ }
338
+
339
+ const confirmEvent = (evnt: Event) => {
340
+ const { confirmClosable } = props
341
+ const type = 'confirm'
342
+ dispatchEvent(type, { type }, evnt)
343
+ if (confirmClosable) {
344
+ closeDrawer(type)
345
+ }
346
+ }
347
+
348
+ const cancelEvent = (evnt: Event) => {
349
+ const { cancelClosable } = props
350
+ const type = 'cancel'
351
+ dispatchEvent(type, { type }, evnt)
352
+ if (cancelClosable) {
353
+ closeDrawer(type)
354
+ }
355
+ }
356
+
357
+ const openDrawer = () => {
358
+ const { showFooter } = props
359
+ const { initialized, visible } = reactData
360
+ if (!initialized) {
361
+ reactData.initialized = true
362
+ }
363
+ if (!visible) {
364
+ reactData.visible = true
365
+ reactData.contentVisible = false
366
+ updateZindex()
367
+ allActiveDrawers.push($xeDrawer)
368
+ nextTick(() => {
369
+ const el = refElem.value
370
+ if (el) {
371
+ el.setAttribute('data-effect', 'y')
372
+ }
373
+ })
374
+ setTimeout(() => {
375
+ recalculate()
376
+ reactData.contentVisible = true
377
+ nextTick(() => {
378
+ if (showFooter) {
379
+ const confirmBtn = refConfirmBtn.value
380
+ const cancelBtn = refCancelBtn.value
381
+ const operBtn = confirmBtn || cancelBtn
382
+ if (operBtn) {
383
+ operBtn.focus()
384
+ }
385
+ }
386
+ const type = ''
387
+ const params = { type }
388
+ emit('update:modelValue', true)
389
+ dispatchEvent('show', params, null)
390
+ })
391
+ }, 10)
392
+ setTimeout(() => {
393
+ const el = refElem.value
394
+ if (el) {
395
+ el.removeAttribute('data-effect')
396
+ }
397
+ }, 350)
398
+ }
399
+ return nextTick()
400
+ }
401
+
402
+ const dispatchEvent = (type: ValueOf<VxeDrawerEmits>, params: Record<string, any>, evnt: Event | null) => {
403
+ emit(type, createEvent(evnt, { $drawer: $xeDrawer }, params))
404
+ }
405
+
406
+ const drawerMethods: DrawerMethods = {
407
+ dispatchEvent,
408
+ open: openDrawer,
409
+ close() {
410
+ return closeDrawer('close')
411
+ },
412
+ getBox
413
+ }
414
+
415
+ const selfClickEvent = (evnt: Event) => {
416
+ const el = refElem.value
417
+ if (props.maskClosable && evnt.target === el) {
418
+ const type = 'mask'
419
+ closeDrawer(type)
420
+ }
421
+ }
422
+
423
+ const handleGlobalKeydownEvent = (evnt: KeyboardEvent) => {
424
+ const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE)
425
+ if (isEsc) {
426
+ const lastDrawer = XEUtils.max(allActiveDrawers, (item) => item.reactData.drawerZIndex)
427
+ // 多个时,只关掉最上层的窗口
428
+ if (lastDrawer) {
429
+ setTimeout(() => {
430
+ if (lastDrawer === $xeDrawer && lastDrawer.props.escClosable) {
431
+ const type = 'exit'
432
+ dispatchEvent('close', { type }, evnt)
433
+ closeDrawer(type)
434
+ }
435
+ }, 10)
436
+ }
437
+ }
438
+ }
439
+
440
+ const boxMousedownEvent = () => {
441
+ const { drawerZIndex } = reactData
442
+ if (allActiveDrawers.some((comp) => comp.reactData.visible && comp.reactData.drawerZIndex > drawerZIndex)) {
443
+ updateZindex()
444
+ }
445
+ }
446
+
447
+ const dragEvent = (evnt: MouseEvent) => {
448
+ evnt.preventDefault()
449
+ const { resize, isWithinAppendTo } = props
450
+ const el = refElem.value
451
+ const parentWrapperEl = getPopupWrapperElement(isWithinAppendTo ? el : document.body)
452
+ if (!parentWrapperEl) {
453
+ return
454
+ }
455
+ const visibleWidth = parentWrapperEl.clientWidth - (resize && isWithinAppendTo ? 8 : 0)
456
+ const visibleHeight = parentWrapperEl.clientHeight - (resize && isWithinAppendTo ? 8 : 0)
457
+ const marginSize = 0
458
+ const targetElem = evnt.target as HTMLSpanElement
459
+ const type = targetElem.getAttribute('type')
460
+ const minWidth = XEUtils.toNumber(props.minWidth)
461
+ const minHeight = XEUtils.toNumber(props.minHeight)
462
+ const maxWidth = visibleWidth
463
+ const maxHeight = visibleHeight
464
+ const boxElem = getBox()
465
+ const clientWidth = boxElem.clientWidth
466
+ const clientHeight = boxElem.clientHeight
467
+ const disX = evnt.clientX
468
+ const disY = evnt.clientY
469
+ const offsetTop = boxElem.offsetTop
470
+ const offsetLeft = boxElem.offsetLeft
471
+ const params = { type: 'resize' }
472
+ document.onmousemove = (evnt) => {
473
+ evnt.preventDefault()
474
+ let dragLeft
475
+ let dragTop
476
+ let width
477
+ let height
478
+ switch (type) {
479
+ case 'wl':
480
+ dragLeft = disX - evnt.clientX
481
+ width = dragLeft + clientWidth
482
+ if (offsetLeft - dragLeft > marginSize) {
483
+ if (width > minWidth) {
484
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
485
+ }
486
+ }
487
+ break
488
+ case 'st':
489
+ dragTop = disY - evnt.clientY
490
+ height = clientHeight + dragTop
491
+ if (offsetTop - dragTop > marginSize) {
492
+ if (height > minHeight) {
493
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
494
+ }
495
+ }
496
+ break
497
+ case 'wr':
498
+ dragLeft = evnt.clientX - disX
499
+ width = dragLeft + clientWidth
500
+ if (offsetLeft + width + marginSize < visibleWidth) {
501
+ if (width > minWidth) {
502
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
503
+ }
504
+ }
505
+ break
506
+ case 'sb':
507
+ dragTop = evnt.clientY - disY
508
+ height = dragTop + clientHeight
509
+ if (offsetTop + height + marginSize < visibleHeight) {
510
+ if (height > minHeight) {
511
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
512
+ }
513
+ }
514
+ break
515
+ }
516
+ boxElem.className = boxElem.className.replace(/\s?is--drag/, '') + ' is--drag'
517
+ dispatchEvent('resize', params, evnt)
518
+ reactData.resizeFlag++
519
+ }
520
+ document.onmouseup = () => {
521
+ document.onmousemove = null
522
+ document.onmouseup = null
523
+ reactData.resizeFlag++
524
+ setTimeout(() => {
525
+ boxElem.className = boxElem.className.replace(/\s?is--drag/, '')
526
+ }, 50)
527
+ }
528
+ }
529
+
530
+ const formDesignPrivateMethods: DrawerPrivateMethods = {}
531
+
532
+ Object.assign($xeDrawer, drawerMethods, formDesignPrivateMethods)
533
+
534
+ const renderTitles = () => {
535
+ const { slots: propSlots = {}, showClose, title } = props
536
+ const titleSlot = slots.title || propSlots.title
537
+ const cornerSlot = slots.corner || propSlots.corner
538
+ return [
539
+ h(
540
+ 'div',
541
+ {
542
+ class: 'vxe-drawer--header-title'
543
+ },
544
+ titleSlot ? getSlotVNs(titleSlot({ $drawer: $xeDrawer })) : title ? getFuncText(title) : getI18n('vxe.alert.title')
545
+ ),
546
+ h(
547
+ 'div',
548
+ {
549
+ class: 'vxe-drawer--header-right'
550
+ },
551
+ [
552
+ cornerSlot
553
+ ? h(
554
+ 'div',
555
+ {
556
+ class: 'vxe-drawer--corner-wrapper'
557
+ },
558
+ getSlotVNs(cornerSlot({ $drawer: $xeDrawer }))
559
+ )
560
+ : renderEmptyElement($xeDrawer),
561
+ showClose
562
+ ? h(
563
+ 'div',
564
+ {
565
+ class: ['vxe-drawer--close-btn', 'trigger--btn'],
566
+ title: getI18n('vxe.drawer.close'),
567
+ onClick: closeEvent
568
+ },
569
+ [
570
+ h('i', {
571
+ class: getIcon().DRAWER_CLOSE
572
+ })
573
+ ]
574
+ )
575
+ : renderEmptyElement($xeDrawer)
576
+ ]
577
+ )
578
+ ]
579
+ }
580
+
581
+ const renderHeader = () => {
582
+ const { slots: propSlots = {}, showTitleOverflow } = props
583
+ const headerSlot = slots.header || propSlots.header
584
+ if (props.showHeader) {
585
+ return h(
586
+ 'div',
587
+ {
588
+ class: [
589
+ 'vxe-drawer--header',
590
+ {
591
+ 'is--ellipsis': showTitleOverflow
592
+ }
593
+ ]
594
+ },
595
+ headerSlot ? getSlotVNs(headerSlot({ $drawer: $xeDrawer })) : renderTitles()
596
+ )
597
+ }
598
+ return renderEmptyElement($xeDrawer)
599
+ }
600
+
601
+ const renderBody = () => {
602
+ const { slots: propSlots = {}, content, useHtml } = props
603
+ const isVScrollbar = computeIsVScrollbar.value
604
+ const scrollbarProps = computeScrollbarProps.value
605
+ const defaultSlot = slots.default || propSlots.default
606
+ const leftSlot = slots.left || propSlots.left
607
+ const rightSlot = slots.right || propSlots.right
608
+ const contVNs: VNode[] = []
609
+ if (useHtml && !defaultSlot) {
610
+ contVNs.push(
611
+ isVScrollbar
612
+ ? h(
613
+ VxeScrollbarComponent,
614
+ {
615
+ key: 'shc',
616
+ class: 'vxe-drawer--scrollbar-content',
617
+ ...scrollbarProps
618
+ },
619
+ {
620
+ default() {
621
+ return [
622
+ h('div', {
623
+ class: 'vxe-drawer--scrollbar-content-html',
624
+ innerHTML: getFuncText(content)
625
+ })
626
+ ]
627
+ }
628
+ }
629
+ )
630
+ : h('div', {
631
+ key: 'hc',
632
+ class: 'vxe-drawer--content',
633
+ innerHTML: getFuncText(content)
634
+ })
635
+ )
636
+ } else {
637
+ contVNs.push(
638
+ isVScrollbar
639
+ ? h(
640
+ VxeScrollbarComponent,
641
+ {
642
+ key: 'sdc',
643
+ class: 'vxe-drawer--scrollbar-content',
644
+ ...scrollbarProps
645
+ },
646
+ {
647
+ default: () => (defaultSlot ? getSlotVNs(defaultSlot({ $drawer: $xeDrawer })) : getFuncText(content))
648
+ }
649
+ )
650
+ : h(
651
+ 'div',
652
+ {
653
+ key: 'dc',
654
+ class: 'vxe-drawer--content'
655
+ },
656
+ defaultSlot ? getSlotVNs(defaultSlot({ $drawer: $xeDrawer })) : getFuncText(content)
657
+ )
658
+ )
659
+ }
660
+ return h(
661
+ 'div',
662
+ {
663
+ class: 'vxe-drawer--body'
664
+ },
665
+ [
666
+ leftSlot
667
+ ? h(
668
+ 'div',
669
+ {
670
+ class: 'vxe-drawer--body-left'
671
+ },
672
+ getSlotVNs(leftSlot({ $drawer: $xeDrawer }))
673
+ )
674
+ : renderEmptyElement($xeDrawer),
675
+ h(
676
+ 'div',
677
+ {
678
+ class: 'vxe-drawer--body-default'
679
+ },
680
+ contVNs
681
+ ),
682
+ rightSlot
683
+ ? h(
684
+ 'div',
685
+ {
686
+ class: 'vxe-drawer--body-right'
687
+ },
688
+ getSlotVNs(rightSlot({ $drawer: $xeDrawer }))
689
+ )
690
+ : renderEmptyElement($xeDrawer),
691
+ h(VxeLoadingComponent, {
692
+ class: 'vxe-drawer--loading',
693
+ modelValue: props.loading
694
+ })
695
+ ]
696
+ )
697
+ }
698
+
699
+ const renderDefaultFooter = () => {
700
+ const { slots: propSlots = {}, showCancelButton, showConfirmButton, loading } = props
701
+ const lfSlot = slots.leftfoot || propSlots.leftfoot
702
+ const rfSlot = slots.rightfoot || propSlots.rightfoot
703
+ const btnVNs = []
704
+ if (showCancelButton) {
705
+ btnVNs.push(
706
+ h(VxeButtonComponent, {
707
+ key: 1,
708
+ ref: refCancelBtn,
709
+ content: props.cancelButtonText || getI18n('vxe.button.cancel'),
710
+ onClick: cancelEvent
711
+ })
712
+ )
713
+ }
714
+ if (showConfirmButton) {
715
+ btnVNs.push(
716
+ h(VxeButtonComponent, {
717
+ key: 2,
718
+ ref: refConfirmBtn,
719
+ loading: loading,
720
+ status: 'primary',
721
+ content: props.confirmButtonText || getI18n('vxe.button.confirm'),
722
+ onClick: confirmEvent
723
+ })
724
+ )
725
+ }
726
+ return h(
727
+ 'div',
728
+ {
729
+ class: 'vxe-drawer--footer-wrapper'
730
+ },
731
+ [
732
+ h(
733
+ 'div',
734
+ {
735
+ class: 'vxe-drawer--footer-left'
736
+ },
737
+ lfSlot ? getSlotVNs(lfSlot({ $drawer: $xeDrawer })) : []
738
+ ),
739
+ h(
740
+ 'div',
741
+ {
742
+ class: 'vxe-drawer--footer-right'
743
+ },
744
+ rfSlot ? getSlotVNs(rfSlot({ $drawer: $xeDrawer })) : btnVNs
745
+ )
746
+ ]
747
+ )
748
+ }
749
+
750
+ const renderFooter = () => {
751
+ const { slots: propSlots = {} } = props
752
+ const footerSlot = slots.footer || propSlots.footer
753
+ if (props.showFooter) {
754
+ return h(
755
+ 'div',
756
+ {
757
+ class: 'vxe-drawer--footer'
758
+ },
759
+ footerSlot ? getSlotVNs(footerSlot({ $drawer: $xeDrawer })) : [renderDefaultFooter()]
760
+ )
761
+ }
762
+ return renderEmptyElement($xeDrawer)
763
+ }
764
+
765
+ const renderVN = () => {
766
+ const { border, showTitleBackground, slots: propSlots = {}, className, position, loading, lockScroll, padding, lockView, mask, resize, appendTo, destroyOnClose, isWithinAppendTo } = props
767
+ const { initialized, contentVisible, visible } = reactData
768
+ const asideSlot = slots.aside || propSlots.aside
769
+ const vSize = computeSize.value
770
+ const dragType = computeDragType.value
771
+ const btnTransfer = computeBtnTransfer.value
772
+ return h(
773
+ Teleport,
774
+ {
775
+ to: getPopupContainer(appendTo),
776
+ disabled: btnTransfer ? !initialized : true
777
+ },
778
+ [
779
+ h(
780
+ 'div',
781
+ {
782
+ ref: refElem,
783
+ class: [
784
+ 'vxe-drawer--wrapper',
785
+ `pos--${position}`,
786
+ isWithinAppendTo ? 'ctx--within' : 'ctx--free',
787
+ className || '',
788
+ {
789
+ [`size--${vSize}`]: vSize,
790
+ 'is--padding': padding,
791
+ 'is--border': border,
792
+ 'is--title-bg': showTitleBackground,
793
+ 'lock--scroll': lockScroll,
794
+ 'lock--view': lockView,
795
+ 'is--resize': resize,
796
+ 'is--mask': mask,
797
+ 'is--visible': contentVisible,
798
+ 'is--active': visible,
799
+ 'is--loading': loading
800
+ }
801
+ ],
802
+ style: {
803
+ zIndex: reactData.drawerZIndex
804
+ },
805
+ onClick: selfClickEvent
806
+ },
807
+ [
808
+ h(
809
+ 'div',
810
+ {
811
+ ref: refDrawerBox,
812
+ class: 'vxe-drawer--box',
813
+ onMousedown: boxMousedownEvent
814
+ },
815
+ [
816
+ asideSlot
817
+ ? h(
818
+ 'div',
819
+ {
820
+ class: 'vxe-drawer--aside'
821
+ },
822
+ getSlotVNs(asideSlot({ $drawer: $xeDrawer }))
823
+ )
824
+ : renderEmptyElement($xeDrawer),
825
+ h(
826
+ 'div',
827
+ {
828
+ class: 'vxe-drawer--container'
829
+ },
830
+ !reactData.initialized || (destroyOnClose && !reactData.visible)
831
+ ? []
832
+ : [
833
+ renderHeader(),
834
+ renderBody(),
835
+ renderFooter(),
836
+ resize
837
+ ? h(
838
+ 'span',
839
+ {
840
+ class: 'vxe-drawer--resize'
841
+ },
842
+ [
843
+ h('span', {
844
+ class: `${dragType}-resize`,
845
+ type: dragType,
846
+ onMousedown: dragEvent
847
+ })
848
+ ]
849
+ )
850
+ : renderEmptyElement($xeDrawer)
851
+ ]
852
+ )
853
+ ]
854
+ )
855
+ ]
856
+ )
857
+ ]
858
+ )
859
+ }
860
+
861
+ const reFlag = ref(0)
862
+ watch(
863
+ () => props.width,
864
+ () => {
865
+ reFlag.value++
866
+ }
867
+ )
868
+ watch(
869
+ () => props.height,
870
+ () => {
871
+ reFlag.value++
872
+ }
873
+ )
874
+ watch(
875
+ () => props.position,
876
+ () => {
877
+ reFlag.value++
878
+ }
879
+ )
880
+ watch(reFlag, recalculate)
881
+
882
+ watch(
883
+ () => props.modelValue,
884
+ (value) => {
885
+ if (value) {
886
+ openDrawer()
887
+ } else {
888
+ closeDrawer('model')
889
+ }
890
+ }
891
+ )
892
+
893
+ onMounted(() => {
894
+ reactData.initialized = !!props.preload
895
+ nextTick(() => {
896
+ if (props.modelValue) {
897
+ openDrawer()
898
+ }
899
+ recalculate()
900
+ })
901
+ if (props.escClosable) {
902
+ globalEvents.on($xeDrawer, 'keydown', handleGlobalKeydownEvent)
903
+ }
904
+ })
905
+
906
+ onUnmounted(() => {
907
+ globalEvents.off($xeDrawer, 'keydown')
908
+ removeActiveQueue()
909
+ })
910
+
911
+ provide('$xeDrawer', $xeDrawer)
912
+
913
+ $xeDrawer.renderVN = renderVN
914
+
915
+ return $xeDrawer
916
+ },
917
+ render() {
918
+ return this.renderVN()
919
+ }
920
+ })