vxe-pc-ui 4.11.29 → 4.11.31

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 (215) hide show
  1. package/es/backtop/src/backtop.js +1 -3
  2. package/es/button/src/button.js +21 -12
  3. package/es/components.js +3 -0
  4. package/es/context-menu/index.js +46 -0
  5. package/es/context-menu/src/context-menu.js +344 -0
  6. package/es/context-menu/style.css +104 -0
  7. package/es/context-menu/style.min.css +1 -0
  8. package/es/dynamics/index.js +29 -3
  9. package/es/icon/style.css +1 -1
  10. package/es/language/ar-EG.js +3 -0
  11. package/es/language/de-DE.js +3 -0
  12. package/es/language/en-US.js +3 -0
  13. package/es/language/es-ES.js +3 -0
  14. package/es/language/fr-FR.js +3 -0
  15. package/es/language/hu-HU.js +3 -0
  16. package/es/language/hy-AM.js +4 -1
  17. package/es/language/id-ID.js +3 -0
  18. package/es/language/it-IT.js +3 -0
  19. package/es/language/ja-JP.js +3 -0
  20. package/es/language/ko-KR.js +3 -0
  21. package/es/language/ms-MY.js +3 -0
  22. package/es/language/nb-NO.js +3 -0
  23. package/es/language/pt-BR.js +3 -0
  24. package/es/language/ru-RU.js +3 -0
  25. package/es/language/th-TH.js +3 -0
  26. package/es/language/ug-CN.js +3 -0
  27. package/es/language/uk-UA.js +3 -0
  28. package/es/language/uz-UZ.js +3 -0
  29. package/es/language/vi-VN.js +3 -0
  30. package/es/language/zh-CHT.js +3 -0
  31. package/es/language/zh-CN.js +4 -1
  32. package/es/print/src/print.js +24 -1
  33. package/es/print/src/util.js +8 -1
  34. package/es/segmented/src/segmented.js +12 -2
  35. package/es/segmented/style.css +5 -3
  36. package/es/segmented/style.min.css +1 -1
  37. package/es/style.css +1 -1
  38. package/es/style.min.css +1 -1
  39. package/es/tree/src/tree.js +69 -21
  40. package/es/ui/index.js +8 -3
  41. package/es/ui/src/log.js +1 -1
  42. package/es/vxe-context-menu/index.js +3 -0
  43. package/es/vxe-context-menu/style.css +104 -0
  44. package/es/vxe-context-menu/style.min.css +1 -0
  45. package/es/vxe-segmented/style.css +5 -3
  46. package/es/vxe-segmented/style.min.css +1 -1
  47. package/lib/backtop/src/backtop.js +0 -2
  48. package/lib/backtop/src/backtop.min.js +1 -1
  49. package/lib/button/src/button.js +12 -6
  50. package/lib/button/src/button.min.js +1 -1
  51. package/lib/components.js +13 -1
  52. package/lib/components.min.js +1 -1
  53. package/lib/context-menu/index.js +56 -0
  54. package/lib/context-menu/index.min.js +1 -0
  55. package/lib/context-menu/src/context-menu.js +361 -0
  56. package/lib/context-menu/src/context-menu.min.js +1 -0
  57. package/lib/context-menu/style/index.js +1 -0
  58. package/lib/context-menu/style/style.css +104 -0
  59. package/lib/context-menu/style/style.min.css +1 -0
  60. package/lib/dynamics/index.js +33 -3
  61. package/lib/dynamics/index.min.js +1 -1
  62. package/lib/icon/style/style.css +1 -1
  63. package/lib/icon/style/style.min.css +1 -1
  64. package/lib/index.umd.js +612 -42
  65. package/lib/index.umd.min.js +1 -1
  66. package/lib/language/ar-EG.js +3 -0
  67. package/lib/language/ar-EG.min.js +1 -1
  68. package/lib/language/ar-EG.umd.js +3 -0
  69. package/lib/language/de-DE.js +3 -0
  70. package/lib/language/de-DE.min.js +1 -1
  71. package/lib/language/de-DE.umd.js +3 -0
  72. package/lib/language/en-US.js +3 -0
  73. package/lib/language/en-US.min.js +1 -1
  74. package/lib/language/en-US.umd.js +3 -0
  75. package/lib/language/es-ES.js +3 -0
  76. package/lib/language/es-ES.min.js +1 -1
  77. package/lib/language/es-ES.umd.js +3 -0
  78. package/lib/language/fr-FR.js +3 -0
  79. package/lib/language/fr-FR.min.js +1 -1
  80. package/lib/language/fr-FR.umd.js +3 -0
  81. package/lib/language/hu-HU.js +3 -0
  82. package/lib/language/hu-HU.min.js +1 -1
  83. package/lib/language/hu-HU.umd.js +3 -0
  84. package/lib/language/hy-AM.js +4 -1
  85. package/lib/language/hy-AM.min.js +1 -1
  86. package/lib/language/hy-AM.umd.js +4 -1
  87. package/lib/language/id-ID.js +3 -0
  88. package/lib/language/id-ID.min.js +1 -1
  89. package/lib/language/id-ID.umd.js +3 -0
  90. package/lib/language/it-IT.js +3 -0
  91. package/lib/language/it-IT.min.js +1 -1
  92. package/lib/language/it-IT.umd.js +3 -0
  93. package/lib/language/ja-JP.js +3 -0
  94. package/lib/language/ja-JP.min.js +1 -1
  95. package/lib/language/ja-JP.umd.js +3 -0
  96. package/lib/language/ko-KR.js +3 -0
  97. package/lib/language/ko-KR.min.js +1 -1
  98. package/lib/language/ko-KR.umd.js +3 -0
  99. package/lib/language/ms-MY.js +3 -0
  100. package/lib/language/ms-MY.min.js +1 -1
  101. package/lib/language/ms-MY.umd.js +3 -0
  102. package/lib/language/nb-NO.js +3 -0
  103. package/lib/language/nb-NO.min.js +1 -1
  104. package/lib/language/nb-NO.umd.js +3 -0
  105. package/lib/language/pt-BR.js +3 -0
  106. package/lib/language/pt-BR.min.js +1 -1
  107. package/lib/language/pt-BR.umd.js +3 -0
  108. package/lib/language/ru-RU.js +3 -0
  109. package/lib/language/ru-RU.min.js +1 -1
  110. package/lib/language/ru-RU.umd.js +3 -0
  111. package/lib/language/th-TH.js +3 -0
  112. package/lib/language/th-TH.min.js +1 -1
  113. package/lib/language/th-TH.umd.js +3 -0
  114. package/lib/language/ug-CN.js +3 -0
  115. package/lib/language/ug-CN.min.js +1 -1
  116. package/lib/language/ug-CN.umd.js +3 -0
  117. package/lib/language/uk-UA.js +3 -0
  118. package/lib/language/uk-UA.min.js +1 -1
  119. package/lib/language/uk-UA.umd.js +3 -0
  120. package/lib/language/uz-UZ.js +3 -0
  121. package/lib/language/uz-UZ.min.js +1 -1
  122. package/lib/language/uz-UZ.umd.js +3 -0
  123. package/lib/language/vi-VN.js +3 -0
  124. package/lib/language/vi-VN.min.js +1 -1
  125. package/lib/language/vi-VN.umd.js +3 -0
  126. package/lib/language/zh-CHT.js +3 -0
  127. package/lib/language/zh-CHT.min.js +1 -1
  128. package/lib/language/zh-CHT.umd.js +3 -0
  129. package/lib/language/zh-CN.js +4 -1
  130. package/lib/language/zh-CN.min.js +1 -1
  131. package/lib/language/zh-CN.umd.js +4 -1
  132. package/lib/print/src/print.js +42 -1
  133. package/lib/print/src/print.min.js +1 -1
  134. package/lib/print/src/util.js +9 -2
  135. package/lib/print/src/util.min.js +1 -1
  136. package/lib/segmented/src/segmented.js +10 -2
  137. package/lib/segmented/src/segmented.min.js +1 -1
  138. package/lib/segmented/style/style.css +5 -3
  139. package/lib/segmented/style/style.min.css +1 -1
  140. package/lib/style.css +1 -1
  141. package/lib/style.min.css +1 -1
  142. package/lib/tree/src/tree.js +78 -20
  143. package/lib/tree/src/tree.min.js +1 -1
  144. package/lib/ui/index.js +8 -3
  145. package/lib/ui/index.min.js +1 -1
  146. package/lib/ui/src/log.js +1 -1
  147. package/lib/ui/src/log.min.js +1 -1
  148. package/lib/vxe-context-menu/index.js +22 -0
  149. package/lib/vxe-context-menu/index.min.js +1 -0
  150. package/lib/vxe-context-menu/style/index.js +1 -0
  151. package/lib/vxe-context-menu/style/style.css +104 -0
  152. package/lib/vxe-context-menu/style/style.min.css +1 -0
  153. package/lib/vxe-segmented/style/style.css +5 -3
  154. package/lib/vxe-segmented/style/style.min.css +1 -1
  155. package/package.json +1 -1
  156. package/packages/backtop/src/backtop.ts +1 -4
  157. package/packages/button/src/button.ts +22 -13
  158. package/packages/components.ts +3 -0
  159. package/packages/context-menu/index.ts +54 -0
  160. package/packages/context-menu/src/context-menu.ts +388 -0
  161. package/packages/dynamics/index.ts +36 -9
  162. package/packages/language/ar-EG.ts +3 -0
  163. package/packages/language/de-DE.ts +3 -0
  164. package/packages/language/en-US.ts +3 -0
  165. package/packages/language/es-ES.ts +3 -0
  166. package/packages/language/fr-FR.ts +3 -0
  167. package/packages/language/hu-HU.ts +3 -0
  168. package/packages/language/hy-AM.ts +4 -1
  169. package/packages/language/id-ID.ts +3 -0
  170. package/packages/language/it-IT.ts +3 -0
  171. package/packages/language/ja-JP.ts +3 -0
  172. package/packages/language/ko-KR.ts +3 -0
  173. package/packages/language/ms-MY.ts +3 -0
  174. package/packages/language/nb-NO.ts +3 -0
  175. package/packages/language/pt-BR.ts +3 -0
  176. package/packages/language/ru-RU.ts +3 -0
  177. package/packages/language/th-TH.ts +3 -0
  178. package/packages/language/ug-CN.ts +3 -0
  179. package/packages/language/uk-UA.ts +3 -0
  180. package/packages/language/uz-UZ.ts +3 -0
  181. package/packages/language/vi-VN.ts +3 -0
  182. package/packages/language/zh-CHT.ts +3 -0
  183. package/packages/language/zh-CN.ts +4 -1
  184. package/packages/print/src/print.ts +24 -1
  185. package/packages/print/src/util.ts +9 -1
  186. package/packages/segmented/src/segmented.ts +12 -2
  187. package/packages/tree/src/tree.ts +73 -22
  188. package/packages/ui/index.ts +8 -2
  189. package/styles/all.scss +1 -0
  190. package/styles/components/backtop.scss +1 -1
  191. package/styles/components/context-menu.scss +105 -0
  192. package/styles/components/segmented.scss +5 -3
  193. package/styles/theme/base.scss +3 -0
  194. package/types/all.d.ts +3 -0
  195. package/types/components/button.d.ts +2 -0
  196. package/types/components/context-menu.d.ts +284 -0
  197. package/types/components/password-input.d.ts +2 -0
  198. package/types/components/print.d.ts +8 -0
  199. package/types/components/table.d.ts +8 -0
  200. package/types/components/tree.d.ts +46 -1
  201. package/types/ui/global-config.d.ts +2 -0
  202. package/types/ui/global-icon.d.ts +4 -0
  203. package/types/ui/index.d.ts +3 -0
  204. /package/es/icon/{iconfont.1767441272505.ttf → iconfont.1767605241010.ttf} +0 -0
  205. /package/es/icon/{iconfont.1767441272505.woff → iconfont.1767605241010.woff} +0 -0
  206. /package/es/icon/{iconfont.1767441272505.woff2 → iconfont.1767605241010.woff2} +0 -0
  207. /package/es/{iconfont.1767441272505.ttf → iconfont.1767605241010.ttf} +0 -0
  208. /package/es/{iconfont.1767441272505.woff → iconfont.1767605241010.woff} +0 -0
  209. /package/es/{iconfont.1767441272505.woff2 → iconfont.1767605241010.woff2} +0 -0
  210. /package/lib/icon/style/{iconfont.1767441272505.ttf → iconfont.1767605241010.ttf} +0 -0
  211. /package/lib/icon/style/{iconfont.1767441272505.woff → iconfont.1767605241010.woff} +0 -0
  212. /package/lib/icon/style/{iconfont.1767441272505.woff2 → iconfont.1767605241010.woff2} +0 -0
  213. /package/lib/{iconfont.1767441272505.ttf → iconfont.1767605241010.ttf} +0 -0
  214. /package/lib/{iconfont.1767441272505.woff → iconfont.1767605241010.woff} +0 -0
  215. /package/lib/{iconfont.1767441272505.woff2 → iconfont.1767605241010.woff2} +0 -0
