vxe-pc-ui 4.14.6 → 4.14.7

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 (611) hide show
  1. package/LICENSE +21 -21
  2. package/README.en.md +72 -72
  3. package/README.ja-JP.md +72 -72
  4. package/README.md +364 -364
  5. package/README.zh-TW.md +73 -73
  6. package/es/checkbox/src/button.js +26 -5
  7. package/es/checkbox/src/checkbox.js +26 -5
  8. package/es/checkbox/src/group.js +23 -3
  9. package/es/checkbox/style.css +6 -3
  10. package/es/checkbox/style.min.css +1 -1
  11. package/es/language/ar-EG.js +4 -0
  12. package/es/language/de-DE.js +4 -0
  13. package/es/language/en-US.js +4 -0
  14. package/es/language/es-ES.js +4 -0
  15. package/es/language/fr-FR.js +4 -0
  16. package/es/language/hu-HU.js +4 -0
  17. package/es/language/hy-AM.js +4 -0
  18. package/es/language/id-ID.js +4 -0
  19. package/es/language/it-IT.js +4 -0
  20. package/es/language/ja-JP.js +4 -0
  21. package/es/language/ko-KR.js +4 -0
  22. package/es/language/ms-MY.js +4 -0
  23. package/es/language/nb-NO.js +4 -0
  24. package/es/language/pt-BR.js +4 -0
  25. package/es/language/ru-RU.js +4 -0
  26. package/es/language/th-TH.js +4 -0
  27. package/es/language/ug-CN.js +4 -0
  28. package/es/language/uk-UA.js +4 -0
  29. package/es/language/uz-UZ.js +4 -0
  30. package/es/language/vi-VN.js +4 -0
  31. package/es/language/zh-CHT.js +4 -0
  32. package/es/language/zh-CN.js +4 -0
  33. package/es/radio/src/button.js +27 -5
  34. package/es/radio/src/group.js +17 -2
  35. package/es/radio/src/radio.js +27 -5
  36. package/es/radio/style.css +5 -3
  37. package/es/radio/style.min.css +1 -1
  38. package/es/style.css +1 -1
  39. package/es/style.min.css +1 -1
  40. package/es/switch/src/switch.js +19 -11
  41. package/es/tree/style.css +11 -6
  42. package/es/tree/style.min.css +1 -1
  43. package/es/ui/index.js +1 -1
  44. package/es/ui/src/log.js +1 -1
  45. package/es/vxe-checkbox/style.css +6 -3
  46. package/es/vxe-checkbox/style.min.css +1 -1
  47. package/es/vxe-radio/style.css +5 -3
  48. package/es/vxe-radio/style.min.css +1 -1
  49. package/es/vxe-tree/style.css +11 -6
  50. package/es/vxe-tree/style.min.css +1 -1
  51. package/lib/checkbox/src/button.js +26 -3
  52. package/lib/checkbox/src/button.min.js +1 -1
  53. package/lib/checkbox/src/checkbox.js +26 -3
  54. package/lib/checkbox/src/checkbox.min.js +1 -1
  55. package/lib/checkbox/src/group.js +25 -3
  56. package/lib/checkbox/src/group.min.js +1 -1
  57. package/lib/checkbox/style/style.css +6 -3
  58. package/lib/checkbox/style/style.min.css +1 -1
  59. package/lib/index.umd.js +2446 -2376
  60. package/lib/index.umd.min.js +1 -1
  61. package/lib/language/ar-EG.js +4 -0
  62. package/lib/language/ar-EG.min.js +1 -1
  63. package/lib/language/ar-EG.umd.js +4 -0
  64. package/lib/language/de-DE.js +4 -0
  65. package/lib/language/de-DE.min.js +1 -1
  66. package/lib/language/de-DE.umd.js +4 -0
  67. package/lib/language/en-US.js +4 -0
  68. package/lib/language/en-US.min.js +1 -1
  69. package/lib/language/en-US.umd.js +4 -0
  70. package/lib/language/es-ES.js +4 -0
  71. package/lib/language/es-ES.min.js +1 -1
  72. package/lib/language/es-ES.umd.js +4 -0
  73. package/lib/language/fr-FR.js +4 -0
  74. package/lib/language/fr-FR.min.js +1 -1
  75. package/lib/language/fr-FR.umd.js +4 -0
  76. package/lib/language/hu-HU.js +4 -0
  77. package/lib/language/hu-HU.min.js +1 -1
  78. package/lib/language/hu-HU.umd.js +4 -0
  79. package/lib/language/hy-AM.js +4 -0
  80. package/lib/language/hy-AM.min.js +1 -1
  81. package/lib/language/hy-AM.umd.js +4 -0
  82. package/lib/language/id-ID.js +4 -0
  83. package/lib/language/id-ID.min.js +1 -1
  84. package/lib/language/id-ID.umd.js +4 -0
  85. package/lib/language/it-IT.js +4 -0
  86. package/lib/language/it-IT.min.js +1 -1
  87. package/lib/language/it-IT.umd.js +4 -0
  88. package/lib/language/ja-JP.js +4 -0
  89. package/lib/language/ja-JP.min.js +1 -1
  90. package/lib/language/ja-JP.umd.js +4 -0
  91. package/lib/language/ko-KR.js +4 -0
  92. package/lib/language/ko-KR.min.js +1 -1
  93. package/lib/language/ko-KR.umd.js +4 -0
  94. package/lib/language/ms-MY.js +4 -0
  95. package/lib/language/ms-MY.min.js +1 -1
  96. package/lib/language/ms-MY.umd.js +4 -0
  97. package/lib/language/nb-NO.js +4 -0
  98. package/lib/language/nb-NO.min.js +1 -1
  99. package/lib/language/nb-NO.umd.js +4 -0
  100. package/lib/language/pt-BR.js +4 -0
  101. package/lib/language/pt-BR.min.js +1 -1
  102. package/lib/language/pt-BR.umd.js +4 -0
  103. package/lib/language/ru-RU.js +4 -0
  104. package/lib/language/ru-RU.min.js +1 -1
  105. package/lib/language/ru-RU.umd.js +4 -0
  106. package/lib/language/th-TH.js +4 -0
  107. package/lib/language/th-TH.min.js +1 -1
  108. package/lib/language/th-TH.umd.js +4 -0
  109. package/lib/language/ug-CN.js +4 -0
  110. package/lib/language/ug-CN.min.js +1 -1
  111. package/lib/language/ug-CN.umd.js +4 -0
  112. package/lib/language/uk-UA.js +4 -0
  113. package/lib/language/uk-UA.min.js +1 -1
  114. package/lib/language/uk-UA.umd.js +4 -0
  115. package/lib/language/uz-UZ.js +4 -0
  116. package/lib/language/uz-UZ.min.js +1 -1
  117. package/lib/language/uz-UZ.umd.js +4 -0
  118. package/lib/language/vi-VN.js +4 -0
  119. package/lib/language/vi-VN.min.js +1 -1
  120. package/lib/language/vi-VN.umd.js +4 -0
  121. package/lib/language/zh-CHT.js +4 -0
  122. package/lib/language/zh-CHT.min.js +1 -1
  123. package/lib/language/zh-CHT.umd.js +4 -0
  124. package/lib/language/zh-CN.js +4 -0
  125. package/lib/language/zh-CN.min.js +1 -1
  126. package/lib/language/zh-CN.umd.js +4 -0
  127. package/lib/radio/src/button.js +27 -3
  128. package/lib/radio/src/button.min.js +1 -1
  129. package/lib/radio/src/group.js +19 -2
  130. package/lib/radio/src/group.min.js +1 -1
  131. package/lib/radio/src/radio.js +27 -3
  132. package/lib/radio/src/radio.min.js +1 -1
  133. package/lib/radio/style/style.css +5 -3
  134. package/lib/radio/style/style.min.css +1 -1
  135. package/lib/style.css +1 -1
  136. package/lib/style.min.css +1 -1
  137. package/lib/switch/src/switch.js +18 -10
  138. package/lib/switch/src/switch.min.js +1 -1
  139. package/lib/tree/style/style.css +11 -6
  140. package/lib/tree/style/style.min.css +1 -1
  141. package/lib/ui/index.js +1 -1
  142. package/lib/ui/index.min.js +1 -1
  143. package/lib/ui/src/log.js +1 -1
  144. package/lib/ui/src/log.min.js +1 -1
  145. package/lib/vxe-checkbox/style/style.css +6 -3
  146. package/lib/vxe-checkbox/style/style.min.css +1 -1
  147. package/lib/vxe-radio/style/style.css +5 -3
  148. package/lib/vxe-radio/style/style.min.css +1 -1
  149. package/lib/vxe-tree/style/style.css +11 -6
  150. package/lib/vxe-tree/style/style.min.css +1 -1
  151. package/package.json +88 -88
  152. package/packages/alert/index.ts +16 -16
  153. package/packages/alert/src/alert.ts +124 -124
  154. package/packages/anchor/index.ts +16 -16
  155. package/packages/anchor/src/anchor-link.ts +121 -121
  156. package/packages/anchor/src/anchor.ts +237 -237
  157. package/packages/anchor/src/util.ts +23 -23
  158. package/packages/anchor-link/index.ts +16 -16
  159. package/packages/avatar/index.ts +16 -16
  160. package/packages/avatar/src/avatar.ts +149 -149
  161. package/packages/backtop/index.ts +16 -16
  162. package/packages/backtop/src/backtop.ts +314 -314
  163. package/packages/badge/index.ts +16 -16
  164. package/packages/badge/src/badge.ts +100 -100
  165. package/packages/breadcrumb/index.ts +16 -16
  166. package/packages/breadcrumb/src/breadcrumb-item.ts +106 -106
  167. package/packages/breadcrumb/src/breadcrumb.ts +92 -92
  168. package/packages/breadcrumb-item/index.ts +16 -16
  169. package/packages/button/index.ts +16 -16
  170. package/packages/button/src/button-group.ts +110 -110
  171. package/packages/button/src/button.ts +841 -841
  172. package/packages/button-group/index.ts +16 -16
  173. package/packages/calendar/index.ts +16 -16
  174. package/packages/calendar/src/calendar.ts +1351 -1351
  175. package/packages/card/index.ts +16 -16
  176. package/packages/card/src/card.ts +175 -175
  177. package/packages/carousel/index.ts +16 -16
  178. package/packages/carousel/src/carousel-item.ts +102 -102
  179. package/packages/carousel/src/carousel.ts +414 -414
  180. package/packages/carousel/src/util.ts +21 -21
  181. package/packages/carousel-item/index.ts +16 -16
  182. package/packages/cascader/index.ts +16 -16
  183. package/packages/cascader/src/cascader.ts +741 -741
  184. package/packages/checkbox/index.ts +16 -16
  185. package/packages/checkbox/src/button.ts +165 -144
  186. package/packages/checkbox/src/checkbox.ts +176 -154
  187. package/packages/checkbox/src/group.ts +243 -222
  188. package/packages/checkbox-button/index.ts +16 -16
  189. package/packages/checkbox-group/index.ts +16 -16
  190. package/packages/col/index.ts +16 -16
  191. package/packages/collapse/index.ts +16 -16
  192. package/packages/collapse/src/collapse-pane.ts +114 -114
  193. package/packages/collapse/src/collapse.ts +284 -284
  194. package/packages/collapse/src/util.ts +21 -21
  195. package/packages/collapse-pane/index.ts +16 -16
  196. package/packages/color-picker/index.ts +16 -16
  197. package/packages/color-picker/src/color-picker.ts +1109 -1109
  198. package/packages/color-picker/src/util.ts +198 -198
  199. package/packages/components.ts +307 -307
  200. package/packages/context-menu/index.ts +54 -54
  201. package/packages/context-menu/src/context-menu.ts +681 -681
  202. package/packages/countdown/index.ts +16 -16
  203. package/packages/countdown/src/countdown.ts +262 -262
  204. package/packages/date-panel/index.ts +16 -16
  205. package/packages/date-panel/src/date-panel.ts +1809 -1809
  206. package/packages/date-panel/src/util.ts +244 -244
  207. package/packages/date-picker/index.ts +16 -16
  208. package/packages/date-picker/src/date-picker.ts +1071 -1071
  209. package/packages/date-range-picker/index.ts +16 -16
  210. package/packages/date-range-picker/src/date-range-picker.ts +1280 -1280
  211. package/packages/drawer/index.ts +77 -77
  212. package/packages/drawer/src/drawer.ts +657 -657
  213. package/packages/dynamics/index.ts +89 -89
  214. package/packages/empty/index.ts +16 -16
  215. package/packages/empty/src/empty.ts +100 -100
  216. package/packages/form/index.ts +16 -16
  217. package/packages/form/render/index.ts +598 -598
  218. package/packages/form/src/form-config-item.ts +72 -72
  219. package/packages/form/src/form-group.ts +86 -86
  220. package/packages/form/src/form-item.ts +174 -174
  221. package/packages/form/src/form.ts +987 -987
  222. package/packages/form/src/itemInfo.ts +80 -80
  223. package/packages/form/src/render.ts +387 -387
  224. package/packages/form/src/util.ts +93 -93
  225. package/packages/form-gather/index.ts +26 -26
  226. package/packages/form-group/index.ts +16 -16
  227. package/packages/form-item/index.ts +16 -16
  228. package/packages/icon/index.ts +16 -16
  229. package/packages/icon/src/icon.ts +75 -75
  230. package/packages/icon-picker/index.ts +16 -16
  231. package/packages/icon-picker/src/icon-picker.ts +626 -626
  232. package/packages/image/index.ts +16 -16
  233. package/packages/image/src/group.ts +153 -153
  234. package/packages/image/src/image.ts +298 -298
  235. package/packages/image/src/preview.ts +672 -672
  236. package/packages/image/src/util.ts +59 -59
  237. package/packages/image-group/index.ts +16 -16
  238. package/packages/image-preview/index.ts +19 -19
  239. package/packages/index.ts +4 -4
  240. package/packages/input/index.ts +16 -16
  241. package/packages/input/src/input.ts +2788 -2788
  242. package/packages/language/ar-EG.ts +844 -840
  243. package/packages/language/de-DE.ts +844 -840
  244. package/packages/language/en-US.ts +844 -840
  245. package/packages/language/es-ES.ts +844 -840
  246. package/packages/language/fr-FR.ts +844 -840
  247. package/packages/language/hu-HU.ts +844 -840
  248. package/packages/language/hy-AM.ts +844 -840
  249. package/packages/language/id-ID.ts +844 -840
  250. package/packages/language/it-IT.ts +844 -840
  251. package/packages/language/ja-JP.ts +844 -840
  252. package/packages/language/ko-KR.ts +844 -840
  253. package/packages/language/ms-MY.ts +844 -840
  254. package/packages/language/nb-NO.ts +844 -840
  255. package/packages/language/pt-BR.ts +844 -840
  256. package/packages/language/ru-RU.ts +844 -840
  257. package/packages/language/th-TH.ts +844 -840
  258. package/packages/language/ug-CN.ts +844 -840
  259. package/packages/language/uk-UA.ts +844 -840
  260. package/packages/language/uz-UZ.ts +844 -840
  261. package/packages/language/vi-VN.ts +844 -840
  262. package/packages/language/zh-CHT.ts +844 -840
  263. package/packages/language/zh-CN.ts +844 -840
  264. package/packages/language/zh-HK.ts +3 -3
  265. package/packages/language/zh-MO.ts +3 -3
  266. package/packages/language/zh-TC.ts +3 -3
  267. package/packages/language/zh-TW.ts +3 -3
  268. package/packages/layout-aside/index.ts +16 -16
  269. package/packages/layout-aside/src/layout-aside.ts +123 -123
  270. package/packages/layout-body/index.ts +16 -16
  271. package/packages/layout-body/src/layout-body.ts +142 -142
  272. package/packages/layout-container/index.ts +16 -16
  273. package/packages/layout-container/src/layout-container.ts +82 -82
  274. package/packages/layout-footer/index.ts +16 -16
  275. package/packages/layout-footer/src/layout-footer.ts +74 -74
  276. package/packages/layout-header/index.ts +16 -16
  277. package/packages/layout-header/src/layout-header.ts +73 -73
  278. package/packages/link/index.ts +16 -16
  279. package/packages/link/src/link.ts +161 -161
  280. package/packages/list/index.ts +16 -16
  281. package/packages/list/src/list.ts +442 -442
  282. package/packages/loading/index.ts +34 -34
  283. package/packages/loading/src/loading.ts +152 -152
  284. package/packages/mention/index.ts +16 -16
  285. package/packages/mention/src/mention.ts +71 -71
  286. package/packages/menu/index.ts +16 -16
  287. package/packages/menu/src/menu.ts +581 -581
  288. package/packages/modal/index.ts +136 -136
  289. package/packages/modal/src/modal.ts +1494 -1494
  290. package/packages/notice-bar/index.ts +16 -16
  291. package/packages/notice-bar/src/notice-bar.ts +181 -181
  292. package/packages/number-input/index.ts +16 -16
  293. package/packages/number-input/src/number-input.ts +1096 -1096
  294. package/packages/number-input/src/util.ts +12 -12
  295. package/packages/optgroup/index.ts +16 -16
  296. package/packages/option/index.ts +16 -16
  297. package/packages/pager/index.ts +16 -16
  298. package/packages/pager/src/pager.ts +769 -769
  299. package/packages/password-input/index.ts +16 -16
  300. package/packages/password-input/src/password-input.ts +378 -378
  301. package/packages/print/index.ts +18 -18
  302. package/packages/print/src/page-break.ts +92 -92
  303. package/packages/print/src/print.ts +272 -272
  304. package/packages/print/src/util.ts +284 -284
  305. package/packages/print-page-break/index.ts +16 -16
  306. package/packages/pulldown/index.ts +16 -16
  307. package/packages/pulldown/src/pulldown.ts +457 -457
  308. package/packages/radio/index.ts +16 -16
  309. package/packages/radio/src/button.ts +195 -173
  310. package/packages/radio/src/group.ts +229 -213
  311. package/packages/radio/src/radio.ts +203 -180
  312. package/packages/radio-button/index.ts +16 -16
  313. package/packages/radio-group/index.ts +16 -16
  314. package/packages/rate/index.ts +16 -16
  315. package/packages/rate/src/rate.ts +192 -192
  316. package/packages/result/index.ts +16 -16
  317. package/packages/result/src/result.ts +112 -112
  318. package/packages/row/index.ts +16 -16
  319. package/packages/row/src/col.ts +136 -136
  320. package/packages/row/src/row.ts +119 -119
  321. package/packages/segmented/index.ts +16 -16
  322. package/packages/segmented/src/segmented.ts +264 -264
  323. package/packages/select/index.ts +16 -16
  324. package/packages/select/src/optgroup.ts +49 -49
  325. package/packages/select/src/option-info.ts +20 -20
  326. package/packages/select/src/option.ts +47 -47
  327. package/packages/select/src/select.ts +1699 -1699
  328. package/packages/select/src/util.ts +47 -47
  329. package/packages/slider/index.ts +16 -16
  330. package/packages/slider/src/slider.ts +304 -304
  331. package/packages/split/index.ts +16 -16
  332. package/packages/split-pane/index.ts +17 -17
  333. package/packages/splitter/index.ts +16 -16
  334. package/packages/splitter/src/splitter-panel.ts +145 -145
  335. package/packages/splitter/src/splitter.ts +1009 -1009
  336. package/packages/splitter/src/util.ts +21 -21
  337. package/packages/splitter-panel/index.ts +16 -16
  338. package/packages/steps/index.ts +16 -16
  339. package/packages/steps/src/steps.ts +68 -68
  340. package/packages/switch/index.ts +16 -16
  341. package/packages/switch/src/switch.ts +245 -237
  342. package/packages/tab-pane/index.ts +16 -16
  343. package/packages/table-select/index.ts +16 -16
  344. package/packages/table-select/src/table-select.ts +800 -800
  345. package/packages/tabs/index.ts +16 -16
  346. package/packages/tabs/src/tab-pane.ts +117 -117
  347. package/packages/tabs/src/tabs.ts +940 -940
  348. package/packages/tabs/src/util.ts +21 -21
  349. package/packages/tag/index.ts +16 -16
  350. package/packages/tag/src/tag.ts +187 -187
  351. package/packages/text/index.ts +16 -16
  352. package/packages/text/src/text.ts +260 -260
  353. package/packages/text-ellipsis/index.ts +16 -16
  354. package/packages/text-ellipsis/src/text-ellipsis.ts +282 -282
  355. package/packages/textarea/index.ts +16 -16
  356. package/packages/textarea/src/textarea.ts +373 -373
  357. package/packages/timeline/index.ts +16 -16
  358. package/packages/timeline/src/timeline-item.ts +67 -67
  359. package/packages/timeline/src/timeline.ts +71 -71
  360. package/packages/timeline-item/index.ts +16 -16
  361. package/packages/tip/index.ts +19 -19
  362. package/packages/tip/src/tip.ts +129 -129
  363. package/packages/tooltip/index.ts +16 -16
  364. package/packages/tooltip/src/tooltip.ts +589 -589
  365. package/packages/tour/index.ts +16 -16
  366. package/packages/tour/src/tour.ts +71 -71
  367. package/packages/tree/index.ts +16 -16
  368. package/packages/tree/src/store.ts +14 -14
  369. package/packages/tree/src/tree.ts +2825 -2825
  370. package/packages/tree/src/util.ts +45 -45
  371. package/packages/tree-select/index.ts +16 -16
  372. package/packages/tree-select/src/tree-select.ts +979 -979
  373. package/packages/ui/index.ts +697 -697
  374. package/packages/ui/src/anime.ts +52 -52
  375. package/packages/ui/src/comp.ts +3 -3
  376. package/packages/ui/src/dom.ts +279 -279
  377. package/packages/ui/src/log.ts +6 -6
  378. package/packages/ui/src/utils.ts +49 -49
  379. package/packages/ui/src/vn.ts +39 -39
  380. package/packages/upload/index.ts +20 -20
  381. package/packages/upload/src/upload.ts +1919 -1919
  382. package/packages/upload/src/util.ts +109 -109
  383. package/packages/watermark/index.ts +31 -31
  384. package/packages/watermark/src/util.ts +176 -176
  385. package/packages/watermark/src/watermark.ts +168 -168
  386. package/styles/all.scss +90 -90
  387. package/styles/base.scss +16 -16
  388. package/styles/components/alert.scss +101 -101
  389. package/styles/components/anchor.scss +44 -44
  390. package/styles/components/avatar.scss +115 -115
  391. package/styles/components/backtop.scss +82 -82
  392. package/styles/components/badge.scss +45 -45
  393. package/styles/components/breadcrumb.scss +29 -29
  394. package/styles/components/button-group.scss +30 -30
  395. package/styles/components/button.scss +415 -415
  396. package/styles/components/calendar.scss +471 -471
  397. package/styles/components/card.scss +121 -121
  398. package/styles/components/carousel.scss +184 -184
  399. package/styles/components/cascader.scss +140 -140
  400. package/styles/components/checkbox-button.scss +57 -57
  401. package/styles/components/checkbox.scss +81 -81
  402. package/styles/components/collapse.scss +56 -56
  403. package/styles/components/color-picker.scss +409 -409
  404. package/styles/components/context-menu.scss +102 -102
  405. package/styles/components/countdown.scss +35 -35
  406. package/styles/components/date-panel.scss +505 -505
  407. package/styles/components/date-picker.scss +247 -247
  408. package/styles/components/date-range-picker.scss +252 -252
  409. package/styles/components/drawer.scss +298 -298
  410. package/styles/components/empty.scss +79 -79
  411. package/styles/components/form.scss +668 -668
  412. package/styles/components/icon-picker.scss +211 -211
  413. package/styles/components/icon.scss +1048 -1048
  414. package/styles/components/image-group.scss +2 -2
  415. package/styles/components/image-preview.scss +215 -215
  416. package/styles/components/image.scss +16 -16
  417. package/styles/components/input.scss +846 -846
  418. package/styles/components/layout-aside.scss +22 -22
  419. package/styles/components/layout-body.scss +14 -14
  420. package/styles/components/layout-container.scss +13 -13
  421. package/styles/components/layout-footer.scss +14 -14
  422. package/styles/components/layout-header.scss +11 -11
  423. package/styles/components/link.scss +115 -115
  424. package/styles/components/list.scss +40 -40
  425. package/styles/components/loading.scss +137 -137
  426. package/styles/components/menu.scss +150 -150
  427. package/styles/components/modal.scss +480 -480
  428. package/styles/components/notice-bar.scss +91 -91
  429. package/styles/components/number-input.scss +283 -283
  430. package/styles/components/old-icon.scss +4 -4
  431. package/styles/components/pager.scss +282 -282
  432. package/styles/components/password-input.scss +374 -374
  433. package/styles/components/print.scss +3 -3
  434. package/styles/components/pulldown.scss +75 -75
  435. package/styles/components/radio-button.scss +57 -57
  436. package/styles/components/radio.scss +79 -79
  437. package/styles/components/rate.scss +76 -76
  438. package/styles/components/result.scss +91 -91
  439. package/styles/components/row.scss +69 -69
  440. package/styles/components/segmented.scss +215 -215
  441. package/styles/components/select.scss +244 -244
  442. package/styles/components/slider.scss +139 -139
  443. package/styles/components/split.scss +1 -1
  444. package/styles/components/splitter.scss +318 -318
  445. package/styles/components/switch.scss +128 -128
  446. package/styles/components/table-select.scss +105 -105
  447. package/styles/components/tabs.scss +745 -745
  448. package/styles/components/tag.scss +184 -184
  449. package/styles/components/text-ellipsis.scss +130 -130
  450. package/styles/components/text.scss +123 -123
  451. package/styles/components/textarea.scss +106 -106
  452. package/styles/components/tip.scss +97 -97
  453. package/styles/components/tooltip.scss +141 -141
  454. package/styles/components/tree-select.scss +166 -166
  455. package/styles/components/tree.scss +294 -294
  456. package/styles/components/upload.scss +497 -497
  457. package/styles/components/watermark.scss +26 -26
  458. package/styles/helpers/baseMixin.scss +104 -95
  459. package/styles/helpers/baseVar.scss +3 -3
  460. package/styles/helpers/placement.scss +38 -38
  461. package/styles/theme/base.scss +214 -214
  462. package/styles/theme/dark.scss +119 -119
  463. package/styles/theme/light.scss +118 -118
  464. package/styles/variable.scss +111 -111
  465. package/types/all.d.ts +327 -327
  466. package/types/components/alert.d.ts +87 -87
  467. package/types/components/anchor-link.d.ts +91 -91
  468. package/types/components/anchor.d.ts +104 -104
  469. package/types/components/avatar.d.ts +88 -88
  470. package/types/components/backtop.d.ts +122 -122
  471. package/types/components/badge.d.ts +76 -76
  472. package/types/components/breadcrumb-item.d.ts +80 -80
  473. package/types/components/breadcrumb.d.ts +87 -87
  474. package/types/components/button-group.d.ts +120 -120
  475. package/types/components/button.d.ts +323 -323
  476. package/types/components/calendar.d.ts +264 -264
  477. package/types/components/card.d.ts +93 -93
  478. package/types/components/carousel-item.d.ts +75 -75
  479. package/types/components/carousel.d.ts +134 -134
  480. package/types/components/cascader.d.ts +263 -263
  481. package/types/components/checkbox-button.d.ts +103 -103
  482. package/types/components/checkbox-group.d.ts +146 -143
  483. package/types/components/checkbox.d.ts +123 -123
  484. package/types/components/col.d.ts +80 -80
  485. package/types/components/colgroup.d.ts +137 -137
  486. package/types/components/collapse-pane.d.ts +89 -89
  487. package/types/components/collapse.d.ts +121 -121
  488. package/types/components/color-picker.d.ts +176 -176
  489. package/types/components/column.d.ts +841 -841
  490. package/types/components/context-menu.d.ts +289 -289
  491. package/types/components/countdown.d.ts +112 -112
  492. package/types/components/date-panel.d.ts +280 -280
  493. package/types/components/date-picker.d.ts +332 -332
  494. package/types/components/date-range-picker.d.ts +352 -352
  495. package/types/components/drawer.d.ts +299 -299
  496. package/types/components/empty.d.ts +78 -78
  497. package/types/components/flow-design.d.ts +85 -85
  498. package/types/components/flow-view.d.ts +85 -85
  499. package/types/components/form-design.d.ts +376 -376
  500. package/types/components/form-gather.d.ts +124 -124
  501. package/types/components/form-group.d.ts +77 -77
  502. package/types/components/form-item.d.ts +411 -411
  503. package/types/components/form-view.d.ts +183 -183
  504. package/types/components/form.d.ts +468 -468
  505. package/types/components/gantt-module/gantt-view.d.ts +177 -177
  506. package/types/components/gantt-module/index.d.ts +1 -1
  507. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +131 -131
  508. package/types/components/gantt-plugins/index.d.ts +1 -1
  509. package/types/components/gantt.d.ts +1194 -1194
  510. package/types/components/grid.d.ts +1040 -1040
  511. package/types/components/icon-picker.d.ts +196 -196
  512. package/types/components/icon.d.ts +87 -87
  513. package/types/components/image-group.d.ts +127 -127
  514. package/types/components/image-preview.d.ts +167 -167
  515. package/types/components/image.d.ts +173 -173
  516. package/types/components/input.d.ts +435 -435
  517. package/types/components/layout-aside.d.ts +80 -80
  518. package/types/components/layout-body.d.ts +91 -91
  519. package/types/components/layout-container.d.ts +73 -73
  520. package/types/components/layout-footer.d.ts +73 -73
  521. package/types/components/layout-header.d.ts +69 -69
  522. package/types/components/link.d.ts +111 -111
  523. package/types/components/list-design.d.ts +190 -190
  524. package/types/components/list-view.d.ts +199 -199
  525. package/types/components/list.d.ts +204 -204
  526. package/types/components/loading.d.ts +103 -103
  527. package/types/components/mention.d.ts +77 -77
  528. package/types/components/menu.d.ts +211 -211
  529. package/types/components/modal.d.ts +542 -542
  530. package/types/components/notice-bar.d.ts +102 -102
  531. package/types/components/number-input.d.ts +309 -309
  532. package/types/components/optgroup.d.ts +88 -88
  533. package/types/components/option.d.ts +103 -103
  534. package/types/components/pager.d.ts +335 -335
  535. package/types/components/password-input.d.ts +142 -142
  536. package/types/components/print-page-break.d.ts +69 -69
  537. package/types/components/print.d.ts +206 -206
  538. package/types/components/pulldown.d.ts +231 -231
  539. package/types/components/radio-button.d.ts +114 -114
  540. package/types/components/radio-group.d.ts +147 -144
  541. package/types/components/radio.d.ts +129 -129
  542. package/types/components/rate.d.ts +88 -88
  543. package/types/components/result.d.ts +84 -84
  544. package/types/components/row.d.ts +79 -79
  545. package/types/components/segmented.d.ts +123 -123
  546. package/types/components/select.d.ts +527 -527
  547. package/types/components/slider.d.ts +126 -126
  548. package/types/components/split-pane.d.ts +133 -133
  549. package/types/components/split.d.ts +312 -312
  550. package/types/components/splitter-panel.d.ts +105 -105
  551. package/types/components/splitter.d.ts +288 -288
  552. package/types/components/steps.d.ts +68 -68
  553. package/types/components/switch.d.ts +133 -133
  554. package/types/components/tab-pane.d.ts +114 -114
  555. package/types/components/table-module/custom.d.ts +123 -123
  556. package/types/components/table-module/edit.d.ts +243 -243
  557. package/types/components/table-module/export.d.ts +96 -96
  558. package/types/components/table-module/filter.d.ts +140 -140
  559. package/types/components/table-module/index.d.ts +7 -7
  560. package/types/components/table-module/keyboard.d.ts +26 -26
  561. package/types/components/table-module/menu.d.ts +28 -28
  562. package/types/components/table-module/validator.d.ts +53 -53
  563. package/types/components/table-plugins/extend-cell-area.d.ts +770 -770
  564. package/types/components/table-plugins/extend-pivot-table.d.ts +58 -58
  565. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  566. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  567. package/types/components/table-plugins/index.d.ts +4 -4
  568. package/types/components/table-select.d.ts +219 -219
  569. package/types/components/table.d.ts +7465 -7465
  570. package/types/components/tabs.d.ts +332 -332
  571. package/types/components/tag.d.ts +114 -114
  572. package/types/components/text-ellipsis.d.ts +112 -112
  573. package/types/components/text.d.ts +122 -122
  574. package/types/components/textarea.d.ts +247 -247
  575. package/types/components/timeline-item.d.ts +75 -75
  576. package/types/components/timeline.d.ts +77 -77
  577. package/types/components/tip.d.ts +83 -83
  578. package/types/components/toolbar.d.ts +336 -336
  579. package/types/components/tooltip.d.ts +180 -180
  580. package/types/components/tour.d.ts +77 -77
  581. package/types/components/tree-select.d.ts +310 -310
  582. package/types/components/tree.d.ts +843 -843
  583. package/types/components/upload.d.ts +437 -437
  584. package/types/components/watermark.d.ts +120 -120
  585. package/types/handles/form-design.d.ts +50 -50
  586. package/types/handles/index.d.ts +3 -3
  587. package/types/handles/list-design.d.ts +2 -2
  588. package/types/handles/table.d.ts +15 -15
  589. package/types/index.d.ts +8 -8
  590. package/types/ui/commands.d.ts +57 -57
  591. package/types/ui/formats.d.ts +62 -62
  592. package/types/ui/global-config.d.ts +254 -254
  593. package/types/ui/global-icon.d.ts +292 -292
  594. package/types/ui/hooks.d.ts +13 -13
  595. package/types/ui/index.d.ts +96 -96
  596. package/types/ui/interceptor.d.ts +52 -52
  597. package/types/ui/menus.d.ts +77 -77
  598. package/types/ui/renderer.d.ts +1041 -1041
  599. package/types/ui/validators.d.ts +38 -38
  600. /package/es/icon/{iconfont.1778317220469.ttf → iconfont.1778465063324.ttf} +0 -0
  601. /package/es/icon/{iconfont.1778317220469.woff → iconfont.1778465063324.woff} +0 -0
  602. /package/es/icon/{iconfont.1778317220469.woff2 → iconfont.1778465063324.woff2} +0 -0
  603. /package/es/{iconfont.1778317220469.ttf → iconfont.1778465063324.ttf} +0 -0
  604. /package/es/{iconfont.1778317220469.woff → iconfont.1778465063324.woff} +0 -0
  605. /package/es/{iconfont.1778317220469.woff2 → iconfont.1778465063324.woff2} +0 -0
  606. /package/lib/icon/style/{iconfont.1778317220469.ttf → iconfont.1778465063324.ttf} +0 -0
  607. /package/lib/icon/style/{iconfont.1778317220469.woff → iconfont.1778465063324.woff} +0 -0
  608. /package/lib/icon/style/{iconfont.1778317220469.woff2 → iconfont.1778465063324.woff2} +0 -0
  609. /package/lib/{iconfont.1778317220469.ttf → iconfont.1778465063324.ttf} +0 -0
  610. /package/lib/{iconfont.1778317220469.woff → iconfont.1778465063324.woff} +0 -0
  611. /package/lib/{iconfont.1778317220469.woff2 → iconfont.1778465063324.woff2} +0 -0