@@ -40,10 +40,11 @@
40
40
 
41
41
  .vxe-segmented--content {
42
42
  display: flex;
43
- flex-direction: row;
43
+ flex-direction: column;
44
44
  align-items: center;
45
45
  justify-content: center;
46
46
  text-align: center;
47
+ padding: 0.4em 0;
47
48
  transition: color 0.3s;
48
49
  }
49
50
 
@@ -74,7 +75,8 @@
74
75
  border-radius: 1em;
75
76
  }
76
77
  .vxe-segmented.type--default .vxe-segmented--content, .vxe-segmented.type--round .vxe-segmented--content {
77
- min-height: 2em;
78
+ min-height: 2.2em;
79
+ height: 100%;
78
80
  }
79
81
  .vxe-segmented.type--default .vxe-segmented--item:hover, .vxe-segmented.type--round .vxe-segmented--item:hover {
80
82
  background-color: var(--vxe-ui-segmented-item-hover-background-color);
@@ -146,7 +148,7 @@
146
148
  border-radius: var(--vxe-ui-base-border-radius);
147
149
  }
148
150
  .vxe-segmented.type--inside .vxe-segmented--content {
149
- min-height: 1.6em;
151
+ min-height: 1.8em;
150
152
  }
151
153
  .vxe-segmented.type--inside .vxe-segmented--inner {
152
154
  padding: 0.2em;
@@ -1 +1 @@
1
- .vxe-segmented{display:block;color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family)}.vxe-segmented--group{display:inline-flex;position:relative;background-color:var(--vxe-ui-segmented-item-background-color)}.vxe-segmented--inner{width:100%;position:relative;display:flex;flex-direction:row;white-space:nowrap}.vxe-segmented--item{display:block;padding:0 .8em;margin:0}.vxe-segmented--item:not(.is--disabled){cursor:pointer}.vxe-segmented--input{position:absolute;width:0;height:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;pointer-events:none}.vxe-segmented--content{display:flex;flex-direction:row;align-items:center;justify-content:center;text-align:center;transition:color .3s}.vxe-segmented--label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-segmented--selected{display:none;position:absolute;top:0;left:0;width:0;height:100%;transition:all .3s;pointer-events:none}.vxe-segmented.type--round .vxe-segmented--group{border-radius:1em}.vxe-segmented.type--round .vxe-segmented--selected{border-radius:1em}.vxe-segmented.type--round .vxe-segmented--item:hover{border-radius:1em}.vxe-segmented.type--default .vxe-segmented--content,.vxe-segmented.type--round .vxe-segmented--content{min-height:2em}.vxe-segmented.type--default .vxe-segmented--item:hover,.vxe-segmented.type--round .vxe-segmented--item:hover{background-color:var(--vxe-ui-segmented-item-hover-background-color)}.vxe-segmented.type--default .vxe-segmented--item.is--checked .vxe-segmented--content,.vxe-segmented.type--round .vxe-segmented--item.is--checked .vxe-segmented--content{color:#fff}.vxe-segmented.type--default .vxe-segmented--selected,.vxe-segmented.type--round .vxe-segmented--selected{background-color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--default.theme--primary .vxe-segmented--group,.vxe-segmented.type--round.theme--primary .vxe-segmented--group{background-color:var(--vxe-ui-font-primary-tinge-color)}.vxe-segmented.type--default.theme--primary .vxe-segmented--selected,.vxe-segmented.type--round.theme--primary .vxe-segmented--selected{background-color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--default.theme--primary .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--primary .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--success .vxe-segmented--group,.vxe-segmented.type--round.theme--success .vxe-segmented--group{background-color:var(--vxe-ui-status-success-tinge-color)}.vxe-segmented.type--default.theme--success .vxe-segmented--selected,.vxe-segmented.type--round.theme--success .vxe-segmented--selected{background-color:var(--vxe-ui-status-success-color)}.vxe-segmented.type--default.theme--success .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--success .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--info .vxe-segmented--group,.vxe-segmented.type--round.theme--info .vxe-segmented--group{background-color:var(--vxe-ui-status-info-tinge-color)}.vxe-segmented.type--default.theme--info .vxe-segmented--selected,.vxe-segmented.type--round.theme--info .vxe-segmented--selected{background-color:var(--vxe-ui-status-info-color)}.vxe-segmented.type--default.theme--info .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--info .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--warning .vxe-segmented--group,.vxe-segmented.type--round.theme--warning .vxe-segmented--group{background-color:var(--vxe-ui-status-warning-tinge-color)}.vxe-segmented.type--default.theme--warning .vxe-segmented--selected,.vxe-segmented.type--round.theme--warning .vxe-segmented--selected{background-color:var(--vxe-ui-status-warning-color)}.vxe-segmented.type--default.theme--warning .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--warning .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--danger .vxe-segmented--group,.vxe-segmented.type--round.theme--danger .vxe-segmented--group{background-color:var(--vxe-ui-status-danger-tinge-color)}.vxe-segmented.type--default.theme--danger .vxe-segmented--selected,.vxe-segmented.type--round.theme--danger .vxe-segmented--selected{background-color:var(--vxe-ui-status-danger-color)}.vxe-segmented.type--default.theme--danger .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--danger .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--error .vxe-segmented--group,.vxe-segmented.type--round.theme--error .vxe-segmented--group{background-color:var(--vxe-ui-status-error-tinge-color)}.vxe-segmented.type--default.theme--error .vxe-segmented--selected,.vxe-segmented.type--round.theme--error .vxe-segmented--selected{background-color:var(--vxe-ui-status-error-color)}.vxe-segmented.type--default.theme--error .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--error .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default .vxe-segmented--group,.vxe-segmented.type--inside .vxe-segmented--group{border-radius:var(--vxe-ui-base-border-radius)}.vxe-segmented.type--default .vxe-segmented--selected,.vxe-segmented.type--inside .vxe-segmented--selected{border-radius:var(--vxe-ui-base-border-radius)}.vxe-segmented.type--inside .vxe-segmented--content{min-height:1.6em}.vxe-segmented.type--inside .vxe-segmented--inner{padding:.2em}.vxe-segmented.type--inside .vxe-segmented--item:hover .vxe-segmented--content{color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--inside .vxe-segmented--item.is--checked .vxe-segmented--content{color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--inside .vxe-segmented--selected{top:.2em;height:calc(100% - .4em);background-color:#fff}.vxe-segmented.type--inside.theme--primary .vxe-segmented--item.is--checked{color:var(--vxe-ui-font-primary-tinge-color)}.vxe-segmented.type--inside.theme--success .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-success-tinge-color)}.vxe-segmented.type--inside.theme--info .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-info-tinge-color)}.vxe-segmented.type--inside.theme--warning .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-warning-tinge-color)}.vxe-segmented.type--inside.theme--danger .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-danger-tinge-color)}.vxe-segmented.type--inside.theme--error .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-error-tinge-color)}.vxe-segmented{font-size:var(--vxe-ui-font-size-default)}.vxe-segmented.size--medium{font-size:var(--vxe-ui-font-size-medium)}.vxe-segmented.size--small{font-size:var(--vxe-ui-font-size-small)}.vxe-segmented.size--mini{font-size:var(--vxe-ui-font-size-mini)}
1
+ .vxe-segmented{display:block;color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family)}.vxe-segmented--group{display:inline-flex;position:relative;background-color:var(--vxe-ui-segmented-item-background-color)}.vxe-segmented--inner{width:100%;position:relative;display:flex;flex-direction:row;white-space:nowrap}.vxe-segmented--item{display:block;padding:0 .8em;margin:0}.vxe-segmented--item:not(.is--disabled){cursor:pointer}.vxe-segmented--input{position:absolute;width:0;height:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;pointer-events:none}.vxe-segmented--content{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:.4em 0;transition:color .3s}.vxe-segmented--label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-segmented--selected{display:none;position:absolute;top:0;left:0;width:0;height:100%;transition:all .3s;pointer-events:none}.vxe-segmented.type--round .vxe-segmented--group{border-radius:1em}.vxe-segmented.type--round .vxe-segmented--selected{border-radius:1em}.vxe-segmented.type--round .vxe-segmented--item:hover{border-radius:1em}.vxe-segmented.type--default .vxe-segmented--content,.vxe-segmented.type--round .vxe-segmented--content{min-height:2.2em;height:100%}.vxe-segmented.type--default .vxe-segmented--item:hover,.vxe-segmented.type--round .vxe-segmented--item:hover{background-color:var(--vxe-ui-segmented-item-hover-background-color)}.vxe-segmented.type--default .vxe-segmented--item.is--checked .vxe-segmented--content,.vxe-segmented.type--round .vxe-segmented--item.is--checked .vxe-segmented--content{color:#fff}.vxe-segmented.type--default .vxe-segmented--selected,.vxe-segmented.type--round .vxe-segmented--selected{background-color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--default.theme--primary .vxe-segmented--group,.vxe-segmented.type--round.theme--primary .vxe-segmented--group{background-color:var(--vxe-ui-font-primary-tinge-color)}.vxe-segmented.type--default.theme--primary .vxe-segmented--selected,.vxe-segmented.type--round.theme--primary .vxe-segmented--selected{background-color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--default.theme--primary .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--primary .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--success .vxe-segmented--group,.vxe-segmented.type--round.theme--success .vxe-segmented--group{background-color:var(--vxe-ui-status-success-tinge-color)}.vxe-segmented.type--default.theme--success .vxe-segmented--selected,.vxe-segmented.type--round.theme--success .vxe-segmented--selected{background-color:var(--vxe-ui-status-success-color)}.vxe-segmented.type--default.theme--success .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--success .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--info .vxe-segmented--group,.vxe-segmented.type--round.theme--info .vxe-segmented--group{background-color:var(--vxe-ui-status-info-tinge-color)}.vxe-segmented.type--default.theme--info .vxe-segmented--selected,.vxe-segmented.type--round.theme--info .vxe-segmented--selected{background-color:var(--vxe-ui-status-info-color)}.vxe-segmented.type--default.theme--info .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--info .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--warning .vxe-segmented--group,.vxe-segmented.type--round.theme--warning .vxe-segmented--group{background-color:var(--vxe-ui-status-warning-tinge-color)}.vxe-segmented.type--default.theme--warning .vxe-segmented--selected,.vxe-segmented.type--round.theme--warning .vxe-segmented--selected{background-color:var(--vxe-ui-status-warning-color)}.vxe-segmented.type--default.theme--warning .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--warning .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--danger .vxe-segmented--group,.vxe-segmented.type--round.theme--danger .vxe-segmented--group{background-color:var(--vxe-ui-status-danger-tinge-color)}.vxe-segmented.type--default.theme--danger .vxe-segmented--selected,.vxe-segmented.type--round.theme--danger .vxe-segmented--selected{background-color:var(--vxe-ui-status-danger-color)}.vxe-segmented.type--default.theme--danger .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--danger .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default.theme--error .vxe-segmented--group,.vxe-segmented.type--round.theme--error .vxe-segmented--group{background-color:var(--vxe-ui-status-error-tinge-color)}.vxe-segmented.type--default.theme--error .vxe-segmented--selected,.vxe-segmented.type--round.theme--error .vxe-segmented--selected{background-color:var(--vxe-ui-status-error-color)}.vxe-segmented.type--default.theme--error .vxe-segmented--item.is--checked,.vxe-segmented.type--round.theme--error .vxe-segmented--item.is--checked{color:#fff}.vxe-segmented.type--default .vxe-segmented--group,.vxe-segmented.type--inside .vxe-segmented--group{border-radius:var(--vxe-ui-base-border-radius)}.vxe-segmented.type--default .vxe-segmented--selected,.vxe-segmented.type--inside .vxe-segmented--selected{border-radius:var(--vxe-ui-base-border-radius)}.vxe-segmented.type--inside .vxe-segmented--content{min-height:1.8em}.vxe-segmented.type--inside .vxe-segmented--inner{padding:.2em}.vxe-segmented.type--inside .vxe-segmented--item:hover .vxe-segmented--content{color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--inside .vxe-segmented--item.is--checked .vxe-segmented--content{color:var(--vxe-ui-font-primary-color)}.vxe-segmented.type--inside .vxe-segmented--selected{top:.2em;height:calc(100% - .4em);background-color:#fff}.vxe-segmented.type--inside.theme--primary .vxe-segmented--item.is--checked{color:var(--vxe-ui-font-primary-tinge-color)}.vxe-segmented.type--inside.theme--success .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-success-tinge-color)}.vxe-segmented.type--inside.theme--info .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-info-tinge-color)}.vxe-segmented.type--inside.theme--warning .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-warning-tinge-color)}.vxe-segmented.type--inside.theme--danger .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-danger-tinge-color)}.vxe-segmented.type--inside.theme--error .vxe-segmented--item.is--checked{color:var(--vxe-ui-status-error-tinge-color)}.vxe-segmented{font-size:var(--vxe-ui-font-size-default)}.vxe-segmented.size--medium{font-size:var(--vxe-ui-font-size-medium)}.vxe-segmented.size--small{font-size:var(--vxe-ui-font-size-small)}.vxe-segmented.size--mini{font-size:var(--vxe-ui-font-size-mini)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-pc-ui",
3
- "version": "4.11.29",
3
+ "version": "4.11.31",
4
4
  "description": "A vue based PC component library",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -1,4 +1,4 @@
1
- import { ref, h, reactive, PropType, watch, onMounted, nextTick, computed, onBeforeUnmount, onUnmounted } from 'vue'
1
+ import { ref, h, reactive, PropType, watch, onMounted, nextTick, computed, onBeforeUnmount } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
4
  import { getConfig, getIcon, createEvent, useSize, renderEmptyElement } from '../../ui'
@@ -248,9 +248,6 @@ export default defineVxeComponent({
248
248
  onBeforeUnmount(() => {
249
249
  removeScrollEvent()
250
250
  XEUtils.assign(reactData, createReactData())
251
- })
252
-
253
- onUnmounted(() => {
254
251
  XEUtils.assign(internalData, createInternalData())
255
252
  })
256
253
 
@@ -8,7 +8,7 @@ import { getSlotVNs } from '../../ui/src/vn'
8
8
  import { warnLog } from '../../ui/src/log'
9
9
  import VxeTooltipComponent from '../../tooltip/src/tooltip'
10
10
 
11
- import type { VxeButtonConstructor, VxeButtonPropTypes, VxeButtonEmits, ButtonReactData, ButtonMethods, VxeButtonDefines, ButtonPrivateRef, ButtonInternalData, VxeButtonGroupConstructor, VxeButtonGroupPrivateMethods, VxeDrawerConstructor, VxeDrawerMethods, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods, ValueOf } from '../../../types'
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
12
  import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
13
13
 
14
14
  const VxeButtonComponent = defineVxeComponent({
@@ -93,6 +93,10 @@ const VxeButtonComponent = defineVxeComponent({
93
93
  prefixTooltip: Object as PropType<VxeButtonPropTypes.PrefixTooltip>,
94
94
  suffixTooltip: Object as PropType<VxeButtonPropTypes.SuffixTooltip>,
95
95
  options: Array as PropType<VxeButtonPropTypes.Options>,
96
+ showDropdownIcon: {
97
+ type: Boolean,
98
+ default: () => getConfig().button.showDropdownIcon
99
+ },
96
100
  /**
97
101
  * 在下拉面板关闭时销毁内容
98
102
  */
@@ -121,6 +125,7 @@ const VxeButtonComponent = defineVxeComponent({
121
125
  const $xeModal = inject<(VxeModalConstructor & VxeModalMethods)| null>('$xeModal', null)
122
126
  const $xeDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
123
127
  const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
128
+ const $xeTree = inject<(VxeTreeConstructor & VxeTreePrivateMethods) | null>('$xeTree', null)
124
129
  const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods)| null>('$xeForm', null)
125
130
  const $xeButtonGroup = inject<(VxeButtonGroupConstructor & VxeButtonGroupPrivateMethods) | null>('$xeButtonGroup', null)
126
131
 
@@ -171,7 +176,7 @@ const VxeButtonComponent = defineVxeComponent({
171
176
  if (XEUtils.isBoolean(globalTransfer)) {
172
177
  return globalTransfer
173
178
  }
174
- if ($xeTable || $xeModal || $xeDrawer || $xeForm) {
179
+ if ($xeTable || $xeTree || $xeModal || $xeDrawer || $xeForm) {
175
180
  return true
176
181
  }
177
182
  }
@@ -592,7 +597,7 @@ const VxeButtonComponent = defineVxeComponent({
592
597
  Object.assign($xeButton, buttonMethods)
593
598
 
594
599
  const renderVN = () => {
595
- const { className, popupClassName, trigger, title, routerLink, type, destroyOnClose, name, loading } = props
600
+ const { className, popupClassName, trigger, title, routerLink, type, destroyOnClose, name, loading, showDropdownIcon } = props
596
601
  const { initialized, isAniVisible, visiblePanel } = reactData
597
602
  const isFormBtn = computeIsFormBtn.value
598
603
  const btnMode = computeBtnMode.value
@@ -648,11 +653,13 @@ const VxeButtonComponent = defineVxeComponent({
648
653
  ...btnOns
649
654
  }, {
650
655
  default () {
651
- return renderContent().concat([
652
- h('i', {
653
- class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
654
- })
655
- ])
656
+ return renderContent().concat(showDropdownIcon
657
+ ? [
658
+ h('i', {
659
+ class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
660
+ })
661
+ ]
662
+ : [])
656
663
  }
657
664
  })
658
665
  : h('button', {
@@ -671,11 +678,13 @@ const VxeButtonComponent = defineVxeComponent({
671
678
  disabled: btnDisabled || loading,
672
679
  onClick: clickTargetEvent,
673
680
  ...btnOns
674
- }, renderContent().concat([
675
- h('i', {
676
- class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
677
- })
678
- ])),
681
+ }, renderContent().concat(showDropdownIcon
682
+ ? [
683
+ h('i', {
684
+ class: `vxe-button--dropdown-arrow ${getIcon().BUTTON_DROPDOWN}`
685
+ })
686
+ ]
687
+ : [])),
679
688
  h(Teleport, {
680
689
  to: 'body',
681
690
  disabled: btnTransfer ? !initialized : true
@@ -25,6 +25,7 @@ import VxeCol from './col'
25
25
  import VxeCollapse from './collapse'
26
26
  import VxeCollapsePane from './collapse-pane'
27
27
  import VxeColorPicker from './color-picker'
28
+ import VxeContextMenu from './context-menu'
28
29
  import VxeCountdown from './countdown'
29
30
  import VxeDatePanel from './date-panel'
30
31
  import VxeDatePicker from './date-picker'
@@ -122,6 +123,7 @@ const components = [
122
123
  VxeCollapse,
123
124
  VxeCollapsePane,
124
125
  VxeColorPicker,
126
+ VxeContextMenu,
125
127
  VxeCountdown,
126
128
  VxeDatePanel,
127
129
  VxeDatePicker,
@@ -236,6 +238,7 @@ export * from './col'
236
238
  export * from './collapse'
237
239
  export * from './collapse-pane'
238
240
  export * from './color-picker'
241
+ export * from './context-menu'
239
242
  export * from './countdown'
240
243
  export * from './date-panel'
241
244
  export * from './date-picker'
@@ -0,0 +1,54 @@
1
+ import { App } from 'vue'
2
+ import { VxeUI } from '@vxe-ui/core'
3
+ import VxeContextMenuComponent from './src/context-menu'
4
+ import { dynamicApp, dynamicStore, checkDynamic } from '../dynamics'
5
+
6
+ import type { VxeContextMenuDefines } from '../../types'
7
+
8
+ export const VxeContextMenu = Object.assign({}, VxeContextMenuComponent, {
9
+ install (app: App) {
10
+ app.component(VxeContextMenuComponent.name as string, VxeContextMenuComponent)
11
+ }
12
+ })
13
+
14
+ function openMenu (opts: VxeContextMenuDefines.ContextMenuOpenOptions, x: number, y :number) {
15
+ dynamicStore.globalContextMenu = {
16
+ modelValue: true,
17
+ options: opts.options,
18
+ className: opts.className,
19
+ size: opts.size,
20
+ zIndex: opts.zIndex,
21
+ x,
22
+ y,
23
+ position: 'fixed',
24
+ destroyOnClose: true,
25
+ transfer: false,
26
+ events: opts.events
27
+ }
28
+ checkDynamic()
29
+ }
30
+
31
+ export const ContextMenuController = {
32
+ open (options: VxeContextMenuDefines.ContextMenuOpenOptions) {
33
+ const opts = Object.assign({ x: 0, y: 0 }, options)
34
+ openMenu(opts, opts.x, opts.y)
35
+ },
36
+ openByEvent (evnt: MouseEvent, options: VxeContextMenuDefines.ContextMenuEventOpenOptions) {
37
+ evnt.preventDefault()
38
+ evnt.stopPropagation()
39
+ const opts = Object.assign({}, options)
40
+ const x = evnt.clientX
41
+ const y = evnt.clientY
42
+ openMenu(opts, x, y)
43
+ },
44
+ close () {
45
+ dynamicStore.globalContextMenu = null
46
+ }
47
+ }
48
+
49
+ dynamicApp.use(VxeContextMenu)
50
+ VxeUI.component(VxeContextMenuComponent)
51
+ VxeUI.contextMenu = ContextMenuController
52
+
53
+ export const ContextMenu = VxeContextMenu
54
+ export default VxeContextMenu
@@ -0,0 +1,388 @@
1
+ import { ref, h, reactive, PropType, computed, VNode, watch, onMounted, onBeforeUnmount, nextTick } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { getConfig, getIcon, getI18n, createEvent, useSize, globalEvents, renderEmptyElement } from '../../ui'
5
+ import { getLastZIndex, nextSubZIndex, nextZIndex, getFuncText } from '../../ui/src/utils'
6
+ import { getEventTargetNode, toCssUnit } from '../../ui/src/dom'
7
+ import { getSlotVNs } from '../../ui/src/vn'
8
+
9
+ import type { ContextMenuInternalData, ContextMenuReactData, VxeContextMenuPropTypes, VxeContextMenuDefines, ContextMenuPrivateRef, VxeContextMenuEmits, VxeContextMenuPrivateComputed, ContextMenuMethods, ContextMenuPrivateMethods, VxeContextMenuConstructor, VxeContextMenuPrivateMethods, ValueOf } from '../../../types'
10
+
11
+ function createInternalData (): ContextMenuInternalData {
12
+ return {
13
+ }
14
+ }
15
+
16
+ function createReactData (): ContextMenuReactData {
17
+ return {
18
+ visible: false,
19
+ activeOption: null,
20
+ activeChildOption: null,
21
+ popupStyle: {
22
+ top: '',
23
+ left: '',
24
+ zIndex: 0
25
+ },
26
+ childPos: ''
27
+ }
28
+ }
29
+
30
+ export default defineVxeComponent({
31
+ name: 'VxeContextMenu',
32
+ props: {
33
+ modelValue: Boolean as PropType<VxeContextMenuPropTypes.ModelValue>,
34
+ className: String as PropType<VxeContextMenuPropTypes.ClassName>,
35
+ size: {
36
+ type: String as PropType<VxeContextMenuPropTypes.Size>,
37
+ default: () => getConfig().contextMenu.size || getConfig().size
38
+ },
39
+ options: Array as PropType<VxeContextMenuPropTypes.Options>,
40
+ x: [Number, String] as PropType<VxeContextMenuPropTypes.X>,
41
+ y: [Number, String] as PropType<VxeContextMenuPropTypes.Y>,
42
+ zIndex: [Number, String] as PropType<VxeContextMenuPropTypes.ZIndex>,
43
+ position: {
44
+ type: String as PropType<VxeContextMenuPropTypes.Position>,
45
+ default: () => getConfig().contextMenu.position
46
+ },
47
+ destroyOnClose: {
48
+ type: Boolean as PropType<VxeContextMenuPropTypes.DestroyOnClose>,
49
+ default: () => getConfig().contextMenu.destroyOnClose
50
+ },
51
+ transfer: {
52
+ type: Boolean as PropType<VxeContextMenuPropTypes.Transfer>,
53
+ default: () => getConfig().contextMenu.transfer
54
+ }
55
+ },
56
+ emits: [
57
+ 'update:modelValue',
58
+ 'option-click',
59
+ 'change',
60
+ 'show',
61
+ 'hide'
62
+ ] as VxeContextMenuEmits,
63
+ setup (props, context) {
64
+ const { emit } = context
65
+
66
+ const xID = XEUtils.uniqueId()
67
+
68
+ const refElem = ref<HTMLDivElement>()
69
+
70
+ const { computeSize } = useSize(props)
71
+
72
+ const internalData = createInternalData()
73
+ const reactData = reactive(createReactData())
74
+
75
+ const refMaps: ContextMenuPrivateRef = {
76
+ refElem
77
+ }
78
+
79
+ const computeMenuGroups = computed(() => {
80
+ const { options } = props
81
+ return options || []
82
+ })
83
+
84
+ const computeTopAndLeft = computed(() => {
85
+ const { x, y } = props
86
+ return `${x}${y}`
87
+ })
88
+
89
+ const computeMaps: VxeContextMenuPrivateComputed = {
90
+ }
91
+
92
+ const $xeContextMenu = {
93
+ xID,
94
+ props,
95
+ context,
96
+ reactData,
97
+
98
+ getRefMaps: () => refMaps,
99
+ getComputeMaps: () => computeMaps
100
+ } as unknown as VxeContextMenuConstructor & VxeContextMenuPrivateMethods
101
+
102
+ const dispatchEvent = (type: ValueOf<VxeContextMenuEmits>, params: Record<string, any>, evnt: Event | null) => {
103
+ emit(type, createEvent(evnt, { $contextMenu: $xeContextMenu }, params))
104
+ }
105
+
106
+ const emitModel = (value: any) => {
107
+ emit('update:modelValue', value)
108
+ }
109
+
110
+ const open = () => {
111
+ const { modelValue } = props
112
+ const { visible } = reactData
113
+ const value = true
114
+ reactData.visible = value
115
+ updateLocate()
116
+ updateZindex()
117
+ if (modelValue !== value) {
118
+ emitModel(value)
119
+ dispatchEvent('change', { value }, null)
120
+ }
121
+ if (visible !== value) {
122
+ dispatchEvent('show', { visible: value }, null)
123
+ }
124
+ return nextTick()
125
+ }
126
+
127
+ const close = () => {
128
+ const { modelValue } = props
129
+ const { visible } = reactData
130
+ const value = false
131
+ reactData.visible = value
132
+ if (modelValue !== value) {
133
+ emitModel(value)
134
+ dispatchEvent('change', { value }, null)
135
+ }
136
+ if (visible !== value) {
137
+ dispatchEvent('hide', { visible: value }, null)
138
+ }
139
+ return nextTick()
140
+ }
141
+
142
+ const updateLocate = () => {
143
+ const { x, y } = props
144
+ const { popupStyle } = reactData
145
+ popupStyle.left = toCssUnit(x || 0)
146
+ popupStyle.top = toCssUnit(y || 0)
147
+ }
148
+
149
+ const updateZindex = () => {
150
+ const { zIndex, transfer } = props
151
+ const { popupStyle } = reactData
152
+ const menuZIndex = popupStyle.zIndex
153
+ if (zIndex) {
154
+ popupStyle.zIndex = XEUtils.toNumber(zIndex)
155
+ } else {
156
+ if (menuZIndex < getLastZIndex()) {
157
+ popupStyle.zIndex = transfer ? nextSubZIndex() : nextZIndex()
158
+ }
159
+ }
160
+ }
161
+
162
+ const handleVisible = () => {
163
+ const { modelValue } = props
164
+ if (modelValue) {
165
+ open()
166
+ } else {
167
+ close()
168
+ }
169
+ }
170
+
171
+ const tagMethods: ContextMenuMethods = {
172
+ dispatchEvent,
173
+ open,
174
+ close
175
+ }
176
+
177
+ const handleItemClickEvent = (evnt: MouseEvent, item: VxeContextMenuDefines.MenuFirstOption | VxeContextMenuDefines.MenuChildOption) => {
178
+ dispatchEvent('option-click', { option: item }, evnt)
179
+ close()
180
+ }
181
+
182
+ const handleItemMouseenterEvent = (evnt: MouseEvent, item: VxeContextMenuDefines.MenuFirstOption | VxeContextMenuDefines.MenuChildOption, parentitem?: VxeContextMenuDefines.MenuFirstOption) => {
183
+ reactData.activeOption = parentitem || item
184
+ reactData.activeChildOption = parentitem ? item : null
185
+ }
186
+
187
+ const handleItemMouseleaveEvent = () => {
188
+ reactData.activeOption = null
189
+ reactData.activeChildOption = null
190
+ }
191
+
192
+ const handleGlobalMousedownEvent = (evnt: MouseEvent) => {
193
+ const { visible } = reactData
194
+ if (visible) {
195
+ const el = refElem.value
196
+ if (!getEventTargetNode(evnt, el, '').flag) {
197
+ close()
198
+ }
199
+ }
200
+ }
201
+
202
+ const tagPrivateMethods: ContextMenuPrivateMethods = {
203
+ }
204
+
205
+ Object.assign($xeContextMenu, tagMethods, tagPrivateMethods)
206
+
207
+ const renderMenuItem = (item: VxeContextMenuDefines.MenuFirstOption | VxeContextMenuDefines.MenuChildOption, hasChildMenus?: boolean) => {
208
+ const { visible, disabled, loading } = item
209
+ if (visible === false) {
210
+ return renderEmptyElement($xeContextMenu)
211
+ }
212
+ const prefixOpts = Object.assign({}, item.prefixConfig)
213
+ const prefixIcon = prefixOpts.icon || item.prefixIcon
214
+ const suffixOpts = Object.assign({}, item.suffixConfig)
215
+ const suffixIcon = suffixOpts.icon || item.suffixIcon
216
+ const menuContent = loading ? getI18n('vxe.contextMenu.loadingText') : getFuncText(item.name)
217
+ return h('div', {
218
+ class: ['vxe-context-menu--item-inner', {
219
+ 'is--disabled': disabled,
220
+ 'is--loading': loading
221
+ }]
222
+ }, [
223
+ h('div', {
224
+ class: ['vxe-context-menu--item-prefix', prefixOpts.className || '']
225
+ }, loading
226
+ ? [
227
+ h('span', {
228
+ key: '1'
229
+ }, [
230
+ h('i', {
231
+ class: getIcon().CONTEXT_MENU_OPTION_LOADING
232
+ })
233
+ ])
234
+ ]
235
+ : [
236
+ prefixIcon && XEUtils.isFunction(prefixIcon)
237
+ ? h('span', {
238
+ key: '2'
239
+ }, getSlotVNs(prefixIcon({})))
240
+ : h('span', {
241
+ key: '3'
242
+ }, [
243
+ h('i', {
244
+ class: prefixIcon
245
+ })
246
+ ]),
247
+ prefixOpts.content
248
+ ? h('span', {
249
+ key: '4'
250
+ }, `${prefixOpts.content || ''}`)
251
+ : renderEmptyElement($xeContextMenu)
252
+ ]),
253
+ h('div', {
254
+ class: 'vxe-context-menu--item-label'
255
+ }, menuContent),
256
+ !loading && (suffixIcon || suffixOpts.content)
257
+ ? h('div', {
258
+ class: ['vxe-context-menu--item-suffix', suffixOpts.className || '']
259
+ }, [
260
+ suffixIcon && XEUtils.isFunction(suffixIcon)
261
+ ? h('span', {
262
+ key: '2'
263
+ }, getSlotVNs(suffixIcon({})))
264
+ : h('span', {
265
+ key: '3'
266
+ }, [
267
+ h('i', {
268
+ class: suffixIcon
269
+ })
270
+ ]),
271
+ suffixOpts.content
272
+ ? h('span', {
273
+ key: '4'
274
+ }, `${suffixOpts.content || ''}`)
275
+ : renderEmptyElement($xeContextMenu)
276
+ ])
277
+ : renderEmptyElement($xeContextMenu),
278
+ hasChildMenus
279
+ ? h('div', {
280
+ class: 'vxe-context-menu--item-subicon'
281
+ }, [
282
+ h('i', {
283
+ class: getIcon().CONTEXT_MENU_CHILDREN
284
+ })
285
+ ])
286
+ : renderEmptyElement($xeContextMenu)
287
+ ])
288
+ }
289
+
290
+ const renderMenus = () => {
291
+ const { activeOption, activeChildOption } = reactData
292
+ const menuGroups = computeMenuGroups.value
293
+ const mgVNs: VNode[] = []
294
+ menuGroups.forEach((menuList, gIndex) => {
295
+ const moVNs: VNode[] = []
296
+ menuList.forEach((firstItem, i) => {
297
+ const { children } = firstItem
298
+ const hasChildMenus = children && children.some((child) => child.visible !== false)
299
+ moVNs.push(
300
+ h('div', {
301
+ key: `${gIndex}_${i}`,
302
+ class: ['vxe-context-menu--item-wrapper vxe-context-menu--first-item', {
303
+ 'is--active': activeOption === firstItem
304
+ }],
305
+ onClick (evnt) {
306
+ handleItemClickEvent(evnt, firstItem)
307
+ },
308
+ onMouseenter (evnt) {
309
+ handleItemMouseenterEvent(evnt, firstItem)
310
+ },
311
+ onMouseleave: handleItemMouseleaveEvent
312
+ }, [
313
+ hasChildMenus
314
+ ? h('div', {
315
+ class: 'vxe-context-menu--children-wrapper'
316
+ }, children.map(twoItem => {
317
+ return h('div', {
318
+ class: ['vxe-context-menu--item-wrapper vxe-context-menu--child-item', {
319
+ 'is--active': activeChildOption === twoItem
320
+ }],
321
+ onClick (evnt) {
322
+ handleItemClickEvent(evnt, twoItem)
323
+ },
324
+ onMouseenter (evnt) {
325
+ handleItemMouseenterEvent(evnt, twoItem, firstItem)
326
+ },
327
+ onMouseleave: handleItemMouseleaveEvent
328
+ }, [
329
+ renderMenuItem(twoItem)
330
+ ])
331
+ }))
332
+ : renderEmptyElement($xeContextMenu),
333
+ renderMenuItem(firstItem, hasChildMenus)
334
+ ])
335
+ )
336
+ })
337
+ mgVNs.push(
338
+ h('div', {
339
+ key: gIndex,
340
+ class: 'vxe-context-menu--group-wrapper'
341
+ }, moVNs)
342
+ )
343
+ })
344
+ return mgVNs
345
+ }
346
+
347
+ const renderVN = () => {
348
+ const { className, position, destroyOnClose } = props
349
+ const { visible, popupStyle, childPos } = reactData
350
+ const vSize = computeSize.value
351
+ return h('div', {
352
+ ref: refElem,
353
+ class: ['vxe-context-menu vxe-context-menu--wrapper', position === 'fixed' ? ('is--' + position) : 'is--absolute', `cp--${childPos === 'left' ? childPos : 'right'}`, className || '', {
354
+ [`size--${vSize}`]: vSize,
355
+ 'is--visible': visible
356
+ }],
357
+ style: popupStyle
358
+ }, (destroyOnClose ? visible : true) ? renderMenus() : [])
359
+ }
360
+
361
+ watch(computeTopAndLeft, () => {
362
+ updateLocate()
363
+ })
364
+
365
+ watch(() => props.modelValue, () => {
366
+ handleVisible()
367
+ })
368
+
369
+ handleVisible()
370
+
371
+ onMounted(() => {
372
+ globalEvents.on($xeContextMenu, 'mousedown', handleGlobalMousedownEvent)
373
+ })
374
+
375
+ onBeforeUnmount(() => {
376
+ globalEvents.off($xeContextMenu, 'mousedown')
377
+ XEUtils.assign(reactData, createReactData())
378
+ XEUtils.assign(internalData, createInternalData())
379
+ })
380
+
381
+ $xeContextMenu.renderVN = renderVN
382
+
383
+ return $xeContextMenu
384
+ },
385
+ render () {
386
+ return this.renderVN()
387
+ }
388
+ })