@@ -1,841 +1,841 @@
1
- import { h, ref, computed, Teleport, resolveComponent, VNode, onUnmounted, reactive, nextTick, PropType, onMounted, inject } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { getConfig, globalEvents, getIcon, createEvent, useSize, renderer, usePermission, permission, renderEmptyElement } from '../../ui'
5
- import { getEventTargetNode, updatePanelPlacement } from '../../ui/src/dom'
6
- import { getFuncText, getLastZIndex, nextZIndex } from '../../ui/src/utils'
7
- import { getSlotVNs } from '../../ui/src/vn'
8
- import { warnLog } from '../../ui/src/log'
9
- import VxeTooltipComponent from '../../tooltip'
10
-
11
- import type { VxeButtonConstructor, VxeButtonPropTypes, VxeButtonEmits, ButtonReactData, ButtonMethods, VxeButtonDefines, ButtonPrivateRef, ButtonInternalData, VxeButtonGroupConstructor, VxeButtonGroupPrivateMethods, VxeDrawerConstructor, VxeDrawerMethods, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods, ValueOf, VxeTreeConstructor, VxeTreePrivateMethods } from '../../../types'
12
- import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
13
-
14
- const VxeButtonComponent = defineVxeComponent({
15
- name: 'VxeButton',
16
- props: {
17
- /**
18
- * 按钮类型
19
- */
20
- type: String as PropType<VxeButtonPropTypes.Type>,
21
- mode: String as PropType<VxeButtonPropTypes.Mode>,
22
- className: [String, Function] as PropType<VxeButtonPropTypes.ClassName>,
23
- popupClassName: [String, Function] as PropType<VxeButtonPropTypes.PopupClassName>,
24
- /**
25
- * 按钮尺寸
26
- */
27
- size: {
28
- type: String as PropType<VxeButtonPropTypes.Size>,
29
- default: () => getConfig().button.size || getConfig().size
30
- },
31
- zIndex: Number as PropType<VxeButtonPropTypes.ZIndex>,
32
- /**
33
- * 用来标识这一项
34
- */
35
- name: [String, Number] as PropType<VxeButtonPropTypes.Name>,
36
- routerLink: Object as PropType<VxeButtonPropTypes.RouterLink>,
37
- /**
38
- * 权限码
39
- */
40
- permissionCode: [String, Number] as PropType<VxeButtonPropTypes.PermissionCode>,
41
- /**
42
- * 按钮内容
43
- */
44
- content: String as PropType<VxeButtonPropTypes.Content>,
45
- /**
46
- * 固定显示下拉面板的方向
47
- */
48
- placement: String as PropType<VxeButtonPropTypes.Placement>,
49
- /**
50
- * 按钮状态
51
- */
52
- status: String as PropType<VxeButtonPropTypes.Status>,
53
- /**
54
- * 标题
55
- */
56
- title: String as PropType<VxeButtonPropTypes.Title>,
57
- shadow: Boolean as PropType<VxeButtonPropTypes.Shadow>,
58
- /**
59
- * 按钮的前缀图标,属于 prefix-icon 的简写
60
- */
61
- icon: String as PropType<VxeButtonPropTypes.Icon>,
62
- iconRender: Object as PropType<VxeButtonPropTypes.IconRender>,
63
- /**
64
- * 按钮的前缀图标
65
- */
66
- prefixIcon: String as PropType<VxeButtonPropTypes.PrefixIcon>,
67
- prefixRender: Object as PropType<VxeButtonPropTypes.PrefixRender>,
68
- /**
69
- * 按钮的后缀图标
70
- */
71
- suffixIcon: String as PropType<VxeButtonPropTypes.SuffixIcon>,
72
- suffixRender: Object as PropType<VxeButtonPropTypes.SuffixRender>,
73
- /**
74
- * 圆角边框
75
- */
76
- round: Boolean as PropType<VxeButtonPropTypes.Round>,
77
- /**
78
- * 圆角按钮
79
- */
80
- circle: Boolean as PropType<VxeButtonPropTypes.Circle>,
81
- /**
82
- * 是否禁用
83
- */
84
- disabled: Boolean as PropType<VxeButtonPropTypes.Disabled>,
85
- /**
86
- * 是否加载中
87
- */
88
- loading: Boolean as PropType<VxeButtonPropTypes.Loading>,
89
- trigger: {
90
- type: String as PropType<VxeButtonPropTypes.Trigger>,
91
- default: () => getConfig().button.trigger
92
- },
93
- align: String as PropType<VxeButtonPropTypes.Align>,
94
- prefixTooltip: Object as PropType<VxeButtonPropTypes.PrefixTooltip>,
95
- suffixTooltip: Object as PropType<VxeButtonPropTypes.SuffixTooltip>,
96
- options: Array as PropType<VxeButtonPropTypes.Options>,
97
- showDropdownIcon: {
98
- type: Boolean,
99
- default: () => getConfig().button.showDropdownIcon
100
- },
101
- /**
102
- * 在下拉面板关闭时销毁内容
103
- */
104
- destroyOnClose: {
105
- type: Boolean as PropType<VxeButtonPropTypes.DestroyOnClose>,
106
- default: () => getConfig().button.destroyOnClose
107
- },
108
- popupConfig: Object as PropType<VxeButtonPropTypes.PopupConfig>,
109
- /**
110
- * 是否将弹框容器插入于 body 内
111
- */
112
- transfer: {
113
- type: Boolean as PropType<VxeButtonPropTypes.Transfer>,
114
- default: null
115
- }
116
- },
117
- emits: [
118
- 'click',
119
- 'mouseenter',
120
- 'mouseleave',
121
- 'dropdown-click',
122
- 'dropdownClick',
123
- 'contextmenu'
124
- ] as VxeButtonEmits,
125
- setup (props, context) {
126
- const { slots, emit } = context
127
-
128
- const $xeModal = inject<(VxeModalConstructor & VxeModalMethods)| null>('$xeModal', null)
129
- const $xeDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
130
- const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
131
- const $xeTree = inject<(VxeTreeConstructor & VxeTreePrivateMethods) | null>('$xeTree', null)
132
- const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods)| null>('$xeForm', null)
133
- const $xeButtonGroup = inject<(VxeButtonGroupConstructor & VxeButtonGroupPrivateMethods) | null>('$xeButtonGroup', null)
134
-
135
- const xID = XEUtils.uniqueId()
136
-
137
- const { computeSize } = useSize(props)
138
-
139
- const { computePermissionInfo } = usePermission(props)
140
-
141
- const reactData = reactive<ButtonReactData>({
142
- initialized: false,
143
- visiblePanel: false,
144
- isAniVisible: false,
145
- isActivated: false,
146
- panelIndex: 0,
147
- panelStyle: {},
148
- panelPlacement: ''
149
- })
150
-
151
- const internalData: ButtonInternalData = {
152
- showTime: undefined,
153
- tooltipTimeout: undefined
154
- }
155
-
156
- const refElem = ref<HTMLDivElement>()
157
- const refButton = ref<HTMLButtonElement>()
158
- const refBtnPanel = ref<HTMLDivElement>()
159
-
160
- const refMaps: ButtonPrivateRef = {
161
- refElem
162
- }
163
-
164
- const $xeButton = {
165
- xID,
166
- props,
167
- context,
168
- reactData,
169
- internalData,
170
- getRefMaps: () => refMaps
171
- } as unknown as VxeButtonConstructor
172
-
173
- let buttonMethods = {} as ButtonMethods
174
-
175
- const computeBtnTransfer = computed(() => {
176
- const { transfer } = props
177
- const popupOpts = computePopupOpts.value
178
- if (XEUtils.isBoolean(popupOpts.transfer)) {
179
- return popupOpts.transfer
180
- }
181
- if (transfer === null) {
182
- const globalTransfer = getConfig().button.transfer
183
- if (XEUtils.isBoolean(globalTransfer)) {
184
- return globalTransfer
185
- }
186
- if ($xeTable || $xeTree || $xeModal || $xeDrawer || $xeForm) {
187
- return true
188
- }
189
- }
190
- return transfer
191
- })
192
-
193
- const computeBtnDisabled = computed(() => {
194
- const { disabled } = props
195
- const permissionInfo = computePermissionInfo.value
196
- return disabled || permissionInfo.disabled
197
- })
198
-
199
- const computeIsFormBtn = computed(() => {
200
- const { type } = props
201
- if (type) {
202
- return ['submit', 'reset', 'button'].indexOf(type) > -1
203
- }
204
- return false
205
- })
206
-
207
- const computeBtnMode = computed(() => {
208
- const { type, mode } = props
209
- if (mode === 'text' || type === 'text' || ($xeButtonGroup && $xeButtonGroup.props.mode === 'text')) {
210
- return 'text'
211
- }
212
- return 'button'
213
- })
214
-
215
- const computeBtnStatus = computed(() => {
216
- const { status } = props
217
- if (status) {
218
- return status
219
- }
220
- if ($xeButtonGroup) {
221
- return $xeButtonGroup.props.status
222
- }
223
- return ''
224
- })
225
-
226
- const computeBtnAlign = computed(() => {
227
- const { align } = props
228
- if (align) {
229
- return align
230
- }
231
- if ($xeButtonGroup) {
232
- return $xeButtonGroup.props.align
233
- }
234
- return false
235
- })
236
-
237
- const computeBtnRound = computed(() => {
238
- const { round } = props
239
- if (round) {
240
- return round
241
- }
242
- if ($xeButtonGroup) {
243
- return $xeButtonGroup.props.round
244
- }
245
- return false
246
- })
247
-
248
- const computeBtnCircle = computed(() => {
249
- const { circle } = props
250
- if (circle) {
251
- return circle
252
- }
253
- if ($xeButtonGroup) {
254
- return $xeButtonGroup.props.circle
255
- }
256
- return false
257
- })
258
-
259
- const computeDownBtnList = computed(() => {
260
- const { options } = props
261
- if (options) {
262
- return options.filter(item => {
263
- const { permissionCode } = item
264
- return !permissionCode || permission.checkVisible(permissionCode)
265
- })
266
- }
267
- return []
268
- })
269
-
270
- const computePopupOpts = computed(() => {
271
- return Object.assign({}, getConfig().button.popupConfig, props.popupConfig)
272
- })
273
-
274
- const computePrefixTipOpts = computed(() => {
275
- return Object.assign({}, getConfig().button.prefixTooltip, props.prefixTooltip)
276
- })
277
-
278
- const computeSuffixTipOpts = computed(() => {
279
- return Object.assign({}, getConfig().button.suffixTooltip, props.suffixTooltip)
280
- })
281
-
282
- const updateZindex = () => {
283
- const popupOpts = computePopupOpts.value
284
- const customZIndex = popupOpts.zIndex || props.zIndex
285
- if (customZIndex) {
286
- reactData.panelIndex = XEUtils.toNumber(customZIndex)
287
- } else if (reactData.panelIndex < getLastZIndex()) {
288
- reactData.panelIndex = nextZIndex()
289
- }
290
- }
291
-
292
- const updatePlacement = () => {
293
- const { placement } = props
294
- const { panelIndex } = reactData
295
- const targetElem = refButton.value
296
- const panelElem = refBtnPanel.value
297
- const btnTransfer = computeBtnTransfer.value
298
- const popupOpts = computePopupOpts.value
299
- const handleStyle = () => {
300
- const ppObj = updatePanelPlacement(targetElem, panelElem, {
301
- placement: popupOpts.placement || placement,
302
- defaultPlacement: (popupOpts as any).defaultPlacement,
303
- teleportTo: btnTransfer
304
- })
305
- const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
306
- zIndex: panelIndex
307
- })
308
- reactData.panelStyle = panelStyle
309
- reactData.panelPlacement = ppObj.placement
310
- }
311
- handleStyle()
312
- return nextTick().then(handleStyle)
313
- }
314
-
315
- const clickEvent = (evnt: Event) => {
316
- if ($xeButtonGroup) {
317
- $xeButtonGroup.handleClick({ name: props.name }, evnt)
318
- }
319
- dispatchEvent('click', { $event: evnt }, evnt)
320
- }
321
-
322
- const downBtnClickEvent = (params: VxeButtonDefines.ClickEventParams, option: VxeButtonDefines.DownButtonOption) => {
323
- const { $event } = params
324
- hidePanel()
325
- dispatchEvent('dropdown-click', { name: option.name, option }, $event)
326
- }
327
-
328
- const mousedownDropdownEvent = (evnt: MouseEvent) => {
329
- const isLeftBtn = evnt.button === 0
330
- if (isLeftBtn) {
331
- evnt.stopPropagation()
332
- }
333
- }
334
-
335
- const clickDropdownEvent = (evnt: Event) => {
336
- const dropdownElem = evnt.currentTarget
337
- const panelElem = refBtnPanel.value
338
- const { flag, targetElem } = getEventTargetNode(evnt, dropdownElem, 'vxe-button')
339
- if (flag) {
340
- if (panelElem) {
341
- panelElem.dataset.active = 'N'
342
- }
343
- reactData.visiblePanel = false
344
- setTimeout(() => {
345
- if (!panelElem || panelElem.dataset.active !== 'Y') {
346
- reactData.isAniVisible = false
347
- }
348
- }, 350)
349
- dispatchEvent('dropdown-click', { name: targetElem.getAttribute('name'), option: null }, evnt)
350
- }
351
- }
352
-
353
- const mouseenterDropdownEvent = () => {
354
- const panelElem = refBtnPanel.value
355
- if (panelElem) {
356
- panelElem.dataset.active = 'Y'
357
- reactData.isAniVisible = true
358
- setTimeout(() => {
359
- if (panelElem.dataset.active === 'Y') {
360
- reactData.visiblePanel = true
361
- updateZindex()
362
- updatePlacement()
363
- setTimeout(() => {
364
- if (reactData.visiblePanel) {
365
- updatePlacement()
366
- }
367
- }, 50)
368
- }
369
- }, 20)
370
- }
371
- }
372
-
373
- const mouseenterTargetEvent = (evnt: MouseEvent) => {
374
- const { loading } = props
375
- const btnDisabled = computeBtnDisabled.value
376
- if (!(btnDisabled || loading)) {
377
- openPanel()
378
- mouseenterEvent(evnt)
379
- }
380
- }
381
-
382
- const mouseleaveTargetEvent = (evnt: MouseEvent) => {
383
- hidePanel()
384
- mouseleaveEvent(evnt)
385
- }
386
-
387
- const mouseenterEvent = (evnt: MouseEvent) => {
388
- dispatchEvent('mouseenter', {}, evnt)
389
- }
390
-
391
- const mouseleaveEvent = (evnt: MouseEvent) => {
392
- dispatchEvent('mouseleave', {}, evnt)
393
- }
394
-
395
- const contextmenuEvent = (evnt: MouseEvent) => {
396
- dispatchEvent('contextmenu', {}, evnt)
397
- }
398
-
399
- const clickTargetEvent = (evnt: MouseEvent) => {
400
- const { loading, trigger } = props
401
- const btnDisabled = computeBtnDisabled.value
402
- if (!(btnDisabled || loading)) {
403
- if (trigger === 'click') {
404
- if (reactData.visiblePanel) {
405
- hidePanel()
406
- } else {
407
- openPanel()
408
- }
409
- }
410
- clickEvent(evnt)
411
- }
412
- }
413
-
414
- const openPanel = () => {
415
- const { trigger } = props
416
- const panelElem = refBtnPanel.value
417
- if (panelElem) {
418
- panelElem.dataset.active = 'Y'
419
- if (!reactData.initialized) {
420
- reactData.initialized = true
421
- }
422
- internalData.showTime = setTimeout(() => {
423
- if (panelElem.dataset.active === 'Y') {
424
- mouseenterDropdownEvent()
425
- } else {
426
- reactData.isAniVisible = false
427
- }
428
- }, trigger === 'click' ? 50 : 250)
429
- }
430
- return nextTick()
431
- }
432
-
433
- const hidePanel = () => {
434
- const panelElem = refBtnPanel.value
435
- clearTimeout(internalData.showTime)
436
- if (panelElem) {
437
- panelElem.dataset.active = 'N'
438
- setTimeout(() => {
439
- if (panelElem.dataset.active !== 'Y') {
440
- reactData.visiblePanel = false
441
- setTimeout(() => {
442
- if (panelElem.dataset.active !== 'Y') {
443
- reactData.isAniVisible = false
444
- }
445
- }, 350)
446
- }
447
- }, 100)
448
- } else {
449
- reactData.isAniVisible = false
450
- reactData.visiblePanel = false
451
- }
452
- return nextTick()
453
- }
454
-
455
- const mouseleaveDropdownEvent = () => {
456
- hidePanel()
457
- }
458
-
459
- const renderTooltipIcon = (tipOpts: VxeButtonPropTypes.PrefixTooltip | VxeButtonPropTypes.SuffixTooltip, type: 'prefix' | 'suffix') => {
460
- return h(VxeTooltipComponent, {
461
- useHTML: tipOpts.useHTML,
462
- content: tipOpts.content,
463
- enterable: tipOpts.enterable,
464
- theme: tipOpts.theme
465
- }, {
466
- default () {
467
- return h('span', {
468
- class: `vxe-button--item vxe-button--tooltip-${type}-icon`
469
- }, [
470
- h('i', {
471
- class: tipOpts.icon || getIcon().BUTTON_TOOLTIP_ICON
472
- })
473
- ])
474
- }
475
- })
476
- }
477
-
478
- const renderContent = () => {
479
- const { content, suffixIcon, loading, prefixTooltip, suffixTooltip, suffixRender } = props
480
- const prefixIcon = props.prefixIcon || props.icon
481
- const prefixRender = props.prefixRender || props.iconRender
482
- const prefixTipOpts = computePrefixTipOpts.value
483
- const suffixTipOpts = computeSuffixTipOpts.value
484
- const prefixIconSlot = slots.prefix || slots.icon
485
- const suffixIconSlot = slots.suffix
486
- const defaultSlot = slots.default
487
- const contVNs: VNode[] = []
488
- if (prefixTooltip) {
489
- contVNs.push(
490
- renderTooltipIcon(prefixTipOpts, 'prefix')
491
- )
492
- }
493
- if (loading) {
494
- contVNs.push(
495
- h('i', {
496
- class: ['vxe-button--item vxe-button--loading-icon', getIcon().BUTTON_LOADING]
497
- })
498
- )
499
- } else if (prefixIconSlot) {
500
- contVNs.push(
501
- h('span', {
502
- class: 'vxe-button--item vxe-button--custom-prefix-icon'
503
- }, prefixIconSlot({}))
504
- )
505
- } else if (prefixRender) {
506
- const compConf = renderer.get(prefixRender.name)
507
- const pIconMethod = compConf ? compConf.renderButtonPrefix : null
508
- contVNs.push(
509
- h('span', {
510
- class: ['vxe-button--item vxe-button--custom-prefix-icon']
511
- }, pIconMethod ? getSlotVNs(pIconMethod(prefixRender, { $button: $xeButton })) : [])
512
- )
513
- } else if (prefixIcon) {
514
- contVNs.push(
515
- h('i', {
516
- class: ['vxe-button--item vxe-button--prefix-icon', prefixIcon]
517
- })
518
- )
519
- }
520
-
521
- if (defaultSlot) {
522
- contVNs.push(
523
- h('span', {
524
- class: 'vxe-button--item vxe-button--content'
525
- }, defaultSlot({}))
526
- )
527
- } else if (content) {
528
- contVNs.push(
529
- h('span', {
530
- class: 'vxe-button--item vxe-button--content'
531
- }, getFuncText(content))
532
- )
533
- }
534
-
535
- if (suffixIconSlot) {
536
- contVNs.push(
537
- h('span', {
538
- class: 'vxe-button--item vxe-button--custom-suffix-icon'
539
- }, suffixIconSlot({}))
540
- )
541
- } else if (suffixRender) {
542
- const compConf = renderer.get(suffixRender.name)
543
- const sIconMethod = compConf ? compConf.renderButtonSuffix : null
544
- contVNs.push(
545
- h('span', {
546
- class: ['vxe-button--item vxe-button--custom-suffix-icon']
547
- }, sIconMethod ? getSlotVNs(sIconMethod(suffixRender, { $button: $xeButton })) : [])
548
- )
549
- } else if (suffixIcon) {
550
- contVNs.push(
551
- h('i', {
552
- class: ['vxe-button--item vxe-button--suffix-icon', suffixIcon]
553
- })
554
- )
555
- }
556
- if (suffixTooltip) {
557
- contVNs.push(
558
- renderTooltipIcon(suffixTipOpts, 'suffix')
559
- )
560
- }
561
- return contVNs
562
- }
563
-
564
- const dispatchEvent = (type: ValueOf<VxeButtonEmits>, params: Record<string, any>, evnt: Event | null) => {
565
- emit(type, createEvent(evnt, { $button: $xeButton }, params))
566
- }
567
-
568
- buttonMethods = {
569
- dispatchEvent,
570
- openPanel,
571
- closePanel: hidePanel,
572
- focus () {
573
- const btnElem = refButton.value
574
- if (btnElem) {
575
- btnElem.focus()
576
- }
577
- return nextTick()
578
- },
579
- blur () {
580
- const btnElem = refButton.value
581
- if (btnElem) {
582
- btnElem.blur()
583
- }
584
- return nextTick()
585
- }
586
- }
587
-
588
- const handleGlobalMousewheelEvent = (evnt: Event) => {
589
- const panelElem = refBtnPanel.value
590
- if (reactData.visiblePanel && !getEventTargetNode(evnt, panelElem).flag) {
591
- hidePanel()
592
- }
593
- }
594
-
595
- const handleGlobalMousedownEvent = (evnt: MouseEvent) => {
596
- const btnDisabled = computeBtnDisabled.value
597
- const { visiblePanel } = reactData
598
- if (!btnDisabled) {
599
- const el = refElem.value
600
- const panelElem = refBtnPanel.value
601
- reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
602
- if (visiblePanel && !reactData.isActivated) {
603
- hidePanel()
604
- }
605
- }
606
- }
607
-
608
- const handleGlobalResizeEvent = () => {
609
- const { visiblePanel } = reactData
610
- if (visiblePanel) {
611
- updatePlacement()
612
- }
613
- }
614
-
615
- Object.assign($xeButton, buttonMethods)
616
-
617
- const renderVN = () => {
618
- const { className, trigger, title, routerLink, type, destroyOnClose, name, loading, shadow, showDropdownIcon } = props
619
- const { initialized, isAniVisible, visiblePanel } = reactData
620
- const isFormBtn = computeIsFormBtn.value
621
- const btnMode = computeBtnMode.value
622
- const btnStatus = computeBtnStatus.value
623
- const btnRound = computeBtnRound.value
624
- const btnAlign = computeBtnAlign.value
625
- const btnCircle = computeBtnCircle.value
626
- const btnTransfer = computeBtnTransfer.value
627
- const btnDisabled = computeBtnDisabled.value
628
- const permissionInfo = computePermissionInfo.value
629
- const downBtnList = computeDownBtnList.value
630
- const popupOpts = computePopupOpts.value
631
- const vSize = computeSize.value
632
- const dropdownsSlot = slots.dropdowns
633
- const ppClassName = popupOpts.className || props.popupClassName
634
-
635
- if (!permissionInfo.visible) {
636
- return renderEmptyElement($xeButton)
637
- }
638
- if (dropdownsSlot || downBtnList.length) {
639
- const btnOns: Record<string, any> = {
640
- onContextmenu: contextmenuEvent
641
- }
642
- const panelOns: Record<string, any> = {}
643
- if (trigger === 'hover') {
644
- // hover 触发
645
- btnOns.onMouseenter = mouseenterTargetEvent
646
- btnOns.onMouseleave = mouseleaveTargetEvent
647
-
648
- panelOns.onMouseenter = mouseenterDropdownEvent
649
- panelOns.onMouseleave = mouseleaveDropdownEvent
650
- }
651
- return h('div', {
652
- ref: refElem,
653
- class: ['vxe-button--dropdown', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
654
- [`size--${vSize}`]: vSize,
655
- 'is--active': visiblePanel
656
- }]
657
- }, [
658
- routerLink
659
- ? h(resolveComponent('router-link'), {
660
- ref: refButton,
661
- class: ['vxe-button', 'vxe-button--link', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
662
- [`size--${vSize}`]: vSize,
663
- [`theme--${btnStatus}`]: btnStatus,
664
- 'is--round': btnRound,
665
- 'is--circle': btnCircle,
666
- 'is--shadow': shadow,
667
- 'is--disabled': btnDisabled || loading,
668
- 'is--loading': loading
669
- }],
670
- title,
671
- name,
672
- type: isFormBtn ? type : 'button',
673
- disabled: btnDisabled || loading,
674
- to: routerLink,
675
- onClick: clickTargetEvent,
676
- ...btnOns
677
- }, {
678
- default () {
679
- return renderContent().concat(showDropdownIcon
680
- ? [
681
- h('i', {
682
- class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
683
- })
684
- ]
685
- : [])
686
- }
687
- })
688
- : h('button', {
689
- ref: refButton,
690
- class: ['vxe-button', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
691
- [`size--${vSize}`]: vSize,
692
- [`theme--${btnStatus}`]: btnStatus,
693
- 'is--round': btnRound,
694
- 'is--circle': btnCircle,
695
- 'is--shadow': shadow,
696
- 'is--disabled': btnDisabled || loading,
697
- 'is--loading': loading
698
- }],
699
- title,
700
- name,
701
- type: isFormBtn ? type : 'button',
702
- disabled: btnDisabled || loading,
703
- onClick: clickTargetEvent,
704
- ...btnOns
705
- }, renderContent().concat(showDropdownIcon
706
- ? [
707
- h('i', {
708
- class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
709
- })
710
- ]
711
- : [])),
712
- h(Teleport, {
713
- to: 'body',
714
- disabled: btnTransfer ? !initialized : true
715
- }, [
716
- h('div', {
717
- ref: refBtnPanel,
718
- class: ['vxe-button--dropdown-panel', ppClassName ? (XEUtils.isFunction(ppClassName) ? ppClassName({ $button: $xeButton }) : ppClassName) : '', {
719
- [`size--${vSize}`]: vSize,
720
- 'is--transfer': btnTransfer,
721
- 'ani--leave': isAniVisible,
722
- 'ani--enter': visiblePanel
723
- }],
724
- placement: reactData.panelPlacement,
725
- style: reactData.panelStyle,
726
- ...panelOns
727
- }, initialized && (visiblePanel || isAniVisible)
728
- ? [
729
- dropdownsSlot
730
- ? h('div', {
731
- class: 'vxe-button--dropdown-wrapper',
732
- onMousedown: mousedownDropdownEvent,
733
- onClick: clickDropdownEvent
734
- }, initialized && (destroyOnClose ? (visiblePanel || isAniVisible) : true) ? dropdownsSlot({}) : [])
735
- : h('div', {
736
- class: 'vxe-button--dropdown-wrapper'
737
- }, initialized && (destroyOnClose ? (visiblePanel || isAniVisible) : true)
738
- ? downBtnList.map((option, i) => {
739
- return h(VxeButtonComponent, {
740
- key: i,
741
- type: option.type,
742
- mode: option.mode || btnMode,
743
- className: option.className,
744
- name: option.name,
745
- routerLink: option.routerLink,
746
- permissionCode: option.permissionCode,
747
- title: option.title,
748
- content: option.content,
749
- status: option.status,
750
- icon: option.icon,
751
- round: XEUtils.isBoolean(option.round) ? option.round : (btnMode === 'text' ? false : btnRound),
752
- circle: XEUtils.isBoolean(option.circle) ? option.circle : (btnMode === 'text' ? false : btnCircle),
753
- disabled: option.disabled,
754
- loading: option.loading,
755
- align: option.align,
756
- onClick (params: VxeButtonDefines.ClickEventParams) {
757
- downBtnClickEvent(params, option)
758
- }
759
- })
760
- })
761
- : [])
762
- ]
763
- : [])
764
- ])
765
- ])
766
- }
767
- if (routerLink) {
768
- return h(resolveComponent('router-link'), {
769
- ref: refButton,
770
- class: ['vxe-button', 'vxe-button--link', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
771
- [`size--${vSize}`]: vSize,
772
- [`theme--${btnStatus}`]: btnStatus,
773
- 'is--round': btnRound,
774
- 'is--circle': btnCircle,
775
- 'is--shadow': shadow,
776
- 'is--disabled': btnDisabled || loading,
777
- 'is--loading': loading
778
- }],
779
- title,
780
- name,
781
- type: isFormBtn ? type : 'button',
782
- disabled: btnDisabled || loading,
783
- to: routerLink,
784
- onClick: clickEvent,
785
- onMouseenter: mouseenterEvent,
786
- onMouseleave: mouseleaveEvent,
787
- onContextmenu: contextmenuEvent
788
- }, {
789
- default () {
790
- return renderContent()
791
- }
792
- })
793
- }
794
- return h('button', {
795
- ref: refButton,
796
- class: ['vxe-button', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
797
- [`size--${vSize}`]: vSize,
798
- [`theme--${btnStatus}`]: btnStatus,
799
- 'is--round': btnRound,
800
- 'is--circle': btnCircle,
801
- 'is--shadow': shadow,
802
- 'is--disabled': btnDisabled || loading,
803
- 'is--loading': loading
804
- }],
805
- title,
806
- name,
807
- type: isFormBtn ? type : 'button',
808
- disabled: btnDisabled || loading,
809
- onClick: clickEvent,
810
- onMouseenter: mouseenterEvent,
811
- onMouseleave: mouseleaveEvent,
812
- onContextmenu: contextmenuEvent
813
- }, renderContent())
814
- }
815
-
816
- $xeButton.renderVN = renderVN
817
-
818
- onMounted(() => {
819
- if (props.type === 'text') {
820
- warnLog('vxe.error.delProp', ['[button] type=text', 'mode=text'])
821
- }
822
-
823
- globalEvents.on($xeButton, 'mousewheel', handleGlobalMousewheelEvent)
824
- globalEvents.on($xeButton, 'mousedown', handleGlobalMousedownEvent)
825
- globalEvents.on($xeButton, 'resize', handleGlobalResizeEvent)
826
- })
827
-
828
- onUnmounted(() => {
829
- globalEvents.off($xeButton, 'mousewheel')
830
- globalEvents.off($xeButton, 'mousedown')
831
- globalEvents.off($xeButton, 'resize')
832
- })
833
-
834
- return $xeButton
835
- },
836
- render () {
837
- return this.renderVN()
838
- }
839
- })
840
-
841
- export default VxeButtonComponent
1
+ import { h, ref, computed, Teleport, resolveComponent, VNode, onUnmounted, reactive, nextTick, PropType, onMounted, inject } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { getConfig, globalEvents, getIcon, createEvent, useSize, renderer, usePermission, permission, renderEmptyElement } from '../../ui'
5
+ import { getEventTargetNode, updatePanelPlacement } from '../../ui/src/dom'
6
+ import { getFuncText, getLastZIndex, nextZIndex } from '../../ui/src/utils'
7
+ import { getSlotVNs } from '../../ui/src/vn'
8
+ import { warnLog } from '../../ui/src/log'
9
+ import VxeTooltipComponent from '../../tooltip'
10
+
11
+ import type { VxeButtonConstructor, VxeButtonPropTypes, VxeButtonEmits, ButtonReactData, ButtonMethods, VxeButtonDefines, ButtonPrivateRef, ButtonInternalData, VxeButtonGroupConstructor, VxeButtonGroupPrivateMethods, VxeDrawerConstructor, VxeDrawerMethods, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods, ValueOf, VxeTreeConstructor, VxeTreePrivateMethods } from '../../../types'
12
+ import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
13
+
14
+ const VxeButtonComponent = defineVxeComponent({
15
+ name: 'VxeButton',
16
+ props: {
17
+ /**
18
+ * 按钮类型
19
+ */
20
+ type: String as PropType<VxeButtonPropTypes.Type>,
21
+ mode: String as PropType<VxeButtonPropTypes.Mode>,
22
+ className: [String, Function] as PropType<VxeButtonPropTypes.ClassName>,
23
+ popupClassName: [String, Function] as PropType<VxeButtonPropTypes.PopupClassName>,
24
+ /**
25
+ * 按钮尺寸
26
+ */
27
+ size: {
28
+ type: String as PropType<VxeButtonPropTypes.Size>,
29
+ default: () => getConfig().button.size || getConfig().size
30
+ },
31
+ zIndex: Number as PropType<VxeButtonPropTypes.ZIndex>,
32
+ /**
33
+ * 用来标识这一项
34
+ */
35
+ name: [String, Number] as PropType<VxeButtonPropTypes.Name>,
36
+ routerLink: Object as PropType<VxeButtonPropTypes.RouterLink>,
37
+ /**
38
+ * 权限码
39
+ */
40
+ permissionCode: [String, Number] as PropType<VxeButtonPropTypes.PermissionCode>,
41
+ /**
42
+ * 按钮内容
43
+ */
44
+ content: String as PropType<VxeButtonPropTypes.Content>,
45
+ /**
46
+ * 固定显示下拉面板的方向
47
+ */
48
+ placement: String as PropType<VxeButtonPropTypes.Placement>,
49
+ /**
50
+ * 按钮状态
51
+ */
52
+ status: String as PropType<VxeButtonPropTypes.Status>,
53
+ /**
54
+ * 标题
55
+ */
56
+ title: String as PropType<VxeButtonPropTypes.Title>,
57
+ shadow: Boolean as PropType<VxeButtonPropTypes.Shadow>,
58
+ /**
59
+ * 按钮的前缀图标,属于 prefix-icon 的简写
60
+ */
61
+ icon: String as PropType<VxeButtonPropTypes.Icon>,
62
+ iconRender: Object as PropType<VxeButtonPropTypes.IconRender>,
63
+ /**
64
+ * 按钮的前缀图标
65
+ */
66
+ prefixIcon: String as PropType<VxeButtonPropTypes.PrefixIcon>,
67
+ prefixRender: Object as PropType<VxeButtonPropTypes.PrefixRender>,
68
+ /**
69
+ * 按钮的后缀图标
70
+ */
71
+ suffixIcon: String as PropType<VxeButtonPropTypes.SuffixIcon>,
72
+ suffixRender: Object as PropType<VxeButtonPropTypes.SuffixRender>,
73
+ /**
74
+ * 圆角边框
75
+ */
76
+ round: Boolean as PropType<VxeButtonPropTypes.Round>,
77
+ /**
78
+ * 圆角按钮
79
+ */
80
+ circle: Boolean as PropType<VxeButtonPropTypes.Circle>,
81
+ /**
82
+ * 是否禁用
83
+ */
84
+ disabled: Boolean as PropType<VxeButtonPropTypes.Disabled>,
85
+ /**
86
+ * 是否加载中
87
+ */
88
+ loading: Boolean as PropType<VxeButtonPropTypes.Loading>,
89
+ trigger: {
90
+ type: String as PropType<VxeButtonPropTypes.Trigger>,
91
+ default: () => getConfig().button.trigger
92
+ },
93
+ align: String as PropType<VxeButtonPropTypes.Align>,
94
+ prefixTooltip: Object as PropType<VxeButtonPropTypes.PrefixTooltip>,
95
+ suffixTooltip: Object as PropType<VxeButtonPropTypes.SuffixTooltip>,
96
+ options: Array as PropType<VxeButtonPropTypes.Options>,
97
+ showDropdownIcon: {
98
+ type: Boolean,
99
+ default: () => getConfig().button.showDropdownIcon
100
+ },
101
+ /**
102
+ * 在下拉面板关闭时销毁内容
103
+ */
104
+ destroyOnClose: {
105
+ type: Boolean as PropType<VxeButtonPropTypes.DestroyOnClose>,
106
+ default: () => getConfig().button.destroyOnClose
107
+ },
108
+ popupConfig: Object as PropType<VxeButtonPropTypes.PopupConfig>,
109
+ /**
110
+ * 是否将弹框容器插入于 body 内
111
+ */
112
+ transfer: {
113
+ type: Boolean as PropType<VxeButtonPropTypes.Transfer>,
114
+ default: null
115
+ }
116
+ },
117
+ emits: [
118
+ 'click',
119
+ 'mouseenter',
120
+ 'mouseleave',
121
+ 'dropdown-click',
122
+ 'dropdownClick',
123
+ 'contextmenu'
124
+ ] as VxeButtonEmits,
125
+ setup (props, context) {
126
+ const { slots, emit } = context
127
+
128
+ const $xeModal = inject<(VxeModalConstructor & VxeModalMethods)| null>('$xeModal', null)
129
+ const $xeDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
130
+ const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
131
+ const $xeTree = inject<(VxeTreeConstructor & VxeTreePrivateMethods) | null>('$xeTree', null)
132
+ const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods)| null>('$xeForm', null)
133
+ const $xeButtonGroup = inject<(VxeButtonGroupConstructor & VxeButtonGroupPrivateMethods) | null>('$xeButtonGroup', null)
134
+
135
+ const xID = XEUtils.uniqueId()
136
+
137
+ const { computeSize } = useSize(props)
138
+
139
+ const { computePermissionInfo } = usePermission(props)
140
+
141
+ const reactData = reactive<ButtonReactData>({
142
+ initialized: false,
143
+ visiblePanel: false,
144
+ isAniVisible: false,
145
+ isActivated: false,
146
+ panelIndex: 0,
147
+ panelStyle: {},
148
+ panelPlacement: ''
149
+ })
150
+
151
+ const internalData: ButtonInternalData = {
152
+ showTime: undefined,
153
+ tooltipTimeout: undefined
154
+ }
155
+
156
+ const refElem = ref<HTMLDivElement>()
157
+ const refButton = ref<HTMLButtonElement>()
158
+ const refBtnPanel = ref<HTMLDivElement>()
159
+
160
+ const refMaps: ButtonPrivateRef = {
161
+ refElem
162
+ }
163
+
164
+ const $xeButton = {
165
+ xID,
166
+ props,
167
+ context,
168
+ reactData,
169
+ internalData,
170
+ getRefMaps: () => refMaps
171
+ } as unknown as VxeButtonConstructor
172
+
173
+ let buttonMethods = {} as ButtonMethods
174
+
175
+ const computeBtnTransfer = computed(() => {
176
+ const { transfer } = props
177
+ const popupOpts = computePopupOpts.value
178
+ if (XEUtils.isBoolean(popupOpts.transfer)) {
179
+ return popupOpts.transfer
180
+ }
181
+ if (transfer === null) {
182
+ const globalTransfer = getConfig().button.transfer
183
+ if (XEUtils.isBoolean(globalTransfer)) {
184
+ return globalTransfer
185
+ }
186
+ if ($xeTable || $xeTree || $xeModal || $xeDrawer || $xeForm) {
187
+ return true
188
+ }
189
+ }
190
+ return transfer
191
+ })
192
+
193
+ const computeBtnDisabled = computed(() => {
194
+ const { disabled } = props
195
+ const permissionInfo = computePermissionInfo.value
196
+ return disabled || permissionInfo.disabled
197
+ })
198
+
199
+ const computeIsFormBtn = computed(() => {
200
+ const { type } = props
201
+ if (type) {
202
+ return ['submit', 'reset', 'button'].indexOf(type) > -1
203
+ }
204
+ return false
205
+ })
206
+
207
+ const computeBtnMode = computed(() => {
208
+ const { type, mode } = props
209
+ if (mode === 'text' || type === 'text' || ($xeButtonGroup && $xeButtonGroup.props.mode === 'text')) {
210
+ return 'text'
211
+ }
212
+ return 'button'
213
+ })
214
+
215
+ const computeBtnStatus = computed(() => {
216
+ const { status } = props
217
+ if (status) {
218
+ return status
219
+ }
220
+ if ($xeButtonGroup) {
221
+ return $xeButtonGroup.props.status
222
+ }
223
+ return ''
224
+ })
225
+
226
+ const computeBtnAlign = computed(() => {
227
+ const { align } = props
228
+ if (align) {
229
+ return align
230
+ }
231
+ if ($xeButtonGroup) {
232
+ return $xeButtonGroup.props.align
233
+ }
234
+ return false
235
+ })
236
+
237
+ const computeBtnRound = computed(() => {
238
+ const { round } = props
239
+ if (round) {
240
+ return round
241
+ }
242
+ if ($xeButtonGroup) {
243
+ return $xeButtonGroup.props.round
244
+ }
245
+ return false
246
+ })
247
+
248
+ const computeBtnCircle = computed(() => {
249
+ const { circle } = props
250
+ if (circle) {
251
+ return circle
252
+ }
253
+ if ($xeButtonGroup) {
254
+ return $xeButtonGroup.props.circle
255
+ }
256
+ return false
257
+ })
258
+
259
+ const computeDownBtnList = computed(() => {
260
+ const { options } = props
261
+ if (options) {
262
+ return options.filter(item => {
263
+ const { permissionCode } = item
264
+ return !permissionCode || permission.checkVisible(permissionCode)
265
+ })
266
+ }
267
+ return []
268
+ })
269
+
270
+ const computePopupOpts = computed(() => {
271
+ return Object.assign({}, getConfig().button.popupConfig, props.popupConfig)
272
+ })
273
+
274
+ const computePrefixTipOpts = computed(() => {
275
+ return Object.assign({}, getConfig().button.prefixTooltip, props.prefixTooltip)
276
+ })
277
+
278
+ const computeSuffixTipOpts = computed(() => {
279
+ return Object.assign({}, getConfig().button.suffixTooltip, props.suffixTooltip)
280
+ })
281
+
282
+ const updateZindex = () => {
283
+ const popupOpts = computePopupOpts.value
284
+ const customZIndex = popupOpts.zIndex || props.zIndex
285
+ if (customZIndex) {
286
+ reactData.panelIndex = XEUtils.toNumber(customZIndex)
287
+ } else if (reactData.panelIndex < getLastZIndex()) {
288
+ reactData.panelIndex = nextZIndex()
289
+ }
290
+ }
291
+
292
+ const updatePlacement = () => {
293
+ const { placement } = props
294
+ const { panelIndex } = reactData
295
+ const targetElem = refButton.value
296
+ const panelElem = refBtnPanel.value
297
+ const btnTransfer = computeBtnTransfer.value
298
+ const popupOpts = computePopupOpts.value
299
+ const handleStyle = () => {
300
+ const ppObj = updatePanelPlacement(targetElem, panelElem, {
301
+ placement: popupOpts.placement || placement,
302
+ defaultPlacement: (popupOpts as any).defaultPlacement,
303
+ teleportTo: btnTransfer
304
+ })
305
+ const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
306
+ zIndex: panelIndex
307
+ })
308
+ reactData.panelStyle = panelStyle
309
+ reactData.panelPlacement = ppObj.placement
310
+ }
311
+ handleStyle()
312
+ return nextTick().then(handleStyle)
313
+ }
314
+
315
+ const clickEvent = (evnt: Event) => {
316
+ if ($xeButtonGroup) {
317
+ $xeButtonGroup.handleClick({ name: props.name }, evnt)
318
+ }
319
+ dispatchEvent('click', { $event: evnt }, evnt)
320
+ }
321
+
322
+ const downBtnClickEvent = (params: VxeButtonDefines.ClickEventParams, option: VxeButtonDefines.DownButtonOption) => {
323
+ const { $event } = params
324
+ hidePanel()
325
+ dispatchEvent('dropdown-click', { name: option.name, option }, $event)
326
+ }
327
+
328
+ const mousedownDropdownEvent = (evnt: MouseEvent) => {
329
+ const isLeftBtn = evnt.button === 0
330
+ if (isLeftBtn) {
331
+ evnt.stopPropagation()
332
+ }
333
+ }
334
+
335
+ const clickDropdownEvent = (evnt: Event) => {
336
+ const dropdownElem = evnt.currentTarget
337
+ const panelElem = refBtnPanel.value
338
+ const { flag, targetElem } = getEventTargetNode(evnt, dropdownElem, 'vxe-button')
339
+ if (flag) {
340
+ if (panelElem) {
341
+ panelElem.dataset.active = 'N'
342
+ }
343
+ reactData.visiblePanel = false
344
+ setTimeout(() => {
345
+ if (!panelElem || panelElem.dataset.active !== 'Y') {
346
+ reactData.isAniVisible = false
347
+ }
348
+ }, 350)
349
+ dispatchEvent('dropdown-click', { name: targetElem.getAttribute('name'), option: null }, evnt)
350
+ }
351
+ }
352
+
353
+ const mouseenterDropdownEvent = () => {
354
+ const panelElem = refBtnPanel.value
355
+ if (panelElem) {
356
+ panelElem.dataset.active = 'Y'
357
+ reactData.isAniVisible = true
358
+ setTimeout(() => {
359
+ if (panelElem.dataset.active === 'Y') {
360
+ reactData.visiblePanel = true
361
+ updateZindex()
362
+ updatePlacement()
363
+ setTimeout(() => {
364
+ if (reactData.visiblePanel) {
365
+ updatePlacement()
366
+ }
367
+ }, 50)
368
+ }
369
+ }, 20)
370
+ }
371
+ }
372
+
373
+ const mouseenterTargetEvent = (evnt: MouseEvent) => {
374
+ const { loading } = props
375
+ const btnDisabled = computeBtnDisabled.value
376
+ if (!(btnDisabled || loading)) {
377
+ openPanel()
378
+ mouseenterEvent(evnt)
379
+ }
380
+ }
381
+
382
+ const mouseleaveTargetEvent = (evnt: MouseEvent) => {
383
+ hidePanel()
384
+ mouseleaveEvent(evnt)
385
+ }
386
+
387
+ const mouseenterEvent = (evnt: MouseEvent) => {
388
+ dispatchEvent('mouseenter', {}, evnt)
389
+ }
390
+
391
+ const mouseleaveEvent = (evnt: MouseEvent) => {
392
+ dispatchEvent('mouseleave', {}, evnt)
393
+ }
394
+
395
+ const contextmenuEvent = (evnt: MouseEvent) => {
396
+ dispatchEvent('contextmenu', {}, evnt)
397
+ }
398
+
399
+ const clickTargetEvent = (evnt: MouseEvent) => {
400
+ const { loading, trigger } = props
401
+ const btnDisabled = computeBtnDisabled.value
402
+ if (!(btnDisabled || loading)) {
403
+ if (trigger === 'click') {
404
+ if (reactData.visiblePanel) {
405
+ hidePanel()
406
+ } else {
407
+ openPanel()
408
+ }
409
+ }
410
+ clickEvent(evnt)
411
+ }
412
+ }
413
+
414
+ const openPanel = () => {
415
+ const { trigger } = props
416
+ const panelElem = refBtnPanel.value
417
+ if (panelElem) {
418
+ panelElem.dataset.active = 'Y'
419
+ if (!reactData.initialized) {
420
+ reactData.initialized = true
421
+ }
422
+ internalData.showTime = setTimeout(() => {
423
+ if (panelElem.dataset.active === 'Y') {
424
+ mouseenterDropdownEvent()
425
+ } else {
426
+ reactData.isAniVisible = false
427
+ }
428
+ }, trigger === 'click' ? 50 : 250)
429
+ }
430
+ return nextTick()
431
+ }
432
+
433
+ const hidePanel = () => {
434
+ const panelElem = refBtnPanel.value
435
+ clearTimeout(internalData.showTime)
436
+ if (panelElem) {
437
+ panelElem.dataset.active = 'N'
438
+ setTimeout(() => {
439
+ if (panelElem.dataset.active !== 'Y') {
440
+ reactData.visiblePanel = false
441
+ setTimeout(() => {
442
+ if (panelElem.dataset.active !== 'Y') {
443
+ reactData.isAniVisible = false
444
+ }
445
+ }, 350)
446
+ }
447
+ }, 100)
448
+ } else {
449
+ reactData.isAniVisible = false
450
+ reactData.visiblePanel = false
451
+ }
452
+ return nextTick()
453
+ }
454
+
455
+ const mouseleaveDropdownEvent = () => {
456
+ hidePanel()
457
+ }
458
+
459
+ const renderTooltipIcon = (tipOpts: VxeButtonPropTypes.PrefixTooltip | VxeButtonPropTypes.SuffixTooltip, type: 'prefix' | 'suffix') => {
460
+ return h(VxeTooltipComponent, {
461
+ useHTML: tipOpts.useHTML,
462
+ content: tipOpts.content,
463
+ enterable: tipOpts.enterable,
464
+ theme: tipOpts.theme
465
+ }, {
466
+ default () {
467
+ return h('span', {
468
+ class: `vxe-button--item vxe-button--tooltip-${type}-icon`
469
+ }, [
470
+ h('i', {
471
+ class: tipOpts.icon || getIcon().BUTTON_TOOLTIP_ICON
472
+ })
473
+ ])
474
+ }
475
+ })
476
+ }
477
+
478
+ const renderContent = () => {
479
+ const { content, suffixIcon, loading, prefixTooltip, suffixTooltip, suffixRender } = props
480
+ const prefixIcon = props.prefixIcon || props.icon
481
+ const prefixRender = props.prefixRender || props.iconRender
482
+ const prefixTipOpts = computePrefixTipOpts.value
483
+ const suffixTipOpts = computeSuffixTipOpts.value
484
+ const prefixIconSlot = slots.prefix || slots.icon
485
+ const suffixIconSlot = slots.suffix
486
+ const defaultSlot = slots.default
487
+ const contVNs: VNode[] = []
488
+ if (prefixTooltip) {
489
+ contVNs.push(
490
+ renderTooltipIcon(prefixTipOpts, 'prefix')
491
+ )
492
+ }
493
+ if (loading) {
494
+ contVNs.push(
495
+ h('i', {
496
+ class: ['vxe-button--item vxe-button--loading-icon', getIcon().BUTTON_LOADING]
497
+ })
498
+ )
499
+ } else if (prefixIconSlot) {
500
+ contVNs.push(
501
+ h('span', {
502
+ class: 'vxe-button--item vxe-button--custom-prefix-icon'
503
+ }, prefixIconSlot({}))
504
+ )
505
+ } else if (prefixRender) {
506
+ const compConf = renderer.get(prefixRender.name)
507
+ const pIconMethod = compConf ? compConf.renderButtonPrefix : null
508
+ contVNs.push(
509
+ h('span', {
510
+ class: ['vxe-button--item vxe-button--custom-prefix-icon']
511
+ }, pIconMethod ? getSlotVNs(pIconMethod(prefixRender, { $button: $xeButton })) : [])
512
+ )
513
+ } else if (prefixIcon) {
514
+ contVNs.push(
515
+ h('i', {
516
+ class: ['vxe-button--item vxe-button--prefix-icon', prefixIcon]
517
+ })
518
+ )
519
+ }
520
+
521
+ if (defaultSlot) {
522
+ contVNs.push(
523
+ h('span', {
524
+ class: 'vxe-button--item vxe-button--content'
525
+ }, defaultSlot({}))
526
+ )
527
+ } else if (content) {
528
+ contVNs.push(
529
+ h('span', {
530
+ class: 'vxe-button--item vxe-button--content'
531
+ }, getFuncText(content))
532
+ )
533
+ }
534
+
535
+ if (suffixIconSlot) {
536
+ contVNs.push(
537
+ h('span', {
538
+ class: 'vxe-button--item vxe-button--custom-suffix-icon'
539
+ }, suffixIconSlot({}))
540
+ )
541
+ } else if (suffixRender) {
542
+ const compConf = renderer.get(suffixRender.name)
543
+ const sIconMethod = compConf ? compConf.renderButtonSuffix : null
544
+ contVNs.push(
545
+ h('span', {
546
+ class: ['vxe-button--item vxe-button--custom-suffix-icon']
547
+ }, sIconMethod ? getSlotVNs(sIconMethod(suffixRender, { $button: $xeButton })) : [])
548
+ )
549
+ } else if (suffixIcon) {
550
+ contVNs.push(
551
+ h('i', {
552
+ class: ['vxe-button--item vxe-button--suffix-icon', suffixIcon]
553
+ })
554
+ )
555
+ }
556
+ if (suffixTooltip) {
557
+ contVNs.push(
558
+ renderTooltipIcon(suffixTipOpts, 'suffix')
559
+ )
560
+ }
561
+ return contVNs
562
+ }
563
+
564
+ const dispatchEvent = (type: ValueOf<VxeButtonEmits>, params: Record<string, any>, evnt: Event | null) => {
565
+ emit(type, createEvent(evnt, { $button: $xeButton }, params))
566
+ }
567
+
568
+ buttonMethods = {
569
+ dispatchEvent,
570
+ openPanel,
571
+ closePanel: hidePanel,
572
+ focus () {
573
+ const btnElem = refButton.value
574
+ if (btnElem) {
575
+ btnElem.focus()
576
+ }
577
+ return nextTick()
578
+ },
579
+ blur () {
580
+ const btnElem = refButton.value
581
+ if (btnElem) {
582
+ btnElem.blur()
583
+ }
584
+ return nextTick()
585
+ }
586
+ }
587
+
588
+ const handleGlobalMousewheelEvent = (evnt: Event) => {
589
+ const panelElem = refBtnPanel.value
590
+ if (reactData.visiblePanel && !getEventTargetNode(evnt, panelElem).flag) {
591
+ hidePanel()
592
+ }
593
+ }
594
+
595
+ const handleGlobalMousedownEvent = (evnt: MouseEvent) => {
596
+ const btnDisabled = computeBtnDisabled.value
597
+ const { visiblePanel } = reactData
598
+ if (!btnDisabled) {
599
+ const el = refElem.value
600
+ const panelElem = refBtnPanel.value
601
+ reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
602
+ if (visiblePanel && !reactData.isActivated) {
603
+ hidePanel()
604
+ }
605
+ }
606
+ }
607
+
608
+ const handleGlobalResizeEvent = () => {
609
+ const { visiblePanel } = reactData
610
+ if (visiblePanel) {
611
+ updatePlacement()
612
+ }
613
+ }
614
+
615
+ Object.assign($xeButton, buttonMethods)
616
+
617
+ const renderVN = () => {
618
+ const { className, trigger, title, routerLink, type, destroyOnClose, name, loading, shadow, showDropdownIcon } = props
619
+ const { initialized, isAniVisible, visiblePanel } = reactData
620
+ const isFormBtn = computeIsFormBtn.value
621
+ const btnMode = computeBtnMode.value
622
+ const btnStatus = computeBtnStatus.value
623
+ const btnRound = computeBtnRound.value
624
+ const btnAlign = computeBtnAlign.value
625
+ const btnCircle = computeBtnCircle.value
626
+ const btnTransfer = computeBtnTransfer.value
627
+ const btnDisabled = computeBtnDisabled.value
628
+ const permissionInfo = computePermissionInfo.value
629
+ const downBtnList = computeDownBtnList.value
630
+ const popupOpts = computePopupOpts.value
631
+ const vSize = computeSize.value
632
+ const dropdownsSlot = slots.dropdowns
633
+ const ppClassName = popupOpts.className || props.popupClassName
634
+
635
+ if (!permissionInfo.visible) {
636
+ return renderEmptyElement($xeButton)
637
+ }
638
+ if (dropdownsSlot || downBtnList.length) {
639
+ const btnOns: Record<string, any> = {
640
+ onContextmenu: contextmenuEvent
641
+ }
642
+ const panelOns: Record<string, any> = {}
643
+ if (trigger === 'hover') {
644
+ // hover 触发
645
+ btnOns.onMouseenter = mouseenterTargetEvent
646
+ btnOns.onMouseleave = mouseleaveTargetEvent
647
+
648
+ panelOns.onMouseenter = mouseenterDropdownEvent
649
+ panelOns.onMouseleave = mouseleaveDropdownEvent
650
+ }
651
+ return h('div', {
652
+ ref: refElem,
653
+ class: ['vxe-button--dropdown', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
654
+ [`size--${vSize}`]: vSize,
655
+ 'is--active': visiblePanel
656
+ }]
657
+ }, [
658
+ routerLink
659
+ ? h(resolveComponent('router-link'), {
660
+ ref: refButton,
661
+ class: ['vxe-button', 'vxe-button--link', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
662
+ [`size--${vSize}`]: vSize,
663
+ [`theme--${btnStatus}`]: btnStatus,
664
+ 'is--round': btnRound,
665
+ 'is--circle': btnCircle,
666
+ 'is--shadow': shadow,
667
+ 'is--disabled': btnDisabled || loading,
668
+ 'is--loading': loading
669
+ }],
670
+ title,
671
+ name,
672
+ type: isFormBtn ? type : 'button',
673
+ disabled: btnDisabled || loading,
674
+ to: routerLink,
675
+ onClick: clickTargetEvent,
676
+ ...btnOns
677
+ }, {
678
+ default () {
679
+ return renderContent().concat(showDropdownIcon
680
+ ? [
681
+ h('i', {
682
+ class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
683
+ })
684
+ ]
685
+ : [])
686
+ }
687
+ })
688
+ : h('button', {
689
+ ref: refButton,
690
+ class: ['vxe-button', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
691
+ [`size--${vSize}`]: vSize,
692
+ [`theme--${btnStatus}`]: btnStatus,
693
+ 'is--round': btnRound,
694
+ 'is--circle': btnCircle,
695
+ 'is--shadow': shadow,
696
+ 'is--disabled': btnDisabled || loading,
697
+ 'is--loading': loading
698
+ }],
699
+ title,
700
+ name,
701
+ type: isFormBtn ? type : 'button',
702
+ disabled: btnDisabled || loading,
703
+ onClick: clickTargetEvent,
704
+ ...btnOns
705
+ }, renderContent().concat(showDropdownIcon
706
+ ? [
707
+ h('i', {
708
+ class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
709
+ })
710
+ ]
711
+ : [])),
712
+ h(Teleport, {
713
+ to: 'body',
714
+ disabled: btnTransfer ? !initialized : true
715
+ }, [
716
+ h('div', {
717
+ ref: refBtnPanel,
718
+ class: ['vxe-button--dropdown-panel', ppClassName ? (XEUtils.isFunction(ppClassName) ? ppClassName({ $button: $xeButton }) : ppClassName) : '', {
719
+ [`size--${vSize}`]: vSize,
720
+ 'is--transfer': btnTransfer,
721
+ 'ani--leave': isAniVisible,
722
+ 'ani--enter': visiblePanel
723
+ }],
724
+ placement: reactData.panelPlacement,
725
+ style: reactData.panelStyle,
726
+ ...panelOns
727
+ }, initialized && (visiblePanel || isAniVisible)
728
+ ? [
729
+ dropdownsSlot
730
+ ? h('div', {
731
+ class: 'vxe-button--dropdown-wrapper',
732
+ onMousedown: mousedownDropdownEvent,
733
+ onClick: clickDropdownEvent
734
+ }, initialized && (destroyOnClose ? (visiblePanel || isAniVisible) : true) ? dropdownsSlot({}) : [])
735
+ : h('div', {
736
+ class: 'vxe-button--dropdown-wrapper'
737
+ }, initialized && (destroyOnClose ? (visiblePanel || isAniVisible) : true)
738
+ ? downBtnList.map((option, i) => {
739
+ return h(VxeButtonComponent, {
740
+ key: i,
741
+ type: option.type,
742
+ mode: option.mode || btnMode,
743
+ className: option.className,
744
+ name: option.name,
745
+ routerLink: option.routerLink,
746
+ permissionCode: option.permissionCode,
747
+ title: option.title,
748
+ content: option.content,
749
+ status: option.status,
750
+ icon: option.icon,
751
+ round: XEUtils.isBoolean(option.round) ? option.round : (btnMode === 'text' ? false : btnRound),
752
+ circle: XEUtils.isBoolean(option.circle) ? option.circle : (btnMode === 'text' ? false : btnCircle),
753
+ disabled: option.disabled,
754
+ loading: option.loading,
755
+ align: option.align,
756
+ onClick (params: VxeButtonDefines.ClickEventParams) {
757
+ downBtnClickEvent(params, option)
758
+ }
759
+ })
760
+ })
761
+ : [])
762
+ ]
763
+ : [])
764
+ ])
765
+ ])
766
+ }
767
+ if (routerLink) {
768
+ return h(resolveComponent('router-link'), {
769
+ ref: refButton,
770
+ class: ['vxe-button', 'vxe-button--link', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
771
+ [`size--${vSize}`]: vSize,
772
+ [`theme--${btnStatus}`]: btnStatus,
773
+ 'is--round': btnRound,
774
+ 'is--circle': btnCircle,
775
+ 'is--shadow': shadow,
776
+ 'is--disabled': btnDisabled || loading,
777
+ 'is--loading': loading
778
+ }],
779
+ title,
780
+ name,
781
+ type: isFormBtn ? type : 'button',
782
+ disabled: btnDisabled || loading,
783
+ to: routerLink,
784
+ onClick: clickEvent,
785
+ onMouseenter: mouseenterEvent,
786
+ onMouseleave: mouseleaveEvent,
787
+ onContextmenu: contextmenuEvent
788
+ }, {
789
+ default () {
790
+ return renderContent()
791
+ }
792
+ })
793
+ }
794
+ return h('button', {
795
+ ref: refButton,
796
+ class: ['vxe-button', `type--${btnMode}`, btnAlign ? `align--${btnAlign}` : '', className ? (XEUtils.isFunction(className) ? className({ $button: $xeButton }) : className) : '', {
797
+ [`size--${vSize}`]: vSize,
798
+ [`theme--${btnStatus}`]: btnStatus,
799
+ 'is--round': btnRound,
800
+ 'is--circle': btnCircle,
801
+ 'is--shadow': shadow,
802
+ 'is--disabled': btnDisabled || loading,
803
+ 'is--loading': loading
804
+ }],
805
+ title,
806
+ name,
807
+ type: isFormBtn ? type : 'button',
808
+ disabled: btnDisabled || loading,
809
+ onClick: clickEvent,
810
+ onMouseenter: mouseenterEvent,
811
+ onMouseleave: mouseleaveEvent,
812
+ onContextmenu: contextmenuEvent
813
+ }, renderContent())
814
+ }
815
+
816
+ $xeButton.renderVN = renderVN
817
+
818
+ onMounted(() => {
819
+ if (props.type === 'text') {
820
+ warnLog('vxe.error.delProp', ['[button] type=text', 'mode=text'])
821
+ }
822
+
823
+ globalEvents.on($xeButton, 'mousewheel', handleGlobalMousewheelEvent)
824
+ globalEvents.on($xeButton, 'mousedown', handleGlobalMousedownEvent)
825
+ globalEvents.on($xeButton, 'resize', handleGlobalResizeEvent)
826
+ })
827
+
828
+ onUnmounted(() => {
829
+ globalEvents.off($xeButton, 'mousewheel')
830
+ globalEvents.off($xeButton, 'mousedown')
831
+ globalEvents.off($xeButton, 'resize')
832
+ })
833
+
834
+ return $xeButton
835
+ },
836
+ render () {
837
+ return this.renderVN()
838
+ }
839
+ })
840
+
841
+ export default VxeButtonComponent